Browse Source

convert to Promise API

fixes #6
master
Sindre Sorhus 9 years ago
parent
commit
385a9ce4b4
  1. 1
      .travis.yml
  2. 63
      index.js
  3. 8
      package.json
  4. 18
      readme.md
  5. 15
      test-buffer.js
  6. 2
      test-real.js
  7. 12
      test.js

1
.travis.yml

@ -3,4 +3,3 @@ language: node_js
node_js: node_js:
- 'iojs' - 'iojs'
- '0.12' - '0.12'
- '0.10'

63
index.js

@ -1,49 +1,52 @@
'use strict'; 'use strict';
var stdin = process.stdin;
module.exports = function (cb) { module.exports = function () {
var stdin = process.stdin;
var ret = ''; var ret = '';
if (stdin.isTTY) { return new Promise(function (resolve) {
setImmediate(cb, ret); if (stdin.isTTY) {
return; resolve(ret);
} return;
}
stdin.setEncoding('utf8'); stdin.setEncoding('utf8');
stdin.on('readable', function () { stdin.on('readable', function () {
var chunk; var chunk;
while (chunk = stdin.read()) { while ((chunk = stdin.read())) {
ret += chunk; ret += chunk;
} }
}); });
stdin.on('end', function () { stdin.on('end', function () {
cb(ret); resolve(ret);
});
}); });
}; };
module.exports.buffer = function (cb) { module.exports.buffer = function () {
var stdin = process.stdin;
var ret = []; var ret = [];
var len = 0; var len = 0;
if (stdin.isTTY) { return new Promise(function (resolve) {
setImmediate(cb, new Buffer('')); if (stdin.isTTY) {
return; resolve(new Buffer(''));
} return;
}
stdin.on('readable', function () { stdin.on('readable', function () {
var chunk; var chunk;
while (chunk = stdin.read()) { while ((chunk = stdin.read())) {
ret.push(chunk); ret.push(chunk);
len += chunk.length; len += chunk.length;
} }
}); });
stdin.on('end', function () { stdin.on('end', function () {
cb(Buffer.concat(ret, len)); resolve(Buffer.concat(ret, len));
});
}); });
}; };

8
package.json

@ -7,13 +7,13 @@
"author": { "author": {
"name": "Sindre Sorhus", "name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com", "email": "sindresorhus@gmail.com",
"url": "http://sindresorhus.com" "url": "sindresorhus.com"
}, },
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.12.0"
}, },
"scripts": { "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": [ "files": [
"index.js" "index.js"
@ -29,7 +29,7 @@
"stream" "stream"
], ],
"devDependencies": { "devDependencies": {
"ava": "0.0.4", "ava": "*",
"buffer-equal": "0.0.1" "buffer-equal": "0.0.1"
} }
} }

18
readme.md

@ -5,7 +5,7 @@
## Install ## Install
```sh ```
$ npm install --save get-stdin $ npm install --save get-stdin
``` ```
@ -14,15 +14,15 @@ $ npm install --save get-stdin
```js ```js
// example.js // example.js
var stdin = require('get-stdin'); const stdin = require('get-stdin');
stdin(function (data) { stdin.then(data => {
console.log(data); console.log(data);
//=> unicorns //=> 'unicorns'
}); });
``` ```
```sh ```
$ echo unicorns | node example.js $ echo unicorns | node example.js
unicorns unicorns
``` ```
@ -30,14 +30,18 @@ unicorns
## API ## API
### stdin(callback) ### stdin()
Get `stdin` as a string. Get `stdin` as a string.
### stdin.buffer(callback) Returns a promise.
### stdin.buffer()
Get `stdin` as a buffer. Get `stdin` as a buffer.
Returns a promise.
## License ## License

15
test-buffer.js

@ -4,24 +4,23 @@ var bufferEqual = require('buffer-equal');
var stdin = require('./'); var stdin = require('./');
test('get stdin as a buffer', function (t) { test('get stdin as a buffer', function (t) {
t.plan(2);
process.stdin.isTTY = false; process.stdin.isTTY = false;
stdin.buffer(function (data) { var promise = stdin.buffer(function (data) {
t.assert(bufferEqual(data, new Buffer('unicorns'))); t.true(bufferEqual(data, new Buffer('unicorns')));
t.assert(data.toString().trim() === 'unicorns'); t.is(data.toString().trim(), 'unicorns');
}); });
process.stdin.push(new Buffer('unicorns')); process.stdin.push(new Buffer('unicorns'));
process.stdin.emit('end'); process.stdin.emit('end');
return promise;
}); });
test('get empty buffer when no stdin', function (t) { test('get empty buffer when no stdin', function (t) {
t.plan(1);
process.stdin.isTTY = true; process.stdin.isTTY = true;
stdin.buffer(function (data) { return stdin.buffer(function (data) {
t.assert(bufferEqual(data, new Buffer(''))); t.true(bufferEqual(data, new Buffer('')));
}); });
}); });

2
test-real.js

@ -1,6 +1,6 @@
'use strict'; 'use strict';
var stdin = require('./'); var stdin = require('./');
stdin(function (data) { stdin().then(function (data) {
process.exit(data ? 0 : 1); process.exit(data ? 0 : 1);
}); });

12
test.js

@ -3,22 +3,22 @@ var test = require('ava');
var stdin = require('./'); var stdin = require('./');
test('get stdin', function (t) { test('get stdin', function (t) {
t.plan(1);
process.stdin.isTTY = false; process.stdin.isTTY = false;
stdin(function (data) { var promise = stdin(function (data) {
t.assert(data.trim() === 'unicorns'); t.is(data.trim(), 'unicorns');
}); });
process.stdin.push('unicorns'); process.stdin.push('unicorns');
process.stdin.emit('end'); process.stdin.emit('end');
return promise;
}); });
test('get empty string when no stdin', function (t) { test('get empty string when no stdin', function (t) {
t.plan(1);
process.stdin.isTTY = true; process.stdin.isTTY = true;
stdin(function (data) { return stdin(function (data) {
t.assert(data === ''); t.is(data, '');
}); });
}); });

Loading…
Cancel
Save