createEventEmitter

expérimentaldepuis 0.1.0@legba-core/core

createEventEmitter

Ce que ça fait

Crée un bus d’événements typé, sans dépendance à Node (EventEmitter de node:events n’est pas utilisé).

Signature

function createEventEmitter<EventMap extends Record<string, unknown>>(): LegbaEventEmitter<EventMap>

Paramètres

Aucun paramètre. EventMap est un paramètre de type : un objet associant chaque nom d’événement au type de son payload.

Retour

Un LegbaEventEmitter<EventMap> avec on, off, emit et clear().

Erreurs

Aucune. emit sur un événement sans écouteur, ou off sur un écouteur déjà retiré, ne lèvent jamais.

Exemple minimal

import { createEventEmitter } from "@legba-core/core";

interface Events extends Record<string, unknown> {
  ping: string;
}

const emitter = createEventEmitter<Events>();
emitter.on("ping", (payload) => console.log(payload));
emitter.emit("ping", "pong");

Exemple complet

import { createEventEmitter } from "@legba-core/core";

interface Events extends Record<string, unknown> {
  progress: { percent: number };
}

const emitter = createEventEmitter<Events>();
const onProgress = (payload: { percent: number }) => console.log(payload.percent);

emitter.on("progress", onProgress);
emitter.emit("progress", { percent: 50 });
emitter.off("progress", onProgress); // ne sera plus notifié
emitter.clear(); // retire tous les écouteurs, tous événements confondus

Pièges

  • L’interface EventMap doit étendre Record<string, unknown> explicitement (interface Events extends Record<string, unknown> { ... }), sinon TypeScript refuse l’appel générique.

Voir aussi