# ak-eventemitter

> eventemitter with namespaces

Latest version **0.0.7** (published 2017-09-11) · MIT license · 0 weekly downloads

## Install

```sh
npm install ak-eventemitter
pnpm add ak-eventemitter
yarn add ak-eventemitter
bun add ak-eventemitter
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.7 |
| Published | 2017-09-11 |
| First published | 2013-11-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Avétis KAZARIAN |
| Maintainers | avetisk, joliscri.pt |
| Keywords | events, eventemitter, mediator, namespace |

## Links

- npm: https://www.npmjs.com/package/ak-eventemitter
- Repository: https://github.com/avetisk/ak-eventemitter
- Issues: https://github.com/avetisk/ak-eventemitter/issues
- npm.io page: https://npm.io/package/ak-eventemitter

## 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

- 0.0.7 (latest) — 2017-09-11
- 0.0.6 — 2016-05-09
- 0.0.5 — 2014-02-25
- 0.0.4 — 2014-02-20
- 0.0.2 — 2013-12-21
- 0.0.1 — 2013-11-19

## README

ak-eventemitter
===============

# API

## `EventEmitter(options)`
Constructor.

- `options` *Object*
```javascript
{
  'delimiter': '.' // used to delimite name spaces
}
```

## `on(ns, callback[, context, once])`
Adds an event listener.

- **`ns`** *String*

Target namespace, wildcard is `*`, e.g `chat.*`

- **`callback`** *Function*

`function (ns, arg1, arg2, ...) {}` see [`emit()`](#emitns).

- **`context`** *Object* [optional]

Context used when calling callback.

- **`once`** `Boolean` [optional]

Privately used by [`once()`](#oncenscallbackcontext)

## `once(ns, callback, context)`
Same as [`on()`](#onnscallbackcontextonce), triggered only once (removed after first [`emit()`](#emitns)).

## `off([ns, callback, context])`
Removes an event listener.

- **`ns`** *String* [optional]

Target namespace, wildcard is `*`, e.g `chat.*`

- **`callback`** *Function* [optional]

`function (ns, arg1, arg2, ...) {}` see [`emit()`](#emitns).

- **`context`** *Object* [optional]

Context used when calling callback.

---

- If no `ns` provided, removes *all* listeners;
- if no `callback` provided, removes *all* listeners for given `ns`;
- if no `context` provided, remove a listener for given `ns` and `callback`;
- if `context` provided, removes a listener for given `ns`, `callback` and `context`.

## `emit(ns, ...)`
Emits an event.


- **`ns`** *String* [optional]

Target namespace.

- **`...`** *Mixed* [optional]

Any argument given after `ns` will be passed to listener's callback. See [examples](#examples).

## Inheritance
See this [CoderWall tip](https://coderwall.com/p/3bhwnw).

# Examples

## Example 1: simple event
```javascript
var ee = new EventEmitter();

ee.on('someevent', function (ns, val1, val2) {
  console.log(ns, val1, val2);
});

ee.emit('someevent', 123, 'abc'); // -> 'someevent', 123, 'abc'
```

## Example 2: wildcard event
```javascript
var ee = new EventEmitter();

ee.on('room.*', function (ns, data) {
  console.log(ns, data);
});

ee.emit('room.user.enter', 'john'); // -> 'room.user.enter', 'john'
ee.emit('room.user.leave', 'john'); // -> 'room.user.leave', 'john'
ee.emit('room.topic.update', 'JavaScript is awesome!'); // -> 'room.topic.update', 'JavaScript is awesome!'
```

## Example 3: on, once, off
```javascript
var ee = new EventEmitter();

ee.on('room.*', function (ns, data) {
  console.log(ns, data);
});

ee.once('room.user.enter', function (ns, user) {
  console.log('Hello ' + user + '! You\'re the first in!');
});

ee.emit('room.user.enter', 'john'); 
// -> 'room.user.enter', 'john'
// -> 'Hello john! You're the first in!'

ee.off('room.*');

ee.emit('room.user.leave', 'john'); // Nothing is logged (because we offed 'room.*')
```

## Example 4: context
```javascript
var ee = new EventEmitter();
var counter = {
  'enter': 0,
  'leave': 0
};

ee.on('room.user.enter', function (ns) {
  this.enter += 1;
}, counter);

ee.on('room.user.leave', function (ns) {
  this.leave += 1;
}, counter);

ee.emit('room.user.enter', 'john');
ee.emit('room.user.leave', 'mary');
ee.emit('room.user.enter', 'george');
ee.emit('room.user.enter', 'paul');

console.log(counter); // -> {'enter': 3, 'leave': 1}
```

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