Compare commits

...

121 Commits

Author SHA1 Message Date
e01ecb9369 7.2.2 2017-07-18 15:13:18 +02:00
fd29434fa6 update dependencies 2017-07-18 15:13:14 +02:00
4684b9616c 7.2.1 2017-07-18 14:54:16 +02:00
a2701bc3be upgrade dependencies 2017-07-18 14:54:06 +02:00
425a86b33c 7.2.0 2017-07-18 14:41:55 +02:00
20631eb0a8 support SHELL PATH distributions in tests 2017-07-18 14:41:49 +02:00
27287d24fb 7.1.9 2017-06-30 18:55:16 +02:00
1b2393c7ed update to latest dependencies 2017-06-30 18:55:14 +02:00
330b0527c5 update to latest dependencies 2017-06-30 17:49:08 +02:00
4485b5bfc6 7.1.8 2017-06-23 16:40:02 +02:00
cf6f636d3e Merge branch 'master' of gitlab.com:gitzone/npmts 2017-06-23 16:39:27 +02:00
37e726a45f 7.1.7 2017-06-23 16:39:04 +02:00
0f0f2dd4ed Fix --nochecks option
See merge request !6
2017-06-21 18:54:29 +00:00
9033eede2c Fix --nochecks option 2017-06-21 18:54:28 +00:00
e65e7da26b 7.1.6 2017-06-17 11:10:55 +02:00
ef5c5eb2b8 update dependencies 2017-06-17 11:10:53 +02:00
ed156e6de8 7.1.5 2017-06-17 10:47:10 +02:00
d889a20572 now allows the setting of a better config for how tests are run 2017-06-17 10:47:07 +02:00
da1ec0329f 7.1.4 2017-06-16 16:12:45 +02:00
95e3f9cb10 add command line options --nochecks and --nocoverage 2017-06-16 16:12:42 +02:00
def19f76e9 7.1.3 2017-06-16 16:08:41 +02:00
455c89d68d add coverage option 2017-06-16 16:08:36 +02:00
2bd187b704 Merge branch 'master' into 'master'
introduce a merge option

See merge request !5
2017-06-15 23:42:52 +00:00
29dff4c0e3 introduce a merge option 2017-06-15 23:42:48 +00:00
f236d77952 7.1.2 2017-06-09 16:25:52 +02:00
c91a8d8e69 add smarterror 2017-06-09 16:25:49 +02:00
0d5c49fe60 7.1.1 2017-05-13 10:55:38 +02:00
2112b4527d remove some old cleanup code 2017-05-13 10:55:35 +02:00
bd3873a359 7.1.0 2017-05-13 10:22:06 +02:00
6ec0ccac34 add sourcemap support for tests 2017-05-13 10:21:55 +02:00
9bff7db97b 7.0.18 2017-05-05 00:23:16 +02:00
2305be0daa update docs and include terminal session. 2017-05-05 00:23:04 +02:00
9cd24695db 7.0.17 2017-05-05 00:01:24 +02:00
46c79e711b now looking for coverage percentage being actually present, fixes #22 2017-05-05 00:01:21 +02:00
4b07c9951f update readme 2017-05-04 23:28:28 +02:00
559b5553eb 7.0.16 2017-05-01 22:43:35 +02:00
87ceed6f8f fix smartgulp 2017-05-01 22:43:32 +02:00
ee36914a42 7.0.15 2017-05-01 20:35:27 +02:00
7dc6cdb250 intermediate fix untel figuring out pathing problems with smartgulp 2017-05-01 20:35:24 +02:00
3ea6585992 7.0.14 2017-04-30 18:22:37 +02:00
0f0592cdaf replace gulp 2017-04-30 18:22:34 +02:00
cf438ae431 7.0.13 2017-04-22 13:00:05 +02:00
6cbf7cedc8 update dependencies 2017-04-22 13:00:02 +02:00
77bba7f865 7.0.12 2017-04-21 19:07:07 +02:00
49fc7e4687 update docs 2017-04-21 19:06:22 +02:00
7ee0c349e3 7.0.11 2017-04-21 13:35:24 +02:00
f706376e48 update to latest dependencies 2017-04-21 13:35:21 +02:00
8d8cdde15d 7.0.10 2017-04-21 00:38:36 +02:00
dc98d893b1 update dependencies 2017-04-21 00:38:32 +02:00
6070249cd2 7.0.9 2017-04-21 00:17:01 +02:00
05ce3e133d update to latest standards 2017-04-21 00:16:57 +02:00
5f5a421453 Merge branch 'master' of gitlab.com:gitzone/npmts 2017-04-21 00:16:24 +02:00
d5d0052ecf 7.0.8 2017-04-17 23:23:54 +02:00
9caa301f40 cli now sets environment variable 2017-04-17 23:23:48 +02:00
5fb2f3a81f 7.0.7 2017-04-17 15:04:04 +02:00
873c7af7a4 update smartanalytics id 2017-04-17 15:03:59 +02:00
5e82218d92 7.0.6 2017-04-17 14:55:44 +02:00
354b1b1bf7 add privacy policy to TypeScript files 2017-04-17 14:55:35 +02:00
467670863a Update README.md capitalization to all lower case. 2017-04-03 20:37:43 +00:00
07195d207d 7.0.5 2017-04-01 21:03:55 +02:00
b60bb25b0f update ci 2017-04-01 21:02:47 +02:00
a7af34622b 7.0.4 2017-04-01 20:58:27 +02:00
9c58be69bf update docs 2017-04-01 20:58:23 +02:00
1681fc729d 7.0.3 2017-03-31 19:18:21 +02:00
50e2895ad9 fix #17, now computing coverage result correctly 2017-03-31 19:18:18 +02:00
95ba650a14 update pages job 2017-03-31 17:02:19 +02:00
83aa10eb52 7.0.2 2017-03-31 16:46:52 +02:00
ebc3cb70ff add support for picking up all .ts files in .test/ 2017-03-31 16:46:48 +02:00
9b595e75cd 7.0.1 2017-03-26 19:24:44 +02:00
4e85589dea now executing tests correctly 2017-03-26 19:24:41 +02:00
2b44f61ace improve README 2017-03-26 11:41:47 +02:00
0928a6d9d2 7.0.0 2017-03-25 21:52:46 +01:00
e464afd544 update dependencies 2017-03-25 21:52:38 +01:00
468d07f5f3 add smartanalytics 2017-03-04 23:44:16 +01:00
ae68ddfaf8 Merge branch 'switch_to_tap' into 'master'
Switch to tap

Closes #16

See merge request !3
2017-03-04 20:49:11 +00:00
ad275d2113 Switch to tap 2017-03-04 20:49:10 +00:00
f99605da8f 6.1.15 2017-02-27 23:52:30 +01:00
508aa23e59 6.1.14 2017-02-27 23:52:04 +01:00
ce7f28404a update projectinfo 2017-02-27 23:52:02 +01:00
237b084411 6.1.14 2017-02-27 23:51:02 +01:00
bc6a7ae1da update projectinfo 2017-02-27 23:50:59 +01:00
31fdd4c0a7 6.1.13 2017-02-27 22:19:22 +01:00
c820350bb6 updated dependencies 2017-02-27 22:19:14 +01:00
92bf6d7bab fix README 2017-02-05 11:33:44 +01:00
e77bece3fc fix README 2017-02-05 11:32:50 +01:00
df96486d2f 6.1.12 2017-02-05 11:27:38 +01:00
980db3eb28 fix git links 2017-02-05 11:15:36 +01:00
34d3d4d963 fix README 2017-02-05 11:14:25 +01:00
a3c02cad4e update README to reflect gitzone 2017-02-05 10:15:26 +01:00
a12190638d 6.1.11 2017-02-02 21:48:12 +01:00
f2a36e7a45 update README 2017-02-02 21:48:09 +01:00
60c025e638 6.1.10 2017-02-02 20:57:52 +01:00
5d16734c00 shift to push.rocks brand 2017-02-02 20:57:46 +01:00
65fe421de1 6.1.9 2017-01-21 23:23:03 +01:00
d94d66ef19 update beautylog 2017-01-21 23:23:00 +01:00
3e4ac03a63 6.1.8 2017-01-21 20:45:35 +01:00
0948fa806c update deps 2017-01-21 20:45:32 +01:00
53980160df 6.1.7 2017-01-21 19:59:22 +01:00
886f1ae6f4 update dependencies 2017-01-21 19:59:20 +01:00
4602e7e3c9 6.1.6 2017-01-21 19:37:32 +01:00
1dbb5f6f36 update dependencies 2017-01-21 19:37:29 +01:00
1023bf9f3c 6.1.5 2017-01-20 18:42:05 +01:00
78bebcda25 fix testing for rxjs 2017-01-20 18:38:02 +01:00
74deee70a3 6.1.4 2017-01-18 01:04:22 +01:00
019864a484 remove shelljs 2017-01-18 01:04:19 +01:00
80db0fc581 6.1.3 2017-01-18 00:58:16 +01:00
9a25b4ef91 remove q in favour of smartq 2017-01-18 00:58:09 +01:00
9f42a20e4b Merge branch 'master' into 'master'
add ES2015.iterable

See merge request !1
2017-01-17 17:42:21 +00:00
dbb8fd0fff add ES2015.iterable 2017-01-17 16:47:19 +01:00
4368713ad5 6.1.2 2017-01-15 21:45:12 +01:00
58cea5cb48 fix lib inclusion for tests 2017-01-15 21:45:08 +01:00
329e0dc101 6.1.1 2017-01-15 20:12:26 +01:00
da45d002a3 some fixes for es5 transpilation 2017-01-15 20:12:12 +01:00
59e811247f remove unused dep 2017-01-15 20:06:07 +01:00
7bcd2f4f5d 6.1.0 2017-01-15 20:01:15 +01:00
78d77c003c remove babel and instead use typescript 2017-01-15 20:01:10 +01:00
aca85d2ff3 6.0.0 2017-01-15 14:32:32 +01:00
f03c4a45c2 remove TypeDoc 2017-01-15 14:32:28 +01:00
faf55e4e31 5.5.12 2016-12-18 23:14:01 +01:00
b78fe35e88 5.5.11 2016-12-18 21:35:37 +01:00
7ab4561727 add new npmpage 2016-12-18 21:35:23 +01:00
67 changed files with 7076 additions and 901 deletions

View File

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

View File

@ -1,4 +1,3 @@
.idea/
compile/ compile/
coverage/ coverage/
test/ test/

View File

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

View File

@ -1,44 +0,0 @@
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
## Availabililty
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmts)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmts)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/)
## Status for master
[![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![coverage report](https://gitlab.com/pushrocks/npmts/badges/master/coverage.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![docker pulls](https://img.shields.io/docker/pulls/hosttoday/ht-docker-node.svg)](https://hub.docker.com/r/hosttoday/ht-docker-node/)
[![Dependency Status](https://david-dm.org/pushrocks/npmts.svg)](https://david-dm.org/pushrocks/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/npmts/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/npmts/badges/code.svg)](https://www.bithound.io/github/pushrocks/npmts)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Introduction
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
npmts will
1. check your dependencies and package.json
1. transpile your code with tsc,
1. document your code with typedoc,
1. test your code with mocha
1. create coverage with istanbul
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the docs:
1. [Intro](https://pushrocks.gitlab.io/npmts/index.html)
2. [Install](https://pushrocks.gitlab.io/npmts/install.html)
3. [Default Behaviour](https://pushrocks.gitlab.io/npmts/default.html)
4. [Configuration](https://pushrocks.gitlab.io/npmts/config.html)
5. [Examples](https://pushrocks.gitlab.io/npmts/examples.html)
6. [Info](https://pushrocks.gitlab.io/npmts/info.html)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

View File

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

3
dist/index.js vendored
View File

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

View File

@ -1,4 +1,2 @@
/// <reference types="q" />
import * as q from 'q';
import { INpmtsConfig } from '../npmts.config'; import { INpmtsConfig } from '../npmts.config';
export declare let run: (configArg: INpmtsConfig) => q.Promise<INpmtsConfig>; export declare let run: (configArg: INpmtsConfig) => Promise<INpmtsConfig>;

10
dist/mod00/index.js vendored
View File

@ -1,16 +1,18 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* ------------------------------------------ /* ------------------------------------------
* This module compiles TypeScript files * This module compiles the module's TypeScript files
* Note: Test files are only compiled in memory
* -------------------------------------------- */ * -------------------------------------------- */
const q = require("q"); const q = require("smartq");
const npmts_log_1 = require("../npmts.log"); const plugins = require("./mod00.plugins");
const NpmtsAssets = require("./mod00.assets"); const NpmtsAssets = require("./mod00.assets");
const NpmtsCheck = require("./mod00.check"); const NpmtsCheck = require("./mod00.check");
const NpmtsClean = require("./mod00.clean"); const NpmtsClean = require("./mod00.clean");
const NpmtsCompile = require("./mod00.compile"); const NpmtsCompile = require("./mod00.compile");
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
npmts_log_1.npmtsOra.text('starting TypeScript Compilation'); plugins.beautylog.ora.text('starting TypeScript Compilation');
NpmtsClean.run(configArg) NpmtsClean.run(configArg)
.then(NpmtsCheck.run) .then(NpmtsCheck.run)
.then(NpmtsCompile.run) .then(NpmtsCompile.run)

View File

@ -1,3 +1 @@
/// <reference types="q" /> export declare let run: (configArg: any) => Promise<{}>;
import * as q from 'q';
export declare var run: (configArg: any) => q.Promise<{}>;

View File

@ -1,13 +1,13 @@
"use strict"; "use strict";
const q = require("q"); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const npmts_log_1 = require("../npmts.log");
const plugins = require("./mod00.plugins"); const plugins = require("./mod00.plugins");
const mod00_check_1 = require("../mod00/mod00.check"); const mod00_check_1 = require("../mod00/mod00.check");
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
let config = configArg; let config = configArg;
npmts_log_1.npmtsOra.text('now looking at ' + 'required assets'.yellow); 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 = mod00_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'));

View File

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

View File

@ -1,12 +1,20 @@
"use strict"; "use strict";
const q = require("q"); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const projectinfo_1 = require("projectinfo"); const projectinfo_1 = require("projectinfo");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const npmts_log_1 = require("../npmts.log");
const plugins = require("./mod00.plugins"); const plugins = require("./mod00.plugins");
let checkProjectTypings = (configArg) => { let checkProjectTypings = (configArg) => {
let done = q.defer(); let done = q.defer();
npmts_log_1.npmtsOra.text('Check Module: Check Project Typings...'); plugins.beautylog.ora.text('Check Module: Check Project Typings...');
exports.projectInfo = new projectinfo_1.ProjectinfoNpm(paths.cwd); exports.projectInfo = new projectinfo_1.ProjectinfoNpm(paths.cwd);
if (typeof exports.projectInfo.packageJson.typings === 'undefined') { if (typeof exports.projectInfo.packageJson.typings === 'undefined') {
plugins.beautylog.error(`please add typings field to package.json`); plugins.beautylog.error(`please add typings field to package.json`);
@ -32,7 +40,7 @@ const depcheckOptions = {
}; };
let checkDependencies = (configArg) => { let checkDependencies = (configArg) => {
let done = q.defer(); let done = q.defer();
npmts_log_1.npmtsOra.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: [
'test', 'test',
@ -56,11 +64,11 @@ let checkDependencies = (configArg) => {
process.exit(1); process.exit(1);
} }
for (let item in unused.invalidFiles) { for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`); plugins.beautylog.warn(`Watch out: could not parse file ${item}`);
} }
; ;
for (let item in unused.invalidDirs) { for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`); plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
} }
done.resolve(configArg); done.resolve(configArg);
}); });
@ -68,7 +76,7 @@ let checkDependencies = (configArg) => {
}; };
let checkDevDependencies = (configArg) => { let checkDevDependencies = (configArg) => {
let done = q.defer(); let done = q.defer();
npmts_log_1.npmtsOra.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: [
'ts', 'ts',
@ -82,20 +90,20 @@ let checkDevDependencies = (configArg) => {
}); });
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.red}`); plugins.beautylog.log(`unused devDependency ${item}`);
} }
for (let item in unused.missing) { for (let item in unused.missing) {
plugins.beautylog.error(`unused devDependency ${item.red}`); plugins.beautylog.error(`missing devDependency ${item}`);
} }
if (unused.missing.length > 0) { if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json'); plugins.beautylog.info('exiting due to missing dependencies in package.json');
process.exit(1); process.exit(1);
} }
for (let item in unused.invalidFiles) { for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`); plugins.beautylog.warn(`Watch out: could not parse file ${item}`);
} }
for (let item in unused.invalidDirs) { for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`); plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
} }
done.resolve(configArg); done.resolve(configArg);
}); });
@ -103,18 +111,21 @@ let checkDevDependencies = (configArg) => {
}; };
let checkNodeVersion = (configArg) => { let checkNodeVersion = (configArg) => {
let done = q.defer(); let done = q.defer();
npmts_log_1.npmtsOra.text('checking node version'); plugins.beautylog.ora.text('checking node version');
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: ...');
npmts_log_1.npmtsOra.text('Check Module: ...'); 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); }); }
return done.promise; else {
}; configArg = yield checkProjectTypings(configArg);
return configArg;
}
});

View File

@ -1,3 +1 @@
/// <reference types="q" /> export declare let run: (configArg: any) => Promise<{}>;
import * as q from 'q';
export declare let run: (configArg: any) => q.Promise<{}>;

View File

@ -1,38 +1,26 @@
"use strict"; "use strict";
const q = require("q"); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const npmts_log_1 = require("../npmts.log");
const plugins = require("./mod00.plugins"); const plugins = require("./mod00.plugins");
/** /**
* removes the dist directory which will be entirely rebuild * removes the dist directory which will be entirely rebuild
*/ */
let removeDist = function () { let removeDist = function () {
npmts_log_1.npmtsOra.text('cleaning dist folder'); plugins.beautylog.ora.text('cleaning dist folder');
return plugins.smartfile.fs.remove(paths.distDir); return plugins.smartfile.fs.remove(paths.distDir);
}; };
/**
* remove .d.ts files from testDirctory
*/
let removeTestDeclarations = function () {
let done = q.defer();
plugins.smartfile.fs.listFileTree('./test/', '**/*.d.ts').then(fileArray => {
let fileArrayToRemove = plugins.smartpath.transform.toAbsolute(fileArray, process.cwd() + '//test/');
plugins.smartfile.fs.removeManySync(fileArrayToRemove);
done.resolve();
});
};
/** /**
* remove old pages * remove old pages
*/ */
let removePages = function () { let removePages = function () {
npmts_log_1.npmtsOra.text('cleaning pages folder'); plugins.beautylog.ora.text('cleaning pages folder');
return plugins.smartfile.fs.remove(paths.pagesDir); return plugins.smartfile.fs.remove(paths.pagesDir);
}; };
exports.run = function (configArg) { exports.run = function (configArg) {
npmts_log_1.npmtsOra.text('cleaning up from previous builds...'); plugins.beautylog.ora.text('cleaning up from previous builds...');
let done = q.defer(); let done = q.defer();
removeDist() removeDist()
.then(removeTestDeclarations)
.then(removePages) .then(removePages)
.then(function () { .then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!'); plugins.beautylog.ok('Cleaned up from previous builds!');

View File

@ -1,3 +1 @@
/// <reference types="q" /> export declare let run: (configArg: any) => Promise<{}>;
import * as q from 'q';
export declare let run: (configArg: any) => q.Promise<{}>;

View File

@ -1,20 +1,15 @@
"use strict"; "use strict";
const q = require("q"); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const npmts_log_1 = require("../npmts.log");
const plugins = require("./mod00.plugins"); const plugins = require("./mod00.plugins");
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
let config = configArg; let config = configArg;
npmts_log_1.npmtsOra.text('now compiling ' + 'TypeScript'.yellow); 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 main TypeScript!'); plugins.beautylog.ok(`compiled the module's TypeScript!`);
plugins.beautylog.log('now compiling tests!');
return plugins.tsn.compileGlobStringObject(config.testTs, config.tsOptions, paths.cwd);
})
.then(function () {
plugins.beautylog.ok('compiled all 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,6 +1,5 @@
export * from '../npmts.plugins'; export * from '../npmts.plugins';
import * as tsn from 'tsn'; import * as tsn from 'tsn';
import * as shelljs from 'shelljs';
import * as smartchok from 'smartchok'; import * as smartchok from 'smartchok';
import * as smartstream from 'smartstream'; import * as smartstream from 'smartstream';
export { tsn, shelljs, smartchok, smartstream }; export { tsn, smartchok, smartstream };

View File

@ -2,11 +2,10 @@
function __export(m) { function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
} }
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("../npmts.plugins")); __export(require("../npmts.plugins"));
const tsn = require("tsn"); const tsn = require("tsn");
exports.tsn = tsn; exports.tsn = tsn;
const shelljs = require("shelljs");
exports.shelljs = shelljs;
const smartchok = require("smartchok"); const smartchok = require("smartchok");
exports.smartchok = smartchok; exports.smartchok = smartchok;
const smartstream = require("smartstream"); const smartstream = require("smartstream");

View File

@ -1,4 +1,2 @@
/// <reference types="q" />
import * as q from 'q';
import { INpmtsConfig } from '../npmts.config'; import { INpmtsConfig } from '../npmts.config';
export declare let run: (configArg: INpmtsConfig) => q.Promise<INpmtsConfig>; export declare let run: (configArg: INpmtsConfig) => Promise<INpmtsConfig>;

49
dist/mod01/index.js vendored
View File

@ -1,54 +1,11 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* ------------------------------------------ /* ------------------------------------------
* This module creates TypeScript documentation * This module creates TypeScript documentation
* -------------------------------------------- */ * -------------------------------------------- */
const q = require("q"); const q = require("smartq");
const paths = require("../npmts.paths");
const npmts_log_1 = require("../npmts.log");
const plugins = require("./mod01.plugins");
const mod00_check_1 = require("../mod00/mod00.check");
let genTypeDoc = function (configArg) {
let done = q.defer();
npmts_log_1.npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow);
plugins.beautylog.log('TypeDoc Output:');
let localSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts')),
plugins.gulpTypedoc({
// TypeScript options (see typescript docs)
module: 'commonjs',
target: 'es6',
includeDeclarations: true,
// Output options (see typedoc docs)
out: paths.pagesApiDir,
json: plugins.path.join(paths.pagesApiDir, 'file.json'),
// TypeDoc options (see typedoc docs)
name: mod00_check_1.projectInfo.name,
readme: plugins.path.join(paths.cwd, 'README.md'),
// theme: "default",
version: true
})
]);
localSmartstream.run().then(() => {
plugins.beautylog.ok('TypeDoc documentation generated!');
done.resolve(configArg);
}, (err) => {
plugins.beautylog.warn('TypeDoc documentation generation failed!');
console.log(err);
done.resolve(configArg);
});
return done.promise;
};
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
if (configArg.docs) { done.resolve(configArg);
genTypeDoc(configArg)
.then(() => {
done.resolve(configArg);
});
}
else {
done.resolve(configArg);
}
;
return done.promise; return done.promise;
}; };

View File

@ -1,4 +1 @@
export * from '../npmts.plugins'; export * from '../npmts.plugins';
import * as gulp from 'gulp';
declare let gulpTypedoc: any;
export { gulp, gulpTypedoc };

View File

@ -2,8 +2,5 @@
function __export(m) { function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
} }
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("../npmts.plugins")); __export(require("../npmts.plugins"));
const gulp = require("gulp");
exports.gulp = gulp;
let gulpTypedoc = require('gulp-typedoc');
exports.gulpTypedoc = gulpTypedoc;

View File

@ -1,4 +1,2 @@
/// <reference types="q" />
import * as q from 'q';
import { INpmtsConfig } from '../npmts.config'; import { INpmtsConfig } from '../npmts.config';
export declare let run: (configArg: INpmtsConfig) => q.Promise<INpmtsConfig>; export declare let run: (configArg: INpmtsConfig) => Promise<INpmtsConfig>;

172
dist/mod02/index.js vendored
View File

@ -1,107 +1,131 @@
"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 });
/* ------------------------------------------ /* ------------------------------------------
* This module tests the compiled TypeScript files * This module tests the compiled TypeScript files
* -------------------------------------------- */ * -------------------------------------------- */
const plugins = require("./mod02.plugins"); const plugins = require("./mod02.plugins");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const q = require("q"); const q = require("smartq");
const npmts_log_1 = require("../npmts.log");
/** /**
* runs mocha * runs mocha
* @returns INpmtsConfig * @returns INpmtsConfig
*/ */
let mocha = function (configArg) { let tap = function (configArg) {
npmts_log_1.npmtsOra.text('Instrumentalizing and testing transpiled JS');
npmts_log_1.npmtsOra.end(); // end npmtsOra for tests.
let done = q.defer(); let done = q.defer();
let coverageSmartstream = new plugins.smartstream.Smartstream([ /**
plugins.gulp.src([plugins.path.join(paths.cwd, './dist/**/*.js')]), * 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.gulpSourcemaps.init(),
plugins.gulpBabel({ plugins.gulpTypeScript({
presets: [ target: 'ES5',
require.resolve('babel-preset-es2015') emitDecoratorMetadata: true,
] experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}), }),
plugins.gulpIstanbul({}), 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(),
plugins.gulpInjectModules(), npmtsTapBuffer.pipeTestableFiles(),
plugins.through2.obj((file, enc, cb) => { plugins.smartstream.cleanPipe()
cb();
}, (cb) => {
cb();
})
]); ]);
let localSmartstream = new plugins.smartstream.Smartstream([ /**
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]), * handle the test files
plugins.gulpBabel({ */
presets: [ let testFilesSmartstream = new plugins.smartstream.Smartstream([
require.resolve('babel-preset-es2015') 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.gulpInjectModules(), plugins.gulpSourcemaps.write(),
plugins.gulpMocha(), npmtsTapBuffer.pipeTestFiles(),
plugins.gulpIstanbul.writeReports({ plugins.smartstream.cleanPipe()
dir: plugins.path.join(paths.cwd, './coverage'),
reporters: ['lcovonly', 'json', 'text', 'text-summary']
})
]); ]);
coverageSmartstream.run() // lets run the smartstream
.then(() => { Promise.all([
plugins.beautylog.info('code is now transpiled to ES5, instrumented with istanbul, and injected for mocha!'); testableFilesSmartstream.run(),
return localSmartstream.run() testFilesSmartstream.run()
.then(() => { done.resolve(configArg); }, (err) => { ]).then(() => __awaiter(this, void 0, void 0, function* () {
plugins.beautylog.error('Tests failed!'); configArg.runData.coverageLcovInfo = yield npmtsTapBuffer.runTests();
console.log(err); done.resolve(configArg);
if (configArg.watch) { }), (err) => {
done.resolve(configArg); plugins.beautylog.error('Tests failed!');
}
else {
process.exit(1);
}
});
}, (err) => {
console.log(err); console.log(err);
}); if (configArg.watch) {
return done.promise; done.resolve(configArg);
};
let coverage = function (configArg) {
let done = q.defer();
plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2)
.then(function (percentageArg) {
if (percentageArg >= configArg.coverageTreshold) {
plugins.beautylog.ok(`${percentageArg.toString()}% `
+ `coverage exceeds your treshold of `
+ `${configArg.coverageTreshold.toString()}%`);
} }
else { else {
plugins.beautylog.warn(`${percentageArg.toString()}% ` process.exit(1);
+ `coverage fails your treshold of `
+ `${configArg.coverageTreshold.toString()}%`);
plugins.beautylog.error('exiting due to coverage failure');
if (!configArg.watch) {
process.exit(1);
}
} }
done.resolve(configArg);
}); });
return done.promise; return done.promise;
}; };
let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function* () {
let coverageResult = 0; // the coverage in percent
if (configArg.runData.coverageLcovInfo) {
coverageResult = yield plugins.smartcov.get.percentageFromLcovString(configArg.runData.coverageLcovInfo, 2);
}
else {
plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?');
}
if (coverageResult >= configArg.coverageTreshold) {
plugins.beautylog.ok(`${(coverageResult).toString()}% `
+ `coverage exceeds your treshold of `
+ `${configArg.coverageTreshold.toString()}%`);
}
else {
plugins.beautylog.warn(`${(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;
});
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
let config = configArg; let config = configArg;
if (config.test === true) { if (config.test === true) {
npmts_log_1.npmtsOra.text('now starting tests'); plugins.beautylog.ora.text('now starting tests');
plugins.beautylog.log('------------------------------------------------------\n' + plugins.beautylog.ora.end();
'*************************** TESTS: ***************************\n' + plugins.beautylog.log('ready for tapbuffer:');
'--------------------------------------------------------------'); if (configArg.coverage) {
mocha(config) tap(config)
.then(coverage) .then(handleCoverageData)
.then(() => { .then(() => {
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); }).catch(err => { console.log(err); });
}
else {
tap(config)
.then(() => {
done.resolve(config);
}).catch(err => { console.log(err); });
}
} }
else { else {
npmts_log_1.npmtsOra.end(); plugins.beautylog.ora.end();
done.resolve(config); done.resolve(config);
} }
return done.promise; return done.promise;

View File

@ -1,9 +1,8 @@
export * from '../npmts.plugins'; export * from '../npmts.plugins';
import * as gulp from 'gulp';
import * as gulpBabel from 'gulp-babel';
import * as gulpIstanbul from 'gulp-istanbul';
import * as gulpFunction from 'gulp-function'; import * as gulpFunction from 'gulp-function';
declare let gulpInjectModules: any;
import * as gulpMocha from 'gulp-mocha';
import * as gulpSourcemaps from 'gulp-sourcemaps'; import * as gulpSourcemaps from 'gulp-sourcemaps';
export { gulp, gulpBabel, gulpIstanbul, gulpFunction, gulpInjectModules, gulpMocha, gulpSourcemaps }; 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

@ -2,18 +2,17 @@
function __export(m) { function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
} }
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("../npmts.plugins")); __export(require("../npmts.plugins"));
const gulp = require("gulp");
exports.gulp = gulp;
const gulpBabel = require("gulp-babel");
exports.gulpBabel = gulpBabel;
const gulpIstanbul = require("gulp-istanbul");
exports.gulpIstanbul = gulpIstanbul;
const gulpFunction = require("gulp-function"); const gulpFunction = require("gulp-function");
exports.gulpFunction = gulpFunction; exports.gulpFunction = gulpFunction;
let gulpInjectModules = require('gulp-inject-modules');
exports.gulpInjectModules = gulpInjectModules;
const gulpMocha = require("gulp-mocha");
exports.gulpMocha = gulpMocha;
const gulpSourcemaps = require("gulp-sourcemaps"); const gulpSourcemaps = require("gulp-sourcemaps");
exports.gulpSourcemaps = gulpSourcemaps; exports.gulpSourcemaps = gulpSourcemaps;
const gulpTypeScript = require("gulp-typescript");
exports.gulpTypeScript = gulpTypeScript;
const smartcov = require("smartcov");
exports.smartcov = smartcov;
const smartgulp = require("smartgulp");
exports.smartgulp = smartgulp;
const tapbuffer = require("tapbuffer");
exports.tapbuffer = tapbuffer;

4
dist/npmts.cli.d.ts vendored
View File

@ -1,3 +1 @@
/// <reference types="q" /> export declare let run: () => Promise<{}>;
import * as q from 'q';
export declare let run: () => q.Promise<{}>;

19
dist/npmts.cli.js vendored
View File

@ -1,12 +1,25 @@
"use strict"; "use strict";
const q = require("q"); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
const paths = require("./npmts.paths"); const paths = require("./npmts.paths");
const NpmtsConfig = require("./npmts.config"); const NpmtsConfig = require("./npmts.config");
const NpmtsMods = require("./npmts.mods"); const NpmtsMods = require("./npmts.mods");
const NpmtsWatch = require("./npmts.watch"); const NpmtsWatch = require("./npmts.watch");
const NpmtsShip = require("./npmts.ship"); const NpmtsShip = require("./npmts.ship");
const npmts_log_1 = require("./npmts.log"); /**
* smartanalytics
* this data is fully anonymized (no Ips or any other personal information is tracked).
* It just keeps track which of our tools are really used...
* ... so we know where to spend our limited resources for improving them.
* Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore
* Feel free to dig into the smartanalytics package, if you are interested in how it works.
* It is just an https call to Google Analytics.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts', 'UA-64087619-5');
npmtsAnalytics.sendEvent('npm', 'exec', 'git.zone');
exports.run = () => { exports.run = () => {
let done = q.defer(); let done = q.defer();
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot); let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot);
@ -19,7 +32,7 @@ exports.run = () => {
}) })
.then((configArg) => { .then((configArg) => {
let done = q.defer(); let done = q.defer();
npmts_log_1.npmtsOra.start('loading additional modules...'); plugins.beautylog.ora.start('loading additional modules...');
NpmtsMods.mod00.load() NpmtsMods.mod00.load()
.then((mod00) => { .then((mod00) => {
return mod00.run(configArg); return mod00.run(configArg);

View File

@ -1,15 +1,25 @@
/// <reference types="q" /> /**
import * as q from 'q'; * specifies the different modes available
export declare type npmtsMode = 'default' | 'custom'; * default -> uses default options no matterm what
* merge -> uses merged default + custom options
* custom -> only uses specified options
*/
export declare type npmtsMode = 'default' | 'custom' | 'merge';
export interface INpmtsConfig { export interface INpmtsConfig {
argv: any; argv: any;
coverage: boolean;
coverageTreshold: number; coverageTreshold: number;
docs: boolean; checkDependencies: boolean;
mode: npmtsMode; mode: npmtsMode;
test: boolean; test: boolean;
testTs: any; testTs: any;
testConfig: any;
ts: any; ts: any;
tsOptions: any; tsOptions: any;
watch: boolean; watch: boolean;
runData: {
coverageLcovInfo?: string;
coverageResult?: number;
};
} }
export declare var run: (argvArg: any) => q.Promise<{}>; export declare let run: (argvArg: any) => Promise<{}>;

33
dist/npmts.config.js vendored
View File

@ -1,24 +1,28 @@
"use strict"; "use strict";
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("q"); const q = require("smartq");
const npmts_log_1 = require("./npmts.log");
;
exports.run = function (argvArg) { exports.run = function (argvArg) {
let done = q.defer(); let done = q.defer();
let defaultConfig = { let defaultConfig = {
argv: undefined, argv: undefined,
coverage: true,
coverageTreshold: 70, coverageTreshold: 70,
docs: true, checkDependencies: true,
mode: 'default', mode: 'default',
test: true, test: true,
testTs: {}, testTs: {},
testConfig: {
parallel: true
},
ts: {}, ts: {},
tsOptions: {}, tsOptions: {},
watch: false watch: false,
runData: {}
}; };
// mix with configfile // mix with configfile
npmts_log_1.npmtsOra.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 = localNpmextra.dataFor('npmts', defaultConfig); let config = localNpmextra.dataFor('npmts', defaultConfig);
// add argv // add argv
@ -27,16 +31,16 @@ exports.run = function (argvArg) {
switch (config.mode) { switch (config.mode) {
case 'default': case 'default':
case 'custom': case 'custom':
case 'merge':
plugins.beautylog.ok('mode is ' + config.mode); plugins.beautylog.ok('mode is ' + config.mode);
done.resolve(config); done.resolve(config);
break; break;
default: default:
plugins.beautylog.error(`mode not recognised!`); plugins.beautylog.error(`mode not recognised! Can be default or custom`);
process.exit(1); process.exit(1);
} }
;
// handle default mode // handle default mode
if (config.mode === 'default') { if (config.mode === 'default' || config.mode === 'merge') {
config.ts = { config.ts = {
'./ts/**/*.ts': './dist/' './ts/**/*.ts': './dist/'
}; };
@ -44,20 +48,19 @@ exports.run = function (argvArg) {
'./test/**/*.ts': './test/' './test/**/*.ts': './test/'
}; };
} }
;
// mix with commandline // mix with commandline
if (config.argv.notest) { if (config.argv.notest) {
config.test = false; config.test = false;
} }
; if (config.argv.nocoverage) {
if (config.argv.nodocs) { config.coverage = false;
config.docs = false; }
if (config.argv.nochecks) {
config.checkDependencies = false;
} }
;
if (config.argv.watch) { if (config.argv.watch) {
config.watch = true; config.watch = true;
} }
;
plugins.beautylog.ok('build options are ready!'); plugins.beautylog.ok('build options are ready!');
done.resolve(config); done.resolve(config);
return done.promise; return done.promise;

2
dist/npmts.log.d.ts vendored
View File

@ -1,2 +0,0 @@
import { Ora } from 'beautylog';
export declare let npmtsOra: Ora;

3
dist/npmts.log.js vendored
View File

@ -1,3 +0,0 @@
"use strict";
const beautylog_1 = require("beautylog");
exports.npmtsOra = new beautylog_1.Ora('setting up TaskChain', 'cyan');

1
dist/npmts.mods.js vendored
View File

@ -1,4 +1,5 @@
"use strict"; "use strict";
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.mod00 = new smartsystem_1.LazyModule('./mod00/index', __dirname);
exports.mod01 = new smartsystem_1.LazyModule('./mod01/index', __dirname); exports.mod01 = new smartsystem_1.LazyModule('./mod01/index', __dirname);

1
dist/npmts.paths.js vendored
View File

@ -1,4 +1,5 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
// NPMTS Paths // NPMTS Paths
exports.npmtsPackageRoot = plugins.path.join(__dirname, '../'); exports.npmtsPackageRoot = plugins.path.join(__dirname, '../');

View File

@ -5,14 +5,13 @@ 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 smartcli from 'smartcli'; import * as smartcli from 'smartcli';
import * as smartcov from 'smartcov'; import * as smarterror from 'smarterror';
import * as smartenv from 'smartenv';
import * as smartfile from 'smartfile'; import * as smartfile from 'smartfile';
import * as smartpath from 'smartpath'; import * as smartpath from 'smartpath';
import * as smartstream from 'smartstream'; import * as smartstream from 'smartstream';
import * as smartstring from 'smartstring'; import * as smartstring from 'smartstring';
import * as smartsystem from 'smartsystem'; import * as smartsystem from 'smartsystem';
import * as through2 from 'through2'; import * as through2 from 'through2';
export declare let sourceMapSupport: any; export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartanalytics, smartcli, smarterror, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 };
export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartcli, smartcov, smartenv, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 };

10
dist/npmts.plugins.js vendored
View File

@ -1,4 +1,5 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
require("typings-global"); require("typings-global");
const beautylog = require("beautylog"); const beautylog = require("beautylog");
exports.beautylog = beautylog; exports.beautylog = beautylog;
@ -12,12 +13,12 @@ const projectinfo = require("projectinfo");
exports.projectinfo = projectinfo; exports.projectinfo = projectinfo;
const path = require("path"); const path = require("path");
exports.path = path; exports.path = path;
const smartanalytics = require("smartanalytics");
exports.smartanalytics = smartanalytics;
const smartcli = require("smartcli"); const smartcli = require("smartcli");
exports.smartcli = smartcli; exports.smartcli = smartcli;
const smartcov = require("smartcov"); const smarterror = require("smarterror");
exports.smartcov = smartcov; exports.smarterror = smarterror;
const smartenv = require("smartenv");
exports.smartenv = smartenv;
const smartfile = require("smartfile"); const smartfile = require("smartfile");
exports.smartfile = smartfile; exports.smartfile = smartfile;
const smartpath = require("smartpath"); const smartpath = require("smartpath");
@ -30,4 +31,3 @@ const smartsystem = require("smartsystem");
exports.smartsystem = smartsystem; exports.smartsystem = smartsystem;
const through2 = require("through2"); const through2 = require("through2");
exports.through2 = through2; exports.through2 = through2;
exports.sourceMapSupport = require('source-map-support').install(); // display errors correctly during testing

3
dist/npmts.ship.js vendored
View File

@ -1,5 +1,6 @@
"use strict"; "use strict";
const q = require("q"); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
exports.run = (configArg) => { exports.run = (configArg) => {
let done = q.defer(); let done = q.defer();

View File

@ -1,4 +1,2 @@
/// <reference types="q" />
import * as q from 'q';
import { INpmtsConfig } from './npmts.config'; import { INpmtsConfig } from './npmts.config';
export declare let run: (configArg: INpmtsConfig) => q.Promise<{}>; export declare let run: (configArg: INpmtsConfig) => Promise<{}>;

3
dist/npmts.watch.js vendored
View File

@ -1,5 +1,6 @@
"use strict"; "use strict";
const q = require("q"); Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const smartchok = require("smartchok"); const smartchok = require("smartchok");
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
const cli = require("./npmts.cli"); const cli = require("./npmts.cli");

9
docs/00footer.md Normal file
View File

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

View File

@ -1,5 +1,8 @@
# Configuration of NPMTS ---
npmts can be configured to your needs: name: config
---
# Configuration
npmts can be configured to your needs.
### npmextra.json ### 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.
@ -20,7 +23,6 @@ with default behaviour.
```json ```json
{ {
"mode":"custom", "mode":"custom",
"docs":false,
"test":true, "test":true,
"npmts":{ "npmts":{
"ts":{ "ts":{
@ -38,7 +40,6 @@ with default behaviour.
| key | default value | description | | key | default value | description |
| --- | --- | --- | | --- | --- | --- |
| `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify | | `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify |
| `"docs"` | `true` | create docs for your module |
| `"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 |
@ -63,11 +64,6 @@ This is in line with the latest TypeScript best practices.
You can then import plugins via the TypeScript `import` Syntax 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.
### TypeDoc
By default TypeDoc will create docs for your module in `./pages/api/` directory.
> Note: Use [npmpage](https://www.npmjs.com/package/npmpage) to build a website for the module.
It also allows you to integrate api docs with a gitbook located in `./docs/`
## 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.

View File

@ -1,8 +1,11 @@
# Default task execution of npmts ---
name: Default Behaviour
---
# Default Behaviour
when you don't configure it otherwise.
1. **Config:** Check config in ./npmextra.json (Check out [npmextra](https://www.npmjs.com/package/npmextra)) 1. **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. **Documentation:** Create TypeDoc Documentation from TypeScript files 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:** Babelify ES6 to ES5 on the fly, instrumentalize ES5 JavaScript with istanbul and run tests with Mocha.

View File

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

View File

@ -1,42 +1,45 @@
---
name: Start
---
# npmts # npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6. Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
## Availabililty ## Availabililty
[![npm](https://push.rocks/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://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmts) [![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmts) [![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/gitbook) [![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/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master) [![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://gitlab.com/pushrocks/npmts/badges/master/coverage.svg)](https://gitlab.com/pushrocks/npmts/commits/master) [![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![Dependency Status](https://david-dm.org/pushrocks/npmts.svg)](https://david-dm.org/pushrocks/npmts) [![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/npmts/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/npmts/master/dependencies/npm) [![Dependency Status](https://david-dm.org/gitzonetools/npmts.svg)](https://david-dm.org/gitzonetools/npmts)
[![bitHound Code](https://www.bithound.io/github/pushrocks/npmts/badges/code.svg)](https://www.bithound.io/github/pushrocks/npmts) [![bitHound Dependencies](https://www.bithound.io/github/gitzonetools/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzonetools/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzonetools/npmts/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmts)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![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/)
## Introduction ## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript. NPMTS 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 1. check your dependencies and package.json (unused, missing, updates, security)
1. transpile your code with tsc, 1. transpile your code with tsc,
1. document your code with typedoc, 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 mocha 1. create coverage with istanbul (supports tracing of the originating TypeScript)
1. create coverage with istanbul
For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer).
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze: This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/) [hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the docs: > MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
* [1. Intro](https://pushrocks.gitlab.io/npmts/gitbook/index.md) | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
* [2. Install](https://pushrocks.gitlab.io/npmts/gitbook/install.md)
* [3. Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.md)
* [4. Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.md)
* [5. Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.md)
* [6. Info](https://pushrocks.gitlab.io/npmts/gitbook/info.md)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) [![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https:/git.zone)

View File

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

View File

@ -1,5 +1,5 @@
# Install npmts # Install npmts
First install npmts globally, then install the npmts-g locally. Get started with TypeScript awesomeness.
> **npmts-g* checks if the global version of npmts suffices the modules requirements. > **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.

View File

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

2826
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{ {
"name": "npmts", "name": "npmts",
"version": "5.5.10", "version": "7.2.2",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.", "description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {
@ -14,14 +14,14 @@
"setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)", "setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
"typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)", "typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)",
"npmpage": "(npmpage)", "npmpage": "(npmpage)",
"check": "(cd test && npm install && node ../dist/index.js)", "check": "(cd test && yarn install && node ../dist/index.js)",
"checkVersion": "(cd test/ && node ../dist/index.js -v)", "checkVersion": "(cd test/ && node ../dist/index.js -v)",
"checkNoTest": "(cd test && node ../dist/index.js --notest)", "checkNoTest": "(cd test && node ../dist/index.js --notest)",
"checkNoDocs": "(cd test && node ../dist/index.js --nodocs)" "checkNoDocs": "(cd test && node ../dist/index.js --nodocs)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://gitlab.com/pushrocks/npmts.git" "url": "git+https://gitlab.com/gitzone/npmts.git"
}, },
"keywords": [ "keywords": [
"TypeScript", "TypeScript",
@ -30,54 +30,39 @@
"author": "Lossless GmbH", "author": "Lossless GmbH",
"license": "MIT", "license": "MIT",
"bugs": { "bugs": {
"url": "https://gitlab.com/pushrocks/npmts/issues" "url": "https://gitlab.com/gitzone/npmts/issues"
}, },
"homepage": "https://gitlab.com/pushrocks/npmts#readme", "homepage": "https://gitlab.com/gitzone/npmts#readme",
"dependencies": { "dependencies": {
"@types/gulp": "^3.8.32", "@types/gulp-sourcemaps": "0.0.31",
"@types/gulp-babel": "^6.1.29",
"@types/gulp-istanbul": "^0.9.30",
"@types/gulp-mocha": "0.0.29",
"@types/gulp-sourcemaps": "0.0.29",
"@types/minimatch": "^2.0.29", "@types/minimatch": "^2.0.29",
"@types/q": "^0.x.x", "@types/through2": "^2.0.33",
"@types/shelljs": "^0.3.33", "beautylog": "^6.1.10",
"@types/through2": "^2.0.32", "depcheck": "^0.6.7",
"babel-preset-es2015": "^6.18.0", "early": "^2.1.1",
"beautylog": "6.0.0", "gulp-function": "^2.2.9",
"depcheck": "^0.6.5", "gulp-sourcemaps": "^2.6.0",
"early": "^2.0.35", "gulp-typescript": "^3.2.1",
"gulp": "3.9.1", "lodash": "^4.17.4",
"gulp-babel": "^6.1.2", "npmextra": "^2.0.7",
"gulp-function": "^2.2.2", "projectinfo": "^3.0.2",
"gulp-inject-modules": "^1.0.0", "smartanalytics": "^1.0.6",
"gulp-istanbul": "^1.1.1", "smartchok": "^1.0.11",
"gulp-mocha": "^3.0.1", "smartcli": "^2.0.7",
"gulp-sourcemaps": "^2.2.0", "smartcov": "^1.0.2",
"gulp-typedoc": "^2.0.0", "smarterror": "^1.0.3",
"lodash": "^4.17.2", "smartfile": "^4.2.17",
"npmextra": "^2.0.3", "smartgulp": "^1.0.6",
"projectinfo": "1.0.4", "smartpath": "^3.2.8",
"q": "^1.4.1", "smartq": "^1.1.6",
"shelljs": "^0.7.5", "smartstream": "^1.0.10",
"smartchok": "^1.0.4", "smartstring": "^2.0.24",
"smartcli": "1.0.15", "smartsystem": "^1.0.18",
"smartcov": "1.0.0", "tapbuffer": "^1.0.19",
"smartenv": "2.0.0", "through2": "^2.0.3",
"smartfile": "4.1.0", "tsn": "^2.0.15",
"smartpath": "3.2.5", "typescript": "^2.4.1",
"smartstream": "^1.0.5", "typings-global": "^1.0.19"
"smartstring": "^2.0.22",
"smartsystem": "^1.0.9",
"source-map-support": "^0.4.6",
"through2": "^2.0.1",
"tsn": "^2.0.13",
"typedoc": "^0.5.1",
"typescript": "next",
"typings-global": "^1.0.14"
}, },
"devDependencies": { "devDependencies": {}
"@types/should": "^8.1.30",
"should": "^11.1.1"
}
} }

44
readme.md Normal file
View File

@ -0,0 +1,44 @@
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts)
[![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## Status for master
[![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![Dependency Status](https://david-dm.org/gitzonetools/npmts.svg)](https://david-dm.org/gitzonetools/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/gitzonetools/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzonetools/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzonetools/npmts/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmts)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
npmts will
1. check your dependencies and package.json (unused, missing, updates, security)
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. create coverage with istanbul (supports tracing of the originating TypeScript)
For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer).
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

View File

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

View File

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

View File

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

@ -1,47 +1,32 @@
import * as q from 'q' import * as q from 'smartq'
import paths = require('../npmts.paths') import paths = require('../npmts.paths')
import { npmtsOra } from '../npmts.log'
import plugins = require('./mod00.plugins') import plugins = require('./mod00.plugins')
/** /**
* removes the dist directory which will be entirely rebuild * removes the dist directory which will be entirely rebuild
*/ */
let removeDist = function () { let removeDist = function () {
npmtsOra.text('cleaning dist folder') plugins.beautylog.ora.text('cleaning dist folder')
return plugins.smartfile.fs.remove(paths.distDir) return plugins.smartfile.fs.remove(paths.distDir)
}
/**
* remove .d.ts files from testDirctory
*/
let removeTestDeclarations = function () {
let done = q.defer()
plugins.smartfile.fs.listFileTree('./test/', '**/*.d.ts').then(fileArray => {
let fileArrayToRemove = plugins.smartpath.transform.toAbsolute(fileArray, process.cwd() + '//test/')
plugins.smartfile.fs.removeManySync(fileArrayToRemove)
done.resolve()
})
} }
/** /**
* remove old pages * remove old pages
*/ */
let removePages = function () { let removePages = function () {
npmtsOra.text('cleaning pages folder') plugins.beautylog.ora.text('cleaning pages folder')
return plugins.smartfile.fs.remove(paths.pagesDir) return plugins.smartfile.fs.remove(paths.pagesDir)
} }
export let run = function (configArg) { export let run = function (configArg) {
npmtsOra.text('cleaning up from previous builds...') plugins.beautylog.ora.text('cleaning up from previous builds...')
let done = q.defer() let done = q.defer()
removeDist() removeDist()
.then(removeTestDeclarations) .then(removePages)
.then(removePages) .then(function () {
.then(function () { plugins.beautylog.ok('Cleaned up from previous builds!')
plugins.beautylog.ok('Cleaned up from previous builds!') done.resolve(configArg)
done.resolve(configArg) })
}) return done.promise
return done.promise
} }

View File

@ -1,23 +1,17 @@
import * as q from 'q' import * as q from 'smartq'
import * as paths from '../npmts.paths' import * as paths from '../npmts.paths'
import { npmtsOra } from '../npmts.log'
import * as plugins from './mod00.plugins' import * as plugins from './mod00.plugins'
export let run = function (configArg) { export let run = function (configArg) {
let done = q.defer() let done = q.defer()
let config = configArg let config = configArg
npmtsOra.text('now compiling ' + 'TypeScript'.yellow) 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 main TypeScript!') plugins.beautylog.ok(`compiled the module's TypeScript!`)
plugins.beautylog.log('now compiling tests!') done.resolve(config)
return plugins.tsn.compileGlobStringObject(config.testTs,config.tsOptions,paths.cwd) }).catch(err => { console.log(err) })
}) return done.promise
.then(function () {
plugins.beautylog.ok('compiled all TypeScript!')
done.resolve(config)
}).catch(err => { console.log(err) })
return done.promise
} }

View File

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

View File

@ -1,63 +1,15 @@
/* ------------------------------------------ /* ------------------------------------------
* This module creates TypeScript documentation * This module creates TypeScript documentation
* -------------------------------------------- */ * -------------------------------------------- */
import * as q from 'q' import * as q from 'smartq'
import * as paths from '../npmts.paths' import * as paths from '../npmts.paths'
import { npmtsOra } from '../npmts.log'
import { INpmtsConfig } from '../npmts.config' import { INpmtsConfig } from '../npmts.config'
import * as plugins from './mod01.plugins' import * as plugins from './mod01.plugins'
import { projectInfo } from '../mod00/mod00.check'
let genTypeDoc = function (configArg: INpmtsConfig) {
let done = q.defer()
npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow)
plugins.beautylog.log('TypeDoc Output:')
let localSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts')),
plugins.gulpTypedoc({
// TypeScript options (see typescript docs)
module: 'commonjs',
target: 'es6',
includeDeclarations: true,
// Output options (see typedoc docs)
out: paths.pagesApiDir,
json: plugins.path.join(paths.pagesApiDir, 'file.json'),
// TypeDoc options (see typedoc docs)
name: projectInfo.name,
readme: plugins.path.join(paths.cwd, 'README.md'),
// theme: "default",
version: true
})
])
localSmartstream.run().then(
() => {
plugins.beautylog.ok('TypeDoc documentation generated!')
done.resolve(configArg)
},
(err) => {
plugins.beautylog.warn('TypeDoc documentation generation failed!')
console.log(err)
done.resolve(configArg)
}
)
return done.promise
}
export let run = function (configArg: INpmtsConfig) { export let run = function (configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>() let done = q.defer<INpmtsConfig>()
if (configArg.docs) { done.resolve(configArg)
genTypeDoc(configArg)
.then(() => {
done.resolve(configArg)
})
} else {
done.resolve(configArg)
};
return done.promise return done.promise
} }

View File

@ -1,9 +1,2 @@
export * from '../npmts.plugins' export * from '../npmts.plugins'
import * as gulp from 'gulp'
let gulpTypedoc = require('gulp-typedoc')
export {
gulp,
gulpTypedoc
}

View File

@ -4,120 +4,134 @@
import plugins = require('./mod02.plugins') import plugins = require('./mod02.plugins')
import paths = require('../npmts.paths') import paths = require('../npmts.paths')
import * as q from 'q' import * as q from 'smartq'
import { npmtsOra } from '../npmts.log'
import { INpmtsConfig } from '../npmts.config' import { INpmtsConfig } from '../npmts.config'
/** /**
* runs mocha * runs mocha
* @returns INpmtsConfig * @returns INpmtsConfig
*/ */
let mocha = function (configArg: INpmtsConfig) { let tap = function (configArg: INpmtsConfig) {
npmtsOra.text('Instrumentalizing and testing transpiled JS') let done = q.defer()
npmtsOra.end() // end npmtsOra for tests.
let done = q.defer()
let coverageSmartstream = new plugins.smartstream.Smartstream([ /**
plugins.gulp.src([plugins.path.join(paths.cwd, './dist/**/*.js')]), * the TabBuffer for npmts
plugins.gulpSourcemaps.init(), */
plugins.gulpBabel({ let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer()
presets: [
require.resolve('babel-preset-es2015')
]
}),
plugins.gulpIstanbul({
}),
plugins.gulpSourcemaps.write(),
plugins.gulpInjectModules(),
plugins.through2.obj(
(file, enc, cb) => {
cb()
},
(cb) => {
cb()
}
)
])
let localSmartstream = new plugins.smartstream.Smartstream([ npmtsTapBuffer.setConfig(configArg.testConfig)
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]),
plugins.gulpBabel({ /**
presets: [ * handle the testable files
require.resolve('babel-preset-es2015') */
] let testableFilesSmartstream = new plugins.smartstream.Smartstream([
}), plugins.smartgulp.src([ plugins.path.join(paths.cwd, './ts/**/*.ts') ]),
plugins.gulpInjectModules(), plugins.gulpSourcemaps.init(),
plugins.gulpMocha(), plugins.gulpTypeScript({
plugins.gulpIstanbul.writeReports({ target: 'ES5',
dir: plugins.path.join(paths.cwd, './coverage'), emitDecoratorMetadata: true,
reporters: ['lcovonly', 'json', 'text', 'text-summary'] experimentalDecorators: true,
}) lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
]) }),
coverageSmartstream.run() plugins.gulpFunction.forEach(async file => {
.then( file.path = file.path.replace(paths.tsDir, paths.distDir)
() => { }),
plugins.beautylog.info('code is now transpiled to ES5, instrumented with istanbul, and injected for mocha!') plugins.gulpSourcemaps.write(),
return localSmartstream.run() npmtsTapBuffer.pipeTestableFiles(),
.then(() => { done.resolve(configArg) }, (err) => { plugins.smartstream.cleanPipe()
plugins.beautylog.error('Tests failed!') ])
console.log(err)
if (configArg.watch) { /**
done.resolve(configArg) * handle the test files
} else { */
process.exit(1) let testFilesSmartstream = new plugins.smartstream.Smartstream([
} plugins.smartgulp.src([ plugins.path.join(paths.cwd, 'test/*.ts') ]),
}) plugins.gulpSourcemaps.init(),
}, plugins.gulpTypeScript({
(err) => { target: 'ES5',
console.log(err) emitDecoratorMetadata: true,
}) experimentalDecorators: true,
return done.promise 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 coverage = function (configArg: INpmtsConfig) { let handleCoverageData = async (configArg: INpmtsConfig) => {
let done = q.defer() let coverageResult: number = 0 // the coverage in percent
plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) if (configArg.runData.coverageLcovInfo) {
.then(function (percentageArg) { coverageResult = await plugins.smartcov.get.percentageFromLcovString(
if (percentageArg >= configArg.coverageTreshold) { configArg.runData.coverageLcovInfo,
plugins.beautylog.ok( 2
`${percentageArg.toString()}% ` )
+ `coverage exceeds your treshold of ` } else {
+ `${configArg.coverageTreshold.toString()}%` plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?')
) }
} else {
plugins.beautylog.warn( if (coverageResult >= configArg.coverageTreshold) {
`${percentageArg.toString()}% ` plugins.beautylog.ok(
+ `coverage fails your treshold of ` `${(coverageResult).toString()}% `
+ `${configArg.coverageTreshold.toString()}%` + `coverage exceeds your treshold of `
) + `${configArg.coverageTreshold.toString()}%`
plugins.beautylog.error('exiting due to coverage failure') )
if (!configArg.watch) { process.exit(1) } } else {
} plugins.beautylog.warn(
done.resolve(configArg) `${(coverageResult).toString()}% `
}) + `coverage fails your treshold of `
return done.promise + `${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) { export let run = function (configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>() let done = q.defer<INpmtsConfig>()
let config = configArg let config = configArg
if (config.test === true) { if (config.test === true) {
npmtsOra.text('now starting tests') plugins.beautylog.ora.text('now starting tests')
plugins.beautylog.log( plugins.beautylog.ora.end()
'------------------------------------------------------\n' + plugins.beautylog.log('ready for tapbuffer:')
'*************************** TESTS: ***************************\n' + if (configArg.coverage) {
'--------------------------------------------------------------' tap(config)
) .then(handleCoverageData)
.then(() => {
mocha(config) done.resolve(config)
.then(coverage) }).catch(err => { console.log(err) })
.then(() => {
done.resolve(config)
}).catch(err => { console.log(err) })
} else { } else {
npmtsOra.end() tap(config)
done.resolve(config) .then(() => {
done.resolve(config)
}).catch(err => { console.log(err) })
} }
return done.promise
} else {
plugins.beautylog.ora.end()
done.resolve(config)
}
return done.promise
} }

View File

@ -1,19 +1,17 @@
export * from '../npmts.plugins' export * from '../npmts.plugins'
import * as gulp from 'gulp'
import * as gulpBabel from 'gulp-babel'
import * as gulpIstanbul from 'gulp-istanbul'
import * as gulpFunction from 'gulp-function' import * as gulpFunction from 'gulp-function'
let gulpInjectModules = require('gulp-inject-modules')
import * as gulpMocha from 'gulp-mocha'
import * as gulpSourcemaps from 'gulp-sourcemaps' 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 { export {
gulp,
gulpBabel,
gulpIstanbul,
gulpFunction, gulpFunction,
gulpInjectModules, gulpSourcemaps,
gulpMocha, gulpTypeScript,
gulpSourcemaps smartcov,
smartgulp,
tapbuffer
} }

View File

@ -1,4 +1,4 @@
import * as q from 'q' 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'
@ -7,54 +7,66 @@ 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'
import { npmtsOra } from './npmts.log' /**
* smartanalytics
* this data is fully anonymized (no Ips or any other personal information is tracked).
* It just keeps track which of our tools are really used...
* ... so we know where to spend our limited resources for improving them.
* Since yarn is out and there is heavy caching going on,
* pure download stats are just not reliable enough for us anymore
* Feel free to dig into the smartanalytics package, if you are interested in how it works.
* It is just an https call to Google Analytics.
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/
let npmtsAnalytics = new plugins.smartanalytics.AnalyticsAccount('npmts','UA-64087619-5')
npmtsAnalytics.sendEvent('npm','exec','git.zone')
export let run = () => { export let run = () => {
let done = q.defer() let done = q.defer()
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot) let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot)
let npmtsCli = new plugins.smartcli.Smartcli() let npmtsCli = new plugins.smartcli.Smartcli()
npmtsCli.standardTask() npmtsCli.standardTask()
.then((argvArg) => { .then((argvArg) => {
plugins.beautylog.figletSync('NPMTS') plugins.beautylog.figletSync('NPMTS')
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version) plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version)
return NpmtsConfig.run(argvArg) return NpmtsConfig.run(argvArg)
})
.then((configArg: NpmtsConfig.INpmtsConfig) => {
let done = q.defer()
plugins.beautylog.ora.start('loading additional modules...')
NpmtsMods.mod00.load()
.then((mod00) => {
return mod00.run(configArg)
}) })
.then((configArg: NpmtsConfig.INpmtsConfig) => { .then(configArg => {
let done = q.defer() let done = q.defer<NpmtsConfig.INpmtsConfig>()
npmtsOra.start('loading additional modules...') NpmtsMods.mod01.load()
NpmtsMods.mod00.load() .then(mod01 => {
.then((mod00) => { return mod01.run(configArg)
return mod00.run(configArg) })
}) .then(configArg => {
.then(configArg => { done.resolve(configArg)
let done = q.defer<NpmtsConfig.INpmtsConfig>() })
NpmtsMods.mod01.load() return done.promise
.then(mod01 => { })
return mod01.run(configArg) .then(configArg => {
}) let done = q.defer<NpmtsConfig.INpmtsConfig>()
.then(configArg => { NpmtsMods.mod02.load()
done.resolve(configArg) .then(mod02 => {
}) return mod02.run(configArg)
return done.promise })
}) .then(configArg => {
.then(configArg => { done.resolve(configArg)
let done = q.defer<NpmtsConfig.INpmtsConfig>() })
NpmtsMods.mod02.load() return done.promise
.then(mod02 => { })
return mod02.run(configArg) .then(NpmtsWatch.run)
}) .then(NpmtsShip.run)
.then(configArg => {
done.resolve(configArg)
})
return done.promise
})
.then(NpmtsWatch.run)
.then(NpmtsShip.run)
return done.promise return done.promise
}) })
.catch((err) => { if (err instanceof Error) { console.log(err) } } ) .catch((err) => { if (err instanceof Error) { console.log(err) } })
npmtsCli.addVersion(npmtsProjectInfo.version) npmtsCli.addVersion(npmtsProjectInfo.version)
npmtsCli.startParse() npmtsCli.startParse()
return done.promise return done.promise
} }

View File

@ -1,85 +1,106 @@
import plugins = require('./npmts.plugins') import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths') import paths = require('./npmts.paths')
import * as q from 'q' import * as q from 'smartq'
import { npmtsOra } from './npmts.log' /**
* specifies the different modes available
export type npmtsMode = 'default' | 'custom' * default -> uses default options no matterm what
* merge -> uses merged default + custom options
* custom -> only uses specified options
*/
export type npmtsMode = 'default' | 'custom' | 'merge'
export interface INpmtsConfig { export interface INpmtsConfig {
argv: any, argv: any
coverageTreshold: number, coverage: boolean
docs: boolean, coverageTreshold: number
mode: npmtsMode, checkDependencies: boolean
test: boolean, mode: npmtsMode
testTs: any, test: boolean
ts: any, testTs: any
tsOptions: any, testConfig: any
watch: boolean ts: any
tsOptions: any
}; watch: boolean
runData: {
export var run = function (argvArg) { coverageLcovInfo?: string
let done = q.defer() coverageResult?: number
let defaultConfig: INpmtsConfig = { }
argv: undefined, }
coverageTreshold: 70,
docs: true, export let run = function (argvArg) {
mode: 'default', let done = q.defer()
test: true, let defaultConfig: INpmtsConfig = {
testTs: {}, argv: undefined,
ts: {}, coverage: true,
tsOptions: {}, coverageTreshold: 70,
watch: false checkDependencies: true,
} mode: 'default',
test: true,
// mix with configfile testTs: {},
npmtsOra.text('running npmextra') testConfig: {
parallel: true
let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd) },
let config: INpmtsConfig = localNpmextra.dataFor<INpmtsConfig>( ts: {},
'npmts', tsOptions: {},
defaultConfig watch: false,
) runData: {}
}
// add argv
config.argv = argvArg // mix with configfile
plugins.beautylog.ora.text('running npmextra')
// check mode
switch (config.mode) { let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd)
case 'default': let config: INpmtsConfig = localNpmextra.dataFor<INpmtsConfig>(
case 'custom': 'npmts',
plugins.beautylog.ok('mode is ' + config.mode) defaultConfig
done.resolve(config) )
break
default: // add argv
plugins.beautylog.error(`mode not recognised!`) config.argv = argvArg
process.exit(1)
}; // check mode
switch (config.mode) {
// handle default mode case 'default':
if (config.mode === 'default') { case 'custom':
config.ts = { case 'merge':
'./ts/**/*.ts': './dist/' plugins.beautylog.ok('mode is ' + config.mode)
} done.resolve(config)
config.testTs = { break
'./test/**/*.ts': './test/' default:
} plugins.beautylog.error(`mode not recognised! Can be default or custom`)
}; process.exit(1)
}
// mix with commandline
if (config.argv.notest) { // handle default mode
config.test = false if (config.mode === 'default' || config.mode === 'merge') {
}; config.ts = {
if (config.argv.nodocs) { './ts/**/*.ts': './dist/'
config.docs = false }
}; config.testTs = {
if (config.argv.watch) { './test/**/*.ts': './test/'
config.watch = true }
}; }
plugins.beautylog.ok('build options are ready!') // mix with commandline
done.resolve(config) if (config.argv.notest) {
return done.promise config.test = false
}
if (config.argv.nocoverage) {
config.coverage = false
}
if (config.argv.nochecks) {
config.checkDependencies = false
}
if (config.argv.watch) {
config.watch = true
}
plugins.beautylog.ok('build options are ready!')
done.resolve(config)
return done.promise
} }

View File

@ -1,2 +0,0 @@
import {Ora} from 'beautylog'
export let npmtsOra = new Ora('setting up TaskChain','cyan')

View File

@ -6,16 +6,15 @@ 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 smartcli from 'smartcli' import * as smartcli from 'smartcli'
import * as smartcov from 'smartcov' import * as smarterror from 'smarterror'
import * as smartenv from 'smartenv'
import * as smartfile from 'smartfile' import * as smartfile from 'smartfile'
import * as smartpath from 'smartpath' import * as smartpath from 'smartpath'
import * as smartstream from 'smartstream' import * as smartstream from 'smartstream'
import * as smartstring from 'smartstring' import * as smartstring from 'smartstring'
import * as smartsystem from 'smartsystem' import * as smartsystem from 'smartsystem'
import * as through2 from 'through2' import * as through2 from 'through2'
export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing
export { export {
beautylog, beautylog,
@ -24,9 +23,9 @@ export {
npmextra, npmextra,
projectinfo, projectinfo,
path, path,
smartanalytics,
smartcli, smartcli,
smartcov, smarterror,
smartenv,
smartfile, smartfile,
smartpath, smartpath,
smartstream, smartstream,

View File

@ -1,4 +1,4 @@
import * as q from 'q' import * as q from 'smartq'
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins'

View File

@ -1,4 +1,4 @@
import * as q from 'q' 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'

3408
yarn.lock Normal file

File diff suppressed because it is too large Load Diff