import type { MaybePromise } from '@difizen/mana-common';
import { Syringe } from '@difizen/mana-syringe';
import type { ConfigurationNode } from './configuration-protocol';
import type { ConfigurationStorage } from './configuration-storage';
export declare const ConfigurationProvider: Syringe.DefinedToken;
export interface ConfigurationProvider {
    canHandle: (storage: ConfigurationStorage) => false | number;
    has: <T>(node: ConfigurationNode<T>) => MaybePromise<boolean>;
    get: <T>(node: ConfigurationNode<T>) => MaybePromise<T>;
    set: <T>(node: ConfigurationNode<T>, value: T) => MaybePromise<void>;
    remove: <T>(node: ConfigurationNode<T>) => MaybePromise<void>;
    /**
     * 开启缓存，默认false
     * 对本地同步调用不用开启
     * 对远端异步调用建议开启，防止请求过多
     */
    enableCache?: boolean;
    /**
     * 提前批量获取配置作为缓存, enableCache打开后会在应用初始化调用
     * @param nodes
     * @returns
     */
    prefetch?: (nodes: ConfigurationNode<any>[]) => MaybePromise<any[]>;
}
export declare class DefaultConfigurationProvider implements ConfigurationProvider {
    protected configStore: Map<string, any>;
    /**
     * 默认用内存的provider
     * @returns
     */
    canHandle(storage: ConfigurationStorage): false | number;
    has: <T>(node: ConfigurationNode<T>) => boolean;
    get: <T>(node: ConfigurationNode<T>) => any;
    set: <T>(node: ConfigurationNode<T>, value: T) => void;
    remove: <T>(node: ConfigurationNode<T>) => void;
}
export declare class LocalStorageConfigurationProvider implements ConfigurationProvider {
    protected configStore: Storage;
    canHandle(storage: ConfigurationStorage): false | number;
    has: <T>(node: ConfigurationNode<T>) => boolean;
    get: <T>(node: ConfigurationNode<T>) => T;
    set: <T>(node: ConfigurationNode<T>, value: T) => void;
    remove: <T>(node: ConfigurationNode<T>) => void;
    protected prefix(key: string): string;
}
//# sourceMappingURL=configuration-provider.d.ts.map