]>
Commit | Line | Data |
---|---|---|
081fe3f3 PK |
1 | const browserify = require('browserify'); |
2 | const buffer = require('vinyl-buffer'); | |
695a9523 | 3 | const coveralls = require('gulp-coveralls'); |
081fe3f3 PK |
4 | const fs = require('fs-extra'); |
5 | const gulp = require('gulp'); | |
695a9523 | 6 | const istanbul = require('gulp-istanbul'); |
081fe3f3 | 7 | const merge = require('merge-stream'); |
e8adf8ad | 8 | const mocha = require('gulp-mocha'); |
081fe3f3 PK |
9 | const sorcery = require('sorcery'); |
10 | const source = require('vinyl-source-stream'); | |
11 | const sourcemaps = require('gulp-sourcemaps'); | |
12 | const ts = require('gulp-typescript'); | |
081fe3f3 PK |
13 | |
14 | ||
15 | let buildDir = process.env.BUILD_DIR || 'build'; | |
dc3a1367 AA |
16 | let tsProject = ts.createProject('tsconfig.json'); |
17 | let srcDir = tsProject.config.compilerOptions.rootDir; | |
18 | let outDir = tsProject.config.compilerOptions.outDir; | |
081fe3f3 PK |
19 | |
20 | /** | |
21 | * Compile TypeScript sources to JavaScript files and create a source map file for each TypeScript | |
22 | * file compiled. | |
23 | */ | |
24 | gulp.task('tsc', function () { | |
dc3a1367 AA |
25 | // Remove the ${outDir}/ directory to prevent confusion if files were deleted in ${srcDir}/ |
26 | fs.emptyDirSync(`${outDir}`); | |
081fe3f3 | 27 | |
dc3a1367 | 28 | // Build all TypeScript files (including tests) to ${outDir}/, based on the configuration defined in |
081fe3f3 | 29 | // `tsconfig.json`. |
081fe3f3 | 30 | let tsResult = tsProject.src().pipe(sourcemaps.init()).pipe(tsProject()); |
dc3a1367 | 31 | let tsc = tsResult.js.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})).pipe(gulp.dest(outDir)); |
081fe3f3 | 32 | |
dc3a1367 AA |
33 | // Copy all addons from ${srcDir}/ to ${outDir}/ |
34 | let copyAddons = gulp.src(`${srcDir}/addons/**/*`).pipe(gulp.dest(`${outDir}/addons`)); | |
081fe3f3 | 35 | |
dc3a1367 AA |
36 | // Copy stylesheets from ${srcDir}/ to ${outDir}/ |
37 | let copyStylesheets = gulp.src(`${srcDir}/**/*.css`).pipe(gulp.dest(outDir)); | |
081fe3f3 PK |
38 | |
39 | return merge(tsc, copyAddons, copyStylesheets); | |
40 | }); | |
41 | ||
42 | /** | |
43 | * Bundle JavaScript files produced by the `tsc` task, into a single file named `xterm.js` with | |
44 | * Browserify. | |
45 | */ | |
46 | gulp.task('browserify', ['tsc'], function() { | |
47 | // Ensure that the build directory exists | |
48 | fs.ensureDirSync(buildDir); | |
49 | ||
50 | let browserifyOptions = { | |
51 | basedir: buildDir, | |
52 | debug: true, | |
dc3a1367 | 53 | entries: [`../${outDir}/xterm.js`], |
081fe3f3 PK |
54 | standalone: 'Terminal', |
55 | cache: {}, | |
56 | packageCache: {} | |
57 | }; | |
58 | let bundleStream = browserify(browserifyOptions) | |
081fe3f3 PK |
59 | .bundle() |
60 | .pipe(source('xterm.js')) | |
61 | .pipe(buffer()) | |
62 | .pipe(sourcemaps.init({loadMaps: true, sourceRoot: '..'})) | |
63 | .pipe(sourcemaps.write('./')) | |
64 | .pipe(gulp.dest(buildDir)); | |
65 | ||
dc3a1367 AA |
66 | // Copy all add-ons from ${outDir}/ to buildDir |
67 | let copyAddons = gulp.src(`${outDir}/addons/**/*`).pipe(gulp.dest(`${buildDir}/addons`)); | |
081fe3f3 | 68 | |
dc3a1367 AA |
69 | // Copy stylesheets from ${outDir}/ to ${buildDir}/ |
70 | let copyStylesheets = gulp.src(`${outDir}/**/*.css`).pipe(gulp.dest(buildDir)); | |
081fe3f3 PK |
71 | |
72 | return merge(bundleStream, copyAddons, copyStylesheets); | |
73 | }); | |
74 | ||
695a9523 | 75 | gulp.task('instrument-test', function () { |
dc3a1367 | 76 | return gulp.src([`${outDir}/**/*.js`]) |
695a9523 PK |
77 | // Covering files |
78 | .pipe(istanbul()) | |
79 | // Force `require` to return covered files | |
80 | .pipe(istanbul.hookRequire()); | |
81 | }); | |
82 | ||
4c343513 | 83 | gulp.task('mocha', ['instrument-test'], function () { |
dc3a1367 | 84 | return gulp.src([`${outDir}/*test.js`, `${outDir}/**/*test.js`], {read: false}) |
e8adf8ad | 85 | .pipe(mocha()) |
695a9523 | 86 | .pipe(istanbul.writeReports()); |
e8adf8ad DI |
87 | }); |
88 | ||
081fe3f3 PK |
89 | /** |
90 | * Use `sorcery` to resolve the source map chain and point back to the TypeScript files. | |
91 | * (Without this task the source maps produced for the JavaScript bundle points into the | |
dc3a1367 | 92 | * compiled JavaScript files in ${outDir}/). |
081fe3f3 PK |
93 | */ |
94 | gulp.task('sorcery', ['browserify'], function () { | |
95 | var chain = sorcery.loadSync(`${buildDir}/xterm.js`); | |
dc3a1367 | 96 | chain.apply(); |
081fe3f3 PK |
97 | chain.writeSync(); |
98 | }); | |
99 | ||
695a9523 PK |
100 | /** |
101 | * Submit coverage results to coveralls.io | |
102 | */ | |
103 | gulp.task('coveralls', function () { | |
104 | gulp.src('coverage/**/lcov.info') | |
105 | .pipe(coveralls()); | |
106 | }); | |
107 | ||
081fe3f3 | 108 | gulp.task('build', ['sorcery']); |
4c343513 | 109 | gulp.task('test', ['mocha']); |
081fe3f3 | 110 | gulp.task('default', ['build']); |