UNPKG

ix

Version:

The Interactive Extensions for JavaScript

42 lines (40 loc) 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generate = void 0; const tslib_1 = require("tslib"); const asynciterablex_js_1 = require("./asynciterablex.js"); const aborterror_js_1 = require("../aborterror.js"); class GenerateAsyncIterable extends asynciterablex_js_1.AsyncIterableX { constructor(initialState, condition, iterate, resultSelector) { super(); this._initialState = initialState; this._condition = condition; this._iterate = iterate; this._resultSelector = resultSelector; } [Symbol.asyncIterator](signal) { return tslib_1.__asyncGenerator(this, arguments, function* _a() { (0, aborterror_js_1.throwIfAborted)(signal); for (let i = this._initialState; yield tslib_1.__await(this._condition(i, signal)); i = yield tslib_1.__await(this._iterate(i, signal))) { yield yield tslib_1.__await(yield tslib_1.__await(this._resultSelector(i, signal))); } }); } } /** * Generates an async-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, signal?: AbortSignal) => boolean | Promise<boolean>)} condition Condition to terminate generation (upon returning false). * @param {((value: TState, signal?: AbortSignal) => TState | Promise<TState>)} iterate Iteration step function. * @param {((value: TState, signal?: AbortSignal) => TResult | Promise<TResult>)} resultSelector Selector function for results produced in * the sequence. * @returns {AsyncIterableX<TResult>} The generated async-iterable sequence. */ function generate(initialState, condition, iterate, resultSelector) { return new GenerateAsyncIterable(initialState, condition, iterate, resultSelector); } exports.generate = generate; //# sourceMappingURL=generate.js.map