-
Notifications
You must be signed in to change notification settings - Fork 1
EventBus
runtoolkit edited this page Apr 13, 2026
·
1 revision
Named event system. Supports multiple handlers per event, sync and async dispatch, deferred (queued) fire, and once-handlers.
import { EventBus } from './src/event.js';
const bus = new EventBus();
bus.setDebug(true); // logs register/fire to console// Persistent handler — returns an unregister function
const off = bus.register('player_join', (ctx) => {
console.log('joined:', ctx.name);
});
// One-shot handler — automatically removed after first fire
bus.register('first_boot', () => {
console.log('fired once');
}, { once: true });
// Unregister
off(); // via returned function
bus.unregisterOne('player_join', fn); // by name + reference
bus.unregister('player_join'); // removes all handlers for event
bus.clear(); // removes everything + clears queue// Sync — fires all handlers immediately
bus.fire('player_join', { name: 'Alice' });
// → { ok: true, count: number }
// Async — awaits each handler in sequence
await bus.fireAsync('player_join', { name: 'Alice' });
// → { ok: true, count: number }
// Queued — deferred until flushQueue() is called
bus.fireQueued('player_join', { name: 'Alice' });bus.flushQueue(); // sync — calls fire() for each queued item
await bus.flushQueueAsync(); // async — calls fireAsync() for each
bus.clearQueue(); // discard without firingbus.has('player_join'); // true if at least one handler registered
bus.count('player_join'); // number of handlers
bus.list(); // → ['player_join', 'other_event', ...]Errors thrown inside handlers are caught and logged to console.error. Other handlers in the same fire() call are not affected.