buflux
Version:
A high-performance, event-driven buffer library for Node.js and browsers, with configurable overflow strategies
38 lines (37 loc) • 1.11 kB
JavaScript
/**
* Event emitter class for handling buffer events
* @template T The type of data passed to event handlers
*/
export class EventEmitter {
constructor() {
/** Map of event names to sets of handler functions */
this.events = {
enqueue: new Set(),
dequeue: new Set(),
overflow: new Set(),
reject: new Set(),
};
}
/**
* Subscribe to a buffer event
* @param {BufferEvent} event - The event to subscribe to
* @param {EventHandler<T>} handler - Function to handle the event
* @returns {Function} Unsubscribe function to remove the handler
*/
on(event, handler) {
this.events?.[event]?.add(handler);
return () => {
this.events?.[event]?.delete(handler);
};
}
/**
* Emit an event to all subscribed handlers
* @param {BufferEvent} event - The event to emit
* @param {T} data - Data to pass to handlers
*/
emit(event, data) {
for (const handler of this.events?.[event] || []) {
handler(data);
}
}
}