You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
836 B

3 years ago
/**
* Obliterator Chain Function
* ===========================
*
* Variadic function combining the given iterables.
*/
var Iterator = require('./iterator.js');
var iter = require('./iter.js');
/**
* Chain.
*
* @param {...Iterator} iterables - Target iterables.
* @return {Iterator}
*/
module.exports = function chain() {
var iterables = arguments;
var current = null;
var i = -1;
/* eslint-disable no-constant-condition */
return new Iterator(function next() {
var step = null;
do {
if (current === null) {
i++;
if (i >= iterables.length) return {done: true};
current = iter(iterables[i]);
}
step = current.next();
if (step.done === true) {
current = null;
continue;
}
break;
} while (true);
return step;
});
};