Skip to main content Link Search Menu Expand Document (external link)

RouterBuilder overview

Build a Router satisfying an Api.Api.

Added in v1.0.0


Table of contents


combining

merge

Signature

export declare const merge: {
  <R1, E1, R2, E2, A1 extends ApiEndpoint.ApiEndpoint.Any, A2 extends ApiEndpoint.ApiEndpoint.Any>(
    builder1: RouterBuilder<A1, E1, R1>,
    builder2: RouterBuilder<A2, E2, R2>
  ): RouterBuilder<RouterBuilder.MergeApiEndpoints<A1, A2>, E1 | E2, R1 | R2>
  <R2, E2, A2 extends ApiEndpoint.ApiEndpoint.Any>(
    builder2: RouterBuilder<A2, E2, R2>
  ): <R1, E1, A1 extends ApiEndpoint.ApiEndpoint.Any>(
    builder1: RouterBuilder<A1, E1, R1>
  ) => RouterBuilder<RouterBuilder.MergeApiEndpoints<A1, A2>, E1 | E2, R1 | R2>
}

Added in v1.0.0

constructors

handle

Handle an endpoint using a handler function.

Signature

export declare const handle: {
  <R2, E2, A extends ApiEndpoint.ApiEndpoint.Any, Endpoint extends A>(
    handler: Handler.Handler<Endpoint, E2, R2>
  ): <R1, E1>(
    builder: RouterBuilder<A, E1, R1>
  ) => RouterBuilder<
    Exclude<A, Endpoint>,
    E1 | Exclude<E2, HttpError.HttpError>,
    | Exclude<R1 | R2, HttpRouter.RouteContext | HttpServerRequest.HttpServerRequest>
    | ApiEndpoint.ApiEndpoint.Context<Endpoint>
  >
  <A extends ApiEndpoint.ApiEndpoint.Any, E2, R2, Id extends ApiEndpoint.ApiEndpoint.Id<A>>(
    id: Id,
    fn: Handler.Handler.Function<ApiEndpoint.ApiEndpoint.ExtractById<A, Id>, E2, R2>
  ): <R1, E1>(
    builder: RouterBuilder<A, E1, R1>
  ) => RouterBuilder<
    ApiEndpoint.ApiEndpoint.ExcludeById<A, Id>,
    E1 | Exclude<E2, HttpError.HttpError>,
    | Exclude<R1 | R2, HttpRouter.RouteContext | HttpServerRequest.HttpServerRequest>
    | ApiEndpoint.ApiEndpoint.Context<ApiEndpoint.ApiEndpoint.ExtractById<A, Id>>
  >
}

Added in v1.0.0

handler

Handle an endpoint using a handler function.

Signature

export declare const handler: <R, E, A extends Api.Api.Any, Id extends Api.Api.Ids<A>>(
  api: A,
  id: Id,
  fn: Handler.Handler.Function<Api.Api.EndpointById<A, Id>, E, R>
) => Handler.Handler<Api.Api.EndpointById<A, Id>, E, R>

Added in v1.0.0

destructors

build

Create an App instance.

Signature

export declare const build: <E, R>(
  builder: RouterBuilder<never, E, R>
) => HttpApp.Default<E, R | SwaggerRouter.SwaggerFiles>

Added in v1.0.0

buildPartial

Create an App instance.

Warning: this function doesn’t enforce all the endpoints are implemented and a running server might not conform the given Api spec.

Signature

export declare const buildPartial: <A extends ApiEndpoint.ApiEndpoint.Any, E, R>(
  builder: RouterBuilder<A, E, R>
) => HttpApp.Default<E, R | SwaggerRouter.SwaggerFiles>

Added in v1.0.0

getRouter

Handle an endpoint using a raw Router.Route.Handler.

Signature

export declare const getRouter: <E, R>(builder: RouterBuilder<any, E, R>) => HttpRouter.HttpRouter<E, R>

Added in v1.0.0

handling

handleRaw

Handle an endpoint using a raw Router.Route.Handler.

Signature

export declare const handleRaw: <
  A extends ApiEndpoint.ApiEndpoint.Any,
  E2,
  R2,
  Id extends ApiEndpoint.ApiEndpoint.Id<A>
>(
  id: Id,
  handler: HttpRouter.Route.Handler<E2, R2>
) => <R1, E1>(
  builder: RouterBuilder<A, E1, R1>
) => RouterBuilder<
  ApiEndpoint.ApiEndpoint.ExcludeById<A, Id>,
  E1 | E2 | ApiEndpoint.ApiEndpoint.Error<ApiEndpoint.ApiEndpoint.ExtractById<A, Id>>,
  | R1
  | ApiEndpoint.ApiEndpoint.Context<ApiEndpoint.ApiEndpoint.ExtractById<A, Id>>
  | Exclude<R2, HttpRouter.RouteContext | HttpServerRequest.HttpServerRequest | Scope.Scope>
>

Added in v1.0.0

make

Create a new unimplemeted RouterBuilder from an Api.

Signature

export declare const make: <A extends Api.Api.Any>(
  api: A,
  options?: Partial<Options>
) => RouterBuilder<Api.Api.Endpoints<A>, never, never>

Added in v1.0.0

mapping

mapRouter

Modify the Router.

Signature

export declare const mapRouter: <A extends ApiEndpoint.ApiEndpoint.Any, E1, E2, R1, R2>(
  fn: (router: HttpRouter.HttpRouter<E1, R1>) => HttpRouter.HttpRouter<E2, R2>
) => (builder: RouterBuilder<A, E1, R1>) => RouterBuilder<A, E2, R2>

Added in v1.0.0

models

Options (interface)

Signature

export interface Options {
  readonly parseOptions: AST.ParseOptions
  readonly enableDocs: boolean
  readonly docsPath: `/${string}`
}

Added in v1.0.0

RouterBuilder (interface)

Signature

export interface RouterBuilder<A extends ApiEndpoint.ApiEndpoint.Any, E, R>
  extends RouterBuilder.Variance<A, E, R>,
    Pipeable.Pipeable {
  readonly remainingEndpoints: ReadonlyArray<A>
  readonly api: Api.Api.Any
  readonly router: HttpRouter.HttpRouter<E, R>
  readonly options: Options
}

Added in v1.0.0

RouterBuilder (namespace)

Added in v1.0.0

Variance (interface)

Signature

export interface Variance<A extends ApiEndpoint.ApiEndpoint.Any, E, R> {
  readonly [TypeId]: {
    readonly _A: Types.Covariant<A>
    readonly _E: Types.Covariant<E>
    readonly _R: Types.Contravariant<R>
  }
}

Added in v1.0.0

Any (type alias)

Any router builder

Signature

export type Any = RouterBuilder<ApiEndpoint.ApiEndpoint.Any, any, any>

Added in v1.0.0

MergeApiEndpoints (type alias)

Signature

export type MergeApiEndpoints<A, B> =
  A extends ApiEndpoint.ApiEndpoint<
    infer Id1,
    ApiRequest.ApiRequest.Any,
    ApiResponse.ApiResponse.Any,
    Security.Security.Any
  >
    ? B extends ApiEndpoint.ApiEndpoint<
        infer Id2,
        ApiRequest.ApiRequest.Any,
        ApiResponse.ApiResponse.Any,
        Security.Security.Any
      >
      ? Id1 extends Id2
        ? A
        : never
      : never
    : never

Added in v1.0.0

refinements

isRouterBuilder

Signature

export declare const isRouterBuilder: (u: unknown) => u is RouterBuilder.Any

Added in v1.0.0

type id

TypeId

Signature

export declare const TypeId: typeof TypeId

Added in v1.0.0

TypeId (type alias)

Signature

export type TypeId = typeof TypeId

Added in v1.0.0