Router overview
Added in v1.0.0
Table of contents
combinators
catchAll
Signature
export declare const catchAll: {
<E, R2, E2>(
f: (e: E) => Route.Handler<R2, E2>
): <R>(
self: Router<R, E>
) => Router<
| Exclude<R2, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E2
>
<R, E, R2, E2>(
self: Router<R, E>,
f: (e: E) => Route.Handler<R2, E2>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R2, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E2
>
}
Added in v1.0.0
catchAllCause
Signature
export declare const catchAllCause: {
<E, R2, E2>(
f: (e: Cause.Cause<E>) => Route.Handler<R2, E2>
): <R>(
self: Router<R, E>
) => Router<
| Exclude<R2, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E2
>
<R, E, R2, E2>(
self: Router<R, E>,
f: (e: Cause.Cause<E>) => Route.Handler<R2, E2>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R2, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E2
>
}
Added in v1.0.0
catchTag
Signature
export declare const catchTag: {
<K extends E extends { _tag: string } ? E["_tag"] : never, E, R1, E1>(
k: K,
f: (e: Extract<E, { _tag: K }>) => Route.Handler<R1, E1>
): <R>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | Exclude<E, { _tag: K }>
>
<R, E, K extends E extends { _tag: string } ? E["_tag"] : never, R1, E1>(
self: Router<R, E>,
k: K,
f: (e: Extract<E, { _tag: K }>) => Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | Exclude<E, { _tag: K }>
>
}
Added in v1.0.0
catchTags
Signature
export declare const catchTags: {
<
E,
Cases extends E extends { _tag: string }
? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Route.Handler<any, any>) | undefined }
: {}
>(
cases: Cases
): <R>(
self: Router<R, E>
) => Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<
{
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<infer R, any, any> ? R : never
}[keyof Cases],
Scope.Scope | ServerRequest.ServerRequest | RouteContext
>,
| Exclude<E, { _tag: keyof Cases }>
| {
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<any, infer E, any> ? E : never
}[keyof Cases]
>
<
R,
E,
Cases extends E extends { _tag: string }
? { [K in E["_tag"]]+?: ((error: Extract<E, { _tag: K }>) => Route.Handler<any, any>) | undefined }
: {}
>(
self: Router<R, E>,
cases: Cases
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<
{
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<infer R, any, any> ? R : never
}[keyof Cases],
Scope.Scope | ServerRequest.ServerRequest | RouteContext
>,
| Exclude<E, { _tag: keyof Cases }>
| {
[K in keyof Cases]: Cases[K] extends (...args: Array<any>) => Effect.Effect<any, infer E, any> ? E : never
}[keyof Cases]
>
}
Added in v1.0.0
concat
Signature
export declare const concat: {
<R1, E1>(that: Router<R1, E1>): <R, E>(self: Router<R, E>) => Router<R1 | R, E1 | E>
<R, E, R1, E1>(self: Router<R, E>, that: Router<R1, E1>): Router<R | R1, E | E1>
}
Added in v1.0.0
prefixAll
Signature
export declare const prefixAll: {
(prefix: PathInput): <R, E>(self: Router<R, E>) => Router<R, E>
<R, E>(self: Router<R, E>, prefix: PathInput): Router<R, E>
}
Added in v1.0.0
provideService
Signature
export declare const provideService: {
<T extends Context.Tag<any, any>>(
tag: T,
service: Context.Tag.Service<T>
): <R, E>(
self: Router<R, E>
) => Router<
Exclude<Exclude<R, Context.Tag.Identifier<T>>, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E
>
<R, E, T extends Context.Tag<any, any>>(
self: Router<R, E>,
tag: T,
service: Context.Tag.Service<T>
): Router<Exclude<Exclude<R, Context.Tag.Identifier<T>>, Scope.Scope | ServerRequest.ServerRequest | RouteContext>, E>
}
Added in v1.0.0
provideServiceEffect
Signature
export declare const provideServiceEffect: {
<T extends Context.Tag<any, any>, R1, E1>(
tag: T,
effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<Exclude<R, Context.Tag.Identifier<T>>, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, T extends Context.Tag<any, any>, R1, E1>(
self: Router<R, E>,
tag: T,
effect: Effect.Effect<R1, E1, Context.Tag.Service<T>>
): Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<Exclude<R, Context.Tag.Identifier<T>>, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
use
Signature
export declare const use: {
<R, E, R1, E1>(
f: (self: Route.Handler<R, E>) => App.Default<R1, E1>
): (self: Router<R, E>) => Router<Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>, E1>
<R, E, R1, E1>(
self: Router<R, E>,
f: (self: Route.Handler<R, E>) => App.Default<R1, E1>
): Router<Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>, E1>
}
Added in v1.0.0
constructors
empty
Signature
export declare const empty: Router<never, never>
Added in v1.0.0
fromIterable
Signature
export declare const fromIterable: <R, E>(routes: Iterable<Route<R, E>>) => Router<R, E>
Added in v1.0.0
makeRoute
Signature
export declare const makeRoute: <R, E>(
method: Method.Method,
path: PathInput,
handler: Route.Handler<R, E>,
prefix?: Option.Option<string>
) => Route<Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>, E>
Added in v1.0.0
models
PathInput (type alias)
Signature
export type PathInput = `/${string}` | "*"
Added in v1.0.0
Route (interface)
Signature
export interface Route<R, E> {
readonly [RouteTypeId]: RouteTypeId
readonly method: Method.Method | "*"
readonly path: PathInput
readonly handler: Route.Handler<R, E>
readonly prefix: Option.Option<string>
}
Added in v1.0.0
RouteContext (interface)
Signature
export interface RouteContext {
readonly [RouteContextTypeId]: RouteContextTypeId
readonly params: Readonly<Record<string, string | undefined>>
readonly searchParams: Readonly<Record<string, string>>
}
Added in v1.0.0
Router (interface)
Signature
export interface Router<R, E> extends App.Default<Exclude<R, RouteContext>, E | Error.RouteNotFound> {
readonly [TypeId]: TypeId
readonly routes: Chunk.Chunk<Route<R, E>>
readonly mounts: Chunk.Chunk<readonly [string, App.Default<R, E>]>
}
Added in v1.0.0
route context
RouteContext
Signature
export declare const RouteContext: Context.Tag<RouteContext, RouteContext>
Added in v1.0.0
params
Signature
export declare const params: Effect.Effect<RouteContext, never, Readonly<Record<string, string | undefined>>>
Added in v1.0.0
schemaParams
Signature
export declare const schemaParams: <I extends Readonly<Record<string, string>>, A>(
schema: Schema.Schema<I, A>
) => Effect.Effect<RouteContext, ParseResult.ParseError, A>
Added in v1.0.0
schemaPathParams
Signature
export declare const schemaPathParams: <I extends Readonly<Record<string, string>>, A>(
schema: Schema.Schema<I, A>
) => Effect.Effect<RouteContext, ParseResult.ParseError, A>
Added in v1.0.0
schemaSearchParams
Signature
export declare const schemaSearchParams: <I extends Readonly<Record<string, string>>, A>(
schema: Schema.Schema<I, A>
) => Effect.Effect<RouteContext, ParseResult.ParseError, A>
Added in v1.0.0
searchParams
Signature
export declare const searchParams: Effect.Effect<RouteContext, never, Readonly<Record<string, string>>>
Added in v1.0.0
routing
all
Signature
export declare const all: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
del
Signature
export declare const del: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
get
Signature
export declare const get: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
head
Signature
export declare const head: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
mount
Signature
export declare const mount: {
<R1, E1>(path: `/${string}`, that: Router<R1, E1>): <R, E>(self: Router<R, E>) => Router<R1 | R, E1 | E>
<R, E, R1, E1>(self: Router<R, E>, path: `/${string}`, that: Router<R1, E1>): Router<R | R1, E | E1>
}
Added in v1.0.0
mountApp
Signature
export declare const mountApp: {
<R1, E1>(
path: `/${string}`,
that: App.Default<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: `/${string}`,
that: App.Default<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
options
Signature
export declare const options: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
patch
Signature
export declare const patch: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
post
Signature
export declare const post: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
put
Signature
export declare const put: {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
route
Signature
export declare const route: (method: Method.Method | "*") => {
<R1, E1>(
path: PathInput,
handler: Route.Handler<R1, E1>
): <R, E>(
self: Router<R, E>
) => Router<
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E1 | E
>
<R, E, R1, E1>(
self: Router<R, E>,
path: PathInput,
handler: Route.Handler<R1, E1>
): Router<
| Exclude<R, Scope.Scope | ServerRequest.ServerRequest | RouteContext>
| Exclude<R1, Scope.Scope | ServerRequest.ServerRequest | RouteContext>,
E | E1
>
}
Added in v1.0.0
type ids
RouteContextTypeId
Signature
export declare const RouteContextTypeId: typeof RouteContextTypeId
Added in v1.0.0
RouteContextTypeId (type alias)
Signature
export type RouteContextTypeId = typeof RouteContextTypeId
Added in v1.0.0
RouteTypeId
Signature
export declare const RouteTypeId: typeof RouteTypeId
Added in v1.0.0
RouteTypeId (type alias)
Signature
export type RouteTypeId = typeof RouteTypeId
Added in v1.0.0
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
utils
Route (namespace)
Added in v1.0.0
Handler (type alias)
Signature
export type Handler<R, E> = Effect.Effect<
R | RouteContext | ServerRequest.ServerRequest,
E,
ServerResponse.ServerResponse
>
Added in v1.0.0
Router (namespace)
Added in v1.0.0
ExcludeProvided (type alias)
Signature
export type ExcludeProvided<A> = Exclude<A, RouteContext | ServerRequest.ServerRequest | Scope.Scope>
Added in v1.0.0