@theia/vsx-registry 1.45.1 → 1.46.0-next.137
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/lib/browser/recommended-extensions/preference-provider-overrides.js +4 -9
- package/lib/browser/recommended-extensions/preference-provider-overrides.js.map +1 -1
- package/lib/browser/recommended-extensions/recommended-extensions-json-schema.js +10 -18
- package/lib/browser/recommended-extensions/recommended-extensions-json-schema.js.map +1 -1
- package/lib/browser/vsx-extension-argument-processor.d.ts +5 -0
- package/lib/browser/vsx-extension-argument-processor.d.ts.map +1 -0
- package/lib/browser/vsx-extension-argument-processor.js +34 -0
- package/lib/browser/vsx-extension-argument-processor.js.map +1 -0
- package/lib/browser/vsx-extension-commands.d.ts +1 -0
- package/lib/browser/vsx-extension-commands.d.ts.map +1 -1
- package/lib/browser/vsx-extension-commands.js +5 -0
- package/lib/browser/vsx-extension-commands.js.map +1 -1
- package/lib/browser/vsx-extension-editor-manager.js +3 -8
- package/lib/browser/vsx-extension-editor-manager.js.map +1 -1
- package/lib/browser/vsx-extension-editor.js +10 -18
- package/lib/browser/vsx-extension-editor.js.map +1 -1
- package/lib/browser/vsx-extension.d.ts +4 -0
- package/lib/browser/vsx-extension.d.ts.map +1 -1
- package/lib/browser/vsx-extension.js +64 -47
- package/lib/browser/vsx-extension.js.map +1 -1
- package/lib/browser/vsx-extensions-contribution.d.ts +18 -8
- package/lib/browser/vsx-extensions-contribution.d.ts.map +1 -1
- package/lib/browser/vsx-extensions-contribution.js +90 -64
- package/lib/browser/vsx-extensions-contribution.js.map +1 -1
- package/lib/browser/vsx-extensions-model.d.ts +4 -1
- package/lib/browser/vsx-extensions-model.d.ts.map +1 -1
- package/lib/browser/vsx-extensions-model.js +83 -45
- package/lib/browser/vsx-extensions-model.js.map +1 -1
- package/lib/browser/vsx-extensions-preferences.d.ts +12 -0
- package/lib/browser/vsx-extensions-preferences.d.ts.map +1 -0
- package/lib/browser/vsx-extensions-preferences.js +47 -0
- package/lib/browser/vsx-extensions-preferences.js.map +1 -0
- package/lib/browser/vsx-extensions-search-bar.d.ts +10 -2
- package/lib/browser/vsx-extensions-search-bar.d.ts.map +1 -1
- package/lib/browser/vsx-extensions-search-bar.js +43 -20
- package/lib/browser/vsx-extensions-search-bar.js.map +1 -1
- package/lib/browser/vsx-extensions-search-model.js +2 -7
- package/lib/browser/vsx-extensions-search-model.js.map +1 -1
- package/lib/browser/vsx-extensions-source.js +11 -19
- package/lib/browser/vsx-extensions-source.js.map +1 -1
- package/lib/browser/vsx-extensions-view-container.js +10 -18
- package/lib/browser/vsx-extensions-view-container.js.map +1 -1
- package/lib/browser/vsx-extensions-widget.d.ts +2 -1
- package/lib/browser/vsx-extensions-widget.d.ts.map +1 -1
- package/lib/browser/vsx-extensions-widget.js +19 -19
- package/lib/browser/vsx-extensions-widget.js.map +1 -1
- package/lib/browser/vsx-language-quick-pick-service.js +11 -19
- package/lib/browser/vsx-language-quick-pick-service.js.map +1 -1
- package/lib/browser/vsx-registry-frontend-module.d.ts.map +1 -1
- package/lib/browser/vsx-registry-frontend-module.js +6 -0
- package/lib/browser/vsx-registry-frontend-module.js.map +1 -1
- package/lib/node/vsx-cli-deployer-participant.d.ts +7 -0
- package/lib/node/vsx-cli-deployer-participant.d.ts.map +1 -0
- package/lib/node/vsx-cli-deployer-participant.js +52 -0
- package/lib/node/vsx-cli-deployer-participant.js.map +1 -0
- package/lib/node/vsx-cli.d.ts +1 -0
- package/lib/node/vsx-cli.d.ts.map +1 -1
- package/lib/node/vsx-cli.js +17 -7
- package/lib/node/vsx-cli.js.map +1 -1
- package/lib/node/vsx-environment-impl.js +6 -14
- package/lib/node/vsx-environment-impl.js.map +1 -1
- package/lib/node/vsx-extension-resolver.d.ts.map +1 -1
- package/lib/node/vsx-extension-resolver.js +22 -29
- package/lib/node/vsx-extension-resolver.js.map +1 -1
- package/lib/node/vsx-registry-backend-module.d.ts.map +1 -1
- package/lib/node/vsx-registry-backend-module.js +3 -0
- package/lib/node/vsx-registry-backend-module.js.map +1 -1
- package/package.json +12 -11
- package/src/browser/style/index.css +65 -2
- package/src/browser/vsx-extension-argument-processor.ts +32 -0
- package/src/browser/vsx-extension-commands.ts +5 -0
- package/src/browser/vsx-extension-editor-manager.ts +1 -1
- package/src/browser/vsx-extension.tsx +46 -11
- package/src/browser/vsx-extensions-contribution.ts +62 -24
- package/src/browser/vsx-extensions-model.ts +61 -14
- package/src/browser/vsx-extensions-preferences.ts +58 -0
- package/src/browser/vsx-extensions-search-bar.tsx +52 -14
- package/src/browser/vsx-extensions-widget.tsx +10 -1
- package/src/browser/vsx-language-quick-pick-service.ts +1 -1
- package/src/browser/vsx-registry-frontend-module.ts +7 -0
- package/src/node/vsx-cli-deployer-participant.ts +46 -0
- package/src/node/vsx-cli.ts +13 -0
- package/src/node/vsx-extension-resolver.ts +8 -7
- package/src/node/vsx-registry-backend-module.ts +4 -1
|
@@ -14,18 +14,10 @@
|
|
|
14
14
|
//
|
|
15
15
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
16
|
// *****************************************************************************
|
|
17
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
-
};
|
|
23
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
-
};
|
|
26
17
|
var VSXExtensionResolver_1;
|
|
27
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
19
|
exports.VSXExtensionResolver = void 0;
|
|
20
|
+
const tslib_1 = require("tslib");
|
|
29
21
|
const path = require("path");
|
|
30
22
|
const semver = require("semver");
|
|
31
23
|
const fs = require("@theia/core/shared/fs-extra");
|
|
@@ -50,14 +42,15 @@ let VSXExtensionResolver = VSXExtensionResolver_1 = class VSXExtensionResolver {
|
|
|
50
42
|
}
|
|
51
43
|
let extension;
|
|
52
44
|
const client = await this.clientProvider();
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
const version = (options === null || options === void 0 ? void 0 : options.version) || id.version;
|
|
46
|
+
if (version) {
|
|
47
|
+
console.log(`[${id}]: trying to resolve version ${version}...`);
|
|
48
|
+
const { extensions } = await client.query({ extensionId: id.id, extensionVersion: version, includeAllVersions: true });
|
|
56
49
|
extension = extensions[0];
|
|
57
50
|
}
|
|
58
51
|
else {
|
|
59
52
|
console.log(`[${id}]: trying to resolve latest version...`);
|
|
60
|
-
const { extensions } = await client.query({ extensionId: id, includeAllVersions: true });
|
|
53
|
+
const { extensions } = await client.query({ extensionId: id.id, includeAllVersions: true });
|
|
61
54
|
extension = this.vsxApiFilter.getLatestCompatibleExtension(extensions);
|
|
62
55
|
}
|
|
63
56
|
if (!extension) {
|
|
@@ -66,11 +59,11 @@ let VSXExtensionResolver = VSXExtensionResolver_1 = class VSXExtensionResolver {
|
|
|
66
59
|
if (extension.error) {
|
|
67
60
|
throw new Error(extension.error);
|
|
68
61
|
}
|
|
69
|
-
const resolvedId = id + '-' + extension.version;
|
|
62
|
+
const resolvedId = id.id + '-' + extension.version;
|
|
70
63
|
const downloadUrl = extension.files.download;
|
|
71
|
-
console.log(`[${id}]: resolved to '${resolvedId}'`);
|
|
64
|
+
console.log(`[${id.id}]: resolved to '${resolvedId}'`);
|
|
72
65
|
if (!(options === null || options === void 0 ? void 0 : options.ignoreOtherVersions)) {
|
|
73
|
-
const existingVersion = this.hasSameOrNewerVersion(id, extension);
|
|
66
|
+
const existingVersion = this.hasSameOrNewerVersion(id.id, extension);
|
|
74
67
|
if (existingVersion) {
|
|
75
68
|
console.log(`[${id}]: is already installed with the same or newer version '${existingVersion}'`);
|
|
76
69
|
return;
|
|
@@ -124,31 +117,31 @@ let VSXExtensionResolver = VSXExtensionResolver_1 = class VSXExtensionResolver {
|
|
|
124
117
|
}
|
|
125
118
|
};
|
|
126
119
|
VSXExtensionResolver.TEMP_DIR_PREFIX = 'vscode-download';
|
|
127
|
-
__decorate([
|
|
120
|
+
(0, tslib_1.__decorate)([
|
|
128
121
|
(0, inversify_1.inject)(ovsx_client_provider_1.OVSXClientProvider),
|
|
129
|
-
__metadata("design:type", Function)
|
|
122
|
+
(0, tslib_1.__metadata)("design:type", Function)
|
|
130
123
|
], VSXExtensionResolver.prototype, "clientProvider", void 0);
|
|
131
|
-
__decorate([
|
|
124
|
+
(0, tslib_1.__decorate)([
|
|
132
125
|
(0, inversify_1.inject)(plugin_protocol_1.PluginDeployerHandler),
|
|
133
|
-
__metadata("design:type", Object)
|
|
126
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
134
127
|
], VSXExtensionResolver.prototype, "pluginDeployerHandler", void 0);
|
|
135
|
-
__decorate([
|
|
128
|
+
(0, tslib_1.__decorate)([
|
|
136
129
|
(0, inversify_1.inject)(request_1.RequestService),
|
|
137
|
-
__metadata("design:type", Object)
|
|
130
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
138
131
|
], VSXExtensionResolver.prototype, "requestService", void 0);
|
|
139
|
-
__decorate([
|
|
132
|
+
(0, tslib_1.__decorate)([
|
|
140
133
|
(0, inversify_1.inject)(plugin_vscode_environment_1.PluginVSCodeEnvironment),
|
|
141
|
-
__metadata("design:type", plugin_vscode_environment_1.PluginVSCodeEnvironment)
|
|
134
|
+
(0, tslib_1.__metadata)("design:type", plugin_vscode_environment_1.PluginVSCodeEnvironment)
|
|
142
135
|
], VSXExtensionResolver.prototype, "environment", void 0);
|
|
143
|
-
__decorate([
|
|
136
|
+
(0, tslib_1.__decorate)([
|
|
144
137
|
(0, inversify_1.inject)(plugin_uninstallation_manager_1.PluginUninstallationManager),
|
|
145
|
-
__metadata("design:type", plugin_uninstallation_manager_1.PluginUninstallationManager)
|
|
138
|
+
(0, tslib_1.__metadata)("design:type", plugin_uninstallation_manager_1.PluginUninstallationManager)
|
|
146
139
|
], VSXExtensionResolver.prototype, "uninstallationManager", void 0);
|
|
147
|
-
__decorate([
|
|
140
|
+
(0, tslib_1.__decorate)([
|
|
148
141
|
(0, inversify_1.inject)(ovsx_client_1.OVSXApiFilter),
|
|
149
|
-
__metadata("design:type", Object)
|
|
142
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
150
143
|
], VSXExtensionResolver.prototype, "vsxApiFilter", void 0);
|
|
151
|
-
VSXExtensionResolver = VSXExtensionResolver_1 = __decorate([
|
|
144
|
+
VSXExtensionResolver = VSXExtensionResolver_1 = (0, tslib_1.__decorate)([
|
|
152
145
|
(0, inversify_1.injectable)()
|
|
153
146
|
], VSXExtensionResolver);
|
|
154
147
|
exports.VSXExtensionResolver = VSXExtensionResolver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsx-extension-resolver.js","sourceRoot":"","sources":["../../src/node/vsx-extension-resolver.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF
|
|
1
|
+
{"version":3,"file":"vsx-extension-resolver.js","sourceRoot":"","sources":["../../src/node/vsx-extension-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsx-registry-backend-module.d.ts","sourceRoot":"","sources":["../../src/node/vsx-registry-backend-module.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;
|
|
1
|
+
{"version":3,"file":"vsx-registry-backend-module.d.ts","sourceRoot":"","sources":["../../src/node/vsx-registry-backend-module.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAQ/D,wBAWG"}
|
|
@@ -23,6 +23,7 @@ const vsx_environment_1 = require("../common/vsx-environment");
|
|
|
23
23
|
const vsx_cli_1 = require("./vsx-cli");
|
|
24
24
|
const vsx_environment_impl_1 = require("./vsx-environment-impl");
|
|
25
25
|
const vsx_extension_resolver_1 = require("./vsx-extension-resolver");
|
|
26
|
+
const vsx_cli_deployer_participant_1 = require("./vsx-cli-deployer-participant");
|
|
26
27
|
exports.default = new inversify_1.ContainerModule(bind => {
|
|
27
28
|
bind(vsx_environment_1.VSXEnvironment).to(vsx_environment_impl_1.VSXEnvironmentImpl).inSingletonScope();
|
|
28
29
|
bind(vsx_cli_1.VsxCli).toSelf().inSingletonScope();
|
|
@@ -32,5 +33,7 @@ exports.default = new inversify_1.ContainerModule(bind => {
|
|
|
32
33
|
.inSingletonScope();
|
|
33
34
|
bind(vsx_extension_resolver_1.VSXExtensionResolver).toSelf().inSingletonScope();
|
|
34
35
|
bind(plugin_protocol_1.PluginDeployerResolver).toService(vsx_extension_resolver_1.VSXExtensionResolver);
|
|
36
|
+
bind(vsx_cli_deployer_participant_1.VsxCliDeployerParticipant).toSelf().inSingletonScope();
|
|
37
|
+
bind(plugin_protocol_1.PluginDeployerParticipant).toService(vsx_cli_deployer_participant_1.VsxCliDeployerParticipant);
|
|
35
38
|
});
|
|
36
39
|
//# sourceMappingURL=vsx-registry-backend-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsx-registry-backend-module.js","sourceRoot":"","sources":["../../src/node/vsx-registry-backend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,sCAA0E;AAC1E,+CAAuD;AACvD,4DAA+D;AAC/D,
|
|
1
|
+
{"version":3,"file":"vsx-registry-backend-module.js","sourceRoot":"","sources":["../../src/node/vsx-registry-backend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,sCAA0E;AAC1E,+CAAuD;AACvD,4DAA+D;AAC/D,kFAAiH;AACjH,+DAAiF;AACjF,uCAAmC;AACnC,iEAA4D;AAC5D,qEAAgE;AAChE,iFAA2E;AAE3E,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IACtC,IAAI,CAAC,gCAAc,CAAC,CAAC,EAAE,CAAC,yCAAkB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC/D,IAAI,CAAC,gBAAM,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACzC,IAAI,CAAC,sBAAe,CAAC,CAAC,SAAS,CAAC,gBAAM,CAAC,CAAC;IACxC,IAAI,CAAC,wBAAiB,CAAC;SAClB,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,+BAAwB,CAAC,sCAAoB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC,CAAC;SAClH,gBAAgB,EAAE,CAAC;IACxB,IAAI,CAAC,6CAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACvD,IAAI,CAAC,wCAAsB,CAAC,CAAC,SAAS,CAAC,6CAAoB,CAAC,CAAC;IAC7D,IAAI,CAAC,wDAAyB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC5D,IAAI,CAAC,2CAAyB,CAAC,CAAC,SAAS,CAAC,wDAAyB,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/vsx-registry",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.46.0-next.137+bce99c299",
|
|
4
4
|
"description": "Theia - VSX Registry",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.
|
|
7
|
-
"@theia/filesystem": "1.
|
|
8
|
-
"@theia/
|
|
9
|
-
"@theia/
|
|
10
|
-
"@theia/plugin-ext
|
|
11
|
-
"@theia/
|
|
12
|
-
"@theia/
|
|
6
|
+
"@theia/core": "1.46.0-next.137+bce99c299",
|
|
7
|
+
"@theia/filesystem": "1.46.0-next.137+bce99c299",
|
|
8
|
+
"@theia/navigator": "1.46.0-next.137+bce99c299",
|
|
9
|
+
"@theia/ovsx-client": "1.46.0-next.137+bce99c299",
|
|
10
|
+
"@theia/plugin-ext": "1.46.0-next.137+bce99c299",
|
|
11
|
+
"@theia/plugin-ext-vscode": "1.46.0-next.137+bce99c299",
|
|
12
|
+
"@theia/preferences": "1.46.0-next.137+bce99c299",
|
|
13
|
+
"@theia/workspace": "1.46.0-next.137+bce99c299",
|
|
13
14
|
"luxon": "^2.4.0",
|
|
14
15
|
"p-debounce": "^2.1.0",
|
|
15
16
|
"semver": "^7.5.4",
|
|
16
|
-
"
|
|
17
|
+
"tslib": "^2.6.2"
|
|
17
18
|
},
|
|
18
19
|
"publishConfig": {
|
|
19
20
|
"access": "public"
|
|
@@ -53,11 +54,11 @@
|
|
|
53
54
|
"watch": "theiaext watch"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
|
-
"@theia/ext-scripts": "1.
|
|
57
|
+
"@theia/ext-scripts": "1.48.0",
|
|
57
58
|
"@types/luxon": "^2.3.2"
|
|
58
59
|
},
|
|
59
60
|
"nyc": {
|
|
60
61
|
"extends": "../../configs/nyc.json"
|
|
61
62
|
},
|
|
62
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "bce99c299d7a01573330482ce26563eb6b00a6e9"
|
|
63
64
|
}
|
|
@@ -21,6 +21,56 @@
|
|
|
21
21
|
);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
.vsx-search-container {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
width: 100%;
|
|
28
|
+
background: var(--theia-input-background);
|
|
29
|
+
border-style: solid;
|
|
30
|
+
border-width: var(--theia-border-width);
|
|
31
|
+
border-color: var(--theia-input-background);
|
|
32
|
+
border-radius: 2px;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.vsx-search-container:focus-within {
|
|
36
|
+
border-color: var(--theia-focusBorder);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.vsx-search-container .option-buttons {
|
|
40
|
+
height: 23px;
|
|
41
|
+
display: flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
align-self: flex-start;
|
|
44
|
+
background-color: none;
|
|
45
|
+
margin: 2px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.vsx-search-container .option {
|
|
49
|
+
width: 21px;
|
|
50
|
+
height: 21px;
|
|
51
|
+
margin: 0 1px;
|
|
52
|
+
display: inline-block;
|
|
53
|
+
box-sizing: border-box;
|
|
54
|
+
align-items: center;
|
|
55
|
+
user-select: none;
|
|
56
|
+
background-repeat: no-repeat;
|
|
57
|
+
background-position: center;
|
|
58
|
+
border: var(--theia-border-width) solid transparent;
|
|
59
|
+
opacity: 0.7;
|
|
60
|
+
cursor: pointer;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.vsx-search-container .option.enabled {
|
|
64
|
+
color: var(--theia-inputOption-activeForeground);
|
|
65
|
+
border: var(--theia-border-width) var(--theia-inputOption-activeBorder) solid;
|
|
66
|
+
background-color: var(--theia-inputOption-activeBackground);
|
|
67
|
+
opacity: 1;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.vsx-search-container .option:hover {
|
|
71
|
+
opacity: 1;
|
|
72
|
+
}
|
|
73
|
+
|
|
24
74
|
.theia-vsx-extensions {
|
|
25
75
|
height: 100%;
|
|
26
76
|
}
|
|
@@ -42,10 +92,14 @@
|
|
|
42
92
|
overflow: hidden;
|
|
43
93
|
line-height: var(--theia-content-line-height);
|
|
44
94
|
flex: 1;
|
|
45
|
-
|
|
46
|
-
|
|
95
|
+
margin-top: calc(var(--theia-ui-padding) / 2);
|
|
96
|
+
margin-bottom: calc(var(--theia-ui-padding) / 2);
|
|
47
97
|
}
|
|
48
98
|
|
|
99
|
+
.theia-vsx-extensions-search-bar .theia-input:focus {
|
|
100
|
+
border: none;
|
|
101
|
+
outline: none;
|
|
102
|
+
}
|
|
49
103
|
.theia-vsx-extension {
|
|
50
104
|
display: flex;
|
|
51
105
|
flex-direction: row;
|
|
@@ -136,6 +190,15 @@
|
|
|
136
190
|
white-space: nowrap;
|
|
137
191
|
}
|
|
138
192
|
|
|
193
|
+
.theia-vsx-extension-action-bar .codicon-verified-filled {
|
|
194
|
+
color: var(--theia-extensionIcon-verifiedForeground);
|
|
195
|
+
margin-right: 2px;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.theia-vsx-extension-publisher-container {
|
|
199
|
+
display: flex;
|
|
200
|
+
}
|
|
201
|
+
|
|
139
202
|
.theia-vsx-extension-action-bar .action {
|
|
140
203
|
font-size: 90%;
|
|
141
204
|
min-width: auto !important;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2024 TypeFox and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { injectable } from '@theia/core/shared/inversify';
|
|
18
|
+
import { ArgumentProcessor } from '@theia/plugin-ext/lib/common/commands';
|
|
19
|
+
import { VSXExtension } from './vsx-extension';
|
|
20
|
+
|
|
21
|
+
@injectable()
|
|
22
|
+
export class VsxExtensionArgumentProcessor implements ArgumentProcessor {
|
|
23
|
+
|
|
24
|
+
processArgument(arg: unknown): unknown {
|
|
25
|
+
if (arg instanceof VSXExtension) {
|
|
26
|
+
return arg.id;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return arg;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
}
|
|
@@ -36,6 +36,11 @@ export namespace VSXExtensionsCommands {
|
|
|
36
36
|
label: nls.localizeByDefault('Install from VSIX') + '...',
|
|
37
37
|
dialogLabel: nls.localizeByDefault('Install from VSIX')
|
|
38
38
|
};
|
|
39
|
+
export const INSTALL_VSIX_FILE: Command = Command.toDefaultLocalizedCommand({
|
|
40
|
+
id: 'vsxExtensions.installVSIX',
|
|
41
|
+
label: 'Install Extension VSIX',
|
|
42
|
+
category: EXTENSIONS_CATEGORY,
|
|
43
|
+
});
|
|
39
44
|
export const INSTALL_ANOTHER_VERSION: Command = {
|
|
40
45
|
id: 'vsxExtensions.installAnotherVersion'
|
|
41
46
|
};
|
|
@@ -28,7 +28,7 @@ import { Endpoint } from '@theia/core/lib/browser/endpoint';
|
|
|
28
28
|
import { VSXEnvironment } from '../common/vsx-environment';
|
|
29
29
|
import { VSXExtensionsSearchModel } from './vsx-extensions-search-model';
|
|
30
30
|
import { CommandRegistry, MenuPath, nls } from '@theia/core/lib/common';
|
|
31
|
-
import { codicon, ContextMenuRenderer, HoverService, TreeWidget } from '@theia/core/lib/browser';
|
|
31
|
+
import { codicon, ConfirmDialog, ContextMenuRenderer, HoverService, TreeWidget } from '@theia/core/lib/browser';
|
|
32
32
|
import { VSXExtensionNamespaceAccess, VSXUser } from '@theia/ovsx-client/lib/ovsx-types';
|
|
33
33
|
import { WindowService } from '@theia/core/lib/browser/window/window-service';
|
|
34
34
|
import { MarkdownStringImpl } from '@theia/core/lib/common/markdown-rendering';
|
|
@@ -38,6 +38,7 @@ export const EXTENSIONS_CONTEXT_MENU: MenuPath = ['extensions_context_menu'];
|
|
|
38
38
|
export namespace VSXExtensionsContextMenu {
|
|
39
39
|
export const INSTALL = [...EXTENSIONS_CONTEXT_MENU, '1_install'];
|
|
40
40
|
export const COPY = [...EXTENSIONS_CONTEXT_MENU, '2_copy'];
|
|
41
|
+
export const CONTRIBUTION = [...EXTENSIONS_CONTEXT_MENU, '3_contribution'];
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
@injectable()
|
|
@@ -57,6 +58,7 @@ export class VSXExtensionData {
|
|
|
57
58
|
readonly license?: string;
|
|
58
59
|
readonly readme?: string;
|
|
59
60
|
readonly preview?: boolean;
|
|
61
|
+
readonly verified?: boolean;
|
|
60
62
|
readonly namespaceAccess?: VSXExtensionNamespaceAccess;
|
|
61
63
|
readonly publishedBy?: VSXUser;
|
|
62
64
|
static KEYS: Set<(keyof VSXExtensionData)> = new Set([
|
|
@@ -75,6 +77,7 @@ export class VSXExtensionData {
|
|
|
75
77
|
'license',
|
|
76
78
|
'readme',
|
|
77
79
|
'preview',
|
|
80
|
+
'verified',
|
|
78
81
|
'namespaceAccess',
|
|
79
82
|
'publishedBy'
|
|
80
83
|
]);
|
|
@@ -143,7 +146,7 @@ export class VSXExtension implements VSXExtensionData, TreeElement {
|
|
|
143
146
|
}
|
|
144
147
|
|
|
145
148
|
get uri(): URI {
|
|
146
|
-
return VSCodeExtensionUri.
|
|
149
|
+
return VSCodeExtensionUri.fromId(this.id);
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
get id(): string {
|
|
@@ -265,6 +268,10 @@ export class VSXExtension implements VSXExtensionData, TreeElement {
|
|
|
265
268
|
return this.getData('preview');
|
|
266
269
|
}
|
|
267
270
|
|
|
271
|
+
get verified(): boolean | undefined {
|
|
272
|
+
return this.getData('verified');
|
|
273
|
+
}
|
|
274
|
+
|
|
268
275
|
get namespaceAccess(): VSXExtensionNamespaceAccess | undefined {
|
|
269
276
|
return this.getData('namespaceAccess');
|
|
270
277
|
}
|
|
@@ -297,13 +304,16 @@ export class VSXExtension implements VSXExtensionData, TreeElement {
|
|
|
297
304
|
}
|
|
298
305
|
|
|
299
306
|
async install(options?: PluginDeployOptions): Promise<void> {
|
|
300
|
-
this.
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
);
|
|
305
|
-
|
|
306
|
-
|
|
307
|
+
if (!this.verified) {
|
|
308
|
+
const choice = await new ConfirmDialog({
|
|
309
|
+
title: nls.localize('theia/vsx-registry/confirmDialogTitle', 'Are you sure you want to proceed with the installation ?'),
|
|
310
|
+
msg: nls.localize('theia/vsx-registry/confirmDialogMessage', 'The extension "{0}" is unverified and might pose a security risk.', this.displayName)
|
|
311
|
+
}).open();
|
|
312
|
+
if (choice) {
|
|
313
|
+
this.doInstall(options);
|
|
314
|
+
}
|
|
315
|
+
} else {
|
|
316
|
+
this.doInstall(options);
|
|
307
317
|
}
|
|
308
318
|
}
|
|
309
319
|
|
|
@@ -322,6 +332,17 @@ export class VSXExtension implements VSXExtensionData, TreeElement {
|
|
|
322
332
|
}
|
|
323
333
|
}
|
|
324
334
|
|
|
335
|
+
protected async doInstall(options?: PluginDeployOptions): Promise<void> {
|
|
336
|
+
this._busy++;
|
|
337
|
+
try {
|
|
338
|
+
await this.progressService.withProgress(nls.localizeByDefault("Installing extension '{0}' v{1}...", this.id, this.version ?? 0), 'extensions', () =>
|
|
339
|
+
this.pluginServer.deploy(this.uri.toString(), undefined, options)
|
|
340
|
+
);
|
|
341
|
+
} finally {
|
|
342
|
+
this._busy--;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
325
346
|
handleContextMenu(e: React.MouseEvent<HTMLElement, MouseEvent>): void {
|
|
326
347
|
e.preventDefault();
|
|
327
348
|
this.contextMenuRenderer.render({
|
|
@@ -464,7 +485,7 @@ export namespace VSXExtensionComponent {
|
|
|
464
485
|
|
|
465
486
|
export class VSXExtensionComponent<Props extends VSXExtensionComponent.Props = VSXExtensionComponent.Props> extends AbstractVSXExtensionComponent<Props> {
|
|
466
487
|
override render(): React.ReactNode {
|
|
467
|
-
const { iconUrl, publisher, displayName, description, version, downloadCount, averageRating, tooltip } = this.props.extension;
|
|
488
|
+
const { iconUrl, publisher, displayName, description, version, downloadCount, averageRating, tooltip, verified } = this.props.extension;
|
|
468
489
|
|
|
469
490
|
return <div
|
|
470
491
|
className='theia-vsx-extension noselect'
|
|
@@ -475,6 +496,11 @@ export class VSXExtensionComponent<Props extends VSXExtensionComponent.Props = V
|
|
|
475
496
|
position: 'right'
|
|
476
497
|
});
|
|
477
498
|
}}
|
|
499
|
+
onMouseUp={event => {
|
|
500
|
+
if (event.button === 2) {
|
|
501
|
+
this.manage(event);
|
|
502
|
+
}
|
|
503
|
+
}}
|
|
478
504
|
>
|
|
479
505
|
{iconUrl ?
|
|
480
506
|
<img className='theia-vsx-extension-icon' src={iconUrl} /> :
|
|
@@ -491,7 +517,16 @@ export class VSXExtensionComponent<Props extends VSXExtensionComponent.Props = V
|
|
|
491
517
|
</div>
|
|
492
518
|
<div className='noWrapInfo theia-vsx-extension-description'>{description}</div>
|
|
493
519
|
<div className='theia-vsx-extension-action-bar'>
|
|
494
|
-
<
|
|
520
|
+
<div className='theia-vsx-extension-publisher-container'>
|
|
521
|
+
{verified === true ? (
|
|
522
|
+
<i className={codicon('verified-filled')} />
|
|
523
|
+
) : verified === false ? (
|
|
524
|
+
<i className={codicon('verified')} />
|
|
525
|
+
) : (
|
|
526
|
+
<i className={codicon('question')} />
|
|
527
|
+
)}
|
|
528
|
+
<span className='noWrapInfo theia-vsx-extension-publisher'>{publisher}</span>
|
|
529
|
+
</div>
|
|
495
530
|
{this.renderAction(this.props.host)}
|
|
496
531
|
</div>
|
|
497
532
|
</div>
|
|
@@ -14,29 +14,32 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import debounce = require('@theia/core/shared/lodash.debounce');
|
|
20
|
-
import { Command, CommandRegistry } from '@theia/core/lib/common/command';
|
|
21
|
-
import { AbstractViewContribution } from '@theia/core/lib/browser/shell/view-contribution';
|
|
22
|
-
import { VSXExtensionsViewContainer } from './vsx-extensions-view-container';
|
|
23
|
-
import { VSXExtensionsModel } from './vsx-extensions-model';
|
|
17
|
+
import { CommonMenus, LabelProvider, PreferenceService, QuickInputService, QuickPickItem } from '@theia/core/lib/browser';
|
|
18
|
+
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
|
|
24
19
|
import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution';
|
|
25
20
|
import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
|
|
26
|
-
import { Color } from '@theia/core/lib/common/color';
|
|
27
21
|
import { FrontendApplication } from '@theia/core/lib/browser/frontend-application';
|
|
28
22
|
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
|
|
29
|
-
import {
|
|
23
|
+
import { AbstractViewContribution } from '@theia/core/lib/browser/shell/view-contribution';
|
|
24
|
+
import { CompoundMenuNodeRole, MenuModelRegistry, MessageService, SelectionService, nls } from '@theia/core/lib/common';
|
|
25
|
+
import { Color } from '@theia/core/lib/common/color';
|
|
26
|
+
import { Command, CommandRegistry } from '@theia/core/lib/common/command';
|
|
27
|
+
import URI from '@theia/core/lib/common/uri';
|
|
28
|
+
import { UriAwareCommandHandler } from '@theia/core/lib/common/uri-command-handler';
|
|
29
|
+
import { inject, injectable, postConstruct } from '@theia/core/shared/inversify';
|
|
30
30
|
import { FileDialogService, OpenFileDialogProps } from '@theia/filesystem/lib/browser';
|
|
31
|
-
import {
|
|
31
|
+
import { NAVIGATOR_CONTEXT_MENU } from '@theia/navigator/lib/browser/navigator-contribution';
|
|
32
|
+
import { OVSXApiFilter, VSXExtensionRaw } from '@theia/ovsx-client';
|
|
32
33
|
import { VscodeCommands } from '@theia/plugin-ext-vscode/lib/browser/plugin-vscode-commands-contribution';
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import { BUILTIN_QUERY, INSTALLED_QUERY, RECOMMENDED_QUERY } from './vsx-extensions-search-model';
|
|
34
|
+
import { DateTime } from 'luxon';
|
|
35
|
+
import { OVSXClientProvider } from '../common/ovsx-client-provider';
|
|
36
36
|
import { IGNORE_RECOMMENDATIONS_ID } from './recommended-extensions/recommended-extensions-preference-contribution';
|
|
37
|
+
import { VSXExtension, VSXExtensionsContextMenu } from './vsx-extension';
|
|
37
38
|
import { VSXExtensionsCommands } from './vsx-extension-commands';
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
39
|
+
import { VSXExtensionsModel } from './vsx-extensions-model';
|
|
40
|
+
import { BUILTIN_QUERY, INSTALLED_QUERY, RECOMMENDED_QUERY } from './vsx-extensions-search-model';
|
|
41
|
+
import { VSXExtensionsViewContainer } from './vsx-extensions-view-container';
|
|
42
|
+
import debounce = require('@theia/core/shared/lodash.debounce');
|
|
40
43
|
|
|
41
44
|
export namespace VSXCommands {
|
|
42
45
|
export const TOGGLE_EXTENSIONS: Command = {
|
|
@@ -57,6 +60,7 @@ export class VSXExtensionsContribution extends AbstractViewContribution<VSXExten
|
|
|
57
60
|
@inject(OVSXClientProvider) protected clientProvider: OVSXClientProvider;
|
|
58
61
|
@inject(OVSXApiFilter) protected vsxApiFilter: OVSXApiFilter;
|
|
59
62
|
@inject(QuickInputService) protected quickInput: QuickInputService;
|
|
63
|
+
@inject(SelectionService) protected readonly selectionService: SelectionService;
|
|
60
64
|
|
|
61
65
|
constructor() {
|
|
62
66
|
super({
|
|
@@ -95,6 +99,13 @@ export class VSXExtensionsContribution extends AbstractViewContribution<VSXExten
|
|
|
95
99
|
execute: () => this.installFromVSIX()
|
|
96
100
|
});
|
|
97
101
|
|
|
102
|
+
commands.registerCommand(VSXExtensionsCommands.INSTALL_VSIX_FILE,
|
|
103
|
+
UriAwareCommandHandler.MonoSelect(this.selectionService, {
|
|
104
|
+
execute: fileURI => this.installVsixFile(fileURI),
|
|
105
|
+
isEnabled: fileURI => fileURI.scheme === 'file' && fileURI.path.ext === '.vsix'
|
|
106
|
+
})
|
|
107
|
+
);
|
|
108
|
+
|
|
98
109
|
commands.registerCommand(VSXExtensionsCommands.INSTALL_ANOTHER_VERSION, {
|
|
99
110
|
// Check downloadUrl to ensure we have an idea of where to look for other versions.
|
|
100
111
|
isEnabled: (extension: VSXExtension) => !extension.builtin && !!extension.downloadUrl,
|
|
@@ -143,6 +154,15 @@ export class VSXExtensionsContribution extends AbstractViewContribution<VSXExten
|
|
|
143
154
|
commandId: VSXExtensionsCommands.INSTALL_ANOTHER_VERSION.id,
|
|
144
155
|
label: nls.localizeByDefault('Install Another Version...'),
|
|
145
156
|
});
|
|
157
|
+
menus.registerMenuAction(NAVIGATOR_CONTEXT_MENU, {
|
|
158
|
+
commandId: VSXExtensionsCommands.INSTALL_VSIX_FILE.id,
|
|
159
|
+
label: VSXExtensionsCommands.INSTALL_VSIX_FILE.label,
|
|
160
|
+
when: 'resourceScheme == file && resourceExtname == .vsix'
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
menus.registerSubmenu(VSXExtensionsContextMenu.CONTRIBUTION, '', {
|
|
164
|
+
role: CompoundMenuNodeRole.Group,
|
|
165
|
+
});
|
|
146
166
|
}
|
|
147
167
|
|
|
148
168
|
registerColors(colors: ColorRegistry): void {
|
|
@@ -182,6 +202,12 @@ export class VSXExtensionsContribution extends AbstractViewContribution<VSXExten
|
|
|
182
202
|
hcLight: Color.black
|
|
183
203
|
}, description: 'Border color for a table row of the extension editor view'
|
|
184
204
|
},
|
|
205
|
+
{
|
|
206
|
+
id: 'extensionIcon.verifiedForeground', defaults: {
|
|
207
|
+
dark: '#40a6ff',
|
|
208
|
+
light: '#40a6ff'
|
|
209
|
+
}, description: 'The icon color for extension verified publisher.'
|
|
210
|
+
},
|
|
185
211
|
);
|
|
186
212
|
}
|
|
187
213
|
|
|
@@ -193,25 +219,37 @@ export class VSXExtensionsContribution extends AbstractViewContribution<VSXExten
|
|
|
193
219
|
title: VSXExtensionsCommands.INSTALL_FROM_VSIX.dialogLabel,
|
|
194
220
|
openLabel: nls.localizeByDefault('Install from VSIX'),
|
|
195
221
|
filters: { 'VSIX Extensions (*.vsix)': ['vsix'] },
|
|
196
|
-
canSelectMany: false
|
|
222
|
+
canSelectMany: false,
|
|
223
|
+
canSelectFiles: true
|
|
197
224
|
};
|
|
198
225
|
const extensionUri = await this.fileDialogService.showOpenDialog(props);
|
|
199
226
|
if (extensionUri) {
|
|
200
227
|
if (extensionUri.path.ext === '.vsix') {
|
|
201
|
-
|
|
202
|
-
try {
|
|
203
|
-
await this.commandRegistry.executeCommand(VscodeCommands.INSTALL_FROM_VSIX.id, extensionUri);
|
|
204
|
-
this.messageService.info(nls.localizeByDefault('Completed installing {0} extension from VSIX.', extensionName));
|
|
205
|
-
} catch (e) {
|
|
206
|
-
this.messageService.error(nls.localize('theia/vsx-registry/failedInstallingVSIX', 'Failed to install {0} from VSIX.', extensionName));
|
|
207
|
-
console.warn(e);
|
|
208
|
-
}
|
|
228
|
+
await this.installVsixFile(extensionUri);
|
|
209
229
|
} else {
|
|
210
230
|
this.messageService.error(nls.localize('theia/vsx-registry/invalidVSIX', 'The selected file is not a valid "*.vsix" plugin.'));
|
|
211
231
|
}
|
|
212
232
|
}
|
|
213
233
|
}
|
|
214
234
|
|
|
235
|
+
/**
|
|
236
|
+
* Installs a local vs-code extension file.
|
|
237
|
+
* The implementation doesn't check if the file is a valid VSIX file, or the URI has a *.vsix extension.
|
|
238
|
+
* The caller should ensure the file is a valid VSIX file.
|
|
239
|
+
*
|
|
240
|
+
* @param fileURI the URI of the file to install.
|
|
241
|
+
*/
|
|
242
|
+
protected async installVsixFile(fileURI: URI): Promise<void> {
|
|
243
|
+
const extensionName = this.labelProvider.getName(fileURI);
|
|
244
|
+
try {
|
|
245
|
+
await this.commandRegistry.executeCommand(VscodeCommands.INSTALL_FROM_VSIX.id, fileURI);
|
|
246
|
+
this.messageService.info(nls.localizeByDefault('Completed installing {0} extension from VSIX.', extensionName));
|
|
247
|
+
} catch (e) {
|
|
248
|
+
this.messageService.error(nls.localize('theia/vsx-registry/failedInstallingVSIX', 'Failed to install {0} from VSIX.', extensionName));
|
|
249
|
+
console.warn(e);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
215
253
|
/**
|
|
216
254
|
* Given an extension, displays a quick pick of other compatible versions and installs the selected version.
|
|
217
255
|
*
|