node/deps/npm/node_modules/sorted-union-stream/index.js
Kat Marchán 9946519fba deps: upgrade npm to 4.0.5
PR-URL: https://github.com/nodejs/node/pull/10330
Reviewed-By: Myles Borins <myles.borins@gmail.com>
2016-12-28 15:30:50 -05:00

60 lines
1.1 KiB
JavaScript

var iterate = require('stream-iterate')
var from = require('from2')
var defaultKey = function (val) {
return val.key || val
}
var union = function (streamA, streamB, toKey) {
var readA = iterate(streamA)
var readB = iterate(streamB)
if (!toKey) toKey = defaultKey
var stream = from.obj(function loop (size, cb) {
readA(function (err, dataA, nextA) {
if (err) return cb(err)
readB(function (err, dataB, nextB) {
if (err) return cb(err)
if (!dataA && !dataB) return cb(null, null)
if (!dataA) {
nextB()
return cb(null, dataB)
}
if (!dataB) {
nextA()
return cb(null, dataA)
}
var keyA = toKey(dataA)
var keyB = toKey(dataB)
if (keyA === keyB) {
nextB()
return loop(size, cb)
}
if (keyA < keyB) {
nextA()
return cb(null, dataA)
}
nextB()
cb(null, dataB)
})
})
})
stream.on('close', function () {
if (streamA.destroy) streamA.destroy()
if (streamB.destroy) streamB.destroy()
})
return stream
}
module.exports = union