@theia/cli 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/download-plugins.d.ts +0 -1
- package/lib/download-plugins.d.ts.map +1 -1
- package/lib/download-plugins.js +45 -62
- package/lib/download-plugins.js.map +1 -1
- package/lib/theia.js +43 -2
- package/lib/theia.js.map +1 -1
- package/package.json +6 -5
- package/src/download-plugins.ts +47 -65
- package/src/theia.ts +50 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-plugins.d.ts","sourceRoot":"","sources":["../src/download-plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAIlF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,KAAK,CAAC,CAAC;QAEb,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAC5B;CACJ;AAOD,OAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"download-plugins.d.ts","sourceRoot":"","sources":["../src/download-plugins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;kFAckF;AAIlF,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,KAAK,CAAC,CAAC;QAEb,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAC5B;CACJ;AAOD,OAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAY1D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAA8B,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFjG;AA8FD;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAO5E"}
|
package/lib/download-plugins.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
|
16
16
|
********************************************************************************/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.xfetch =
|
|
18
|
+
exports.xfetch = void 0;
|
|
19
19
|
const ovsx_client_1 = require("@theia/ovsx-client/lib/ovsx-client");
|
|
20
20
|
const safe_1 = require("colors/safe");
|
|
21
21
|
const decompress = require("decompress");
|
|
@@ -27,11 +27,11 @@ const proxy_from_env_1 = require("proxy-from-env");
|
|
|
27
27
|
const stream = require("stream");
|
|
28
28
|
const temp = require("temp");
|
|
29
29
|
const util_1 = require("util");
|
|
30
|
+
const api_1 = require("@theia/application-package/lib/api");
|
|
30
31
|
const pipelineAsPromised = util_1.promisify(stream.pipeline);
|
|
31
32
|
temp.track();
|
|
32
|
-
exports.extensionPackCacheName = '.packs';
|
|
33
33
|
async function downloadPlugins(options = {}) {
|
|
34
|
-
const { packed = false, ignoreErrors = false, apiVersion =
|
|
34
|
+
const { packed = false, ignoreErrors = false, apiVersion = api_1.DEFAULT_SUPPORTED_API_VERSION, apiUrl = 'https://open-vsx.org/api' } = options;
|
|
35
35
|
// Collect the list of failures to be appended at the end of the script.
|
|
36
36
|
const failures = [];
|
|
37
37
|
// Resolve the `package.json` at the current working directory.
|
|
@@ -46,18 +46,12 @@ async function downloadPlugins(options = {}) {
|
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
try {
|
|
49
|
-
// Retrieve the cached extension-packs in order to not re-download them.
|
|
50
|
-
const extensionPackCachePath = path.resolve(pluginsDir, exports.extensionPackCacheName);
|
|
51
|
-
const cachedExtensionPacks = new Set(fs_1.existsSync(extensionPackCachePath)
|
|
52
|
-
? await fs_1.promises.readdir(extensionPackCachePath)
|
|
53
|
-
: []);
|
|
54
49
|
console.warn('--- downloading plugins ---');
|
|
55
50
|
// Download the raw plugins defined by the `theiaPlugins` property.
|
|
56
51
|
// This will include both "normal" plugins as well as "extension packs".
|
|
57
52
|
const downloads = [];
|
|
58
53
|
for (const [plugin, pluginUrl] of Object.entries(pck.theiaPlugins)) {
|
|
59
|
-
|
|
60
|
-
if (cachedExtensionPacks.has(plugin) || typeof pluginUrl !== 'string') {
|
|
54
|
+
if (typeof pluginUrl !== 'string') {
|
|
61
55
|
continue;
|
|
62
56
|
}
|
|
63
57
|
downloads.push(downloadPluginAsync(failures, plugin, pluginUrl, pluginsDir, packed));
|
|
@@ -66,10 +60,7 @@ async function downloadPlugins(options = {}) {
|
|
|
66
60
|
console.warn('--- collecting extension-packs ---');
|
|
67
61
|
const extensionPacks = await collectExtensionPacks(pluginsDir, excludedIds);
|
|
68
62
|
if (extensionPacks.size > 0) {
|
|
69
|
-
console.warn(`---
|
|
70
|
-
// Move extension-packs to `.packs`
|
|
71
|
-
await cacheExtensionPacks(pluginsDir, extensionPacks);
|
|
72
|
-
console.warn('--- resolving extension-packs ---');
|
|
63
|
+
console.warn(`--- resolving ${extensionPacks.size} extension-packs ---`);
|
|
73
64
|
const client = new ovsx_client_1.OVSXClient({ apiVersion, apiUrl });
|
|
74
65
|
// De-duplicate extension ids to only download each once:
|
|
75
66
|
const ids = new Set(Array.from(extensionPacks.values()).flat());
|
|
@@ -77,7 +68,22 @@ async function downloadPlugins(options = {}) {
|
|
|
77
68
|
const extension = await client.getLatestCompatibleExtensionVersion(id);
|
|
78
69
|
const downloadUrl = extension === null || extension === void 0 ? void 0 : extension.files.download;
|
|
79
70
|
if (downloadUrl) {
|
|
80
|
-
await downloadPluginAsync(failures, id, downloadUrl, pluginsDir, packed);
|
|
71
|
+
await downloadPluginAsync(failures, id, downloadUrl, pluginsDir, packed, extension === null || extension === void 0 ? void 0 : extension.version);
|
|
72
|
+
}
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
console.warn('--- collecting extension dependencies ---');
|
|
76
|
+
const pluginDependencies = await collectPluginDependencies(pluginsDir, excludedIds);
|
|
77
|
+
if (pluginDependencies.length > 0) {
|
|
78
|
+
console.warn(`--- resolving ${pluginDependencies.length} extension dependencies ---`);
|
|
79
|
+
const client = new ovsx_client_1.OVSXClient({ apiVersion, apiUrl });
|
|
80
|
+
// De-duplicate extension ids to only download each once:
|
|
81
|
+
const ids = new Set(pluginDependencies);
|
|
82
|
+
await Promise.all(Array.from(ids, async (id) => {
|
|
83
|
+
const extension = await client.getLatestCompatibleExtensionVersion(id);
|
|
84
|
+
const downloadUrl = extension === null || extension === void 0 ? void 0 : extension.files.download;
|
|
85
|
+
if (downloadUrl) {
|
|
86
|
+
await downloadPluginAsync(failures, id, downloadUrl, pluginsDir, packed, extension === null || extension === void 0 ? void 0 : extension.version);
|
|
81
87
|
}
|
|
82
88
|
}));
|
|
83
89
|
}
|
|
@@ -102,7 +108,7 @@ exports.default = downloadPlugins;
|
|
|
102
108
|
* @param packed whether to decompress or not.
|
|
103
109
|
* @param cachedExtensionPacks the list of cached extension packs already downloaded.
|
|
104
110
|
*/
|
|
105
|
-
async function downloadPluginAsync(failures, plugin, pluginUrl, pluginsDir, packed) {
|
|
111
|
+
async function downloadPluginAsync(failures, plugin, pluginUrl, pluginsDir, packed, version) {
|
|
106
112
|
if (!plugin) {
|
|
107
113
|
return;
|
|
108
114
|
}
|
|
@@ -171,7 +177,7 @@ async function downloadPluginAsync(failures, plugin, pluginUrl, pluginsDir, pack
|
|
|
171
177
|
await pipelineAsPromised(response.body, tempFile);
|
|
172
178
|
await decompress(tempFile.path, targetPath);
|
|
173
179
|
}
|
|
174
|
-
console.warn(safe_1.green(`+ ${plugin}: downloaded successfully ${attempts > 1 ? `(after ${attempts} attempts)` : ''}`));
|
|
180
|
+
console.warn(safe_1.green(`+ ${plugin}${version ? `@${version}` : ''}: downloaded successfully ${attempts > 1 ? `(after ${attempts} attempts)` : ''}`));
|
|
175
181
|
}
|
|
176
182
|
/**
|
|
177
183
|
* Determine if the resource for the given path is already downloaded.
|
|
@@ -205,8 +211,7 @@ async function collectPackageJsonPaths(pluginDir) {
|
|
|
205
211
|
// Recursively fetch the list of extension `package.json` files.
|
|
206
212
|
for (const file of files) {
|
|
207
213
|
const filePath = path.join(pluginDir, file);
|
|
208
|
-
|
|
209
|
-
if (!filePath.startsWith(exports.extensionPackCacheName) && (await fs_1.promises.stat(filePath)).isDirectory()) {
|
|
214
|
+
if ((await fs_1.promises.stat(filePath)).isDirectory()) {
|
|
210
215
|
packageJsonPathList.push(...await collectPackageJsonPaths(filePath));
|
|
211
216
|
}
|
|
212
217
|
else if (path.basename(filePath) === 'package.json' && !path.dirname(filePath).includes('node_modules')) {
|
|
@@ -228,7 +233,7 @@ async function collectExtensionPacks(pluginDir, excludedIds) {
|
|
|
228
233
|
await Promise.all(packageJsonPaths.map(async (packageJsonPath) => {
|
|
229
234
|
const json = JSON.parse(await fs_1.promises.readFile(packageJsonPath, 'utf8'));
|
|
230
235
|
const extensionPack = json.extensionPack;
|
|
231
|
-
if (
|
|
236
|
+
if (Array.isArray(extensionPack)) {
|
|
232
237
|
extensionPackPaths.set(packageJsonPath, extensionPack.filter(id => {
|
|
233
238
|
if (excludedIds.has(id)) {
|
|
234
239
|
console.log(safe_1.yellow(`'${id}' referenced by '${json.name}' (ext pack) is excluded because of 'theiaPluginsExcludeIds'`));
|
|
@@ -241,51 +246,29 @@ async function collectExtensionPacks(pluginDir, excludedIds) {
|
|
|
241
246
|
return extensionPackPaths;
|
|
242
247
|
}
|
|
243
248
|
/**
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
* By moving the packs to a subdirectory it should make it invisible to the plugin system, only leaving
|
|
251
|
-
* the plugins that were installed under `pluginsDir` directly.
|
|
252
|
-
*
|
|
253
|
-
* @param extensionPacksPaths the list of extension-pack paths.
|
|
249
|
+
* Get the mapping of paths and their included plugin ids.
|
|
250
|
+
* - If an extension-pack references an explicitly excluded `id` the `id` will be omitted.
|
|
251
|
+
* @param pluginDir the plugin directory.
|
|
252
|
+
* @param excludedIds the list of plugin ids to exclude.
|
|
253
|
+
* @returns the mapping of extension-pack paths and their included plugin ids.
|
|
254
254
|
*/
|
|
255
|
-
async function
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
await Promise.all(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
if (
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
255
|
+
async function collectPluginDependencies(pluginDir, excludedIds) {
|
|
256
|
+
const dependencyIds = [];
|
|
257
|
+
const packageJsonPaths = await collectPackageJsonPaths(pluginDir);
|
|
258
|
+
await Promise.all(packageJsonPaths.map(async (packageJsonPath) => {
|
|
259
|
+
const json = JSON.parse(await fs_1.promises.readFile(packageJsonPath, 'utf8'));
|
|
260
|
+
const extensionDependencies = json.extensionDependencies;
|
|
261
|
+
if (Array.isArray(extensionDependencies)) {
|
|
262
|
+
for (const dependency of extensionDependencies) {
|
|
263
|
+
if (excludedIds.has(dependency)) {
|
|
264
|
+
console.log(safe_1.yellow(`'${dependency}' referenced by '${json.name}' is excluded because of 'theiaPluginsExcludeIds'`));
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
dependencyIds.push(dependency);
|
|
268
|
+
}
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
console.error(error);
|
|
273
|
-
}
|
|
274
271
|
}));
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Walk back to the root of an extension starting from its `package.json`. e.g.
|
|
278
|
-
*
|
|
279
|
-
* ```ts
|
|
280
|
-
* getExtensionRoot('/a/b/c', '/a/b/c/EXT/d/e/f/package.json') === '/a/b/c/EXT'
|
|
281
|
-
* ```
|
|
282
|
-
*/
|
|
283
|
-
function getExtensionRoot(root, packageJsonPath) {
|
|
284
|
-
root = path.resolve(root);
|
|
285
|
-
packageJsonPath = path.resolve(packageJsonPath);
|
|
286
|
-
if (!packageJsonPath.startsWith(root)) {
|
|
287
|
-
throw new Error(`unexpected paths:\n root: ${root}\n package.json: ${packageJsonPath}`);
|
|
288
|
-
}
|
|
289
|
-
return packageJsonPath.substr(0, packageJsonPath.indexOf(path.sep, root.length + 1));
|
|
272
|
+
return dependencyIds;
|
|
290
273
|
}
|
|
291
274
|
//# sourceMappingURL=download-plugins.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-plugins.js","sourceRoot":"","sources":["../src/download-plugins.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;AAWlF,oEAAgE;AAChE,sCAAiD;AACjD,yCAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"download-plugins.js","sourceRoot":"","sources":["../src/download-plugins.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;;AAWlF,oEAAgE;AAChE,sCAAiD;AACjD,yCAAyC;AACzC,2BAAuD;AACvD,yDAAoD;AACpD,2CAA0D;AAC1D,6BAA6B;AAC7B,mDAAgD;AAChD,iCAAiC;AACjC,6BAA6B;AAC7B,+BAAiC;AACjC,4DAAmF;AAEnF,MAAM,kBAAkB,GAAG,gBAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEtD,IAAI,CAAC,KAAK,EAAE,CAAC;AA8BE,KAAK,UAAU,eAAe,CAAC,UAAkC,EAAE;IAC9E,MAAM,EACF,MAAM,GAAG,KAAK,EACd,YAAY,GAAG,KAAK,EACpB,UAAU,GAAG,mCAA6B,EAC1C,MAAM,GAAG,0BAA0B,EACtC,GAAG,OAAO,CAAC;IAEZ,wEAAwE;IACxE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,+DAA+D;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAEhF,2DAA2D;IAC3D,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,IAAI,SAAS,CAAC;IAEpD,0BAA0B;IAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAEtE,MAAM,aAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACnB,OAAO,CAAC,GAAG,CAAC,UAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACxE,OAAO;KACV;IACD,IAAI;QACA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC5C,mEAAmE;QACnE,wEAAwE;QACxE,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAChE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;gBAC/B,SAAS;aACZ;YACD,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;SACxF;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE7B,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC5E,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;YACzB,OAAO,CAAC,IAAI,CAAC,iBAAiB,cAAc,CAAC,IAAI,sBAAsB,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,IAAI,wBAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;YACtD,yDAAyD;YACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;gBACzC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;gBACvE,MAAM,WAAW,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,QAAQ,CAAC;gBAC9C,IAAI,WAAW,EAAE;oBACb,MAAM,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,CAAC,CAAC;iBAChG;YACL,CAAC,CAAC,CAAC,CAAC;SACP;QAED,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC1D,MAAM,kBAAkB,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACpF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,OAAO,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,MAAM,6BAA6B,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,IAAI,wBAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;YACtD,yDAAyD;YACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,kBAAkB,CAAC,CAAC;YAChD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;gBACzC,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;gBACvE,MAAM,WAAW,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,QAAQ,CAAC;gBAC9C,IAAI,WAAW,EAAE;oBACb,MAAM,mBAAmB,CAAC,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,CAAC,CAAC;iBAChG;YACL,CAAC,CAAC,CAAC,CAAC;SACP;KAEJ;YAAS;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC1B;IACD,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;KACnH;AACL,CAAC;AAhFD,kCAgFC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,mBAAmB,CAAC,QAAkB,EAAE,MAAc,EAAE,SAAiB,EAAE,UAAkB,EAAE,MAAe,EAAE,OAAgB;IAC3I,IAAI,CAAC,MAAM,EAAE;QACT,OAAO;KACV;IACD,IAAI,OAAe,CAAC;IACpB,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAC9B,OAAO,GAAG,SAAS,CAAC;KACvB;SAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACnC,OAAO,GAAG,OAAO,CAAC;KACrB;SAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACpC,OAAO,GAAG,QAAQ,CAAC,CAAC,iBAAiB;KACxC;SAAM;QACH,QAAQ,CAAC,IAAI,CAAC,UAAG,CAAC,WAAW,MAAM,oCAAoC,SAAS,GAAG,CAAC,CAAC,CAAC;QACtF,OAAO;KACV;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1F,sDAAsD;IACtD,IAAI,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE;QAChC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,iCAAiC,CAAC,CAAC;QAChE,OAAO;KACV;IAED,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,UAAU,GAAG,IAAI,CAAC;IAExB,IAAI,QAAgB,CAAC;IACrB,IAAI,SAA4B,CAAC;IACjC,IAAI,QAA8B,CAAC;IAEnC,KAAK,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,QAAQ,EAAE,EAAE;QACnD,IAAI,QAAQ,GAAG,CAAC,EAAE;YACd,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;SACjE;QACD,SAAS,GAAG,SAAS,CAAC;QACtB,IAAI;YACA,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;SACtC;QAAC,OAAO,KAAK,EAAE;YACZ,SAAS,GAAG,KAAK,CAAC;YAClB,SAAS;SACZ;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;QAChE,IAAI,CAAC,KAAK,EAAE;YACR,MAAM;SACT;KACJ;IACD,IAAI,SAAS,EAAE;QACX,QAAQ,CAAC,IAAI,CAAC,UAAG,CAAC,KAAK,MAAM,uCAAuC,SAAS,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO;KACV;IACD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;QACjC,QAAQ,CAAC,IAAI,CAAC,UAAG,CAAC,KAAK,MAAM,uCAAuC,CAAC,CAAC,CAAC;QACvE,OAAO;KACV;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;QACzB,QAAQ,CAAC,IAAI,CAAC,UAAG,CAAC,KAAK,MAAM,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACtG,OAAO;KACV;IAED,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI,MAAM,KAAK,IAAI,EAAE;QAClE,wCAAwC;QACxC,MAAM,IAAI,GAAG,sBAAiB,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACjD;SAAM;QACH,MAAM,aAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;QACjE,MAAM,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClD,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KAC/C;IAED,OAAO,CAAC,IAAI,CAAC,YAAK,CAAC,KAAK,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,6BAA6B,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,QAAQ,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACrJ,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,YAAY,CAAC,QAAgB;IACxC,OAAO,aAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAgB,MAAM,CAAC,GAAW,EAAE,OAAqB;IACrD,MAAM,cAAc,qBAAqB,OAAO,CAAE,CAAC;IACnD,MAAM,KAAK,GAAG,+BAAc,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE;QACvC,cAAc,CAAC,KAAK,GAAG,IAAI,mCAAe,CAAC,KAAK,CAAC,CAAC;KACrD;IACD,OAAO,oBAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACtC,CAAC;AAPD,wBAOC;AAED;;;;GAIG;AACH,KAAK,UAAU,uBAAuB,CAAC,SAAiB;IACpD,MAAM,mBAAmB,GAAa,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,gEAAgE;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,aAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;YACzC,mBAAmB,CAAC,IAAI,CAAC,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;SACxE;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACvG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtC;KACJ;IACD,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,WAAwB;IAC5E,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAC,eAAe,EAAC,EAAE;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACpE,MAAM,aAAa,GAAY,IAAI,CAAC,aAAa,CAAC;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YAC9B,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC9D,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBACrB,OAAO,CAAC,GAAG,CAAC,aAAM,CAAC,IAAI,EAAE,oBAAoB,IAAI,CAAC,IAAI,8DAA8D,CAAC,CAAC,CAAC;oBACvH,OAAO,KAAK,CAAC,CAAC,SAAS;iBAC1B;gBACD,OAAO,IAAI,CAAC,CAAC,OAAO;YACxB,CAAC,CAAC,CAAC,CAAC;SACP;IACL,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,kBAAkB,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,yBAAyB,CAAC,SAAiB,EAAE,WAAwB;IAChF,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAClE,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAC,eAAe,EAAC,EAAE;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACpE,MAAM,qBAAqB,GAAY,IAAI,CAAC,qBAAqB,CAAC;QAClE,IAAI,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;YACtC,KAAK,MAAM,UAAU,IAAI,qBAAqB,EAAE;gBAC5C,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;oBAC7B,OAAO,CAAC,GAAG,CAAC,aAAM,CAAC,IAAI,UAAU,oBAAoB,IAAI,CAAC,IAAI,mDAAmD,CAAC,CAAC,CAAC;iBACvH;qBAAM;oBACH,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAClC;aACJ;SACJ;IACL,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,aAAa,CAAC;AACzB,CAAC"}
|
package/lib/theia.js
CHANGED
|
@@ -19,9 +19,11 @@ const temp = require("temp");
|
|
|
19
19
|
const yargs = require("yargs");
|
|
20
20
|
const yargsFactory = require("yargs/yargs");
|
|
21
21
|
const application_manager_1 = require("@theia/application-manager");
|
|
22
|
+
const application_package_1 = require("@theia/application-package");
|
|
22
23
|
const check_hoisting_1 = require("./check-hoisting");
|
|
23
24
|
const download_plugins_1 = require("./download-plugins");
|
|
24
25
|
const run_test_1 = require("./run-test");
|
|
26
|
+
const localization_manager_1 = require("@theia/localization-manager");
|
|
25
27
|
process.on('unhandledRejection', (reason, promise) => {
|
|
26
28
|
throw reason;
|
|
27
29
|
});
|
|
@@ -183,7 +185,7 @@ function theiaCli() {
|
|
|
183
185
|
'api-version': {
|
|
184
186
|
alias: 'v',
|
|
185
187
|
describe: 'Supported API version for plugins',
|
|
186
|
-
default:
|
|
188
|
+
default: application_package_1.DEFAULT_SUPPORTED_API_VERSION
|
|
187
189
|
},
|
|
188
190
|
'api-url': {
|
|
189
191
|
alias: 'u',
|
|
@@ -194,7 +196,46 @@ function theiaCli() {
|
|
|
194
196
|
handler: async ({ packed }) => {
|
|
195
197
|
await download_plugins_1.default({ packed });
|
|
196
198
|
},
|
|
197
|
-
})
|
|
199
|
+
})
|
|
200
|
+
.command({
|
|
201
|
+
command: 'nls-extract',
|
|
202
|
+
describe: 'Extract translation key/value pairs from source code',
|
|
203
|
+
builder: {
|
|
204
|
+
'output': {
|
|
205
|
+
alias: 'o',
|
|
206
|
+
describe: 'Output file for the extracted translations',
|
|
207
|
+
demandOption: true
|
|
208
|
+
},
|
|
209
|
+
'root': {
|
|
210
|
+
alias: 'r',
|
|
211
|
+
describe: 'The directory which contains the source code',
|
|
212
|
+
default: '.'
|
|
213
|
+
},
|
|
214
|
+
'merge': {
|
|
215
|
+
alias: 'm',
|
|
216
|
+
describe: 'Whether to merge new with existing translation values',
|
|
217
|
+
boolean: true,
|
|
218
|
+
default: false
|
|
219
|
+
},
|
|
220
|
+
'exclude': {
|
|
221
|
+
alias: 'e',
|
|
222
|
+
describe: 'Allows to exclude translation keys starting with this value'
|
|
223
|
+
},
|
|
224
|
+
'files': {
|
|
225
|
+
alias: 'f',
|
|
226
|
+
describe: 'Glob pattern matching the files to extract from (starting from --root).',
|
|
227
|
+
array: true
|
|
228
|
+
},
|
|
229
|
+
'logs': {
|
|
230
|
+
alias: 'l',
|
|
231
|
+
describe: 'File path to a log file'
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
handler: async (options) => {
|
|
235
|
+
await localization_manager_1.extract(options);
|
|
236
|
+
}
|
|
237
|
+
})
|
|
238
|
+
.command({
|
|
198
239
|
command: 'test [theia-args...]',
|
|
199
240
|
builder: {
|
|
200
241
|
'test-inspect': {
|
package/lib/theia.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theia.js","sourceRoot":"","sources":["../src/theia.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;kFAckF;;AAElF,6BAA6B;AAC7B,+BAA+B;AAC/B,4CAA6C;AAC7C,oEAAgF;
|
|
1
|
+
{"version":3,"file":"theia.js","sourceRoot":"","sources":["../src/theia.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.19.0",
|
|
4
4
|
"description": "Theia CLI.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -29,9 +29,10 @@
|
|
|
29
29
|
"clean": "theiaext clean"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@theia/application-manager": "1.
|
|
33
|
-
"@theia/application-package": "1.
|
|
34
|
-
"@theia/
|
|
32
|
+
"@theia/application-manager": "1.19.0",
|
|
33
|
+
"@theia/application-package": "1.19.0",
|
|
34
|
+
"@theia/localization-manager": "1.19.0",
|
|
35
|
+
"@theia/ovsx-client": "1.19.0",
|
|
35
36
|
"@types/chai": "^4.2.7",
|
|
36
37
|
"@types/mkdirp": "^0.5.2",
|
|
37
38
|
"@types/mocha": "^5.2.7",
|
|
@@ -54,5 +55,5 @@
|
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@types/proxy-from-env": "^1.0.1"
|
|
56
57
|
},
|
|
57
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "cebb5417bb40e320178e3a4e66070af514f0525f"
|
|
58
59
|
}
|
package/src/download-plugins.ts
CHANGED
|
@@ -26,7 +26,7 @@ declare global {
|
|
|
26
26
|
import { OVSXClient } from '@theia/ovsx-client/lib/ovsx-client';
|
|
27
27
|
import { green, red, yellow } from 'colors/safe';
|
|
28
28
|
import * as decompress from 'decompress';
|
|
29
|
-
import { createWriteStream,
|
|
29
|
+
import { createWriteStream, promises as fs } from 'fs';
|
|
30
30
|
import { HttpsProxyAgent } from 'https-proxy-agent';
|
|
31
31
|
import fetch, { RequestInit, Response } from 'node-fetch';
|
|
32
32
|
import * as path from 'path';
|
|
@@ -34,13 +34,12 @@ import { getProxyForUrl } from 'proxy-from-env';
|
|
|
34
34
|
import * as stream from 'stream';
|
|
35
35
|
import * as temp from 'temp';
|
|
36
36
|
import { promisify } from 'util';
|
|
37
|
+
import { DEFAULT_SUPPORTED_API_VERSION } from '@theia/application-package/lib/api';
|
|
37
38
|
|
|
38
39
|
const pipelineAsPromised = promisify(stream.pipeline);
|
|
39
40
|
|
|
40
41
|
temp.track();
|
|
41
42
|
|
|
42
|
-
export const extensionPackCacheName = '.packs';
|
|
43
|
-
|
|
44
43
|
/**
|
|
45
44
|
* Available options when downloading.
|
|
46
45
|
*/
|
|
@@ -73,7 +72,7 @@ export default async function downloadPlugins(options: DownloadPluginsOptions =
|
|
|
73
72
|
const {
|
|
74
73
|
packed = false,
|
|
75
74
|
ignoreErrors = false,
|
|
76
|
-
apiVersion =
|
|
75
|
+
apiVersion = DEFAULT_SUPPORTED_API_VERSION,
|
|
77
76
|
apiUrl = 'https://open-vsx.org/api'
|
|
78
77
|
} = options;
|
|
79
78
|
|
|
@@ -96,32 +95,22 @@ export default async function downloadPlugins(options: DownloadPluginsOptions =
|
|
|
96
95
|
return;
|
|
97
96
|
}
|
|
98
97
|
try {
|
|
99
|
-
// Retrieve the cached extension-packs in order to not re-download them.
|
|
100
|
-
const extensionPackCachePath = path.resolve(pluginsDir, extensionPackCacheName);
|
|
101
|
-
const cachedExtensionPacks = new Set<string>(
|
|
102
|
-
existsSync(extensionPackCachePath)
|
|
103
|
-
? await fs.readdir(extensionPackCachePath)
|
|
104
|
-
: []
|
|
105
|
-
);
|
|
106
98
|
console.warn('--- downloading plugins ---');
|
|
107
99
|
// Download the raw plugins defined by the `theiaPlugins` property.
|
|
108
100
|
// This will include both "normal" plugins as well as "extension packs".
|
|
109
101
|
const downloads = [];
|
|
110
102
|
for (const [plugin, pluginUrl] of Object.entries(pck.theiaPlugins)) {
|
|
111
|
-
|
|
112
|
-
if (cachedExtensionPacks.has(plugin) || typeof pluginUrl !== 'string') {
|
|
103
|
+
if (typeof pluginUrl !== 'string') {
|
|
113
104
|
continue;
|
|
114
105
|
}
|
|
115
106
|
downloads.push(downloadPluginAsync(failures, plugin, pluginUrl, pluginsDir, packed));
|
|
116
107
|
}
|
|
117
108
|
await Promise.all(downloads);
|
|
109
|
+
|
|
118
110
|
console.warn('--- collecting extension-packs ---');
|
|
119
111
|
const extensionPacks = await collectExtensionPacks(pluginsDir, excludedIds);
|
|
120
112
|
if (extensionPacks.size > 0) {
|
|
121
|
-
console.warn(`---
|
|
122
|
-
// Move extension-packs to `.packs`
|
|
123
|
-
await cacheExtensionPacks(pluginsDir, extensionPacks);
|
|
124
|
-
console.warn('--- resolving extension-packs ---');
|
|
113
|
+
console.warn(`--- resolving ${extensionPacks.size} extension-packs ---`);
|
|
125
114
|
const client = new OVSXClient({ apiVersion, apiUrl });
|
|
126
115
|
// De-duplicate extension ids to only download each once:
|
|
127
116
|
const ids = new Set<string>(Array.from(extensionPacks.values()).flat());
|
|
@@ -129,10 +118,27 @@ export default async function downloadPlugins(options: DownloadPluginsOptions =
|
|
|
129
118
|
const extension = await client.getLatestCompatibleExtensionVersion(id);
|
|
130
119
|
const downloadUrl = extension?.files.download;
|
|
131
120
|
if (downloadUrl) {
|
|
132
|
-
await downloadPluginAsync(failures, id, downloadUrl, pluginsDir, packed);
|
|
121
|
+
await downloadPluginAsync(failures, id, downloadUrl, pluginsDir, packed, extension?.version);
|
|
133
122
|
}
|
|
134
123
|
}));
|
|
135
124
|
}
|
|
125
|
+
|
|
126
|
+
console.warn('--- collecting extension dependencies ---');
|
|
127
|
+
const pluginDependencies = await collectPluginDependencies(pluginsDir, excludedIds);
|
|
128
|
+
if (pluginDependencies.length > 0) {
|
|
129
|
+
console.warn(`--- resolving ${pluginDependencies.length} extension dependencies ---`);
|
|
130
|
+
const client = new OVSXClient({ apiVersion, apiUrl });
|
|
131
|
+
// De-duplicate extension ids to only download each once:
|
|
132
|
+
const ids = new Set<string>(pluginDependencies);
|
|
133
|
+
await Promise.all(Array.from(ids, async id => {
|
|
134
|
+
const extension = await client.getLatestCompatibleExtensionVersion(id);
|
|
135
|
+
const downloadUrl = extension?.files.download;
|
|
136
|
+
if (downloadUrl) {
|
|
137
|
+
await downloadPluginAsync(failures, id, downloadUrl, pluginsDir, packed, extension?.version);
|
|
138
|
+
}
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
|
|
136
142
|
} finally {
|
|
137
143
|
temp.cleanupSync();
|
|
138
144
|
}
|
|
@@ -153,7 +159,7 @@ export default async function downloadPlugins(options: DownloadPluginsOptions =
|
|
|
153
159
|
* @param packed whether to decompress or not.
|
|
154
160
|
* @param cachedExtensionPacks the list of cached extension packs already downloaded.
|
|
155
161
|
*/
|
|
156
|
-
async function downloadPluginAsync(failures: string[], plugin: string, pluginUrl: string, pluginsDir: string, packed: boolean): Promise<void> {
|
|
162
|
+
async function downloadPluginAsync(failures: string[], plugin: string, pluginUrl: string, pluginsDir: string, packed: boolean, version?: string): Promise<void> {
|
|
157
163
|
if (!plugin) {
|
|
158
164
|
return;
|
|
159
165
|
}
|
|
@@ -223,7 +229,7 @@ async function downloadPluginAsync(failures: string[], plugin: string, pluginUrl
|
|
|
223
229
|
await decompress(tempFile.path, targetPath);
|
|
224
230
|
}
|
|
225
231
|
|
|
226
|
-
console.warn(green(`+ ${plugin}: downloaded successfully ${attempts > 1 ? `(after ${attempts} attempts)` : ''}`));
|
|
232
|
+
console.warn(green(`+ ${plugin}${version ? `@${version}` : ''}: downloaded successfully ${attempts > 1 ? `(after ${attempts} attempts)` : ''}`));
|
|
227
233
|
}
|
|
228
234
|
|
|
229
235
|
/**
|
|
@@ -259,8 +265,7 @@ async function collectPackageJsonPaths(pluginDir: string): Promise<string[]> {
|
|
|
259
265
|
// Recursively fetch the list of extension `package.json` files.
|
|
260
266
|
for (const file of files) {
|
|
261
267
|
const filePath = path.join(pluginDir, file);
|
|
262
|
-
|
|
263
|
-
if (!filePath.startsWith(extensionPackCacheName) && (await fs.stat(filePath)).isDirectory()) {
|
|
268
|
+
if ((await fs.stat(filePath)).isDirectory()) {
|
|
264
269
|
packageJsonPathList.push(...await collectPackageJsonPaths(filePath));
|
|
265
270
|
} else if (path.basename(filePath) === 'package.json' && !path.dirname(filePath).includes('node_modules')) {
|
|
266
271
|
packageJsonPathList.push(filePath);
|
|
@@ -282,7 +287,7 @@ async function collectExtensionPacks(pluginDir: string, excludedIds: Set<string>
|
|
|
282
287
|
await Promise.all(packageJsonPaths.map(async packageJsonPath => {
|
|
283
288
|
const json = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
|
284
289
|
const extensionPack: unknown = json.extensionPack;
|
|
285
|
-
if (
|
|
290
|
+
if (Array.isArray(extensionPack)) {
|
|
286
291
|
extensionPackPaths.set(packageJsonPath, extensionPack.filter(id => {
|
|
287
292
|
if (excludedIds.has(id)) {
|
|
288
293
|
console.log(yellow(`'${id}' referenced by '${json.name}' (ext pack) is excluded because of 'theiaPluginsExcludeIds'`));
|
|
@@ -296,50 +301,27 @@ async function collectExtensionPacks(pluginDir: string, excludedIds: Set<string>
|
|
|
296
301
|
}
|
|
297
302
|
|
|
298
303
|
/**
|
|
299
|
-
*
|
|
300
|
-
*
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
* By moving the packs to a subdirectory it should make it invisible to the plugin system, only leaving
|
|
306
|
-
* the plugins that were installed under `pluginsDir` directly.
|
|
307
|
-
*
|
|
308
|
-
* @param extensionPacksPaths the list of extension-pack paths.
|
|
304
|
+
* Get the mapping of paths and their included plugin ids.
|
|
305
|
+
* - If an extension-pack references an explicitly excluded `id` the `id` will be omitted.
|
|
306
|
+
* @param pluginDir the plugin directory.
|
|
307
|
+
* @param excludedIds the list of plugin ids to exclude.
|
|
308
|
+
* @returns the mapping of extension-pack paths and their included plugin ids.
|
|
309
309
|
*/
|
|
310
|
-
async function
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
await Promise.all(
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
if (
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
await fs.rename(oldPath, newPath);
|
|
310
|
+
async function collectPluginDependencies(pluginDir: string, excludedIds: Set<string>): Promise<string[]> {
|
|
311
|
+
const dependencyIds: string[] = [];
|
|
312
|
+
const packageJsonPaths = await collectPackageJsonPaths(pluginDir);
|
|
313
|
+
await Promise.all(packageJsonPaths.map(async packageJsonPath => {
|
|
314
|
+
const json = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
|
315
|
+
const extensionDependencies: unknown = json.extensionDependencies;
|
|
316
|
+
if (Array.isArray(extensionDependencies)) {
|
|
317
|
+
for (const dependency of extensionDependencies) {
|
|
318
|
+
if (excludedIds.has(dependency)) {
|
|
319
|
+
console.log(yellow(`'${dependency}' referenced by '${json.name}' is excluded because of 'theiaPluginsExcludeIds'`));
|
|
320
|
+
} else {
|
|
321
|
+
dependencyIds.push(dependency);
|
|
322
|
+
}
|
|
324
323
|
}
|
|
325
|
-
} catch (error) {
|
|
326
|
-
console.error(error);
|
|
327
324
|
}
|
|
328
325
|
}));
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* Walk back to the root of an extension starting from its `package.json`. e.g.
|
|
333
|
-
*
|
|
334
|
-
* ```ts
|
|
335
|
-
* getExtensionRoot('/a/b/c', '/a/b/c/EXT/d/e/f/package.json') === '/a/b/c/EXT'
|
|
336
|
-
* ```
|
|
337
|
-
*/
|
|
338
|
-
function getExtensionRoot(root: string, packageJsonPath: string): string {
|
|
339
|
-
root = path.resolve(root);
|
|
340
|
-
packageJsonPath = path.resolve(packageJsonPath);
|
|
341
|
-
if (!packageJsonPath.startsWith(root)) {
|
|
342
|
-
throw new Error(`unexpected paths:\n root: ${root}\n package.json: ${packageJsonPath}`);
|
|
343
|
-
}
|
|
344
|
-
return packageJsonPath.substr(0, packageJsonPath.indexOf(path.sep, root.length + 1));
|
|
326
|
+
return dependencyIds;
|
|
345
327
|
}
|
package/src/theia.ts
CHANGED
|
@@ -18,10 +18,11 @@ import * as temp from 'temp';
|
|
|
18
18
|
import * as yargs from 'yargs';
|
|
19
19
|
import yargsFactory = require('yargs/yargs');
|
|
20
20
|
import { ApplicationPackageManager, rebuild } from '@theia/application-manager';
|
|
21
|
-
import { ApplicationProps } from '@theia/application-package';
|
|
21
|
+
import { ApplicationProps, DEFAULT_SUPPORTED_API_VERSION } from '@theia/application-package';
|
|
22
22
|
import checkHoisted from './check-hoisting';
|
|
23
23
|
import downloadPlugins from './download-plugins';
|
|
24
24
|
import runTest from './run-test';
|
|
25
|
+
import { extract } from '@theia/localization-manager';
|
|
25
26
|
|
|
26
27
|
process.on('unhandledRejection', (reason, promise) => {
|
|
27
28
|
throw reason;
|
|
@@ -212,7 +213,7 @@ function theiaCli(): void {
|
|
|
212
213
|
'api-version': {
|
|
213
214
|
alias: 'v',
|
|
214
215
|
describe: 'Supported API version for plugins',
|
|
215
|
-
default:
|
|
216
|
+
default: DEFAULT_SUPPORTED_API_VERSION
|
|
216
217
|
},
|
|
217
218
|
'api-url': {
|
|
218
219
|
alias: 'u',
|
|
@@ -223,7 +224,53 @@ function theiaCli(): void {
|
|
|
223
224
|
handler: async ({ packed }) => {
|
|
224
225
|
await downloadPlugins({ packed });
|
|
225
226
|
},
|
|
226
|
-
})
|
|
227
|
+
})
|
|
228
|
+
.command<{
|
|
229
|
+
root: string,
|
|
230
|
+
output: string,
|
|
231
|
+
merge: boolean,
|
|
232
|
+
exclude?: string,
|
|
233
|
+
logs?: string,
|
|
234
|
+
files?: string[]
|
|
235
|
+
}>({
|
|
236
|
+
command: 'nls-extract',
|
|
237
|
+
describe: 'Extract translation key/value pairs from source code',
|
|
238
|
+
builder: {
|
|
239
|
+
'output': {
|
|
240
|
+
alias: 'o',
|
|
241
|
+
describe: 'Output file for the extracted translations',
|
|
242
|
+
demandOption: true
|
|
243
|
+
},
|
|
244
|
+
'root': {
|
|
245
|
+
alias: 'r',
|
|
246
|
+
describe: 'The directory which contains the source code',
|
|
247
|
+
default: '.'
|
|
248
|
+
},
|
|
249
|
+
'merge': {
|
|
250
|
+
alias: 'm',
|
|
251
|
+
describe: 'Whether to merge new with existing translation values',
|
|
252
|
+
boolean: true,
|
|
253
|
+
default: false
|
|
254
|
+
},
|
|
255
|
+
'exclude': {
|
|
256
|
+
alias: 'e',
|
|
257
|
+
describe: 'Allows to exclude translation keys starting with this value'
|
|
258
|
+
},
|
|
259
|
+
'files': {
|
|
260
|
+
alias: 'f',
|
|
261
|
+
describe: 'Glob pattern matching the files to extract from (starting from --root).',
|
|
262
|
+
array: true
|
|
263
|
+
},
|
|
264
|
+
'logs': {
|
|
265
|
+
alias: 'l',
|
|
266
|
+
describe: 'File path to a log file'
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
handler: async options => {
|
|
270
|
+
await extract(options);
|
|
271
|
+
}
|
|
272
|
+
})
|
|
273
|
+
.command<{
|
|
227
274
|
testInspect: boolean,
|
|
228
275
|
testExtension: string[],
|
|
229
276
|
testFile: string[],
|