Skip to content

lokicoule-stack/emitter

Repository files navigation

Lokiverse Emitter

npm version License: MIT TypeScript codecov

Type-safe event emitter for TypeScript.

Install

npm install @lokiverse/emitter

Usage

import { 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' })

Features

  • Full TypeScript support
  • Namespace-based event organization
  • Wildcard listeners
  • Zero dependencies
  • Small bundle size

API

createEmitter()

Creates a new emitter instance.

const emitter = createEmitter<Events>()

Namespaces

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)

.$on(event, handler)

Subscribe to an event.

emitter.user.$on('login', ({ id }) => {
  console.log(id)
})

.$once(event, handler)

Subscribe to an event once.

emitter.user.$once('login', ({ id }) => {
  console.log('First login:', id)
})

.$off(event, handler)

Unsubscribe from an event.

const handler = ({ id }) => console.log(id)
emitter.user.$on('login', handler)
emitter.user.$off('login', handler)

.$emit(event, data)

Emit an event.

emitter.user.$emit('login', { id: '123' })

Wildcards

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)
})

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •