import { Key } from 'path-to-regexp'; declare const METHODS: readonly ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"]; type Methods = (typeof METHODS)[number]; type Request = { method: Methods; url: string; host: string; query: ExtractQueryParams>; params: ExtractRouteParams>; headers: HttpHeader; body: Record | null; }; type Response = { setHeader(key: string, value: string): Response; status: (code: number) => Response; send: (data: object | string | number | unknown[]) => Response; json: (data: object | string | number | unknown[]) => Response; end: () => void; }; type Next = () => void; type Handler = (req: Request, res: Response, next: Next) => void | Promise | Response | Promise; type ExtractRouteParams = T extends `${string}/:${infer Param}/${infer Rest}` ? { [K in Param | keyof ExtractRouteParams<`/${Rest}`>]: string; } : T extends `${string}/:${infer Param}` ? { [K in Param]: string; } : Record; type RemoveParentheses = T extends `${infer Before}\(${string}\)${infer After}` ? `${Before}${After}` : T; type ExtractQueryParams = string extends T ? Record : T extends `${string}?${infer U}` ? U extends `${infer Query}&${infer Rest}` ? Record & ExtractQueryParams<`?${Rest}`> : U extends `${infer Query}` ? Record : Record : Record; type RouterError = Error; type HttpHeader = { [key: string]: string | string[] | undefined; }; type UseHandler = (handler: Handler) => RestRouter; type UseRouterWithPath = (path: T, router: RestRouter) => RestRouter; type UseRouter = (router: RestRouter) => RestRouter; type ErrorHandler = (err: RouterError, req: Request, res: Response, next: Next) => void | Promise; type UseErrorHandler = (handler: ErrorHandler) => RestRouter; type Route = { method?: Methods; path: string | null; handler: Handler | RestRouter; regexp: RegExp; keys: Key[]; }; type RestRouter = { get routes(): Route[]; get errorHandlers(): ErrorHandler[]; use: UseHandler & UseRouter & UseRouterWithPath; useError: UseErrorHandler; METHOD: (method: Methods, path: Path, handler: Handler) => RestRouter; delete: (path: Path, handler: Handler) => RestRouter; get: (path: Path, handler: Handler) => RestRouter; head: (path: Path, handler: Handler) => RestRouter; options: (path: Path, handler: Handler) => RestRouter; patch: (path: Path, handler: Handler) => RestRouter; post: (path: Path, handler: Handler) => RestRouter; put: (path: Path, handler: Handler) => RestRouter; }; type AnyFunction = (...args: any[]) => any; declare const createRouter: () => RestRouter; declare const isHandler: (o: RestRouter | string | Handler) => o is Handler; declare const enableLogger: () => void; export { AnyFunction as A, ErrorHandler as E, Handler as H, Next as N, Request as R, UseHandler as U, Response as a, RouterError as b, createRouter as c, HttpHeader as d, enableLogger as e, UseRouterWithPath as f, UseRouter as g, UseErrorHandler as h, isHandler as i, Route as j, RestRouter as k };