import { createQueue } from './queue.js'; export const combine = (...iterables: AsyncIterable[]) => { const queue = createQueue>(); Promise.all( iterables.map(async (iterable) => { for await (const value of iterable) { await queue.push({ value, done: false }).promise; } }), ).then(async () => queue.done({ value: null, done: true })); return { [Symbol.asyncIterator]() { return { next() { return queue.pull().promise; }, }; }, }; };