{"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":"AAiBA;;AAEC,IACc,SAASA,cAAAA,GAAAA;AACtB,IAAA,MAAMC,YAAY,IAAIC,GAAAA,EAAAA;;IAGtB,MAAMC,iBAAAA,GAAoB,OAAOC,SAAAA,EAAmB,GAAGC,IAAAA,GAAAA;QACrD,IAAIJ,SAAAA,CAAUK,GAAG,CAACF,SAAAA,CAAAA,EAAY;AAC5B,YAAA,KAAK,MAAMG,QAAAA,IAAYN,SAAAA,CAAUO,GAAG,CAACJ,SAAAA,CAAAA,CAAY;AAC/C,gBAAA,MAAMG,QAAAA,CAAAA,GAAYF,IAAAA,CAAAA;AACpB,YAAA;AACF,QAAA;AACF,IAAA,CAAA;;AAGA,IAAA,MAAMI,WAAAA,GAAc;AAACN,QAAAA;AAAkB,KAAA;AAEvC,IAAA,MAAMO,QAAAA,GAAqB;AACzB,QAAA,MAAMC,IAAAA,CAAAA,CAAKP,SAAS,EAAE,GAAGC,IAAI,EAAA;YAC3B,KAAK,MAAMO,cAAcH,WAAAA,CAAa;AACpC,gBAAA,MAAMG,WAAWR,SAAAA,EAAAA,GAAcC,IAAAA,CAAAA;AACjC,YAAA;AACF,QAAA,CAAA;AAEAQ,QAAAA,SAAAA,CAAAA,CAAUD,UAAU,EAAA;AAClBH,YAAAA,WAAAA,CAAYK,IAAI,CAACF,UAAAA,CAAAA;;YAGjB,OAAO,IAAA;AACLF,gBAAAA,QAAAA,CAASK,WAAW,CAACH,UAAAA,CAAAA;AACvB,YAAA,CAAA;AACF,QAAA,CAAA;AAEAG,QAAAA,WAAAA,CAAAA,CAAYH,UAAU,EAAA;YACpB,MAAMI,eAAAA,GAAkBP,WAAAA,CAAYQ,OAAO,CAACL,UAAAA,CAAAA;;AAG5C,YAAA,IAAII,mBAAmB,CAAA,EAAG;gBACxBP,WAAAA,CAAYS,MAAM,CAACF,eAAAA,EAAiB,CAAA,CAAA;AACtC,YAAA;AACF,QAAA,CAAA;QAEAG,EAAAA,CAAAA,CAAGf,SAAS,EAAEG,QAAQ,EAAA;AACpB,YAAA,IAAI,CAACN,SAAAA,CAAUK,GAAG,CAACF,SAAAA,CAAAA,EAAY;gBAC7BH,SAAAA,CAAUmB,GAAG,CAAChB,SAAAA,EAAW;AAACG,oBAAAA;AAAS,iBAAA,CAAA;YACrC,CAAA,MAAO;AACLN,gBAAAA,SAAAA,CAAUO,GAAG,CAACJ,SAAAA,CAAAA,CAAWU,IAAI,CAACP,QAAAA,CAAAA;AAChC,YAAA;;YAGA,OAAO,IAAA;gBACLG,QAAAA,CAASW,GAAG,CAACjB,SAAAA,EAAWG,QAAAA,CAAAA;AAC1B,YAAA,CAAA;AACF,QAAA,CAAA;QAEAc,GAAAA,CAAAA,CAAIjB,SAAS,EAAEG,QAAQ,EAAA;YACrBN,SAAAA,CAAUO,GAAG,CAACJ,SAAAA,CAAAA,EAAYc,MAAAA,CAAOjB,SAAAA,CAAUO,GAAG,CAACJ,SAAAA,CAAAA,CAAWa,OAAO,CAACV,QAAAA,CAAAA,EAAW,CAAA,CAAA;AAC/E,QAAA,CAAA;QAEAe,IAAAA,CAAAA,CAAKlB,SAAS,EAAEG,QAAQ,EAAA;AACtB,YAAA,OAAOG,QAAAA,CAASS,EAAE,CAACf,SAAAA,EAAW,OAAO,GAAGC,IAAAA,GAAAA;gBACtCK,QAAAA,CAASW,GAAG,CAACjB,SAAAA,EAAWG,QAAAA,CAAAA;AACxB,gBAAA,OAAOA,QAAAA,CAAAA,GAAYF,IAAAA,CAAAA;AACrB,YAAA,CAAA,CAAA;AACF,QAAA,CAAA;AAEAkB,QAAAA,OAAAA,CAAAA,GAAAA;AACE,YAAA,IAAI,CAACC,kBAAkB,EAAA;AACvB,YAAA,IAAI,CAACC,oBAAoB,EAAA;AACzB,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;QAEAC,cAAAA,CAAAA,CAAetB,SAAS,EAAEG,QAAQ,EAAA;YAChC,OAAOG,QAAAA,CAASW,GAAG,CAACjB,SAAAA,EAAWG,QAAAA,CAAAA;AACjC,QAAA,CAAA;AAEAiB,QAAAA,kBAAAA,CAAAA,GAAAA;AACEvB,YAAAA,SAAAA,CAAU0B,KAAK,EAAA;AACf,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAF,QAAAA,oBAAAA,CAAAA,GAAAA;AACEhB,YAAAA,WAAAA,CAAYmB,MAAM,GAAG,CAAA;AACrB,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;QAEAC,WAAAA,CAAAA,CAAYzB,SAAS,EAAEG,QAAQ,EAAA;YAC7B,OAAOG,QAAAA,CAASS,EAAE,CAACf,SAAAA,EAAWG,QAAAA,CAAAA;AAChC,QAAA;AACF,KAAA;IAEA,OAAOG,QAAAA;AACT;;;;"}