import { __read, __spreadArray } from "tslib"; import { Observable } from '../Observable'; import { innerFrom } from './innerFrom'; import { argsOrArgArray } from '../util/argsOrArgArray'; import { EMPTY } from './empty'; import { createOperatorSubscriber } from '../operators/OperatorSubscriber'; import { popResultSelector } from '../util/args'; export function zip() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var resultSelector = popResultSelector(args); var sources = argsOrArgArray(args); return sources.length ? new Observable(function (subscriber) { var buffers = sources.map(function () { return []; }); var completed = sources.map(function () { return false; }); subscriber.add(function () { buffers = completed = null; }); var _loop_1 = function (sourceIndex) { innerFrom(sources[sourceIndex]).subscribe(createOperatorSubscriber(subscriber, function (value) { buffers[sourceIndex].push(value); if (buffers.every(function (buffer) { return buffer.length; })) { var result = buffers.map(function (buffer) { return buffer.shift(); }); subscriber.next(resultSelector ? resultSelector.apply(void 0, __spreadArray([], __read(result))) : result); if (buffers.some(function (buffer, i) { return !buffer.length && completed[i]; })) { subscriber.complete(); } } }, function () { completed[sourceIndex] = true; !buffers[sourceIndex].length && subscriber.complete(); })); }; for (var sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) { _loop_1(sourceIndex); } return function () { buffers = completed = null; }; }) : EMPTY; } //# sourceMappingURL=zip.js.map