@codingame/monaco-vscode-extension-gallery-service-override 1.83.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/extensionGallery.d.ts +12 -0
  2. package/extensionGallery.js +76 -0
  3. package/external/rollup-plugin-styles/dist/runtime/inject-css.js +3 -0
  4. package/external/tslib/tslib.es6.js +11 -0
  5. package/index.d.ts +1 -0
  6. package/index.js +1 -0
  7. package/override/vs/platform/dialogs/common/dialogs.js +8 -0
  8. package/package.json +30 -0
  9. package/vscode/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.js +784 -0
  10. package/vscode/src/vs/platform/extensionManagement/common/extensionEnablementService.js +142 -0
  11. package/vscode/src/vs/platform/extensionManagement/common/extensionGalleryService.js +855 -0
  12. package/vscode/src/vs/platform/extensionManagement/common/extensionManagementIpc.js +119 -0
  13. package/vscode/src/vs/platform/extensionManagement/common/extensionTipsService.js +57 -0
  14. package/vscode/src/vs/platform/extensionManagement/common/unsupportedExtensionsMigration.js +58 -0
  15. package/vscode/src/vs/platform/externalServices/common/marketplace.js +17 -0
  16. package/vscode/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.js +492 -0
  17. package/vscode/src/vs/workbench/contrib/extensions/browser/browserRuntimeExtensionsEditor.js +28 -0
  18. package/vscode/src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.js +78 -0
  19. package/vscode/src/vs/workbench/contrib/extensions/browser/deprecatedExtensionsChecker.js +87 -0
  20. package/vscode/src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.js +60 -0
  21. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEditor.js +1868 -0
  22. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEnablementWorkspaceTrustTransitionParticipant.js +52 -0
  23. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.js +437 -0
  24. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendations.js +17 -0
  25. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.js +221 -0
  26. package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.js +2063 -0
  27. package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.web.contribution.js +13 -0
  28. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActivationProgress.js +46 -0
  29. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.js +65 -0
  30. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsDependencyChecker.js +98 -0
  31. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsList.js +224 -0
  32. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsQuickAccess.js +121 -0
  33. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewer.js +285 -0
  34. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.js +912 -0
  35. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViews.js +1270 -0
  36. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWidgets.js +824 -0
  37. package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.js +1730 -0
  38. package/vscode/src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.js +324 -0
  39. package/vscode/src/vs/workbench/contrib/extensions/browser/keymapRecommendations.js +28 -0
  40. package/vscode/src/vs/workbench/contrib/extensions/browser/languageRecommendations.js +28 -0
  41. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extension.css.js +6 -0
  42. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css.js +6 -0
  43. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionsViewlet.css.js +6 -0
  44. package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionsWidgets.css.js +6 -0
  45. package/vscode/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css.js +6 -0
  46. package/vscode/src/vs/workbench/contrib/extensions/browser/remoteRecommendations.js +29 -0
  47. package/vscode/src/vs/workbench/contrib/extensions/browser/unsupportedExtensionsMigrationContribution.js +26 -0
  48. package/vscode/src/vs/workbench/contrib/extensions/browser/webRecommendations.js +38 -0
  49. package/vscode/src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.js +88 -0
  50. package/vscode/src/vs/workbench/contrib/extensions/common/extensionQuery.js +67 -0
  51. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsInput.js +43 -0
  52. package/vscode/src/vs/workbench/contrib/extensions/common/extensionsUtils.js +104 -0
  53. package/vscode/src/vs/workbench/contrib/extensions/common/reportExtensionIssueAction.js +31 -0
  54. package/vscode/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.js +41 -0
  55. package/vscode/src/vs/workbench/contrib/markdown/browser/markdownDocumentRenderer.js +207 -0
  56. package/vscode/src/vs/workbench/contrib/update/common/update.js +3 -0
  57. package/vscode/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.js +84 -0
  58. package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.js +634 -0
  59. package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +883 -0
  60. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementChannelClient.js +109 -0
  61. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementServerService.js +62 -0
  62. package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementService.js +633 -0
  63. package/vscode/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.js +58 -0
  64. package/vscode/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.js +269 -0
  65. package/vscode/src/vs/workbench/services/extensionRecommendations/common/extensionIgnoredRecommendationsService.js +83 -0
  66. package/vscode/src/vs/workbench/services/remote/common/remoteExtensionsScanner.js +73 -0
@@ -0,0 +1,634 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
3
+ import { Emitter, Event } from 'monaco-editor/esm/vs/base/common/event.js';
4
+ import { Disposable, toDisposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
5
+ import { ENABLED_EXTENSIONS_STORAGE_PATH, DISABLED_EXTENSIONS_STORAGE_PATH, IGlobalExtensionEnablementService, IExtensionManagementService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
6
+ import { IExtensionManagementServerService, IWorkbenchExtensionManagementService } from 'vscode/vscode/vs/workbench/services/extensionManagement/common/extensionManagement';
7
+ import { getExtensionDependencies, areSameExtensions, BetterMergeId } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
8
+ import { IWorkspaceContextService } from 'monaco-editor/esm/vs/platform/workspace/common/workspace.js';
9
+ import { IStorageService } from 'monaco-editor/esm/vs/platform/storage/common/storage.js';
10
+ import { IWorkbenchEnvironmentService } from 'vscode/vscode/vs/workbench/services/environment/common/environmentService';
11
+ import { isLanguagePackExtension, isAuthenticationProviderExtension, isResolverExtension } from 'monaco-editor/esm/vs/platform/extensions/common/extensions.js';
12
+ import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
13
+ import { StorageManager } from '../../../../platform/extensionManagement/common/extensionEnablementService.js';
14
+ import { webWorkerExtHostConfig } from 'vscode/vscode/vs/workbench/services/extensions/common/extensions';
15
+ import { IUserDataSyncAccountService } from 'vscode/vscode/vs/platform/userDataSync/common/userDataSyncAccount';
16
+ import { IUserDataSyncEnablementService } from 'vscode/vscode/vs/platform/userDataSync/common/userDataSync';
17
+ import { ILifecycleService } from 'vscode/vscode/vs/workbench/services/lifecycle/common/lifecycle';
18
+ import { Severity, NotificationPriority, INotificationService } from 'monaco-editor/esm/vs/platform/notification/common/notification.js';
19
+ import { IHostService } from 'vscode/vscode/vs/workbench/services/host/browser/host';
20
+ import { IExtensionBisectService } from 'vscode/vscode/vs/workbench/services/extensionManagement/browser/extensionBisect';
21
+ import { IWorkspaceTrustManagementService, IWorkspaceTrustRequestService } from 'monaco-editor/esm/vs/platform/workspace/common/workspaceTrust.js';
22
+ import { IExtensionManifestPropertiesService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService';
23
+ import { isVirtualWorkspace } from 'vscode/vscode/vs/platform/workspace/common/virtualWorkspace';
24
+ import { ILogService } from 'monaco-editor/esm/vs/platform/log/common/log.js';
25
+ import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
26
+
27
+ const SOURCE = 'IWorkbenchExtensionEnablementService';
28
+ let ExtensionEnablementService = class ExtensionEnablementService extends Disposable {
29
+ constructor(storageService, globalExtensionEnablementService, contextService, environmentService, extensionManagementService, configurationService, extensionManagementServerService, userDataSyncEnablementService, userDataSyncAccountService, lifecycleService, notificationService, hostService, extensionBisectService, workspaceTrustManagementService, workspaceTrustRequestService, extensionManifestPropertiesService, instantiationService) {
30
+ super();
31
+ this.globalExtensionEnablementService = globalExtensionEnablementService;
32
+ this.contextService = contextService;
33
+ this.environmentService = environmentService;
34
+ this.configurationService = configurationService;
35
+ this.extensionManagementServerService = extensionManagementServerService;
36
+ this.userDataSyncEnablementService = userDataSyncEnablementService;
37
+ this.userDataSyncAccountService = userDataSyncAccountService;
38
+ this.lifecycleService = lifecycleService;
39
+ this.notificationService = notificationService;
40
+ this.extensionBisectService = extensionBisectService;
41
+ this.workspaceTrustManagementService = workspaceTrustManagementService;
42
+ this.workspaceTrustRequestService = workspaceTrustRequestService;
43
+ this.extensionManifestPropertiesService = extensionManifestPropertiesService;
44
+ this._onEnablementChanged = ( new Emitter());
45
+ this.onEnablementChanged = this._onEnablementChanged.event;
46
+ this.storageManger = this._register(( new StorageManager(storageService)));
47
+ const uninstallDisposable = this._register(Event.filter(extensionManagementService.onDidUninstallExtension, e => !e.error)(({ identifier }) => this._reset(identifier)));
48
+ let isDisposed = false;
49
+ this._register(toDisposable(() => isDisposed = true));
50
+ this.extensionsManager = this._register(instantiationService.createInstance(ExtensionsManager));
51
+ this.extensionsManager.whenInitialized().then(() => {
52
+ if (!isDisposed) {
53
+ this._register(this.extensionsManager.onDidChangeExtensions(({ added, removed, isProfileSwitch }) => this._onDidChangeExtensions(added, removed, isProfileSwitch)));
54
+ uninstallDisposable.dispose();
55
+ }
56
+ });
57
+ this._register(this.globalExtensionEnablementService.onDidChangeEnablement(({ extensions, source }) => this._onDidChangeGloballyDisabledExtensions(extensions, source)));
58
+ if (this.allUserExtensionsDisabled) {
59
+ this.lifecycleService.when(4 ).then(() => {
60
+ this.notificationService.prompt(Severity.Info, ( localizeWithPath(
61
+ 'vs/workbench/services/extensionManagement/browser/extensionEnablementService',
62
+ 'extensionsDisabled',
63
+ "All installed extensions are temporarily disabled."
64
+ )), [{
65
+ label: ( localizeWithPath(
66
+ 'vs/workbench/services/extensionManagement/browser/extensionEnablementService',
67
+ 'Reload',
68
+ "Reload and Enable Extensions"
69
+ )),
70
+ run: () => hostService.reload({ disableExtensions: false })
71
+ }], {
72
+ sticky: true,
73
+ priority: NotificationPriority.URGENT
74
+ });
75
+ });
76
+ }
77
+ }
78
+ get hasWorkspace() {
79
+ return this.contextService.getWorkbenchState() !== 1 ;
80
+ }
81
+ get allUserExtensionsDisabled() {
82
+ return this.environmentService.disableExtensions === true;
83
+ }
84
+ getEnablementState(extension) {
85
+ return this._computeEnablementState(extension, this.extensionsManager.extensions, this.getWorkspaceType());
86
+ }
87
+ getEnablementStates(extensions, workspaceTypeOverrides = {}) {
88
+ const extensionsEnablements = ( new Map());
89
+ const workspaceType = { ...this.getWorkspaceType(), ...workspaceTypeOverrides };
90
+ return ( extensions.map(
91
+ extension => this._computeEnablementState(extension, extensions, workspaceType, extensionsEnablements)
92
+ ));
93
+ }
94
+ getDependenciesEnablementStates(extension) {
95
+ return ( getExtensionDependencies(this.extensionsManager.extensions, extension).map(e => [e, this.getEnablementState(e)]));
96
+ }
97
+ canChangeEnablement(extension) {
98
+ try {
99
+ this.throwErrorIfCannotChangeEnablement(extension);
100
+ return true;
101
+ }
102
+ catch (error) {
103
+ return false;
104
+ }
105
+ }
106
+ canChangeWorkspaceEnablement(extension) {
107
+ if (!this.canChangeEnablement(extension)) {
108
+ return false;
109
+ }
110
+ try {
111
+ this.throwErrorIfCannotChangeWorkspaceEnablement(extension);
112
+ return true;
113
+ }
114
+ catch (error) {
115
+ return false;
116
+ }
117
+ }
118
+ throwErrorIfCannotChangeEnablement(extension, donotCheckDependencies) {
119
+ if (isLanguagePackExtension(extension.manifest)) {
120
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot disable language pack extension', "Cannot change enablement of {0} extension because it contributes language packs.", extension.manifest.displayName || extension.identifier.id));
121
+ }
122
+ if (this.userDataSyncEnablementService.isEnabled() && this.userDataSyncAccountService.account &&
123
+ isAuthenticationProviderExtension(extension.manifest) && ( extension.manifest.contributes.authentication.some(
124
+ a => a.id === this.userDataSyncAccountService.account.authenticationProviderId
125
+ ))) {
126
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot disable auth extension', "Cannot change enablement {0} extension because Settings Sync depends on it.", extension.manifest.displayName || extension.identifier.id));
127
+ }
128
+ if (this._isEnabledInEnv(extension)) {
129
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot change enablement environment', "Cannot change enablement of {0} extension because it is enabled in environment", extension.manifest.displayName || extension.identifier.id));
130
+ }
131
+ this.throwErrorIfEnablementStateCannotBeChanged(extension, this.getEnablementState(extension), donotCheckDependencies);
132
+ }
133
+ throwErrorIfEnablementStateCannotBeChanged(extension, enablementStateOfExtension, donotCheckDependencies) {
134
+ switch (enablementStateOfExtension) {
135
+ case 2 :
136
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot change disablement environment', "Cannot change enablement of {0} extension because it is disabled in environment", extension.manifest.displayName || extension.identifier.id));
137
+ case 4 :
138
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot change enablement virtual workspace', "Cannot change enablement of {0} extension because it does not support virtual workspaces", extension.manifest.displayName || extension.identifier.id));
139
+ case 1 :
140
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot change enablement extension kind', "Cannot change enablement of {0} extension because of its extension kind", extension.manifest.displayName || extension.identifier.id));
141
+ case 5 :
142
+ if (donotCheckDependencies) {
143
+ break;
144
+ }
145
+ for (const dependency of getExtensionDependencies(this.extensionsManager.extensions, extension)) {
146
+ if (this.isEnabled(dependency)) {
147
+ continue;
148
+ }
149
+ try {
150
+ this.throwErrorIfCannotChangeEnablement(dependency, true);
151
+ }
152
+ catch (error) {
153
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot change enablement dependency', "Cannot enable '{0}' extension because it depends on '{1}' extension that cannot be enabled", extension.manifest.displayName || extension.identifier.id, dependency.manifest.displayName || dependency.identifier.id));
154
+ }
155
+ }
156
+ }
157
+ }
158
+ throwErrorIfCannotChangeWorkspaceEnablement(extension) {
159
+ if (!this.hasWorkspace) {
160
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'noWorkspace', "No workspace."));
161
+ }
162
+ if (isAuthenticationProviderExtension(extension.manifest)) {
163
+ throw new Error(localizeWithPath('vs/workbench/services/extensionManagement/browser/extensionEnablementService', 'cannot disable auth extension in workspace', "Cannot change enablement of {0} extension in workspace because it contributes authentication providers", extension.manifest.displayName || extension.identifier.id));
164
+ }
165
+ }
166
+ async setEnablement(extensions, newState) {
167
+ await this.extensionsManager.whenInitialized();
168
+ if (newState === 8 || newState === 9 ) {
169
+ extensions.push(...this.getExtensionsToEnableRecursively(extensions, this.extensionsManager.extensions, newState, { dependencies: true, pack: true }));
170
+ }
171
+ const workspace = newState === 7 || newState === 9 ;
172
+ for (const extension of extensions) {
173
+ if (workspace) {
174
+ this.throwErrorIfCannotChangeWorkspaceEnablement(extension);
175
+ }
176
+ else {
177
+ this.throwErrorIfCannotChangeEnablement(extension);
178
+ }
179
+ }
180
+ const result = [];
181
+ for (const extension of extensions) {
182
+ const enablementState = this.getEnablementState(extension);
183
+ if (enablementState === 0
184
+ || (enablementState === 5 && this.getDependenciesEnablementStates(extension).every(([, e]) => this.isEnabledEnablementState(e) || e === 0 ))) {
185
+ const trustState = await this.workspaceTrustRequestService.requestWorkspaceTrust();
186
+ result.push(trustState ?? false);
187
+ }
188
+ else {
189
+ result.push(await this._setUserEnablementState(extension, newState));
190
+ }
191
+ }
192
+ const changedExtensions = extensions.filter((e, index) => result[index]);
193
+ if (changedExtensions.length) {
194
+ this._onEnablementChanged.fire(changedExtensions);
195
+ }
196
+ return result;
197
+ }
198
+ getExtensionsToEnableRecursively(extensions, allExtensions, enablementState, options, checked = []) {
199
+ if (!options.dependencies && !options.pack) {
200
+ return [];
201
+ }
202
+ const toCheck = extensions.filter(e => checked.indexOf(e) === -1);
203
+ if (!toCheck.length) {
204
+ return [];
205
+ }
206
+ for (const extension of toCheck) {
207
+ checked.push(extension);
208
+ }
209
+ const extensionsToEnable = [];
210
+ for (const extension of allExtensions) {
211
+ if (( checked.some(e => areSameExtensions(e.identifier, extension.identifier)))) {
212
+ continue;
213
+ }
214
+ const enablementStateOfExtension = this.getEnablementState(extension);
215
+ if (this.isEnabledEnablementState(enablementStateOfExtension)) {
216
+ continue;
217
+ }
218
+ if (enablementStateOfExtension === 1 ) {
219
+ continue;
220
+ }
221
+ if (( extensions.some(
222
+ e => (options.dependencies && e.manifest.extensionDependencies?.some(id => areSameExtensions({ id }, extension.identifier)))
223
+ || (options.pack && e.manifest.extensionPack?.some(id => areSameExtensions({ id }, extension.identifier)))
224
+ ))) {
225
+ const index = extensionsToEnable.findIndex(e => areSameExtensions(e.identifier, extension.identifier));
226
+ if (index === -1) {
227
+ extensionsToEnable.push(extension);
228
+ }
229
+ else {
230
+ try {
231
+ this.throwErrorIfEnablementStateCannotBeChanged(extension, enablementStateOfExtension, true);
232
+ extensionsToEnable.splice(index, 1, extension);
233
+ }
234
+ catch (error) { }
235
+ }
236
+ }
237
+ }
238
+ if (extensionsToEnable.length) {
239
+ extensionsToEnable.push(...this.getExtensionsToEnableRecursively(extensionsToEnable, allExtensions, enablementState, options, checked));
240
+ }
241
+ return extensionsToEnable;
242
+ }
243
+ _setUserEnablementState(extension, newState) {
244
+ const currentState = this._getUserEnablementState(extension.identifier);
245
+ if (currentState === newState) {
246
+ return Promise.resolve(false);
247
+ }
248
+ switch (newState) {
249
+ case 8 :
250
+ this._enableExtension(extension.identifier);
251
+ break;
252
+ case 6 :
253
+ this._disableExtension(extension.identifier);
254
+ break;
255
+ case 9 :
256
+ this._enableExtensionInWorkspace(extension.identifier);
257
+ break;
258
+ case 7 :
259
+ this._disableExtensionInWorkspace(extension.identifier);
260
+ break;
261
+ }
262
+ return Promise.resolve(true);
263
+ }
264
+ isEnabled(extension) {
265
+ const enablementState = this.getEnablementState(extension);
266
+ return this.isEnabledEnablementState(enablementState);
267
+ }
268
+ isEnabledEnablementState(enablementState) {
269
+ return enablementState === 3 || enablementState === 9 || enablementState === 8 ;
270
+ }
271
+ isDisabledGlobally(extension) {
272
+ return this._isDisabledGlobally(extension.identifier);
273
+ }
274
+ _computeEnablementState(extension, extensions, workspaceType, computedEnablementStates) {
275
+ computedEnablementStates = computedEnablementStates ?? ( new Map());
276
+ let enablementState = computedEnablementStates.get(extension);
277
+ if (enablementState !== undefined) {
278
+ return enablementState;
279
+ }
280
+ enablementState = this._getUserEnablementState(extension.identifier);
281
+ if (this.extensionBisectService.isDisabledByBisect(extension)) {
282
+ enablementState = 2 ;
283
+ }
284
+ else if (this._isDisabledInEnv(extension)) {
285
+ enablementState = 2 ;
286
+ }
287
+ else if (this._isDisabledByVirtualWorkspace(extension, workspaceType)) {
288
+ enablementState = 4 ;
289
+ }
290
+ else if (this.isEnabledEnablementState(enablementState) && this._isDisabledByWorkspaceTrust(extension, workspaceType)) {
291
+ enablementState = 0 ;
292
+ }
293
+ else if (this._isDisabledByExtensionKind(extension)) {
294
+ enablementState = 1 ;
295
+ }
296
+ else if (this.isEnabledEnablementState(enablementState) && this._isDisabledByExtensionDependency(extension, extensions, workspaceType, computedEnablementStates)) {
297
+ enablementState = 5 ;
298
+ }
299
+ else if (!this.isEnabledEnablementState(enablementState) && this._isEnabledInEnv(extension)) {
300
+ enablementState = 3 ;
301
+ }
302
+ computedEnablementStates.set(extension, enablementState);
303
+ return enablementState;
304
+ }
305
+ _isDisabledInEnv(extension) {
306
+ if (this.allUserExtensionsDisabled) {
307
+ return !extension.isBuiltin && !isResolverExtension(extension.manifest, this.environmentService.remoteAuthority);
308
+ }
309
+ const disabledExtensions = this.environmentService.disableExtensions;
310
+ if (Array.isArray(disabledExtensions)) {
311
+ return ( disabledExtensions.some(id => areSameExtensions({ id }, extension.identifier)));
312
+ }
313
+ if (areSameExtensions({ id: BetterMergeId.value }, extension.identifier)) {
314
+ return true;
315
+ }
316
+ return false;
317
+ }
318
+ _isEnabledInEnv(extension) {
319
+ const enabledExtensions = this.environmentService.enableExtensions;
320
+ if (Array.isArray(enabledExtensions)) {
321
+ return ( enabledExtensions.some(id => areSameExtensions({ id }, extension.identifier)));
322
+ }
323
+ return false;
324
+ }
325
+ _isDisabledByVirtualWorkspace(extension, workspaceType) {
326
+ if (!workspaceType.virtual) {
327
+ return false;
328
+ }
329
+ if (this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(extension.manifest) !== false) {
330
+ return false;
331
+ }
332
+ if (this.extensionManagementServerService.getExtensionManagementServer(extension) === this.extensionManagementServerService.webExtensionManagementServer && this.extensionManifestPropertiesService.canExecuteOnWeb(extension.manifest)) {
333
+ return false;
334
+ }
335
+ return true;
336
+ }
337
+ _isDisabledByExtensionKind(extension) {
338
+ if (this.extensionManagementServerService.remoteExtensionManagementServer || this.extensionManagementServerService.webExtensionManagementServer) {
339
+ const installLocation = this.extensionManagementServerService.getExtensionInstallLocation(extension);
340
+ for (const extensionKind of this.extensionManifestPropertiesService.getExtensionKind(extension.manifest)) {
341
+ if (extensionKind === 'ui') {
342
+ if (installLocation === 1 ) {
343
+ return false;
344
+ }
345
+ }
346
+ if (extensionKind === 'workspace') {
347
+ if (installLocation === 2 ) {
348
+ return false;
349
+ }
350
+ }
351
+ if (extensionKind === 'web') {
352
+ if (this.extensionManagementServerService.webExtensionManagementServer ) {
353
+ if (installLocation === 3 || installLocation === 2 ) {
354
+ return false;
355
+ }
356
+ }
357
+ else if (installLocation === 1 ) {
358
+ const enableLocalWebWorker = this.configurationService.getValue(webWorkerExtHostConfig);
359
+ if (enableLocalWebWorker === true || enableLocalWebWorker === 'auto') {
360
+ return false;
361
+ }
362
+ }
363
+ }
364
+ }
365
+ return true;
366
+ }
367
+ return false;
368
+ }
369
+ _isDisabledByWorkspaceTrust(extension, workspaceType) {
370
+ if (workspaceType.trusted) {
371
+ return false;
372
+ }
373
+ return this.extensionManifestPropertiesService.getExtensionUntrustedWorkspaceSupportType(extension.manifest) === false;
374
+ }
375
+ _isDisabledByExtensionDependency(extension, extensions, workspaceType, computedEnablementStates) {
376
+ const dependencyExtensions = extension.manifest.extensionDependencies
377
+ ? extensions.filter(e => ( extension.manifest.extensionDependencies.some(
378
+ id => areSameExtensions(e.identifier, { id }) && this.extensionManagementServerService.getExtensionManagementServer(e) === this.extensionManagementServerService.getExtensionManagementServer(extension)
379
+ )))
380
+ : [];
381
+ if (!dependencyExtensions.length) {
382
+ return false;
383
+ }
384
+ const hasEnablementState = ( computedEnablementStates.has(extension));
385
+ if (!hasEnablementState) {
386
+ computedEnablementStates.set(extension, 8 );
387
+ }
388
+ try {
389
+ for (const dependencyExtension of dependencyExtensions) {
390
+ const enablementState = this._computeEnablementState(dependencyExtension, extensions, workspaceType, computedEnablementStates);
391
+ if (!this.isEnabledEnablementState(enablementState) && enablementState !== 1 ) {
392
+ return true;
393
+ }
394
+ }
395
+ }
396
+ finally {
397
+ if (!hasEnablementState) {
398
+ computedEnablementStates.delete(extension);
399
+ }
400
+ }
401
+ return false;
402
+ }
403
+ _getUserEnablementState(identifier) {
404
+ if (this.hasWorkspace) {
405
+ if (this._getWorkspaceEnabledExtensions().filter(e => areSameExtensions(e, identifier))[0]) {
406
+ return 9 ;
407
+ }
408
+ if (this._getWorkspaceDisabledExtensions().filter(e => areSameExtensions(e, identifier))[0]) {
409
+ return 7 ;
410
+ }
411
+ }
412
+ if (this._isDisabledGlobally(identifier)) {
413
+ return 6 ;
414
+ }
415
+ return 8 ;
416
+ }
417
+ _isDisabledGlobally(identifier) {
418
+ return ( this.globalExtensionEnablementService.getDisabledExtensions().some(e => areSameExtensions(e, identifier)));
419
+ }
420
+ _enableExtension(identifier) {
421
+ this._removeFromWorkspaceDisabledExtensions(identifier);
422
+ this._removeFromWorkspaceEnabledExtensions(identifier);
423
+ return this.globalExtensionEnablementService.enableExtension(identifier, SOURCE);
424
+ }
425
+ _disableExtension(identifier) {
426
+ this._removeFromWorkspaceDisabledExtensions(identifier);
427
+ this._removeFromWorkspaceEnabledExtensions(identifier);
428
+ return this.globalExtensionEnablementService.disableExtension(identifier, SOURCE);
429
+ }
430
+ _enableExtensionInWorkspace(identifier) {
431
+ this._removeFromWorkspaceDisabledExtensions(identifier);
432
+ this._addToWorkspaceEnabledExtensions(identifier);
433
+ }
434
+ _disableExtensionInWorkspace(identifier) {
435
+ this._addToWorkspaceDisabledExtensions(identifier);
436
+ this._removeFromWorkspaceEnabledExtensions(identifier);
437
+ }
438
+ _addToWorkspaceDisabledExtensions(identifier) {
439
+ if (!this.hasWorkspace) {
440
+ return Promise.resolve(false);
441
+ }
442
+ const disabledExtensions = this._getWorkspaceDisabledExtensions();
443
+ if (disabledExtensions.every(e => !areSameExtensions(e, identifier))) {
444
+ disabledExtensions.push(identifier);
445
+ this._setDisabledExtensions(disabledExtensions);
446
+ return Promise.resolve(true);
447
+ }
448
+ return Promise.resolve(false);
449
+ }
450
+ async _removeFromWorkspaceDisabledExtensions(identifier) {
451
+ if (!this.hasWorkspace) {
452
+ return false;
453
+ }
454
+ const disabledExtensions = this._getWorkspaceDisabledExtensions();
455
+ for (let index = 0; index < disabledExtensions.length; index++) {
456
+ const disabledExtension = disabledExtensions[index];
457
+ if (areSameExtensions(disabledExtension, identifier)) {
458
+ disabledExtensions.splice(index, 1);
459
+ this._setDisabledExtensions(disabledExtensions);
460
+ return true;
461
+ }
462
+ }
463
+ return false;
464
+ }
465
+ _addToWorkspaceEnabledExtensions(identifier) {
466
+ if (!this.hasWorkspace) {
467
+ return false;
468
+ }
469
+ const enabledExtensions = this._getWorkspaceEnabledExtensions();
470
+ if (enabledExtensions.every(e => !areSameExtensions(e, identifier))) {
471
+ enabledExtensions.push(identifier);
472
+ this._setEnabledExtensions(enabledExtensions);
473
+ return true;
474
+ }
475
+ return false;
476
+ }
477
+ _removeFromWorkspaceEnabledExtensions(identifier) {
478
+ if (!this.hasWorkspace) {
479
+ return false;
480
+ }
481
+ const enabledExtensions = this._getWorkspaceEnabledExtensions();
482
+ for (let index = 0; index < enabledExtensions.length; index++) {
483
+ const disabledExtension = enabledExtensions[index];
484
+ if (areSameExtensions(disabledExtension, identifier)) {
485
+ enabledExtensions.splice(index, 1);
486
+ this._setEnabledExtensions(enabledExtensions);
487
+ return true;
488
+ }
489
+ }
490
+ return false;
491
+ }
492
+ _getWorkspaceEnabledExtensions() {
493
+ return this._getExtensions(ENABLED_EXTENSIONS_STORAGE_PATH);
494
+ }
495
+ _setEnabledExtensions(enabledExtensions) {
496
+ this._setExtensions(ENABLED_EXTENSIONS_STORAGE_PATH, enabledExtensions);
497
+ }
498
+ _getWorkspaceDisabledExtensions() {
499
+ return this._getExtensions(DISABLED_EXTENSIONS_STORAGE_PATH);
500
+ }
501
+ _setDisabledExtensions(disabledExtensions) {
502
+ this._setExtensions(DISABLED_EXTENSIONS_STORAGE_PATH, disabledExtensions);
503
+ }
504
+ _getExtensions(storageId) {
505
+ if (!this.hasWorkspace) {
506
+ return [];
507
+ }
508
+ return this.storageManger.get(storageId, 1 );
509
+ }
510
+ _setExtensions(storageId, extensions) {
511
+ this.storageManger.set(storageId, extensions, 1 );
512
+ }
513
+ async _onDidChangeGloballyDisabledExtensions(extensionIdentifiers, source) {
514
+ if (source !== SOURCE) {
515
+ await this.extensionsManager.whenInitialized();
516
+ const extensions = this.extensionsManager.extensions.filter(installedExtension => ( extensionIdentifiers.some(identifier => areSameExtensions(identifier, installedExtension.identifier))));
517
+ this._onEnablementChanged.fire(extensions);
518
+ }
519
+ }
520
+ _onDidChangeExtensions(added, removed, isProfileSwitch) {
521
+ const disabledExtensions = added.filter(e => !this.isEnabledEnablementState(this.getEnablementState(e)));
522
+ if (disabledExtensions.length) {
523
+ this._onEnablementChanged.fire(disabledExtensions);
524
+ }
525
+ if (!isProfileSwitch) {
526
+ removed.forEach(({ identifier }) => this._reset(identifier));
527
+ }
528
+ }
529
+ async updateExtensionsEnablementsWhenWorkspaceTrustChanges() {
530
+ await this.extensionsManager.whenInitialized();
531
+ const computeEnablementStates = (workspaceType) => {
532
+ const extensionsEnablements = ( new Map());
533
+ return ( this.extensionsManager.extensions.map(
534
+ extension => [extension, this._computeEnablementState(extension, this.extensionsManager.extensions, workspaceType, extensionsEnablements)]
535
+ ));
536
+ };
537
+ const workspaceType = this.getWorkspaceType();
538
+ const enablementStatesWithTrustedWorkspace = computeEnablementStates({ ...workspaceType, trusted: true });
539
+ const enablementStatesWithUntrustedWorkspace = computeEnablementStates({ ...workspaceType, trusted: false });
540
+ const enablementChangedExtensionsBecauseOfTrust = ( enablementStatesWithTrustedWorkspace.filter(([, enablementState], index) => enablementState !== enablementStatesWithUntrustedWorkspace[index][1]).map(([extension]) => extension));
541
+ if (enablementChangedExtensionsBecauseOfTrust.length) {
542
+ this._onEnablementChanged.fire(enablementChangedExtensionsBecauseOfTrust);
543
+ }
544
+ }
545
+ getWorkspaceType() {
546
+ return { trusted: this.workspaceTrustManagementService.isWorkspaceTrusted(), virtual: isVirtualWorkspace(this.contextService.getWorkspace()) };
547
+ }
548
+ _reset(extension) {
549
+ this._removeFromWorkspaceDisabledExtensions(extension);
550
+ this._removeFromWorkspaceEnabledExtensions(extension);
551
+ this.globalExtensionEnablementService.enableExtension(extension);
552
+ }
553
+ };
554
+ ExtensionEnablementService = ( __decorate([
555
+ ( __param(0, IStorageService)),
556
+ ( __param(1, IGlobalExtensionEnablementService)),
557
+ ( __param(2, IWorkspaceContextService)),
558
+ ( __param(3, IWorkbenchEnvironmentService)),
559
+ ( __param(4, IExtensionManagementService)),
560
+ ( __param(5, IConfigurationService)),
561
+ ( __param(6, IExtensionManagementServerService)),
562
+ ( __param(7, IUserDataSyncEnablementService)),
563
+ ( __param(8, IUserDataSyncAccountService)),
564
+ ( __param(9, ILifecycleService)),
565
+ ( __param(10, INotificationService)),
566
+ ( __param(11, IHostService)),
567
+ ( __param(12, IExtensionBisectService)),
568
+ ( __param(13, IWorkspaceTrustManagementService)),
569
+ ( __param(14, IWorkspaceTrustRequestService)),
570
+ ( __param(15, IExtensionManifestPropertiesService)),
571
+ ( __param(16, IInstantiationService))
572
+ ], ExtensionEnablementService));
573
+ let ExtensionsManager = class ExtensionsManager extends Disposable {
574
+ get extensions() { return this._extensions; }
575
+ constructor(extensionManagementService, extensionManagementServerService, logService) {
576
+ super();
577
+ this.extensionManagementService = extensionManagementService;
578
+ this.extensionManagementServerService = extensionManagementServerService;
579
+ this.logService = logService;
580
+ this._extensions = [];
581
+ this._onDidChangeExtensions = this._register(( new Emitter()));
582
+ this.onDidChangeExtensions = this._onDidChangeExtensions.event;
583
+ this.disposed = false;
584
+ this._register(toDisposable(() => this.disposed = true));
585
+ this.initializePromise = this.initialize();
586
+ }
587
+ whenInitialized() {
588
+ return this.initializePromise;
589
+ }
590
+ async initialize() {
591
+ try {
592
+ this._extensions = await this.extensionManagementService.getInstalled();
593
+ if (this.disposed) {
594
+ return;
595
+ }
596
+ this._onDidChangeExtensions.fire({ added: this.extensions, removed: [], isProfileSwitch: false });
597
+ }
598
+ catch (error) {
599
+ this.logService.error(error);
600
+ }
601
+ this._register(this.extensionManagementService.onDidInstallExtensions(e => this.updateExtensions(e.reduce((result, { local, operation }) => {
602
+ if (local && operation !== 4 ) {
603
+ result.push(local);
604
+ }
605
+ return result;
606
+ }, []), [], undefined, false)));
607
+ this._register(Event.filter(this.extensionManagementService.onDidUninstallExtension, (e => !e.error))(e => this.updateExtensions([], [e.identifier], e.server, false)));
608
+ this._register(this.extensionManagementService.onDidChangeProfile(({ added, removed, server }) => {
609
+ this.updateExtensions(added, ( removed.map(({ identifier }) => identifier)), server, true);
610
+ }));
611
+ }
612
+ updateExtensions(added, identifiers, server, isProfileSwitch) {
613
+ if (added.length) {
614
+ this._extensions.push(...added);
615
+ }
616
+ const removed = [];
617
+ for (const identifier of identifiers) {
618
+ const index = this._extensions.findIndex(e => areSameExtensions(e.identifier, identifier) && this.extensionManagementServerService.getExtensionManagementServer(e) === server);
619
+ if (index !== -1) {
620
+ removed.push(...this._extensions.splice(index, 1));
621
+ }
622
+ }
623
+ if (added.length || removed.length) {
624
+ this._onDidChangeExtensions.fire({ added, removed, isProfileSwitch });
625
+ }
626
+ }
627
+ };
628
+ ExtensionsManager = ( __decorate([
629
+ ( __param(0, IWorkbenchExtensionManagementService)),
630
+ ( __param(1, IExtensionManagementServerService)),
631
+ ( __param(2, ILogService))
632
+ ], ExtensionsManager));
633
+
634
+ export { ExtensionEnablementService };