iter-tools-es
Version:
The iterable toolbox
51 lines (39 loc) • 893 B
JavaScript
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;