Skip to content

Commit b37d9d7

Browse files
authored
docs: improves docs and types (#2)
1 parent 0ee60bf commit b37d9d7

File tree

4 files changed

+108
-2
lines changed

4 files changed

+108
-2
lines changed

README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,18 @@ A super simple and lightweight event emitter.
1717
npm i @hypernym/emitter
1818
```
1919

20+
## Imports
21+
22+
```js
23+
// CJS
24+
const { createEmitter } = require('@hypernym/emitter')
25+
```
26+
27+
```js
28+
// ESM & TS
29+
import { createEmitter } from '@hypernym/emitter'
30+
```
31+
2032
## Usage
2133

2234
### JS
@@ -52,18 +64,58 @@ emitter.emit('event-id', { x: 0, y: 0 })
5264

5365
### .on()
5466

67+
Registers a specific event.
68+
5569
```ts
5670
emitter.on(id: string, callback: (event: any) => void)
5771
```
5872

5973
### .emit()
6074

75+
Emits a specific event.
76+
6177
```ts
6278
emitter.emit(id: string, event: any)
6379
```
6480

81+
### .events
82+
83+
Main events map.
84+
85+
Stores all registered events.
86+
87+
```ts
88+
emitter.events
89+
```
90+
91+
### .has()
92+
93+
Checks if a specific event by `id` exists in the map.
94+
95+
```ts
96+
emitter.events.has(id: string)
97+
```
98+
99+
### .get()
100+
101+
Gets a specific event by `id` from the map.
102+
103+
```ts
104+
emitter.events.get(id: string)
105+
```
106+
107+
### .delete()
108+
109+
Deletes a specific event by `id` from the map.
110+
111+
```ts
112+
emitter.events.delete(id: string)
113+
```
114+
65115
### .clear()
66116

117+
Removes all events from the map.
118+
67119
```ts
68120
emitter.events.clear()
69121
```

playground/src/main.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,16 @@ type Events = {
88

99
const emitter: Emitter<Events> = createEmitter<Events>()
1010

11-
emitter.on('event-id', e => console.log(e.x, e.y))
11+
emitter.on('event-id', e => console.log(e.x, e.y)) // 0 0
1212

1313
emitter.emit('event-id', { x: 0, y: 0 })
1414

15-
console.log(emitter.events)
15+
console.log(emitter.events) // Map(1) {'event-id' => Array(1)}
16+
17+
const eventId = emitter.events.get('event-id')
18+
19+
console.log(eventId?.toString()) // (e) => console.log(e.x, e.y)
20+
21+
if (emitter.events.has('event-id')) emitter.events.delete('event-id')
22+
23+
console.log(emitter.events) // Map(0) {size: 0}

src/emitter.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@ import type { EventsMap, Emitter } from './types'
22

33
/**
44
* Creates an event emitter.
5+
*
6+
* @example
7+
*
8+
* ```ts
9+
* import { createEmitter, Emitter } from '@hypernym/emitter'
10+
*
11+
* type Events = {
12+
* 'event-id': { x: number; y: number }
13+
* // ...
14+
* }
15+
*
16+
* const emitter: Emitter<Events> = createEmitter<Events>()
17+
*
18+
* emitter.on('event-id', e => console.log(e.x, e.y))
19+
*
20+
* emitter.emit('event-id', { x: 0, y: 0 })
21+
* ```
522
*/
623
export function createEmitter<Events extends EventsMap>(): Emitter<Events> {
724
const events = new Map<keyof Events, Array<(event: any) => void>>()

src/types.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,36 @@ export interface EventsMap {
55
}
66

77
export interface Emitter<Events extends EventsMap> {
8+
/**
9+
* Main events map.
10+
*
11+
* Stores all registered events.
12+
*
13+
* @example
14+
*
15+
* ```ts
16+
* emitter.events
17+
* ```
18+
*/
819
events: Map<keyof Events, Array<(event: any) => void>>
20+
/**
21+
* Registers a specific event.
22+
*
23+
* @example
24+
*
25+
* ```ts
26+
* emitter.on('event-id', e => console.log(e.x, e.y))
27+
* ```
28+
*/
929
on<K extends keyof Events>(id: K, callback: (event: Events[K]) => void): void
30+
/**
31+
* Emits a specific event.
32+
*
33+
* @example
34+
*
35+
* ```ts
36+
* emitter.emit('event-id', { x: 0, y: 0 })
37+
* ```
38+
*/
1039
emit<K extends keyof Events>(id: K, event: Events[K]): void
1140
}

0 commit comments

Comments
 (0)