1 /** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */
2 import { isArray } from './util/isArray';
3 import { isObject } from './util/isObject';
4 import { isFunction } from './util/isFunction';
5 import { UnsubscriptionError } from './util/UnsubscriptionError';
6 var Subscription = /*@__PURE__*/ (function () {
7 function Subscription(unsubscribe) {
9 this._parentOrParents = null;
10 this._subscriptions = null;
12 this._ctorUnsubscribe = true;
13 this._unsubscribe = unsubscribe;
16 Subscription.prototype.unsubscribe = function () {
21 var _a = this, _parentOrParents = _a._parentOrParents, _ctorUnsubscribe = _a._ctorUnsubscribe, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
23 this._parentOrParents = null;
24 this._subscriptions = null;
25 if (_parentOrParents instanceof Subscription) {
26 _parentOrParents.remove(this);
28 else if (_parentOrParents !== null) {
29 for (var index = 0; index < _parentOrParents.length; ++index) {
30 var parent_1 = _parentOrParents[index];
31 parent_1.remove(this);
34 if (isFunction(_unsubscribe)) {
35 if (_ctorUnsubscribe) {
36 this._unsubscribe = undefined;
39 _unsubscribe.call(this);
42 errors = e instanceof UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];
45 if (isArray(_subscriptions)) {
47 var len = _subscriptions.length;
48 while (++index < len) {
49 var sub = _subscriptions[index];
55 errors = errors || [];
56 if (e instanceof UnsubscriptionError) {
57 errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
67 throw new UnsubscriptionError(errors);
70 Subscription.prototype.add = function (teardown) {
71 var subscription = teardown;
73 return Subscription.EMPTY;
75 switch (typeof teardown) {
77 subscription = new Subscription(teardown);
79 if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
82 else if (this.closed) {
83 subscription.unsubscribe();
86 else if (!(subscription instanceof Subscription)) {
87 var tmp = subscription;
88 subscription = new Subscription();
89 subscription._subscriptions = [tmp];
93 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
96 var _parentOrParents = subscription._parentOrParents;
97 if (_parentOrParents === null) {
98 subscription._parentOrParents = this;
100 else if (_parentOrParents instanceof Subscription) {
101 if (_parentOrParents === this) {
104 subscription._parentOrParents = [_parentOrParents, this];
106 else if (_parentOrParents.indexOf(this) === -1) {
107 _parentOrParents.push(this);
112 var subscriptions = this._subscriptions;
113 if (subscriptions === null) {
114 this._subscriptions = [subscription];
117 subscriptions.push(subscription);
121 Subscription.prototype.remove = function (subscription) {
122 var subscriptions = this._subscriptions;
124 var subscriptionIndex = subscriptions.indexOf(subscription);
125 if (subscriptionIndex !== -1) {
126 subscriptions.splice(subscriptionIndex, 1);
130 Subscription.EMPTY = (function (empty) {
133 }(new Subscription()));
136 export { Subscription };
137 function flattenUnsubscriptionErrors(errors) {
138 return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError) ? err.errors : err); }, []);
140 //# sourceMappingURL=Subscription.js.map