Compare commits

...

104 Commits

Author SHA1 Message Date
5de4646453 8.0.24 2017-10-07 13:55:12 +02:00
44e9fcc977 update dependencies 2017-10-07 13:55:06 +02:00
784aec1ec3 8.0.23 2017-10-05 14:58:52 +02:00
61b7bbb168 change lib inclusion for tests 2017-10-05 14:58:49 +02:00
1d662ddef4 8.0.22 2017-09-23 00:00:27 +02:00
f7351c914e update dependencies 2017-09-23 00:00:25 +02:00
7132ae11a8 fix ci 2017-09-13 17:48:15 +02:00
b195b8911b switch position of mirror 2017-09-13 17:47:30 +02:00
e331e870d9 8.0.21 2017-09-13 17:44:34 +02:00
3a6bd3b583 now working when npms.io is down 2017-09-13 17:44:31 +02:00
594bccfc82 8.0.20 2017-09-11 14:30:36 +02:00
d9f1d36d14 update dependencies 2017-09-11 14:30:32 +02:00
f12c4aabd8 8.0.19 2017-09-08 18:04:44 +02:00
b62f7d8b31 update tracking domains 2017-09-08 18:04:40 +02:00
56cccb1b14 8.0.18 2017-09-08 15:13:29 +02:00
850df45d7f add mirror stage 2017-09-08 15:13:27 +02:00
2b1f371d8a 8.0.17 2017-09-06 15:59:40 +02:00
8196ca50a7 update readme 2017-09-06 15:59:27 +02:00
ad96661dda update structure docs 2017-09-06 15:52:46 +02:00
2fc6c3d358 8.0.16 2017-09-05 18:48:16 +02:00
0c74fb3343 update docs 2017-09-05 18:48:12 +02:00
d821a2efa6 update indention 2017-08-31 20:48:30 +02:00
66f2321d99 8.0.15 2017-08-29 16:17:52 +02:00
816f4f57fb update ci 2017-08-29 16:17:46 +02:00
9bdf3ec4c7 8.0.14 2017-08-29 16:15:27 +02:00
b9d4953bcd update analytics 2017-08-29 16:15:24 +02:00
8c0fcdf5b7 8.0.13 2017-08-20 00:48:35 +02:00
a477cc00e7 update dependencies 2017-08-20 00:48:21 +02:00
00b9a742ab 8.0.12 2017-08-19 12:39:29 +02:00
f5b8ab84cf update dependencies 2017-08-19 12:39:25 +02:00
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
28 changed files with 1477 additions and 763 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.nogit/
node_modules/ node_modules/
test/ test/
pages/ pages/

View File

@ -7,15 +7,26 @@ cache:
key: "$CI_BUILD_STAGE" key: "$CI_BUILD_STAGE"
stages: stages:
- mirror
- test - test
- release - release
- trigger - trigger
- pages - pages
mirror:
image: hosttoday/ht-docker-node:npmci
stage: mirror
script:
- npmci git mirror
tags:
- docker
testLEGACY: testLEGACY:
stage: test stage: test
script: script:
- npmci test legacy - npmci node install legacy
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
@ -24,7 +35,9 @@ testLEGACY:
testLTS: testLTS:
stage: test stage: test
script: script:
- npmci test lts - npmci node install lts
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
@ -32,7 +45,9 @@ testLTS:
testSTABLE: testSTABLE:
stage: test stage: test
script: script:
- npmci test stable - npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
@ -40,7 +55,8 @@ testSTABLE:
release: release:
stage: release stage: release
script: script:
- npmci publish - npmci npm prepare
- npmci npm publish
only: only:
- tags - tags
tags: tags:

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,3 +1,4 @@
import { ProjectinfoNpm } from 'projectinfo'; import { ProjectinfoNpm } from 'projectinfo';
import { INpmtsConfig } from '../npmts.config';
export declare let projectInfo: ProjectinfoNpm; 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"; "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 }); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq"); const q = require("smartq");
const projectinfo_1 = require("projectinfo"); const projectinfo_1 = require("projectinfo");
@ -107,14 +115,17 @@ let checkNodeVersion = (configArg) => {
done.resolve(configArg); done.resolve(configArg);
return done.promise; return done.promise;
}; };
exports.run = (configArg) => { exports.run = (configArg) => __awaiter(this, void 0, void 0, function* () {
let done = q.defer();
plugins.beautylog.ora.text('Check Module: ...'); plugins.beautylog.ora.text('Check Module: ...');
checkProjectTypings(configArg) if (configArg.checkDependencies) {
.then(checkDependencies) configArg = yield checkProjectTypings(configArg);
.then(checkDevDependencies) configArg = yield checkDependencies(configArg);
.then(checkNodeVersion) configArg = yield checkDevDependencies(configArg);
.then(done.resolve) configArg = yield checkNodeVersion(configArg);
.catch((err) => { console.log(err); }); return configArg;
return done.promise; }
}; else {
configArg = yield checkProjectTypings(configArg);
return configArg;
}
});

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!');

47
dist/mod02/index.js vendored
View File

@ -14,6 +14,15 @@ 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");
const q = require("smartq"); const q = require("smartq");
let testTypeScriptConfig = {
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [
'DOM',
'ESNext'
]
};
/** /**
* runs mocha * runs mocha
* @returns INpmtsConfig * @returns INpmtsConfig
@ -24,22 +33,15 @@ 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([
plugins.smartgulp.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(testTypeScriptConfig),
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
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(), npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]); ]);
@ -48,12 +50,9 @@ let tap = function (configArg) {
*/ */
let testFilesSmartstream = new plugins.smartstream.Smartstream([ let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]), plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpTypeScript({ plugins.gulpSourcemaps.init(),
target: 'ES5', plugins.gulpTypeScript(testTypeScriptConfig),
emitDecoratorMetadata: true, plugins.gulpSourcemaps.write(),
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
npmtsTapBuffer.pipeTestFiles(), npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]); ]);
@ -107,11 +106,19 @@ 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:');
tap(config) if (configArg.testConfig.coverage) {
.then(handleCoverageData) tap(config)
.then(() => { .then(handleCoverageData)
done.resolve(config); .then(() => {
}).catch(err => { console.log(err); }); done.resolve(config);
}).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();

39
dist/npmts.cli.js vendored
View File

@ -1,4 +1,12 @@
"use strict"; "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 }); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq"); const q = require("smartq");
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
@ -15,18 +23,35 @@ const NpmtsShip = require("./npmts.ship");
* Since yarn is out and there is heavy caching going on, * Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore * 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. * 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. * It is just an https call to our own Lossless Analytics API.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html * Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/ */
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts', 'UA-64087619-5'); let npmtsAnalytics = new plugins.smartanalytics.Analytics({
npmtsAnalytics.sendEvent('npm', 'exec', 'git.zone'); apiEndPoint: 'https://pubapi.lossless.one/analytics',
exports.run = () => { projectId: 'gitzone',
appName: 'npmts'
});
process.nextTick(() => __awaiter(this, void 0, void 0, function* () {
// make the analytics call
npmtsAnalytics.recordEvent('npmToolExecution', {
executionMode: (yield NpmtsConfig.configPromise).mode,
tsOptions: (yield NpmtsConfig.configPromise).tsOptions,
watch: (yield NpmtsConfig.configPromise).watch,
coverageTreshold: (yield NpmtsConfig.configPromise).coverageTreshold
}).catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...');
});
}));
exports.run = () => __awaiter(this, void 0, void 0, function* () {
let done = q.defer(); let done = q.defer();
plugins.beautylog.figletSync('NPMTS');
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot); 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(); let npmtsCli = new plugins.smartcli.Smartcli();
npmtsCli.standardTask() npmtsCli.standardTask()
.then((argvArg) => { .then((argvArg) => {
plugins.beautylog.figletSync('NPMTS');
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version); plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
return NpmtsConfig.run(argvArg); return NpmtsConfig.run(argvArg);
}) })
@ -68,5 +93,5 @@ exports.run = () => {
} }); } });
npmtsCli.addVersion(npmtsProjectInfo.version); npmtsCli.addVersion(npmtsProjectInfo.version);
npmtsCli.startParse(); npmtsCli.startParse();
return done.promise; return yield done.promise;
}; });

View File

@ -1,10 +1,19 @@
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 { export interface INpmtsConfig {
argv: any; argv: any;
coverageTreshold: number; coverageTreshold: number;
checkDependencies: boolean;
mode: npmtsMode; mode: npmtsMode;
test: boolean; test: boolean;
testTs: any; testTs: any;
testConfig: ITapbufferConfig;
ts: any; ts: any;
tsOptions: any; tsOptions: any;
watch: boolean; watch: boolean;
@ -14,3 +23,4 @@ export interface INpmtsConfig {
}; };
} }
export declare let run: (argvArg: any) => Promise<{}>; export declare let run: (argvArg: any) => Promise<{}>;
export declare let configPromise: Promise<INpmtsConfig>;

29
dist/npmts.config.js vendored
View File

@ -2,16 +2,20 @@
Object.defineProperty(exports, "__esModule", { value: true }); 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 smartq = require("smartq");
;
exports.run = function (argvArg) { exports.run = function (argvArg) {
let done = q.defer(); let done = smartq.defer();
let defaultConfig = { let defaultConfig = {
argv: undefined, argv: undefined,
coverageTreshold: 70, coverageTreshold: 70,
checkDependencies: true,
mode: 'default', mode: 'default',
test: true, test: true,
testTs: {}, testTs: {},
testConfig: {
parallel: true,
coverage: 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,17 +48,24 @@ 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.testConfig.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);
configDeferred.resolve(config);
return done.promise; return done.promise;
}; };
// config deferred usage
let configDeferred = smartq.defer();
exports.configPromise = configDeferred.promise;

View File

@ -7,11 +7,12 @@ 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 smartupdate from 'smartupdate';
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, smartupdate, 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");
@ -27,6 +29,7 @@ const smartstring = require("smartstring");
exports.smartstring = smartstring; exports.smartstring = smartstring;
const smartsystem = require("smartsystem"); const smartsystem = require("smartsystem");
exports.smartsystem = smartsystem; exports.smartsystem = smartsystem;
const smartupdate = require("smartupdate");
exports.smartupdate = smartupdate;
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

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

@ -39,11 +39,12 @@ with default behaviour.
| key | default value | description | | 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 | | `"test"` | `true` | test your module |
| `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions | | `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions |
| `"tsOptions"` | `{"target":"ES5", "declaration":"true"}` | specify options for tsc | | `"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 ### TypeScript
by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to

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,8 +1,9 @@
--- ---
name: Start name: Index
description: best practice npm TypeScript modules
--- ---
# npmts # npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6. best practice npm TypeScript modules
## Availabililty ## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts) [![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
@ -14,13 +15,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.

26
docs/structure.md Normal file
View File

@ -0,0 +1,26 @@
---
name: npmts project structure
description: how npmts projects are structured
---
# npmts - Project Structure
**locally**
```text
projectroot
|- .nogit/ # contains files that should not be checked into git - NOgit
|- dist/ # contains compiled js files and their corresponding typings - git
|- node_modules/ # contains the installed node modules - NOgit
|- test/ # contains the test files - git
|- ts/ # contains the source TypeScript files - git
|
|- .gitignore # the normal gitignore file
|- .gitlab-ci.yml # the gitlab ci yml file
|- npmextra.json # npmextra.json
|- package.json # the standard npm module package.json file
|- readme.md # the standard project readme
|- tslint.json # the standard tslint.json for TypeScript
|- yarn.lock # yarn.lock - the standard yarn.lock file
```
**in git**

View File

@ -1,7 +1,7 @@
{ {
"name": "npmts", "name": "npmts",
"version": "7.0.17", "version": "8.0.24",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.", "description": "best practice npm TypeScript modules",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {
"npmts": "assets/cliNpmts.js" "npmts": "assets/cliNpmts.js"
@ -34,35 +34,36 @@
}, },
"homepage": "https://gitlab.com/gitzone/npmts#readme", "homepage": "https://gitlab.com/gitzone/npmts#readme",
"dependencies": { "dependencies": {
"@types/gulp-sourcemaps": "0.0.30", "@types/gulp-sourcemaps": "0.0.31",
"@types/minimatch": "^2.0.29", "@types/minimatch": "^3.0.1",
"@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-function": "^2.2.9", "gulp-function": "^2.2.9",
"gulp-sourcemaps": "^2.6.0", "gulp-sourcemaps": "^2.6.1",
"gulp-typescript": "^3.1.6", "gulp-typescript": "^3.2.2",
"lodash": "^4.17.4", "lodash": "^4.17.4",
"npmextra": "^2.0.5", "npmextra": "^2.0.9",
"projectinfo": "^3.0.2", "projectinfo": "^3.0.4",
"smartanalytics": "^1.0.6", "smartanalytics": "^2.0.9",
"smartchok": "^1.0.8", "smartchok": "^1.0.11",
"smartcli": "^2.0.6", "smartcli": "^2.0.7",
"smartcov": "^1.0.2", "smartcov": "^1.0.2",
"smartfile": "^4.2.7", "smarterror": "^1.0.3",
"smartgulp": "^1.0.5", "smartfile": "^4.2.26",
"smartgulp": "^1.0.6",
"smartpath": "^3.2.8", "smartpath": "^3.2.8",
"smartq": "^1.1.1", "smartq": "^1.1.6",
"smartstream": "^1.0.8", "smartstream": "^1.0.10",
"smartstring": "^2.0.24", "smartstring": "^2.0.24",
"smartsystem": "^1.0.12", "smartsystem": "^2.0.2",
"source-map-support": "^0.4.15", "smartupdate": "^1.0.13",
"tapbuffer": "^1.0.11", "tapbuffer": "^1.0.29",
"through2": "^2.0.3", "through2": "^2.0.3",
"tsn": "^2.0.15", "tsn": "^2.0.15",
"typescript": "^2.3.2", "typescript": "^2.5.3",
"typings-global": "^1.0.16" "typings-global": "^1.0.20"
}, },
"devDependencies": {} "devDependencies": {}
} }

View File

@ -1,5 +1,5 @@
# npmts # npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6. best practice npm TypeScript modules
## Availabililty ## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts) [![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
@ -18,6 +18,9 @@ Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
[![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.
@ -30,9 +33,14 @@ npmts will
For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer). 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: 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/)
## 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. For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)

View File

@ -8,7 +8,7 @@ early.start('NPMTS')
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins'
import * as cli from './npmts.cli' import * as cli from './npmts.cli'
early.stop() early.stop()
.then(() => { .then(() => {
let loaded = plugins // to make sure plugins get actually loaded let loaded = plugins // to make sure plugins get actually loaded
cli.run() cli.run()
}) })

View File

@ -1,14 +1,17 @@
import * as q from 'smartq' import * as q from 'smartq'
import { ProjectinfoNpm } from 'projectinfo' import { ProjectinfoNpm } from 'projectinfo'
// interfaces
import { INpmtsConfig } from '../npmts.config'
import * as paths from '../npmts.paths' import * as paths from '../npmts.paths'
import * as plugins from './mod00.plugins' import * as plugins from './mod00.plugins'
export let projectInfo: ProjectinfoNpm export let projectInfo: ProjectinfoNpm
let checkProjectTypings = (configArg) => { let checkProjectTypings = (configArg: INpmtsConfig) => {
let done = q.defer() let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('Check Module: Check Project Typings...') plugins.beautylog.ora.text('Check Module: Check Project Typings...')
projectInfo = new ProjectinfoNpm(paths.cwd) projectInfo = new ProjectinfoNpm(paths.cwd)
if (typeof projectInfo.packageJson.typings === 'undefined') { if (typeof projectInfo.packageJson.typings === 'undefined') {
@ -34,8 +37,8 @@ const depcheckOptions = {
] ]
} }
let checkDependencies = (configArg) => { let checkDependencies = (configArg: INpmtsConfig) => {
let done = q.defer() let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('Check Module: Check Dependencies...') plugins.beautylog.ora.text('Check Module: Check Dependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored ignoreDirs: [ // folder with these names will be ignored
@ -70,8 +73,8 @@ let checkDependencies = (configArg) => {
return done.promise return done.promise
} }
let checkDevDependencies = (configArg) => { let checkDevDependencies = (configArg: INpmtsConfig) => {
let done = q.defer() let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('Check Module: Check devDependencies...') plugins.beautylog.ora.text('Check Module: Check devDependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored ignoreDirs: [ // folder with these names will be ignored
@ -106,21 +109,24 @@ let checkDevDependencies = (configArg) => {
return done.promise return done.promise
} }
let checkNodeVersion = (configArg) => { let checkNodeVersion = (configArg: INpmtsConfig) => {
let done = q.defer() let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('checking node version') plugins.beautylog.ora.text('checking node version')
done.resolve(configArg) done.resolve(configArg)
return done.promise return done.promise
} }
export let run = (configArg) => { export let run = async (configArg: INpmtsConfig) => {
let done = q.defer()
plugins.beautylog.ora.text('Check Module: ...') plugins.beautylog.ora.text('Check Module: ...')
checkProjectTypings(configArg)
.then(checkDependencies) if (configArg.checkDependencies) {
.then(checkDevDependencies) configArg = await checkProjectTypings(configArg)
.then(checkNodeVersion) configArg = await checkDependencies(configArg)
.then(done.resolve) configArg = await checkDevDependencies(configArg)
.catch((err) => { console.log(err) }) configArg = await checkNodeVersion(configArg)
return done.promise return configArg
} else {
configArg = await checkProjectTypings(configArg)
return configArg
}
} }

View File

@ -7,39 +7,26 @@ import plugins = require('./mod00.plugins')
* removes the dist directory which will be entirely rebuild * removes the dist directory which will be entirely rebuild
*/ */
let removeDist = function () { 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
*/ */
let removePages = function () { let removePages = function () {
plugins.beautylog.ora.text('cleaning pages folder') plugins.beautylog.ora.text('cleaning pages folder')
return plugins.smartfile.fs.remove(paths.pagesDir) return plugins.smartfile.fs.remove(paths.pagesDir)
} }
export let run = function (configArg) { 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!') done.resolve(configArg)
done.resolve(configArg) })
}) return done.promise
return done.promise
} }

View File

@ -6,7 +6,19 @@ import paths = require('../npmts.paths')
import * as q from 'smartq' import * as q from 'smartq'
// interfaces
import { INpmtsConfig } from '../npmts.config' import { INpmtsConfig } from '../npmts.config'
import { Smartfile } from 'smartfile'
let testTypeScriptConfig = {
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [
'DOM',
'ESNext'
]
}
/** /**
* runs mocha * runs mocha
@ -20,22 +32,16 @@ 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([
plugins.smartgulp.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(testTypeScriptConfig),
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpSourcemaps.write(), plugins.gulpSourcemaps.write(),
plugins.gulpFunction.forEach(async file => {
file.path = file.path.replace(paths.tsDir, paths.distDir)
}),
npmtsTapBuffer.pipeTestableFiles(), npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]) ])
@ -45,12 +51,9 @@ let tap = function (configArg: INpmtsConfig) {
*/ */
let testFilesSmartstream = new plugins.smartstream.Smartstream([ let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]), plugins.smartgulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]),
plugins.gulpTypeScript({ plugins.gulpSourcemaps.init(),
target: 'ES5', plugins.gulpTypeScript(testTypeScriptConfig),
emitDecoratorMetadata: true, plugins.gulpSourcemaps.write(),
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
npmtsTapBuffer.pipeTestFiles(), npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]) ])
@ -112,12 +115,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.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) })
}
tap(config)
.then(handleCoverageData)
.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

@ -15,19 +15,38 @@ import * as NpmtsShip from './npmts.ship'
* Since yarn is out and there is heavy caching going on, * Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore * 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. * 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. * It is just an https call to our own Lossless Analytics API.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html * Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/ */
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts','UA-64087619-5') let npmtsAnalytics = new plugins.smartanalytics.Analytics({
npmtsAnalytics.sendEvent('npm','exec','git.zone') apiEndPoint: 'https://pubapi.lossless.one/analytics',
projectId: 'gitzone',
appName: 'npmts'
})
export let run = () => { process.nextTick(async () => {
// make the analytics call
npmtsAnalytics.recordEvent('npmToolExecution', {
executionMode: (await NpmtsConfig.configPromise).mode,
tsOptions: (await NpmtsConfig.configPromise).tsOptions,
watch: (await NpmtsConfig.configPromise).watch,
coverageTreshold: (await NpmtsConfig.configPromise).coverageTreshold
}).catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...')
})
})
export let run = async () => {
let done = q.defer() let done = q.defer()
plugins.beautylog.figletSync('NPMTS')
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot) 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() let npmtsCli = new plugins.smartcli.Smartcli()
npmtsCli.standardTask() npmtsCli.standardTask()
.then((argvArg) => { .then((argvArg) => {
plugins.beautylog.figletSync('NPMTS')
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version) plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version)
return NpmtsConfig.run(argvArg) return NpmtsConfig.run(argvArg)
}) })
@ -68,5 +87,5 @@ export let run = () => {
.catch((err) => { if (err instanceof Error) { console.log(err) } }) .catch((err) => { if (err instanceof Error) { console.log(err) } })
npmtsCli.addVersion(npmtsProjectInfo.version) npmtsCli.addVersion(npmtsProjectInfo.version)
npmtsCli.startParse() npmtsCli.startParse()
return done.promise return await done.promise
} }

View File

@ -1,33 +1,49 @@
import plugins = require('./npmts.plugins') import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths') import paths = require('./npmts.paths')
import * as q from 'smartq' import * as smartq 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 { export interface INpmtsConfig {
argv: any, argv: any
coverageTreshold: number, coverageTreshold: number
mode: npmtsMode, checkDependencies: boolean
test: boolean, mode: npmtsMode
testTs: any, test: boolean
ts: any, testTs: any
tsOptions: any, testConfig: ITapbufferConfig
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 = smartq.defer()
let defaultConfig: INpmtsConfig = { let defaultConfig: INpmtsConfig = {
argv: undefined, argv: undefined,
coverageTreshold: 70, coverageTreshold: 70,
checkDependencies: true,
mode: 'default', mode: 'default',
test: true, test: true,
testTs: {}, testTs: {},
testConfig: {
parallel: true,
coverage: true
},
ts: {}, ts: {},
tsOptions: {}, tsOptions: {},
watch: false, watch: false,
@ -50,33 +66,48 @@ 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.testConfig.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)
configDeferred.resolve(config)
return done.promise return done.promise
} }
// config deferred usage
let configDeferred = smartq.defer<INpmtsConfig>()
export let configPromise = configDeferred.promise

View File

@ -8,13 +8,14 @@ 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 smartupdate from 'smartupdate'
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,10 +26,12 @@ export {
path, path,
smartanalytics, smartanalytics,
smartcli, smartcli,
smarterror,
smartfile, smartfile,
smartpath, smartpath,
smartstream, smartstream,
smartstring, smartstring,
smartsystem, smartsystem,
smartupdate,
through2 through2
} }

View File

@ -8,27 +8,27 @@ import { INpmtsConfig } from './npmts.config'
let npmtsSmartchok: smartchok.Smartchok = null let npmtsSmartchok: smartchok.Smartchok = null
export let run = (configArg: INpmtsConfig) => { export let run = (configArg: INpmtsConfig) => {
let done = q.defer() let done = q.defer()
if (configArg.watch && npmtsSmartchok === null) { if (configArg.watch && npmtsSmartchok === null) {
let pathsToWatch: string[] = [] let pathsToWatch: string[] = []
for (let key in configArg.ts) { for (let key in configArg.ts) {
pathsToWatch.push(key) pathsToWatch.push(key)
}
for (let key in configArg.testTs) {
pathsToWatch.push(key)
}
npmtsSmartchok = new smartchok.Smartchok(pathsToWatch)
npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => {
plugins.beautylog.info('now watching...')
changeObservableArg.subscribe(() => {
cli.run()
})
})
npmtsSmartchok.start()
done.resolve(configArg)
} else {
plugins.beautylog.info('not watching')
done.resolve(configArg)
} }
return done.promise for (let key in configArg.testTs) {
pathsToWatch.push(key)
}
npmtsSmartchok = new smartchok.Smartchok(pathsToWatch)
npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => {
plugins.beautylog.info('now watching...')
changeObservableArg.subscribe(() => {
cli.run()
})
})
npmtsSmartchok.start()
done.resolve(configArg)
} else {
plugins.beautylog.info('not watching')
done.resolve(configArg)
}
return done.promise
} }

1590
yarn.lock

File diff suppressed because it is too large Load Diff