| "use strict"; |
| var __extends = (this && this.__extends) || (function () { |
| var extendStatics = function (d, b) { |
| extendStatics = Object.setPrototypeOf || |
| ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || |
| function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; |
| return extendStatics(d, b); |
| } |
| return function (d, b) { |
| extendStatics(d, b); |
| function __() { this.constructor = d; } |
| d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); |
| }; |
| })(); |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| var fromArray_1 = require("./fromArray"); |
| var isArray_1 = require("../util/isArray"); |
| var Subscriber_1 = require("../Subscriber"); |
| var OuterSubscriber_1 = require("../OuterSubscriber"); |
| var subscribeToResult_1 = require("../util/subscribeToResult"); |
| var iterator_1 = require("../../internal/symbol/iterator"); |
| function zip() { |
| var observables = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| observables[_i] = arguments[_i]; |
| } |
| var resultSelector = observables[observables.length - 1]; |
| if (typeof resultSelector === 'function') { |
| observables.pop(); |
| } |
| return fromArray_1.fromArray(observables, undefined).lift(new ZipOperator(resultSelector)); |
| } |
| exports.zip = zip; |
| var ZipOperator = (function () { |
| function ZipOperator(resultSelector) { |
| this.resultSelector = resultSelector; |
| } |
| ZipOperator.prototype.call = function (subscriber, source) { |
| return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector)); |
| }; |
| return ZipOperator; |
| }()); |
| exports.ZipOperator = ZipOperator; |
| var ZipSubscriber = (function (_super) { |
| __extends(ZipSubscriber, _super); |
| function ZipSubscriber(destination, resultSelector, values) { |
| if (values === void 0) { values = Object.create(null); } |
| var _this = _super.call(this, destination) || this; |
| _this.iterators = []; |
| _this.active = 0; |
| _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null; |
| _this.values = values; |
| return _this; |
| } |
| ZipSubscriber.prototype._next = function (value) { |
| var iterators = this.iterators; |
| if (isArray_1.isArray(value)) { |
| iterators.push(new StaticArrayIterator(value)); |
| } |
| else if (typeof value[iterator_1.iterator] === 'function') { |
| iterators.push(new StaticIterator(value[iterator_1.iterator]())); |
| } |
| else { |
| iterators.push(new ZipBufferIterator(this.destination, this, value)); |
| } |
| }; |
| ZipSubscriber.prototype._complete = function () { |
| var iterators = this.iterators; |
| var len = iterators.length; |
| this.unsubscribe(); |
| if (len === 0) { |
| this.destination.complete(); |
| return; |
| } |
| this.active = len; |
| for (var i = 0; i < len; i++) { |
| var iterator = iterators[i]; |
| if (iterator.stillUnsubscribed) { |
| var destination = this.destination; |
| destination.add(iterator.subscribe(iterator, i)); |
| } |
| else { |
| this.active--; |
| } |
| } |
| }; |
| ZipSubscriber.prototype.notifyInactive = function () { |
| this.active--; |
| if (this.active === 0) { |
| this.destination.complete(); |
| } |
| }; |
| ZipSubscriber.prototype.checkIterators = function () { |
| var iterators = this.iterators; |
| var len = iterators.length; |
| var destination = this.destination; |
| for (var i = 0; i < len; i++) { |
| var iterator = iterators[i]; |
| if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) { |
| return; |
| } |
| } |
| var shouldComplete = false; |
| var args = []; |
| for (var i = 0; i < len; i++) { |
| var iterator = iterators[i]; |
| var result = iterator.next(); |
| if (iterator.hasCompleted()) { |
| shouldComplete = true; |
| } |
| if (result.done) { |
| destination.complete(); |
| return; |
| } |
| args.push(result.value); |
| } |
| if (this.resultSelector) { |
| this._tryresultSelector(args); |
| } |
| else { |
| destination.next(args); |
| } |
| if (shouldComplete) { |
| destination.complete(); |
| } |
| }; |
| ZipSubscriber.prototype._tryresultSelector = function (args) { |
| var result; |
| try { |
| result = this.resultSelector.apply(this, args); |
| } |
| catch (err) { |
| this.destination.error(err); |
| return; |
| } |
| this.destination.next(result); |
| }; |
| return ZipSubscriber; |
| }(Subscriber_1.Subscriber)); |
| exports.ZipSubscriber = ZipSubscriber; |
| var StaticIterator = (function () { |
| function StaticIterator(iterator) { |
| this.iterator = iterator; |
| this.nextResult = iterator.next(); |
| } |
| StaticIterator.prototype.hasValue = function () { |
| return true; |
| }; |
| StaticIterator.prototype.next = function () { |
| var result = this.nextResult; |
| this.nextResult = this.iterator.next(); |
| return result; |
| }; |
| StaticIterator.prototype.hasCompleted = function () { |
| var nextResult = this.nextResult; |
| return nextResult && nextResult.done; |
| }; |
| return StaticIterator; |
| }()); |
| var StaticArrayIterator = (function () { |
| function StaticArrayIterator(array) { |
| this.array = array; |
| this.index = 0; |
| this.length = 0; |
| this.length = array.length; |
| } |
| StaticArrayIterator.prototype[iterator_1.iterator] = function () { |
| return this; |
| }; |
| StaticArrayIterator.prototype.next = function (value) { |
| var i = this.index++; |
| var array = this.array; |
| return i < this.length ? { value: array[i], done: false } : { value: null, done: true }; |
| }; |
| StaticArrayIterator.prototype.hasValue = function () { |
| return this.array.length > this.index; |
| }; |
| StaticArrayIterator.prototype.hasCompleted = function () { |
| return this.array.length === this.index; |
| }; |
| return StaticArrayIterator; |
| }()); |
| var ZipBufferIterator = (function (_super) { |
| __extends(ZipBufferIterator, _super); |
| function ZipBufferIterator(destination, parent, observable) { |
| var _this = _super.call(this, destination) || this; |
| _this.parent = parent; |
| _this.observable = observable; |
| _this.stillUnsubscribed = true; |
| _this.buffer = []; |
| _this.isComplete = false; |
| return _this; |
| } |
| ZipBufferIterator.prototype[iterator_1.iterator] = function () { |
| return this; |
| }; |
| ZipBufferIterator.prototype.next = function () { |
| var buffer = this.buffer; |
| if (buffer.length === 0 && this.isComplete) { |
| return { value: null, done: true }; |
| } |
| else { |
| return { value: buffer.shift(), done: false }; |
| } |
| }; |
| ZipBufferIterator.prototype.hasValue = function () { |
| return this.buffer.length > 0; |
| }; |
| ZipBufferIterator.prototype.hasCompleted = function () { |
| return this.buffer.length === 0 && this.isComplete; |
| }; |
| ZipBufferIterator.prototype.notifyComplete = function () { |
| if (this.buffer.length > 0) { |
| this.isComplete = true; |
| this.parent.notifyInactive(); |
| } |
| else { |
| this.destination.complete(); |
| } |
| }; |
| ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { |
| this.buffer.push(innerValue); |
| this.parent.checkIterators(); |
| }; |
| ZipBufferIterator.prototype.subscribe = function (value, index) { |
| return subscribeToResult_1.subscribeToResult(this, this.observable, this, index); |
| }; |
| return ZipBufferIterator; |
| }(OuterSubscriber_1.OuterSubscriber)); |
| //# sourceMappingURL=zip.js.map |