/// /// import type { Readable } from 'node:stream'; import type { HttpMethod } from 'router-tree-map'; import type { Type } from './annotations/controller.annotation.js'; import { ControllerDependencyCollector } from './annotations/controller.annotation.js'; import type { RouteMetadata, PathMap } from './route-resolve.js'; import type { Middleware, Ingress, NextFn, CoreContext } from '@ingress/core'; import type { Func } from './type-resolver.js'; export { ControllerDependencyCollector }; export { Route } from './annotations/route.annotation.js'; export type Pathname = string; export type QueryString = string; export declare function readUrl(path?: string): [Pathname, QueryString]; export declare class Router { private collector; metadata: Set; registeredMetadata: Map; hasUpgrade: boolean; Controller: ControllerDependencyCollector; private map; private app; private _root; constructor({ routes }?: { routes?: Iterable>; }); initializeContext(ctx: RouterContext): RouterContext; start(app: Ingress, next: NextFn): Promise<{ router: Router; }>; private typeResolver; registerTypeResolver(type: Type, resolver: Func): this; registerTypePredicateResolver(predicate: Func, resolver: Func): this; registerRouteClass(type: Type): this; registerRouteMetadata(routeMetadata: RouteMetadata): this; on(method: HttpMethod, route: string, handle: Handle): Router; middleware(context: RouterContext, next: any): any; } export declare class RouteData { params: ParamEntries; exec: Handle; constructor(params: ParamEntries, exec: Handle); } export type Body = any; export type ParamEntries = [string, string][]; export type Handle = Middleware; export interface RouterContext extends CoreContext { app: Ingress; request: { method: string; body: any; pathname: string; searchParams: URLSearchParams; headers: Record; parse(options: { mode: 'string'; } & ParseOptions): Promise; parse(options: { mode: 'buffer'; } & ParseOptions): Promise; parse(options: { mode: 'json'; } & ParseOptions): Promise; parse(options: { mode: 'stream'; } & ParseOptions): Readable; toRequest(): Request; }; response: { code: (code: number) => void; }; route: RouteData | null; } export type ParseOptions = { sizeLimit?: number; deserializer?: (body: string) => T | Promise; };