| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| var Observable_1 = require("../Observable"); |
| var isArray_1 = require("../util/isArray"); |
| var map_1 = require("../operators/map"); |
| var isObject_1 = require("../util/isObject"); |
| var from_1 = require("./from"); |
| function forkJoin() { |
| var sources = []; |
| for (var _i = 0; _i < arguments.length; _i++) { |
| sources[_i] = arguments[_i]; |
| } |
| if (sources.length === 1) { |
| var first_1 = sources[0]; |
| if (isArray_1.isArray(first_1)) { |
| return forkJoinInternal(first_1, null); |
| } |
| if (isObject_1.isObject(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) { |
| var keys = Object.keys(first_1); |
| return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys); |
| } |
| } |
| if (typeof sources[sources.length - 1] === 'function') { |
| var resultSelector_1 = sources.pop(); |
| sources = (sources.length === 1 && isArray_1.isArray(sources[0])) ? sources[0] : sources; |
| return forkJoinInternal(sources, null).pipe(map_1.map(function (args) { return resultSelector_1.apply(void 0, args); })); |
| } |
| return forkJoinInternal(sources, null); |
| } |
| exports.forkJoin = forkJoin; |
| function forkJoinInternal(sources, keys) { |
| return new Observable_1.Observable(function (subscriber) { |
| var len = sources.length; |
| if (len === 0) { |
| subscriber.complete(); |
| return; |
| } |
| var values = new Array(len); |
| var completed = 0; |
| var emitted = 0; |
| var _loop_1 = function (i) { |
| var source = from_1.from(sources[i]); |
| var hasValue = false; |
| subscriber.add(source.subscribe({ |
| next: function (value) { |
| if (!hasValue) { |
| hasValue = true; |
| emitted++; |
| } |
| values[i] = value; |
| }, |
| error: function (err) { return subscriber.error(err); }, |
| complete: function () { |
| completed++; |
| if (completed === len || !hasValue) { |
| if (emitted === len) { |
| subscriber.next(keys ? |
| keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) : |
| values); |
| } |
| subscriber.complete(); |
| } |
| } |
| })); |
| }; |
| for (var i = 0; i < len; i++) { |
| _loop_1(i); |
| } |
| }); |
| } |
| //# sourceMappingURL=forkJoin.js.map |