← All packages

@lacspace/events

v1.0.0Core Runtime Kit0 deps

A fully type-safe event emitter / tiny pub-sub for Node and the browser. Declare an events map (name → payload type) and get compile-time-checked on/emit. A throwing listener never blocks the others (errors are isolated), adding or removing listeners mid-emit is safe, and once/waitFor/onAny round it out. Comparable to mitt or nanoevents but strongly typed. Zero-dependency, isomorphic.

npm i @lacspace/events

Usage

events.ts
import { createEmitter } from "@lacspace/events";

// declare the events map — on/emit are now compile-time checked
type Events = { login: { userId: string }; logout: void };
const bus = createEmitter<Events>();

const off = bus.on("login", ({ userId }) => console.log("welcome", userId));
bus.emit("login", { userId: "u_1" }); // ✓ payload type enforced
off(); // unsubscribe

bus.once("logout", () => console.log("bye"));
const next = await bus.waitFor("login"); // resolves on the next emit

// a throwing listener never blocks the others — errors are isolated

Exports 1

createEmitter

Keywords

event-emittereventemitterpubsubtyped-eventstype-safemitt-alternativenanoevents-alternativeobserverisomorphiczero-dependency

More in Core Runtime Kit