Compare commits

...

21 Commits

Author SHA1 Message Date
77a06a0fc4 2.3.0 2016-02-16 10:29:26 +01:00
c9792b1955 update target from ES3 to ES5 2016-02-16 10:29:14 +01:00
b87de178c0 2.2.4 2016-02-16 09:53:35 +01:00
0580f29d30 update ReadeMe 2016-02-16 09:52:24 +01:00
2c17273671 update badge order 2016-02-14 03:20:53 +01:00
669ed2e6ab add badges 2016-02-14 03:19:54 +01:00
8bc73b2bf4 update readme 2016-02-14 03:13:03 +01:00
78e5defd7c update readme 2016-02-14 03:12:02 +01:00
7e540bda87 2.2.3 2016-02-11 19:10:14 +01:00
b293dfe92d add figlet greeting 2016-02-11 19:10:01 +01:00
a753a5db2c 2.2.2 2016-02-09 20:36:40 +01:00
27f79b4425 readded test.ts to default build process 2016-02-09 20:36:31 +01:00
1ada5dd5a9 2.2.1 2016-02-09 17:42:43 +01:00
a41bfd442c fix coveralls initial value 2016-02-09 17:42:31 +01:00
2917b10ffb 2.2.0 2016-02-09 17:26:37 +01:00
bfc5bbbbb7 fix coverage path 2016-02-09 17:26:25 +01:00
cf507a4a17 add coverage badge 2016-02-09 17:19:27 +01:00
73a57ed264 2.1.10 2016-02-09 17:01:45 +01:00
39b79b679c fix config traveling 2016-02-09 17:01:37 +01:00
cc053ee396 2.1.9 2016-02-09 16:34:55 +01:00
df5371187b remove scoping problem with gulp task names 2016-02-09 16:34:52 +01:00
14 changed files with 105 additions and 58 deletions

View File

@ -1,6 +1,13 @@
# npmts
Write npm modules with TypeScript without hassle.
## Status
[![Build Status](https://travis-ci.org/pushrocks/npmts.svg?branch=master)](https://travis-ci.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 Code](https://www.bithound.io/github/pushrocks/npmts/badges/code.svg)](https://www.bithound.io/github/pushrocks/npmts)
[![Coverage Status](https://coveralls.io/repos/github/pushrocks/npmts/badge.svg?branch=master)](https://coveralls.io/github/pushrocks/npmts?branch=master)
## How to use npmts
### Install
@ -19,6 +26,23 @@ Then use it in package.json's script section to trigger a build:
```
### Default behaviour
**Execution order of tasks**
1. Install typings
2. Compile TypeScript
3. Create Declaration Files
4. Instrumentalize created JavaScript files with istanbul
5. Run Tests
6. Create Coverage report
7. Upload Coverage reports to travis (must be activated, only triggers on travis)
#### Typings
**npmts** looks for `./ts/typings.json` by default and installs any defined typings to `.ts/typings/`.
You can then reference the ./ts/typings/main.d.ts file in your TypeScript code.
#### TypeScript
by default npmts looks for `./ts/index.ts` and `./ts/test.ts` that will compile to
`./index.js` and `./test.js`
@ -31,13 +55,21 @@ You can reference it in your package.json like this:
"typings": "./index.d.ts",
```
#### Instrumentalize Code
npmts instrumentalizes the created JavaScript code to create a coverage report.
#### Tests
When Typings have been installed, TypeScript + Declaration files have been transpiled and the resulting JS has been instrumentalized,
npmts runs `.test/test.js` with mocha.
When requiring the module from other TypeScript files,
the TypeScript Compiler will use the declaration file to resolve typings.
### Custom behaviour
NPMTS looks for an npmts.json at the root of your package.
Custom behaviour can be achieved through a config file at the root of your package.
The file must be named **npmts.json**
```json
{
@ -55,6 +87,7 @@ NPMTS looks for an npmts.json at the root of your package.
* **ts** You can list as many TypeScript files as you like. The key represents the source TypeScript file, the value the output file.
* **typings** is an array of all direcories that have a typings.json present. Uses the new typings tool from npm.
## Readme for Devs
There is a [README-dev.md](README-dev.md) in the repo.
This is only of interest for you when looking to contribute to, improve or build upon this package.

4
index.d.ts vendored
View File

@ -6,11 +6,9 @@ declare module NpmtsPlugins {
gulp: any;
g: {
coveralls: any;
if: any;
insert: any;
istanbul: any;
mocha: any;
sequence: any;
typescript: any;
};
mergeStream: any;
@ -45,11 +43,9 @@ declare var plugins: {
gulp: any;
g: {
coveralls: any;
if: any;
insert: any;
istanbul: any;
mocha: any;
sequence: any;
typescript: any;
};
mergeStream: any;

View File

@ -10,11 +10,9 @@ var NpmtsPlugins;
gulp: require("gulp"),
g: {
coveralls: require("gulp-coveralls"),
if: require("gulp-if"),
insert: require("gulp-insert"),
istanbul: require("gulp-istanbul"),
mocha: require("gulp-mocha"),
sequence: require("gulp-sequence"),
typescript: require("gulp-typescript")
},
mergeStream: require("merge2"),
@ -78,7 +76,7 @@ var NpmtsOptions;
var done = plugins.q.defer();
var config = configArg;
if (typeof config.coveralls === "undefined") {
config.coveralls = true;
config.coveralls = false;
}
if (config.mode == "default") {
config.typings = [
@ -86,6 +84,7 @@ var NpmtsOptions;
];
config.ts = (_a = {},
_a["./ts/index.ts"] = "./index.js",
_a["./ts/test.ts"] = "./test/test.js",
_a
);
config.test = ["./index.js"];
@ -169,7 +168,8 @@ var NpmtsCompile;
var tsStream = plugins.gulp.src(plugins.path.join(paths.cwd, key))
.pipe(plugins.g.typescript({
out: outputName,
declaration: true
declaration: true,
target: "ES5"
}));
var stream = plugins.mergeStream([
tsStream.dts.pipe(plugins.gulp.dest(outputDir)),
@ -182,7 +182,7 @@ var NpmtsCompile;
moduleStream.on("queueDrain", function () {
plugins.beautylog.success("custom TypeScript installed successfully");
moduleStream.on("finish", function () {
done.resolve();
done.resolve(config);
});
moduleStream.end();
});
@ -196,27 +196,36 @@ var NpmtsTests;
NpmtsTests.run = function (configArg) {
var done = plugins.q.defer();
var config = configArg;
plugins.gulp.task('istanbul', function () {
return plugins.gulp.src([plugins.path.join(paths.cwd, "index.js")])
var istanbul = function () {
var stream = plugins.gulp.src([plugins.path.join(paths.cwd, "index.js")])
.pipe(plugins.g.istanbul())
.pipe(plugins.g.istanbul.hookRequire());
});
plugins.gulp.task('mocha', function () {
return plugins.gulp.src(["./test/test.js"])
return stream;
};
var mocha = function () {
var stream = plugins.gulp.src(["./test/test.js"])
.pipe(plugins.g.mocha())
.pipe(plugins.g.istanbul.writeReports())
.pipe(plugins.g.istanbul.enforceThresholds({ thresholds: { global: 30 } }));
return stream;
};
var coveralls = function () {
var stream = plugins.gulp.src([plugins.path.join(paths.cwd, "./coverage/lcov.info")])
.pipe(plugins.g.coveralls());
return stream;
};
istanbul().on("finish", function () {
mocha().on("finish", function () {
if (process.env.TRAVIS && config.coveralls) {
coveralls().on("finish", function () {
done.resolve(config);
});
plugins.gulp.task("coveralls", function () {
return plugins.gulp.src("./coverage/**/lcov.info")
.pipe(plugins.g.if((process.env.TRAVIS && config.coveralls), plugins.g.coveralls()));
});
plugins.gulp.task("test", function () {
plugins.g.sequence("istanbul", "mocha", "coveralls", function () {
done.resolve();
}
else {
done.resolve(config);
}
});
});
plugins.gulp.start.apply(plugins.gulp, ['test']);
return done.promise;
};
})(NpmtsTests || (NpmtsTests = {}));
@ -243,5 +252,6 @@ var NpmtsPromisechain;
/// <reference path="./npmts.promisechain.ts" />
console.log("**** starting NPMTS ****");
var plugins = NpmtsPlugins.init();
plugins.beautylog.figletSync("NPMTS");
var paths = NpmtsPaths.init();
var promisechain = NpmtsPromisechain.init();

View File

@ -1,6 +1,6 @@
{
"name": "npmts",
"version": "2.1.8",
"version": "2.3.0",
"description": "write npm modules with TypeScript",
"main": "index.js",
"typings": "./index.d.ts",
@ -26,21 +26,19 @@
},
"homepage": "https://github.com/pushrocks/npmts#readme",
"dependencies": {
"beautylog": "2.0.7",
"beautylog": "2.1.1",
"fs-extra": "^0.26.5",
"gulp": "3.9.0",
"gulp": "3.9.1",
"gulp-coveralls": "^0.1.4",
"gulp-if": "^2.0.0",
"gulp-insert": "0.5.0",
"gulp-istanbul": "^0.10.3",
"gulp-mocha": "^2.2.0",
"gulp-sequence": "^0.4.4",
"gulp-typescript": "2.10.0",
"gulp-typescript": "2.11.0",
"gulp-typings": "0.0.0",
"merge2": "1.0.1",
"q": "^1.4.1",
"smartcli": "0.0.11",
"smartfile": "0.0.11",
"typings": "^0.6.6"
"typings": "^0.6.8"
}
}

View File

@ -77,7 +77,7 @@
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 09 2016 15:59:46 GMT+0100 (CET)
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 16 2016 10:28:50 GMT+0100 (CET)
</div>
</div>
<script src="../prettify.js"></script>

View File

@ -76,7 +76,7 @@ module.exports = testplugin;
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 09 2016 15:59:46 GMT+0100 (CET)
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 16 2016 10:28:50 GMT+0100 (CET)
</div>
</div>
<script src="../prettify.js"></script>

View File

@ -77,7 +77,7 @@
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 09 2016 15:59:46 GMT+0100 (CET)
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Feb 16 2016 10:28:50 GMT+0100 (CET)
</div>
</div>
<script src="prettify.js"></script>

2
test/assets/test/test.d.ts vendored Normal file
View File

@ -0,0 +1,2 @@
/// <reference path="ts/typings/main.d.ts" />
declare var testplugin: any;

View File

@ -1,3 +1,5 @@
#!/usr/bin/env node
/// <reference path="./typings/main.d.ts" />
console.log("**** starting test ****");
var testplugin = require("../index.js");

View File

@ -7,7 +7,8 @@
/// <reference path="./npmts.compile.ts" />
/// <reference path="./npmts.tests.ts" />
/// <reference path="./npmts.promisechain.ts" />
console.log("**** starting NPMTS ****")
console.log("**** starting NPMTS ****");
var plugins = NpmtsPlugins.init();
plugins.beautylog.figletSync("NPMTS");
var paths = NpmtsPaths.init();
var promisechain = NpmtsPromisechain.init();

View File

@ -70,7 +70,8 @@ module NpmtsCompile {
var tsStream = plugins.gulp.src(plugins.path.join(paths.cwd,key))
.pipe(plugins.g.typescript({
out: outputName,
declaration: true
declaration: true,
target: "ES5"
}));
var stream = plugins.mergeStream([
tsStream.dts.pipe(plugins.gulp.dest(outputDir)),
@ -83,7 +84,7 @@ module NpmtsCompile {
moduleStream.on("queueDrain",function(){
plugins.beautylog.success("custom TypeScript installed successfully");
moduleStream.on("finish",function(){
done.resolve();
done.resolve(config);
});
moduleStream.end();
});

View File

@ -4,14 +4,15 @@ module NpmtsOptions {
var done = plugins.q.defer();
var config = configArg;
if (typeof config.coveralls === "undefined"){
config.coveralls = true;
config.coveralls = false;
}
if (config.mode == "default"){
config.typings = [
"./ts/"
];
config.ts = {
["./ts/index.ts"]: "./index.js"
["./ts/index.ts"]: "./index.js",
["./ts/test.ts"]: "./test/test.js"
};
config.test = ["./index.js"];
done.resolve(config);

View File

@ -7,11 +7,9 @@ module NpmtsPlugins {
gulp: require("gulp"),
g: {
coveralls: require("gulp-coveralls"),
if: require("gulp-if"),
insert: require("gulp-insert"),
istanbul: require("gulp-istanbul"),
mocha: require("gulp-mocha"),
sequence: require("gulp-sequence"),
typescript: require("gulp-typescript")
},

View File

@ -3,37 +3,42 @@ module NpmtsTests {
export var run = function(configArg) {
var done = plugins.q.defer();
var config = configArg;
plugins.gulp.task('istanbul', function () {
return plugins.gulp.src([plugins.path.join(paths.cwd,"index.js")])
var istanbul = function () {
var stream = plugins.gulp.src([plugins.path.join(paths.cwd,"index.js")])
// Covering files
.pipe(plugins.g.istanbul())
// Force `require` to return covered files
.pipe(plugins.g.istanbul.hookRequire());
});
return stream;
};
plugins.gulp.task('mocha', function () {
return plugins.gulp.src(["./test/test.js"])
var mocha = function () {
var stream = plugins.gulp.src(["./test/test.js"])
.pipe(plugins.g.mocha())
// Creating the reports after tests ran
.pipe(plugins.g.istanbul.writeReports())
// Enforce a coverage of at least 90%
.pipe(plugins.g.istanbul.enforceThresholds({ thresholds: { global: 30 } }));
});
return stream;
};
plugins.gulp.task("coveralls",function(){
return plugins.gulp.src("./coverage/**/lcov.info")
.pipe(plugins.g.if(
(process.env.TRAVIS && config.coveralls),
plugins.g.coveralls()
));
});
var coveralls = function(){
var stream = plugins.gulp.src([plugins.path.join(paths.cwd,"./coverage/lcov.info")])
.pipe(plugins.g.coveralls());
return stream;
};
plugins.gulp.task("test",function(){
plugins.g.sequence("istanbul","mocha","coveralls",function(){
done.resolve();
istanbul().on("finish",function(){
mocha().on("finish",function(){
if(process.env.TRAVIS && config.coveralls){
coveralls().on("finish",function(){
done.resolve(config);
})
} else {
done.resolve(config);
}
})
});
plugins.gulp.start.apply(plugins.gulp, ['test']);
return done.promise;
}
}