@codingame/monaco-vscode-extensions-service-override 25.1.1 → 26.0.0
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/index.js +7 -0
- package/package.json +3 -3
- package/vscode/src/vs/base/common/console.js +24 -15
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.d.ts +4 -1
- package/vscode/src/vs/platform/extensionManagement/common/extensionManagementCLI.js +149 -84
- package/vscode/src/vs/platform/extensionResourceLoader/browser/extensionResourceLoaderService.js +20 -12
- package/vscode/src/vs/platform/extensionResourceLoader/common/extensionResourceLoader.js +38 -21
- package/vscode/src/vs/platform/remote/common/managedSocket.js +7 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadAiEmbeddingVector.js +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadAiRelatedInformation.js +5 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadAiSettingsSearch.js +4 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadAuthentication.js +200 -143
- package/vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js +10 -14
- package/vscode/src/vs/workbench/api/browser/mainThreadCLICommands.js +41 -31
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.d.ts +9 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadChatAgents2.js +168 -115
- package/vscode/src/vs/workbench/api/browser/mainThreadChatCodeMapper.js +11 -13
- package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.d.ts +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadChatContext.js +42 -15
- package/vscode/src/vs/workbench/api/browser/mainThreadChatOutputRenderer.js +8 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.d.ts +4 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadChatSessions.js +170 -99
- package/vscode/src/vs/workbench/api/browser/mainThreadChatStatus.js +2 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadClipboard.js +4 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadCodeInsets.js +13 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadCommands.js +16 -19
- package/vscode/src/vs/workbench/api/browser/mainThreadComments.js +127 -70
- package/vscode/src/vs/workbench/api/browser/mainThreadConfiguration.js +80 -26
- package/vscode/src/vs/workbench/api/browser/mainThreadConsole.js +5 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadCustomEditors.js +199 -97
- package/vscode/src/vs/workbench/api/browser/mainThreadDataChannels.js +1 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadDebugService.js +88 -73
- package/vscode/src/vs/workbench/api/browser/mainThreadDecorations.js +5 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadDiagnostics.js +16 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadDialogs.js +10 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentContentProviders.js +14 -6
- package/vscode/src/vs/workbench/api/browser/mainThreadDocuments.js +52 -37
- package/vscode/src/vs/workbench/api/browser/mainThreadDocumentsAndEditors.js +78 -58
- package/vscode/src/vs/workbench/api/browser/mainThreadEditSessionIdentityParticipant.js +5 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadEditor.js +75 -63
- package/vscode/src/vs/workbench/api/browser/mainThreadEditorTabs.js +99 -91
- package/vscode/src/vs/workbench/api/browser/mainThreadEditors.js +93 -55
- package/vscode/src/vs/workbench/api/browser/mainThreadEmbeddings.js +3 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadExtensionService.js +85 -60
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystem.js +49 -45
- package/vscode/src/vs/workbench/api/browser/mainThreadFileSystemEventService.js +114 -72
- package/vscode/src/vs/workbench/api/browser/mainThreadInteractive.js +4 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadLabelService.js +1 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.d.ts +2 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageFeatures.js +381 -238
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.d.ts +7 -3
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModelTools.js +90 -13
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js +81 -58
- package/vscode/src/vs/workbench/api/browser/mainThreadLanguages.js +9 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadLocalization.js +2 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadLogService.js +6 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadManagedSockets.js +12 -10
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.d.ts +3 -2
- package/vscode/src/vs/workbench/api/browser/mainThreadMcp.js +162 -97
- package/vscode/src/vs/workbench/api/browser/mainThreadMessageService.js +32 -26
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebook.js +38 -32
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocuments.js +48 -46
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDocumentsAndEditors.js +22 -18
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookDto.js +5 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookEditors.js +35 -21
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookKernels.js +31 -28
- package/vscode/src/vs/workbench/api/browser/mainThreadNotebookSaveParticipant.js +5 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadOutputService.js +47 -23
- package/vscode/src/vs/workbench/api/browser/mainThreadProfileContentHandlers.js +15 -12
- package/vscode/src/vs/workbench/api/browser/mainThreadProgress.js +17 -18
- package/vscode/src/vs/workbench/api/browser/mainThreadQuickDiff.js +6 -7
- package/vscode/src/vs/workbench/api/browser/mainThreadQuickOpen.js +83 -66
- package/vscode/src/vs/workbench/api/browser/mainThreadRemoteConnectionData.js +1 -5
- package/vscode/src/vs/workbench/api/browser/mainThreadSCM.js +250 -92
- package/vscode/src/vs/workbench/api/browser/mainThreadSaveParticipant.js +6 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadSearch.js +37 -26
- package/vscode/src/vs/workbench/api/browser/mainThreadSecretState.js +34 -21
- package/vscode/src/vs/workbench/api/browser/mainThreadShare.js +3 -6
- package/vscode/src/vs/workbench/api/browser/mainThreadSpeech.js +19 -14
- package/vscode/src/vs/workbench/api/browser/mainThreadStatusBar.js +41 -16
- package/vscode/src/vs/workbench/api/browser/mainThreadStorage.js +18 -17
- package/vscode/src/vs/workbench/api/browser/mainThreadTask.js +145 -145
- package/vscode/src/vs/workbench/api/browser/mainThreadTelemetry.js +19 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalService.js +176 -80
- package/vscode/src/vs/workbench/api/browser/mainThreadTerminalShellIntegration.js +52 -21
- package/vscode/src/vs/workbench/api/browser/mainThreadTesting.js +26 -24
- package/vscode/src/vs/workbench/api/browser/mainThreadTheming.js +1 -4
- package/vscode/src/vs/workbench/api/browser/mainThreadTimeline.js +5 -8
- package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.d.ts +4 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadTreeViews.js +106 -46
- package/vscode/src/vs/workbench/api/browser/mainThreadTunnelService.js +83 -65
- package/vscode/src/vs/workbench/api/browser/mainThreadUriOpeners.js +20 -20
- package/vscode/src/vs/workbench/api/browser/mainThreadUrls.js +14 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewManager.js +17 -9
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewPanels.js +49 -38
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviewViews.js +10 -13
- package/vscode/src/vs/workbench/api/browser/mainThreadWebviews.js +38 -27
- package/vscode/src/vs/workbench/api/browser/mainThreadWindow.js +5 -11
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.d.ts +4 -1
- package/vscode/src/vs/workbench/api/browser/mainThreadWorkspace.js +73 -43
- package/vscode/src/vs/workbench/api/common/shared/dataTransferCache.js +2 -2
- package/vscode/src/vs/workbench/contrib/customEditor/common/customTextEditorModel.js +17 -10
- package/vscode/src/vs/workbench/contrib/externalUriOpener/common/contributedOpeners.js +17 -11
- package/vscode/src/vs/workbench/services/extensionManagement/browser/extensionBisect.js +107 -80
- package/vscode/src/vs/workbench/services/extensionManagement/browser/webExtensionsScannerService.js +336 -175
- package/vscode/src/vs/workbench/services/extensions/browser/extensionService.js +126 -71
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.js +76 -54
- package/vscode/src/vs/workbench/services/extensions/browser/webWorkerFileSystemProvider.js +1 -2
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.d.ts +2 -0
- package/vscode/src/vs/workbench/services/extensions/common/abstractExtensionService.js +343 -192
- package/vscode/src/vs/workbench/services/extensions/common/extHostCustomers.js +5 -3
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.d.ts +0 -1
- package/vscode/src/vs/workbench/services/extensions/common/extensionHostManager.js +75 -68
- package/vscode/src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.js +135 -36
- package/vscode/src/vs/workbench/services/extensions/common/extensionsProposedApi.js +22 -18
- package/vscode/src/vs/workbench/services/extensions/common/extensionsUtil.js +14 -12
- package/vscode/src/vs/workbench/services/extensions/common/lazyCreateExtensionHostManager.js +21 -9
- package/vscode/src/vs/workbench/services/extensions/common/remoteExtensionHost.js +48 -25
- package/vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.d.ts +24 -0
- package/vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.js +300 -0
package/index.js
CHANGED
|
@@ -49,6 +49,13 @@ import { WebExtensionsScannerService } from './vscode/src/vs/workbench/services/
|
|
|
49
49
|
import { IBuiltinExtensionsScannerService } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions.service';
|
|
50
50
|
import { ExtensionManifestTranslator } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensionManagement/common/extensionsScannerService';
|
|
51
51
|
import { getBuiltInExtensionTranslationsUris } from '@codingame/monaco-vscode-api/l10n';
|
|
52
|
+
import '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/jsonValidationExtensionPoint';
|
|
53
|
+
import '@codingame/monaco-vscode-api/vscode/vs/workbench/services/themes/common/colorExtensionPoint';
|
|
54
|
+
import '@codingame/monaco-vscode-api/vscode/vs/workbench/services/themes/common/iconExtensionPoint';
|
|
55
|
+
import '@codingame/monaco-vscode-api/vscode/vs/workbench/services/themes/common/tokenClassificationExtensionPoint';
|
|
56
|
+
import '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/codeEditor/common/languageConfigurationExtensionPoint';
|
|
57
|
+
import '@codingame/monaco-vscode-api/vscode/vs/workbench/api/browser/statusBarExtensionPoint';
|
|
58
|
+
import './vscode/src/vs/workbench/services/themes/browser/cssExtensionPoint.js';
|
|
52
59
|
import './vscode/src/vs/workbench/api/browser/mainThreadLocalization.js';
|
|
53
60
|
import './vscode/src/vs/workbench/api/browser/mainThreadBulkEdits.js';
|
|
54
61
|
import './vscode/src/vs/workbench/api/browser/mainThreadLanguageModels.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codingame/monaco-vscode-extensions-service-override",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "26.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - extensions service-override",
|
|
6
6
|
"keywords": [],
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
},
|
|
16
16
|
"type": "module",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@codingame/monaco-vscode-api": "
|
|
19
|
-
"@codingame/monaco-vscode-files-service-override": "
|
|
18
|
+
"@codingame/monaco-vscode-api": "26.0.0",
|
|
19
|
+
"@codingame/monaco-vscode-files-service-override": "26.0.0"
|
|
20
20
|
},
|
|
21
21
|
"main": "index.js",
|
|
22
22
|
"module": "index.js",
|
|
@@ -15,46 +15,55 @@ function parse(entry) {
|
|
|
15
15
|
stack = stackArgument.__$stack;
|
|
16
16
|
}
|
|
17
17
|
args.push(...parsedArguments);
|
|
18
|
+
} catch (error) {
|
|
19
|
+
args.push("Unable to log remote console arguments", entry.arguments);
|
|
18
20
|
}
|
|
19
|
-
|
|
20
|
-
args
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
return {
|
|
22
|
+
args,
|
|
23
|
+
stack
|
|
24
|
+
};
|
|
23
25
|
}
|
|
24
26
|
function findFirstFrame(stack) {
|
|
25
27
|
if (!stack) {
|
|
26
28
|
return stack;
|
|
27
29
|
}
|
|
28
|
-
const newlineIndex = stack.indexOf(
|
|
30
|
+
const newlineIndex = stack.indexOf("\n");
|
|
29
31
|
if (newlineIndex === -1) {
|
|
30
32
|
return stack;
|
|
31
33
|
}
|
|
32
34
|
return stack.substring(0, newlineIndex);
|
|
33
35
|
}
|
|
34
36
|
function log(entry, label) {
|
|
35
|
-
const {
|
|
36
|
-
|
|
37
|
+
const {
|
|
38
|
+
args,
|
|
39
|
+
stack
|
|
40
|
+
} = parse(entry);
|
|
41
|
+
const isOneStringArg = typeof args[0] === "string" && args.length === 1;
|
|
37
42
|
let topFrame = findFirstFrame(stack);
|
|
38
43
|
if (topFrame) {
|
|
39
44
|
topFrame = `(${topFrame.trim()})`;
|
|
40
45
|
}
|
|
41
46
|
let consoleArgs = [];
|
|
42
|
-
if (typeof args[0] ===
|
|
47
|
+
if (typeof args[0] === "string") {
|
|
43
48
|
if (topFrame && isOneStringArg) {
|
|
44
|
-
consoleArgs = [
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
consoleArgs = [
|
|
50
|
+
`%c[${label}] %c${args[0]} %c${topFrame}`,
|
|
51
|
+
color("blue"),
|
|
52
|
+
color(""),
|
|
53
|
+
color("grey")
|
|
54
|
+
];
|
|
55
|
+
} else {
|
|
56
|
+
consoleArgs = [`%c[${label}] %c${args[0]}`, color("blue"), color(""), ...args.slice(1)];
|
|
48
57
|
}
|
|
49
58
|
}
|
|
50
59
|
else {
|
|
51
|
-
consoleArgs = [`%c[${label}]%`, color(
|
|
60
|
+
consoleArgs = [`%c[${label}]%`, color("blue"), ...args];
|
|
52
61
|
}
|
|
53
62
|
if (topFrame && !isOneStringArg) {
|
|
54
63
|
consoleArgs.push(topFrame);
|
|
55
64
|
}
|
|
56
|
-
if (typeof console[entry.severity] !==
|
|
57
|
-
throw ( new Error(
|
|
65
|
+
if (typeof console[entry.severity] !== "function") {
|
|
66
|
+
throw ( new Error("Unknown console method"));
|
|
58
67
|
}
|
|
59
68
|
console[entry.severity].apply(console, consoleArgs);
|
|
60
69
|
}
|
|
@@ -4,11 +4,14 @@ import { IExtensionManagementService } from "@codingame/monaco-vscode-api/vscode
|
|
|
4
4
|
import { IExtensionGalleryService } from "@codingame/monaco-vscode-api/vscode/vs/platform/extensionManagement/common/extensionManagement.service";
|
|
5
5
|
import { IExtensionManifest } from "@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions";
|
|
6
6
|
import { ILogger } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log";
|
|
7
|
+
import { IProductService } from "@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service";
|
|
7
8
|
export declare class ExtensionManagementCLI {
|
|
9
|
+
private readonly extensionsForceVersionByQuality;
|
|
8
10
|
protected readonly logger: ILogger;
|
|
9
11
|
private readonly extensionManagementService;
|
|
10
12
|
private readonly extensionGalleryService;
|
|
11
|
-
|
|
13
|
+
private readonly productService;
|
|
14
|
+
constructor(extensionsForceVersionByQuality: readonly string[], logger: ILogger, extensionManagementService: IExtensionManagementService, extensionGalleryService: IExtensionGalleryService, productService: IProductService);
|
|
12
15
|
protected get location(): string | undefined;
|
|
13
16
|
listExtensions(showVersions: boolean, category?: string, profileLocation?: URI): Promise<void>;
|
|
14
17
|
installExtensions(extensions: (string | URI)[], builtinExtensions: (string | URI)[], installOptions: InstallOptions, force: boolean): Promise<void>;
|
|
@@ -11,18 +11,28 @@ import { InstallOperation, EXTENSION_IDENTIFIER_REGEX } from '@codingame/monaco-
|
|
|
11
11
|
import { IExtensionManagementService, IExtensionGalleryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensionManagement/common/extensionManagement.service';
|
|
12
12
|
import { getIdAndVersion, areSameExtensions, getGalleryExtensionId, getExtensionId } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensionManagement/common/extensionManagementUtil';
|
|
13
13
|
import { ExtensionType, EXTENSION_CATEGORIES } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
|
|
14
|
+
import { IProductService } from '@codingame/monaco-vscode-api/vscode/vs/platform/product/common/productService.service';
|
|
14
15
|
|
|
15
|
-
const notFound =
|
|
16
|
+
const notFound = id => ( localize(1847, "Extension '{0}' not found.", id));
|
|
16
17
|
const useId = ( localize(
|
|
17
|
-
|
|
18
|
+
1848,
|
|
18
19
|
"Make sure you use the full extension ID, including the publisher, e.g.: {0}",
|
|
19
|
-
|
|
20
|
+
"ms-dotnettools.csharp"
|
|
20
21
|
));
|
|
21
22
|
let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
22
|
-
constructor(
|
|
23
|
+
constructor(
|
|
24
|
+
extensionsForceVersionByQuality,
|
|
25
|
+
logger,
|
|
26
|
+
extensionManagementService,
|
|
27
|
+
extensionGalleryService,
|
|
28
|
+
productService
|
|
29
|
+
) {
|
|
30
|
+
this.extensionsForceVersionByQuality = extensionsForceVersionByQuality;
|
|
23
31
|
this.logger = logger;
|
|
24
32
|
this.extensionManagementService = extensionManagementService;
|
|
25
33
|
this.extensionGalleryService = extensionGalleryService;
|
|
34
|
+
this.productService = productService;
|
|
35
|
+
this.extensionsForceVersionByQuality = ( this.extensionsForceVersionByQuality.map(e => e.toLowerCase()));
|
|
26
36
|
}
|
|
27
37
|
get location() {
|
|
28
38
|
return undefined;
|
|
@@ -30,9 +40,11 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
30
40
|
async listExtensions(showVersions, category, profileLocation) {
|
|
31
41
|
let extensions = await this.extensionManagementService.getInstalled(ExtensionType.User, profileLocation);
|
|
32
42
|
const categories = ( EXTENSION_CATEGORIES.map(c => c.toLowerCase()));
|
|
33
|
-
if (category && category !==
|
|
43
|
+
if (category && category !== "") {
|
|
34
44
|
if (categories.indexOf(category.toLowerCase()) < 0) {
|
|
35
|
-
this.logger.info(
|
|
45
|
+
this.logger.info(
|
|
46
|
+
"Invalid category please enter a valid category. To list valid categories run --category without a category specified"
|
|
47
|
+
);
|
|
36
48
|
return;
|
|
37
49
|
}
|
|
38
50
|
extensions = extensions.filter(e => {
|
|
@@ -42,16 +54,15 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
42
54
|
}
|
|
43
55
|
return false;
|
|
44
56
|
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
this.logger.info('Possible Categories: ');
|
|
57
|
+
} else if (category === "") {
|
|
58
|
+
this.logger.info("Possible Categories: ");
|
|
48
59
|
categories.forEach(category => {
|
|
49
60
|
this.logger.info(category);
|
|
50
61
|
});
|
|
51
62
|
return;
|
|
52
63
|
}
|
|
53
64
|
if (this.location) {
|
|
54
|
-
this.logger.info(( localize(
|
|
65
|
+
this.logger.info(( localize(1849, "Extensions installed on {0}:", this.location)));
|
|
55
66
|
}
|
|
56
67
|
extensions = extensions.sort((e1, e2) => e1.identifier.id.localeCompare(e2.identifier.id));
|
|
57
68
|
let lastId = undefined;
|
|
@@ -66,38 +77,61 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
66
77
|
const failed = [];
|
|
67
78
|
try {
|
|
68
79
|
if (extensions.length) {
|
|
69
|
-
this.logger.info(this.location ? ( localize(
|
|
80
|
+
this.logger.info(this.location ? ( localize(1850, "Installing extensions on {0}...", this.location)) : ( localize(1851, "Installing extensions...")));
|
|
70
81
|
}
|
|
71
82
|
const installVSIXInfos = [];
|
|
72
83
|
const installExtensionInfos = [];
|
|
73
84
|
const addInstallExtensionInfo = (id, version, isBuiltin) => {
|
|
74
|
-
|
|
85
|
+
if (this.extensionsForceVersionByQuality?.some(e => e === id.toLowerCase())) {
|
|
86
|
+
version = this.productService.quality !== "stable" ? "prerelease" : undefined;
|
|
87
|
+
}
|
|
88
|
+
installExtensionInfos.push({
|
|
89
|
+
id,
|
|
90
|
+
version: version !== "prerelease" ? version : undefined,
|
|
91
|
+
installOptions: {
|
|
92
|
+
...installOptions,
|
|
93
|
+
isBuiltin,
|
|
94
|
+
installPreReleaseVersion: version === "prerelease" || installOptions.installPreReleaseVersion
|
|
95
|
+
}
|
|
96
|
+
});
|
|
75
97
|
};
|
|
76
98
|
for (const extension of extensions) {
|
|
77
99
|
if (extension instanceof URI) {
|
|
78
|
-
installVSIXInfos.push({
|
|
79
|
-
|
|
80
|
-
|
|
100
|
+
installVSIXInfos.push({
|
|
101
|
+
vsix: extension,
|
|
102
|
+
installOptions
|
|
103
|
+
});
|
|
104
|
+
} else {
|
|
81
105
|
const [id, version] = getIdAndVersion(extension);
|
|
82
106
|
addInstallExtensionInfo(id, version, false);
|
|
83
107
|
}
|
|
84
108
|
}
|
|
85
109
|
for (const extension of builtinExtensions) {
|
|
86
110
|
if (extension instanceof URI) {
|
|
87
|
-
installVSIXInfos.push({
|
|
88
|
-
|
|
89
|
-
|
|
111
|
+
installVSIXInfos.push({
|
|
112
|
+
vsix: extension,
|
|
113
|
+
installOptions: {
|
|
114
|
+
...installOptions,
|
|
115
|
+
isBuiltin: true,
|
|
116
|
+
donotIncludePackAndDependencies: true
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
} else {
|
|
90
120
|
const [id, version] = getIdAndVersion(extension);
|
|
91
121
|
addInstallExtensionInfo(id, version, true);
|
|
92
122
|
}
|
|
93
123
|
}
|
|
94
124
|
const installed = await this.extensionManagementService.getInstalled(undefined, installOptions.profileLocation);
|
|
95
125
|
if (installVSIXInfos.length) {
|
|
96
|
-
await Promise.all(( installVSIXInfos.map(async (
|
|
126
|
+
await Promise.all(( installVSIXInfos.map(async (
|
|
127
|
+
{
|
|
128
|
+
vsix,
|
|
129
|
+
installOptions
|
|
130
|
+
}
|
|
131
|
+
) => {
|
|
97
132
|
try {
|
|
98
133
|
await this.installVSIX(vsix, installOptions, force, installed);
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
134
|
+
} catch (err) {
|
|
101
135
|
this.logger.error(err);
|
|
102
136
|
failed.push(( vsix.toString()));
|
|
103
137
|
}
|
|
@@ -107,13 +141,12 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
107
141
|
const failedGalleryExtensions = await this.installGalleryExtensions(installExtensionInfos, installed, force);
|
|
108
142
|
failed.push(...failedGalleryExtensions);
|
|
109
143
|
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
this.logger.error(( localize(1853, "Error while installing extensions: {0}", getErrorMessage(error))));
|
|
144
|
+
} catch (error) {
|
|
145
|
+
this.logger.error(( localize(1852, "Error while installing extensions: {0}", getErrorMessage(error))));
|
|
113
146
|
throw error;
|
|
114
147
|
}
|
|
115
148
|
if (failed.length) {
|
|
116
|
-
throw ( new Error(( localize(
|
|
149
|
+
throw ( new Error(( localize(1853, "Failed Installing Extensions: {0}", failed.join(", ")))));
|
|
117
150
|
}
|
|
118
151
|
}
|
|
119
152
|
async updateExtensions(profileLocation) {
|
|
@@ -121,48 +154,57 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
121
154
|
const installedExtensionsQuery = [];
|
|
122
155
|
for (const extension of installedExtensions) {
|
|
123
156
|
if (!!extension.identifier.uuid) {
|
|
124
|
-
installedExtensionsQuery.push({
|
|
157
|
+
installedExtensionsQuery.push({
|
|
158
|
+
...extension.identifier,
|
|
159
|
+
preRelease: extension.preRelease
|
|
160
|
+
});
|
|
125
161
|
}
|
|
126
162
|
}
|
|
127
163
|
this.logger.trace(( localize(
|
|
128
|
-
|
|
164
|
+
1854,
|
|
129
165
|
"Fetching latest versions for {0} extensions",
|
|
130
166
|
installedExtensionsQuery.length
|
|
131
167
|
)));
|
|
132
|
-
const availableVersions = await this.extensionGalleryService.getExtensions(installedExtensionsQuery, {
|
|
168
|
+
const availableVersions = await this.extensionGalleryService.getExtensions(installedExtensionsQuery, {
|
|
169
|
+
compatible: true
|
|
170
|
+
}, CancellationToken.None);
|
|
133
171
|
const extensionsToUpdate = [];
|
|
134
172
|
for (const newVersion of availableVersions) {
|
|
135
173
|
for (const oldVersion of installedExtensions) {
|
|
136
174
|
if (areSameExtensions(oldVersion.identifier, newVersion.identifier) && semverExports.gt(newVersion.version, oldVersion.manifest.version)) {
|
|
137
175
|
extensionsToUpdate.push({
|
|
138
176
|
extension: newVersion,
|
|
139
|
-
options: {
|
|
177
|
+
options: {
|
|
178
|
+
operation: InstallOperation.Update,
|
|
179
|
+
installPreReleaseVersion: oldVersion.preRelease,
|
|
180
|
+
profileLocation,
|
|
181
|
+
isApplicationScoped: oldVersion.isApplicationScoped
|
|
182
|
+
}
|
|
140
183
|
});
|
|
141
184
|
}
|
|
142
185
|
}
|
|
143
186
|
}
|
|
144
187
|
if (!extensionsToUpdate.length) {
|
|
145
|
-
this.logger.info(( localize(
|
|
188
|
+
this.logger.info(( localize(1855, "No extension to update")));
|
|
146
189
|
return;
|
|
147
190
|
}
|
|
148
191
|
this.logger.info(( localize(
|
|
149
|
-
|
|
192
|
+
1856,
|
|
150
193
|
"Updating extensions: {0}",
|
|
151
|
-
( extensionsToUpdate.map(ext => ext.extension.identifier.id)).join(
|
|
194
|
+
( extensionsToUpdate.map(ext => ext.extension.identifier.id)).join(", ")
|
|
152
195
|
)));
|
|
153
196
|
const installationResult = await this.extensionManagementService.installGalleryExtensions(extensionsToUpdate);
|
|
154
197
|
for (const extensionResult of installationResult) {
|
|
155
198
|
if (extensionResult.error) {
|
|
156
199
|
this.logger.error(( localize(
|
|
157
|
-
|
|
200
|
+
1857,
|
|
158
201
|
"Error while updating extension {0}: {1}",
|
|
159
202
|
extensionResult.identifier.id,
|
|
160
203
|
getErrorMessage(extensionResult.error)
|
|
161
204
|
)));
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
205
|
+
} else {
|
|
164
206
|
this.logger.info(( localize(
|
|
165
|
-
|
|
207
|
+
1858,
|
|
166
208
|
"Extension '{0}' v{1} was successfully updated.",
|
|
167
209
|
extensionResult.identifier.id,
|
|
168
210
|
extensionResult.local?.manifest.version
|
|
@@ -172,12 +214,18 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
172
214
|
}
|
|
173
215
|
async installGalleryExtensions(installExtensionInfos, installed, force) {
|
|
174
216
|
installExtensionInfos = installExtensionInfos.filter(installExtensionInfo => {
|
|
175
|
-
const {
|
|
176
|
-
|
|
217
|
+
const {
|
|
218
|
+
id,
|
|
219
|
+
version,
|
|
220
|
+
installOptions
|
|
221
|
+
} = installExtensionInfo;
|
|
222
|
+
const installedExtension = installed.find(i => areSameExtensions(i.identifier, {
|
|
223
|
+
id
|
|
224
|
+
}));
|
|
177
225
|
if (installedExtension) {
|
|
178
|
-
if (!force && (!version || (version ===
|
|
226
|
+
if (!force && (!version || (version === "prerelease" && installedExtension.preRelease))) {
|
|
179
227
|
this.logger.info(( localize(
|
|
180
|
-
|
|
228
|
+
1859,
|
|
181
229
|
"Extension '{0}' v{1} is already installed. Use '--force' option to update to latest version or provide '@<version>' to install a specific version, for example: '{2}@1.2.3'.",
|
|
182
230
|
id,
|
|
183
231
|
installedExtension.manifest.version,
|
|
@@ -186,10 +234,10 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
186
234
|
return false;
|
|
187
235
|
}
|
|
188
236
|
if (version && installedExtension.manifest.version === version) {
|
|
189
|
-
this.logger.info(( localize(
|
|
237
|
+
this.logger.info(( localize(1860, "Extension '{0}' is already installed.", `${id}@${version}`)));
|
|
190
238
|
return false;
|
|
191
239
|
}
|
|
192
|
-
if (installedExtension.preRelease && version !==
|
|
240
|
+
if (installedExtension.preRelease && version !== "prerelease") {
|
|
193
241
|
installOptions.preRelease = false;
|
|
194
242
|
}
|
|
195
243
|
}
|
|
@@ -201,7 +249,13 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
201
249
|
const failed = [];
|
|
202
250
|
const extensionsToInstall = [];
|
|
203
251
|
const galleryExtensions = await this.getGalleryExtensions(installExtensionInfos);
|
|
204
|
-
await Promise.all(( installExtensionInfos.map(async (
|
|
252
|
+
await Promise.all(( installExtensionInfos.map(async (
|
|
253
|
+
{
|
|
254
|
+
id,
|
|
255
|
+
version,
|
|
256
|
+
installOptions
|
|
257
|
+
}
|
|
258
|
+
) => {
|
|
205
259
|
const gallery = galleryExtensions.get(id.toLowerCase());
|
|
206
260
|
if (!gallery) {
|
|
207
261
|
this.logger.error(`${notFound(version ? `${id}@${version}` : id)}\n${useId}`);
|
|
@@ -213,8 +267,7 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
213
267
|
if (manifest && !this.validateExtensionKind(manifest)) {
|
|
214
268
|
return;
|
|
215
269
|
}
|
|
216
|
-
}
|
|
217
|
-
catch (err) {
|
|
270
|
+
} catch (err) {
|
|
218
271
|
this.logger.error(err.message || err.stack || err);
|
|
219
272
|
failed.push(id);
|
|
220
273
|
return;
|
|
@@ -223,28 +276,31 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
223
276
|
if (installedExtension) {
|
|
224
277
|
if (gallery.version === installedExtension.manifest.version) {
|
|
225
278
|
this.logger.info(( localize(
|
|
226
|
-
|
|
279
|
+
1860,
|
|
227
280
|
"Extension '{0}' is already installed.",
|
|
228
281
|
version ? `${id}@${version}` : id
|
|
229
282
|
)));
|
|
230
283
|
return;
|
|
231
284
|
}
|
|
232
285
|
this.logger.info(( localize(
|
|
233
|
-
|
|
286
|
+
1861,
|
|
234
287
|
"Updating the extension '{0}' to the version {1}",
|
|
235
288
|
id,
|
|
236
289
|
gallery.version
|
|
237
290
|
)));
|
|
238
291
|
}
|
|
239
292
|
if (installOptions.isBuiltin) {
|
|
240
|
-
this.logger.info(version ? ( localize(
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
this.logger.info(version ? ( localize(1865, "Installing extension '{0}' v{1}...", id, version)) : ( localize(1866, "Installing extension '{0}'...", id)));
|
|
293
|
+
this.logger.info(version ? ( localize(1862, "Installing builtin extension '{0}' v{1}...", id, version)) : ( localize(1863, "Installing builtin extension '{0}'...", id)));
|
|
294
|
+
} else {
|
|
295
|
+
this.logger.info(version ? ( localize(1864, "Installing extension '{0}' v{1}...", id, version)) : ( localize(1865, "Installing extension '{0}'...", id)));
|
|
244
296
|
}
|
|
245
297
|
extensionsToInstall.push({
|
|
246
298
|
extension: gallery,
|
|
247
|
-
options: {
|
|
299
|
+
options: {
|
|
300
|
+
...installOptions,
|
|
301
|
+
installGivenVersion: !!version,
|
|
302
|
+
isApplicationScoped: installOptions.isApplicationScoped || installedExtension?.isApplicationScoped
|
|
303
|
+
}
|
|
248
304
|
});
|
|
249
305
|
})));
|
|
250
306
|
if (extensionsToInstall.length) {
|
|
@@ -252,16 +308,15 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
252
308
|
for (const extensionResult of installationResult) {
|
|
253
309
|
if (extensionResult.error) {
|
|
254
310
|
this.logger.error(( localize(
|
|
255
|
-
|
|
311
|
+
1866,
|
|
256
312
|
"Error while installing extension {0}: {1}",
|
|
257
313
|
extensionResult.identifier.id,
|
|
258
314
|
getErrorMessage(extensionResult.error)
|
|
259
315
|
)));
|
|
260
316
|
failed.push(extensionResult.identifier.id);
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
317
|
+
} else {
|
|
263
318
|
this.logger.info(( localize(
|
|
264
|
-
|
|
319
|
+
1867,
|
|
265
320
|
"Extension '{0}' v{1} was successfully installed.",
|
|
266
321
|
extensionResult.identifier.id,
|
|
267
322
|
extensionResult.local?.manifest.version
|
|
@@ -274,19 +329,20 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
274
329
|
async installVSIX(vsix, installOptions, force, installedExtensions) {
|
|
275
330
|
const manifest = await this.extensionManagementService.getManifest(vsix);
|
|
276
331
|
if (!manifest) {
|
|
277
|
-
throw ( new Error(
|
|
332
|
+
throw ( new Error("Invalid vsix"));
|
|
278
333
|
}
|
|
279
334
|
const valid = await this.validateVSIX(manifest, force, installOptions.profileLocation, installedExtensions);
|
|
280
335
|
if (valid) {
|
|
281
336
|
try {
|
|
282
|
-
await this.extensionManagementService.install(vsix, {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
337
|
+
await this.extensionManagementService.install(vsix, {
|
|
338
|
+
...installOptions,
|
|
339
|
+
installGivenVersion: true
|
|
340
|
+
});
|
|
341
|
+
this.logger.info(( localize(1868, "Extension '{0}' was successfully installed.", basename(vsix))));
|
|
342
|
+
} catch (error) {
|
|
286
343
|
if (isCancellationError(error)) {
|
|
287
|
-
this.logger.info(( localize(
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
344
|
+
this.logger.info(( localize(1869, "Cancelled installing extension '{0}'.", basename(vsix))));
|
|
345
|
+
} else {
|
|
290
346
|
throw error;
|
|
291
347
|
}
|
|
292
348
|
}
|
|
@@ -299,11 +355,16 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
299
355
|
const extensionInfos = [];
|
|
300
356
|
for (const extension of extensions) {
|
|
301
357
|
if (EXTENSION_IDENTIFIER_REGEX.test(extension.id)) {
|
|
302
|
-
extensionInfos.push({
|
|
358
|
+
extensionInfos.push({
|
|
359
|
+
...extension,
|
|
360
|
+
preRelease
|
|
361
|
+
});
|
|
303
362
|
}
|
|
304
363
|
}
|
|
305
364
|
if (extensionInfos.length) {
|
|
306
|
-
const result = await this.extensionGalleryService.getExtensions(extensionInfos, {
|
|
365
|
+
const result = await this.extensionGalleryService.getExtensions(extensionInfos, {
|
|
366
|
+
targetPlatform
|
|
367
|
+
}, CancellationToken.None);
|
|
307
368
|
for (const extension of result) {
|
|
308
369
|
galleryExtensions.set(extension.identifier.id.toLowerCase(), extension);
|
|
309
370
|
}
|
|
@@ -315,11 +376,15 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
315
376
|
}
|
|
316
377
|
async validateVSIX(manifest, force, profileLocation, installedExtensions) {
|
|
317
378
|
if (!force) {
|
|
318
|
-
const extensionIdentifier = {
|
|
319
|
-
|
|
379
|
+
const extensionIdentifier = {
|
|
380
|
+
id: getGalleryExtensionId(manifest.publisher, manifest.name)
|
|
381
|
+
};
|
|
382
|
+
const newer = installedExtensions.find(
|
|
383
|
+
local => areSameExtensions(extensionIdentifier, local.identifier) && semverExports.gt(local.manifest.version, manifest.version)
|
|
384
|
+
);
|
|
320
385
|
if (newer) {
|
|
321
386
|
this.logger.info(( localize(
|
|
322
|
-
|
|
387
|
+
1870,
|
|
323
388
|
"A newer version of extension '{0}' v{1} is already installed. Use '--force' option to downgrade to older version.",
|
|
324
389
|
newer.identifier.id,
|
|
325
390
|
newer.manifest.version,
|
|
@@ -331,7 +396,7 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
331
396
|
return this.validateExtensionKind(manifest);
|
|
332
397
|
}
|
|
333
398
|
async uninstallExtensions(extensions, force, profileLocation) {
|
|
334
|
-
const getId = async
|
|
399
|
+
const getId = async extensionDescription => {
|
|
335
400
|
if (extensionDescription instanceof URI) {
|
|
336
401
|
const manifest = await this.extensionManagementService.getManifest(extensionDescription);
|
|
337
402
|
return getExtensionId(manifest.publisher, manifest.name);
|
|
@@ -341,13 +406,15 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
341
406
|
for (const extension of extensions) {
|
|
342
407
|
const id = await getId(extension);
|
|
343
408
|
const installed = await this.extensionManagementService.getInstalled(undefined, profileLocation);
|
|
344
|
-
const extensionsToUninstall = installed.filter(e => areSameExtensions(e.identifier, {
|
|
409
|
+
const extensionsToUninstall = installed.filter(e => areSameExtensions(e.identifier, {
|
|
410
|
+
id
|
|
411
|
+
}));
|
|
345
412
|
if (!extensionsToUninstall.length) {
|
|
346
413
|
throw ( new Error(`${this.notInstalled(id)}\n${useId}`));
|
|
347
414
|
}
|
|
348
415
|
if (( extensionsToUninstall.some(e => e.type === ExtensionType.System))) {
|
|
349
416
|
this.logger.info(( localize(
|
|
350
|
-
|
|
417
|
+
1871,
|
|
351
418
|
"Extension '{0}' is a Built-in extension and cannot be uninstalled",
|
|
352
419
|
id
|
|
353
420
|
)));
|
|
@@ -355,26 +422,27 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
355
422
|
}
|
|
356
423
|
if (!force && ( extensionsToUninstall.some(e => e.isBuiltin))) {
|
|
357
424
|
this.logger.info(( localize(
|
|
358
|
-
|
|
425
|
+
1872,
|
|
359
426
|
"Extension '{0}' is marked as a Built-in extension by user. Please use '--force' option to uninstall it.",
|
|
360
427
|
id
|
|
361
428
|
)));
|
|
362
429
|
return;
|
|
363
430
|
}
|
|
364
|
-
this.logger.info(( localize(
|
|
431
|
+
this.logger.info(( localize(1873, "Uninstalling {0}...", id)));
|
|
365
432
|
for (const extensionToUninstall of extensionsToUninstall) {
|
|
366
|
-
await this.extensionManagementService.uninstall(extensionToUninstall, {
|
|
433
|
+
await this.extensionManagementService.uninstall(extensionToUninstall, {
|
|
434
|
+
profileLocation
|
|
435
|
+
});
|
|
367
436
|
}
|
|
368
437
|
if (this.location) {
|
|
369
438
|
this.logger.info(( localize(
|
|
370
|
-
|
|
439
|
+
1874,
|
|
371
440
|
"Extension '{0}' was successfully uninstalled from {1}!",
|
|
372
441
|
id,
|
|
373
442
|
this.location
|
|
374
443
|
)));
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
this.logger.info(( localize(1876, "Extension '{0}' was successfully uninstalled!", id)));
|
|
444
|
+
} else {
|
|
445
|
+
this.logger.info(( localize(1875, "Extension '{0}' was successfully uninstalled!", id)));
|
|
378
446
|
}
|
|
379
447
|
}
|
|
380
448
|
}
|
|
@@ -392,12 +460,9 @@ let ExtensionManagementCLI = class ExtensionManagementCLI {
|
|
|
392
460
|
});
|
|
393
461
|
}
|
|
394
462
|
notInstalled(id) {
|
|
395
|
-
return this.location ? ( localize(
|
|
463
|
+
return this.location ? ( localize(1876, "Extension '{0}' is not installed on {1}.", id, this.location)) : ( localize(1877, "Extension '{0}' is not installed.", id));
|
|
396
464
|
}
|
|
397
465
|
};
|
|
398
|
-
ExtensionManagementCLI = ( __decorate([
|
|
399
|
-
( __param(1, IExtensionManagementService)),
|
|
400
|
-
( __param(2, IExtensionGalleryService))
|
|
401
|
-
], ExtensionManagementCLI));
|
|
466
|
+
ExtensionManagementCLI = ( __decorate([( __param(2, IExtensionManagementService)), ( __param(3, IExtensionGalleryService)), ( __param(4, IProductService))], ExtensionManagementCLI));
|
|
402
467
|
|
|
403
468
|
export { ExtensionManagementCLI };
|