Skip to content

EventEmitter

Defined in: packages/core/src/utils/event-emitter.ts:45

Type-safe event emitter with strongly-typed event names and payloads

This class provides a type-safe event emitter pattern where event names and their payload types are strictly enforced. It’s designed to be extended by classes that need event emission capabilities.

interface MyEvents {
connect: void;
message: { text: string };
error: { error: Error };
}
class MyEmitter extends EventEmitter<MyEvents> {
connect() {
this.emit('connect', undefined);
}
sendMessage(text: string) {
this.emit('message', { text });
}
}
const emitter = new MyEmitter();
emitter.on('message', (data) => {
console.log(data.text); // Strongly typed!
});
Type ParameterDescription
Events extends Record<string, unknown>Record of event names to payload types

new EventEmitter<Events>(): EventEmitter<Events>

EventEmitter<Events>

eventNames(): keyof Events[]

Defined in: packages/core/src/utils/event-emitter.ts:211

Get all event names that have registered handlers

keyof Events[]

Array of event names

const events = emitter.eventNames();
console.log('Events with handlers:', events);

hasListeners<K>(event): boolean

Defined in: packages/core/src/utils/event-emitter.ts:228

Check if an event has any registered handlers

Type Parameter
K extends string | number | symbol
ParameterTypeDescription
eventKEvent name

boolean

True if the event has at least one handler

if (emitter.hasListeners('message')) {
emitter.emit('message', { text: 'Hello' });
}

listenerCount<K>(event): number

Defined in: packages/core/src/utils/event-emitter.ts:195

Get the number of handlers registered for an event

Type Parameter
K extends string | number | symbol
ParameterTypeDescription
eventKEvent name

number

Number of registered handlers

const count = emitter.listenerCount('message');
console.log(`${count} handlers registered`);

off<K>(event, handler): void

Defined in: packages/core/src/utils/event-emitter.ts:120

Remove an event handler

Type Parameter
K extends string | number | symbol
ParameterTypeDescription
eventKEvent name
handlerEventHandler<Events[K]>Handler function to remove

void

const handler = (data) => console.log(data);
emitter.on('message', handler);
emitter.off('message', handler);

on<K>(event, handler): () => void

Defined in: packages/core/src/utils/event-emitter.ts:65

Register an event handler

Type Parameter
K extends string | number | symbol
ParameterTypeDescription
eventKEvent name to listen for
handlerEventHandler<Events[K]>Callback function to invoke when event is emitted

Unsubscribe function that removes this specific handler

() => void

const unsubscribe = emitter.on('message', (data) => {
console.log(data.text);
});
// Later, to unsubscribe:
unsubscribe();

once<K>(event, handler): void

Defined in: packages/core/src/utils/event-emitter.ts:95

Register a one-time event handler

Type Parameter
K extends string | number | symbol
ParameterTypeDescription
eventKEvent name to listen for
handlerEventHandler<Events[K]>Callback function to invoke once

void

The handler will be automatically removed after being invoked once.

emitter.once('connect', () => {
console.log('Connected!');
});

removeAllListeners<K>(event?): void

Defined in: packages/core/src/utils/event-emitter.ts:175

Remove all handlers for an event, or all handlers for all events

Type Parameter
K extends string | number | symbol
ParameterTypeDescription
event?KOptional event name. If omitted, removes all handlers for all events.

void

// Remove all handlers for 'message' event
emitter.removeAllListeners('message');
// Remove all handlers for all events
emitter.removeAllListeners();