import type { HandlerOptions, Nextable, RouteMatch, RouteShortcutMethod, ValueOrPromise } from "./types.js";
export type RequestHandler<Req extends Request, Ctx> = (req: Req, ctx: Ctx) => ValueOrPromise<Response | void>;
export declare class EdgeRouter<Req extends Request = Request, Ctx = unknown> {
    private router;
    private add;
    all: RouteShortcutMethod<this, RequestHandler<Req, Ctx>>;
    get: RouteShortcutMethod<this, RequestHandler<Req, Ctx>>;
    head: RouteShortcutMethod<this, RequestHandler<Req, Ctx>>;
    post: RouteShortcutMethod<this, RequestHandler<Req, Ctx>>;
    put: RouteShortcutMethod<this, RequestHandler<Req, Ctx>>;
    patch: RouteShortcutMethod<this, RequestHandler<Req, Ctx>>;
    delete: RouteShortcutMethod<this, RequestHandler<Req, Ctx>>;
    use(base: RouteMatch | Nextable<RequestHandler<Req, Ctx>> | EdgeRouter<Req, Ctx>, ...fns: (Nextable<RequestHandler<Req, Ctx>> | EdgeRouter<Req, Ctx>)[]): this;
    private prepareRequest;
    clone(): EdgeRouter<Req, Ctx>;
    run(req: Req, ctx: Ctx): Promise<unknown>;
    handler(options?: HandlerOptions<RequestHandler<Req, Ctx>>): (req: Req, ctx: Ctx) => Promise<any>;
}
export declare function getPathname(req: Request & {
    nextUrl?: URL;
}): string;
export declare function createEdgeRouter<Req extends Request, Ctx>(): EdgeRouter<Req, Ctx>;
