@plinthjs/events
v0.1.0
Published
Mason event dispatcher: listeners, wildcards, subscribers (the Illuminate\Events equivalent).
Maintainers
Readme
@plinthjs/events
The Mason event dispatcher — the Illuminate\Events equivalent. Register listeners, fire events,
match wildcards, halt propagation, and group registrations behind subscribers.
import { Dispatcher } from '@plinthjs/events'
const events = new Dispatcher()
// Concrete listener: (payload, eventName)
events.listen('user.created', (user, name) => {
console.log(`${name} fired for`, user)
})
// Wildcard listener: (eventName, payload)
events.listen('user.*', (name, payload) => {
console.log('audit', name, payload)
})
const results = await events.dispatch('user.created', { id: 1 })API
listen(event | event[], listener)— register a listener. A*anywhere in the name makes it a wildcard listener; wildcard listeners receive(eventName, payload), concrete listeners receive(payload, eventName).once(event, listener)— register a listener removed after its first invocation.dispatch(event, payload?)— invoke every matching listener (concrete first, then wildcard), await async ones, and collect their return values. If a listener returnsfalse, propagation stops and the results gathered so far are returned.until(event, payload?)— return the first non-null/undefinedlistener result.forget(event)— remove all listeners for an exact event name or wildcard pattern.hasListeners(event)/listenerCount(event)— introspect registered listeners, including matching wildcards.subscribe(subscriber)— hand the dispatcher to an object with asubscribe(dispatcher)method so it can register its own listeners.
Subscribers
import { Dispatcher, type Subscriber } from '@plinthjs/events'
class UserSubscriber implements Subscriber {
subscribe(events: Dispatcher) {
events.listen('user.created', () => {})
events.listen('user.deleted', () => {})
}
}
new Dispatcher().subscribe(new UserSubscriber())