"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 Observable_1 = require("../Observable"); var isArray_1 = require("../util/isArray"); var empty_1 = require("./empty"); var subscribeToResult_1 = require("../util/subscribeToResult"); var OuterSubscriber_1 = require("../OuterSubscriber"); var map_1 = require("../operators/map"); function forkJoin() { var sources = []; for (var _i = 0; _i < arguments.length; _i++) { sources[_i] = arguments[_i]; } var resultSelector; if (typeof sources[sources.length - 1] === 'function') { resultSelector = sources.pop(); } if (sources.length === 1 && isArray_1.isArray(sources[0])) { sources = sources[0]; } if (sources.length === 0) { return empty_1.EMPTY; } if (resultSelector) { return forkJoin(sources).pipe(map_1.map(function (args) { return resultSelector.apply(void 0, args); })); } return new Observable_1.Observable(function (subscriber) { return new ForkJoinSubscriber(subscriber, sources); }); } exports.forkJoin = forkJoin; var ForkJoinSubscriber = (function (_super) { __extends(ForkJoinSubscriber, _super); function ForkJoinSubscriber(destination, sources) { var _this = _super.call(this, destination) || this; _this.sources = sources; _this.completed = 0; _this.haveValues = 0; var len = sources.length; _this.values = new Array(len); for (var i = 0; i < len; i++) { var source = sources[i]; var innerSubscription = subscribeToResult_1.subscribeToResult(_this, source, null, i); if (innerSubscription) { _this.add(innerSubscription); } } return _this; } ForkJoinSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { this.values[outerIndex] = innerValue; if (!innerSub._hasValue) { innerSub._hasValue = true; this.haveValues++; } }; ForkJoinSubscriber.prototype.notifyComplete = function (innerSub) { var _a = this, destination = _a.destination, haveValues = _a.haveValues, values = _a.values; var len = values.length; if (!innerSub._hasValue) { destination.complete(); return; } this.completed++; if (this.completed !== len) { return; } if (haveValues === len) { destination.next(values); } destination.complete(); }; return ForkJoinSubscriber; }(OuterSubscriber_1.OuterSubscriber)); //# sourceMappingURL=forkJoin.js.map