@reactivex/ix-es5-esm
Version:
The Interactive Extensions for JavaScript
79 lines (77 loc) • 3.44 kB
JavaScript
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