From 656567aed0d9b1683def80b38b50b55b87220631 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 27 May 2018 07:30:37 -0700 Subject: [PATCH 1/6] Use incremental tsc builds --- gulpfile.js | 56 ++------------------------- package.json | 7 ++-- src/addons/attach/tsconfig.json | 3 +- src/addons/fit/tsconfig.json | 3 +- src/addons/fullscreen/tsconfig.json | 3 +- src/addons/search/tsconfig.json | 3 +- src/addons/terminado/tsconfig.json | 3 +- src/addons/webLinks/tsconfig.json | 3 +- src/addons/winptyCompat/tsconfig.json | 3 +- src/addons/zmodem/tsconfig.json | 3 +- tsconfig.json | 3 +- 11 files changed, 26 insertions(+), 64 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index af4fdce0..3b44f1fd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,7 +20,6 @@ const webpack = require('webpack-stream'); const buildDir = process.env.BUILD_DIR || 'build'; const tsProject = ts.createProject('tsconfig.json'); -const srcDir = tsProject.config.compilerOptions.rootDir; let outDir = tsProject.config.compilerOptions.outDir; const addons = fs.readdirSync(`${__dirname}/src/addons`); @@ -31,58 +30,11 @@ if (path.normalize(outDir).indexOf(__dirname) !== 0) { outDir = `${__dirname}/${path.normalize(outDir)}`; } -/** - * Compile TypeScript sources to JavaScript files and create a source map file for each TypeScript - * file compiled. - */ -gulp.task('tsc', function () { - // Remove the ${outDir}/ directory to prevent confusion if files were deleted in ${srcDir}/ - fs.emptyDirSync(`${outDir}`); - - // Build all TypeScript files (including tests) to ${outDir}/, based on the configuration defined in - // `tsconfig.json`. - let tsResult = tsProject.src().pipe(sourcemaps.init()).pipe(tsProject()); - let tsc = merge( - tsResult.js.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})).pipe(gulp.dest(outDir)), - tsResult.dts.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})).pipe(gulp.dest(outDir)) - ); - - let addonStreams = addons.map(function(addon) { - fs.emptyDirSync(`${outDir}/addons/${addon}`); - - let tsProjectAddon = ts.createProject(`./src/addons/${addon}/tsconfig.json`); - let tsResultAddon = tsProjectAddon.src().pipe(sourcemaps.init()).pipe(tsProjectAddon()); - let tscAddon = merge( - tsResultAddon.js - .pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})) - .pipe(gulp.dest(`${outDir}/addons/${addon}`)), - tsResultAddon.dts - .pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})) - .pipe(gulp.dest(`${outDir}/addons/${addon}`)) - ) - - return tscAddon; - }); - - // Copy all addons from ${srcDir}/ to ${outDir}/ - let copyAddons = gulp.src([ - `${srcDir}/addons/**/**` - ]).pipe(gulp.dest(`${outDir}/addons`)); - - // Copy stylesheets from ${srcDir}/ to ${outDir}/ - let copyStylesheets = gulp.src(`${srcDir}/**/*.css`).pipe(gulp.dest(outDir)); - - // Join all streams into a single array - let streams = [tsc].concat(addonStreams).concat([copyAddons, copyStylesheets]); - - return merge.apply(this, streams); -}); - /** * Bundle JavaScript files produced by the `tsc` task, into a single file named `xterm.js` with * Browserify. */ -gulp.task('browserify', ['tsc'], function() { +gulp.task('browserify', [], function() { // Ensure that the build directory exists fs.ensureDirSync(buildDir); @@ -108,7 +60,7 @@ gulp.task('browserify', ['tsc'], function() { return merge(bundleStream, copyStylesheets); }); -gulp.task('browserify-addons', ['tsc'], function() { +gulp.task('browserify-addons', [], function() { const bundles = addons.map((addon) => { const addonOptions = { basedir: `${buildDir}/addons/${addon}`, @@ -192,8 +144,8 @@ gulp.task('webpack', ['build'], function() { .pipe(gulp.dest('demo/dist/')); }); -gulp.task('watch', ['webpack'], () => { - gulp.watch(['./src/*', './src/**/*'], ['webpack']); +gulp.task('watch-demo', ['webpack'], () => { + gulp.watch(['./lib/*', './lib/**/*'], ['webpack']); }); /** diff --git a/package.json b/package.json index 44cc2e88..e1acafa5 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "@types/jsdom": "^11.0.1", "@types/mocha": "^2.2.33", "@types/node": "6.0.108", - "@types/text-encoding": "0.0.32", "browserify": "^13.3.0", "chai": "3.5.0", + "concurrently": "^3.5.1", "express": "4.13.4", "express-ws": "2.0.0-rc.1", "fs-extra": "^1.0.0", @@ -36,7 +36,7 @@ "sorcery": "^0.10.0", "tslint": "^5.9.1", "tslint-consistent-codestyle": "^1.13.0", - "typescript": "~2.7.1", + "typescript": "2.8.3", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0", "webpack": "^3.10.0", @@ -51,10 +51,11 @@ "mocha": "gulp test", "build:docs": "jsdoc -c jsdoc.json", "tsc": "tsc", + "prebuild": "concurrently --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem' 'tsc' 'tsc -p ./src/addons/attach' 'tsc -p ./src/addons/fit' 'tsc -p ./src/addons/fullscreen' 'tsc -p ./src/addons/search' 'tsc -p ./src/addons/terminado' 'tsc -p ./src/addons/webLinks' 'tsc -p ./src/addons/winptyCompat' 'tsc -p ./src/addons/zmodem'", "build": "gulp build", "prepublish": "npm run build", "coveralls": "gulp coveralls", "webpack": "gulp webpack", - "watch": "gulp watch" + "watch": "concurrently --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem,demo' 'tsc -w' 'tsc -w -p ./src/addons/attach' 'tsc -w -p ./src/addons/fit' 'tsc -w -p ./src/addons/fullscreen' 'tsc -w -p ./src/addons/search' 'tsc -w -p ./src/addons/terminado' 'tsc -w -p ./src/addons/webLinks' 'tsc -w -p ./src/addons/winptyCompat' 'tsc -w -p ./src/addons/zmodem' 'gulp watch-demo'" } } diff --git a/src/addons/attach/tsconfig.json b/src/addons/attach/tsconfig.json index a4e8e78b..3773f508 100644 --- a/src/addons/attach/tsconfig.json +++ b/src/addons/attach/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/attach/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/src/addons/fit/tsconfig.json b/src/addons/fit/tsconfig.json index 78b3c410..7a5b6451 100644 --- a/src/addons/fit/tsconfig.json +++ b/src/addons/fit/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/fit/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/src/addons/fullscreen/tsconfig.json b/src/addons/fullscreen/tsconfig.json index 35ecb7ce..917ce152 100644 --- a/src/addons/fullscreen/tsconfig.json +++ b/src/addons/fullscreen/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/fullscreen/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/src/addons/search/tsconfig.json b/src/addons/search/tsconfig.json index d1c3d7e0..a60c8588 100644 --- a/src/addons/search/tsconfig.json +++ b/src/addons/search/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/search/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/src/addons/terminado/tsconfig.json b/src/addons/terminado/tsconfig.json index 84e3ac32..c716e053 100644 --- a/src/addons/terminado/tsconfig.json +++ b/src/addons/terminado/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/terminado/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/src/addons/webLinks/tsconfig.json b/src/addons/webLinks/tsconfig.json index 7549370b..bdbafaf6 100644 --- a/src/addons/webLinks/tsconfig.json +++ b/src/addons/webLinks/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/webLinks/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/src/addons/winptyCompat/tsconfig.json b/src/addons/winptyCompat/tsconfig.json index a51f7332..3249a6c1 100644 --- a/src/addons/winptyCompat/tsconfig.json +++ b/src/addons/winptyCompat/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/winptyCompat/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/src/addons/zmodem/tsconfig.json b/src/addons/zmodem/tsconfig.json index abae1238..a4b2d3a1 100644 --- a/src/addons/zmodem/tsconfig.json +++ b/src/addons/zmodem/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "../../../lib/addons/zmodem/", "sourceMap": true, "removeComments": true, - "declaration": true + "declaration": true, + "preserveWatchOutput": true } } diff --git a/tsconfig.json b/tsconfig.json index e56930e6..c2a21628 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,8 @@ "outDir": "lib", "sourceMap": true, "removeComments": true, - "noUnusedLocals": true + "noUnusedLocals": true, + "preserveWatchOutput": true }, "include": [ "src/**/*" From ffd7d5513b8e873e717a92dcc1cf9301f1c5a985 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 27 May 2018 07:38:04 -0700 Subject: [PATCH 2/6] Rebuild demo when demo files change --- gulpfile.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 3b44f1fd..aad4105c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -144,8 +144,9 @@ gulp.task('webpack', ['build'], function() { .pipe(gulp.dest('demo/dist/')); }); + gulp.task('watch-demo', ['webpack'], () => { - gulp.watch(['./lib/*', './lib/**/*'], ['webpack']); + gulp.watch(['./demo/*', './lib/**/*'], ['webpack']); }); /** From 35fc10b0e666ec08232e3cdeecf6342f90510057 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 27 May 2018 07:42:34 -0700 Subject: [PATCH 3/6] Kill watch/prebuild tasks when one fails --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e1acafa5..882ed476 100644 --- a/package.json +++ b/package.json @@ -51,11 +51,11 @@ "mocha": "gulp test", "build:docs": "jsdoc -c jsdoc.json", "tsc": "tsc", - "prebuild": "concurrently --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem' 'tsc' 'tsc -p ./src/addons/attach' 'tsc -p ./src/addons/fit' 'tsc -p ./src/addons/fullscreen' 'tsc -p ./src/addons/search' 'tsc -p ./src/addons/terminado' 'tsc -p ./src/addons/webLinks' 'tsc -p ./src/addons/winptyCompat' 'tsc -p ./src/addons/zmodem'", + "prebuild": "concurrently --kill-others-on-fail --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem' 'tsc' 'tsc -p ./src/addons/attach' 'tsc -p ./src/addons/fit' 'tsc -p ./src/addons/fullscreen' 'tsc -p ./src/addons/search' 'tsc -p ./src/addons/terminado' 'tsc -p ./src/addons/webLinks' 'tsc -p ./src/addons/winptyCompat' 'tsc -p ./src/addons/zmodem'", "build": "gulp build", "prepublish": "npm run build", "coveralls": "gulp coveralls", "webpack": "gulp webpack", - "watch": "concurrently --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem,demo' 'tsc -w' 'tsc -w -p ./src/addons/attach' 'tsc -w -p ./src/addons/fit' 'tsc -w -p ./src/addons/fullscreen' 'tsc -w -p ./src/addons/search' 'tsc -w -p ./src/addons/terminado' 'tsc -w -p ./src/addons/webLinks' 'tsc -w -p ./src/addons/winptyCompat' 'tsc -w -p ./src/addons/zmodem' 'gulp watch-demo'" + "watch": "concurrently --kill-others-on-fail --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem,demo,server' 'tsc -w' 'tsc -w -p ./src/addons/attach' 'tsc -w -p ./src/addons/fit' 'tsc -w -p ./src/addons/fullscreen' 'tsc -w -p ./src/addons/search' 'tsc -w -p ./src/addons/terminado' 'tsc -w -p ./src/addons/webLinks' 'tsc -w -p ./src/addons/winptyCompat' 'tsc -w -p ./src/addons/zmodem' 'gulp watch-demo'" } } From 834b266b7f751d16fcebafd3ffc6863ccbe04c4c Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 27 May 2018 07:59:44 -0700 Subject: [PATCH 4/6] Move demo build into npm start --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 882ed476..092692df 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "zmodem.js": "^0.1.5" }, "scripts": { - "start": "node demo/app", + "start": "concurrently --kill-others-on-fail --names 'demo,server' 'gulp watch-demo' 'node demo/app'", "start-zmodem": "node demo/zmodem/app", "lint": "tslint 'src/**/*.ts'", "test": "npm-run-all mocha lint", @@ -56,6 +56,6 @@ "prepublish": "npm run build", "coveralls": "gulp coveralls", "webpack": "gulp webpack", - "watch": "concurrently --kill-others-on-fail --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem,demo,server' 'tsc -w' 'tsc -w -p ./src/addons/attach' 'tsc -w -p ./src/addons/fit' 'tsc -w -p ./src/addons/fullscreen' 'tsc -w -p ./src/addons/search' 'tsc -w -p ./src/addons/terminado' 'tsc -w -p ./src/addons/webLinks' 'tsc -w -p ./src/addons/winptyCompat' 'tsc -w -p ./src/addons/zmodem' 'gulp watch-demo'" + "watch": "concurrently --kill-others-on-fail --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem' 'tsc -w' 'tsc -w -p ./src/addons/attach' 'tsc -w -p ./src/addons/fit' 'tsc -w -p ./src/addons/fullscreen' 'tsc -w -p ./src/addons/search' 'tsc -w -p ./src/addons/terminado' 'tsc -w -p ./src/addons/webLinks' 'tsc -w -p ./src/addons/winptyCompat' 'tsc -w -p ./src/addons/zmodem'" } } From c2568a68578f9fb478ed3168b087eaac6e89043f Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Mon, 28 May 2018 05:44:15 -0700 Subject: [PATCH 5/6] Fix Windows build --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 092692df..bf3cbd57 100644 --- a/package.json +++ b/package.json @@ -51,11 +51,11 @@ "mocha": "gulp test", "build:docs": "jsdoc -c jsdoc.json", "tsc": "tsc", - "prebuild": "concurrently --kill-others-on-fail --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem' 'tsc' 'tsc -p ./src/addons/attach' 'tsc -p ./src/addons/fit' 'tsc -p ./src/addons/fullscreen' 'tsc -p ./src/addons/search' 'tsc -p ./src/addons/terminado' 'tsc -p ./src/addons/webLinks' 'tsc -p ./src/addons/winptyCompat' 'tsc -p ./src/addons/zmodem'", + "prebuild": "concurrently --kill-others-on-fail --names \"lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem\" \"tsc\" \"tsc -p ./src/addons/attach\" \"tsc -p ./src/addons/fit\" \"tsc -p ./src/addons/fullscreen\" \"tsc -p ./src/addons/search\" \"tsc -p ./src/addons/terminado\" \"tsc -p ./src/addons/webLinks\" \"tsc -p ./src/addons/winptyCompat\" \"tsc -p ./src/addons/zmodem\"", "build": "gulp build", "prepublish": "npm run build", "coveralls": "gulp coveralls", "webpack": "gulp webpack", - "watch": "concurrently --kill-others-on-fail --names 'lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem' 'tsc -w' 'tsc -w -p ./src/addons/attach' 'tsc -w -p ./src/addons/fit' 'tsc -w -p ./src/addons/fullscreen' 'tsc -w -p ./src/addons/search' 'tsc -w -p ./src/addons/terminado' 'tsc -w -p ./src/addons/webLinks' 'tsc -w -p ./src/addons/winptyCompat' 'tsc -w -p ./src/addons/zmodem'" + "watch": "concurrently --kill-others-on-fail --names \"lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem\" \"tsc -w\" \"tsc -w -p ./src/addons/attach\" \"tsc -w -p ./src/addons/fit\" \"tsc -w -p ./src/addons/fullscreen\" \"tsc -w -p ./src/addons/search\" \"tsc -w -p ./src/addons/terminado\" \"tsc -w -p ./src/addons/webLinks\" \"tsc -w -p ./src/addons/winptyCompat\" \"tsc -w -p ./src/addons/zmodem\"" } } From 3ce71b7f8f6b7a41159a836721bbfa64f40ba6cc Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Mon, 28 May 2018 05:49:47 -0700 Subject: [PATCH 6/6] Add css copy tasks --- gulpfile.js | 13 +++++++++++-- package.json | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index aad4105c..8fe5bf9c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,6 +20,7 @@ const webpack = require('webpack-stream'); const buildDir = process.env.BUILD_DIR || 'build'; const tsProject = ts.createProject('tsconfig.json'); +let srcDir = tsProject.config.compilerOptions.rootDir; let outDir = tsProject.config.compilerOptions.outDir; const addons = fs.readdirSync(`${__dirname}/src/addons`); @@ -30,11 +31,19 @@ if (path.normalize(outDir).indexOf(__dirname) !== 0) { outDir = `${__dirname}/${path.normalize(outDir)}`; } +gulp.task('css', function() { + return gulp.src(`${srcDir}/**/*.css`).pipe(gulp.dest(outDir)); +}); + +gulp.task('watch-css', function() { + return gulp.watch(`${srcDir}/**/*.css`, ['css']); +}); + /** * Bundle JavaScript files produced by the `tsc` task, into a single file named `xterm.js` with * Browserify. */ -gulp.task('browserify', [], function() { +gulp.task('browserify', function() { // Ensure that the build directory exists fs.ensureDirSync(buildDir); @@ -60,7 +69,7 @@ gulp.task('browserify', [], function() { return merge(bundleStream, copyStylesheets); }); -gulp.task('browserify-addons', [], function() { +gulp.task('browserify-addons', function() { const bundles = addons.map((addon) => { const addonOptions = { basedir: `${buildDir}/addons/${addon}`, diff --git a/package.json b/package.json index bf3cbd57..42fd0bef 100644 --- a/package.json +++ b/package.json @@ -51,11 +51,11 @@ "mocha": "gulp test", "build:docs": "jsdoc -c jsdoc.json", "tsc": "tsc", - "prebuild": "concurrently --kill-others-on-fail --names \"lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem\" \"tsc\" \"tsc -p ./src/addons/attach\" \"tsc -p ./src/addons/fit\" \"tsc -p ./src/addons/fullscreen\" \"tsc -p ./src/addons/search\" \"tsc -p ./src/addons/terminado\" \"tsc -p ./src/addons/webLinks\" \"tsc -p ./src/addons/winptyCompat\" \"tsc -p ./src/addons/zmodem\"", + "prebuild": "concurrently --kill-others-on-fail --names \"lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem,css\" \"tsc\" \"tsc -p ./src/addons/attach\" \"tsc -p ./src/addons/fit\" \"tsc -p ./src/addons/fullscreen\" \"tsc -p ./src/addons/search\" \"tsc -p ./src/addons/terminado\" \"tsc -p ./src/addons/webLinks\" \"tsc -p ./src/addons/winptyCompat\" \"tsc -p ./src/addons/zmodem\" \"gulp css\"", "build": "gulp build", "prepublish": "npm run build", "coveralls": "gulp coveralls", "webpack": "gulp webpack", - "watch": "concurrently --kill-others-on-fail --names \"lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem\" \"tsc -w\" \"tsc -w -p ./src/addons/attach\" \"tsc -w -p ./src/addons/fit\" \"tsc -w -p ./src/addons/fullscreen\" \"tsc -w -p ./src/addons/search\" \"tsc -w -p ./src/addons/terminado\" \"tsc -w -p ./src/addons/webLinks\" \"tsc -w -p ./src/addons/winptyCompat\" \"tsc -w -p ./src/addons/zmodem\"" + "watch": "concurrently --kill-others-on-fail --names \"lib,attach,fit,fullscreen,search,terminado,webLinks,winptyCompat,zmodem,css\" \"tsc -w\" \"tsc -w -p ./src/addons/attach\" \"tsc -w -p ./src/addons/fit\" \"tsc -w -p ./src/addons/fullscreen\" \"tsc -w -p ./src/addons/search\" \"tsc -w -p ./src/addons/terminado\" \"tsc -w -p ./src/addons/webLinks\" \"tsc -w -p ./src/addons/winptyCompat\" \"tsc -w -p ./src/addons/zmodem\" \"gulp watch-css\"" } }