UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

90 lines (75 loc) 3.34 kB
var gulp = require("gulp"); var del = require("del"); var tslint = require("tslint"); var mocha = require("gulp-mocha"); var istanbul = require("gulp-istanbul"); var ts = require("gulp-typescript"); var filter = require("gulp-filter"); var gulpTslint = require("gulp-tslint"); var replace = require("gulp-replace"); var sourcemaps = require("gulp-sourcemaps"); var p = require("./package.json"); var tsNameOf = require("ts-nameof"); var merge = require("merge2"); var unusedDefinitionsFilter = filter([ "**", "!*/factories/CompilerFactory.d.ts", "!*/factories.d.ts", "!*/tests/**/*.d.ts", "!*/manipulation.d.ts", "!*/manipulation/**/*.d.ts" ]); gulp.task("typescript", ["clean-scripts"], function() { var tsProject = ts.createProject("tsconfig.json", { typescript: require("typescript") }); var tsResult = gulp.src(["./src/**/*.ts"]) .pipe(sourcemaps.init()) .pipe(tsNameOf()) .pipe(ts(tsProject)); return merge([ tsResult.dts.pipe(unusedDefinitionsFilter).pipe(gulp.dest('./dist')), tsResult.js.pipe(replace(/(}\)\()(.*\|\|.*;)/g, '$1/* istanbul ignore next */$2')) .pipe(replace(/(var __extends = \(this && this.__extends\))/g, '$1/* istanbul ignore next */')) .pipe(replace(/(if \(!exports.hasOwnProperty\(p\)\))/g, '/* istanbul ignore else */ $1')) // ignore empty constructors (for mixins and static classes) .pipe(replace(/(function [A-Za-z]+\(\) {[\s\n\t]+})/g, '/* istanbul ignore next */ $1')) .pipe(sourcemaps.write("./")) .pipe(gulp.dest("./dist")) ]); }); gulp.task("pre-test", ["typescript"], function () { return gulp.src(["dist/**/*.js", "!dist/tests/**/*.js", , "!dist/utils/TypeGuards.js"]) .pipe(istanbul()) .pipe(istanbul.hookRequire()); }); gulp.task("test", ["pre-test"], function() { return gulp.src("dist/tests/**/*.js") .pipe(mocha({ reporter: "progress", timeout: 10000 })) .pipe(istanbul.writeReports()) .pipe(istanbul.enforceThresholds({ thresholds: { global: 85 } })); }); gulp.task("tslint", function() { //var program = tslint.Linter.createProgram("./tsconfig.json"); // doesn't seem to work well return gulp.src(["./src/**/*.ts", "!./src/typings/**/*.d.ts", "./code-generation/**/*.ts"]) .pipe(gulpTslint({ formatter: "verbose", /*program*/ })) .pipe(gulpTslint.report()); }); gulp.task("watch", function() { gulp.watch("./src/**/*.ts", ["tslint", "typescript"]); }); gulp.task("clean-scripts", ["clean-code-generation"], function(cb) { return del(["./dist/**/*"], cb); }); gulp.task("clean-code-generation", function(cb) { return del(["./dist-cg/**/*"], cb); }); gulp.task("code-generate", ["clean-code-generation"], function (cb) { var tsProject = ts.createProject("tsconfig.json", { typescript: require("typescript") }); var tsResult = gulp.src(["./{src,code-generation}/**/*.ts"]) .pipe(tsNameOf()) .pipe(ts(tsProject)); return merge([ tsResult.dts.pipe(unusedDefinitionsFilter).pipe(gulp.dest('./dist-cg')), tsResult.js.pipe(gulp.dest("./dist-cg")) ]); }); gulp.task("default", ["tslint", "typescript"]);