/// import { URL } from 'url'; import { IncomingHttpHeaders, OutgoingHttpHeaders } from 'http'; import * as http from 'http'; export declare type IResponse = { rawContent: string | Buffer; headers: OutgoingHttpHeaders; statusCode: number; statusMessage: string; }; export declare type RequestMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE' | 'HEAD'; export interface ILayer, TResponse extends IResponse, TContext> { route(template: string, method?: RequestMethod): IController; context(resolver: ContextResolver): ILayer; middleware = TRequest, MResponse extends IResponse = TResponse>(middleware: Middleware): ILayer; } export declare type NextFunction, TResponse extends IResponse> = (request: TRequest) => Promise; export declare type Middleware, TResponse extends IResponse, MRequest extends IRequest = TRequest, MResponse extends IResponse = TResponse> = (this: TContext, req: TRequest, next: NextFunction, ctx: TContext) => Promise; export declare type ArbitraryRequestParams = { [index: string]: string; }; export declare type ArbitraryRequestQuery = { [index: string]: string | string[]; }; export declare type RouteHandler, TResponse extends IResponse, C> = (this: C, req: TRequest, ctx: C) => Promise | TResponse | void; export declare type BaseRequest

= { params: P; query: Q; headers: IncomingHttpHeaders; url: URL; }; export interface IRequest

extends BaseRequest { body: () => Promise; json: () => Promise; request: http.IncomingMessage; response: http.ServerResponse; } export interface IController, TResponse extends IResponse, TContext, TLocalContext = TContext> { handle(handler: RouteHandler): ILayer; context(resolver: ContextResolver): IController; } export declare type SyncContextResolver = (originalContext: TOriginal) => TNew; export declare type AsyncContextResolver = (originalContext: TOriginal) => Promise; export declare type ContextResolver = SyncContextResolver | AsyncContextResolver;