mirror of https://github.com/grpc/grpc-node.git
				
				
				
			Use gulp-help and allow multiple --file params
This commit is contained in:
		
							parent
							
								
									dcc18ee2e7
								
							
						
					
					
						commit
						ceeccb783f
					
				
							
								
								
									
										127
									
								
								gulpfile.js
								
								
								
								
							
							
						
						
									
										127
									
								
								gulpfile.js
								
								
								
								
							| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
const del = require('del');
 | 
			
		||||
const gulp = require('gulp');
 | 
			
		||||
const _gulp = require('gulp');
 | 
			
		||||
const help = require('gulp-help');
 | 
			
		||||
const mocha = require('gulp-mocha');
 | 
			
		||||
const sourcemaps = require('gulp-sourcemaps');
 | 
			
		||||
const tslint = require('gulp-tslint');
 | 
			
		||||
| 
						 | 
				
			
			@ -9,12 +10,19 @@ const merge2 = require('merge2');
 | 
			
		|||
const path = require('path');
 | 
			
		||||
const through = require('through2');
 | 
			
		||||
 | 
			
		||||
// gulp-help monkeypatches tasks to have an additional description parameter
 | 
			
		||||
const gulp = help(_gulp);
 | 
			
		||||
 | 
			
		||||
const tslintPath = './node_modules/google-ts-style/tslint.json';
 | 
			
		||||
const tsconfigPath = './tsconfig.json';
 | 
			
		||||
const outDir = 'build';
 | 
			
		||||
 | 
			
		||||
function onError() {}
 | 
			
		||||
 | 
			
		||||
// Coalesces all specified --file parameters into a single array
 | 
			
		||||
const files = !util.env.file ? [] :
 | 
			
		||||
  Array.isArray(util.env.file) ? util.env.file : [util.env.file];
 | 
			
		||||
 | 
			
		||||
// If --dev is passed, override certain ts config options
 | 
			
		||||
let tsDevOptions = {};
 | 
			
		||||
if (util.env.dev) {
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +72,7 @@ function makeCompileFn(globs) {
 | 
			
		|||
/**
 | 
			
		||||
 * Runs tslint on files in src/, with linting rules defined in tslint.json.
 | 
			
		||||
 */
 | 
			
		||||
gulp.task('lint', () => {
 | 
			
		||||
gulp.task('lint', 'Emits linting errors found in src/ and test/.', () => {
 | 
			
		||||
  const program = require('tslint').Linter.createProgram(tsconfigPath);
 | 
			
		||||
  gulp.src(['src/**/*.ts', 'test/**/*.ts'])
 | 
			
		||||
    .pipe(tslint({
 | 
			
		||||
| 
						 | 
				
			
			@ -76,7 +84,7 @@ gulp.task('lint', () => {
 | 
			
		|||
    .on('warning', onError);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task('clean', () => {
 | 
			
		||||
gulp.task('clean', 'Deletes transpiled code.', () => {
 | 
			
		||||
  return del(outDir);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,86 +94,69 @@ gulp.task('clean', () => {
 | 
			
		|||
 * Currently, all errors are emitted twice. This is being tracked here:
 | 
			
		||||
 * https://github.com/ivogabe/gulp-typescript/issues/438
 | 
			
		||||
 */
 | 
			
		||||
gulp.task('compile', makeCompileFn({ transpile: ['*.ts', 'src/**/*.ts'] }));
 | 
			
		||||
gulp.task('compile', 'Transpiles src/.',
 | 
			
		||||
  makeCompileFn({ transpile: ['*.ts', 'src/**/*.ts'] }));
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Transpiles TypeScript files in both src/ and test/.
 | 
			
		||||
 */
 | 
			
		||||
gulp.task('test.compile', ['compile'],
 | 
			
		||||
  makeCompileFn({ transpile: '**/test/**/*.ts', copy: 'test/**/!(*.ts)' }));
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Starts watching files in src/, running the 'compile' step whenever a file
 | 
			
		||||
 * changes.
 | 
			
		||||
 */
 | 
			
		||||
gulp.task('watch', () => {
 | 
			
		||||
  gulp.start(['compile']);
 | 
			
		||||
  return gulp.watch(srcGlob, ['compile']);
 | 
			
		||||
});
 | 
			
		||||
gulp.task('test.compile', 'After dep tasks, transpiles test/.', ['compile'],
 | 
			
		||||
  makeCompileFn({ transpile: ['test/**/*.ts'], copy: 'test/**/!(*.ts)' }));
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Transpiles src/ and test/, and then runs all tests.
 | 
			
		||||
 */
 | 
			
		||||
gulp.task('test', ['test.compile'], () => {
 | 
			
		||||
  return gulp.src(`${outDir}/test/**/*.js`)
 | 
			
		||||
    .pipe(mocha());
 | 
			
		||||
});
 | 
			
		||||
gulp.task('test', 'After dep tasks, runs all tests.',
 | 
			
		||||
  ['test.compile'], () => {
 | 
			
		||||
    return gulp.src(`${outDir}/test/**/*.js`)
 | 
			
		||||
      .pipe(mocha());
 | 
			
		||||
  }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Compiles a single test file. Only intended as a pre-requisite for
 | 
			
		||||
 * 'test.single'.
 | 
			
		||||
 * @private
 | 
			
		||||
 * Transpiles individual files, specified by the --file flag.
 | 
			
		||||
 */
 | 
			
		||||
gulp.task('.compileSingleTestFile', util.env.file ?
 | 
			
		||||
  makeCompileFn({ transpile: path.relative('.', util.env.file) }) :
 | 
			
		||||
  () => { throw new Error('No file specified'); });
 | 
			
		||||
gulp.task('compile.single', 'Transpiles individual files specified by --file.',
 | 
			
		||||
  makeCompileFn({
 | 
			
		||||
    transpile: files.map(f => path.relative('.', f))
 | 
			
		||||
  })
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Run a single test, specified by its pre-transpiled source path (as supplied
 | 
			
		||||
 * through the '--file' flag). This is intended to be used as part of a VS Code
 | 
			
		||||
 * "Gulp task" launch configuration; setting the "args" field to
 | 
			
		||||
 * Run individual tests, specified by their pre-transpiled source path (as
 | 
			
		||||
 * supplied through the '--file' flag). This is intended to be used as part of a
 | 
			
		||||
 * VS Code "Gulp task" launch configuration; setting the "args" field to
 | 
			
		||||
 * ["test.single", "--file", "${file}"] makes it possible for one to debug the
 | 
			
		||||
 * currently open TS mocha test file in one step.
 | 
			
		||||
 */
 | 
			
		||||
gulp.task('test.single', ['compile', '.compileSingleTestFile'], () => {
 | 
			
		||||
  // util.env contains CLI arguments for the gulp task.
 | 
			
		||||
  const { file } = util.env;
 | 
			
		||||
  // Determine the path to the transpiled version of this TS file.
 | 
			
		||||
  const dir = path.dirname(path.relative('.', file));
 | 
			
		||||
  const basename = path.basename(file, '.ts');
 | 
			
		||||
  const transpiledPath = `${outDir}/${dir}/${basename}.js`;
 | 
			
		||||
  // Construct an instance of Mocha's runner API and feed it the path to the
 | 
			
		||||
  // transpiled source.
 | 
			
		||||
  return gulp.src(transpiledPath)
 | 
			
		||||
    .pipe(through.obj((file, enc, cb) => {
 | 
			
		||||
      // Construct a new Mocha runner instance.
 | 
			
		||||
      const Mocha = require('mocha');
 | 
			
		||||
      const runner = new Mocha();
 | 
			
		||||
      // Add the path to the test file to debug.
 | 
			
		||||
      runner.addFile(file.path);
 | 
			
		||||
      // Run the test suite.
 | 
			
		||||
      runner.run((failures) => {
 | 
			
		||||
        if (failures > 0) {
 | 
			
		||||
          cb(new Error(`Mocha: ${failures} failures in ${file.path}]`));
 | 
			
		||||
        } else {
 | 
			
		||||
          cb(null);
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    }));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
gulp.task('help', () => {
 | 
			
		||||
  console.log(`
 | 
			
		||||
gulp help: Prints this message.
 | 
			
		||||
gulp clean: Deletes transpiled code.
 | 
			
		||||
gulp compile: Transpiles src.
 | 
			
		||||
gulp lint: Emits linting errors found in src/ and test/.
 | 
			
		||||
gulp test.compile: Transpiles src and test.
 | 
			
		||||
gulp test: Runs \`gulp test.compile\`, and then runs all tests.
 | 
			
		||||
gulp test.single --file $FILE: Transpiles src and $FILE, and runs only the transpiled $FILE. (See also: #5)
 | 
			
		||||
gulp * --color: Prints output in color; particularly useful for tests.
 | 
			
		||||
gulp * --dev: Runs the task with relaxed TS compiler options.
 | 
			
		||||
  `.trim());
 | 
			
		||||
});
 | 
			
		||||
gulp.task('test.single', 'After dep tasks, runs individual files specified ' +
 | 
			
		||||
  'by --file.', ['compile', 'compile.single'], () => {
 | 
			
		||||
    // util.env contains CLI arguments for the gulp task.
 | 
			
		||||
    // Determine the path to the transpiled version of this TS file.
 | 
			
		||||
    const getTranspiledPath = (file) => {
 | 
			
		||||
      const dir = path.dirname(path.relative('.', file));
 | 
			
		||||
      const basename = path.basename(file, '.ts');
 | 
			
		||||
      return `${outDir}/${dir}/${basename}.js`;
 | 
			
		||||
    };
 | 
			
		||||
    // Construct an instance of Mocha's runner API and feed it the path to the
 | 
			
		||||
    // transpiled source.
 | 
			
		||||
    return gulp.src(files.map(getTranspiledPath))
 | 
			
		||||
      .pipe(through.obj((file, enc, cb) => {
 | 
			
		||||
        // Construct a new Mocha runner instance.
 | 
			
		||||
        const Mocha = require('mocha');
 | 
			
		||||
        const runner = new Mocha();
 | 
			
		||||
        // Add the path to the test file to debug.
 | 
			
		||||
        runner.addFile(file.path);
 | 
			
		||||
        // Run the test suite.
 | 
			
		||||
        runner.run((failures) => {
 | 
			
		||||
          if (failures > 0) {
 | 
			
		||||
            cb(new Error(`Mocha: ${failures} failures in ${file.path}]`));
 | 
			
		||||
          } else {
 | 
			
		||||
            cb(null);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      }));
 | 
			
		||||
  }
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
gulp.task('default', ['help']);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@
 | 
			
		|||
    "del": "^3.0.0",
 | 
			
		||||
    "google-ts-style": "latest",
 | 
			
		||||
    "gulp": "^3.9.1",
 | 
			
		||||
    "gulp-help": "^1.6.1",
 | 
			
		||||
    "gulp-mocha": "^4.3.1",
 | 
			
		||||
    "gulp-sourcemaps": "^2.6.0",
 | 
			
		||||
    "gulp-tslint": "^8.1.1",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue