# @smoovy/emitter

> Simple event emitter

Latest version **1.1.0** (published 2024-05-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install @smoovy/emitter
pnpm add @smoovy/emitter
yarn add @smoovy/emitter
bun add @smoovy/emitter
```

## Health

**Score 35/100 (D)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2024-05-13 |
| First published | 2022-12-23 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 4.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 86 |
| Author | Davide Perozzi |
| Maintainers | davideperozzi |
| Keywords | smoovy, event, emitter, event-emitter |

## Links

- npm: https://www.npmjs.com/package/@smoovy/emitter
- Repository: https://github.com/davideperozzi/smoovy
- Issues: https://github.com/davideperozzi/smoovy/issues
- npm.io page: https://npm.io/package/@smoovy/emitter

## Dependencies (1)

- [@smoovy/listener](https://npm.io/package/@smoovy/listener.md) ^1.0.1

## Alternatives

- [async-exit-hook](https://npm.io/package/async-exit-hook.md) — 3.7M weekly downloads
- [evnty](https://npm.io/package/evnty.md) — 7.2K weekly downloads
- [eleventy-plugin-asciidoc](https://npm.io/package/eleventy-plugin-asciidoc.md) — 3.5K weekly downloads
- [@jswork/next-get2get](https://npm.io/package/@jswork/next-get2get.md) — 945 weekly downloads
- [@dashersw/axon](https://npm.io/package/@dashersw/axon.md) — 934 weekly downloads

## Recent versions

- 1.1.0 (latest) — 2024-05-13
- 1.0.2 — 2022-12-28
- 1.0.1 — 2022-12-23
- 1.0.0 — 2022-12-23

## README

# @smoovy/emitter
[![Version](https://flat.badgen.net/npm/v/@smoovy/emitter)](https://www.npmjs.com/package/@smoovy/emitter) ![Size](https://flat.badgen.net/bundlephobia/minzip/@smoovy/emitter)

## Installation
```sh
yarn add @smoovy/emitter
```
or
```sh
npm install --save @smoovy/emitter
```

## The event emitter
Import the emitter as usual:
```js
import { EventEmitter } from '@smoovy/emitter';
```

### Usage
To use the event emitter you can either create a new instance directly or use it as a parent class.

```js
const emitter = new EventEmitter();
// or
class UltraFancyEmitter extends EventEmitter {}
```

### Emitting events
You have multiple options when it comes to the emission of events:

```js
// Emit a single value
emitter.emit('eventName', 'A random string');

// Emit an other data type (object)
emitter.emit('eventName', { name: 'Mistadobalina' });

// Emit multiple events with different data types
emitter.emit({
  eventName1: 'Some data',
  eventName2: [ 1, 2, 3, 4 ]
});
```

### Listening/Unlistening for events
Listening to events is pretty simple:

```js
emitter.on('eventName', (data) => {
  // Handle your data
});
```

To unlisten you have two options:
```js
const listener = (data) => {};
const unlisten = emitter.on('eventName', listener);

// Unlisten from callback or...
unlisten();

// Unlisten the old-fashioned way
emitter.off('eventName', listener);
```

When you have many listeners going wild in your application, you can use this litte helper function to stack those:

```js
import { listenCompose } from '@smoovy/listener';

const unlisten = listenCompose(
  emitter.on('eventName1', () => {}),
  emitter.on('eventName2', () => {}),
  emitter.on('eventName3', () => {})
);

// Easily unsubcribe from all simultaneously
unlisten();
```
> `listenCompose` simply merges all "unsubscribe callbacks" into one

### Reflecting events
Reflect events to a different emitter. Muted events will not be reflects:
```js
const reflectedEmitter = new Emitter();

// Reflect events to reflectedEmitter
emitter.reflectEvents(reflectedEmitter);

// Listen for events
reflectedEmitter.on('eventName1', (msg) => console.log(msg));

// Dispatch event in base emitter
emitter.emit('eventName1', 'reflected'); // Displays 'reflected'

// Remove reflected emitters
emitter.unreflectEvents();
```

## License
See the [LICENSE](../../LICENSE) file for license rights and limitations (MIT).

---
_Source: https://npm.io/package/@smoovy/emitter · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
