Skip to content

Commit 92c776b

Browse files
committed
Move packaging extensions to lib/extensions.ts
1 parent 4754fea commit 92c776b

4 files changed

Lines changed: 112 additions & 34 deletions

File tree

build/dependencies.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function asYarnDependency(prefix, tree) {
4343
}
4444

4545
function getYarnProductionDependencies(cwd) {
46-
const raw = cp.execSync('yarn list --json', { cwd, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'ignore'] });
46+
const raw = cp.execSync('yarn list --json', { cwd, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] });
4747
const match = /^{"type":"tree".*$/m.exec(raw);
4848

4949
if (!match || match.length !== 1) {

build/gulpfile.vscode.js

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ const packageJson = require('../package.json');
2929
const product = require('../product.json');
3030
const crypto = require('crypto');
3131
const i18n = require('./lib/i18n');
32-
const glob = require('glob');
3332
const deps = require('./dependencies');
3433
const getElectronVersion = require('./lib/electron').getElectronVersion;
3534
const createAsar = require('./lib/asar').createAsar;
@@ -44,15 +43,6 @@ const nodeModules = ['electron', 'original-fs']
4443
.concat(baseModules);
4544

4645
// Build
47-
const builtInExtensions = require('./builtInExtensions.json');
48-
49-
const excludedExtensions = [
50-
'vscode-api-tests',
51-
'vscode-colorize-tests',
52-
'ms-vscode.node-debug',
53-
'ms-vscode.node-debug2',
54-
];
55-
5646
const vscodeEntryPoints = _.flatten([
5747
buildfile.entrypoint('vs/workbench/workbench.main'),
5848
buildfile.base,
@@ -227,34 +217,16 @@ function packageTask(platform, arch, opts) {
227217
]);
228218

229219
const src = gulp.src(out + '/**', { base: '.' })
230-
.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); }));
220+
.pipe(rename(function (path) { path.dirname = path.dirname.replace(new RegExp('^' + out), 'out'); }))
221+
.pipe(util.setExecutableBit(['**/*.sh']))
222+
.pipe(filter(['**', '!**/*.js.map']));
231223

232224
const root = path.resolve(path.join(__dirname, '..'));
233-
const localExtensionDescriptions = glob.sync('extensions/*/package.json')
234-
.map(manifestPath => {
235-
const extensionPath = path.dirname(path.join(root, manifestPath));
236-
const extensionName = path.basename(extensionPath);
237-
return { name: extensionName, path: extensionPath };
238-
})
239-
.filter(({ name }) => excludedExtensions.indexOf(name) === -1)
240-
.filter(({ name }) => builtInExtensions.every(b => b.name !== name));
241-
242-
const localExtensions = es.merge(...localExtensionDescriptions.map(extension => {
243-
return ext.fromLocal(extension.path, sourceMappingURLBase)
244-
.pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
245-
}));
246-
247-
const localExtensionDependencies = gulp.src('extensions/node_modules/**', { base: '.' });
248225

249-
const marketplaceExtensions = es.merge(...builtInExtensions.map(extension => {
250-
return ext.fromMarketplace(extension.name, extension.version)
251-
.pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
226+
const sources = es.merge(src, ext.packageExtensionsStream({
227+
sourceMappingURLBase: sourceMappingURLBase
252228
}));
253229

254-
const sources = es.merge(src, localExtensions, localExtensionDependencies, marketplaceExtensions)
255-
.pipe(util.setExecutableBit(['**/*.sh']))
256-
.pipe(filter(['**', '!**/*.js.map']));
257-
258230
let version = packageJson.version;
259231
// @ts-ignore JSON checking: quality is optional
260232
const quality = product.quality;

build/lib/extensions.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ var fs = require("fs");
2828
var path = require("path");
2929
var vsce = require("vsce");
3030
var File = require("vinyl");
31+
var glob = require("glob");
32+
var gulp = require("gulp");
33+
var util2 = require("./util");
34+
var root = path.resolve(path.join(__dirname, '..', '..'));
3135
function fromLocal(extensionPath, sourceMappingURLBase) {
3236
var result = es.through();
3337
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn }).then(function (fileNames) {
@@ -175,3 +179,49 @@ function fromMarketplace(extensionName, version) {
175179
}));
176180
}
177181
exports.fromMarketplace = fromMarketplace;
182+
var excludedExtensions = [
183+
'vscode-api-tests',
184+
'vscode-colorize-tests',
185+
'ms-vscode.node-debug',
186+
'ms-vscode.node-debug2',
187+
];
188+
var builtInExtensions = require('../builtInExtensions.json');
189+
function packageExtensionsStream(opts) {
190+
opts = opts || {};
191+
var localExtensionDescriptions = glob.sync('extensions/*/package.json')
192+
.map(function (manifestPath) {
193+
var extensionPath = path.dirname(path.join(root, manifestPath));
194+
var extensionName = path.basename(extensionPath);
195+
return { name: extensionName, path: extensionPath };
196+
})
197+
.filter(function (_a) {
198+
var name = _a.name;
199+
return excludedExtensions.indexOf(name) === -1;
200+
})
201+
.filter(function (_a) {
202+
var name = _a.name;
203+
return opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true;
204+
})
205+
.filter(function (_a) {
206+
var name = _a.name;
207+
return builtInExtensions.every(function (b) { return b.name !== name; });
208+
});
209+
var localExtensions = es.merge.apply(es, localExtensionDescriptions.map(function (extension) {
210+
return fromLocal(extension.path, opts.sourceMappingURLBase)
211+
.pipe(rename(function (p) { return p.dirname = "extensions/" + extension.name + "/" + p.dirname; }));
212+
}));
213+
var localExtensionDependencies = gulp.src('extensions/node_modules/**', { base: '.' });
214+
var marketplaceExtensions = es.merge.apply(es, builtInExtensions
215+
.filter(function (_a) {
216+
var name = _a.name;
217+
return opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true;
218+
})
219+
.map(function (extension) {
220+
return fromMarketplace(extension.name, extension.version)
221+
.pipe(rename(function (p) { return p.dirname = "extensions/" + extension.name + "/" + p.dirname; }));
222+
}));
223+
return es.merge(localExtensions, localExtensionDependencies, marketplaceExtensions)
224+
.pipe(util2.setExecutableBit(['**/*.sh']))
225+
.pipe(filter(['**', '!**/*.js.map']));
226+
}
227+
exports.packageExtensionsStream = packageExtensionsStream;

build/lib/extensions.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ import * as fs from 'fs';
2020
import * as path from 'path';
2121
import * as vsce from 'vsce';
2222
import * as File from 'vinyl';
23+
import * as glob from 'glob';
24+
import * as gulp from 'gulp';
25+
import * as util2 from './util';
26+
27+
const root = path.resolve(path.join(__dirname, '..', '..'));
2328

2429
export function fromLocal(extensionPath: string, sourceMappingURLBase?: string): Stream {
2530
let result = es.through();
@@ -191,3 +196,54 @@ export function fromMarketplace(extensionName: string, version: string): Stream
191196
}));
192197
}));
193198
}
199+
200+
interface IPackageExtensionsOptions {
201+
/**
202+
* Set to undefined to package all of them.
203+
*/
204+
desiredExtensions?: string[];
205+
sourceMappingURLBase?: string;
206+
}
207+
208+
const excludedExtensions = [
209+
'vscode-api-tests',
210+
'vscode-colorize-tests',
211+
'ms-vscode.node-debug',
212+
'ms-vscode.node-debug2',
213+
];
214+
215+
const builtInExtensions: { name: string, version: string, repo: string; }[] = require('../builtInExtensions.json');
216+
217+
export function packageExtensionsStream(opts?: IPackageExtensionsOptions): NodeJS.ReadWriteStream {
218+
opts = opts || {};
219+
220+
const localExtensionDescriptions = (<string[]>glob.sync('extensions/*/package.json'))
221+
.map(manifestPath => {
222+
const extensionPath = path.dirname(path.join(root, manifestPath));
223+
const extensionName = path.basename(extensionPath);
224+
return { name: extensionName, path: extensionPath };
225+
})
226+
.filter(({ name }) => excludedExtensions.indexOf(name) === -1)
227+
.filter(({ name }) => opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true)
228+
.filter(({ name }) => builtInExtensions.every(b => b.name !== name));
229+
230+
const localExtensions = es.merge(...localExtensionDescriptions.map(extension => {
231+
return fromLocal(extension.path, opts.sourceMappingURLBase)
232+
.pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
233+
}));
234+
235+
const localExtensionDependencies = gulp.src('extensions/node_modules/**', { base: '.' });
236+
237+
const marketplaceExtensions = es.merge(
238+
...builtInExtensions
239+
.filter(({ name }) => opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true)
240+
.map(extension => {
241+
return fromMarketplace(extension.name, extension.version)
242+
.pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
243+
})
244+
);
245+
246+
return es.merge(localExtensions, localExtensionDependencies, marketplaceExtensions)
247+
.pipe(util2.setExecutableBit(['**/*.sh']))
248+
.pipe(filter(['**', '!**/*.js.map']));
249+
}

0 commit comments

Comments
 (0)