iter-tools-es
Version:
The iterable toolbox
43 lines (36 loc) • 853 B
JavaScript
const {
iterableCurry
} = require('../../internal/iterable.js');
const {
__interleave
} = require('../$interleave/interleave.js');
const {
makeValidateArgs
} = require('./internal/validate-args.js');
function* byPosition({
start,
step
}, all, ...peekrs) {
start = start % peekrs.length;
for (let i = start; !all.done; i = (i + step) % peekrs.length) {
const peekr = peekrs[i];
if (!peekr.done) {
yield peekr.value;
peekr.advance();
}
}
}
function __roundRobin(sources, step = 1, start = 0) {
return __interleave(sources, byPosition, {
start,
step
});
}
exports.__roundRobin = __roundRobin;
const roundRobin = /*#__PURE__*/iterableCurry(__roundRobin, {
variadic: true,
minArgs: 0,
maxArgs: 2,
validateArgs: /*#__PURE__*/makeValidateArgs('roundRobin')
});
exports.roundRobin = roundRobin;