diff --git a/.travis.yml b/.travis.yml index dedfc07..ea4c8c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,4 +3,3 @@ language: node_js node_js: - 'iojs' - '0.12' - - '0.10' diff --git a/index.js b/index.js index ef4dc2d..2083294 100644 --- a/index.js +++ b/index.js @@ -1,49 +1,52 @@ 'use strict'; +var stdin = process.stdin; -module.exports = function (cb) { - var stdin = process.stdin; +module.exports = function () { var ret = ''; - if (stdin.isTTY) { - setImmediate(cb, ret); - return; - } + return new Promise(function (resolve) { + if (stdin.isTTY) { + resolve(ret); + return; + } - stdin.setEncoding('utf8'); + stdin.setEncoding('utf8'); - stdin.on('readable', function () { - var chunk; + stdin.on('readable', function () { + var chunk; - while (chunk = stdin.read()) { - ret += chunk; - } - }); + while ((chunk = stdin.read())) { + ret += chunk; + } + }); - stdin.on('end', function () { - cb(ret); + stdin.on('end', function () { + resolve(ret); + }); }); }; -module.exports.buffer = function (cb) { - var stdin = process.stdin; +module.exports.buffer = function () { var ret = []; var len = 0; - if (stdin.isTTY) { - setImmediate(cb, new Buffer('')); - return; - } + return new Promise(function (resolve) { + if (stdin.isTTY) { + resolve(new Buffer('')); + return; + } - stdin.on('readable', function () { - var chunk; + stdin.on('readable', function () { + var chunk; - while (chunk = stdin.read()) { - ret.push(chunk); - len += chunk.length; - } - }); + while ((chunk = stdin.read())) { + ret.push(chunk); + len += chunk.length; + } + }); - stdin.on('end', function () { - cb(Buffer.concat(ret, len)); + stdin.on('end', function () { + resolve(Buffer.concat(ret, len)); + }); }); }; diff --git a/package.json b/package.json index 9a3e42a..749f169 100644 --- a/package.json +++ b/package.json @@ -7,13 +7,13 @@ "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", - "url": "http://sindresorhus.com" + "url": "sindresorhus.com" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" }, "scripts": { - "test": "node test.js && node test-buffer.js && echo unicorns | node test-real.js" + "test": "ava test.js test-buffer.js && echo unicorns | ava test-real.js" }, "files": [ "index.js" @@ -29,7 +29,7 @@ "stream" ], "devDependencies": { - "ava": "0.0.4", + "ava": "*", "buffer-equal": "0.0.1" } } diff --git a/readme.md b/readme.md index bc1d32a..79976b4 100644 --- a/readme.md +++ b/readme.md @@ -5,7 +5,7 @@ ## Install -```sh +``` $ npm install --save get-stdin ``` @@ -14,15 +14,15 @@ $ npm install --save get-stdin ```js // example.js -var stdin = require('get-stdin'); +const stdin = require('get-stdin'); -stdin(function (data) { +stdin.then(data => { console.log(data); - //=> unicorns + //=> 'unicorns' }); ``` -```sh +``` $ echo unicorns | node example.js unicorns ``` @@ -30,14 +30,18 @@ unicorns ## API -### stdin(callback) +### stdin() Get `stdin` as a string. -### stdin.buffer(callback) +Returns a promise. + +### stdin.buffer() Get `stdin` as a buffer. +Returns a promise. + ## License diff --git a/test-buffer.js b/test-buffer.js index 799e907..a98e0fc 100644 --- a/test-buffer.js +++ b/test-buffer.js @@ -4,24 +4,23 @@ var bufferEqual = require('buffer-equal'); var stdin = require('./'); test('get stdin as a buffer', function (t) { - t.plan(2); process.stdin.isTTY = false; - stdin.buffer(function (data) { - t.assert(bufferEqual(data, new Buffer('unicorns'))); - t.assert(data.toString().trim() === 'unicorns'); + var promise = stdin.buffer(function (data) { + t.true(bufferEqual(data, new Buffer('unicorns'))); + t.is(data.toString().trim(), 'unicorns'); }); process.stdin.push(new Buffer('unicorns')); process.stdin.emit('end'); + + return promise; }); test('get empty buffer when no stdin', function (t) { - t.plan(1); process.stdin.isTTY = true; - stdin.buffer(function (data) { - t.assert(bufferEqual(data, new Buffer(''))); + return stdin.buffer(function (data) { + t.true(bufferEqual(data, new Buffer(''))); }); }); - diff --git a/test-real.js b/test-real.js index c6b63d3..8ae6760 100644 --- a/test-real.js +++ b/test-real.js @@ -1,6 +1,6 @@ 'use strict'; var stdin = require('./'); -stdin(function (data) { +stdin().then(function (data) { process.exit(data ? 0 : 1); }); diff --git a/test.js b/test.js index b2734f7..43139eb 100644 --- a/test.js +++ b/test.js @@ -3,22 +3,22 @@ var test = require('ava'); var stdin = require('./'); test('get stdin', function (t) { - t.plan(1); process.stdin.isTTY = false; - stdin(function (data) { - t.assert(data.trim() === 'unicorns'); + var promise = stdin(function (data) { + t.is(data.trim(), 'unicorns'); }); process.stdin.push('unicorns'); process.stdin.emit('end'); + + return promise; }); test('get empty string when no stdin', function (t) { - t.plan(1); process.stdin.isTTY = true; - stdin(function (data) { - t.assert(data === ''); + return stdin(function (data) { + t.is(data, ''); }); });