UNPKG

iteragain

Version:

Javascript Iterable/Iterator/Generator-function utilities.

48 lines 1.75 kB
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