@wxn0brp/event-emitter 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -1
- package/dist/index.d.ts +17 -12
- package/dist/index.js +13 -11
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @wxn0brp/event-emitter
|
|
2
2
|
|
|
3
|
-
A simple event emitter.
|
|
3
|
+
A simple event emitter with optional TypeScript support.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -10,6 +10,8 @@ npm install @wxn0brp/event-emitter
|
|
|
10
10
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
|
+
### Basic Usage (without types)
|
|
14
|
+
|
|
13
15
|
```typescript
|
|
14
16
|
import { EventEmitter } from '@wxn0brp/event-emitter';
|
|
15
17
|
|
|
@@ -22,8 +24,44 @@ emitter.on('hello', (name) => {
|
|
|
22
24
|
emitter.emit('hello', 'world');
|
|
23
25
|
```
|
|
24
26
|
|
|
27
|
+
### Type-Safe Usage (optional)
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { EventEmitter } from '@wxn0brp/event-emitter';
|
|
31
|
+
|
|
32
|
+
// Define event types (optional - just for developer convenience)
|
|
33
|
+
type MyEvents = {
|
|
34
|
+
hello: (name: string) => void;
|
|
35
|
+
data: (value: number, timestamp: Date) => void;
|
|
36
|
+
error: (message: string, code: number) => void;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Create emitter with optional type hints
|
|
40
|
+
const emitter = new EventEmitter<MyEvents>();
|
|
41
|
+
|
|
42
|
+
// The types provide helpful hints during development
|
|
43
|
+
emitter.on('hello', (name) => {
|
|
44
|
+
console.log(`Hello, ${name}!`); // 'name' is suggested as string
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
emitter.on('data', (value, timestamp) => {
|
|
48
|
+
console.log(`Value: ${value} at ${timestamp}`); // 'value' and 'timestamp' have type hints
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Emit events with type hints
|
|
52
|
+
emitter.emit('hello', 'world'); // Typescript suggests string parameter
|
|
53
|
+
emitter.emit('data', 42, new Date()); // Typescript suggests number and Date parameters
|
|
54
|
+
|
|
55
|
+
// You can still emit events without strict type checking
|
|
56
|
+
emitter.emit('unknown_event', 'any', 'data'); // This is still allowed at runtime
|
|
57
|
+
```
|
|
58
|
+
|
|
25
59
|
## API
|
|
26
60
|
|
|
61
|
+
### `EventEmitter<T = {}>`
|
|
62
|
+
|
|
63
|
+
Generic event emitter class where `T` is an optional event map type for developer convenience. The type parameter is completely optional and provides type hints during development.
|
|
64
|
+
|
|
27
65
|
### `on(event: string, listener: Function): void`
|
|
28
66
|
|
|
29
67
|
Registers an event listener.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,36 +1,41 @@
|
|
|
1
|
-
|
|
1
|
+
type EventMap = {
|
|
2
|
+
[event: string]: (...args: any[]) => void;
|
|
3
|
+
};
|
|
4
|
+
type EventName<T extends EventMap> = keyof T | (string & {});
|
|
5
|
+
type EventArgs<T extends EventMap, K extends EventName<T>> = K extends keyof T ? Parameters<T[K]> : any[];
|
|
6
|
+
export declare class VEE<T extends EventMap = {}> {
|
|
2
7
|
_events: {
|
|
3
8
|
[event: string]: Function[];
|
|
4
9
|
};
|
|
5
10
|
/**
|
|
6
11
|
* Registers an event listener
|
|
7
|
-
* @param {
|
|
12
|
+
* @param {K} event - event name
|
|
8
13
|
* @param {Function} listener - function to be called when event occurs
|
|
9
14
|
*/
|
|
10
|
-
on(event:
|
|
15
|
+
on<K extends EventName<T>>(event: K, listener: (...args: EventArgs<T, K>) => void): void;
|
|
11
16
|
/**
|
|
12
17
|
* Registers a one-time event listener
|
|
13
|
-
* @param {
|
|
18
|
+
* @param {K} event - event name
|
|
14
19
|
* @param {Function} listener - function to be called once
|
|
15
20
|
*/
|
|
16
|
-
once(event:
|
|
21
|
+
once<K extends EventName<T>>(event: K, listener: (...args: EventArgs<T, K>) => void): void;
|
|
17
22
|
/**
|
|
18
23
|
* Removes an event listener.
|
|
19
|
-
* @param {
|
|
24
|
+
* @param {K} event - event name
|
|
20
25
|
* @param {Function} listener - listener to remove
|
|
21
26
|
*/
|
|
22
|
-
off(event:
|
|
27
|
+
off<K extends EventName<T>>(event: K, listener: (...args: EventArgs<T, K>) => void): void;
|
|
23
28
|
/**
|
|
24
29
|
* Emits an event
|
|
25
|
-
* @param {
|
|
26
|
-
* @param {...
|
|
30
|
+
* @param {K} event - event name
|
|
31
|
+
* @param {...EventArgs<T, K>} args - arguments to be passed to listeners
|
|
27
32
|
*/
|
|
28
|
-
emit(event:
|
|
33
|
+
emit<K extends EventName<T>>(event: K, ...args: EventArgs<T, K>): void;
|
|
29
34
|
/**
|
|
30
35
|
* Returns the number of listeners for the given event
|
|
31
|
-
* @param {
|
|
36
|
+
* @param {K} event - event name
|
|
32
37
|
*/
|
|
33
|
-
listenerCount(event:
|
|
38
|
+
listenerCount<K extends EventName<T>>(event: K): number;
|
|
34
39
|
}
|
|
35
40
|
export default VEE;
|
|
36
41
|
export { VEE as EventEmitter };
|
package/dist/index.js
CHANGED
|
@@ -2,17 +2,18 @@ export class VEE {
|
|
|
2
2
|
_events = {};
|
|
3
3
|
/**
|
|
4
4
|
* Registers an event listener
|
|
5
|
-
* @param {
|
|
5
|
+
* @param {K} event - event name
|
|
6
6
|
* @param {Function} listener - function to be called when event occurs
|
|
7
7
|
*/
|
|
8
8
|
on(event, listener) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const _event = event;
|
|
10
|
+
if (!this._events[_event])
|
|
11
|
+
this._events[_event] = [];
|
|
12
|
+
this._events[_event].push(listener);
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* Registers a one-time event listener
|
|
15
|
-
* @param {
|
|
16
|
+
* @param {K} event - event name
|
|
16
17
|
* @param {Function} listener - function to be called once
|
|
17
18
|
*/
|
|
18
19
|
once(event, listener) {
|
|
@@ -24,18 +25,19 @@ export class VEE {
|
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* Removes an event listener.
|
|
27
|
-
* @param {
|
|
28
|
+
* @param {K} event - event name
|
|
28
29
|
* @param {Function} listener - listener to remove
|
|
29
30
|
*/
|
|
30
31
|
off(event, listener) {
|
|
31
|
-
|
|
32
|
+
const _event = event;
|
|
33
|
+
if (!this._events[_event])
|
|
32
34
|
return;
|
|
33
|
-
this._events[
|
|
35
|
+
this._events[_event] = this._events[_event].filter(l => l !== listener);
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
38
|
* Emits an event
|
|
37
|
-
* @param {
|
|
38
|
-
* @param {...
|
|
39
|
+
* @param {K} event - event name
|
|
40
|
+
* @param {...EventArgs<T, K>} args - arguments to be passed to listeners
|
|
39
41
|
*/
|
|
40
42
|
emit(event, ...args) {
|
|
41
43
|
const listeners = this._events[event];
|
|
@@ -47,7 +49,7 @@ export class VEE {
|
|
|
47
49
|
}
|
|
48
50
|
/**
|
|
49
51
|
* Returns the number of listeners for the given event
|
|
50
|
-
* @param {
|
|
52
|
+
* @param {K} event - event name
|
|
51
53
|
*/
|
|
52
54
|
listenerCount(event) {
|
|
53
55
|
return this._events[event]?.length || 0;
|