text: import { Subscriber } from '../Subscriber';
  /* tslint:enable:max-line-length */
  /**
   * Emits a given value if the source Observable completes without emitting any
   * `next` value, otherwise mirrors the source Observable.
   *
   * <span class="informal">If the source Observable turns out to be empty, then
   * this operator will emit a default value.</span>
   *
   * <img src="./img/defaultIfEmpty.png" width="100%">
   *
   * `defaultIfEmpty` emits the values emitted by the source Observable or a
   * specified default value if the source Observable is empty (completes without
   * having emitted any `next` value).
   *
   * @example <caption>If no clicks happen in 5 seconds, then emit "no clicks"</caption>
   * var clicks = Rx.Observable.fromEvent(document, 'click');
   * var clicksBeforeFive = clicks.takeUntil(Rx.Observable.interval(5000));
   * var result = clicksBeforeFive.defaultIfEmpty('no clicks');
   * result.subscribe(x => console.log(x));
   *
   * @see {@link empty}
   * @see {@link last}
   *
   * @param {any} [defaultValue=null] The default value used if the source
   * Observable is empty.
   * @return {Observable} An Observable that emits either the specified
   * `defaultValue` if the source Observable emits no items, or the values emitted
   * by the source Observable.
   * @method defaultIfEmpty
   * @owner Observable
   */
  export function defaultIfEmpty(defaultValue = null) {
      return (source) => source.lift(new DefaultIfEmptyOperator(defaultValue));
  }
  class DefaultIfEmptyOperator {
      constructor(defaultValue) {
          this.defaultValue = defaultValue;
      }
      call(subscriber, source) {
          return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
      }
  }
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @ignore
   * @extends {Ignored}
   */
  class DefaultIfEmptySubscriber extends Subscriber {
      constructor(destination, defaultValue) {
          super(destination);
          this.defaultValue = defaultValue;
          this.isEmpty = true;
      }
      _next(value) {
          this.isEmpty = false;
          this.destination.next(value);
      }
      _complete() {
          if (this.isEmpty) {
              this.destination.next(this.defaultValue);
          }
          this.destination.complete();
      }
  }
  //# sourceMappingURL=defaultIfEmpty.js.map