diff --git a/dev-packages/cli/src/download-plugins.ts b/dev-packages/cli/src/download-plugins.ts index bbb5e0ba14ed5..ba63cdbf5af99 100644 --- a/dev-packages/cli/src/download-plugins.ts +++ b/dev-packages/cli/src/download-plugins.ts @@ -22,7 +22,11 @@ import * as request from 'requestretry'; import * as mkdirp from 'mkdirp'; import * as tar from 'tar'; import * as zlib from 'zlib'; -export default function downloadPlugins(): void { + +const unzip = require('unzip-stream'); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default function downloadPlugins({ packed = false }: any = {}): void { console.log('Downloading plugins...'); @@ -49,7 +53,7 @@ export default function downloadPlugins(): void { continue; } - const targetPath = path.join(process.cwd(), pluginsDir, plugin + fileExt); + const targetPath = path.join(process.cwd(), pluginsDir, `${plugin}${packed === true ? fileExt : ''}`); // Skip plugins which have previously been downloaded. if (isDownloaded(targetPath)) { @@ -84,9 +88,12 @@ export default function downloadPlugins(): void { const untar = tar.x({ cwd: targetPath }); download.pipe(gunzip).pipe(untar); } else { - // Do not unzip .vsix files - const file = fs.createWriteStream(targetPath); - download.pipe(file); + if (packed === true) { + const file = fs.createWriteStream(targetPath); + download.pipe(file); + } else { + download.pipe(unzip.Extract({ path: targetPath })); + } } } } diff --git a/dev-packages/cli/src/theia.ts b/dev-packages/cli/src/theia.ts index 3b122f9e9f7a5..9f6b5f2fe482e 100644 --- a/dev-packages/cli/src/theia.ts +++ b/dev-packages/cli/src/theia.ts @@ -144,7 +144,16 @@ function rebuildCommand(command: string, target: ApplicationProps.Target): yargs }) .command({ command: 'download:plugins', - handler: () => downloadPlugins() + describe: 'Download defined external plugins.', + builder: { + 'packed': { + alias: 'p', + describe: 'Controls whether to pack or unpack plugins', + boolean: true, + default: false, + } + }, + handler: args => downloadPlugins(args), }).command({ command: 'test', builder: {