UNPKG

shogun-core

Version:

SHOGUN CORE - Core library for Shogun Ecosystem

79 lines (78 loc) 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventEmitter = void 0; /** * Simple event emitter implementation with generic event types */ class EventEmitter { events; constructor() { this.events = new Map(); } /** * Registers an event listener */ on(event, listener) { if (!this.events.has(event)) { this.events.set(event, []); } this.events.get(event)?.push(listener); } /** * Emits an event with arguments */ emit(event, data) { if (!this.events.has(event)) return false; const listeners = this.events.get(event) || []; listeners.forEach((listener) => { try { listener(data); } catch (error) { console.error(`Error in event listener for ${String(event)}:`, error); } }); return true; } /** * Removes an event listener */ off(event, listener) { if (!this.events.has(event)) return; const listeners = this.events.get(event) || []; const index = listeners.indexOf(listener); if (index !== -1) { listeners.splice(index, 1); if (listeners.length === 0) { this.events.delete(event); } else { this.events.set(event, listeners); } } } /** * Registers a one-time event listener */ once(event, listener) { const onceWrapper = (data) => { listener(data); this.off(event, onceWrapper); }; this.on(event, onceWrapper); } /** * Removes all listeners for an event or all events */ removeAllListeners(event) { if (event) { this.events.delete(event); } else { this.events.clear(); } } } exports.EventEmitter = EventEmitter;