ix
Version:
The Interactive Extensions for JavaScript
43 lines (41 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.zip = exports.ZipAsyncIterable = void 0;
const tslib_1 = require("tslib");
const withabort_js_1 = require("./operators/withabort.js");
const asynciterablex_js_1 = require("./asynciterablex.js");
const returniterator_js_1 = require("../util/returniterator.js");
const aborterror_js_1 = require("../aborterror.js");
/** @ignore */
class ZipAsyncIterable extends asynciterablex_js_1.AsyncIterableX {
constructor(sources) {
super();
this._sources = sources;
}
// eslint-disable-next-line consistent-return
[Symbol.asyncIterator](signal) {
return tslib_1.__asyncGenerator(this, arguments, function* _a() {
(0, aborterror_js_1.throwIfAborted)(signal);
const sourcesLength = this._sources.length;
const its = this._sources.map((x) => (0, withabort_js_1.wrapWithAbort)(x, signal)[Symbol.asyncIterator]());
while (sourcesLength > 0) {
const values = new Array(sourcesLength);
for (let i = -1; ++i < sourcesLength;) {
const { value, done } = yield tslib_1.__await(its[i].next());
if (done) {
yield tslib_1.__await(Promise.all(its.map(returniterator_js_1.returnAsyncIterator)));
return yield tslib_1.__await(undefined);
}
values[i] = value;
}
yield yield tslib_1.__await(values);
}
});
}
}
exports.ZipAsyncIterable = ZipAsyncIterable;
function zip(...sources) {
return new ZipAsyncIterable(sources);
}
exports.zip = zip;
//# sourceMappingURL=zip.js.map