Compare commits

..

36 Commits

Author SHA1 Message Date
93682e9ec4 5.4.23 2016-09-01 15:50:01 +02:00
d339da7e11 compile 2016-09-01 15:49:57 +02:00
8b51992959 5.4.22 2016-09-01 15:47:10 +02:00
cb3bfaf438 updated README 2016-09-01 15:46:31 +02:00
91b7317b80 5.4.21 2016-09-01 12:12:09 +02:00
400b193210 integrate push.rocks banding 2016-09-01 12:12:03 +02:00
7f6a6434d2 5.4.20 2016-08-31 16:10:05 +02:00
a1414877a1 update docs 2016-08-31 16:10:01 +02:00
a4927f9c17 5.4.19 2016-08-31 13:57:16 +02:00
264c3d95fd update README 2016-08-31 13:55:42 +02:00
fd06aa04f4 update README 2016-08-31 13:49:00 +02:00
a576872471 update README 2016-08-31 13:48:20 +02:00
333b59c37e 5.4.18 2016-08-31 13:16:33 +02:00
054b7dca2b specify host 2016-08-31 13:16:15 +02:00
33209773c8 5.4.17 2016-08-31 13:02:18 +02:00
625cadea5e fixed .gitlab-ci.yml 2016-08-31 13:02:10 +02:00
de05001f3e 5.4.16 2016-08-31 12:04:20 +02:00
5aa10261e5 update npmpage creation 2016-08-31 12:04:14 +02:00
070574c8d7 5.4.15 2016-08-30 23:23:02 +02:00
a304f34f31 fix base image for pages ci task 2016-08-30 23:22:55 +02:00
26b5db3782 5.4.14 2016-08-30 23:18:12 +02:00
dadad3fa96 added pages 2016-08-30 23:18:04 +02:00
2ab35db571 5.4.13 2016-08-30 17:57:55 +02:00
4a17953298 fix project cleaning 2016-08-30 17:57:51 +02:00
8c633b3c30 fix README 2016-08-30 16:43:28 +02:00
e100a6e026 5.4.12 2016-08-30 16:39:10 +02:00
3e7148c938 update README 2016-08-30 16:39:05 +02:00
3554e2543d add compatibility for npmpage 2016-08-30 16:35:46 +02:00
44a86542ec 5.4.11 2016-08-20 09:19:06 +02:00
b63d2edd29 5.4.10 2016-08-20 09:17:40 +02:00
a4e0112767 update early 2016-08-20 09:17:33 +02:00
b40837b6a7 5.4.9 2016-08-20 05:08:33 +02:00
7ecb565de9 update README 2016-08-20 05:03:32 +02:00
41a38aeb56 5.4.8 2016-08-19 11:16:26 +02:00
0be87e2f45 fix options 2016-08-19 11:16:13 +02:00
2edcb3947e update options 2016-08-19 09:46:36 +02:00
29 changed files with 385 additions and 286 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
node_modules/ node_modules/
test/ test/
docs/ pages/
.DS_Store .DS_Store

View File

@ -1,10 +1,10 @@
image: hosttoday/ht-docker-node:npmts image: hosttoday/ht-docker-node:npmci
stages: stages:
- test - test
- release - release
- trigger - trigger
- page - pages
testLEGACY: testLEGACY:
stage: test stage: test
@ -45,3 +45,15 @@ trigger:
- tags - tags
tags: tags:
- docker - docker
pages:
image: hosttoday/ht-docker-node:npmpage
stage: pages
script:
- npmci command npmpage --host gitlab
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public

118
README.md
View File

@ -1,122 +1,28 @@
# npmts # npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6. Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
## Status ## Availabililty
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/npmts)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/npmts)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/npmts)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/npmts/docs)
## Status for master
[![build status](https://gitlab.com/pushrocks/npmts/badges/master/build.svg)](https://gitlab.com/pushrocks/npmts/commits/master) [![build status](https://gitlab.com/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) [![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 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) [![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/) [![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
## What is NPMTS? ## Introduction
NPMTS is your friend when it comes to write, test, publish and document NPM modules written in TypeScript. NPMTS is your friend when it comes to write, test, publish and document NPM modules written in TypeScript.
By default NPMTS will **bundle declaration files**. As a result npm module **code completion in editors like Visual Studio Code** works. By default NPMTS will **bundle declaration files**. As a result npm module **code completion in editors like Visual Studio Code** works.
There is a docker image available that includes npmts to make CI a breeze: There is a docker image available that includes npmts to make CI a breeze:
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/) [hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
### Install For further information read the docs.
First install npmts globally, then install the npmts-g locally.
> **npmts-g* checks if the global version of npmts suffices the modules requirements. [![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)
If not it installs npmts locally in the right version during npm install.
```sh
npm install npmts -g # installs npmts globally
npm install npmts-g --save-dev # installs npmts-g checking tool as devDependency
```
Then add it to your package.json's script section to trigger a build:
```json
"scripts": {
"test": "(npmts)"
}
```
### Default task execution order
1. **Config:** Check config in ./npmextra.json (Check out [npmextra](https://www.npmjs.com/package/npmextra))
1. **Clean:** Clean up from any previous builds (old js files)
1. **Check:** Check project for typings declaration in package.json, unused dependencies and missing dependencies
1. **Transpile:** Transpile TypeScript with **inline sourcemaps** and **declaration files** to ES target
1. **Documentation:** Create TypeDoc Documentation from TypeScript files
1. **Test:** Babelify ES6 to ES5 on the fly, instrumentalize ES5 JavaScript with istanbul and run tests with Mocha.
### npmextra.json
the npmts section in npmextra.json can be used to configure npmts.
```json
{
"npmts":{
"mode":"default",
"ts":{
"./customdir/*.ts":"./"
},
"tsOptions":{
"declaration":false,
"target":"ES6"
},
"cli":true
}
}
```
| key | default value | description |
| --- | --- | --- |
| `"mode"` | `"default"` | "default" will do some default stuff, "custom" only does what you specify |
| `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions |
| `"tsOptions"` | `{"target":"ES5", "declaration":"true"}` | specify options for tsc |
| `"cli"` | "false" | some modules are designed to be used from cli. If set to true NPMTS will create a cli.js that wires you dist files up for cli use. |
### TypeScript
by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to
`./dist/*.js` and `./test/test.js`
Use commonjs module system for wiring up files.
### Declaration files
**npmts** also creates declaration files like `./dist/index.d.ts` by default.
You can reference it in your package.json like this.
```json
"main": "dist/index.js",
"typings": ".dist/index.d.ts",
```
This is in line with the latest TypeScript best practices.
You can then import plugins via the TypeScript `import` Syntax
and tsc will pick up the declaration file automatically.
## Some notes:
#### Typings for third party modules that do not bundle declaration files
NPMTS no longer supports typings.json. Instead use the new TypeScript 2.x approach to typings using the @types/ npm scope.
#### Instrumentalize Code
npmts instrumentalizes (using istanbul) the created JavaScript code to create a coverage report.
#### Tests
Any errors will be shown with reference to their originating source in TypeScript
thanks to autogenerated source maps.
## Example Usage in modules:
* [gulp-browser](https://www.npmjs.com/package/gulp-browser)
> We will add more options over time.
## Tips and tricks:
* Use [npmts-g](https://www.npmjs.com/package/npmts-g) to use globally installed npmts and install npmts locally if no global npmts is available.
* Use [npmpage](https://www.npmjs.com/package/npmpage) to create a webpage from coverage reports and TypeDoc for the module
* Use [hosttoday/ht-docker-node:npmts](https://hub.docker.com/r/hosttoday/ht-docker-node/) for speedy CI builds
* Use [npmdocker](https://www.npmjs.com/package/npmdocker) for running tests consistently with docker.
## Future Scope:
* automatically manage badges in README
* manage tslint to enforce code best practices
* tear down any differences between local and CI environments by using brand new npmdocker
## About the authors:
[![Project Phase](https://mediaserve.lossless.digital/lossless.com/img/createdby_github.svg)](https://lossless.com/)
[![PayPal](https://img.shields.io/badge/Support%20us-PayPal-blue.svg)](https://paypal.me/lossless)

16
dist/npmts.clean.js vendored
View File

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

View File

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

View File

@ -1,40 +0,0 @@
"use strict";
require("typings-global");
var plugins = require("./npmts.plugins");
var paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain");
exports.run = function (argvArg) {
var done = plugins.Q.defer();
npmts_promisechain_1.npmtsOra.text("looking for npmextra.json");
var defaultConfig = {
mode: "default",
notest: false,
nodocs: false
};
if (argvArg.notest) {
defaultConfig.notest = true;
}
;
if (argvArg.nodocs) {
defaultConfig.nodocs = true;
}
;
var config = plugins.npmextra.dataFor({
toolName: "npmts",
defaultSettings: defaultConfig,
cwd: paths.cwd
});
switch (config.mode) {
case "default":
case "custom":
plugins.beautylog.ok("mode is " + config.mode.yellow);
done.resolve(config);
break;
default:
plugins.beautylog.error("mode " + config.mode.yellow + " not recognised!".red);
process.exit(1);
}
;
done.resolve(config);
return done.promise;
};

View File

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

56
dist/npmts.options.js vendored
View File

@ -1,16 +1,44 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); var plugins = require("./npmts.plugins");
var paths = require("./npmts.paths");
var npmts_promisechain_1 = require("./npmts.promisechain"); var npmts_promisechain_1 = require("./npmts.promisechain");
exports.run = function (configArg) { ;
exports.run = function (argvArg) {
var done = plugins.Q.defer(); var done = plugins.Q.defer();
var config = configArg; var defaultConfig = {
npmts_promisechain_1.npmtsOra.text("now determining build options..."); argv: undefined,
coverageTreshold: 70,
docs: true,
mode: "default",
test: true,
testTs: {},
ts: {},
tsOptions: {}
};
// mix with configfile
npmts_promisechain_1.npmtsOra.text("looking for npmextra.json");
var config = plugins.npmextra.dataFor({
toolName: "npmts",
defaultSettings: defaultConfig,
cwd: paths.cwd
});
// add argv
config.argv = argvArg;
// check mode
switch (config.mode) {
case "default":
case "custom":
plugins.beautylog.ok("mode is " + config.mode);
done.resolve(config);
break;
default:
plugins.beautylog.error("mode not recognised!");
process.exit(1);
}
;
//handle default mode //handle default mode
if (config.mode == "default") { if (config.mode == "default") {
config.typings = [
"./ts/typings.json"
];
config.ts = (_a = {}, config.ts = (_a = {},
_a["./ts/**/*.ts"] = "./dist/", _a["./ts/**/*.ts"] = "./dist/",
_a _a
@ -19,13 +47,17 @@ exports.run = function (configArg) {
_b["./test/test.ts"] = "./test/", _b["./test/test.ts"] = "./test/",
_b _b
); );
config.test = ["./index.js"];
} }
//check if config.tsOptions is available ;
config.tsOptions ? void (0) : config.tsOptions = {}; // mix with commandline
config.coverageTreshold ? void (0) : config.coverageTreshold = 70; if (config.argv.notest) {
// handle docs config.test = false;
config.docs ? void (0) : config.docs = {}; }
;
if (config.argv.nodocs) {
config.docs = false;
}
;
plugins.beautylog.ok("build options are ready!"); plugins.beautylog.ok("build options are ready!");
done.resolve(config); done.resolve(config);
return done.promise; return done.promise;

View File

@ -3,10 +3,11 @@ export declare let npmtsPackageRoot: string;
export declare let cwd: string; export declare let cwd: string;
export declare let tsDir: string; export declare let tsDir: string;
export declare let distDir: string; export declare let distDir: string;
export declare let docsDir: string;
export declare let testDir: string; export declare let testDir: string;
export declare let typingsDir: string; export declare let typingsDir: string;
export declare let coverageDir: string; export declare let coverageDir: string;
export declare let pagesDir: string;
export declare let pagesApiDir: string;
export declare let npmtsAssetsDir: string; export declare let npmtsAssetsDir: string;
export declare let indexTS: string; export declare let indexTS: string;
export declare let testTS: string; export declare let testTS: string;

10
dist/npmts.paths.js vendored
View File

@ -1,17 +1,19 @@
"use strict"; "use strict";
require("typings-global"); require("typings-global");
var plugins = require("./npmts.plugins"); var plugins = require("./npmts.plugins");
//Npmts Paths // NPMTS Paths
exports.npmtsPackageRoot = plugins.path.join(__dirname, "../"); exports.npmtsPackageRoot = plugins.path.join(__dirname, "../");
//Project paths // Project paths
exports.cwd = process.cwd(); exports.cwd = process.cwd();
//Directories // Directories
exports.tsDir = plugins.path.join(exports.cwd, "ts/"); exports.tsDir = plugins.path.join(exports.cwd, "ts/");
exports.distDir = plugins.path.join(exports.cwd, "dist/"); exports.distDir = plugins.path.join(exports.cwd, "dist/");
exports.docsDir = plugins.path.join(exports.cwd, "docs/");
exports.testDir = plugins.path.join(exports.cwd, "test/"); exports.testDir = plugins.path.join(exports.cwd, "test/");
exports.typingsDir = plugins.path.join(exports.cwd, "ts/typings/"); exports.typingsDir = plugins.path.join(exports.cwd, "ts/typings/");
exports.coverageDir = plugins.path.join(exports.cwd, "coverage/"); exports.coverageDir = plugins.path.join(exports.cwd, "coverage/");
// Pages
exports.pagesDir = plugins.path.join(exports.cwd, "pages/");
exports.pagesApiDir = plugins.path.join(exports.pagesDir, "/api");
exports.npmtsAssetsDir = plugins.path.join(__dirname, "../assets/"); exports.npmtsAssetsDir = plugins.path.join(__dirname, "../assets/");
//Files //Files
exports.indexTS = plugins.path.join(exports.cwd, "ts/index.ts"); exports.indexTS = plugins.path.join(exports.cwd, "ts/index.ts");

View File

@ -6,15 +6,13 @@ var NpmtsAssets = require("./npmts.assets");
var NpmtsCheck = require("./npmts.check"); var NpmtsCheck = require("./npmts.check");
var NpmtsClean = require("./npmts.clean"); var NpmtsClean = require("./npmts.clean");
var NpmtsCompile = require("./npmts.compile"); var NpmtsCompile = require("./npmts.compile");
var NpmtsConfigFile = require("./npmts.configfile");
var NpmtsTypeDoc = require("./npmts.typedoc"); var NpmtsTypeDoc = require("./npmts.typedoc");
var NpmtsOptions = require("./npmts.options"); var NpmtsOptions = require("./npmts.options");
var NpmtsTests = require("./npmts.tests"); var NpmtsTests = require("./npmts.tests");
exports.promisechain = function (argvArg) { exports.promisechain = function (argvArg) {
var done = plugins.Q.defer(); var done = plugins.Q.defer();
exports.npmtsOra.start(); exports.npmtsOra.start();
NpmtsConfigFile.run(argvArg) NpmtsOptions.run(argvArg)
.then(NpmtsOptions.run)
.then(NpmtsClean.run) .then(NpmtsClean.run)
.then(NpmtsCheck.run) .then(NpmtsCheck.run)
.then(NpmtsCompile.run) .then(NpmtsCompile.run)

2
dist/npmts.tests.js vendored
View File

@ -60,7 +60,7 @@ var coverage = function (configArg) {
exports.run = function (configArg) { exports.run = function (configArg) {
var done = plugins.Q.defer(); var done = plugins.Q.defer();
var config = configArg; var config = configArg;
if (config.notest != true) { if (config.test === true) {
npmts_promisechain_1.npmtsOra.text("now starting tests"); npmts_promisechain_1.npmtsOra.text("now starting tests");
plugins.beautylog.log("-------------------------------------------------------\n" + plugins.beautylog.log("-------------------------------------------------------\n" +
"*************************** TESTS: ***************************\n" + "*************************** TESTS: ***************************\n" +

12
dist/npmts.typedoc.js vendored
View File

@ -14,8 +14,8 @@ var genTypeDoc = function (configArg) {
target: "es6", target: "es6",
includeDeclarations: true, includeDeclarations: true,
// Output options (see typedoc docs) // Output options (see typedoc docs)
out: paths.docsDir, out: paths.pagesApiDir,
json: plugins.path.join(paths.docsDir, "file.json"), json: plugins.path.join(paths.pagesApiDir, "file.json"),
// TypeDoc options (see typedoc docs) // TypeDoc options (see typedoc docs)
name: "my-project", name: "my-project",
//theme: "default", //theme: "default",
@ -27,15 +27,15 @@ var genTypeDoc = function (configArg) {
}; };
exports.run = function (configArg) { exports.run = function (configArg) {
var done = plugins.Q.defer(); var done = plugins.Q.defer();
if (configArg.nodocs) { if (configArg.docs) {
done.resolve(configArg);
}
else {
genTypeDoc(configArg) genTypeDoc(configArg)
.then(function () { .then(function () {
done.resolve(configArg); done.resolve(configArg);
}); });
} }
else {
done.resolve(configArg);
}
; ;
return done.promise; return done.promise;
}; };

15
docs/book.json Normal file
View File

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

80
docs/config.md Normal file
View File

@ -0,0 +1,80 @@
# Configuration of NPMTS
npmts can be configured to your needs:
### npmextra.json
the npmts section in npmextra.json can be used to configure npmts.
**Default**
>Note: When you are using `"mode":"default"` it'll cause npmts to override any other settings you may have made except for tsOptions (ES target etc.)
with default behaviour.
```json
{
"npmts":{
"mode":"default"
}
}
```
**Custom settings**
```json
{
"mode":"custom",
"docs":false,
"test":true,
"npmts":{
"ts":{
"./customdir/*.ts":"./"
},
"tsOptions":{
"declaration":false,
"target":"ES6"
},
"cli":true
}
}
```
| key | default value | description |
| --- | --- | --- |
| `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify |
| `"docs"` | `true` | create docs for your module |
| `"test"` | `true` | test your module |
| `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions |
| `"tsOptions"` | `{"target":"ES5", "declaration":"true"}` | specify options for tsc |
| `"cli"` | "false" | some modules are designed to be used from cli. If set to true NPMTS will create a cli.js that wires you dist files up for cli use. |
### TypeScript
by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to
`./dist/*.js` and `./test/test.js`
Use commonjs module system for wiring up files.
### Declaration files
**npmts** also creates declaration files like `./dist/index.d.ts` by default.
You can reference it in your package.json like this.
```json
"main": "dist/index.js",
"typings": ".dist/index.d.ts",
```
This is in line with the latest TypeScript best practices.
You can then import plugins via the TypeScript `import` Syntax
and tsc will pick up the declaration file automatically.
### TypeDoc
By default TypeDoc will create docs for your module in `./pages/api/` directory.
> Note: Use [npmpage](https://www.npmjs.com/package/npmpage) to build a website for the module.
It also allows you to integrate api docs with a gitbook located in `./docs/`
## Some notes:
#### Typings for third party modules that do not bundle declaration files
NPMTS no longer supports typings.json. Instead use the new TypeScript 2.x approach to typings using the @types/ npm scope.
#### Instrumentalize Code
npmts instrumentalizes (using istanbul) the created JavaScript code to create a coverage report.
#### Tests
Any errors will be shown with reference to their originating source in TypeScript
thanks to autogenerated source maps.

8
docs/default.md Normal file
View File

@ -0,0 +1,8 @@
# Default task execution order
1. **Config:** Check config in ./npmextra.json (Check out [npmextra](https://www.npmjs.com/package/npmextra))
1. **Clean:** Clean up from any previous builds (old js files)
1. **Check:** Check project for typings declaration in package.json, unused dependencies and missing dependencies
1. **Transpile:** Transpile TypeScript with **inline sourcemaps** and **declaration files** to ES target
1. **Documentation:** Create TypeDoc Documentation from TypeScript files
1. **Test:** Babelify ES6 to ES5 on the fly, instrumentalize ES5 JavaScript with istanbul and run tests with Mocha.

13
docs/examples.md Normal file
View File

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

28
docs/index.md Normal file
View File

@ -0,0 +1,28 @@
# 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/docs)
## 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/)
## Introduction
NPMTS is your friend when it comes to write, test, publish and document NPM modules written in TypeScript.
By default NPMTS will **bundle declaration files**. As a result npm module **code completion in editors like Visual Studio Code** works.
There is a 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.
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

14
docs/info.md Normal file
View File

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

18
docs/install.md Normal file
View File

@ -0,0 +1,18 @@
# Install NPMTS
First install npmts globally, then install the npmts-g locally.
> **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.
```sh
npm install npmts -g # installs npmts globally
npm install npmts-g --save-dev # installs npmts-g checking tool as devDependency
```
Then add it to your package.json's script section to trigger a build:
```json
"scripts": {
"test": "(npmts)"
}
```

8
docs/summary.md Normal file
View File

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

View File

@ -1,6 +1,6 @@
{ {
"name": "npmts", "name": "npmts",
"version": "5.4.7", "version": "5.4.23",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.", "description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"main": "dist/index.js", "main": "dist/index.js",
"bin": { "bin": {
@ -10,6 +10,8 @@
"test": "(npm run compile && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)", "test": "(npm run compile && npm run setupCheck && npm run check && npm run checkVersion && npm run checkNoTest && npm run checkNoDocs)",
"compile": "(rm -rf test/ && rm -r dist/ && mkdir dist/ && tsc && cp assets/cli.js dist/ )", "compile": "(rm -rf test/ && rm -r dist/ && mkdir dist/ && tsc && cp assets/cli.js dist/ )",
"setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)", "setupCheck": "(git clone https://gitlab.com/sandboxzone/sandbox-npmts.git test/)",
"typedoc": "(typedoc --out ./pages/api --target ES6 ./ts/)",
"npmpage": "(npmpage)",
"check": "(cd test && npm install && node ../dist/index.js)", "check": "(cd test && npm install && node ../dist/index.js)",
"checkVersion": "(cd test/ && node ../dist/index.js -v)", "checkVersion": "(cd test/ && node ../dist/index.js -v)",
"checkNoTest": "(cd test && node ../dist/index.js --notest)", "checkNoTest": "(cd test && node ../dist/index.js --notest)",
@ -30,37 +32,37 @@
}, },
"homepage": "https://gitlab.com/pushrocks/npmts#readme", "homepage": "https://gitlab.com/pushrocks/npmts#readme",
"dependencies": { "dependencies": {
"@types/gulp": "^3.8.28", "@types/gulp": "^3.8.30",
"@types/minimatch": "^2.0.28", "@types/minimatch": "^2.0.28",
"@types/q": "^0.0.27", "@types/q": "^0.x.x",
"@types/shelljs": "^0.3.27", "@types/shelljs": "^0.3.29",
"babel-preset-es2015": "^6.9.0", "babel-preset-es2015": "^6.13.2",
"beautylog": "5.0.18", "beautylog": "5.0.20",
"depcheck": "^0.6.4", "depcheck": "^0.6.4",
"early": "^2.0.13", "early": "^2.0.25",
"gulp": "3.9.1", "gulp": "3.9.1",
"gulp-babel": "^6.1.2", "gulp-babel": "^6.1.2",
"gulp-function": "^1.3.6", "gulp-function": "^1.3.6",
"gulp-inject-modules": "^1.0.0", "gulp-inject-modules": "^1.0.0",
"gulp-istanbul": "^1.0.0", "gulp-istanbul": "^1.1.0",
"gulp-mocha": "^2.2.0", "gulp-mocha": "^3.0.1",
"gulp-sourcemaps": "^1.6.0", "gulp-sourcemaps": "^1.6.0",
"gulp-typedoc": "^2.0.0", "gulp-typedoc": "^2.0.0",
"lodash": "^4.14.0", "lodash": "^4.15.0",
"npmextra": "^1.0.8", "npmextra": "^1.0.9",
"projectinfo": "1.0.3", "projectinfo": "1.0.3",
"q": "^1.4.1", "q": "^1.4.1",
"shelljs": "^0.7.3", "shelljs": "^0.7.3",
"smartcli": "1.0.4", "smartcli": "1.0.4",
"smartcov": "0.0.9", "smartcov": "1.0.0",
"smartenv": "1.2.5", "smartenv": "1.2.5",
"smartfile": "4.0.12", "smartfile": "4.0.13",
"smartpath": "3.2.2", "smartpath": "3.2.2",
"smartstring": "^2.0.15", "smartstring": "^2.0.17",
"source-map-support": "^0.4.2", "source-map-support": "^0.4.2",
"tsn": "^1.0.10", "tsn": "^1.0.12",
"typedoc": "^0.4.4", "typedoc": "^0.4.5",
"typescript": "^2.0.0-dev.20160630", "typescript": "next",
"typings-global": "*" "typings-global": "*"
}, },
"devDependencies": {} "devDependencies": {}

View File

@ -4,27 +4,20 @@ import paths = require("./npmts.paths");
import {npmtsOra} from "./npmts.promisechain"; import {npmtsOra} from "./npmts.promisechain";
let removeDist = function(){ let removeDist = function(){
npmtsOra.text("cleaning " + "dist".yellow + " folder"); npmtsOra.text("cleaning dist folder");
return plugins.smartfile.fs.remove(paths.distDir); return plugins.smartfile.fs.remove(paths.distDir);
}; };
let removeTypings = function(){ let removePages = function(){
let done = plugins.Q.defer(); npmtsOra.text("cleaning pages folder");
npmtsOra.text("cleaning " + "typings".yellow + " folder"); return plugins.smartfile.fs.remove(paths.pagesDir);
if(false){
//plugins.smartfile.fsaction.remove(paths.typingsDir)
// .then(done.resolve);
} else {
done.resolve();
}
return done.promise;
}; };
export let run = function(configArg){ export let run = function(configArg){
npmtsOra.text("cleaning up from previous builds..."); npmtsOra.text("cleaning up from previous builds...");
let done = plugins.Q.defer(); let done = plugins.Q.defer();
removeDist() removeDist()
.then(removeTypings) .then(removePages)
.then(function(){ .then(function(){
plugins.beautylog.ok("Cleaned up from previous builds!"); plugins.beautylog.ok("Cleaned up from previous builds!");
done.resolve(configArg); done.resolve(configArg);

View File

@ -1,36 +0,0 @@
import "typings-global";
import plugins = require("./npmts.plugins");
import paths = require("./npmts.paths");
import {npmtsOra} from "./npmts.promisechain";
export var run = function(argvArg){
let done = plugins.Q.defer();
npmtsOra.text("looking for npmextra.json");
let defaultConfig = {
mode: "default",
notest:false,
nodocs:false
};
if(argvArg.notest){
defaultConfig.notest = true;
};
if(argvArg.nodocs){
defaultConfig.nodocs = true;
};
let config = plugins.npmextra.dataFor({
toolName:"npmts",
defaultSettings:defaultConfig,
cwd:paths.cwd
});
switch (config.mode){
case "default":
case "custom":
plugins.beautylog.ok("mode is " + config.mode.yellow);
done.resolve(config);
break;
default:
plugins.beautylog.error("mode " + config.mode.yellow + " not recognised!".red);
process.exit(1);
};
done.resolve(config);
return done.promise;
};

View File

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

View File

@ -1,21 +1,24 @@
import "typings-global"; import "typings-global";
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 docsDir = plugins.path.join(cwd,"docs/");
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
export let pagesDir = plugins.path.join(cwd,"pages/");
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

View File

@ -8,7 +8,6 @@ import NpmtsAssets = require("./npmts.assets");
import NpmtsCheck = require("./npmts.check"); import NpmtsCheck = require("./npmts.check");
import NpmtsClean = require("./npmts.clean"); import NpmtsClean = require("./npmts.clean");
import NpmtsCompile = require("./npmts.compile"); import NpmtsCompile = require("./npmts.compile");
import NpmtsConfigFile = require("./npmts.configfile");
import NpmtsTypeDoc = require("./npmts.typedoc"); import NpmtsTypeDoc = require("./npmts.typedoc");
import NpmtsOptions = require("./npmts.options"); import NpmtsOptions = require("./npmts.options");
import NpmtsTests = require("./npmts.tests"); import NpmtsTests = require("./npmts.tests");
@ -16,8 +15,7 @@ import NpmtsTests = require("./npmts.tests");
export let promisechain = function(argvArg){ export let promisechain = function(argvArg){
let done = plugins.Q.defer(); let done = plugins.Q.defer();
npmtsOra.start(); npmtsOra.start();
NpmtsConfigFile.run(argvArg) NpmtsOptions.run(argvArg)
.then(NpmtsOptions.run)
.then(NpmtsClean.run) .then(NpmtsClean.run)
.then(NpmtsCheck.run) .then(NpmtsCheck.run)
.then(NpmtsCompile.run) .then(NpmtsCompile.run)

View File

@ -66,7 +66,7 @@ let coverage = function(configArg){
export let run = function(configArg) { export let run = function(configArg) {
let done = plugins.Q.defer(); let done = plugins.Q.defer();
let config = configArg; let config = configArg;
if(config.notest != true){ if(config.test === true){
npmtsOra.text("now starting tests"); npmtsOra.text("now starting tests");
plugins.beautylog.log( plugins.beautylog.log(
"-------------------------------------------------------\n" + "-------------------------------------------------------\n" +

View File

@ -15,8 +15,8 @@ let genTypeDoc = function (configArg) {
includeDeclarations: true, includeDeclarations: true,
// Output options (see typedoc docs) // Output options (see typedoc docs)
out: paths.docsDir, out: paths.pagesApiDir,
json: plugins.path.join(paths.docsDir, "file.json"), json: plugins.path.join(paths.pagesApiDir, "file.json"),
// TypeDoc options (see typedoc docs) // TypeDoc options (see typedoc docs)
name: "my-project", name: "my-project",
@ -32,13 +32,13 @@ let genTypeDoc = function (configArg) {
export let run = function (configArg) { export let run = function (configArg) {
let done = plugins.Q.defer(); let done = plugins.Q.defer();
if (configArg.nodocs) { if (configArg.docs) {
done.resolve(configArg);
} else {
genTypeDoc(configArg) genTypeDoc(configArg)
.then(() => { .then(() => {
done.resolve(configArg); done.resolve(configArg);
}); });
} else {
done.resolve(configArg);
}; };
return done.promise; return done.promise;
}; };