tsickle
Version:
Transpile TypeScript code to JavaScript with Closure annotations.
102 lines (87 loc) • 2.92 kB
JavaScript
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
require('source-map-support').install();
var clangFormat = require('clang-format');
var formatter = require('gulp-clang-format');
var fs = require('fs');
var gulp = require('gulp');
var gutil = require('gulp-util');
var merge = require('merge2');
var mocha = require('gulp-mocha');
var sourcemaps = require('gulp-sourcemaps');
var ts = require('gulp-typescript');
var tslint = require('gulp-tslint');
var typescript = require('typescript');
var tsProject = ts.createProject('tsconfig.json', {
// Specify the TypeScript version we're using.
typescript: typescript,
});
gulp.task('test.check-format', function() {
return gulp.src(['*.js', 'src/**/*.ts', 'test/**/*.ts'])
.pipe(formatter.checkFormat('file', clangFormat, {verbose: true}))
.on('warning', onError);
});
gulp.task('test.check-lint', function() {
return gulp.src(['src/**/*.ts', 'test/**/*.ts'])
.pipe(tslint({formatter: 'verbose'}))
.pipe(tslint.report())
.on('warning', onError);
});
var hasError;
var failOnError = true;
var onError = function(err) {
hasError = true;
if (failOnError) {
process.exit(1);
}
};
gulp.task('compile', function() {
hasError = false;
var tsResult =
gulp.src(['src/**/*.ts']).pipe(sourcemaps.init()).pipe(tsProject()).on('error', onError);
return merge([
tsResult.dts.pipe(gulp.dest('build/definitions')),
// Write external sourcemap next to the js file
tsResult.js.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: '../../src'}))
.pipe(gulp.dest('build/src')),
tsResult.js.pipe(gulp.dest('build/src')),
]);
});
gulp.task('test.compile', ['compile'], function(done) {
if (hasError) {
done();
return;
}
return gulp.src(['test/*.ts'], {base: '.'})
.pipe(sourcemaps.init())
.pipe(tsProject())
.on('error', onError)
.js.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: '../..'}))
.pipe(gulp.dest('build/')); // '/test/' comes from base above.
});
gulp.task('test.unit', ['test.compile'], function(done) {
if (hasError) {
done();
return;
}
return gulp.src(['build/test/**/*.js', '!build/test/**/e2e*.js']).pipe(mocha({timeout: 1000}));
});
gulp.task('test.e2e', ['test.compile'], function(done) {
if (hasError) {
done();
return;
}
return gulp.src(['build/test/**/e2e*.js']).pipe(mocha({timeout: 25000}));
});
gulp.task('test', ['test.unit', 'test.e2e', 'test.check-format', 'test.check-lint']);
gulp.task('watch', function() {
failOnError = false;
gulp.start(['test.unit']); // Trigger initial build.
return gulp.watch(['src/**/*.ts', 'test/**/*.ts', 'test_files/**'], ['test.unit']);
});
gulp.task('default', ['compile']);