| "use strict"; | 
| var __extends = (this && this.__extends) || (function () { | 
|     var extendStatics = function (d, b) { | 
|         extendStatics = Object.setPrototypeOf || | 
|             ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | 
|             function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | 
|         return extendStatics(d, b); | 
|     } | 
|     return function (d, b) { | 
|         extendStatics(d, b); | 
|         function __() { this.constructor = d; } | 
|         d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | 
|     }; | 
| })(); | 
| Object.defineProperty(exports, "__esModule", { value: true }); | 
| var isFunction_1 = require("./util/isFunction"); | 
| var Observer_1 = require("./Observer"); | 
| var Subscription_1 = require("./Subscription"); | 
| var rxSubscriber_1 = require("../internal/symbol/rxSubscriber"); | 
| var config_1 = require("./config"); | 
| var hostReportError_1 = require("./util/hostReportError"); | 
| var Subscriber = (function (_super) { | 
|     __extends(Subscriber, _super); | 
|     function Subscriber(destinationOrNext, error, complete) { | 
|         var _this = _super.call(this) || this; | 
|         _this.syncErrorValue = null; | 
|         _this.syncErrorThrown = false; | 
|         _this.syncErrorThrowable = false; | 
|         _this.isStopped = false; | 
|         switch (arguments.length) { | 
|             case 0: | 
|                 _this.destination = Observer_1.empty; | 
|                 break; | 
|             case 1: | 
|                 if (!destinationOrNext) { | 
|                     _this.destination = Observer_1.empty; | 
|                     break; | 
|                 } | 
|                 if (typeof destinationOrNext === 'object') { | 
|                     if (destinationOrNext instanceof Subscriber) { | 
|                         _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable; | 
|                         _this.destination = destinationOrNext; | 
|                         destinationOrNext.add(_this); | 
|                     } | 
|                     else { | 
|                         _this.syncErrorThrowable = true; | 
|                         _this.destination = new SafeSubscriber(_this, destinationOrNext); | 
|                     } | 
|                     break; | 
|                 } | 
|             default: | 
|                 _this.syncErrorThrowable = true; | 
|                 _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete); | 
|                 break; | 
|         } | 
|         return _this; | 
|     } | 
|     Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () { return this; }; | 
|     Subscriber.create = function (next, error, complete) { | 
|         var subscriber = new Subscriber(next, error, complete); | 
|         subscriber.syncErrorThrowable = false; | 
|         return subscriber; | 
|     }; | 
|     Subscriber.prototype.next = function (value) { | 
|         if (!this.isStopped) { | 
|             this._next(value); | 
|         } | 
|     }; | 
|     Subscriber.prototype.error = function (err) { | 
|         if (!this.isStopped) { | 
|             this.isStopped = true; | 
|             this._error(err); | 
|         } | 
|     }; | 
|     Subscriber.prototype.complete = function () { | 
|         if (!this.isStopped) { | 
|             this.isStopped = true; | 
|             this._complete(); | 
|         } | 
|     }; | 
|     Subscriber.prototype.unsubscribe = function () { | 
|         if (this.closed) { | 
|             return; | 
|         } | 
|         this.isStopped = true; | 
|         _super.prototype.unsubscribe.call(this); | 
|     }; | 
|     Subscriber.prototype._next = function (value) { | 
|         this.destination.next(value); | 
|     }; | 
|     Subscriber.prototype._error = function (err) { | 
|         this.destination.error(err); | 
|         this.unsubscribe(); | 
|     }; | 
|     Subscriber.prototype._complete = function () { | 
|         this.destination.complete(); | 
|         this.unsubscribe(); | 
|     }; | 
|     Subscriber.prototype._unsubscribeAndRecycle = function () { | 
|         var _parentOrParents = this._parentOrParents; | 
|         this._parentOrParents = null; | 
|         this.unsubscribe(); | 
|         this.closed = false; | 
|         this.isStopped = false; | 
|         this._parentOrParents = _parentOrParents; | 
|         return this; | 
|     }; | 
|     return Subscriber; | 
| }(Subscription_1.Subscription)); | 
| exports.Subscriber = Subscriber; | 
| var SafeSubscriber = (function (_super) { | 
|     __extends(SafeSubscriber, _super); | 
|     function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) { | 
|         var _this = _super.call(this) || this; | 
|         _this._parentSubscriber = _parentSubscriber; | 
|         var next; | 
|         var context = _this; | 
|         if (isFunction_1.isFunction(observerOrNext)) { | 
|             next = observerOrNext; | 
|         } | 
|         else if (observerOrNext) { | 
|             next = observerOrNext.next; | 
|             error = observerOrNext.error; | 
|             complete = observerOrNext.complete; | 
|             if (observerOrNext !== Observer_1.empty) { | 
|                 context = Object.create(observerOrNext); | 
|                 if (isFunction_1.isFunction(context.unsubscribe)) { | 
|                     _this.add(context.unsubscribe.bind(context)); | 
|                 } | 
|                 context.unsubscribe = _this.unsubscribe.bind(_this); | 
|             } | 
|         } | 
|         _this._context = context; | 
|         _this._next = next; | 
|         _this._error = error; | 
|         _this._complete = complete; | 
|         return _this; | 
|     } | 
|     SafeSubscriber.prototype.next = function (value) { | 
|         if (!this.isStopped && this._next) { | 
|             var _parentSubscriber = this._parentSubscriber; | 
|             if (!config_1.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { | 
|                 this.__tryOrUnsub(this._next, value); | 
|             } | 
|             else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) { | 
|                 this.unsubscribe(); | 
|             } | 
|         } | 
|     }; | 
|     SafeSubscriber.prototype.error = function (err) { | 
|         if (!this.isStopped) { | 
|             var _parentSubscriber = this._parentSubscriber; | 
|             var useDeprecatedSynchronousErrorHandling = config_1.config.useDeprecatedSynchronousErrorHandling; | 
|             if (this._error) { | 
|                 if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { | 
|                     this.__tryOrUnsub(this._error, err); | 
|                     this.unsubscribe(); | 
|                 } | 
|                 else { | 
|                     this.__tryOrSetError(_parentSubscriber, this._error, err); | 
|                     this.unsubscribe(); | 
|                 } | 
|             } | 
|             else if (!_parentSubscriber.syncErrorThrowable) { | 
|                 this.unsubscribe(); | 
|                 if (useDeprecatedSynchronousErrorHandling) { | 
|                     throw err; | 
|                 } | 
|                 hostReportError_1.hostReportError(err); | 
|             } | 
|             else { | 
|                 if (useDeprecatedSynchronousErrorHandling) { | 
|                     _parentSubscriber.syncErrorValue = err; | 
|                     _parentSubscriber.syncErrorThrown = true; | 
|                 } | 
|                 else { | 
|                     hostReportError_1.hostReportError(err); | 
|                 } | 
|                 this.unsubscribe(); | 
|             } | 
|         } | 
|     }; | 
|     SafeSubscriber.prototype.complete = function () { | 
|         var _this = this; | 
|         if (!this.isStopped) { | 
|             var _parentSubscriber = this._parentSubscriber; | 
|             if (this._complete) { | 
|                 var wrappedComplete = function () { return _this._complete.call(_this._context); }; | 
|                 if (!config_1.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { | 
|                     this.__tryOrUnsub(wrappedComplete); | 
|                     this.unsubscribe(); | 
|                 } | 
|                 else { | 
|                     this.__tryOrSetError(_parentSubscriber, wrappedComplete); | 
|                     this.unsubscribe(); | 
|                 } | 
|             } | 
|             else { | 
|                 this.unsubscribe(); | 
|             } | 
|         } | 
|     }; | 
|     SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) { | 
|         try { | 
|             fn.call(this._context, value); | 
|         } | 
|         catch (err) { | 
|             this.unsubscribe(); | 
|             if (config_1.config.useDeprecatedSynchronousErrorHandling) { | 
|                 throw err; | 
|             } | 
|             else { | 
|                 hostReportError_1.hostReportError(err); | 
|             } | 
|         } | 
|     }; | 
|     SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) { | 
|         if (!config_1.config.useDeprecatedSynchronousErrorHandling) { | 
|             throw new Error('bad call'); | 
|         } | 
|         try { | 
|             fn.call(this._context, value); | 
|         } | 
|         catch (err) { | 
|             if (config_1.config.useDeprecatedSynchronousErrorHandling) { | 
|                 parent.syncErrorValue = err; | 
|                 parent.syncErrorThrown = true; | 
|                 return true; | 
|             } | 
|             else { | 
|                 hostReportError_1.hostReportError(err); | 
|                 return true; | 
|             } | 
|         } | 
|         return false; | 
|     }; | 
|     SafeSubscriber.prototype._unsubscribe = function () { | 
|         var _parentSubscriber = this._parentSubscriber; | 
|         this._context = null; | 
|         this._parentSubscriber = null; | 
|         _parentSubscriber.unsubscribe(); | 
|     }; | 
|     return SafeSubscriber; | 
| }(Subscriber)); | 
| exports.SafeSubscriber = SafeSubscriber; | 
| //# sourceMappingURL=Subscriber.js.map |