@theia/vsx-registry 1.67.0-next.3 → 1.67.0-next.56
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/README.md +1 -1
- package/package.json +10 -10
- package/src/browser/vsx-extension.tsx +5 -4
- package/src/browser/vsx-extensions-contribution.ts +5 -3
- package/src/browser/vsx-extensions-model.ts +28 -14
- package/src/browser/vsx-extensions-source.ts +7 -1
- package/lib/browser/recommended-extensions/preference-provider-overrides.d.ts +0 -19
- package/lib/browser/recommended-extensions/preference-provider-overrides.d.ts.map +0 -1
- package/lib/browser/recommended-extensions/preference-provider-overrides.js +0 -92
- package/lib/browser/recommended-extensions/preference-provider-overrides.js.map +0 -1
- package/lib/browser/recommended-extensions/recommended-extensions-json-schema.d.ts +0 -13
- package/lib/browser/recommended-extensions/recommended-extensions-json-schema.d.ts.map +0 -1
- package/lib/browser/recommended-extensions/recommended-extensions-json-schema.js +0 -87
- package/lib/browser/recommended-extensions/recommended-extensions-json-schema.js.map +0 -1
- package/lib/browser/vsx-extension-argument-processor.d.ts +0 -5
- package/lib/browser/vsx-extension-argument-processor.d.ts.map +0 -1
- package/lib/browser/vsx-extension-argument-processor.js +0 -34
- package/lib/browser/vsx-extension-argument-processor.js.map +0 -1
- package/lib/browser/vsx-extension-commands.d.ts +0 -17
- package/lib/browser/vsx-extension-commands.d.ts.map +0 -1
- package/lib/browser/vsx-extension-commands.js +0 -75
- package/lib/browser/vsx-extension-commands.js.map +0 -1
- package/lib/browser/vsx-extension-editor-manager.d.ts +0 -11
- package/lib/browser/vsx-extension-editor-manager.d.ts.map +0 -1
- package/lib/browser/vsx-extension-editor-manager.js +0 -45
- package/lib/browser/vsx-extension-editor-manager.js.map +0 -1
- package/lib/browser/vsx-extension-editor.d.ts +0 -22
- package/lib/browser/vsx-extension-editor.d.ts.map +0 -1
- package/lib/browser/vsx-extension-editor.js +0 -102
- package/lib/browser/vsx-extension-editor.js.map +0 -1
- package/lib/browser/vsx-extension.d.ts +0 -162
- package/lib/browser/vsx-extension.d.ts.map +0 -1
- package/lib/browser/vsx-extension.js +0 -646
- package/lib/browser/vsx-extension.js.map +0 -1
- package/lib/browser/vsx-extensions-contribution.d.ts +0 -74
- package/lib/browser/vsx-extensions-contribution.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-contribution.js +0 -403
- package/lib/browser/vsx-extensions-contribution.js.map +0 -1
- package/lib/browser/vsx-extensions-model.d.ts +0 -90
- package/lib/browser/vsx-extensions-model.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-model.js +0 -509
- package/lib/browser/vsx-extensions-model.js.map +0 -1
- package/lib/browser/vsx-extensions-preferences.d.ts +0 -12
- package/lib/browser/vsx-extensions-preferences.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-preferences.js +0 -46
- package/lib/browser/vsx-extensions-preferences.js.map +0 -1
- package/lib/browser/vsx-extensions-search-bar.d.ts +0 -23
- package/lib/browser/vsx-extensions-search-bar.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-search-bar.js +0 -99
- package/lib/browser/vsx-extensions-search-bar.js.map +0 -1
- package/lib/browser/vsx-extensions-search-model.d.ts +0 -22
- package/lib/browser/vsx-extensions-search-model.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-search-model.js +0 -66
- package/lib/browser/vsx-extensions-search-model.js.map +0 -1
- package/lib/browser/vsx-extensions-source.d.ts +0 -20
- package/lib/browser/vsx-extensions-source.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-source.js +0 -95
- package/lib/browser/vsx-extensions-source.js.map +0 -1
- package/lib/browser/vsx-extensions-view-container.d.ts +0 -50
- package/lib/browser/vsx-extensions-view-container.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-view-container.js +0 -185
- package/lib/browser/vsx-extensions-view-container.js.map +0 -1
- package/lib/browser/vsx-extensions-widget.d.ts +0 -36
- package/lib/browser/vsx-extensions-widget.d.ts.map +0 -1
- package/lib/browser/vsx-extensions-widget.js +0 -157
- package/lib/browser/vsx-extensions-widget.js.map +0 -1
- package/lib/browser/vsx-language-quick-pick-service.d.ts +0 -16
- package/lib/browser/vsx-language-quick-pick-service.d.ts.map +0 -1
- package/lib/browser/vsx-language-quick-pick-service.js +0 -117
- package/lib/browser/vsx-language-quick-pick-service.js.map +0 -1
- package/lib/browser/vsx-registry-frontend-module.d.ts +0 -5
- package/lib/browser/vsx-registry-frontend-module.d.ts.map +0 -1
- package/lib/browser/vsx-registry-frontend-module.js +0 -109
- package/lib/browser/vsx-registry-frontend-module.js.map +0 -1
- package/lib/common/index.d.ts +0 -4
- package/lib/common/index.d.ts.map +0 -1
- package/lib/common/index.js +0 -26
- package/lib/common/index.js.map +0 -1
- package/lib/common/ovsx-client-provider.d.ts +0 -14
- package/lib/common/ovsx-client-provider.d.ts.map +0 -1
- package/lib/common/ovsx-client-provider.js +0 -30
- package/lib/common/ovsx-client-provider.js.map +0 -1
- package/lib/common/recommended-extensions-preference-contribution.d.ts +0 -13
- package/lib/common/recommended-extensions-preference-contribution.d.ts.map +0 -1
- package/lib/common/recommended-extensions-preference-contribution.js +0 -53
- package/lib/common/recommended-extensions-preference-contribution.js.map +0 -1
- package/lib/common/vsx-environment.d.ts +0 -11
- package/lib/common/vsx-environment.d.ts.map +0 -1
- package/lib/common/vsx-environment.js +0 -21
- package/lib/common/vsx-environment.js.map +0 -1
- package/lib/common/vsx-extension-uri.d.ts +0 -4
- package/lib/common/vsx-extension-uri.d.ts.map +0 -1
- package/lib/common/vsx-extension-uri.js +0 -21
- package/lib/common/vsx-extension-uri.js.map +0 -1
- package/lib/common/vsx-registry-common-module.d.ts +0 -4
- package/lib/common/vsx-registry-common-module.d.ts.map +0 -1
- package/lib/common/vsx-registry-common-module.js +0 -77
- package/lib/common/vsx-registry-common-module.js.map +0 -1
- package/lib/node/vsx-cli-deployer-participant.d.ts +0 -7
- package/lib/node/vsx-cli-deployer-participant.d.ts.map +0 -1
- package/lib/node/vsx-cli-deployer-participant.js +0 -52
- package/lib/node/vsx-cli-deployer-participant.js.map +0 -1
- package/lib/node/vsx-cli.d.ts +0 -12
- package/lib/node/vsx-cli.d.ts.map +0 -1
- package/lib/node/vsx-cli.js +0 -56
- package/lib/node/vsx-cli.js.map +0 -1
- package/lib/node/vsx-environment-impl.d.ts +0 -16
- package/lib/node/vsx-environment-impl.d.ts.map +0 -1
- package/lib/node/vsx-environment-impl.js +0 -57
- package/lib/node/vsx-environment-impl.js.map +0 -1
- package/lib/node/vsx-extension-resolver.d.ts +0 -22
- package/lib/node/vsx-extension-resolver.d.ts.map +0 -1
- package/lib/node/vsx-extension-resolver.js +0 -156
- package/lib/node/vsx-extension-resolver.js.map +0 -1
- package/lib/node/vsx-registry-backend-module.d.ts +0 -4
- package/lib/node/vsx-registry-backend-module.d.ts.map +0 -1
- package/lib/node/vsx-registry-backend-module.js +0 -41
- package/lib/node/vsx-registry-backend-module.js.map +0 -1
- package/lib/node/vsx-remote-cli.d.ts +0 -7
- package/lib/node/vsx-remote-cli.d.ts.map +0 -1
- package/lib/node/vsx-remote-cli.js +0 -40
- package/lib/node/vsx-remote-cli.js.map +0 -1
- package/lib/package.spec.d.ts +0 -1
- package/lib/package.spec.d.ts.map +0 -1
- package/lib/package.spec.js +0 -26
- package/lib/package.spec.js.map +0 -1
|
@@ -1,646 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// *****************************************************************************
|
|
3
|
-
// Copyright (C) 2020 TypeFox and others.
|
|
4
|
-
//
|
|
5
|
-
// This program and the accompanying materials are made available under the
|
|
6
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
-
//
|
|
9
|
-
// This Source Code may also be made available under the following Secondary
|
|
10
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
-
// with the GNU Classpath Exception which is available at
|
|
13
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
-
//
|
|
15
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
-
// *****************************************************************************
|
|
17
|
-
var VSXExtension_1;
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.VSXExtensionEditorComponent = exports.VSXExtensionComponent = exports.AbstractVSXExtensionComponent = exports.VSXExtension = exports.VSXExtensionFactory = exports.VSXExtensionOptions = exports.VSXExtensionData = exports.VSXExtensionsContextMenu = exports.EXTENSIONS_CONTEXT_MENU = void 0;
|
|
20
|
-
const tslib_1 = require("tslib");
|
|
21
|
-
const React = require("@theia/core/shared/react");
|
|
22
|
-
const DOMPurify = require("@theia/core/shared/dompurify");
|
|
23
|
-
const inversify_1 = require("@theia/core/shared/inversify");
|
|
24
|
-
const uri_1 = require("@theia/core/lib/common/uri");
|
|
25
|
-
const opener_service_1 = require("@theia/core/lib/browser/opener-service");
|
|
26
|
-
const hosted_plugin_1 = require("@theia/plugin-ext/lib/hosted/browser/hosted-plugin");
|
|
27
|
-
const plugin_protocol_1 = require("@theia/plugin-ext/lib/common/plugin-protocol");
|
|
28
|
-
const plugin_vscode_uri_1 = require("@theia/plugin-ext-vscode/lib/common/plugin-vscode-uri");
|
|
29
|
-
const progress_service_1 = require("@theia/core/lib/common/progress-service");
|
|
30
|
-
const endpoint_1 = require("@theia/core/lib/browser/endpoint");
|
|
31
|
-
const vsx_environment_1 = require("../common/vsx-environment");
|
|
32
|
-
const vsx_extensions_search_model_1 = require("./vsx-extensions-search-model");
|
|
33
|
-
const common_1 = require("@theia/core/lib/common");
|
|
34
|
-
const browser_1 = require("@theia/core/lib/browser");
|
|
35
|
-
const window_service_1 = require("@theia/core/lib/browser/window/window-service");
|
|
36
|
-
const markdown_rendering_1 = require("@theia/core/lib/common/markdown-rendering");
|
|
37
|
-
exports.EXTENSIONS_CONTEXT_MENU = ['extensions_context_menu'];
|
|
38
|
-
var VSXExtensionsContextMenu;
|
|
39
|
-
(function (VSXExtensionsContextMenu) {
|
|
40
|
-
VSXExtensionsContextMenu.INSTALL = [...exports.EXTENSIONS_CONTEXT_MENU, '1_install'];
|
|
41
|
-
VSXExtensionsContextMenu.DISABLE = [...exports.EXTENSIONS_CONTEXT_MENU, '2_disable'];
|
|
42
|
-
VSXExtensionsContextMenu.ENABLE = [...exports.EXTENSIONS_CONTEXT_MENU, '2_enable'];
|
|
43
|
-
VSXExtensionsContextMenu.COPY = [...exports.EXTENSIONS_CONTEXT_MENU, '3_copy'];
|
|
44
|
-
VSXExtensionsContextMenu.CONTRIBUTION = [...exports.EXTENSIONS_CONTEXT_MENU, '4_contribution'];
|
|
45
|
-
})(VSXExtensionsContextMenu || (exports.VSXExtensionsContextMenu = VSXExtensionsContextMenu = {}));
|
|
46
|
-
let VSXExtensionData = class VSXExtensionData {
|
|
47
|
-
};
|
|
48
|
-
exports.VSXExtensionData = VSXExtensionData;
|
|
49
|
-
VSXExtensionData.KEYS = new Set([
|
|
50
|
-
'version',
|
|
51
|
-
'iconUrl',
|
|
52
|
-
'publisher',
|
|
53
|
-
'name',
|
|
54
|
-
'displayName',
|
|
55
|
-
'description',
|
|
56
|
-
'averageRating',
|
|
57
|
-
'downloadCount',
|
|
58
|
-
'downloadUrl',
|
|
59
|
-
'readmeUrl',
|
|
60
|
-
'licenseUrl',
|
|
61
|
-
'repository',
|
|
62
|
-
'license',
|
|
63
|
-
'readme',
|
|
64
|
-
'preview',
|
|
65
|
-
'verified',
|
|
66
|
-
'namespaceAccess',
|
|
67
|
-
'publishedBy'
|
|
68
|
-
]);
|
|
69
|
-
exports.VSXExtensionData = VSXExtensionData = tslib_1.__decorate([
|
|
70
|
-
(0, inversify_1.injectable)()
|
|
71
|
-
], VSXExtensionData);
|
|
72
|
-
let VSXExtensionOptions = class VSXExtensionOptions {
|
|
73
|
-
};
|
|
74
|
-
exports.VSXExtensionOptions = VSXExtensionOptions;
|
|
75
|
-
exports.VSXExtensionOptions = VSXExtensionOptions = tslib_1.__decorate([
|
|
76
|
-
(0, inversify_1.injectable)()
|
|
77
|
-
], VSXExtensionOptions);
|
|
78
|
-
exports.VSXExtensionFactory = Symbol('VSXExtensionFactory');
|
|
79
|
-
let VSXExtension = VSXExtension_1 = class VSXExtension {
|
|
80
|
-
constructor() {
|
|
81
|
-
this.data = {};
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Ensure the version string begins with `'v'`.
|
|
85
|
-
*/
|
|
86
|
-
static formatVersion(version) {
|
|
87
|
-
if (version && !version.startsWith('v')) {
|
|
88
|
-
return `v${version}`;
|
|
89
|
-
}
|
|
90
|
-
return version;
|
|
91
|
-
}
|
|
92
|
-
postConstruct() {
|
|
93
|
-
this.registryUri = this.environment.getRegistryUri();
|
|
94
|
-
}
|
|
95
|
-
get uri() {
|
|
96
|
-
return plugin_vscode_uri_1.VSCodeExtensionUri.fromId(this.id);
|
|
97
|
-
}
|
|
98
|
-
get id() {
|
|
99
|
-
return this.options.id;
|
|
100
|
-
}
|
|
101
|
-
get installedVersion() {
|
|
102
|
-
var _a;
|
|
103
|
-
return ((_a = this.plugin) === null || _a === void 0 ? void 0 : _a.metadata.model.version) || this.options.version;
|
|
104
|
-
}
|
|
105
|
-
get model() {
|
|
106
|
-
return this.options.model;
|
|
107
|
-
}
|
|
108
|
-
get visible() {
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
111
|
-
get plugin() {
|
|
112
|
-
return this.pluginSupport.getPlugin(this.id);
|
|
113
|
-
}
|
|
114
|
-
get installed() {
|
|
115
|
-
return this.model.isInstalled(this.id);
|
|
116
|
-
}
|
|
117
|
-
get uninstalled() {
|
|
118
|
-
return this.model.isUninstalled(this.id);
|
|
119
|
-
}
|
|
120
|
-
get deployed() {
|
|
121
|
-
return this.model.isDeployed(this.id);
|
|
122
|
-
}
|
|
123
|
-
get disabled() {
|
|
124
|
-
return this.model.isDisabled(this.id);
|
|
125
|
-
}
|
|
126
|
-
get builtin() {
|
|
127
|
-
return this.model.isBuiltIn(this.id);
|
|
128
|
-
}
|
|
129
|
-
update(data) {
|
|
130
|
-
for (const key of VSXExtensionData.KEYS) {
|
|
131
|
-
if (key in data) {
|
|
132
|
-
Object.assign(this.data, { [key]: data[key] });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
reloadWindow() {
|
|
137
|
-
this.windowService.reload();
|
|
138
|
-
}
|
|
139
|
-
getData(key) {
|
|
140
|
-
var _a;
|
|
141
|
-
const model = (_a = this.plugin) === null || _a === void 0 ? void 0 : _a.metadata.model;
|
|
142
|
-
if (model && key in model) {
|
|
143
|
-
return model[key];
|
|
144
|
-
}
|
|
145
|
-
return this.data[key];
|
|
146
|
-
}
|
|
147
|
-
get iconUrl() {
|
|
148
|
-
const plugin = this.plugin;
|
|
149
|
-
const iconUrl = plugin && plugin.metadata.model.iconUrl;
|
|
150
|
-
if (iconUrl) {
|
|
151
|
-
return new endpoint_1.Endpoint({ path: iconUrl }).getRestUrl().toString();
|
|
152
|
-
}
|
|
153
|
-
return this.data['iconUrl'];
|
|
154
|
-
}
|
|
155
|
-
get publisher() {
|
|
156
|
-
return this.getData('publisher');
|
|
157
|
-
}
|
|
158
|
-
get name() {
|
|
159
|
-
return this.getData('name');
|
|
160
|
-
}
|
|
161
|
-
get displayName() {
|
|
162
|
-
return this.getData('displayName') || this.name;
|
|
163
|
-
}
|
|
164
|
-
get description() {
|
|
165
|
-
return this.getData('description');
|
|
166
|
-
}
|
|
167
|
-
get version() {
|
|
168
|
-
return this.getData('version');
|
|
169
|
-
}
|
|
170
|
-
get averageRating() {
|
|
171
|
-
return this.getData('averageRating');
|
|
172
|
-
}
|
|
173
|
-
get downloadCount() {
|
|
174
|
-
return this.getData('downloadCount');
|
|
175
|
-
}
|
|
176
|
-
get downloadUrl() {
|
|
177
|
-
return this.getData('downloadUrl');
|
|
178
|
-
}
|
|
179
|
-
get readmeUrl() {
|
|
180
|
-
const plugin = this.plugin;
|
|
181
|
-
const readmeUrl = plugin && plugin.metadata.model.readmeUrl;
|
|
182
|
-
if (readmeUrl) {
|
|
183
|
-
return new endpoint_1.Endpoint({ path: readmeUrl }).getRestUrl().toString();
|
|
184
|
-
}
|
|
185
|
-
return this.data['readmeUrl'];
|
|
186
|
-
}
|
|
187
|
-
get licenseUrl() {
|
|
188
|
-
let licenseUrl = this.data['licenseUrl'];
|
|
189
|
-
if (licenseUrl) {
|
|
190
|
-
return licenseUrl;
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
const plugin = this.plugin;
|
|
194
|
-
licenseUrl = plugin && plugin.metadata.model.licenseUrl;
|
|
195
|
-
if (licenseUrl) {
|
|
196
|
-
return new endpoint_1.Endpoint({ path: licenseUrl }).getRestUrl().toString();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
get repository() {
|
|
201
|
-
return this.getData('repository');
|
|
202
|
-
}
|
|
203
|
-
get license() {
|
|
204
|
-
return this.getData('license');
|
|
205
|
-
}
|
|
206
|
-
get readme() {
|
|
207
|
-
return this.getData('readme');
|
|
208
|
-
}
|
|
209
|
-
get preview() {
|
|
210
|
-
return this.getData('preview');
|
|
211
|
-
}
|
|
212
|
-
get verified() {
|
|
213
|
-
return this.getData('verified');
|
|
214
|
-
}
|
|
215
|
-
get namespaceAccess() {
|
|
216
|
-
return this.getData('namespaceAccess');
|
|
217
|
-
}
|
|
218
|
-
get publishedBy() {
|
|
219
|
-
return this.getData('publishedBy');
|
|
220
|
-
}
|
|
221
|
-
get tooltip() {
|
|
222
|
-
let md = `__${this.displayName}__ ${VSXExtension_1.formatVersion(this.version)}\n\n${this.description}\n_____\n\n${common_1.nls.localizeByDefault('Publisher: {0}', this.publisher)}`;
|
|
223
|
-
if (this.license) {
|
|
224
|
-
md += ` \r${common_1.nls.localize('theia/vsx-registry/license', 'License: {0}', this.license)}`;
|
|
225
|
-
}
|
|
226
|
-
if (this.downloadCount) {
|
|
227
|
-
md += ` \r${common_1.nls.localize('theia/vsx-registry/downloadCount', 'Download count: {0}', downloadCompactFormatter.format(this.downloadCount))}`;
|
|
228
|
-
}
|
|
229
|
-
if (this.averageRating) {
|
|
230
|
-
md += ` \r${getAverageRatingTitle(this.averageRating)}`;
|
|
231
|
-
}
|
|
232
|
-
return md;
|
|
233
|
-
}
|
|
234
|
-
get currentTask() {
|
|
235
|
-
return this._currentTaskName;
|
|
236
|
-
}
|
|
237
|
-
runTask(name, task) {
|
|
238
|
-
if (this._currentTask) {
|
|
239
|
-
return Promise.reject('busy');
|
|
240
|
-
}
|
|
241
|
-
this._currentTaskName = name;
|
|
242
|
-
this._currentTask = task();
|
|
243
|
-
this._currentTask.finally(() => {
|
|
244
|
-
this._currentTask = undefined;
|
|
245
|
-
this._currentTaskName = undefined;
|
|
246
|
-
});
|
|
247
|
-
return this._currentTask;
|
|
248
|
-
}
|
|
249
|
-
async install(options) {
|
|
250
|
-
if (!this.verified) {
|
|
251
|
-
const choice = await new browser_1.ConfirmDialog({
|
|
252
|
-
title: common_1.nls.localize('theia/vsx-registry/confirmDialogTitle', 'Are you sure you want to proceed with the installation?'),
|
|
253
|
-
msg: common_1.nls.localize('theia/vsx-registry/confirmDialogMessage', 'The extension "{0}" is unverified and might pose a security risk.', this.displayName)
|
|
254
|
-
}).open();
|
|
255
|
-
if (choice) {
|
|
256
|
-
await this.doInstall(options);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
await this.doInstall(options);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
async uninstall() {
|
|
264
|
-
const { id, installedVersion } = this;
|
|
265
|
-
if (id && installedVersion) {
|
|
266
|
-
await this.runTask(common_1.nls.localizeByDefault('Uninstalling'), async () => await this.progressService.withProgress(common_1.nls.localizeByDefault('Uninstalling {0}...', this.id), 'extensions', () => this.pluginServer.uninstall(plugin_protocol_1.PluginIdentifiers.idAndVersionToVersionedId({ id: id, version: installedVersion }))));
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
async disable() {
|
|
270
|
-
const { id, installedVersion } = this;
|
|
271
|
-
if (id && installedVersion) {
|
|
272
|
-
await this.runTask(common_1.nls.localize('vsx.disabling', 'Disabling'), async () => {
|
|
273
|
-
await this.progressService.withProgress(common_1.nls.localize('vsx.disabling.extensions', 'Disabling {0}...', this.id), 'extensions', () => this.pluginServer.disablePlugin(id));
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
async enable() {
|
|
278
|
-
const { id, installedVersion } = this;
|
|
279
|
-
if (id && installedVersion) {
|
|
280
|
-
await this.runTask(common_1.nls.localize('vsx.enabling', 'Enabling'), async () => {
|
|
281
|
-
await this.progressService.withProgress(common_1.nls.localize('vsx.enabling.extension', 'Enabling {0}...', this.id), 'extensions', () => this.pluginServer.enablePlugin(id));
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
async doInstall(options) {
|
|
286
|
-
await this.runTask(common_1.nls.localizeByDefault('Installing'), () => {
|
|
287
|
-
var _a;
|
|
288
|
-
return this.progressService.withProgress(common_1.nls.localizeByDefault("Installing extension '{0}' v{1}...", this.id, (_a = this.version) !== null && _a !== void 0 ? _a : 0), 'extensions', () => this.pluginServer.install(this.uri.toString(), undefined, options));
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
handleContextMenu(e) {
|
|
292
|
-
e.preventDefault();
|
|
293
|
-
this.contextMenuRenderer.render({
|
|
294
|
-
menuPath: exports.EXTENSIONS_CONTEXT_MENU,
|
|
295
|
-
anchor: {
|
|
296
|
-
x: e.clientX,
|
|
297
|
-
y: e.clientY,
|
|
298
|
-
},
|
|
299
|
-
args: [this],
|
|
300
|
-
context: e.currentTarget
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Get the registry link for the given extension.
|
|
305
|
-
* @param path the url path.
|
|
306
|
-
* @returns the registry link for the given extension at the path.
|
|
307
|
-
*/
|
|
308
|
-
async getRegistryLink(path = '') {
|
|
309
|
-
const registryUri = new uri_1.default(await this.registryUri);
|
|
310
|
-
if (this.downloadUrl) {
|
|
311
|
-
const downloadUri = new uri_1.default(this.downloadUrl);
|
|
312
|
-
if (downloadUri.authority !== registryUri.authority) {
|
|
313
|
-
throw new Error('cannot generate a valid URL');
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return registryUri.resolve('extension/' + this.id.replace('.', '/')).resolve(path);
|
|
317
|
-
}
|
|
318
|
-
async serialize() {
|
|
319
|
-
const serializedExtension = [];
|
|
320
|
-
serializedExtension.push(`Name: ${this.displayName}`);
|
|
321
|
-
serializedExtension.push(`Id: ${this.id}`);
|
|
322
|
-
serializedExtension.push(`Description: ${this.description}`);
|
|
323
|
-
serializedExtension.push(`Version: ${this.version}`);
|
|
324
|
-
serializedExtension.push(`Publisher: ${this.publisher}`);
|
|
325
|
-
if (this.downloadUrl !== undefined) {
|
|
326
|
-
const registryLink = await this.getRegistryLink();
|
|
327
|
-
serializedExtension.push(`Open VSX Link: ${registryLink.toString()}`);
|
|
328
|
-
}
|
|
329
|
-
;
|
|
330
|
-
return serializedExtension.join('\n');
|
|
331
|
-
}
|
|
332
|
-
async open(options = { mode: 'reveal' }) {
|
|
333
|
-
await this.doOpen(this.uri, options);
|
|
334
|
-
}
|
|
335
|
-
async doOpen(uri, options) {
|
|
336
|
-
await (0, opener_service_1.open)(this.openerService, uri, options);
|
|
337
|
-
}
|
|
338
|
-
render(host) {
|
|
339
|
-
return React.createElement(VSXExtensionComponent, { extension: this, host: host, hoverService: this.hoverService });
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
exports.VSXExtension = VSXExtension;
|
|
343
|
-
tslib_1.__decorate([
|
|
344
|
-
(0, inversify_1.inject)(VSXExtensionOptions),
|
|
345
|
-
tslib_1.__metadata("design:type", VSXExtensionOptions)
|
|
346
|
-
], VSXExtension.prototype, "options", void 0);
|
|
347
|
-
tslib_1.__decorate([
|
|
348
|
-
(0, inversify_1.inject)(opener_service_1.OpenerService),
|
|
349
|
-
tslib_1.__metadata("design:type", Object)
|
|
350
|
-
], VSXExtension.prototype, "openerService", void 0);
|
|
351
|
-
tslib_1.__decorate([
|
|
352
|
-
(0, inversify_1.inject)(hosted_plugin_1.HostedPluginSupport),
|
|
353
|
-
tslib_1.__metadata("design:type", hosted_plugin_1.HostedPluginSupport)
|
|
354
|
-
], VSXExtension.prototype, "pluginSupport", void 0);
|
|
355
|
-
tslib_1.__decorate([
|
|
356
|
-
(0, inversify_1.inject)(plugin_protocol_1.PluginServer),
|
|
357
|
-
tslib_1.__metadata("design:type", Object)
|
|
358
|
-
], VSXExtension.prototype, "pluginServer", void 0);
|
|
359
|
-
tslib_1.__decorate([
|
|
360
|
-
(0, inversify_1.inject)(progress_service_1.ProgressService),
|
|
361
|
-
tslib_1.__metadata("design:type", progress_service_1.ProgressService)
|
|
362
|
-
], VSXExtension.prototype, "progressService", void 0);
|
|
363
|
-
tslib_1.__decorate([
|
|
364
|
-
(0, inversify_1.inject)(browser_1.ContextMenuRenderer),
|
|
365
|
-
tslib_1.__metadata("design:type", browser_1.ContextMenuRenderer)
|
|
366
|
-
], VSXExtension.prototype, "contextMenuRenderer", void 0);
|
|
367
|
-
tslib_1.__decorate([
|
|
368
|
-
(0, inversify_1.inject)(vsx_environment_1.VSXEnvironment),
|
|
369
|
-
tslib_1.__metadata("design:type", Object)
|
|
370
|
-
], VSXExtension.prototype, "environment", void 0);
|
|
371
|
-
tslib_1.__decorate([
|
|
372
|
-
(0, inversify_1.inject)(vsx_extensions_search_model_1.VSXExtensionsSearchModel),
|
|
373
|
-
tslib_1.__metadata("design:type", vsx_extensions_search_model_1.VSXExtensionsSearchModel)
|
|
374
|
-
], VSXExtension.prototype, "search", void 0);
|
|
375
|
-
tslib_1.__decorate([
|
|
376
|
-
(0, inversify_1.inject)(browser_1.HoverService),
|
|
377
|
-
tslib_1.__metadata("design:type", browser_1.HoverService)
|
|
378
|
-
], VSXExtension.prototype, "hoverService", void 0);
|
|
379
|
-
tslib_1.__decorate([
|
|
380
|
-
(0, inversify_1.inject)(window_service_1.WindowService),
|
|
381
|
-
tslib_1.__metadata("design:type", Object)
|
|
382
|
-
], VSXExtension.prototype, "windowService", void 0);
|
|
383
|
-
tslib_1.__decorate([
|
|
384
|
-
(0, inversify_1.inject)(common_1.CommandRegistry),
|
|
385
|
-
tslib_1.__metadata("design:type", common_1.CommandRegistry)
|
|
386
|
-
], VSXExtension.prototype, "commandRegistry", void 0);
|
|
387
|
-
tslib_1.__decorate([
|
|
388
|
-
(0, inversify_1.postConstruct)(),
|
|
389
|
-
tslib_1.__metadata("design:type", Function),
|
|
390
|
-
tslib_1.__metadata("design:paramtypes", []),
|
|
391
|
-
tslib_1.__metadata("design:returntype", void 0)
|
|
392
|
-
], VSXExtension.prototype, "postConstruct", null);
|
|
393
|
-
exports.VSXExtension = VSXExtension = VSXExtension_1 = tslib_1.__decorate([
|
|
394
|
-
(0, inversify_1.injectable)()
|
|
395
|
-
], VSXExtension);
|
|
396
|
-
class AbstractVSXExtensionComponent extends React.Component {
|
|
397
|
-
constructor() {
|
|
398
|
-
super(...arguments);
|
|
399
|
-
this.install = async (event) => {
|
|
400
|
-
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
401
|
-
this.forceUpdate();
|
|
402
|
-
try {
|
|
403
|
-
const pending = this.props.extension.install();
|
|
404
|
-
this.forceUpdate();
|
|
405
|
-
await pending;
|
|
406
|
-
}
|
|
407
|
-
finally {
|
|
408
|
-
this.forceUpdate();
|
|
409
|
-
}
|
|
410
|
-
};
|
|
411
|
-
this.uninstall = async (event) => {
|
|
412
|
-
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
413
|
-
try {
|
|
414
|
-
const pending = this.props.extension.uninstall();
|
|
415
|
-
this.forceUpdate();
|
|
416
|
-
await pending;
|
|
417
|
-
}
|
|
418
|
-
finally {
|
|
419
|
-
this.forceUpdate();
|
|
420
|
-
}
|
|
421
|
-
};
|
|
422
|
-
this.reloadWindow = (event) => {
|
|
423
|
-
event === null || event === void 0 ? void 0 : event.stopPropagation();
|
|
424
|
-
this.props.extension.reloadWindow();
|
|
425
|
-
};
|
|
426
|
-
this.manage = (e) => {
|
|
427
|
-
e.stopPropagation();
|
|
428
|
-
this.props.extension.handleContextMenu(e);
|
|
429
|
-
};
|
|
430
|
-
}
|
|
431
|
-
renderAction(host) {
|
|
432
|
-
var _a;
|
|
433
|
-
const { builtin, currentTask, disabled, uninstalled, installed, deployed } = this.props.extension;
|
|
434
|
-
const isFocused = ((_a = host === null || host === void 0 ? void 0 : host.model.getFocusedNode()) === null || _a === void 0 ? void 0 : _a.element) === this.props.extension;
|
|
435
|
-
const tabIndex = (!host || isFocused) ? 0 : undefined;
|
|
436
|
-
const inactive = disabled || uninstalled || !installed;
|
|
437
|
-
const outOfSync = (installed && uninstalled) || (deployed ? inactive : !inactive);
|
|
438
|
-
if (currentTask) {
|
|
439
|
-
return React.createElement("button", { className: "theia-button action prominent theia-mod-disabled" }, currentTask);
|
|
440
|
-
}
|
|
441
|
-
return React.createElement("div", null,
|
|
442
|
-
outOfSync && React.createElement("button", { className: "theia-button action", onClick: this.reloadWindow }, common_1.nls.localizeByDefault('Reload Window')),
|
|
443
|
-
!builtin && installed && !uninstalled && React.createElement("button", { className: "theia-button action", onClick: this.uninstall }, common_1.nls.localizeByDefault('Uninstall')),
|
|
444
|
-
!builtin && !installed && React.createElement("button", { className: "theia-button prominent action", onClick: this.install }, common_1.nls.localizeByDefault('Install')),
|
|
445
|
-
React.createElement("div", { className: "codicon codicon-settings-gear action", tabIndex: tabIndex, onClick: this.manage }));
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
exports.AbstractVSXExtensionComponent = AbstractVSXExtensionComponent;
|
|
449
|
-
const downloadFormatter = new Intl.NumberFormat();
|
|
450
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
451
|
-
const downloadCompactFormatter = new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' });
|
|
452
|
-
const averageRatingFormatter = (averageRating) => Math.round(averageRating * 2) / 2;
|
|
453
|
-
const getAverageRatingTitle = (averageRating) => common_1.nls.localizeByDefault('Average rating: {0} out of 5', averageRatingFormatter(averageRating));
|
|
454
|
-
class VSXExtensionComponent extends AbstractVSXExtensionComponent {
|
|
455
|
-
render() {
|
|
456
|
-
const { iconUrl, publisher, displayName, description, version, downloadCount, averageRating, tooltip, verified, disabled, installed } = this.props.extension;
|
|
457
|
-
return React.createElement("div", { className: 'theia-vsx-extension noselect', onMouseEnter: event => {
|
|
458
|
-
this.props.hoverService.requestHover({
|
|
459
|
-
content: new markdown_rendering_1.MarkdownStringImpl(tooltip),
|
|
460
|
-
target: event.currentTarget,
|
|
461
|
-
position: 'right'
|
|
462
|
-
});
|
|
463
|
-
}, onMouseUp: event => {
|
|
464
|
-
if (event.button === 2) {
|
|
465
|
-
this.manage(event);
|
|
466
|
-
}
|
|
467
|
-
} },
|
|
468
|
-
iconUrl ?
|
|
469
|
-
React.createElement("img", { className: 'theia-vsx-extension-icon', src: iconUrl }) :
|
|
470
|
-
React.createElement("div", { className: 'theia-vsx-extension-icon placeholder' }),
|
|
471
|
-
React.createElement("div", { className: 'theia-vsx-extension-content' },
|
|
472
|
-
React.createElement("div", { className: 'title' },
|
|
473
|
-
React.createElement("div", { className: 'noWrapInfo' },
|
|
474
|
-
React.createElement("span", { className: 'name' }, displayName),
|
|
475
|
-
"\u00A0",
|
|
476
|
-
React.createElement("span", { className: 'version' },
|
|
477
|
-
VSXExtension.formatVersion(version),
|
|
478
|
-
"\u00A0"),
|
|
479
|
-
disabled && installed && React.createElement("span", { className: 'disabled' },
|
|
480
|
-
"(",
|
|
481
|
-
common_1.nls.localizeByDefault('disabled'),
|
|
482
|
-
")")),
|
|
483
|
-
React.createElement("div", { className: 'stat' },
|
|
484
|
-
!!downloadCount && React.createElement("span", { className: 'download-count' },
|
|
485
|
-
React.createElement("i", { className: (0, browser_1.codicon)('cloud-download') }),
|
|
486
|
-
downloadCompactFormatter.format(downloadCount)),
|
|
487
|
-
!!averageRating && React.createElement("span", { className: 'average-rating' },
|
|
488
|
-
React.createElement("i", { className: (0, browser_1.codicon)('star-full') }),
|
|
489
|
-
averageRatingFormatter(averageRating)))),
|
|
490
|
-
React.createElement("div", { className: 'noWrapInfo theia-vsx-extension-description' }, description),
|
|
491
|
-
React.createElement("div", { className: 'theia-vsx-extension-action-bar' },
|
|
492
|
-
React.createElement("div", { className: 'theia-vsx-extension-publisher-container' },
|
|
493
|
-
verified === true ? (React.createElement("i", { className: (0, browser_1.codicon)('verified-filled') })) : verified === false ? (React.createElement("i", { className: (0, browser_1.codicon)('verified') })) : (React.createElement("i", { className: (0, browser_1.codicon)('question') })),
|
|
494
|
-
React.createElement("span", { className: 'noWrapInfo theia-vsx-extension-publisher' }, publisher)),
|
|
495
|
-
this.renderAction(this.props.host))));
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
exports.VSXExtensionComponent = VSXExtensionComponent;
|
|
499
|
-
class VSXExtensionEditorComponent extends AbstractVSXExtensionComponent {
|
|
500
|
-
constructor() {
|
|
501
|
-
super(...arguments);
|
|
502
|
-
// TODO replace with webview
|
|
503
|
-
this.openLink = (event) => {
|
|
504
|
-
if (!this.body) {
|
|
505
|
-
return;
|
|
506
|
-
}
|
|
507
|
-
const target = event.nativeEvent.target;
|
|
508
|
-
if (!(target instanceof HTMLElement)) {
|
|
509
|
-
return;
|
|
510
|
-
}
|
|
511
|
-
let node = target;
|
|
512
|
-
while (node.tagName.toLowerCase() !== 'a') {
|
|
513
|
-
if (node === this.body) {
|
|
514
|
-
return;
|
|
515
|
-
}
|
|
516
|
-
if (!(node.parentElement instanceof HTMLElement)) {
|
|
517
|
-
return;
|
|
518
|
-
}
|
|
519
|
-
node = node.parentElement;
|
|
520
|
-
}
|
|
521
|
-
const href = node.getAttribute('href');
|
|
522
|
-
if (href && !href.startsWith('#')) {
|
|
523
|
-
event.preventDefault();
|
|
524
|
-
this.props.extension.doOpen(new uri_1.default(href));
|
|
525
|
-
}
|
|
526
|
-
};
|
|
527
|
-
this.openExtension = async (e) => {
|
|
528
|
-
e.stopPropagation();
|
|
529
|
-
e.preventDefault();
|
|
530
|
-
const extension = this.props.extension;
|
|
531
|
-
const uri = await extension.getRegistryLink();
|
|
532
|
-
extension.doOpen(uri);
|
|
533
|
-
};
|
|
534
|
-
this.searchPublisher = (e) => {
|
|
535
|
-
e.stopPropagation();
|
|
536
|
-
e.preventDefault();
|
|
537
|
-
const extension = this.props.extension;
|
|
538
|
-
if (extension.publisher) {
|
|
539
|
-
extension.search.query = extension.publisher;
|
|
540
|
-
}
|
|
541
|
-
};
|
|
542
|
-
this.openPublishedBy = async (e) => {
|
|
543
|
-
e.stopPropagation();
|
|
544
|
-
e.preventDefault();
|
|
545
|
-
const extension = this.props.extension;
|
|
546
|
-
const homepage = extension.publishedBy && extension.publishedBy.homepage;
|
|
547
|
-
if (homepage) {
|
|
548
|
-
extension.doOpen(new uri_1.default(homepage));
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
|
-
this.openAverageRating = async (e) => {
|
|
552
|
-
e.stopPropagation();
|
|
553
|
-
e.preventDefault();
|
|
554
|
-
const extension = this.props.extension;
|
|
555
|
-
const uri = await extension.getRegistryLink('reviews');
|
|
556
|
-
extension.doOpen(uri);
|
|
557
|
-
};
|
|
558
|
-
this.openRepository = (e) => {
|
|
559
|
-
e.stopPropagation();
|
|
560
|
-
e.preventDefault();
|
|
561
|
-
const extension = this.props.extension;
|
|
562
|
-
if (extension.repository) {
|
|
563
|
-
extension.doOpen(new uri_1.default(extension.repository));
|
|
564
|
-
}
|
|
565
|
-
};
|
|
566
|
-
this.openLicense = (e) => {
|
|
567
|
-
e.stopPropagation();
|
|
568
|
-
e.preventDefault();
|
|
569
|
-
const extension = this.props.extension;
|
|
570
|
-
const licenseUrl = extension.licenseUrl;
|
|
571
|
-
if (licenseUrl) {
|
|
572
|
-
extension.doOpen(new uri_1.default(licenseUrl));
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
|
-
}
|
|
576
|
-
get scrollContainer() {
|
|
577
|
-
return this._scrollContainer;
|
|
578
|
-
}
|
|
579
|
-
render() {
|
|
580
|
-
const { builtin, preview, id, iconUrl, publisher, displayName, description, version, averageRating, downloadCount, repository, license, readme } = this.props.extension;
|
|
581
|
-
const sanitizedReadme = !!readme ? DOMPurify.sanitize(readme) : undefined;
|
|
582
|
-
return React.createElement(React.Fragment, null,
|
|
583
|
-
React.createElement("div", { className: 'header', ref: ref => this.header = (ref || undefined) },
|
|
584
|
-
iconUrl ?
|
|
585
|
-
React.createElement("img", { className: 'icon-container', src: iconUrl }) :
|
|
586
|
-
React.createElement("div", { className: 'icon-container placeholder' }),
|
|
587
|
-
React.createElement("div", { className: 'details' },
|
|
588
|
-
React.createElement("div", { className: 'title' },
|
|
589
|
-
React.createElement("span", { title: 'Extension name', className: 'name', onClick: this.openExtension }, displayName),
|
|
590
|
-
React.createElement("span", { title: 'Extension identifier', className: 'identifier' }, id),
|
|
591
|
-
preview && React.createElement("span", { className: 'preview' }, "Preview"),
|
|
592
|
-
builtin && React.createElement("span", { className: 'builtin' }, "Built-in")),
|
|
593
|
-
React.createElement("div", { className: 'subtitle' },
|
|
594
|
-
React.createElement("span", { title: 'Publisher name', className: 'publisher', onClick: this.searchPublisher },
|
|
595
|
-
this.renderNamespaceAccess(),
|
|
596
|
-
publisher),
|
|
597
|
-
!!downloadCount && React.createElement("span", { className: 'download-count', onClick: this.openExtension },
|
|
598
|
-
React.createElement("i", { className: (0, browser_1.codicon)('cloud-download') }),
|
|
599
|
-
downloadFormatter.format(downloadCount)),
|
|
600
|
-
averageRating !== undefined &&
|
|
601
|
-
React.createElement("span", { className: 'average-rating', title: getAverageRatingTitle(averageRating), onClick: this.openAverageRating }, this.renderStars()),
|
|
602
|
-
repository && React.createElement("span", { className: 'repository', onClick: this.openRepository }, "Repository"),
|
|
603
|
-
license && React.createElement("span", { className: 'license', onClick: this.openLicense }, license),
|
|
604
|
-
version && React.createElement("span", { className: 'version' }, VSXExtension.formatVersion(version))),
|
|
605
|
-
React.createElement("div", { className: 'description noWrapInfo' }, description),
|
|
606
|
-
this.renderAction())),
|
|
607
|
-
sanitizedReadme &&
|
|
608
|
-
React.createElement("div", { className: 'scroll-container', ref: ref => this._scrollContainer = (ref || undefined) },
|
|
609
|
-
React.createElement("div", { className: 'body', ref: ref => this.body = (ref || undefined), onClick: this.openLink,
|
|
610
|
-
// eslint-disable-next-line react/no-danger
|
|
611
|
-
dangerouslySetInnerHTML: { __html: sanitizedReadme } })));
|
|
612
|
-
}
|
|
613
|
-
renderNamespaceAccess() {
|
|
614
|
-
const { publisher, namespaceAccess, publishedBy } = this.props.extension;
|
|
615
|
-
if (namespaceAccess === undefined) {
|
|
616
|
-
return undefined;
|
|
617
|
-
}
|
|
618
|
-
let tooltip = publishedBy ? ` Published by "${publishedBy.loginName}".` : '';
|
|
619
|
-
let icon;
|
|
620
|
-
if (namespaceAccess === 'public') {
|
|
621
|
-
icon = 'globe';
|
|
622
|
-
tooltip = `Everyone can publish to "${publisher}" namespace.` + tooltip;
|
|
623
|
-
}
|
|
624
|
-
else {
|
|
625
|
-
icon = 'shield';
|
|
626
|
-
tooltip = `Only verified owners can publish to "${publisher}" namespace.` + tooltip;
|
|
627
|
-
}
|
|
628
|
-
return React.createElement("i", { className: `${(0, browser_1.codicon)(icon)} namespace-access`, title: tooltip, onClick: this.openPublishedBy });
|
|
629
|
-
}
|
|
630
|
-
renderStars() {
|
|
631
|
-
const rating = this.props.extension.averageRating || 0;
|
|
632
|
-
const renderStarAt = (position) => position <= rating ?
|
|
633
|
-
React.createElement("i", { className: (0, browser_1.codicon)('star-full') }) :
|
|
634
|
-
position > rating && position - rating < 1 ?
|
|
635
|
-
React.createElement("i", { className: (0, browser_1.codicon)('star-half') }) :
|
|
636
|
-
React.createElement("i", { className: (0, browser_1.codicon)('star-empty') });
|
|
637
|
-
return React.createElement(React.Fragment, null,
|
|
638
|
-
renderStarAt(1),
|
|
639
|
-
renderStarAt(2),
|
|
640
|
-
renderStarAt(3),
|
|
641
|
-
renderStarAt(4),
|
|
642
|
-
renderStarAt(5));
|
|
643
|
-
}
|
|
644
|
-
}
|
|
645
|
-
exports.VSXExtensionEditorComponent = VSXExtensionEditorComponent;
|
|
646
|
-
//# sourceMappingURL=vsx-extension.js.map
|