///
///
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;
};