UNPKG

iter-tools-es

Version:
54 lines (44 loc) 1.14 kB
const { asyncIterableCurry } = require('../../internal/async-iterable.js'); const { asyncParallelEach } = require('../../internal/async-parallel-each.js'); const { __asyncPeekerate } = require('../$peekerate/async-peekerate.js'); const { __asyncMap } = require('../$map/async-map.js'); const { __every } = require('../$every/every.js'); const { __asyncToArray } = require('../$to-array/async-to-array.js'); const isDone = peekr => peekr.done; async function* __asyncZipAll(sources, { filler } = {}) { const peekrs = await __asyncToArray(__asyncMap(sources, __asyncPeekerate)); let done = __every(peekrs, isDone); try { while (!done) { yield peekrs.map(({ value, done }) => done ? filler : value); await asyncParallelEach(peekrs, peekr => peekr.advance()); done = __every(peekrs, isDone); } } finally { await asyncParallelEach(peekrs, peekr => peekr.return()); } } exports.__asyncZipAll = __asyncZipAll; const asyncZipAll = /*#__PURE__*/asyncIterableCurry(__asyncZipAll, { variadic: true, minArgs: 0, maxArgs: 1 }); exports.asyncZipAll = asyncZipAll;