Skip to main content
zerotal

Documentation


Documentation / zerotal / index / Emitter

Class: Emitter

Defined in: packages/core/src/events/Emitter.ts:58

The class-based application event emitter: register listener classes against event classes, then dispatch event instances to them.

Events are plain classes and listeners are classes exposing a handle(event) method. Dispatch can run concurrently and fire-and-forget (Emitter.emit), one-at-a-time (Emitter.emitSync), or be deferred to the queue when a listener declares a queue target and a queue manager is registered. Listener failures during Emitter.emit are isolated and logged, never rethrown to the caller.

Reached in applications through the Events facade; construct directly only in tests or bespoke wiring.

Example

import { Emitter } from "@zerotal/core";

class UserRegistered {
  constructor(readonly userId: string) {}
}

class SendWelcomeEmail {
  async handle(event: UserRegistered): Promise<void> {
    // await mail.to(event.userId).send(new Welcome());
  }
}

const emitter = new Emitter();
emitter.on(UserRegistered, SendWelcomeEmail);
await emitter.emit(new UserRegistered("u_123"));

Extended by

Constructors

Constructor

new Emitter(application?): Emitter

Defined in: packages/core/src/events/Emitter.ts:67

Parameters

application?

any

Returns

Emitter

Dispatch

emit()

emit<T>(event): Promise<void>

Defined in: packages/core/src/events/Emitter.ts:166

Dispatch an event to all its listeners concurrently, deferring any listener that declares a queue target to the queue manager when one is available. Listener failures are isolated and logged, never rethrown to the caller. Broadcastable events (those with a broadcastOn() method) are broadcast first, so they fire even when no listeners are registered.

Type Parameters

T

T extends object

Parameters

event

T

The event instance; its constructor selects the listeners.

Returns

Promise<void>

Resolves once every listener has settled (queued ones once enqueued).


emitSync()

emitSync<T>(event): Promise<void>

Defined in: packages/core/src/events/Emitter.ts:226

Dispatch an event to its listeners one at a time, awaiting each in turn. Unlike Emitter.emit, listeners run inline (never queued) and a thrown error is not caught — it propagates to the caller.

Type Parameters

T

T extends object

Parameters

event

T

The event instance; its constructor selects the listeners.

Returns

Promise<void>


dispatchQueuedListener()

dispatchQueuedListener(listenerName, eventPayload): Promise<void>

Defined in: packages/core/src/events/Emitter.ts:251

Run a deferred listener by name with its raw payload. Called by the queue worker, not application code.

Parameters

listenerName

string

The registered listener class name.

eventPayload

any

The raw payload handed straight to handle() (for most listeners the payload is the event).

Returns

Promise<void>

Throws

If no listener is registered under listenerName.

Subscription

on()

on<T>(eventClass, listenerClass): void

Defined in: packages/core/src/events/Emitter.ts:107

Register a listener class to run whenever the given event class is emitted. The same event may have many listeners; they run in registration order.

Type Parameters

T

T extends object

Parameters

eventClass

EventClass<T>

The event class to listen for.

listenerClass

ListenerClass<T>

A class with a handle(event) method.

Returns

void


off()

off<T>(eventClass, listenerClass): void

Defined in: packages/core/src/events/Emitter.ts:134

Remove a previously registered listener for the given event class. No-op if the listener was never registered.

Type Parameters

T

T extends object

Parameters

eventClass

EventClass<T>

listenerClass

ListenerClass<T>

Returns

void


hasListeners()

hasListeners<T>(eventClass): boolean

Defined in: packages/core/src/events/Emitter.ts:268

Whether any listener is registered for the given event class.

Type Parameters

T

T extends object

Parameters

eventClass

EventClass<T>

Returns

boolean


clear()

clear(): void

Defined in: packages/core/src/events/Emitter.ts:276

Remove every registered listener.

Returns

void