events-decorator

0.2.0 • Public • Published

Event Decorator

node Build Status npm GitHub David David

Decorates EventEmitter with handy methods when working with multiple events

Install

$ npm install --save events-decorator

API

    const { onceAny, onceAll, decorate } = require('events-decorator');

onceAny(emitter, eventNames, handler)

Will subscribe to all events is evantNames from emitter and will execute handler once for the first event that occurs. When handler is executed, it will immediately unsubscribe from all events.

Returns a function to unsubscribe from the events.

const { onceAny } = require('events-decorator');
 
const unsubscribe = onceAny(emitter, ['one', 'two', 'three'], (trigger, ...arguments) => {
    console.info(`first event was ${trigger}`);
});

Parameters

Name Type Description
emitter EventEmitter
eventNames Array defaults to empty array []
handler Function user provider handler

Returns

unsubscriber: function() calling this function before the handler is executed will unsubscribe from all the events. Calling it after the handler is executed has no effect.

onceAll(emitter, eventNames, handler)

Will subscribe to all events is evantNames from emitter and will execute handler once for the last event that occurs. When handler is executed, it will immediately unsubscribe from all events.

Returns a function to unsubscribe from the events.

const { onceAll } = require('events-decorator');
 
const unsubscribe = onceAll(emitter, ['one', 'two', 'three'], (argumentsArray) => {
    console.info(`the last event was ${trigger}`);
});

Parameters

Name Type Description
emitter EventEmitter
eventNames Array defaults to empty array []
handler Function user provider handler

Returns

unsubscriber: function() calling this function before the handler is executed will unsubscribe from all the events. Calling it after the handler is executed has no effect.

decorate(emitter)

Decorates the EventEmitter with the onceAny and onceAll methods. It won't modify the emitter. The new methods will have similar API to the ones described above, but omitting the first parameter.

Returns a Proxy for the emitter.

const { decorate } = require('events-decorator');
 
const decorated = decorate(emitter);
 
const unsub1 = decorated.onceAny(['one', 'two', 'three'], (trigger, ...arguments) => {
    console.info(`first event was ${trigger}`);
});
 
const unsub2 = decorated.onLast(['one', 'two', 'three'], (trigger, ...arguments) => {
    console.info(`the last event was ${trigger}`);
});

Parameters

Name Type Description
emitter EventEmitter

Returns

decorated: Proxy<EventEmitter>

Examples

To count the in-flight requests on a express server:

const { onceAny } = require('events-decorator');
 
let inflightRequests = 0;
app.use((req, res, next) => {
    inflightRequests++;
    onceAny(res, ['error', 'finish', 'close'], () => {
        inflightRequests--;
    });
    next();
});

To log the response time for each request:

const { onceAny } = require("events-decorator");
 
app.use((req, res, next) => {
    // hrtime.bigint is available on Node v10.7+
    const start = process.hrtime.bigint();
    onceAny(res, ['finish', 'close'], () => {
        const end = process.hrtime.bigint();
        console.log(`response took ${end - star} nanosecods`);
    });
    next();
});

MIT © Guilherme Hermeto

Package Sidebar

Install

npm i events-decorator

Weekly Downloads

278

Version

0.2.0

License

MIT

Unpacked Size

96.8 kB

Total Files

9

Last publish

Collaborators

  • ghermeto