From 7c960649bcdd9dad40b3cfd977e89f88709669da Mon Sep 17 00:00:00 2001 From: PhilKunz Date: Sun, 25 Sep 2016 20:22:10 +0200 Subject: [PATCH] add smartstream --- .gitignore | 2 ++ README.md | 8 ++++++- dist/npmts.plugins.d.ts | 1 + dist/npmts.plugins.js | 1 + dist/npmts.tests.d.ts | 3 ++- dist/npmts.tests.js | 49 +++++++++++++++++++++++++---------------- dist/npmts.watch.d.ts | 3 ++- dist/npmts.watch.js | 3 +++ docs/index.md | 42 +++++++++++++++++++++++++++++++++++ gitbook/index.md | 10 +++++++-- npm-debug.log | 32 +++++++++++++++++++++++++++ package.json | 5 +++-- ts/npmts.plugins.ts | 1 + ts/npmts.tests.ts | 43 ++++++++++++++++++++---------------- ts/npmts.watch.ts | 6 ++++- 15 files changed, 163 insertions(+), 46 deletions(-) create mode 100644 docs/index.md create mode 100644 npm-debug.log diff --git a/.gitignore b/.gitignore index 990d88b..664c487 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ node_modules/ test/ pages/ +public/ +npm-debug/ .DS_Store \ No newline at end of file diff --git a/README.md b/README.md index 79f195f..ab0ede0 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,12 @@ npmts will 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. +For further information read the docs: + * [1. Intro](https://pushrocks.gitlab.io/npmts/gitbook/index.md) + * [2. Install](https://pushrocks.gitlab.io/npmts/gitbook/install.md) + * [3. Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.md) + * [4. Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.md) + * [5. Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.md) + * [6. Info](https://pushrocks.gitlab.io/npmts/gitbook/info.md) [![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) diff --git a/dist/npmts.plugins.d.ts b/dist/npmts.plugins.d.ts index 79bf093..eea1be2 100644 --- a/dist/npmts.plugins.d.ts +++ b/dist/npmts.plugins.d.ts @@ -23,6 +23,7 @@ export import smartcov = require('smartcov'); export import smartenv = require('smartenv'); export import smartfile = require('smartfile'); export import smartpath = require('smartpath'); +export import smartstream = require('smartstream'); export import smartstring = require('smartstring'); export declare let sourceMapSupport: any; export import tsn = require('tsn'); diff --git a/dist/npmts.plugins.js b/dist/npmts.plugins.js index 6ee61f3..2a3639c 100644 --- a/dist/npmts.plugins.js +++ b/dist/npmts.plugins.js @@ -24,6 +24,7 @@ exports.smartcov = require("smartcov"); exports.smartenv = require("smartenv"); exports.smartfile = require("smartfile"); exports.smartpath = require("smartpath"); +exports.smartstream = require("smartstream"); exports.smartstring = require("smartstring"); exports.sourceMapSupport = require('source-map-support').install(); // display errors correctly during testing exports.tsn = require("tsn"); diff --git a/dist/npmts.tests.d.ts b/dist/npmts.tests.d.ts index deb1665..cac7e20 100644 --- a/dist/npmts.tests.d.ts +++ b/dist/npmts.tests.d.ts @@ -1,4 +1,5 @@ /// import 'typings-global'; import plugins = require('./npmts.plugins'); -export declare let run: (configArg: any) => plugins.q.Promise<{}>; +import { INpmtsConfig } from './npmts.options'; +export declare let run: (configArg: INpmtsConfig) => plugins.q.Promise<{}>; diff --git a/dist/npmts.tests.js b/dist/npmts.tests.js index 0b023ef..8ff5458 100644 --- a/dist/npmts.tests.js +++ b/dist/npmts.tests.js @@ -4,8 +4,8 @@ const plugins = require("./npmts.plugins"); const paths = require("./npmts.paths"); const npmts_promisechain_1 = require("./npmts.promisechain"); /** - * - * @returns {*} + * runs mocha + * @returns INpmtsConfig */ let mocha = function (configArg) { npmts_promisechain_1.npmtsOra.text('Instrumentalizing and testing transpiled JS'); @@ -22,22 +22,31 @@ let mocha = function (configArg) { .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')); + let localSmartstream = new plugins.smartstream.Smartstream([ + plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]), + plugins.g.babel({ + presets: [ + require.resolve('babel-preset-es2015') + ] + }), + plugins.g.injectModules(), + plugins.g.mocha(), + plugins.g.istanbul.writeReports({ + dir: plugins.path.join(paths.cwd, './coverage'), + reporters: ['lcovonly', 'json', 'text', 'text-summary'] + }) + ]); + localSmartstream.run() + .then(() => { done.resolve(configArg); }, (err) => { + plugins.beautylog.error('Tests failed!'); + configArg.watch = true; + if (configArg.watch) { + done.resolve(configArg); + } + else { + process.exit(1); + } + }); }); return done.promise; }; @@ -55,7 +64,9 @@ let coverage = function (configArg) { + `coverage fails your treshold of ` + `${configArg.coverageTreshold.toString()}%`); plugins.beautylog.error('exiting due to coverage failure'); - process.exit(1); + if (!configArg.watch) { + process.exit(1); + } } done.resolve(configArg); }); diff --git a/dist/npmts.watch.d.ts b/dist/npmts.watch.d.ts index 21cbece..0c6b4b8 100644 --- a/dist/npmts.watch.d.ts +++ b/dist/npmts.watch.d.ts @@ -1,3 +1,4 @@ /// import * as plugins from './npmts.plugins'; -export declare let run: (configArg: any) => plugins.q.Promise<{}>; +import { INpmtsConfig } from './npmts.options'; +export declare let run: (configArg: INpmtsConfig) => plugins.q.Promise<{}>; diff --git a/dist/npmts.watch.js b/dist/npmts.watch.js index 9c03d2f..8812029 100644 --- a/dist/npmts.watch.js +++ b/dist/npmts.watch.js @@ -9,6 +9,9 @@ exports.run = (configArg) => { for (let key in configArg.ts) { pathsToWatch.push(key); } + for (let key in configArg.testTs) { + pathsToWatch.push(key); + } npmtsSmartchok = new plugins.smartchok.Smartchok(pathsToWatch); npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => { plugins.beautylog.info('now watching...'); diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..ab0ede0 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,42 @@ +# npmts +Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6. + +## Availabililty +[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts) +[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmts) +[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmts) +[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/gitbook) + +## 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) +[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) +[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) +[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) + +## Introduction +NPMTS is your friend when writing, testing, publishing and documenting npm modules written in TypeScript. + +npmts will + +1. check your dependencies and package.json +1. transpile your code with tsc, +1. document your code with typedoc, +1. test your code with mocha +1. create coverage with istanbul + +This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze: +[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/) + +For further information read the docs: + * [1. Intro](https://pushrocks.gitlab.io/npmts/gitbook/index.md) + * [2. Install](https://pushrocks.gitlab.io/npmts/gitbook/install.md) + * [3. Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.md) + * [4. Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.md) + * [5. Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.md) + * [6. Info](https://pushrocks.gitlab.io/npmts/gitbook/info.md) + +[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) diff --git a/gitbook/index.md b/gitbook/index.md index b8aae54..ab0ede0 100644 --- a/gitbook/index.md +++ b/gitbook/index.md @@ -5,7 +5,7 @@ Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6. [![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) +[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/gitbook) ## Status for master [![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master) @@ -31,6 +31,12 @@ npmts will 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. +For further information read the docs: + * [1. Intro](https://pushrocks.gitlab.io/npmts/gitbook/index.md) + * [2. Install](https://pushrocks.gitlab.io/npmts/gitbook/install.md) + * [3. Default Behaviour](https://pushrocks.gitlab.io/npmts/gitbook/default.md) + * [4. Configuration](https://pushrocks.gitlab.io/npmts/gitbook/config.md) + * [5. Examples](https://pushrocks.gitlab.io/npmts/gitbook/examples.md) + * [6. Info](https://pushrocks.gitlab.io/npmts/gitbook/info.md) [![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) diff --git a/npm-debug.log b/npm-debug.log new file mode 100644 index 0000000..81d8662 --- /dev/null +++ b/npm-debug.log @@ -0,0 +1,32 @@ +0 info it worked if it ends with ok +1 verbose cli [ '/Users/philkunz/.nvm/versions/node/v6.5.0/bin/node', +1 verbose cli '/Users/philkunz/.nvm/versions/node/v6.5.0/bin/npm', +1 verbose cli 'version', +1 verbose cli 'patch' ] +2 info using npm@3.10.3 +3 info using node@v6.5.0 +4 info git [ 'status', '--porcelain' ] +5 verbose stack Error: Git working directory not clean. +5 verbose stack M README.md +5 verbose stack M gitbook/index.md +5 verbose stack at /Users/philkunz/.nvm/versions/node/v6.5.0/lib/node_modules/npm/lib/version.js:247:19 +5 verbose stack at /Users/philkunz/.nvm/versions/node/v6.5.0/lib/node_modules/npm/lib/utils/no-progress-while-running.js:21:8 +5 verbose stack at ChildProcess.exithandler (child_process.js:197:7) +5 verbose stack at emitTwo (events.js:106:13) +5 verbose stack at ChildProcess.emit (events.js:191:7) +5 verbose stack at maybeClose (internal/child_process.js:877:16) +5 verbose stack at Socket. (internal/child_process.js:334:11) +5 verbose stack at emitOne (events.js:96:13) +5 verbose stack at Socket.emit (events.js:188:7) +5 verbose stack at Pipe._handle.close [as _onclose] (net.js:493:12) +6 verbose cwd /Users/philkunz/gitlab/pushrocks/npmts +7 error Darwin 16.0.0 +8 error argv "/Users/philkunz/.nvm/versions/node/v6.5.0/bin/node" "/Users/philkunz/.nvm/versions/node/v6.5.0/bin/npm" "version" "patch" +9 error node v6.5.0 +10 error npm v3.10.3 +11 error Git working directory not clean. +11 error M README.md +11 error M gitbook/index.md +12 error If you need help, you may report this error at: +12 error +13 verbose exit [ 1, true ] diff --git a/package.json b/package.json index b17f632..fe99c6a 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "gulp-sourcemaps": "^1.6.0", "gulp-typedoc": "^2.0.0", "lodash": "^4.16.1", - "npmextra": "^2.0.1", + "npmextra": "^2.0.3", "projectinfo": "1.0.3", "q": "^1.4.1", "shelljs": "^0.7.4", @@ -59,8 +59,9 @@ "smartcli": "1.0.9", "smartcov": "1.0.0", "smartenv": "1.2.5", - "smartfile": "4.0.20", + "smartfile": "4.0.21", "smartpath": "3.2.2", + "smartstream": "^1.0.5", "smartstring": "^2.0.17", "source-map-support": "^0.4.2", "tsn": "^2.0.3", diff --git a/ts/npmts.plugins.ts b/ts/npmts.plugins.ts index b98ba70..4b34779 100644 --- a/ts/npmts.plugins.ts +++ b/ts/npmts.plugins.ts @@ -23,6 +23,7 @@ export import smartcov = require('smartcov') export import smartenv = require('smartenv') export import smartfile = require('smartfile') export import smartpath = require('smartpath') +export import smartstream = require('smartstream') export import smartstring = require('smartstring') export let sourceMapSupport = require('source-map-support').install() // display errors correctly during testing export import tsn = require('tsn') diff --git a/ts/npmts.tests.ts b/ts/npmts.tests.ts index 26253f4..e460b0f 100644 --- a/ts/npmts.tests.ts +++ b/ts/npmts.tests.ts @@ -2,12 +2,13 @@ import 'typings-global' import plugins = require('./npmts.plugins') import paths = require('./npmts.paths') import { npmtsOra } from './npmts.promisechain' +import { INpmtsConfig } from './npmts.options' /** - * - * @returns {*} + * runs mocha + * @returns INpmtsConfig */ -let mocha = function (configArg) { +let mocha = function (configArg: INpmtsConfig) { npmtsOra.text('Instrumentalizing and testing transpiled JS') npmtsOra.end() // end npmtsOra for tests. let done = plugins.q.defer() @@ -23,30 +24,34 @@ let mocha = function (configArg) { .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({ + let localSmartstream = new plugins.smartstream.Smartstream([ + plugins.gulp.src([plugins.path.join(paths.cwd, 'test/test.js')]), + plugins.g.babel({ presets: [ require.resolve('babel-preset-es2015') ] - })) - .pipe(plugins.g.injectModules()) - .pipe(plugins.g.mocha()) - .pipe(plugins.g.istanbul.writeReports({ + }), + plugins.g.injectModules(), + plugins.g.mocha(), + 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!') + }) + ]) + localSmartstream.run() + .then(() => { done.resolve(configArg) }, (err) => { + plugins.beautylog.error('Tests failed!') + if (configArg.watch) { done.resolve(configArg) - }, - 'atEnd' - )) + } else { + process.exit(1) + } + }) }) return done.promise } -let coverage = function (configArg) { +let coverage = function (configArg: INpmtsConfig) { let done = plugins.q.defer() plugins.smartcov.get.percentage(plugins.path.join(paths.coverageDir, 'lcov.info'), 2) .then(function (percentageArg) { @@ -63,14 +68,14 @@ let coverage = function (configArg) { + `${configArg.coverageTreshold.toString()}%` ) plugins.beautylog.error('exiting due to coverage failure') - process.exit(1) + if (!configArg.watch) { process.exit(1) } } done.resolve(configArg) }) return done.promise } -export let run = function (configArg) { +export let run = function (configArg: INpmtsConfig) { let done = plugins.q.defer() let config = configArg if (config.test === true) { diff --git a/ts/npmts.watch.ts b/ts/npmts.watch.ts index 9bb220d..f69422b 100644 --- a/ts/npmts.watch.ts +++ b/ts/npmts.watch.ts @@ -1,14 +1,18 @@ import * as plugins from './npmts.plugins' import * as promisechain from './npmts.promisechain' let npmtsSmartchok: plugins.smartchok.Smartchok = null +import { INpmtsConfig } from './npmts.options' -export let run = (configArg) => { +export let run = (configArg: INpmtsConfig) => { let done = plugins.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 plugins.smartchok.Smartchok(pathsToWatch) npmtsSmartchok.getObservableFor('change').then((changeObservableArg) => { plugins.beautylog.info('now watching...')