UNPKG

@solid-primitives/event-bus

Version:

A collection of SolidJS primitives providing various features of a pubsub/event-emitter/event-bus.

39 lines (35 loc) 1.05 kB
import { tryOnCleanup } from "@solid-primitives/utils"; import { onCleanup } from "solid-js"; export class EventBusCore extends Set { emit(payload) { for (const cb of this) cb(payload); } } /** * Provides a simple way to listen to and emit events. All listeners are automatically unsubscribed on cleanup. * * @returns the emitter: `{listen, emit, clear}` * * @see https://github.com/solidjs-community/solid-primitives/tree/main/packages/event-bus#createEventBus * * @example const bus = createEventBus<string>(); // bus can be destructured: const { listen, emit, clear } = bus; const unsub = bus.listen((a) => console.log(a)); bus.emit("foo"); // unsub gets called automatically on cleanup unsub(); */ export function createEventBus() { const bus = new EventBusCore(); return { listen(listener) { bus.add(listener); return tryOnCleanup(bus.delete.bind(bus, listener)); }, emit: bus.emit.bind(bus), clear: onCleanup(bus.clear.bind(bus)), }; }