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 Subscriber_1 = require('../Subscriber');
  /**
   * Catches errors on the observable to be handled by returning a new observable or throwing an error.
   * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which
   *  is the source observable, in case you'd like to "retry" that observable by returning it again. Whatever observable
   *  is returned by the `selector` will be used to continue the observable chain.
   * @return {Observable} an observable that originates from either the source or the observable returned by the
   *  catch `selector` function.
   */
  function _catch(selector) {
      var operator = new CatchOperator(selector);
      var caught = this.lift(operator);
      return (operator.caught = caught);
  }
  exports._catch = _catch;
  var CatchOperator = (function () {
      function CatchOperator(selector) {
          this.selector = selector;
      }
      CatchOperator.prototype.call = function (subscriber) {
          return new CatchSubscriber(subscriber, this.selector, this.caught);
      };
      return CatchOperator;
  }());
  var CatchSubscriber = (function (_super) {
      __extends(CatchSubscriber, _super);
      function CatchSubscriber(destination, selector, caught) {
          _super.call(this, destination);
          this.selector = selector;
          this.caught = caught;
      }
      // NOTE: overriding `error` instead of `_error` because we don't want
      // to have this flag this subscriber as `isStopped`.
      CatchSubscriber.prototype.error = function (err) {
          if (!this.isStopped) {
              var result = void 0;
              try {
                  result = this.selector(err, this.caught);
              }
              catch (err) {
                  this.destination.error(err);
                  return;
              }
              this._innerSub(result);
          }
      };
      CatchSubscriber.prototype._innerSub = function (result) {
          this.unsubscribe();
          this.destination.remove(this);
          result.subscribe(this.destination);
      };
      return CatchSubscriber;
  }(Subscriber_1.Subscriber));
  //# sourceMappingURL=catch.js.map