npm install @lokiverse/emitterimport { createEmitter } from '@lokiverse/emitter'
type Events = {
'user:login': { id: string }
'user:logout': { id: string }
}
const emitter = createEmitter<Events>()
emitter.user.$on('login', ({ id }) => {
console.log(`User ${id} logged in`)
})
emitter.user.$emit('login', { id: '123' })- Full TypeScript support
- Namespace-based event organization
- Wildcard listeners
- Zero dependencies
- Small bundle size
Creates a new emitter instance.
const emitter = createEmitter<Events>()Access namespaced events directly on the emitter:
type Events = {
'user:login': { id: string }
'order:created': { orderId: string }
}
const emitter = createEmitter<Events>()
// Access namespace directly
emitter.user.$on('login', handler)
emitter.order.$on('created', handler)
// Or get a namespace reference
const userEvents = emitter.$ns('user')
userEvents.$on('login', handler)Subscribe to an event.
emitter.user.$on('login', ({ id }) => {
console.log(id)
})Subscribe to an event once.
emitter.user.$once('login', ({ id }) => {
console.log('First login:', id)
})Unsubscribe from an event.
const handler = ({ id }) => console.log(id)
emitter.user.$on('login', handler)
emitter.user.$off('login', handler)Emit an event.
emitter.user.$emit('login', { id: '123' })Listen to multiple events with wildcards:
// All events in a namespace
emitter.user.$on('*', (event, data) => {
console.log(event, data)
})
// All events matching a pattern
emitter.$on('user:*', (event, data) => {
console.log(event, data)
})MIT