@peter.naydenov/notice 2.3.2 → 2.4.1

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/Changelog.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
 
4
4
 
5
+ ### 2.4.1 ( 2025-05-02 )
6
+ - [x] Refactoring: Some speed optimizations;
7
+
8
+
9
+
10
+ ### 2.4.0 ( 2025-01-11 )
11
+ - [x] Types: Name of the event could be a symbol;
12
+
13
+
14
+
5
15
  ### 2.3.2 ( 2024-12-13 )
6
16
  - [x] JSDoc comments were added;
7
17
  - [x] TypeScript generated types were added;
@@ -12,11 +22,13 @@
12
22
  - [x] Fix: Callback stop should stop the wildcard callbacks as well;
13
23
 
14
24
 
25
+
15
26
  ### 2.3.0 ( 2024-03-14 )
16
27
  - [x] Stop execution of the event callbacks on first callback that returns string 'stop';
17
28
  - [ ] Bug: Callback stop should stop the wildcard callbacks as well;
18
29
 
19
30
 
31
+
20
32
  ### 2.2.3 ( 2024-01-29)
21
33
  - [x] Folder 'dist' was added. It contains compiled files for commonjs and es6 modules;
22
34
  - [x] Package.json: "exports" section was added. Allows you to use package as commonjs or es6 module without additional configuration;
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">90.59% </span>
26
+ <span class="strong">93.41% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>106/117</span>
28
+ <span class='fraction'>156/167</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">94.23% </span>
33
+ <span class="strong">94% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>49/52</span>
35
+ <span class='fraction'>47/50</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90.9% </span>
40
+ <span class="strong">90% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/11</span>
42
+ <span class='fraction'>9/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.59% </span>
47
+ <span class="strong">93.41% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>106/117</span>
49
+ <span class='fraction'>156/167</span>
50
50
  </div>
51
51
 
52
52
 
@@ -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="90.59" class="pic high">
84
- <div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
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>
85
85
  </td>
86
- <td data-value="90.59" class="pct high">90.59%</td>
87
- <td data-value="117" class="abs high">106/117</td>
88
- <td data-value="94.23" class="pct high">94.23%</td>
89
- <td data-value="52" class="abs high">49/52</td>
90
- <td data-value="90.9" class="pct high">90.9%</td>
91
- <td data-value="11" class="abs high">10/11</td>
92
- <td data-value="90.59" class="pct high">90.59%</td>
93
- <td data-value="117" class="abs high">106/117</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>
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 2024-12-13T13:43:45.041Z
104
+ at 2025-05-02T08:10:32.747Z
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">90.59% </span>
26
+ <span class="strong">93.41% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>106/117</span>
28
+ <span class='fraction'>156/167</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">94.23% </span>
33
+ <span class="strong">94% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>49/52</span>
35
+ <span class='fraction'>47/50</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">90.9% </span>
40
+ <span class="strong">90% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/11</span>
42
+ <span class='fraction'>9/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.59% </span>
47
+ <span class="strong">93.41% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>106/117</span>
49
+ <span class='fraction'>156/167</span>
50
50
  </div>
51
51
 
52
52
 
@@ -182,7 +182,63 @@
182
182
  <a name='L117'></a><a href='#L117'>117</a>
183
183
  <a name='L118'></a><a href='#L118'>118</a>
184
184
  <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
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>
186
242
  <span class="cline-any cline-yes">24x</span>
187
243
  <span class="cline-any cline-yes">24x</span>
188
244
  <span class="cline-any cline-yes">24x</span>
@@ -197,11 +253,26 @@
197
253
  <span class="cline-any cline-yes">32x</span>
198
254
  <span class="cline-any cline-yes">24x</span>
199
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>
200
262
  <span class="cline-any cline-yes">9x</span>
201
263
  <span class="cline-any cline-yes">9x</span>
202
264
  <span class="cline-any cline-yes">9x</span>
203
265
  <span class="cline-any cline-yes">24x</span>
204
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>
205
276
  <span class="cline-any cline-yes">7x</span>
206
277
  <span class="cline-any cline-yes">5x</span>
207
278
  <span class="cline-any cline-yes">5x</span>
@@ -213,15 +284,34 @@
213
284
  <span class="cline-any cline-yes">7x</span>
214
285
  <span class="cline-any cline-yes">24x</span>
215
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>
216
291
  <span class="cline-any cline-yes">1x</span>
217
292
  <span class="cline-any cline-yes">1x</span>
218
293
  <span class="cline-any cline-yes">1x</span>
219
294
  <span class="cline-any cline-yes">24x</span>
220
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>
221
304
  <span class="cline-any cline-no">&nbsp;</span>
222
305
  <span class="cline-any cline-no">&nbsp;</span>
223
306
  <span class="cline-any cline-yes">24x</span>
224
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>
225
315
  <span class="cline-any cline-yes">40x</span>
226
316
  <span class="cline-any cline-yes">40x</span>
227
317
  <span class="cline-any cline-no">&nbsp;</span>
@@ -264,6 +354,12 @@
264
354
  <span class="cline-any cline-yes">21x</span>
265
355
  <span class="cline-any cline-yes">24x</span>
266
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>
267
363
  <span class="cline-any cline-yes">3x</span>
268
364
  <span class="cline-any cline-yes">1x</span>
269
365
  <span class="cline-any cline-yes">1x</span>
@@ -271,6 +367,12 @@
271
367
  <span class="cline-any cline-yes">2x</span>
272
368
  <span class="cline-any cline-yes">24x</span>
273
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>
274
376
  <span class="cline-any cline-yes">4x</span>
275
377
  <span class="cline-any cline-yes">1x</span>
276
378
  <span class="cline-any cline-yes">1x</span>
@@ -292,9 +394,7 @@
292
394
  <span class="cline-any cline-yes">24x</span>
293
395
  <span class="cline-any cline-yes">24x</span>
294
396
  <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>
397
+ <span class="cline-any cline-yes">1x</span>
298
398
  <span class="cline-any cline-yes">1x</span>
299
399
  <span class="cline-any cline-yes">1x</span>
300
400
  <span class="cline-any cline-yes">1x</span>
@@ -303,23 +403,44 @@
303
403
  <span class="cline-any cline-neutral">&nbsp;</span>
304
404
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">"use strict"
305
405
  function notice () {
306
- function Notice () {
406
+
307
407
  let
308
408
  scroll = {'*':[]} // General events with their subscribers
309
409
  , scrollOnce = {} // Single events with their subscribers
310
- , ignore = [] // Ignore event names ( general and single )
410
+ , ignore = new Set () // Ignore event names ( general and single )
311
411
  , debugFlag = false
312
412
  , debugHeader = ''
313
413
  ;
414
+ /**
415
+ * Register a regular event.
416
+ * @param {string|Symbol} e - Name of the event;
417
+ * @param {function} fn - Behaviour that will be assigned to this eventName;
418
+ * @returns void
419
+ */
314
420
  function on ( e, fn ) {
315
421
  if ( !scroll[e] ) scroll[e] = []
316
422
  scroll[e].push ( fn )
317
423
  } // on func.
424
+ &nbsp;
425
+ /**
426
+ * Register a single event that will be triggered only once.
427
+ * @param {string|Symbol} e - Name of the event; the wildcard '*' is not supported.
428
+ * @param {function} fn - Behaviour that will be executed when the event is triggered.
429
+ */
318
430
  function once ( e, fn ) {
319
431
  if ( e === '*' ) <span class="branch-0 cbranch-no" title="branch not covered" >return </span> // The wildcard '*' doesn't work for 'once' events
320
432
  if ( !scrollOnce[e] ) scrollOnce[e] = []
321
433
  scrollOnce[e].push ( fn )
322
434
  } // once func.
435
+ /**
436
+ * Remove a behavior (function) related to the specified event.
437
+ * If 'fx' is provided, only that specific function will be removed from the event.
438
+ * If 'fx' is not provided, all functions related to the event will be removed.
439
+ * Works with both regular and single events.
440
+ *
441
+ * @param {string|Symbol} e - Name of the event.
442
+ * @param {function} [fx] - Optional. The specific function to be removed.
443
+ */
323
444
  function off ( e, fx ) {
324
445
  if ( fx ) { // fx is optional
325
446
  if ( scroll[e] ) scroll[e] = scroll[e].filter ( fn =&gt; fn !== fx )
@@ -331,15 +452,34 @@ function notice () {
331
452
  if ( scrollOnce[e] ) delete scrollOnce[e]
332
453
  if ( scroll[e] ) delete scroll[e]
333
454
  } // off func.
455
+ /**
456
+ * Resets all event-related data structures.
457
+ * Clears all general and single event subscriptions, as well as the ignore list.
458
+ */
334
459
  function reset () {
335
460
  scroll = {'*':[]}
336
461
  scrollOnce = {}
337
- ignore = []
462
+ ignore = new Set ()
338
463
  } // reset func.
464
+ /**
465
+ * Enables or disables debug mode.
466
+ * In debug mode, every triggered event prints a message to the console, including the event name and arguments.
467
+ * The header argument is optional and can be used to provide a prefix string for the debug message.
468
+ * @param {boolean} val - Enable or disable debug mode.
469
+ * @param {string} [header] - Optional. The header string for the debug message.
470
+ * @returns void
471
+ */
339
472
  <span class="fstat-no" title="function not covered" > function debug ( val, header ) {</span>
340
473
  <span class="cstat-no" title="statement not covered" > debugFlag = val ? true : false</span>
341
474
  <span class="cstat-no" title="statement not covered" > if ( header &amp;&amp; (typeof header === 'string') ) debugHeader = header</span>
342
475
  } // debug func.
476
+ /**
477
+ * Triggers an event and executes all associated functions.
478
+ *
479
+ * @param {string|Symbol} e - Name of the event to be triggered.
480
+ * @param {...*} [args] - Optional. Arguments to be passed to the callback functions.
481
+ * @returns void
482
+ */
343
483
  function emit () {
344
484
  const [ e, ...args ] = arguments
345
485
  if ( debugFlag ) <span class="branch-0 cbranch-no" title="branch not covered" >{ </span>
@@ -355,7 +495,7 @@ function notice () {
355
495
  function exeCallback ( name ) {
356
496
  let stopped = false;
357
497
  if ( name === '*' ) return
358
- if ( ignore.includes(name) ) return
498
+ if ( ignore.has(name) ) return
359
499
  scroll[name].every ( fn =&gt; {
360
500
  const r = fn ( ...args );
361
501
  if ( typeof(r) !== 'string' ) return true
@@ -365,7 +505,7 @@ function notice () {
365
505
  }
366
506
  <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > return true</span></span>
367
507
  })
368
- if ( !stopped ) scroll['*'].forEach ( fn =&gt; fn(e,...args) )
508
+ if ( !stopped ) scroll['*'].forEach ( fn =&gt; fn(e,...args) )
369
509
  } // exeCallback func.
370
510
  &nbsp;
371
511
  if ( e === '*' ) { // The wildcard '*' doesn't work for 'once' events
@@ -374,7 +514,7 @@ function notice () {
374
514
  return
375
515
  }
376
516
  if ( scrollOnce[e] ) {
377
- if ( ignore.includes(e) ) return
517
+ if ( ignore.has(e) ) return
378
518
  scrollOnce[e].forEach ( fn =&gt; fn(...args) )
379
519
  delete scrollOnce[e]
380
520
  }
@@ -382,23 +522,35 @@ function notice () {
382
522
  exeCallback ( e )
383
523
  }
384
524
  } // emit func.
525
+ /**
526
+ * Enables again specified event.
527
+ *
528
+ * @param {string|Symbol} e - Name of the event to be enabled again; the wildcard '*' is supported.
529
+ * @returns void
530
+ */
385
531
  function start ( e ) {
386
532
  if ( e === '*' ) {
387
- ignore = []
533
+ ignore.clear ()
388
534
  return
389
535
  }
390
- ignore = ignore.filter ( type =&gt; e != type )
536
+ ignore.delete ( e )
391
537
  } // start func.
538
+ /**
539
+ * Temporarily disables specified event.
540
+ *
541
+ * @param {string|Symbol} e - Name of the event to be disabled; the wildcard '*' is supported.
542
+ * @returns void
543
+ */
392
544
  function stop ( e ) {
393
545
  if ( e === '*' ) {
394
546
  const
395
547
  evNames = Object.keys ( scroll )
396
548
  , evOnceNames = Object.keys ( scrollOnce )
397
549
  ;
398
- ignore = [ ...evOnceNames, ...evNames ]
550
+ ignore = new Set ([ ...evOnceNames, ...evNames ])
399
551
  return
400
552
  }
401
- ignore.push ( e )
553
+ ignore.add ( e )
402
554
  } // stop func.
403
555
  &nbsp;
404
556
  return {
@@ -411,9 +563,7 @@ function notice () {
411
563
  , start // Remove event from ignore list
412
564
  , debug
413
565
  }
414
- } // notice fn.
415
- return Notice ()
416
- }
566
+ } // notice func.
417
567
  &nbsp;
418
568
  &nbsp;
419
569
  &nbsp;
@@ -427,7 +577,7 @@ export default notice
427
577
  <div class='footer quiet pad2 space-top1 center small'>
428
578
  Code coverage generated by
429
579
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
430
- at 2024-12-13T13:43:45.041Z
580
+ at 2025-05-02T08:10:32.747Z
431
581
  </div>
432
582
  <script src="prettify.js"></script>
433
583
  <script>