mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
'use strict'
|
|
|
|
var values = require('../sources/values')
|
|
var once = require('../sources/once')
|
|
|
|
//convert a stream of arrays or streams into just a stream.
|
|
module.exports = function flatten () {
|
|
return function (read) {
|
|
var _read
|
|
return function (abort, cb) {
|
|
if (abort) { //abort the current stream, and then stream of streams.
|
|
_read ? _read(abort, function(err) {
|
|
read(err || abort, cb)
|
|
}) : read(abort, cb)
|
|
}
|
|
else if(_read) nextChunk()
|
|
else nextStream()
|
|
|
|
function nextChunk () {
|
|
_read(null, function (err, data) {
|
|
if (err === true) nextStream()
|
|
else if (err) {
|
|
read(true, function(abortErr) {
|
|
// TODO: what do we do with the abortErr?
|
|
cb(err)
|
|
})
|
|
}
|
|
else cb(null, data)
|
|
})
|
|
}
|
|
function nextStream () {
|
|
_read = null
|
|
read(null, function (end, stream) {
|
|
if(end)
|
|
return cb(end)
|
|
if(Array.isArray(stream) || stream && 'object' === typeof stream)
|
|
stream = values(stream)
|
|
else if('function' != typeof stream)
|
|
stream = once(stream)
|
|
_read = stream
|
|
nextChunk()
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|