Compare commits

...

129 Commits

Author SHA1 Message Date
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
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
200f44a792 5.5.10 2016-11-25 13:42:53 +01:00
312dc4bd7f remove unnecessary logging 2016-11-25 13:42:46 +01:00
60bed4cb1f 5.5.9 2016-11-25 13:19:02 +01:00
8831a8d173 empty Buffer at end of transpilation 2016-11-25 13:18:59 +01:00
36f540a22e 5.5.8 2016-11-25 13:03:44 +01:00
7e61b49d04 fix 16 file treshold 2016-11-25 13:03:41 +01:00
57aa38af89 5.5.7 2016-11-25 00:52:25 +01:00
12cf37f01f update messages for better feedback 2016-11-25 00:52:17 +01:00
44150f4d83 5.5.6 2016-11-25 00:36:50 +01:00
3fd755691d now catching babel errors 2016-11-25 00:36:44 +01:00
00983205ce 5.5.5 2016-11-22 18:54:56 +01:00
a0b1b1847c improve README 2016-11-22 18:54:35 +01:00
be9e98ad0c 5.5.4 2016-11-22 18:52:48 +01:00
84578e8dd0 update README 2016-11-22 18:51:51 +01:00
6d759706ac 5.5.3 2016-10-27 21:59:24 +02:00
2bd4063d22 speed bump 2016-10-27 21:59:19 +02:00
c274590184 5.5.2 2016-10-22 02:38:59 +02:00
de8992da84 fix some minor issues 2016-10-22 02:38:55 +02:00
dc598e1627 5.5.1 2016-10-22 01:34:11 +02:00
bfcd78b169 fix version display 2016-10-22 01:34:07 +02:00
2352456be1 5.5.0 2016-10-21 17:51:19 +02:00
8e4a4e5766 now modularized, implements #11 2016-10-21 17:48:52 +02:00
4f93ef3fb2 update dependencies 2016-10-20 22:57:32 +02:00
69742fd6a7 moved cli into its own file 2016-10-06 21:03:30 +02:00
d7b08034da 5.4.49 2016-10-05 12:59:46 +02:00
349c6cce77 fix 2016-10-05 12:59:30 +02:00
4770b1e349 5.4.48 2016-10-05 12:37:48 +02:00
7043a844f0 fix cli 2016-10-05 12:37:45 +02:00
5f4a8d3ee5 5.4.47 2016-10-05 12:27:34 +02:00
0b6fc610e8 made cli.js path discovery smarter 2016-10-05 12:27:30 +02:00
3d78bf268d 5.4.46 2016-10-03 12:45:56 +02:00
36887512ee 5.4.45 2016-10-03 12:38:56 +02:00
fb7025d7ec 5.4.44 2016-10-02 20:35:17 +02:00
8dcdad9e2c some more es6 module syntax 2016-10-02 20:35:13 +02:00
1898db5472 5.4.43 2016-09-29 16:25:29 +02:00
1f01bee204 fix README 2016-09-29 16:25:16 +02:00
851653a6ae 5.4.42 2016-09-29 16:19:59 +02:00
9229cd79dd fix tsn issue 2016-09-29 16:19:49 +02:00
86fb639c82 5.4.41 2016-09-29 00:19:56 +02:00
d536e6aa8c improve test compilation 2016-09-29 00:19:46 +02:00
c91ff6ef4a 5.4.40 2016-09-25 20:28:46 +02:00
2c88c889bf improve README 2016-09-25 20:28:42 +02:00
d3f8ea0433 5.4.39 2016-09-25 20:25:31 +02:00
d57b05c6d0 fix README 2016-09-25 20:25:06 +02:00
e1ce5f2d5b 5.4.38 2016-09-25 20:22:49 +02:00
7c960649bc add smartstream 2016-09-25 20:22:10 +02:00
71588595e6 5.4.37 2016-09-24 16:57:41 +02:00
b31994f163 added new npmextra version 2016-09-24 16:57:30 +02:00
e6284cdde3 5.4.36 2016-09-22 23:23:32 +02:00
5f15fe1b30 added --watch option 2016-09-22 23:23:16 +02:00
3dae49b8a1 5.4.35 2016-09-18 13:08:47 +02:00
1d431792a5 upgrade to newest tsn 2016-09-18 13:08:31 +02:00
9542140b93 clean up 2016-09-15 18:26:33 +02:00
e1487c39cb 5.4.34 2016-09-15 18:25:25 +02:00
d4c69071e4 clean up promise handling for ts compilation 2016-09-15 18:25:09 +02:00
186460d437 5.4.33 2016-09-14 16:18:23 +02:00
30c2db9ed1 update compatibility for npmpage 2016-09-14 16:18:19 +02:00
3e5ab24b90 5.4.32 2016-09-14 16:16:47 +02:00
6d63b620f1 update README 2016-09-14 16:16:39 +02:00
a9270cda03 5.4.31 2016-09-14 13:16:40 +02:00
2a0a5cea8c update tsn dependency and by that support Decorators and runtime type checking through reflect metadata API 2016-09-14 13:16:36 +02:00
b2d8cb53f3 5.4.30 2016-09-06 17:33:31 +02:00
875efe413a some more standard js 2016-09-06 17:33:28 +02:00
99 changed files with 4783 additions and 1188 deletions

2
.gitignore vendored
View File

@ -1,4 +1,6 @@
node_modules/
test/
pages/
public/
npm-debug/
.DS_Store

View File

@ -1,3 +1,4 @@
# standard ci
image: hosttoday/ht-docker-node:npmci
stages:
@ -47,12 +48,15 @@ trigger:
- docker
pages:
image: hosttoday/ht-docker-node:npmpage
image: hosttoday/ht-docker-node:npmci
stage: pages
script:
- npmci command npmpage --host gitlab
- npmci command yarn global add npmpage
- npmci command npmpage
only:
- tags
tags:
- docker
artifacts:
expire_in: 1 week
paths:

View File

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

View File

@ -1,7 +1,11 @@
Please view this file on the master branch, on stable branches it's out of date.
v 6.0.0 (unreleased)
- handle bithound
v 6.0.0 (released)
- remove TypeDoc, please look at npmpage
- 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,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2016 Push.Rocks
Copyright (c) 2016 Lossless GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -2,35 +2,38 @@
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/docs)
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts)
[![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## Status for master
[![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![coverage report](https://gitlab.com/pushrocks/npmts/badges/master/coverage.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![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)
[![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![Dependency Status](https://david-dm.org/gitzone/npmts.svg)](https://david-dm.org/gitzone/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/gitzone/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzone/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzone/npmts/badges/code.svg)](https://www.bithound.io/github/gitzone/npmts)
[![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
## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
npmts will
1. check your dependencies and package.json
1. check your dependencies and package.json (unused, missing, updates, security)
1. transpile your code with tsc,
1. document your code with typedoc,
1. test your code with mocha
1. create coverage with istanbul
1. test your code with tap (supports the fancy stuff like Promises, Generators, async/await, sourcemaps, parallel test execution in child processes)
1. create coverage with istanbul (supports tracing of the originating TypeScript)
For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer).
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the docs.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://git.zone)

View File

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

2
assets/cliNpmts.js Normal file
View File

@ -0,0 +1,2 @@
#!/usr/bin/env node
var index = require("../dist/index.js");

2
dist/cli.js vendored
View File

@ -1,2 +0,0 @@
#!/usr/bin/env node
var index = require("./index.js");

1
dist/index.d.ts vendored
View File

@ -1 +0,0 @@
import 'typings-global';

33
dist/index.js vendored
View File

@ -1,28 +1,15 @@
"use strict";
require('typings-global');
/* ================================================== *
Starting NPMTS main process.
**** NPMTS ****
Fabulous TypeScript development
* ================================================== */
var early = require('early');
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const early = require("early");
early.start('NPMTS');
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var npmts_promisechain_1 = require('./npmts.promisechain');
const plugins = require("./npmts.plugins");
const cli = require("./npmts.cli");
early.stop()
.then(function () {
var npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot);
var npmtsCli = new plugins.smartcli.Smartcli();
npmtsCli.standardTask()
.then(function (argvArg) {
plugins.beautylog.figletSync('NPMTS');
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
try {
npmts_promisechain_1.promisechain(argvArg);
}
catch (err) {
console.log(err);
}
});
npmtsCli.addVersion(npmtsProjectInfo.version);
npmtsCli.startParse();
.then(() => {
let loaded = plugins; // to make sure plugins get actually loaded
cli.run();
});

2
dist/mod00/index.d.ts vendored Normal file
View File

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

24
dist/mod00/index.js vendored Normal file
View File

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

1
dist/mod00/mod00.assets.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export declare let run: (configArg: any) => Promise<{}>;

24
dist/mod00/mod00.assets.js vendored Normal file
View File

@ -0,0 +1,24 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins");
const mod00_check_1 = require("../mod00/mod00.check");
exports.run = function (configArg) {
let done = q.defer();
let config = configArg;
plugins.beautylog.ora.text('now looking at ' + 'required assets');
if (config.cli === true) {
let mainJsPath = mod00_check_1.projectInfo.packageJson.main;
let cliJsString = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'));
cliJsString = cliJsString.replace('{{pathToIndex}}', mainJsPath);
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir, 'cli.js'));
plugins.beautylog.ok('installed CLI assets!');
done.resolve(config);
}
else {
plugins.beautylog.ok('No additional assets required!');
done.resolve(config);
}
return done.promise;
};

3
dist/mod00/mod00.check.d.ts vendored Normal file
View File

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

120
dist/mod00/mod00.check.js vendored Normal file
View File

@ -0,0 +1,120 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const projectinfo_1 = require("projectinfo");
const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins");
let checkProjectTypings = (configArg) => {
let done = q.defer();
plugins.beautylog.ora.text('Check Module: Check Project Typings...');
exports.projectInfo = new projectinfo_1.ProjectinfoNpm(paths.cwd);
if (typeof exports.projectInfo.packageJson.typings === 'undefined') {
plugins.beautylog.error(`please add typings field to package.json`);
process.exit(1);
}
;
done.resolve(configArg);
return done.promise;
};
const depcheckOptions = {
ignoreBinPackage: false,
parsers: {
'*.ts': plugins.depcheck.parser.typescript
},
detectors: [
plugins.depcheck.detector.requireCallExpression,
plugins.depcheck.detector.importDeclaration
],
specials: [
plugins.depcheck.special.eslint,
plugins.depcheck.special.webpack
]
};
let checkDependencies = (configArg) => {
let done = q.defer();
plugins.beautylog.ora.text('Check Module: Check Dependencies...');
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [
'test',
'dist',
'bower_components'
],
ignoreMatches: [
'@types/*',
'babel-preset-*'
]
});
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.dependencies) {
plugins.beautylog.warn(`Watch out: unused dependency "${item}"`);
}
for (let item in unused.missing) {
plugins.beautylog.error(`missing dependency "${item}" in package.json`);
}
if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json');
process.exit(1);
}
for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`);
}
;
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
}
done.resolve(configArg);
});
return done.promise;
};
let checkDevDependencies = (configArg) => {
let done = q.defer();
plugins.beautylog.ora.text('Check Module: Check devDependencies...');
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [
'ts',
'dist',
'bower_components'
],
ignoreMatches: [
'@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(`unused devDependency ${item}`);
}
if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json');
process.exit(1);
}
for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`);
}
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
}
done.resolve(configArg);
});
return done.promise;
};
let checkNodeVersion = (configArg) => {
let done = q.defer();
plugins.beautylog.ora.text('checking node version');
done.resolve(configArg);
return done.promise;
};
exports.run = (configArg) => {
let done = q.defer();
plugins.beautylog.ora.text('Check Module: ...');
checkProjectTypings(configArg)
.then(checkDependencies)
.then(checkDevDependencies)
.then(checkNodeVersion)
.then(done.resolve)
.catch((err) => { console.log(err); });
return done.promise;
};

1
dist/mod00/mod00.clean.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export declare let run: (configArg: any) => Promise<{}>;

42
dist/mod00/mod00.clean.js vendored Normal file
View File

@ -0,0 +1,42 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins");
/**
* removes the dist directory which will be entirely rebuild
*/
let removeDist = function () {
plugins.beautylog.ora.text('cleaning dist folder');
return plugins.smartfile.fs.remove(paths.distDir);
};
/**
* remove .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
*/
let removePages = function () {
plugins.beautylog.ora.text('cleaning pages folder');
return plugins.smartfile.fs.remove(paths.pagesDir);
};
exports.run = function (configArg) {
plugins.beautylog.ora.text('cleaning up from previous builds...');
let done = q.defer();
removeDist()
.then(removeTestDeclarations)
.then(removePages)
.then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!');
done.resolve(configArg);
});
return done.promise;
};

1
dist/mod00/mod00.compile.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export declare let run: (configArg: any) => Promise<{}>;

16
dist/mod00/mod00.compile.js vendored Normal file
View File

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

5
dist/mod00/mod00.plugins.d.ts vendored Normal file
View File

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

12
dist/mod00/mod00.plugins.js vendored Normal file
View File

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

2
dist/mod01/index.d.ts vendored Normal file
View File

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

11
dist/mod01/index.js vendored Normal file
View File

@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/* ------------------------------------------
* This module creates TypeScript documentation
* -------------------------------------------- */
const q = require("smartq");
exports.run = function (configArg) {
let done = q.defer();
done.resolve(configArg);
return done.promise;
};

1
dist/mod01/mod01.plugins.d.ts vendored Normal file
View File

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

6
dist/mod01/mod01.plugins.js vendored Normal file
View File

@ -0,0 +1,6 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("../npmts.plugins"));

2
dist/mod02/index.d.ts vendored Normal file
View File

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

115
dist/mod02/index.js vendored Normal file
View File

@ -0,0 +1,115 @@
"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
* -------------------------------------------- */
const plugins = require("./mod02.plugins");
const paths = require("../npmts.paths");
const q = require("smartq");
/**
* runs mocha
* @returns INpmtsConfig
*/
let tap = function (configArg) {
let done = q.defer();
/**
* the TabBuffer for npmts
*/
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer();
/**
* handle the testable files
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpSourcemaps.write(),
plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
file.path = file.path.replace(paths.tsDir, paths.distDir);
})),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
]);
/**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpTypeScript({
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()
]);
// lets run the smartstream
Promise.all([
testableFilesSmartstream.run(),
testFilesSmartstream.run()
]).then(() => __awaiter(this, void 0, void 0, function* () {
configArg.runData.coverageLcovInfo = yield npmtsTapBuffer.runTests();
done.resolve(configArg);
}), (err) => {
plugins.beautylog.error('Tests failed!');
console.log(err);
if (configArg.watch) {
done.resolve(configArg);
}
else {
process.exit(1);
}
});
return done.promise;
};
let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function* () {
let coverageResult = yield plugins.smartcov.get.percentageFromLcovString(configArg.runData.coverageLcovInfo, 2);
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) {
let done = q.defer();
let config = configArg;
if (config.test === true) {
plugins.beautylog.ora.text('now starting tests');
plugins.beautylog.ora.end();
plugins.beautylog.log('ready for tapbuffer:');
tap(config)
.then(handleCoverageData)
.then(() => {
done.resolve(config);
}).catch(err => { console.log(err); });
}
else {
plugins.beautylog.ora.end();
done.resolve(config);
}
return done.promise;
};

8
dist/mod02/mod02.plugins.d.ts vendored Normal file
View File

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

18
dist/mod02/mod02.plugins.js vendored Normal file
View File

@ -0,0 +1,18 @@
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("../npmts.plugins"));
const gulp = require("gulp");
exports.gulp = gulp;
const gulpFunction = require("gulp-function");
exports.gulpFunction = gulpFunction;
const gulpSourcemaps = require("gulp-sourcemaps");
exports.gulpSourcemaps = gulpSourcemaps;
const gulpTypeScript = require("gulp-typescript");
exports.gulpTypeScript = gulpTypeScript;
const smartcov = require("smartcov");
exports.smartcov = smartcov;
const tapbuffer = require("tapbuffer");
exports.tapbuffer = tapbuffer;

View File

@ -1,4 +0,0 @@
/// <reference types="q" />
import 'typings-global';
import plugins = require('./npmts.plugins');
export declare var run: (configArg: any) => plugins.Q.Promise<{}>;

20
dist/npmts.assets.js vendored
View File

@ -1,20 +0,0 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var npmts_promisechain_1 = require('./npmts.promisechain');
exports.run = function (configArg) {
var done = plugins.Q.defer();
var config = configArg;
npmts_promisechain_1.npmtsOra.text('now looking at ' + 'required assets'.yellow);
if (config.cli === true) {
plugins.smartfile.fs.copySync(plugins.path.join(paths.npmtsAssetsDir, 'cli.js'), plugins.path.join(paths.distDir, 'cli.js'));
plugins.beautylog.ok('installed CLI assets!');
done.resolve(config);
}
else {
plugins.beautylog.ok('No additional assets required!');
done.resolve(config);
}
return done.promise;
};

View File

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

127
dist/npmts.check.js vendored
View File

@ -1,127 +0,0 @@
"use strict";
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var npmts_promisechain_1 = require('./npmts.promisechain');
var projectinfo_1 = require('projectinfo');
var checkProjectTypings = function (configArg) {
var done = plugins.Q.defer();
exports.projectInfo = new projectinfo_1.ProjectinfoNpm(paths.cwd);
if (typeof exports.projectInfo.packageJson.typings === 'undefined') {
plugins.beautylog.error("please add typings field to package.json");
process.exit(1);
}
;
done.resolve(configArg);
return done.promise;
};
var depcheckOptions = {
ignoreBinPackage: false,
parsers: {
'*.ts': plugins.depcheck.parser.typescript
},
detectors: [
plugins.depcheck.detector.requireCallExpression,
plugins.depcheck.detector.importDeclaration
],
specials: [
plugins.depcheck.special.eslint,
plugins.depcheck.special.webpack
]
};
var checkDependencies = function (configArg) {
var done = plugins.Q.defer();
var depcheckOptionsMerged = plugins.lodashObject.merge(depcheckOptions, {
ignoreDirs: [
'test',
'dist',
'bower_components'
],
ignoreMatches: [
'@types/*',
'babel-preset-*'
]
});
plugins.depcheck(paths.cwd, depcheckOptionsMerged, function (unused) {
for (var _i = 0, _a = unused.dependencies; _i < _a.length; _i++) {
var item = _a[_i];
plugins.beautylog.warn("Watch out: unused dependency " + item.red);
}
;
for (var _b = 0, _c = unused.missing; _b < _c.length; _b++) {
var item = _c[_b];
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 (var _d = 0, _e = unused.invalidFiles; _d < _e.length; _d++) {
var item = _e[_d];
plugins.beautylog.warn("Watch out: could not parse file " + item.red);
}
;
for (var _f = 0, _g = unused.invalidDirs; _f < _g.length; _f++) {
var item = _g[_f];
plugins.beautylog.warn("Watch out: could not parse directory " + item.red);
}
;
done.resolve(configArg);
});
return done.promise;
};
var checkDevDependencies = function (configArg) {
var done = plugins.Q.defer();
var depcheckOptionsMerged = plugins.lodashObject.merge(depcheckOptions, {
ignoreDirs: [
'ts',
'dist',
'bower_components'
],
ignoreMatches: [
'@types/*',
'babel-preset-*'
]
});
plugins.depcheck(paths.cwd, depcheckOptionsMerged, function (unused) {
for (var _i = 0, _a = unused.devDependencies; _i < _a.length; _i++) {
var item = _a[_i];
plugins.beautylog.log("unused devDependency " + item.red);
}
;
for (var _b = 0, _c = unused.missing; _b < _c.length; _b++) {
var item = _c[_b];
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 (var _d = 0, _e = unused.invalidFiles; _d < _e.length; _d++) {
var item = _e[_d];
plugins.beautylog.warn("Watch out: could not parse file " + item.red);
}
for (var _f = 0, _g = unused.invalidDirs; _f < _g.length; _f++) {
var item = _g[_f];
plugins.beautylog.warn("Watch out: could not parse directory " + item.red);
}
done.resolve(configArg);
});
return done.promise;
};
var checkNodeVersion = function (configArg) {
var done = plugins.Q.defer();
done.resolve(configArg);
return done.promise;
};
exports.run = function (configArg) {
var done = plugins.Q.defer();
npmts_promisechain_1.npmtsOra.text('running project checks...');
checkProjectTypings(configArg)
.then(checkDependencies)
.then(checkDevDependencies)
.then(checkNodeVersion)
.then(done.resolve);
return done.promise;
};

View File

@ -1,4 +0,0 @@
/// <reference types="q" />
import 'typings-global';
import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>;

24
dist/npmts.clean.js vendored
View File

@ -1,24 +0,0 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var npmts_promisechain_1 = require('./npmts.promisechain');
var removeDist = function () {
npmts_promisechain_1.npmtsOra.text('cleaning dist folder');
return plugins.smartfile.fs.remove(paths.distDir);
};
var removePages = function () {
npmts_promisechain_1.npmtsOra.text('cleaning pages folder');
return plugins.smartfile.fs.remove(paths.pagesDir);
};
exports.run = function (configArg) {
npmts_promisechain_1.npmtsOra.text('cleaning up from previous builds...');
var done = plugins.Q.defer();
removeDist()
.then(removePages)
.then(function () {
plugins.beautylog.ok('Cleaned up from previous builds!');
done.resolve(configArg);
});
return done.promise;
};

1
dist/npmts.cli.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export declare let run: () => Promise<{}>;

72
dist/npmts.cli.js vendored Normal file
View File

@ -0,0 +1,72 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const plugins = require("./npmts.plugins");
const paths = require("./npmts.paths");
const NpmtsConfig = require("./npmts.config");
const NpmtsMods = require("./npmts.mods");
const NpmtsWatch = require("./npmts.watch");
const NpmtsShip = require("./npmts.ship");
/**
* 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 = () => {
let done = q.defer();
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot);
let npmtsCli = new plugins.smartcli.Smartcli();
npmtsCli.standardTask()
.then((argvArg) => {
plugins.beautylog.figletSync('NPMTS');
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
return NpmtsConfig.run(argvArg);
})
.then((configArg) => {
let done = q.defer();
plugins.beautylog.ora.start('loading additional modules...');
NpmtsMods.mod00.load()
.then((mod00) => {
return mod00.run(configArg);
})
.then(configArg => {
let done = q.defer();
NpmtsMods.mod01.load()
.then(mod01 => {
return mod01.run(configArg);
})
.then(configArg => {
done.resolve(configArg);
});
return done.promise;
})
.then(configArg => {
let done = q.defer();
NpmtsMods.mod02.load()
.then(mod02 => {
return mod02.run(configArg);
})
.then(configArg => {
done.resolve(configArg);
});
return done.promise;
})
.then(NpmtsWatch.run)
.then(NpmtsShip.run);
return done.promise;
})
.catch((err) => { if (err instanceof Error) {
console.log(err);
} });
npmtsCli.addVersion(npmtsProjectInfo.version);
npmtsCli.startParse();
return done.promise;
};

View File

@ -1,4 +0,0 @@
/// <reference types="q" />
import 'typings-global';
import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>;

View File

@ -1 +0,0 @@
export declare let checkOutputPath: (tsArrayArg: any, keyArg: any) => boolean;

View File

@ -1,16 +0,0 @@
"use strict";
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var outputPathIsDir = function (tsArrayArg, keyArg) {
return plugins.smartpath.check.isDir(plugins.path.join(paths.cwd, tsArrayArg[keyArg]));
};
exports.checkOutputPath = function (tsArrayArg, keyArg) {
if (!outputPathIsDir(tsArrayArg, keyArg)) {
plugins.beautylog.warn('Skipping ' + keyArg + ' because ' + tsArrayArg[keyArg] + ' it is no directory!');
return false;
}
else {
return true;
}
;
};

64
dist/npmts.compile.js vendored
View File

@ -1,64 +0,0 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var helpers = require('./npmts.compile.helpers');
var npmts_promisechain_1 = require('./npmts.promisechain');
var promiseArray = [];
var compileTs = function (tsFileArrayArg, tsOptionsArg) {
if (tsOptionsArg === void 0) { tsOptionsArg = {}; }
var done = plugins.Q.defer();
var compilerOptionsDefault = {
declaration: true,
module: 'CommonJS',
target: 'ES6'
};
/**
* merges default ts options with those found in npmts.json
*/
var compilerOptions = function (keyArg) {
var tsOptionsCombined = plugins.lodashObject.merge(compilerOptionsDefault, tsOptionsArg);
var compilerOptions = {
declaration: tsOptionsCombined.declaration,
module: plugins.tsn.ModuleKind[tsOptionsCombined.module],
target: plugins.tsn.ScriptTarget[tsOptionsCombined.target],
exclude: 'node_modules/**/*'
};
return compilerOptions;
};
var _loop_1 = function(keyArg) {
plugins.beautylog.info("TypeScript assignment: transpile from " + keyArg.blue + " to " + tsFileArrayArg[keyArg].blue);
if (helpers.checkOutputPath(tsFileArrayArg, keyArg)) {
var filesReadPromise = plugins.smartfile.fs.listFileTree(process.cwd(), keyArg)
.then(function (filesToConvertArg) {
var filesToConvertAbsolute = plugins.smartpath.transform.toAbsolute(filesToConvertArg, process.cwd());
var destDir = plugins.smartpath.transform.toAbsolute(tsFileArrayArg[keyArg], process.cwd());
var filesCompiledPromise = plugins.tsn.compile(filesToConvertAbsolute, destDir, compilerOptions(keyArg));
promiseArray.push(filesCompiledPromise);
});
promiseArray.push(filesReadPromise);
}
};
for (var keyArg in tsFileArrayArg) {
_loop_1(keyArg);
}
;
plugins.Q.all(promiseArray)
.then(done.resolve);
return done.promise;
};
exports.run = function (configArg) {
var done = plugins.Q.defer();
var config = configArg;
npmts_promisechain_1.npmtsOra.text('now compiling ' + 'TypeScript'.yellow);
compileTs(config.ts, config.tsOptions)
.then(function () {
plugins.beautylog.ok('compiled main TypeScript!');
plugins.beautylog.log('now compiling tests!');
return compileTs(config.testTs);
})
.then(function () {
plugins.beautylog.ok('compiled all TypeScript!');
done.resolve(config);
});
return done.promise;
};

16
dist/npmts.config.d.ts vendored Normal file
View File

@ -0,0 +1,16 @@
export declare type npmtsMode = 'default' | 'custom';
export interface INpmtsConfig {
argv: any;
coverageTreshold: number;
mode: npmtsMode;
test: boolean;
testTs: any;
ts: any;
tsOptions: any;
watch: boolean;
runData: {
coverageLcovInfo?: string;
coverageResult?: number;
};
}
export declare let run: (argvArg: any) => Promise<{}>;

View File

@ -1,28 +1,26 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var npmts_promisechain_1 = require('./npmts.promisechain');
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./npmts.plugins");
const paths = require("./npmts.paths");
const q = require("smartq");
;
exports.run = function (argvArg) {
var done = plugins.Q.defer();
var defaultConfig = {
let done = q.defer();
let defaultConfig = {
argv: undefined,
coverageTreshold: 70,
docs: true,
mode: 'default',
test: true,
testTs: {},
ts: {},
tsOptions: {}
tsOptions: {},
watch: false,
runData: {}
};
// mix with configfile
npmts_promisechain_1.npmtsOra.text('looking for npmextra.json');
var config = plugins.npmextra.dataFor({
toolName: 'npmts',
defaultSettings: defaultConfig,
cwd: paths.cwd
});
plugins.beautylog.ora.text('running npmextra');
let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd);
let config = localNpmextra.dataFor('npmts', defaultConfig);
// add argv
config.argv = argvArg;
// check mode
@ -33,20 +31,18 @@ exports.run = function (argvArg) {
done.resolve(config);
break;
default:
plugins.beautylog.error("mode not recognised!");
plugins.beautylog.error(`mode not recognised!`);
process.exit(1);
}
;
// handle default mode
if (config.mode === 'default') {
config.ts = (_a = {},
_a['./ts/**/*.ts'] = './dist/',
_a
);
config.testTs = (_b = {},
_b['./test/test.ts'] = './test/',
_b
);
config.ts = {
'./ts/**/*.ts': './dist/'
};
config.testTs = {
'./test/**/*.ts': './test/'
};
}
;
// mix with commandline
@ -54,12 +50,11 @@ exports.run = function (argvArg) {
config.test = false;
}
;
if (config.argv.nodocs) {
config.docs = false;
if (config.argv.watch) {
config.watch = true;
}
;
plugins.beautylog.ok('build options are ready!');
done.resolve(config);
return done.promise;
var _a, _b;
};

7
dist/npmts.mods.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
import { LazyModule } from 'smartsystem';
import * as _mod00 from './mod00/index';
import * as _mod01 from './mod01/index';
import * as _mod02 from './mod02/index';
export declare let mod00: LazyModule<typeof _mod00>;
export declare let mod01: LazyModule<typeof _mod01>;
export declare let mod02: LazyModule<typeof _mod02>;

6
dist/npmts.mods.js vendored Normal file
View File

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

View File

@ -1,15 +0,0 @@
/// <reference types="q" />
import 'typings-global';
import plugins = require('./npmts.plugins');
export declare type npmtsMode = 'default' | 'custom';
export interface npmtsConfig {
argv: any;
coverageTreshold: number;
docs: boolean;
mode: npmtsMode;
test: boolean;
testTs: any;
ts: any;
tsOptions: any;
}
export declare var run: (argvArg: any) => plugins.Q.Promise<{}>;

View File

@ -1,4 +1,3 @@
import 'typings-global';
export declare let npmtsPackageRoot: string;
export declare let cwd: string;
export declare let tsDir: string;

4
dist/npmts.paths.js vendored
View File

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

View File

@ -1,27 +1,18 @@
import 'typings-global';
export import beautylog = require('beautylog');
export declare let depcheck: any;
export import gulp = require('gulp');
export declare let g: {
babel: any;
istanbul: any;
gFunction: any;
injectModules: any;
mocha: any;
sourcemaps: any;
typedoc: any;
};
export import lodashObject = require('lodash');
export import npmextra = require('npmextra');
export import projectinfo = require('projectinfo');
export import path = require('path');
export import Q = require('q');
export import shelljs = require('shelljs');
export import smartcli = require('smartcli');
export import smartcov = require('smartcov');
export import smartenv = require('smartenv');
export import smartfile = require('smartfile');
export import smartpath = require('smartpath');
export import smartstring = require('smartstring');
import * as beautylog from 'beautylog';
declare let depcheck: any;
import * as lodash from 'lodash';
import * as npmextra from 'npmextra';
import * as projectinfo from 'projectinfo';
import * as path from 'path';
import * as smartanalytics from 'smartanalytics';
import * as smartcli from 'smartcli';
import * as smartenv from 'smartenv';
import * as smartfile from 'smartfile';
import * as smartpath from 'smartpath';
import * as smartstream from 'smartstream';
import * as smartstring from 'smartstring';
import * as smartsystem from 'smartsystem';
import * as through2 from 'through2';
export declare let sourceMapSupport: any;
export import tsn = require('tsn');
export { beautylog, depcheck, lodash, npmextra, projectinfo, path, smartanalytics, smartcli, smartenv, smartfile, smartpath, smartstream, smartstring, smartsystem, through2 };

58
dist/npmts.plugins.js vendored
View File

@ -1,28 +1,34 @@
"use strict";
require('typings-global');
exports.beautylog = require('beautylog');
exports.depcheck = require('depcheck');
exports.gulp = require('gulp');
exports.g = {
babel: require('gulp-babel'),
istanbul: require('gulp-istanbul'),
gFunction: require('gulp-function'),
injectModules: require('gulp-inject-modules'),
mocha: require('gulp-mocha'),
sourcemaps: require('gulp-sourcemaps'),
typedoc: require('gulp-typedoc')
};
exports.lodashObject = require('lodash');
exports.npmextra = require('npmextra');
exports.projectinfo = require('projectinfo');
exports.path = require('path');
exports.Q = require('q');
exports.shelljs = require('shelljs');
exports.smartcli = require('smartcli');
exports.smartcov = require('smartcov');
exports.smartenv = require('smartenv');
exports.smartfile = require('smartfile');
exports.smartpath = require('smartpath');
exports.smartstring = require('smartstring');
Object.defineProperty(exports, "__esModule", { value: true });
require("typings-global");
const beautylog = require("beautylog");
exports.beautylog = beautylog;
let depcheck = require('depcheck');
exports.depcheck = depcheck;
const lodash = require("lodash");
exports.lodash = lodash;
const npmextra = require("npmextra");
exports.npmextra = npmextra;
const projectinfo = require("projectinfo");
exports.projectinfo = projectinfo;
const path = require("path");
exports.path = path;
const smartanalytics = require("smartanalytics");
exports.smartanalytics = smartanalytics;
const smartcli = require("smartcli");
exports.smartcli = smartcli;
const smartenv = require("smartenv");
exports.smartenv = smartenv;
const smartfile = require("smartfile");
exports.smartfile = smartfile;
const smartpath = require("smartpath");
exports.smartpath = smartpath;
const smartstream = require("smartstream");
exports.smartstream = smartstream;
const smartstring = require("smartstring");
exports.smartstring = smartstring;
const smartsystem = require("smartsystem");
exports.smartsystem = smartsystem;
const through2 = require("through2");
exports.through2 = through2;
exports.sourceMapSupport = require('source-map-support').install(); // display errors correctly during testing
exports.tsn = require('tsn');

View File

@ -1,6 +0,0 @@
/// <reference types="q" />
import 'typings-global';
import plugins = require('./npmts.plugins');
import { Ora } from 'beautylog';
export declare let npmtsOra: Ora;
export declare let promisechain: (argvArg: any) => plugins.Q.Promise<{}>;

View File

@ -1,48 +0,0 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var beautylog_1 = require('beautylog');
exports.npmtsOra = new beautylog_1.Ora('setting up TaskChain', 'cyan');
var NpmtsAssets = require('./npmts.assets');
var NpmtsCheck = require('./npmts.check');
var NpmtsClean = require('./npmts.clean');
var NpmtsCompile = require('./npmts.compile');
var NpmtsTypeDoc = require('./npmts.typedoc');
var NpmtsOptions = require('./npmts.options');
var NpmtsTests = require('./npmts.tests');
exports.promisechain = function (argvArg) {
var done = plugins.Q.defer();
exports.npmtsOra.start();
NpmtsOptions.run(argvArg)
.then(NpmtsClean.run)
.then(NpmtsCheck.run)
.then(NpmtsCompile.run)
.then(NpmtsAssets.run)
.then(NpmtsTypeDoc.run)
.then(NpmtsTests.run)
.then(function (configArg) {
var shipString = '' +
'\n' +
'\n' +
' # # ( )\n' +
' ___#_#___|__\n' +
' _ |____________| _\n' +
' _=====| | | | | |==== _\n' +
' =====| |.---------------------------. | |====\n' +
" <--------------------' . . . . . . . . '--------------/\n" +
' \\ /\n' +
' \\___________________________________________________________/\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n';
if (process.env.CI) {
console.log(shipString);
plugins.beautylog.success('READY TO SHIP!');
}
else {
plugins.beautylog.success('Done!');
}
done.resolve();
});
return done.promise;
};

2
dist/npmts.ship.d.ts vendored Normal file
View File

@ -0,0 +1,2 @@
import { INpmtsConfig } from './npmts.config';
export declare let run: (configArg: INpmtsConfig) => void;

29
dist/npmts.ship.js vendored Normal file
View File

@ -0,0 +1,29 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const plugins = require("./npmts.plugins");
exports.run = (configArg) => {
let done = q.defer();
let shipString = '' +
'\n' +
'\n' +
' # # ( )\n' +
' ___#_#___|__\n' +
' _ |____________| _\n' +
' _=====| | | | | |==== _\n' +
' =====| |.---------------------------. | |====\n' +
" <--------------------' . . . . . . . . '--------------/\n" +
' \\ /\n' +
' \\___________________________________________________________/\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n';
if (process.env.CI) {
console.log(shipString);
plugins.beautylog.success('READY TO SHIP!');
}
else {
plugins.beautylog.success('Done!');
}
done.resolve(configArg);
};

View File

@ -1,4 +0,0 @@
/// <reference types="q" />
import 'typings-global';
import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>;

83
dist/npmts.tests.js vendored
View File

@ -1,83 +0,0 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var npmts_promisechain_1 = require('./npmts.promisechain');
/**
*
* @returns {*}
*/
var mocha = function (configArg) {
npmts_promisechain_1.npmtsOra.text('Instrumentalizing and testing transpiled JS');
npmts_promisechain_1.npmtsOra.end(); // end npmtsOra for tests.
var done = plugins.Q.defer();
plugins.gulp.src([plugins.path.join(paths.cwd, 'dist/*.js')])
.pipe(plugins.g.sourcemaps.init())
.pipe(plugins.g.babel({
presets: [
require.resolve('babel-preset-es2015')
]
}))
.pipe(plugins.g.istanbul({}))
.pipe(plugins.g.sourcemaps.write())
.pipe(plugins.g.injectModules())
.on('finish', function () {
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')])
.pipe(plugins.g.babel({
presets: [
require.resolve('babel-preset-es2015')
]
}))
.pipe(plugins.g.injectModules())
.pipe(plugins.g.mocha())
.pipe(plugins.g.istanbul.writeReports({
dir: plugins.path.join(paths.cwd, './coverage'),
reporters: ['lcovonly', 'json', 'text', 'text-summary']
}))
.pipe(plugins.g.gFunction(function () {
plugins.beautylog.ok('Tested!');
done.resolve(configArg);
}, 'atEnd'));
});
return done.promise;
};
var coverage = function (configArg) {
var done = plugins.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 {
plugins.beautylog.warn((percentageArg.toString() + "% ")
+ "coverage fails your treshold of "
+ (configArg.coverageTreshold.toString() + "%"));
plugins.beautylog.error('exiting due to coverage failure');
process.exit(1);
}
done.resolve(configArg);
});
return done.promise;
};
exports.run = function (configArg) {
var done = plugins.Q.defer();
var config = configArg;
if (config.test === true) {
npmts_promisechain_1.npmtsOra.text('now starting tests');
plugins.beautylog.log('-------------------------------------------------------\n' +
'*************************** TESTS: ***************************\n' +
'--------------------------------------------------------------');
mocha(config)
.then(coverage)
.then(function () {
done.resolve(config);
});
}
else {
npmts_promisechain_1.npmtsOra.end();
done.resolve(config);
}
return done.promise;
};

View File

@ -1,4 +0,0 @@
/// <reference types="q" />
import 'typings-global';
import plugins = require('./npmts.plugins');
export declare let run: (configArg: any) => plugins.Q.Promise<{}>;

43
dist/npmts.typedoc.js vendored
View File

@ -1,43 +0,0 @@
"use strict";
require('typings-global');
var plugins = require('./npmts.plugins');
var paths = require('./npmts.paths');
var npmts_promisechain_1 = require('./npmts.promisechain');
var npmts_check_1 = require('./npmts.check');
var genTypeDoc = function (configArg) {
var done = plugins.Q.defer();
npmts_promisechain_1.npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow);
plugins.beautylog.log('TypeDoc Output:');
plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts'))
.pipe(plugins.g.typedoc({
// 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: npmts_check_1.projectInfo.name,
readme: plugins.path.join(paths.cwd, 'README.md'),
// theme: "default",
ignoreCompilerErrors: true,
version: true
}))
.pipe(plugins.g.gFunction(done.resolve, 'atEnd'));
return done.promise;
};
exports.run = function (configArg) {
var done = plugins.Q.defer();
if (configArg.docs) {
genTypeDoc(configArg)
.then(function () {
done.resolve(configArg);
});
}
else {
done.resolve(configArg);
}
;
return done.promise;
};

2
dist/npmts.watch.d.ts vendored Normal file
View File

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

33
dist/npmts.watch.js vendored Normal file
View File

@ -0,0 +1,33 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq");
const smartchok = require("smartchok");
const plugins = require("./npmts.plugins");
const cli = require("./npmts.cli");
let npmtsSmartchok = null;
exports.run = (configArg) => {
let done = q.defer();
if (configArg.watch && npmtsSmartchok === null) {
let pathsToWatch = [];
for (let key in configArg.ts) {
pathsToWatch.push(key);
}
for (let key in configArg.testTs) {
pathsToWatch.push(key);
}
npmtsSmartchok = new smartchok.Smartchok(pathsToWatch);
npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => {
plugins.beautylog.info('now watching...');
changeObservableArg.subscribe(() => {
cli.run();
});
});
npmtsSmartchok.start();
done.resolve(configArg);
}
else {
plugins.beautylog.info('not watching');
done.resolve(configArg);
}
return done.promise;
};

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,15 +0,0 @@
{
"structure": {
"readme": "index.md"
},
"plugins": [
"tonic",
"edit-link"
],
"pluginsConfig": {
"edit-link": {
"base": "https://gitlab.com/pushrocks/npmts/edit/master/docs/",
"label": "Edit on GitLab"
}
}
}

View File

@ -1,4 +1,9 @@
# Configuration of NPMTS
---
name: config
---
# Configuration
## of npmts
npmts can be configured to your needs:
### npmextra.json
@ -20,7 +25,6 @@ with default behaviour.
```json
{
"mode":"custom",
"docs":false,
"test":true,
"npmts":{
"ts":{
@ -38,7 +42,6 @@ with default behaviour.
| key | default value | description |
| --- | --- | --- |
| `"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 |
| `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions |
| `"tsOptions"` | `{"target":"ES5", "declaration":"true"}` | specify options for tsc |
@ -63,11 +66,6 @@ This is in line with the latest TypeScript best practices.
You can then import plugins via the TypeScript `import` Syntax
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:
#### 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.

View File

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

View File

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

View File

@ -1,36 +1,42 @@
---
name: Start
---
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
## 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/docs)
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts)
[![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## Status for master
[![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![coverage report](https://gitlab.com/pushrocks/npmts/badges/master/coverage.svg)](https://gitlab.com/pushrocks/npmts/commits/master)
[![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)
[![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
[![Dependency Status](https://david-dm.org/gitzone/npmts.svg)](https://david-dm.org/gitzone/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/gitzone/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzone/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzone/npmts/badges/code.svg)](https://www.bithound.io/github/gitzone/npmts)
[![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
## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
npmts will
1. check your dependencies and package.json
1. check your dependencies and package.json (unused, missing, updates, security)
1. transpile your code with tsc,
1. document your code with typedoc,
1. test your code with mocha
1. create coverage with istanbul
1. test your code with tap (supports the fancy stuff like Promises, Generators, async/await, sourcemaps, parallel test execution in child processes)
1. create coverage with istanbul (supports tracing of the originating TypeScript)
For more information on how tests are run check out the [tapbuffer module](https://www.npmjs.com/package/tapbuffer).
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
For further information read the docs.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

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

View File

@ -1,68 +1,69 @@
{
"name": "npmts",
"version": "5.4.29",
"version": "7.0.7",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"main": "dist/index.js",
"bin": {
"npmts": "dist/cli.js"
"npmts": "assets/cliNpmts.js"
},
"scripts": {
"test": "(npm run compile && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)",
"compile": "(rm -rf test/ && rm -r dist/ && mkdir dist/ && tsc && cp assets/cli.js dist/ )",
"test": "(npm run compile && npm run prepareTest && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)",
"testShort": "(npm run compile && npm run check)",
"prepareTest": "(rm -rf test/)",
"compile": "(rm -rf dist/ && tsc)",
"setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
"typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)",
"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)",
"checkNoTest": "(cd test && node ../dist/index.js --notest)",
"checkNoDocs": "(cd test && node ../dist/index.js --nodocs)"
},
"repository": {
"type": "git",
"url": "git+https://gitlab.com/pushrocks/npmts.git"
"url": "git+https://gitlab.com/gitzone/npmts.git"
},
"keywords": [
"TypeScript",
"Declaration"
],
"author": "Lossless Digital UG (haftungsbeschraenkt)",
"author": "Lossless GmbH",
"license": "MIT",
"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": {
"@types/gulp": "^3.8.31",
"@types/minimatch": "^2.0.28",
"@types/q": "^0.x.x",
"@types/shelljs": "^0.3.30",
"babel-preset-es2015": "^6.14.0",
"beautylog": "5.0.22",
"depcheck": "^0.6.4",
"early": "^2.0.26",
"@types/gulp": "^4.0.2",
"@types/gulp-sourcemaps": "0.0.30",
"@types/minimatch": "^2.0.29",
"@types/through2": "^2.0.32",
"beautylog": "6.1.5",
"depcheck": "^0.6.7",
"early": "^2.0.38",
"gulp": "3.9.1",
"gulp-babel": "^6.1.2",
"gulp-function": "^1.3.6",
"gulp-inject-modules": "^1.0.0",
"gulp-istanbul": "^1.1.1",
"gulp-mocha": "^3.0.1",
"gulp-sourcemaps": "^1.6.0",
"gulp-typedoc": "^2.0.0",
"lodash": "^4.15.0",
"npmextra": "^1.0.9",
"projectinfo": "1.0.3",
"q": "^1.4.1",
"shelljs": "^0.7.4",
"smartcli": "1.0.5",
"smartcov": "1.0.0",
"smartenv": "1.2.5",
"smartfile": "4.0.15",
"smartpath": "3.2.2",
"smartstring": "^2.0.17",
"source-map-support": "^0.4.2",
"tsn": "^1.0.12",
"typedoc": "^0.4.5",
"typescript": "next",
"gulp-function": "^2.2.3",
"gulp-sourcemaps": "^2.5.0",
"gulp-typescript": "^3.1.6",
"lodash": "^4.17.4",
"npmextra": "^2.0.5",
"projectinfo": "^3.0.2",
"smartanalytics": "^1.0.3",
"smartchok": "^1.0.5",
"smartcli": "^2.0.1",
"smartcov": "^1.0.2",
"smartenv": "2.0.0",
"smartfile": "^4.1.9",
"smartpath": "^3.2.8",
"smartq": "^1.1.1",
"smartstream": "^1.0.8",
"smartstring": "^2.0.24",
"smartsystem": "^1.0.12",
"source-map-support": "^0.4.14",
"tapbuffer": "^1.0.10",
"through2": "^2.0.3",
"tsn": "^2.0.15",
"typescript": "^2.2.2",
"typings-global": "^1.0.14"
},
"devDependencies": {}

View File

@ -1,28 +1,14 @@
import 'typings-global'
/* ================================================== *
Starting NPMTS main process.
**** NPMTS ****
Fabulous TypeScript development
* ================================================== */
import * as early from 'early'
early.start('NPMTS')
import * as plugins from './npmts.plugins'
import * as paths from './npmts.paths'
import {promisechain} from './npmts.promisechain'
import * as cli from './npmts.cli'
early.stop()
.then(() => {
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot)
let npmtsCli = new plugins.smartcli.Smartcli()
npmtsCli.standardTask()
.then((argvArg) => {
plugins.beautylog.figletSync('NPMTS')
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version)
try {
promisechain(argvArg)
} catch (err) {
console.log(err)
}
})
npmtsCli.addVersion(npmtsProjectInfo.version)
npmtsCli.startParse()
let loaded = plugins // to make sure plugins get actually loaded
cli.run()
})

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

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

24
ts/mod00/mod00.assets.ts Normal file
View File

@ -0,0 +1,24 @@
import * as q from 'smartq'
import paths = require('../npmts.paths')
import plugins = require('./mod00.plugins')
import { projectInfo } from '../mod00/mod00.check'
export let run = function(configArg){
let done = q.defer()
let config = configArg
plugins.beautylog.ora.text('now looking at ' + 'required assets')
if (config.cli === true) {
let mainJsPath = projectInfo.packageJson.main
let cliJsString: string = plugins.smartfile.fs.toStringSync(plugins.path.join(paths.npmtsAssetsDir,'cli.js'))
cliJsString = cliJsString.replace('{{pathToIndex}}',mainJsPath)
plugins.smartfile.memory.toFsSync(cliJsString, plugins.path.join(paths.distDir,'cli.js'))
plugins.beautylog.ok('installed CLI assets!')
done.resolve(config)
} else {
plugins.beautylog.ok('No additional assets required!')
done.resolve(config)
}
return done.promise
}

View File

@ -1,14 +1,16 @@
import * as plugins from './npmts.plugins'
import * as paths from './npmts.paths'
import { npmtsOra } from './npmts.promisechain'
import * as q from 'smartq'
import { ProjectinfoNpm } from 'projectinfo'
import {ProjectinfoNpm} from 'projectinfo'
import * as paths from '../npmts.paths'
import * as plugins from './mod00.plugins'
export let projectInfo: ProjectinfoNpm
let checkProjectTypings = (configArg) => {
let done = plugins.Q.defer()
projectInfo = new ProjectinfoNpm(paths.cwd)
let done = q.defer()
plugins.beautylog.ora.text('Check Module: Check Project Typings...')
projectInfo = new ProjectinfoNpm(paths.cwd)
if (typeof projectInfo.packageJson.typings === 'undefined') {
plugins.beautylog.error(`please add typings field to package.json`)
process.exit(1)
@ -33,8 +35,9 @@ const depcheckOptions = {
}
let checkDependencies = (configArg) => {
let done = plugins.Q.defer()
let depcheckOptionsMerged = plugins.lodashObject.merge(depcheckOptions, {
let done = q.defer()
plugins.beautylog.ora.text('Check Module: Check Dependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored
'test',
'dist',
@ -47,29 +50,30 @@ let checkDependencies = (configArg) => {
})
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.dependencies) {
plugins.beautylog.warn(`Watch out: unused dependency ${item.red}`)
};
for (let item of unused.missing) {
plugins.beautylog.error(`unused devDependency ${item.red}`)
};
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 of unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`)
};
for (let item of unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`)
for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`)
};
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`)
}
done.resolve(configArg)
})
return done.promise
}
let checkDevDependencies = (configArg) => {
let done = plugins.Q.defer()
let depcheckOptionsMerged = plugins.lodashObject.merge(depcheckOptions, {
let done = q.defer()
plugins.beautylog.ora.text('Check Module: Check devDependencies...')
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ // folder with these names will be ignored
'ts',
'dist',
@ -82,20 +86,20 @@ let checkDevDependencies = (configArg) => {
})
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => {
for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item.red}`)
};
for (let item of unused.missing) {
plugins.beautylog.error(`unused devDependency ${item.red}`)
};
plugins.beautylog.log(`unused devDependency ${item}`)
}
for (let item in unused.missing) {
plugins.beautylog.error(`unused devDependency ${item}`)
}
if (unused.missing.length > 0) {
plugins.beautylog.info('exiting due to missing dependencies in package.json')
process.exit(1)
}
for (let item of unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`)
for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`)
}
for (let item of unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`)
for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`)
}
done.resolve(configArg)
})
@ -103,18 +107,20 @@ let checkDevDependencies = (configArg) => {
}
let checkNodeVersion = (configArg) => {
let done = plugins.Q.defer()
let done = q.defer()
plugins.beautylog.ora.text('checking node version')
done.resolve(configArg)
return done.promise
}
export let run = (configArg) => {
let done = plugins.Q.defer()
npmtsOra.text('running project checks...')
let done = q.defer()
plugins.beautylog.ora.text('Check Module: ...')
checkProjectTypings(configArg)
.then(checkDependencies)
.then(checkDevDependencies)
.then(checkNodeVersion)
.then(done.resolve)
.catch((err) => { console.log(err) })
return done.promise
}

45
ts/mod00/mod00.clean.ts Normal file
View File

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

17
ts/mod00/mod00.compile.ts Normal file
View File

@ -0,0 +1,17 @@
import * as q from 'smartq'
import * as paths from '../npmts.paths'
import * as plugins from './mod00.plugins'
export let run = function (configArg) {
let done = q.defer()
let config = configArg
plugins.beautylog.ora.text('now compiling ' + 'TypeScript')
plugins.tsn.compileGlobStringObject(config.ts, config.tsOptions, paths.cwd)
.then(() => {
plugins.beautylog.ok(`compiled the module's TypeScript!`)
done.resolve(config)
}).catch(err => { console.log(err) })
return done.promise
}

11
ts/mod00/mod00.plugins.ts Normal file
View File

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

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

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

View File

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

120
ts/mod02/index.ts Normal file
View File

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

17
ts/mod02/mod02.plugins.ts Normal file
View File

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

View File

@ -1,22 +0,0 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import {npmtsOra} from './npmts.promisechain'
export var run = function(configArg){
let done = plugins.Q.defer()
let config = configArg
npmtsOra.text('now looking at ' + 'required assets'.yellow)
if (config.cli === true) {
plugins.smartfile.fs.copySync(
plugins.path.join(paths.npmtsAssetsDir,'cli.js'),
plugins.path.join(paths.distDir,'cli.js')
)
plugins.beautylog.ok('installed CLI assets!')
done.resolve(config)
} else {
plugins.beautylog.ok('No additional assets required!')
done.resolve(config)
}
return done.promise
}

View File

@ -1,26 +0,0 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import {npmtsOra} from './npmts.promisechain'
let removeDist = function(){
npmtsOra.text('cleaning dist folder')
return plugins.smartfile.fs.remove(paths.distDir)
}
let removePages = function(){
npmtsOra.text('cleaning pages folder')
return plugins.smartfile.fs.remove(paths.pagesDir)
}
export let run = function(configArg){
npmtsOra.text('cleaning up from previous builds...')
let done = plugins.Q.defer()
removeDist()
.then(removePages)
.then(function(){
plugins.beautylog.ok('Cleaned up from previous builds!')
done.resolve(configArg)
})
return done.promise
}

72
ts/npmts.cli.ts Normal file
View File

@ -0,0 +1,72 @@
import * as q from 'smartq'
import * as plugins from './npmts.plugins'
import * as paths from './npmts.paths'
import * as NpmtsConfig from './npmts.config'
import * as NpmtsMods from './npmts.mods'
import * as NpmtsWatch from './npmts.watch'
import * as NpmtsShip from './npmts.ship'
/**
* 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 = () => {
let done = q.defer()
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot)
let npmtsCli = new plugins.smartcli.Smartcli()
npmtsCli.standardTask()
.then((argvArg) => {
plugins.beautylog.figletSync('NPMTS')
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version)
return NpmtsConfig.run(argvArg)
})
.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 => {
let done = q.defer<NpmtsConfig.INpmtsConfig>()
NpmtsMods.mod01.load()
.then(mod01 => {
return mod01.run(configArg)
})
.then(configArg => {
done.resolve(configArg)
})
return done.promise
})
.then(configArg => {
let done = q.defer<NpmtsConfig.INpmtsConfig>()
NpmtsMods.mod02.load()
.then(mod02 => {
return mod02.run(configArg)
})
.then(configArg => {
done.resolve(configArg)
})
return done.promise
})
.then(NpmtsWatch.run)
.then(NpmtsShip.run)
return done.promise
})
.catch((err) => { if (err instanceof Error) { console.log(err) } })
npmtsCli.addVersion(npmtsProjectInfo.version)
npmtsCli.startParse()
return done.promise
}

View File

@ -1,15 +0,0 @@
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
let outputPathIsDir = function (tsArrayArg,keyArg) {
return plugins.smartpath.check.isDir(plugins.path.join(paths.cwd, tsArrayArg[keyArg]))
}
export let checkOutputPath = function(tsArrayArg,keyArg){
if (!outputPathIsDir(tsArrayArg,keyArg)) {
plugins.beautylog.warn('Skipping ' + keyArg + ' because ' + tsArrayArg[keyArg] + ' it is no directory!')
return false
} else {
return true
};
}

View File

@ -1,68 +0,0 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import helpers = require('./npmts.compile.helpers')
import {npmtsOra} from './npmts.promisechain'
let promiseArray = []
let compileTs = (tsFileArrayArg: string[],tsOptionsArg = {}) => {
let done = plugins.Q.defer()
let compilerOptionsDefault = {
declaration: true,
module: 'CommonJS',
target: 'ES6'
}
/**
* merges default ts options with those found in npmts.json
*/
let compilerOptions = function (keyArg: string) {
let tsOptionsCombined = plugins.lodashObject.merge(compilerOptionsDefault, tsOptionsArg)
let compilerOptions: plugins.tsn.CompilerOptions = {
declaration: tsOptionsCombined.declaration,
module: plugins.tsn.ModuleKind[tsOptionsCombined.module],
target: plugins.tsn.ScriptTarget[tsOptionsCombined.target],
exclude: 'node_modules/**/*'
}
return compilerOptions
}
for (let keyArg in tsFileArrayArg) {
plugins.beautylog.info(`TypeScript assignment: transpile from ${keyArg.blue} to ${tsFileArrayArg[keyArg].blue}`)
if (helpers.checkOutputPath(tsFileArrayArg,keyArg)) {
let filesReadPromise = plugins.smartfile.fs.listFileTree(process.cwd(),keyArg)
.then((filesToConvertArg) => {
let filesToConvertAbsolute = plugins.smartpath.transform.toAbsolute(filesToConvertArg,process.cwd())
let destDir = plugins.smartpath.transform.toAbsolute(tsFileArrayArg[keyArg],process.cwd())
let filesCompiledPromise = plugins.tsn.compile(
filesToConvertAbsolute,
destDir,
compilerOptions(keyArg)
)
promiseArray.push(filesCompiledPromise)
})
promiseArray.push(filesReadPromise)
}
};
plugins.Q.all(promiseArray)
.then(done.resolve)
return done.promise
}
export let run = function (configArg) {
let done = plugins.Q.defer()
let config = configArg
npmtsOra.text('now compiling ' + 'TypeScript'.yellow)
compileTs(config.ts,config.tsOptions)
.then(() => {
plugins.beautylog.ok('compiled main TypeScript!')
plugins.beautylog.log('now compiling tests!')
return compileTs(config.testTs)
})
.then(function () {
plugins.beautylog.ok('compiled all TypeScript!')
done.resolve(config)
})
return done.promise
}

82
ts/npmts.config.ts Normal file
View File

@ -0,0 +1,82 @@
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import * as q from 'smartq'
export type npmtsMode = 'default' | 'custom'
export interface INpmtsConfig {
argv: any,
coverageTreshold: number,
mode: npmtsMode,
test: boolean,
testTs: any,
ts: any,
tsOptions: any,
watch: boolean
runData: {
coverageLcovInfo?: string,
coverageResult?: number
}
};
export let run = function (argvArg) {
let done = q.defer()
let defaultConfig: INpmtsConfig = {
argv: undefined,
coverageTreshold: 70,
mode: 'default',
test: true,
testTs: {},
ts: {},
tsOptions: {},
watch: false,
runData: {}
}
// mix with configfile
plugins.beautylog.ora.text('running npmextra')
let localNpmextra = new plugins.npmextra.Npmextra(paths.cwd)
let config: INpmtsConfig = localNpmextra.dataFor<INpmtsConfig>(
'npmts',
defaultConfig
)
// add argv
config.argv = argvArg
// check mode
switch (config.mode) {
case 'default':
case 'custom':
plugins.beautylog.ok('mode is ' + config.mode)
done.resolve(config)
break
default:
plugins.beautylog.error(`mode not recognised!`)
process.exit(1)
};
// handle default mode
if (config.mode === 'default') {
config.ts = {
'./ts/**/*.ts': './dist/'
}
config.testTs = {
'./test/**/*.ts': './test/'
}
};
// mix with commandline
if (config.argv.notest) {
config.test = false
};
if (config.argv.watch) {
config.watch = true
};
plugins.beautylog.ok('build options are ready!')
done.resolve(config)
return done.promise
}

11
ts/npmts.mods.ts Normal file
View File

@ -0,0 +1,11 @@
import * as plugins from './npmts.plugins'
import { LazyModule } from 'smartsystem'
import * as _mod00 from './mod00/index'
import * as _mod01 from './mod01/index'
import * as _mod02 from './mod02/index'
export let mod00 = new LazyModule<typeof _mod00>('./mod00/index',__dirname)
export let mod01 = new LazyModule<typeof _mod01>('./mod01/index',__dirname)
export let mod02 = new LazyModule<typeof _mod02>('./mod02/index',__dirname)

View File

@ -1,77 +0,0 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import { npmtsOra } from './npmts.promisechain'
export type npmtsMode = 'default' | 'custom'
export interface npmtsConfig {
argv: any,
coverageTreshold: number,
docs: boolean,
mode: npmtsMode,
test: boolean,
testTs: any,
ts: any,
tsOptions: any
};
export var run = function (argvArg) {
let done = plugins.Q.defer()
let defaultConfig: npmtsConfig = {
argv: undefined,
coverageTreshold: 70,
docs: true,
mode: 'default',
test: true,
testTs: {},
ts: {},
tsOptions: {}
}
// mix with configfile
npmtsOra.text('looking for npmextra.json')
let config: npmtsConfig = plugins.npmextra.dataFor({
toolName: 'npmts',
defaultSettings: defaultConfig,
cwd: paths.cwd
})
// add argv
config.argv = argvArg
// check mode
switch (config.mode) {
case 'default':
case 'custom':
plugins.beautylog.ok('mode is ' + config.mode)
done.resolve(config)
break
default:
plugins.beautylog.error(`mode not recognised!`)
process.exit(1)
};
// handle default mode
if (config.mode === 'default') {
config.ts = {
['./ts/**/*.ts']: './dist/'
}
config.testTs = {
['./test/test.ts']: './test/'
}
};
// mix with commandline
if (config.argv.notest) {
config.test = false
};
if (config.argv.nodocs) {
config.docs = false
};
plugins.beautylog.ok('build options are ready!')
done.resolve(config)
return done.promise
}

View File

@ -1,4 +1,3 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
// NPMTS Paths

View File

@ -1,27 +1,36 @@
import 'typings-global'
export import beautylog = require('beautylog')
export let depcheck = require('depcheck')
export import gulp = require('gulp')
export let g = {
babel: require('gulp-babel'),
istanbul: require('gulp-istanbul'),
gFunction: require('gulp-function'),
injectModules: require('gulp-inject-modules'),
mocha: require('gulp-mocha'),
sourcemaps: require('gulp-sourcemaps'),
typedoc: require('gulp-typedoc')
};
export import lodashObject = require('lodash')
export import npmextra = require('npmextra')
export import projectinfo = require('projectinfo')
export import path = require('path')
export import Q = require('q')
export import shelljs = require('shelljs')
export import smartcli = require('smartcli')
export import smartcov = require('smartcov')
export import smartenv = require('smartenv')
export import smartfile = require('smartfile')
export import smartpath = require('smartpath')
export import smartstring = require('smartstring')
import * as beautylog from 'beautylog'
let depcheck = require('depcheck')
import * as lodash from 'lodash'
import * as npmextra from 'npmextra'
import * as projectinfo from 'projectinfo'
import * as path from 'path'
import * as smartanalytics from 'smartanalytics'
import * as smartcli from 'smartcli'
import * as smartenv from 'smartenv'
import * as smartfile from 'smartfile'
import * as smartpath from 'smartpath'
import * as smartstream from 'smartstream'
import * as smartstring from 'smartstring'
import * as smartsystem from 'smartsystem'
import * as through2 from 'through2'
export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing
export import tsn = require('tsn')
export {
beautylog,
depcheck,
lodash,
npmextra,
projectinfo,
path,
smartanalytics,
smartcli,
smartenv,
smartfile,
smartpath,
smartstream,
smartstring,
smartsystem,
through2
}

View File

@ -1,49 +0,0 @@
import 'typings-global';
import plugins = require('./npmts.plugins');
import {Ora} from 'beautylog'
export let npmtsOra = new Ora('setting up TaskChain','cyan');
import NpmtsAssets = require('./npmts.assets')
import NpmtsCheck = require('./npmts.check')
import NpmtsClean = require('./npmts.clean')
import NpmtsCompile = require('./npmts.compile')
import NpmtsTypeDoc = require('./npmts.typedoc')
import NpmtsOptions = require('./npmts.options')
import NpmtsTests = require('./npmts.tests')
export let promisechain = function(argvArg){
let done = plugins.Q.defer()
npmtsOra.start()
NpmtsOptions.run(argvArg)
.then(NpmtsClean.run)
.then(NpmtsCheck.run)
.then(NpmtsCompile.run)
.then(NpmtsAssets.run)
.then(NpmtsTypeDoc.run)
.then(NpmtsTests.run)
.then(function(configArg){
let shipString = '' +
'\n' +
'\n' +
' # # ( )\n' +
' ___#_#___|__\n' +
' _ |____________| _\n' +
' _=====| | | | | |==== _\n' +
' =====| |.---------------------------. | |====\n' +
" <--------------------' . . . . . . . . '--------------/\n" +
' \\ /\n' +
' \\___________________________________________________________/\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n' +
' wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww\n'
if (process.env.CI) {
console.log(shipString);
plugins.beautylog.success('READY TO SHIP!')
} else {
plugins.beautylog.success('Done!')
}
done.resolve()
});
return done.promise
};

30
ts/npmts.ship.ts Normal file
View File

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

View File

@ -1,94 +0,0 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import { npmtsOra } from './npmts.promisechain'
/**
*
* @returns {*}
*/
let mocha = function (configArg) {
npmtsOra.text('Instrumentalizing and testing transpiled JS')
npmtsOra.end() // end npmtsOra for tests.
let done = plugins.Q.defer()
plugins.gulp.src([plugins.path.join(paths.cwd, 'dist/*.js')])
.pipe(plugins.g.sourcemaps.init())
.pipe(plugins.g.babel({
presets: [
require.resolve('babel-preset-es2015')
]
}))
.pipe(plugins.g.istanbul({
}))
.pipe(plugins.g.sourcemaps.write())
.pipe(plugins.g.injectModules())
.on('finish', function () {
plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')])
.pipe(plugins.g.babel({
presets: [
require.resolve('babel-preset-es2015')
]
}))
.pipe(plugins.g.injectModules())
.pipe(plugins.g.mocha())
.pipe(plugins.g.istanbul.writeReports({
dir: plugins.path.join(paths.cwd, './coverage'),
reporters: ['lcovonly', 'json', 'text', 'text-summary']
}))
.pipe(plugins.g.gFunction(
function () {
plugins.beautylog.ok('Tested!')
done.resolve(configArg)
},
'atEnd'
))
})
return done.promise
}
let coverage = function (configArg) {
let done = plugins.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 {
plugins.beautylog.warn(
`${percentageArg.toString()}% `
+ `coverage fails your treshold of `
+ `${configArg.coverageTreshold.toString()}%`
)
plugins.beautylog.error('exiting due to coverage failure')
process.exit(1)
}
done.resolve(configArg)
})
return done.promise
}
export let run = function (configArg) {
let done = plugins.Q.defer()
let config = configArg
if (config.test === true) {
npmtsOra.text('now starting tests')
plugins.beautylog.log(
'-------------------------------------------------------\n' +
'*************************** TESTS: ***************************\n' +
'--------------------------------------------------------------'
)
mocha(config)
.then(coverage)
.then(() => {
done.resolve(config)
})
} else {
npmtsOra.end()
done.resolve(config)
}
return done.promise
}

View File

@ -1,45 +0,0 @@
import 'typings-global'
import plugins = require('./npmts.plugins')
import paths = require('./npmts.paths')
import { npmtsOra } from './npmts.promisechain'
import { projectInfo } from './npmts.check'
let genTypeDoc = function (configArg) {
let done = plugins.Q.defer()
npmtsOra.text('now generating ' + 'TypeDoc documentation'.yellow)
plugins.beautylog.log('TypeDoc Output:')
plugins.gulp.src(plugins.path.join(paths.tsDir, '**/*.ts'))
.pipe(plugins.g.typedoc({
// 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",
ignoreCompilerErrors: true,
version: true
}))
.pipe(plugins.g.gFunction(done.resolve, 'atEnd'))
return done.promise
}
export let run = function (configArg) {
let done = plugins.Q.defer()
if (configArg.docs) {
genTypeDoc(configArg)
.then(() => {
done.resolve(configArg)
})
} else {
done.resolve(configArg)
};
return done.promise
}

34
ts/npmts.watch.ts Normal file
View File

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

View File

@ -2,7 +2,12 @@
"compilerOptions": {
"declaration": true,
"module": "commonjs",
"target": "ES5",
"target": "ES6",
"outDir": "./dist/"
}
},
"exclude": [
"./node_modules",
"./test",
"./dist"
]
}

3394
yarn.lock Normal file

File diff suppressed because it is too large Load Diff