pax_global_header 0000666 0000000 0000000 00000000064 13167214512 0014514 g ustar 00root root 0000000 0000000 52 comment=f2fdc9b58913253325f449b25201489e98003066
stream-each-1.2.2/ 0000775 0000000 0000000 00000000000 13167214512 0013707 5 ustar 00root root 0000000 0000000 stream-each-1.2.2/.gitignore 0000664 0000000 0000000 00000000015 13167214512 0015673 0 ustar 00root root 0000000 0000000 node_modules
stream-each-1.2.2/.travis.yml 0000664 0000000 0000000 00000000076 13167214512 0016023 0 ustar 00root root 0000000 0000000 language: node_js
node_js:
- '0.10'
- '0.12'
- 'stable'
stream-each-1.2.2/LICENSE 0000664 0000000 0000000 00000002067 13167214512 0014721 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) 2015 Mathias Buus
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
stream-each-1.2.2/README.md 0000664 0000000 0000000 00000001764 13167214512 0015176 0 ustar 00root root 0000000 0000000 # stream-each
Iterate all the data in a stream
```
npm install stream-each
```
[](http://travis-ci.org/mafintosh/stream-each)
## Usage
``` js
var each = require('stream-each')
each(stream, function (data, next) {
console.log('data from stream', data)
// when ready to consume next chunk
next()
}, function (err) {
console.log('no more data')
})
```
## API
#### `each(stream, iterator, cb)`
Iterate the data in the stream by calling the iterator function with `(data, next)`
where data is a data chunk and next is a callback. Call next when you are ready to
consume the next chunk. Optionally you can call next with an error to destroy the stream
When the stream ends/errors the callback is called if provided
## License
MIT
## Related
`stream-each` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
stream-each-1.2.2/collaborators.md 0000664 0000000 0000000 00000000540 13167214512 0017076 0 ustar 00root root 0000000 0000000 ## Collaborators
stream-each is only possible due to the excellent work of the following collaborators:
stream-each-1.2.2/index.js 0000664 0000000 0000000 00000001773 13167214512 0015364 0 ustar 00root root 0000000 0000000 var eos = require('end-of-stream')
var shift = require('stream-shift')
module.exports = each
function each (stream, fn, cb) {
var want = true
var error = null
var ended = false
var running = false
var calling = false
stream.on('readable', onreadable)
onreadable()
if (cb) eos(stream, {readable: true, writable: false}, done)
return stream
function done (err) {
if (!error) error = err
ended = true
if (!running) cb(error)
}
function onreadable () {
if (want) read()
}
function afterRead (err) {
running = false
if (err) {
error = err
if (ended) return cb(error)
stream.destroy(err)
return
}
if (ended) return cb(error)
if (!calling) read()
}
function read () {
while (!running && !ended) {
want = false
var data = shift(stream)
if (data === null) {
want = true
return
}
running = true
calling = true
fn(data, afterRead)
calling = false
}
}
}
stream-each-1.2.2/package.json 0000664 0000000 0000000 00000001233 13167214512 0016174 0 ustar 00root root 0000000 0000000 {
"name": "stream-each",
"version": "1.2.2",
"description": "Iterate all the data in a stream",
"main": "index.js",
"dependencies": {
"end-of-stream": "^1.1.0",
"stream-shift": "^1.0.0"
},
"devDependencies": {
"standard": "^5.3.1",
"tape": "^4.2.1",
"through2": "^2.0.0"
},
"scripts": {
"test": "standard && tape test.js"
},
"repository": {
"type": "git",
"url": "https://github.com/mafintosh/stream-each.git"
},
"author": "Mathias Buus (@mafintosh)",
"license": "MIT",
"bugs": {
"url": "https://github.com/mafintosh/stream-each/issues"
},
"homepage": "https://github.com/mafintosh/stream-each"
}
stream-each-1.2.2/test.js 0000664 0000000 0000000 00000004037 13167214512 0015230 0 ustar 00root root 0000000 0000000 var tape = require('tape')
var through = require('through2')
var each = require('./')
tape('each', function (t) {
var s = through.obj()
s.write('a')
s.write('b')
s.write('c')
s.end()
s.on('end', function () {
t.end()
})
var expected = ['a', 'b', 'c']
each(s, function (data, next) {
t.same(data, expected.shift())
next()
})
})
tape('each and callback', function (t) {
var s = through.obj()
s.write('a')
s.write('b')
s.write('c')
s.end()
var expected = ['a', 'b', 'c']
each(s, function (data, next) {
t.same(data, expected.shift())
next()
}, function () {
t.end()
})
})
tape('each (write after)', function (t) {
var s = through.obj()
s.on('end', function () {
t.end()
})
var expected = ['a', 'b', 'c']
each(s, function (data, next) {
t.same(data, expected.shift())
next()
})
setTimeout(function () {
s.write('a')
s.write('b')
s.write('c')
s.end()
}, 100)
})
tape('each error', function (t) {
var s = through.obj()
s.write('hello')
s.on('error', function (err) {
t.same(err.message, 'stop')
t.end()
})
each(s, function (data, next) {
next(new Error('stop'))
})
})
tape('each error and callback', function (t) {
var s = through.obj()
s.write('hello')
each(s, function (data, next) {
next(new Error('stop'))
}, function (err) {
t.same(err.message, 'stop')
t.end()
})
})
tape('each with falsey values', function (t) {
var s = through.obj()
s.write(0)
s.write(false)
s.write(undefined)
s.end()
s.on('end', function () {
t.end()
})
var expected = [0, false]
var count = 0
each(s, function (data, next) {
count++
t.same(data, expected.shift())
next()
}, function () {
t.same(count, 2)
})
})
tape('huge stack', function (t) {
var s = through.obj()
for (var i = 0; i < 5000; i++) {
s.write('foo')
}
s.end()
each(s, function (data, cb) {
if (data !== 'foo') t.fail('bad data')
cb()
}, function (err) {
t.error(err, 'no error')
t.end()
})
})