{"version":3,"file":"event-hub.mjs","sources":["../../src/services/event-hub.ts"],"sourcesContent":["export type Subscriber = (eventName: string, ...args: any[]) => Promise;\nexport type Listener = (...args: any[]) => Promise;\n\nexport interface EventHub {\n emit(eventName: string, ...args: unknown[]): Promise;\n subscribe(subscriber: Subscriber): () => void;\n unsubscribe(subscriber: Subscriber): void;\n on(eventName: string, listener: Listener): () => void;\n off(eventName: string, listener: Listener): void;\n once(eventName: string, listener: Listener): () => void;\n destroy(): EventHub;\n removeListener(eventName: string, listener: Listener): void;\n removeAllListeners(): EventHub;\n removeAllSubscribers(): EventHub;\n addListener(eventName: string, listener: Listener): () => void;\n}\n\n/**\n * The event hub is Strapi's event control center.\n */\nexport default function createEventHub(): EventHub {\n const listeners = new Map();\n\n // Default subscriber to easily add listeners with the on() method\n const defaultSubscriber = async (eventName: string, ...args: unknown[]) => {\n if (listeners.has(eventName)) {\n for (const listener of listeners.get(eventName)) {\n await listener(...args);\n }\n }\n };\n\n // Store of subscribers that will be called when an event is emitted\n const subscribers = [defaultSubscriber];\n\n const eventHub: EventHub = {\n async emit(eventName, ...args) {\n for (const subscriber of subscribers) {\n await subscriber(eventName, ...args);\n }\n },\n\n subscribe(subscriber) {\n subscribers.push(subscriber);\n\n // Return a function to remove the subscriber\n return () => {\n eventHub.unsubscribe(subscriber);\n };\n },\n\n unsubscribe(subscriber) {\n const subscriberIndex = subscribers.indexOf(subscriber);\n\n // Only remove the subscriber if it exists\n if (subscriberIndex >= 0) {\n subscribers.splice(subscriberIndex, 1);\n }\n },\n\n on(eventName, listener) {\n if (!listeners.has(eventName)) {\n listeners.set(eventName, [listener]);\n } else {\n listeners.get(eventName).push(listener);\n }\n\n // Return a function to remove the listener\n return () => {\n eventHub.off(eventName, listener);\n };\n },\n\n off(eventName, listener) {\n listeners.get(eventName)?.splice(listeners.get(eventName).indexOf(listener), 1);\n },\n\n once(eventName, listener) {\n return eventHub.on(eventName, async (...args) => {\n eventHub.off(eventName, listener);\n return listener(...args);\n });\n },\n\n destroy() {\n this.removeAllListeners();\n this.removeAllSubscribers();\n return this;\n },\n\n removeListener(eventName, listener) {\n return eventHub.off(eventName, listener);\n },\n\n removeAllListeners() {\n listeners.clear();\n return this;\n },\n\n removeAllSubscribers() {\n subscribers.length = 0;\n return this;\n },\n\n addListener(eventName, listener) {\n return eventHub.on(eventName, listener);\n },\n };\n\n return eventHub;\n}\n"],"names":["createEventHub","listeners","Map","defaultSubscriber","eventName","args","has","listener","get","subscribers","eventHub","emit","subscriber","subscribe","push","unsubscribe","subscriberIndex","indexOf","splice","on","set","off","once","destroy","removeAllListeners","removeAllSubscribers","removeListener","clear","length","addListener"],"mappings":"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"}