import type { ExecutionContext } from '../types/core';
export type ContextProviderFn<T = unknown> = (context: ExecutionContext) => T | Promise<T>;
export interface ContextProvider<T = unknown> {
    readonly name: string;
    readonly description?: string;
    readonly provide: ContextProviderFn<T>;
    readonly cache?: boolean;
    readonly async?: boolean;
    readonly dependencies?: string[];
}
export interface ContextProviderOptions<T = unknown> {
    description?: string;
    cache?: boolean;
    dependencies?: string[];
}
export declare class ContextProviderRegistry {
    private providers;
    private globalProviders;
    register<T>(name: string, provider: ContextProviderFn<T> | ContextProvider<T>, options?: ContextProviderOptions<T>): void;
    registerGlobal<T>(name: string, provider: ContextProviderFn<T> | ContextProvider<T>, options?: ContextProviderOptions<T>): void;
    unregister(name: string): boolean;
    unregisterGlobal(name: string): boolean;
    get(name: string): ContextProvider | undefined;
    has(name: string): boolean;
    resolve<T = unknown>(name: string, context: ExecutionContext, cache?: Map<string, unknown>): Promise<T | undefined>;
    resolveSync<T = unknown>(name: string, context: ExecutionContext, cache?: Map<string, unknown>): T | undefined;
    enhance<T extends ExecutionContext>(context: T): T & Record<string, unknown>;
    resolveAll(context: ExecutionContext): Promise<Record<string, unknown>>;
    getProviderNames(): string[];
    clear(): void;
}
export declare function createContextProviderRegistry(): ContextProviderRegistry;
export declare function getDefaultContextProviderRegistry(): ContextProviderRegistry;
export declare const meProvider: ContextProvider<Element | null>;
export declare const itProvider: ContextProvider<unknown>;
export declare const youProvider: ContextProvider<Element | null>;
export declare const eventProvider: ContextProvider<Event | null | undefined>;
//# sourceMappingURL=context-provider-registry.d.ts.map