UNPKG

iter-tools-es

Version:
54 lines (44 loc) 997 B
const { iterableCurry } = require('../../internal/iterable.js'); const { parallelEach } = require('../../internal/parallel-each.js'); const { __peekerate } = require('../$peekerate/peekerate.js'); const { __map } = require('../$map/map.js'); const { __every } = require('../$every/every.js'); const { __toArray } = require('../$to-array/to-array.js'); const isDone = peekr => peekr.done; function* __zipAll(sources, { filler } = {}) { const peekrs = __toArray(__map(sources, __peekerate)); let done = __every(peekrs, isDone); try { while (!done) { yield peekrs.map(({ value, done }) => done ? filler : value); parallelEach(peekrs, peekr => peekr.advance()); done = __every(peekrs, isDone); } } finally { parallelEach(peekrs, peekr => peekr.return()); } } exports.__zipAll = __zipAll; const zipAll = /*#__PURE__*/iterableCurry(__zipAll, { variadic: true, minArgs: 0, maxArgs: 1 }); exports.zipAll = zipAll;