npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

events-decorator

v0.2.0

Published

decorates EventEmitter with methods to handle multiple events

Downloads

3,593

Readme

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