text: "use strict";
  var ArrayObservable_1 = require("../observable/ArrayObservable");
  var ScalarObservable_1 = require("../observable/ScalarObservable");
  var EmptyObservable_1 = require("../observable/EmptyObservable");
  var concat_1 = require("./concat");
  var isScheduler_1 = require("../util/isScheduler");
  /* tslint:disable:max-line-length */
  /**
   * Returns an Observable that emits the items in a specified Iterable before it begins to emit items emitted by the
   * source Observable.
   *
   * <img src="./img/startWith.png" width="100%">
   *
   * @param {Values} an Iterable that contains the items you want the modified Observable to emit first.
   * @return {Observable} an Observable that emits the items in the specified Iterable and then emits the items
   * emitted by the source Observable.
   * @method startWith
   * @owner Observable
   */
  function startWith() {
      var array = [];
      for (var _i = 0; _i < arguments.length; _i++) {
          array[_i] = arguments[_i];
      }
      var scheduler = array[array.length - 1];
      if (isScheduler_1.isScheduler(scheduler)) {
          array.pop();
      }
      else {
          scheduler = null;
      }
      var len = array.length;
      if (len === 1) {
          return concat_1.concatStatic(new ScalarObservable_1.ScalarObservable(array[0], scheduler), this);
      }
      else if (len > 1) {
          return concat_1.concatStatic(new ArrayObservable_1.ArrayObservable(array, scheduler), this);
      }
      else {
          return concat_1.concatStatic(new EmptyObservable_1.EmptyObservable(scheduler), this);
      }
  }
  exports.startWith = startWith;
  //# sourceMappingURL=startWith.js.map