iagate-querykit
Version:
QueryKit: lightweight TypeScript query toolkit with models, views, triggers, events, scheduler and adapters (better-sqlite3).
36 lines (35 loc) • 1.11 kB
JavaScript
import { QueryKitConfig } from './config';
export class EventManager {
listeners = {};
on(eventName, listener) {
if (!this.listeners[eventName]) {
this.listeners[eventName] = [];
}
this.listeners[eventName].push(listener);
return () => this.off(eventName, listener);
}
off(eventName, listener) {
if (!this.listeners[eventName])
return;
this.listeners[eventName] = this.listeners[eventName].filter(l => l !== listener);
}
emit(eventName, ...args) {
if (this.listeners[eventName]) {
this.listeners[eventName].forEach(listener => {
try {
listener(...args);
}
catch (error) {
console.error(`Error in event listener for '${eventName}':`, error);
}
});
}
if (QueryKitConfig.eventBus) {
try {
QueryKitConfig.eventBus.emit(eventName, ...args);
}
catch { }
}
}
}
export const eventManager = new EventManager();