Compare commits

...

108 Commits

Author SHA1 Message Date
4fc4efc0b9 8.0.11 2017-08-18 13:15:41 +02:00
30136f01a8 update dependencies 2017-08-18 13:15:38 +02:00
d1d85819d7 8.0.10 2017-08-17 12:06:12 +02:00
e267fce3bb update dependencies 2017-08-17 12:06:08 +02:00
f964b2737f 8.0.9 2017-08-16 23:53:56 +02:00
6ac634e178 improve update logs 2017-08-16 23:53:52 +02:00
3105f8f401 8.0.8 2017-08-16 23:46:26 +02:00
70b83fcafc fix smartupdate execution 2017-08-16 23:46:20 +02:00
7e8e4b1891 8.0.7 2017-08-16 23:33:48 +02:00
aa8279c281 update dependencies 2017-08-16 23:33:39 +02:00
7564e1fd18 8.0.6 2017-08-16 19:13:14 +02:00
a6fbe7da33 update 2017-08-16 19:13:01 +02:00
e0f208ba41 8.0.5 2017-08-02 13:20:05 +02:00
d2cf4346d4 update dependencies 2017-08-02 13:20:01 +02:00
b769dcae4f 8.0.4 2017-07-31 15:43:36 +02:00
7b58535dda update to latest version of smartsystem 2017-07-31 15:43:31 +02:00
f16103a632 8.0.3 2017-07-31 14:43:56 +02:00
befed099c5 update highlighting 2017-07-31 14:43:50 +02:00
6c0fa380a9 remove old Changelog 2017-07-31 14:39:46 +02:00
22de2c784f 8.0.2 2017-07-31 14:36:38 +02:00
e8fe4f1720 update docs and description 2017-07-31 14:36:33 +02:00
d7443bbf17 8.0.1 2017-07-30 22:39:55 +02:00
c4668bc0a6 add docs 2017-07-30 22:39:42 +02:00
bc489b6bf3 8.0.0 2017-07-30 22:27:59 +02:00
e2d0a7a939 update to more favorable testfile loading approach 2017-07-30 22:27:51 +02:00
0f5e451e60 7.2.10 2017-07-28 17:33:31 +02:00
3595bf3590 fix module testimport recognition 2017-07-28 17:33:28 +02:00
efe73d0fd0 7.2.9 2017-07-28 17:16:17 +02:00
c52322ec12 add smart replacer 2017-07-28 17:16:14 +02:00
b7cf9949bf update docs 2017-07-28 01:27:21 +02:00
beac49d5d2 7.2.8 2017-07-28 01:21:41 +02:00
25993bd66f update --nocoverage option 2017-07-28 01:21:37 +02:00
83b324054a 7.2.7 2017-07-23 15:15:26 +02:00
2c574fe015 update readme 2017-07-23 15:15:19 +02:00
3b50365ea9 7.2.6 2017-07-23 15:06:47 +02:00
e6f487eeee update readme 2017-07-23 15:06:43 +02:00
07c100ae44 7.2.5 2017-07-23 15:03:40 +02:00
55888cce89 now supports propper tracing of sourcemaps for coverage 2017-07-23 15:03:36 +02:00
d4c66af0d8 7.2.4 2017-07-20 17:51:44 +02:00
9359b5f7e9 update dependencies 2017-07-20 17:51:41 +02:00
87c0ec5728 7.2.3 2017-07-19 16:04:14 +02:00
aeb79f053f update dependencies 2017-07-19 16:04:09 +02:00
e01ecb9369 7.2.2 2017-07-18 15:13:18 +02:00
fd29434fa6 update dependencies 2017-07-18 15:13:14 +02:00
4684b9616c 7.2.1 2017-07-18 14:54:16 +02:00
a2701bc3be upgrade dependencies 2017-07-18 14:54:06 +02:00
425a86b33c 7.2.0 2017-07-18 14:41:55 +02:00
20631eb0a8 support SHELL PATH distributions in tests 2017-07-18 14:41:49 +02:00
27287d24fb 7.1.9 2017-06-30 18:55:16 +02:00
1b2393c7ed update to latest dependencies 2017-06-30 18:55:14 +02:00
330b0527c5 update to latest dependencies 2017-06-30 17:49:08 +02:00
4485b5bfc6 7.1.8 2017-06-23 16:40:02 +02:00
cf6f636d3e Merge branch 'master' of gitlab.com:gitzone/npmts 2017-06-23 16:39:27 +02:00
37e726a45f 7.1.7 2017-06-23 16:39:04 +02:00
0f0f2dd4ed Fix --nochecks option
See merge request !6
2017-06-21 18:54:29 +00:00
9033eede2c Fix --nochecks option 2017-06-21 18:54:28 +00:00
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
ee36914a42 7.0.15 2017-05-01 20:35:27 +02:00
7dc6cdb250 intermediate fix untel figuring out pathing problems with smartgulp 2017-05-01 20:35:24 +02:00
3ea6585992 7.0.14 2017-04-30 18:22:37 +02:00
0f0592cdaf replace gulp 2017-04-30 18:22:34 +02:00
cf438ae431 7.0.13 2017-04-22 13:00:05 +02:00
6cbf7cedc8 update dependencies 2017-04-22 13:00:02 +02:00
77bba7f865 7.0.12 2017-04-21 19:07:07 +02:00
49fc7e4687 update docs 2017-04-21 19:06:22 +02:00
7ee0c349e3 7.0.11 2017-04-21 13:35:24 +02:00
f706376e48 update to latest dependencies 2017-04-21 13:35:21 +02:00
8d8cdde15d 7.0.10 2017-04-21 00:38:36 +02:00
dc98d893b1 update dependencies 2017-04-21 00:38:32 +02:00
6070249cd2 7.0.9 2017-04-21 00:17:01 +02:00
05ce3e133d update to latest standards 2017-04-21 00:16:57 +02:00
5f5a421453 Merge branch 'master' of gitlab.com:gitzone/npmts 2017-04-21 00:16:24 +02:00
d5d0052ecf 7.0.8 2017-04-17 23:23:54 +02:00
9caa301f40 cli now sets environment variable 2017-04-17 23:23:48 +02:00
5fb2f3a81f 7.0.7 2017-04-17 15:04:04 +02:00
873c7af7a4 update smartanalytics id 2017-04-17 15:03:59 +02:00
5e82218d92 7.0.6 2017-04-17 14:55:44 +02:00
354b1b1bf7 add privacy policy to TypeScript files 2017-04-17 14:55:35 +02:00
467670863a Update README.md capitalization to all lower case. 2017-04-03 20:37:43 +00:00
07195d207d 7.0.5 2017-04-01 21:03:55 +02:00
b60bb25b0f update ci 2017-04-01 21:02:47 +02:00
a7af34622b 7.0.4 2017-04-01 20:58:27 +02:00
9c58be69bf update docs 2017-04-01 20:58:23 +02:00
1681fc729d 7.0.3 2017-03-31 19:18:21 +02:00
50e2895ad9 fix #17, now computing coverage result correctly 2017-03-31 19:18:18 +02:00
95ba650a14 update pages job 2017-03-31 17:02:19 +02:00
40 changed files with 1852 additions and 1603 deletions

View File

@ -1,6 +1,11 @@
# standard ci
# gitzone standard
image: hosttoday/ht-docker-node:npmci
cache:
paths:
- .yarn/
key: "$CI_BUILD_STAGE"
stages:
- test
- release
@ -11,6 +16,7 @@ testLEGACY:
stage: test
script:
- npmci test legacy
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
allow_failure: true
@ -19,6 +25,7 @@ testLTS:
stage: test
script:
- npmci test lts
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
@ -26,6 +33,7 @@ testSTABLE:
stage: test
script:
- npmci test stable
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
@ -48,10 +56,13 @@ trigger:
- docker
pages:
image: hosttoday/ht-docker-node:npmpage
image: hosttoday/ht-docker-node:npmci
stage: pages
script:
- npmci command yarn global add npmpage
- npmci command npmpage --publish gitlab
tags:
- docker
only:
- tags
artifacts:

View File

@ -1,11 +0,0 @@
Please view this file on the master branch, on stable branches it's out of date.
v 6.0.0 (released)
- remove TypeDoc, please look at npmpage
- check package.json
v 7.0.0
- switch from mocha to tap
- run tests in SubProcesses with coverage
- improve ES6 handling
- add smartanalytics

View File

@ -1,2 +1,3 @@
#!/usr/bin/env node
process.env.CLI_CALL = 'true'
var index = require("../{{pathToIndex}}");

2
dist/index.js vendored
View File

@ -1,8 +1,8 @@
"use strict";
/* ================================================== *
**** NPMTS ****
Fabulous TypeScript development
* ================================================== */
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const early = require("early");
early.start('NPMTS');

View File

@ -7,7 +7,7 @@ const mod00_check_1 = require("../mod00/mod00.check");
exports.run = function (configArg) {
let done = q.defer();
let config = configArg;
plugins.beautylog.ora.text('now looking at ' + 'required assets'.yellow);
plugins.beautylog.ora.text('now looking at ' + 'required assets');
if (config.cli === true) {
let mainJsPath = mod00_check_1.projectInfo.packageJson.main;
let cliJsString = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'));

View File

@ -1,3 +1,4 @@
import { ProjectinfoNpm } from 'projectinfo';
import { INpmtsConfig } from '../npmts.config';
export declare let projectInfo: ProjectinfoNpm;
export declare let run: (configArg: any) => Promise<{}>;
export declare let run: (configArg: INpmtsConfig) => Promise<INpmtsConfig>;

View File

@ -1,4 +1,12 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const projectinfo_1 = require("projectinfo");
@ -56,11 +64,11 @@ let checkDependencies = (configArg) => {
process.exit(1);
}
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}`);
}
;
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}`);
}
done.resolve(configArg);
});
@ -82,20 +90,20 @@ let checkDevDependencies = (configArg) => {
});
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item.red}`);
plugins.beautylog.log(`unused devDependency ${item}`);
}
for (let item in unused.missing) {
plugins.beautylog.error(`unused devDependency ${item.red}`);
plugins.beautylog.error(`missing devDependency ${item}`);
}
if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json');
process.exit(1);
}
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}`);
}
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}`);
}
done.resolve(configArg);
});
@ -107,14 +115,17 @@ let checkNodeVersion = (configArg) => {
done.resolve(configArg);
return done.promise;
};
exports.run = (configArg) => {
let done = q.defer();
exports.run = (configArg) => __awaiter(this, void 0, void 0, function* () {
plugins.beautylog.ora.text('Check Module: ...');
checkProjectTypings(configArg)
.then(checkDependencies)
.then(checkDevDependencies)
.then(checkNodeVersion)
.then(done.resolve)
.catch((err) => { console.log(err); });
return done.promise;
};
if (configArg.checkDependencies) {
configArg = yield checkProjectTypings(configArg);
configArg = yield checkDependencies(configArg);
configArg = yield checkDevDependencies(configArg);
configArg = yield checkNodeVersion(configArg);
return configArg;
}
else {
configArg = yield checkProjectTypings(configArg);
return configArg;
}
});

View File

@ -10,17 +10,6 @@ let removeDist = function () {
plugins.beautylog.ora.text('cleaning dist folder');
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
*/
@ -32,7 +21,6 @@ exports.run = function (configArg) {
plugins.beautylog.ora.text('cleaning up from previous builds...');
let done = q.defer();
removeDist()
.then(removeTestDeclarations)
.then(removePages)
.then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!');

View File

@ -6,7 +6,7 @@ const plugins = require("./mod00.plugins");
exports.run = function (configArg) {
let done = q.defer();
let config = configArg;
plugins.beautylog.ora.text('now compiling ' + 'TypeScript'.yellow);
plugins.beautylog.ora.text('now compiling ' + 'TypeScript');
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => {
plugins.beautylog.ok(`compiled the module's TypeScript!`);

41
dist/mod02/index.js vendored
View File

@ -24,11 +24,12 @@ let tap = function (configArg) {
* the TabBuffer for npmts
*/
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer();
npmtsTapBuffer.setConfig(configArg.testConfig);
/**
* handle the testable files
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.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',
@ -37,9 +38,6 @@ let tap = function (configArg) {
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
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()
]);
@ -47,13 +45,15 @@ let tap = function (configArg) {
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()
]);
@ -62,7 +62,7 @@ let tap = function (configArg) {
testableFilesSmartstream.run(),
testFilesSmartstream.run()
]).then(() => __awaiter(this, void 0, void 0, function* () {
yield npmtsTapBuffer.runTests();
configArg.runData.coverageLcovInfo = yield npmtsTapBuffer.runTests();
done.resolve(configArg);
}), (err) => {
plugins.beautylog.error('Tests failed!');
@ -76,15 +76,21 @@ let tap = function (configArg) {
});
return done.promise;
};
let handleCoverageData = function (configArg) {
let done = q.defer();
if (71 >= configArg.coverageTreshold) {
plugins.beautylog.ok(`${(71).toString()}% `
let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function* () {
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) {
plugins.beautylog.ok(`${(coverageResult).toString()}% `
+ `coverage exceeds your treshold of `
+ `${configArg.coverageTreshold.toString()}%`);
}
else {
plugins.beautylog.warn(`${(71).toString()}% `
plugins.beautylog.warn(`${(coverageResult).toString()}% `
+ `coverage fails your treshold of `
+ `${configArg.coverageTreshold.toString()}%`);
plugins.beautylog.error('exiting due to coverage failure');
@ -92,9 +98,8 @@ let handleCoverageData = function (configArg) {
process.exit(1);
}
}
done.resolve(configArg);
return done.promise;
};
return configArg;
});
exports.run = function (configArg) {
let done = q.defer();
let config = configArg;
@ -102,12 +107,20 @@ exports.run = function (configArg) {
plugins.beautylog.ora.text('now starting tests');
plugins.beautylog.ora.end();
plugins.beautylog.log('ready for tapbuffer:');
if (configArg.testConfig.coverage) {
tap(config)
.then(handleCoverageData)
.then(() => {
done.resolve(config);
}).catch(err => { console.log(err); });
}
else {
tap(config)
.then(() => {
done.resolve(config);
}).catch(err => { console.log(err); });
}
}
else {
plugins.beautylog.ora.end();
done.resolve(config);

View File

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

View File

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

34
dist/npmts.cli.js vendored
View File

@ -1,4 +1,12 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const plugins = require("./npmts.plugins");
@ -7,15 +15,29 @@ const NpmtsConfig = require("./npmts.config");
const NpmtsMods = require("./npmts.mods");
const NpmtsWatch = require("./npmts.watch");
const NpmtsShip = require("./npmts.ship");
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts', 'UA-64087619-2');
npmtsAnalytics.sendEvent('npm', 'exec', 'push.rocks');
exports.run = () => {
/**
* smartanalytics
* this data is fully anonymized (no Ips or any other personal information is tracked).
* It just keeps track which of our tools are really used...
* ... so we know where to spend our limited resources for improving them.
* Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore
* Feel free to dig into the smartanalytics package, if you are interested in how it works.
* It is just an https call to Google Analytics.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts', 'UA-64087619-5');
npmtsAnalytics.sendEvent('npm', 'exec', 'git.zone');
exports.run = () => __awaiter(this, void 0, void 0, function* () {
let done = q.defer();
plugins.beautylog.figletSync('NPMTS');
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot);
// check for updates
yield plugins.smartupdate.standardHandler.check('npmts', npmtsProjectInfo.version, 'http://gitzone.gitlab.io/npmts/changelog.html');
plugins.beautylog.log('---------------------------------------------');
let npmtsCli = new plugins.smartcli.Smartcli();
npmtsCli.standardTask()
.then((argvArg) => {
plugins.beautylog.figletSync('NPMTS');
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
return NpmtsConfig.run(argvArg);
})
@ -57,5 +79,5 @@ exports.run = () => {
} });
npmtsCli.addVersion(npmtsProjectInfo.version);
npmtsCli.startParse();
return done.promise;
};
return yield done.promise;
});

View File

@ -1,12 +1,25 @@
export declare type npmtsMode = 'default' | 'custom';
import { ITapbufferConfig } from 'tapbuffer';
/**
* 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 {
argv: any;
coverageTreshold: number;
checkDependencies: boolean;
mode: npmtsMode;
test: boolean;
testTs: any;
testConfig: ITapbufferConfig;
ts: any;
tsOptions: any;
watch: boolean;
runData: {
coverageLcovInfo?: string;
coverageResult?: number;
};
}
export declare let run: (argvArg: any) => Promise<{}>;

24
dist/npmts.config.js vendored
View File

@ -3,18 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmts.plugins");
const paths = require("./npmts.paths");
const q = require("smartq");
;
exports.run = function (argvArg) {
let done = q.defer();
let defaultConfig = {
argv: undefined,
coverageTreshold: 70,
checkDependencies: true,
mode: 'default',
test: true,
testTs: {},
testConfig: {
parallel: true,
coverage: true
},
ts: {},
tsOptions: {},
watch: false
watch: false,
runData: {}
};
// mix with configfile
plugins.beautylog.ora.text('running npmextra');
@ -26,16 +31,16 @@ exports.run = function (argvArg) {
switch (config.mode) {
case 'default':
case 'custom':
case 'merge':
plugins.beautylog.ok('mode is ' + config.mode);
done.resolve(config);
break;
default:
plugins.beautylog.error(`mode not recognised!`);
plugins.beautylog.error(`mode not recognised! Can be default or custom`);
process.exit(1);
}
;
// handle default mode
if (config.mode === 'default') {
if (config.mode === 'default' || config.mode === 'merge') {
config.ts = {
'./ts/**/*.ts': './dist/'
};
@ -43,16 +48,19 @@ exports.run = function (argvArg) {
'./test/**/*.ts': './test/'
};
}
;
// mix with commandline
if (config.argv.notest) {
config.test = false;
}
;
if (config.argv.nocoverage) {
config.testConfig.coverage = false;
}
if (config.argv.nochecks) {
config.checkDependencies = false;
}
if (config.argv.watch) {
config.watch = true;
}
;
plugins.beautylog.ok('build options are ready!');
done.resolve(config);
return done.promise;

View File

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

View File

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

9
docs/00footer.md Normal file
View File

@ -0,0 +1,9 @@
[Legal Info](https://lossless.gmbh)
[Privacy Policy](https://lossless.gmbh/privacy.html)
///
[Git.Zone](https://git.zone)
<span>tools for a seamless dev workflow</span>
[Lossless GmbH](https://push.rocks)
<span>the company behind git.zone and npmts</span>
///

9
docs/changelog.md Normal file
View File

@ -0,0 +1,9 @@
# Changelog
## 2017-07-30: Version 7.x.x -> 8.x.x
Testfiles in ./test/ can now import files directly from the ts dir:
```javascript
// ./test/test.ts
import * as myModule from '../ts/index
```

View File

@ -1,5 +1,8 @@
# Configuration of NPMTS
npmts can be configured to your needs:
---
name: config
---
# Configuration
npmts can be configured to your needs.
### npmextra.json
the npmts section in npmextra.json can be used to configure npmts.
@ -36,11 +39,12 @@ with default behaviour.
| key | default value | description |
| --- | --- | --- |
| `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify |
| `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify, "merge" will merge default options with whatever you specify on your own |
| `"test"` | `true` | test your module |
| `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions |
| `"tsOptions"` | `{"target":"ES5", "declaration":"true"}` | specify options for tsc |
| `"cli"` | "false" | some modules are designed to be used from cli. If set to true NPMTS will create a cli.js that wires you dist files up for cli use. |
| `"cli"` | `"false"` | some modules are designed to be used from cli. If set to true NPMTS will create a cli.js that wires you dist files up for cli use. |
| `"testConfig"` | `{ parallel: true, coverage: true }` | allows you to control test behaviour. `"parallel"` controls wether testfiles are run sequentially or in parallel, and `"coverage` wether to create coverage reports |
### TypeScript
by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to

View File

@ -1,7 +1,11 @@
# Default task execution of npmts
---
name: Default Behaviour
---
# Default Behaviour
when you don't configure it otherwise.
1. **Config:** Check config in ./npmextra.json (Check out [npmextra](https://www.npmjs.com/package/npmextra))
1. **Clean:** Clean up from any previous builds (old js files)
1. **Check:** Check project for typings declaration in package.json, unused dependencies and missing dependencies
1. **Transpile:** Transpile TypeScript with **inline sourcemaps** and **declaration files** to ES target
1. **Test:** Babelify ES6 to ES5 on the fly, instrumentalize ES5 JavaScript with istanbul and run tests with Mocha.
1. **Test:** transpile TypeScript of module to ES5 for tests (so it can be instrumentalized) and pipe it to tapbuffer. All this happens in memory.

View File

@ -1,13 +1,21 @@
# Examples for npmts
---
name: Examples
---
# Examples
modules that use npmts in theis development workflow
## Example Usage in modules:
* [gulp-browser](https://www.npmjs.com/package/gulp-browser)
Module Name | Description
--- | ---
[gitzone](https://www.npmjs.com/package/gitzone) | fast npm module prototyping
[gulp-browser](https://www.npmjs.com/package/gulp-browser) | browserify for gulp
[npmdocker](https://www.npmjs.com/package/npmdocker) | dockerized npm development
[smartcli](https://www.npmjs.com/package/smartcli) | easy cli tool creation
> We will add more options over time.
> There are tons more... We will add them here over time.
## Tips and tricks:
### Tips and tricks:
* Use [npmts-g](https://www.npmjs.com/package/npmts-g) to use globally installed npmts and install npmts locally if no global npmts is available.
* Use [npmpage](https://www.npmjs.com/package/npmpage) to create a webpage from coverage reports and TypeDoc for the module
* Use [hosttoday/ht-docker-node:npmts](https://hub.docker.com/r/hosttoday/ht-docker-node/) for speedy CI builds
* Use [hosttoday/ht-docker-node:npmci](https://hub.docker.com/r/hosttoday/ht-docker-node/) for speedy CI builds
* Use [npmdocker](https://www.npmjs.com/package/npmdocker) for running tests consistently with docker.

38
docs/getstarted.md Normal file
View File

@ -0,0 +1,38 @@
---
name: Get Started
description: learn how to quickly write npm TypeScript modules
---
# Get Started with NPMTS
and learn how to quickly write npm TypeScript modules
## Step1: Install the tools
To use npmts install it using npm or yarn:
```sh
npm install -g npmts # install with npm
yarn global add npmts # install with yarn
```
For the purpose of getting started quickly please also install **gitzone**.
It'll proovide awesome scaffolding for new npmts maintained modules and also updates them later on.
```sh
npm install -g gitzone # install with npm
yarn global add gitzone # install with yarn
```
You can make sure npmts and gitzone are installed correctly by typing `npmts -v && gitzone -v`.
## Scaffold a new module
To scaffold a new module type
```shell
gitzone template npm
```
This will run you through a series of question to get gitzone to know the specifics of your module.
Enter all information accordingly.
## Run NPMTS for the first time

View File

@ -1,44 +1,46 @@
---
name: Index
description: best practice npm TypeScript modules
---
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
best practice npm TypeScript modules
## 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/)
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts)
[![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## 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)
[![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)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![docker pulls](https://img.shields.io/docker/pulls/hosttoday/ht-docker-node.svg)](https://hub.docker.com/r/hosttoday/ht-docker-node/)
[![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)
[![Dependency Status](https://david-dm.org/gitzonetools/npmts.svg)](https://david-dm.org/gitzonetools/npmts)
[![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/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/)
[![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
## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage
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. check your dependencies and package.json (unused, missing, updates, security)
1. transpile your code with tsc,
1. document your code with typedoc,
1. test your code with mocha
1. create coverage with istanbul
1. test your code with tap (supports the fancy stuff like Promises, Generators, async/await, sourcemaps, parallel test execution in child processes)
1. create coverage with istanbul (supports tracing of the originating TypeScript)
For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer).
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/index.html)
2. [Install](https://pushrocks.gitlab.io/npmts/install.html)
3. [Default Behaviour](https://pushrocks.gitlab.io/npmts/default.html)
4. [Configuration](https://pushrocks.gitlab.io/npmts/config.html)
5. [Examples](https://pushrocks.gitlab.io/npmts/examples.html)
6. [Info](https://pushrocks.gitlab.io/npmts/info.html)
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https:/git.zone)

View File

@ -1,14 +0,0 @@
# Info
## Future Scope:
* automatically manage badges in README
* manage tslint to enforce code best practices
* tear down any differences between local and CI environments by using brand new npmdocker
## About the authors:
[![Project Phase](https://mediaserve.lossless.digital/lossless.com/img/createdby_github.svg)](https://lossless.com/)
[![PayPal](https://img.shields.io/badge/Support%20us-PayPal-blue.svg)](https://paypal.me/lossless)
## Legal Info
https://lossless.gmbh

View File

@ -1,5 +1,5 @@
# Install npmts
First install npmts globally, then install the npmts-g locally.
Get started with TypeScript awesomeness.
> **npmts-g* checks if the global version of npmts suffices the modules requirements.
If not it installs npmts locally in the right version during npm install.

View File

@ -1,8 +0,0 @@
# Summary
* [1. Intro](index.md)
* [2. Install](install.md)
* [3. Default Behaviour](default.md)
* [4. Configuration](config.md)
* [5. Examples](examples.md)
* [6. Info](info.md)

View File

@ -1,7 +1,7 @@
{
"name": "npmts",
"version": "7.0.2",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"version": "8.0.11",
"description": "best practice npm TypeScript modules",
"main": "dist/index.js",
"bin": {
"npmts": "assets/cliNpmts.js"
@ -34,37 +34,36 @@
},
"homepage": "https://gitlab.com/gitzone/npmts#readme",
"dependencies": {
"@types/gulp": "^4.0.2",
"@types/gulp-sourcemaps": "0.0.30",
"@types/minimatch": "^2.0.29",
"@types/through2": "^2.0.32",
"beautylog": "6.1.5",
"@types/gulp-sourcemaps": "0.0.31",
"@types/minimatch": "^3.0.0",
"@types/through2": "^2.0.33",
"beautylog": "^6.1.10",
"depcheck": "^0.6.7",
"early": "^2.0.36",
"gulp": "3.9.1",
"gulp-function": "^2.2.3",
"gulp-sourcemaps": "^2.4.1",
"gulp-typescript": "^3.1.6",
"early": "^2.1.1",
"gulp-function": "^2.2.9",
"gulp-sourcemaps": "^2.6.1",
"gulp-typescript": "^3.2.1",
"lodash": "^4.17.4",
"npmextra": "^2.0.5",
"npmextra": "^2.0.9",
"projectinfo": "^3.0.2",
"smartanalytics": "^1.0.3",
"smartchok": "^1.0.5",
"smartcli": "2.0.1",
"smartcov": "1.0.0",
"smartenv": "2.0.0",
"smartfile": "^4.1.9",
"smartanalytics": "^1.0.6",
"smartchok": "^1.0.11",
"smartcli": "^2.0.7",
"smartcov": "^1.0.2",
"smarterror": "^1.0.3",
"smartfile": "^4.2.20",
"smartgulp": "^1.0.6",
"smartpath": "^3.2.8",
"smartq": "^1.1.1",
"smartstream": "^1.0.8",
"smartq": "^1.1.6",
"smartstream": "^1.0.10",
"smartstring": "^2.0.24",
"smartsystem": "^1.0.12",
"source-map-support": "^0.4.14",
"tapbuffer": "^1.0.9",
"smartsystem": "^2.0.2",
"smartupdate": "^1.0.6",
"tapbuffer": "^1.0.29",
"through2": "^2.0.3",
"tsn": "^2.0.15",
"typescript": "^2.2.1",
"typings-global": "^1.0.14"
"typescript": "^2.4.2",
"typings-global": "^1.0.20"
},
"devDependencies": {}
}

View File

@ -1,5 +1,5 @@
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
best practice npm TypeScript modules
## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
@ -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)
[![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)
[![Dependency Status](https://david-dm.org/gitzone/npmts.svg)](https://david-dm.org/gitzone/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/gitzone/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzone/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzone/npmts/badges/code.svg)](https://www.bithound.io/github/gitzone/npmts)
[![Dependency Status](https://david-dm.org/gitzonetools/npmts.svg)](https://david-dm.org/gitzonetools/npmts)
[![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/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/)
[![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/)
## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
@ -30,9 +33,16 @@ npmts will
For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer).
For more information about how to best write tap tests check out the [tapbundle module's linked docs](https://www.npmjs.com/package/tapbundle).
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/)
## Changelog
For breaking changes please see the [changelog](https://gitzone.gitlab.io/npmts/changelog.html).
For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)

View File

@ -8,7 +8,7 @@ import { projectInfo } from '../mod00/mod00.check'
export let run = function(configArg){
let done = q.defer()
let config = configArg
plugins.beautylog.ora.text('now looking at ' + 'required assets'.yellow)
plugins.beautylog.ora.text('now looking at ' + 'required assets')
if (config.cli === true) {
let mainJsPath = projectInfo.packageJson.main
let cliJsString: string = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir,'cli.js'))

View File

@ -1,14 +1,17 @@
import * as q from 'smartq'
import { ProjectinfoNpm } from 'projectinfo'
// interfaces
import { INpmtsConfig } from '../npmts.config'
import * as paths from '../npmts.paths'
import * as plugins from './mod00.plugins'
export let projectInfo: ProjectinfoNpm
let checkProjectTypings = (configArg) => {
let done = q.defer()
let checkProjectTypings = (configArg: INpmtsConfig) => {
let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('Check Module: Check Project Typings...')
projectInfo = new ProjectinfoNpm(paths.cwd)
if (typeof projectInfo.packageJson.typings === 'undefined') {
@ -34,8 +37,8 @@ const depcheckOptions = {
]
}
let checkDependencies = (configArg) => {
let done = q.defer()
let checkDependencies = (configArg: INpmtsConfig) => {
let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('Check Module: Check Dependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored
@ -60,18 +63,18 @@ let checkDependencies = (configArg) => {
process.exit(1)
}
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}`)
};
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}`)
}
done.resolve(configArg)
})
return done.promise
}
let checkDevDependencies = (configArg) => {
let done = q.defer()
let checkDevDependencies = (configArg: INpmtsConfig) => {
let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('Check Module: Check devDependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored
@ -86,41 +89,44 @@ let checkDevDependencies = (configArg) => {
})
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item.red}`)
plugins.beautylog.log(`unused devDependency ${item}`)
}
for (let item in unused.missing) {
plugins.beautylog.error(`unused devDependency ${item.red}`)
plugins.beautylog.error(`missing devDependency ${item}`)
}
if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json')
process.exit(1)
}
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}`)
}
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}`)
}
done.resolve(configArg)
})
return done.promise
}
let checkNodeVersion = (configArg) => {
let done = q.defer()
let checkNodeVersion = (configArg: INpmtsConfig) => {
let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('checking node version')
done.resolve(configArg)
return done.promise
}
export let run = (configArg) => {
let done = q.defer()
export let run = async (configArg: INpmtsConfig) => {
plugins.beautylog.ora.text('Check Module: ...')
checkProjectTypings(configArg)
.then(checkDependencies)
.then(checkDevDependencies)
.then(checkNodeVersion)
.then(done.resolve)
.catch((err) => { console.log(err) })
return done.promise
if (configArg.checkDependencies) {
configArg = await checkProjectTypings(configArg)
configArg = await checkDependencies(configArg)
configArg = await checkDevDependencies(configArg)
configArg = await checkNodeVersion(configArg)
return configArg
} else {
configArg = await checkProjectTypings(configArg)
return configArg
}
}

View File

@ -11,18 +11,6 @@ let removeDist = function () {
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
*/
@ -35,7 +23,6 @@ export let run = function (configArg) {
plugins.beautylog.ora.text('cleaning up from previous builds...')
let done = q.defer()
removeDist()
.then(removeTestDeclarations)
.then(removePages)
.then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!')

View File

@ -7,7 +7,7 @@ import * as plugins from './mod00.plugins'
export let run = function (configArg) {
let done = q.defer()
let config = configArg
plugins.beautylog.ora.text('now compiling ' + 'TypeScript'.yellow)
plugins.beautylog.ora.text('now compiling ' + 'TypeScript')
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => {
plugins.beautylog.ok(`compiled the module's TypeScript!`)

View File

@ -6,7 +6,9 @@ import paths = require('../npmts.paths')
import * as q from 'smartq'
// interfaces
import { INpmtsConfig } from '../npmts.config'
import { Smartfile } from 'smartfile'
/**
* runs mocha
@ -20,11 +22,13 @@ let tap = function (configArg: INpmtsConfig) {
*/
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer()
npmtsTapBuffer.setConfig(configArg.testConfig)
/**
* handle the testable files
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.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',
@ -33,9 +37,6 @@ let tap = function (configArg: INpmtsConfig) {
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpSourcemaps.write(),
plugins.gulpFunction.forEach(async file => {
file.path = file.path.replace(paths.tsDir, paths.distDir)
}),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
])
@ -44,13 +45,15 @@ let tap = function (configArg: INpmtsConfig) {
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]),
plugins.smartgulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()
])
@ -61,7 +64,7 @@ let tap = function (configArg: INpmtsConfig) {
testFilesSmartstream.run()
]).then(
async () => {
await npmtsTapBuffer.runTests()
configArg.runData.coverageLcovInfo = await npmtsTapBuffer.runTests()
done.resolve(configArg)
}, (err) => {
plugins.beautylog.error('Tests failed!')
@ -76,25 +79,33 @@ let tap = function (configArg: INpmtsConfig) {
return done.promise
}
let handleCoverageData = function (configArg: INpmtsConfig) {
let done = q.defer()
if (71 >= configArg.coverageTreshold) {
let handleCoverageData = async (configArg: INpmtsConfig) => {
let coverageResult: number = 0 // the coverage in percent
if (configArg.runData.coverageLcovInfo) {
coverageResult = await 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) {
plugins.beautylog.ok(
`${(71).toString()}% `
`${(coverageResult).toString()}% `
+ `coverage exceeds your treshold of `
+ `${configArg.coverageTreshold.toString()}%`
)
} else {
plugins.beautylog.warn(
`${(71).toString()}% `
`${(coverageResult).toString()}% `
+ `coverage fails your treshold of `
+ `${configArg.coverageTreshold.toString()}%`
)
plugins.beautylog.error('exiting due to coverage failure')
if (!configArg.watch) { process.exit(1) }
}
done.resolve(configArg)
return done.promise
return configArg
}
export let run = function (configArg: INpmtsConfig) {
@ -104,12 +115,19 @@ export let run = function (configArg: INpmtsConfig) {
plugins.beautylog.ora.text('now starting tests')
plugins.beautylog.ora.end()
plugins.beautylog.log('ready for tapbuffer:')
if (configArg.testConfig.coverage) {
tap(config)
.then(handleCoverageData)
.then(() => {
done.resolve(config)
}).catch(err => { console.log(err) })
} else {
tap(config)
.then(() => {
done.resolve(config)
}).catch(err => { console.log(err) })
}
} else {
plugins.beautylog.ora.end()
done.resolve(config)

View File

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

View File

@ -7,16 +7,30 @@ import * as NpmtsMods from './npmts.mods'
import * as NpmtsWatch from './npmts.watch'
import * as NpmtsShip from './npmts.ship'
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts','UA-64087619-2')
npmtsAnalytics.sendEvent('npm','exec','push.rocks')
/**
* smartanalytics
* this data is fully anonymized (no Ips or any other personal information is tracked).
* It just keeps track which of our tools are really used...
* ... so we know where to spend our limited resources for improving them.
* Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore
* Feel free to dig into the smartanalytics package, if you are interested in how it works.
* It is just an https call to Google Analytics.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts','UA-64087619-5')
npmtsAnalytics.sendEvent('npm','exec','git.zone')
export let run = () => {
export let run = async () => {
let done = q.defer()
plugins.beautylog.figletSync('NPMTS')
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot)
// check for updates
await plugins.smartupdate.standardHandler.check('npmts', npmtsProjectInfo.version, 'http://gitzone.gitlab.io/npmts/changelog.html')
plugins.beautylog.log('---------------------------------------------')
let npmtsCli = new plugins.smartcli.Smartcli()
npmtsCli.standardTask()
.then((argvArg) => {
plugins.beautylog.figletSync('NPMTS')
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version)
return NpmtsConfig.run(argvArg)
})
@ -57,5 +71,5 @@ export let run = () => {
.catch((err) => { if (err instanceof Error) { console.log(err) } })
npmtsCli.addVersion(npmtsProjectInfo.version)
npmtsCli.startParse()
return done.promise
return await done.promise
}

View File

@ -3,31 +3,51 @@ import paths = require('./npmts.paths')
import * as q from 'smartq'
export type npmtsMode = 'default' | 'custom'
// interfaces
import { ITapbufferConfig } from 'tapbuffer'
/**
* 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 {
argv: any,
coverageTreshold: number,
mode: npmtsMode,
test: boolean,
testTs: any,
ts: any,
tsOptions: any,
argv: any
coverageTreshold: number
checkDependencies: boolean
mode: npmtsMode
test: boolean
testTs: any
testConfig: ITapbufferConfig
ts: any
tsOptions: any
watch: boolean
};
runData: {
coverageLcovInfo?: string
coverageResult?: number
}
}
export let run = function (argvArg) {
let done = q.defer()
let defaultConfig: INpmtsConfig = {
argv: undefined,
coverageTreshold: 70,
checkDependencies: true,
mode: 'default',
test: true,
testTs: {},
testConfig: {
parallel: true,
coverage: true
},
ts: {},
tsOptions: {},
watch: false
watch: false,
runData: {}
}
// mix with configfile
@ -46,31 +66,41 @@ export let run = function (argvArg) {
switch (config.mode) {
case 'default':
case 'custom':
case 'merge':
plugins.beautylog.ok('mode is ' + config.mode)
done.resolve(config)
break
default:
plugins.beautylog.error(`mode not recognised!`)
plugins.beautylog.error(`mode not recognised! Can be default or custom`)
process.exit(1)
};
}
// handle default mode
if (config.mode === 'default') {
if (config.mode === 'default' || config.mode === 'merge') {
config.ts = {
'./ts/**/*.ts': './dist/'
}
config.testTs = {
'./test/**/*.ts': './test/'
}
};
}
// mix with commandline
if (config.argv.notest) {
config.test = false
};
}
if (config.argv.nocoverage) {
config.testConfig.coverage = false
}
if (config.argv.nochecks) {
config.checkDependencies = false
}
if (config.argv.watch) {
config.watch = true
};
}
plugins.beautylog.ok('build options are ready!')
done.resolve(config)

View File

@ -8,14 +8,14 @@ import * as projectinfo from 'projectinfo'
import * as path from 'path'
import * as smartanalytics from 'smartanalytics'
import * as smartcli from 'smartcli'
import * as smartenv from 'smartenv'
import * as smarterror from 'smarterror'
import * as smartfile from 'smartfile'
import * as smartpath from 'smartpath'
import * as smartstream from 'smartstream'
import * as smartstring from 'smartstring'
import * as smartsystem from 'smartsystem'
import * as smartupdate from 'smartupdate'
import * as through2 from 'through2'
export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing
export {
beautylog,
@ -26,11 +26,12 @@ export {
path,
smartanalytics,
smartcli,
smartenv,
smarterror,
smartfile,
smartpath,
smartstream,
smartstring,
smartsystem,
smartupdate,
through2
}

2457
yarn.lock

File diff suppressed because it is too large Load Diff