@reactivex/ix-es5-esm
Version:
The Interactive Extensions for JavaScript
52 lines (50 loc) • 2.13 kB
JavaScript
import { __extends, __generator } from "tslib";
import { IterableX } from './iterablex.js';
var GenerateIterable = /** @class */ (function (_super) {
__extends(GenerateIterable, _super);
function GenerateIterable(initialState, condition, iterate, resultSelector) {
var _this = _super.call(this) || this;
_this._initialState = initialState;
_this._condition = condition;
_this._iterate = iterate;
_this._resultSelector = resultSelector;
return _this;
}
GenerateIterable.prototype[Symbol.iterator] = function () {
var i;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
i = this._initialState;
_a.label = 1;
case 1:
if (!this._condition(i)) return [3 /*break*/, 4];
return [4 /*yield*/, this._resultSelector(i)];
case 2:
_a.sent();
_a.label = 3;
case 3:
i = this._iterate(i);
return [3 /*break*/, 1];
case 4: return [2 /*return*/];
}
});
};
return GenerateIterable;
}(IterableX));
/**
* Generates an iterable sequence by running a state-driven loop producing the sequence's elements.
*
* @template TState The type of the state used in the generator loop.
* @template TResult The type of the elements in the produced sequence.
* @param {TState} initialState The initial state.
* @param {((value: TState) => boolean)} condition Condition to terminate generation (upon returning false).
* @param {((value: TState) => TState)} iterate Iteration step function.
* @param {((value: TState) => TResult)} resultSelector Selector function for results produced in
* the sequence.
* @returns {IterableX<TResult>} The generated iterable sequence.
*/
export function generate(initialState, condition, iterate, resultSelector) {
return new GenerateIterable(initialState, condition, iterate, resultSelector);
}
//# sourceMappingURL=generate.js.map