/** PURE_IMPORTS_START tslib,_Observable,_util_isArray,_empty,_util_subscribeToResult,_OuterSubscriber,_operators_map PURE_IMPORTS_END */ import * as tslib_1 from "tslib"; import { Observable } from '../Observable'; import { isArray } from '../util/isArray'; import { EMPTY } from './empty'; import { subscribeToResult } from '../util/subscribeToResult'; import { OuterSubscriber } from '../OuterSubscriber'; import { map } from '../operators/map'; export 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(sources[0])) { sources = sources[0]; } if (sources.length === 0) { return EMPTY; } if (resultSelector) { return forkJoin(sources).pipe(map(function (args) { return resultSelector.apply(void 0, args); })); } return new Observable(function (subscriber) { return new ForkJoinSubscriber(subscriber, sources); }); } var ForkJoinSubscriber = /*@__PURE__*/ (function (_super) { tslib_1.__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(_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)); //# sourceMappingURL=forkJoin.js.map