UNPKG

@reactivex/ix-es5-esm

Version:

The Interactive Extensions for JavaScript

79 lines (77 loc) 3.44 kB
import { __asyncGenerator, __await, __extends, __generator, __read, __spreadArray } from "tslib"; import { AsyncIterableX } from './asynciterablex.js'; import { wrapWithAbort } from './operators/withabort.js'; import { throwIfAborted } from '../aborterror.js'; import { safeRace } from '../util/safeRace.js'; // eslint-disable-next-line @typescript-eslint/no-empty-function var NEVER_PROMISE = new Promise(function () { }); function wrapPromiseWithIndex(promise, index) { return promise .then(function (_a) { var value = _a.value, done = _a.done; return ({ value: value, done: done, index: index }); }) .catch(function (error) { return ({ error: error, index: index }); }); } /** @ignore */ var MergeAsyncIterable = /** @class */ (function (_super) { __extends(MergeAsyncIterable, _super); function MergeAsyncIterable(source) { var _this = _super.call(this) || this; _this._source = source; return _this; } MergeAsyncIterable.prototype[Symbol.asyncIterator] = function (signal) { return __asyncGenerator(this, arguments, function _a() { var length, iterators, nexts, active, i, iterator, next, iterator$; return __generator(this, function (_b) { switch (_b.label) { case 0: throwIfAborted(signal); length = this._source.length; iterators = new Array(length); nexts = new Array(length); active = length; for (i = 0; i < length; i++) { iterator = wrapWithAbort(this._source[i], signal)[Symbol.asyncIterator](); iterators[i] = iterator; nexts[i] = wrapPromiseWithIndex(iterator.next(), i); } _b.label = 1; case 1: if (!(active > 0)) return [3 /*break*/, 8]; return [4 /*yield*/, __await(safeRace(nexts))]; case 2: next = _b.sent(); if (!next.hasOwnProperty('error')) return [3 /*break*/, 3]; throw next.error; case 3: if (!next.done) return [3 /*break*/, 4]; nexts[next.index] = NEVER_PROMISE; active--; return [3 /*break*/, 7]; case 4: iterator$ = iterators[next.index]; nexts[next.index] = wrapPromiseWithIndex(iterator$.next(), next.index); return [4 /*yield*/, __await(next.value)]; case 5: return [4 /*yield*/, _b.sent()]; case 6: _b.sent(); _b.label = 7; case 7: return [3 /*break*/, 1]; case 8: return [2 /*return*/]; } }); }); }; return MergeAsyncIterable; }(AsyncIterableX)); export { MergeAsyncIterable }; export function merge(source) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return new MergeAsyncIterable(__spreadArray([source], __read(args), false)); } //# sourceMappingURL=merge.js.map