UNPKG

iteragain

Version:

Javascript Iterable/Iterator/Generator-function utilities.

45 lines 1.52 kB
"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