import type { Resolver } from "../hook/event.js";
import type { BoundHandler, Handler as HookHandler } from "../hook/hook.js";
import { Route, type Handler } from "./route.js";
export declare class RouterGroup<T extends Resolver> {
    excludedMiddlewares: Set<string> | null;
    children: Array<RouterGroup<T> | Route<T>>;
    Prefix: string;
    Middlewares: Array<BoundHandler<T>>;
    Group(prefix: string): RouterGroup<T>;
    BindFunc(...middlewareFuncs: Array<(e: T) => unknown>): this;
    Bind(...middlewares: Array<HookHandler<T>>): this;
    Unbind(...middlewareIds: string[]): this;
    Route(method: string, path: string, action: Handler<T>): Route<T>;
    Any(path: string, action: Handler<T>): Route<T>;
    GET(path: string, action: Handler<T>): Route<T>;
    SEARCH(path: string, action: Handler<T>): Route<T>;
    POST(path: string, action: Handler<T>): Route<T>;
    DELETE(path: string, action: Handler<T>): Route<T>;
    PATCH(path: string, action: Handler<T>): Route<T>;
    PUT(path: string, action: Handler<T>): Route<T>;
    HEAD(path: string, action: Handler<T>): Route<T>;
    OPTIONS(path: string, action: Handler<T>): Route<T>;
    HasRoute(method: string, path: string): boolean;
    private hasRoutePattern;
    group(prefix: string): RouterGroup<T>;
    bind(...middlewares: Array<HookHandler<T>>): this;
    bindFunc(...middlewareFuncs: Array<(e: T) => unknown>): this;
    unbind(...middlewareIds: string[]): this;
    route(method: string, path: string, action: Handler<T>): Route<T>;
    any(path: string, action: Handler<T>): Route<T>;
    get(path: string, action: Handler<T>): Route<T>;
    search(path: string, action: Handler<T>): Route<T>;
    post(path: string, action: Handler<T>): Route<T>;
    delete(path: string, action: Handler<T>): Route<T>;
    patch(path: string, action: Handler<T>): Route<T>;
    put(path: string, action: Handler<T>): Route<T>;
    head(path: string, action: Handler<T>): Route<T>;
    options(path: string, action: Handler<T>): Route<T>;
    hasRoute(method: string, path: string): boolean;
}
