@codingame/monaco-vscode-extension-gallery-service-override 8.0.4 → 9.0.2
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/package.json +2 -2
- package/tools.js +1 -1
- package/vscode/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.js +13 -13
- package/vscode/src/vs/platform/extensionManagement/common/extensionGalleryService.js +25 -2
- package/vscode/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.js +17 -17
- package/vscode/src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/deprecatedExtensionsChecker.js +3 -3
- package/vscode/src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEditor.js +35 -35
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionEnablementWorkspaceTrustTransitionParticipant.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionFeaturesTab.js +16 -16
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.js +15 -15
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.contribution.js +135 -135
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensions.web.contribution.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActivationProgress.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsDependencyChecker.js +5 -5
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsQuickAccess.js +4 -4
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewer.js +3 -3
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViewlet.js +37 -37
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsViews.js +29 -16
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWidgets.js +29 -22
- package/vscode/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.js +125 -73
- package/vscode/src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.js +2 -2
- package/vscode/src/vs/workbench/contrib/extensions/browser/media/extensionsWidgets.css.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/webRecommendations.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.js +2 -2
- package/vscode/src/vs/workbench/contrib/extensions/common/reportExtensionIssueAction.js +1 -1
- package/vscode/src/vs/workbench/contrib/extensions/common/runtimeExtensionsInput.js +2 -2
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.js +14 -14
- package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +2 -2
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionFeaturesManagemetService.js +4 -4
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementServerService.js +2 -2
- package/vscode/src/vs/workbench/services/extensionManagement/common/extensionManagementService.js +26 -22
- package/vscode/src/vs/workbench/services/extensions/browser/extensionUrlHandler.js +10 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-extension-gallery-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.2",
|
|
4
4
|
"keywords": [],
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CodinGame",
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"vscode": "npm:@codingame/monaco-vscode-api@
|
|
29
|
+
"vscode": "npm:@codingame/monaco-vscode-api@9.0.2"
|
|
30
30
|
}
|
|
31
31
|
}
|
package/tools.js
CHANGED
|
@@ -26,7 +26,7 @@ function throttle(fct, merge, delay) {
|
|
|
26
26
|
return async (param) => {
|
|
27
27
|
if (toConsume == null) {
|
|
28
28
|
toConsume = param;
|
|
29
|
-
lastPromise = lastPromise.then(async () => sleep(delay)).then(async () => {
|
|
29
|
+
lastPromise = lastPromise.then(async () => await sleep(delay)).then(async () => {
|
|
30
30
|
const _toConsume = toConsume;
|
|
31
31
|
toConsume = null;
|
|
32
32
|
await fct(_toConsume);
|
package/vscode/src/vs/platform/extensionManagement/common/abstractExtensionManagementService.js
CHANGED
|
@@ -81,7 +81,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
81
81
|
async installGalleryExtensions(extensions) {
|
|
82
82
|
if (!this.galleryService.isEnabled()) {
|
|
83
83
|
throw ( (new ExtensionManagementError(
|
|
84
|
-
localize(
|
|
84
|
+
localize(11162, "Marketplace is not enabled"),
|
|
85
85
|
ExtensionManagementErrorCode.NotAllowed
|
|
86
86
|
)));
|
|
87
87
|
}
|
|
@@ -472,7 +472,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
472
472
|
const extensionsControlManifest = await this.getExtensionsControlManifest();
|
|
473
473
|
if (( (extensionsControlManifest.malicious.some(identifier => areSameExtensions(extension.identifier, identifier))))) {
|
|
474
474
|
throw ( (new ExtensionManagementError(localize(
|
|
475
|
-
|
|
475
|
+
11163,
|
|
476
476
|
"Can't install '{0}' extension since it was reported to be problematic.",
|
|
477
477
|
extension.identifier.id
|
|
478
478
|
), ExtensionManagementErrorCode.Malicious)));
|
|
@@ -483,7 +483,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
483
483
|
compatibleExtension = (await this.galleryService.getExtensions([{ id: deprecationInfo.extension.id, preRelease: deprecationInfo.extension.preRelease }], { targetPlatform: await this.getTargetPlatform(), compatible: true, productVersion }, CancellationToken.None))[0];
|
|
484
484
|
if (!compatibleExtension) {
|
|
485
485
|
throw ( (new ExtensionManagementError(localize(
|
|
486
|
-
|
|
486
|
+
11164,
|
|
487
487
|
"Can't install '{0}' extension since it was deprecated and the replacement extension '{1}' can't be found.",
|
|
488
488
|
extension.identifier.id,
|
|
489
489
|
deprecationInfo.extension.id
|
|
@@ -494,7 +494,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
494
494
|
if (!(await this.canInstall(extension))) {
|
|
495
495
|
const targetPlatform = await this.getTargetPlatform();
|
|
496
496
|
throw ( (new ExtensionManagementError(localize(
|
|
497
|
-
|
|
497
|
+
11165,
|
|
498
498
|
"The '{0}' extension is not available in {1} for {2}.",
|
|
499
499
|
extension.identifier.id,
|
|
500
500
|
this.productService.nameLong,
|
|
@@ -506,7 +506,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
506
506
|
const incompatibleApiProposalsMessages = [];
|
|
507
507
|
if (!areApiProposalsCompatible(extension.properties.enabledApiProposals ?? [], incompatibleApiProposalsMessages)) {
|
|
508
508
|
throw ( (new ExtensionManagementError(localize(
|
|
509
|
-
|
|
509
|
+
11166,
|
|
510
510
|
"Can't install '{0}' extension. {1}",
|
|
511
511
|
extension.displayName ?? extension.identifier.id,
|
|
512
512
|
incompatibleApiProposalsMessages[0]
|
|
@@ -514,13 +514,13 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
514
514
|
}
|
|
515
515
|
if (!installPreRelease && extension.properties.isPreReleaseVersion && (await this.galleryService.getExtensions([extension.identifier], CancellationToken.None))[0]) {
|
|
516
516
|
throw ( (new ExtensionManagementError(localize(
|
|
517
|
-
|
|
517
|
+
11167,
|
|
518
518
|
"Can't install release version of '{0}' extension because it has no release version.",
|
|
519
519
|
extension.displayName ?? extension.identifier.id
|
|
520
520
|
), ExtensionManagementErrorCode.ReleaseVersionNotFound)));
|
|
521
521
|
}
|
|
522
522
|
throw ( (new ExtensionManagementError(localize(
|
|
523
|
-
|
|
523
|
+
11168,
|
|
524
524
|
"Can't install '{0}' extension because it is not compatible with the current version of {1} (version {2}).",
|
|
525
525
|
extension.identifier.id,
|
|
526
526
|
this.productService.nameLong,
|
|
@@ -694,7 +694,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
694
694
|
if (extensionToUninstall === dependingExtension) {
|
|
695
695
|
if (dependents.length === 1) {
|
|
696
696
|
return ( localize(
|
|
697
|
-
|
|
697
|
+
11169,
|
|
698
698
|
"Cannot uninstall '{0}' extension. '{1}' extension depends on this.",
|
|
699
699
|
extensionToUninstall.manifest.displayName || extensionToUninstall.manifest.name,
|
|
700
700
|
dependents[0].manifest.displayName || dependents[0].manifest.name
|
|
@@ -702,7 +702,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
702
702
|
}
|
|
703
703
|
if (dependents.length === 2) {
|
|
704
704
|
return ( localize(
|
|
705
|
-
|
|
705
|
+
11170,
|
|
706
706
|
"Cannot uninstall '{0}' extension. '{1}' and '{2}' extensions depend on this.",
|
|
707
707
|
extensionToUninstall.manifest.displayName || extensionToUninstall.manifest.name,
|
|
708
708
|
dependents[0].manifest.displayName || dependents[0].manifest.name,
|
|
@@ -710,7 +710,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
710
710
|
));
|
|
711
711
|
}
|
|
712
712
|
return ( localize(
|
|
713
|
-
|
|
713
|
+
11171,
|
|
714
714
|
"Cannot uninstall '{0}' extension. '{1}', '{2}' and other extension depend on this.",
|
|
715
715
|
extensionToUninstall.manifest.displayName || extensionToUninstall.manifest.name,
|
|
716
716
|
dependents[0].manifest.displayName || dependents[0].manifest.name,
|
|
@@ -719,7 +719,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
719
719
|
}
|
|
720
720
|
if (dependents.length === 1) {
|
|
721
721
|
return ( localize(
|
|
722
|
-
|
|
722
|
+
11172,
|
|
723
723
|
"Cannot uninstall '{0}' extension . It includes uninstalling '{1}' extension and '{2}' extension depends on this.",
|
|
724
724
|
extensionToUninstall.manifest.displayName || extensionToUninstall.manifest.name,
|
|
725
725
|
dependingExtension.manifest.displayName
|
|
@@ -729,7 +729,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
729
729
|
}
|
|
730
730
|
if (dependents.length === 2) {
|
|
731
731
|
return ( localize(
|
|
732
|
-
|
|
732
|
+
11173,
|
|
733
733
|
"Cannot uninstall '{0}' extension. It includes uninstalling '{1}' extension and '{2}' and '{3}' extensions depend on this.",
|
|
734
734
|
extensionToUninstall.manifest.displayName || extensionToUninstall.manifest.name,
|
|
735
735
|
dependingExtension.manifest.displayName
|
|
@@ -739,7 +739,7 @@ let AbstractExtensionManagementService = class AbstractExtensionManagementServic
|
|
|
739
739
|
));
|
|
740
740
|
}
|
|
741
741
|
return ( localize(
|
|
742
|
-
|
|
742
|
+
11174,
|
|
743
743
|
"Cannot uninstall '{0}' extension. It includes uninstalling '{1}' extension and '{2}', '{3}' and other extensions depend on this.",
|
|
744
744
|
extensionToUninstall.manifest.displayName || extensionToUninstall.manifest.name,
|
|
745
745
|
dependingExtension.manifest.displayName
|
|
@@ -6,6 +6,7 @@ import { isWeb, platform } from 'vscode/vscode/vs/base/common/platform';
|
|
|
6
6
|
import { arch } from 'vscode/vscode/vs/base/common/process';
|
|
7
7
|
import { isBoolean } from 'vscode/vscode/vs/base/common/types';
|
|
8
8
|
import { URI } from 'vscode/vscode/vs/base/common/uri';
|
|
9
|
+
import { isOfflineError } from 'vscode/vscode/vs/base/parts/request/common/request';
|
|
9
10
|
import { IConfigurationService } from 'vscode/vscode/vs/platform/configuration/common/configuration.service';
|
|
10
11
|
import { IEnvironmentService } from 'vscode/vscode/vs/platform/environment/common/environment.service';
|
|
11
12
|
import { getTargetPlatform, SortBy, SortOrder, toTargetPlatform, WEB_EXTENSION_TAG, isNotWebExtensionInWebTargetPlatform, isTargetPlatformCompatible, ExtensionGalleryErrorCode, ExtensionGalleryError, StatisticType, InstallOperation } from 'vscode/vscode/vs/platform/extensionManagement/common/extensionManagement';
|
|
@@ -337,6 +338,24 @@ let AbstractExtensionGalleryService = class AbstractExtensionGalleryService {
|
|
|
337
338
|
async getExtensions(extensionInfos, arg1, arg2) {
|
|
338
339
|
const options = CancellationToken.isCancellationToken(arg1) ? {} : arg1;
|
|
339
340
|
const token = CancellationToken.isCancellationToken(arg1) ? arg1 : arg2;
|
|
341
|
+
const result = await this.doGetExtensions(extensionInfos, options, token);
|
|
342
|
+
const uuids = ( result.map(r => r.identifier.uuid));
|
|
343
|
+
const extensionInfosByName = [];
|
|
344
|
+
for (const e of extensionInfos) {
|
|
345
|
+
if (e.uuid && !uuids.includes(e.uuid)) {
|
|
346
|
+
extensionInfosByName.push({ ...e, uuid: undefined });
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (extensionInfosByName.length) {
|
|
350
|
+
this.telemetryService.publicLog2('galleryService:additionalQueryByName', {
|
|
351
|
+
count: extensionInfosByName.length
|
|
352
|
+
});
|
|
353
|
+
const extensions = await this.doGetExtensions(extensionInfosByName, options, token);
|
|
354
|
+
result.push(...extensions);
|
|
355
|
+
}
|
|
356
|
+
return result;
|
|
357
|
+
}
|
|
358
|
+
async doGetExtensions(extensionInfos, options, token) {
|
|
340
359
|
const names = [];
|
|
341
360
|
const ids = [], includePreReleases = [], versions = [];
|
|
342
361
|
let isQueryForReleaseVersionFromPreReleaseVersion = true;
|
|
@@ -578,7 +597,7 @@ let AbstractExtensionGalleryService = class AbstractExtensionGalleryService {
|
|
|
578
597
|
}
|
|
579
598
|
if (await this.isValidVersion(extensionIdentifier.id, rawGalleryExtensionVersion, includePreRelease ? 'any' : 'release', criteria.compatible, allTargetPlatforms, criteria.targetPlatform, criteria.productVersion)) {
|
|
580
599
|
if (criteria.compatible && !this.areApiProposalsCompatible(extensionIdentifier, getEnabledApiProposals(rawGalleryExtensionVersion))) {
|
|
581
|
-
|
|
600
|
+
continue;
|
|
582
601
|
}
|
|
583
602
|
return toExtension(rawGalleryExtension, rawGalleryExtensionVersion, allTargetPlatforms, queryContext);
|
|
584
603
|
}
|
|
@@ -643,7 +662,11 @@ let AbstractExtensionGalleryService = class AbstractExtensionGalleryService {
|
|
|
643
662
|
}
|
|
644
663
|
else {
|
|
645
664
|
const errorMessage = getErrorMessage(e);
|
|
646
|
-
errorCode =
|
|
665
|
+
errorCode = isOfflineError(e)
|
|
666
|
+
? ExtensionGalleryErrorCode.Offline
|
|
667
|
+
: errorMessage.startsWith('XHR timeout')
|
|
668
|
+
? ExtensionGalleryErrorCode.Timeout
|
|
669
|
+
: ExtensionGalleryErrorCode.Failed;
|
|
647
670
|
throw ( new ExtensionGalleryError(errorMessage, errorCode));
|
|
648
671
|
}
|
|
649
672
|
}
|
package/vscode/src/vs/workbench/contrib/extensions/browser/abstractRuntimeExtensionsEditor.js
CHANGED
|
@@ -234,13 +234,13 @@ let AbstractRuntimeExtensionsEditor = class AbstractRuntimeExtensionsEditor exte
|
|
|
234
234
|
const activationId = activationTimes.activationReason.extensionId.value;
|
|
235
235
|
const activationEvent = activationTimes.activationReason.activationEvent;
|
|
236
236
|
if (activationEvent === '*') {
|
|
237
|
-
title = ( localize(
|
|
237
|
+
title = ( localize(9484, "Activated by {0} on start-up", activationId));
|
|
238
238
|
}
|
|
239
239
|
else if (/^workspaceContains:/.test(activationEvent)) {
|
|
240
240
|
const fileNameOrGlob = activationEvent.substr('workspaceContains:'.length);
|
|
241
241
|
if (fileNameOrGlob.indexOf('*') >= 0 || fileNameOrGlob.indexOf('?') >= 0) {
|
|
242
242
|
title = ( localize(
|
|
243
|
-
|
|
243
|
+
9485,
|
|
244
244
|
"Activated by {1} because a file matching {0} exists in your workspace",
|
|
245
245
|
fileNameOrGlob,
|
|
246
246
|
activationId
|
|
@@ -248,7 +248,7 @@ let AbstractRuntimeExtensionsEditor = class AbstractRuntimeExtensionsEditor exte
|
|
|
248
248
|
}
|
|
249
249
|
else {
|
|
250
250
|
title = ( localize(
|
|
251
|
-
|
|
251
|
+
9486,
|
|
252
252
|
"Activated by {1} because file {0} exists in your workspace",
|
|
253
253
|
fileNameOrGlob,
|
|
254
254
|
activationId
|
|
@@ -258,41 +258,41 @@ let AbstractRuntimeExtensionsEditor = class AbstractRuntimeExtensionsEditor exte
|
|
|
258
258
|
else if (/^workspaceContainsTimeout:/.test(activationEvent)) {
|
|
259
259
|
const glob = activationEvent.substr('workspaceContainsTimeout:'.length);
|
|
260
260
|
title = ( localize(
|
|
261
|
-
|
|
261
|
+
9487,
|
|
262
262
|
"Activated by {1} because searching for {0} took too long",
|
|
263
263
|
glob,
|
|
264
264
|
activationId
|
|
265
265
|
));
|
|
266
266
|
}
|
|
267
267
|
else if (activationEvent === 'onStartupFinished') {
|
|
268
|
-
title = ( localize(
|
|
268
|
+
title = ( localize(9488, "Activated by {0} after start-up finished", activationId));
|
|
269
269
|
}
|
|
270
270
|
else if (/^onLanguage:/.test(activationEvent)) {
|
|
271
271
|
const language = activationEvent.substr('onLanguage:'.length);
|
|
272
272
|
title = ( localize(
|
|
273
|
-
|
|
273
|
+
9489,
|
|
274
274
|
"Activated by {1} because you opened a {0} file",
|
|
275
275
|
language,
|
|
276
276
|
activationId
|
|
277
277
|
));
|
|
278
278
|
}
|
|
279
279
|
else {
|
|
280
|
-
title = ( localize(
|
|
280
|
+
title = ( localize(9490, "Activated by {1} on {0}", activationEvent, activationId));
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
283
|
else {
|
|
284
|
-
title = ( localize(
|
|
284
|
+
title = ( localize(9491, "Extension is activating..."));
|
|
285
285
|
}
|
|
286
286
|
data.elementDisposables.push(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), data.activationTime, title));
|
|
287
287
|
clearNode(data.msgContainer);
|
|
288
288
|
if (this._getUnresponsiveProfile(element.description.identifier)) {
|
|
289
289
|
const el = $('span', undefined, ...renderLabelWithIcons(` $(alert) Unresponsive`));
|
|
290
|
-
const extensionHostFreezTitle = ( localize(
|
|
290
|
+
const extensionHostFreezTitle = ( localize(9492, "Extension has caused the extension host to freeze."));
|
|
291
291
|
data.elementDisposables.push(this._hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), el, extensionHostFreezTitle));
|
|
292
292
|
data.msgContainer.appendChild(el);
|
|
293
293
|
}
|
|
294
294
|
if (isNonEmptyArray(element.status.runtimeErrors)) {
|
|
295
|
-
const el = $('span', undefined, ...renderLabelWithIcons(`$(bug) ${( localize(
|
|
295
|
+
const el = $('span', undefined, ...renderLabelWithIcons(`$(bug) ${( localize(9493, "{0} uncaught errors", element.status.runtimeErrors.length))}`));
|
|
296
296
|
data.msgContainer.appendChild(el);
|
|
297
297
|
}
|
|
298
298
|
if (element.status.messages && element.status.messages.length > 0) {
|
|
@@ -331,10 +331,10 @@ let AbstractRuntimeExtensionsEditor = class AbstractRuntimeExtensionsEditor exte
|
|
|
331
331
|
data.msgContainer.appendChild($('span', undefined, ...renderLabelWithIcons(`$(${status.severity === Severity$1.Error ? errorIcon.id : warningIcon.id}) ${status.message}`)));
|
|
332
332
|
}
|
|
333
333
|
if (accessData?.totalCount > 0) {
|
|
334
|
-
const element = $('span', undefined, `${( localize(
|
|
334
|
+
const element = $('span', undefined, `${( localize(9494, "{0} Requests: {1} (Overall)", feature.label, accessData.totalCount))}${accessData.current ? ( localize(9495, ", {0} (Session)", accessData.current.count)) : ''}`);
|
|
335
335
|
if (accessData.current) {
|
|
336
336
|
const title = ( localize(
|
|
337
|
-
|
|
337
|
+
9496,
|
|
338
338
|
"Last request was {0}.",
|
|
339
339
|
fromNow(accessData.current.lastAccessed, true, true)
|
|
340
340
|
));
|
|
@@ -364,7 +364,7 @@ let AbstractRuntimeExtensionsEditor = class AbstractRuntimeExtensionsEditor exte
|
|
|
364
364
|
},
|
|
365
365
|
accessibilityProvider: new (class {
|
|
366
366
|
getWidgetAriaLabel() {
|
|
367
|
-
return ( localize(
|
|
367
|
+
return ( localize(9497, "Runtime Extensions"));
|
|
368
368
|
}
|
|
369
369
|
getAriaLabel(element) {
|
|
370
370
|
return element.description.name;
|
|
@@ -377,7 +377,7 @@ let AbstractRuntimeExtensionsEditor = class AbstractRuntimeExtensionsEditor exte
|
|
|
377
377
|
return;
|
|
378
378
|
}
|
|
379
379
|
const actions = [];
|
|
380
|
-
actions.push(( (new Action('runtimeExtensionsEditor.action.copyId', ( localize(
|
|
380
|
+
actions.push(( (new Action('runtimeExtensionsEditor.action.copyId', ( localize(9498, "Copy id ({0})", e.element.description.identifier.value)), undefined, true, () => {
|
|
381
381
|
this._clipboardService.writeText(e.element.description.identifier.value);
|
|
382
382
|
}))));
|
|
383
383
|
const reportExtensionIssueAction = this._createReportExtensionIssueAction(e.element);
|
|
@@ -386,8 +386,8 @@ let AbstractRuntimeExtensionsEditor = class AbstractRuntimeExtensionsEditor exte
|
|
|
386
386
|
}
|
|
387
387
|
actions.push(( (new Separator())));
|
|
388
388
|
if (e.element.marketplaceInfo) {
|
|
389
|
-
actions.push(( (new Action('runtimeExtensionsEditor.action.disableWorkspace', ( localize(
|
|
390
|
-
actions.push(( (new Action('runtimeExtensionsEditor.action.disable', ( localize(
|
|
389
|
+
actions.push(( (new Action('runtimeExtensionsEditor.action.disableWorkspace', ( localize(9499, "Disable (Workspace)")), undefined, true, () => this._extensionsWorkbenchService.setEnablement(e.element.marketplaceInfo, EnablementState.DisabledWorkspace)))));
|
|
390
|
+
actions.push(( (new Action('runtimeExtensionsEditor.action.disable', ( localize(9500, "Disable")), undefined, true, () => this._extensionsWorkbenchService.setEnablement(e.element.marketplaceInfo, EnablementState.DisabledGlobally)))));
|
|
391
391
|
}
|
|
392
392
|
actions.push(( (new Separator())));
|
|
393
393
|
const profileAction = this._createProfileAction();
|
|
@@ -434,7 +434,7 @@ class ShowRuntimeExtensionsAction extends Action2 {
|
|
|
434
434
|
constructor() {
|
|
435
435
|
super({
|
|
436
436
|
id: 'workbench.action.showRuntimeExtensions',
|
|
437
|
-
title: ( localize2(
|
|
437
|
+
title: ( localize2(9501, "Show Running Extensions")),
|
|
438
438
|
category: Categories.Developer,
|
|
439
439
|
f1: true,
|
|
440
440
|
menu: {
|
|
@@ -62,7 +62,7 @@ let ConfigBasedRecommendations = class ConfigBasedRecommendations extends Extens
|
|
|
62
62
|
reason: {
|
|
63
63
|
reasonId: ExtensionRecommendationReason.WorkspaceConfig,
|
|
64
64
|
reasonText: ( localize(
|
|
65
|
-
|
|
65
|
+
9389,
|
|
66
66
|
"This extension is recommended because of the current workspace configuration"
|
|
67
67
|
))
|
|
68
68
|
},
|
|
@@ -44,10 +44,10 @@ let DeprecatedExtensionsChecker = class DeprecatedExtensionsChecker extends Disp
|
|
|
44
44
|
const toNotify = local.filter(e => !!e.deprecationInfo && e.local && this.extensionEnablementService.isEnabled(e.local)).filter(e => !previouslyNotified.includes(e.identifier.id.toLowerCase()));
|
|
45
45
|
if (toNotify.length) {
|
|
46
46
|
this.notificationService.prompt(Severity$1.Warning, ( localize(
|
|
47
|
-
|
|
47
|
+
9528,
|
|
48
48
|
"You have deprecated extensions installed. We recommend to review them and migrate to alternatives."
|
|
49
49
|
)), [{
|
|
50
|
-
label: ( localize(
|
|
50
|
+
label: ( localize(9529, "Show Deprecated Extensions")),
|
|
51
51
|
run: async () => {
|
|
52
52
|
this.setNotifiedDeprecatedExtensions(( (toNotify.map(e => e.identifier.id.toLowerCase()))));
|
|
53
53
|
const action = this.instantiationService.createInstance(SearchExtensionsAction, ( (toNotify.map(extension => `@id:${extension.identifier.id}`))).join(' '));
|
|
@@ -59,7 +59,7 @@ let DeprecatedExtensionsChecker = class DeprecatedExtensionsChecker extends Disp
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
}, {
|
|
62
|
-
label: ( localize(
|
|
62
|
+
label: ( localize(9530, "Don't Show Again")),
|
|
63
63
|
isSecondary: true,
|
|
64
64
|
run: () => this.storageService.store('extensionsAssistant/doNotCheckDeprecated', true, StorageScope.PROFILE, StorageTarget.USER)
|
|
65
65
|
}]);
|
|
@@ -49,7 +49,7 @@ let ExeBasedRecommendations = class ExeBasedRecommendations extends ExtensionRec
|
|
|
49
49
|
reason: {
|
|
50
50
|
reasonId: ExtensionRecommendationReason.Executable,
|
|
51
51
|
reasonText: ( localize(
|
|
52
|
-
|
|
52
|
+
9385,
|
|
53
53
|
"This extension is recommended because you have {0} installed.",
|
|
54
54
|
tip.exeFriendlyName
|
|
55
55
|
))
|
|
@@ -137,7 +137,7 @@ class VersionWidget extends ExtensionWithDifferentGalleryVersionWidget {
|
|
|
137
137
|
constructor(container, hoverService) {
|
|
138
138
|
super();
|
|
139
139
|
this.element = append(container, $('code.version'));
|
|
140
|
-
this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, ( localize(
|
|
140
|
+
this._register(hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, ( localize(9393, "Extension Version"))));
|
|
141
141
|
this.render();
|
|
142
142
|
}
|
|
143
143
|
render() {
|
|
@@ -198,26 +198,26 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
198
198
|
const details = append(header, $('.details'));
|
|
199
199
|
const title = append(details, $('.title'));
|
|
200
200
|
const name = append(title, $('span.name.clickable', { role: 'heading', tabIndex: 0 }));
|
|
201
|
-
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), name, ( localize(
|
|
201
|
+
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), name, ( localize(9394, "Extension name"))));
|
|
202
202
|
const versionWidget = ( (new VersionWidget(title, this.hoverService)));
|
|
203
203
|
const preview = append(title, $('span.preview'));
|
|
204
|
-
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), preview, ( localize(
|
|
205
|
-
preview.textContent = ( localize(
|
|
204
|
+
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), preview, ( localize(9395, "Preview"))));
|
|
205
|
+
preview.textContent = ( localize(9395, "Preview"));
|
|
206
206
|
const builtin = append(title, $('span.builtin'));
|
|
207
|
-
builtin.textContent = ( localize(
|
|
207
|
+
builtin.textContent = ( localize(9396, "Built-in"));
|
|
208
208
|
const subtitle = append(details, $('.subtitle'));
|
|
209
209
|
const publisher = append(append(subtitle, $('.subtitle-entry')), $('.publisher.clickable', { tabIndex: 0 }));
|
|
210
|
-
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), publisher, ( localize(
|
|
210
|
+
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), publisher, ( localize(9397, "Publisher"))));
|
|
211
211
|
publisher.setAttribute('role', 'button');
|
|
212
212
|
const publisherDisplayName = append(publisher, $('.publisher-name'));
|
|
213
213
|
const verifiedPublisherWidget = this.instantiationService.createInstance(VerifiedPublisherWidget, append(publisher, $('.verified-publisher')), false);
|
|
214
214
|
const resource = append(append(subtitle, $('.subtitle-entry.resource')), $('', { tabIndex: 0 }));
|
|
215
215
|
resource.setAttribute('role', 'button');
|
|
216
216
|
const installCount = append(append(subtitle, $('.subtitle-entry')), $('span.install', { tabIndex: 0 }));
|
|
217
|
-
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), installCount, ( localize(
|
|
217
|
+
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), installCount, ( localize(9398, "Install count"))));
|
|
218
218
|
const installCountWidget = this.instantiationService.createInstance(InstallCountWidget, installCount, false);
|
|
219
219
|
const rating = append(append(subtitle, $('.subtitle-entry')), $('span.rating.clickable', { tabIndex: 0 }));
|
|
220
|
-
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), rating, ( localize(
|
|
220
|
+
this._register(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), rating, ( localize(9399, "Rating"))));
|
|
221
221
|
rating.setAttribute('role', 'link');
|
|
222
222
|
const ratingsWidget = this.instantiationService.createInstance(RatingsWidget, rating, false);
|
|
223
223
|
const sponsorWidget = this.instantiationService.createInstance(SponsorWidget, append(subtitle, $('.subtitle-entry')));
|
|
@@ -447,7 +447,7 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
447
447
|
if (workspaceFolder && extension.isWorkspaceScoped) {
|
|
448
448
|
template.resource.parentElement?.classList.add('clickable');
|
|
449
449
|
this.transientDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), template.resource, this.uriIdentityService.extUri.relativePath(workspaceFolder.uri, location)));
|
|
450
|
-
template.resource.textContent = ( localize(
|
|
450
|
+
template.resource.textContent = ( localize(9400, "Workspace Extension"));
|
|
451
451
|
this.transientDisposables.add(onClick(template.resource, () => {
|
|
452
452
|
this.viewsService.openView(VIEW_ID, true).then(() => this.explorerService.select(location, true));
|
|
453
453
|
}));
|
|
@@ -455,7 +455,7 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
455
455
|
else {
|
|
456
456
|
template.resource.parentElement?.classList.remove('clickable');
|
|
457
457
|
this.transientDisposables.add(this.hoverService.setupManagedHover(getDefaultHoverDelegate('mouse'), template.resource, location.path));
|
|
458
|
-
template.resource.textContent = ( localize(
|
|
458
|
+
template.resource.textContent = ( localize(9401, "Local Extension"));
|
|
459
459
|
}
|
|
460
460
|
}
|
|
461
461
|
template.installCount.parentElement?.classList.toggle('hide', !extension.url);
|
|
@@ -492,22 +492,22 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
492
492
|
this.initialScrollProgress.clear();
|
|
493
493
|
this.currentIdentifier = extension.identifier.id;
|
|
494
494
|
}
|
|
495
|
-
template.navbar.push(ExtensionEditorTab.Readme, ( localize(
|
|
495
|
+
template.navbar.push(ExtensionEditorTab.Readme, ( localize(9402, "Details")), ( localize(9403, "Extension details, rendered from the extension's 'README.md' file")));
|
|
496
496
|
if (manifest) {
|
|
497
|
-
template.navbar.push(ExtensionEditorTab.Features, ( localize(
|
|
497
|
+
template.navbar.push(ExtensionEditorTab.Features, ( localize(9404, "Features")), ( localize(9405, "Lists features contributed by this extension")));
|
|
498
498
|
}
|
|
499
499
|
if (extension.hasChangelog()) {
|
|
500
|
-
template.navbar.push(ExtensionEditorTab.Changelog, ( localize(
|
|
501
|
-
|
|
500
|
+
template.navbar.push(ExtensionEditorTab.Changelog, ( localize(9406, "Changelog")), ( localize(
|
|
501
|
+
9407,
|
|
502
502
|
"Extension update history, rendered from the extension's 'CHANGELOG.md' file"
|
|
503
503
|
)));
|
|
504
504
|
}
|
|
505
505
|
if (extension.dependencies.length) {
|
|
506
|
-
template.navbar.push(ExtensionEditorTab.Dependencies, ( localize(
|
|
506
|
+
template.navbar.push(ExtensionEditorTab.Dependencies, ( localize(9408, "Dependencies")), ( localize(9409, "Lists extensions this extension depends on")));
|
|
507
507
|
}
|
|
508
508
|
if (manifest && manifest.extensionPack?.length && !this.shallRenderAsExtensionPack(manifest)) {
|
|
509
|
-
template.navbar.push(ExtensionEditorTab.ExtensionPack, ( localize(
|
|
510
|
-
|
|
509
|
+
template.navbar.push(ExtensionEditorTab.ExtensionPack, ( localize(9410, "Extension Pack")), ( localize(
|
|
510
|
+
9411,
|
|
511
511
|
"Lists extensions those will be installed together with this extension"
|
|
512
512
|
)));
|
|
513
513
|
}
|
|
@@ -714,7 +714,7 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
714
714
|
activeElement = await this.openExtensionPackReadme(extension, manifest, readmeContainer, token);
|
|
715
715
|
}
|
|
716
716
|
else {
|
|
717
|
-
activeElement = await this.openMarkdown(extension, this.extensionReadme.get(), ( localize(
|
|
717
|
+
activeElement = await this.openMarkdown(extension, this.extensionReadme.get(), ( localize(9412, "No README available.")), readmeContainer, WebviewIndex.Readme, ( localize(9413, "Readme")), token);
|
|
718
718
|
}
|
|
719
719
|
this.renderAdditionalDetails(additionalDetailsContainer, extension);
|
|
720
720
|
return activeElement;
|
|
@@ -743,14 +743,14 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
743
743
|
extensionPackReadme.classList.add('more-rows');
|
|
744
744
|
}
|
|
745
745
|
const extensionPackHeader = append(extensionPack, $('div.header'));
|
|
746
|
-
extensionPackHeader.textContent = ( localize(
|
|
746
|
+
extensionPackHeader.textContent = ( localize(9414, "Extension Pack ({0})", manifest.extensionPack.length));
|
|
747
747
|
const extensionPackContent = append(extensionPack, $('div', { class: 'extension-pack-content' }));
|
|
748
748
|
extensionPackContent.setAttribute('tabindex', '0');
|
|
749
749
|
append(extensionPack, $('div.footer'));
|
|
750
750
|
const readmeContent = append(extensionPackReadme, $('div.readme-content'));
|
|
751
751
|
await Promise.all([
|
|
752
752
|
this.renderExtensionPack(manifest, extensionPackContent, token),
|
|
753
|
-
this.openMarkdown(extension, this.extensionReadme.get(), ( localize(
|
|
753
|
+
this.openMarkdown(extension, this.extensionReadme.get(), ( localize(9412, "No README available.")), readmeContent, WebviewIndex.Readme, ( localize(9413, "Readme")), token),
|
|
754
754
|
]);
|
|
755
755
|
return { focus: () => extensionPackContent.focus() };
|
|
756
756
|
}
|
|
@@ -770,7 +770,7 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
770
770
|
renderCategories(container, extension) {
|
|
771
771
|
if (extension.categories.length) {
|
|
772
772
|
const categoriesContainer = append(container, $('.categories-container.additional-details-element'));
|
|
773
|
-
append(categoriesContainer, $('.additional-details-title', undefined, ( localize(
|
|
773
|
+
append(categoriesContainer, $('.additional-details-title', undefined, ( localize(9415, "Categories"))));
|
|
774
774
|
const categoriesElement = append(categoriesContainer, $('.categories'));
|
|
775
775
|
for (const category of extension.categories) {
|
|
776
776
|
this.transientDisposables.add(onClick(append(categoriesElement, $('span.category', { tabindex: '0' }, category)), () => {
|
|
@@ -784,23 +784,23 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
784
784
|
renderExtensionResources(container, extension) {
|
|
785
785
|
const resources = [];
|
|
786
786
|
if (extension.url) {
|
|
787
|
-
resources.push([( localize(
|
|
787
|
+
resources.push([( localize(9416, "Marketplace")), ( (URI.parse(extension.url)))]);
|
|
788
788
|
}
|
|
789
789
|
if (extension.url && extension.supportUrl) {
|
|
790
790
|
try {
|
|
791
|
-
resources.push([( localize(
|
|
791
|
+
resources.push([( localize(9417, "Issues")), ( (URI.parse(extension.supportUrl)))]);
|
|
792
792
|
}
|
|
793
793
|
catch (error) { }
|
|
794
794
|
}
|
|
795
795
|
if (extension.repository) {
|
|
796
796
|
try {
|
|
797
|
-
resources.push([( localize(
|
|
797
|
+
resources.push([( localize(9418, "Repository")), ( (URI.parse(extension.repository)))]);
|
|
798
798
|
}
|
|
799
799
|
catch (error) { }
|
|
800
800
|
}
|
|
801
801
|
if (extension.url && extension.licenseUrl) {
|
|
802
802
|
try {
|
|
803
|
-
resources.push([( localize(
|
|
803
|
+
resources.push([( localize(9419, "License")), ( (URI.parse(extension.licenseUrl)))]);
|
|
804
804
|
}
|
|
805
805
|
catch (error) { }
|
|
806
806
|
}
|
|
@@ -809,7 +809,7 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
809
809
|
}
|
|
810
810
|
if (resources.length || extension.publisherSponsorLink) {
|
|
811
811
|
const extensionResourcesContainer = append(container, $('.resources-container.additional-details-element'));
|
|
812
|
-
append(extensionResourcesContainer, $('.additional-details-title', undefined, ( localize(
|
|
812
|
+
append(extensionResourcesContainer, $('.additional-details-title', undefined, ( localize(9420, "Resources"))));
|
|
813
813
|
const resourcesElement = append(extensionResourcesContainer, $('.resources'));
|
|
814
814
|
for (const [label, uri] of resources) {
|
|
815
815
|
const resource = append(resourcesElement, $('a.resource', { tabindex: '0' }, label));
|
|
@@ -821,19 +821,19 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
821
821
|
renderMoreInfo(container, extension) {
|
|
822
822
|
const gallery = extension.gallery;
|
|
823
823
|
const moreInfoContainer = append(container, $('.more-info-container.additional-details-element'));
|
|
824
|
-
append(moreInfoContainer, $('.additional-details-title', undefined, ( localize(
|
|
824
|
+
append(moreInfoContainer, $('.additional-details-title', undefined, ( localize(9421, "More Info"))));
|
|
825
825
|
const moreInfo = append(moreInfoContainer, $('.more-info'));
|
|
826
826
|
const toDateString = (date) => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}, ${date.toLocaleTimeString(language, { hourCycle: 'h23' })}`;
|
|
827
827
|
if (gallery) {
|
|
828
|
-
append(moreInfo, $('.more-info-entry', undefined, $('div', undefined, ( localize(
|
|
828
|
+
append(moreInfo, $('.more-info-entry', undefined, $('div', undefined, ( localize(9422, "Published"))), $('div', undefined, toDateString(( (new Date(gallery.releaseDate)))))), $('.more-info-entry', undefined, $('div', undefined, ( localize(9423, "Last released"))), $('div', undefined, toDateString(( (new Date(gallery.lastUpdated)))))));
|
|
829
829
|
}
|
|
830
830
|
if (extension.local && extension.local.installedTimestamp) {
|
|
831
|
-
append(moreInfo, $('.more-info-entry', undefined, $('div', undefined, ( localize(
|
|
831
|
+
append(moreInfo, $('.more-info-entry', undefined, $('div', undefined, ( localize(9424, "Last updated"))), $('div', undefined, toDateString(( (new Date(extension.local.installedTimestamp)))))));
|
|
832
832
|
}
|
|
833
|
-
append(moreInfo, $('.more-info-entry', undefined, $('div', undefined, ( localize(
|
|
833
|
+
append(moreInfo, $('.more-info-entry', undefined, $('div', undefined, ( localize(9425, "Identifier"))), $('code', undefined, extension.identifier.id)));
|
|
834
834
|
}
|
|
835
835
|
openChangelog(extension, template, token) {
|
|
836
|
-
return this.openMarkdown(extension, this.extensionChangelog.get(), ( localize(
|
|
836
|
+
return this.openMarkdown(extension, this.extensionChangelog.get(), ( localize(9426, "No Changelog available.")), template.content, WebviewIndex.Changelog, ( localize(9427, "Changelog")), token);
|
|
837
837
|
}
|
|
838
838
|
async openFeatures(template, token) {
|
|
839
839
|
const manifest = await this.loadContents(() => this.extensionManifest.get(), template.content);
|
|
@@ -856,7 +856,7 @@ let ExtensionEditor = class ExtensionEditor extends EditorPane {
|
|
|
856
856
|
return Promise.resolve(null);
|
|
857
857
|
}
|
|
858
858
|
if (isFalsyOrEmpty(extension.dependencies)) {
|
|
859
|
-
append(template.content, $('p.nocontent')).textContent = ( localize(
|
|
859
|
+
append(template.content, $('p.nocontent')).textContent = ( localize(9428, "No Dependencies"));
|
|
860
860
|
return Promise.resolve(template.content);
|
|
861
861
|
}
|
|
862
862
|
const content = $('div', { class: 'subcontent' });
|
|
@@ -959,7 +959,7 @@ registerAction2(class ShowExtensionEditorFindAction extends Action2 {
|
|
|
959
959
|
constructor() {
|
|
960
960
|
super({
|
|
961
961
|
id: 'editor.action.extensioneditor.showfind',
|
|
962
|
-
title: ( localize(
|
|
962
|
+
title: ( localize(9429, "Find")),
|
|
963
963
|
keybinding: {
|
|
964
964
|
when: contextKeyExpr,
|
|
965
965
|
weight: KeybindingWeight.EditorContrib,
|
|
@@ -976,7 +976,7 @@ registerAction2(class StartExtensionEditorFindNextAction extends Action2 {
|
|
|
976
976
|
constructor() {
|
|
977
977
|
super({
|
|
978
978
|
id: 'editor.action.extensioneditor.findNext',
|
|
979
|
-
title: ( localize(
|
|
979
|
+
title: ( localize(9430, "Find Next")),
|
|
980
980
|
keybinding: {
|
|
981
981
|
when: ( (ContextKeyExpr.and(contextKeyExpr, KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED))),
|
|
982
982
|
primary: KeyCode.Enter,
|
|
@@ -993,7 +993,7 @@ registerAction2(class StartExtensionEditorFindPreviousAction extends Action2 {
|
|
|
993
993
|
constructor() {
|
|
994
994
|
super({
|
|
995
995
|
id: 'editor.action.extensioneditor.findPrevious',
|
|
996
|
-
title: ( localize(
|
|
996
|
+
title: ( localize(9431, "Find Previous")),
|
|
997
997
|
keybinding: {
|
|
998
998
|
when: ( (ContextKeyExpr.and(contextKeyExpr, KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED))),
|
|
999
999
|
primary: KeyMod.Shift | KeyCode.Enter,
|
|
@@ -22,7 +22,7 @@ let ExtensionEnablementWorkspaceTrustTransitionParticipant = class ExtensionEnab
|
|
|
22
22
|
hostService.reload();
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
|
-
const stopped = await extensionService.stopExtensionHosts(( localize(
|
|
25
|
+
const stopped = await extensionService.stopExtensionHosts(( localize(9502, "Restarting extension host due to workspace trust change.")));
|
|
26
26
|
await extensionEnablementService.updateExtensionsEnablementsWhenWorkspaceTrustChanges();
|
|
27
27
|
if (stopped) {
|
|
28
28
|
extensionService.startExtensionHosts();
|