Compare commits

...

6 Commits

Author SHA1 Message Date
e1ce5f2d5b 5.4.38 2016-09-25 20:22:49 +02:00
7c960649bc add smartstream 2016-09-25 20:22:10 +02:00
71588595e6 5.4.37 2016-09-24 16:57:41 +02:00
b31994f163 added new npmextra version 2016-09-24 16:57:30 +02:00
e6284cdde3 5.4.36 2016-09-22 23:23:32 +02:00
5f15fe1b30 added --watch option 2016-09-22 23:23:16 +02:00
40 changed files with 438 additions and 256 deletions

2
.gitignore vendored
View File

@ -1,4 +1,6 @@
node_modules/ node_modules/
test/ test/
pages/ pages/
public/
npm-debug/
.DS_Store .DS_Store

View File

@ -31,6 +31,12 @@ npmts will
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze: This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/) [hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the docs. For further information read the docs:
* [1. Intro](https://pushrocks.gitlab.io/npmts/gitbook/index.md)
* [2. Install](https://pushrocks.gitlab.io/npmts/gitbook/install.md)
* [3. Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.md)
* [4. Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.md)
* [5. Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.md)
* [6. Info](https://pushrocks.gitlab.io/npmts/gitbook/info.md)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) [![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

23
dist/index.js vendored
View File

@ -3,25 +3,20 @@ require("typings-global");
/* ================================================== * /* ================================================== *
Starting NPMTS main process. Starting NPMTS main process.
* ================================================== */ * ================================================== */
var early = require("early"); const early = require("early");
early.start('NPMTS'); early.start('NPMTS');
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const promisechain = require("./npmts.promisechain");
early.stop() early.stop()
.then(function () { .then(() => {
var npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot); let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot);
var npmtsCli = new plugins.smartcli.Smartcli(); let npmtsCli = new plugins.smartcli.Smartcli();
npmtsCli.standardTask() npmtsCli.standardTask()
.then(function (argvArg) { .then((argvArg) => {
plugins.beautylog.figletSync('NPMTS'); plugins.beautylog.figletSync('NPMTS');
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version); plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
try { promisechain.run(argvArg).catch((err) => { console.log(err); });
npmts_promisechain_1.promisechain(argvArg);
}
catch (err) {
console.log(err);
}
}); });
npmtsCli.addVersion(npmtsProjectInfo.version); npmtsCli.addVersion(npmtsProjectInfo.version);
npmtsCli.startParse(); npmtsCli.startParse();

View File

@ -1,4 +1,4 @@
/// <reference types="q" /> /// <reference types="q" />
import 'typings-global'; import 'typings-global';
import plugins = require('./npmts.plugins'); import plugins = require('./npmts.plugins');
export declare var run: (configArg: any) => plugins.Q.Promise<{}>; export declare var run: (configArg: any) => plugins.q.Promise<{}>;

10
dist/npmts.assets.js vendored
View File

@ -1,11 +1,11 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const npmts_promisechain_1 = require("./npmts.promisechain");
exports.run = function (configArg) { exports.run = function (configArg) {
var done = plugins.Q.defer(); let done = plugins.q.defer();
var config = configArg; let config = configArg;
npmts_promisechain_1.npmtsOra.text('now looking at ' + 'required assets'.yellow); npmts_promisechain_1.npmtsOra.text('now looking at ' + 'required assets'.yellow);
if (config.cli === true) { if (config.cli === true) {
plugins.smartfile.fs.copySync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'), plugins.path.join(paths.distDir, 'cli.js')); plugins.smartfile.fs.copySync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'), plugins.path.join(paths.distDir, 'cli.js'));

View File

@ -2,4 +2,4 @@
import * as plugins from './npmts.plugins'; import * as plugins from './npmts.plugins';
import { ProjectinfoNpm } from 'projectinfo'; import { ProjectinfoNpm } from 'projectinfo';
export declare let projectInfo: ProjectinfoNpm; export declare let projectInfo: ProjectinfoNpm;
export declare let run: (configArg: any) => plugins.Q.Promise<{}>; export declare let run: (configArg: any) => plugins.q.Promise<{}>;

94
dist/npmts.check.js vendored
View File

@ -1,20 +1,21 @@
"use strict"; "use strict";
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const npmts_promisechain_1 = require("./npmts.promisechain");
var projectinfo_1 = require("projectinfo"); const projectinfo_1 = require("projectinfo");
var checkProjectTypings = function (configArg) { let checkProjectTypings = (configArg) => {
var done = plugins.Q.defer(); let done = plugins.q.defer();
npmts_promisechain_1.npmtsOra.text('Check Module: Check Project Typings...');
exports.projectInfo = new projectinfo_1.ProjectinfoNpm(paths.cwd); exports.projectInfo = new projectinfo_1.ProjectinfoNpm(paths.cwd);
if (typeof exports.projectInfo.packageJson.typings === 'undefined') { 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); process.exit(1);
} }
; ;
done.resolve(configArg); done.resolve(configArg);
return done.promise; return done.promise;
}; };
var depcheckOptions = { const depcheckOptions = {
ignoreBinPackage: false, ignoreBinPackage: false,
parsers: { parsers: {
'*.ts': plugins.depcheck.parser.typescript '*.ts': plugins.depcheck.parser.typescript
@ -28,9 +29,10 @@ var depcheckOptions = {
plugins.depcheck.special.webpack plugins.depcheck.special.webpack
] ]
}; };
var checkDependencies = function (configArg) { let checkDependencies = (configArg) => {
var done = plugins.Q.defer(); let done = plugins.q.defer();
var depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { npmts_promisechain_1.npmtsOra.text('Check Module: Check Dependencies...');
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ ignoreDirs: [
'test', 'test',
'dist', 'dist',
@ -41,38 +43,32 @@ var checkDependencies = function (configArg) {
'babel-preset-*' 'babel-preset-*'
] ]
}); });
plugins.depcheck(paths.cwd, depcheckOptionsMerged, function (unused) { plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (var _i = 0, _a = unused.dependencies; _i < _a.length; _i++) { for (let item of unused.dependencies) {
var item = _a[_i]; plugins.beautylog.warn(`Watch out: unused dependency "${item}"`);
plugins.beautylog.warn("Watch out: unused dependency " + item.red);
} }
; for (let item in unused.missing) {
for (var _b = 0, _c = unused.missing; _b < _c.length; _b++) { plugins.beautylog.error(`unused devDependency "${item}"`);
var item = _c[_b];
plugins.beautylog.error("unused devDependency " + item.red);
} }
;
if (unused.missing.length > 0) { if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json'); plugins.beautylog.info('exiting due to missing dependencies in package.json');
process.exit(1); process.exit(1);
} }
for (var _d = 0, _e = unused.invalidFiles; _d < _e.length; _d++) { for (let item in unused.invalidFiles) {
var item = _e[_d]; plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`);
plugins.beautylog.warn("Watch out: could not parse file " + item.red);
} }
; ;
for (var _f = 0, _g = unused.invalidDirs; _f < _g.length; _f++) { for (let item in unused.invalidDirs) {
var item = _g[_f]; plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`);
plugins.beautylog.warn("Watch out: could not parse directory " + item.red);
} }
;
done.resolve(configArg); done.resolve(configArg);
}); });
return done.promise; return done.promise;
}; };
var checkDevDependencies = function (configArg) { let checkDevDependencies = (configArg) => {
var done = plugins.Q.defer(); let done = plugins.q.defer();
var depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { npmts_promisechain_1.npmtsOra.text('Check Module: Check devDependencies...');
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ ignoreDirs: [
'ts', 'ts',
'dist', 'dist',
@ -83,45 +79,41 @@ var checkDevDependencies = function (configArg) {
'babel-preset-*' 'babel-preset-*'
] ]
}); });
plugins.depcheck(paths.cwd, depcheckOptionsMerged, function (unused) { plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (var _i = 0, _a = unused.devDependencies; _i < _a.length; _i++) { for (let item of unused.devDependencies) {
var item = _a[_i]; plugins.beautylog.log(`unused devDependency ${item.red}`);
plugins.beautylog.log("unused devDependency " + item.red);
} }
; for (let item in unused.missing) {
for (var _b = 0, _c = unused.missing; _b < _c.length; _b++) { plugins.beautylog.error(`unused devDependency ${item.red}`);
var item = _c[_b];
plugins.beautylog.error("unused devDependency " + item.red);
} }
;
if (unused.missing.length > 0) { if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json'); plugins.beautylog.info('exiting due to missing dependencies in package.json');
process.exit(1); process.exit(1);
} }
for (var _d = 0, _e = unused.invalidFiles; _d < _e.length; _d++) { for (let item in unused.invalidFiles) {
var item = _e[_d]; plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`);
plugins.beautylog.warn("Watch out: could not parse file " + item.red);
} }
for (var _f = 0, _g = unused.invalidDirs; _f < _g.length; _f++) { for (let item in unused.invalidDirs) {
var item = _g[_f]; plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`);
plugins.beautylog.warn("Watch out: could not parse directory " + item.red);
} }
done.resolve(configArg); done.resolve(configArg);
}); });
return done.promise; return done.promise;
}; };
var checkNodeVersion = function (configArg) { let checkNodeVersion = (configArg) => {
var done = plugins.Q.defer(); let done = plugins.q.defer();
npmts_promisechain_1.npmtsOra.text('checking node version');
done.resolve(configArg); done.resolve(configArg);
return done.promise; return done.promise;
}; };
exports.run = function (configArg) { exports.run = (configArg) => {
var done = plugins.Q.defer(); let done = plugins.q.defer();
npmts_promisechain_1.npmtsOra.text('running project checks...'); npmts_promisechain_1.npmtsOra.text('Check Module: ...');
checkProjectTypings(configArg) checkProjectTypings(configArg)
.then(checkDependencies) .then(checkDependencies)
.then(checkDevDependencies) .then(checkDevDependencies)
.then(checkNodeVersion) .then(checkNodeVersion)
.then(done.resolve); .then(done.resolve)
.catch((err) => { console.log(err); });
return done.promise; return done.promise;
}; };

View File

@ -1,4 +1,4 @@
/// <reference types="q" /> /// <reference types="q" />
import 'typings-global'; import 'typings-global';
import plugins = require('./npmts.plugins'); import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>; export declare let run: (configArg: any) => plugins.q.Promise<{}>;

12
dist/npmts.clean.js vendored
View File

@ -1,19 +1,19 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const npmts_promisechain_1 = require("./npmts.promisechain");
var removeDist = function () { let removeDist = function () {
npmts_promisechain_1.npmtsOra.text('cleaning dist folder'); npmts_promisechain_1.npmtsOra.text('cleaning dist folder');
return plugins.smartfile.fs.remove(paths.distDir); return plugins.smartfile.fs.remove(paths.distDir);
}; };
var removePages = function () { let removePages = function () {
npmts_promisechain_1.npmtsOra.text('cleaning pages folder'); npmts_promisechain_1.npmtsOra.text('cleaning pages folder');
return plugins.smartfile.fs.remove(paths.pagesDir); return plugins.smartfile.fs.remove(paths.pagesDir);
}; };
exports.run = function (configArg) { exports.run = function (configArg) {
npmts_promisechain_1.npmtsOra.text('cleaning up from previous builds...'); npmts_promisechain_1.npmtsOra.text('cleaning up from previous builds...');
var done = plugins.Q.defer(); let done = plugins.q.defer();
removeDist() removeDist()
.then(removePages) .then(removePages)
.then(function () { .then(function () {

View File

@ -1,4 +1,4 @@
/// <reference types="q" /> /// <reference types="q" />
import 'typings-global'; import 'typings-global';
import plugins = require('./npmts.plugins'); import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>; export declare let run: (configArg: any) => plugins.q.Promise<{}>;

12
dist/npmts.compile.js vendored
View File

@ -1,14 +1,14 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const npmts_promisechain_1 = require("./npmts.promisechain");
exports.run = function (configArg) { exports.run = function (configArg) {
var done = plugins.Q.defer(); let done = plugins.q.defer();
var config = configArg; let config = configArg;
npmts_promisechain_1.npmtsOra.text('now compiling ' + 'TypeScript'.yellow); npmts_promisechain_1.npmtsOra.text('now compiling ' + 'TypeScript'.yellow);
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd) plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(function () { .then(() => {
plugins.beautylog.ok('compiled main TypeScript!'); plugins.beautylog.ok('compiled main TypeScript!');
plugins.beautylog.log('now compiling tests!'); plugins.beautylog.log('now compiling tests!');
return plugins.tsn.compileGlobStringObject(config.testTs); return plugins.tsn.compileGlobStringObject(config.testTs);

View File

@ -11,5 +11,6 @@ export interface INpmtsConfig {
testTs: any; testTs: any;
ts: any; ts: any;
tsOptions: any; tsOptions: any;
watch: boolean;
} }
export declare var run: (argvArg: any) => plugins.Q.Promise<{}>; export declare var run: (argvArg: any) => plugins.q.Promise<{}>;

41
dist/npmts.options.js vendored
View File

@ -1,12 +1,12 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const npmts_promisechain_1 = require("./npmts.promisechain");
; ;
exports.run = function (argvArg) { exports.run = function (argvArg) {
var done = plugins.Q.defer(); let done = plugins.q.defer();
var defaultConfig = { let defaultConfig = {
argv: undefined, argv: undefined,
coverageTreshold: 70, coverageTreshold: 70,
docs: true, docs: true,
@ -14,15 +14,13 @@ exports.run = function (argvArg) {
test: true, test: true,
testTs: {}, testTs: {},
ts: {}, ts: {},
tsOptions: {} tsOptions: {},
watch: false
}; };
// mix with configfile // mix with configfile
npmts_promisechain_1.npmtsOra.text('looking for npmextra.json'); npmts_promisechain_1.npmtsOra.text('running npmextra');
var config = plugins.npmextra.dataFor({ let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
toolName: 'npmts', let config = localNpmextra.dataFor('npmts', defaultConfig);
defaultSettings: defaultConfig,
cwd: paths.cwd
});
// add argv // add argv
config.argv = argvArg; config.argv = argvArg;
// check mode // check mode
@ -33,18 +31,18 @@ exports.run = function (argvArg) {
done.resolve(config); done.resolve(config);
break; break;
default: default:
plugins.beautylog.error("mode not recognised!"); plugins.beautylog.error(`mode not recognised!`);
process.exit(1); process.exit(1);
} }
; ;
// handle default mode // handle default mode
if (config.mode === 'default') { if (config.mode === 'default') {
config.ts = (_a = {}, config.ts = {
_a['./ts/**/*.ts'] = './dist/', ['./ts/**/*.ts']: './dist/'
_a); };
config.testTs = (_b = {}, config.testTs = {
_b['./test/test.ts'] = './test/', ['./test/test.ts']: './test/'
_b); };
} }
; ;
// mix with commandline // mix with commandline
@ -56,8 +54,11 @@ exports.run = function (argvArg) {
config.docs = false; config.docs = false;
} }
; ;
if (config.argv.watch) {
config.watch = true;
}
;
plugins.beautylog.ok('build options are ready!'); plugins.beautylog.ok('build options are ready!');
done.resolve(config); done.resolve(config);
return done.promise; return done.promise;
var _a, _b;
}; };

2
dist/npmts.paths.js vendored
View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
// NPMTS Paths // NPMTS Paths
exports.npmtsPackageRoot = plugins.path.join(__dirname, '../'); exports.npmtsPackageRoot = plugins.path.join(__dirname, '../');
// Project paths // Project paths

View File

@ -15,13 +15,15 @@ export import lodash = require('lodash');
export import npmextra = require('npmextra'); export import npmextra = require('npmextra');
export import projectinfo = require('projectinfo'); export import projectinfo = require('projectinfo');
export import path = require('path'); export import path = require('path');
export import Q = require('q'); export import q = require('q');
export import shelljs = require('shelljs'); export import shelljs = require('shelljs');
export import smartchok = require('smartchok');
export import smartcli = require('smartcli'); export import smartcli = require('smartcli');
export import smartcov = require('smartcov'); export import smartcov = require('smartcov');
export import smartenv = require('smartenv'); export import smartenv = require('smartenv');
export import smartfile = require('smartfile'); export import smartfile = require('smartfile');
export import smartpath = require('smartpath'); export import smartpath = require('smartpath');
export import smartstream = require('smartstream');
export import smartstring = require('smartstring'); export import smartstring = require('smartstring');
export declare let sourceMapSupport: any; export declare let sourceMapSupport: any;
export import tsn = require('tsn'); export import tsn = require('tsn');

View File

@ -16,13 +16,15 @@ exports.lodash = require("lodash");
exports.npmextra = require("npmextra"); exports.npmextra = require("npmextra");
exports.projectinfo = require("projectinfo"); exports.projectinfo = require("projectinfo");
exports.path = require("path"); exports.path = require("path");
exports.Q = require("q"); exports.q = require("q");
exports.shelljs = require("shelljs"); exports.shelljs = require("shelljs");
exports.smartchok = require("smartchok");
exports.smartcli = require("smartcli"); exports.smartcli = require("smartcli");
exports.smartcov = require("smartcov"); exports.smartcov = require("smartcov");
exports.smartenv = require("smartenv"); exports.smartenv = require("smartenv");
exports.smartfile = require("smartfile"); exports.smartfile = require("smartfile");
exports.smartpath = require("smartpath"); exports.smartpath = require("smartpath");
exports.smartstream = require("smartstream");
exports.smartstring = require("smartstring"); exports.smartstring = require("smartstring");
exports.sourceMapSupport = require('source-map-support').install(); // display errors correctly during testing exports.sourceMapSupport = require('source-map-support').install(); // display errors correctly during testing
exports.tsn = require("tsn"); exports.tsn = require("tsn");

View File

@ -3,4 +3,4 @@ import 'typings-global';
import plugins = require('./npmts.plugins'); import plugins = require('./npmts.plugins');
import { Ora } from 'beautylog'; import { Ora } from 'beautylog';
export declare let npmtsOra: Ora; export declare let npmtsOra: Ora;
export declare let promisechain: (argvArg: any) => plugins.Q.Promise<{}>; export declare let run: (argvArg: any) => plugins.q.Promise<{}>;

View File

@ -1,17 +1,18 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var beautylog_1 = require("beautylog"); const beautylog_1 = require("beautylog");
exports.npmtsOra = new beautylog_1.Ora('setting up TaskChain', 'cyan'); exports.npmtsOra = new beautylog_1.Ora('setting up TaskChain', 'cyan');
var NpmtsAssets = require("./npmts.assets"); const NpmtsAssets = require("./npmts.assets");
var NpmtsCheck = require("./npmts.check"); const NpmtsCheck = require("./npmts.check");
var NpmtsClean = require("./npmts.clean"); const NpmtsClean = require("./npmts.clean");
var NpmtsCompile = require("./npmts.compile"); const NpmtsCompile = require("./npmts.compile");
var NpmtsTypeDoc = require("./npmts.typedoc"); const NpmtsTypeDoc = require("./npmts.typedoc");
var NpmtsOptions = require("./npmts.options"); const NpmtsOptions = require("./npmts.options");
var NpmtsTests = require("./npmts.tests"); const NpmtsTests = require("./npmts.tests");
exports.promisechain = function (argvArg) { const NpmtsWatch = require("./npmts.watch");
var done = plugins.Q.defer(); exports.run = function (argvArg) {
let done = plugins.q.defer();
exports.npmtsOra.start(); exports.npmtsOra.start();
NpmtsOptions.run(argvArg) NpmtsOptions.run(argvArg)
.then(NpmtsClean.run) .then(NpmtsClean.run)
@ -20,8 +21,9 @@ exports.promisechain = function (argvArg) {
.then(NpmtsAssets.run) .then(NpmtsAssets.run)
.then(NpmtsTypeDoc.run) .then(NpmtsTypeDoc.run)
.then(NpmtsTests.run) .then(NpmtsTests.run)
.then(NpmtsWatch.run)
.then(function (configArg) { .then(function (configArg) {
var shipString = '' + let shipString = '' +
'\n' + '\n' +
'\n' + '\n' +
' # # ( )\n' + ' # # ( )\n' +
@ -42,7 +44,7 @@ exports.promisechain = function (argvArg) {
else { else {
plugins.beautylog.success('Done!'); plugins.beautylog.success('Done!');
} }
done.resolve(); done.resolve(configArg);
}); });
return done.promise; return done.promise;
}; };

View File

@ -1,4 +1,5 @@
/// <reference types="q" /> /// <reference types="q" />
import 'typings-global'; import 'typings-global';
import plugins = require('./npmts.plugins'); import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>; import { INpmtsConfig } from './npmts.options';
export declare let run: (configArg: INpmtsConfig) => plugins.q.Promise<{}>;

81
dist/npmts.tests.js vendored
View File

@ -1,16 +1,16 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const npmts_promisechain_1 = require("./npmts.promisechain");
/** /**
* * runs mocha
* @returns {*} * @returns INpmtsConfig
*/ */
var mocha = function (configArg) { let mocha = function (configArg) {
npmts_promisechain_1.npmtsOra.text('Instrumentalizing and testing transpiled JS'); npmts_promisechain_1.npmtsOra.text('Instrumentalizing and testing transpiled JS');
npmts_promisechain_1.npmtsOra.end(); // end npmtsOra for tests. 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')]) plugins.gulp.src([plugins.path.join(paths.cwd, 'dist/*.js')])
.pipe(plugins.g.sourcemaps.init()) .pipe(plugins.g.sourcemaps.init())
.pipe(plugins.g.babel({ .pipe(plugins.g.babel({
@ -22,48 +22,59 @@ var mocha = function (configArg) {
.pipe(plugins.g.sourcemaps.write()) .pipe(plugins.g.sourcemaps.write())
.pipe(plugins.g.injectModules()) .pipe(plugins.g.injectModules())
.on('finish', function () { .on('finish', function () {
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]) let localSmartstream = new plugins.smartstream.Smartstream([
.pipe(plugins.g.babel({ plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]),
presets: [ plugins.g.babel({
require.resolve('babel-preset-es2015') presets: [
] require.resolve('babel-preset-es2015')
})) ]
.pipe(plugins.g.injectModules()) }),
.pipe(plugins.g.mocha()) plugins.g.injectModules(),
.pipe(plugins.g.istanbul.writeReports({ plugins.g.mocha(),
dir: plugins.path.join(paths.cwd, './coverage'), plugins.g.istanbul.writeReports({
reporters: ['lcovonly', 'json', 'text', 'text-summary'] dir: plugins.path.join(paths.cwd, './coverage'),
})) reporters: ['lcovonly', 'json', 'text', 'text-summary']
.pipe(plugins.g.gFunction(function () { })
plugins.beautylog.ok('Tested!'); ]);
done.resolve(configArg); localSmartstream.run()
}, 'atEnd')); .then(() => { done.resolve(configArg); }, (err) => {
plugins.beautylog.error('Tests failed!');
configArg.watch = true;
if (configArg.watch) {
done.resolve(configArg);
}
else {
process.exit(1);
}
});
}); });
return done.promise; return done.promise;
}; };
var coverage = function (configArg) { let coverage = function (configArg) {
var done = plugins.Q.defer(); let done = plugins.q.defer();
plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2)
.then(function (percentageArg) { .then(function (percentageArg) {
if (percentageArg >= configArg.coverageTreshold) { if (percentageArg >= configArg.coverageTreshold) {
plugins.beautylog.ok(percentageArg.toString() + "% " plugins.beautylog.ok(`${percentageArg.toString()}% `
+ "coverage exceeds your treshold of " + `coverage exceeds your treshold of `
+ (configArg.coverageTreshold.toString() + "%")); + `${configArg.coverageTreshold.toString()}%`);
} }
else { else {
plugins.beautylog.warn(percentageArg.toString() + "% " plugins.beautylog.warn(`${percentageArg.toString()}% `
+ "coverage fails your treshold of " + `coverage fails your treshold of `
+ (configArg.coverageTreshold.toString() + "%")); + `${configArg.coverageTreshold.toString()}%`);
plugins.beautylog.error('exiting due to coverage failure'); plugins.beautylog.error('exiting due to coverage failure');
process.exit(1); if (!configArg.watch) {
process.exit(1);
}
} }
done.resolve(configArg); done.resolve(configArg);
}); });
return done.promise; return done.promise;
}; };
exports.run = function (configArg) { exports.run = function (configArg) {
var done = plugins.Q.defer(); let done = plugins.q.defer();
var config = configArg; let config = configArg;
if (config.test === true) { if (config.test === true) {
npmts_promisechain_1.npmtsOra.text('now starting tests'); npmts_promisechain_1.npmtsOra.text('now starting tests');
plugins.beautylog.log('-------------------------------------------------------\n' + plugins.beautylog.log('-------------------------------------------------------\n' +
@ -71,7 +82,7 @@ exports.run = function (configArg) {
'--------------------------------------------------------------'); '--------------------------------------------------------------');
mocha(config) mocha(config)
.then(coverage) .then(coverage)
.then(function () { .then(() => {
done.resolve(config); done.resolve(config);
}); });
} }

View File

@ -1,4 +1,4 @@
/// <reference types="q" /> /// <reference types="q" />
import 'typings-global'; import 'typings-global';
import plugins = require('./npmts.plugins'); import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>; export declare let run: (configArg: any) => plugins.q.Promise<{}>;

16
dist/npmts.typedoc.js vendored
View File

@ -1,11 +1,11 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
var paths = require("./npmts.paths"); const paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); const npmts_promisechain_1 = require("./npmts.promisechain");
var npmts_check_1 = require("./npmts.check"); const npmts_check_1 = require("./npmts.check");
var genTypeDoc = function (configArg) { let genTypeDoc = function (configArg) {
var done = plugins.Q.defer(); let done = plugins.q.defer();
npmts_promisechain_1.npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow); npmts_promisechain_1.npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow);
plugins.beautylog.log('TypeDoc Output:'); plugins.beautylog.log('TypeDoc Output:');
plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts')) plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts'))
@ -28,10 +28,10 @@ var genTypeDoc = function (configArg) {
return done.promise; return done.promise;
}; };
exports.run = function (configArg) { exports.run = function (configArg) {
var done = plugins.Q.defer(); let done = plugins.q.defer();
if (configArg.docs) { if (configArg.docs) {
genTypeDoc(configArg) genTypeDoc(configArg)
.then(function () { .then(() => {
done.resolve(configArg); done.resolve(configArg);
}); });
} }

4
dist/npmts.watch.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
/// <reference types="q" />
import * as plugins from './npmts.plugins';
import { INpmtsConfig } from './npmts.options';
export declare let run: (configArg: INpmtsConfig) => plugins.q.Promise<{}>;

29
dist/npmts.watch.js vendored Normal file
View File

@ -0,0 +1,29 @@
"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);
}
for (let key in configArg.testTs) {
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;
};

42
docs/index.md Normal file
View File

@ -0,0 +1,42 @@
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
## Availabililty
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmts)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmts)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/gitbook)
## Status for master
[![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![coverage report](https://gitlab.com/pushrocks/npmts/badges/master/coverage.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![Dependency Status](https://david-dm.org/pushrocks/npmts.svg)](https://david-dm.org/pushrocks/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/npmts/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/npmts/badges/code.svg)](https://www.bithound.io/github/pushrocks/npmts)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Introduction
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
npmts will
1. check your dependencies and package.json
1. transpile your code with tsc,
1. document your code with typedoc,
1. test your code with mocha
1. create coverage with istanbul
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the docs:
* [1. Intro](https://pushrocks.gitlab.io/npmts/gitbook/index.md)
* [2. Install](https://pushrocks.gitlab.io/npmts/gitbook/install.md)
* [3. Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.md)
* [4. Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.md)
* [5. Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.md)
* [6. Info](https://pushrocks.gitlab.io/npmts/gitbook/info.md)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

View File

@ -5,7 +5,7 @@ Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts) [![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmts) [![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmts)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmts) [![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmts)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/docs) [![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/gitbook)
## Status for master ## Status for master
[![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master) [![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
@ -31,6 +31,12 @@ npmts will
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze: This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/) [hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the docs. For further information read the docs:
* [1. Intro](https://pushrocks.gitlab.io/npmts/gitbook/index.md)
* [2. Install](https://pushrocks.gitlab.io/npmts/gitbook/install.md)
* [3. Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.md)
* [4. Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.md)
* [5. Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.md)
* [6. Info](https://pushrocks.gitlab.io/npmts/gitbook/info.md)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) [![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

32
npm-debug.log Normal file
View File

@ -0,0 +1,32 @@
0 info it worked if it ends with ok
1 verbose cli [ '/Users/philkunz/.nvm/versions/node/v6.5.0/bin/node',
1 verbose cli '/Users/philkunz/.nvm/versions/node/v6.5.0/bin/npm',
1 verbose cli 'version',
1 verbose cli 'patch' ]
2 info using npm@3.10.3
3 info using node@v6.5.0
4 info git [ 'status', '--porcelain' ]
5 verbose stack Error: Git working directory not clean.
5 verbose stack M README.md
5 verbose stack M gitbook/index.md
5 verbose stack at /Users/philkunz/.nvm/versions/node/v6.5.0/lib/node_modules/npm/lib/version.js:247:19
5 verbose stack at /Users/philkunz/.nvm/versions/node/v6.5.0/lib/node_modules/npm/lib/utils/no-progress-while-running.js:21:8
5 verbose stack at ChildProcess.exithandler (child_process.js:197:7)
5 verbose stack at emitTwo (events.js:106:13)
5 verbose stack at ChildProcess.emit (events.js:191:7)
5 verbose stack at maybeClose (internal/child_process.js:877:16)
5 verbose stack at Socket.<anonymous> (internal/child_process.js:334:11)
5 verbose stack at emitOne (events.js:96:13)
5 verbose stack at Socket.emit (events.js:188:7)
5 verbose stack at Pipe._handle.close [as _onclose] (net.js:493:12)
6 verbose cwd /Users/philkunz/gitlab/pushrocks/npmts
7 error Darwin 16.0.0
8 error argv "/Users/philkunz/.nvm/versions/node/v6.5.0/bin/node" "/Users/philkunz/.nvm/versions/node/v6.5.0/bin/npm" "version" "patch"
9 error node v6.5.0
10 error npm v3.10.3
11 error Git working directory not clean.
11 error M README.md
11 error M gitbook/index.md
12 error If you need help, you may report this error at:
12 error <https://github.com/npm/npm/issues>
13 verbose exit [ 1, true ]

View File

@ -1,14 +1,16 @@
{ {
"name": "npmts", "name": "npmts",
"version": "5.4.35", "version": "5.4.38",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.", "description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {
"npmts": "dist/cli.js" "npmts": "dist/cli.js"
}, },
"scripts": { "scripts": {
"test": "(npm run compile && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)", "test": "(npm run compile && npm run prepareTest && 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/ )", "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/)", "setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
"typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)", "typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)",
"npmpage": "(npmpage)", "npmpage": "(npmpage)",
@ -32,14 +34,14 @@
}, },
"homepage": "https://gitlab.com/pushrocks/npmts#readme", "homepage": "https://gitlab.com/pushrocks/npmts#readme",
"dependencies": { "dependencies": {
"@types/gulp": "^3.8.31", "@types/gulp": "^3.8.32",
"@types/minimatch": "^2.0.28", "@types/minimatch": "^2.0.29",
"@types/q": "^0.x.x", "@types/q": "^0.x.x",
"@types/shelljs": "^0.3.30", "@types/shelljs": "^0.3.31",
"babel-preset-es2015": "^6.14.0", "babel-preset-es2015": "^6.14.0",
"beautylog": "5.0.23", "beautylog": "5.0.23",
"depcheck": "^0.6.4", "depcheck": "^0.6.4",
"early": "^2.0.28", "early": "^2.0.35",
"gulp": "3.9.1", "gulp": "3.9.1",
"gulp-babel": "^6.1.2", "gulp-babel": "^6.1.2",
"gulp-function": "^1.3.6", "gulp-function": "^1.3.6",
@ -48,16 +50,18 @@
"gulp-mocha": "^3.0.1", "gulp-mocha": "^3.0.1",
"gulp-sourcemaps": "^1.6.0", "gulp-sourcemaps": "^1.6.0",
"gulp-typedoc": "^2.0.0", "gulp-typedoc": "^2.0.0",
"lodash": "^4.15.0", "lodash": "^4.16.1",
"npmextra": "^1.0.11", "npmextra": "^2.0.3",
"projectinfo": "1.0.3", "projectinfo": "1.0.3",
"q": "^1.4.1", "q": "^1.4.1",
"shelljs": "^0.7.4", "shelljs": "^0.7.4",
"smartchok": "^1.0.2",
"smartcli": "1.0.9", "smartcli": "1.0.9",
"smartcov": "1.0.0", "smartcov": "1.0.0",
"smartenv": "1.2.5", "smartenv": "1.2.5",
"smartfile": "4.0.18", "smartfile": "4.0.21",
"smartpath": "3.2.2", "smartpath": "3.2.2",
"smartstream": "^1.0.5",
"smartstring": "^2.0.17", "smartstring": "^2.0.17",
"source-map-support": "^0.4.2", "source-map-support": "^0.4.2",
"tsn": "^2.0.3", "tsn": "^2.0.3",

View File

@ -7,7 +7,7 @@ import * as early from 'early'
early.start('NPMTS') early.start('NPMTS')
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins'
import * as paths from './npmts.paths' import * as paths from './npmts.paths'
import {promisechain} from './npmts.promisechain' import * as promisechain from './npmts.promisechain'
early.stop() early.stop()
.then(() => { .then(() => {
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot) let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot)
@ -16,11 +16,7 @@ early.stop()
.then((argvArg) => { .then((argvArg) => {
plugins.beautylog.figletSync('NPMTS') plugins.beautylog.figletSync('NPMTS')
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version) plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version)
try { promisechain.run(argvArg).catch((err) => { console.log(err) })
promisechain(argvArg)
} catch (err) {
console.log(err)
}
}) })
npmtsCli.addVersion(npmtsProjectInfo.version) npmtsCli.addVersion(npmtsProjectInfo.version)

View File

@ -4,7 +4,7 @@ import paths = require('./npmts.paths')
import {npmtsOra} from './npmts.promisechain' import {npmtsOra} from './npmts.promisechain'
export var run = function(configArg){ export var run = function(configArg){
let done = plugins.Q.defer() let done = plugins.q.defer()
let config = configArg let config = configArg
npmtsOra.text('now looking at ' + 'required assets'.yellow) npmtsOra.text('now looking at ' + 'required assets'.yellow)
if (config.cli === true) { if (config.cli === true) {

View File

@ -7,7 +7,8 @@ import {ProjectinfoNpm} from 'projectinfo'
export let projectInfo: ProjectinfoNpm export let projectInfo: ProjectinfoNpm
let checkProjectTypings = (configArg) => { 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) projectInfo = new ProjectinfoNpm(paths.cwd)
if (typeof projectInfo.packageJson.typings === 'undefined') { if (typeof projectInfo.packageJson.typings === 'undefined') {
plugins.beautylog.error(`please add typings field to package.json`) plugins.beautylog.error(`please add typings field to package.json`)
@ -33,7 +34,8 @@ const depcheckOptions = {
} }
let checkDependencies = (configArg) => { 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, { let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored ignoreDirs: [ // folder with these names will be ignored
'test', 'test',
@ -47,28 +49,29 @@ let checkDependencies = (configArg) => {
}) })
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.dependencies) { for (let item of unused.dependencies) {
plugins.beautylog.warn(`Watch out: unused dependency ${item.red}`) plugins.beautylog.warn(`Watch out: unused dependency "${item}"`)
}; }
for (let item of unused.missing) { for (let item in unused.missing) {
plugins.beautylog.error(`unused devDependency ${item.red}`) plugins.beautylog.error(`unused devDependency "${item}"`)
}; }
if (unused.missing.length > 0) { if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json') plugins.beautylog.info('exiting due to missing dependencies in package.json')
process.exit(1) 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}`) 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}`) plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`)
}; }
done.resolve(configArg) done.resolve(configArg)
}) })
return done.promise return done.promise
} }
let checkDevDependencies = (configArg) => { 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, { let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored ignoreDirs: [ // folder with these names will be ignored
'ts', 'ts',
@ -83,18 +86,18 @@ let checkDevDependencies = (configArg) => {
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.devDependencies) { for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item.red}`) 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}`) plugins.beautylog.error(`unused devDependency ${item.red}`)
}; }
if (unused.missing.length > 0) { if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json') plugins.beautylog.info('exiting due to missing dependencies in package.json')
process.exit(1) 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}`) 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}`) plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`)
} }
done.resolve(configArg) done.resolve(configArg)
@ -103,18 +106,20 @@ let checkDevDependencies = (configArg) => {
} }
let checkNodeVersion = (configArg) => { let checkNodeVersion = (configArg) => {
let done = plugins.Q.defer() let done = plugins.q.defer()
npmtsOra.text('checking node version')
done.resolve(configArg) done.resolve(configArg)
return done.promise return done.promise
} }
export let run = (configArg) => { export let run = (configArg) => {
let done = plugins.Q.defer() let done = plugins.q.defer()
npmtsOra.text('running project checks...') npmtsOra.text('Check Module: ...')
checkProjectTypings(configArg) checkProjectTypings(configArg)
.then(checkDependencies) .then(checkDependencies)
.then(checkDevDependencies) .then(checkDevDependencies)
.then(checkNodeVersion) .then(checkNodeVersion)
.then(done.resolve) .then(done.resolve)
.catch((err) => { console.log(err) })
return done.promise return done.promise
} }

View File

@ -15,7 +15,7 @@ let removePages = function(){
export let run = function(configArg){ export let run = function(configArg){
npmtsOra.text('cleaning up from previous builds...') npmtsOra.text('cleaning up from previous builds...')
let done = plugins.Q.defer() let done = plugins.q.defer()
removeDist() removeDist()
.then(removePages) .then(removePages)
.then(function(){ .then(function(){

View File

@ -4,7 +4,7 @@ import paths = require('./npmts.paths')
import {npmtsOra} from './npmts.promisechain' import {npmtsOra} from './npmts.promisechain'
export let run = function (configArg) { export let run = function (configArg) {
let done = plugins.Q.defer() let done = plugins.q.defer()
let config = configArg let config = configArg
npmtsOra.text('now compiling ' + 'TypeScript'.yellow) npmtsOra.text('now compiling ' + 'TypeScript'.yellow)
plugins.tsn.compileGlobStringObject(config.ts,config.tsOptions,paths.cwd) plugins.tsn.compileGlobStringObject(config.ts,config.tsOptions,paths.cwd)

View File

@ -13,12 +13,13 @@ export interface INpmtsConfig {
test: boolean, test: boolean,
testTs: any, testTs: any,
ts: any, ts: any,
tsOptions: any tsOptions: any,
watch: boolean
}; };
export var run = function (argvArg) { export var run = function (argvArg) {
let done = plugins.Q.defer() let done = plugins.q.defer()
let defaultConfig: INpmtsConfig = { let defaultConfig: INpmtsConfig = {
argv: undefined, argv: undefined,
coverageTreshold: 70, coverageTreshold: 70,
@ -27,16 +28,18 @@ export var run = function (argvArg) {
test: true, test: true,
testTs: {}, testTs: {},
ts: {}, ts: {},
tsOptions: {} tsOptions: {},
watch: false
} }
// mix with configfile // mix with configfile
npmtsOra.text('looking for npmextra.json') npmtsOra.text('running npmextra')
let config: INpmtsConfig = plugins.npmextra.dataFor<INpmtsConfig>({
toolName: 'npmts', let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd)
defaultSettings: defaultConfig, let config: INpmtsConfig = localNpmextra.dataFor<INpmtsConfig>(
cwd: paths.cwd 'npmts',
}) defaultConfig
)
// add argv // add argv
config.argv = argvArg config.argv = argvArg
@ -70,6 +73,9 @@ export var run = function (argvArg) {
if (config.argv.nodocs) { if (config.argv.nodocs) {
config.docs = false config.docs = false
}; };
if (config.argv.watch) {
config.watch = true
};
plugins.beautylog.ok('build options are ready!') plugins.beautylog.ok('build options are ready!')
done.resolve(config) done.resolve(config)

View File

@ -15,13 +15,15 @@ export import lodash = require('lodash')
export import npmextra = require('npmextra') export import npmextra = require('npmextra')
export import projectinfo = require('projectinfo') export import projectinfo = require('projectinfo')
export import path = require('path') export import path = require('path')
export import Q = require('q') export import q = require('q')
export import shelljs = require('shelljs') export import shelljs = require('shelljs')
export import smartchok = require('smartchok')
export import smartcli = require('smartcli') export import smartcli = require('smartcli')
export import smartcov = require('smartcov') export import smartcov = require('smartcov')
export import smartenv = require('smartenv') export import smartenv = require('smartenv')
export import smartfile = require('smartfile') export import smartfile = require('smartfile')
export import smartpath = require('smartpath') export import smartpath = require('smartpath')
export import smartstream = require('smartstream')
export import smartstring = require('smartstring') export import smartstring = require('smartstring')
export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing
export import tsn = require('tsn') export import tsn = require('tsn')

View File

@ -4,16 +4,17 @@ import {Ora} from 'beautylog'
export let npmtsOra = new Ora('setting up TaskChain','cyan') export let npmtsOra = new Ora('setting up TaskChain','cyan')
import NpmtsAssets = require('./npmts.assets') import * as NpmtsAssets from './npmts.assets'
import NpmtsCheck = require('./npmts.check') import * as NpmtsCheck from './npmts.check'
import NpmtsClean = require('./npmts.clean') import * as NpmtsClean from './npmts.clean'
import NpmtsCompile = require('./npmts.compile') import * as NpmtsCompile from './npmts.compile'
import NpmtsTypeDoc = require('./npmts.typedoc') import * as NpmtsTypeDoc from './npmts.typedoc'
import NpmtsOptions = require('./npmts.options') import * as NpmtsOptions from './npmts.options'
import NpmtsTests = require('./npmts.tests') import * as NpmtsTests from './npmts.tests'
import * as NpmtsWatch from './npmts.watch'
export let promisechain = function(argvArg){ export let run = function(argvArg){
let done = plugins.Q.defer() let done = plugins.q.defer()
npmtsOra.start() npmtsOra.start()
NpmtsOptions.run(argvArg) NpmtsOptions.run(argvArg)
.then(NpmtsClean.run) .then(NpmtsClean.run)
@ -22,6 +23,7 @@ export let promisechain = function(argvArg){
.then(NpmtsAssets.run) .then(NpmtsAssets.run)
.then(NpmtsTypeDoc.run) .then(NpmtsTypeDoc.run)
.then(NpmtsTests.run) .then(NpmtsTests.run)
.then(NpmtsWatch.run)
.then(function(configArg){ .then(function(configArg){
let shipString = '' + let shipString = '' +
'\n' + '\n' +
@ -43,7 +45,7 @@ export let promisechain = function(argvArg){
} else { } else {
plugins.beautylog.success('Done!') plugins.beautylog.success('Done!')
} }
done.resolve() done.resolve(configArg)
}) })
return done.promise return done.promise
} }

View File

@ -2,15 +2,16 @@ import 'typings-global'
import plugins = require('./npmts.plugins') import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths') import paths = require('./npmts.paths')
import { npmtsOra } from './npmts.promisechain' import { npmtsOra } from './npmts.promisechain'
import { INpmtsConfig } from './npmts.options'
/** /**
* * runs mocha
* @returns {*} * @returns INpmtsConfig
*/ */
let mocha = function (configArg) { let mocha = function (configArg: INpmtsConfig) {
npmtsOra.text('Instrumentalizing and testing transpiled JS') npmtsOra.text('Instrumentalizing and testing transpiled JS')
npmtsOra.end() // end npmtsOra for tests. 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')]) plugins.gulp.src([plugins.path.join(paths.cwd, 'dist/*.js')])
.pipe(plugins.g.sourcemaps.init()) .pipe(plugins.g.sourcemaps.init())
.pipe(plugins.g.babel({ .pipe(plugins.g.babel({
@ -23,31 +24,35 @@ let mocha = function (configArg) {
.pipe(plugins.g.sourcemaps.write()) .pipe(plugins.g.sourcemaps.write())
.pipe(plugins.g.injectModules()) .pipe(plugins.g.injectModules())
.on('finish', function () { .on('finish', function () {
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]) let localSmartstream = new plugins.smartstream.Smartstream([
.pipe(plugins.g.babel({ plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]),
plugins.g.babel({
presets: [ presets: [
require.resolve('babel-preset-es2015') require.resolve('babel-preset-es2015')
] ]
})) }),
.pipe(plugins.g.injectModules()) plugins.g.injectModules(),
.pipe(plugins.g.mocha()) plugins.g.mocha(),
.pipe(plugins.g.istanbul.writeReports({ plugins.g.istanbul.writeReports({
dir: plugins.path.join(paths.cwd, './coverage'), dir: plugins.path.join(paths.cwd, './coverage'),
reporters: ['lcovonly', 'json', 'text', 'text-summary'] reporters: ['lcovonly', 'json', 'text', 'text-summary']
})) })
.pipe(plugins.g.gFunction( ])
function () { localSmartstream.run()
plugins.beautylog.ok('Tested!') .then(() => { done.resolve(configArg) }, (err) => {
plugins.beautylog.error('Tests failed!')
if (configArg.watch) {
done.resolve(configArg) done.resolve(configArg)
}, } else {
'atEnd' process.exit(1)
)) }
})
}) })
return done.promise return done.promise
} }
let coverage = function (configArg) { let coverage = function (configArg: INpmtsConfig) {
let done = plugins.Q.defer() let done = plugins.q.defer()
plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2)
.then(function (percentageArg) { .then(function (percentageArg) {
if (percentageArg >= configArg.coverageTreshold) { if (percentageArg >= configArg.coverageTreshold) {
@ -63,15 +68,15 @@ let coverage = function (configArg) {
+ `${configArg.coverageTreshold.toString()}%` + `${configArg.coverageTreshold.toString()}%`
) )
plugins.beautylog.error('exiting due to coverage failure') plugins.beautylog.error('exiting due to coverage failure')
process.exit(1) if (!configArg.watch) { process.exit(1) }
} }
done.resolve(configArg) done.resolve(configArg)
}) })
return done.promise return done.promise
} }
export let run = function (configArg) { export let run = function (configArg: INpmtsConfig) {
let done = plugins.Q.defer() let done = plugins.q.defer()
let config = configArg let config = configArg
if (config.test === true) { if (config.test === true) {
npmtsOra.text('now starting tests') npmtsOra.text('now starting tests')

View File

@ -6,7 +6,7 @@ import { npmtsOra } from './npmts.promisechain'
import { projectInfo } from './npmts.check' import { projectInfo } from './npmts.check'
let genTypeDoc = function (configArg) { let genTypeDoc = function (configArg) {
let done = plugins.Q.defer() let done = plugins.q.defer()
npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow) npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow)
plugins.beautylog.log('TypeDoc Output:') plugins.beautylog.log('TypeDoc Output:')
plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts')) plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts'))
@ -32,7 +32,7 @@ let genTypeDoc = function (configArg) {
} }
export let run = function (configArg) { export let run = function (configArg) {
let done = plugins.Q.defer() let done = plugins.q.defer()
if (configArg.docs) { if (configArg.docs) {
genTypeDoc(configArg) genTypeDoc(configArg)
.then(() => { .then(() => {

29
ts/npmts.watch.ts Normal file
View File

@ -0,0 +1,29 @@
import * as plugins from './npmts.plugins'
import * as promisechain from './npmts.promisechain'
let npmtsSmartchok: plugins.smartchok.Smartchok = null
import { INpmtsConfig } from './npmts.options'
export let run = (configArg: INpmtsConfig) => {
let done = plugins.q.defer()
if (configArg.watch && npmtsSmartchok === null) {
let pathsToWatch: string[] = []
for (let key in configArg.ts) {
pathsToWatch.push(key)
}
for (let key in configArg.testTs) {
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
}

View File

@ -2,7 +2,12 @@
"compilerOptions": { "compilerOptions": {
"declaration": true, "declaration": true,
"module": "commonjs", "module": "commonjs",
"target": "ES5", "target": "ES6",
"outDir": "./dist/" "outDir": "./dist/"
} },
"exclude": [
"./node_modules",
"./test",
"./dist"
]
} }