@zajno/common 1.5.7 → 1.5.8

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 (79) hide show
  1. package/coverage/clover.xml +12 -12
  2. package/coverage/coverage-final.json +1 -1
  3. package/coverage/lcov-report/async/index.html +1 -1
  4. package/coverage/lcov-report/async/timeout.ts.html +1 -1
  5. package/coverage/lcov-report/index.html +1 -1
  6. package/coverage/lcov-report/logger/index.html +1 -1
  7. package/coverage/lcov-report/logger/index.ts.html +8 -8
  8. package/coverage/lcov-report/parallel.ts.html +241 -79
  9. package/coverage/lcov-report/queue/index.html +21 -21
  10. package/coverage/lcov-report/queue/parallel.ts.html +117 -27
  11. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  12. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  13. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  14. package/coverage/lcov-report/src/async/index.html +1 -1
  15. package/coverage/lcov-report/src/async/timeout.ts.html +1 -1
  16. package/coverage/lcov-report/src/cache.ts.html +1 -1
  17. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  19. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  20. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  21. package/coverage/lcov-report/src/dates/index.html +1 -1
  22. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  23. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  24. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  25. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  26. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  27. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  28. package/coverage/lcov-report/src/disposer.ts.html +1 -1
  29. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  30. package/coverage/lcov-report/src/event.ts.html +1 -1
  31. package/coverage/lcov-report/src/fields/index.html +1 -1
  32. package/coverage/lcov-report/src/fields/update.ts.html +1 -1
  33. package/coverage/lcov-report/src/functions.ts.html +1 -1
  34. package/coverage/lcov-report/src/index.html +1 -1
  35. package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
  36. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  37. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  38. package/coverage/lcov-report/src/logger/index.html +1 -1
  39. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  40. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  41. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  42. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  43. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  44. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  45. package/coverage/lcov-report/src/math/index.html +1 -1
  46. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  47. package/coverage/lcov-report/src/observersMap.ts.html +1 -1
  48. package/coverage/lcov-report/src/observingCache.ts.html +1 -1
  49. package/coverage/lcov-report/src/queue/index.html +1 -1
  50. package/coverage/lcov-report/src/queue/parallel.ts.html +12 -12
  51. package/coverage/lcov-report/src/tempoCache.ts.html +1 -1
  52. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  53. package/coverage/lcov-report/src/types.ts.html +1 -1
  54. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  55. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  56. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  57. package/coverage/lcov-report/src/validation/index.html +1 -1
  58. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  59. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  60. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  61. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  62. package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +1 -1
  63. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +1 -1
  64. package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +1 -1
  65. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  66. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  67. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  68. package/coverage/lcov-report/src/viewModels/TextModel.ts.html +1 -1
  69. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
  70. package/coverage/lcov-report/src/viewModels/index.html +1 -1
  71. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  72. package/coverage/lcov.info +14 -14
  73. package/jest.config.js +2 -1
  74. package/lib/queue/parallel.js +1 -1
  75. package/lib/queue/parallel.js.map +1 -1
  76. package/package.json +2 -1
  77. package/src/queue/__tests__/parallel.test.ts +6 -5
  78. package/src/queue/parallel.ts +1 -1
  79. package/yarn.lock +10 -2
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">21.57% </span>
26
+ <span class="strong">75.95% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>11/51</span>
28
+ <span class='fraction'>60/79</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">2% </span>
33
+ <span class="strong">45.9% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1/50</span>
35
+ <span class='fraction'>28/61</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">27.27% </span>
40
+ <span class="strong">62.5% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/11</span>
42
+ <span class='fraction'>10/16</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">22% </span>
47
+ <span class="strong">78.67% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>11/50</span>
49
+ <span class='fraction'>59/75</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -164,7 +164,68 @@
164
164
  <a name='L99'></a><a href='#L99'>99</a>
165
165
  <a name='L100'></a><a href='#L100'>100</a>
166
166
  <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
222
+ <span class="cline-any cline-yes">1x</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
168
229
  <span class="cline-any cline-neutral">&nbsp;</span>
169
230
  <span class="cline-any cline-neutral">&nbsp;</span>
170
231
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -180,36 +241,47 @@
180
241
  <span class="cline-any cline-neutral">&nbsp;</span>
181
242
  <span class="cline-any cline-yes">1x</span>
182
243
  <span class="cline-any cline-neutral">&nbsp;</span>
183
- <span class="cline-any cline-no">&nbsp;</span>
244
+ <span class="cline-any cline-yes">1x</span>
184
245
  <span class="cline-any cline-yes">1x</span>
185
246
  <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-yes">2x</span>
248
+ <span class="cline-any cline-yes">3x</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-no">&nbsp;</span>
251
+ <span class="cline-any cline-no">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
253
  <span class="cline-any cline-neutral">&nbsp;</span>
187
254
  <span class="cline-any cline-yes">1x</span>
188
255
  <span class="cline-any cline-yes">1x</span>
189
256
  <span class="cline-any cline-neutral">&nbsp;</span>
190
257
  <span class="cline-any cline-neutral">&nbsp;</span>
191
258
  <span class="cline-any cline-neutral">&nbsp;</span>
192
- <span class="cline-any cline-no">&nbsp;</span>
193
259
  <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-yes">5x</span>
194
261
  <span class="cline-any cline-neutral">&nbsp;</span>
195
262
  <span class="cline-any cline-neutral">&nbsp;</span>
196
- <span class="cline-any cline-no">&nbsp;</span>
197
263
  <span class="cline-any cline-neutral">&nbsp;</span>
198
- <span class="cline-any cline-no">&nbsp;</span>
199
- <span class="cline-any cline-no">&nbsp;</span>
264
+ <span class="cline-any cline-yes">5x</span>
200
265
  <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-yes">1x</span>
267
+ <span class="cline-any cline-yes">1x</span>
201
268
  <span class="cline-any cline-neutral">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
203
- <span class="cline-any cline-no">&nbsp;</span>
204
- <span class="cline-any cline-no">&nbsp;</span>
205
269
  <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-yes">4x</span>
206
271
  <span class="cline-any cline-neutral">&nbsp;</span>
207
272
  <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-no">&nbsp;</span>
273
+ <span class="cline-any cline-yes">4x</span>
274
+ <span class="cline-any cline-yes">4x</span>
275
+ <span class="cline-any cline-yes">4x</span>
209
276
  <span class="cline-any cline-no">&nbsp;</span>
210
277
  <span class="cline-any cline-neutral">&nbsp;</span>
211
278
  <span class="cline-any cline-neutral">&nbsp;</span>
212
- <span class="cline-any cline-no">&nbsp;</span>
279
+ <span class="cline-any cline-yes">4x</span>
280
+ <span class="cline-any cline-yes">4x</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-yes">4x</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
285
  <span class="cline-any cline-no">&nbsp;</span>
214
286
  <span class="cline-any cline-no">&nbsp;</span>
215
287
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -218,47 +290,83 @@
218
290
  <span class="cline-any cline-no">&nbsp;</span>
219
291
  <span class="cline-any cline-no">&nbsp;</span>
220
292
  <span class="cline-any cline-no">&nbsp;</span>
221
- <span class="cline-any cline-no">&nbsp;</span>
222
293
  <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-no">&nbsp;</span>
223
295
  <span class="cline-any cline-neutral">&nbsp;</span>
224
296
  <span class="cline-any cline-no">&nbsp;</span>
225
297
  <span class="cline-any cline-neutral">&nbsp;</span>
226
298
  <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-yes">4x</span>
227
300
  <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-no">&nbsp;</span>
229
- <span class="cline-any cline-no">&nbsp;</span>
301
+ <span class="cline-any cline-yes">4x</span>
230
302
  <span class="cline-any cline-neutral">&nbsp;</span>
231
- <span class="cline-any cline-no">&nbsp;</span>
232
- <span class="cline-any cline-no">&nbsp;</span>
233
- <span class="cline-any cline-no">&nbsp;</span>
234
303
  <span class="cline-any cline-neutral">&nbsp;</span>
235
304
  <span class="cline-any cline-neutral">&nbsp;</span>
236
- <span class="cline-any cline-no">&nbsp;</span>
305
+ <span class="cline-any cline-yes">2x</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-yes">1x</span>
310
+ <span class="cline-any cline-yes">1x</span>
311
+ <span class="cline-any cline-yes">1x</span>
237
312
  <span class="cline-any cline-neutral">&nbsp;</span>
238
313
  <span class="cline-any cline-no">&nbsp;</span>
239
314
  <span class="cline-any cline-no">&nbsp;</span>
240
315
  <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-no">&nbsp;</span>
242
316
  <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-yes">1x</span>
243
318
  <span class="cline-any cline-neutral">&nbsp;</span>
244
- <span class="cline-any cline-no">&nbsp;</span>
245
- <span class="cline-any cline-no">&nbsp;</span>
246
319
  <span class="cline-any cline-neutral">&nbsp;</span>
247
320
  <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-no">&nbsp;</span>
249
- <span class="cline-any cline-no">&nbsp;</span>
321
+ <span class="cline-any cline-yes">4x</span>
322
+ <span class="cline-any cline-yes">4x</span>
323
+ <span class="cline-any cline-yes">2x</span>
324
+ <span class="cline-any cline-yes">2x</span>
250
325
  <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-yes">4x</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-yes">2x</span>
332
+ <span class="cline-any cline-yes">2x</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-yes">2x</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-yes">2x</span>
337
+ <span class="cline-any cline-yes">2x</span>
251
338
  <span class="cline-any cline-no">&nbsp;</span>
252
- <span class="cline-any cline-no">&nbsp;</span>
253
- <span class="cline-any cline-no">&nbsp;</span>
254
339
  <span class="cline-any cline-neutral">&nbsp;</span>
255
340
  <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-yes">2x</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-yes">2x</span>
344
+ <span class="cline-any cline-yes">2x</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-yes">4x</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-yes">2x</span>
256
350
  <span class="cline-any cline-no">&nbsp;</span>
257
351
  <span class="cline-any cline-neutral">&nbsp;</span>
258
352
  <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-yes">2x</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-yes">2x</span>
356
+ <span class="cline-any cline-yes">2x</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
358
  <span class="cline-any cline-yes">1x</span>
260
- <span class="cline-any cline-no">&nbsp;</span>
261
- <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-yes">1x</span>
360
+ <span class="cline-any cline-yes">1x</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-yes">1x</span>
364
+ <span class="cline-any cline-yes">1x</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">5x</span>
369
+ <span class="cline-any cline-yes">5x</span>
262
370
  <span class="cline-any cline-neutral">&nbsp;</span>
263
371
  <span class="cline-any cline-no">&nbsp;</span>
264
372
  <span class="cline-any cline-no">&nbsp;</span>
@@ -266,10 +374,17 @@
266
374
  <span class="cline-any cline-neutral">&nbsp;</span>
267
375
  <span class="cline-any cline-neutral">&nbsp;</span>
268
376
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { createLogger, ILogger } from '../logger';
377
+ import { Event } from '../event';
378
+ &nbsp;
379
+ export type QueueItemExecutor = () =&gt; void | Promise&lt;void&gt;;
269
380
  &nbsp;
270
- type Loader = () =&gt; void | Promise&lt;void&gt;;
381
+ export type QueueItem = {
382
+ excecute: QueueItemExecutor,
383
+ key?: string,
384
+ cancel?: () =&gt; void,
385
+ };
271
386
  &nbsp;
272
- type Queue = Loader[];
387
+ type Queue = QueueItem[];
273
388
  &nbsp;
274
389
  export class ParallelQueue {
275
390
  &nbsp;
@@ -281,85 +396,132 @@ export class ParallelQueue {
281
396
  &nbsp;
282
397
  private _logger: ILogger = null;
283
398
  &nbsp;
284
- <span class="fstat-no" title="function not covered" > public get c</span>urrentoPriority() { <span class="cstat-no" title="statement not covered" >return this._currentIndex; </span>}
399
+ private readonly _beforePriorityRun = new Event&lt;number&gt;();
400
+ private readonly _afterPriorityRun = new Event&lt;number&gt;();
401
+ &nbsp;
402
+ public get currentoPriority() { return this._currentIndex; }
285
403
  public get inProgress() { return this._inProgress; }
404
+ &nbsp;
405
+ <span class="fstat-no" title="function not covered" > public get b</span>eforePriorityRun() { <span class="cstat-no" title="statement not covered" >return this._beforePriorityRun.expose(); </span>}
406
+ <span class="fstat-no" title="function not covered" > public get a</span>fterPriorityRun() { <span class="cstat-no" title="statement not covered" >return this._afterPriorityRun.expose(); </span>}
286
407
  &nbsp;
287
408
  public withLogger(name?: string) {
288
409
  this._logger = createLogger(`[Queue:${name || <span class="branch-1 cbranch-no" title="branch not covered" >'?'}</span>]`);
289
410
  return this;
290
411
  }
291
412
  &nbsp;
292
- public <span class="fstat-no" title="function not covered" >enqueue(</span>cb: Loader, priority?: number) {
293
- const p = <span class="cstat-no" title="statement not covered" >Math.round(priority || 0);</span>
413
+ /** @returns A callback that will try to cancel queued item */
414
+ public enqueue(cb: QueueItemExecutor, priority?: number, key?: string): () =&gt; void {
415
+ const p = Math.round(priority || 0);
294
416
  &nbsp;
295
417
  // if it's started and the priority has been processing already
296
418
  // or it has just finished
297
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._inProgress &amp;&amp; p &lt;= this._currentIndex || this._inProgress === false) {</span>
419
+ if (this._inProgress &amp;&amp; p &lt; this._currentIndex || this._inProgress === false) {
298
420
  // just start the loader
299
- <span class="cstat-no" title="statement not covered" > this._executeLoader(cb, p, 1000);</span>
300
- <span class="cstat-no" title="statement not covered" > return;</span>
421
+ this._executeLoader(cb, p, 1000);
422
+ return <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >false;</span>
423
+ }
424
+ &nbsp;
425
+ const item: QueueItem = { excecute: cb };
426
+ &nbsp;
427
+ // Enqueue for future execution
428
+ const q = this.getQueue(p);
429
+ const existing = key &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >q.find(<span class="fstat-no" title="function not covered" >qi </span>=&gt; <span class="cstat-no" title="statement not covered" >qi.key === key)</span>;</span>
430
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (<span class="branch-1 cbranch-no" title="branch not covered" >existing?.cancel)</span> {
431
+ <span class="cstat-no" title="statement not covered" > existing.cancel();</span>
301
432
  }
302
433
  &nbsp;
303
- const q = <span class="cstat-no" title="statement not covered" >this.getQueue(p);</span>
304
- <span class="cstat-no" title="statement not covered" > q.push(cb);</span>
305
- <span class="cstat-no" title="statement not covered" > this._maxIndex = Math.max(this._maxIndex, p);</span>
434
+ q.push(item);
435
+ this._maxIndex = Math.max(this._maxIndex, p);
436
+ &nbsp;
437
+ // Return callback for removing the item from the queue
438
+ const cancelCallback = <span class="fstat-no" title="function not covered" >() =</span>&gt; {
439
+ // The processing has started and this queue has been passed already
440
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._inProgress != null &amp;&amp; this._currentIndex &gt;= p) {</span>
441
+ <span class="cstat-no" title="statement not covered" > return false;</span>
442
+ }
443
+ &nbsp;
444
+ // find and remove the item
445
+ const i = <span class="cstat-no" title="statement not covered" >q.findIndex(<span class="fstat-no" title="function not covered" >qi </span>=&gt; <span class="cstat-no" title="statement not covered" >qi === item)</span>;</span>
446
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (i &gt;= 0) {</span>
447
+ <span class="cstat-no" title="statement not covered" > q.splice(i, 1);</span>
448
+ // return true if we're sure that the item hasn't been executed yet
449
+ <span class="cstat-no" title="statement not covered" > return true;</span>
450
+ }
451
+ <span class="cstat-no" title="statement not covered" > return false;</span>
452
+ };
453
+ &nbsp;
454
+ item.cancel = cancelCallback;
455
+ &nbsp;
456
+ return cancelCallback;
306
457
  }
307
458
  &nbsp;
308
- public <span class="fstat-no" title="function not covered" >start(</span>) {
309
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._inProgress) {</span>
310
- <span class="cstat-no" title="statement not covered" > return;</span>
459
+ public async start() {
460
+ if (this._inProgress) {
461
+ return undefined;
311
462
  }
312
463
  &nbsp;
313
- <span class="cstat-no" title="statement not covered" > this._inProgress = true;</span>
314
- <span class="cstat-no" title="statement not covered" > this.tryStartQueue()</span>
315
- .catch(<span class="fstat-no" title="function not covered" >err </span>=&gt; <span class="cstat-no" title="statement not covered" >this._logger?.warn('Failed to process queue:', err));</span>
464
+ this._inProgress = true;
465
+ try {
466
+ await this.tryStartQueue();
467
+ } catch (err) {
468
+ <span class="cstat-no" title="statement not covered" > this._logger?.warn('Failed to process queue:', err);</span>
469
+ <span class="cstat-no" title="statement not covered" > return false;</span>
470
+ }
471
+ &nbsp;
472
+ return true;
316
473
  }
317
474
  &nbsp;
318
- private <span class="fstat-no" title="function not covered" >getQueue(</span>priority: number = <span class="branch-0 cbranch-no" title="branch not covered" >0)</span> {
319
- let q = <span class="cstat-no" title="statement not covered" >this._queues[priority];</span>
320
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!q) {</span>
321
- <span class="cstat-no" title="statement not covered" > q = [];</span>
322
- <span class="cstat-no" title="statement not covered" > this._queues[priority] = q;</span>
475
+ private getQueue(priority: number = <span class="branch-0 cbranch-no" title="branch not covered" >0)</span> {
476
+ let q = this._queues[priority];
477
+ if (!q) {
478
+ q = [];
479
+ this._queues[priority] = q;
323
480
  }
324
481
  &nbsp;
325
- <span class="cstat-no" title="statement not covered" > return q;</span>
482
+ return q;
326
483
  }
327
484
  &nbsp;
328
- private <span class="fstat-no" title="function not covered" >async </span>tryStartQueue() {
329
- let current: Loader[] = <span class="cstat-no" title="statement not covered" >null;</span>
330
- let iterations = <span class="cstat-no" title="statement not covered" >0;</span>
485
+ private async tryStartQueue() {
486
+ let current: QueueItem[] = null;
487
+ let iterations = 0;
331
488
  &nbsp;
332
- <span class="cstat-no" title="statement not covered" > while ((current = this._queues[this._currentIndex])?.length) {</span>
333
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (iterations++ &gt; 5) {</span>
489
+ await this._beforePriorityRun.triggerAsync(this._currentIndex);
490
+ &nbsp;
491
+ while ((current = this._queues[this._currentIndex])<span class="branch-0 cbranch-no" title="branch not covered" >?.l</span>ength) {
492
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (iterations++ &gt; 5) {
334
493
  <span class="cstat-no" title="statement not covered" > break;</span>
335
494
  }
336
495
  &nbsp;
337
- <span class="cstat-no" title="statement not covered" > this._logger?.log('Processing priority =', this._currentIndex, '; count =', current.length);</span>
496
+ this._logger<span class="branch-0 cbranch-no" title="branch not covered" >?.l</span>og('Processing priority =', this._currentIndex, '; count =', current.length);
338
497
  &nbsp;
339
- const items = <span class="cstat-no" title="statement not covered" >current.slice();</span>
340
- <span class="cstat-no" title="statement not covered" > current.length = 0;</span>
498
+ const items = current.slice();
499
+ current.length = 0;
341
500
  &nbsp;
342
- <span class="cstat-no" title="statement not covered" > await Promise.all(items.map(<span class="fstat-no" title="function not covered" >(l</span>oader, index) =&gt; <span class="cstat-no" title="statement not covered" >this._executeLoader(loader, this._currentIndex, index))</span>);</span>
501
+ await Promise.all(items.map((item, index) =&gt; this._executeLoader(item.excecute, this._currentIndex, index)));
343
502
  }
344
503
  &nbsp;
345
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!current?.length &amp;&amp; iterations === 0) {</span>
504
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!current<span class="branch-0 cbranch-no" title="branch not covered" >?.l</span>ength &amp;&amp; iterations === 0) {
346
505
  <span class="cstat-no" title="statement not covered" > this._logger?.log('Skipping priority =', this._currentIndex, '; no items');</span>
347
506
  }
348
507
  &nbsp;
349
- const next = <span class="cstat-no" title="statement not covered" >++this._currentIndex;</span>
350
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (next &gt; this._maxIndex) {</span>
508
+ await this._afterPriorityRun.triggerAsync(this._currentIndex);
509
+ &nbsp;
510
+ const next = this._currentIndex + 1;
511
+ if (next &gt; this._maxIndex) {
351
512
  // looks like we've finished!
352
- <span class="cstat-no" title="statement not covered" > this._inProgress = false;</span>
353
- <span class="cstat-no" title="statement not covered" > this._logger?.log('Finished processing at index =', next - 1);</span>
354
- <span class="cstat-no" title="statement not covered" > return;</span>
513
+ this._inProgress = false;
514
+ this._logger<span class="branch-0 cbranch-no" title="branch not covered" >?.l</span>og('Finished processing at index =', this._currentIndex);
515
+ return;
355
516
  }
356
517
  &nbsp;
357
- <span class="cstat-no" title="statement not covered" > await this.tryStartQueue();</span>
518
+ ++this._currentIndex;
519
+ await this.tryStartQueue();
358
520
  }
359
521
  &nbsp;
360
- private _executeLoader = <span class="fstat-no" title="function not covered" >async </span>(l: Loader, priority: number, index?: number) =&gt; {
361
- <span class="cstat-no" title="statement not covered" > try {</span>
362
- <span class="cstat-no" title="statement not covered" > await l();</span>
522
+ private _executeLoader = async (l: QueueItemExecutor, priority: number, index?: number) =&gt; {
523
+ try {
524
+ await l();
363
525
  } catch (err) {
364
526
  <span class="cstat-no" title="statement not covered" > this._logger?.warn('Failed to process queue item at priority =', priority, ' at index =', index || '?');</span>
365
527
  <span class="cstat-no" title="statement not covered" > this._logger?.error(err);</span>
@@ -373,7 +535,7 @@ export class ParallelQueue {
373
535
  <div class='footer quiet pad2 space-top1 center small'>
374
536
  Code coverage generated by
375
537
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
376
- at 2022-07-22T09:39:26.628Z
538
+ at 2022-08-16T15:15:14.658Z
377
539
  </div>
378
540
  <script src="prettify.js"></script>
379
541
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">89.09% </span>
26
+ <span class="strong">76.39% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>49/55</span>
28
+ <span class='fraction'>55/72</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">48% </span>
33
+ <span class="strong">44.44% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>24/50</span>
35
+ <span class='fraction'>24/54</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">66.67% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/10</span>
42
+ <span class='fraction'>10/15</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.89% </span>
47
+ <span class="strong">78.26% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>48/54</span>
49
+ <span class='fraction'>54/69</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line high'></div>
64
+ <div class='status-line medium'></div>
65
65
  <div class="pad1">
66
66
  <table class="coverage-summary">
67
67
  <thead>
@@ -79,18 +79,18 @@
79
79
  </tr>
80
80
  </thead>
81
81
  <tbody><tr>
82
- <td class="file high" data-value="parallel.ts"><a href="parallel.ts.html">parallel.ts</a></td>
83
- <td data-value="89.09" class="pic high">
84
- <div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
82
+ <td class="file medium" data-value="parallel.ts"><a href="parallel.ts.html">parallel.ts</a></td>
83
+ <td data-value="76.39" class="pic medium">
84
+ <div class="chart"><div class="cover-fill" style="width: 76%"></div><div class="cover-empty" style="width: 24%"></div></div>
85
85
  </td>
86
- <td data-value="89.09" class="pct high">89.09%</td>
87
- <td data-value="55" class="abs high">49/55</td>
88
- <td data-value="48" class="pct low">48%</td>
89
- <td data-value="50" class="abs low">24/50</td>
90
- <td data-value="100" class="pct high">100%</td>
91
- <td data-value="10" class="abs high">10/10</td>
92
- <td data-value="88.89" class="pct high">88.89%</td>
93
- <td data-value="54" class="abs high">48/54</td>
86
+ <td data-value="76.39" class="pct medium">76.39%</td>
87
+ <td data-value="72" class="abs medium">55/72</td>
88
+ <td data-value="44.44" class="pct low">44.44%</td>
89
+ <td data-value="54" class="abs low">24/54</td>
90
+ <td data-value="66.67" class="pct medium">66.67%</td>
91
+ <td data-value="15" class="abs medium">10/15</td>
92
+ <td data-value="78.26" class="pct medium">78.26%</td>
93
+ <td data-value="69" class="abs medium">54/69</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 2022-07-22T09:50:25.760Z
104
+ at 2022-08-16T14:54:54.506Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>