text: "use strict";
  var __extends = (this && this.__extends) || function (d, b) {
      for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
      function __() { this.constructor = d; }
      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  };
  var Observable_1 = require('../Observable');
  var subscribeToResult_1 = require('../util/subscribeToResult');
  var OuterSubscriber_1 = require('../OuterSubscriber');
  /**
   * We need this JSDoc comment for affecting ESDoc.
   * @extends {Ignored}
   * @hide true
   */
  var DeferObservable = (function (_super) {
      __extends(DeferObservable, _super);
      function DeferObservable(observableFactory) {
          _super.call(this);
          this.observableFactory = observableFactory;
      }
      /**
       * @param observableFactory
       * @return {DeferObservable}
       * @static true
       * @name defer
       * @owner Observable
       */
      DeferObservable.create = function (observableFactory) {
          return new DeferObservable(observableFactory);
      };
      DeferObservable.prototype._subscribe = function (subscriber) {
          return new DeferSubscriber(subscriber, this.observableFactory);
      };
      return DeferObservable;
  }(Observable_1.Observable));
  exports.DeferObservable = DeferObservable;
  var DeferSubscriber = (function (_super) {
      __extends(DeferSubscriber, _super);
      function DeferSubscriber(destination, factory) {
          _super.call(this, destination);
          this.factory = factory;
          this.tryDefer();
      }
      DeferSubscriber.prototype.tryDefer = function () {
          try {
              var result = this.factory.call(this);
              if (result) {
                  this.add(subscribeToResult_1.subscribeToResult(this, result));
              }
          }
          catch (err) {
              this._error(err);
          }
      };
      return DeferSubscriber;
  }(OuterSubscriber_1.OuterSubscriber));
  //# sourceMappingURL=DeferObservable.js.map