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 = (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; }