@lacspace/events
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/eventsUsage
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 isolatedExports 1
createEmitterKeywords
More in Core Runtime Kit
A tiny structured logger for Node and the browser — leveled JSON logging, child loggers, field redaction and pluggable transports (JSON, pretty, in-memory). A log below the active level costs almost nothing: the record is never even built. Errors serialise automatically; secrets get redacted before they leave the logger. Zero-dependency, isomorphic.
@lacspace/resultTyped, functional error handling — Result<T,E> (Ok/Err) and Option<T> (Some/None) so functions return errors as values instead of throwing. Constructors, guards, map/andThen/match, unwrap variants, trySync/tryAsync to wrap throwing code, and an all() combinator that short-circuits on the first error. Tree-shakeable, zero-dependency, isomorphic.
@lacspace/queueAn in-memory async task queue with a concurrency limit — run up to N async tasks at once and await individual results or the whole drain. Priority ordering, pause/start, clear, onIdle/onEmpty draining, and per-task abort via AbortSignal. A rejected task never stalls the queue. Comparable to p-queue/p-limit but tiny and dependency-free. Isomorphic.