/* tslint:disable */ import { URI } from '@vscode-alt/monaco-editor/esm/vs/base/common/uri'; import { ConfigurationChangeEvent, ConfigurationModel, Configuration as BaseConfiguration, compare, } from '../configuration'; import { Workspace } from '../workspace'; import { IConfigurationOverrides } from '../../interfaces'; import { ResourceMap } from '@vscode-alt/monaco-editor/esm/vs/base/common/map'; import { equals } from '@vscode-alt/monaco-editor/esm/vs/base/common/objects'; //src/vs/workbench/services/configuration/common/configurationModels.ts export class WorkspaceConfiguration extends BaseConfiguration { constructor( defaults: ConfigurationModel, localUser: ConfigurationModel, remoteUser: ConfigurationModel, workspaceConfiguration: ConfigurationModel, folders: ResourceMap, memoryConfiguration: ConfigurationModel, memoryConfigurationByResource: ResourceMap, private readonly _workspace?: Workspace) { super(defaults, localUser, remoteUser, workspaceConfiguration, folders, memoryConfiguration, memoryConfigurationByResource); } getValue(key: string | undefined, overrides: IConfigurationOverrides = {}): any { return super.getValue(key, overrides, this._workspace); } inspect(key: string, overrides: IConfigurationOverrides = {}): { default: C, user: C, workspace?: C, workspaceFolder?: C memory?: C value: C, } { return super.inspect(key, overrides, this._workspace); } keys(): { default: string[]; user: string[]; workspace: string[]; workspaceFolder: string[]; } { return super.keys(this._workspace); } compareAndUpdateLocalUserConfiguration(user: ConfigurationModel): ConfigurationChangeEvent { const { added, updated, removed } = compare(this.localUserConfiguration, user); let changedKeys = [...added, ...updated, ...removed]; if (changedKeys.length) { super.updateLocalUserConfiguration(user); } return new ConfigurationChangeEvent().change(changedKeys); } compareAndUpdateRemoteUserConfiguration(user: ConfigurationModel): ConfigurationChangeEvent { const { added, updated, removed } = compare(this.remoteUserConfiguration, user); let changedKeys = [...added, ...updated, ...removed]; if (changedKeys.length) { super.updateRemoteUserConfiguration(user); } return new ConfigurationChangeEvent().change(changedKeys); } compareAndUpdateWorkspaceConfiguration(workspaceConfiguration: ConfigurationModel): ConfigurationChangeEvent { const { added, updated, removed } = compare(this.workspaceConfiguration, workspaceConfiguration); let changedKeys = [...added, ...updated, ...removed]; if (changedKeys.length) { super.updateWorkspaceConfiguration(workspaceConfiguration); } return new ConfigurationChangeEvent().change(changedKeys); } compareAndUpdateFolderConfiguration(resource: URI, folderConfiguration: ConfigurationModel): ConfigurationChangeEvent { const currentFolderConfiguration = this.folderConfigurations.get(resource); if (currentFolderConfiguration) { const { added, updated, removed } = compare(currentFolderConfiguration, folderConfiguration); let changedKeys = [...added, ...updated, ...removed]; if (changedKeys.length) { super.updateFolderConfiguration(resource, folderConfiguration); } return new ConfigurationChangeEvent().change(changedKeys, resource); } else { super.updateFolderConfiguration(resource, folderConfiguration); return new ConfigurationChangeEvent().change(folderConfiguration.keys, resource); } } compareAndDeleteFolderConfiguration(folder: URI): ConfigurationChangeEvent { if (this._workspace && this._workspace.folders.length > 0 && this._workspace.folders[0].uri.toString() === folder.toString()) { // Do not remove workspace configuration return new ConfigurationChangeEvent(); } const folderConfig = this.folderConfigurations.get(folder); if (!folderConfig) { throw new Error('Unknown folder '+ folder.fsPath); } const keys = folderConfig.keys; super.deleteFolderConfiguration(folder); return new ConfigurationChangeEvent().change(keys, folder); } compare(other: WorkspaceConfiguration): string[] { const result: string[] = []; for (const key of this.allKeys()) { if (!equals(this.getValue(key), other.getValue(key)) || (this._workspace && this._workspace.folders.some(folder => !equals(this.getValue(key, { resource: folder.uri }), other.getValue(key, { resource: folder.uri }))))) { result.push(key); } } return result; } allKeys(): string[] { return super.allKeys(this._workspace); } }