| /** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */ | 
| import { isArray } from './util/isArray'; | 
| import { isObject } from './util/isObject'; | 
| import { isFunction } from './util/isFunction'; | 
| import { UnsubscriptionError } from './util/UnsubscriptionError'; | 
| var Subscription = /*@__PURE__*/ (function () { | 
|     function Subscription(unsubscribe) { | 
|         this.closed = false; | 
|         this._parentOrParents = null; | 
|         this._subscriptions = null; | 
|         if (unsubscribe) { | 
|             this._ctorUnsubscribe = true; | 
|             this._unsubscribe = unsubscribe; | 
|         } | 
|     } | 
|     Subscription.prototype.unsubscribe = function () { | 
|         var errors; | 
|         if (this.closed) { | 
|             return; | 
|         } | 
|         var _a = this, _parentOrParents = _a._parentOrParents, _ctorUnsubscribe = _a._ctorUnsubscribe, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions; | 
|         this.closed = true; | 
|         this._parentOrParents = null; | 
|         this._subscriptions = null; | 
|         if (_parentOrParents instanceof Subscription) { | 
|             _parentOrParents.remove(this); | 
|         } | 
|         else if (_parentOrParents !== null) { | 
|             for (var index = 0; index < _parentOrParents.length; ++index) { | 
|                 var parent_1 = _parentOrParents[index]; | 
|                 parent_1.remove(this); | 
|             } | 
|         } | 
|         if (isFunction(_unsubscribe)) { | 
|             if (_ctorUnsubscribe) { | 
|                 this._unsubscribe = undefined; | 
|             } | 
|             try { | 
|                 _unsubscribe.call(this); | 
|             } | 
|             catch (e) { | 
|                 errors = e instanceof UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e]; | 
|             } | 
|         } | 
|         if (isArray(_subscriptions)) { | 
|             var index = -1; | 
|             var len = _subscriptions.length; | 
|             while (++index < len) { | 
|                 var sub = _subscriptions[index]; | 
|                 if (isObject(sub)) { | 
|                     try { | 
|                         sub.unsubscribe(); | 
|                     } | 
|                     catch (e) { | 
|                         errors = errors || []; | 
|                         if (e instanceof UnsubscriptionError) { | 
|                             errors = errors.concat(flattenUnsubscriptionErrors(e.errors)); | 
|                         } | 
|                         else { | 
|                             errors.push(e); | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|         if (errors) { | 
|             throw new UnsubscriptionError(errors); | 
|         } | 
|     }; | 
|     Subscription.prototype.add = function (teardown) { | 
|         var subscription = teardown; | 
|         if (!teardown) { | 
|             return Subscription.EMPTY; | 
|         } | 
|         switch (typeof teardown) { | 
|             case 'function': | 
|                 subscription = new Subscription(teardown); | 
|             case 'object': | 
|                 if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') { | 
|                     return subscription; | 
|                 } | 
|                 else if (this.closed) { | 
|                     subscription.unsubscribe(); | 
|                     return subscription; | 
|                 } | 
|                 else if (!(subscription instanceof Subscription)) { | 
|                     var tmp = subscription; | 
|                     subscription = new Subscription(); | 
|                     subscription._subscriptions = [tmp]; | 
|                 } | 
|                 break; | 
|             default: { | 
|                 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.'); | 
|             } | 
|         } | 
|         var _parentOrParents = subscription._parentOrParents; | 
|         if (_parentOrParents === null) { | 
|             subscription._parentOrParents = this; | 
|         } | 
|         else if (_parentOrParents instanceof Subscription) { | 
|             if (_parentOrParents === this) { | 
|                 return subscription; | 
|             } | 
|             subscription._parentOrParents = [_parentOrParents, this]; | 
|         } | 
|         else if (_parentOrParents.indexOf(this) === -1) { | 
|             _parentOrParents.push(this); | 
|         } | 
|         else { | 
|             return subscription; | 
|         } | 
|         var subscriptions = this._subscriptions; | 
|         if (subscriptions === null) { | 
|             this._subscriptions = [subscription]; | 
|         } | 
|         else { | 
|             subscriptions.push(subscription); | 
|         } | 
|         return subscription; | 
|     }; | 
|     Subscription.prototype.remove = function (subscription) { | 
|         var subscriptions = this._subscriptions; | 
|         if (subscriptions) { | 
|             var subscriptionIndex = subscriptions.indexOf(subscription); | 
|             if (subscriptionIndex !== -1) { | 
|                 subscriptions.splice(subscriptionIndex, 1); | 
|             } | 
|         } | 
|     }; | 
|     Subscription.EMPTY = (function (empty) { | 
|         empty.closed = true; | 
|         return empty; | 
|     }(new Subscription())); | 
|     return Subscription; | 
| }()); | 
| export { Subscription }; | 
| function flattenUnsubscriptionErrors(errors) { | 
|     return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError) ? err.errors : err); }, []); | 
| } | 
| //# sourceMappingURL=Subscription.js.map |