@wxn0brp/event-emitter 0.0.2 → 0.0.4

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 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
- export declare class VEE {
1
+ export type EventMap = {
2
+ [event: string]: (...args: any[]) => void;
3
+ };
4
+ export type EventName<T extends EventMap> = keyof T | (string & {});
5
+ export 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 {string} event - event name
12
+ * @param {K} event - event name
8
13
  * @param {Function} listener - function to be called when event occurs
9
14
  */
10
- on(event: string, listener: Function): void;
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 {string} event - event name
18
+ * @param {K} event - event name
14
19
  * @param {Function} listener - function to be called once
15
20
  */
16
- once(event: string, listener: Function): void;
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 {string} event - event name
24
+ * @param {K} event - event name
20
25
  * @param {Function} listener - listener to remove
21
26
  */
22
- off(event: string, listener: Function): void;
27
+ off<K extends EventName<T>>(event: K, listener: (...args: EventArgs<T, K>) => void): void;
23
28
  /**
24
29
  * Emits an event
25
- * @param {string} event - event name
26
- * @param {...any} args - arguments to be passed to listeners
30
+ * @param {K} event - event name
31
+ * @param {...EventArgs<T, K>} args - arguments to be passed to listeners
27
32
  */
28
- emit(event: string, ...args: any[]): void;
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 {string} event - event name
36
+ * @param {K} event - event name
32
37
  */
33
- listenerCount(event: string): number;
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 {string} event - event name
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
- if (!this._events[event])
10
- this._events[event] = [];
11
- this._events[event].push(listener);
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 {string} event - event name
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 {string} event - event name
28
+ * @param {K} event - event name
28
29
  * @param {Function} listener - listener to remove
29
30
  */
30
31
  off(event, listener) {
31
- if (!this._events[event])
32
+ const _event = event;
33
+ if (!this._events[_event])
32
34
  return;
33
- this._events[event] = this._events[event].filter(l => l !== listener);
35
+ this._events[_event] = this._events[_event].filter(l => l !== listener);
34
36
  }
35
37
  /**
36
38
  * Emits an event
37
- * @param {string} event - event name
38
- * @param {...any} args - arguments to be passed to listeners
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 {string} event - event name
52
+ * @param {K} event - event name
51
53
  */
52
54
  listenerCount(event) {
53
55
  return this._events[event]?.length || 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wxn0brp/event-emitter",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "author": "wxn0brP",
@@ -30,4 +30,4 @@
30
30
  "default": "./dist/*.js"
31
31
  }
32
32
  }
33
- }
33
+ }