@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.
Files changed (84) hide show
  1. package/lib/browser/recommended-extensions/preference-provider-overrides.js +4 -9
  2. package/lib/browser/recommended-extensions/preference-provider-overrides.js.map +1 -1
  3. package/lib/browser/recommended-extensions/recommended-extensions-json-schema.js +10 -18
  4. package/lib/browser/recommended-extensions/recommended-extensions-json-schema.js.map +1 -1
  5. package/lib/browser/vsx-extension-argument-processor.d.ts +5 -0
  6. package/lib/browser/vsx-extension-argument-processor.d.ts.map +1 -0
  7. package/lib/browser/vsx-extension-argument-processor.js +34 -0
  8. package/lib/browser/vsx-extension-argument-processor.js.map +1 -0
  9. package/lib/browser/vsx-extension-commands.d.ts +1 -0
  10. package/lib/browser/vsx-extension-commands.d.ts.map +1 -1
  11. package/lib/browser/vsx-extension-commands.js +5 -0
  12. package/lib/browser/vsx-extension-commands.js.map +1 -1
  13. package/lib/browser/vsx-extension-editor-manager.js +3 -8
  14. package/lib/browser/vsx-extension-editor-manager.js.map +1 -1
  15. package/lib/browser/vsx-extension-editor.js +10 -18
  16. package/lib/browser/vsx-extension-editor.js.map +1 -1
  17. package/lib/browser/vsx-extension.d.ts +4 -0
  18. package/lib/browser/vsx-extension.d.ts.map +1 -1
  19. package/lib/browser/vsx-extension.js +64 -47
  20. package/lib/browser/vsx-extension.js.map +1 -1
  21. package/lib/browser/vsx-extensions-contribution.d.ts +18 -8
  22. package/lib/browser/vsx-extensions-contribution.d.ts.map +1 -1
  23. package/lib/browser/vsx-extensions-contribution.js +90 -64
  24. package/lib/browser/vsx-extensions-contribution.js.map +1 -1
  25. package/lib/browser/vsx-extensions-model.d.ts +4 -1
  26. package/lib/browser/vsx-extensions-model.d.ts.map +1 -1
  27. package/lib/browser/vsx-extensions-model.js +83 -45
  28. package/lib/browser/vsx-extensions-model.js.map +1 -1
  29. package/lib/browser/vsx-extensions-preferences.d.ts +12 -0
  30. package/lib/browser/vsx-extensions-preferences.d.ts.map +1 -0
  31. package/lib/browser/vsx-extensions-preferences.js +47 -0
  32. package/lib/browser/vsx-extensions-preferences.js.map +1 -0
  33. package/lib/browser/vsx-extensions-search-bar.d.ts +10 -2
  34. package/lib/browser/vsx-extensions-search-bar.d.ts.map +1 -1
  35. package/lib/browser/vsx-extensions-search-bar.js +43 -20
  36. package/lib/browser/vsx-extensions-search-bar.js.map +1 -1
  37. package/lib/browser/vsx-extensions-search-model.js +2 -7
  38. package/lib/browser/vsx-extensions-search-model.js.map +1 -1
  39. package/lib/browser/vsx-extensions-source.js +11 -19
  40. package/lib/browser/vsx-extensions-source.js.map +1 -1
  41. package/lib/browser/vsx-extensions-view-container.js +10 -18
  42. package/lib/browser/vsx-extensions-view-container.js.map +1 -1
  43. package/lib/browser/vsx-extensions-widget.d.ts +2 -1
  44. package/lib/browser/vsx-extensions-widget.d.ts.map +1 -1
  45. package/lib/browser/vsx-extensions-widget.js +19 -19
  46. package/lib/browser/vsx-extensions-widget.js.map +1 -1
  47. package/lib/browser/vsx-language-quick-pick-service.js +11 -19
  48. package/lib/browser/vsx-language-quick-pick-service.js.map +1 -1
  49. package/lib/browser/vsx-registry-frontend-module.d.ts.map +1 -1
  50. package/lib/browser/vsx-registry-frontend-module.js +6 -0
  51. package/lib/browser/vsx-registry-frontend-module.js.map +1 -1
  52. package/lib/node/vsx-cli-deployer-participant.d.ts +7 -0
  53. package/lib/node/vsx-cli-deployer-participant.d.ts.map +1 -0
  54. package/lib/node/vsx-cli-deployer-participant.js +52 -0
  55. package/lib/node/vsx-cli-deployer-participant.js.map +1 -0
  56. package/lib/node/vsx-cli.d.ts +1 -0
  57. package/lib/node/vsx-cli.d.ts.map +1 -1
  58. package/lib/node/vsx-cli.js +17 -7
  59. package/lib/node/vsx-cli.js.map +1 -1
  60. package/lib/node/vsx-environment-impl.js +6 -14
  61. package/lib/node/vsx-environment-impl.js.map +1 -1
  62. package/lib/node/vsx-extension-resolver.d.ts.map +1 -1
  63. package/lib/node/vsx-extension-resolver.js +22 -29
  64. package/lib/node/vsx-extension-resolver.js.map +1 -1
  65. package/lib/node/vsx-registry-backend-module.d.ts.map +1 -1
  66. package/lib/node/vsx-registry-backend-module.js +3 -0
  67. package/lib/node/vsx-registry-backend-module.js.map +1 -1
  68. package/package.json +12 -11
  69. package/src/browser/style/index.css +65 -2
  70. package/src/browser/vsx-extension-argument-processor.ts +32 -0
  71. package/src/browser/vsx-extension-commands.ts +5 -0
  72. package/src/browser/vsx-extension-editor-manager.ts +1 -1
  73. package/src/browser/vsx-extension.tsx +46 -11
  74. package/src/browser/vsx-extensions-contribution.ts +62 -24
  75. package/src/browser/vsx-extensions-model.ts +61 -14
  76. package/src/browser/vsx-extensions-preferences.ts +58 -0
  77. package/src/browser/vsx-extensions-search-bar.tsx +52 -14
  78. package/src/browser/vsx-extensions-widget.tsx +10 -1
  79. package/src/browser/vsx-language-quick-pick-service.ts +1 -1
  80. package/src/browser/vsx-registry-frontend-module.ts +7 -0
  81. package/src/node/vsx-cli-deployer-participant.ts +46 -0
  82. package/src/node/vsx-cli.ts +13 -0
  83. package/src/node/vsx-extension-resolver.ts +8 -7
  84. 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
- if (options) {
54
- console.log(`[${id}]: trying to resolve version ${options.version}...`);
55
- const { extensions } = await client.query({ extensionId: id, extensionVersion: options.version, includeAllVersions: true });
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":"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"}
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;;AAO/D,wBASG"}
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,kFAAsF;AACtF,+DAAiF;AACjF,uCAAmC;AACnC,iEAA4D;AAC5D,qEAAgE;AAEhE,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;AACjE,CAAC,CAAC,CAAC"}
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.45.1",
3
+ "version": "1.46.0-next.137+bce99c299",
4
4
  "description": "Theia - VSX Registry",
5
5
  "dependencies": {
6
- "@theia/core": "1.45.1",
7
- "@theia/filesystem": "1.45.1",
8
- "@theia/ovsx-client": "1.45.1",
9
- "@theia/plugin-ext": "1.45.1",
10
- "@theia/plugin-ext-vscode": "1.45.1",
11
- "@theia/preferences": "1.45.1",
12
- "@theia/workspace": "1.45.1",
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
- "uuid": "^8.0.0"
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.45.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": "3837c50544190b80d0ad8e87aa9fa9f286c70fcc"
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
- padding-top: calc(var(--theia-ui-padding) / 2);
46
- padding-bottom: calc(var(--theia-ui-padding) / 2);
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
  };
@@ -36,7 +36,7 @@ export class VSXExtensionEditorManager extends WidgetOpenHandler<VSXExtensionEdi
36
36
  if (!id) {
37
37
  throw new Error('Invalid URI: ' + uri.toString());
38
38
  }
39
- return { id };
39
+ return id;
40
40
  }
41
41
 
42
42
  }
@@ -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.toUri(this.id);
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._busy++;
301
- try {
302
- await this.progressService.withProgress(nls.localizeByDefault("Installing extension '{0}' v{1}...", this.id, this.version ?? 0), 'extensions', () =>
303
- this.pluginServer.deploy(this.uri.toString(), undefined, options)
304
- );
305
- } finally {
306
- this._busy--;
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
- <span className='noWrapInfo theia-vsx-extension-publisher'>{publisher}</span>
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 { DateTime } from 'luxon';
18
- import { injectable, inject, postConstruct } from '@theia/core/shared/inversify';
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 { MenuModelRegistry, MessageService, nls } from '@theia/core/lib/common';
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 { LabelProvider, PreferenceService, QuickPickItem, QuickInputService, CommonMenus } from '@theia/core/lib/browser';
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 { VSXExtensionsContextMenu, VSXExtension } from './vsx-extension';
34
- import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
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 { VSXExtensionRaw, OVSXApiFilter } from '@theia/ovsx-client';
39
- import { OVSXClientProvider } from '../common/ovsx-client-provider';
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
- const extensionName = this.labelProvider.getName(extensionUri);
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
  *