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.
1 lines
12 KiB
1 lines
12 KiB
{"version":3,"file":"Subscription.js","sourceRoot":"","sources":["../src/Subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray } from './util/isArray';\nimport { isObject } from './util/isObject';\nimport { isFunction } from './util/isFunction';\nimport { tryCatch } from './util/tryCatch';\nimport { errorObject } from './util/errorObject';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\n\nexport interface AnonymousSubscription {\n unsubscribe(): void;\n}\n\nexport type TeardownLogic = AnonymousSubscription | Function | void;\n\nexport interface ISubscription extends AnonymousSubscription {\n unsubscribe(): void;\n readonly closed: boolean;\n}\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements ISubscription {\n public static EMPTY: Subscription = (function(empty: any){\n empty.closed = true;\n return empty;\n }(new Subscription()));\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n * @type {boolean}\n */\n public closed: boolean = false;\n\n protected _parent: Subscription = null;\n protected _parents: Subscription[] = null;\n private _subscriptions: ISubscription[] = null;\n\n /**\n * @param {function(): void} [unsubscribe] A function describing how to\n * perform the disposal of resources when the `unsubscribe` method is called.\n */\n constructor(unsubscribe?: () => void) {\n if (unsubscribe) {\n (<any> this)._unsubscribe = unsubscribe;\n }\n }\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let hasErrors = false;\n let errors: any[];\n\n if (this.closed) {\n return;\n }\n\n let { _parent, _parents, _unsubscribe, _subscriptions } = (<any> this);\n\n this.closed = true;\n this._parent = null;\n this._parents = null;\n // null out _subscriptions first so any child subscriptions that attempt\n // to remove themselves from this subscription will noop\n this._subscriptions = null;\n\n let index = -1;\n let len = _parents ? _parents.length : 0;\n\n // if this._parent is null, then so is this._parents, and we\n // don't have to remove ourselves from any parent subscriptions.\n while (_parent) {\n _parent.remove(this);\n // if this._parents is null or index >= len,\n // then _parent is set to null, and the loop exits\n _parent = ++index < len && _parents[index] || null;\n }\n\n if (isFunction(_unsubscribe)) {\n let trial = tryCatch(_unsubscribe).call(this);\n if (trial === errorObject) {\n hasErrors = true;\n errors = errors || (\n errorObject.e instanceof UnsubscriptionError ?\n flattenUnsubscriptionErrors(errorObject.e.errors) : [errorObject.e]\n );\n }\n }\n\n if (isArray(_subscriptions)) {\n\n index = -1;\n len = _subscriptions.length;\n\n while (++index < len) {\n const sub = _subscriptions[index];\n if (isObject(sub)) {\n let trial = tryCatch(sub.unsubscribe).call(sub);\n if (trial === errorObject) {\n hasErrors = true;\n errors = errors || [];\n let err = errorObject.e;\n if (err instanceof UnsubscriptionError) {\n errors = errors.concat(flattenUnsubscriptionErrors(err.errors));\n } else {\n errors.push(err);\n }\n }\n }\n }\n }\n\n if (hasErrors) {\n throw new UnsubscriptionError(errors);\n }\n }\n\n /**\n * Adds a tear down to be called during the unsubscribe() of this\n * Subscription.\n *\n * If the tear down being added is a subscription that is already\n * unsubscribed, is the same reference `add` is being called on, or is\n * `Subscription.EMPTY`, it will not be added.\n *\n * If this subscription is already in an `closed` state, the passed\n * tear down logic will be executed immediately.\n *\n * @param {TeardownLogic} teardown The additional logic to execute on\n * teardown.\n * @return {Subscription} Returns the Subscription used or created to be\n * added to the inner subscriptions list. This Subscription can be used with\n * `remove()` to remove the passed teardown logic from the inner subscriptions\n * list.\n */\n add(teardown: TeardownLogic): Subscription {\n if (!teardown || (teardown === Subscription.EMPTY)) {\n return Subscription.EMPTY;\n }\n\n if (teardown === this) {\n return this;\n }\n\n let subscription = (<Subscription> teardown);\n\n switch (typeof teardown) {\n case 'function':\n subscription = new Subscription(<(() => void) > teardown);\n case 'object':\n if (subscription.closed || typeof subscription.unsubscribe !== 'function') {\n return subscription;\n } else if (this.closed) {\n subscription.unsubscribe();\n return subscription;\n } else if (typeof subscription._addParent !== 'function' /* quack quack */) {\n const tmp = subscription;\n subscription = new Subscription();\n subscription._subscriptions = [tmp];\n }\n break;\n default:\n throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n }\n\n const subscriptions = this._subscriptions || (this._subscriptions = []);\n\n subscriptions.push(subscription);\n subscription._addParent(this);\n\n return subscription;\n }\n\n /**\n * Removes a Subscription from the internal list of subscriptions that will\n * unsubscribe during the unsubscribe process of this Subscription.\n * @param {Subscription} subscription The subscription to remove.\n * @return {void}\n */\n remove(subscription: Subscription): void {\n const subscriptions = this._subscriptions;\n if (subscriptions) {\n const subscriptionIndex = subscriptions.indexOf(subscription);\n if (subscriptionIndex !== -1) {\n subscriptions.splice(subscriptionIndex, 1);\n }\n }\n }\n\n private _addParent(parent: Subscription) {\n let { _parent, _parents } = this;\n if (!_parent || _parent === parent) {\n // If we don't have a parent, or the new parent is the same as the\n // current parent, then set this._parent to the new parent.\n this._parent = parent;\n } else if (!_parents) {\n // If there's already one parent, but not multiple, allocate an Array to\n // store the rest of the parent Subscriptions.\n this._parents = [parent];\n } else if (_parents.indexOf(parent) === -1) {\n // Only add the new parent to the _parents list if it's not already there.\n _parents.push(parent);\n }\n }\n}\n\nfunction flattenUnsubscriptionErrors(errors: any[]) {\n return errors.reduce((errs, err) => errs.concat((err instanceof UnsubscriptionError) ? err.errors : err), []);\n}\n"]} |