UNPKG

iter-tools-es

Version:
53 lines (42 loc) 1.09 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 { __map } = require('../$map/map.js'); const { __some } = require('../$some/some.js'); const { __asyncToArray } = require('../$to-array/async-to-array.js'); const isDone = peekr => peekr.done; async function* __asyncZip(sources) { const peekrs = await __asyncToArray(__asyncMap(sources, __asyncPeekerate)); let done = __some(peekrs, isDone); try { while (!done) { yield peekrs.map(({ value }) => value); await Promise.all(__map(peekrs, peekr => peekr.advance())); done = __some(peekrs, isDone); } } finally { await asyncParallelEach(peekrs, peekr => peekr.return()); } } exports.__asyncZip = __asyncZip; const asyncZip = /*#__PURE__*/asyncIterableCurry(__asyncZip, { variadic: true }); exports.asyncZip = asyncZip;