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