import type { IServerContext } from '../types';
import type { MockServer } from '../index';
import type { Transport } from './transports';
import type { Provider } from './providers';
export interface IRouteContext<K extends string> {
    transports: Partial<Record<K, Transport>>;
    provider: Provider<any>;
}
export interface IRouteMatchResult<T extends Transport = Transport> {
    transport: T;
    provider: Provider<any>;
}
export declare class Router<TContext extends IServerContext = any> extends Map<string, Set<IRouteContext<TContext['transport']>>> {
    protected server: MockServer;
    constructor(server: MockServer);
    default<T extends Transport>(transport: TContext['transport']): IRouteMatchResult<T>;
    register(pattern: string, configuration: {
        provider: Provider<any>;
        transports?: TContext['transport'][] | Partial<Record<TContext['transport'], Transport>>;
    }): this;
    /** Deletes each route that is using provider */
    unregister(provider: Provider): this;
    match<T extends Transport>(transport: TContext['transport'], path: string): Generator<IRouteMatchResult<T>>;
    static build<TContext extends IServerContext>(server: MockServer): Router<TContext>;
}
//# sourceMappingURL=router.d.ts.map