@irrelon/emitter 5.0.3 → 5.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.
@@ -0,0 +1,336 @@
1
+ import assert from "assert";
2
+ import { Emitter } from "../src/Emitter";
3
+ let expectedAssertions = 0;
4
+ let actualAssertions = 0;
5
+ function expect(val) {
6
+ expectedAssertions = val;
7
+ }
8
+ function reset() {
9
+ expectedAssertions = 0;
10
+ actualAssertions = 0;
11
+ }
12
+ function countAssertion() {
13
+ actualAssertions++;
14
+ }
15
+ function check() {
16
+ if (expectedAssertions === undefined || expectedAssertions === actualAssertions) {
17
+ return;
18
+ }
19
+ throw new Error("expected " + expectedAssertions + " assertions, got " + actualAssertions);
20
+ }
21
+ beforeEach(reset);
22
+ afterEach(check);
23
+ describe("Emitter", () => {
24
+ describe("new Emitter()", () => {
25
+ it("Creates emitter instance by instantiation", () => {
26
+ const myClass = new Emitter();
27
+ myClass.on("moo", () => {
28
+ });
29
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 1, "Listener registered on event");
30
+ myClass.off("moo");
31
+ assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners.moo["*"] || myClass._eventListeners.moo["*"].length, true, "Listeners all removed from event");
32
+ });
33
+ it("Supports extending Emitter as a base class", () => {
34
+ let testFuncCount = 0;
35
+ // Test extending Emitter and modifying base functionality
36
+ class MyClass extends Emitter {
37
+ testFunc() {
38
+ testFuncCount++;
39
+ }
40
+ on(eventName, ...rest) {
41
+ const restTypes = rest.map((arg) => typeof arg);
42
+ if (restTypes[0] === "function") {
43
+ const listener = restTypes[0];
44
+ const id = "^^noId";
45
+ return super.on(eventName, id, listener);
46
+ }
47
+ return super.on(eventName, rest[0], rest[1]);
48
+ }
49
+ // @ts-ignore
50
+ emit(eventName, ...rest) {
51
+ return super.emitId(eventName, "^^noId", ...rest);
52
+ }
53
+ off(eventName, ...rest) {
54
+ let id = rest[0];
55
+ let func = rest[1];
56
+ if (typeof rest[0] === "function") {
57
+ func = rest[0];
58
+ id = "^^noId";
59
+ }
60
+ else if (typeof id === "undefined") {
61
+ id = "^^noId";
62
+ }
63
+ return super.off(eventName, id, func);
64
+ }
65
+ }
66
+ const myClass = new MyClass();
67
+ let emitCount = 0;
68
+ // Register id-based listener
69
+ myClass.on("moo", "testId", () => {
70
+ emitCount++;
71
+ });
72
+ // Register non-id-based listener
73
+ myClass.on("moo", () => {
74
+ emitCount++;
75
+ });
76
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listener registered on event");
77
+ myClass.emitId("moo", "testId", "foo");
78
+ assert.strictEqual(emitCount, 1, "Event fired correctly");
79
+ myClass.off("moo", "testId");
80
+ assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["testId"] || myClass._eventListeners?.moo["testId"].length === 0, true, "Listeners all removed from event");
81
+ assert.strictEqual(myClass._eventListeners?.moo && myClass._eventListeners?.moo["^^noId"] && myClass._eventListeners?.moo["^^noId"].length === 1, true, "Global listener still there");
82
+ assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["*"] || myClass._eventListeners?.moo["*"].length === 0, true, "Global listener still there");
83
+ myClass.off("moo");
84
+ assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["*"] || myClass._eventListeners?.moo["*"].length === 0, true, "Listeners all removed from event");
85
+ });
86
+ });
87
+ describe("emit()", () => {
88
+ it("Supports type safe usage", async () => {
89
+ const emitter = new Emitter();
90
+ let listenerFiredCount = 0;
91
+ emitter.on("person", async (name, age, enabled) => {
92
+ return new Promise((resolve) => {
93
+ setTimeout(() => {
94
+ listenerFiredCount++;
95
+ resolve();
96
+ }, 1000);
97
+ });
98
+ });
99
+ emitter.on("post", async () => {
100
+ return new Promise((resolve) => {
101
+ setTimeout(() => {
102
+ listenerFiredCount++;
103
+ resolve();
104
+ }, 1000);
105
+ });
106
+ });
107
+ emitter.on("post", async () => {
108
+ return new Promise((resolve) => {
109
+ setTimeout(() => {
110
+ listenerFiredCount++;
111
+ resolve();
112
+ }, 1000);
113
+ });
114
+ });
115
+ const time = new Date().getTime();
116
+ await emitter.emit("post");
117
+ const delta = new Date().getTime() - time;
118
+ assert.ok(delta > 900, `Delta was not correct, await may not have paused? Delta was: ${delta}`);
119
+ });
120
+ it("Supports awaiting async listeners", async () => {
121
+ const emitter = new Emitter();
122
+ let listenerFiredCount = 0;
123
+ emitter.on("foo", async () => {
124
+ return new Promise((resolve) => {
125
+ setTimeout(() => {
126
+ listenerFiredCount++;
127
+ resolve();
128
+ }, 1000);
129
+ });
130
+ });
131
+ emitter.on("foo", async () => {
132
+ return new Promise((resolve) => {
133
+ setTimeout(() => {
134
+ listenerFiredCount++;
135
+ resolve();
136
+ }, 1000);
137
+ });
138
+ });
139
+ const time = new Date().getTime();
140
+ await emitter.emit("foo");
141
+ const delta = new Date().getTime() - time;
142
+ assert.ok(delta > 900, "Delta was not correct, await may not have paused?");
143
+ });
144
+ });
145
+ describe("off()", () => {
146
+ it("Cancels all listeners (event)", () => {
147
+ const myClass = new Emitter();
148
+ const listener1 = () => {
149
+ };
150
+ const listener2 = () => {
151
+ };
152
+ myClass.on("moo", () => {
153
+ });
154
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 1, "Listeners registered on event");
155
+ myClass.on("moo", "testId", () => {
156
+ });
157
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
158
+ myClass.on("moo", listener1);
159
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
160
+ myClass.on("moo", "testId", listener2);
161
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 2, "Listeners registered on event");
162
+ myClass.off("moo");
163
+ assert.strictEqual(!myClass._eventListeners?.moo || (myClass._eventListeners?.moo["*"].length === 0 && myClass._eventListeners?.moo["testId"].length === 0), true, "Listeners all removed from event");
164
+ });
165
+ it("Cancels id-based listeners (event, id)", () => {
166
+ const myClass = new Emitter();
167
+ const listener1 = () => {
168
+ };
169
+ const listener2 = () => {
170
+ };
171
+ myClass.on("moo", () => {
172
+ });
173
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 1, "Listeners registered on event");
174
+ myClass.on("moo", "testId", () => {
175
+ });
176
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
177
+ myClass.on("moo", listener1);
178
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
179
+ myClass.on("moo", "testId", listener2);
180
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 2, "Listeners registered on event");
181
+ myClass.off("moo", "testId");
182
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length === 2, true, "Listeners all removed from event");
183
+ assert.strictEqual(!myClass._eventListeners?.moo["testId"] || myClass._eventListeners?.moo["testId"].length === 0, true, "Listeners all removed from event");
184
+ });
185
+ it("Cancels listener-based listeners (event, listener)", () => {
186
+ const myClass = new Emitter();
187
+ const listener1 = () => {
188
+ };
189
+ const listener2 = () => {
190
+ };
191
+ myClass.on("moo", () => {
192
+ });
193
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 1, "Listeners registered on event");
194
+ myClass.on("moo", "testId", () => {
195
+ });
196
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
197
+ myClass.on("moo", listener1);
198
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
199
+ myClass.on("moo", "testId", listener2);
200
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 2, "Listeners registered on event");
201
+ myClass.off("moo", listener1);
202
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length === 1, true, "Listeners all removed from event");
203
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length === 2, true, "Listeners all removed from event");
204
+ });
205
+ it("Cancels id-based + listener-based listeners (event, id, listener)", () => {
206
+ const myClass = new Emitter();
207
+ const listener1 = () => {
208
+ };
209
+ const listener2 = () => {
210
+ };
211
+ myClass.on("moo", () => {
212
+ });
213
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 1, "Listeners registered on event");
214
+ myClass.on("moo", "testId", () => {
215
+ });
216
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listeners registered on event");
217
+ myClass.on("moo", listener1);
218
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length, 2, "Listeners registered on event");
219
+ myClass.on("moo", "testId", listener2);
220
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 2, "Listeners registered on event");
221
+ myClass.off("moo", "testId", listener2);
222
+ assert.strictEqual(myClass._eventListeners?.moo["*"].length === 2, true, "Listeners all removed from event");
223
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length === 1, true, "Listeners all removed from event");
224
+ });
225
+ });
226
+ describe("emitStatic()", () => {
227
+ it("Static emitter will emit when a new listener is added", (resolve) => {
228
+ class MyClass extends Emitter {
229
+ }
230
+ expect(1);
231
+ const myClass = new MyClass();
232
+ myClass.emitStatic("moo");
233
+ myClass.on("moo", () => {
234
+ countAssertion();
235
+ assert.ok(true, "Callback was fired");
236
+ resolve();
237
+ });
238
+ });
239
+ });
240
+ describe("cancelStatic()", () => {
241
+ it("Removes static emitter", (resolve) => {
242
+ class MyClass extends Emitter {
243
+ }
244
+ expect(1);
245
+ const myClass = new MyClass();
246
+ myClass.emitStatic("moo");
247
+ myClass.on("moo", () => {
248
+ countAssertion();
249
+ assert.ok(true, "Callback was fired");
250
+ });
251
+ myClass.cancelStatic("moo");
252
+ myClass.on("moo", () => {
253
+ countAssertion();
254
+ assert.ok(false, "Callback was fired");
255
+ });
256
+ setTimeout(() => {
257
+ resolve();
258
+ }, 10);
259
+ });
260
+ });
261
+ describe("overwrite()", () => {
262
+ it("Only fires the last listener added, cancelling all other listeners before it", (resolve) => {
263
+ class MyClass extends Emitter {
264
+ }
265
+ expect(1);
266
+ const myClass = new MyClass();
267
+ myClass.on("moo", () => {
268
+ countAssertion();
269
+ assert.ok(false, "Correct callback was fired");
270
+ });
271
+ myClass.on("moo", () => {
272
+ countAssertion();
273
+ assert.ok(false, "Correct callback was fired");
274
+ });
275
+ myClass.overwrite("moo", () => {
276
+ countAssertion();
277
+ assert.ok(true, "Correct callback was fired");
278
+ });
279
+ myClass.emit("moo");
280
+ setTimeout(() => {
281
+ resolve();
282
+ }, 10);
283
+ });
284
+ it("Only fires the last listener added (with id), cancelling all other listeners before it", (resolve) => {
285
+ class MyClass extends Emitter {
286
+ }
287
+ expect(2);
288
+ const myClass = new MyClass();
289
+ // Define a listener without an id, this should not be overwritten
290
+ myClass.on("moo", () => {
291
+ countAssertion();
292
+ assert.ok(true, "Correct callback was fired");
293
+ });
294
+ // Define some listeners WITH ids, these should be overwritten
295
+ myClass.on("moo", "1234", () => {
296
+ countAssertion();
297
+ assert.ok(false, "Correct callback was fired");
298
+ });
299
+ myClass.on("moo", "1234", () => {
300
+ countAssertion();
301
+ assert.ok(false, "Correct callback was fired");
302
+ });
303
+ // Overwrite the id listeners
304
+ myClass.overwrite("moo", "1234", () => {
305
+ countAssertion();
306
+ assert.ok(true, "Correct callback was fired");
307
+ });
308
+ myClass.emitId("moo", "1234");
309
+ setTimeout(() => {
310
+ resolve();
311
+ }, 50);
312
+ });
313
+ });
314
+ describe("emitId()", () => {
315
+ it("Fires an id-based event first followed by a global event", () => {
316
+ const myClass = new Emitter();
317
+ let emitCount = 0;
318
+ // Register id-based listener
319
+ myClass.on("moo", "testId", () => {
320
+ emitCount++;
321
+ });
322
+ // Register non-id-based listener
323
+ myClass.on("moo", () => {
324
+ emitCount++;
325
+ });
326
+ assert.strictEqual(myClass._eventListeners?.moo["testId"].length, 1, "Listener registered on event");
327
+ myClass.emitId("moo", "testId", "foo");
328
+ assert.strictEqual(emitCount, 2, "Event fired correctly");
329
+ myClass.off("moo", "testId");
330
+ assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["testId"] || myClass._eventListeners?.moo["testId"].length, true, "Listeners all removed from event");
331
+ assert.strictEqual(myClass._eventListeners?.moo && myClass._eventListeners?.moo["*"] && myClass._eventListeners?.moo["*"].length === 1, true, "Global listener still there");
332
+ myClass.off("moo");
333
+ assert.strictEqual(!myClass._eventListeners?.moo || !myClass._eventListeners?.moo["*"] || myClass._eventListeners?.moo["*"].length === 0, true, "Listeners all removed from event");
334
+ });
335
+ });
336
+ });
@@ -0,0 +1 @@
1
+ {"program":{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../src/emitter.ts","../../tests/emitter.test.ts","../../node_modules/@types/node/ts4.8/assert.d.ts","../../node_modules/@types/node/ts4.8/assert/strict.d.ts","../../node_modules/@types/node/ts4.8/globals.d.ts","../../node_modules/@types/node/ts4.8/async_hooks.d.ts","../../node_modules/@types/node/ts4.8/buffer.d.ts","../../node_modules/@types/node/ts4.8/child_process.d.ts","../../node_modules/@types/node/ts4.8/cluster.d.ts","../../node_modules/@types/node/ts4.8/console.d.ts","../../node_modules/@types/node/ts4.8/constants.d.ts","../../node_modules/@types/node/ts4.8/crypto.d.ts","../../node_modules/@types/node/ts4.8/dgram.d.ts","../../node_modules/@types/node/ts4.8/diagnostics_channel.d.ts","../../node_modules/@types/node/ts4.8/dns.d.ts","../../node_modules/@types/node/ts4.8/dns/promises.d.ts","../../node_modules/@types/node/ts4.8/domain.d.ts","../../node_modules/@types/node/ts4.8/events.d.ts","../../node_modules/@types/node/ts4.8/fs.d.ts","../../node_modules/@types/node/ts4.8/fs/promises.d.ts","../../node_modules/@types/node/ts4.8/http.d.ts","../../node_modules/@types/node/ts4.8/http2.d.ts","../../node_modules/@types/node/ts4.8/https.d.ts","../../node_modules/@types/node/ts4.8/inspector.d.ts","../../node_modules/@types/node/ts4.8/module.d.ts","../../node_modules/@types/node/ts4.8/net.d.ts","../../node_modules/@types/node/ts4.8/os.d.ts","../../node_modules/@types/node/ts4.8/path.d.ts","../../node_modules/@types/node/ts4.8/perf_hooks.d.ts","../../node_modules/@types/node/ts4.8/process.d.ts","../../node_modules/@types/node/ts4.8/punycode.d.ts","../../node_modules/@types/node/ts4.8/querystring.d.ts","../../node_modules/@types/node/ts4.8/readline.d.ts","../../node_modules/@types/node/ts4.8/readline/promises.d.ts","../../node_modules/@types/node/ts4.8/repl.d.ts","../../node_modules/@types/node/ts4.8/stream.d.ts","../../node_modules/@types/node/ts4.8/stream/promises.d.ts","../../node_modules/@types/node/ts4.8/stream/consumers.d.ts","../../node_modules/@types/node/ts4.8/stream/web.d.ts","../../node_modules/@types/node/ts4.8/string_decoder.d.ts","../../node_modules/@types/node/ts4.8/test.d.ts","../../node_modules/@types/node/ts4.8/timers.d.ts","../../node_modules/@types/node/ts4.8/timers/promises.d.ts","../../node_modules/@types/node/ts4.8/tls.d.ts","../../node_modules/@types/node/ts4.8/trace_events.d.ts","../../node_modules/@types/node/ts4.8/tty.d.ts","../../node_modules/@types/node/ts4.8/url.d.ts","../../node_modules/@types/node/ts4.8/util.d.ts","../../node_modules/@types/node/ts4.8/v8.d.ts","../../node_modules/@types/node/ts4.8/vm.d.ts","../../node_modules/@types/node/ts4.8/wasi.d.ts","../../node_modules/@types/node/ts4.8/worker_threads.d.ts","../../node_modules/@types/node/ts4.8/zlib.d.ts","../../node_modules/@types/node/ts4.8/globals.global.d.ts","../../node_modules/@types/node/ts4.8/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts"],"fileInfos":[{"version":"f20c05dbfe50a208301d2a1da37b9931bce0466eb5a1f4fe240971b4ecc82b67","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","d11a03592451da2d1065e09e61f4e2a9bf68f780f4f6623c18b57816a9679d17","aea179452def8a6152f98f63b191b84e7cbd69b0e248c91e61fb2e52328abe8c",{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"55f400eec64d17e888e278f4def2f254b41b89515d3b88ad75d5e05f019daddd","affectsGlobalScope":true},{"version":"181f1784c6c10b751631b24ce60c7f78b20665db4550b335be179217bacc0d5f","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"775d9c9fd150d5de79e0450f35bc8b8f94ae64e3eb5da12725ff2a649dccc777","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"34c839eaaa6d78c8674ae2c37af2236dee6831b13db7b4ef4df3ec889a04d4f2","affectsGlobalScope":true},{"version":"34478567f8a80171f88f2f30808beb7da15eac0538ae91282dd33dce928d98ed","affectsGlobalScope":true},{"version":"ab7d58e6161a550ff92e5aff755dc37fe896245348332cd5f1e1203479fe0ed1","affectsGlobalScope":true},{"version":"6bda95ea27a59a276e46043b7065b55bd4b316c25e70e29b572958fa77565d43","affectsGlobalScope":true},{"version":"aedb8de1abb2ff1095c153854a6df7deae4a5709c37297f9d6e9948b6806fa66","affectsGlobalScope":true},{"version":"a4da0551fd39b90ca7ce5f68fb55d4dc0c1396d589b612e1902f68ee090aaada","affectsGlobalScope":true},{"version":"11ffe3c281f375fff9ffdde8bbec7669b4dd671905509079f866f2354a788064","affectsGlobalScope":true},{"version":"52d1bb7ab7a3306fd0375c8bff560feed26ed676a5b0457fa8027b563aecb9a4","affectsGlobalScope":true},{"version":"b70aa0fb83e36865d0a0eaf6c48ac44e20cf3f24a63327803b98af47bfb3cb78","signature":"95de3cc79ce33b1197a6c7a1fb78998b3fb77583c814bf16eb58906126ac5333"},{"version":"35c646323071a40f8561d46a3ab38f101a817e4891948299ebb098d2f6957a92","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"9122ed7070e054b73ebab37c2373a196def2d90e7d1a9a7fcd9d46b0e51fae78","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"77f0b5c6a193a699c9f7d7fb0578e64e562d271afa740783665d2a827104a873","affectsGlobalScope":true},"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9",{"version":"002d6d5f044365b3fbfba0ba9be3bb57cac09b81547c8df4b0795755d2081d90","affectsGlobalScope":true},"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713",{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","c4cfc9a6e2ebb8bc8c0e2392dfc4056993ced3b35069ebf132ac18ca7a562881","bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea",{"version":"bae4ea23beb8397755b935cb84d3cdc6cdb0b1b4a329b90de9fc6c8774d71994","affectsGlobalScope":true},"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","df36874d9e56aff601e921c4b3971d37cf66d14f6455935ce821e6cad13b1823","3c135ff5bda0355f6b52a10ea931736ec7c5a80b7fb8772019054e0eaa0fd6b6","1abb206a4ecd13b21536b677d7d5f66e0d7316f0d44610197cfcc5776f78884a","dbe5aa5a5dd8bd1c6a8d11b1310c3f0cdabaacc78a37b394a8c7b14faeb5fb84","2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58",{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true},"76527127c8b749bee5977408861ce3ee56ec19ddcea8704c628f98ca610283e6","7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","b68bd7bef90dab08b1866a9fee24f03d9fee10bcb3f587b074e96e61abf6d3f0","cb4f3f03480e1727eae46400606cecaa97f550186ff8fa909ebc00db4180531b",{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true},"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","d1a78a3c5708807e8de3e399f91df4797c62e44b02195eefc2209b2e713e54ee","36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","556bf5c36deb62cffa1bf697c1789fe008ec82db0273025001db66732714e9d9","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff",{"version":"806ef4cac3b3d9fa4a48d849c8e084d7c72fcd7b16d76e06049a9ed742ff79c0","affectsGlobalScope":true},"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","0830071706fa0e477fb5e95f0955cc1062b5948b146b7d4e03a126f12ad6085f",{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true},"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2",{"version":"bfe39beb986d2a2e512c091cbe924f1c415bc65de54de0e2f6a0dc6f84c183d9","affectsGlobalScope":true},"2d526e6f21d8cc66ac11ada32874e95ae88d870c6c9d3d9d4e03b1d1f9ad7b8e","06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","d2ec52f565f0570e90b659811347bd689f8c6039b11eaaccd0f243759d46da6e","8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"ecd8eb2ed2ea3f7e17ae00a2ce61db2c199e6e3944f6ff4a02de85c1a98e38eb","763e521cf114b80e0dd0e21ca49b9f8ae62e8999555a5e7bade8ce36b33001c2","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","032cbd1883827ca3728c1400145403b62e65b7b584a0d2115ae538c9edec7936","427ce5854885cfc34387e09de05c1d5c1acf94c2143e1693f1d9ff54880573e7","bed2c4f96fab3348be4a34d88dcb12578c1b2475b07c6acd369e99e227718d81","e3ba509d3dce019b3190ceb2f3fc88e2610ab717122dabd91a9efaa37804040d","cda0cb09b995489b7f4c57f168cd31b83dcbaa7aad49612734fb3c9c73f6e4f2","3b105d5a0dacc73812d93e90d3c7243fd5a9c0566a2e63bc2964ca12d882c8e8",{"version":"458e2fd1185e659cb800ef68d01ef77de70dcab8860bedf6d94eaebe736751f1","affectsGlobalScope":true}],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"downlevelIteration":true,"esModuleInterop":true,"inlineSourceMap":false,"module":99,"outDir":"./","skipLibCheck":false,"strict":true,"target":99},"fileIdsList":[[101],[101,111],[101,113,116],[56,101],[59,101],[60,65,101],[61,71,72,79,89,100,101],[61,62,71,79,101],[63,101],[64,65,72,80,101],[65,89,97,101],[66,68,71,79,101],[67,101],[68,69,101],[70,71,101],[71,101],[71,72,73,89,100,101],[71,72,73,89,92,101],[101,105],[74,79,89,100,101],[71,72,74,75,79,89,97,100,101],[74,76,89,97,100,101],[56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107],[71,77,101],[78,100,101],[68,71,79,89,101],[80,101],[81,101],[59,82,101],[83,99,101,105],[84,101],[85,101],[71,86,87,101],[86,88,101,103],[71,89,90,91,92,101],[89,91,101],[89,90,101],[92,101],[93,101],[71,95,96,101],[95,96,101],[65,79,89,97,101],[98,101],[79,99,101],[60,74,85,100,101],[65,101],[89,101,102],[101,103],[101,104],[60,65,71,73,82,89,100,101,103,105],[89,101,106],[101,109,115],[101,113],[101,110,114],[101,112],[54,56,101]],"referencedMap":[[109,1],[112,2],[111,1],[117,3],[56,4],[57,4],[59,5],[60,6],[61,7],[62,8],[63,9],[64,10],[65,11],[66,12],[67,13],[68,14],[69,14],[70,15],[71,16],[72,17],[73,18],[58,19],[107,1],[74,20],[75,21],[76,22],[108,23],[77,24],[78,25],[79,26],[80,27],[81,28],[82,29],[83,30],[84,31],[85,32],[86,33],[87,33],[88,34],[89,35],[91,36],[90,37],[92,38],[93,39],[94,1],[95,40],[96,41],[97,42],[98,43],[99,44],[100,45],[101,46],[102,47],[103,48],[104,49],[105,50],[106,51],[116,52],[114,53],[115,54],[110,1],[113,55],[12,1],[11,1],[2,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[3,1],[4,1],[24,1],[21,1],[22,1],[23,1],[25,1],[26,1],[27,1],[5,1],[28,1],[29,1],[30,1],[31,1],[6,1],[32,1],[33,1],[34,1],[35,1],[7,1],[36,1],[41,1],[42,1],[37,1],[38,1],[39,1],[40,1],[8,1],[46,1],[43,1],[44,1],[45,1],[47,1],[9,1],[48,1],[49,1],[50,1],[51,1],[52,1],[1,1],[10,1],[53,1],[54,1],[55,56]],"exportedModulesMap":[[109,1],[112,2],[111,1],[117,3],[56,4],[57,4],[59,5],[60,6],[61,7],[62,8],[63,9],[64,10],[65,11],[66,12],[67,13],[68,14],[69,14],[70,15],[71,16],[72,17],[73,18],[58,19],[107,1],[74,20],[75,21],[76,22],[108,23],[77,24],[78,25],[79,26],[80,27],[81,28],[82,29],[83,30],[84,31],[85,32],[86,33],[87,33],[88,34],[89,35],[91,36],[90,37],[92,38],[93,39],[94,1],[95,40],[96,41],[97,42],[98,43],[99,44],[100,45],[101,46],[102,47],[103,48],[104,49],[105,50],[106,51],[116,52],[114,53],[115,54],[110,1],[113,55],[12,1],[11,1],[2,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[3,1],[4,1],[24,1],[21,1],[22,1],[23,1],[25,1],[26,1],[27,1],[5,1],[28,1],[29,1],[30,1],[31,1],[6,1],[32,1],[33,1],[34,1],[35,1],[7,1],[36,1],[41,1],[42,1],[37,1],[38,1],[39,1],[40,1],[8,1],[46,1],[43,1],[44,1],[45,1],[47,1],[9,1],[48,1],[49,1],[50,1],[51,1],[52,1],[1,1],[10,1],[53,1]],"semanticDiagnosticsPerFile":[109,112,111,117,56,57,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,58,107,74,75,76,108,77,78,79,80,81,82,83,84,85,86,87,88,89,91,90,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,116,114,115,110,113,12,11,2,13,14,15,16,17,18,19,20,3,4,24,21,22,23,25,26,27,5,28,29,30,31,6,32,33,34,35,7,36,41,42,37,38,39,40,8,46,43,44,45,47,9,48,49,50,51,52,1,10,53,54,55]},"version":"4.8.4"}
package/fixup.sh ADDED
@@ -0,0 +1,11 @@
1
+ cat >dist/cjs/package.json <<!EOF
2
+ {
3
+ "type": "commonjs"
4
+ }
5
+ !EOF
6
+
7
+ cat >dist/mjs/package.json <<!EOF
8
+ {
9
+ "type": "module"
10
+ }
11
+ !EOF
package/license.md ADDED
@@ -0,0 +1,11 @@
1
+ MIT License
2
+
3
+ Copyright 2023 Irrelon Software Limited
4
+
5
+ This license covers all versions and branches of Irrelon Emitter.
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
10
+
11
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/package.json CHANGED
@@ -2,8 +2,7 @@
2
2
  "author": "Rob Evans - Irrelon Software Limited",
3
3
  "name": "@irrelon/emitter",
4
4
  "description": "Simple JavaScript event emitter.",
5
- "version": "5.0.3",
6
- "type": "module",
5
+ "version": "5.0.4",
7
6
  "keywords": [
8
7
  "javascript",
9
8
  "browser",
@@ -46,7 +45,7 @@
46
45
  "node": "*"
47
46
  },
48
47
  "scripts": {
49
- "build": "tsc",
48
+ "build": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json && sh ./fixup.sh",
50
49
  "build-watch": "tsc --watch",
51
50
  "fixPaths": "node fixPaths.cjs",
52
51
  "test": "NODE_OPTIONS=--experimental-vm-modules npx jest --testMatch \"**/*.test.js\"",
@@ -56,7 +55,14 @@
56
55
  "type": "git",
57
56
  "url": "git://github.com/irrelon/emitter.git"
58
57
  },
59
- "main": "src/Emitter.js",
58
+ "main": "dist/cjs/Emitter.js",
59
+ "module": "dist/mjs/Emitter.js",
60
+ "exports": {
61
+ ".": {
62
+ "import": "./dist/mjs/Emitter.js",
63
+ "require": "./dist/cjs/Emitter.js"
64
+ }
65
+ },
60
66
  "bugs": {
61
67
  "url": "https://github.com/irrelon/emitter/issues"
62
68
  }
package/readme.md CHANGED
@@ -52,4 +52,4 @@ Include the Emitter.js file in your HTML (the path depends on where you've put t
52
52
 
53
53
  ```html
54
54
  <script src="./src/Emitter.js" type="module"></script>
55
- ```
55
+ ```