Provides additional features to event emitters
    Preparing search index...

    Provides additional features to event emitters

    @unional/events-plus

    NPM version NPM downloads

    GitHub NodeJS Codecov

    Visual Studio Code

    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())
    ...