You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							140 lines
						
					
					
						
							5.1 KiB
						
					
					
				
			
		
		
	
	
							140 lines
						
					
					
						
							5.1 KiB
						
					
					
				/** 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
 | 
						|
 |