@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
83 lines (80 loc) • 5.44 kB
JavaScript
import { __decorate, __param } from 'vscode/external/tslib/tslib.es6.js';
import { URI } from 'vscode/vscode/vs/base/common/uri';
import { Registry } from 'vscode/vscode/vs/platform/registry/common/platform';
import { getScopes, Extensions, ConfigurationScope } from 'vscode/vscode/vs/platform/configuration/common/configurationRegistry';
import { WorkbenchState } from 'vscode/vscode/vs/platform/workspace/common/workspace';
import { IWorkspaceContextService } from 'vscode/vscode/vs/platform/workspace/common/workspace.service';
import { ExtHostContext, MainContext } from 'vscode/vscode/vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
import { ConfigurationTarget } from 'vscode/vscode/vs/platform/configuration/common/configuration';
import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service';
import { IEnvironmentService } from 'vscode/vscode/vs/platform/environment/common/environment.service';
let MainThreadConfiguration = class MainThreadConfiguration {
constructor(extHostContext, _workspaceContextService, configurationService, _environmentService) {
this._workspaceContextService = _workspaceContextService;
this.configurationService = configurationService;
this._environmentService = _environmentService;
const proxy = ( extHostContext.getProxy(ExtHostContext.ExtHostConfiguration));
proxy.$initializeConfiguration(this._getConfigurationData());
this._configurationListener = configurationService.onDidChangeConfiguration(e => {
proxy.$acceptConfigurationChanged(this._getConfigurationData(), e.change);
});
}
_getConfigurationData() {
const configurationData = { ...(this.configurationService.getConfigurationData()), configurationScopes: [] };
if (!this._environmentService.isBuilt || this._environmentService.isExtensionDevelopment) {
configurationData.configurationScopes = getScopes();
}
return configurationData;
}
dispose() {
this._configurationListener.dispose();
}
$updateConfigurationOption(target, key, value, overrides, scopeToLanguage) {
overrides = { resource: overrides?.resource ? URI.revive(overrides.resource) : undefined, overrideIdentifier: overrides?.overrideIdentifier };
return this.writeConfiguration(target, key, value, overrides, scopeToLanguage);
}
$removeConfigurationOption(target, key, overrides, scopeToLanguage) {
overrides = { resource: overrides?.resource ? URI.revive(overrides.resource) : undefined, overrideIdentifier: overrides?.overrideIdentifier };
return this.writeConfiguration(target, key, undefined, overrides, scopeToLanguage);
}
writeConfiguration(target, key, value, overrides, scopeToLanguage) {
target = target !== null && target !== undefined ? target : this.deriveConfigurationTarget(key, overrides);
const configurationValue = this.configurationService.inspect(key, overrides);
switch (target) {
case ConfigurationTarget.MEMORY:
return this._updateValue(key, value, target, configurationValue?.memory?.override, overrides, scopeToLanguage);
case ConfigurationTarget.WORKSPACE_FOLDER:
return this._updateValue(key, value, target, configurationValue?.workspaceFolder?.override, overrides, scopeToLanguage);
case ConfigurationTarget.WORKSPACE:
return this._updateValue(key, value, target, configurationValue?.workspace?.override, overrides, scopeToLanguage);
case ConfigurationTarget.USER_REMOTE:
return this._updateValue(key, value, target, configurationValue?.userRemote?.override, overrides, scopeToLanguage);
default:
return this._updateValue(key, value, target, configurationValue?.userLocal?.override, overrides, scopeToLanguage);
}
}
_updateValue(key, value, configurationTarget, overriddenValue, overrides, scopeToLanguage) {
overrides = scopeToLanguage === true ? overrides
: scopeToLanguage === false ? { resource: overrides.resource }
: overrides.overrideIdentifier && overriddenValue !== undefined ? overrides
: { resource: overrides.resource };
return this.configurationService.updateValue(key, value, overrides, configurationTarget, { donotNotifyError: true });
}
deriveConfigurationTarget(key, overrides) {
if (overrides.resource && this._workspaceContextService.getWorkbenchState() === WorkbenchState.WORKSPACE) {
const configurationProperties = ( Registry.as(Extensions.Configuration)).getConfigurationProperties();
if (configurationProperties[key] && (configurationProperties[key].scope === ConfigurationScope.RESOURCE || configurationProperties[key].scope === ConfigurationScope.LANGUAGE_OVERRIDABLE)) {
return ConfigurationTarget.WORKSPACE_FOLDER;
}
}
return ConfigurationTarget.WORKSPACE;
}
};
MainThreadConfiguration = __decorate([
extHostNamedCustomer(MainContext.MainThreadConfiguration),
( __param(1, IWorkspaceContextService)),
( __param(2, IConfigurationService)),
( __param(3, IEnvironmentService))
], MainThreadConfiguration);
export { MainThreadConfiguration };