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