import { ISettingsFile } from "./doc/ISettingsFile";
import { ISettingsFilePersistence } from "./persistance/ISettingsFilePersistence";
type SettingValue = string | number | boolean | Record<string, unknown>;
/**
 * This class represents settings for an Imperative CLI application that can be configured
 * by an end user by modifying a settings file. Settings are stored in {@link AppSettings#settings}
 * in a format specified by {@link ISettingsFile}.
 */
export declare class AppSettings {
    /**
     * Initialize
     * @param settingsFile The settings file to load from
     * @param defaults {@link ISettingsFile} Settings with default values
     */
    static initialize(settingsFile: string, defaults: ISettingsFile): AppSettings;
    /**
     * This is an internal reference to the static settings instance.
     */
    private static mInstance;
    /**
     * The settings loaded from the file specified in the constructor.
     */
    private readonly settings;
    private readonly persistence;
    /**
     *  Constructs a new settings object
     *
     * @param persistence
     * @param initial Initial settings object
     */
    constructor(persistence: ISettingsFilePersistence, initial: ISettingsFile);
    /**
     * Get the singleton instance of the app settings object that was initialized
     * within the {@link AppSettings.initialize} function.
     *
     * @returns A singleton AppSettings object
     *
     * @throws {@link SettingsNotInitialized} When the settings singleton has not been initialized.
     */
    static get instance(): AppSettings;
    /**
     * @returns true if the app settings have been initialized
     */
    static get initialized(): boolean;
    /**
     * Set a settings option and save it to the settings file.
     * @param namespace {@link ISettingsFile}
     * @param key Name of a setting option to set
     * @param value
     */
    set(namespace: keyof ISettingsFile, key: string, value: SettingValue): void;
    /**
     * Get a value of settings option
     * @param namespace {@link ISettingsFile}
     * @param key Name of a setting option to set
     */
    get(namespace: keyof ISettingsFile, key: string): SettingValue;
    /**
     * Get a member of ISettingsFile of specified namespace
     * @param namespace
     */
    getNamespace(namespace: keyof ISettingsFile): Record<string, unknown> | {
        [x: string]: string | false | Record<string, unknown>;
        CredentialManager: string | false | Record<string, unknown>;
    };
    /**
     * Get settings
     */
    getSettings(): ISettingsFile;
    /**
     * Writes settings to the file
     */
    private flush;
}
export {};
//# sourceMappingURL=AppSettings.d.ts.map