X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=gulpfile.js;h=ef4e46099858a36e60b12b3ebb5678973c1b3960;hb=48dab494db8b4e1eabcbc656501f8f538cd104cc;hp=8aa86b115979fd9dc81f72009e243e6baf33807e;hpb=a14a0834e9326fdca50a402b80cd4e6aa2bbb881;p=mirror_xterm.js.git diff --git a/gulpfile.js b/gulpfile.js index 8aa86b1..ef4e460 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,40 +1,51 @@ +/** + * @license MIT + */ + const browserify = require('browserify'); const buffer = require('vinyl-buffer'); +const coveralls = require('gulp-coveralls'); const fs = require('fs-extra'); const gulp = require('gulp'); +const istanbul = require('gulp-istanbul'); const merge = require('merge-stream'); const mocha = require('gulp-mocha'); -const mochaPhantomJs = require('gulp-mocha-phantomjs'); const sorcery = require('sorcery'); const source = require('vinyl-source-stream'); const sourcemaps = require('gulp-sourcemaps'); const ts = require('gulp-typescript'); - +const util = require('gulp-util'); let buildDir = process.env.BUILD_DIR || 'build'; - +let tsProject = ts.createProject('tsconfig.json'); +let tsProjectSearchAddon = ts.createProject('./src/addons/search/tsconfig.json'); +let srcDir = tsProject.config.compilerOptions.rootDir; +let outDir = tsProject.config.compilerOptions.outDir; /** * Compile TypeScript sources to JavaScript files and create a source map file for each TypeScript * file compiled. */ gulp.task('tsc', function () { - // Remove the lib/ directory to prevent confusion if files were deleted in src/ - fs.emptyDirSync('lib'); + // Remove the ${outDir}/ directory to prevent confusion if files were deleted in ${srcDir}/ + fs.emptyDirSync(`${outDir}`); - // Build all TypeScript files (including tests) to lib/, based on the configuration defined in + // Build all TypeScript files (including tests) to ${outDir}/, based on the configuration defined in // `tsconfig.json`. - let tsProject = ts.createProject('tsconfig.json'); let tsResult = tsProject.src().pipe(sourcemaps.init()).pipe(tsProject()); - let tsc = tsResult.js.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})).pipe(gulp.dest('lib')); + let tsc = tsResult.js.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})).pipe(gulp.dest(outDir)); + + fs.emptyDirSync(`${outDir}/addons/search`); + let tsResultSearchAddon = tsProjectSearchAddon.src().pipe(sourcemaps.init()).pipe(tsProjectSearchAddon()); + let tscSearchAddon = tsResultSearchAddon.js.pipe(sourcemaps.write('.', {includeContent: false, sourceRoot: ''})).pipe(gulp.dest(`${outDir}/addons/search`)); - // Copy all addons from src/ to lib/ - let copyAddons = gulp.src('src/addons/**/*').pipe(gulp.dest('lib/addons')); + // Copy all addons from ${srcDir}/ to ${outDir}/ + let copyAddons = gulp.src([`${srcDir}/addons/**/*`, `!${srcDir}/addons/search`, `!${srcDir}/addons/search/**`]).pipe(gulp.dest(`${outDir}/addons`)); - // Copy stylesheets from src/ to lib/ - let copyStylesheets = gulp.src('src/**/*.css').pipe(gulp.dest('lib')); + // Copy stylesheets from ${srcDir}/ to ${outDir}/ + let copyStylesheets = gulp.src(`${srcDir}/**/*.css`).pipe(gulp.dest(outDir)); - return merge(tsc, copyAddons, copyStylesheets); + return merge(tsc, tscSearchAddon, copyAddons, copyStylesheets); }); /** @@ -48,7 +59,7 @@ gulp.task('browserify', ['tsc'], function() { let browserifyOptions = { basedir: buildDir, debug: true, - entries: ['../lib/xterm.js'], + entries: [`${outDir}/xterm.js`], standalone: 'Terminal', cache: {}, packageCache: {} @@ -61,36 +72,93 @@ gulp.task('browserify', ['tsc'], function() { .pipe(sourcemaps.write('./')) .pipe(gulp.dest(buildDir)); - // Copy all add-ons from lib/ to buildDir - let copyAddons = gulp.src('lib/addons/**/*').pipe(gulp.dest(`${buildDir}/addons`)); + // Copy stylesheets from ${outDir}/ to ${buildDir}/ + let copyStylesheets = gulp.src(`${outDir}/**/*.css`).pipe(gulp.dest(buildDir)); + + return merge(bundleStream, copyStylesheets); +}); + +gulp.task('browserify-addons', ['tsc'], function() { + let searchOptions = { + basedir: `${buildDir}/addons/search`, + debug: true, + entries: [`${outDir}/addons/search/search.js`], + cache: {}, + packageCache: {} + }; + let searchBundle = browserify(searchOptions) + .bundle() + .pipe(source('./addons/search/search.js')) + .pipe(buffer()) + .pipe(sourcemaps.init({loadMaps: true, sourceRoot: ''})) + .pipe(sourcemaps.write('./')) + .pipe(gulp.dest(buildDir)); + + // Copy all add-ons from outDir to buildDir + let copyAddons = gulp.src([ + // Copy JS addons + `${outDir}/addons/**/*`, + // Exclude TS addons from copy as they are being built via browserify + `!${outDir}/addons/search`, + `!${outDir}/addons/search/**` + ]).pipe(gulp.dest(`${buildDir}/addons`)); - // Copy stylesheets from src/ to lib/ - let copyStylesheets = gulp.src('lib/**/*.css').pipe(gulp.dest(buildDir)); + return merge(searchBundle, copyAddons); +}); - return merge(bundleStream, copyAddons, copyStylesheets); +gulp.task('instrument-test', function () { + return gulp.src([`${outDir}/**/*.js`]) + // Covering files + .pipe(istanbul()) + // Force `require` to return covered files + .pipe(istanbul.hookRequire()); }); -gulp.task('test-mocha', function () { - return gulp.src(['lib/*test.js', 'lib/**/*test.js'], {read: false}) +gulp.task('mocha', ['instrument-test'], function () { + return gulp.src([`${outDir}/*test.js`, `${outDir}/**/*test.js`], {read: false}) .pipe(mocha()) + .once('error', () => process.exit(1)) + .pipe(istanbul.writeReports()); }); -gulp.task('test-mocha-phantomjs', function () { - return gulp.src('test-harness.html') - .pipe(mochaPhantomJs()); +/** + * Run single test file by file name(without file extension). Example of the command: + * gulp mocha-test --test InputHandler.test + */ +gulp.task('mocha-test', ['instrument-test'], function () { + let testName = util.env.test; + util.log("Run test by Name: " + testName); + return gulp.src([`${outDir}/${testName}.js`, `${outDir}/**/${testName}.js`], {read: false}) + .pipe(mocha()) + .once('error', () => process.exit(1)) + .pipe(istanbul.writeReports()); }); /** * Use `sorcery` to resolve the source map chain and point back to the TypeScript files. * (Without this task the source maps produced for the JavaScript bundle points into the - * compiled JavaScript files in lib/). + * compiled JavaScript files in ${outDir}/). */ gulp.task('sorcery', ['browserify'], function () { - var chain = sorcery.loadSync(`${buildDir}/xterm.js`); - var map = chain.apply(); + let chain = sorcery.loadSync(`${buildDir}/xterm.js`); + chain.apply(); chain.writeSync(); }); -gulp.task('build', ['sorcery']); -gulp.task('test', ['test-mocha', 'test-mocha-phantomjs']); +gulp.task('sorcery-addons', ['browserify-addons'], function () { + var chain = sorcery.loadSync(`${buildDir}/addons/search/search.js`); + chain.apply(); + chain.writeSync(); +}); + +/** + * Submit coverage results to coveralls.io + */ +gulp.task('coveralls', function () { + gulp.src('coverage/**/lcov.info') + .pipe(coveralls()); +}); + +gulp.task('build', ['sorcery', 'sorcery-addons']); +gulp.task('test', ['mocha']); gulp.task('default', ['build']);