Compare commits

...

104 Commits

Author SHA1 Message Date
5722deb7a0 8.0.33 2018-05-03 12:57:29 +02:00
50d71dde67 update ci 2018-05-03 12:56:58 +02:00
13123e180d 8.0.32 2018-05-03 12:45:24 +02:00
b13db4184b update snyk security policy 2018-05-03 12:45:22 +02:00
19f6097ab9 8.0.31 2018-05-03 12:35:48 +02:00
34066d8a13 switch to seperate build/test commands to inrpove speed 2018-05-03 12:35:41 +02:00
df87337f4d 8.0.30 2018-04-09 01:28:46 +02:00
105e5c2ff0 fix npmextra.json 2018-04-09 01:26:14 +02:00
7115b699ba 8.0.29 2018-04-09 01:19:36 +02:00
8c7ac4c1d0 update snyk policy 2018-04-09 01:19:28 +02:00
fc8154b431 8.0.28 2018-04-09 01:03:49 +02:00
896e0095fa change npmts package name to being @gitzone scoped 2018-04-09 01:03:39 +02:00
7e46b55de5 8.0.27 2018-02-26 22:51:06 +01:00
6553e7432c now runs offline 2018-02-26 22:51:03 +01:00
cf4db90aef 8.0.26 2017-11-28 17:34:02 +01:00
8896d3ef76 refactor 2017-11-28 17:33:55 +01:00
c0b7dc2547 8.0.25 2017-11-25 20:57:51 +02:00
d65f19d108 update deps 2017-11-25 20:57:40 +02:00
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
75 changed files with 2989 additions and 1909 deletions

1
.gitignore vendored
View File

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

View File

@ -7,60 +7,85 @@ cache:
key: "$CI_BUILD_STAGE" key: "$CI_BUILD_STAGE"
stages: stages:
- security
- test - test
- release - release
- trigger - trigger
- pages - pages
mirror:
stage: security
script:
- npmci git mirror
tags:
- docker
snyk:
stage: security
script:
- npmci command yarn global add snyk
- npmci command yarn install --ignore-scripts
- npmci command snyk test
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
allow_failure: true allow_failure: true
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
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
release: release:
stage: release stage: release
script: script:
- npmci publish - npmci node install stable
- npmci npm prepare
- npmci npm publish
only: only:
- tags - tags
tags: tags:
- docker - docker
trigger: trigger:
stage: trigger stage: trigger
script: script:
- npmci trigger - npmci trigger
only: only:
- tags - tags
tags: tags:
- docker - docker
pages: pages:
image: hosttoday/ht-docker-node:npmci image: hosttoday/ht-docker-node:npmci
stage: pages stage: pages
script: script:
- npmci command yarn global add npmpage - npmci command yarn global add npmpage
- npmci command npmpage --publish gitlab - npmci command npmpage
tags: tags:
- docker - docker
only: only:

111
.snyk Normal file
View File

@ -0,0 +1,111 @@
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
version: v1.12.0
# ignores vulnerabilities until expiry date; change duration by modifying expiry date
ignore:
'npm:debug:20170905':
- node-pre-gyp > tar-pack > debug:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > tar-pack > debug:
reason: None given
expires: '2018-05-08T23:12:05.487Z'
'npm:tough-cookie:20170905':
- node-pre-gyp > request > tough-cookie:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > request > tough-cookie:
reason: None given
expires: '2018-05-08T23:12:05.487Z'
'npm:hoek:20180212':
- boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- cryptiles > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- hawk > cryptiles > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > hawk > cryptiles > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > hawk > cryptiles > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > request > hawk > cryptiles > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > request > hawk > cryptiles > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- hawk > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > hawk > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > hawk > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > request > hawk > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > request > hawk > boom > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- hawk > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > hawk > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > hawk > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > request > hawk > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > request > hawk > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- hawk > sntp > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > hawk > sntp > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > hawk > sntp > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- node-pre-gyp > request > hawk > sntp > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
- smartchok > chokidar > fsevents > node-pre-gyp > request > hawk > sntp > hoek:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
'npm:shelljs:20140723':
- tapbuffer > smartshell > shelljs:
reason: None given
expires: '2018-05-08T23:10:17.169Z'
'npm:atob:20180429':
- gulp-sourcemaps > css > source-map-resolve > atob:
reason: None given
expires: '2018-06-02T10:44:49.656Z'
- gulp-sourcemaps > @gulp-sourcemaps/identity-map > css > source-map-resolve > atob:
reason: None given
expires: '2018-06-02T10:44:49.656Z'
'npm:deep-extend:20180409':
- smartchok > chokidar > fsevents > node-pre-gyp > rc > deep-extend:
reason: None given
expires: '2018-06-02T10:44:49.656Z'
- deep-extend:
reason: None given
expires: '2018-06-02T10:44:49.656Z'
- node-pre-gyp > rc > deep-extend:
reason: None given
expires: '2018-06-02T10:44:49.656Z'
'npm:sshpk:20180409':
- smartchok > chokidar > fsevents > node-pre-gyp > request > http-signature > sshpk:
reason: None given
expires: '2018-06-02T10:44:49.656Z'
patch: {}

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

1
dist/index.d.ts vendored
View File

@ -0,0 +1 @@
export {};

3
dist/index.js vendored
View File

@ -8,8 +8,7 @@ const early = require("early");
early.start('NPMTS'); early.start('NPMTS');
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
const cli = require("./npmts.cli"); const cli = require("./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,3 +0,0 @@
import { ProjectinfoNpm } from 'projectinfo';
export declare let projectInfo: ProjectinfoNpm;
export declare let run: (configArg: any) => Promise<{}>;

View File

@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
* Note: Test files are only compiled in memory * Note: Test files are only compiled in memory
* -------------------------------------------- */ * -------------------------------------------- */
const q = require("smartq"); const q = require("smartq");
const plugins = require("./mod00.plugins"); const plugins = require("./mod.plugins");
const NpmtsAssets = require("./mod00.assets"); const NpmtsAssets = require("./mod.assets");
const NpmtsCheck = require("./mod00.check"); const NpmtsCheck = require("./mod.check");
const NpmtsClean = require("./mod00.clean"); const NpmtsClean = require("./mod.clean");
const NpmtsCompile = require("./mod00.compile"); const NpmtsCompile = require("./mod.compile");
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
plugins.beautylog.ora.text('starting TypeScript Compilation'); plugins.beautylog.ora.text('starting TypeScript Compilation');

View File

@ -2,14 +2,14 @@
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq"); const q = require("smartq");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins"); const plugins = require("./mod.plugins");
const mod00_check_1 = require("../mod00/mod00.check"); const mod_check_1 = require("../mod_compile/mod.check");
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
let config = configArg; let config = configArg;
plugins.beautylog.ora.text('now looking at ' + 'required assets'); plugins.beautylog.ora.text('now looking at ' + 'required assets');
if (config.cli === true) { if (config.cli === true) {
let mainJsPath = mod00_check_1.projectInfo.packageJson.main; let mainJsPath = mod_check_1.projectInfo.packageJson.main;
let cliJsString = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js')); let cliJsString = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'));
cliJsString = cliJsString.replace('{{pathToIndex}}', mainJsPath); cliJsString = cliJsString.replace('{{pathToIndex}}', mainJsPath);
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir, 'cli.js')); plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir, 'cli.js'));

4
dist/mod_compile/mod.check.d.ts vendored Normal file
View File

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

View File

@ -1,9 +1,17 @@
"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");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins"); const plugins = require("./mod.plugins");
let checkProjectTypings = (configArg) => { let checkProjectTypings = (configArg) => {
let done = q.defer(); let done = q.defer();
plugins.beautylog.ora.text('Check Module: Check Project Typings...'); plugins.beautylog.ora.text('Check Module: Check Project Typings...');
@ -12,20 +20,22 @@ let checkProjectTypings = (configArg) => {
plugins.beautylog.error(`please add typings field to package.json`); plugins.beautylog.error(`please add typings field to package.json`);
process.exit(1); process.exit(1);
} }
;
done.resolve(configArg); done.resolve(configArg);
return done.promise; return done.promise;
}; };
const depcheckOptions = { const depcheckOptions = {
ignoreBinPackage: false, ignoreBinPackage: false,
parsers: { parsers: {
// the target parsers
'*.ts': plugins.depcheck.parser.typescript '*.ts': plugins.depcheck.parser.typescript
}, },
detectors: [ detectors: [
// the target detectors
plugins.depcheck.detector.requireCallExpression, plugins.depcheck.detector.requireCallExpression,
plugins.depcheck.detector.importDeclaration plugins.depcheck.detector.importDeclaration
], ],
specials: [ specials: [
// the target special parsers
plugins.depcheck.special.eslint, plugins.depcheck.special.eslint,
plugins.depcheck.special.webpack plugins.depcheck.special.webpack
] ]
@ -35,16 +45,18 @@ let checkDependencies = (configArg) => {
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: [ ignoreDirs: [
// folder with these names will be ignored
'test', 'test',
'dist', 'dist',
'bower_components' 'bower_components'
], ],
ignoreMatches: [ ignoreMatches: [
// ignore dependencies that matches these globs
'@types/*', '@types/*',
'babel-preset-*' 'babel-preset-*'
] ]
}); });
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { plugins.depcheck(paths.cwd, depcheckOptionsMerged, unused => {
for (let item of unused.dependencies) { for (let item of unused.dependencies) {
plugins.beautylog.warn(`Watch out: unused dependency "${item}"`); plugins.beautylog.warn(`Watch out: unused dependency "${item}"`);
} }
@ -58,7 +70,6 @@ let checkDependencies = (configArg) => {
for (let item in unused.invalidFiles) { for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`); plugins.beautylog.warn(`Watch out: could not parse file ${item}`);
} }
;
for (let item in unused.invalidDirs) { for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`); plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
} }
@ -71,16 +82,18 @@ let checkDevDependencies = (configArg) => {
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: [ ignoreDirs: [
// folder with these names will be ignored
'ts', 'ts',
'dist', 'dist',
'bower_components' 'bower_components'
], ],
ignoreMatches: [ ignoreMatches: [
// ignore dependencies that matches these globs
'@types/*', '@types/*',
'babel-preset-*' 'babel-preset-*'
] ]
}); });
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { plugins.depcheck(paths.cwd, depcheckOptionsMerged, unused => {
for (let item of unused.devDependencies) { for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item}`); plugins.beautylog.log(`unused devDependency ${item}`);
} }
@ -107,23 +120,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: ...');
// check cli
if (configArg.argv.nocheck) {
configArg.checkDependencies = false;
}
if (configArg.checkDependencies) { if (configArg.checkDependencies) {
checkProjectTypings(configArg) configArg = yield checkProjectTypings(configArg);
.then(checkDependencies) configArg = yield checkDependencies(configArg);
.then(checkDevDependencies) configArg = yield checkDevDependencies(configArg);
.then(checkNodeVersion) configArg = yield checkNodeVersion(configArg);
.then(done.resolve) return configArg;
.catch((err) => { console.log(err); });
} }
else { else {
done.resolve(configArg); configArg = yield checkProjectTypings(configArg);
return configArg;
} }
return done.promise; });
};

View File

@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq"); const q = require("smartq");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins"); const plugins = require("./mod.plugins");
/** /**
* removes the dist directory which will be entirely rebuild * removes the dist directory which will be entirely rebuild
*/ */

View File

@ -2,15 +2,19 @@
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq"); const q = require("smartq");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins"); const plugins = require("./mod.plugins");
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
let config = configArg; let config = configArg;
plugins.beautylog.ora.text('now compiling ' + 'TypeScript'); plugins.beautylog.ora.text('now compiling ' + 'TypeScript');
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd) plugins.tsn
.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => { .then(() => {
plugins.beautylog.ok(`compiled the module's TypeScript!`); plugins.beautylog.ok(`compiled the module's TypeScript!`);
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); })
.catch(err => {
console.log(err);
});
return done.promise; return done.promise;
}; };

View File

@ -1,2 +1,6 @@
import { INpmtsConfig } from '../npmts.config'; import { INpmtsConfig } from '../npmts.config';
/**
* run this module
* @param configArg some config for how to run this module
*/
export declare let run: (configArg: INpmtsConfig) => Promise<INpmtsConfig>; export declare let run: (configArg: INpmtsConfig) => Promise<INpmtsConfig>;

View File

@ -11,9 +11,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
/* ------------------------------------------ /* ------------------------------------------
* This module tests the compiled TypeScript files * This module tests the compiled TypeScript files
* -------------------------------------------- */ * -------------------------------------------- */
const plugins = require("./mod02.plugins"); const plugins = require("./mod.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
@ -31,15 +37,7 @@ let tap = function (configArg) {
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.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
file.path = file.path.replace(paths.tsDir, paths.distDir);
})),
plugins.gulpSourcemaps.write(), plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(), npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
@ -50,24 +48,16 @@ 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.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(),
npmtsTapBuffer.pipeTestFiles(), npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]); ]);
// lets run the smartstream // lets run the smartstream
Promise.all([ Promise.all([testableFilesSmartstream.run(), testFilesSmartstream.run()]).then(() => __awaiter(this, void 0, void 0, function* () {
testableFilesSmartstream.run(),
testFilesSmartstream.run()
]).then(() => __awaiter(this, void 0, void 0, function* () {
configArg.runData.coverageLcovInfo = yield npmtsTapBuffer.runTests(); configArg.runData.coverageLcovInfo = yield npmtsTapBuffer.runTests();
done.resolve(configArg); done.resolve(configArg);
}), (err) => { }), err => {
plugins.beautylog.error('Tests failed!'); plugins.beautylog.error('Tests failed!');
console.log(err); console.log(err);
if (configArg.watch) { if (configArg.watch) {
@ -88,14 +78,14 @@ let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function
plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?'); plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?');
} }
if (coverageResult >= configArg.coverageTreshold) { if (coverageResult >= configArg.coverageTreshold) {
plugins.beautylog.ok(`${(coverageResult).toString()}% ` plugins.beautylog.ok(`${coverageResult.toString()}% ` +
+ `coverage exceeds your treshold of ` `coverage exceeds your treshold of ` +
+ `${configArg.coverageTreshold.toString()}%`); `${configArg.coverageTreshold.toString()}%`);
} }
else { else {
plugins.beautylog.warn(`${(coverageResult).toString()}% ` plugins.beautylog.warn(`${coverageResult.toString()}% ` +
+ `coverage fails your treshold of ` `coverage fails your treshold of ` +
+ `${configArg.coverageTreshold.toString()}%`); `${configArg.coverageTreshold.toString()}%`);
plugins.beautylog.error('exiting due to coverage failure'); plugins.beautylog.error('exiting due to coverage failure');
if (!configArg.watch) { if (!configArg.watch) {
process.exit(1); process.exit(1);
@ -103,6 +93,10 @@ let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function
} }
return configArg; return configArg;
}); });
/**
* run this module
* @param configArg some config for how to run this module
*/
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
let config = configArg; let config = configArg;
@ -110,18 +104,24 @@ exports.run = function (configArg) {
plugins.beautylog.ora.text('now starting tests'); plugins.beautylog.ora.text('now starting tests');
plugins.beautylog.ora.end(); plugins.beautylog.ora.end();
plugins.beautylog.log('ready for tapbuffer:'); plugins.beautylog.log('ready for tapbuffer:');
if (configArg.coverage) { if (configArg.testConfig.coverage) {
tap(config) tap(config)
.then(handleCoverageData) .then(handleCoverageData)
.then(() => { .then(() => {
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); })
.catch(err => {
console.log(err);
});
} }
else { else {
tap(config) tap(config)
.then(() => { .then(() => {
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); })
.catch(err => {
console.log(err);
});
} }
} }
else { else {

93
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,33 +23,54 @@ 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',
let done = q.defer(); appName: 'npmts'
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot); });
let npmtsCli = new plugins.smartcli.Smartcli(); process.nextTick(() => __awaiter(this, void 0, void 0, function* () {
npmtsCli.standardTask() // make the analytics call
.then((argvArg) => { npmtsAnalytics
plugins.beautylog.figletSync('NPMTS'); .recordEvent('npmToolExecution', {
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version); executionMode: (yield NpmtsConfig.configPromise).mode,
return NpmtsConfig.run(argvArg); tsOptions: (yield NpmtsConfig.configPromise).tsOptions,
watch: (yield NpmtsConfig.configPromise).watch,
coverageTreshold: (yield NpmtsConfig.configPromise).coverageTreshold
}) })
.then((configArg) => { .catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...');
});
}));
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();
// build
npmtsCli
.addCommand('build')
.subscribe((argvArg) => __awaiter(this, void 0, void 0, function* () {
let done = q.defer(); let done = q.defer();
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
const configArg = yield NpmtsConfig.run(argvArg);
plugins.beautylog.ora.start('loading additional modules...'); plugins.beautylog.ora.start('loading additional modules...');
NpmtsMods.mod00.load() NpmtsMods.modCompile
.then((mod00) => { .load()
return mod00.run(configArg); .then(modCompile => {
return modCompile.run(configArg);
}) })
.then(configArg => { .then(configArg => {
let done = q.defer(); let done = q.defer();
NpmtsMods.mod01.load() NpmtsMods.modDocs
.then(mod01 => { .load()
return mod01.run(configArg); .then(modDocs => {
return modDocs.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg); done.resolve(configArg);
@ -50,9 +79,10 @@ exports.run = () => {
}) })
.then(configArg => { .then(configArg => {
let done = q.defer(); let done = q.defer();
NpmtsMods.mod02.load() NpmtsMods.modTest
.then(mod02 => { .load()
return mod02.run(configArg); .then(modTest => {
return modTest.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg); done.resolve(configArg);
@ -62,11 +92,18 @@ exports.run = () => {
.then(NpmtsWatch.run) .then(NpmtsWatch.run)
.then(NpmtsShip.run); .then(NpmtsShip.run);
return done.promise; return done.promise;
}) }), err => {
.catch((err) => { if (err instanceof Error) { if (err instanceof Error) {
console.log(err); console.log(err);
} }); }
});
// standard task
npmtsCli.standardTask().subscribe((argvArg) => __awaiter(this, void 0, void 0, function* () {
yield npmtsCli.trigger('build');
}));
// cli metadata
npmtsCli.addVersion(npmtsProjectInfo.version); npmtsCli.addVersion(npmtsProjectInfo.version);
// start parsing
npmtsCli.startParse(); npmtsCli.startParse();
return done.promise; return yield done.promise;
}; });

View File

@ -1,3 +1,4 @@
import { ITapbufferConfig } from 'tapbuffer';
/** /**
* specifies the different modes available * specifies the different modes available
* default -> uses default options no matterm what * default -> uses default options no matterm what
@ -7,13 +8,12 @@
export declare type npmtsMode = 'default' | 'custom' | 'merge'; export declare type npmtsMode = 'default' | 'custom' | 'merge';
export interface INpmtsConfig { export interface INpmtsConfig {
argv: any; argv: any;
coverage: boolean;
coverageTreshold: number; coverageTreshold: number;
checkDependencies: boolean; checkDependencies: boolean;
mode: npmtsMode; mode: npmtsMode;
test: boolean; test: boolean;
testTs: any; testTs: any;
testConfig: any; testConfig: ITapbufferConfig;
ts: any; ts: any;
tsOptions: any; tsOptions: any;
watch: boolean; watch: boolean;
@ -22,4 +22,5 @@ export interface INpmtsConfig {
coverageResult?: number; coverageResult?: number;
}; };
} }
export declare let run: (argvArg: any) => Promise<{}>; export declare let run: (argvArg: any) => Promise<INpmtsConfig>;
export declare let configPromise: Promise<INpmtsConfig>;

14
dist/npmts.config.js vendored
View File

@ -2,19 +2,19 @@
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,
coverage: true,
coverageTreshold: 70, coverageTreshold: 70,
checkDependencies: true, checkDependencies: true,
mode: 'default', mode: 'default',
test: true, test: true,
testTs: {}, testTs: {},
testConfig: { testConfig: {
parallel: true parallel: true,
coverage: true
}, },
ts: {}, ts: {},
tsOptions: {}, tsOptions: {},
@ -53,7 +53,7 @@ exports.run = function (argvArg) {
config.test = false; config.test = false;
} }
if (config.argv.nocoverage) { if (config.argv.nocoverage) {
config.coverage = false; config.testConfig.coverage = false;
} }
if (config.argv.nochecks) { if (config.argv.nochecks) {
config.checkDependencies = false; config.checkDependencies = false;
@ -63,5 +63,9 @@ exports.run = function (argvArg) {
} }
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;

14
dist/npmts.mods.d.ts vendored
View File

@ -1,7 +1,7 @@
import { LazyModule } from 'smartsystem'; import * as plugins from './npmts.plugins';
import * as _mod00 from './mod00/index'; import * as _modCompile from './mod_compile/index';
import * as _mod01 from './mod01/index'; import * as _modDocs from './mod_docs/index';
import * as _mod02 from './mod02/index'; import * as _modTest from './mod_test/index';
export declare let mod00: LazyModule<typeof _mod00>; export declare let modCompile: plugins.smartsystem.LazyModule<typeof _modCompile>;
export declare let mod01: LazyModule<typeof _mod01>; export declare let modDocs: plugins.smartsystem.LazyModule<typeof _modDocs>;
export declare let mod02: LazyModule<typeof _mod02>; export declare let modTest: plugins.smartsystem.LazyModule<typeof _modTest>;

6
dist/npmts.mods.js vendored
View File

@ -1,6 +1,6 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const smartsystem_1 = require("smartsystem"); const smartsystem_1 = require("smartsystem");
exports.mod00 = new smartsystem_1.LazyModule('./mod00/index', __dirname); exports.modCompile = new smartsystem_1.LazyModule('./mod_compile/index', __dirname);
exports.mod01 = new smartsystem_1.LazyModule('./mod01/index', __dirname); exports.modDocs = new smartsystem_1.LazyModule('./mod_docs/index', __dirname);
exports.mod02 = new smartsystem_1.LazyModule('./mod02/index', __dirname); exports.modTest = new smartsystem_1.LazyModule('./mod_test/index', __dirname);

View File

@ -1,4 +1,3 @@
import 'typings-global';
import * as beautylog from 'beautylog'; import * as beautylog from 'beautylog';
declare let depcheck: any; declare let depcheck: any;
import * as lodash from 'lodash'; import * as lodash from 'lodash';
@ -6,12 +5,13 @@ import * as npmextra from 'npmextra';
import * as projectinfo from 'projectinfo'; 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 '@pushrocks/smartcli';
import * as smarterror from 'smarterror'; 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 { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartanalytics, smartcli, smarterror, 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

@ -1,6 +1,5 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
require("typings-global");
const beautylog = require("beautylog"); const beautylog = require("beautylog");
exports.beautylog = beautylog; exports.beautylog = beautylog;
let depcheck = require('depcheck'); let depcheck = require('depcheck');
@ -15,7 +14,7 @@ const path = require("path");
exports.path = path; exports.path = path;
const smartanalytics = require("smartanalytics"); const smartanalytics = require("smartanalytics");
exports.smartanalytics = smartanalytics; exports.smartanalytics = smartanalytics;
const smartcli = require("smartcli"); const smartcli = require("@pushrocks/smartcli");
exports.smartcli = smartcli; exports.smartcli = smartcli;
const smarterror = require("smarterror"); const smarterror = require("smarterror");
exports.smarterror = smarterror; exports.smarterror = smarterror;
@ -29,5 +28,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;

2
dist/npmts.watch.js vendored
View File

@ -16,7 +16,7 @@ exports.run = (configArg) => {
pathsToWatch.push(key); pathsToWatch.push(key);
} }
npmtsSmartchok = new smartchok.Smartchok(pathsToWatch); npmtsSmartchok = new smartchok.Smartchok(pathsToWatch);
npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => { npmtsSmartchok.getObservableFor('change').then(changeObservableArg => {
plugins.beautylog.info('now watching...'); plugins.beautylog.info('now watching...');
changeObservableArg.subscribe(() => { changeObservableArg.subscribe(() => {
cli.run(); cli.run();

10
docs/changelog.md Normal file
View File

@ -0,0 +1,10 @@
# 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,57 +1,65 @@
--- ---
name: config name: config
--- ---
# Configuration # Configuration
npmts can be configured to your needs. npmts can be configured to your needs.
### npmextra.json ### npmextra.json
the npmts section in npmextra.json can be used to configure npmts. the npmts section in npmextra.json can be used to configure npmts.
**Default** **Default**
>Note: When you are using `"mode":"default"` it'll cause npmts to override any other settings you may have made except for tsOptions (ES target etc.)
with default behaviour. > Note: When you are using `"mode":"default"` it'll cause npmts to override any other settings you may have made except for tsOptions (ES target etc.)
> with default behaviour.
```json ```json
{ {
"npmts":{ "npmts": {
"mode":"default" "mode": "default"
} }
} }
``` ```
**Custom settings** **Custom settings**
```json ```json
{ {
"mode":"custom", "mode": "custom",
"test":true, "test": true,
"npmts":{ "npmts": {
"ts":{ "ts": {
"./customdir/*.ts":"./" "./customdir/*.ts": "./"
}, },
"tsOptions":{ "tsOptions": {
"declaration":false, "declaration": false,
"target":"ES6" "target": "ES6"
}, },
"cli":true "cli": true
} }
} }
``` ```
| 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
`./dist/*.js` and `./test/test.js` `./dist/*.js` and `./test/test.js`
Use commonjs module system for wiring up files. Use commonjs module system for wiring up files.
### Declaration files ### Declaration files
**npmts** also creates declaration files like `./dist/index.d.ts` by default. **npmts** also creates declaration files like `./dist/index.d.ts` by default.
You can reference it in your package.json like this. You can reference it in your package.json like this.
@ -65,12 +73,16 @@ You can then import plugins via the TypeScript `import` Syntax
and tsc will pick up the declaration file automatically. and tsc will pick up the declaration file automatically.
## Some notes: ## Some notes:
#### Typings for third party modules that do not bundle declaration files #### Typings for third party modules that do not bundle declaration files
NPMTS no longer supports typings.json. Instead use the new TypeScript 2.x approach to typings using the @types/ npm scope. NPMTS no longer supports typings.json. Instead use the new TypeScript 2.x approach to typings using the @types/ npm scope.
#### Instrumentalize Code #### Instrumentalize Code
npmts instrumentalizes (using istanbul) the created JavaScript code to create a coverage report. npmts instrumentalizes (using istanbul) the created JavaScript code to create a coverage report.
#### Tests #### Tests
Any errors will be shown with reference to their originating source in TypeScript Any errors will be shown with reference to their originating source in TypeScript
thanks to autogenerated source maps. thanks to autogenerated source maps.

View File

@ -1,11 +1,13 @@
--- ---
name: Default Behaviour name: Default Behaviour
--- ---
# Default Behaviour # Default Behaviour
when you don't configure it otherwise. when you don't configure it otherwise.
1. **Config:** Check config in ./npmextra.json (Check out [npmextra](https://www.npmjs.com/package/npmextra)) 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. **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. **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. **Transpile:** Transpile TypeScript with **inline sourcemaps** and **declaration files** to ES target
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. 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,15 +1,17 @@
--- ---
name: Examples name: Examples
--- ---
# Examples # Examples
modules that use npmts in theis development workflow modules that use npmts in theis development workflow
Module Name | Description | Module Name | Description |
--- | --- | ---------------------------------------------------------- | --------------------------- |
[gitzone](https://www.npmjs.com/package/gitzone) | fast npm module prototyping | [gitzone](https://www.npmjs.com/package/gitzone) | fast npm module prototyping |
[gulp-browser](https://www.npmjs.com/package/gulp-browser) | browserify for gulp | [gulp-browser](https://www.npmjs.com/package/gulp-browser) | browserify for gulp |
[npmdocker](https://www.npmjs.com/package/npmdocker) | dockerized npm development | [npmdocker](https://www.npmjs.com/package/npmdocker) | dockerized npm development |
[smartcli](https://www.npmjs.com/package/smartcli) | easy cli tool creation | [smartcli](https://www.npmjs.com/package/smartcli) | easy cli tool creation |
> There are tons more... We will add them here over time. > There are tons more... We will add them here over time.
@ -18,4 +20,4 @@ Module Name | Description
* 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 [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 [npmpage](https://www.npmjs.com/package/npmpage) to create a webpage from coverage reports and TypeDoc for the module
* Use [hosttoday/ht-docker-node:npmci](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. * Use [npmdocker](https://www.npmjs.com/package/npmdocker) for running tests consistently with docker.

40
docs/getstarted.md Normal file
View File

@ -0,0 +1,40 @@
---
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,16 +1,21 @@
--- ---
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)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/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) [![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/) [![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## Status for master ## Status for master
[![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)
@ -22,17 +27,19 @@ Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
[![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 ## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0) [![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.
npmts will npmts will
1. check your dependencies and package.json (unused, missing, updates, security) 1. check your dependencies and package.json (unused, missing, updates, security)
1. transpile your code with tsc, 1. transpile your code with tsc,
1. test your code with tap (supports the fancy stuff like Promises, Generators, async/await, sourcemaps, parallel test execution in child processes) 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) 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). For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer).
@ -40,6 +47,6 @@ This works on your machine and in CI. There is a prebuild docker image available
[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/)
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) > | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https:/git.zone) [![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https:/git.zone)

View File

@ -1,8 +1,9 @@
# Install npmts # Install npmts
Get started with TypeScript awesomeness. Get started with TypeScript awesomeness.
> **npmts-g* checks if the global version of npmts suffices the modules requirements. > \*_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. > If not it installs npmts locally in the right version during npm install.
```sh ```sh
npm install npmts -g # installs npmts globally npm install npmts -g # installs npmts globally
@ -15,4 +16,4 @@ Then add it to your package.json's script section to trigger a build:
"scripts": { "scripts": {
"test": "(npmts)" "test": "(npmts)"
} }
``` ```

27
docs/structure.md Normal file
View File

@ -0,0 +1,27 @@
---
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**

5
npmextra.json Normal file
View File

@ -0,0 +1,5 @@
{
"npmci": {
"npmAccessLevel": "public"
}
}

View File

@ -1,7 +1,7 @@
{ {
"name": "npmts", "name": "@gitzone/npmts",
"version": "7.1.6", "version": "8.0.33",
"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,37 @@
}, },
"homepage": "https://gitlab.com/gitzone/npmts#readme", "homepage": "https://gitlab.com/gitzone/npmts#readme",
"dependencies": { "dependencies": {
"@types/gulp-sourcemaps": "0.0.30", "@pushrocks/smartcli": "^3.0.0",
"@types/minimatch": "^2.0.29", "@types/gulp-sourcemaps": "0.0.32",
"@types/minimatch": "^3.0.1",
"@types/through2": "^2.0.33", "@types/through2": "^2.0.33",
"beautylog": "6.1.10", "beautylog": "^6.1.10",
"depcheck": "^0.6.7", "depcheck": "^0.6.9",
"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.7", "gulp-typescript": "^4.0.2",
"lodash": "^4.17.4", "lodash": "^4.17.10",
"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.14",
"smartcli": "^2.0.7",
"smartcov": "^1.0.2", "smartcov": "^1.0.2",
"smarterror": "^1.0.3", "smarterror": "^1.0.3",
"smartfile": "^4.2.17", "smartfile": "^4.2.26",
"smartgulp": "^1.0.6", "smartgulp": "^1.0.6",
"smartpath": "^3.2.8", "smartpath": "^3.2.8",
"smartq": "^1.1.1", "smartq": "^1.1.8",
"smartstream": "^1.0.8", "smartstream": "^1.0.10",
"smartstring": "^2.0.24", "smartstring": "^2.0.28",
"smartsystem": "^1.0.17", "smartsystem": "^2.0.2",
"tapbuffer": "^1.0.15", "smartupdate": "^1.0.13",
"tapbuffer": "^1.0.31",
"through2": "^2.0.3", "through2": "^2.0.3",
"tsn": "^2.0.15", "tsn": "^2.0.15",
"typescript": "^2.3.4", "typescript": "^2.8.3"
"typings-global": "^1.0.17"
}, },
"devDependencies": {} "devDependencies": {
"@types/node": "^10.0.3"
}
} }

View File

@ -1,44 +1,55 @@
# 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/@gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/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) [![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/) [![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## Status for master ## Status for master
[![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/@gitzone/npmts.svg)](https://www.npmjs.com/package/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 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) [![bitHound Code](https://www.bithound.io/github/gitzonetools/npmts/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmts)
[![Known Vulnerabilities](https://snyk.io/test/npm/@gitzone/npmts/badge.svg)]
[![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 ## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0) [![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.
npmts will npmts will
1. check your dependencies and package.json (unused, missing, updates, security) 1. check your dependencies and package.json (unused, missing, updates, security)
1. transpile your code with tsc, 1. transpile your code with tsc,
1. test your code with tap (supports the fancy stuff like Promises, Generators, async/await, sourcemaps, parallel test execution in child processes) 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) 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). 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)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) > | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks) [![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

View File

@ -3,12 +3,11 @@
Fabulous TypeScript development Fabulous TypeScript development
* ================================================== */ * ================================================== */
import * as early from 'early' import * as early from 'early';
early.start('NPMTS') early.start('NPMTS');
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins';
import * as 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,27 +0,0 @@
/* ------------------------------------------
* This module compiles the module's TypeScript files
* Note: Test files are only compiled in memory
* -------------------------------------------- */
import * as q from 'smartq'
import { INpmtsConfig } from '../npmts.config'
import * as plugins from './mod00.plugins'
import * as NpmtsAssets from './mod00.assets'
import * as NpmtsCheck from './mod00.check'
import * as NpmtsClean from './mod00.clean'
import * as NpmtsCompile from './mod00.compile'
export let run = function(configArg: INpmtsConfig): Promise<INpmtsConfig> {
let done = q.defer<INpmtsConfig>()
plugins.beautylog.ora.text('starting TypeScript Compilation')
NpmtsClean.run(configArg)
.then(NpmtsCheck.run)
.then(NpmtsCompile.run)
.then(NpmtsAssets.run)
.then(function(){
done.resolve(configArg)
})
return done.promise
}

View File

@ -1,24 +0,0 @@
import * as q from 'smartq'
import paths = require('../npmts.paths')
import plugins = require('./mod00.plugins')
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')
if (config.cli === true) {
let mainJsPath = projectInfo.packageJson.main
let cliJsString: string = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir,'cli.js'))
cliJsString = cliJsString.replace('{{pathToIndex}}',mainJsPath)
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir,'cli.js'))
plugins.beautylog.ok('installed CLI assets!')
done.resolve(config)
} else {
plugins.beautylog.ok('No additional assets required!')
done.resolve(config)
}
return done.promise
}

View File

@ -1,136 +0,0 @@
import * as q from 'smartq'
import { ProjectinfoNpm } from 'projectinfo'
import * as paths from '../npmts.paths'
import * as plugins from './mod00.plugins'
export let projectInfo: ProjectinfoNpm
let checkProjectTypings = (configArg) => {
let done = q.defer()
plugins.beautylog.ora.text('Check Module: Check Project Typings...')
projectInfo = new ProjectinfoNpm(paths.cwd)
if (typeof projectInfo.packageJson.typings === 'undefined') {
plugins.beautylog.error(`please add typings field to package.json`)
process.exit(1)
};
done.resolve(configArg)
return done.promise
}
const depcheckOptions = {
ignoreBinPackage: false, // ignore the packages with bin entry
parsers: { // the target parsers
'*.ts': plugins.depcheck.parser.typescript
},
detectors: [ // the target detectors
plugins.depcheck.detector.requireCallExpression,
plugins.depcheck.detector.importDeclaration
],
specials: [ // the target special parsers
plugins.depcheck.special.eslint,
plugins.depcheck.special.webpack
]
}
let checkDependencies = (configArg) => {
let done = q.defer()
plugins.beautylog.ora.text('Check Module: Check Dependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored
'test',
'dist',
'bower_components'
],
ignoreMatches: [ // ignore dependencies that matches these globs
'@types/*',
'babel-preset-*'
]
})
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.dependencies) {
plugins.beautylog.warn(`Watch out: unused dependency "${item}"`)
}
for (let item in unused.missing) {
plugins.beautylog.error(`missing dependency "${item}" in package.json`)
}
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}`)
};
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`)
}
done.resolve(configArg)
})
return done.promise
}
let checkDevDependencies = (configArg) => {
let done = q.defer()
plugins.beautylog.ora.text('Check Module: Check devDependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored
'ts',
'dist',
'bower_components'
],
ignoreMatches: [ // ignore dependencies that matches these globs
'@types/*',
'babel-preset-*'
]
})
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item}`)
}
for (let item in unused.missing) {
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}`)
}
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`)
}
done.resolve(configArg)
})
return done.promise
}
let checkNodeVersion = (configArg) => {
let done = q.defer()
plugins.beautylog.ora.text('checking node version')
done.resolve(configArg)
return done.promise
}
export let run = (configArg) => {
let done = q.defer()
plugins.beautylog.ora.text('Check Module: ...')
// check cli
if (configArg.argv.nocheck) {
configArg.checkDependencies = false
}
if (configArg.checkDependencies) {
checkProjectTypings(configArg)
.then(checkDependencies)
.then(checkDevDependencies)
.then(checkNodeVersion)
.then(done.resolve)
.catch((err) => { console.log(err) })
} else {
done.resolve(configArg)
}
return done.promise
}

View File

@ -1,32 +0,0 @@
import * as q from 'smartq'
import paths = require('../npmts.paths')
import plugins = require('./mod00.plugins')
/**
* removes the dist directory which will be entirely rebuild
*/
let removeDist = function () {
plugins.beautylog.ora.text('cleaning dist folder')
return plugins.smartfile.fs.remove(paths.distDir)
}
/**
* remove old pages
*/
let removePages = function () {
plugins.beautylog.ora.text('cleaning pages folder')
return plugins.smartfile.fs.remove(paths.pagesDir)
}
export let run = function (configArg) {
plugins.beautylog.ora.text('cleaning up from previous builds...')
let done = q.defer()
removeDist()
.then(removePages)
.then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!')
done.resolve(configArg)
})
return done.promise
}

View File

@ -1,17 +0,0 @@
import * as q from 'smartq'
import * as paths from '../npmts.paths'
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')
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => {
plugins.beautylog.ok(`compiled the module's TypeScript!`)
done.resolve(config)
}).catch(err => { console.log(err) })
return done.promise
}

View File

@ -1,11 +0,0 @@
export * from '../npmts.plugins'
import * as tsn from 'tsn'
import * as smartchok from 'smartchok'
import * as smartstream from 'smartstream'
export {
tsn,
smartchok,
smartstream
}

View File

@ -1,15 +0,0 @@
/* ------------------------------------------
* This module creates TypeScript documentation
* -------------------------------------------- */
import * as q from 'smartq'
import * as paths from '../npmts.paths'
import { INpmtsConfig } from '../npmts.config'
import * as plugins from './mod01.plugins'
export let run = function (configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>()
done.resolve(configArg)
return done.promise
}

View File

@ -1,2 +0,0 @@
export * from '../npmts.plugins'

View File

@ -1,137 +0,0 @@
/* ------------------------------------------
* This module tests the compiled TypeScript files
* -------------------------------------------- */
import plugins = require('./mod02.plugins')
import paths = require('../npmts.paths')
import * as q from 'smartq'
import { INpmtsConfig } from '../npmts.config'
/**
* runs mocha
* @returns INpmtsConfig
*/
let tap = function (configArg: INpmtsConfig) {
let done = q.defer()
/**
* 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.smartgulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpFunction.forEach(async file => {
file.path = file.path.replace(paths.tsDir, paths.distDir)
}),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
])
/**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
}),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()
])
// lets run the smartstream
Promise.all([
testableFilesSmartstream.run(),
testFilesSmartstream.run()
]).then(
async () => {
configArg.runData.coverageLcovInfo = await npmtsTapBuffer.runTests()
done.resolve(configArg)
}, (err) => {
plugins.beautylog.error('Tests failed!')
console.log(err)
if (configArg.watch) {
done.resolve(configArg)
} else {
process.exit(1)
}
})
return done.promise
}
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(
`${(coverageResult).toString()}% `
+ `coverage exceeds your treshold of `
+ `${configArg.coverageTreshold.toString()}%`
)
} else {
plugins.beautylog.warn(
`${(coverageResult).toString()}% `
+ `coverage fails your treshold of `
+ `${configArg.coverageTreshold.toString()}%`
)
plugins.beautylog.error('exiting due to coverage failure')
if (!configArg.watch) { process.exit(1) }
}
return configArg
}
export let run = function (configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>()
let config = configArg
if (config.test === true) {
plugins.beautylog.ora.text('now starting tests')
plugins.beautylog.ora.end()
plugins.beautylog.log('ready for tapbuffer:')
if (configArg.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)
}
return done.promise
}

View File

@ -1,17 +0,0 @@
export * from '../npmts.plugins'
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 {
gulpFunction,
gulpSourcemaps,
gulpTypeScript,
smartcov,
smartgulp,
tapbuffer
}

27
ts/mod_compile/index.ts Normal file
View File

@ -0,0 +1,27 @@
/* ------------------------------------------
* This module compiles the module's TypeScript files
* Note: Test files are only compiled in memory
* -------------------------------------------- */
import * as q from 'smartq';
import { INpmtsConfig } from '../npmts.config';
import * as plugins from './mod.plugins';
import * as NpmtsAssets from './mod.assets';
import * as NpmtsCheck from './mod.check';
import * as NpmtsClean from './mod.clean';
import * as NpmtsCompile from './mod.compile';
export let run = function(configArg: INpmtsConfig): Promise<INpmtsConfig> {
let done = q.defer<INpmtsConfig>();
plugins.beautylog.ora.text('starting TypeScript Compilation');
NpmtsClean.run(configArg)
.then(NpmtsCheck.run)
.then(NpmtsCompile.run)
.then(NpmtsAssets.run)
.then(function() {
done.resolve(configArg);
});
return done.promise;
};

View File

@ -0,0 +1,26 @@
import * as q from 'smartq';
import paths = require('../npmts.paths');
import plugins = require('./mod.plugins');
import { projectInfo } from '../mod_compile/mod.check';
export let run = function(configArg) {
let done = q.defer();
let config = configArg;
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')
);
cliJsString = cliJsString.replace('{{pathToIndex}}', mainJsPath);
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir, 'cli.js'));
plugins.beautylog.ok('installed CLI assets!');
done.resolve(config);
} else {
plugins.beautylog.ok('No additional assets required!');
done.resolve(config);
}
return done.promise;
};

139
ts/mod_compile/mod.check.ts Normal file
View File

@ -0,0 +1,139 @@
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 './mod.plugins';
export let projectInfo: ProjectinfoNpm;
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') {
plugins.beautylog.error(`please add typings field to package.json`);
process.exit(1);
}
done.resolve(configArg);
return done.promise;
};
const depcheckOptions = {
ignoreBinPackage: false, // ignore the packages with bin entry
parsers: {
// the target parsers
'*.ts': plugins.depcheck.parser.typescript
},
detectors: [
// the target detectors
plugins.depcheck.detector.requireCallExpression,
plugins.depcheck.detector.importDeclaration
],
specials: [
// the target special parsers
plugins.depcheck.special.eslint,
plugins.depcheck.special.webpack
]
};
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
'test',
'dist',
'bower_components'
],
ignoreMatches: [
// ignore dependencies that matches these globs
'@types/*',
'babel-preset-*'
]
});
plugins.depcheck(paths.cwd, depcheckOptionsMerged, unused => {
for (let item of unused.dependencies) {
plugins.beautylog.warn(`Watch out: unused dependency "${item}"`);
}
for (let item in unused.missing) {
plugins.beautylog.error(`missing dependency "${item}" in package.json`);
}
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}`);
}
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
}
done.resolve(configArg);
});
return done.promise;
};
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
'ts',
'dist',
'bower_components'
],
ignoreMatches: [
// ignore dependencies that matches these globs
'@types/*',
'babel-preset-*'
]
});
plugins.depcheck(paths.cwd, depcheckOptionsMerged, unused => {
for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item}`);
}
for (let item in unused.missing) {
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}`);
}
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
}
done.resolve(configArg);
});
return done.promise;
};
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 = async (configArg: INpmtsConfig) => {
plugins.beautylog.ora.text('Check Module: ...');
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

@ -0,0 +1,32 @@
import * as q from 'smartq';
import paths = require('../npmts.paths');
import plugins = require('./mod.plugins');
/**
* removes the dist directory which will be entirely rebuild
*/
let removeDist = function() {
plugins.beautylog.ora.text('cleaning dist folder');
return plugins.smartfile.fs.remove(paths.distDir);
};
/**
* remove old pages
*/
let removePages = function() {
plugins.beautylog.ora.text('cleaning pages folder');
return plugins.smartfile.fs.remove(paths.pagesDir);
};
export let run = function(configArg) {
plugins.beautylog.ora.text('cleaning up from previous builds...');
let done = q.defer();
removeDist()
.then(removePages)
.then(function() {
plugins.beautylog.ok('Cleaned up from previous builds!');
done.resolve(configArg);
});
return done.promise;
};

View File

@ -0,0 +1,21 @@
import * as q from 'smartq';
import * as paths from '../npmts.paths';
import * as plugins from './mod.plugins';
export let run = function(configArg) {
let done = q.defer();
let config = configArg;
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!`);
done.resolve(config);
})
.catch(err => {
console.log(err);
});
return done.promise;
};

View File

@ -0,0 +1,7 @@
export * from '../npmts.plugins';
import * as tsn from 'tsn';
import * as smartchok from 'smartchok';
import * as smartstream from 'smartstream';
export { tsn, smartchok, smartstream };

15
ts/mod_docs/index.ts Normal file
View File

@ -0,0 +1,15 @@
/* ------------------------------------------
* This module creates TypeScript documentation
* -------------------------------------------- */
import * as q from 'smartq';
import * as paths from '../npmts.paths';
import { INpmtsConfig } from '../npmts.config';
import * as plugins from './mod.plugins';
export let run = function(configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>();
done.resolve(configArg);
return done.promise;
};

View File

@ -0,0 +1 @@
export * from '../npmts.plugins';

145
ts/mod_test/index.ts Normal file
View File

@ -0,0 +1,145 @@
/* ------------------------------------------
* This module tests the compiled TypeScript files
* -------------------------------------------- */
import plugins = require('./mod.plugins');
import paths = require('../npmts.paths');
import * as q from 'smartq';
// interfaces
import { INpmtsConfig } from '../npmts.config';
import { Smartfile } from 'smartfile';
let testTypeScriptConfig = {
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ESNext']
};
/**
* runs mocha
* @returns INpmtsConfig
*/
let tap = function(configArg: INpmtsConfig) {
let done = q.defer();
/**
* 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.smartgulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
]);
/**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()
]);
// lets run the smartstream
Promise.all([testableFilesSmartstream.run(), testFilesSmartstream.run()]).then(
async () => {
configArg.runData.coverageLcovInfo = await npmtsTapBuffer.runTests();
done.resolve(configArg);
},
err => {
plugins.beautylog.error('Tests failed!');
console.log(err);
if (configArg.watch) {
done.resolve(configArg);
} else {
process.exit(1);
}
}
);
return done.promise;
};
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(
`${coverageResult.toString()}% ` +
`coverage exceeds your treshold of ` +
`${configArg.coverageTreshold.toString()}%`
);
} else {
plugins.beautylog.warn(
`${coverageResult.toString()}% ` +
`coverage fails your treshold of ` +
`${configArg.coverageTreshold.toString()}%`
);
plugins.beautylog.error('exiting due to coverage failure');
if (!configArg.watch) {
process.exit(1);
}
}
return configArg;
};
/**
* run this module
* @param configArg some config for how to run this module
*/
export let run = function(configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>();
let config = configArg;
if (config.test === true) {
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);
}
return done.promise;
};

View File

@ -0,0 +1,10 @@
export * from '../npmts.plugins';
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 { gulpFunction, gulpSourcemaps, gulpTypeScript, smartcov, smartgulp, tapbuffer };

View File

@ -1,11 +1,11 @@
import * as q from 'smartq' import * as q from 'smartq';
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins';
import * as paths from './npmts.paths' import * as paths from './npmts.paths';
import * as NpmtsConfig from './npmts.config' import * as NpmtsConfig from './npmts.config';
import * as NpmtsMods from './npmts.mods' import * as NpmtsMods from './npmts.mods';
import * as NpmtsWatch from './npmts.watch' import * as NpmtsWatch from './npmts.watch';
import * as NpmtsShip from './npmts.ship' import * as NpmtsShip from './npmts.ship';
/** /**
* smartanalytics * smartanalytics
@ -15,58 +15,100 @@ 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 () => {
let done = q.defer() // make the analytics call
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot) npmtsAnalytics
let npmtsCli = new plugins.smartcli.Smartcli() .recordEvent('npmToolExecution', {
npmtsCli.standardTask() executionMode: (await NpmtsConfig.configPromise).mode,
.then((argvArg) => { tsOptions: (await NpmtsConfig.configPromise).tsOptions,
plugins.beautylog.figletSync('NPMTS') watch: (await NpmtsConfig.configPromise).watch,
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version) coverageTreshold: (await NpmtsConfig.configPromise).coverageTreshold
return NpmtsConfig.run(argvArg)
}) })
.then((configArg: NpmtsConfig.INpmtsConfig) => { .catch(err => {
let done = q.defer() plugins.beautylog.warn('Lossless Analytics API not available...');
plugins.beautylog.ora.start('loading additional modules...') });
NpmtsMods.mod00.load() });
.then((mod00) => {
return mod00.run(configArg) 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();
// build
npmtsCli
.addCommand('build')
.subscribe(async (argvArg) => {
let done = q.defer();
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
const configArg: NpmtsConfig.INpmtsConfig = await NpmtsConfig.run(argvArg);
plugins.beautylog.ora.start('loading additional modules...');
NpmtsMods.modCompile
.load()
.then(modCompile => {
return modCompile.run(configArg);
}) })
.then(configArg => { .then(configArg => {
let done = q.defer<NpmtsConfig.INpmtsConfig>() let done = q.defer<NpmtsConfig.INpmtsConfig>();
NpmtsMods.mod01.load() NpmtsMods.modDocs
.then(mod01 => { .load()
return mod01.run(configArg) .then(modDocs => {
return modDocs.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg) done.resolve(configArg);
}) });
return done.promise return done.promise;
}) })
.then(configArg => { .then(configArg => {
let done = q.defer<NpmtsConfig.INpmtsConfig>() let done = q.defer<NpmtsConfig.INpmtsConfig>();
NpmtsMods.mod02.load() NpmtsMods.modTest
.then(mod02 => { .load()
return mod02.run(configArg) .then(modTest => {
return modTest.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg) done.resolve(configArg);
}) });
return done.promise return done.promise;
}) })
.then(NpmtsWatch.run) .then(NpmtsWatch.run)
.then(NpmtsShip.run) .then(NpmtsShip.run);
return done.promise return done.promise;
}, err => {
if (err instanceof Error) {
console.log(err);
}
}) })
.catch((err) => { if (err instanceof Error) { console.log(err) } })
npmtsCli.addVersion(npmtsProjectInfo.version) // standard task
npmtsCli.startParse() npmtsCli.standardTask().subscribe(async argvArg => {
return done.promise await npmtsCli.trigger('build')
} })
// cli metadata
npmtsCli.addVersion(npmtsProjectInfo.version);
// start parsing
npmtsCli.startParse();
return await done.promise;
};

View File

@ -1,7 +1,10 @@
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';
// interfaces
import { ITapbufferConfig } from 'tapbuffer';
/** /**
* specifies the different modes available * specifies the different modes available
@ -9,98 +12,99 @@ import * as q from 'smartq'
* merge -> uses merged default + custom options * merge -> uses merged default + custom options
* custom -> only uses specified options * custom -> only uses specified options
*/ */
export type npmtsMode = 'default' | 'custom' | 'merge' export type npmtsMode = 'default' | 'custom' | 'merge';
export interface INpmtsConfig { export interface INpmtsConfig {
argv: any argv: any;
coverage: boolean coverageTreshold: number;
coverageTreshold: number checkDependencies: boolean;
checkDependencies: boolean mode: npmtsMode;
mode: npmtsMode test: boolean;
test: boolean testTs: any;
testTs: any testConfig: ITapbufferConfig;
testConfig: any ts: any;
ts: any tsOptions: 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<INpmtsConfig>();
let defaultConfig: INpmtsConfig = { let defaultConfig: INpmtsConfig = {
argv: undefined, argv: undefined,
coverage: true,
coverageTreshold: 70, coverageTreshold: 70,
checkDependencies: true, checkDependencies: true,
mode: 'default', mode: 'default',
test: true, test: true,
testTs: {}, testTs: {},
testConfig: { testConfig: {
parallel: true parallel: true,
coverage: true
}, },
ts: {}, ts: {},
tsOptions: {}, tsOptions: {},
watch: false, watch: false,
runData: {} runData: {}
} };
// mix with configfile // mix with configfile
plugins.beautylog.ora.text('running npmextra') plugins.beautylog.ora.text('running npmextra');
let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd) let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
let config: INpmtsConfig = localNpmextra.dataFor<INpmtsConfig>( let config: INpmtsConfig = localNpmextra.dataFor<INpmtsConfig>('npmts', defaultConfig);
'npmts',
defaultConfig
)
// add argv // add argv
config.argv = argvArg config.argv = argvArg;
// check mode // check mode
switch (config.mode) { switch (config.mode) {
case 'default': case 'default':
case 'custom': case 'custom':
case 'merge': 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! Can be default or custom`) 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' || config.mode === 'merge') { 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) { if (config.argv.nocoverage) {
config.coverage = false config.testConfig.coverage = false;
} }
if (config.argv.nochecks) { if (config.argv.nochecks) {
config.checkDependencies = false config.checkDependencies = false;
} }
if (config.argv.watch) { if (config.argv.watch) {
config.watch = true config.watch = true;
} }
plugins.beautylog.ok('build options are ready!') plugins.beautylog.ok('build options are ready!');
done.resolve(config) done.resolve(config);
return done.promise configDeferred.resolve(config);
} return done.promise;
};
// config deferred usage
let configDeferred = smartq.defer<INpmtsConfig>();
export let configPromise = configDeferred.promise;

View File

@ -1,11 +1,11 @@
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins';
import { LazyModule } from 'smartsystem' import { LazyModule } from 'smartsystem';
import * as _mod00 from './mod00/index' import * as _modCompile from './mod_compile/index';
import * as _mod01 from './mod01/index' import * as _modDocs from './mod_docs/index';
import * as _mod02 from './mod02/index' import * as _modTest from './mod_test/index';
export let mod00 = new LazyModule<typeof _mod00>('./mod00/index',__dirname) export let modCompile = new LazyModule<typeof _modCompile>('./mod_compile/index', __dirname);
export let mod01 = new LazyModule<typeof _mod01>('./mod01/index',__dirname) export let modDocs = new LazyModule<typeof _modDocs>('./mod_docs/index', __dirname);
export let mod02 = new LazyModule<typeof _mod02>('./mod02/index',__dirname) export let modTest = new LazyModule<typeof _modTest>('./mod_test/index', __dirname);

View File

@ -1,24 +1,24 @@
import plugins = require('./npmts.plugins') import plugins = require('./npmts.plugins');
// NPMTS Paths // NPMTS Paths
export let npmtsPackageRoot = plugins.path.join(__dirname,'../') export let npmtsPackageRoot = plugins.path.join(__dirname, '../');
// Project paths // Project paths
export let cwd = process.cwd() export let cwd = process.cwd();
// Directories // Directories
export let tsDir = plugins.path.join(cwd,'ts/') export let tsDir = plugins.path.join(cwd, 'ts/');
export let distDir = plugins.path.join(cwd,'dist/') export let distDir = plugins.path.join(cwd, 'dist/');
export let testDir = plugins.path.join(cwd,'test/') export let testDir = plugins.path.join(cwd, 'test/');
export let typingsDir = plugins.path.join(cwd,'ts/typings/') export let typingsDir = plugins.path.join(cwd, 'ts/typings/');
export let coverageDir = plugins.path.join(cwd,'coverage/') export let coverageDir = plugins.path.join(cwd, 'coverage/');
// Pages // Pages
export let pagesDir = plugins.path.join(cwd,'pages/') export let pagesDir = plugins.path.join(cwd, 'pages/');
export let pagesApiDir = plugins.path.join(pagesDir,'/api') export let pagesApiDir = plugins.path.join(pagesDir, '/api');
export let npmtsAssetsDir = plugins.path.join(__dirname,'../assets/') export let npmtsAssetsDir = plugins.path.join(__dirname, '../assets/');
// Files // Files
export let indexTS = plugins.path.join(cwd,'ts/index.ts') export let indexTS = plugins.path.join(cwd, 'ts/index.ts');
export let testTS = plugins.path.join(cwd,'ts/test.ts') export let testTS = plugins.path.join(cwd, 'ts/test.ts');

View File

@ -1,35 +1,36 @@
import 'typings-global' import * as beautylog from 'beautylog';
import * as beautylog from 'beautylog' let depcheck = require('depcheck');
let depcheck = require('depcheck')
import * as lodash from 'lodash' import * as lodash from 'lodash';
import * as npmextra from 'npmextra' import * as npmextra from 'npmextra';
import * as projectinfo from 'projectinfo' 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 '@pushrocks/smartcli';
import * as smarterror from 'smarterror' import * as smarterror from 'smarterror';
import * as smartfile from 'smartfile' import * as smartfile from 'smartfile';
import * as smartpath from 'smartpath' import * as smartpath from 'smartpath';
import * as smartstream from 'smartstream' import * as smartstream from 'smartstream';
import * as smartstring from 'smartstring' import * as smartstring from 'smartstring';
import * as smartsystem from 'smartsystem' import * as smartsystem from 'smartsystem';
import * as through2 from 'through2' import * as smartupdate from 'smartupdate';
import * as through2 from 'through2';
export { export {
beautylog, beautylog,
depcheck, depcheck,
lodash, lodash,
npmextra, npmextra,
projectinfo, projectinfo,
path, path,
smartanalytics, smartanalytics,
smartcli, smartcli,
smarterror, smarterror,
smartfile, smartfile,
smartpath, smartpath,
smartstream, smartstream,
smartstring, smartstring,
smartsystem, smartsystem,
through2 smartupdate,
} through2
};

View File

@ -1,30 +1,31 @@
import * as q from 'smartq' import * as q from 'smartq';
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins';
import { INpmtsConfig } from './npmts.config' import { INpmtsConfig } from './npmts.config';
export let run = (configArg: INpmtsConfig) => { export let run = (configArg: INpmtsConfig) => {
let done = q.defer() let done = q.defer();
let shipString = '' + let shipString =
'\n' + '' +
'\n' + '\n' +
' # # ( )\n' + '\n' +
' ___#_#___|__\n' + ' # # ( )\n' +
' _ |____________| _\n' + ' ___#_#___|__\n' +
' _=====| | | | | |==== _\n' + ' _ |____________| _\n' +
' =====| |.---------------------------. | |====\n' + ' _=====| | | | | |==== _\n' +
" <--------------------' . . . . . . . . '--------------/\n" + ' =====| |.---------------------------. | |====\n' +
' \\ /\n' + " <--------------------' . . . . . . . . '--------------/\n" +
' \\___________________________________________________________/\n' + ' \\ /\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' + ' \\___________________________________________________________/\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' + ' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' ' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
if (process.env.CI) { ' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n';
console.log(shipString) if (process.env.CI) {
plugins.beautylog.success('READY TO SHIP!') console.log(shipString);
} else { plugins.beautylog.success('READY TO SHIP!');
plugins.beautylog.success('Done!') } else {
} plugins.beautylog.success('Done!');
done.resolve(configArg) }
} done.resolve(configArg);
};

View File

@ -1,34 +1,34 @@
import * as q from 'smartq' import * as q from 'smartq';
import * as smartchok from 'smartchok' import * as smartchok from 'smartchok';
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins';
import * as cli from './npmts.cli' import * as cli from './npmts.cli';
import { INpmtsConfig } from './npmts.config' 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;
};

2850
yarn.lock

File diff suppressed because it is too large Load Diff