murmuraba
Version:
Real-time audio noise reduction with advanced chunked processing for web applications
53 lines (52 loc) • 1.4 kB
JavaScript
export class EventEmitter {
constructor() {
this.events = new Map();
}
on(event, handler) {
if (!this.events.has(event)) {
this.events.set(event, new Set());
}
this.events.get(event).add(handler);
}
off(event, handler) {
const handlers = this.events.get(event);
if (handlers) {
handlers.delete(handler);
if (handlers.size === 0) {
this.events.delete(event);
}
}
}
emit(event, ...args) {
const handlers = this.events.get(event);
if (handlers) {
handlers.forEach(handler => {
try {
handler(...args);
}
catch (error) {
console.error(`Error in event handler for ${String(event)}:`, error);
}
});
}
}
once(event, handler) {
const wrappedHandler = ((...args) => {
this.off(event, wrappedHandler);
handler(...args);
});
this.on(event, wrappedHandler);
}
removeAllListeners(event) {
if (event) {
this.events.delete(event);
}
else {
this.events.clear();
}
}
listenerCount(event) {
const handlers = this.events.get(event);
return handlers ? handlers.size : 0;
}
}