@peter.naydenov/notice 2.4.2 → 2.4.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.
Files changed (39) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/Changelog.md +16 -0
  3. package/coverage/lcov-report/block-navigation.js +1 -1
  4. package/coverage/lcov-report/index.html +20 -20
  5. package/coverage/lcov-report/main.js.html +171 -168
  6. package/coverage/lcov-report/sorter.js +21 -7
  7. package/coverage/lcov.info +136 -218
  8. package/graphify-out/.graphify_ast.json +1003 -0
  9. package/graphify-out/.graphify_detect.json +1 -0
  10. package/graphify-out/.graphify_python +1 -0
  11. package/graphify-out/.graphify_uncached.txt +15 -0
  12. package/graphify-out/GRAPH_REPORT.md +143 -0
  13. package/graphify-out/cache/0851b0e27934e7cb51d3d94f9e4d981e83b80e7047ebea01d717486978255d66.json +1 -0
  14. package/graphify-out/cache/313b49fbec137bd0ec64660ace8991e0ed210d1782fec8e86ca1a131901ff58d.json +1 -0
  15. package/graphify-out/cache/324c4626d3d3315ed33b0eec6c2158c55fcc53bb501ffe6a852f6e17e8164667.json +1 -0
  16. package/graphify-out/cache/3335588971cea52118dc77fccba5c33701442c573224f845a638cabe71c34240.json +1 -0
  17. package/graphify-out/cache/362bc8f53fda674a6b0ef29bda4b1be41833ddda276e0a3262ac101a5b5bba83.json +1 -0
  18. package/graphify-out/cache/3cd7d97905369ba8190edae73532006c760e252754e064ea6d9fffa261b552e6.json +1 -0
  19. package/graphify-out/cache/5d53ce3027d393c8fe8b1763ed54a0262ba10e18988e26cf273bcb179522bf4d.json +1 -0
  20. package/graphify-out/cache/68e13aab864f52d3708a714958556b7e25ff8233ab8173893de892b323e26d1a.json +1 -0
  21. package/graphify-out/cache/6f0048e5fcf58195aa0c14d4bcbcb2193f818dfe56904f151fd5cc8c406e2ffa.json +1 -0
  22. package/graphify-out/cache/8218f61ff570b6f101de672ba486677b4fb579677ce88ef537f21b9a40f9728d.json +1 -0
  23. package/graphify-out/cache/a65de5e681850c06dc779842b61d7468c9816b72a92417e3c6a8c7eaa005ecb6.json +1 -0
  24. package/graphify-out/cache/a97f881a55f97de2392f6fa86d8dd11ff9e0e0d40ec302ab9d240ec175bce333.json +1 -0
  25. package/graphify-out/cache/ab5f5634b51fc23275d76e77db87f37c1fec389b14b0228b0c8dbe70d0683c84.json +1 -0
  26. package/graphify-out/cache/ast/v0.8.39/234d10784603a5cf5a6f44fe83948a6c3a014590660e4ea32e3ef72f7b485a4b.json +1 -0
  27. package/graphify-out/cache/ast/v0.8.39/74c9623e575baefe69331b1ab4d1ad96ac2bc0f6552f04e59ff556f95a6dd2a7.json +1 -0
  28. package/graphify-out/cache/c7df89e129098aa0a6723787757bd7c58c92f7a50d365f16f92b44391a6a3256.json +1 -0
  29. package/graphify-out/cache/eda9833c7da551691f85741b4b2ac73e9eca5578b842c62002cd120c7bc70eb2.json +1 -0
  30. package/graphify-out/cache/stat-index.json +1 -0
  31. package/graphify-out/cost.json +12 -0
  32. package/graphify-out/graph.html +266 -0
  33. package/graphify-out/graph.json +2470 -0
  34. package/graphify-out/manifest.json +17 -0
  35. package/package.json +12 -27
  36. package/src/main.js +18 -15
  37. package/vitest.config.js +12 -0
  38. package/coverage/tmp/coverage-46509-1760816753149-0.json +0 -1
  39. package/coverage/tmp/coverage-46510-1760816753116-0.json +0 -1
@@ -0,0 +1,10 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npx vitest *)",
5
+ "Bash(node /private/tmp/claude-501/-Users-peternaydenov-Open-source-git-notice/5d42d1c1-e618-4ec6-8e58-148aaf476764/scratchpad/repro.mjs)",
6
+ "Bash(node /private/tmp/claude-501/-Users-peternaydenov-Open-source-git-notice/5d42d1c1-e618-4ec6-8e58-148aaf476764/scratchpad/repro2.mjs)",
7
+ "Bash(node /private/tmp/claude-501/-Users-peternaydenov-Open-source-git-notice/5d42d1c1-e618-4ec6-8e58-148aaf476764/scratchpad/repro3.mjs)"
8
+ ]
9
+ }
10
+ }
package/Changelog.md CHANGED
@@ -1,6 +1,22 @@
1
1
  # Release History
2
2
 
3
3
 
4
+ ### 2.4.4 ( 2026-07-07 )
5
+ - [x] Fix: Wildcard listeners are not notified for 'once' events;
6
+ - [x] Fix: Symbol events are invisible for wildcard 'emit' and 'stop';
7
+ - [x] Fix: Reserved object property names ( '__proto__', 'constructor' ) can not be used as event names;
8
+
9
+
10
+
11
+ ### 2.4.3 ( 2026-07-07 )
12
+ - [x] Fix: Removing the last 'once' subscriber with 'off' deletes the regular subscribers of the event;
13
+ - [x] Fix: Removing the last wildcard listener breaks 'emit';
14
+ - [x] Fix: 'Once' subscriber that re-registers itself during 'emit' is lost;
15
+ - [x] Fix: Debug mode crashes on Symbol event names;
16
+
17
+
18
+
19
+
4
20
  ### 2.4.2 ( 2026-04-02 )
5
21
  - [x] Dependencies and devDependencies updates;
6
22
 
@@ -9,7 +9,7 @@ var jumpToCode = (function init() {
9
9
  // We don't want to select elements that are direct descendants of another match
10
10
  var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
11
11
 
12
- // Selecter that finds elements on the page to which we can jump
12
+ // Selector that finds elements on the page to which we can jump
13
13
  var selector =
14
14
  fileListingElements.join(', ') +
15
15
  ', ' +
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">93.41% </span>
26
+ <span class="strong">94.11% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>156/167</span>
28
+ <span class='fraction'>80/85</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">94% </span>
33
+ <span class="strong">91.52% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>47/50</span>
35
+ <span class='fraction'>54/59</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>9/10</span>
42
+ <span class='fraction'>16/16</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">93.41% </span>
47
+ <span class="strong">93.75% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>156/167</span>
49
+ <span class='fraction'>60/64</span>
50
50
  </div>
51
51
 
52
52
 
@@ -57,7 +57,7 @@
57
57
  <template id="filterTemplate">
58
58
  <div class="quiet">
59
59
  Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
60
+ <input type="search" id="fileSearch">
61
61
  </div>
62
62
  </template>
63
63
  </div>
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file high" data-value="main.js"><a href="main.js.html">main.js</a></td>
83
- <td data-value="93.41" class="pic high">
84
- <div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
83
+ <td data-value="94.11" class="pic high">
84
+ <div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
85
85
  </td>
86
- <td data-value="93.41" class="pct high">93.41%</td>
87
- <td data-value="167" class="abs high">156/167</td>
88
- <td data-value="94" class="pct high">94%</td>
89
- <td data-value="50" class="abs high">47/50</td>
90
- <td data-value="90" class="pct high">90%</td>
91
- <td data-value="10" class="abs high">9/10</td>
92
- <td data-value="93.41" class="pct high">93.41%</td>
93
- <td data-value="167" class="abs high">156/167</td>
86
+ <td data-value="94.11" class="pct high">94.11%</td>
87
+ <td data-value="85" class="abs high">80/85</td>
88
+ <td data-value="91.52" class="pct high">91.52%</td>
89
+ <td data-value="59" class="abs high">54/59</td>
90
+ <td data-value="100" class="pct high">100%</td>
91
+ <td data-value="16" class="abs high">16/16</td>
92
+ <td data-value="93.75" class="pct high">93.75%</td>
93
+ <td data-value="64" class="abs high">60/64</td>
94
94
  </tr>
95
95
 
96
96
  </tbody>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2025-10-18T19:45:53.166Z
104
+ at 2026-07-06T22:03:47.324Z
105
105
  </div>
106
106
  <script src="prettify.js"></script>
107
107
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">93.41% </span>
26
+ <span class="strong">94.11% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>156/167</span>
28
+ <span class='fraction'>80/85</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">94% </span>
33
+ <span class="strong">91.52% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>47/50</span>
35
+ <span class='fraction'>54/59</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>9/10</span>
42
+ <span class='fraction'>16/16</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">93.41% </span>
47
+ <span class="strong">93.75% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>156/167</span>
49
+ <span class='fraction'>60/64</span>
50
50
  </div>
51
51
 
52
52
 
@@ -57,7 +57,7 @@
57
57
  <template id="filterTemplate">
58
58
  <div class="quiet">
59
59
  Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
60
+ <input type="search" id="fileSearch">
61
61
  </div>
62
62
  </template>
63
63
  </div>
@@ -232,173 +232,175 @@
232
232
  <a name='L167'></a><a href='#L167'>167</a>
233
233
  <a name='L168'></a><a href='#L168'>168</a>
234
234
  <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
236
- <span class="cline-any cline-yes">24x</span>
237
- <span class="cline-any cline-yes">24x</span>
238
- <span class="cline-any cline-yes">24x</span>
239
- <span class="cline-any cline-yes">24x</span>
240
- <span class="cline-any cline-yes">24x</span>
241
- <span class="cline-any cline-yes">24x</span>
242
- <span class="cline-any cline-yes">24x</span>
243
- <span class="cline-any cline-yes">24x</span>
244
- <span class="cline-any cline-yes">24x</span>
245
- <span class="cline-any cline-yes">24x</span>
246
- <span class="cline-any cline-yes">24x</span>
247
- <span class="cline-any cline-yes">24x</span>
248
- <span class="cline-any cline-yes">24x</span>
249
- <span class="cline-any cline-yes">24x</span>
250
- <span class="cline-any cline-yes">24x</span>
251
- <span class="cline-any cline-yes">24x</span>
252
- <span class="cline-any cline-yes">32x</span>
253
- <span class="cline-any cline-yes">32x</span>
254
- <span class="cline-any cline-yes">24x</span>
255
- <span class="cline-any cline-yes">24x</span>
256
- <span class="cline-any cline-yes">24x</span>
257
- <span class="cline-any cline-yes">24x</span>
258
- <span class="cline-any cline-yes">24x</span>
259
- <span class="cline-any cline-yes">24x</span>
260
- <span class="cline-any cline-yes">24x</span>
261
- <span class="cline-any cline-yes">24x</span>
262
- <span class="cline-any cline-yes">9x</span>
263
- <span class="cline-any cline-yes">9x</span>
264
- <span class="cline-any cline-yes">9x</span>
265
- <span class="cline-any cline-yes">24x</span>
266
- <span class="cline-any cline-yes">24x</span>
267
- <span class="cline-any cline-yes">24x</span>
268
- <span class="cline-any cline-yes">24x</span>
269
- <span class="cline-any cline-yes">24x</span>
270
- <span class="cline-any cline-yes">24x</span>
271
- <span class="cline-any cline-yes">24x</span>
272
- <span class="cline-any cline-yes">24x</span>
273
- <span class="cline-any cline-yes">24x</span>
274
- <span class="cline-any cline-yes">24x</span>
275
- <span class="cline-any cline-yes">24x</span>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-yes">28x</span>
241
+ <span class="cline-any cline-yes">28x</span>
242
+ <span class="cline-any cline-yes">28x</span>
243
+ <span class="cline-any cline-yes">28x</span>
244
+ <span class="cline-any cline-yes">28x</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-yes">37x</span>
254
+ <span class="cline-any cline-yes">37x</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-yes">14x</span>
264
+ <span class="cline-any cline-yes">14x</span>
265
+ <span class="cline-any cline-yes">14x</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-yes">10x</span>
278
+ <span class="cline-any cline-yes">7x</span>
276
279
  <span class="cline-any cline-yes">7x</span>
277
- <span class="cline-any cline-yes">5x</span>
278
- <span class="cline-any cline-yes">5x</span>
279
- <span class="cline-any cline-yes">5x</span>
280
- <span class="cline-any cline-yes">5x</span>
281
- <span class="cline-any cline-yes">5x</span>
282
- <span class="cline-any cline-yes">5x</span>
283
280
  <span class="cline-any cline-yes">7x</span>
284
281
  <span class="cline-any cline-yes">7x</span>
285
- <span class="cline-any cline-yes">24x</span>
286
- <span class="cline-any cline-yes">24x</span>
287
- <span class="cline-any cline-yes">24x</span>
288
- <span class="cline-any cline-yes">24x</span>
289
- <span class="cline-any cline-yes">24x</span>
290
- <span class="cline-any cline-yes">24x</span>
282
+ <span class="cline-any cline-yes">7x</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-yes">3x</span>
285
+ <span class="cline-any cline-yes">3x</span>
286
+ <span class="cline-any cline-yes">2x</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
293
  <span class="cline-any cline-yes">1x</span>
292
294
  <span class="cline-any cline-yes">1x</span>
293
295
  <span class="cline-any cline-yes">1x</span>
294
- <span class="cline-any cline-yes">24x</span>
295
- <span class="cline-any cline-yes">24x</span>
296
- <span class="cline-any cline-yes">24x</span>
297
- <span class="cline-any cline-yes">24x</span>
298
- <span class="cline-any cline-yes">24x</span>
299
- <span class="cline-any cline-yes">24x</span>
300
- <span class="cline-any cline-yes">24x</span>
301
- <span class="cline-any cline-yes">24x</span>
302
- <span class="cline-any cline-yes">24x</span>
303
- <span class="cline-any cline-yes">24x</span>
304
- <span class="cline-any cline-no">&nbsp;</span>
305
- <span class="cline-any cline-no">&nbsp;</span>
306
- <span class="cline-any cline-yes">24x</span>
307
- <span class="cline-any cline-yes">24x</span>
308
- <span class="cline-any cline-yes">24x</span>
309
- <span class="cline-any cline-yes">24x</span>
310
- <span class="cline-any cline-yes">24x</span>
311
- <span class="cline-any cline-yes">24x</span>
312
- <span class="cline-any cline-yes">24x</span>
313
- <span class="cline-any cline-yes">24x</span>
314
- <span class="cline-any cline-yes">24x</span>
315
- <span class="cline-any cline-yes">40x</span>
316
- <span class="cline-any cline-yes">40x</span>
317
- <span class="cline-any cline-no">&nbsp;</span>
318
- <span class="cline-any cline-no">&nbsp;</span>
319
- <span class="cline-any cline-no">&nbsp;</span>
320
- <span class="cline-any cline-no">&nbsp;</span>
321
- <span class="cline-any cline-no">&nbsp;</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">1x</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-yes">48x</span>
318
+ <span class="cline-any cline-yes">48x</span>
319
+ <span class="cline-any cline-yes">1x</span>
320
+ <span class="cline-any cline-yes">1x</span>
322
321
  <span class="cline-any cline-no">&nbsp;</span>
323
322
  <span class="cline-any cline-no">&nbsp;</span>
324
323
  <span class="cline-any cline-no">&nbsp;</span>
325
- <span class="cline-any cline-yes">40x</span>
326
- <span class="cline-any cline-yes">40x</span>
327
- <span class="cline-any cline-yes">30x</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-yes">35x</span>
329
+ <span class="cline-any cline-yes">35x</span>
330
+ <span class="cline-any cline-yes">32x</span>
331
+ <span class="cline-any cline-yes">28x</span>
328
332
  <span class="cline-any cline-yes">30x</span>
329
333
  <span class="cline-any cline-yes">30x</span>
330
- <span class="cline-any cline-yes">23x</span>
331
- <span class="cline-any cline-yes">25x</span>
332
- <span class="cline-any cline-yes">25x</span>
333
- <span class="cline-any cline-yes">2x</span>
334
334
  <span class="cline-any cline-yes">2x</span>
335
335
  <span class="cline-any cline-yes">2x</span>
336
336
  <span class="cline-any cline-yes">2x</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
338
  <span class="cline-any cline-no">&nbsp;</span>
338
- <span class="cline-any cline-yes">23x</span>
339
- <span class="cline-any cline-yes">30x</span>
340
- <span class="cline-any cline-yes">40x</span>
341
- <span class="cline-any cline-yes">40x</span>
342
- <span class="cline-any cline-yes">40x</span>
343
- <span class="cline-any cline-yes">3x</span>
344
- <span class="cline-any cline-yes">3x</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-yes">28x</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-yes">48x</span>
345
344
  <span class="cline-any cline-yes">3x</span>
345
+ <span class="cline-any cline-yes">9x</span>
346
346
  <span class="cline-any cline-yes">3x</span>
347
- <span class="cline-any cline-yes">40x</span>
348
- <span class="cline-any cline-yes">6x</span>
349
- <span class="cline-any cline-yes">5x</span>
350
- <span class="cline-any cline-yes">5x</span>
351
- <span class="cline-any cline-yes">5x</span>
352
- <span class="cline-any cline-yes">40x</span>
353
- <span class="cline-any cline-yes">21x</span>
354
- <span class="cline-any cline-yes">21x</span>
355
- <span class="cline-any cline-yes">24x</span>
356
- <span class="cline-any cline-yes">24x</span>
357
- <span class="cline-any cline-yes">24x</span>
358
- <span class="cline-any cline-yes">24x</span>
359
- <span class="cline-any cline-yes">24x</span>
360
- <span class="cline-any cline-yes">24x</span>
361
- <span class="cline-any cline-yes">24x</span>
362
- <span class="cline-any cline-yes">24x</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-yes">45x</span>
349
+ <span class="cline-any cline-yes">8x</span>
350
+ <span class="cline-any cline-yes">7x</span>
351
+ <span class="cline-any cline-yes">7x</span>
352
+ <span class="cline-any cline-yes">8x</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">44x</span>
355
+ <span class="cline-any cline-yes">26x</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
365
  <span class="cline-any cline-yes">3x</span>
364
366
  <span class="cline-any cline-yes">1x</span>
365
367
  <span class="cline-any cline-yes">1x</span>
366
- <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
369
  <span class="cline-any cline-yes">2x</span>
368
- <span class="cline-any cline-yes">24x</span>
369
- <span class="cline-any cline-yes">24x</span>
370
- <span class="cline-any cline-yes">24x</span>
371
- <span class="cline-any cline-yes">24x</span>
372
- <span class="cline-any cline-yes">24x</span>
373
- <span class="cline-any cline-yes">24x</span>
374
- <span class="cline-any cline-yes">24x</span>
375
- <span class="cline-any cline-yes">24x</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
378
  <span class="cline-any cline-yes">4x</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
380
  <span class="cline-any cline-yes">1x</span>
378
381
  <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
383
  <span class="cline-any cline-yes">1x</span>
380
384
  <span class="cline-any cline-yes">1x</span>
381
- <span class="cline-any cline-yes">1x</span>
382
- <span class="cline-any cline-yes">1x</span>
383
- <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
386
  <span class="cline-any cline-yes">3x</span>
385
- <span class="cline-any cline-yes">24x</span>
386
- <span class="cline-any cline-yes">24x</span>
387
- <span class="cline-any cline-yes">24x</span>
388
- <span class="cline-any cline-yes">24x</span>
389
- <span class="cline-any cline-yes">24x</span>
390
- <span class="cline-any cline-yes">24x</span>
391
- <span class="cline-any cline-yes">24x</span>
392
- <span class="cline-any cline-yes">24x</span>
393
- <span class="cline-any cline-yes">24x</span>
394
- <span class="cline-any cline-yes">24x</span>
395
- <span class="cline-any cline-yes">24x</span>
396
- <span class="cline-any cline-yes">24x</span>
397
- <span class="cline-any cline-yes">1x</span>
398
- <span class="cline-any cline-yes">1x</span>
399
- <span class="cline-any cline-yes">1x</span>
400
- <span class="cline-any cline-yes">1x</span>
401
- <span class="cline-any cline-yes">1x</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-yes">28x</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
404
  <span class="cline-any cline-neutral">&nbsp;</span>
403
405
  <span class="cline-any cline-neutral">&nbsp;</span>
404
406
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">"use strict"
@@ -428,7 +430,7 @@ function notice () {
428
430
  * @param {function} fn - Behaviour that will be executed when the event is triggered.
429
431
  */
430
432
  function once ( e, fn ) {
431
- if ( e === '*' ) <span class="branch-0 cbranch-no" title="branch not covered" >return </span> // The wildcard '*' doesn't work for 'once' events
433
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ( e === '*' ) <span class="cstat-no" title="statement not covered" >return </span> // The wildcard '*' doesn't work for 'once' events
432
434
  if ( !scrollOnce[e] ) scrollOnce[e] = []
433
435
  scrollOnce[e].push ( fn )
434
436
  } // once func.
@@ -445,12 +447,13 @@ function notice () {
445
447
  if ( fx ) { // fx is optional
446
448
  if ( scroll[e] ) scroll[e] = scroll[e].filter ( fn =&gt; fn !== fx )
447
449
  if ( scrollOnce[e] ) scrollOnce[e] = scrollOnce[e].filter ( fn =&gt; fn !== fx )
448
- if ( scroll[e] &amp;&amp; scroll[e].length === 0 ) delete scroll[e]
449
- if ( scrollOnce[e] &amp;&amp; scrollOnce[e].length === 0 ) delete scroll[e]
450
+ if ( e !== '*' &amp;&amp; scroll[e] &amp;&amp; scroll[e].length === 0 ) delete scroll[e] // scroll['*'] must always exist - 'emit' relies on it
451
+ if ( scrollOnce[e] &amp;&amp; scrollOnce[e].length === 0 ) delete scrollOnce[e]
450
452
  return
451
453
  }
452
454
  if ( scrollOnce[e] ) delete scrollOnce[e]
453
- if ( scroll[e] ) delete scroll[e]
455
+ if ( e === '*' ) scroll['*'] = [] // scroll['*'] must always exist - 'emit' relies on it
456
+ else if ( scroll[e] ) delete scroll[e]
454
457
  } // off func.
455
458
  /**
456
459
  * Resets all event-related data structures.
@@ -469,9 +472,9 @@ function notice () {
469
472
  * @param {string} [header] - Optional. The header string for the debug message.
470
473
  * @returns void
471
474
  */
472
- <span class="fstat-no" title="function not covered" > function debug ( val, header ) {</span>
473
- <span class="cstat-no" title="statement not covered" > debugFlag = val ? true : false</span>
474
- <span class="cstat-no" title="statement not covered" > if ( header &amp;&amp; (typeof header === 'string') ) debugHeader = header</span>
475
+ function debug ( val, header ) {
476
+ debugFlag = val ? true : <span class="branch-1 cbranch-no" title="branch not covered" >false</span>
477
+ <span class="missing-if-branch" title="else path not taken" >E</span>if ( header &amp;&amp; (typeof header === 'string') ) debugHeader = header
475
478
  } // debug func.
476
479
  /**
477
480
  * Triggers an event and executes all associated functions.
@@ -482,28 +485,27 @@ function notice () {
482
485
  */
483
486
  function emit () {
484
487
  const [ e, ...args ] = arguments
485
- if ( debugFlag ) <span class="branch-0 cbranch-no" title="branch not covered" >{ </span>
486
- <span class="cstat-no" title="statement not covered" > console.log ( `${debugHeader} Event "${e}" was triggered.`)</span>
487
- <span class="cstat-no" title="statement not covered" > if ( args.length &gt; 0 ) {</span>
488
+ if ( debugFlag ) {
489
+ console.log ( `${debugHeader} Event "${String(e)}" was triggered.`) // String() - event names can be Symbols
490
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ( args.length &gt; 0 ) {
488
491
  <span class="cstat-no" title="statement not covered" > console.log ( 'Arguments:')</span>
489
492
  <span class="cstat-no" title="statement not covered" > console.log ( ...args )</span>
490
493
  <span class="cstat-no" title="statement not covered" > console.log ( '^----' )</span>
491
- <span class="cstat-no" title="statement not covered" > }</span>
492
- <span class="cstat-no" title="statement not covered" > </span>
493
- <span class="cstat-no" title="statement not covered" > }</span>
494
+ }
495
+ }
494
496
  &nbsp;
495
497
  function exeCallback ( name ) {
496
498
  let stopped = false;
497
- if ( name === '*' ) return
499
+ if ( name === '*' ) return
498
500
  if ( ignore.has(name) ) return
499
501
  scroll[name].every ( fn =&gt; {
500
502
  const r = fn ( ...args );
501
503
  if ( typeof(r) !== 'string' ) return true
502
- if ( r.toUpperCase() === 'STOP' ) {
504
+ <span class="missing-if-branch" title="else path not taken" >E</span>if ( r.toUpperCase() === 'STOP' ) {
503
505
  stopped = true
504
506
  return false
505
507
  }
506
- <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > return true</span></span>
508
+ <span class="cstat-no" title="statement not covered" > return true</span>
507
509
  })
508
510
  if ( !stopped ) scroll['*'].forEach ( fn =&gt; fn(e,...args) )
509
511
  } // exeCallback func.
@@ -515,8 +517,9 @@ function notice () {
515
517
  }
516
518
  if ( scrollOnce[e] ) {
517
519
  if ( ignore.has(e) ) return
518
- scrollOnce[e].forEach ( fn =&gt; fn(...args) )
519
- delete scrollOnce[e]
520
+ const onceFns = scrollOnce[e]
521
+ delete scrollOnce[e] // Delete before the calls, so handlers can re-register with 'once'
522
+ onceFns.forEach ( fn =&gt; fn(...args) )
520
523
  }
521
524
  if ( scroll[e] ) {
522
525
  exeCallback ( e )
@@ -577,7 +580,7 @@ export default notice
577
580
  <div class='footer quiet pad2 space-top1 center small'>
578
581
  Code coverage generated by
579
582
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
580
- at 2025-10-18T19:45:53.166Z
583
+ at 2026-07-06T22:03:47.324Z
581
584
  </div>
582
585
  <script src="prettify.js"></script>
583
586
  <script>