EventTarget — W3C standard event system (available in Node.js).
1class EventBus extends EventTarget {2 constructor() {3 super();4 }56 emit(eventName, detail) {7 const event = new CustomEvent(eventName, { detail });8 this.dispatchEvent(event);9 }1011 on(eventName, handler) {12 this.addEventListener(eventName, handler);13 return () => this.removeEventListener(eventName, handler);14 }15}1617// Usage18const bus = new EventBus();1920const unsub = bus.on("data", (event) => {21 console.log("Received:", event.detail);22});2324bus.emit("data", { value: 42 });25bus.emit("data", { value: 100 });2627unsub(); // unsubscribe
Node.js EventEmitter (alternative):
1const { EventEmitter } = require("events");23class EventBus extends EventEmitter {4 emit(eventName, detail) {5 super.emit(eventName, { detail });6 }7}