@spfn/core
Version:
SPFN Framework Core - File-based routing, transactions, repository pattern
77 lines (75 loc) • 1.84 kB
JavaScript
// 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