Compare commits

...

23 Commits

Author SHA1 Message Date
e65e7da26b 7.1.6 2017-06-17 11:10:55 +02:00
ef5c5eb2b8 update dependencies 2017-06-17 11:10:53 +02:00
ed156e6de8 7.1.5 2017-06-17 10:47:10 +02:00
d889a20572 now allows the setting of a better config for how tests are run 2017-06-17 10:47:07 +02:00
da1ec0329f 7.1.4 2017-06-16 16:12:45 +02:00
95e3f9cb10 add command line options --nochecks and --nocoverage 2017-06-16 16:12:42 +02:00
def19f76e9 7.1.3 2017-06-16 16:08:41 +02:00
455c89d68d add coverage option 2017-06-16 16:08:36 +02:00
2bd187b704 Merge branch 'master' into 'master'
introduce a merge option

See merge request !5
2017-06-15 23:42:52 +00:00
29dff4c0e3 introduce a merge option 2017-06-15 23:42:48 +00:00
f236d77952 7.1.2 2017-06-09 16:25:52 +02:00
c91a8d8e69 add smarterror 2017-06-09 16:25:49 +02:00
0d5c49fe60 7.1.1 2017-05-13 10:55:38 +02:00
2112b4527d remove some old cleanup code 2017-05-13 10:55:35 +02:00
bd3873a359 7.1.0 2017-05-13 10:22:06 +02:00
6ec0ccac34 add sourcemap support for tests 2017-05-13 10:21:55 +02:00
9bff7db97b 7.0.18 2017-05-05 00:23:16 +02:00
2305be0daa update docs and include terminal session. 2017-05-05 00:23:04 +02:00
9cd24695db 7.0.17 2017-05-05 00:01:24 +02:00
46c79e711b now looking for coverage percentage being actually present, fixes #22 2017-05-05 00:01:21 +02:00
4b07c9951f update readme 2017-05-04 23:28:28 +02:00
559b5553eb 7.0.16 2017-05-01 22:43:35 +02:00
87ceed6f8f fix smartgulp 2017-05-01 22:43:32 +02:00
19 changed files with 687 additions and 828 deletions

View File

@ -85,7 +85,7 @@ let checkDevDependencies = (configArg) => {
plugins.beautylog.log(`unused devDependency ${item}`); plugins.beautylog.log(`unused devDependency ${item}`);
} }
for (let item in unused.missing) { for (let item in unused.missing) {
plugins.beautylog.error(`unused devDependency ${item}`); plugins.beautylog.error(`missing 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');
@ -110,11 +110,20 @@ let checkNodeVersion = (configArg) => {
exports.run = (configArg) => { exports.run = (configArg) => {
let done = q.defer(); let done = q.defer();
plugins.beautylog.ora.text('Check Module: ...'); plugins.beautylog.ora.text('Check Module: ...');
// check cli
if (configArg.argv.nocheck) {
configArg.checkDependencies = false;
}
if (configArg.checkDependencies) {
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); }); .catch((err) => { console.log(err); });
}
else {
done.resolve(configArg);
}
return done.promise; return done.promise;
}; };

View File

@ -10,17 +10,6 @@ let removeDist = function () {
plugins.beautylog.ora.text('cleaning dist folder'); plugins.beautylog.ora.text('cleaning dist folder');
return plugins.smartfile.fs.remove(paths.distDir); return plugins.smartfile.fs.remove(paths.distDir);
}; };
/**
* remove .d.ts files from testDirctory
*/
let removeTestDeclarations = function () {
let done = q.defer();
plugins.smartfile.fs.listFileTree('./test/', '**/*.d.ts').then(fileArray => {
let fileArrayToRemove = plugins.smartpath.transform.toAbsolute(fileArray, process.cwd() + '//test/');
plugins.smartfile.fs.removeManySync(fileArrayToRemove);
done.resolve();
});
};
/** /**
* remove old pages * remove old pages
*/ */
@ -32,7 +21,6 @@ exports.run = function (configArg) {
plugins.beautylog.ora.text('cleaning up from previous builds...'); plugins.beautylog.ora.text('cleaning up from previous builds...');
let done = q.defer(); let done = q.defer();
removeDist() removeDist()
.then(removeTestDeclarations)
.then(removePages) .then(removePages)
.then(function () { .then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!'); plugins.beautylog.ok('Cleaned up from previous builds!');

56
dist/mod02/index.js vendored
View File

@ -13,7 +13,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
* -------------------------------------------- */ * -------------------------------------------- */
const plugins = require("./mod02.plugins"); const plugins = require("./mod02.plugins");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
let gulp = require('gulp');
const q = require("smartq"); const q = require("smartq");
/** /**
* runs mocha * runs mocha
@ -25,11 +24,31 @@ let tap = function (configArg) {
* the TabBuffer for npmts * the TabBuffer for npmts
*/ */
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer(); let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer();
npmtsTapBuffer.setConfig(configArg.testConfig);
/** /**
* handle the testable files * handle the testable files
*/ */
let testableFilesSmartstream = new plugins.smartstream.Smartstream([ let testableFilesSmartstream = new plugins.smartstream.Smartstream([
gulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]), plugins.smartgulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
file.path = file.path.replace(paths.tsDir, paths.distDir);
})),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
]);
/**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpSourcemaps.init(), plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({ plugins.gulpTypeScript({
target: 'ES5', target: 'ES5',
@ -38,23 +57,6 @@ let tap = function (configArg) {
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable'] lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}), }),
plugins.gulpSourcemaps.write(), plugins.gulpSourcemaps.write(),
plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
file.path = file.path.replace(paths.tsDir, paths.distDir);
})),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
]);
/**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
gulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
npmtsTapBuffer.pipeTestFiles(), npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]); ]);
@ -78,7 +80,13 @@ let tap = function (configArg) {
return done.promise; return done.promise;
}; };
let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function* () { let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function* () {
let coverageResult = yield plugins.smartcov.get.percentageFromLcovString(configArg.runData.coverageLcovInfo, 2); let coverageResult = 0; // the coverage in percent
if (configArg.runData.coverageLcovInfo) {
coverageResult = yield plugins.smartcov.get.percentageFromLcovString(configArg.runData.coverageLcovInfo, 2);
}
else {
plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?');
}
if (coverageResult >= configArg.coverageTreshold) { if (coverageResult >= configArg.coverageTreshold) {
plugins.beautylog.ok(`${(coverageResult).toString()}% ` plugins.beautylog.ok(`${(coverageResult).toString()}% `
+ `coverage exceeds your treshold of ` + `coverage exceeds your treshold of `
@ -102,12 +110,20 @@ exports.run = function (configArg) {
plugins.beautylog.ora.text('now starting tests'); plugins.beautylog.ora.text('now starting tests');
plugins.beautylog.ora.end(); plugins.beautylog.ora.end();
plugins.beautylog.log('ready for tapbuffer:'); plugins.beautylog.log('ready for tapbuffer:');
if (configArg.coverage) {
tap(config) tap(config)
.then(handleCoverageData) .then(handleCoverageData)
.then(() => { .then(() => {
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); }).catch(err => { console.log(err); });
} }
else {
tap(config)
.then(() => {
done.resolve(config);
}).catch(err => { console.log(err); });
}
}
else { else {
plugins.beautylog.ora.end(); plugins.beautylog.ora.end();
done.resolve(config); done.resolve(config);

View File

@ -1,8 +1,8 @@
export * from '../npmts.plugins'; export * from '../npmts.plugins';
import * as gulp from 'smartgulp';
import * as gulpFunction from 'gulp-function'; import * as gulpFunction from 'gulp-function';
import * as gulpSourcemaps from 'gulp-sourcemaps'; import * as gulpSourcemaps from 'gulp-sourcemaps';
import * as gulpTypeScript from 'gulp-typescript'; import * as gulpTypeScript from 'gulp-typescript';
import * as smartcov from 'smartcov'; import * as smartcov from 'smartcov';
import * as smartgulp from 'smartgulp';
import * as tapbuffer from 'tapbuffer'; import * as tapbuffer from 'tapbuffer';
export { gulp, gulpFunction, gulpSourcemaps, gulpTypeScript, smartcov, tapbuffer }; export { gulpFunction, gulpSourcemaps, gulpTypeScript, smartcov, smartgulp, tapbuffer };

View File

@ -4,8 +4,6 @@ function __export(m) {
} }
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
__export(require("../npmts.plugins")); __export(require("../npmts.plugins"));
const gulp = require("smartgulp");
exports.gulp = gulp;
const gulpFunction = require("gulp-function"); const gulpFunction = require("gulp-function");
exports.gulpFunction = gulpFunction; exports.gulpFunction = gulpFunction;
const gulpSourcemaps = require("gulp-sourcemaps"); const gulpSourcemaps = require("gulp-sourcemaps");
@ -14,5 +12,7 @@ const gulpTypeScript = require("gulp-typescript");
exports.gulpTypeScript = gulpTypeScript; exports.gulpTypeScript = gulpTypeScript;
const smartcov = require("smartcov"); const smartcov = require("smartcov");
exports.smartcov = smartcov; exports.smartcov = smartcov;
const smartgulp = require("smartgulp");
exports.smartgulp = smartgulp;
const tapbuffer = require("tapbuffer"); const tapbuffer = require("tapbuffer");
exports.tapbuffer = tapbuffer; exports.tapbuffer = tapbuffer;

View File

@ -1,10 +1,19 @@
export declare type npmtsMode = 'default' | 'custom'; /**
* specifies the different modes available
* default -> uses default options no matterm what
* merge -> uses merged default + custom options
* custom -> only uses specified options
*/
export declare type npmtsMode = 'default' | 'custom' | 'merge';
export interface INpmtsConfig { export interface INpmtsConfig {
argv: any; argv: any;
coverage: boolean;
coverageTreshold: number; coverageTreshold: number;
checkDependencies: boolean;
mode: npmtsMode; mode: npmtsMode;
test: boolean; test: boolean;
testTs: any; testTs: any;
testConfig: any;
ts: any; ts: any;
tsOptions: any; tsOptions: any;
watch: boolean; watch: boolean;

21
dist/npmts.config.js vendored
View File

@ -3,15 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
const paths = require("./npmts.paths"); const paths = require("./npmts.paths");
const q = require("smartq"); const q = require("smartq");
;
exports.run = function (argvArg) { exports.run = function (argvArg) {
let done = q.defer(); let done = q.defer();
let defaultConfig = { let defaultConfig = {
argv: undefined, argv: undefined,
coverage: true,
coverageTreshold: 70, coverageTreshold: 70,
checkDependencies: true,
mode: 'default', mode: 'default',
test: true, test: true,
testTs: {}, testTs: {},
testConfig: {
parallel: true
},
ts: {}, ts: {},
tsOptions: {}, tsOptions: {},
watch: false, watch: false,
@ -27,16 +31,16 @@ exports.run = function (argvArg) {
switch (config.mode) { switch (config.mode) {
case 'default': case 'default':
case 'custom': case 'custom':
case 'merge':
plugins.beautylog.ok('mode is ' + config.mode); plugins.beautylog.ok('mode is ' + config.mode);
done.resolve(config); done.resolve(config);
break; break;
default: default:
plugins.beautylog.error(`mode not recognised!`); plugins.beautylog.error(`mode not recognised! Can be default or custom`);
process.exit(1); process.exit(1);
} }
;
// handle default mode // handle default mode
if (config.mode === 'default') { if (config.mode === 'default' || config.mode === 'merge') {
config.ts = { config.ts = {
'./ts/**/*.ts': './dist/' './ts/**/*.ts': './dist/'
}; };
@ -44,16 +48,19 @@ exports.run = function (argvArg) {
'./test/**/*.ts': './test/' './test/**/*.ts': './test/'
}; };
} }
;
// mix with commandline // mix with commandline
if (config.argv.notest) { if (config.argv.notest) {
config.test = false; config.test = false;
} }
; if (config.argv.nocoverage) {
config.coverage = false;
}
if (config.argv.nochecks) {
config.checkDependencies = false;
}
if (config.argv.watch) { if (config.argv.watch) {
config.watch = true; 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;

View File

@ -7,11 +7,11 @@ import * as projectinfo from 'projectinfo';
import * as path from 'path'; import * as path from 'path';
import * as smartanalytics from 'smartanalytics'; import * as smartanalytics from 'smartanalytics';
import * as smartcli from 'smartcli'; import * as smartcli from 'smartcli';
import * as smarterror from 'smarterror';
import * as smartfile from 'smartfile'; import * as smartfile from 'smartfile';
import * as smartpath from 'smartpath'; import * as smartpath from 'smartpath';
import * as smartstream from 'smartstream'; import * as smartstream from 'smartstream';
import * as smartstring from 'smartstring'; import * as smartstring from 'smartstring';
import * as smartsystem from 'smartsystem'; import * as smartsystem from 'smartsystem';
import * as through2 from 'through2'; import * as through2 from 'through2';
export declare let sourceMapSupport: any; export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartanalytics, smartcli, smarterror, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 };
export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartanalytics, smartcli, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 };

View File

@ -17,6 +17,8 @@ const smartanalytics = require("smartanalytics");
exports.smartanalytics = smartanalytics; exports.smartanalytics = smartanalytics;
const smartcli = require("smartcli"); const smartcli = require("smartcli");
exports.smartcli = smartcli; exports.smartcli = smartcli;
const smarterror = require("smarterror");
exports.smarterror = smarterror;
const smartfile = require("smartfile"); const smartfile = require("smartfile");
exports.smartfile = smartfile; exports.smartfile = smartfile;
const smartpath = require("smartpath"); const smartpath = require("smartpath");
@ -29,4 +31,3 @@ const smartsystem = require("smartsystem");
exports.smartsystem = smartsystem; exports.smartsystem = smartsystem;
const through2 = require("through2"); const through2 = require("through2");
exports.through2 = through2; exports.through2 = through2;
exports.sourceMapSupport = require('source-map-support').install(); // display errors correctly during testing

View File

@ -14,13 +14,16 @@ Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
[![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts) [![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![Dependency Status](https://david-dm.org/gitzone/npmts.svg)](https://david-dm.org/gitzone/npmts) [![Dependency Status](https://david-dm.org/gitzonetools/npmts.svg)](https://david-dm.org/gitzonetools/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/gitzone/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzone/npmts/master/dependencies/npm) [![bitHound Dependencies](https://www.bithound.io/github/gitzonetools/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzonetools/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzone/npmts/badges/code.svg)](https://www.bithound.io/github/gitzone/npmts) [![bitHound Code](https://www.bithound.io/github/gitzonetools/npmts/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmts)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![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/) [![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/) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage ## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript. NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.

View File

@ -1,6 +1,6 @@
{ {
"name": "npmts", "name": "npmts",
"version": "7.0.15", "version": "7.1.6",
"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": {
@ -36,34 +36,33 @@
"dependencies": { "dependencies": {
"@types/gulp-sourcemaps": "0.0.30", "@types/gulp-sourcemaps": "0.0.30",
"@types/minimatch": "^2.0.29", "@types/minimatch": "^2.0.29",
"@types/through2": "^2.0.32", "@types/through2": "^2.0.33",
"beautylog": "6.1.10", "beautylog": "6.1.10",
"depcheck": "^0.6.7", "depcheck": "^0.6.7",
"early": "^2.1.1", "early": "^2.1.1",
"gulp": "^3.9.1",
"gulp-function": "^2.2.9", "gulp-function": "^2.2.9",
"gulp-sourcemaps": "^2.6.0", "gulp-sourcemaps": "^2.6.0",
"gulp-typescript": "^3.1.6", "gulp-typescript": "^3.1.7",
"lodash": "^4.17.4", "lodash": "^4.17.4",
"npmextra": "^2.0.5", "npmextra": "^2.0.5",
"projectinfo": "^3.0.2", "projectinfo": "^3.0.2",
"smartanalytics": "^1.0.6", "smartanalytics": "^1.0.6",
"smartchok": "^1.0.8", "smartchok": "^1.0.8",
"smartcli": "^2.0.6", "smartcli": "^2.0.7",
"smartcov": "^1.0.2", "smartcov": "^1.0.2",
"smartfile": "^4.2.4", "smarterror": "^1.0.3",
"smartgulp": "^1.0.4", "smartfile": "^4.2.17",
"smartgulp": "^1.0.6",
"smartpath": "^3.2.8", "smartpath": "^3.2.8",
"smartq": "^1.1.1", "smartq": "^1.1.1",
"smartstream": "^1.0.8", "smartstream": "^1.0.8",
"smartstring": "^2.0.24", "smartstring": "^2.0.24",
"smartsystem": "^1.0.12", "smartsystem": "^1.0.17",
"source-map-support": "^0.4.15", "tapbuffer": "^1.0.15",
"tapbuffer": "^1.0.11",
"through2": "^2.0.3", "through2": "^2.0.3",
"tsn": "^2.0.15", "tsn": "^2.0.15",
"typescript": "^2.3.2", "typescript": "^2.3.4",
"typings-global": "^1.0.16" "typings-global": "^1.0.17"
}, },
"devDependencies": {} "devDependencies": {}
} }

View File

@ -11,13 +11,16 @@ Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
[![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts) [![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![Dependency Status](https://david-dm.org/gitzone/npmts.svg)](https://david-dm.org/gitzone/npmts) [![Dependency Status](https://david-dm.org/gitzonetools/npmts.svg)](https://david-dm.org/gitzonetools/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/gitzone/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzone/npmts/master/dependencies/npm) [![bitHound Dependencies](https://www.bithound.io/github/gitzonetools/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzonetools/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzone/npmts/badges/code.svg)](https://www.bithound.io/github/gitzone/npmts) [![bitHound Code](https://www.bithound.io/github/gitzonetools/npmts/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmts)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![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/) [![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/) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage ## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript. NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
@ -33,7 +36,9 @@ For more information on how tests are run check out the [tapbuffer module](https
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 linked docs at the top of this README.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://git.zone) [![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

View File

@ -89,7 +89,7 @@ let checkDevDependencies = (configArg) => {
plugins.beautylog.log(`unused devDependency ${item}`) plugins.beautylog.log(`unused devDependency ${item}`)
} }
for (let item in unused.missing) { for (let item in unused.missing) {
plugins.beautylog.error(`unused devDependency ${item}`) plugins.beautylog.error(`missing 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')
@ -116,11 +116,21 @@ let checkNodeVersion = (configArg) => {
export let run = (configArg) => { export let run = (configArg) => {
let done = q.defer() let done = q.defer()
plugins.beautylog.ora.text('Check Module: ...') plugins.beautylog.ora.text('Check Module: ...')
// check cli
if (configArg.argv.nocheck) {
configArg.checkDependencies = false
}
if (configArg.checkDependencies) {
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) }) .catch((err) => { console.log(err) })
} else {
done.resolve(configArg)
}
return done.promise return done.promise
} }

View File

@ -11,18 +11,6 @@ let removeDist = function () {
return plugins.smartfile.fs.remove(paths.distDir) return plugins.smartfile.fs.remove(paths.distDir)
} }
/**
* remove .d.ts files from testDirctory
*/
let removeTestDeclarations = function () {
let done = q.defer()
plugins.smartfile.fs.listFileTree('./test/', '**/*.d.ts').then(fileArray => {
let fileArrayToRemove = plugins.smartpath.transform.toAbsolute(fileArray, process.cwd() + '//test/')
plugins.smartfile.fs.removeManySync(fileArrayToRemove)
done.resolve()
})
}
/** /**
* remove old pages * remove old pages
*/ */
@ -35,7 +23,6 @@ export let run = function (configArg) {
plugins.beautylog.ora.text('cleaning up from previous builds...') plugins.beautylog.ora.text('cleaning up from previous builds...')
let done = q.defer() let done = q.defer()
removeDist() removeDist()
.then(removeTestDeclarations)
.then(removePages) .then(removePages)
.then(function () { .then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!') plugins.beautylog.ok('Cleaned up from previous builds!')

View File

@ -4,8 +4,6 @@
import plugins = require('./mod02.plugins') import plugins = require('./mod02.plugins')
import paths = require('../npmts.paths') import paths = require('../npmts.paths')
let gulp = require('gulp')
import * as q from 'smartq' import * as q from 'smartq'
import { INpmtsConfig } from '../npmts.config' import { INpmtsConfig } from '../npmts.config'
@ -22,11 +20,13 @@ let tap = function (configArg: INpmtsConfig) {
*/ */
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer() let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer()
npmtsTapBuffer.setConfig(configArg.testConfig)
/** /**
* handle the testable files * handle the testable files
*/ */
let testableFilesSmartstream = new plugins.smartstream.Smartstream([ let testableFilesSmartstream = new plugins.smartstream.Smartstream([
gulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]), plugins.smartgulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]),
plugins.gulpSourcemaps.init(), plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({ plugins.gulpTypeScript({
target: 'ES5', target: 'ES5',
@ -34,10 +34,10 @@ let tap = function (configArg: INpmtsConfig) {
experimentalDecorators: true, experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ] lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}), }),
plugins.gulpSourcemaps.write(),
plugins.gulpFunction.forEach(async file => { plugins.gulpFunction.forEach(async file => {
file.path = file.path.replace(paths.tsDir, paths.distDir) file.path = file.path.replace(paths.tsDir, paths.distDir)
}), }),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(), npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]) ])
@ -46,13 +46,15 @@ let tap = function (configArg: INpmtsConfig) {
* handle the test files * handle the test files
*/ */
let testFilesSmartstream = new plugins.smartstream.Smartstream([ let testFilesSmartstream = new plugins.smartstream.Smartstream([
gulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]), plugins.smartgulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({ plugins.gulpTypeScript({
target: 'ES5', target: 'ES5',
emitDecoratorMetadata: true, emitDecoratorMetadata: true,
experimentalDecorators: true, experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ] lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}), }),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(), npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]) ])
@ -79,10 +81,16 @@ let tap = function (configArg: INpmtsConfig) {
} }
let handleCoverageData = async (configArg: INpmtsConfig) => { let handleCoverageData = async (configArg: INpmtsConfig) => {
let coverageResult = await plugins.smartcov.get.percentageFromLcovString( let coverageResult: number = 0 // the coverage in percent
if (configArg.runData.coverageLcovInfo) {
coverageResult = await plugins.smartcov.get.percentageFromLcovString(
configArg.runData.coverageLcovInfo, configArg.runData.coverageLcovInfo,
2 2
) )
} else {
plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?')
}
if (coverageResult >= configArg.coverageTreshold) { if (coverageResult >= configArg.coverageTreshold) {
plugins.beautylog.ok( plugins.beautylog.ok(
`${(coverageResult).toString()}% ` `${(coverageResult).toString()}% `
@ -108,12 +116,19 @@ export let run = function (configArg: INpmtsConfig) {
plugins.beautylog.ora.text('now starting tests') plugins.beautylog.ora.text('now starting tests')
plugins.beautylog.ora.end() plugins.beautylog.ora.end()
plugins.beautylog.log('ready for tapbuffer:') plugins.beautylog.log('ready for tapbuffer:')
if (configArg.coverage) {
tap(config) tap(config)
.then(handleCoverageData) .then(handleCoverageData)
.then(() => { .then(() => {
done.resolve(config) done.resolve(config)
}).catch(err => { console.log(err) }) }).catch(err => { console.log(err) })
} else {
tap(config)
.then(() => {
done.resolve(config)
}).catch(err => { console.log(err) })
}
} else { } else {
plugins.beautylog.ora.end() plugins.beautylog.ora.end()
done.resolve(config) done.resolve(config)

View File

@ -1,17 +1,17 @@
export * from '../npmts.plugins' export * from '../npmts.plugins'
import * as gulp from 'smartgulp'
import * as gulpFunction from 'gulp-function' import * as gulpFunction from 'gulp-function'
import * as gulpSourcemaps from 'gulp-sourcemaps' import * as gulpSourcemaps from 'gulp-sourcemaps'
import * as gulpTypeScript from 'gulp-typescript' import * as gulpTypeScript from 'gulp-typescript'
import * as smartcov from 'smartcov' import * as smartcov from 'smartcov'
import * as smartgulp from 'smartgulp'
import * as tapbuffer from 'tapbuffer' import * as tapbuffer from 'tapbuffer'
export { export {
gulp,
gulpFunction, gulpFunction,
gulpSourcemaps, gulpSourcemaps,
gulpTypeScript, gulpTypeScript,
smartcov, smartcov,
smartgulp,
tapbuffer tapbuffer
} }

View File

@ -3,31 +3,45 @@ import paths = require('./npmts.paths')
import * as q from 'smartq' import * as q from 'smartq'
export type npmtsMode = 'default' | 'custom' /**
* specifies the different modes available
* default -> uses default options no matterm what
* merge -> uses merged default + custom options
* custom -> only uses specified options
*/
export type npmtsMode = 'default' | 'custom' | 'merge'
export interface INpmtsConfig { export interface INpmtsConfig {
argv: any, argv: any
coverageTreshold: number, coverage: boolean
mode: npmtsMode, coverageTreshold: number
test: boolean, checkDependencies: boolean
testTs: any, mode: npmtsMode
ts: any, test: boolean
tsOptions: any, testTs: any
testConfig: any
ts: any
tsOptions: any
watch: boolean watch: boolean
runData: { runData: {
coverageLcovInfo?: string, coverageLcovInfo?: string
coverageResult?: number coverageResult?: number
} }
}; }
export let run = function (argvArg) { export let run = function (argvArg) {
let done = q.defer() let done = q.defer()
let defaultConfig: INpmtsConfig = { let defaultConfig: INpmtsConfig = {
argv: undefined, argv: undefined,
coverage: true,
coverageTreshold: 70, coverageTreshold: 70,
checkDependencies: true,
mode: 'default', mode: 'default',
test: true, test: true,
testTs: {}, testTs: {},
testConfig: {
parallel: true
},
ts: {}, ts: {},
tsOptions: {}, tsOptions: {},
watch: false, watch: false,
@ -50,31 +64,41 @@ export let run = function (argvArg) {
switch (config.mode) { switch (config.mode) {
case 'default': case 'default':
case 'custom': case 'custom':
case 'merge':
plugins.beautylog.ok('mode is ' + config.mode) plugins.beautylog.ok('mode is ' + config.mode)
done.resolve(config) done.resolve(config)
break break
default: default:
plugins.beautylog.error(`mode not recognised!`) plugins.beautylog.error(`mode not recognised! Can be default or custom`)
process.exit(1) process.exit(1)
}; }
// handle default mode // handle default mode
if (config.mode === 'default') { if (config.mode === 'default' || config.mode === 'merge') {
config.ts = { config.ts = {
'./ts/**/*.ts': './dist/' './ts/**/*.ts': './dist/'
} }
config.testTs = { config.testTs = {
'./test/**/*.ts': './test/' './test/**/*.ts': './test/'
} }
}; }
// mix with commandline // mix with commandline
if (config.argv.notest) { if (config.argv.notest) {
config.test = false config.test = false
}; }
if (config.argv.nocoverage) {
config.coverage = false
}
if (config.argv.nochecks) {
config.checkDependencies = false
}
if (config.argv.watch) { if (config.argv.watch) {
config.watch = true 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

@ -8,13 +8,13 @@ import * as projectinfo from 'projectinfo'
import * as path from 'path' import * as path from 'path'
import * as smartanalytics from 'smartanalytics' import * as smartanalytics from 'smartanalytics'
import * as smartcli from 'smartcli' import * as smartcli from 'smartcli'
import * as smarterror from 'smarterror'
import * as smartfile from 'smartfile' import * as smartfile from 'smartfile'
import * as smartpath from 'smartpath' import * as smartpath from 'smartpath'
import * as smartstream from 'smartstream' import * as smartstream from 'smartstream'
import * as smartstring from 'smartstring' import * as smartstring from 'smartstring'
import * as smartsystem from 'smartsystem' import * as smartsystem from 'smartsystem'
import * as through2 from 'through2' import * as through2 from 'through2'
export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing
export { export {
beautylog, beautylog,
@ -25,6 +25,7 @@ export {
path, path,
smartanalytics, smartanalytics,
smartcli, smartcli,
smarterror,
smartfile, smartfile,
smartpath, smartpath,
smartstream, smartstream,

967
yarn.lock

File diff suppressed because it is too large Load Diff