UNPKG

iter-tools-es

Version:
51 lines (39 loc) 893 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 { __some } = require('../$some/some.js'); const { __toArray } = require('../$to-array/to-array.js'); const isDone = peekr => peekr.done; function* __zip(sources) { const peekrs = __toArray(__map(sources, __peekerate)); let done = __some(peekrs, isDone); try { while (!done) { yield peekrs.map(({ value }) => value); for (const peekr of peekrs) peekr.advance(); done = __some(peekrs, isDone); } } finally { parallelEach(peekrs, peekr => peekr.return()); } } exports.__zip = __zip; const zip = /*#__PURE__*/iterableCurry(__zip, { variadic: true }); exports.zip = zip;