UNPKG

@unchainedshop/events

Version:

This package contains business logic for the event emitter abstraction layer

47 lines 1.84 kB
import { createLogger } from '@unchainedshop/logger'; const logger = createLogger('unchained:events'); const RegisteredEventsSet = new Set(); const RegisteredCallbacksSet = new Set(); let Adapter; // Public (customizable) let HistoryAdapter; // (Per default: Core-events adapter to write into DB) export const EventDirector = { registerEvents: (events) => { if (events.length) { events.forEach((e) => RegisteredEventsSet.add(e)); } }, getRegisteredEvents: () => { return Array.from(RegisteredEventsSet); }, setEmitAdapter: (adapter) => { Adapter = adapter; }, getEmitAdapter: () => Adapter, setEmitHistoryAdapter: (adapter) => { HistoryAdapter = adapter; }, getEmitHistoryAdapter: () => HistoryAdapter, emit: async (eventName, data) => { if (!RegisteredEventsSet.has(eventName)) throw new Error(`Event with ${eventName} is not registered`); const payload = data || {}; Adapter?.publish(eventName, { payload, }); HistoryAdapter?.publish(eventName, { payload, }); logger.debug(`EventDirector -> Emitted ${eventName} with ${JSON.stringify(data)}`); }, subscribe: (eventName, callback) => { const currentSubscription = `${eventName}${callback?.toString()}`; // used to avaoid registering the same event handler callback if (!RegisteredEventsSet.has(eventName)) throw new Error(`Event with ${eventName} is not registered`); if (!RegisteredCallbacksSet.has(currentSubscription)) { Adapter?.subscribe(eventName, callback); HistoryAdapter?.subscribe(eventName, callback); RegisteredCallbacksSet.add(currentSubscription); } }, }; //# sourceMappingURL=EventDirector.js.map