/** * @module * BearMetal Router types */ export interface RouterContext { url: URL; params: Record; state: Record; pattern: URLPattern; request: Request; } export type Handler = ( req: Request, ctx: RouterContext, ) => Promise | Response; export type Middleware = ( req: Request, ctx: RouterContext, next: () => Promise, ) => Promise; export interface RouteConfig { pattern: URLPattern; handlers: { [method: string]: Handler }; } export interface MiddlewareConfig { pattern: URLPattern; handler: Middleware; path: string; } export interface RouteConfigurator { get(handler: Handler): RouteConfigurator; post(handler: Handler): RouteConfigurator; put(handler: Handler): RouteConfigurator; delete(handler: Handler): RouteConfigurator; patch(handler: Handler): RouteConfigurator; options(handler: Handler): RouteConfigurator; }