import type { MaybePromise } from '@difizen/mana-common';
import { DisposableCollection } from '@difizen/mana-common';
import type { Contribution } from '@difizen/mana-syringe';
import { Syringe } from '@difizen/mana-syringe';
import { ApplicationContribution } from '../application/index';
import type { ConfigurationNode } from './configuration-protocol';
import type { ConfigurationStorage } from './configuration-storage';
import { SchemaValidator } from './validation';
export declare const ConfigurationContribution: Syringe.DefinedToken;
export interface ConfigurationContribution {
    registerConfiguration?: () => MaybePromise<ConfigurationNode<any>>;
    registerConfigurations?: () => MaybePromise<ConfigurationNode<any>[]>;
    deregisterConfigurations?: () => MaybePromise<ConfigurationNode<any>[]>;
}
export declare class ConfigurationRegistry implements ApplicationContribution {
    protected readonly schemaValidator: SchemaValidator;
    protected providers: Contribution.Provider<ConfigurationContribution>;
    protected toDispose: DisposableCollection;
    protected defaultStorage: ConfigurationStorage;
    protected configurationNodes: ConfigurationNode<unknown>[];
    protected scopes: Map<string, ConfigurationStorage>;
    constructor(schemaValidator: SchemaValidator, providers: Contribution.Provider<ConfigurationContribution>);
    onStart(): Promise<void>;
    protected setupConfiguration(): Promise<void>;
    getStorage(configuration: ConfigurationNode<any>): ConfigurationStorage;
    hasConfiguration(configuration: ConfigurationNode<any>): boolean;
    findConfiguration<T>(id: string): ConfigurationNode<T> | undefined;
    /**
     * Register a configuration to the registry.
     */
    registerConfiguration(configuration: ConfigurationNode<any>): void;
    /**
     * Register multiple configurations to the registry.
     */
    registerConfigurations(configurations: ConfigurationNode<any>[]): void;
    /**
     * Deregister multiple configurations from the registry.
     */
    deregisterConfigurations(configurations: ConfigurationNode<any>[]): void;
    deregisterConfiguration(configuration: ConfigurationNode<any>): void;
    getConfigurationsByScope(storage: ConfigurationStorage): ConfigurationNode<unknown>[] | undefined;
    getConfigurationsByStorage(storage: ConfigurationStorage): ConfigurationNode<unknown>[] | undefined;
    getStorages(): ConfigurationStorage[];
    /**
     *  添加scope，已包含错误处理
     */
    addStorage(scope: ConfigurationStorage): void;
    getConfigurationByNamespace(namespace: string[], isFullMatch?: boolean): ConfigurationNode<unknown>[];
    getNamespace(node: ConfigurationNode<any>): string[];
    getRootNamespaces(): string[];
    getChildNamespaces(namespace: string[]): string[][];
}
//# sourceMappingURL=configuration-registry.d.ts.map