// Based on the gulpfile provided by angular team
// (https://github.com/angular/ts2dart/blob/master/gulpfile.js)
var gulp = require('gulp');
var ts = require('gulp-typescript');
var typescript = require('typescript');
var gutil = require('gulp-util');
var mochaPhantomJS = require('gulp-mocha-phantomjs');
var tslint = require('gulp-tslint');
var server = require('gulp-server-livereload');
var concat = require('gulp-concat');
var merge = require('merge2');
var gulpFilter = require('gulp-filter');
var vulcanize = require('gulp-vulcanize');
var rename = require('gulp-rename');
var minimist = require('minimist');
var replace = require('gulp-replace');
var options = minimist(process.argv.slice(2), {
default: {
p: 8000 // port for gulp server
}
});
var tsProject = ts.createProject('tsconfig.json', {
typescript: typescript,
noExternalResolve: true, // opt-in for faster compilation!
});
var hasError;
var failOnError = true; // Is set to false when watching.
var onError = function(err) {
hasError = true;
gutil.log(err.message);
if (failOnError) {
process.exit(1);
}
};
gulp.task('compile.all', function() {
hasError = false;
var isComponent = gulpFilter(['components/**/*.js', '!components/**/test/*']);
var isApp = gulpFilter(['app/**/*.js']);
var isTest = gulpFilter(['test/**/*', 'components/**/test/*']);
var srcs = ['components/**/*.ts', 'test/**/*.ts', 'app/**/*.ts',
'typings/**/*.d.ts', 'bower_components/**/*.d.ts'];
var tsResult = gulp.src(srcs, {base: '.'})
.pipe(ts(tsProject))
.on('error', onError);
return merge([
// Send concatenated component code to build/component
tsResult.js
.pipe(isComponent)
.pipe(concat('components.js'))
.pipe(gulp.dest('build')),
// Duplicate all component code to live next to the ts file
// (makes polymer imports very clean)
tsResult.js
.pipe(isComponent)
.pipe(gulp.dest('.')),
tsResult.js
.pipe(isApp)
.pipe(gulp.dest('.')),
// Send all test code to build/test.js
tsResult.js
.pipe(isTest)
.pipe(concat('test.js'))
.pipe(gulp.dest('build')),
// Create a unified defintions file at build/all.d.ts
tsResult.dts
.pipe(concat('all.d.ts'))
.pipe(gulp.dest('build')),
]);
});
var tslintTask = function(strict) {
return function(done) {
if (hasError) {
done();
return;
}
return gulp.src(['components/**/*.ts', 'test/**/*.ts'])
.pipe(tslint())
.pipe(tslint.report('verbose', {
emitError: strict,
}));
};
};
// Since constructs like console.log are disabled by tslint
// but very useful while developing, create a "permissive"
// version of tslint that warns without erroring, for the
// watch task.
gulp.task('tslint-permissive', [], tslintTask(false));
gulp.task('tslint-strict', [], tslintTask(true));
gulp.task('run-tests', ['compile.all'], function(done) {
if (hasError) {
done();
return;
}
return gulp.src('tests.html')
.pipe(mochaPhantomJS({reporter: 'dot'}));
});
gulp.task('test', ['run-tests', 'tslint-strict']);
gulp.task('watch', ['run-tests', 'tslint-permissive'], function() {
failOnError = false;
// Avoid watching generated .d.ts in the build (aka output) directory.
return gulp.watch(['test/**/*.ts', 'components/**/*.ts'],
{ignoreInitial: true},
['run-tests', 'tslint-permissive']);
});
gulp.task('server', function() {
gulp.src('.')
.pipe(server({
host: '0.0.0.0',
port: options.p,
livereload: {
enable: true,
port: 27729 + options.p
},
directoryListing: true,
}));
});
var linkRegex = /\n/g;
var scriptRegex = /