39 lines
871 B
JavaScript
39 lines
871 B
JavaScript
'use strict'
|
|
|
|
const EE = require('events')
|
|
const loadTransportStreamBuilder = require('./transport-stream')
|
|
const { pipeline, PassThrough } = require('stream')
|
|
|
|
// This file is not checked by the code coverage tool,
|
|
// as it is not reliable.
|
|
|
|
/* istanbul ignore file */
|
|
|
|
module.exports = async function ({ targets }) {
|
|
const streams = await Promise.all(targets.map(async (t) => {
|
|
const fn = await loadTransportStreamBuilder(t.target)
|
|
const stream = await fn(t.options)
|
|
return stream
|
|
}))
|
|
const ee = new EE()
|
|
|
|
const stream = new PassThrough({
|
|
autoDestroy: true,
|
|
destroy (_, cb) {
|
|
ee.on('error', cb)
|
|
ee.on('closed', cb)
|
|
}
|
|
})
|
|
|
|
pipeline(stream, ...streams, function (err) {
|
|
if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
|
|
ee.emit('error', err)
|
|
return
|
|
}
|
|
|
|
ee.emit('closed')
|
|
})
|
|
|
|
return stream
|
|
}
|