import { Event } from "../../../base/common/event.js";
import { IWorkspaceFolder } from "../../workspace/common/workspace.js";
import { IConfigurationChangeEvent, IConfigurationData, IConfigurationOverrides, ConfigurationTarget, IConfigurationUpdateOverrides, IConfigurationUpdateOptions, IConfigurationValue } from "./configuration.js";
export declare const IConfigurationService: import("../../instantiation/common/instantiation.js").ServiceIdentifier<IConfigurationService>;
export interface IConfigurationService {
    readonly _serviceBrand: undefined;
    onDidChangeConfiguration: Event<IConfigurationChangeEvent>;
    getConfigurationData(): IConfigurationData | null;
    /**
    * Fetches the value of the section for the given overrides.
    * Value can be of native type or an object keyed off the section name.
    *
    * @param section - Section of the configuration. Can be `null` or `undefined`.
    * @param overrides - Overrides that has to be applied while fetching
    *
    */
    getValue<T>(): T;
    getValue<T>(section: string): T;
    getValue<T>(overrides: IConfigurationOverrides): T;
    getValue<T>(section: string, overrides: IConfigurationOverrides): T;
    /**
    * Update a configuration value.
    *
    * Use `target` to update the configuration in a specific `ConfigurationTarget`.
    *
    * Use `overrides` to update the configuration for a resource or for override identifiers or both.
    *
    * Passing a resource through overrides will update the configuration in the workspace folder containing that resource.
    *
    * *Note 1:* Updating configuration to a default value will remove the configuration from the requested target. If not target is passed, it will be removed from all writeable targets.
    *
    * *Note 2:* Use `undefined` value to remove the configuration from the given target. If not target is passed, it will be removed from all writeable targets.
    *
    * Use `donotNotifyError` and set it to `true` to surpresss errors.
    *
    * @param key setting to be updated
    * @param value The new value
    */
    updateValue(key: string, value: any): Promise<void>;
    updateValue(key: string, value: any, target: ConfigurationTarget): Promise<void>;
    updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides): Promise<void>;
    updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides, target: ConfigurationTarget, options?: IConfigurationUpdateOptions): Promise<void>;
    inspect<T>(key: string, overrides?: IConfigurationOverrides): IConfigurationValue<Readonly<T>>;
    reloadConfiguration(target?: ConfigurationTarget | IWorkspaceFolder): Promise<void>;
    keys(): {
        default: string[];
        user: string[];
        workspace: string[];
        workspaceFolder: string[];
        memory?: string[];
    };
}
