Compare commits

...

21 Commits

Author SHA1 Message Date
c91ff6ef4a 5.4.40 2016-09-25 20:28:46 +02:00
2c88c889bf improve README 2016-09-25 20:28:42 +02:00
d3f8ea0433 5.4.39 2016-09-25 20:25:31 +02:00
d57b05c6d0 fix README 2016-09-25 20:25:06 +02:00
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
3dae49b8a1 5.4.35 2016-09-18 13:08:47 +02:00
1d431792a5 upgrade to newest tsn 2016-09-18 13:08:31 +02:00
9542140b93 clean up 2016-09-15 18:26:33 +02:00
e1487c39cb 5.4.34 2016-09-15 18:25:25 +02:00
d4c69071e4 clean up promise handling for ts compilation 2016-09-15 18:25:09 +02:00
186460d437 5.4.33 2016-09-14 16:18:23 +02:00
30c2db9ed1 update compatibility for npmpage 2016-09-14 16:18:19 +02:00
3e5ab24b90 5.4.32 2016-09-14 16:16:47 +02:00
6d63b620f1 update README 2016-09-14 16:16:39 +02:00
a9270cda03 5.4.31 2016-09-14 13:16:40 +02:00
2a0a5cea8c update tsn dependency and by that support Decorators and runtime type checking through reflect metadata API 2016-09-14 13:16:36 +02:00
49 changed files with 442 additions and 416 deletions

2
.gitignore vendored
View File

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

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)
[![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/docs)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/)
## Status for 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:
[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.html)
2. [Install](https://pushrocks.gitlab.io/npmts/gitbook/install.html)
3. [Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.html)
4. [Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.html)
5. [Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.html)
6. [Info](https://pushrocks.gitlab.io/npmts/gitbook/info.html)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

25
dist/index.js vendored
View File

@ -1,27 +1,22 @@
"use strict";
require('typings-global');
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();

View File

@ -1,4 +1,4 @@
/// <reference types="q" />
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<{}>;

12
dist/npmts.assets.js vendored
View File

@ -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');
require("typings-global");
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'));

View File

@ -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<{}>;

94
dist/npmts.check.js vendored
View File

@ -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.lodashObject.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.lodashObject.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;
};

View File

@ -1,4 +1,4 @@
/// <reference types="q" />
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<{}>;

14
dist/npmts.clean.js vendored
View File

@ -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 () {
require("typings-global");
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 () {

View File

@ -1,4 +1,4 @@
/// <reference types="q" />
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<{}>;

View File

@ -1 +0,0 @@
export declare let checkOutputPath: (tsArrayArg: any, keyArg: any) => boolean;

View File

@ -1,16 +0,0 @@
"use strict";
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var outputPathIsDir = function (tsArrayArg, keyArg) {
return plugins.smartpath.check.isDir(plugins.path.join(paths.cwd, tsArrayArg[keyArg]));
};
exports.checkOutputPath = function (tsArrayArg, keyArg) {
if (!outputPathIsDir(tsArrayArg, keyArg)) {
plugins.beautylog.warn('Skipping ' + keyArg + ' because ' + tsArrayArg[keyArg] + ' it is no directory!');
return false;
}
else {
return true;
}
;
};

61
dist/npmts.compile.js vendored
View File

@ -1,60 +1,17 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var helpers = require('./npmts.compile.helpers');
var npmts_promisechain_1 = require('./npmts.promisechain');
var promiseArray = [];
var compileTs = function (tsFileArrayArg, tsOptionsArg) {
if (tsOptionsArg === void 0) { tsOptionsArg = {}; }
var done = plugins.Q.defer();
var compilerOptionsDefault = {
declaration: true,
module: 'CommonJS',
target: 'ES6'
};
/**
* merges default ts options with those found in npmts.json
*/
var compilerOptions = function (keyArg) {
var tsOptionsCombined = plugins.lodashObject.merge(compilerOptionsDefault, tsOptionsArg);
var compilerOptions = {
declaration: tsOptionsCombined.declaration,
module: plugins.tsn.ModuleKind[tsOptionsCombined.module],
target: plugins.tsn.ScriptTarget[tsOptionsCombined.target],
exclude: 'node_modules/**/*'
};
return compilerOptions;
};
var _loop_1 = function(keyArg) {
plugins.beautylog.info("TypeScript assignment: transpile from " + keyArg.blue + " to " + tsFileArrayArg[keyArg].blue);
if (helpers.checkOutputPath(tsFileArrayArg, keyArg)) {
var filesReadPromise = plugins.smartfile.fs.listFileTree(process.cwd(), keyArg)
.then(function (filesToConvertArg) {
var filesToConvertAbsolute = plugins.smartpath.transform.toAbsolute(filesToConvertArg, process.cwd());
var destDir = plugins.smartpath.transform.toAbsolute(tsFileArrayArg[keyArg], process.cwd());
var filesCompiledPromise = plugins.tsn.compile(filesToConvertAbsolute, destDir, compilerOptions(keyArg));
promiseArray.push(filesCompiledPromise);
});
promiseArray.push(filesReadPromise);
}
};
for (var keyArg in tsFileArrayArg) {
_loop_1(keyArg);
}
;
plugins.Q.all(promiseArray)
.then(done.resolve);
return done.promise;
};
require("typings-global");
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);
compileTs(config.ts, config.tsOptions)
.then(function () {
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => {
plugins.beautylog.ok('compiled main TypeScript!');
plugins.beautylog.log('now compiling tests!');
return compileTs(config.testTs);
return plugins.tsn.compileGlobStringObject(config.testTs);
})
.then(function () {
plugins.beautylog.ok('compiled all TypeScript!');

View File

@ -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<{}>;

45
dist/npmts.options.js vendored
View File

@ -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');
require("typings-global");
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,15 +14,13 @@ 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({
toolName: 'npmts',
defaultSettings: defaultConfig,
cwd: paths.cwd
});
npmts_promisechain_1.npmtsOra.text('running npmextra');
let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
let config = localNpmextra.dataFor('npmts', defaultConfig);
// add argv
config.argv = argvArg;
// check mode
@ -33,20 +31,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
@ -58,8 +54,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;
};

4
dist/npmts.paths.js vendored
View File

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

View File

@ -11,17 +11,19 @@ export declare let g: {
sourcemaps: any;
typedoc: any;
};
export import lodashObject = require('lodash');
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');
export import smartfile = require('smartfile');
export import smartpath = require('smartpath');
export import smartstream = require('smartstream');
export import smartstring = require('smartstring');
export declare let sourceMapSupport: any;
export import tsn = require('tsn');

34
dist/npmts.plugins.js vendored
View File

@ -1,8 +1,8 @@
"use strict";
require('typings-global');
exports.beautylog = require('beautylog');
require("typings-global");
exports.beautylog = require("beautylog");
exports.depcheck = require('depcheck');
exports.gulp = require('gulp');
exports.gulp = require("gulp");
exports.g = {
babel: require('gulp-babel'),
istanbul: require('gulp-istanbul'),
@ -12,17 +12,19 @@ exports.g = {
sourcemaps: require('gulp-sourcemaps'),
typedoc: require('gulp-typedoc')
};
exports.lodashObject = require('lodash');
exports.npmextra = require('npmextra');
exports.projectinfo = require('projectinfo');
exports.path = require('path');
exports.Q = require('q');
exports.shelljs = require('shelljs');
exports.smartcli = require('smartcli');
exports.smartcov = require('smartcov');
exports.smartenv = require('smartenv');
exports.smartfile = require('smartfile');
exports.smartpath = require('smartpath');
exports.smartstring = require('smartstring');
exports.lodash = require("lodash");
exports.npmextra = require("npmextra");
exports.projectinfo = require("projectinfo");
exports.path = require("path");
exports.q = require("q");
exports.shelljs = require("shelljs");
exports.smartchok = require("smartchok");
exports.smartcli = require("smartcli");
exports.smartcov = require("smartcov");
exports.smartenv = require("smartenv");
exports.smartfile = require("smartfile");
exports.smartpath = require("smartpath");
exports.smartstream = require("smartstream");
exports.smartstring = require("smartstring");
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 { 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<{}>;

View File

@ -1,17 +1,18 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var beautylog_1 = require('beautylog');
require("typings-global");
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;
};

View File

@ -1,4 +1,5 @@
/// <reference types="q" />
import 'typings-global';
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<{}>;

83
dist/npmts.tests.js vendored
View File

@ -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');
require("typings-global");
const plugins = require("./npmts.plugins");
const paths = require("./npmts.paths");
const npmts_promisechain_1 = require("./npmts.promisechain");
/**
*
* @returns {*}
* runs mocha
* @returns INpmtsConfig
*/
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({
@ -22,48 +22,59 @@ var mocha = function (configArg) {
.pipe(plugins.g.sourcemaps.write())
.pipe(plugins.g.injectModules())
.on('finish', function () {
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')])
.pipe(plugins.g.babel({
presets: [
require.resolve('babel-preset-es2015')
]
}))
.pipe(plugins.g.injectModules())
.pipe(plugins.g.mocha())
.pipe(plugins.g.istanbul.writeReports({
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);
}, 'atEnd'));
let localSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]),
plugins.g.babel({
presets: [
require.resolve('babel-preset-es2015')
]
}),
plugins.g.injectModules(),
plugins.g.mocha(),
plugins.g.istanbul.writeReports({
dir: plugins.path.join(paths.cwd, './coverage'),
reporters: ['lcovonly', 'json', 'text', 'text-summary']
})
]);
localSmartstream.run()
.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;
};
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);
if (!configArg.watch) {
process.exit(1);
}
}
done.resolve(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 +82,7 @@ exports.run = function (configArg) {
'--------------------------------------------------------------');
mocha(config)
.then(coverage)
.then(function () {
.then(() => {
done.resolve(config);
});
}

View File

@ -1,4 +1,4 @@
/// <reference types="q" />
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<{}>;

18
dist/npmts.typedoc.js vendored
View File

@ -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();
require("typings-global");
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);
});
}

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;
};

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)
[![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/docs)
[![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)
@ -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:
[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)

42
gitbook/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

@ -1,14 +1,16 @@
{
"name": "npmts",
"version": "5.4.30",
"version": "5.4.40",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"main": "dist/index.js",
"bin": {
"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.22",
"beautylog": "5.0.23",
"depcheck": "^0.6.4",
"early": "^2.0.26",
"early": "^2.0.35",
"gulp": "3.9.1",
"gulp-babel": "^6.1.2",
"gulp-function": "^1.3.6",
@ -48,19 +50,21 @@
"gulp-mocha": "^3.0.1",
"gulp-sourcemaps": "^1.6.0",
"gulp-typedoc": "^2.0.0",
"lodash": "^4.15.0",
"npmextra": "^1.0.9",
"lodash": "^4.16.1",
"npmextra": "^2.0.3",
"projectinfo": "1.0.3",
"q": "^1.4.1",
"shelljs": "^0.7.4",
"smartcli": "1.0.5",
"smartchok": "^1.0.2",
"smartcli": "1.0.9",
"smartcov": "1.0.0",
"smartenv": "1.2.5",
"smartfile": "4.0.15",
"smartfile": "4.0.21",
"smartpath": "3.2.2",
"smartstream": "^1.0.5",
"smartstring": "^2.0.17",
"source-map-support": "^0.4.2",
"tsn": "^1.0.12",
"tsn": "^2.0.3",
"typedoc": "^0.4.5",
"typescript": "next",
"typings-global": "^1.0.14"

View File

@ -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)

View File

@ -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) {

View File

@ -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,8 +34,9 @@ const depcheckOptions = {
}
let checkDependencies = (configArg) => {
let done = plugins.Q.defer()
let depcheckOptionsMerged = plugins.lodashObject.merge(depcheckOptions, {
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',
'dist',
@ -47,29 +49,30 @@ 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 depcheckOptionsMerged = plugins.lodashObject.merge(depcheckOptions, {
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',
'dist',
@ -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
}

View File

@ -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(){

View File

@ -1,15 +0,0 @@
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
let outputPathIsDir = function (tsArrayArg,keyArg) {
return plugins.smartpath.check.isDir(plugins.path.join(paths.cwd, tsArrayArg[keyArg]))
}
export let checkOutputPath = function(tsArrayArg,keyArg){
if (!outputPathIsDir(tsArrayArg,keyArg)) {
plugins.beautylog.warn('Skipping ' + keyArg + ' because ' + tsArrayArg[keyArg] + ' it is no directory!')
return false
} else {
return true
};
}

View File

@ -1,64 +1,17 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import helpers = require('./npmts.compile.helpers')
import {npmtsOra} from './npmts.promisechain'
let promiseArray = []
let compileTs = (tsFileArrayArg: string[],tsOptionsArg = {}) => {
let done = plugins.Q.defer()
let compilerOptionsDefault = {
declaration: true,
module: 'CommonJS',
target: 'ES6'
}
/**
* merges default ts options with those found in npmts.json
*/
let compilerOptions = function (keyArg: string) {
let tsOptionsCombined = plugins.lodashObject.merge(compilerOptionsDefault, tsOptionsArg)
let compilerOptions: plugins.tsn.CompilerOptions = {
declaration: tsOptionsCombined.declaration,
module: plugins.tsn.ModuleKind[tsOptionsCombined.module],
target: plugins.tsn.ScriptTarget[tsOptionsCombined.target],
exclude: 'node_modules/**/*'
}
return compilerOptions
}
for (let keyArg in tsFileArrayArg) {
plugins.beautylog.info(`TypeScript assignment: transpile from ${keyArg.blue} to ${tsFileArrayArg[keyArg].blue}`)
if (helpers.checkOutputPath(tsFileArrayArg,keyArg)) {
let filesReadPromise = plugins.smartfile.fs.listFileTree(process.cwd(),keyArg)
.then((filesToConvertArg) => {
let filesToConvertAbsolute = plugins.smartpath.transform.toAbsolute(filesToConvertArg,process.cwd())
let destDir = plugins.smartpath.transform.toAbsolute(tsFileArrayArg[keyArg],process.cwd())
let filesCompiledPromise = plugins.tsn.compile(
filesToConvertAbsolute,
destDir,
compilerOptions(keyArg)
)
promiseArray.push(filesCompiledPromise)
})
promiseArray.push(filesReadPromise)
}
};
plugins.Q.all(promiseArray)
.then(done.resolve)
return done.promise
}
export let run = function (configArg) {
let done = plugins.Q.defer()
let done = plugins.q.defer()
let config = configArg
npmtsOra.text('now compiling ' + 'TypeScript'.yellow)
compileTs(config.ts,config.tsOptions)
plugins.tsn.compileGlobStringObject(config.ts,config.tsOptions,paths.cwd)
.then(() => {
plugins.beautylog.ok('compiled main TypeScript!')
plugins.beautylog.log('now compiling tests!')
return compileTs(config.testTs)
return plugins.tsn.compileGlobStringObject(config.testTs)
})
.then(function () {
plugins.beautylog.ok('compiled all TypeScript!')

View File

@ -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,16 +28,18 @@ export var run = function (argvArg) {
test: true,
testTs: {},
ts: {},
tsOptions: {}
tsOptions: {},
watch: false
}
// mix with configfile
npmtsOra.text('looking for npmextra.json')
let config: INpmtsConfig = plugins.npmextra.dataFor({
toolName: 'npmts',
defaultSettings: defaultConfig,
cwd: paths.cwd
})
npmtsOra.text('running npmextra')
let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd)
let config: INpmtsConfig = localNpmextra.dataFor<INpmtsConfig>(
'npmts',
defaultConfig
)
// add argv
config.argv = argvArg
@ -70,6 +73,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)

View File

@ -11,17 +11,19 @@ export let g = {
sourcemaps: require('gulp-sourcemaps'),
typedoc: require('gulp-typedoc')
}
export import lodashObject = require('lodash')
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')
export import smartfile = require('smartfile')
export import smartpath = require('smartpath')
export import smartstream = require('smartstream')
export import smartstring = require('smartstring')
export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing
export import tsn = require('tsn')

View File

@ -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
}

View File

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

View File

@ -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(() => {

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": {
"declaration": true,
"module": "commonjs",
"target": "ES5",
"target": "ES6",
"outDir": "./dist/"
}
},
"exclude": [
"./node_modules",
"./test",
"./dist"
]
}