2015-11-13 13:39:38 +00:00
|
|
|
/*---------------------------------------------------------------------------------------------
|
|
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
// Increase max listeners for event emitters
|
|
|
|
require('events').EventEmitter.defaultMaxListeners = 100;
|
|
|
|
|
|
|
|
var gulp = require('gulp');
|
|
|
|
var path = require('path');
|
|
|
|
var tsb = require('gulp-tsb');
|
|
|
|
var es = require('event-stream');
|
|
|
|
var filter = require('gulp-filter');
|
|
|
|
var rimraf = require('rimraf');
|
2015-11-19 14:47:02 +00:00
|
|
|
var util = require('./lib/util');
|
|
|
|
var watcher = require('./lib/watch');
|
|
|
|
var createReporter = require('./lib/reporter');
|
2015-11-13 13:39:38 +00:00
|
|
|
var glob = require('glob');
|
2016-03-03 15:02:30 +00:00
|
|
|
var sourcemaps = require('gulp-sourcemaps');
|
|
|
|
var nlsDev = require('vscode-nls-dev');
|
|
|
|
|
2015-11-20 08:24:36 +00:00
|
|
|
var quiet = !!process.env['VSCODE_BUILD_QUIET'];
|
2015-11-19 14:47:02 +00:00
|
|
|
var extensionsPath = path.join(path.dirname(__dirname), 'extensions');
|
|
|
|
|
2016-03-04 08:27:27 +00:00
|
|
|
var compilations = glob.sync('**/tsconfig.json', {
|
|
|
|
cwd: extensionsPath,
|
|
|
|
ignore: '**/out/**'
|
|
|
|
});
|
2015-11-13 13:39:38 +00:00
|
|
|
|
2016-03-08 22:20:35 +00:00
|
|
|
var languages = ['chs', 'cht', 'jpn', 'kor', 'deu', 'fra', 'esn', 'rus', 'ita'];
|
|
|
|
|
2016-03-04 08:27:27 +00:00
|
|
|
var tasks = compilations.map(function(tsconfigFile) {
|
|
|
|
var absolutePath = path.join(extensionsPath, tsconfigFile);
|
2016-03-16 11:32:53 +00:00
|
|
|
var relativeDirname = path.dirname(tsconfigFile);
|
2015-11-13 13:39:38 +00:00
|
|
|
|
2016-03-16 11:32:53 +00:00
|
|
|
var tsOptions = require(absolutePath).compilerOptions;
|
|
|
|
tsOptions.verbose = !quiet;
|
|
|
|
tsOptions.sourceMap = true;
|
2016-05-10 14:22:11 +00:00
|
|
|
tsOptions.sourceRoot = '../src';
|
2016-03-16 11:32:53 +00:00
|
|
|
|
|
|
|
var name = relativeDirname.replace(/\//g, '-');
|
2016-03-08 09:43:43 +00:00
|
|
|
|
|
|
|
// Tasks
|
2016-03-04 08:27:27 +00:00
|
|
|
var clean = 'clean-extension:' + name;
|
|
|
|
var compile = 'compile-extension:' + name;
|
|
|
|
var watch = 'watch-extension:' + name;
|
|
|
|
|
2016-03-08 09:43:43 +00:00
|
|
|
// Build Tasks
|
|
|
|
var cleanBuild = 'clean-extension-build:' + name;
|
|
|
|
var compileBuild = 'compile-extension-build:' + name;
|
|
|
|
var watchBuild = 'watch-extension-build:' + name;
|
|
|
|
|
2016-03-16 11:32:53 +00:00
|
|
|
var root = path.join('extensions', relativeDirname);
|
|
|
|
var srcBase = path.join(root, 'src');
|
|
|
|
var src = path.join(srcBase, '**');
|
|
|
|
var out = path.join(root, 'out');
|
|
|
|
var i18n = path.join(__dirname, '..', 'i18n');
|
|
|
|
|
|
|
|
function createPipeline(build) {
|
2016-03-04 08:27:27 +00:00
|
|
|
var reporter = quiet ? null : createReporter();
|
|
|
|
|
2016-03-16 11:32:53 +00:00
|
|
|
tsOptions.inlineSources = !!build;
|
|
|
|
var compilation = tsb.create(tsOptions, null, null, quiet ? null : function (err) { reporter(err.toString()); });
|
|
|
|
|
|
|
|
return function () {
|
2016-03-04 08:27:27 +00:00
|
|
|
var input = es.through();
|
|
|
|
var tsFilter = filter(['**/*.ts', '!**/lib/lib*.d.ts', '!**/node_modules/**'], { restore: true });
|
2016-03-16 11:32:53 +00:00
|
|
|
var output = input
|
|
|
|
.pipe(tsFilter)
|
|
|
|
.pipe(util.loadSourcemaps())
|
|
|
|
.pipe(compilation())
|
|
|
|
.pipe(build ? nlsDev.rewriteLocalizeCalls() : es.through())
|
|
|
|
.pipe(sourcemaps.write('.', {
|
|
|
|
addComment: false,
|
|
|
|
includeContent: !!build,
|
|
|
|
sourceRoot: tsOptions.sourceRoot
|
|
|
|
}))
|
|
|
|
.pipe(tsFilter.restore)
|
|
|
|
.pipe(build ? nlsDev.createAdditionalLanguageFiles(languages, i18n, out) : es.through())
|
|
|
|
.pipe(quiet ? es.through() : reporter.end());
|
2016-03-04 08:27:27 +00:00
|
|
|
|
|
|
|
return es.duplex(input, output);
|
|
|
|
};
|
2016-03-16 11:32:53 +00:00
|
|
|
};
|
2016-03-04 08:27:27 +00:00
|
|
|
|
2016-03-04 14:31:21 +00:00
|
|
|
var srcOpts = { cwd: path.dirname(__dirname), base: srcBase };
|
2015-11-13 13:39:38 +00:00
|
|
|
|
2016-03-04 08:27:27 +00:00
|
|
|
gulp.task(clean, function (cb) {
|
|
|
|
rimraf(out, cb);
|
2015-11-13 13:39:38 +00:00
|
|
|
});
|
|
|
|
|
2016-03-04 08:27:27 +00:00
|
|
|
gulp.task(compile, [clean], function () {
|
2016-03-16 11:32:53 +00:00
|
|
|
var pipeline = createPipeline(false);
|
2016-03-04 14:48:57 +00:00
|
|
|
var input = gulp.src(src, srcOpts);
|
2015-11-13 13:39:38 +00:00
|
|
|
|
2016-03-04 14:31:21 +00:00
|
|
|
return input
|
2016-03-16 11:32:53 +00:00
|
|
|
.pipe(pipeline())
|
2016-03-04 08:27:27 +00:00
|
|
|
.pipe(gulp.dest(out));
|
|
|
|
});
|
2015-11-13 13:39:38 +00:00
|
|
|
|
2016-03-08 09:43:43 +00:00
|
|
|
gulp.task(watch, [clean], function () {
|
2016-03-16 11:32:53 +00:00
|
|
|
var pipeline = createPipeline(false);
|
2016-03-08 09:43:43 +00:00
|
|
|
var input = gulp.src(src, srcOpts);
|
|
|
|
var watchInput = watcher(src, srcOpts);
|
|
|
|
|
|
|
|
return watchInput
|
|
|
|
.pipe(util.incremental(pipeline, input))
|
|
|
|
.pipe(gulp.dest(out));
|
|
|
|
});
|
|
|
|
|
|
|
|
gulp.task(cleanBuild, function (cb) {
|
|
|
|
rimraf(out, cb);
|
|
|
|
});
|
|
|
|
|
2016-03-04 08:27:27 +00:00
|
|
|
gulp.task(compileBuild, [clean], function () {
|
2016-03-16 11:32:53 +00:00
|
|
|
var pipeline = createPipeline(true);
|
2016-03-04 14:48:57 +00:00
|
|
|
var input = gulp.src(src, srcOpts);
|
2015-11-13 13:39:38 +00:00
|
|
|
|
2016-03-04 14:31:21 +00:00
|
|
|
return input
|
2016-03-16 11:32:53 +00:00
|
|
|
.pipe(pipeline())
|
2016-03-04 08:27:27 +00:00
|
|
|
.pipe(gulp.dest(out));
|
2015-11-13 13:39:38 +00:00
|
|
|
});
|
|
|
|
|
2016-03-08 09:43:43 +00:00
|
|
|
gulp.task(watchBuild, [clean], function () {
|
2016-03-04 14:48:57 +00:00
|
|
|
var input = gulp.src(src, srcOpts);
|
|
|
|
var watchInput = watcher(src, srcOpts);
|
2016-03-04 08:27:27 +00:00
|
|
|
|
2016-03-04 14:31:21 +00:00
|
|
|
return watchInput
|
2016-03-08 09:43:43 +00:00
|
|
|
.pipe(util.incremental(function () { return pipeline(true); }, input))
|
2016-03-04 08:27:27 +00:00
|
|
|
.pipe(gulp.dest(out));
|
|
|
|
});
|
|
|
|
|
|
|
|
return {
|
|
|
|
clean: clean,
|
|
|
|
compile: compile,
|
2016-03-08 09:43:43 +00:00
|
|
|
watch: watch,
|
|
|
|
cleanBuild: cleanBuild,
|
2016-03-04 08:27:27 +00:00
|
|
|
compileBuild: compileBuild,
|
2016-03-08 09:43:43 +00:00
|
|
|
watchBuild: watchBuild
|
2016-03-04 08:27:27 +00:00
|
|
|
};
|
|
|
|
});
|
2015-11-13 13:39:38 +00:00
|
|
|
|
2016-03-01 10:36:32 +00:00
|
|
|
gulp.task('clean-extensions', tasks.map(function (t) { return t.clean; }));
|
|
|
|
gulp.task('compile-extensions', tasks.map(function (t) { return t.compile; }));
|
2016-03-08 09:43:43 +00:00
|
|
|
gulp.task('watch-extensions', tasks.map(function (t) { return t.watch; }));
|
|
|
|
|
|
|
|
gulp.task('clean-extensions-build', tasks.map(function (t) { return t.cleanBuild; }));
|
|
|
|
gulp.task('compile-extensions-build', tasks.map(function (t) { return t.compileBuild; }));
|
|
|
|
gulp.task('watch-extensions-build', tasks.map(function (t) { return t.watchBuild; }));
|