@irrelon/emitter 6.1.0 → 6.2.0

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.
@@ -1,6 +1,12 @@
1
1
  import { jest } from "@jest/globals";
2
2
  import assert from "assert";
3
- import { Emitter, EmitterEventsInterface, EventListenerCallback, ListenerReturnFlag } from "../src/Emitter";
3
+ import {
4
+ Emitter,
5
+ EmitterEventsInterface,
6
+ EmitterEventsWithStar,
7
+ EventListenerCallback,
8
+ ListenerReturnFlag
9
+ } from "../src/Emitter";
4
10
 
5
11
  let expectedAssertions = 0;
6
12
  let actualAssertions = 0;
@@ -34,7 +40,8 @@ describe("Emitter", () => {
34
40
  it("Creates emitter instance by instantiation", () => {
35
41
  const myClass = new Emitter();
36
42
 
37
- myClass.on("moo", () => {});
43
+ myClass.on("moo", () => {
44
+ });
38
45
 
39
46
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listener registered on event");
40
47
 
@@ -42,8 +49,8 @@ describe("Emitter", () => {
42
49
 
43
50
  assert.strictEqual(
44
51
  !myClass._eventListeners?.moo ||
45
- !myClass._eventListeners.moo["*"] ||
46
- myClass._eventListeners.moo["*"].length,
52
+ !myClass._eventListeners.moo["*"] ||
53
+ myClass._eventListeners.moo["*"].length,
47
54
  true,
48
55
  "Listeners all removed from event"
49
56
  );
@@ -52,8 +59,8 @@ describe("Emitter", () => {
52
59
  it("Supports extending Emitter as a base class", () => {
53
60
  // Test extending Emitter and modifying base functionality
54
61
  class MyClass extends Emitter {
55
- on(eventName: string, id: string, listener: EventListenerCallback): this;
56
- on(eventName: string, listener: EventListenerCallback): this;
62
+ on (eventName: string, id: string, listener: EventListenerCallback): this;
63
+ on (eventName: string, listener: EventListenerCallback): this;
57
64
  on (eventName: string, ...rest: any[]): this {
58
65
  const restTypes = rest.map((arg) => typeof arg);
59
66
 
@@ -72,9 +79,9 @@ describe("Emitter", () => {
72
79
  return super.emitId(eventName, "^^noId", ...rest);
73
80
  }
74
81
 
75
- off(eventName: string, id: string, listener?: EventListenerCallback): this;
76
- off(eventName: string, listener?: EventListenerCallback): this;
77
- off(eventName: string): this;
82
+ off (eventName: string, id: string, listener?: EventListenerCallback): this;
83
+ off (eventName: string, listener?: EventListenerCallback): this;
84
+ off (eventName: string): this;
78
85
  off (eventName: string, ...rest: any[]) {
79
86
  let id = rest[0];
80
87
  let func = rest[1];
@@ -113,22 +120,22 @@ describe("Emitter", () => {
113
120
 
114
121
  assert.strictEqual(
115
122
  !myClass._eventListeners?.moo ||
116
- !myClass._eventListeners?.moo["testId"] ||
117
- (myClass._eventListeners?.moo["testId"].length as number) === 0,
123
+ !myClass._eventListeners?.moo["testId"] ||
124
+ (myClass._eventListeners?.moo["testId"].length as number) === 0,
118
125
  true,
119
126
  "Listeners all removed from event"
120
127
  );
121
128
  assert.strictEqual(
122
129
  myClass._eventListeners?.moo &&
123
- myClass._eventListeners?.moo["^^noId"] &&
124
- myClass._eventListeners?.moo["^^noId"].length === 1,
130
+ myClass._eventListeners?.moo["^^noId"] &&
131
+ myClass._eventListeners?.moo["^^noId"].length === 1,
125
132
  true,
126
133
  "Global listener still there"
127
134
  );
128
135
  assert.strictEqual(
129
136
  !myClass._eventListeners?.moo ||
130
- !myClass._eventListeners?.moo["*"] ||
131
- myClass._eventListeners?.moo["*"].length === 0,
137
+ !myClass._eventListeners?.moo["*"] ||
138
+ myClass._eventListeners?.moo["*"].length === 0,
132
139
  true,
133
140
  "Global listener still there"
134
141
  );
@@ -137,8 +144,8 @@ describe("Emitter", () => {
137
144
 
138
145
  assert.strictEqual(
139
146
  !myClass._eventListeners?.moo ||
140
- !myClass._eventListeners?.moo["*"] ||
141
- myClass._eventListeners?.moo["*"].length === 0,
147
+ !myClass._eventListeners?.moo["*"] ||
148
+ myClass._eventListeners?.moo["*"].length === 0,
142
149
  true,
143
150
  "Listeners all removed from event"
144
151
  );
@@ -147,199 +154,203 @@ describe("Emitter", () => {
147
154
 
148
155
  describe("emit()", () => {
149
156
  it("Supports type safe usage", async () => {
150
- interface MyEventsResponses {
151
- post: () => Promise<void>;
152
- person: (name: string, age: number, enabled: boolean) => Promise<string>;
153
- house: (no: number, street: string, postcode: string, enabled: boolean) => void;
154
- }
155
-
156
- const emitter = new Emitter<MyEventsResponses>();
157
- let listenerFiredCount = 0;
158
-
159
- emitter.on("person", (name) => {
160
- return new Promise<string>((resolve) => {
161
- setTimeout(() => {
162
- listenerFiredCount++;
163
- resolve(name);
164
- }, 1000);
165
- });
166
- });
167
-
168
- emitter.on("post", () => {
169
- return new Promise<void>((resolve) => {
170
- setTimeout(() => {
171
- listenerFiredCount++;
172
- resolve();
173
- }, 1000);
174
- });
175
- });
176
-
177
- emitter.on("post", () => {
178
- return new Promise<void>((resolve) => {
179
- setTimeout(() => {
180
- listenerFiredCount++;
181
- resolve();
182
- }, 1000);
183
- });
184
- });
185
-
186
- const time = new Date().getTime();
187
- await Promise.all(emitter.emit("post"));
188
- const delta = new Date().getTime() - time;
189
-
190
- assert.ok(delta > 900, `Delta was not correct, await may not have paused? Delta was: ${delta}`);
191
- assert.ok(
192
- listenerFiredCount === 2,
193
- `listenerFiredCount was not correct, await may not have paused? listenerFiredCount was: ${listenerFiredCount}`
194
- );
157
+ interface MyEventsResponses {
158
+ post: () => Promise<void>;
159
+ person: (name: string, age: number, enabled: boolean) => Promise<string>;
160
+ house: (no: number, street: string, postcode: string, enabled: boolean) => void;
161
+ }
162
+
163
+ const emitter = new Emitter<MyEventsResponses>();
164
+ let listenerFiredCount = 0;
165
+
166
+ emitter.on("person", (name) => {
167
+ return new Promise<string>((resolve) => {
168
+ setTimeout(() => {
169
+ listenerFiredCount++;
170
+ resolve(name);
171
+ }, 1000);
172
+ });
173
+ });
174
+
175
+ emitter.on("post", () => {
176
+ return new Promise<void>((resolve) => {
177
+ setTimeout(() => {
178
+ listenerFiredCount++;
179
+ resolve();
180
+ }, 1000);
181
+ });
182
+ });
183
+
184
+ emitter.on("post", () => {
185
+ return new Promise<void>((resolve) => {
186
+ setTimeout(() => {
187
+ listenerFiredCount++;
188
+ resolve();
189
+ }, 1000);
190
+ });
191
+ });
192
+
193
+ const time = new Date().getTime();
194
+ await Promise.all(emitter.emit("post"));
195
+ const delta = new Date().getTime() - time;
196
+
197
+ assert.ok(delta > 900, `Delta was not correct, await may not have paused? Delta was: ${delta}`);
198
+ assert.ok(
199
+ listenerFiredCount === 2,
200
+ `listenerFiredCount was not correct, await may not have paused? listenerFiredCount was: ${listenerFiredCount}`
201
+ );
195
202
  });
196
203
 
197
204
  it("Supports awaiting async listeners", async () => {
198
- interface TestEvents {
199
- foo: () => Promise<void>;
200
- }
201
-
202
- const emitter = new Emitter<EmitterEventsInterface<TestEvents>>();
203
- let listenerFiredCount = 0;
204
-
205
- emitter.on("foo", async () => {
206
- return new Promise<void>((resolve) => {
207
- setTimeout(() => {
208
- listenerFiredCount++;
209
- resolve();
210
- }, 1000);
211
- });
212
- });
213
-
214
- emitter.on("foo", async () => {
215
- return new Promise<void>((resolve) => {
216
- setTimeout(() => {
217
- listenerFiredCount++;
218
- resolve();
219
- }, 1000);
220
- });
221
- });
222
-
223
- const time = new Date().getTime();
224
- await Promise.all(emitter.emit("foo"));
225
- const delta = new Date().getTime() - time;
226
-
227
- assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
228
- assert.strictEqual(listenerFiredCount, 2, "Listener fire count was incorect");
205
+ interface TestEvents {
206
+ foo: () => Promise<void>;
207
+ }
208
+
209
+ const emitter = new Emitter<EmitterEventsInterface<TestEvents>>();
210
+ let listenerFiredCount = 0;
211
+
212
+ emitter.on("foo", async () => {
213
+ return new Promise<void>((resolve) => {
214
+ setTimeout(() => {
215
+ listenerFiredCount++;
216
+ resolve();
217
+ }, 1000);
218
+ });
219
+ });
220
+
221
+ emitter.on("foo", async () => {
222
+ return new Promise<void>((resolve) => {
223
+ setTimeout(() => {
224
+ listenerFiredCount++;
225
+ resolve();
226
+ }, 1000);
227
+ });
228
+ });
229
+
230
+ const time = new Date().getTime();
231
+ await Promise.all(emitter.emit("foo"));
232
+ const delta = new Date().getTime() - time;
233
+
234
+ assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
235
+ assert.strictEqual(listenerFiredCount, 2, "Listener fire count was incorect");
229
236
  });
230
237
 
231
238
  it("Supports awaiting async and non-async listener return data", async () => {
232
- interface MyTestEvents {
233
- foo: () => string | Promise<string>;
234
- }
235
-
236
- const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
237
- let listenerFiredCount = 0;
238
-
239
- emitter.on("foo", () => {
240
- return new Promise<string>((resolve) => {
241
- setTimeout(() => {
242
- listenerFiredCount++;
243
- resolve("Foo1 Return Value");
244
- }, 1000);
245
- });
246
- });
247
-
248
- emitter.on("foo", () => {
249
- return "Foo2 Return Value";
250
- });
251
-
252
- const time = new Date().getTime();
253
- const results: string[] = await Promise.all(emitter.emit("foo"));
254
- const delta = new Date().getTime() - time;
255
-
256
- assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
257
- assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
258
- assert.strictEqual(results[0], "Foo1 Return Value", "Return data for foo1 was not correct");
259
- assert.strictEqual(results[1], "Foo2 Return Value", "Return data for foo2 was not correct");
239
+ interface MyTestEvents {
240
+ foo: () => string | Promise<string>;
241
+ }
242
+
243
+ const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
244
+ let listenerFiredCount = 0;
245
+
246
+ emitter.on("foo", () => {
247
+ return new Promise<string>((resolve) => {
248
+ setTimeout(() => {
249
+ listenerFiredCount++;
250
+ resolve("Foo1 Return Value");
251
+ }, 1000);
252
+ });
253
+ });
254
+
255
+ emitter.on("foo", () => {
256
+ return "Foo2 Return Value";
257
+ });
258
+
259
+ const time = new Date().getTime();
260
+ const results: string[] = await Promise.all(emitter.emit("foo"));
261
+ const delta = new Date().getTime() - time;
262
+
263
+ assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
264
+ assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
265
+ assert.strictEqual(results[0], "Foo1 Return Value", "Return data for foo1 was not correct");
266
+ assert.strictEqual(results[1], "Foo2 Return Value", "Return data for foo2 was not correct");
260
267
  });
261
268
 
262
269
  it("Supports awaiting async and non-async rpc listener return data", async () => {
263
- interface MyTestEvents {
264
- foo1: () => string | Promise<string>;
265
- foo2: () => string;
266
- }
267
-
268
- const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
269
- let listenerFiredCount = 0;
270
-
271
- emitter.on("foo1", () => {
272
- return new Promise<string>((resolve) => {
273
- setTimeout(() => {
274
- listenerFiredCount++;
275
- resolve("Foo1 Return Value");
276
- }, 1000);
277
- });
278
- });
279
-
280
- emitter.on("foo2", () => {
281
- return "Foo2 Return Value";
282
- });
283
-
284
- const time = new Date().getTime();
285
- const result1 = await emitter.rpc("foo1");
286
- const result2 = emitter.rpc("foo2");
287
- const delta = new Date().getTime() - time;
288
-
289
- assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
290
- assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
291
- assert.strictEqual(result1, "Foo1 Return Value", "Return data for foo1 was not correct");
292
- assert.strictEqual(result2, "Foo2 Return Value", "Return data for foo2 was not correct");
270
+ interface MyTestEvents {
271
+ foo1: () => string | Promise<string>;
272
+ foo2: () => string;
273
+ }
274
+
275
+ const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
276
+ let listenerFiredCount = 0;
277
+
278
+ emitter.on("foo1", () => {
279
+ return new Promise<string>((resolve) => {
280
+ setTimeout(() => {
281
+ listenerFiredCount++;
282
+ resolve("Foo1 Return Value");
283
+ }, 1000);
284
+ });
285
+ });
286
+
287
+ emitter.on("foo2", () => {
288
+ return "Foo2 Return Value";
289
+ });
290
+
291
+ const time = new Date().getTime();
292
+ const result1 = await emitter.rpc("foo1");
293
+ const result2 = emitter.rpc("foo2");
294
+ const delta = new Date().getTime() - time;
295
+
296
+ assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
297
+ assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
298
+ assert.strictEqual(result1, "Foo1 Return Value", "Return data for foo1 was not correct");
299
+ assert.strictEqual(result2, "Foo2 Return Value", "Return data for foo2 was not correct");
293
300
  });
294
301
 
295
302
  it("Supports responding with a cancellation signal", async () => {
296
- interface MyTestEvents {
297
- foo: () => string | ListenerReturnFlag;
298
- }
303
+ interface MyTestEvents {
304
+ foo: () => string | ListenerReturnFlag;
305
+ }
299
306
 
300
- const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
301
- let listenerFiredCount = 0;
307
+ const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
308
+ let listenerFiredCount = 0;
302
309
 
303
- emitter.on("foo", () => {
304
- listenerFiredCount++;
305
- return "Foo1 Return Value";
306
- });
310
+ emitter.on("foo", () => {
311
+ listenerFiredCount++;
312
+ return "Foo1 Return Value";
313
+ });
307
314
 
308
- emitter.on("foo", () => {
309
- listenerFiredCount++;
315
+ emitter.on("foo", () => {
316
+ listenerFiredCount++;
310
317
 
311
- // This listener will respond with a cancellation, this should terminate further listener calls
312
- return ListenerReturnFlag.cancel;
313
- });
318
+ // This listener will respond with a cancellation, this should terminate further listener calls
319
+ return ListenerReturnFlag.cancel;
320
+ });
314
321
 
315
- emitter.on("foo", () => {
316
- listenerFiredCount++;
317
- return "Foo3 Return Value";
318
- });
322
+ emitter.on("foo", () => {
323
+ listenerFiredCount++;
324
+ return "Foo3 Return Value";
325
+ });
319
326
 
320
- emitter.on("foo", () => {
321
- listenerFiredCount++;
322
- return "Foo4 Return Value";
323
- });
327
+ emitter.on("foo", () => {
328
+ listenerFiredCount++;
329
+ return "Foo4 Return Value";
330
+ });
324
331
 
325
- const results = emitter.emit("foo");
332
+ const results = emitter.emit("foo");
326
333
 
327
- assert.ok(listenerFiredCount === 2, "listenerFiredCount was not correct, await may not have been used?");
328
- assert.strictEqual(results[0], "Foo1 Return Value", "Return data should be a cancel flag");
329
- assert.strictEqual(results[1], ListenerReturnFlag.cancel, "Return data should be a cancel flag");
330
- assert.ok(emitter.didCancel(results), "didCancel should detect a cancel flag");
334
+ assert.ok(listenerFiredCount === 2, "listenerFiredCount was not correct, await may not have been used?");
335
+ assert.strictEqual(results[0], "Foo1 Return Value", "Return data should be a cancel flag");
336
+ assert.strictEqual(results[1], ListenerReturnFlag.cancel, "Return data should be a cancel flag");
337
+ assert.ok(emitter.didCancel(results), "didCancel should detect a cancel flag");
331
338
  });
332
339
  });
333
340
 
334
341
  describe("off()", () => {
335
342
  it("Cancels all listeners (event)", () => {
336
343
  const myClass = new Emitter();
337
- const listener1 = () => {};
338
- const listener2 = () => {};
344
+ const listener1 = () => {
345
+ };
346
+ const listener2 = () => {
347
+ };
339
348
 
340
- myClass.on("moo", () => {});
349
+ myClass.on("moo", () => {
350
+ });
341
351
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
342
- myClass.on("moo", "testId", () => {});
352
+ myClass.on("moo", "testId", () => {
353
+ });
343
354
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
344
355
  myClass.on("moo", listener1);
345
356
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -350,8 +361,8 @@ describe("Emitter", () => {
350
361
 
351
362
  assert.strictEqual(
352
363
  !myClass._eventListeners?.moo ||
353
- (myClass._eventListeners?.moo["*"].length === 0 &&
354
- myClass._eventListeners?.moo["testId"].length === 0),
364
+ (myClass._eventListeners?.moo["*"].length === 0 &&
365
+ myClass._eventListeners?.moo["testId"].length === 0),
355
366
  true,
356
367
  "Listeners all removed from event"
357
368
  );
@@ -359,12 +370,16 @@ describe("Emitter", () => {
359
370
 
360
371
  it("Cancels id-based listeners (event, id)", () => {
361
372
  const myClass = new Emitter();
362
- const listener1 = () => {};
363
- const listener2 = () => {};
373
+ const listener1 = () => {
374
+ };
375
+ const listener2 = () => {
376
+ };
364
377
 
365
- myClass.on("moo", () => {});
378
+ myClass.on("moo", () => {
379
+ });
366
380
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
367
- myClass.on("moo", "testId", () => {});
381
+ myClass.on("moo", "testId", () => {
382
+ });
368
383
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
369
384
  myClass.on("moo", listener1);
370
385
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -387,12 +402,16 @@ describe("Emitter", () => {
387
402
 
388
403
  it("Cancels listener-based listeners (event, listener)", () => {
389
404
  const myClass = new Emitter();
390
- const listener1 = () => {};
391
- const listener2 = () => {};
405
+ const listener1 = () => {
406
+ };
407
+ const listener2 = () => {
408
+ };
392
409
 
393
- myClass.on("moo", () => {});
410
+ myClass.on("moo", () => {
411
+ });
394
412
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
395
- myClass.on("moo", "testId", () => {});
413
+ myClass.on("moo", "testId", () => {
414
+ });
396
415
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
397
416
  myClass.on("moo", listener1);
398
417
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -415,12 +434,16 @@ describe("Emitter", () => {
415
434
 
416
435
  it("Cancels id-based + listener-based listeners (event, id, listener)", () => {
417
436
  const myClass = new Emitter();
418
- const listener1 = () => {};
419
- const listener2 = () => {};
437
+ const listener1 = () => {
438
+ };
439
+ const listener2 = () => {
440
+ };
420
441
 
421
- myClass.on("moo", () => {});
442
+ myClass.on("moo", () => {
443
+ });
422
444
  assert.strictEqual(myClass._eventListeners?.moo!["*"].length, 1, "Listeners registered on event");
423
- myClass.on("moo", "testId", () => {});
445
+ myClass.on("moo", "testId", () => {
446
+ });
424
447
  assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
425
448
  myClass.on("moo", listener1);
426
449
  assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
@@ -444,7 +467,8 @@ describe("Emitter", () => {
444
467
 
445
468
  describe("emitStatic()", () => {
446
469
  it("Static emitter will emit when a new listener is added", (resolve) => {
447
- class MyClass extends Emitter {}
470
+ class MyClass extends Emitter {
471
+ }
448
472
 
449
473
  expectAssertionCount(1);
450
474
 
@@ -460,7 +484,8 @@ describe("Emitter", () => {
460
484
 
461
485
  describe("cancelStatic()", () => {
462
486
  it("Removes static emitter", (resolve) => {
463
- class MyClass extends Emitter {}
487
+ class MyClass extends Emitter {
488
+ }
464
489
 
465
490
  expectAssertionCount(1);
466
491
 
@@ -485,7 +510,8 @@ describe("Emitter", () => {
485
510
 
486
511
  describe("overwrite()", () => {
487
512
  it("Only fires the last listener added, cancelling all other listeners before it", (resolve) => {
488
- class MyClass extends Emitter {}
513
+ class MyClass extends Emitter {
514
+ }
489
515
 
490
516
  expectAssertionCount(1);
491
517
 
@@ -510,7 +536,8 @@ describe("Emitter", () => {
510
536
  });
511
537
 
512
538
  it("Only fires the last listener added (with id), cancelling all other listeners before it", (resolve) => {
513
- class MyClass extends Emitter {}
539
+ class MyClass extends Emitter {
540
+ }
514
541
 
515
542
  expectAssertionCount(2);
516
543
 
@@ -571,15 +598,15 @@ describe("Emitter", () => {
571
598
 
572
599
  assert.strictEqual(
573
600
  !myClass._eventListeners?.moo ||
574
- !myClass._eventListeners?.moo["testId"] ||
575
- myClass._eventListeners?.moo["testId"].length,
601
+ !myClass._eventListeners?.moo["testId"] ||
602
+ myClass._eventListeners?.moo["testId"].length,
576
603
  true,
577
604
  "Listeners all removed from event"
578
605
  );
579
606
  assert.strictEqual(
580
607
  myClass._eventListeners?.moo &&
581
- myClass._eventListeners?.moo["*"] &&
582
- myClass._eventListeners?.moo["*"].length === 1,
608
+ myClass._eventListeners?.moo["*"] &&
609
+ myClass._eventListeners?.moo["*"].length === 1,
583
610
  true,
584
611
  "Global listener still there"
585
612
  );
@@ -588,8 +615,8 @@ describe("Emitter", () => {
588
615
 
589
616
  assert.strictEqual(
590
617
  !myClass._eventListeners?.moo ||
591
- !myClass._eventListeners?.moo["*"] ||
592
- myClass._eventListeners?.moo["*"].length === 0,
618
+ !myClass._eventListeners?.moo["*"] ||
619
+ myClass._eventListeners?.moo["*"].length === 0,
593
620
  true,
594
621
  "Listeners all removed from event"
595
622
  );
@@ -597,8 +624,12 @@ describe("Emitter", () => {
597
624
  });
598
625
 
599
626
  describe("Global listener functionality", () => {
627
+ interface MyEvents {
628
+ someEvent: (arg1: string, arg2: boolean, arg3: boolean) => void;
629
+ }
630
+
600
631
  it("Listens for any event emitted and fires the listener with the onAny() function", () => {
601
- const emitter = new Emitter();
632
+ const emitter = new Emitter<MyEvents>();
602
633
 
603
634
  const spy = jest.fn();
604
635
 
@@ -610,7 +641,7 @@ describe("Emitter", () => {
610
641
  });
611
642
 
612
643
  it(`Listens for any event emitted and fires the listener with the on("*") function`, () => {
613
- const emitter = new Emitter();
644
+ const emitter = new Emitter<EmitterEventsWithStar<MyEvents>>();
614
645
 
615
646
  const spy = jest.fn();
616
647
 
@@ -622,7 +653,7 @@ describe("Emitter", () => {
622
653
  });
623
654
 
624
655
  it(`Cancels an event listener for any event emitted with the offAny() function`, () => {
625
- const emitter = new Emitter();
656
+ const emitter = new Emitter<EmitterEventsWithStar<MyEvents>>();
626
657
 
627
658
  const spy = jest.fn();
628
659
 
@@ -635,7 +666,7 @@ describe("Emitter", () => {
635
666
  });
636
667
 
637
668
  it(`Cancels an event listener for any event emitted with the off("*") function`, () => {
638
- const emitter = new Emitter();
669
+ const emitter = new Emitter<EmitterEventsWithStar<MyEvents>>();
639
670
 
640
671
  const spy = jest.fn();
641
672