# @emisor/core

> Advanced event emitter core

Latest version **1.0.0-alpha.7** (published 2021-02-25) · Apache License v2.0 license · 0 weekly downloads

## Install

```sh
npm install @emisor/core
pnpm add @emisor/core
yarn add @emisor/core
bun add @emisor/core
```

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0-alpha.7 |
| Published | 2021-02-25 |
| First published | 2020-08-23 |
| Weekly downloads | 0 |
| License | Apache License v2.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >11 |
| Dependencies | 0 |
| Unpacked size | 48.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Victor Perez |
| Maintainers | victor-perez |

## Links

- npm: https://www.npmjs.com/package/@emisor/core
- Repository: https://github.com/vpjs/emisor
- Homepage: https://github.com/vpjs/emisor/tree/master/packages/core#readme
- Issues: https://github.com/vpjs/emisor/issues
- npm.io page: https://npm.io/package/@emisor/core

## Recent versions

- 1.0.0-alpha.7 (latest) — 2021-02-25
- 1.0.0-alpha.4 — 2020-08-23
- 1.0.0-alpha.2 — 2020-08-23

## README

Emisor core
=========================
:construction: work in progress

## Events
Emisor supports 2 type of events, `Symbol` and `string`. `String` based events are more powerful then the "simpler" `Symbol` based events. `String` based events support namespaces, the default namespace separator is `.`.

### Channel filter
Channel filters can only be used by `string` based events and the following filters are supported:
- Wildcard `*`

You can only filter on 1 or more namespaces you can not filter on the event substring, meaning that `test.*` is valid filter and `test*` is a invalid filter.

#### Wildcard filter: `*`

| usage | description |
| - | - |
| `*` | subscribe to any event |
| `namespace.*` | subscribe to any event that starts with the namespace as well to the exact match of the namespace | 
| `namespace.*.namespace` | You can use a wildcard for one part of the namespace. |

```js
Emitter.on('test.*', (d) => console.log(d));
//This will trigger the subscriber
Emitter.emit('test', 1);
//but also any event that starts with the test namespace
Emitter.emit('test.test', 2);
Emitter.emit('test.test.etc', 3);
```

```js
Emitter.on('car.*.door.open', (d) => console.log(d));
//These events will trigger the subscriber
Emitter.emit('car.left.door.open', true);
Emitter.emit('car.right.door.open', true);
```

### Plugin postfix
Some plugin support to set options via the postfix of the event `string`, for example the count plugin can be triggered via `this.should.be.called.once:#1`. The default postfix separator is `:`

### Plugin prefix
Some plugin can be triggered via a single prefix chart of the event `stings`, for example the history plugin can be triggered via `>this.is.the.same.as.history.true` 

## Methods

### `on`
Subscribe to a event.

#### params
| name | type | description |
| - | - | - |
| event | `string\|Symbol\|string[]\|Symbol[]` | event to subscribe to |
| handler | `function` | event handler |
| options | `object` | options that wil trigger plugins |

#### example
```js
// Subscribe to the foo
Emitter.on('foo', () => {})
// Subscribe to both foo and bar with the same handler
Emitter.on(['foo', 'bar'], () => {})
```

The handler will receive 2 params the first one the `payload` of the triggered event, second one the `$event` object that will have the following property:


| key | type | description |
| - | - | - |
| time | `number` | unix timestamp of publish time |
| event | `string\|Symbol` | event that triggered the handler |
| handler | `function` | the handler it self |
| tag | `any[]` | events can have tags, mostly used by plugins |


### `off`
unsubscribe from a event
* If no `event` is given, all subscribers will be unsubscribed
* if no `handler` is given all subscribers of the given `event` will be unsubscribed


#### params
| name | type | description |
| - | - | - |
| event | `string\|Symbol` | unsubscribe to a specific event |
| handler | `function` | unsubscribe to a specific handler |

### `emit`
Emit a event

#### params
| name | type |
| - | - |
| event | `string\|Symbol` |
| payload | `any` | 
| tags | `any[]\|any` |


## Plugins


### hooks

#### emit

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