text: 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 { OperatorSubscriber } from '../operators/OperatorSubscriber';
  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(new OperatorSubscriber(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) {
          subscription.add(scheduler.schedule(execute));
      }
      else {
          execute();
      }
  }
  //# sourceMappingURL=combineLatest.js.map