"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.forkJoin = void 0; var Observable_1 = require("../Observable"); var argsArgArrayOrObject_1 = require("../util/argsArgArrayOrObject"); var innerFrom_1 = require("./innerFrom"); var args_1 = require("../util/args"); var OperatorSubscriber_1 = require("../operators/OperatorSubscriber"); var mapOneOrManyArgs_1 = require("../util/mapOneOrManyArgs"); var createObject_1 = require("../util/createObject"); function forkJoin() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var resultSelector = args_1.popResultSelector(args); var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys; var result = new Observable_1.Observable(function (subscriber) { var length = sources.length; if (!length) { subscriber.complete(); return; } var values = new Array(length); var remainingCompletions = length; var remainingEmissions = length; var _loop_1 = function (sourceIndex) { var hasValue = false; innerFrom_1.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) { if (!hasValue) { hasValue = true; remainingEmissions--; } values[sourceIndex] = value; }, function () { return remainingCompletions--; }, undefined, function () { if (!remainingCompletions || !hasValue) { if (!remainingEmissions) { subscriber.next(keys ? createObject_1.createObject(keys, values) : values); } subscriber.complete(); } })); }; for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) { _loop_1(sourceIndex); } }); return resultSelector ? result.pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : result; } exports.forkJoin = forkJoin; //# sourceMappingURL=forkJoin.js.map