@irrelon/emitter 6.0.1 → 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 +4 -7
- package/dist/cjs/src/Emitter.d.ts +51 -14
- package/dist/cjs/src/Emitter.js +83 -29
- package/dist/cjs/tests/Emitter.test.js +77 -30
- package/dist/cjs/tsconfig-cjs.tsbuildinfo +1 -1
- package/dist/esm/src/Emitter.d.ts +51 -14
- package/dist/esm/src/Emitter.js +83 -26
- package/dist/esm/tests/Emitter.test.js +77 -30
- 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/eslint.config.mjs +42 -0
- package/jest.config.js +7 -0
- package/package.json +18 -27
- package/readme.md +10 -1
- package/src/Emitter.d.ts +290 -0
- package/src/Emitter.js +600 -0
- package/src/Emitter.ts +167 -161
- package/tests/Emitter.test.d.ts +1 -0
- package/tests/Emitter.test.js +472 -0
- package/tests/Emitter.test.ts +143 -64
- 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/{.eslintrc.json → eslint.json} +0 -0
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jest } from "@jest/globals";
|
|
11
|
+
import assert from "assert";
|
|
12
|
+
import { Emitter, ListenerReturnFlag } from "../src/Emitter";
|
|
13
|
+
let expectedAssertions = 0;
|
|
14
|
+
let actualAssertions = 0;
|
|
15
|
+
function expectAssertionCount(val) {
|
|
16
|
+
expectedAssertions = val;
|
|
17
|
+
}
|
|
18
|
+
function resetAssertionCount() {
|
|
19
|
+
expectedAssertions = 0;
|
|
20
|
+
actualAssertions = 0;
|
|
21
|
+
}
|
|
22
|
+
function countAssertion() {
|
|
23
|
+
actualAssertions++;
|
|
24
|
+
}
|
|
25
|
+
function checkAssertionCount() {
|
|
26
|
+
if (expectedAssertions === undefined || expectedAssertions === actualAssertions) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
throw new Error("expected " + expectedAssertions + " assertions, got " + actualAssertions);
|
|
30
|
+
}
|
|
31
|
+
beforeEach(resetAssertionCount);
|
|
32
|
+
afterEach(checkAssertionCount);
|
|
33
|
+
describe("Emitter", () => {
|
|
34
|
+
describe("new Emitter()", () => {
|
|
35
|
+
it("Creates emitter instance by instantiation", () => {
|
|
36
|
+
var _a, _b;
|
|
37
|
+
const myClass = new Emitter();
|
|
38
|
+
myClass.on("moo", () => {
|
|
39
|
+
});
|
|
40
|
+
assert.strictEqual((_a = myClass._eventListeners) === null || _a === void 0 ? void 0 : _a.moo["*"].length, 1, "Listener registered on event");
|
|
41
|
+
myClass.off("moo");
|
|
42
|
+
assert.strictEqual(!((_b = myClass._eventListeners) === null || _b === void 0 ? void 0 : _b.moo) ||
|
|
43
|
+
!myClass._eventListeners.moo["*"] ||
|
|
44
|
+
myClass._eventListeners.moo["*"].length, true, "Listeners all removed from event");
|
|
45
|
+
});
|
|
46
|
+
it("Supports extending Emitter as a base class", () => {
|
|
47
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
48
|
+
// Test extending Emitter and modifying base functionality
|
|
49
|
+
class MyClass extends Emitter {
|
|
50
|
+
on(eventName, ...rest) {
|
|
51
|
+
const restTypes = rest.map((arg) => typeof arg);
|
|
52
|
+
if (restTypes[0] === "function") {
|
|
53
|
+
const listener = restTypes[0];
|
|
54
|
+
const id = "^^noId";
|
|
55
|
+
return super.on(eventName, id, listener);
|
|
56
|
+
}
|
|
57
|
+
return super.on(eventName, rest[0], rest[1]);
|
|
58
|
+
}
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
emit(eventName, ...rest) {
|
|
61
|
+
return super.emitId(eventName, "^^noId", ...rest);
|
|
62
|
+
}
|
|
63
|
+
off(eventName, ...rest) {
|
|
64
|
+
let id = rest[0];
|
|
65
|
+
let func = rest[1];
|
|
66
|
+
if (typeof rest[0] === "function") {
|
|
67
|
+
func = rest[0];
|
|
68
|
+
id = "^^noId";
|
|
69
|
+
}
|
|
70
|
+
else if (typeof id === "undefined") {
|
|
71
|
+
id = "^^noId";
|
|
72
|
+
}
|
|
73
|
+
return super.off(eventName, id, func);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const myClass = new MyClass();
|
|
77
|
+
let emitCount = 0;
|
|
78
|
+
// Register id-based listener
|
|
79
|
+
myClass.on("moo", "testId", () => {
|
|
80
|
+
emitCount++;
|
|
81
|
+
});
|
|
82
|
+
// Register non-id-based listener
|
|
83
|
+
myClass.on("moo", () => {
|
|
84
|
+
emitCount++;
|
|
85
|
+
});
|
|
86
|
+
assert.strictEqual((_a = myClass._eventListeners) === null || _a === void 0 ? void 0 : _a.moo["testId"].length, 1, "Listener registered on event");
|
|
87
|
+
myClass.emitId("moo", "testId", "foo");
|
|
88
|
+
assert.strictEqual(emitCount, 1, "Event fired correctly");
|
|
89
|
+
myClass.off("moo", "testId");
|
|
90
|
+
assert.strictEqual(!((_b = myClass._eventListeners) === null || _b === void 0 ? void 0 : _b.moo) ||
|
|
91
|
+
!((_c = myClass._eventListeners) === null || _c === void 0 ? void 0 : _c.moo["testId"]) ||
|
|
92
|
+
((_d = myClass._eventListeners) === null || _d === void 0 ? void 0 : _d.moo["testId"].length) === 0, true, "Listeners all removed from event");
|
|
93
|
+
assert.strictEqual(((_e = myClass._eventListeners) === null || _e === void 0 ? void 0 : _e.moo) &&
|
|
94
|
+
((_f = myClass._eventListeners) === null || _f === void 0 ? void 0 : _f.moo["^^noId"]) &&
|
|
95
|
+
((_g = myClass._eventListeners) === null || _g === void 0 ? void 0 : _g.moo["^^noId"].length) === 1, true, "Global listener still there");
|
|
96
|
+
assert.strictEqual(!((_h = myClass._eventListeners) === null || _h === void 0 ? void 0 : _h.moo) ||
|
|
97
|
+
!((_j = myClass._eventListeners) === null || _j === void 0 ? void 0 : _j.moo["*"]) ||
|
|
98
|
+
((_k = myClass._eventListeners) === null || _k === void 0 ? void 0 : _k.moo["*"].length) === 0, true, "Global listener still there");
|
|
99
|
+
myClass.off("moo");
|
|
100
|
+
assert.strictEqual(!((_l = myClass._eventListeners) === null || _l === void 0 ? void 0 : _l.moo) ||
|
|
101
|
+
!((_m = myClass._eventListeners) === null || _m === void 0 ? void 0 : _m.moo["*"]) ||
|
|
102
|
+
((_o = myClass._eventListeners) === null || _o === void 0 ? void 0 : _o.moo["*"].length) === 0, true, "Listeners all removed from event");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe("emit()", () => {
|
|
106
|
+
it("Supports type safe usage", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
107
|
+
const emitter = new Emitter();
|
|
108
|
+
let listenerFiredCount = 0;
|
|
109
|
+
emitter.on("person", (name) => {
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
setTimeout(() => {
|
|
112
|
+
listenerFiredCount++;
|
|
113
|
+
resolve(name);
|
|
114
|
+
}, 1000);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
emitter.on("post", () => {
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
setTimeout(() => {
|
|
120
|
+
listenerFiredCount++;
|
|
121
|
+
resolve();
|
|
122
|
+
}, 1000);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
emitter.on("post", () => {
|
|
126
|
+
return new Promise((resolve) => {
|
|
127
|
+
setTimeout(() => {
|
|
128
|
+
listenerFiredCount++;
|
|
129
|
+
resolve();
|
|
130
|
+
}, 1000);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
const time = new Date().getTime();
|
|
134
|
+
yield Promise.all(emitter.emit("post"));
|
|
135
|
+
const delta = new Date().getTime() - time;
|
|
136
|
+
assert.ok(delta > 900, `Delta was not correct, await may not have paused? Delta was: ${delta}`);
|
|
137
|
+
assert.ok(listenerFiredCount === 2, `listenerFiredCount was not correct, await may not have paused? listenerFiredCount was: ${listenerFiredCount}`);
|
|
138
|
+
}));
|
|
139
|
+
it("Supports awaiting async listeners", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
140
|
+
const emitter = new Emitter();
|
|
141
|
+
let listenerFiredCount = 0;
|
|
142
|
+
emitter.on("foo", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
143
|
+
return new Promise((resolve) => {
|
|
144
|
+
setTimeout(() => {
|
|
145
|
+
listenerFiredCount++;
|
|
146
|
+
resolve();
|
|
147
|
+
}, 1000);
|
|
148
|
+
});
|
|
149
|
+
}));
|
|
150
|
+
emitter.on("foo", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
151
|
+
return new Promise((resolve) => {
|
|
152
|
+
setTimeout(() => {
|
|
153
|
+
listenerFiredCount++;
|
|
154
|
+
resolve();
|
|
155
|
+
}, 1000);
|
|
156
|
+
});
|
|
157
|
+
}));
|
|
158
|
+
const time = new Date().getTime();
|
|
159
|
+
yield Promise.all(emitter.emit("foo"));
|
|
160
|
+
const delta = new Date().getTime() - time;
|
|
161
|
+
assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
|
|
162
|
+
assert.strictEqual(listenerFiredCount, 2, "Listener fire count was incorect");
|
|
163
|
+
}));
|
|
164
|
+
it("Supports awaiting async and non-async listener return data", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
165
|
+
const emitter = new Emitter();
|
|
166
|
+
let listenerFiredCount = 0;
|
|
167
|
+
emitter.on("foo", () => {
|
|
168
|
+
return new Promise((resolve) => {
|
|
169
|
+
setTimeout(() => {
|
|
170
|
+
listenerFiredCount++;
|
|
171
|
+
resolve("Foo1 Return Value");
|
|
172
|
+
}, 1000);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
emitter.on("foo", () => {
|
|
176
|
+
return "Foo2 Return Value";
|
|
177
|
+
});
|
|
178
|
+
const time = new Date().getTime();
|
|
179
|
+
const results = yield Promise.all(emitter.emit("foo"));
|
|
180
|
+
const delta = new Date().getTime() - time;
|
|
181
|
+
assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
|
|
182
|
+
assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
|
|
183
|
+
assert.strictEqual(results[0], "Foo1 Return Value", "Return data for foo1 was not correct");
|
|
184
|
+
assert.strictEqual(results[1], "Foo2 Return Value", "Return data for foo2 was not correct");
|
|
185
|
+
}));
|
|
186
|
+
it("Supports awaiting async and non-async rpc listener return data", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
187
|
+
const emitter = new Emitter();
|
|
188
|
+
let listenerFiredCount = 0;
|
|
189
|
+
emitter.on("foo1", () => {
|
|
190
|
+
return new Promise((resolve) => {
|
|
191
|
+
setTimeout(() => {
|
|
192
|
+
listenerFiredCount++;
|
|
193
|
+
resolve("Foo1 Return Value");
|
|
194
|
+
}, 1000);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
emitter.on("foo2", () => {
|
|
198
|
+
return "Foo2 Return Value";
|
|
199
|
+
});
|
|
200
|
+
const time = new Date().getTime();
|
|
201
|
+
const result1 = yield emitter.rpc("foo1");
|
|
202
|
+
const result2 = emitter.rpc("foo2");
|
|
203
|
+
const delta = new Date().getTime() - time;
|
|
204
|
+
assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
|
|
205
|
+
assert.ok(listenerFiredCount === 1, "listenerFiredCount was not correct, await may not have been used?");
|
|
206
|
+
assert.strictEqual(result1, "Foo1 Return Value", "Return data for foo1 was not correct");
|
|
207
|
+
assert.strictEqual(result2, "Foo2 Return Value", "Return data for foo2 was not correct");
|
|
208
|
+
}));
|
|
209
|
+
it("Supports responding with a cancellation signal", () => __awaiter(void 0, void 0, void 0, function* () {
|
|
210
|
+
const emitter = new Emitter();
|
|
211
|
+
let listenerFiredCount = 0;
|
|
212
|
+
emitter.on("foo", () => {
|
|
213
|
+
listenerFiredCount++;
|
|
214
|
+
return "Foo1 Return Value";
|
|
215
|
+
});
|
|
216
|
+
emitter.on("foo", () => {
|
|
217
|
+
listenerFiredCount++;
|
|
218
|
+
// This listener will respond with a cancellation, this should terminate further listener calls
|
|
219
|
+
return ListenerReturnFlag.cancel;
|
|
220
|
+
});
|
|
221
|
+
emitter.on("foo", () => {
|
|
222
|
+
listenerFiredCount++;
|
|
223
|
+
return "Foo3 Return Value";
|
|
224
|
+
});
|
|
225
|
+
emitter.on("foo", () => {
|
|
226
|
+
listenerFiredCount++;
|
|
227
|
+
return "Foo4 Return Value";
|
|
228
|
+
});
|
|
229
|
+
const results = emitter.emit("foo");
|
|
230
|
+
assert.ok(listenerFiredCount === 2, "listenerFiredCount was not correct, await may not have been used?");
|
|
231
|
+
assert.strictEqual(results[0], "Foo1 Return Value", "Return data should be a cancel flag");
|
|
232
|
+
assert.strictEqual(results[1], ListenerReturnFlag.cancel, "Return data should be a cancel flag");
|
|
233
|
+
assert.ok(emitter.didCancel(results), "didCancel should detect a cancel flag");
|
|
234
|
+
}));
|
|
235
|
+
});
|
|
236
|
+
describe("off()", () => {
|
|
237
|
+
it("Cancels all listeners (event)", () => {
|
|
238
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
239
|
+
const myClass = new Emitter();
|
|
240
|
+
const listener1 = () => {
|
|
241
|
+
};
|
|
242
|
+
const listener2 = () => {
|
|
243
|
+
};
|
|
244
|
+
myClass.on("moo", () => {
|
|
245
|
+
});
|
|
246
|
+
assert.strictEqual((_a = myClass._eventListeners) === null || _a === void 0 ? void 0 : _a.moo["*"].length, 1, "Listeners registered on event");
|
|
247
|
+
myClass.on("moo", "testId", () => {
|
|
248
|
+
});
|
|
249
|
+
assert.strictEqual((_b = myClass._eventListeners) === null || _b === void 0 ? void 0 : _b.moo["testId"].length, 1, "Listeners registered on event");
|
|
250
|
+
myClass.on("moo", listener1);
|
|
251
|
+
assert.strictEqual((_c = myClass._eventListeners) === null || _c === void 0 ? void 0 : _c.moo["*"].length, 2, "Listeners registered on event");
|
|
252
|
+
myClass.on("moo", "testId", listener2);
|
|
253
|
+
assert.strictEqual((_d = myClass._eventListeners) === null || _d === void 0 ? void 0 : _d.moo["testId"].length, 2, "Listeners registered on event");
|
|
254
|
+
myClass.off("moo");
|
|
255
|
+
assert.strictEqual(!((_e = myClass._eventListeners) === null || _e === void 0 ? void 0 : _e.moo) ||
|
|
256
|
+
(((_f = myClass._eventListeners) === null || _f === void 0 ? void 0 : _f.moo["*"].length) === 0 &&
|
|
257
|
+
((_g = myClass._eventListeners) === null || _g === void 0 ? void 0 : _g.moo["testId"].length) === 0), true, "Listeners all removed from event");
|
|
258
|
+
});
|
|
259
|
+
it("Cancels id-based listeners (event, id)", () => {
|
|
260
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
261
|
+
const myClass = new Emitter();
|
|
262
|
+
const listener1 = () => {
|
|
263
|
+
};
|
|
264
|
+
const listener2 = () => {
|
|
265
|
+
};
|
|
266
|
+
myClass.on("moo", () => {
|
|
267
|
+
});
|
|
268
|
+
assert.strictEqual((_a = myClass._eventListeners) === null || _a === void 0 ? void 0 : _a.moo["*"].length, 1, "Listeners registered on event");
|
|
269
|
+
myClass.on("moo", "testId", () => {
|
|
270
|
+
});
|
|
271
|
+
assert.strictEqual((_b = myClass._eventListeners) === null || _b === void 0 ? void 0 : _b.moo["testId"].length, 1, "Listeners registered on event");
|
|
272
|
+
myClass.on("moo", listener1);
|
|
273
|
+
assert.strictEqual((_c = myClass._eventListeners) === null || _c === void 0 ? void 0 : _c.moo["*"].length, 2, "Listeners registered on event");
|
|
274
|
+
myClass.on("moo", "testId", listener2);
|
|
275
|
+
assert.strictEqual((_d = myClass._eventListeners) === null || _d === void 0 ? void 0 : _d.moo["testId"].length, 2, "Listeners registered on event");
|
|
276
|
+
myClass.off("moo", "testId");
|
|
277
|
+
assert.strictEqual(((_e = myClass._eventListeners) === null || _e === void 0 ? void 0 : _e.moo["*"].length) === 2, true, "Listeners all removed from event");
|
|
278
|
+
assert.strictEqual(!((_f = myClass._eventListeners) === null || _f === void 0 ? void 0 : _f.moo["testId"]) || ((_g = myClass._eventListeners) === null || _g === void 0 ? void 0 : _g.moo["testId"].length) === 0, true, "Listeners all removed from event");
|
|
279
|
+
});
|
|
280
|
+
it("Cancels listener-based listeners (event, listener)", () => {
|
|
281
|
+
var _a, _b, _c, _d, _e, _f;
|
|
282
|
+
const myClass = new Emitter();
|
|
283
|
+
const listener1 = () => {
|
|
284
|
+
};
|
|
285
|
+
const listener2 = () => {
|
|
286
|
+
};
|
|
287
|
+
myClass.on("moo", () => {
|
|
288
|
+
});
|
|
289
|
+
assert.strictEqual((_a = myClass._eventListeners) === null || _a === void 0 ? void 0 : _a.moo["*"].length, 1, "Listeners registered on event");
|
|
290
|
+
myClass.on("moo", "testId", () => {
|
|
291
|
+
});
|
|
292
|
+
assert.strictEqual((_b = myClass._eventListeners) === null || _b === void 0 ? void 0 : _b.moo["testId"].length, 1, "Listeners registered on event");
|
|
293
|
+
myClass.on("moo", listener1);
|
|
294
|
+
assert.strictEqual((_c = myClass._eventListeners) === null || _c === void 0 ? void 0 : _c.moo["*"].length, 2, "Listeners registered on event");
|
|
295
|
+
myClass.on("moo", "testId", listener2);
|
|
296
|
+
assert.strictEqual((_d = myClass._eventListeners) === null || _d === void 0 ? void 0 : _d.moo["testId"].length, 2, "Listeners registered on event");
|
|
297
|
+
myClass.off("moo", listener1);
|
|
298
|
+
assert.strictEqual(((_e = myClass._eventListeners) === null || _e === void 0 ? void 0 : _e.moo["*"].length) === 1, true, "Listeners all removed from event");
|
|
299
|
+
assert.strictEqual(((_f = myClass._eventListeners) === null || _f === void 0 ? void 0 : _f.moo["testId"].length) === 2, true, "Listeners all removed from event");
|
|
300
|
+
});
|
|
301
|
+
it("Cancels id-based + listener-based listeners (event, id, listener)", () => {
|
|
302
|
+
var _a, _b, _c, _d, _e, _f;
|
|
303
|
+
const myClass = new Emitter();
|
|
304
|
+
const listener1 = () => {
|
|
305
|
+
};
|
|
306
|
+
const listener2 = () => {
|
|
307
|
+
};
|
|
308
|
+
myClass.on("moo", () => {
|
|
309
|
+
});
|
|
310
|
+
assert.strictEqual((_a = myClass._eventListeners) === null || _a === void 0 ? void 0 : _a.moo["*"].length, 1, "Listeners registered on event");
|
|
311
|
+
myClass.on("moo", "testId", () => {
|
|
312
|
+
});
|
|
313
|
+
assert.strictEqual((_b = myClass._eventListeners) === null || _b === void 0 ? void 0 : _b.moo["testId"].length, 1, "Listeners registered on event");
|
|
314
|
+
myClass.on("moo", listener1);
|
|
315
|
+
assert.strictEqual((_c = myClass._eventListeners) === null || _c === void 0 ? void 0 : _c.moo["*"].length, 2, "Listeners registered on event");
|
|
316
|
+
myClass.on("moo", "testId", listener2);
|
|
317
|
+
assert.strictEqual((_d = myClass._eventListeners) === null || _d === void 0 ? void 0 : _d.moo["testId"].length, 2, "Listeners registered on event");
|
|
318
|
+
myClass.off("moo", "testId", listener2);
|
|
319
|
+
assert.strictEqual(((_e = myClass._eventListeners) === null || _e === void 0 ? void 0 : _e.moo["*"].length) === 2, true, "Listeners all removed from event");
|
|
320
|
+
assert.strictEqual(((_f = myClass._eventListeners) === null || _f === void 0 ? void 0 : _f.moo["testId"].length) === 1, true, "Listeners all removed from event");
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
describe("emitStatic()", () => {
|
|
324
|
+
it("Static emitter will emit when a new listener is added", (resolve) => {
|
|
325
|
+
class MyClass extends Emitter {
|
|
326
|
+
}
|
|
327
|
+
expectAssertionCount(1);
|
|
328
|
+
const myClass = new MyClass();
|
|
329
|
+
myClass.emitStatic("moo");
|
|
330
|
+
myClass.on("moo", () => {
|
|
331
|
+
countAssertion();
|
|
332
|
+
assert.ok(true, "Callback was fired");
|
|
333
|
+
resolve();
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
describe("cancelStatic()", () => {
|
|
338
|
+
it("Removes static emitter", (resolve) => {
|
|
339
|
+
class MyClass extends Emitter {
|
|
340
|
+
}
|
|
341
|
+
expectAssertionCount(1);
|
|
342
|
+
const myClass = new MyClass();
|
|
343
|
+
myClass.emitStatic("moo");
|
|
344
|
+
myClass.on("moo", () => {
|
|
345
|
+
countAssertion();
|
|
346
|
+
assert.ok(true, "Callback was fired");
|
|
347
|
+
});
|
|
348
|
+
myClass.cancelStatic("moo");
|
|
349
|
+
myClass.on("moo", () => {
|
|
350
|
+
countAssertion();
|
|
351
|
+
assert.ok(false, "Callback was fired");
|
|
352
|
+
});
|
|
353
|
+
setTimeout(() => {
|
|
354
|
+
resolve();
|
|
355
|
+
}, 10);
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
describe("overwrite()", () => {
|
|
359
|
+
it("Only fires the last listener added, cancelling all other listeners before it", (resolve) => {
|
|
360
|
+
class MyClass extends Emitter {
|
|
361
|
+
}
|
|
362
|
+
expectAssertionCount(1);
|
|
363
|
+
const myClass = new MyClass();
|
|
364
|
+
myClass.on("moo", () => {
|
|
365
|
+
countAssertion();
|
|
366
|
+
assert.ok(false, "Correct callback was fired");
|
|
367
|
+
});
|
|
368
|
+
myClass.on("moo", () => {
|
|
369
|
+
countAssertion();
|
|
370
|
+
assert.ok(false, "Correct callback was fired");
|
|
371
|
+
});
|
|
372
|
+
myClass.overwrite("moo", () => {
|
|
373
|
+
countAssertion();
|
|
374
|
+
assert.ok(true, "Correct callback was fired");
|
|
375
|
+
});
|
|
376
|
+
myClass.emit("moo");
|
|
377
|
+
setTimeout(() => {
|
|
378
|
+
resolve();
|
|
379
|
+
}, 10);
|
|
380
|
+
});
|
|
381
|
+
it("Only fires the last listener added (with id), cancelling all other listeners before it", (resolve) => {
|
|
382
|
+
class MyClass extends Emitter {
|
|
383
|
+
}
|
|
384
|
+
expectAssertionCount(2);
|
|
385
|
+
const myClass = new MyClass();
|
|
386
|
+
// Define a listener without an id, this should not be overwritten
|
|
387
|
+
myClass.on("moo", () => {
|
|
388
|
+
countAssertion();
|
|
389
|
+
assert.ok(true, "Correct callback was fired");
|
|
390
|
+
});
|
|
391
|
+
// Define some listeners WITH ids, these should be overwritten
|
|
392
|
+
myClass.on("moo", "1234", () => {
|
|
393
|
+
countAssertion();
|
|
394
|
+
assert.ok(false, "Correct callback was fired");
|
|
395
|
+
});
|
|
396
|
+
myClass.on("moo", "1234", () => {
|
|
397
|
+
countAssertion();
|
|
398
|
+
assert.ok(false, "Correct callback was fired");
|
|
399
|
+
});
|
|
400
|
+
// Overwrite the id listeners
|
|
401
|
+
myClass.overwrite("moo", "1234", () => {
|
|
402
|
+
countAssertion();
|
|
403
|
+
assert.ok(true, "Correct callback was fired");
|
|
404
|
+
});
|
|
405
|
+
myClass.emitId("moo", "1234");
|
|
406
|
+
setTimeout(() => {
|
|
407
|
+
resolve();
|
|
408
|
+
}, 50);
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
describe("emitId()", () => {
|
|
412
|
+
it("Fires an id-based event first followed by a global event", () => {
|
|
413
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
414
|
+
const myClass = new Emitter();
|
|
415
|
+
let emitCount = 0;
|
|
416
|
+
// Register id-based listener
|
|
417
|
+
myClass.on("moo", "testId", () => {
|
|
418
|
+
emitCount++;
|
|
419
|
+
});
|
|
420
|
+
// Register non-id-based listener
|
|
421
|
+
myClass.on("moo", () => {
|
|
422
|
+
emitCount++;
|
|
423
|
+
});
|
|
424
|
+
assert.strictEqual((_a = myClass._eventListeners) === null || _a === void 0 ? void 0 : _a.moo["testId"].length, 1, "Listener registered on event");
|
|
425
|
+
myClass.emitId("moo", "testId", "foo");
|
|
426
|
+
assert.strictEqual(emitCount, 2, "Event fired correctly");
|
|
427
|
+
myClass.off("moo", "testId");
|
|
428
|
+
assert.strictEqual(!((_b = myClass._eventListeners) === null || _b === void 0 ? void 0 : _b.moo) ||
|
|
429
|
+
!((_c = myClass._eventListeners) === null || _c === void 0 ? void 0 : _c.moo["testId"]) ||
|
|
430
|
+
((_d = myClass._eventListeners) === null || _d === void 0 ? void 0 : _d.moo["testId"].length), true, "Listeners all removed from event");
|
|
431
|
+
assert.strictEqual(((_e = myClass._eventListeners) === null || _e === void 0 ? void 0 : _e.moo) &&
|
|
432
|
+
((_f = myClass._eventListeners) === null || _f === void 0 ? void 0 : _f.moo["*"]) &&
|
|
433
|
+
((_g = myClass._eventListeners) === null || _g === void 0 ? void 0 : _g.moo["*"].length) === 1, true, "Global listener still there");
|
|
434
|
+
myClass.off("moo");
|
|
435
|
+
assert.strictEqual(!((_h = myClass._eventListeners) === null || _h === void 0 ? void 0 : _h.moo) ||
|
|
436
|
+
!((_j = myClass._eventListeners) === null || _j === void 0 ? void 0 : _j.moo["*"]) ||
|
|
437
|
+
((_k = myClass._eventListeners) === null || _k === void 0 ? void 0 : _k.moo["*"].length) === 0, true, "Listeners all removed from event");
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
describe("Global listener functionality", () => {
|
|
441
|
+
it("Listens for any event emitted and fires the listener with the onAny() function", () => {
|
|
442
|
+
const emitter = new Emitter();
|
|
443
|
+
const spy = jest.fn();
|
|
444
|
+
emitter.onAny(spy);
|
|
445
|
+
emitter.emit("someEvent", "someArg1", true, false);
|
|
446
|
+
expect(spy).toHaveBeenCalledWith("someEvent", "someArg1", true, false);
|
|
447
|
+
});
|
|
448
|
+
it(`Listens for any event emitted and fires the listener with the on("*") function`, () => {
|
|
449
|
+
const emitter = new Emitter();
|
|
450
|
+
const spy = jest.fn();
|
|
451
|
+
emitter.on("*", spy);
|
|
452
|
+
emitter.emit("someEvent", "someArg1", true, false);
|
|
453
|
+
expect(spy).toHaveBeenCalledWith("someEvent", "someArg1", true, false);
|
|
454
|
+
});
|
|
455
|
+
it(`Cancels an event listener for any event emitted with the offAny() function`, () => {
|
|
456
|
+
const emitter = new Emitter();
|
|
457
|
+
const spy = jest.fn();
|
|
458
|
+
emitter.on("*", spy);
|
|
459
|
+
emitter.offAny(spy);
|
|
460
|
+
emitter.emit("someEvent", "someArg1", true, false);
|
|
461
|
+
expect(spy).toHaveBeenCalledTimes(0);
|
|
462
|
+
});
|
|
463
|
+
it(`Cancels an event listener for any event emitted with the off("*") function`, () => {
|
|
464
|
+
const emitter = new Emitter();
|
|
465
|
+
const spy = jest.fn();
|
|
466
|
+
emitter.on("*", spy);
|
|
467
|
+
emitter.off("*", spy);
|
|
468
|
+
emitter.emit("someEvent", "someArg1", true, false);
|
|
469
|
+
expect(spy).toHaveBeenCalledTimes(0);
|
|
470
|
+
});
|
|
471
|
+
});
|
|
472
|
+
});
|