import * as dntShim from "./_dnt.shims.js";
export type ErrorHandler = (error: unknown) => Response | Promise<Response>;
export interface RouterOptions {
    errorHandler?: ErrorHandler;
}
export interface Context {
    match: URLPatternResult;
    request: Request;
}
export type PathPattern = string | dntShim.URLPatternInput | dntShim.URLPattern;
export type RouteHandler = (ctx: Context) => Response | Promise<Response>;
export type MiddlewareNextHandler = (ctx?: Context) => Response | Promise<Response>;
export type MiddlewareHandler = (ctx: Context, next: MiddlewareNextHandler) => Response | Promise<Response>;
export interface RouteParams {
    method: string | string[];
    pattern: PathPattern;
    middleware?: MiddlewareHandler | MiddlewareHandler[] | null;
}
export interface GroupParams {
    prefix?: string | null;
    domain?: string | string[] | null;
    middleware?: MiddlewareHandler | MiddlewareHandler[] | null;
}
export declare class Router {
    _groups: Group[];
    _definedMiddlewares: MiddlewareHandler[];
    _routes: Map<string, [pattern: dntShim.URLPattern, handler: RouteHandler, middlewares: MiddlewareHandler[]][]>;
    _errorHandler: ErrorHandler;
    constructor(options?: RouterOptions);
    use(...middlewares: MiddlewareHandler[]): void;
    group({ domain, prefix, middleware }: GroupParams, handler: () => void): void;
    get(pattern: PathPattern, fn: RouteHandler): void;
    head(pattern: PathPattern, fn: RouteHandler): void;
    post(pattern: PathPattern, fn: RouteHandler): void;
    put(pattern: PathPattern, fn: RouteHandler): void;
    del(pattern: PathPattern, fn: RouteHandler): void;
    options(pattern: PathPattern, fn: RouteHandler): void;
    patch(pattern: PathPattern, fn: RouteHandler): void;
    all(pattern: PathPattern, fn: RouteHandler): void;
    addRoute(route: RouteParams, fn: RouteHandler): void;
    dispatch(request: Request): Promise<Response>;
}
