| 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 |