import { Observable } from '../Observable'; import { argsArgArrayOrObject } from '../util/argsArgArrayOrObject'; import { from } from './from'; import { identity } from '../util/identity'; import { mapOneOrManyArgs } from '../util/mapOneOrManyArgs'; import { popResultSelector, popScheduler } from '../util/args'; import { createObject } from '../util/createObject'; import { createOperatorSubscriber } from '../operators/OperatorSubscriber'; import { executeSchedule } from '../util/executeSchedule'; export function combineLatest() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var scheduler = popScheduler(args); var resultSelector = popResultSelector(args); var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys; if (observables.length === 0) { return from([], scheduler); } var result = new Observable(combineLatestInit(observables, scheduler, keys ? function (values) { return createObject(keys, values); } : identity)); return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result; } export function combineLatestInit(observables, scheduler, valueTransform) { if (valueTransform === void 0) { valueTransform = identity; } return function (subscriber) { maybeSchedule(scheduler, function () { var length = observables.length; var values = new Array(length); var active = length; var remainingFirstValues = length; var _loop_1 = function (i) { maybeSchedule(scheduler, function () { var source = from(observables[i], scheduler); var hasFirstValue = false; source.subscribe(createOperatorSubscriber(subscriber, function (value) { values[i] = value; if (!hasFirstValue) { hasFirstValue = true; remainingFirstValues--; } if (!remainingFirstValues) { subscriber.next(valueTransform(values.slice())); } }, function () { if (!--active) { subscriber.complete(); } })); }, subscriber); }; for (var i = 0; i < length; i++) { _loop_1(i); } }, subscriber); }; } function maybeSchedule(scheduler, execute, subscription) { if (scheduler) { executeSchedule(subscription, scheduler, execute); } else { execute(); } } //# sourceMappingURL=combineLatest.js.map