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:
- 'iojs'
- '0.12'
- '0.10'

63
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));
});
});
};

8
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"
}
}

18
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

15
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('')));
});
});

2
test-real.js

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

12
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, '');
});
});

Loading…
Cancel
Save