UNPKG

asyncerator

Version:

Provide supporting types for AsyncIterable/AsyncIterableIterators, promisified stream.pipeline implementation, and Array-like utility operators, sources and sinks.

33 lines (32 loc) 2.32 kB
// src/source/merge.ts import from from "../asyncerator.mjs"; async function createPending(asyncerator, index) { const iterator = asyncerator[Symbol.asyncIterator](); return { index, iterator, result: await iterator.next() }; } async function* merge(...iterators) { const wrappedIterators = iterators.map(from); const pending = wrappedIterators.map(createPending); const indexMap = wrappedIterators.map((_, index) => index); while (pending.length > 0) { const { result, iterator, index } = await Promise.race(pending); if (result.done === true) { pending.splice(indexMap[index], 1); for (let position = index + 1; position < indexMap.length; position++) { indexMap[position] = (indexMap[position] ?? 0) - 1; } } else { if (result.value[Symbol.asyncIterator] === void 0) { yield result.value; } else { pending.push(createPending(from(result.value), indexMap.length)); indexMap.push(pending.length - 1); } pending[indexMap[index]] = createPending(iterator, index); } } } export { merge as default }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3NvdXJjZS9tZXJnZS50cyJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxPQUFPLFVBQWdEO0FBRXZELGVBQWUsY0FBaUIsYUFBNkIsT0FBZTtBQUMxRSxRQUFNLFdBQVcsWUFBWSxPQUFPLGFBQWEsRUFBRTtBQUNuRCxTQUFPLEVBQUUsT0FBTyxVQUFVLFFBQVEsTUFBTSxTQUFTLEtBQUssRUFBRTtBQUMxRDtBQVFBLGdCQUFPLFNBQW9DLFdBQXVFO0FBQ2hILFFBQU0sbUJBQW1CLFVBQVUsSUFBSSxJQUFJO0FBRTNDLFFBQU0sVUFBVSxpQkFBaUIsSUFBSSxhQUFhO0FBQ2xELFFBQU0sV0FBVyxpQkFBaUIsSUFBSSxDQUFDLEdBQUcsVUFBVSxLQUFLO0FBRXpELFNBQU8sUUFBUSxTQUFTLEdBQUc7QUFFekIsVUFBTSxFQUFFLFFBQVEsVUFBVSxNQUFNLElBQUksTUFBTSxRQUFRLEtBQUssT0FBTztBQUU5RCxRQUFJLE9BQU8sU0FBUyxNQUFNO0FBR3hCLGNBQVEsT0FBTyxTQUFTLEtBQUssR0FBYSxDQUFDO0FBQzNDLGVBQVMsV0FBVyxRQUFRLEdBQUcsV0FBVyxTQUFTLFFBQVEsWUFBWTtBQUNyRSxpQkFBUyxRQUFRLEtBQUssU0FBUyxRQUFRLEtBQUssS0FBSztBQUFBLE1BQ25EO0FBQUEsSUFDRixPQUFPO0FBRUwsVUFBSyxPQUFPLE1BQW1DLE9BQU8sYUFBYSxNQUFNLFFBQVc7QUFDbEYsY0FBTSxPQUFPO0FBQUEsTUFDZixPQUFPO0FBRUwsZ0JBQVEsS0FBSyxjQUFjLEtBQUssT0FBTyxLQUFpQyxHQUFHLFNBQVMsTUFBTSxDQUFDO0FBQzNGLGlCQUFTLEtBQUssUUFBUSxTQUFTLENBQUM7QUFBQSxNQUNsQztBQUlBLGNBQVEsU0FBUyxLQUFLLENBQVcsSUFBSSxjQUFjLFVBQVUsS0FBSztBQUFBLElBQ3BFO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=