1
>
/*---------------------------------------------------------------------------------------------
configurationService.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { distinct, equals as arrayEquals } from '../../../base/common/arrays.js';
7
>
import { Queue, RunOnceScheduler } from '../../../base/common/async.js';
8
>
import { VSBuffer } from '../../../base/common/buffer.js';
9
>
import { Emitter, Event } from '../../../base/common/event.js';
10
>
import { JSONPath, ParseError, parse } from '../../../base/common/json.js';
11
>
import { applyEdits, setProperty } from '../../../base/common/jsonEdit.js';
12
>
import { Edit, FormattingOptions } from '../../../base/common/jsonFormatter.js';
13
>
import { Disposable, IDisposable } from '../../../base/common/lifecycle.js';
14
>
import { ResourceMap } from '../../../base/common/map.js';
15
>
import { equals } from '../../../base/common/objects.js';
16
>
import { OS, OperatingSystem } from '../../../base/common/platform.js';
17
>
import { extUriBiasedIgnorePathCase } from '../../../base/common/resources.js';
18
>
import { URI } from '../../../base/common/uri.js';
19
>
import { ConfigurationTarget, IConfigurationChange, IConfigurationChangeEvent, IConfigurationData, IConfigurationOverrides, IConfigurationService, IConfigurationUpdateOptions, IConfigurationUpdateOverrides, IConfigurationValue, isConfigurationOverrides, isConfigurationUpdateOverrides } from './configuration.js';
20
>
import { Configuration, ConfigurationChangeEvent, ConfigurationModel, UserSettings } from './configurationModels.js';
21
>
import { keyFromOverrideIdentifiers } from './configurationRegistry.js';
22
>
import { DefaultConfiguration, IPolicyConfiguration, NullPolicyConfiguration, PolicyConfiguration } from './configurations.js';
23
>
import { FileOperationError, FileOperationResult, IFileService } from '../../files/common/files.js';
24
>
import { ILogService } from '../../log/common/log.js';
25
>
import { IPolicyService, NullPolicyService } from '../../policy/common/policy.js';
26
>
27
>
export class ConfigurationService extends Disposable implements IConfigurationService, IDisposable {
28
>
29
>
declare readonly _serviceBrand: undefined;
30
>
31
>
private configuration: Configuration;
32
>
private readonly defaultConfiguration: DefaultConfiguration;
33
>
private readonly policyConfiguration: IPolicyConfiguration;
34
>
private readonly userConfiguration: UserSettings;
35
>
private readonly reloadConfigurationScheduler: RunOnceScheduler;
36
>
37
>
private readonly _onDidChangeConfiguration: Emitter<IConfigurationChangeEvent> = this._register(new Emitter<IConfigurationChangeEvent>());
38
>
readonly onDidChangeConfiguration: Event<IConfigurationChangeEvent> = this._onDidChangeConfiguration.event;
39
>
40
>
private readonly configurationEditing: ConfigurationEditing;
41
>
42
>
constructor(
43
private readonly settingsResource: URI,
44
fileService: IFileService,