iteragain
Version:
Javascript Iterable/Iterator/Generator-function utilities.
45 lines • 1.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FlattenIterator = void 0;
const isIterable_1 = require("../isIterable");
const isIterator_1 = require("../isIterator");
const toIterator_1 = require("../toIterator");
/** Flattens an iterator `depth` number of levels. */
class FlattenIterator {
constructor(iterator, depth) {
this.iterator = iterator;
this.depth = depth;
this.inner = null;
}
[Symbol.iterator]() {
return this;
}
next(...args) {
if (this.depth < 1)
return this.iterator.next(...args);
let next;
if (this.inner) {
next = this.inner.next(...args);
if (next.done) {
this.inner = null;
return this.next(...args);
}
return next;
}
next = this.iterator.next(...args);
if (typeof next.value !== 'string') {
if ((0, isIterator_1.default)(next.value)) {
this.inner = new FlattenIterator(next.value, this.depth - 1);
return this.next(...args);
}
else if ((0, isIterable_1.default)(next.value)) {
this.inner = new FlattenIterator((0, toIterator_1.default)(next.value), this.depth - 1);
return this.next(...args);
}
}
return next;
}
}
exports.FlattenIterator = FlattenIterator;
exports.default = FlattenIterator;
//# sourceMappingURL=FlattenIterator.js.map