Compare commits

...

41 Commits

Author SHA1 Message Date
668fd0998f 8.0.38 2018-05-04 11:51:15 +02:00
e0611f3f64 8.0.37 2018-05-04 00:27:35 +02:00
928f3212a3 update dependencies 2018-05-04 00:27:31 +02:00
7c7e45ad54 8.0.36 2018-05-03 18:05:42 +02:00
797d9e2bcd add codequality step 2018-05-03 18:05:37 +02:00
578cd2d097 8.0.35 2018-05-03 13:30:05 +02:00
5a7dd901f0 update ci 2018-05-03 13:30:01 +02:00
2104fc01e6 update build 2018-05-03 13:28:46 +02:00
4eacef56d5 8.0.34 2018-05-03 13:05:24 +02:00
5722deb7a0 8.0.33 2018-05-03 12:57:29 +02:00
50d71dde67 update ci 2018-05-03 12:56:58 +02:00
13123e180d 8.0.32 2018-05-03 12:45:24 +02:00
b13db4184b update snyk security policy 2018-05-03 12:45:22 +02:00
19f6097ab9 8.0.31 2018-05-03 12:35:48 +02:00
34066d8a13 switch to seperate build/test commands to inrpove speed 2018-05-03 12:35:41 +02:00
df87337f4d 8.0.30 2018-04-09 01:28:46 +02:00
105e5c2ff0 fix npmextra.json 2018-04-09 01:26:14 +02:00
7115b699ba 8.0.29 2018-04-09 01:19:36 +02:00
8c7ac4c1d0 update snyk policy 2018-04-09 01:19:28 +02:00
fc8154b431 8.0.28 2018-04-09 01:03:49 +02:00
896e0095fa change npmts package name to being @gitzone scoped 2018-04-09 01:03:39 +02:00
7e46b55de5 8.0.27 2018-02-26 22:51:06 +01:00
6553e7432c now runs offline 2018-02-26 22:51:03 +01:00
cf4db90aef 8.0.26 2017-11-28 17:34:02 +01:00
8896d3ef76 refactor 2017-11-28 17:33:55 +01:00
c0b7dc2547 8.0.25 2017-11-25 20:57:51 +02:00
d65f19d108 update deps 2017-11-25 20:57:40 +02:00
5de4646453 8.0.24 2017-10-07 13:55:12 +02:00
44e9fcc977 update dependencies 2017-10-07 13:55:06 +02:00
784aec1ec3 8.0.23 2017-10-05 14:58:52 +02:00
61b7bbb168 change lib inclusion for tests 2017-10-05 14:58:49 +02:00
1d662ddef4 8.0.22 2017-09-23 00:00:27 +02:00
f7351c914e update dependencies 2017-09-23 00:00:25 +02:00
7132ae11a8 fix ci 2017-09-13 17:48:15 +02:00
b195b8911b switch position of mirror 2017-09-13 17:47:30 +02:00
e331e870d9 8.0.21 2017-09-13 17:44:34 +02:00
3a6bd3b583 now working when npms.io is down 2017-09-13 17:44:31 +02:00
594bccfc82 8.0.20 2017-09-11 14:30:36 +02:00
d9f1d36d14 update dependencies 2017-09-11 14:30:32 +02:00
f12c4aabd8 8.0.19 2017-09-08 18:04:44 +02:00
b62f7d8b31 update tracking domains 2017-09-08 18:04:40 +02:00
73 changed files with 6331 additions and 1721 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ pages/
public/ public/
npm-debug/ npm-debug/
.DS_Store .DS_Store
.yarn/

View File

@ -7,12 +7,49 @@ cache:
key: "$CI_BUILD_STAGE" key: "$CI_BUILD_STAGE"
stages: stages:
- security
- test - test
- release - release
- trigger - trigger
- mirror
- pages - pages
mirror:
stage: security
script:
- npmci git mirror
tags:
- docker
- notpriv
snyk:
stage: security
script:
- npmci command yarn global add snyk
- npmci command yarn install --ignore-scripts
- npmci command snyk test
tags:
- docker
- notpriv
codequality:
stage: security
image: docker:stable
allow_failure: true
services:
- docker:stable-dind
script:
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
- docker run
--env SOURCE_CODE="$PWD"
--volume "$PWD":/code
--volume /var/run/docker.sock:/var/run/docker.sock
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
artifacts:
paths: [codeclimate.json]
tags:
- docker
- priv
testLEGACY: testLEGACY:
stage: test stage: test
script: script:
@ -22,6 +59,7 @@ testLEGACY:
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- notpriv
allow_failure: true allow_failure: true
testLTS: testLTS:
@ -33,6 +71,7 @@ testLTS:
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- notpriv
testSTABLE: testSTABLE:
stage: test stage: test
@ -43,16 +82,19 @@ testSTABLE:
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- notpriv
release: release:
stage: release stage: release
script: script:
- npmci node install stable
- npmci npm prepare - npmci npm prepare
- npmci npm publish - npmci npm publish
only: only:
- tags - tags
tags: tags:
- docker - docker
- notpriv
trigger: trigger:
stage: trigger stage: trigger
@ -62,25 +104,17 @@ trigger:
- tags - tags
tags: tags:
- docker - docker
- notpriv
mirror:
image: hosttoday/ht-docker-node:npmci
stage: mirror
script:
- npmci git mirror
tags:
- docker
only:
- tags
pages: pages:
image: hosttoday/ht-docker-node:npmci image: hosttoday/ht-docker-node:npmci
stage: pages stage: pages
script: script:
- npmci command yarn global add npmpage - npmci command yarn global add npmpage
- npmci command npmpage --publish gitlab - npmci command npmpage
tags: tags:
- docker - docker
- notpriv
only: only:
- tags - tags
artifacts: artifacts:

View File

@ -1,6 +0,0 @@
compile/
coverage/
test/
docs/
examples
.gitignore

111
.snyk Normal file
View File

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

1
dist/index.d.ts vendored
View File

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

3
dist/index.js vendored
View File

@ -8,8 +8,7 @@ const early = require("early");
early.start('NPMTS'); early.start('NPMTS');
const plugins = require("./npmts.plugins"); const plugins = require("./npmts.plugins");
const cli = require("./npmts.cli"); const cli = require("./npmts.cli");
early.stop() early.stop().then(() => {
.then(() => {
let loaded = plugins; // to make sure plugins get actually loaded let loaded = plugins; // to make sure plugins get actually loaded
cli.run(); cli.run();
}); });

View File

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

View File

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

View File

@ -11,7 +11,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const q = require("smartq"); const q = require("smartq");
const projectinfo_1 = require("projectinfo"); const projectinfo_1 = require("projectinfo");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const plugins = require("./mod00.plugins"); const plugins = require("./mod.plugins");
let checkProjectTypings = (configArg) => { let checkProjectTypings = (configArg) => {
let done = q.defer(); let done = q.defer();
plugins.beautylog.ora.text('Check Module: Check Project Typings...'); plugins.beautylog.ora.text('Check Module: Check Project Typings...');
@ -20,20 +20,22 @@ let checkProjectTypings = (configArg) => {
plugins.beautylog.error(`please add typings field to package.json`); plugins.beautylog.error(`please add typings field to package.json`);
process.exit(1); process.exit(1);
} }
;
done.resolve(configArg); done.resolve(configArg);
return done.promise; return done.promise;
}; };
const depcheckOptions = { const depcheckOptions = {
ignoreBinPackage: false, ignoreBinPackage: false,
parsers: { parsers: {
// the target parsers
'*.ts': plugins.depcheck.parser.typescript '*.ts': plugins.depcheck.parser.typescript
}, },
detectors: [ detectors: [
// the target detectors
plugins.depcheck.detector.requireCallExpression, plugins.depcheck.detector.requireCallExpression,
plugins.depcheck.detector.importDeclaration plugins.depcheck.detector.importDeclaration
], ],
specials: [ specials: [
// the target special parsers
plugins.depcheck.special.eslint, plugins.depcheck.special.eslint,
plugins.depcheck.special.webpack plugins.depcheck.special.webpack
] ]
@ -43,16 +45,18 @@ let checkDependencies = (configArg) => {
plugins.beautylog.ora.text('Check Module: Check Dependencies...'); plugins.beautylog.ora.text('Check Module: Check Dependencies...');
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ ignoreDirs: [
// folder with these names will be ignored
'test', 'test',
'dist', 'dist',
'bower_components' 'bower_components'
], ],
ignoreMatches: [ ignoreMatches: [
// ignore dependencies that matches these globs
'@types/*', '@types/*',
'babel-preset-*' 'babel-preset-*'
] ]
}); });
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { plugins.depcheck(paths.cwd, depcheckOptionsMerged, unused => {
for (let item of unused.dependencies) { for (let item of unused.dependencies) {
plugins.beautylog.warn(`Watch out: unused dependency "${item}"`); plugins.beautylog.warn(`Watch out: unused dependency "${item}"`);
} }
@ -66,7 +70,6 @@ let checkDependencies = (configArg) => {
for (let item in unused.invalidFiles) { for (let item in unused.invalidFiles) {
plugins.beautylog.warn(`Watch out: could not parse file ${item}`); plugins.beautylog.warn(`Watch out: could not parse file ${item}`);
} }
;
for (let item in unused.invalidDirs) { for (let item in unused.invalidDirs) {
plugins.beautylog.warn(`Watch out: could not parse directory ${item}`); plugins.beautylog.warn(`Watch out: could not parse directory ${item}`);
} }
@ -79,16 +82,18 @@ let checkDevDependencies = (configArg) => {
plugins.beautylog.ora.text('Check Module: Check devDependencies...'); plugins.beautylog.ora.text('Check Module: Check devDependencies...');
let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, { let depcheckOptionsMerged = plugins.lodash.merge(depcheckOptions, {
ignoreDirs: [ ignoreDirs: [
// folder with these names will be ignored
'ts', 'ts',
'dist', 'dist',
'bower_components' 'bower_components'
], ],
ignoreMatches: [ ignoreMatches: [
// ignore dependencies that matches these globs
'@types/*', '@types/*',
'babel-preset-*' 'babel-preset-*'
] ]
}); });
plugins.depcheck(paths.cwd, depcheckOptionsMerged, (unused) => { plugins.depcheck(paths.cwd, depcheckOptionsMerged, unused => {
for (let item of unused.devDependencies) { for (let item of unused.devDependencies) {
plugins.beautylog.log(`unused devDependency ${item}`); plugins.beautylog.log(`unused devDependency ${item}`);
} }

View File

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

View File

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

View File

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

View File

@ -11,9 +11,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
/* ------------------------------------------ /* ------------------------------------------
* This module tests the compiled TypeScript files * This module tests the compiled TypeScript files
* -------------------------------------------- */ * -------------------------------------------- */
const plugins = require("./mod02.plugins"); const plugins = require("./mod.plugins");
const paths = require("../npmts.paths"); const paths = require("../npmts.paths");
const q = require("smartq"); const q = require("smartq");
let testTypeScriptConfig = {
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ESNext']
};
/** /**
* runs mocha * runs mocha
* @returns INpmtsConfig * @returns INpmtsConfig
@ -31,12 +37,7 @@ let tap = function (configArg) {
let testableFilesSmartstream = new plugins.smartstream.Smartstream([ let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]), plugins.smartgulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpSourcemaps.init(), plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({ plugins.gulpTypeScript(testTypeScriptConfig),
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpSourcemaps.write(), plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(), npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
@ -47,24 +48,16 @@ let tap = function (configArg) {
let testFilesSmartstream = new plugins.smartstream.Smartstream([ let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]), plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpSourcemaps.init(), plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript({ plugins.gulpTypeScript(testTypeScriptConfig),
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
}),
plugins.gulpSourcemaps.write(), plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(), npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe() plugins.smartstream.cleanPipe()
]); ]);
// lets run the smartstream // lets run the smartstream
Promise.all([ Promise.all([testableFilesSmartstream.run(), testFilesSmartstream.run()]).then(() => __awaiter(this, void 0, void 0, function* () {
testableFilesSmartstream.run(),
testFilesSmartstream.run()
]).then(() => __awaiter(this, void 0, void 0, function* () {
configArg.runData.coverageLcovInfo = yield npmtsTapBuffer.runTests(); configArg.runData.coverageLcovInfo = yield npmtsTapBuffer.runTests();
done.resolve(configArg); done.resolve(configArg);
}), (err) => { }), err => {
plugins.beautylog.error('Tests failed!'); plugins.beautylog.error('Tests failed!');
console.log(err); console.log(err);
if (configArg.watch) { if (configArg.watch) {
@ -85,14 +78,14 @@ let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function
plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?'); plugins.beautylog.warn('Hey... Did your tests import and use your module that you are trying to test?');
} }
if (coverageResult >= configArg.coverageTreshold) { if (coverageResult >= configArg.coverageTreshold) {
plugins.beautylog.ok(`${(coverageResult).toString()}% ` plugins.beautylog.ok(`${coverageResult.toString()}% ` +
+ `coverage exceeds your treshold of ` `coverage exceeds your treshold of ` +
+ `${configArg.coverageTreshold.toString()}%`); `${configArg.coverageTreshold.toString()}%`);
} }
else { else {
plugins.beautylog.warn(`${(coverageResult).toString()}% ` plugins.beautylog.warn(`${coverageResult.toString()}% ` +
+ `coverage fails your treshold of ` `coverage fails your treshold of ` +
+ `${configArg.coverageTreshold.toString()}%`); `${configArg.coverageTreshold.toString()}%`);
plugins.beautylog.error('exiting due to coverage failure'); plugins.beautylog.error('exiting due to coverage failure');
if (!configArg.watch) { if (!configArg.watch) {
process.exit(1); process.exit(1);
@ -100,6 +93,10 @@ let handleCoverageData = (configArg) => __awaiter(this, void 0, void 0, function
} }
return configArg; return configArg;
}); });
/**
* run this module
* @param configArg some config for how to run this module
*/
exports.run = function (configArg) { exports.run = function (configArg) {
let done = q.defer(); let done = q.defer();
let config = configArg; let config = configArg;
@ -112,13 +109,19 @@ exports.run = function (configArg) {
.then(handleCoverageData) .then(handleCoverageData)
.then(() => { .then(() => {
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); })
.catch(err => {
console.log(err);
});
} }
else { else {
tap(config) tap(config)
.then(() => { .then(() => {
done.resolve(config); done.resolve(config);
}).catch(err => { console.log(err); }); })
.catch(err => {
console.log(err);
});
} }
} }
else { else {

54
dist/npmts.cli.js vendored
View File

@ -27,18 +27,20 @@ const NpmtsShip = require("./npmts.ship");
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html * Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/ */
let npmtsAnalytics = new plugins.smartanalytics.Analytics({ let npmtsAnalytics = new plugins.smartanalytics.Analytics({
apiEndPoint: 'https://pubapi-1.lossless.one/analytics', apiEndPoint: 'https://pubapi.lossless.one/analytics',
projectId: 'gitzone', projectId: 'gitzone',
appName: 'npmts' appName: 'npmts'
}); });
process.nextTick(() => __awaiter(this, void 0, void 0, function* () { process.nextTick(() => __awaiter(this, void 0, void 0, function* () {
// make the analytics call // make the analytics call
npmtsAnalytics.recordEvent('npmToolExecution', { npmtsAnalytics
.recordEvent('npmToolExecution', {
executionMode: (yield NpmtsConfig.configPromise).mode, executionMode: (yield NpmtsConfig.configPromise).mode,
tsOptions: (yield NpmtsConfig.configPromise).tsOptions, tsOptions: (yield NpmtsConfig.configPromise).tsOptions,
watch: (yield NpmtsConfig.configPromise).watch, watch: (yield NpmtsConfig.configPromise).watch,
coverageTreshold: (yield NpmtsConfig.configPromise).coverageTreshold coverageTreshold: (yield NpmtsConfig.configPromise).coverageTreshold
}).catch(err => { })
.catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...'); plugins.beautylog.warn('Lossless Analytics API not available...');
}); });
})); }));
@ -50,23 +52,25 @@ exports.run = () => __awaiter(this, void 0, void 0, function* () {
yield plugins.smartupdate.standardHandler.check('npmts', npmtsProjectInfo.version, 'http://gitzone.gitlab.io/npmts/changelog.html'); yield plugins.smartupdate.standardHandler.check('npmts', npmtsProjectInfo.version, 'http://gitzone.gitlab.io/npmts/changelog.html');
plugins.beautylog.log('---------------------------------------------'); plugins.beautylog.log('---------------------------------------------');
let npmtsCli = new plugins.smartcli.Smartcli(); let npmtsCli = new plugins.smartcli.Smartcli();
npmtsCli.standardTask() // build
.then((argvArg) => { npmtsCli
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version); .addCommand('build')
return NpmtsConfig.run(argvArg); .subscribe((argvArg) => __awaiter(this, void 0, void 0, function* () {
})
.then((configArg) => {
let done = q.defer(); let done = q.defer();
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
const configArg = yield NpmtsConfig.run(argvArg);
plugins.beautylog.ora.start('loading additional modules...'); plugins.beautylog.ora.start('loading additional modules...');
NpmtsMods.mod00.load() NpmtsMods.modCompile
.then((mod00) => { .load()
return mod00.run(configArg); .then(modCompile => {
return modCompile.run(configArg);
}) })
.then(configArg => { .then(configArg => {
let done = q.defer(); let done = q.defer();
NpmtsMods.mod01.load() NpmtsMods.modDocs
.then(mod01 => { .load()
return mod01.run(configArg); .then(modDocs => {
return modDocs.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg); done.resolve(configArg);
@ -75,9 +79,10 @@ exports.run = () => __awaiter(this, void 0, void 0, function* () {
}) })
.then(configArg => { .then(configArg => {
let done = q.defer(); let done = q.defer();
NpmtsMods.mod02.load() NpmtsMods.modTest
.then(mod02 => { .load()
return mod02.run(configArg); .then(modTest => {
return modTest.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg); done.resolve(configArg);
@ -87,11 +92,18 @@ exports.run = () => __awaiter(this, void 0, void 0, function* () {
.then(NpmtsWatch.run) .then(NpmtsWatch.run)
.then(NpmtsShip.run); .then(NpmtsShip.run);
return done.promise; return done.promise;
}) }), err => {
.catch((err) => { if (err instanceof Error) { if (err instanceof Error) {
console.log(err); console.log(err);
} }); }
});
// standard task
npmtsCli.standardTask().subscribe((argvArg) => __awaiter(this, void 0, void 0, function* () {
yield npmtsCli.trigger('build');
}));
// cli metadata
npmtsCli.addVersion(npmtsProjectInfo.version); npmtsCli.addVersion(npmtsProjectInfo.version);
// start parsing
npmtsCli.startParse(); npmtsCli.startParse();
return yield done.promise; return yield done.promise;
}); });

View File

@ -22,5 +22,5 @@ export interface INpmtsConfig {
coverageResult?: number; coverageResult?: number;
}; };
} }
export declare let run: (argvArg: any) => Promise<{}>; export declare let run: (argvArg: any) => Promise<INpmtsConfig>;
export declare let configPromise: Promise<INpmtsConfig>; export declare let configPromise: Promise<INpmtsConfig>;

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

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

6
dist/npmts.mods.js vendored
View File

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

View File

@ -1,4 +1,3 @@
import 'typings-global';
import * as beautylog from 'beautylog'; import * as beautylog from 'beautylog';
declare let depcheck: any; declare let depcheck: any;
import * as lodash from 'lodash'; import * as lodash from 'lodash';
@ -6,7 +5,7 @@ import * as npmextra from 'npmextra';
import * as projectinfo from 'projectinfo'; import * as projectinfo from 'projectinfo';
import * as path from 'path'; import * as path from 'path';
import * as smartanalytics from 'smartanalytics'; import * as smartanalytics from 'smartanalytics';
import * as smartcli from 'smartcli'; import * as smartcli from '@pushrocks/smartcli';
import * as smarterror from 'smarterror'; import * as smarterror from 'smarterror';
import * as smartfile from 'smartfile'; import * as smartfile from 'smartfile';
import * as smartpath from 'smartpath'; import * as smartpath from 'smartpath';

View File

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

2
dist/npmts.watch.js vendored
View File

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

View File

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

View File

@ -1,15 +1,19 @@
--- ---
name: config name: config
--- ---
# Configuration # Configuration
npmts can be configured to your needs. npmts can be configured to your needs.
### npmextra.json ### npmextra.json
the npmts section in npmextra.json can be used to configure npmts. the npmts section in npmextra.json can be used to configure npmts.
**Default** **Default**
> Note: When you are using `"mode":"default"` it'll cause npmts to override any other settings you may have made except for tsOptions (ES target etc.) > Note: When you are using `"mode":"default"` it'll cause npmts to override any other settings you may have made except for tsOptions (ES target etc.)
with default behaviour. > with default behaviour.
```json ```json
{ {
@ -20,6 +24,7 @@ with default behaviour.
``` ```
**Custom settings** **Custom settings**
```json ```json
{ {
"mode": "custom", "mode": "custom",
@ -38,7 +43,7 @@ with default behaviour.
``` ```
| key | default value | description | | key | default value | description |
| --- | --- | --- | | -------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify, "merge" will merge default options with whatever you specify on your own | | `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify, "merge" will merge default options with whatever you specify on your own |
| `"test"` | `true` | test your module | | `"test"` | `true` | test your module |
| `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions | | `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions |
@ -47,12 +52,14 @@ with default behaviour.
| `"testConfig"` | `{ parallel: true, coverage: true }` | allows you to control test behaviour. `"parallel"` controls wether testfiles are run sequentially or in parallel, and `"coverage` wether to create coverage reports | | `"testConfig"` | `{ parallel: true, coverage: true }` | allows you to control test behaviour. `"parallel"` controls wether testfiles are run sequentially or in parallel, and `"coverage` wether to create coverage reports |
### TypeScript ### TypeScript
by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to
`./dist/*.js` and `./test/test.js` `./dist/*.js` and `./test/test.js`
Use commonjs module system for wiring up files. Use commonjs module system for wiring up files.
### Declaration files ### Declaration files
**npmts** also creates declaration files like `./dist/index.d.ts` by default. **npmts** also creates declaration files like `./dist/index.d.ts` by default.
You can reference it in your package.json like this. You can reference it in your package.json like this.
@ -66,12 +73,16 @@ You can then import plugins via the TypeScript `import` Syntax
and tsc will pick up the declaration file automatically. and tsc will pick up the declaration file automatically.
## Some notes: ## Some notes:
#### Typings for third party modules that do not bundle declaration files #### Typings for third party modules that do not bundle declaration files
NPMTS no longer supports typings.json. Instead use the new TypeScript 2.x approach to typings using the @types/ npm scope. NPMTS no longer supports typings.json. Instead use the new TypeScript 2.x approach to typings using the @types/ npm scope.
#### Instrumentalize Code #### Instrumentalize Code
npmts instrumentalizes (using istanbul) the created JavaScript code to create a coverage report. npmts instrumentalizes (using istanbul) the created JavaScript code to create a coverage report.
#### Tests #### Tests
Any errors will be shown with reference to their originating source in TypeScript Any errors will be shown with reference to their originating source in TypeScript
thanks to autogenerated source maps. thanks to autogenerated source maps.

View File

@ -1,7 +1,9 @@
--- ---
name: Default Behaviour name: Default Behaviour
--- ---
# Default Behaviour # Default Behaviour
when you don't configure it otherwise. when you don't configure it otherwise.
1. **Config:** Check config in ./npmextra.json (Check out [npmextra](https://www.npmjs.com/package/npmextra)) 1. **Config:** Check config in ./npmextra.json (Check out [npmextra](https://www.npmjs.com/package/npmextra))

View File

@ -1,15 +1,17 @@
--- ---
name: Examples name: Examples
--- ---
# Examples # Examples
modules that use npmts in theis development workflow modules that use npmts in theis development workflow
Module Name | Description | Module Name | Description |
--- | --- | ---------------------------------------------------------- | --------------------------- |
[gitzone](https://www.npmjs.com/package/gitzone) | fast npm module prototyping | [gitzone](https://www.npmjs.com/package/gitzone) | fast npm module prototyping |
[gulp-browser](https://www.npmjs.com/package/gulp-browser) | browserify for gulp | [gulp-browser](https://www.npmjs.com/package/gulp-browser) | browserify for gulp |
[npmdocker](https://www.npmjs.com/package/npmdocker) | dockerized npm development | [npmdocker](https://www.npmjs.com/package/npmdocker) | dockerized npm development |
[smartcli](https://www.npmjs.com/package/smartcli) | easy cli tool creation | [smartcli](https://www.npmjs.com/package/smartcli) | easy cli tool creation |
> There are tons more... We will add them here over time. > There are tons more... We will add them here over time.

View File

@ -2,7 +2,9 @@
name: Get Started name: Get Started
description: learn how to quickly write npm TypeScript modules description: learn how to quickly write npm TypeScript modules
--- ---
# Get Started with NPMTS # Get Started with NPMTS
and learn how to quickly write npm TypeScript modules and learn how to quickly write npm TypeScript modules
## Step1: Install the tools ## Step1: Install the tools

View File

@ -2,16 +2,20 @@
name: Index name: Index
description: best practice npm TypeScript modules description: best practice npm TypeScript modules
--- ---
# npmts # npmts
best practice npm TypeScript modules best practice npm TypeScript modules
## Availabililty ## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts) [![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts) [![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts) [![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts)
[![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/) [![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## Status for master ## Status for master
[![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts) [![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts)
@ -23,9 +27,11 @@ best practice npm TypeScript modules
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Quick Demo ## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0) [![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage ## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript. NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
npmts will npmts will
@ -41,6 +47,6 @@ This works on your machine and in CI. There is a prebuild docker image available
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/) [hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) > | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https:/git.zone) [![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https:/git.zone)

View File

@ -1,8 +1,9 @@
# Install npmts # Install npmts
Get started with TypeScript awesomeness. Get started with TypeScript awesomeness.
> **npmts-g* checks if the global version of npmts suffices the modules requirements. > \*_npmts-g_ checks if the global version of npmts suffices the modules requirements.
If not it installs npmts locally in the right version during npm install. > If not it installs npmts locally in the right version during npm install.
```sh ```sh
npm install npmts -g # installs npmts globally npm install npmts -g # installs npmts globally

View File

@ -2,6 +2,7 @@
name: npmts project structure name: npmts project structure
description: how npmts projects are structured description: how npmts projects are structured
--- ---
# npmts - Project Structure # npmts - Project Structure
**locally** **locally**

5
npmextra.json Normal file
View File

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

View File

@ -1,6 +1,6 @@
{ {
"name": "npmts", "name": "@gitzone/npmts",
"version": "8.0.18", "version": "8.0.38",
"description": "best practice npm TypeScript modules", "description": "best practice npm TypeScript modules",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {
@ -8,6 +8,7 @@
}, },
"scripts": { "scripts": {
"test": "(npm run compile && npm run prepareTest && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)", "test": "(npm run compile && npm run prepareTest && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)",
"build": "npm test",
"testShort": "(npm run compile && npm run check)", "testShort": "(npm run compile && npm run check)",
"prepareTest": "(rm -rf test/)", "prepareTest": "(rm -rf test/)",
"compile": "(rm -rf dist/ && tsc)", "compile": "(rm -rf dist/ && tsc)",
@ -34,36 +35,37 @@
}, },
"homepage": "https://gitlab.com/gitzone/npmts#readme", "homepage": "https://gitlab.com/gitzone/npmts#readme",
"dependencies": { "dependencies": {
"@types/gulp-sourcemaps": "0.0.31", "@pushrocks/smartcli": "^3.0.1",
"@types/gulp-sourcemaps": "0.0.32",
"@types/minimatch": "^3.0.1", "@types/minimatch": "^3.0.1",
"@types/through2": "^2.0.33", "@types/through2": "^2.0.33",
"beautylog": "^6.1.10", "beautylog": "^6.1.10",
"depcheck": "^0.6.7", "depcheck": "^0.6.9",
"early": "^2.1.1", "early": "^2.1.1",
"gulp-function": "^2.2.9", "gulp-function": "^2.2.9",
"gulp-sourcemaps": "^2.6.1", "gulp-sourcemaps": "^2.6.1",
"gulp-typescript": "^3.2.2", "gulp-typescript": "^4.0.2",
"lodash": "^4.17.4", "lodash": "^4.17.10",
"npmextra": "^2.0.9", "npmextra": "^2.0.9",
"projectinfo": "^3.0.2", "projectinfo": "^3.0.4",
"smartanalytics": "^2.0.8", "smartanalytics": "^2.0.9",
"smartchok": "^1.0.11", "smartchok": "1.0.14",
"smartcli": "^2.0.7",
"smartcov": "^1.0.2", "smartcov": "^1.0.2",
"smarterror": "^1.0.3", "smarterror": "^1.0.3",
"smartfile": "^4.2.20", "smartfile": "^4.2.26",
"smartgulp": "^1.0.6", "smartgulp": "^1.0.6",
"smartpath": "^3.2.8", "smartpath": "^3.2.8",
"smartq": "^1.1.6", "smartq": "^1.1.8",
"smartstream": "^1.0.10", "smartstream": "^1.0.10",
"smartstring": "^2.0.24", "smartstring": "^2.0.28",
"smartsystem": "^2.0.2", "smartsystem": "^2.0.2",
"smartupdate": "^1.0.10", "smartupdate": "^1.0.13",
"tapbuffer": "^1.0.29", "tapbuffer": "^1.0.31",
"through2": "^2.0.3", "through2": "^2.0.3",
"tsn": "^2.0.15", "tsn": "^2.0.15",
"typescript": "^2.4.2", "typescript": "^2.8.3"
"typings-global": "^1.0.20"
}, },
"devDependencies": {} "devDependencies": {
"@types/node": "^10.0.3"
}
} }

View File

@ -1,27 +1,32 @@
# npmts # npmts
best practice npm TypeScript modules best practice npm TypeScript modules
## Availabililty ## Availabililty
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![npm](https://gitzone.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/@gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts) [![git](https://gitzone.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/gitzone/npmts)
[![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts) [![git](https://gitzone.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/gitzone/npmts)
[![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/) [![docs](https://gitzone.gitlab.io/assets/repo-button-docs.svg)](https://gitzone.gitlab.io/npmts/)
## Status for master ## Status for master
[![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![build status](https://GitLab.com/gitzone/npmts/badges/master/build.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master) [![coverage report](https://GitLab.com/gitzone/npmts/badges/master/coverage.svg)](https://GitLab.com/gitzone/npmts/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/npmts.svg)](https://www.npmjs.com/package/npmts) [![npm downloads per month](https://img.shields.io/npm/dm/@gitzone/npmts.svg)](https://www.npmjs.com/package/npmts)
[![Dependency Status](https://david-dm.org/gitzonetools/npmts.svg)](https://david-dm.org/gitzonetools/npmts)
[![bitHound Dependencies](https://www.bithound.io/github/gitzonetools/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzonetools/npmts/master/dependencies/npm) [![bitHound Dependencies](https://www.bithound.io/github/gitzonetools/npmts/badges/dependencies.svg)](https://www.bithound.io/github/gitzonetools/npmts/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/gitzonetools/npmts/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmts) [![bitHound Code](https://www.bithound.io/github/gitzonetools/npmts/badges/code.svg)](https://www.bithound.io/github/gitzonetools/npmts)
[![Known Vulnerabilities](https://snyk.io/test/npm/@gitzone/npmts/badge.svg)]
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Quick Demo ## Quick Demo
[![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0) [![asciicast](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze.png)](https://asciinema.org/a/9c3assmh21i49qhe5lmi48sze?speed=2&t=0)
## Usage ## Usage
NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript. NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript.
npmts will npmts will
@ -39,11 +44,12 @@ This works on your machine and in CI. There is a prebuild docker image available
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/) [hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
## Changelog ## Changelog
For breaking changes please see the [changelog](https://gitzone.gitlab.io/npmts/changelog.html). For breaking changes please see the [changelog](https://gitzone.gitlab.io/npmts/changelog.html).
For further information read the linked docs at the top of this README. For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh) > MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html) > | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks) [![repo-footer](https://gitzone.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

View File

@ -3,12 +3,11 @@
Fabulous TypeScript development Fabulous TypeScript development
* ================================================== */ * ================================================== */
import * as early from 'early' import * as early from 'early';
early.start('NPMTS') early.start('NPMTS');
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins';
import * as cli from './npmts.cli' import * as cli from './npmts.cli';
early.stop() early.stop().then(() => {
.then(() => { let loaded = plugins; // to make sure plugins get actually loaded
let loaded = plugins // to make sure plugins get actually loaded cli.run();
cli.run() });
})

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

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

View File

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

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

@ -0,0 +1,145 @@
/* ------------------------------------------
* This module tests the compiled TypeScript files
* -------------------------------------------- */
import plugins = require('./mod.plugins');
import paths = require('../npmts.paths');
import * as q from 'smartq';
// interfaces
import { INpmtsConfig } from '../npmts.config';
import { Smartfile } from 'smartfile';
let testTypeScriptConfig = {
target: 'ES5',
emitDecoratorMetadata: true,
experimentalDecorators: true,
lib: ['DOM', 'ESNext']
};
/**
* runs mocha
* @returns INpmtsConfig
*/
let tap = function(configArg: INpmtsConfig) {
let done = q.defer();
/**
* the TabBuffer for npmts
*/
let npmtsTapBuffer = new plugins.tapbuffer.TabBuffer();
npmtsTapBuffer.setConfig(configArg.testConfig);
/**
* handle the testable files
*/
let testableFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, './ts/**/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestableFiles(),
plugins.smartstream.cleanPipe()
]);
/**
* handle the test files
*/
let testFilesSmartstream = new plugins.smartstream.Smartstream([
plugins.smartgulp.src([plugins.path.join(paths.cwd, 'test/*.ts')]),
plugins.gulpSourcemaps.init(),
plugins.gulpTypeScript(testTypeScriptConfig),
plugins.gulpSourcemaps.write(),
npmtsTapBuffer.pipeTestFiles(),
plugins.smartstream.cleanPipe()
]);
// lets run the smartstream
Promise.all([testableFilesSmartstream.run(), testFilesSmartstream.run()]).then(
async () => {
configArg.runData.coverageLcovInfo = await npmtsTapBuffer.runTests();
done.resolve(configArg);
},
err => {
plugins.beautylog.error('Tests failed!');
console.log(err);
if (configArg.watch) {
done.resolve(configArg);
} else {
process.exit(1);
}
}
);
return done.promise;
};
let handleCoverageData = async (configArg: INpmtsConfig) => {
let coverageResult: number = 0; // the coverage in percent
if (configArg.runData.coverageLcovInfo) {
coverageResult = await plugins.smartcov.get.percentageFromLcovString(
configArg.runData.coverageLcovInfo,
2
);
} else {
plugins.beautylog.warn(
'Hey... Did your tests import and use your module that you are trying to test?'
);
}
if (coverageResult >= configArg.coverageTreshold) {
plugins.beautylog.ok(
`${coverageResult.toString()}% ` +
`coverage exceeds your treshold of ` +
`${configArg.coverageTreshold.toString()}%`
);
} else {
plugins.beautylog.warn(
`${coverageResult.toString()}% ` +
`coverage fails your treshold of ` +
`${configArg.coverageTreshold.toString()}%`
);
plugins.beautylog.error('exiting due to coverage failure');
if (!configArg.watch) {
process.exit(1);
}
}
return configArg;
};
/**
* run this module
* @param configArg some config for how to run this module
*/
export let run = function(configArg: INpmtsConfig) {
let done = q.defer<INpmtsConfig>();
let config = configArg;
if (config.test === true) {
plugins.beautylog.ora.text('now starting tests');
plugins.beautylog.ora.end();
plugins.beautylog.log('ready for tapbuffer:');
if (configArg.testConfig.coverage) {
tap(config)
.then(handleCoverageData)
.then(() => {
done.resolve(config);
})
.catch(err => {
console.log(err);
});
} else {
tap(config)
.then(() => {
done.resolve(config);
})
.catch(err => {
console.log(err);
});
}
} else {
plugins.beautylog.ora.end();
done.resolve(config);
}
return done.promise;
};

View File

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

View File

@ -1,11 +1,11 @@
import * as q from 'smartq' import * as q from 'smartq';
import * as plugins from './npmts.plugins' import * as plugins from './npmts.plugins';
import * as paths from './npmts.paths' import * as paths from './npmts.paths';
import * as NpmtsConfig from './npmts.config' import * as NpmtsConfig from './npmts.config';
import * as NpmtsMods from './npmts.mods' import * as NpmtsMods from './npmts.mods';
import * as NpmtsWatch from './npmts.watch' import * as NpmtsWatch from './npmts.watch';
import * as NpmtsShip from './npmts.ship' import * as NpmtsShip from './npmts.ship';
/** /**
* smartanalytics * smartanalytics
@ -19,73 +19,97 @@ import * as NpmtsShip from './npmts.ship'
* Our privacy policy can be found here: https://lossless.gmbh/privacy.html * Our privacy policy can be found here: https://lossless.gmbh/privacy.html
*/ */
let npmtsAnalytics = new plugins.smartanalytics.Analytics({ let npmtsAnalytics = new plugins.smartanalytics.Analytics({
apiEndPoint: 'https://pubapi-1.lossless.one/analytics', apiEndPoint: 'https://pubapi.lossless.one/analytics',
projectId: 'gitzone', projectId: 'gitzone',
appName: 'npmts' appName: 'npmts'
}) });
process.nextTick(async () => { process.nextTick(async () => {
// make the analytics call // make the analytics call
npmtsAnalytics.recordEvent('npmToolExecution', { npmtsAnalytics
.recordEvent('npmToolExecution', {
executionMode: (await NpmtsConfig.configPromise).mode, executionMode: (await NpmtsConfig.configPromise).mode,
tsOptions: (await NpmtsConfig.configPromise).tsOptions, tsOptions: (await NpmtsConfig.configPromise).tsOptions,
watch: (await NpmtsConfig.configPromise).watch, watch: (await NpmtsConfig.configPromise).watch,
coverageTreshold: (await NpmtsConfig.configPromise).coverageTreshold coverageTreshold: (await NpmtsConfig.configPromise).coverageTreshold
}).catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...')
})
}) })
.catch(err => {
plugins.beautylog.warn('Lossless Analytics API not available...');
});
});
export let run = async () => { export let run = async () => {
let done = q.defer() let done = q.defer();
plugins.beautylog.figletSync('NPMTS') plugins.beautylog.figletSync('NPMTS');
let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot) let npmtsProjectInfo = new plugins.projectinfo.ProjectinfoNpm(paths.npmtsPackageRoot);
// check for updates // check for updates
await plugins.smartupdate.standardHandler.check('npmts', npmtsProjectInfo.version, 'http://gitzone.gitlab.io/npmts/changelog.html') await plugins.smartupdate.standardHandler.check(
plugins.beautylog.log('---------------------------------------------') 'npmts',
let npmtsCli = new plugins.smartcli.Smartcli() npmtsProjectInfo.version,
npmtsCli.standardTask() 'http://gitzone.gitlab.io/npmts/changelog.html'
.then((argvArg) => { );
plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version) plugins.beautylog.log('---------------------------------------------');
return NpmtsConfig.run(argvArg) let npmtsCli = new plugins.smartcli.Smartcli();
})
.then((configArg: NpmtsConfig.INpmtsConfig) => { // build
let done = q.defer() npmtsCli.addCommand('build').subscribe(
plugins.beautylog.ora.start('loading additional modules...') async argvArg => {
NpmtsMods.mod00.load() let done = q.defer();
.then((mod00) => { plugins.beautylog.info('npmts version: ' + npmtsProjectInfo.version);
return mod00.run(configArg) const configArg: NpmtsConfig.INpmtsConfig = await NpmtsConfig.run(argvArg);
plugins.beautylog.ora.start('loading additional modules...');
NpmtsMods.modCompile
.load()
.then(modCompile => {
return modCompile.run(configArg);
}) })
.then(configArg => { .then(configArg => {
let done = q.defer<NpmtsConfig.INpmtsConfig>() let done = q.defer<NpmtsConfig.INpmtsConfig>();
NpmtsMods.mod01.load() NpmtsMods.modDocs
.then(mod01 => { .load()
return mod01.run(configArg) .then(modDocs => {
return modDocs.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg) done.resolve(configArg);
}) });
return done.promise return done.promise;
}) })
.then(configArg => { .then(configArg => {
let done = q.defer<NpmtsConfig.INpmtsConfig>() let done = q.defer<NpmtsConfig.INpmtsConfig>();
NpmtsMods.mod02.load() NpmtsMods.modTest
.then(mod02 => { .load()
return mod02.run(configArg) .then(modTest => {
return modTest.run(configArg);
}) })
.then(configArg => { .then(configArg => {
done.resolve(configArg) done.resolve(configArg);
}) });
return done.promise return done.promise;
}) })
.then(NpmtsWatch.run) .then(NpmtsWatch.run)
.then(NpmtsShip.run) .then(NpmtsShip.run);
return done.promise return done.promise;
}) },
.catch((err) => { if (err instanceof Error) { console.log(err) } }) err => {
npmtsCli.addVersion(npmtsProjectInfo.version) if (err instanceof Error) {
npmtsCli.startParse() console.log(err);
return await done.promise
} }
}
);
// standard task
npmtsCli.standardTask().subscribe(async argvArg => {
await npmtsCli.trigger('build');
});
// cli metadata
npmtsCli.addVersion(npmtsProjectInfo.version);
// start parsing
npmtsCli.startParse();
return await done.promise;
};

View File

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

View File

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

View File

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

View File

@ -1,21 +1,20 @@
import 'typings-global' import * as beautylog from 'beautylog';
import * as beautylog from 'beautylog' let depcheck = require('depcheck');
let depcheck = require('depcheck')
import * as lodash from 'lodash' import * as lodash from 'lodash';
import * as npmextra from 'npmextra' import * as npmextra from 'npmextra';
import * as projectinfo from 'projectinfo' import * as projectinfo from 'projectinfo';
import * as path from 'path' import * as path from 'path';
import * as smartanalytics from 'smartanalytics' import * as smartanalytics from 'smartanalytics';
import * as smartcli from 'smartcli' import * as smartcli from '@pushrocks/smartcli';
import * as smarterror from 'smarterror' import * as smarterror from 'smarterror';
import * as smartfile from 'smartfile' import * as smartfile from 'smartfile';
import * as smartpath from 'smartpath' import * as smartpath from 'smartpath';
import * as smartstream from 'smartstream' import * as smartstream from 'smartstream';
import * as smartstring from 'smartstring' import * as smartstring from 'smartstring';
import * as smartsystem from 'smartsystem' import * as smartsystem from 'smartsystem';
import * as smartupdate from 'smartupdate' import * as smartupdate from 'smartupdate';
import * as through2 from 'through2' import * as through2 from 'through2';
export { export {
beautylog, beautylog,
@ -34,4 +33,4 @@ export {
smartsystem, smartsystem,
smartupdate, smartupdate,
through2 through2
} };

View File

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

View File

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

4026
yarn-error.log Normal file

File diff suppressed because it is too large Load Diff

2279
yarn.lock

File diff suppressed because it is too large Load Diff