mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-04-25 10:32:14 +00:00
49 lines
1.0 KiB
JavaScript
49 lines
1.0 KiB
JavaScript
'use strict'
|
|
|
|
const AbortController = require('abort-controller')
|
|
|
|
/**
|
|
* Converts BufferList messages to Buffers
|
|
* @param {*} source
|
|
* @returns {AsyncGenerator}
|
|
*/
|
|
function toBuffer (source) {
|
|
return (async function * () {
|
|
for await (const chunk of source) {
|
|
yield Buffer.isBuffer(chunk) ? chunk : chunk.slice()
|
|
}
|
|
})()
|
|
}
|
|
|
|
/**
|
|
* Takes an array of AbortSignals and returns a single signal.
|
|
* If any signals are aborted, the returned signal will be aborted.
|
|
* @param {Array<AbortSignal>} signals
|
|
* @returns {AbortSignal}
|
|
*/
|
|
function anySignal (signals) {
|
|
const controller = new AbortController()
|
|
|
|
function onAbort () {
|
|
controller.abort()
|
|
|
|
// Cleanup
|
|
for (const signal of signals) {
|
|
signal.removeEventListener('abort', onAbort)
|
|
}
|
|
}
|
|
|
|
for (const signal of signals) {
|
|
if (signal.aborted) {
|
|
onAbort()
|
|
break
|
|
}
|
|
signal.addEventListener('abort', onAbort)
|
|
}
|
|
|
|
return controller.signal
|
|
}
|
|
|
|
module.exports.toBuffer = toBuffer
|
|
module.exports.anySignal = anySignal
|