import type { FindResult, FunctionLike, HttpMethod, Nextable, RouteMatch } from "./types.js";
export type Route<H> = {
    method: HttpMethod | "";
    fns: (H | Router<H extends FunctionLike ? H : never>)[];
    isMiddle: boolean;
} & ({
    keys: string[] | false;
    pattern: RegExp;
} | {
    matchAll: true;
});
export declare class Router<H extends FunctionLike> {
    base: string;
    routes: Route<Nextable<H>>[];
    constructor(base?: string, routes?: Route<Nextable<H>>[]);
    add(method: HttpMethod | "", route: RouteMatch | Nextable<H>, ...fns: Nextable<H>[]): this;
    use(base: RouteMatch | Nextable<H> | Router<H>, ...fns: (Nextable<H> | Router<H>)[]): this;
    clone(base?: string): Router<H>;
    static exec<H extends FunctionLike>(fns: Nextable<H>[], ...args: Parameters<H>): Promise<unknown>;
    find(method: HttpMethod, pathname: string): FindResult<H>;
}
