secret-event-listener
Version:
Add an event listener without causing any side effects
75 lines (51 loc) • 2.34 kB
Markdown
# secret-event-listener
Add an event listener without causing any side effects.
[](https://www.npmjs.com/package/secret-event-listener)
[](https://travis-ci.org/watson/secret-event-listener)
[](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)