You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
885 B
41 lines
885 B
'use strict'; |
|
|
|
const { PassThrough } = require('stream'); |
|
|
|
module.exports = function (/*streams...*/) { |
|
var sources = [] |
|
var output = new PassThrough({objectMode: true}) |
|
|
|
output.setMaxListeners(0) |
|
|
|
output.add = add |
|
output.isEmpty = isEmpty |
|
|
|
output.on('unpipe', remove) |
|
|
|
Array.prototype.slice.call(arguments).forEach(add) |
|
|
|
return output |
|
|
|
function add (source) { |
|
if (Array.isArray(source)) { |
|
source.forEach(add) |
|
return this |
|
} |
|
|
|
sources.push(source); |
|
source.once('end', remove.bind(null, source)) |
|
source.once('error', output.emit.bind(output, 'error')) |
|
source.pipe(output, {end: false}) |
|
return this |
|
} |
|
|
|
function isEmpty () { |
|
return sources.length == 0; |
|
} |
|
|
|
function remove (source) { |
|
sources = sources.filter(function (it) { return it !== source }) |
|
if (!sources.length && output.readable) { output.end() } |
|
} |
|
}
|
|
|