1
>
/*---------------------------------------------------------------------------------------------
configurationModels.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 * as arrays from '../../../base/common/arrays.js';
7
>
import { IStringDictionary } from '../../../base/common/collections.js';
8
>
import { Emitter, Event } from '../../../base/common/event.js';
9
>
import * as json from '../../../base/common/json.js';
10
>
import { Disposable } from '../../../base/common/lifecycle.js';
11
>
import { getOrSet, ResourceMap } from '../../../base/common/map.js';
12
>
import * as objects from '../../../base/common/objects.js';
13
>
import { IExtUri } from '../../../base/common/resources.js';
14
>
import * as types from '../../../base/common/types.js';
15
>
import { URI, UriComponents } from '../../../base/common/uri.js';
16
>
import { addToValueTree, ConfigurationTarget, getConfigurationValue, IConfigurationChange, IConfigurationChangeEvent, IConfigurationCompareResult, IConfigurationData, IConfigurationModel, IConfigurationOverrides, IConfigurationUpdateOverrides, IConfigurationValue, IInspectValue, IOverrides, removeFromValueTree, toValuesTree } from './configuration.js';
17
>
import { ConfigurationScope, Extensions, IConfigurationPropertySchema, IConfigurationRegistry, overrideIdentifiersFromKey, OVERRIDE_PROPERTY_REGEX, IRegisteredConfigurationPropertySchema } from './configurationRegistry.js';
18
>
import { FileOperation, IFileService } from '../../files/common/files.js';
19
>
import { ILogService } from '../../log/common/log.js';
20
>
import { Registry } from '../../registry/common/platform.js';
21
>
import { Workspace } from '../../workspace/common/workspace.js';
22
>
23
function freeze<T>(data: T): T {
24
return Object.isFrozen(data) ? data : objects.deepFreeze(data);
25
}
27
>
type InspectValue<V> = IInspectValue<V> & { merged?: V };
28
>
29
>
export class ConfigurationModel implements IConfigurationModel {
30
>
31
>
static createEmptyModel(logService: ILogService): ConfigurationModel {
32
>
return new ConfigurationModel({}, [], [], undefined, logService);
33
>
}
34
>
35
>
private readonly overrideConfigurations = new Map<string, ConfigurationModel>();
36
>
37
>
constructor(
38
private readonly _contents: IStringDictionary<unknown>,
39
private readonly _keys: string[],