var gulp = require('gulp') , sourcemaps = require('gulp-sourcemaps') , ts = require('gulp-typescript') , typescript = require('typescript') , del = require('del') , merge = require('merge2') , path = require('path') , spawn = require('child_process').spawn; var lib = { project: ts.createProject('./src/lib/tsconfig.json', { typescript: typescript }), bin: "./bin/ts-async-github-sample", main: "./lib/github", base: "./src/lib/", dest: "./lib/", src: ["./src/lib/**/*.ts"], out: ["./lib/**/*"] }; gulp.task("clean:lib", clean(lib)); gulp.task("clean", ["clean:lib"]); gulp.task("build:lib", build(lib)); gulp.task("build", ["build:lib"]); gulp.task("test", ["build"], test(lib)); gulp.task("watch:lib", ["build:lib"], watch(src(lib), ["build:lib"])); gulp.task("watch", ["build", "test"], watch(src(lib), ["test"])); gulp.task("default", ["build"]); function src() { return Array.from(arguments).reduce(function (ar, opts) { return ar.concat(opts.src); }, []); } function clean(opts) { return function (done) { del(opts.out, done); }; } function build(opts) { return function () { var tee = gulp .src(opts.src, { base: opts.base }) .pipe(sourcemaps.init()) .pipe(ts(opts.project)); return merge([ tee.dts .pipe(gulp.dest(opts.dest)), tee.js .pipe(sourcemaps.write('.', { includeContent: false, sourceRoot: path.relative(opts.dest, opts.base) })) .pipe(gulp.dest(opts.dest)) ]); }; } function test(opts) { return function (done) { var args = [opts.bin]; console.log("Executing test..."); spawn(process.argv[0], args, { stdio: "inherit" }).on("exit", function (code) { done(code !== 0 ? "Error executing script." : undefined); }); }; } function watch(src, tasks) { return function () { return gulp.watch(src, tasks); } }