UNPKG

@lifaon/rx-js-light

Version:

Blazing fast Observables

83 lines (82 loc) 2.06 kB
export class SubscriptionManager { constructor() { this._subscriptionsMap = new Map(); } get size() { return this._subscriptionsMap.size; } has(key) { return this._subscriptionsMap.has(key); } get(key, mode) { switch (mode) { case void 0: return this._subscriptionsMap.get(key); case 'throw': { if (this._subscriptionsMap.has(key)) { return this._subscriptionsMap.get(key); } else { throw new Error(`Missing key: '${key}'`); } } default: throw new TypeError(`Unknown mode: '${mode}'`); } } set(key, subscription, mode = 'throw') { if (this._subscriptionsMap.has(key)) { switch (mode) { case 'skip': break; case 'replace': this._subscriptionsMap.get(key).deactivate(); this._subscriptionsMap.set(key, subscription); break; case 'throw': throw new Error(`Already subscribed to: '${key}'`); default: throw new TypeError(`Unknown mode: '${mode}'`); } } else { this._subscriptionsMap.set(key, subscription); } return subscription; } delete(key) { if (this._subscriptionsMap.has(key)) { this._subscriptionsMap.get(key).deactivate(); } this._subscriptionsMap.delete(key); } clear() { this.deactivateAll(); this._subscriptionsMap.clear(); } activateAll() { const iterator = this._subscriptionsMap.values(); let result; while (!(result = iterator.next()).done) { result.value.activate(); } } deactivateAll() { const iterator = this._subscriptionsMap.values(); let result; while (!(result = iterator.next()).done) { result.value.deactivate(); } } [Symbol.iterator]() { return this._subscriptionsMap[Symbol.iterator](); } entries() { return this._subscriptionsMap.entries(); } keys() { return this._subscriptionsMap.keys(); } values() { return this._subscriptionsMap.values(); } }