1
>
/*---------------------------------------------------------------------------------------------
configurations.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 { IStringDictionary } from '../../../base/common/collections.js';
7
>
import { Emitter, Event } from '../../../base/common/event.js';
8
>
import { Disposable } from '../../../base/common/lifecycle.js';
9
>
import { deepClone, equals } from '../../../base/common/objects.js';
10
>
import { isEmptyObject, isString } from '../../../base/common/types.js';
11
>
import { ConfigurationModel } from './configurationModels.js';
12
>
import { Extensions, IConfigurationRegistry, IRegisteredConfigurationPropertySchema } from './configurationRegistry.js';
13
>
import { ILogService, NullLogService } from '../../log/common/log.js';
14
>
import { IPolicyService, PolicyDefinition, PolicyValue } from '../../policy/common/policy.js';
15
>
import { Registry } from '../../registry/common/platform.js';
16
>
import { getErrorMessage } from '../../../base/common/errors.js';
17
>
import * as json from '../../../base/common/json.js';
18
>
import { PolicyName } from '../../../base/common/policy.js';
19
>
20
>
export class DefaultConfiguration extends Disposable {
21
>
22
>
private readonly _onDidChangeConfiguration = this._register(new Emitter<{ defaults: ConfigurationModel; properties: string[] }>());
23
>
readonly onDidChangeConfiguration = this._onDidChangeConfiguration.event;
24
>
25
>
private _configurationModel: ConfigurationModel;
26
>
get configurationModel(): ConfigurationModel {
27
>
return this._configurationModel;
28
>
}
29
>
30
>
constructor(private readonly logService: ILogService) {
31
super();
32
this._configurationModel = ConfigurationModel.createEmptyModel(logService);
33
}
35
>
async initialize(): Promise<ConfigurationModel> {
36
this.resetConfigurationModel();
37
this._register(Registry.as<IConfigurationRegistry>(Extensions.Configuration).onDidUpdateConfiguration(({ properties, defaultsOverrides }) => this.onDidUpdateConfiguration(Array.from(properties), defaultsOverrides)));
38
return this.configurationModel;
39
}
41
>
reload(): ConfigurationModel {
42
this.resetConfigurationModel();
43
return this.configurationModel;
44
}
46
>
protected onDidUpdateConfiguration(properties: string[], defaultsOverrides?: boolean): void {
47
this.updateConfigurationModel(properties, Registry.as<IConfigurationRegistry>(Extensions.Configuration).getConfigurationProperties());
48
this._onDidChangeConfiguration.fire({ defaults: this.configurationModel, properties });
49
}
51
>
protected getConfigurationDefaultOverrides(): IStringDictionary<unknown> {
52
return {};
53
}
55
>
private resetConfigurationModel(): void {
56
this._configurationModel = ConfigurationModel.createEmptyModel(this.logService);
57
const properties = Registry.as<IConfigurationRegistry>(Extensions.Configuration).getConfigurationProperties();
58
this.updateConfigurationModel(Object.keys(properties), properties);
59
}
61
>
private updateConfigurationModel(properties: string[], configurationProperties: IStringDictionary<IRegisteredConfigurationPropertySchema>): void {
62
const configurationDefaultsOverrides = this.getConfigurationDefaultOverrides();
63
for (const key of properties) {