diff --git a/dist/index.js b/dist/index.js index b17481c..3facb18 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3,25 +3,20 @@ require("typings-global"); /* ================================================== * Starting NPMTS main process. * ================================================== */ -var early = require("early"); +const early = require("early"); early.start('NPMTS'); -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const promisechain = require("./npmts.promisechain"); early.stop() - .then(function () { - var npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot); - var npmtsCli = new plugins.smartcli.Smartcli(); + .then(() => { + let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot); + let npmtsCli = new plugins.smartcli.Smartcli(); npmtsCli.standardTask() - .then(function (argvArg) { + .then((argvArg) => { plugins.beautylog.figletSync('NPMTS'); plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version); - try { - npmts_promisechain_1.promisechain(argvArg); - } - catch (err) { - console.log(err); - } + promisechain.run(argvArg).catch((err) => { console.log(err); }); }); npmtsCli.addVersion(npmtsProjectInfo.version); npmtsCli.startParse(); diff --git a/dist/npmts.assets.d.ts b/dist/npmts.assets.d.ts index bc073a9..1db7562 100644 --- a/dist/npmts.assets.d.ts +++ b/dist/npmts.assets.d.ts @@ -1,4 +1,4 @@ /// import 'typings-global'; import plugins = require('./npmts.plugins'); -export declare var run: (configArg: any) => plugins.Q.Promise<{}>; +export declare var run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.assets.js b/dist/npmts.assets.js index f02660f..1509d36 100644 --- a/dist/npmts.assets.js +++ b/dist/npmts.assets.js @@ -1,11 +1,11 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const npmts_promisechain_1 = require("./npmts.promisechain"); exports.run = function (configArg) { - var done = plugins.Q.defer(); - var config = configArg; + let done = plugins.q.defer(); + let config = configArg; npmts_promisechain_1.npmtsOra.text('now looking at ' + 'required assets'.yellow); if (config.cli === true) { plugins.smartfile.fs.copySync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'), plugins.path.join(paths.distDir, 'cli.js')); diff --git a/dist/npmts.check.d.ts b/dist/npmts.check.d.ts index f47fcec..b49fffe 100644 --- a/dist/npmts.check.d.ts +++ b/dist/npmts.check.d.ts @@ -2,4 +2,4 @@ import * as plugins from './npmts.plugins'; import { ProjectinfoNpm } from 'projectinfo'; export declare let projectInfo: ProjectinfoNpm; -export declare let run: (configArg: any) => plugins.Q.Promise<{}>; +export declare let run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.check.js b/dist/npmts.check.js index 1eee4d3..3fccfc5 100644 --- a/dist/npmts.check.js +++ b/dist/npmts.check.js @@ -1,20 +1,21 @@ "use strict"; -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); -var projectinfo_1 = require("projectinfo"); -var checkProjectTypings = function (configArg) { - var done = plugins.Q.defer(); +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const npmts_promisechain_1 = require("./npmts.promisechain"); +const projectinfo_1 = require("projectinfo"); +let checkProjectTypings = (configArg) => { + let done = plugins.q.defer(); + npmts_promisechain_1.npmtsOra.text('Check Module: Check Project Typings...'); exports.projectInfo = new projectinfo_1.ProjectinfoNpm(paths.cwd); if (typeof exports.projectInfo.packageJson.typings === 'undefined') { - plugins.beautylog.error("please add typings field to package.json"); + plugins.beautylog.error(`please add typings field to package.json`); process.exit(1); } ; done.resolve(configArg); return done.promise; }; -var depcheckOptions = { +const depcheckOptions = { ignoreBinPackage: false, parsers: { '*.ts': plugins.depcheck.parser.typescript @@ -28,9 +29,10 @@ var depcheckOptions = { plugins.depcheck.special.webpack ] }; -var checkDependencies = function (configArg) { - var done = plugins.Q.defer(); - var depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { +let checkDependencies = (configArg) => { + let done = plugins.q.defer(); + npmts_promisechain_1.npmtsOra.text('Check Module: Check Dependencies...'); + let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { ignoreDirs: [ 'test', 'dist', @@ -41,38 +43,32 @@ var checkDependencies = function (configArg) { 'babel-preset-*' ] }); - plugins.depcheck(paths.cwd, depcheckOptionsMerged, function (unused) { - for (var _i = 0, _a = unused.dependencies; _i < _a.length; _i++) { - var item = _a[_i]; - plugins.beautylog.warn("Watch out: unused dependency " + item.red); + plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { + for (let item of unused.dependencies) { + plugins.beautylog.warn(`Watch out: unused dependency "${item}"`); } - ; - for (var _b = 0, _c = unused.missing; _b < _c.length; _b++) { - var item = _c[_b]; - plugins.beautylog.error("unused devDependency " + item.red); + for (let item in unused.missing) { + plugins.beautylog.error(`unused devDependency "${item}"`); } - ; if (unused.missing.length > 0) { plugins.beautylog.info('exiting due to missing dependencies in package.json'); process.exit(1); } - for (var _d = 0, _e = unused.invalidFiles; _d < _e.length; _d++) { - var item = _e[_d]; - plugins.beautylog.warn("Watch out: could not parse file " + item.red); + for (let item in unused.invalidFiles) { + plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`); } ; - for (var _f = 0, _g = unused.invalidDirs; _f < _g.length; _f++) { - var item = _g[_f]; - plugins.beautylog.warn("Watch out: could not parse directory " + item.red); + for (let item in unused.invalidDirs) { + plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`); } - ; done.resolve(configArg); }); return done.promise; }; -var checkDevDependencies = function (configArg) { - var done = plugins.Q.defer(); - var depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { +let checkDevDependencies = (configArg) => { + let done = plugins.q.defer(); + npmts_promisechain_1.npmtsOra.text('Check Module: Check devDependencies...'); + let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { ignoreDirs: [ 'ts', 'dist', @@ -83,45 +79,41 @@ var checkDevDependencies = function (configArg) { 'babel-preset-*' ] }); - plugins.depcheck(paths.cwd, depcheckOptionsMerged, function (unused) { - for (var _i = 0, _a = unused.devDependencies; _i < _a.length; _i++) { - var item = _a[_i]; - plugins.beautylog.log("unused devDependency " + item.red); + plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { + for (let item of unused.devDependencies) { + plugins.beautylog.log(`unused devDependency ${item.red}`); } - ; - for (var _b = 0, _c = unused.missing; _b < _c.length; _b++) { - var item = _c[_b]; - plugins.beautylog.error("unused devDependency " + item.red); + for (let item in unused.missing) { + plugins.beautylog.error(`unused devDependency ${item.red}`); } - ; if (unused.missing.length > 0) { plugins.beautylog.info('exiting due to missing dependencies in package.json'); process.exit(1); } - for (var _d = 0, _e = unused.invalidFiles; _d < _e.length; _d++) { - var item = _e[_d]; - plugins.beautylog.warn("Watch out: could not parse file " + item.red); + for (let item in unused.invalidFiles) { + plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`); } - for (var _f = 0, _g = unused.invalidDirs; _f < _g.length; _f++) { - var item = _g[_f]; - plugins.beautylog.warn("Watch out: could not parse directory " + item.red); + for (let item in unused.invalidDirs) { + plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`); } done.resolve(configArg); }); return done.promise; }; -var checkNodeVersion = function (configArg) { - var done = plugins.Q.defer(); +let checkNodeVersion = (configArg) => { + let done = plugins.q.defer(); + npmts_promisechain_1.npmtsOra.text('checking node version'); done.resolve(configArg); return done.promise; }; -exports.run = function (configArg) { - var done = plugins.Q.defer(); - npmts_promisechain_1.npmtsOra.text('running project checks...'); +exports.run = (configArg) => { + let done = plugins.q.defer(); + npmts_promisechain_1.npmtsOra.text('Check Module: ...'); checkProjectTypings(configArg) .then(checkDependencies) .then(checkDevDependencies) .then(checkNodeVersion) - .then(done.resolve); + .then(done.resolve) + .catch((err) => { console.log(err); }); return done.promise; }; diff --git a/dist/npmts.clean.d.ts b/dist/npmts.clean.d.ts index 59bf5f6..deb1665 100644 --- a/dist/npmts.clean.d.ts +++ b/dist/npmts.clean.d.ts @@ -1,4 +1,4 @@ /// import 'typings-global'; import plugins = require('./npmts.plugins'); -export declare let run: (configArg: any) => plugins.Q.Promise<{}>; +export declare let run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.clean.js b/dist/npmts.clean.js index 8e8a52b..3cbcaae 100644 --- a/dist/npmts.clean.js +++ b/dist/npmts.clean.js @@ -1,19 +1,19 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); -var removeDist = function () { +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const npmts_promisechain_1 = require("./npmts.promisechain"); +let removeDist = function () { npmts_promisechain_1.npmtsOra.text('cleaning dist folder'); return plugins.smartfile.fs.remove(paths.distDir); }; -var removePages = function () { +let removePages = function () { npmts_promisechain_1.npmtsOra.text('cleaning pages folder'); return plugins.smartfile.fs.remove(paths.pagesDir); }; exports.run = function (configArg) { npmts_promisechain_1.npmtsOra.text('cleaning up from previous builds...'); - var done = plugins.Q.defer(); + let done = plugins.q.defer(); removeDist() .then(removePages) .then(function () { diff --git a/dist/npmts.compile.d.ts b/dist/npmts.compile.d.ts index 59bf5f6..deb1665 100644 --- a/dist/npmts.compile.d.ts +++ b/dist/npmts.compile.d.ts @@ -1,4 +1,4 @@ /// import 'typings-global'; import plugins = require('./npmts.plugins'); -export declare let run: (configArg: any) => plugins.Q.Promise<{}>; +export declare let run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.compile.js b/dist/npmts.compile.js index 01d775f..7806eeb 100644 --- a/dist/npmts.compile.js +++ b/dist/npmts.compile.js @@ -1,14 +1,14 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const npmts_promisechain_1 = require("./npmts.promisechain"); exports.run = function (configArg) { - var done = plugins.Q.defer(); - var config = configArg; + let done = plugins.q.defer(); + let config = configArg; npmts_promisechain_1.npmtsOra.text('now compiling ' + 'TypeScript'.yellow); plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd) - .then(function () { + .then(() => { plugins.beautylog.ok('compiled main TypeScript!'); plugins.beautylog.log('now compiling tests!'); return plugins.tsn.compileGlobStringObject(config.testTs); diff --git a/dist/npmts.options.d.ts b/dist/npmts.options.d.ts index 698d965..f6ca08a 100644 --- a/dist/npmts.options.d.ts +++ b/dist/npmts.options.d.ts @@ -11,5 +11,6 @@ export interface INpmtsConfig { testTs: any; ts: any; tsOptions: any; + watch: boolean; } -export declare var run: (argvArg: any) => plugins.Q.Promise<{}>; +export declare var run: (argvArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.options.js b/dist/npmts.options.js index 8ecb82a..27d4fff 100644 --- a/dist/npmts.options.js +++ b/dist/npmts.options.js @@ -1,12 +1,12 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const npmts_promisechain_1 = require("./npmts.promisechain"); ; exports.run = function (argvArg) { - var done = plugins.Q.defer(); - var defaultConfig = { + let done = plugins.q.defer(); + let defaultConfig = { argv: undefined, coverageTreshold: 70, docs: true, @@ -14,11 +14,12 @@ exports.run = function (argvArg) { test: true, testTs: {}, ts: {}, - tsOptions: {} + tsOptions: {}, + watch: false }; // mix with configfile npmts_promisechain_1.npmtsOra.text('looking for npmextra.json'); - var config = plugins.npmextra.dataFor({ + let config = plugins.npmextra.dataFor({ toolName: 'npmts', defaultSettings: defaultConfig, cwd: paths.cwd @@ -33,18 +34,18 @@ exports.run = function (argvArg) { done.resolve(config); break; default: - plugins.beautylog.error("mode not recognised!"); + plugins.beautylog.error(`mode not recognised!`); process.exit(1); } ; // handle default mode if (config.mode === 'default') { - config.ts = (_a = {}, - _a['./ts/**/*.ts'] = './dist/', - _a); - config.testTs = (_b = {}, - _b['./test/test.ts'] = './test/', - _b); + config.ts = { + ['./ts/**/*.ts']: './dist/' + }; + config.testTs = { + ['./test/test.ts']: './test/' + }; } ; // mix with commandline @@ -56,8 +57,11 @@ exports.run = function (argvArg) { config.docs = false; } ; + if (config.argv.watch) { + config.watch = true; + } + ; plugins.beautylog.ok('build options are ready!'); done.resolve(config); return done.promise; - var _a, _b; }; diff --git a/dist/npmts.paths.js b/dist/npmts.paths.js index fa586b5..b5cc0b2 100644 --- a/dist/npmts.paths.js +++ b/dist/npmts.paths.js @@ -1,6 +1,6 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); +const plugins = require("./npmts.plugins"); // NPMTS Paths exports.npmtsPackageRoot = plugins.path.join(__dirname, '../'); // Project paths diff --git a/dist/npmts.plugins.d.ts b/dist/npmts.plugins.d.ts index 2e7802e..79bf093 100644 --- a/dist/npmts.plugins.d.ts +++ b/dist/npmts.plugins.d.ts @@ -15,8 +15,9 @@ export import lodash = require('lodash'); export import npmextra = require('npmextra'); export import projectinfo = require('projectinfo'); export import path = require('path'); -export import Q = require('q'); +export import q = require('q'); export import shelljs = require('shelljs'); +export import smartchok = require('smartchok'); export import smartcli = require('smartcli'); export import smartcov = require('smartcov'); export import smartenv = require('smartenv'); diff --git a/dist/npmts.plugins.js b/dist/npmts.plugins.js index a5f630e..6ee61f3 100644 --- a/dist/npmts.plugins.js +++ b/dist/npmts.plugins.js @@ -16,8 +16,9 @@ exports.lodash = require("lodash"); exports.npmextra = require("npmextra"); exports.projectinfo = require("projectinfo"); exports.path = require("path"); -exports.Q = require("q"); +exports.q = require("q"); exports.shelljs = require("shelljs"); +exports.smartchok = require("smartchok"); exports.smartcli = require("smartcli"); exports.smartcov = require("smartcov"); exports.smartenv = require("smartenv"); diff --git a/dist/npmts.promisechain.d.ts b/dist/npmts.promisechain.d.ts index 81c2a3d..a1bfda2 100644 --- a/dist/npmts.promisechain.d.ts +++ b/dist/npmts.promisechain.d.ts @@ -3,4 +3,4 @@ import 'typings-global'; import plugins = require('./npmts.plugins'); import { Ora } from 'beautylog'; export declare let npmtsOra: Ora; -export declare let promisechain: (argvArg: any) => plugins.Q.Promise<{}>; +export declare let run: (argvArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.promisechain.js b/dist/npmts.promisechain.js index b4503c5..0b3aebf 100644 --- a/dist/npmts.promisechain.js +++ b/dist/npmts.promisechain.js @@ -1,17 +1,18 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); -var beautylog_1 = require("beautylog"); +const plugins = require("./npmts.plugins"); +const beautylog_1 = require("beautylog"); exports.npmtsOra = new beautylog_1.Ora('setting up TaskChain', 'cyan'); -var NpmtsAssets = require("./npmts.assets"); -var NpmtsCheck = require("./npmts.check"); -var NpmtsClean = require("./npmts.clean"); -var NpmtsCompile = require("./npmts.compile"); -var NpmtsTypeDoc = require("./npmts.typedoc"); -var NpmtsOptions = require("./npmts.options"); -var NpmtsTests = require("./npmts.tests"); -exports.promisechain = function (argvArg) { - var done = plugins.Q.defer(); +const NpmtsAssets = require("./npmts.assets"); +const NpmtsCheck = require("./npmts.check"); +const NpmtsClean = require("./npmts.clean"); +const NpmtsCompile = require("./npmts.compile"); +const NpmtsTypeDoc = require("./npmts.typedoc"); +const NpmtsOptions = require("./npmts.options"); +const NpmtsTests = require("./npmts.tests"); +const NpmtsWatch = require("./npmts.watch"); +exports.run = function (argvArg) { + let done = plugins.q.defer(); exports.npmtsOra.start(); NpmtsOptions.run(argvArg) .then(NpmtsClean.run) @@ -20,8 +21,9 @@ exports.promisechain = function (argvArg) { .then(NpmtsAssets.run) .then(NpmtsTypeDoc.run) .then(NpmtsTests.run) + .then(NpmtsWatch.run) .then(function (configArg) { - var shipString = '' + + let shipString = '' + '\n' + '\n' + ' # # ( )\n' + @@ -42,7 +44,7 @@ exports.promisechain = function (argvArg) { else { plugins.beautylog.success('Done!'); } - done.resolve(); + done.resolve(configArg); }); return done.promise; }; diff --git a/dist/npmts.tests.d.ts b/dist/npmts.tests.d.ts index 59bf5f6..deb1665 100644 --- a/dist/npmts.tests.d.ts +++ b/dist/npmts.tests.d.ts @@ -1,4 +1,4 @@ /// import 'typings-global'; import plugins = require('./npmts.plugins'); -export declare let run: (configArg: any) => plugins.Q.Promise<{}>; +export declare let run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.tests.js b/dist/npmts.tests.js index 0ee69de..0b023ef 100644 --- a/dist/npmts.tests.js +++ b/dist/npmts.tests.js @@ -1,16 +1,16 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const npmts_promisechain_1 = require("./npmts.promisechain"); /** * * @returns {*} */ -var mocha = function (configArg) { +let mocha = function (configArg) { npmts_promisechain_1.npmtsOra.text('Instrumentalizing and testing transpiled JS'); npmts_promisechain_1.npmtsOra.end(); // end npmtsOra for tests. - var done = plugins.Q.defer(); + let done = plugins.q.defer(); plugins.gulp.src([plugins.path.join(paths.cwd, 'dist/*.js')]) .pipe(plugins.g.sourcemaps.init()) .pipe(plugins.g.babel({ @@ -41,19 +41,19 @@ var mocha = function (configArg) { }); return done.promise; }; -var coverage = function (configArg) { - var done = plugins.Q.defer(); +let coverage = function (configArg) { + let done = plugins.q.defer(); plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) .then(function (percentageArg) { if (percentageArg >= configArg.coverageTreshold) { - plugins.beautylog.ok(percentageArg.toString() + "% " - + "coverage exceeds your treshold of " - + (configArg.coverageTreshold.toString() + "%")); + plugins.beautylog.ok(`${percentageArg.toString()}% ` + + `coverage exceeds your treshold of ` + + `${configArg.coverageTreshold.toString()}%`); } else { - plugins.beautylog.warn(percentageArg.toString() + "% " - + "coverage fails your treshold of " - + (configArg.coverageTreshold.toString() + "%")); + plugins.beautylog.warn(`${percentageArg.toString()}% ` + + `coverage fails your treshold of ` + + `${configArg.coverageTreshold.toString()}%`); plugins.beautylog.error('exiting due to coverage failure'); process.exit(1); } @@ -62,8 +62,8 @@ var coverage = function (configArg) { return done.promise; }; exports.run = function (configArg) { - var done = plugins.Q.defer(); - var config = configArg; + let done = plugins.q.defer(); + let config = configArg; if (config.test === true) { npmts_promisechain_1.npmtsOra.text('now starting tests'); plugins.beautylog.log('-------------------------------------------------------\n' + @@ -71,7 +71,7 @@ exports.run = function (configArg) { '--------------------------------------------------------------'); mocha(config) .then(coverage) - .then(function () { + .then(() => { done.resolve(config); }); } diff --git a/dist/npmts.typedoc.d.ts b/dist/npmts.typedoc.d.ts index 59bf5f6..deb1665 100644 --- a/dist/npmts.typedoc.d.ts +++ b/dist/npmts.typedoc.d.ts @@ -1,4 +1,4 @@ /// import 'typings-global'; import plugins = require('./npmts.plugins'); -export declare let run: (configArg: any) => plugins.Q.Promise<{}>; +export declare let run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.typedoc.js b/dist/npmts.typedoc.js index 5e99331..df2c4ef 100644 --- a/dist/npmts.typedoc.js +++ b/dist/npmts.typedoc.js @@ -1,11 +1,11 @@ "use strict"; require("typings-global"); -var plugins = require("./npmts.plugins"); -var paths = require("./npmts.paths"); -var npmts_promisechain_1 = require("./npmts.promisechain"); -var npmts_check_1 = require("./npmts.check"); -var genTypeDoc = function (configArg) { - var done = plugins.Q.defer(); +const plugins = require("./npmts.plugins"); +const paths = require("./npmts.paths"); +const npmts_promisechain_1 = require("./npmts.promisechain"); +const npmts_check_1 = require("./npmts.check"); +let genTypeDoc = function (configArg) { + let done = plugins.q.defer(); npmts_promisechain_1.npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow); plugins.beautylog.log('TypeDoc Output:'); plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts')) @@ -28,10 +28,10 @@ var genTypeDoc = function (configArg) { return done.promise; }; exports.run = function (configArg) { - var done = plugins.Q.defer(); + let done = plugins.q.defer(); if (configArg.docs) { genTypeDoc(configArg) - .then(function () { + .then(() => { done.resolve(configArg); }); } diff --git a/dist/npmts.watch.d.ts b/dist/npmts.watch.d.ts new file mode 100644 index 0000000..21cbece --- /dev/null +++ b/dist/npmts.watch.d.ts @@ -0,0 +1,3 @@ +/// +import * as plugins from './npmts.plugins'; +export declare let run: (configArg: any) => plugins.q.Promise<{}>; diff --git a/dist/npmts.watch.js b/dist/npmts.watch.js new file mode 100644 index 0000000..9c03d2f --- /dev/null +++ b/dist/npmts.watch.js @@ -0,0 +1,26 @@ +"use strict"; +const plugins = require("./npmts.plugins"); +const promisechain = require("./npmts.promisechain"); +let npmtsSmartchok = null; +exports.run = (configArg) => { + let done = plugins.q.defer(); + if (configArg.watch && npmtsSmartchok === null) { + let pathsToWatch = []; + for (let key in configArg.ts) { + pathsToWatch.push(key); + } + npmtsSmartchok = new plugins.smartchok.Smartchok(pathsToWatch); + npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => { + plugins.beautylog.info('now watching...'); + changeObservableArg.subscribe(() => { + promisechain.run(configArg); + }); + }); + npmtsSmartchok.start(); + done.resolve(configArg); + } + else { + done.resolve(configArg); + } + return done.promise; +}; diff --git a/package.json b/package.json index 3d5ccfc..df558fc 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,10 @@ "npmts": "dist/cli.js" }, "scripts": { - "test": "(npm run compile && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)", - "compile": "(rm -rf test/ && rm -r dist/ && mkdir dist/ && tsc && cp assets/cli.js dist/ )", + "test": "(npm run compile && npm run prepareTest && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)", + "testShort": "(npm run compile && npm run check)", + "prepareTest": "(rm -rf test/)", + "compile": "(rm -r dist/ && tsc && cp assets/cli.js dist/ )", "setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)", "typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)", "npmpage": "(npmpage)", @@ -32,14 +34,14 @@ }, "homepage": "https://gitlab.com/pushrocks/npmts#readme", "dependencies": { - "@types/gulp": "^3.8.31", - "@types/minimatch": "^2.0.28", + "@types/gulp": "^3.8.32", + "@types/minimatch": "^2.0.29", "@types/q": "^0.x.x", - "@types/shelljs": "^0.3.30", + "@types/shelljs": "^0.3.31", "babel-preset-es2015": "^6.14.0", "beautylog": "5.0.23", "depcheck": "^0.6.4", - "early": "^2.0.28", + "early": "^2.0.35", "gulp": "3.9.1", "gulp-babel": "^6.1.2", "gulp-function": "^1.3.6", @@ -48,15 +50,16 @@ "gulp-mocha": "^3.0.1", "gulp-sourcemaps": "^1.6.0", "gulp-typedoc": "^2.0.0", - "lodash": "^4.15.0", - "npmextra": "^1.0.11", + "lodash": "^4.16.1", + "npmextra": "^1.0.12", "projectinfo": "1.0.3", "q": "^1.4.1", "shelljs": "^0.7.4", + "smartchok": "^1.0.2", "smartcli": "1.0.9", "smartcov": "1.0.0", "smartenv": "1.2.5", - "smartfile": "4.0.18", + "smartfile": "4.0.20", "smartpath": "3.2.2", "smartstring": "^2.0.17", "source-map-support": "^0.4.2", diff --git a/ts/index.ts b/ts/index.ts index e1771ab..06a3e60 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -7,7 +7,7 @@ import * as early from 'early' early.start('NPMTS') import * as plugins from './npmts.plugins' import * as paths from './npmts.paths' -import {promisechain} from './npmts.promisechain' +import * as promisechain from './npmts.promisechain' early.stop() .then(() => { let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot) @@ -16,11 +16,7 @@ early.stop() .then((argvArg) => { plugins.beautylog.figletSync('NPMTS') plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version) - try { - promisechain(argvArg) - } catch (err) { - console.log(err) - } + promisechain.run(argvArg).catch((err) => { console.log(err) }) }) npmtsCli.addVersion(npmtsProjectInfo.version) diff --git a/ts/npmts.assets.ts b/ts/npmts.assets.ts index cbc85b5..78d2822 100644 --- a/ts/npmts.assets.ts +++ b/ts/npmts.assets.ts @@ -4,7 +4,7 @@ import paths = require('./npmts.paths') import {npmtsOra} from './npmts.promisechain' export var run = function(configArg){ - let done = plugins.Q.defer() + let done = plugins.q.defer() let config = configArg npmtsOra.text('now looking at ' + 'required assets'.yellow) if (config.cli === true) { diff --git a/ts/npmts.check.ts b/ts/npmts.check.ts index 80678c8..7e2bba6 100644 --- a/ts/npmts.check.ts +++ b/ts/npmts.check.ts @@ -7,7 +7,8 @@ import {ProjectinfoNpm} from 'projectinfo' export let projectInfo: ProjectinfoNpm let checkProjectTypings = (configArg) => { - let done = plugins.Q.defer() + let done = plugins.q.defer() + npmtsOra.text('Check Module: Check Project Typings...') projectInfo = new ProjectinfoNpm(paths.cwd) if (typeof projectInfo.packageJson.typings === 'undefined') { plugins.beautylog.error(`please add typings field to package.json`) @@ -33,7 +34,8 @@ const depcheckOptions = { } let checkDependencies = (configArg) => { - let done = plugins.Q.defer() + let done = plugins.q.defer() + npmtsOra.text('Check Module: Check Dependencies...') let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { ignoreDirs: [ // folder with these names will be ignored 'test', @@ -47,28 +49,29 @@ let checkDependencies = (configArg) => { }) plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { for (let item of unused.dependencies) { - plugins.beautylog.warn(`Watch out: unused dependency ${item.red}`) - }; - for (let item of unused.missing) { - plugins.beautylog.error(`unused devDependency ${item.red}`) - }; + plugins.beautylog.warn(`Watch out: unused dependency "${item}"`) + } + for (let item in unused.missing) { + plugins.beautylog.error(`unused devDependency "${item}"`) + } if (unused.missing.length > 0) { plugins.beautylog.info('exiting due to missing dependencies in package.json') process.exit(1) } - for (let item of unused.invalidFiles) { + for (let item in unused.invalidFiles) { plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`) }; - for (let item of unused.invalidDirs) { + for (let item in unused.invalidDirs) { plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`) - }; + } done.resolve(configArg) }) return done.promise } let checkDevDependencies = (configArg) => { - let done = plugins.Q.defer() + let done = plugins.q.defer() + npmtsOra.text('Check Module: Check devDependencies...') let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { ignoreDirs: [ // folder with these names will be ignored 'ts', @@ -83,18 +86,18 @@ let checkDevDependencies = (configArg) => { plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { for (let item of unused.devDependencies) { plugins.beautylog.log(`unused devDependency ${item.red}`) - }; - for (let item of unused.missing) { + } + for (let item in unused.missing) { plugins.beautylog.error(`unused devDependency ${item.red}`) - }; + } if (unused.missing.length > 0) { plugins.beautylog.info('exiting due to missing dependencies in package.json') process.exit(1) } - for (let item of unused.invalidFiles) { + for (let item in unused.invalidFiles) { plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`) } - for (let item of unused.invalidDirs) { + for (let item in unused.invalidDirs) { plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`) } done.resolve(configArg) @@ -103,18 +106,20 @@ let checkDevDependencies = (configArg) => { } let checkNodeVersion = (configArg) => { - let done = plugins.Q.defer() + let done = plugins.q.defer() + npmtsOra.text('checking node version') done.resolve(configArg) return done.promise } export let run = (configArg) => { - let done = plugins.Q.defer() - npmtsOra.text('running project checks...') + let done = plugins.q.defer() + npmtsOra.text('Check Module: ...') checkProjectTypings(configArg) .then(checkDependencies) .then(checkDevDependencies) .then(checkNodeVersion) .then(done.resolve) + .catch((err) => { console.log(err) }) return done.promise } diff --git a/ts/npmts.clean.ts b/ts/npmts.clean.ts index c8a818f..42588de 100644 --- a/ts/npmts.clean.ts +++ b/ts/npmts.clean.ts @@ -15,7 +15,7 @@ let removePages = function(){ export let run = function(configArg){ npmtsOra.text('cleaning up from previous builds...') - let done = plugins.Q.defer() + let done = plugins.q.defer() removeDist() .then(removePages) .then(function(){ diff --git a/ts/npmts.compile.ts b/ts/npmts.compile.ts index 6a5fecf..5cb9bb6 100644 --- a/ts/npmts.compile.ts +++ b/ts/npmts.compile.ts @@ -4,7 +4,7 @@ import paths = require('./npmts.paths') import {npmtsOra} from './npmts.promisechain' export let run = function (configArg) { - let done = plugins.Q.defer() + let done = plugins.q.defer() let config = configArg npmtsOra.text('now compiling ' + 'TypeScript'.yellow) plugins.tsn.compileGlobStringObject(config.ts,config.tsOptions,paths.cwd) diff --git a/ts/npmts.options.ts b/ts/npmts.options.ts index eecf224..7113cc9 100644 --- a/ts/npmts.options.ts +++ b/ts/npmts.options.ts @@ -13,12 +13,13 @@ export interface INpmtsConfig { test: boolean, testTs: any, ts: any, - tsOptions: any + tsOptions: any, + watch: boolean }; export var run = function (argvArg) { - let done = plugins.Q.defer() + let done = plugins.q.defer() let defaultConfig: INpmtsConfig = { argv: undefined, coverageTreshold: 70, @@ -27,7 +28,8 @@ export var run = function (argvArg) { test: true, testTs: {}, ts: {}, - tsOptions: {} + tsOptions: {}, + watch: false } // mix with configfile @@ -70,6 +72,9 @@ export var run = function (argvArg) { if (config.argv.nodocs) { config.docs = false }; + if (config.argv.watch) { + config.watch = true + }; plugins.beautylog.ok('build options are ready!') done.resolve(config) diff --git a/ts/npmts.plugins.ts b/ts/npmts.plugins.ts index 2539265..b98ba70 100644 --- a/ts/npmts.plugins.ts +++ b/ts/npmts.plugins.ts @@ -15,8 +15,9 @@ export import lodash = require('lodash') export import npmextra = require('npmextra') export import projectinfo = require('projectinfo') export import path = require('path') -export import Q = require('q') +export import q = require('q') export import shelljs = require('shelljs') +export import smartchok = require('smartchok') export import smartcli = require('smartcli') export import smartcov = require('smartcov') export import smartenv = require('smartenv') diff --git a/ts/npmts.promisechain.ts b/ts/npmts.promisechain.ts index 0136641..1f4db67 100644 --- a/ts/npmts.promisechain.ts +++ b/ts/npmts.promisechain.ts @@ -4,16 +4,17 @@ import {Ora} from 'beautylog' export let npmtsOra = new Ora('setting up TaskChain','cyan') -import NpmtsAssets = require('./npmts.assets') -import NpmtsCheck = require('./npmts.check') -import NpmtsClean = require('./npmts.clean') -import NpmtsCompile = require('./npmts.compile') -import NpmtsTypeDoc = require('./npmts.typedoc') -import NpmtsOptions = require('./npmts.options') -import NpmtsTests = require('./npmts.tests') +import * as NpmtsAssets from './npmts.assets' +import * as NpmtsCheck from './npmts.check' +import * as NpmtsClean from './npmts.clean' +import * as NpmtsCompile from './npmts.compile' +import * as NpmtsTypeDoc from './npmts.typedoc' +import * as NpmtsOptions from './npmts.options' +import * as NpmtsTests from './npmts.tests' +import * as NpmtsWatch from './npmts.watch' -export let promisechain = function(argvArg){ - let done = plugins.Q.defer() +export let run = function(argvArg){ + let done = plugins.q.defer() npmtsOra.start() NpmtsOptions.run(argvArg) .then(NpmtsClean.run) @@ -22,6 +23,7 @@ export let promisechain = function(argvArg){ .then(NpmtsAssets.run) .then(NpmtsTypeDoc.run) .then(NpmtsTests.run) + .then(NpmtsWatch.run) .then(function(configArg){ let shipString = '' + '\n' + @@ -43,7 +45,7 @@ export let promisechain = function(argvArg){ } else { plugins.beautylog.success('Done!') } - done.resolve() + done.resolve(configArg) }) return done.promise } diff --git a/ts/npmts.tests.ts b/ts/npmts.tests.ts index cae65a5..26253f4 100644 --- a/ts/npmts.tests.ts +++ b/ts/npmts.tests.ts @@ -10,7 +10,7 @@ import { npmtsOra } from './npmts.promisechain' let mocha = function (configArg) { npmtsOra.text('Instrumentalizing and testing transpiled JS') npmtsOra.end() // end npmtsOra for tests. - let done = plugins.Q.defer() + let done = plugins.q.defer() plugins.gulp.src([plugins.path.join(paths.cwd, 'dist/*.js')]) .pipe(plugins.g.sourcemaps.init()) .pipe(plugins.g.babel({ @@ -47,7 +47,7 @@ let mocha = function (configArg) { } let coverage = function (configArg) { - let done = plugins.Q.defer() + let done = plugins.q.defer() plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) .then(function (percentageArg) { if (percentageArg >= configArg.coverageTreshold) { @@ -71,7 +71,7 @@ let coverage = function (configArg) { } export let run = function (configArg) { - let done = plugins.Q.defer() + let done = plugins.q.defer() let config = configArg if (config.test === true) { npmtsOra.text('now starting tests') diff --git a/ts/npmts.typedoc.ts b/ts/npmts.typedoc.ts index 2da27f0..44fd753 100644 --- a/ts/npmts.typedoc.ts +++ b/ts/npmts.typedoc.ts @@ -6,7 +6,7 @@ import { npmtsOra } from './npmts.promisechain' import { projectInfo } from './npmts.check' let genTypeDoc = function (configArg) { - let done = plugins.Q.defer() + let done = plugins.q.defer() npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow) plugins.beautylog.log('TypeDoc Output:') plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts')) @@ -32,7 +32,7 @@ let genTypeDoc = function (configArg) { } export let run = function (configArg) { - let done = plugins.Q.defer() + let done = plugins.q.defer() if (configArg.docs) { genTypeDoc(configArg) .then(() => { diff --git a/ts/npmts.watch.ts b/ts/npmts.watch.ts new file mode 100644 index 0000000..9bb220d --- /dev/null +++ b/ts/npmts.watch.ts @@ -0,0 +1,25 @@ +import * as plugins from './npmts.plugins' +import * as promisechain from './npmts.promisechain' +let npmtsSmartchok: plugins.smartchok.Smartchok = null + +export let run = (configArg) => { + let done = plugins.q.defer() + if (configArg.watch && npmtsSmartchok === null) { + let pathsToWatch: string[] = [] + for (let key in configArg.ts) { + pathsToWatch.push(key) + } + npmtsSmartchok = new plugins.smartchok.Smartchok(pathsToWatch) + npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => { + plugins.beautylog.info('now watching...') + changeObservableArg.subscribe(() => { + promisechain.run(configArg) + }) + }) + npmtsSmartchok.start() + done.resolve(configArg) + } else { + done.resolve(configArg) + } + return done.promise +} diff --git a/tsconfig.json b/tsconfig.json index 43e1781..b072a89 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,12 @@ "compilerOptions": { "declaration": true, "module": "commonjs", - "target": "ES5", + "target": "ES6", "outDir": "./dist/" - } + }, + "exclude": [ + "./node_modules", + "./test", + "./dist" + ] } \ No newline at end of file