@anephenix/event-emitter 0.0.13 → 0.0.15

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
@@ -108,6 +108,20 @@ emitter.emit("join", "Alice");
108
108
  This will help with preventing the misspelling of event names and also ensuring
109
109
  that the event data payloads are correct.
110
110
 
111
+ ## Applying multiple event names for the same listener
112
+
113
+ If you find that you have multiple event names calling the same function, and
114
+ you would like to DRY up your code a bit, you can pass the event names in an
115
+ array to the `on` function like this:
116
+
117
+ ```typescript
118
+ emitter.on(['user-join', 'bot-join'], (username:string) => {
119
+ console.log(`${username} joined`);
120
+ });
121
+ ```
122
+
123
+ It also works for `off` calls as well.
124
+
111
125
  ## Tests
112
126
 
113
127
  You can run the unit tests using this command:
@@ -118,4 +132,4 @@ npm t
118
132
 
119
133
  ## Licence and Credits
120
134
 
121
- ©2025 Anephenix OÜ. EventEmitter is licenced under the MIT licence.
135
+ ©2025 Anephenix Ltd. EventEmitter is licenced under the MIT licence.
@@ -5,8 +5,8 @@ declare class EventEmitter<T extends EventMap> {
5
5
  };
6
6
  enableLogging: boolean;
7
7
  log(...args: unknown[]): void;
8
- on<K extends keyof T>(event: K, listener: T[K]): void;
9
- off<K extends keyof T>(event: K, listener: T[K]): void;
8
+ on<K extends keyof T>(event: K | K[], listener: T[K]): void;
9
+ off<K extends keyof T>(event: K | K[], listener: T[K]): void;
10
10
  emit<K extends keyof T>(event: K, ...args: Parameters<T[K]>): void;
11
11
  }
12
12
  export default EventEmitter;
@@ -9,12 +9,24 @@ class EventEmitter {
9
9
  }
10
10
  }
11
11
  on(event, listener) {
12
+ if (Array.isArray(event)) {
13
+ for (const ev of event) {
14
+ this.on(ev, listener);
15
+ }
16
+ return;
17
+ }
12
18
  if (!this.events[event]) {
13
19
  this.events[event] = [];
14
20
  }
15
21
  this.events[event].push(listener);
16
22
  }
17
23
  off(event, listener) {
24
+ if (Array.isArray(event)) {
25
+ for (const ev of event) {
26
+ this.off(ev, listener);
27
+ }
28
+ return;
29
+ }
18
30
  const listeners = this.events[event];
19
31
  if (!listeners)
20
32
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../src/EventEmitter.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY;IAAlB;QACC,WAAM,GAAgC,EAAE,CAAC;QACzC,kBAAa,GAAG,KAAK,CAAC;IA6BvB,CAAC;IA3BA,GAAG,CAAC,GAAG,IAAe;QACrB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED,EAAE,CAAoB,KAAQ,EAAE,QAAc;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAoB,KAAQ,EAAE,QAAc;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAoB,KAAQ,EAAE,GAAG,IAAsB;QAC1D,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;CACD;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../src/EventEmitter.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY;IAAlB;QACC,WAAM,GAAgC,EAAE,CAAC;QACzC,kBAAa,GAAG,KAAK,CAAC;IAyCvB,CAAC;IAvCA,GAAG,CAAC,GAAG,IAAe;QACrB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED,EAAE,CAAoB,KAAc,EAAE,QAAc;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvB,CAAC;YACD,OAAO;QACR,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAoB,KAAc,EAAE,QAAc;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACxB,CAAC;YACD,OAAO;QACR,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAoB,KAAQ,EAAE,GAAG,IAAsB;QAC1D,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;CACD;AAED,eAAe,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anephenix/event-emitter",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "A small EventEmitter library",
5
5
  "author": "Paul Jensen <paul@anephenix.com>",
6
6
  "maintainers": [
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "files": [
34
34
  "dist",
35
- "src"
35
+ "README.md"
36
36
  ],
37
37
  "scripts": {
38
38
  "build": "tsc --project tsconfig.json",
@@ -55,14 +55,14 @@
55
55
  ],
56
56
  "devDependencies": {
57
57
  "@biomejs/biome": "^2.0.6",
58
- "@size-limit/esbuild-why": "^11.2.0",
59
- "@size-limit/preset-small-lib": "^11.2.0",
58
+ "@size-limit/esbuild-why": "^12.0.0",
59
+ "@size-limit/preset-small-lib": "^12.0.0",
60
60
  "@types/node": "^24.0.13",
61
- "@vitest/coverage-v8": "^3.1.3",
61
+ "@vitest/coverage-v8": "^4.0.1",
62
62
  "husky": "^9.1.7",
63
63
  "publint": "^0.3.14",
64
- "size-limit": "^11.2.0",
64
+ "size-limit": "^12.0.0",
65
65
  "typescript": "^5.8.3",
66
- "vitest": "^3.1.3"
66
+ "vitest": "^4.0.1"
67
67
  }
68
68
  }
@@ -1,37 +0,0 @@
1
- // Generic type for an event map where each key has a listener signature
2
- export type EventMap = Record<string, (...args: unknown[]) => void>;
3
-
4
- class EventEmitter<T extends EventMap> {
5
- events: { [K in keyof T]?: T[K][] } = {};
6
- enableLogging = false;
7
-
8
- log(...args: unknown[]) {
9
- if (this.enableLogging) {
10
- console.log(...args);
11
- }
12
- }
13
-
14
- on<K extends keyof T>(event: K, listener: T[K]): void {
15
- if (!this.events[event]) {
16
- this.events[event] = [];
17
- }
18
- this.events[event].push(listener);
19
- }
20
-
21
- off<K extends keyof T>(event: K, listener: T[K]): void {
22
- const listeners = this.events[event];
23
- if (!listeners) return;
24
- this.events[event] = listeners.filter((l) => l !== listener);
25
- }
26
-
27
- emit<K extends keyof T>(event: K, ...args: Parameters<T[K]>): void {
28
- this.log("Emitting event:", event, "with args:", ...args);
29
- const listeners = this.events[event];
30
- if (!listeners) return;
31
- for (const listener of listeners) {
32
- listener(...args);
33
- }
34
- }
35
- }
36
-
37
- export default EventEmitter;
package/src/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export type { EventMap } from "./EventEmitter.js";
2
- export { default } from "./EventEmitter.js";