https://github.com/lightning-chart/eventer
Simple and fast event emitter library.
https://github.com/lightning-chart/eventer
event-emitter events javascript subscription
Last synced: 6 months ago
JSON representation
Simple and fast event emitter library.
- Host: GitHub
- URL: https://github.com/lightning-chart/eventer
- Owner: Lightning-Chart
- License: mit
- Created: 2019-07-04T12:37:36.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-06-11T17:01:00.000Z (about 2 years ago)
- Last Synced: 2025-08-15T04:20:55.261Z (11 months ago)
- Topics: event-emitter, events, javascript, subscription
- Language: TypeScript
- Homepage: https://arction.github.io/Eventer/
- Size: 1.84 MB
- Stars: 5
- Watchers: 2
- Forks: 1
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Eventer
Simple and fast event emitter library. Subscription is based on a unique Token, which can be used to unsubscribe from the topic.
The Eventer is used in LightningChart® JS charting library. [https://www.arction.com/](https://www.arction.com/)
## Installation
`npm install --save @arction/eventer`
## Documentation
Online documentation is available at [arction.github.io/eventer](https://arction.github.io/Eventer/)
## Getting started
```ts
import { Eventer } from '@arction/eventer'
const eventer = new Eventer()
// new topic is created, handler is added as the first subscriber to the topic
const token1 = eventer.on('topic1', () => console.log('I am called from topic1'))
// 'topic1' already exists, so new listener is simply added to existing collection of handlers
const token2 = eventer.on('topic1', () => console.log('I am also called from topic1'))
// new collection of handlers is created for the second topic
// the function is added to it
eventer.on('topic2', () => console.log('I am called from topic2'))
eventer.emit('topic1')
// calls two functions which listen to the event
//
// outputs:
// I am called from topic1
// I am also called from topic1
eventer.emit('topic2')
// calls single functions which listen to the event
//
// outputs:
// I am called from topic2
// remove the second listener from the first topic by token
eventer.off(token2)
eventer.emit('topic1')
// calls single functions which listen to the event
//
// outputs:
// I am called from topic1
// remove all listeners from all topics
eventer.allOff()
eventer.emit('topic2')
// nothing happened, since all subscriptions were terminated
```
### Subscribe to topic
Subscribing to a topic is easy.
```ts
eventer.on('topic', ()=>{ console.log('Topic handler') })
```
Multiple subscriptions to a single topic can exist.
```ts
eventer.on('topic', ()=>{ console.log('Topic handler') })
eventer.on('topic2', ()=>{ console.log('Topic 2 handler') })
eventer.on('topic3', ()=>{ console.log('Topic 3 handler') })
```
### Unsubscribe from topic
You can unsubscribe from a single topic by using the *Token* returned by eventer when you subscribed to the topic.
```ts
const token = eventer.on('topic', ()=>{ console.log('Topic handler') })
eventer.off(token)
```
You can also unsubscibe all listeners from a topic.
```ts
eventer.topicOff('topic')
```
It is also possible to unsubscribe all topics and all listeners.
```ts
eventer.allOff()
```
### Emiting events
Events can be emitted for a topic. The emit can contain 0 or more arguments that will be provided to the topic listeners.
```ts
eventer.emit('topic')
eventer.on('topic2', ( arg1, arg2 ) => console.log( arg1, arg2 ))
eventer.emit('topic2', 'Hello ', 'World')
```
## Development instructions
The project is developed using TypeScript. Build system of the project heavily relies on Node.js. Dependencies are managed with *npm*, therefore, remember to run **npm install** before starting of anything else.
There are several *npm scripts*, which are used for development process:
| Name | Command | Description |
| ---------|------------------|--------------------------|
| build | npm run build | run build system
| test | npm test | run tests and watch |
| lint | npm run lint | run static analyzer and watch
| docs | npm run docs | generate typedoc documentation
| ci:test | npm run ci:test | run tests once
| ci:lint | npm run ci:lint | run static analyzer once
| ci:watch | npm run ci:watch | run CI circle and watch