export type Resolution<T = unknown, E = unknown> = {
    type: 'found';
    filename: string;
    result: T;
} | {
    type: 'not_found';
    err: E;
};
export type RequestAdapterCreate<Init, Res extends Resolution> = (params: Init) => {
    initialState: InitialRequestState;
    adapter: RequestAdapter<Res>;
} | undefined;
export interface RequestAdapter<Res extends Resolution> {
    readonly debugType: string;
    resolve(request: ModuleRequest<Res>): Promise<Res>;
    notFoundResponse(request: ModuleRequest<Res>): Res | (() => Promise<Res>);
}
export interface InitialRequestState {
    readonly specifier: string;
    readonly fromFile: string;
    readonly meta: Record<string, unknown> | undefined;
}
export declare class ModuleRequest<Res extends Resolution = Resolution> implements ModuleRequest<Res> {
    #private;
    static create<Init, Res extends Resolution>(createAdapter: RequestAdapterCreate<Init, Res>, params: Init): ModuleRequest<Res> | undefined;
    private constructor();
    get specifier(): string;
    get fromFile(): string;
    get debugType(): string;
    get meta(): Record<string, unknown> | undefined;
    get resolvedTo(): Res | (() => Promise<Res>) | undefined;
    alias(newSpecifier: string): this;
    rehome(newFromFile: string): this;
    withMeta(meta: Record<string, any> | undefined): this;
    notFound(): this;
    resolveTo(res: Res | (() => Promise<Res>)): this;
    defaultResolve(): Promise<Res>;
    clone(): this;
}
export declare function extractResolution<Res extends Resolution = Resolution>(res: Res | (() => Promise<Res>)): Promise<Res>;
