@unional/events-plus

@unional/events-plus

NPM version NPM downloads

GitHub NodeJS Codecov

Semantic Release

Visual Studio Code

Provides additional features to event emitters.

Should support any event emitters. Tested with the following:

Installation

# 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

features

JustEvent

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

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