UNPKG

@spfn/core

Version:

SPFN Framework Core - File-based routing, transactions, repository pattern

77 lines (75 loc) 1.84 kB
// src/events/adapters/memory.ts var InMemoryEventEmitter = class { listeners = /* @__PURE__ */ new Map(); on(event, handler) { if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event).push(handler); } async emit(event, data) { const handlers = this.listeners.get(event) || []; if (handlers.length === 0) { return; } const results = await Promise.allSettled( handlers.map(async (handler) => { try { return await handler(data); } catch (error) { throw error; } }) ); const failed = results.filter((r) => r.status === "rejected"); if (failed.length > 0) { console.error( `[Events] ${failed.length}/${handlers.length} handlers failed for event "${event}"`, { errors: failed.map((r) => r.reason) } ); } } off(event) { this.listeners.delete(event); } clear() { this.listeners.clear(); } /** * Get list of registered events (for debugging) */ getEvents() { return Array.from(this.listeners.keys()); } /** * Get number of handlers for an event (for debugging) */ getHandlerCount(event) { return this.listeners.get(event)?.length || 0; } }; // src/events/emitter.ts var emitter = new InMemoryEventEmitter(); function setEventEmitter(adapter) { emitter = adapter; } function getEventEmitter() { return emitter; } function on(event, handler) { emitter.on(event, handler); } async function emit(event, data) { await emitter.emit(event, data); } function off(event) { emitter.off(event); } function clear() { emitter.clear(); } export { InMemoryEventEmitter, clear, emit, getEventEmitter, off, on, setEventEmitter }; //# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map