mixin.js 2.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

'use strict';

const json = require('gulp-json-editor');
const buffer = require('gulp-buffer');
const filter = require('gulp-filter');
const es = require('event-stream');
J
Joao Moreno 已提交
12
const vfs = require('vinyl-fs');
J
Joao Moreno 已提交
13 14
const fancyLog = require('fancy-log');
const ansiColors = require('ansi-colors');
15 16
const fs = require('fs');
const path = require('path');
17

J
Joao Moreno 已提交
18
function main() {
19 20 21 22 23 24 25
	const quality = process.env['VSCODE_QUALITY'];

	if (!quality) {
		console.log('Missing VSCODE_QUALITY, skipping mixin');
		return;
	}

26
	const productJsonFilter = filter(f => f.relative === 'product.json', { restore: true });
27

J
Joao Moreno 已提交
28
	fancyLog(ansiColors.blue('[mixin]'), `Mixing in sources:`);
J
Joao Moreno 已提交
29 30
	return vfs
		.src(`quality/${quality}/**`, { base: `quality/${quality}` })
31
		.pipe(filter(f => !f.isDirectory()))
J
Joao Moreno 已提交
32 33
		.pipe(productJsonFilter)
		.pipe(buffer())
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
		.pipe(json(o => {
			const ossProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8'));
			let builtInExtensions = ossProduct.builtInExtensions;

			if (Array.isArray(o.builtInExtensions)) {
				fancyLog(ansiColors.blue('[mixin]'), 'Overwriting built-in extensions:', o.builtInExtensions.map(e => e.name));

				builtInExtensions = o.builtInExtensions;
			} else if (o.builtInExtensions) {
				const include = o.builtInExtensions['include'] || [];
				const exclude = o.builtInExtensions['exclude'] || [];

				fancyLog(ansiColors.blue('[mixin]'), 'OSS built-in extensions:', builtInExtensions.map(e => e.name));
				fancyLog(ansiColors.blue('[mixin]'), 'Including built-in extensions:', include.map(e => e.name));
				fancyLog(ansiColors.blue('[mixin]'), 'Excluding built-in extensions:', exclude);

				builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));
				builtInExtensions = [...builtInExtensions, ...include];

				fancyLog(ansiColors.blue('[mixin]'), 'Final built-in extensions:', builtInExtensions.map(e => e.name));
			} else {
				fancyLog(ansiColors.blue('[mixin]'), 'Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));
			}

			return { ...ossProduct, builtInExtensions };
		}))
J
Joao Moreno 已提交
60
		.pipe(productJsonFilter.restore)
61
		.pipe(es.mapSync(function (f) {
J
Joao Moreno 已提交
62
			fancyLog(ansiColors.blue('[mixin]'), f.relative, ansiColors.green('✔︎'));
63 64
			return f;
		}))
J
Joao Moreno 已提交
65 66 67
		.pipe(vfs.dest('.'));
}

68
main();