Compare commits

...

19 Commits

Author SHA1 Message Date
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
13 changed files with 221 additions and 44 deletions

2
.gitignore vendored
View File

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

View File

@ -1,10 +1,10 @@
image: hosttoday/ht-docker-node:npmts
image: hosttoday/ht-docker-node:npmci
stages:
- test
- release
- trigger
- page
- pages
testLEGACY:
stage: test
@ -45,3 +45,15 @@ trigger:
- tags
tags:
- 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

View File

@ -107,6 +107,11 @@ 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.

16
dist/npmts.clean.js vendored
View File

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

View File

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

10
dist/npmts.paths.js vendored
View File

@ -1,17 +1,19 @@
"use strict";
require("typings-global");
var plugins = require("./npmts.plugins");
//Npmts Paths
// NPMTS Paths
exports.npmtsPackageRoot = plugins.path.join(__dirname, "../");
//Project paths
// Project paths
exports.cwd = process.cwd();
//Directories
// Directories
exports.tsDir = plugins.path.join(exports.cwd, "ts/");
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.typingsDir = plugins.path.join(exports.cwd, "ts/typings/");
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/");
//Files
exports.indexTS = plugins.path.join(exports.cwd, "ts/index.ts");

View File

@ -14,8 +14,8 @@ var genTypeDoc = function (configArg) {
target: "es6",
includeDeclarations: true,
// Output options (see typedoc docs)
out: paths.docsDir,
json: plugins.path.join(paths.docsDir, "file.json"),
out: paths.pagesApiDir,
json: plugins.path.join(paths.pagesApiDir, "file.json"),
// TypeDoc options (see typedoc docs)
name: "my-project",
//theme: "default",

19
docs/book.json Normal file
View File

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

146
docs/index.md Normal file
View File

@ -0,0 +1,146 @@
# npmts
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
## Status
[![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/)
## What is NPMTS?
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/)
### Install
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)"
}
```
### 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.
**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.
## 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)

View File

@ -1,6 +1,6 @@
{
"name": "npmts",
"version": "5.4.9",
"version": "5.4.18",
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
"main": "dist/index.js",
"bin": {
@ -10,6 +10,8 @@
"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/ )",
"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)",
"checkVersion": "(cd test/ && node ../dist/index.js -v)",
"checkNoTest": "(cd test && node ../dist/index.js --notest)",
@ -30,14 +32,14 @@
},
"homepage": "https://gitlab.com/pushrocks/npmts#readme",
"dependencies": {
"@types/gulp": "^3.8.29",
"@types/gulp": "^3.8.30",
"@types/minimatch": "^2.0.28",
"@types/q": "^0.x.x",
"@types/shelljs": "^0.3.28",
"@types/shelljs": "^0.3.29",
"babel-preset-es2015": "^6.13.2",
"beautylog": "5.0.20",
"depcheck": "^0.6.4",
"early": "^2.0.13",
"early": "^2.0.25",
"gulp": "3.9.1",
"gulp-babel": "^6.1.2",
"gulp-function": "^1.3.6",
@ -60,7 +62,7 @@
"source-map-support": "^0.4.2",
"tsn": "^1.0.12",
"typedoc": "^0.4.5",
"typescript": "^2.0.0-dev.20160630",
"typescript": "next",
"typings-global": "*"
},
"devDependencies": {}

View File

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

View File

@ -1,21 +1,24 @@
import "typings-global";
import plugins = require("./npmts.plugins");
//Npmts Paths
// NPMTS Paths
export let npmtsPackageRoot = plugins.path.join(__dirname,"../");
//Project paths
// Project paths
export let cwd = process.cwd();
//Directories
// Directories
export let tsDir = plugins.path.join(cwd,"ts/");
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 typingsDir = plugins.path.join(cwd,"ts/typings/");
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/");
//Files

View File

@ -15,8 +15,8 @@ let genTypeDoc = function (configArg) {
includeDeclarations: true,
// Output options (see typedoc docs)
out: paths.docsDir,
json: plugins.path.join(paths.docsDir, "file.json"),
out: paths.pagesApiDir,
json: plugins.path.join(paths.pagesApiDir, "file.json"),
// TypeDoc options (see typedoc docs)
name: "my-project",