shogun-core
Version:
SHOGUN CORE - Core library for Shogun Ecosystem
79 lines (78 loc) • 2 kB
JavaScript
;
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;