iter-tools-es
Version:
The iterable toolbox
54 lines (44 loc) • 997 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 {
__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;