import type { Event, IStringDictionary } from '@difizen/mana-common';
import type { IJSONSchema } from '../jsonSchema';
export declare const Extensions: {
    Configuration: string;
};
export interface IConfigurationRegistry {
    /**
     * Register a configuration to the registry.
     */
    registerConfiguration: (configuration: IConfigurationNode) => void;
    /**
     * Register multiple configurations to the registry.
     */
    registerConfigurations: (configurations: IConfigurationNode[], validate?: boolean) => void;
    /**
     * Deregister multiple configurations from the registry.
     */
    deregisterConfigurations: (configurations: IConfigurationNode[]) => void;
    /**
     * Register multiple default configurations to the registry.
     */
    registerDefaultConfigurations: (defaultConfigurations: IStringDictionary<any>[]) => void;
    /**
     * Deregister multiple default configurations from the registry.
     */
    deregisterDefaultConfigurations: (defaultConfigurations: IStringDictionary<any>[]) => void;
    /**
     * Signal that the schema of a configuration setting has changes. It is currently only supported to change enumeration values.
     * Property or default value changes are not allowed.
     */
    notifyConfigurationSchemaUpdated: (...configurations: IConfigurationNode[]) => void;
    /**
     * Event that fires whenver a configuration has been
     * registered.
     */
    onDidSchemaChange: Event<void>;
    /**
     * Event that fires whenver a configuration has been
     * registered.
     */
    onDidUpdateConfiguration: Event<string[]>;
    /**
     * Returns all configuration nodes contributed to this registry.
     */
    getConfigurations: () => IConfigurationNode[];
    /**
     * Returns all configurations settings of all configuration nodes contributed to this registry.
     */
    getConfigurationProperties: () => Record<string, IConfigurationPropertySchema>;
    /**
     * Returns all excluded configurations settings of all configuration nodes contributed to this registry.
     */
    getExcludedConfigurationProperties: () => Record<string, IConfigurationPropertySchema>;
    /**
     * Register the identifiers for editor configurations
     */
    registerOverrideIdentifiers: (identifiers: string[]) => void;
}
export declare enum ConfigurationScope {
    /**
     * Application specific configuration, which can be configured only in local user settings.
     */
    APPLICATION = 1,
    /**
     * Machine specific configuration, which can be configured only in local and remote user settings.
     */
    MACHINE = 2,
    /**
     * Window specific configuration, which can be configured in the user or workspace settings.
     */
    WINDOW = 3,
    /**
     * Resource specific configuration, which can be configured in the user, workspace or folder settings.
     */
    RESOURCE = 4,
    /**
     * Resource specific configuration that can be configured in language specific settings
     */
    LANGUAGE_OVERRIDABLE = 5,
    /**
     * Machine specific configuration that can also be configured in workspace or folder settings.
     */
    MACHINE_OVERRIDABLE = 6
}
export interface IConfigurationPropertySchema extends IJSONSchema {
    scope?: ConfigurationScope | undefined;
    included?: boolean;
    tags?: string[];
    /**
     * When enabled this setting is ignored during sync and user can override this.
     */
    ignoreSync?: boolean;
    /**
     * When enabled this setting is ignored during sync and user cannot override this.
     */
    disallowSyncIgnore?: boolean;
    enumItemLabels?: string[];
}
export interface IConfigurationExtensionInfo {
    id: string;
}
export interface IConfigurationNode {
    id?: string;
    order?: number;
    type?: string | string[];
    title?: string;
    description?: string;
    properties?: Record<string, IConfigurationPropertySchema>;
    allOf?: IConfigurationNode[];
    scope?: ConfigurationScope;
    extensionInfo?: IConfigurationExtensionInfo;
}
type SettingProperties = Record<string, any>;
export declare const allSettings: {
    properties: SettingProperties;
    patternProperties: SettingProperties;
};
export declare const applicationSettings: {
    properties: SettingProperties;
    patternProperties: SettingProperties;
};
export declare const machineSettings: {
    properties: SettingProperties;
    patternProperties: SettingProperties;
};
export declare const machineOverridableSettings: {
    properties: SettingProperties;
    patternProperties: SettingProperties;
};
export declare const windowSettings: {
    properties: SettingProperties;
    patternProperties: SettingProperties;
};
export declare const resourceSettings: {
    properties: SettingProperties;
    patternProperties: SettingProperties;
};
export declare const resourceLanguageSettingsSchemaId = "vscode://schemas/settings/resourceLanguage";
export declare const OVERRIDE_PROPERTY_PATTERN: RegExp;
export declare function overrideIdentifierFromKey(key: string): string;
export declare function getDefaultValue(type: string | string[] | undefined): any;
export declare function validateProperty(property: string): string | null;
export declare function getScopes(): [string, ConfigurationScope | undefined][];
export {};
//# sourceMappingURL=configurationRegistry.d.ts.map