Provides additional features to event emitters.
Should support any event emitters. Tested with the following:
# npm
npm install @unional/events-plus
# yarn
yarn add @unional/events-plus
# pnpm
pnpm install @unional/events-plus
#rush
rush add -p @unional/events-plus
justEvent()
creates typed event with just-func semantics.
It makes consuming and emitting events with parameters much easier.
import { justEvent } from '@unional/events-plus'
import { EventEmitter } from 'EventEmitter3'
const count = justEvent<number>('count')
const emitter = new EventEmitter()
emitter.addListener(count.type, count.listener(value => expect(value).toBe(1)))
emitter.emit(count.type, ...count(1))
// or
count.listenTo(emitter, value => expect(value).toBe(1))
count.emitBy(emitter, 1)
You can also create the event with a default listener:
import { justEvent } from '@unional/events-plus'
import { EventEmitter } from 'EventEmitter3'
let total = 0
const sum = justEvent('sum', (value: number) => total +=value)
const emitter = new EventEmitter()
emitter.addListener(sum.type, sum.defaultListener)
trapError()
will trap any error thrown in the listener and emit it to the logger
.
This prevents the emitter workflow interrupted by rouge listeners.
The logger
is defaulted to console.error()
,
but you can override that to anything else.
import { trapError } from '@unional/events-plus'
import { EventEmitter } from 'events'
const emitter = trapError(new EventEmitter()) // or `trapError(emitter, { logger })`
emitter.on('work', () => { throw new Error('missed deadline') })
emitter.emit('work') // no error is thrown.
errorTrapper()
creates your own trapError()
with specific logger
You can then use it on multiple emitters.
import { errorTrapper } from '@unional/events-plus'
import { EventEmitter } from 'eventemitter3'
import { getLogger } from 'standard-log'
const yourTrapError = errorTrapper(getLogger('emitter'))
const emitter = yourTrapError(new EventEmitter())
...
Generated using TypeDoc