/** * @since 1.0.0 */ import type * as Cause from "effect/Cause"; import type * as Chunk from "effect/Chunk"; import type * as Context from "effect/Context"; import type * as Effect from "effect/Effect"; import type { FiberRef } from "effect/FiberRef"; import type { Inspectable } from "effect/Inspectable"; import type * as Layer from "effect/Layer"; import type * as Option from "effect/Option"; import type * as ParseResult from "effect/ParseResult"; import type * as Schema from "effect/Schema"; import type { ParseOptions } from "effect/SchemaAST"; import type * as Scope from "effect/Scope"; import type { RouterConfig } from "find-my-way-ts"; import type * as Etag from "./Etag.js"; import type { FileSystem } from "./FileSystem.js"; import type * as App from "./HttpApp.js"; import type * as Method from "./HttpMethod.js"; import type * as Middleware from "./HttpMiddleware.js"; import type * as Platform from "./HttpPlatform.js"; import type * as HttpServer from "./HttpServer.js"; import type * as Error from "./HttpServerError.js"; import type * as ServerRequest from "./HttpServerRequest.js"; import type * as Respondable from "./HttpServerRespondable.js"; import type * as ServerResponse from "./HttpServerResponse.js"; import type { Path } from "./Path.js"; /** * @since 1.0.0 * @category type ids */ export declare const TypeId: unique symbol; /** * @since 1.0.0 * @category type ids */ export type TypeId = typeof TypeId; /** * @since 1.0.0 * @category models */ export interface HttpRouter extends App.Default>, Inspectable { readonly [TypeId]: TypeId; readonly routes: Chunk.Chunk>; readonly mounts: Chunk.Chunk, options?: { readonly includePrefix?: boolean | undefined; } | undefined ]>; } /** * @since 1.0.0 */ export declare namespace HttpRouter { /** * @since 1.0.0 */ type Provided = RouteContext | ServerRequest.HttpServerRequest | ServerRequest.ParsedSearchParams | Scope.Scope; /** * @since 1.0.0 */ type ExcludeProvided = Exclude; /** * @since 1.0.0 */ interface Service { readonly router: Effect.Effect>; readonly addRoute: (route: Route) => Effect.Effect; readonly all: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly get: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly post: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly put: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly patch: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly del: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly head: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly options: (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined) => Effect.Effect; readonly mount: (path: `/${string}`, router: HttpRouter) => Effect.Effect; readonly mountApp: (path: `/${string}`, router: App.Default, options?: { readonly includePrefix?: boolean | undefined; } | undefined) => Effect.Effect; readonly concat: (router: HttpRouter) => Effect.Effect; } /** * @since 1.0.0 */ type DefaultServices = Platform.HttpPlatform | Etag.Generator | FileSystem | Path; /** * @since 1.0.0 */ interface TagClass extends Context.Tag> { new (_: never): Context.TagClassShape>; readonly Live: Layer.Layer; readonly router: Effect.Effect, never, Self>; readonly use: (f: (router: Service) => Effect.Effect) => Layer.Layer>; readonly unwrap: (f: (router: HttpRouter) => Layer.Layer) => Layer.Layer; readonly serve: (middleware?: Middleware.HttpMiddleware.Applied) => Layer.Layer>; } } /** * @since 1.0.0 * @category type ids */ export declare const RouteTypeId: unique symbol; /** * @since 1.0.0 * @category type ids */ export type RouteTypeId = typeof RouteTypeId; /** * @since 1.0.0 * @category models */ export type PathInput = `/${string}` | "*"; /** * @since 1.0.0 * @category models */ export interface Route extends Inspectable { readonly [RouteTypeId]: RouteTypeId; readonly method: Method.HttpMethod | "*"; readonly path: PathInput; readonly handler: Route.Handler; readonly prefix: Option.Option; readonly uninterruptible: boolean; } /** * @since 1.0.0 */ export declare namespace Route { /** * @since 1.0.0 */ type Handler = App.HttpApp; /** * @since 1.0.0 */ type Middleware = App.HttpApp; } /** * @since 1.0.0 * @category type ids */ export declare const RouteContextTypeId: unique symbol; /** * @since 1.0.0 * @category type ids */ export type RouteContextTypeId = typeof RouteContextTypeId; /** * @since 1.0.0 * @category models */ export interface RouteContext { readonly [RouteContextTypeId]: RouteContextTypeId; readonly params: Readonly>; readonly route: Route; } /** * @since 1.0.0 * @category route context */ export declare const RouteContext: Context.Tag; /** * @since 1.0.0 * @category route context */ export declare const params: Effect.Effect>, never, RouteContext>; /** * @since 1.0.0 * @category route context */ export declare const schemaJson: >; readonly headers: Readonly>; readonly pathParams: Readonly>; readonly searchParams: Readonly | undefined>>; readonly body: any; }>, A>(schema: Schema.Schema, options?: ParseOptions | undefined) => Effect.Effect; /** * @since 1.0.0 * @category route context */ export declare const schemaNoBody: >; readonly headers: Readonly>; readonly pathParams: Readonly>; readonly searchParams: Readonly | undefined>>; }>, A>(schema: Schema.Schema, options?: ParseOptions | undefined) => Effect.Effect; /** * @since 1.0.0 * @category route context */ export declare const schemaParams: | undefined>>, R>(schema: Schema.Schema, options?: ParseOptions | undefined) => Effect.Effect; /** * @since 1.0.0 * @category route context */ export declare const schemaPathParams: >, R>(schema: Schema.Schema, options?: ParseOptions | undefined) => Effect.Effect; /** * @since 1.0.0 * @category router config */ export declare const currentRouterConfig: FiberRef>; /** * @since 1.0.0 * @category router config */ export declare const withRouterConfig: { /** * @since 1.0.0 * @category router config */ (config: Partial): (effect: Effect.Effect) => Effect.Effect; /** * @since 1.0.0 * @category router config */ (effect: Effect.Effect, config: Partial): Effect.Effect; }; /** * @since 1.0.0 * @category router config */ export declare const setRouterConfig: (config: Partial) => Layer.Layer; /** * @since 1.0.0 * @category constructors */ export declare const empty: HttpRouter; /** * @since 1.0.0 * @category constructors */ export declare const fromIterable: >(routes: Iterable) => HttpRouter ? E : never, R extends Route ? Env : never>; /** * @since 1.0.0 * @category constructors */ export declare const makeRoute: (method: Method.HttpMethod | "*", path: PathInput, handler: Route.Handler, options?: { readonly prefix?: string | undefined; readonly uninterruptible?: boolean | undefined; } | undefined) => Route>; /** * @since 1.0.0 * @category utils */ export declare const prefixPath: { /** * @since 1.0.0 * @category utils */ (prefix: string): (self: string) => string; /** * @since 1.0.0 * @category utils */ (self: string, prefix: string): string; }; /** * @since 1.0.0 * @category combinators */ export declare const prefixAll: { /** * @since 1.0.0 * @category combinators */ (prefix: PathInput): (self: HttpRouter) => HttpRouter; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, prefix: PathInput): HttpRouter; }; /** * @since 1.0.0 * @category combinators */ export declare const append: { /** * @since 1.0.0 * @category combinators */ (route: Route): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, route: Route): HttpRouter>; }; /** * @since 1.0.0 * @category combinators */ export declare const concat: { /** * @since 1.0.0 * @category combinators */ (that: HttpRouter): (self: HttpRouter) => HttpRouter; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, that: HttpRouter): HttpRouter; }; /** * @since 1.0.0 * @category combinators */ export declare const concatAll: >>(...routers: Routers) => [Routers[number]] extends [HttpRouter] ? HttpRouter : never; /** * @since 1.0.0 * @category routing */ export declare const mount: { /** * @since 1.0.0 * @category routing */ (path: `/${string}`, that: HttpRouter): (self: HttpRouter) => HttpRouter; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: `/${string}`, that: HttpRouter): HttpRouter; }; /** * @since 1.0.0 * @category routing */ export declare const mountApp: { /** * @since 1.0.0 * @category routing */ (path: `/${string}`, that: App.Default, options?: { readonly includePrefix?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter | HttpRouter.ExcludeProvided>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: `/${string}`, that: App.Default, options?: { readonly includePrefix?: boolean | undefined; } | undefined): HttpRouter | HttpRouter.ExcludeProvided>; }; /** * @since 1.0.0 * @category routing */ export declare const route: (method: Method.HttpMethod | "*") => { (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const all: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const get: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const post: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const patch: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const put: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const del: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const head: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category routing */ export declare const options: { /** * @since 1.0.0 * @category routing */ (path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category routing */ (self: HttpRouter, path: PathInput, handler: Route.Handler, options?: { readonly uninterruptible?: boolean | undefined; } | undefined): HttpRouter>; }; /** * @since 1.0.0 * @category combinators */ export declare const use: { /** * @since 1.0.0 * @category combinators */ (f: (self: Route.Middleware) => App.Default): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, f: (self: Route.Middleware) => App.Default): HttpRouter>; }; /** * @since 1.0.0 * @category combinators */ export declare const transform: { /** * @since 1.0.0 * @category combinators */ (f: (self: Route.Handler) => App.HttpApp): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, f: (self: Route.Handler) => App.HttpApp): HttpRouter>; }; /** * @since 1.0.0 * @category combinators */ export declare const catchAll: { /** * @since 1.0.0 * @category combinators */ (f: (e: E) => Route.Handler): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, f: (e: E) => Route.Handler): HttpRouter>; }; /** * @since 1.0.0 * @category combinators */ export declare const catchAllCause: { /** * @since 1.0.0 * @category combinators */ (f: (e: Cause.Cause) => Route.Handler): (self: HttpRouter) => HttpRouter>; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, f: (e: Cause.Cause) => Route.Handler): HttpRouter>; }; /** * @since 1.0.0 * @category combinators */ export declare const catchTag: { /** * @since 1.0.0 * @category combinators */ (k: K, f: (e: Extract) => Route.Handler): (self: HttpRouter) => HttpRouter, R | HttpRouter.ExcludeProvided>; /** * @since 1.0.0 * @category combinators */ (self: HttpRouter, k: K, f: (e: Extract) => Route.Handler): HttpRouter, R | HttpRouter.ExcludeProvided>; }; /** * @since 1.0.0 * @category combinators */ export declare const catchTags: { /** * @since 1.0.0 * @category combinators */ ) => Route.Handler) | undefined; } : {}>(cases: Cases): (self: HttpRouter) => HttpRouter | { [K in keyof Cases]: Cases[K] extends (...args: Array) => Effect.Effect ? E : never; }[keyof Cases], R | HttpRouter.ExcludeProvided<{ [K in keyof Cases]: Cases[K] extends (...args: Array) => Effect.Effect ? R : never; }[keyof Cases]>>; /** * @since 1.0.0 * @category combinators */ ) => Route.Handler) | undefined; } : {}>(self: HttpRouter, cases: Cases): HttpRouter | { [K in keyof Cases]: Cases[K] extends (...args: Array) => Effect.Effect ? E : never; }[keyof Cases], R | HttpRouter.ExcludeProvided<{ [K in keyof Cases]: Cases[K] extends (...args: Array) => Effect.Effect ? R : never; }[keyof Cases]>>; }; /** * @since 1.0.0 * @category combinators */ export declare const provideService: { /** * @since 1.0.0 * @category combinators */ >(tag: T, service: Context.Tag.Service): (self: HttpRouter) => HttpRouter>>; /** * @since 1.0.0 * @category combinators */ >(self: HttpRouter, tag: T, service: Context.Tag.Service): HttpRouter>>; }; /** * @since 1.0.0 * @category combinators */ export declare const provideServiceEffect: { /** * @since 1.0.0 * @category combinators */ , R1, E1>(tag: T, effect: Effect.Effect, E1, R1>): (self: HttpRouter) => HttpRouter> | Exclude, Context.Tag.Identifier>>; /** * @since 1.0.0 * @category combinators */ , R1, E1>(self: HttpRouter, tag: T, effect: Effect.Effect, E1, R1>): HttpRouter> | Exclude, Context.Tag.Identifier>>; }; /** * @since 1.0.0 * @category tags */ export declare const Tag: (id: Name) => () => HttpRouter.TagClass; declare const Default_base: HttpRouter.TagClass; /** * @since 1.0.0 * @category tags */ export declare class Default extends Default_base { } /** * @since 1.0.0 * @category utils */ export declare const toHttpApp: (self: HttpRouter) => Effect.Effect>; export {}; //# sourceMappingURL=HttpRouter.d.ts.map