@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.
- package/.editorconfig +8 -0
- package/dist/cjs/src/Emitter.d.ts +35 -13
- package/dist/cjs/src/Emitter.js +44 -12
- package/dist/cjs/tests/Emitter.test.js +34 -17
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/esm/src/Emitter.d.ts +35 -13
- package/dist/esm/src/Emitter.js +46 -11
- package/dist/esm/tests/Emitter.test.js +34 -17
- package/dist/esm/tsconfig-esm.tsbuildinfo +1 -1
- package/doc/Emitter.html +451 -1551
- package/doc/Emitter.js.html +601 -850
- package/doc/index.html +1 -1
- package/doc/scripts/linenumber.js +9 -9
- package/doc/styles/jsdoc-default.css +2 -2
- package/package.json +59 -57
- package/readme.md +10 -1
- package/src/Emitter.d.ts +290 -0
- package/src/Emitter.js +600 -0
- package/src/Emitter.ts +307 -329
- package/tests/Emitter.test.d.ts +1 -0
- package/tests/Emitter.test.js +472 -0
- package/tests/Emitter.test.ts +241 -210
- package/tsconfig.json +8 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/.prettierrc.yml +0 -26
- package/doc/deferEmit.html +0 -258
- package/doc/emitStatic.html +0 -444
- package/doc/emitStaticId.html +0 -685
- package/doc/global.html +0 -991
- package/doc/global.html#emit +0 -442
- package/doc/off.html +0 -857
- package/doc/on.html +0 -453
- package/doc/once.html +0 -453
- package/doc/willEmit.html +0 -234
- package/doc/willEmitId.html +0 -257
package/tests/Emitter.test.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { jest } from "@jest/globals";
|
|
2
2
|
import assert from "assert";
|
|
3
|
-
import {
|
|
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
|
-
|
|
46
|
-
|
|
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
|
-
|
|
117
|
-
|
|
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
|
-
|
|
124
|
-
|
|
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
|
-
|
|
131
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
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
|
-
|
|
297
|
-
|
|
298
|
-
|
|
303
|
+
interface MyTestEvents {
|
|
304
|
+
foo: () => string | ListenerReturnFlag;
|
|
305
|
+
}
|
|
299
306
|
|
|
300
|
-
|
|
301
|
-
|
|
307
|
+
const emitter = new Emitter<EmitterEventsInterface<MyTestEvents>>();
|
|
308
|
+
let listenerFiredCount = 0;
|
|
302
309
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
310
|
+
emitter.on("foo", () => {
|
|
311
|
+
listenerFiredCount++;
|
|
312
|
+
return "Foo1 Return Value";
|
|
313
|
+
});
|
|
307
314
|
|
|
308
|
-
|
|
309
|
-
|
|
315
|
+
emitter.on("foo", () => {
|
|
316
|
+
listenerFiredCount++;
|
|
310
317
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
318
|
+
// This listener will respond with a cancellation, this should terminate further listener calls
|
|
319
|
+
return ListenerReturnFlag.cancel;
|
|
320
|
+
});
|
|
314
321
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
322
|
+
emitter.on("foo", () => {
|
|
323
|
+
listenerFiredCount++;
|
|
324
|
+
return "Foo3 Return Value";
|
|
325
|
+
});
|
|
319
326
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
327
|
+
emitter.on("foo", () => {
|
|
328
|
+
listenerFiredCount++;
|
|
329
|
+
return "Foo4 Return Value";
|
|
330
|
+
});
|
|
324
331
|
|
|
325
|
-
|
|
332
|
+
const results = emitter.emit("foo");
|
|
326
333
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
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
|
-
|
|
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
|
-
|
|
354
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
575
|
-
|
|
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
|
-
|
|
582
|
-
|
|
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
|
-
|
|
592
|
-
|
|
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
|
|