Socket
Socket
Sign inDemoInstall

events-decorator

Package Overview
Dependencies
0
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    events-decorator

decorates EventEmitter with methods to handle multiple events


Version published
Maintainers
1
Install size
94.6 kB
Created

Readme

Source

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
NameTypeDescription
emitterEventEmitter
eventNamesArraydefaults to empty array []
handlerFunctionuser 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
NameTypeDescription
emitterEventEmitter
eventNamesArraydefaults to empty array []
handlerFunctionuser 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
NameTypeDescription
emitterEventEmitter
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

Keywords

FAQs

Last updated on 04 Dec 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc