import Subscription from './Contracts/Subscription'; class SubscriptionManager { /** * * * @type {Map} */ private subscribers: Map = new Map(); /** * * * @type {number} */ private idCounter: number = 0; /** * * * @type {IterableIterator} */ private idGenerator: IterableIterator; /** * * * @return {SubscriptionManager} */ public constructor() { this.idGenerator = this.subscriptionIDGenerator(); } /** * * * @param {Subscription} subscription * @return {string} */ public add(subscription: Subscription) { const subscriberID = this.idGenerator.next().value; this.subscribers.set(subscriberID, subscription); return subscriberID; } /** * * * @param {string} subscriberId * @return {boolean} */ public remove(subscriberId: string) { return this.subscribers.delete(subscriberId); } /** * * * @param {object | null} */ public notify(payload: object | null) { this.subscribers.forEach(subscriber => subscriber(payload)); } /** * * * @return {IterableIterator} */ private *subscriptionIDGenerator() { while (true) { yield ('trending-subscriber' + this.idCounter++); } } } export default SubscriptionManager;