Server constructor

Server({
  1. required Iterable<RouteNode> routes,
  2. Map<String, ServerFunctionBinding> functions = const <String, ServerFunctionBinding>{},
  3. Iterable<Middleware> middleware = const <Middleware>[],
  4. Iterable<Module> modules()?,
  5. InvocationModuleFactory? invocationModules,
  6. Iterable<RouteNode> flutterRoutes = const <RouteNode>[],
  7. Serializer? serializer,
  8. Renderer? renderer,
  9. ServerErrorHandler? onError,
  10. ServerCloseHandler? onClose,
  11. String functionPath = '/__odroe/functions',
  12. int maxFunctionPayload = defaultMaxFunctionPayload,
  13. int maxFunctionResponseFrameBytes = defaultMaxFunctionResponseFrameBytes,
  14. bool exposeErrors = false,
  15. bool allowRpcWithoutOrigin = false,
  16. Uri? publicOrigin,
})

Creates a server from explicitly selected routes and capabilities.

Implementation

Server({
  required Iterable<RouteNode> routes,
  Map<String, ServerFunctionBinding> functions =
      const <String, ServerFunctionBinding>{},
  Iterable<Middleware> middleware = const <Middleware>[],
  Iterable<Module> Function()? modules,
  this.invocationModules,
  Iterable<RouteNode> flutterRoutes = const <RouteNode>[],
  Serializer? serializer,
  this.renderer,
  ServerErrorHandler? onError,
  ServerCloseHandler? onClose,
  String functionPath = '/__odroe/functions',
  this.maxFunctionPayload = defaultMaxFunctionPayload,
  this.maxFunctionResponseFrameBytes = defaultMaxFunctionResponseFrameBytes,
  this.exposeErrors = false,
  this.allowRpcWithoutOrigin = false,
  Uri? publicOrigin,
}) : publicOrigin = publicOrigin == null
         ? null
         : validatePublicOrigin(publicOrigin),
     routes = List<RouteNode>.unmodifiable(routes),
     functions = Map<String, ServerFunctionBinding>.unmodifiable(functions),
     middleware = List<Middleware>.unmodifiable(middleware),
     modules = modules ?? _emptyModules,
     serializer = serializer ?? Serializer(),
     functionPath = normalizeFunctionPath(functionPath),
     onError = onError ?? defaultServerErrorHandler,
     _onClose = onClose,
     _flutterRoutes = HashSet<Object>.identity()
       ..addAll(flutterRoutes.map((route) => route.identity)) {
  if (maxFunctionPayload <= 0) {
    throw ArgumentError.value(
      maxFunctionPayload,
      'maxFunctionPayload',
      'Must be greater than zero.',
    );
  }
  if (maxFunctionResponseFrameBytes < minimumFunctionResponseFrameBytes) {
    throw ArgumentError.value(
      maxFunctionResponseFrameBytes,
      'maxFunctionResponseFrameBytes',
      'Must be at least $minimumFunctionResponseFrameBytes bytes.',
    );
  }
  _matcher = RouteMatcher(this.routes);
}