@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.
- package/extensionGallery.d.ts +12 -0
- package/extensionGallery.js +76 -0
- package/external/rollup-plugin-styles/dist/runtime/inject-css.js +3 -0
- package/external/tslib/tslib.es6.js +11 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/override/vs/platform/dialogs/common/dialogs.js +8 -0
- package/package.json +30 -0
- package/vscode/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.js +784 -0
- package/vscode/src/vs/platform/extensionManagement/common/extensionEnablementService.js +142 -0
- package/vscode/src/vs/platform/extensionManagement/common/extensionGalleryService.js +855 -0
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementIpc.js +119 -0
- package/vscode/src/vs/platform/extensionManagement/common/extensionTipsService.js +57 -0
- package/vscode/src/vs/platform/extensionManagement/common/unsupportedExtensionsMigration.js +58 -0
- package/vscode/src/vs/platform/externalServices/common/marketplace.js +17 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.js +492 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/browserRuntimeExtensionsEditor.js +28 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.js +78 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/deprecatedExtensionsChecker.js +87 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.js +60 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEditor.js +1868 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEnablementWorkspaceTrustTransitionParticipant.js +52 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.js +437 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendations.js +17 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.js +221 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.js +2063 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.web.contribution.js +13 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActivationProgress.js +46 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.js +65 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsDependencyChecker.js +98 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsList.js +224 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsQuickAccess.js +121 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewer.js +285 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.js +912 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViews.js +1270 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWidgets.js +824 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.js +1730 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.js +324 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/keymapRecommendations.js +28 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/languageRecommendations.js +28 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/media/extension.css.js +6 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionEditor.css.js +6 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionsViewlet.css.js +6 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionsWidgets.css.js +6 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/media/runtimeExtensionsEditor.css.js +6 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/remoteRecommendations.js +29 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/unsupportedExtensionsMigrationContribution.js +26 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/webRecommendations.js +38 -0
- package/vscode/src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.js +88 -0
- package/vscode/src/vs/workbench/contrib/extensions/common/extensionQuery.js +67 -0
- package/vscode/src/vs/workbench/contrib/extensions/common/extensionsInput.js +43 -0
- package/vscode/src/vs/workbench/contrib/extensions/common/extensionsUtils.js +104 -0
- package/vscode/src/vs/workbench/contrib/extensions/common/reportExtensionIssueAction.js +31 -0
- package/vscode/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.js +41 -0
- package/vscode/src/vs/workbench/contrib/markdown/browser/markdownDocumentRenderer.js +207 -0
- package/vscode/src/vs/workbench/contrib/update/common/update.js +3 -0
- package/vscode/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.js +84 -0
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.js +634 -0
- package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +883 -0
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementChannelClient.js +109 -0
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementServerService.js +62 -0
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementService.js +633 -0
- package/vscode/src/vs/workbench/services/extensionManagement/common/remoteExtensionManagementService.js +58 -0
- package/vscode/src/vs/workbench/services/extensionManagement/common/webExtensionManagementService.js +269 -0
- package/vscode/src/vs/workbench/services/extensionRecommendations/common/extensionIgnoredRecommendationsService.js +83 -0
- package/vscode/src/vs/workbench/services/remote/common/remoteExtensionsScanner.js +73 -0
package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementService.js
ADDED
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
|
|
2
|
+
import { Event, EventMultiplexer } from 'monaco-editor/esm/vs/base/common/event.js';
|
|
3
|
+
import { ExtensionManagementErrorCode, EXTENSION_INSTALL_SYNC_CONTEXT, ExtensionManagementError, IExtensionGalleryService } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
|
|
4
|
+
import { IExtensionManagementServerService } from 'vscode/vscode/vs/workbench/services/extensionManagement/common/extensionManagement';
|
|
5
|
+
import { isLanguagePackExtension, getWorkspaceSupportTypeMessage } from 'monaco-editor/esm/vs/platform/extensions/common/extensions.js';
|
|
6
|
+
import { Disposable } from 'monaco-editor/esm/vs/base/common/lifecycle.js';
|
|
7
|
+
import { IConfigurationService } from 'monaco-editor/esm/vs/platform/configuration/common/configuration.js';
|
|
8
|
+
import { CancellationToken } from 'monaco-editor/esm/vs/base/common/cancellation.js';
|
|
9
|
+
import { areSameExtensions, computeTargetPlatform } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
|
|
10
|
+
import { localizeWithPath } from 'monaco-editor/esm/vs/nls.js';
|
|
11
|
+
import { IProductService } from 'monaco-editor/esm/vs/platform/product/common/productService.js';
|
|
12
|
+
import { Schemas } from 'monaco-editor/esm/vs/base/common/network.js';
|
|
13
|
+
import { IDownloadService } from 'vscode/vscode/vs/platform/download/common/download';
|
|
14
|
+
import { flatten } from 'monaco-editor/esm/vs/base/common/arrays.js';
|
|
15
|
+
import '../../../../../../../override/vs/platform/dialogs/common/dialogs.js';
|
|
16
|
+
import Severity from 'monaco-editor/esm/vs/base/common/severity.js';
|
|
17
|
+
import { IUserDataSyncEnablementService } from 'vscode/vscode/vs/platform/userDataSync/common/userDataSync';
|
|
18
|
+
import { Promises } from 'monaco-editor/esm/vs/base/common/async.js';
|
|
19
|
+
import { IWorkspaceTrustRequestService } from 'monaco-editor/esm/vs/platform/workspace/common/workspaceTrust.js';
|
|
20
|
+
import { IExtensionManifestPropertiesService } from 'vscode/vscode/vs/workbench/services/extensions/common/extensionManifestPropertiesService';
|
|
21
|
+
import { IInstantiationService } from 'monaco-editor/esm/vs/platform/instantiation/common/instantiation.js';
|
|
22
|
+
import { ICommandService } from 'monaco-editor/esm/vs/platform/commands/common/commands.js';
|
|
23
|
+
import { isUndefined } from 'monaco-editor/esm/vs/base/common/types.js';
|
|
24
|
+
import { IFileService } from 'monaco-editor/esm/vs/platform/files/common/files.js';
|
|
25
|
+
import { ILogService } from 'monaco-editor/esm/vs/platform/log/common/log.js';
|
|
26
|
+
import { CancellationError } from 'monaco-editor/esm/vs/base/common/errors.js';
|
|
27
|
+
import { IUserDataProfileService } from 'vscode/vscode/vs/workbench/services/userDataProfile/common/userDataProfile';
|
|
28
|
+
import { IDialogService } from 'vscode/vscode/vs/platform/dialogs/common/dialogs';
|
|
29
|
+
|
|
30
|
+
let ExtensionManagementService = class ExtensionManagementService extends Disposable {
|
|
31
|
+
constructor(extensionManagementServerService, extensionGalleryService, userDataProfileService, configurationService, productService, downloadService, userDataSyncEnablementService, dialogService, workspaceTrustRequestService, extensionManifestPropertiesService, fileService, logService, instantiationService) {
|
|
32
|
+
super();
|
|
33
|
+
this.extensionManagementServerService = extensionManagementServerService;
|
|
34
|
+
this.extensionGalleryService = extensionGalleryService;
|
|
35
|
+
this.userDataProfileService = userDataProfileService;
|
|
36
|
+
this.configurationService = configurationService;
|
|
37
|
+
this.productService = productService;
|
|
38
|
+
this.downloadService = downloadService;
|
|
39
|
+
this.userDataSyncEnablementService = userDataSyncEnablementService;
|
|
40
|
+
this.dialogService = dialogService;
|
|
41
|
+
this.workspaceTrustRequestService = workspaceTrustRequestService;
|
|
42
|
+
this.extensionManifestPropertiesService = extensionManifestPropertiesService;
|
|
43
|
+
this.fileService = fileService;
|
|
44
|
+
this.logService = logService;
|
|
45
|
+
this.instantiationService = instantiationService;
|
|
46
|
+
this.servers = [];
|
|
47
|
+
if (this.extensionManagementServerService.localExtensionManagementServer) {
|
|
48
|
+
this.servers.push(this.extensionManagementServerService.localExtensionManagementServer);
|
|
49
|
+
}
|
|
50
|
+
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
51
|
+
this.servers.push(this.extensionManagementServerService.remoteExtensionManagementServer);
|
|
52
|
+
}
|
|
53
|
+
if (this.extensionManagementServerService.webExtensionManagementServer) {
|
|
54
|
+
this.servers.push(this.extensionManagementServerService.webExtensionManagementServer);
|
|
55
|
+
}
|
|
56
|
+
this.onInstallExtension = this._register(this.servers.reduce((emitter, server) => { this._register(emitter.add(( Event.map(
|
|
57
|
+
server.extensionManagementService.onInstallExtension,
|
|
58
|
+
e => ({ ...e, server })
|
|
59
|
+
)))); return emitter; }, this._register(( new EventMultiplexer())))).event;
|
|
60
|
+
this.onDidInstallExtensions = this._register(this.servers.reduce((emitter, server) => { this._register(emitter.add(server.extensionManagementService.onDidInstallExtensions)); return emitter; }, this._register(( new EventMultiplexer())))).event;
|
|
61
|
+
this.onUninstallExtension = this._register(this.servers.reduce((emitter, server) => { this._register(emitter.add(( Event.map(
|
|
62
|
+
server.extensionManagementService.onUninstallExtension,
|
|
63
|
+
e => ({ ...e, server })
|
|
64
|
+
)))); return emitter; }, this._register(( new EventMultiplexer())))).event;
|
|
65
|
+
this.onDidUninstallExtension = this._register(this.servers.reduce((emitter, server) => { this._register(emitter.add(( Event.map(
|
|
66
|
+
server.extensionManagementService.onDidUninstallExtension,
|
|
67
|
+
e => ({ ...e, server })
|
|
68
|
+
)))); return emitter; }, this._register(( new EventMultiplexer())))).event;
|
|
69
|
+
this.onDidUpdateExtensionMetadata = this._register(this.servers.reduce((emitter, server) => { this._register(emitter.add(server.extensionManagementService.onDidUpdateExtensionMetadata)); return emitter; }, this._register(( new EventMultiplexer())))).event;
|
|
70
|
+
this.onDidChangeProfile = this._register(this.servers.reduce((emitter, server) => { this._register(emitter.add(( Event.map(
|
|
71
|
+
server.extensionManagementService.onDidChangeProfile,
|
|
72
|
+
e => ({ ...e, server })
|
|
73
|
+
)))); return emitter; }, this._register(( new EventMultiplexer())))).event;
|
|
74
|
+
}
|
|
75
|
+
async getInstalled(type, profileLocation) {
|
|
76
|
+
const result = await Promise.all(( this.servers.map(
|
|
77
|
+
({ extensionManagementService }) => extensionManagementService.getInstalled(type, profileLocation)
|
|
78
|
+
)));
|
|
79
|
+
return flatten(result);
|
|
80
|
+
}
|
|
81
|
+
async uninstall(extension, options) {
|
|
82
|
+
const server = this.getServer(extension);
|
|
83
|
+
if (!server) {
|
|
84
|
+
return Promise.reject(`Invalid location ${( extension.location.toString())}`);
|
|
85
|
+
}
|
|
86
|
+
if (this.servers.length > 1) {
|
|
87
|
+
if (isLanguagePackExtension(extension.manifest)) {
|
|
88
|
+
return this.uninstallEverywhere(extension, options);
|
|
89
|
+
}
|
|
90
|
+
return this.uninstallInServer(extension, server, options);
|
|
91
|
+
}
|
|
92
|
+
return server.extensionManagementService.uninstall(extension, options);
|
|
93
|
+
}
|
|
94
|
+
async uninstallEverywhere(extension, options) {
|
|
95
|
+
const server = this.getServer(extension);
|
|
96
|
+
if (!server) {
|
|
97
|
+
return Promise.reject(`Invalid location ${( extension.location.toString())}`);
|
|
98
|
+
}
|
|
99
|
+
const promise = server.extensionManagementService.uninstall(extension, options);
|
|
100
|
+
const otherServers = this.servers.filter(s => s !== server);
|
|
101
|
+
if (otherServers.length) {
|
|
102
|
+
for (const otherServer of otherServers) {
|
|
103
|
+
const installed = await otherServer.extensionManagementService.getInstalled();
|
|
104
|
+
extension = installed.filter(i => !i.isBuiltin && areSameExtensions(i.identifier, extension.identifier))[0];
|
|
105
|
+
if (extension) {
|
|
106
|
+
await otherServer.extensionManagementService.uninstall(extension, options);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return promise;
|
|
111
|
+
}
|
|
112
|
+
async uninstallInServer(extension, server, options) {
|
|
113
|
+
if (server === this.extensionManagementServerService.localExtensionManagementServer) {
|
|
114
|
+
const installedExtensions = await this.extensionManagementServerService.remoteExtensionManagementServer.extensionManagementService.getInstalled(1 );
|
|
115
|
+
const dependentNonUIExtensions = installedExtensions.filter(i => !this.extensionManifestPropertiesService.prefersExecuteOnUI(i.manifest)
|
|
116
|
+
&& i.manifest.extensionDependencies && ( i.manifest.extensionDependencies.some(id => areSameExtensions({ id }, extension.identifier))));
|
|
117
|
+
if (dependentNonUIExtensions.length) {
|
|
118
|
+
return Promise.reject(( new Error(this.getDependentsErrorMessage(extension, dependentNonUIExtensions))));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return server.extensionManagementService.uninstall(extension, options);
|
|
122
|
+
}
|
|
123
|
+
getDependentsErrorMessage(extension, dependents) {
|
|
124
|
+
if (dependents.length === 1) {
|
|
125
|
+
return ( localizeWithPath(
|
|
126
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
127
|
+
'singleDependentError',
|
|
128
|
+
"Cannot uninstall extension '{0}'. Extension '{1}' depends on this.",
|
|
129
|
+
extension.manifest.displayName || extension.manifest.name,
|
|
130
|
+
dependents[0].manifest.displayName || dependents[0].manifest.name
|
|
131
|
+
));
|
|
132
|
+
}
|
|
133
|
+
if (dependents.length === 2) {
|
|
134
|
+
return ( localizeWithPath(
|
|
135
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
136
|
+
'twoDependentsError',
|
|
137
|
+
"Cannot uninstall extension '{0}'. Extensions '{1}' and '{2}' depend on this.",
|
|
138
|
+
extension.manifest.displayName || extension.manifest.name,
|
|
139
|
+
dependents[0].manifest.displayName || dependents[0].manifest.name,
|
|
140
|
+
dependents[1].manifest.displayName || dependents[1].manifest.name
|
|
141
|
+
));
|
|
142
|
+
}
|
|
143
|
+
return ( localizeWithPath(
|
|
144
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
145
|
+
'multipleDependentsError',
|
|
146
|
+
"Cannot uninstall extension '{0}'. Extensions '{1}', '{2}' and others depend on this.",
|
|
147
|
+
extension.manifest.displayName || extension.manifest.name,
|
|
148
|
+
dependents[0].manifest.displayName || dependents[0].manifest.name,
|
|
149
|
+
dependents[1].manifest.displayName || dependents[1].manifest.name
|
|
150
|
+
));
|
|
151
|
+
}
|
|
152
|
+
async reinstallFromGallery(extension) {
|
|
153
|
+
const server = this.getServer(extension);
|
|
154
|
+
if (server) {
|
|
155
|
+
await this.checkForWorkspaceTrust(extension.manifest);
|
|
156
|
+
return server.extensionManagementService.reinstallFromGallery(extension);
|
|
157
|
+
}
|
|
158
|
+
return Promise.reject(`Invalid location ${( extension.location.toString())}`);
|
|
159
|
+
}
|
|
160
|
+
updateMetadata(extension, metadata, profileLocation) {
|
|
161
|
+
const server = this.getServer(extension);
|
|
162
|
+
if (server) {
|
|
163
|
+
return server.extensionManagementService.updateMetadata(extension, metadata, profileLocation);
|
|
164
|
+
}
|
|
165
|
+
return Promise.reject(`Invalid location ${( extension.location.toString())}`);
|
|
166
|
+
}
|
|
167
|
+
zip(extension) {
|
|
168
|
+
const server = this.getServer(extension);
|
|
169
|
+
if (server) {
|
|
170
|
+
return server.extensionManagementService.zip(extension);
|
|
171
|
+
}
|
|
172
|
+
return Promise.reject(`Invalid location ${( extension.location.toString())}`);
|
|
173
|
+
}
|
|
174
|
+
unzip(zipLocation) {
|
|
175
|
+
return Promises.settled(( this.servers
|
|
176
|
+
.filter(server => server !== this.extensionManagementServerService.webExtensionManagementServer)
|
|
177
|
+
.map(
|
|
178
|
+
({ extensionManagementService }) => extensionManagementService.unzip(zipLocation)
|
|
179
|
+
))).then(([extensionIdentifier]) => extensionIdentifier);
|
|
180
|
+
}
|
|
181
|
+
download(extension, operation, donotVerifySignature) {
|
|
182
|
+
if (this.extensionManagementServerService.localExtensionManagementServer) {
|
|
183
|
+
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.download(extension, operation, donotVerifySignature);
|
|
184
|
+
}
|
|
185
|
+
throw new Error('Cannot download extension');
|
|
186
|
+
}
|
|
187
|
+
async install(vsix, options) {
|
|
188
|
+
const manifest = await this.getManifest(vsix);
|
|
189
|
+
return this.installVSIX(vsix, manifest, options);
|
|
190
|
+
}
|
|
191
|
+
async installVSIX(vsix, manifest, options) {
|
|
192
|
+
const serversToInstall = this.getServersToInstall(manifest);
|
|
193
|
+
if (serversToInstall?.length) {
|
|
194
|
+
await this.checkForWorkspaceTrust(manifest);
|
|
195
|
+
const [local] = await Promises.settled(( serversToInstall.map(server => this.installVSIXInServer(vsix, server, options))));
|
|
196
|
+
return local;
|
|
197
|
+
}
|
|
198
|
+
return Promise.reject('No Servers to Install');
|
|
199
|
+
}
|
|
200
|
+
getServersToInstall(manifest) {
|
|
201
|
+
if (this.extensionManagementServerService.localExtensionManagementServer && this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
202
|
+
if (isLanguagePackExtension(manifest)) {
|
|
203
|
+
return [this.extensionManagementServerService.localExtensionManagementServer, this.extensionManagementServerService.remoteExtensionManagementServer];
|
|
204
|
+
}
|
|
205
|
+
if (this.extensionManifestPropertiesService.prefersExecuteOnUI(manifest)) {
|
|
206
|
+
return [this.extensionManagementServerService.localExtensionManagementServer];
|
|
207
|
+
}
|
|
208
|
+
return [this.extensionManagementServerService.remoteExtensionManagementServer];
|
|
209
|
+
}
|
|
210
|
+
if (this.extensionManagementServerService.localExtensionManagementServer) {
|
|
211
|
+
return [this.extensionManagementServerService.localExtensionManagementServer];
|
|
212
|
+
}
|
|
213
|
+
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
214
|
+
return [this.extensionManagementServerService.remoteExtensionManagementServer];
|
|
215
|
+
}
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
async installFromLocation(location) {
|
|
219
|
+
if (location.scheme === Schemas.file) {
|
|
220
|
+
if (this.extensionManagementServerService.localExtensionManagementServer) {
|
|
221
|
+
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.installFromLocation(location, this.userDataProfileService.currentProfile.extensionsResource);
|
|
222
|
+
}
|
|
223
|
+
throw new Error('Local extension management server is not found');
|
|
224
|
+
}
|
|
225
|
+
if (location.scheme === Schemas.vscodeRemote) {
|
|
226
|
+
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
227
|
+
return this.extensionManagementServerService.remoteExtensionManagementServer.extensionManagementService.installFromLocation(location, this.userDataProfileService.currentProfile.extensionsResource);
|
|
228
|
+
}
|
|
229
|
+
throw new Error('Remote extension management server is not found');
|
|
230
|
+
}
|
|
231
|
+
if (!this.extensionManagementServerService.webExtensionManagementServer) {
|
|
232
|
+
throw new Error('Web extension management server is not found');
|
|
233
|
+
}
|
|
234
|
+
return this.extensionManagementServerService.webExtensionManagementServer.extensionManagementService.installFromLocation(location, this.userDataProfileService.currentProfile.extensionsResource);
|
|
235
|
+
}
|
|
236
|
+
installVSIXInServer(vsix, server, options) {
|
|
237
|
+
return server.extensionManagementService.install(vsix, options);
|
|
238
|
+
}
|
|
239
|
+
getManifest(vsix) {
|
|
240
|
+
if (vsix.scheme === Schemas.file && this.extensionManagementServerService.localExtensionManagementServer) {
|
|
241
|
+
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.getManifest(vsix);
|
|
242
|
+
}
|
|
243
|
+
if (vsix.scheme === Schemas.file && this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
244
|
+
return this.extensionManagementServerService.remoteExtensionManagementServer.extensionManagementService.getManifest(vsix);
|
|
245
|
+
}
|
|
246
|
+
if (vsix.scheme === Schemas.vscodeRemote && this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
247
|
+
return this.extensionManagementServerService.remoteExtensionManagementServer.extensionManagementService.getManifest(vsix);
|
|
248
|
+
}
|
|
249
|
+
return Promise.reject('No Servers');
|
|
250
|
+
}
|
|
251
|
+
async canInstall(gallery) {
|
|
252
|
+
if (this.extensionManagementServerService.localExtensionManagementServer
|
|
253
|
+
&& (await this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.canInstall(gallery))) {
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
const manifest = await this.extensionGalleryService.getManifest(gallery, CancellationToken.None);
|
|
257
|
+
if (!manifest) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
if (this.extensionManagementServerService.remoteExtensionManagementServer
|
|
261
|
+
&& (await this.extensionManagementServerService.remoteExtensionManagementServer.extensionManagementService.canInstall(gallery))
|
|
262
|
+
&& this.extensionManifestPropertiesService.canExecuteOnWorkspace(manifest)) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
if (this.extensionManagementServerService.webExtensionManagementServer
|
|
266
|
+
&& (await this.extensionManagementServerService.webExtensionManagementServer.extensionManagementService.canInstall(gallery))
|
|
267
|
+
&& this.extensionManifestPropertiesService.canExecuteOnWeb(manifest)) {
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
async updateFromGallery(gallery, extension, installOptions) {
|
|
273
|
+
const server = this.getServer(extension);
|
|
274
|
+
if (!server) {
|
|
275
|
+
return Promise.reject(`Invalid location ${( extension.location.toString())}`);
|
|
276
|
+
}
|
|
277
|
+
const servers = [];
|
|
278
|
+
if (isLanguagePackExtension(extension.manifest)) {
|
|
279
|
+
servers.push(...this.servers.filter(server => server !== this.extensionManagementServerService.webExtensionManagementServer));
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
servers.push(server);
|
|
283
|
+
}
|
|
284
|
+
return Promises.settled(( servers.map(
|
|
285
|
+
server => server.extensionManagementService.installFromGallery(gallery, installOptions)
|
|
286
|
+
))).then(([local]) => local);
|
|
287
|
+
}
|
|
288
|
+
async installGalleryExtensions(extensions) {
|
|
289
|
+
const results = ( new Map());
|
|
290
|
+
const extensionsByServer = ( new Map());
|
|
291
|
+
await Promise.all(( extensions.map(async ({ extension, options }) => {
|
|
292
|
+
try {
|
|
293
|
+
const servers = await this.validateAndGetExtensionManagementServersToInstall(extension, options);
|
|
294
|
+
if (!options.isMachineScoped && this.isExtensionsSyncEnabled()) {
|
|
295
|
+
if (this.extensionManagementServerService.localExtensionManagementServer && !servers.includes(this.extensionManagementServerService.localExtensionManagementServer) && (await this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.canInstall(extension))) {
|
|
296
|
+
servers.push(this.extensionManagementServerService.localExtensionManagementServer);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
for (const server of servers) {
|
|
300
|
+
let exensions = extensionsByServer.get(server);
|
|
301
|
+
if (!exensions) {
|
|
302
|
+
extensionsByServer.set(server, exensions = []);
|
|
303
|
+
}
|
|
304
|
+
exensions.push({ extension, options });
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
results.set(extension.identifier.id.toLowerCase(), { identifier: extension.identifier, source: extension, error, operation: 2 });
|
|
309
|
+
}
|
|
310
|
+
})));
|
|
311
|
+
await Promise.all(( [...extensionsByServer.entries()].map(async ([server, extensions]) => {
|
|
312
|
+
const serverResults = await server.extensionManagementService.installGalleryExtensions(extensions);
|
|
313
|
+
for (const result of serverResults) {
|
|
314
|
+
results.set(result.identifier.id.toLowerCase(), result);
|
|
315
|
+
}
|
|
316
|
+
})));
|
|
317
|
+
return [...( results.values())];
|
|
318
|
+
}
|
|
319
|
+
async installFromGallery(gallery, installOptions) {
|
|
320
|
+
const servers = await this.validateAndGetExtensionManagementServersToInstall(gallery, installOptions);
|
|
321
|
+
if (!installOptions || isUndefined(installOptions.isMachineScoped)) {
|
|
322
|
+
const isMachineScoped = await this.hasToFlagExtensionsMachineScoped([gallery]);
|
|
323
|
+
installOptions = { ...(installOptions || {}), isMachineScoped };
|
|
324
|
+
}
|
|
325
|
+
if (!installOptions.isMachineScoped && this.isExtensionsSyncEnabled()) {
|
|
326
|
+
if (this.extensionManagementServerService.localExtensionManagementServer && !servers.includes(this.extensionManagementServerService.localExtensionManagementServer) && (await this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.canInstall(gallery))) {
|
|
327
|
+
servers.push(this.extensionManagementServerService.localExtensionManagementServer);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return Promises.settled(( servers.map(
|
|
331
|
+
server => server.extensionManagementService.installFromGallery(gallery, installOptions)
|
|
332
|
+
))).then(([local]) => local);
|
|
333
|
+
}
|
|
334
|
+
async validateAndGetExtensionManagementServersToInstall(gallery, installOptions) {
|
|
335
|
+
const manifest = await this.extensionGalleryService.getManifest(gallery, CancellationToken.None);
|
|
336
|
+
if (!manifest) {
|
|
337
|
+
return Promise.reject(( localizeWithPath(
|
|
338
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
339
|
+
'Manifest is not found',
|
|
340
|
+
"Installing Extension {0} failed: Manifest is not found.",
|
|
341
|
+
gallery.displayName || gallery.name
|
|
342
|
+
)));
|
|
343
|
+
}
|
|
344
|
+
const servers = [];
|
|
345
|
+
if (isLanguagePackExtension(manifest)) {
|
|
346
|
+
servers.push(...this.servers.filter(server => server !== this.extensionManagementServerService.webExtensionManagementServer));
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
const server = this.getExtensionManagementServerToInstall(manifest);
|
|
350
|
+
if (server) {
|
|
351
|
+
servers.push(server);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
if (!servers.length) {
|
|
355
|
+
const error = ( new Error(( localizeWithPath(
|
|
356
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
357
|
+
'cannot be installed',
|
|
358
|
+
"Cannot install the '{0}' extension because it is not available in this setup.",
|
|
359
|
+
gallery.displayName || gallery.name
|
|
360
|
+
))));
|
|
361
|
+
error.name = ExtensionManagementErrorCode.Unsupported;
|
|
362
|
+
throw error;
|
|
363
|
+
}
|
|
364
|
+
if (!installOptions?.context?.[EXTENSION_INSTALL_SYNC_CONTEXT]) {
|
|
365
|
+
await this.checkForWorkspaceTrust(manifest);
|
|
366
|
+
}
|
|
367
|
+
if (!installOptions?.donotIncludePackAndDependencies) {
|
|
368
|
+
await this.checkInstallingExtensionOnWeb(gallery, manifest);
|
|
369
|
+
}
|
|
370
|
+
return servers;
|
|
371
|
+
}
|
|
372
|
+
getExtensionManagementServerToInstall(manifest) {
|
|
373
|
+
if (this.servers.length === 1 && this.extensionManagementServerService.localExtensionManagementServer) {
|
|
374
|
+
return this.extensionManagementServerService.localExtensionManagementServer;
|
|
375
|
+
}
|
|
376
|
+
const extensionKind = this.extensionManifestPropertiesService.getExtensionKind(manifest);
|
|
377
|
+
for (const kind of extensionKind) {
|
|
378
|
+
if (kind === 'ui' && this.extensionManagementServerService.localExtensionManagementServer) {
|
|
379
|
+
return this.extensionManagementServerService.localExtensionManagementServer;
|
|
380
|
+
}
|
|
381
|
+
if (kind === 'workspace' && this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
382
|
+
return this.extensionManagementServerService.remoteExtensionManagementServer;
|
|
383
|
+
}
|
|
384
|
+
if (kind === 'web' && this.extensionManagementServerService.webExtensionManagementServer) {
|
|
385
|
+
return this.extensionManagementServerService.webExtensionManagementServer;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return this.extensionManagementServerService.localExtensionManagementServer;
|
|
389
|
+
}
|
|
390
|
+
isExtensionsSyncEnabled() {
|
|
391
|
+
return this.userDataSyncEnablementService.isEnabled() && this.userDataSyncEnablementService.isResourceEnabled("extensions" );
|
|
392
|
+
}
|
|
393
|
+
async hasToFlagExtensionsMachineScoped(extensions) {
|
|
394
|
+
if (this.isExtensionsSyncEnabled()) {
|
|
395
|
+
const { result } = await this.dialogService.prompt({
|
|
396
|
+
type: Severity.Info,
|
|
397
|
+
message: extensions.length === 1 ? ( localizeWithPath(
|
|
398
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
399
|
+
'install extension',
|
|
400
|
+
"Install Extension"
|
|
401
|
+
)) : ( localizeWithPath(
|
|
402
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
403
|
+
'install extensions',
|
|
404
|
+
"Install Extensions"
|
|
405
|
+
)),
|
|
406
|
+
detail: extensions.length === 1
|
|
407
|
+
? ( localizeWithPath(
|
|
408
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
409
|
+
'install single extension',
|
|
410
|
+
"Would you like to install and synchronize '{0}' extension across your devices?",
|
|
411
|
+
extensions[0].displayName
|
|
412
|
+
))
|
|
413
|
+
: ( localizeWithPath(
|
|
414
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
415
|
+
'install multiple extensions',
|
|
416
|
+
"Would you like to install and synchronize extensions across your devices?"
|
|
417
|
+
)),
|
|
418
|
+
buttons: [
|
|
419
|
+
{
|
|
420
|
+
label: ( localizeWithPath(
|
|
421
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
422
|
+
{ key: 'install', comment: ['&& denotes a mnemonic'] },
|
|
423
|
+
"&&Install"
|
|
424
|
+
)),
|
|
425
|
+
run: () => false
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
label: ( localizeWithPath(
|
|
429
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
430
|
+
{ key: 'install and do no sync', comment: ['&& denotes a mnemonic'] },
|
|
431
|
+
"Install (Do &¬ sync)"
|
|
432
|
+
)),
|
|
433
|
+
run: () => true
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
cancelButton: {
|
|
437
|
+
run: () => {
|
|
438
|
+
throw new CancellationError();
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
return result;
|
|
443
|
+
}
|
|
444
|
+
return false;
|
|
445
|
+
}
|
|
446
|
+
getExtensionsControlManifest() {
|
|
447
|
+
if (this.extensionManagementServerService.localExtensionManagementServer) {
|
|
448
|
+
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.getExtensionsControlManifest();
|
|
449
|
+
}
|
|
450
|
+
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
451
|
+
return this.extensionManagementServerService.remoteExtensionManagementServer.extensionManagementService.getExtensionsControlManifest();
|
|
452
|
+
}
|
|
453
|
+
if (this.extensionManagementServerService.webExtensionManagementServer) {
|
|
454
|
+
return this.extensionManagementServerService.webExtensionManagementServer.extensionManagementService.getExtensionsControlManifest();
|
|
455
|
+
}
|
|
456
|
+
return Promise.resolve({ malicious: [], deprecated: {}, search: [] });
|
|
457
|
+
}
|
|
458
|
+
getServer(extension) {
|
|
459
|
+
return this.extensionManagementServerService.getExtensionManagementServer(extension);
|
|
460
|
+
}
|
|
461
|
+
async checkForWorkspaceTrust(manifest) {
|
|
462
|
+
if (this.extensionManifestPropertiesService.getExtensionUntrustedWorkspaceSupportType(manifest) === false) {
|
|
463
|
+
const trustState = await this.workspaceTrustRequestService.requestWorkspaceTrust({
|
|
464
|
+
message: ( localizeWithPath(
|
|
465
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
466
|
+
'extensionInstallWorkspaceTrustMessage',
|
|
467
|
+
"Enabling this extension requires a trusted workspace."
|
|
468
|
+
)),
|
|
469
|
+
buttons: [
|
|
470
|
+
{ label: ( localizeWithPath(
|
|
471
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
472
|
+
'extensionInstallWorkspaceTrustButton',
|
|
473
|
+
"Trust Workspace & Install"
|
|
474
|
+
)), type: 'ContinueWithTrust' },
|
|
475
|
+
{ label: ( localizeWithPath(
|
|
476
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
477
|
+
'extensionInstallWorkspaceTrustContinueButton',
|
|
478
|
+
"Install"
|
|
479
|
+
)), type: 'ContinueWithoutTrust' },
|
|
480
|
+
{ label: ( localizeWithPath(
|
|
481
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
482
|
+
'extensionInstallWorkspaceTrustManageButton',
|
|
483
|
+
"Learn More"
|
|
484
|
+
)), type: 'Manage' }
|
|
485
|
+
]
|
|
486
|
+
});
|
|
487
|
+
if (trustState === undefined) {
|
|
488
|
+
throw new CancellationError();
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
async checkInstallingExtensionOnWeb(extension, manifest) {
|
|
493
|
+
if (this.servers.length !== 1 || this.servers[0] !== this.extensionManagementServerService.webExtensionManagementServer) {
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
const nonWebExtensions = [];
|
|
497
|
+
if (manifest.extensionPack?.length) {
|
|
498
|
+
const extensions = await this.extensionGalleryService.getExtensions(( manifest.extensionPack.map(id => ({ id }))), CancellationToken.None);
|
|
499
|
+
for (const extension of extensions) {
|
|
500
|
+
if (!(await this.servers[0].extensionManagementService.canInstall(extension))) {
|
|
501
|
+
nonWebExtensions.push(extension);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
if (nonWebExtensions.length && nonWebExtensions.length === extensions.length) {
|
|
505
|
+
throw new ExtensionManagementError('Not supported in Web', ExtensionManagementErrorCode.Unsupported);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
const productName = ( localizeWithPath(
|
|
509
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
510
|
+
'VS Code for Web',
|
|
511
|
+
"{0} for the Web",
|
|
512
|
+
this.productService.nameLong
|
|
513
|
+
));
|
|
514
|
+
const virtualWorkspaceSupport = this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(manifest);
|
|
515
|
+
const virtualWorkspaceSupportReason = getWorkspaceSupportTypeMessage(manifest.capabilities?.virtualWorkspaces);
|
|
516
|
+
const hasLimitedSupport = virtualWorkspaceSupport === 'limited' || !!virtualWorkspaceSupportReason;
|
|
517
|
+
if (!nonWebExtensions.length && !hasLimitedSupport) {
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
const limitedSupportMessage = ( localizeWithPath(
|
|
521
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
522
|
+
'limited support',
|
|
523
|
+
"'{0}' has limited functionality in {1}.",
|
|
524
|
+
extension.displayName || extension.identifier.id,
|
|
525
|
+
productName
|
|
526
|
+
));
|
|
527
|
+
let message;
|
|
528
|
+
let buttons = [];
|
|
529
|
+
let detail;
|
|
530
|
+
const installAnywayButton = {
|
|
531
|
+
label: ( localizeWithPath(
|
|
532
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
533
|
+
{ key: 'install anyways', comment: ['&& denotes a mnemonic'] },
|
|
534
|
+
"&&Install Anyway"
|
|
535
|
+
)),
|
|
536
|
+
run: () => { }
|
|
537
|
+
};
|
|
538
|
+
const showExtensionsButton = {
|
|
539
|
+
label: ( localizeWithPath(
|
|
540
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
541
|
+
{ key: 'showExtensions', comment: ['&& denotes a mnemonic'] },
|
|
542
|
+
"&&Show Extensions"
|
|
543
|
+
)),
|
|
544
|
+
run: () => this.instantiationService.invokeFunction(accessor => accessor.get(ICommandService).executeCommand('extension.open', extension.identifier.id, 'extensionPack'))
|
|
545
|
+
};
|
|
546
|
+
if (nonWebExtensions.length && hasLimitedSupport) {
|
|
547
|
+
message = limitedSupportMessage;
|
|
548
|
+
detail = `${virtualWorkspaceSupportReason ? `${virtualWorkspaceSupportReason}\n` : ''}${( localizeWithPath(
|
|
549
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
550
|
+
'non web extensions detail',
|
|
551
|
+
"Contains extensions which are not supported."
|
|
552
|
+
))}`;
|
|
553
|
+
buttons = [
|
|
554
|
+
installAnywayButton,
|
|
555
|
+
showExtensionsButton
|
|
556
|
+
];
|
|
557
|
+
}
|
|
558
|
+
else if (hasLimitedSupport) {
|
|
559
|
+
message = limitedSupportMessage;
|
|
560
|
+
detail = virtualWorkspaceSupportReason || undefined;
|
|
561
|
+
buttons = [installAnywayButton];
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
message = ( localizeWithPath(
|
|
565
|
+
'vs/workbench/services/extensionManagement/common/extensionManagementService',
|
|
566
|
+
'non web extensions',
|
|
567
|
+
"'{0}' contains extensions which are not supported in {1}.",
|
|
568
|
+
extension.displayName || extension.identifier.id,
|
|
569
|
+
productName
|
|
570
|
+
));
|
|
571
|
+
buttons = [
|
|
572
|
+
installAnywayButton,
|
|
573
|
+
showExtensionsButton
|
|
574
|
+
];
|
|
575
|
+
}
|
|
576
|
+
await this.dialogService.prompt({
|
|
577
|
+
type: Severity.Info,
|
|
578
|
+
message,
|
|
579
|
+
detail,
|
|
580
|
+
buttons,
|
|
581
|
+
cancelButton: {
|
|
582
|
+
run: () => { throw new CancellationError(); }
|
|
583
|
+
}
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
getTargetPlatform() {
|
|
587
|
+
if (!this._targetPlatformPromise) {
|
|
588
|
+
this._targetPlatformPromise = computeTargetPlatform(this.fileService, this.logService);
|
|
589
|
+
}
|
|
590
|
+
return this._targetPlatformPromise;
|
|
591
|
+
}
|
|
592
|
+
async cleanUp() {
|
|
593
|
+
await Promise.allSettled(( this.servers.map(server => server.extensionManagementService.cleanUp())));
|
|
594
|
+
}
|
|
595
|
+
toggleAppliationScope(extension, fromProfileLocation) {
|
|
596
|
+
const server = this.getServer(extension);
|
|
597
|
+
if (server) {
|
|
598
|
+
return server.extensionManagementService.toggleAppliationScope(extension, fromProfileLocation);
|
|
599
|
+
}
|
|
600
|
+
throw new Error('Not Supported');
|
|
601
|
+
}
|
|
602
|
+
copyExtensions(from, to) {
|
|
603
|
+
if (this.extensionManagementServerService.remoteExtensionManagementServer) {
|
|
604
|
+
throw new Error('Not Supported');
|
|
605
|
+
}
|
|
606
|
+
if (this.extensionManagementServerService.localExtensionManagementServer) {
|
|
607
|
+
return this.extensionManagementServerService.localExtensionManagementServer.extensionManagementService.copyExtensions(from, to);
|
|
608
|
+
}
|
|
609
|
+
if (this.extensionManagementServerService.webExtensionManagementServer) {
|
|
610
|
+
return this.extensionManagementServerService.webExtensionManagementServer.extensionManagementService.copyExtensions(from, to);
|
|
611
|
+
}
|
|
612
|
+
return Promise.resolve();
|
|
613
|
+
}
|
|
614
|
+
registerParticipant() { throw new Error('Not Supported'); }
|
|
615
|
+
installExtensionsFromProfile(extensions, fromProfileLocation, toProfileLocation) { throw new Error('Not Supported'); }
|
|
616
|
+
};
|
|
617
|
+
ExtensionManagementService = ( __decorate([
|
|
618
|
+
( __param(0, IExtensionManagementServerService)),
|
|
619
|
+
( __param(1, IExtensionGalleryService)),
|
|
620
|
+
( __param(2, IUserDataProfileService)),
|
|
621
|
+
( __param(3, IConfigurationService)),
|
|
622
|
+
( __param(4, IProductService)),
|
|
623
|
+
( __param(5, IDownloadService)),
|
|
624
|
+
( __param(6, IUserDataSyncEnablementService)),
|
|
625
|
+
( __param(7, IDialogService)),
|
|
626
|
+
( __param(8, IWorkspaceTrustRequestService)),
|
|
627
|
+
( __param(9, IExtensionManifestPropertiesService)),
|
|
628
|
+
( __param(10, IFileService)),
|
|
629
|
+
( __param(11, ILogService)),
|
|
630
|
+
( __param(12, IInstantiationService))
|
|
631
|
+
], ExtensionManagementService));
|
|
632
|
+
|
|
633
|
+
export { ExtensionManagementService };
|