import type { Key } from "../../common/Types";
import type { ConfigurationKey } from "./Common";
import type { RawSettings } from "./Privates";
import { SETTINGS_OPTIONS } from "./Privates";
import { Settings } from "./Settings";
/**
 * Settings manager options
 */
export interface SettingsOptions<T extends object> {
    /**
     * Provides configuration from a specified path
     * @param path The path to return configuration from
     * @returns A configuration
     */
    settingsProvider(path: string): Promise<Partial<RawSettings<T>>>;
    /**
     *Stores configuration in the specified path
     * @param path The path to return configuration from
     * @param settings The settings to store in the provided path
     */
    persistSettings(path: string, settings: Partial<RawSettings<T>>): Promise<void>;
}
/**
 * A class that manages settings, with defaults, global config, and project configs
 */
export declare class SettingsManager<T extends object> {
    private readonly _defaults;
    readonly globalConfigPath: string;
    /**
     * Gets a settings object containing all settings defaults
     */
    readonly defaults: Settings<T>;
    readonly [SETTINGS_OPTIONS]: SettingsOptions<T>;
    readonly _keys: Set<ConfigurationKey<T>>;
    private _globalsAndOverridesP?;
    /**
     * Creates new SettingsManager instance
     * @param _defaults An object containing all settings defaults
     * @param globalConfigPath An optional path for the global configuration
     * @param options Optional options for settings manager
     */
    constructor(_defaults: T, globalConfigPath?: string, options?: Partial<SettingsOptions<T>>);
    get keys(): Set<ConfigurationKey<T>>;
    isOverriddenKey(namespace: string, key: Key): Promise<boolean>;
    /**
     * Gets a settings object for the global configuration
     */
    getGlobalSettings(): Promise<Settings<T>>;
    /**
     * Gets a settings object for project configuration
     * @param path An optional path to load the settings from (default to current working dir)
     */
    getProjectSettings(path?: string): Promise<Settings<T>>;
    isConfigurationKey(key: Key): key is ConfigurationKey<T>;
    private _globalsAndOverrides;
}
