#!/usr/bin/env node /// var NpmtsPlugins; (function (NpmtsPlugins) { NpmtsPlugins.init = function () { var plugins = { beautylog: require("beautylog"), fs: require("fs-extra"), gulp: require("gulp"), g: { insert: require("gulp-insert"), sequence: require("gulp-sequence"), typescript: require("gulp-typescript") }, mergeStream: require("merge2"), mocha: require("mocha"), path: require("path"), q: require("q"), smartcli: require("smartcli"), smartfile: require("smartfile"), typings: require("typings") }; return plugins; }; })(NpmtsPlugins || (NpmtsPlugins = {})); /// /// var NpmtsPaths; (function (NpmtsPaths) { NpmtsPaths.init = function () { var paths = {}; paths.cwd = plugins.smartcli.get.cwd().path; paths.tsDir = plugins.path.join(paths.cwd, "ts/"); paths.indexTS = plugins.path.join(paths.cwd, "ts/index.ts"); paths.testTS = plugins.path.join(paths.cwd, "ts/test.ts"); paths.testDir = plugins.path.join(paths.cwd, "test/"); return paths; }; })(NpmtsPaths || (NpmtsPaths = {})); /// var NpmtsOptions; (function (NpmtsOptions) { NpmtsOptions.config = {}; NpmtsOptions.run = function () { var done = plugins.q.defer(); var configPath = plugins.path.join(paths.cwd, "npmts.json"); if (plugins.smartfile.checks.fileExistsSync(configPath)) { plugins.beautylog.info("npmts.json".blue + " config file found!"); NpmtsOptions.config = plugins.smartfile.readFileToObject(configPath); switch (NpmtsOptions.config.mode) { case "default": plugins.beautylog.log("mode is " + NpmtsOptions.config.mode.yellow); done.resolve(); break; case "custom": plugins.beautylog.log("mode is " + NpmtsOptions.config.mode.yellow); done.resolve(); break; default: plugins.beautylog.error("mode " + NpmtsOptions.config.mode.yellow + " not recognised!".red); } ; } else { plugins.beautylog.log("no config file found: so mode is " + "default".yellow); NpmtsOptions.config.mode = "default"; done.resolve(); } ; return done.promise; }; })(NpmtsOptions || (NpmtsOptions = {})); /// var NpmtsCustom; (function (NpmtsCustom) { NpmtsCustom.run = function () { var done = plugins.q.defer(); var config = NpmtsOptions.config; if (config.mode === "custom") { plugins.beautylog.log("now running custom tasks"); var moduleStream = plugins.mergeStream({ end: false }); /* ------------------------------------------------- * ----------- first install typings --------------- * ----------------------------------------------- */ var typingsDone = plugins.q.defer(); var checkTypingsDone = function (indexArg, compareArray) { if ((indexArg + 1) == compareArray.length) { plugins.beautylog.success("custom typings installed successfully"); typingsDone.resolve(); } }; for (var key in config.typings) { plugins.beautylog.log("now installing " + "typings.json".yellow + " from " + config.typings[key].blue); plugins.typings.install({ production: false, cwd: plugins.path.join(paths.cwd, config.typings[key]) }) .then(function () { checkTypingsDone(key, config.typings); }); } /* ------------------------------------------------- * ----------- second compile TS ------------------- * ----------------------------------------------- */ typingsDone.promise.then(function () { for (var key in config.ts) { plugins.beautylog.log("now compiling" + key.blue); var tsStream = plugins.gulp.src(plugins.path.join(paths.cwd, key)) .pipe(plugins.g.typescript({ out: plugins.path.basename(config.ts[key]), declaration: true })); var stream = plugins.mergeStream([ tsStream.dts.pipe(plugins.gulp.dest(paths.cwd)), tsStream.js .pipe(plugins.g.insert.prepend('#!/usr/bin/env node\n\n')) .pipe(plugins.gulp.dest(plugins.path.dirname(plugins.path.join(paths.cwd, config.ts[key])))) ]); moduleStream.add(stream); } moduleStream.on("queueDrain", function () { plugins.beautylog.success("custom TypeScript installed successfully"); moduleStream.on("finish", function () { done.resolve(); }); moduleStream.end(); }); }); } return done.promise; }; })(NpmtsCustom || (NpmtsCustom = {})); /// var NpmtsDefault; (function (NpmtsDefault) { NpmtsDefault.run = function () { var done = plugins.q.defer(); plugins.gulp.task("defaultTypings", function (cb) { plugins.beautylog.log("now installing default typings"); plugins.typings.install({ production: false, cwd: paths.tsDir }) .then(function () { cb(); }); }); plugins.gulp.task("defaultIndexTS", function () { plugins.beautylog.log("now compiling" + " ts/index.ts".blue); var tsResult = plugins.gulp.src(paths.indexTS) .pipe(plugins.g.typescript({ out: "./index.js", declaration: true })); return plugins.mergeStream([ tsResult.dts.pipe(plugins.gulp.dest(paths.cwd)), tsResult.js .pipe(plugins.g.insert.prepend('#!/usr/bin/env node\n\n')) .pipe(plugins.gulp.dest(paths.cwd)) ]); }); plugins.gulp.task("defaultTestTS", function () { plugins.beautylog.log("now compiling" + " ts/test.ts".blue); var stream = plugins.gulp.src(paths.testTS) .pipe(plugins.g.typescript({ out: "test.js" })) .pipe(plugins.gulp.dest(paths.testDir)); return stream; }); plugins.gulp.task("defaultCleanup", function (cb) { plugins.beautylog.success("default TypeScript for this module compiled successfully."); done.resolve(); cb(); }); plugins.gulp.task("default", function (cb) { if (NpmtsOptions.config.mode == "default") { plugins.g.sequence("defaultTypings", "defaultIndexTS", "defaultTestTS", "defaultCleanup", cb); } else { cb(); done.resolve(); } }); plugins.gulp.start.apply(plugins.gulp, ['default']); return done.promise; }; })(NpmtsDefault || (NpmtsDefault = {})); /// var NpmtsTests; (function (NpmtsTests) { NpmtsTests.run = function () { var done = plugins.q.defer(); plugins.fs.ensureDirSync(paths.testDir); //make sure that mocha has a directory to look for tests plugins.beautylog.info("Now running mocha tests"); var mocha = new plugins.mocha(); // Instantiate a Mocha instance. mocha.addFile(plugins.path.join(paths.testDir, "test.js")); mocha.run(function (failures) { process.on('exit', function () { process.exit(failures); }); }); return done.promise; }; })(NpmtsTests || (NpmtsTests = {})); /// var NpmtsPromisechain; (function (NpmtsPromisechain) { NpmtsPromisechain.init = function () { var promisechain; NpmtsOptions.run() .then(NpmtsDefault.run) .then(NpmtsCustom.run) .then(NpmtsTests.run); return promisechain; }; })(NpmtsPromisechain || (NpmtsPromisechain = {})); /// /// /// /// /// /// /// /// /// console.log("**** starting NPMTS ****"); var plugins = NpmtsPlugins.init(); var paths = NpmtsPaths.init(); var promisechain = NpmtsPromisechain.init();