1.2.1 • Published 2 years ago

best-events v1.2.1

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

best-events

Tiny strict-type-enabled event machine

Why

Lets you strictly type your events and only fire and listen for events with specified names and sets of arguments

Installation

npm i best-events

Usage

import Events from 'best-events'

const events = new Events<{
  hello: (name: string) => void
  math: (a: number, b: number) => void
  suspence: () => Promise<void>
}>()

// ✅ OK
events.on('hello', (name) => console.log('hello ' + name))
events.fire('hello', 'world')

// ✅ OK
events.on('math', (a, b) => console.log(a + b))
events.fire('math', 1, 2)

// ✅ OK - ASYNC
events.on('suspence', async () => {
  await new Promise(res => setTimeout(res, 1000))
  console.log('bam')
})
events.fire('suspence')

// ❌ WRONG ARGUMENT TYPE
// Argument of type 'number' is not assignable to parameter of type 'string'
events.fire('hello', 1)

// ❌ NOT ENOUGH ARGUMENTS
// Expected 3 arguments, but got 2
events.fire('math', 1)

// ❌ TOO MUCH ARGUMENTS
// Argument of type '(name: any, lastName: any) => void' is not assignable to parameter of type '(name: string) => void'
events.on('hello', (name, lastName) => console.log('hello ' + name + lastName))

// ❌ UNKNOWN EVENT
// Argument of type '"howdy"' is not assignable to parameter of type '"hello" | "math"'
events.fire('howdy', 'world')

// ❌ WRONG TYPE IN LISTENER
// Property 'push' does not exist on type 'number'
events.on('math', (a, b) => a.push(b))

Methods

// `on` to listen for event
events.on(eventName, eventHandler)

// `fire` to emit event
events.fire(eventName)

// `off` to remove a specific listener
events.off(eventName, eventHandler)

// `offAll` to remove all listeners
events.offAll(eventName)

Usage without TS

Also supported but discouraged

import Events from 'best-events'

const events = new Events()

events.on('hello', (name) => console.log('hello ' + name))

events.fire('hello', 'world')
1.2.1

2 years ago

1.2.0

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago