Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/watson/secret-event-listener
Add an event listener without causing any side effects
https://github.com/watson/secret-event-listener
Last synced: about 2 months ago
JSON representation
Add an event listener without causing any side effects
- Host: GitHub
- URL: https://github.com/watson/secret-event-listener
- Owner: watson
- License: mit
- Created: 2018-06-25T11:59:02.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-06-25T12:16:51.000Z (over 6 years ago)
- Last Synced: 2024-05-12T06:40:43.528Z (5 months ago)
- Language: JavaScript
- Size: 6.84 KB
- Stars: 34
- Watchers: 4
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# secret-event-listener
Add an event listener without causing any side effects.
[![npm](https://nodei.co/npm/secret-event-listener.png)](https://www.npmjs.com/package/secret-event-listener)
[![Build status](https://travis-ci.org/watson/secret-event-listener.svg?branch=master)](https://travis-ci.org/watson/secret-event-listener)
[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard)## Why?
Adding an event listener to an emitter object will normally trigger
certain side effects. E.g. the
[`newListener`](https://nodejs.org/api/events.html#events_event_newlistener)
event will be emitted for every new listener added. A
`MaxListenersExceededWarning` process warning will be emitted if the
emitter reaches is [maximum listener
count](https://nodejs.org/api/events.html#events_emitter_setmaxlisteners_n).
Or a readable stream will enter [flowing
mode](https://nodejs.org/api/stream.html#stream_two_modes) if a `data`
listener is added.This module gives you the ability to attach a listener without
triggering any of these side effects.**Only use this module if you are sure you don't want any side effects
and there's other way to achieve your goals!**## Installation
```
npm install secret-event-listener --save
```## Usage
```js
const {EventEmitter} = require('events')
const addSecretListener = require('secret-event-listener')const emitter = new EventEmitter()
emitter.on('newListener', function () {
throw new Error('should not fire the newListener event!')
})addSecretListener(emitter, 'foo', function () {
console.log('foo event fired :)')
})emitter.emit('foo')
```## API
### `addSecretListener(emitter, eventName, listener)`
Arguments:
- `emitter` - an object inheriting from
[`EventEmitter`](https://nodejs.org/api/events.html#events_class_eventemitter)
- `eventName` - the event to add the `listener` to
- `listener` - a listener function which should be called every time an
event of `eventName` is emitted.### `addSecretListener.prepend(emitter, eventName, listener)`
Like the main `addSecretListener` function, except the `listener` is
added to the beginning of the listeners array for the event named
`eventName`.## License
[MIT](https://github.com/watson/secret-event-listener/blob/master/LICENSE)