iteragain
Version:
Javascript Iterable/Iterator/Generator-function utilities.
48 lines • 1.75 kB
JavaScript
import isIterable from '../isIterable';
import isIterator from '../isIterator';
import toIterator from '../toIterator';
/** Flattens an iterator `depth` number of levels. Nested string values are left intact (not split into characters). */
var FlattenIterator = /** @class */ (function () {
function FlattenIterator(iterator, depth) {
this.iterator = iterator;
this.depth = depth;
this.inner = null;
}
FlattenIterator.prototype[Symbol.iterator] = function () {
return this;
};
FlattenIterator.prototype.next = function () {
var _a, _b, _c;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (this.depth < 1)
return (_a = this.iterator).next.apply(_a, args);
var next;
if (this.inner) {
next = (_b = this.inner).next.apply(_b, args);
if (next.done) {
this.inner = null;
return this.next.apply(this, args);
}
return next;
}
next = (_c = this.iterator).next.apply(_c, args);
if (typeof next.value !== 'string') {
if (isIterator(next.value)) {
this.inner = new FlattenIterator(next.value, this.depth - 1);
return this.next.apply(this, args);
}
else if (isIterable(next.value)) {
this.inner = new FlattenIterator(toIterator(next.value), this.depth - 1);
return this.next.apply(this, args);
}
}
return next;
};
return FlattenIterator;
}());
export { FlattenIterator };
export default FlattenIterator;
//# sourceMappingURL=FlattenIterator.js.map