1
>
/*---------------------------------------------------------------------------------------------
configuration.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 { localize } from '../../nls.js';
7
>
import { ConfigurationScope, IConfigurationNode, IConfigurationRegistry, Extensions as ConfigurationExtensions } from '../../platform/configuration/common/configurationRegistry.js';
8
>
import { Registry } from '../../platform/registry/common/platform.js';
9
>
import { IWorkbenchContribution } from './contributions.js';
10
>
import { IWorkspaceContextService, IWorkspaceFolder, WorkbenchState } from '../../platform/workspace/common/workspace.js';
11
>
import { ConfigurationTarget, IConfigurationService, IConfigurationValue, IInspectValue } from '../../platform/configuration/common/configuration.js';
12
>
import { Disposable } from '../../base/common/lifecycle.js';
13
>
import { Emitter } from '../../base/common/event.js';
14
>
import { IRemoteAgentService } from '../services/remote/common/remoteAgentService.js';
15
>
import { OperatingSystem, isWindows } from '../../base/common/platform.js';
16
>
import { URI } from '../../base/common/uri.js';
17
>
import { equals } from '../../base/common/objects.js';
18
>
import { DeferredPromise } from '../../base/common/async.js';
19
>
import { IUserDataProfile, IUserDataProfilesService } from '../../platform/userDataProfile/common/userDataProfile.js';
20
>
21
>
export const applicationConfigurationNodeBase = Object.freeze<IConfigurationNode>({
22
>
'id': 'application',
23
>
'order': 100,
24
>
'title': localize('applicationConfigurationTitle', "Application"),
25
>
'type': 'object'
26
>
});
27
>
28
>
export const workbenchConfigurationNodeBase = Object.freeze<IConfigurationNode>({
29
>
'id': 'workbench',
30
>
'order': 7,
31
>
'title': localize('workbenchConfigurationTitle', "Workbench"),
32
>
'type': 'object',
33
>
});
34
>
35
>
export const securityConfigurationNodeBase = Object.freeze<IConfigurationNode>({
36
>
'id': 'security',
37
>
'scope': ConfigurationScope.APPLICATION,
38
>
'title': localize('securityConfigurationTitle', "Security"),
39
>
'type': 'object',
40
>
'order': 7
41
>
});
42
>
43
>
export const problemsConfigurationNodeBase = Object.freeze<IConfigurationNode>({
44
>
'id': 'problems',
45
>
'title': localize('problemsConfigurationTitle', "Problems"),
46
>
'type': 'object',
47
>
'order': 101
48
>
});
49
>
50
>
export const windowConfigurationNodeBase = Object.freeze<IConfigurationNode>({
51
>
'id': 'window',
52
>
'order': 8,
53
>
'title': localize('windowConfigurationTitle', "Window"),
54
>
'type': 'object',
55
>
});
56
>
57
>
export const Extensions = {
58
>
ConfigurationMigration: 'base.contributions.configuration.migration'
59
>
};
60
>
61
>
type ConfigurationValue = { value: unknown | undefined /* Remove */ };
62
>
export type ConfigurationKeyValuePairs = [string, ConfigurationValue][];
63
>
// eslint-disable-next-line @typescript-eslint/no-explicit-any
64
>
export type ConfigurationMigrationFn = (value: any, valueAccessor: (key: string) => any) => ConfigurationValue | ConfigurationKeyValuePairs | Promise<ConfigurationValue | ConfigurationKeyValuePairs>;
65
>
export type ConfigurationMigration = { key: string; migrateFn: ConfigurationMigrationFn };
66
>
67
>
export interface IConfigurationMigrationRegistry {
68
>
registerConfigurationMigrations(configurationMigrations: ConfigurationMigration[]): void;
69
>
}
70
>
71
>
class ConfigurationMigrationRegistry implements IConfigurationMigrationRegistry {
72
>
73
>
readonly migrations: ConfigurationMigration[] = [];
74
>
75
>
private readonly _onDidRegisterConfigurationMigrations = new Emitter<ConfigurationMigration[]>();
76
>
readonly onDidRegisterConfigurationMigration = this._onDidRegisterConfigurationMigrations.event;
77
>
78
>
registerConfigurationMigrations(configurationMigrations: ConfigurationMigration[]): void {
79
this.migrations.push(...configurationMigrations);
80
}
82
>
}
83
>
84
>
const configurationMigrationRegistry = new ConfigurationMigrationRegistry();
85
>
Registry.add(Extensions.ConfigurationMigration, configurationMigrationRegistry);
86
>
87
>
export class ConfigurationMigrationWorkbenchContribution extends Disposable implements IWorkbenchContribution {
88
>
89
>
static readonly ID = 'workbench.contrib.configurationMigration';
90
>
91
>
constructor(
92
@IConfigurationService private readonly configurationService: IConfigurationService,
93
@IWorkspaceContextService private readonly workspaceService: IWorkspaceContextService,