@zajno/common 1.3.0-beta → 1.3.3

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 (152) hide show
  1. package/.github/workflows/CI.yml +8 -0
  2. package/coverage/clover.xml +428 -360
  3. package/coverage/coverage-final.json +20 -19
  4. package/coverage/lcov-report/index.html +44 -44
  5. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  6. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +2 -2
  7. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  8. package/coverage/lcov-report/src/async/index.html +1 -1
  9. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  10. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  11. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  12. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  13. package/coverage/lcov-report/src/dates/index.html +1 -1
  14. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  15. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  16. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  17. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  19. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  20. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  21. package/coverage/lcov-report/src/event.ts.html +3 -3
  22. package/coverage/lcov-report/src/index.html +21 -21
  23. package/coverage/lcov-report/src/lazy.light.ts.html +3 -3
  24. package/coverage/lcov-report/src/logger/batch.ts.html +107 -0
  25. package/coverage/lcov-report/src/logger/console.ts.html +10 -25
  26. package/coverage/lcov-report/src/logger/index.html +54 -39
  27. package/coverage/lcov-report/src/logger/index.ts.html +88 -61
  28. package/coverage/lcov-report/src/logger/named.ts.html +31 -31
  29. package/coverage/lcov-report/src/logger/proxy.ts.html +13 -13
  30. package/coverage/lcov-report/src/math/arrays.ts.html +293 -32
  31. package/coverage/lcov-report/src/math/calc.ts.html +11 -11
  32. package/coverage/lcov-report/src/math/distribution.ts.html +2 -2
  33. package/coverage/lcov-report/src/math/index.html +11 -11
  34. package/coverage/lcov-report/src/math/index.ts.html +6 -6
  35. package/coverage/lcov-report/src/transitionObserver.ts.html +5 -5
  36. package/coverage/lcov-report/src/types.ts.html +33 -18
  37. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  38. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  39. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  40. package/coverage/lcov-report/src/validation/index.html +1 -1
  41. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  42. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  43. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  44. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  45. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +21 -18
  46. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +136 -94
  47. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +19 -10
  48. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +19 -10
  49. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +12 -12
  50. package/coverage/lcov-report/src/viewModels/index.html +45 -45
  51. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +3 -15
  52. package/coverage/lcov.info +871 -720
  53. package/lib/event.d.ts.map +1 -1
  54. package/lib/event.js +1 -1
  55. package/lib/event.js.map +1 -1
  56. package/lib/logger/batch.d.ts +3 -0
  57. package/lib/logger/batch.d.ts.map +1 -0
  58. package/lib/logger/batch.js +12 -0
  59. package/lib/logger/batch.js.map +1 -0
  60. package/lib/logger/console.d.ts +0 -1
  61. package/lib/logger/console.d.ts.map +1 -1
  62. package/lib/logger/console.js +0 -3
  63. package/lib/logger/console.js.map +1 -1
  64. package/lib/logger/file.d.ts +15 -0
  65. package/lib/logger/file.d.ts.map +1 -0
  66. package/lib/logger/file.js +43 -0
  67. package/lib/logger/file.js.map +1 -0
  68. package/lib/logger/index.d.ts +7 -6
  69. package/lib/logger/index.d.ts.map +1 -1
  70. package/lib/logger/index.js +34 -21
  71. package/lib/logger/index.js.map +1 -1
  72. package/lib/logger/named.js +3 -3
  73. package/lib/logger/named.js.map +1 -1
  74. package/lib/logger/proxy.d.ts +1 -1
  75. package/lib/logger/proxy.d.ts.map +1 -1
  76. package/lib/logger/proxy.js +2 -2
  77. package/lib/logger/proxy.js.map +1 -1
  78. package/lib/math/arrays.d.ts +16 -0
  79. package/lib/math/arrays.d.ts.map +1 -1
  80. package/lib/math/arrays.js +77 -1
  81. package/lib/math/arrays.js.map +1 -1
  82. package/lib/transitionObserver.d.ts.map +1 -1
  83. package/lib/transitionObserver.js +2 -2
  84. package/lib/transitionObserver.js.map +1 -1
  85. package/lib/types.d.ts +4 -0
  86. package/lib/types.d.ts.map +1 -1
  87. package/lib/types.js +6 -2
  88. package/lib/types.js.map +1 -1
  89. package/lib/viewModels/FlagModel.d.ts +4 -4
  90. package/lib/viewModels/FlagModel.d.ts.map +1 -1
  91. package/lib/viewModels/FlagModel.js +1 -0
  92. package/lib/viewModels/FlagModel.js.map +1 -1
  93. package/lib/viewModels/MultiSelectModel.d.ts +9 -3
  94. package/lib/viewModels/MultiSelectModel.d.ts.map +1 -1
  95. package/lib/viewModels/MultiSelectModel.js +16 -2
  96. package/lib/viewModels/MultiSelectModel.js.map +1 -1
  97. package/lib/viewModels/NumberModel.d.ts +4 -2
  98. package/lib/viewModels/NumberModel.d.ts.map +1 -1
  99. package/lib/viewModels/NumberModel.js +1 -0
  100. package/lib/viewModels/NumberModel.js.map +1 -1
  101. package/lib/viewModels/{PromptModalViewModel.d.ts → PromptModal.d.ts} +1 -1
  102. package/lib/viewModels/PromptModal.d.ts.map +1 -0
  103. package/lib/viewModels/{PromptModalViewModel.js → PromptModal.js} +1 -1
  104. package/lib/viewModels/PromptModal.js.map +1 -0
  105. package/lib/viewModels/SelectModel.d.ts +4 -2
  106. package/lib/viewModels/SelectModel.d.ts.map +1 -1
  107. package/lib/viewModels/SelectModel.js +1 -0
  108. package/lib/viewModels/SelectModel.js.map +1 -1
  109. package/lib/viewModels/TextModel.d.ts +4 -3
  110. package/lib/viewModels/TextModel.d.ts.map +1 -1
  111. package/lib/viewModels/TextModel.js +5 -11
  112. package/lib/viewModels/TextModel.js.map +1 -1
  113. package/lib/viewModels/ValuesCollector.d.ts +1 -3
  114. package/lib/viewModels/ValuesCollector.d.ts.map +1 -1
  115. package/lib/viewModels/ValuesCollector.js.map +1 -1
  116. package/lib/viewModels/index.d.ts +2 -1
  117. package/lib/viewModels/index.d.ts.map +1 -1
  118. package/lib/viewModels/index.js +2 -1
  119. package/lib/viewModels/index.js.map +1 -1
  120. package/lib/viewModels/types.d.ts +16 -0
  121. package/lib/viewModels/types.d.ts.map +1 -0
  122. package/lib/viewModels/types.js +3 -0
  123. package/lib/viewModels/types.js.map +1 -0
  124. package/lib/viewModels/wrappers.d.ts +1 -4
  125. package/lib/viewModels/wrappers.d.ts.map +1 -1
  126. package/lib/viewModels/wrappers.js.map +1 -1
  127. package/package.json +1 -1
  128. package/src/event.ts +2 -2
  129. package/src/logger/__tests__/{index.test.ts → logger.test.ts} +97 -41
  130. package/src/logger/batch.ts +9 -0
  131. package/src/logger/console.ts +0 -5
  132. package/src/logger/file.ts +46 -0
  133. package/src/logger/index.ts +37 -28
  134. package/src/logger/named.ts +3 -3
  135. package/src/logger/proxy.ts +2 -2
  136. package/src/math/__tests__/arrays.test.ts +53 -0
  137. package/src/math/arrays.ts +87 -0
  138. package/src/transitionObserver.ts +2 -2
  139. package/src/types.ts +6 -1
  140. package/src/viewModels/FlagModel.ts +5 -4
  141. package/src/viewModels/MultiSelectModel.ts +19 -5
  142. package/src/viewModels/NumberModel.ts +5 -2
  143. package/src/viewModels/{PromptModalViewModel.ts → PromptModal.ts} +0 -0
  144. package/src/viewModels/SelectModel.ts +5 -2
  145. package/src/viewModels/TextModel.ts +6 -6
  146. package/src/viewModels/ValuesCollector.ts +1 -4
  147. package/src/viewModels/__tests__/multiSelect.test.ts +127 -12
  148. package/src/viewModels/index.ts +2 -1
  149. package/src/viewModels/types.ts +19 -0
  150. package/src/viewModels/wrappers.ts +1 -5
  151. package/lib/viewModels/PromptModalViewModel.d.ts.map +0 -1
  152. package/lib/viewModels/PromptModalViewModel.js.map +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">48.35% </span>
26
+ <span class="strong">77.67% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>44/91</span>
28
+ <span class='fraction'>80/103</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">43.75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/10</span>
35
+ <span class='fraction'>7/16</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">22.22% </span>
40
+ <span class="strong">66.67% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>8/36</span>
42
+ <span class='fraction'>28/42</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">49.33% </span>
47
+ <span class="strong">77.11% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>37/75</span>
49
+ <span class='fraction'>64/83</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line low'></div>
58
+ <div class='status-line medium'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -207,7 +207,21 @@
207
207
  <a name='L148'></a><a href='#L148'>148</a>
208
208
  <a name='L149'></a><a href='#L149'>149</a>
209
209
  <a name='L150'></a><a href='#L150'>150</a>
210
- <a name='L151'></a><a href='#L151'>151</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a>
216
+ <a name='L157'></a><a href='#L157'>157</a>
217
+ <a name='L158'></a><a href='#L158'>158</a>
218
+ <a name='L159'></a><a href='#L159'>159</a>
219
+ <a name='L160'></a><a href='#L160'>160</a>
220
+ <a name='L161'></a><a href='#L161'>161</a>
221
+ <a name='L162'></a><a href='#L162'>162</a>
222
+ <a name='L163'></a><a href='#L163'>163</a>
223
+ <a name='L164'></a><a href='#L164'>164</a>
224
+ <a name='L165'></a><a href='#L165'>165</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
211
225
  <span class="cline-any cline-yes">1x</span>
212
226
  <span class="cline-any cline-yes">1x</span>
213
227
  <span class="cline-any cline-yes">1x</span>
@@ -216,103 +230,110 @@
216
230
  <span class="cline-any cline-neutral">&nbsp;</span>
217
231
  <span class="cline-any cline-yes">1x</span>
218
232
  <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-yes">1x</span>
219
234
  <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-yes">3x</span>
221
235
  <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">3x</span>
223
- <span class="cline-any cline-yes">3x</span>
236
+ <span class="cline-any cline-yes">6x</span>
224
237
  <span class="cline-any cline-neutral">&nbsp;</span>
225
- <span class="cline-any cline-yes">3x</span>
226
- <span class="cline-any cline-yes">3x</span>
238
+ <span class="cline-any cline-yes">6x</span>
239
+ <span class="cline-any cline-yes">6x</span>
227
240
  <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-yes">6x</span>
242
+ <span class="cline-any cline-yes">6x</span>
228
243
  <span class="cline-any cline-neutral">&nbsp;</span>
229
- <span class="cline-any cline-yes">3x</span>
230
- <span class="cline-any cline-yes">3x</span>
231
244
  <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-yes">6x</span>
246
+ <span class="cline-any cline-yes">6x</span>
232
247
  <span class="cline-any cline-neutral">&nbsp;</span>
233
- <span class="cline-any cline-yes">3x</span>
234
- <span class="cline-any cline-yes">3x</span>
235
- <span class="cline-any cline-yes">3x</span>
236
- <span class="cline-any cline-yes">3x</span>
237
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-yes">6x</span>
250
+ <span class="cline-any cline-yes">6x</span>
251
+ <span class="cline-any cline-yes">6x</span>
252
+ <span class="cline-any cline-yes">6x</span>
238
253
  <span class="cline-any cline-neutral">&nbsp;</span>
239
254
  <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-yes">1x</span>
241
255
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">1x</span>
256
+ <span class="cline-any cline-yes">25x</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-yes">7x</span>
243
259
  <span class="cline-any cline-neutral">&nbsp;</span>
244
260
  <span class="cline-any cline-no">&nbsp;</span>
245
261
  <span class="cline-any cline-neutral">&nbsp;</span>
246
262
  <span class="cline-any cline-neutral">&nbsp;</span>
247
263
  <span class="cline-any cline-yes">1x</span>
248
- <span class="cline-any cline-yes">4x</span>
264
+ <span class="cline-any cline-yes">49x</span>
249
265
  <span class="cline-any cline-neutral">&nbsp;</span>
250
266
  <span class="cline-any cline-neutral">&nbsp;</span>
251
267
  <span class="cline-any cline-neutral">&nbsp;</span>
252
268
  <span class="cline-any cline-yes">1x</span>
253
- <span class="cline-any cline-no">&nbsp;</span>
269
+ <span class="cline-any cline-yes">9x</span>
254
270
  <span class="cline-any cline-neutral">&nbsp;</span>
255
271
  <span class="cline-any cline-neutral">&nbsp;</span>
256
272
  <span class="cline-any cline-neutral">&nbsp;</span>
257
273
  <span class="cline-any cline-yes">1x</span>
258
- <span class="cline-any cline-no">&nbsp;</span>
259
- <span class="cline-any cline-no">&nbsp;</span>
274
+ <span class="cline-any cline-yes">21x</span>
275
+ <span class="cline-any cline-yes">21x</span>
260
276
  <span class="cline-any cline-neutral">&nbsp;</span>
261
277
  <span class="cline-any cline-neutral">&nbsp;</span>
262
278
  <span class="cline-any cline-no">&nbsp;</span>
263
279
  <span class="cline-any cline-no">&nbsp;</span>
264
280
  <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-yes">1x</span>
266
- <span class="cline-any cline-no">&nbsp;</span>
281
+ <span class="cline-any cline-yes">11x</span>
282
+ <span class="cline-any cline-yes">18x</span>
267
283
  <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-yes">4x</span>
285
+ <span class="cline-any cline-yes">4x</span>
268
286
  <span class="cline-any cline-no">&nbsp;</span>
269
287
  <span class="cline-any cline-neutral">&nbsp;</span>
270
- <span class="cline-any cline-no">&nbsp;</span>
271
288
  <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-yes">3x</span>
273
- <span class="cline-any cline-no">&nbsp;</span>
274
- <span class="cline-any cline-no">&nbsp;</span>
289
+ <span class="cline-any cline-yes">1x</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
291
  <span class="cline-any cline-no">&nbsp;</span>
276
292
  <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-yes">6x</span>
294
+ <span class="cline-any cline-yes">4x</span>
295
+ <span class="cline-any cline-yes">4x</span>
296
+ <span class="cline-any cline-yes">4x</span>
277
297
  <span class="cline-any cline-neutral">&nbsp;</span>
278
298
  <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-yes">3x</span>
280
- <span class="cline-any cline-yes">3x</span>
281
299
  <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-yes">6x</span>
301
+ <span class="cline-any cline-yes">6x</span>
282
302
  <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-yes">3x</span>
284
- <span class="cline-any cline-no">&nbsp;</span>
285
303
  <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-yes">6x</span>
305
+ <span class="cline-any cline-yes">1x</span>
286
306
  <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-yes">3x</span>
288
- <span class="cline-any cline-no">&nbsp;</span>
289
- <span class="cline-any cline-no">&nbsp;</span>
290
- <span class="cline-any cline-no">&nbsp;</span>
291
307
  <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-yes">6x</span>
309
+ <span class="cline-any cline-yes">2x</span>
310
+ <span class="cline-any cline-yes">2x</span>
311
+ <span class="cline-any cline-yes">2x</span>
292
312
  <span class="cline-any cline-neutral">&nbsp;</span>
293
313
  <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-yes">3x</span>
295
- <span class="cline-any cline-yes">3x</span>
296
314
  <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-yes">6x</span>
316
+ <span class="cline-any cline-yes">6x</span>
297
317
  <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">3x</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-yes">6x</span>
299
320
  <span class="cline-any cline-no">&nbsp;</span>
300
321
  <span class="cline-any cline-neutral">&nbsp;</span>
301
322
  <span class="cline-any cline-neutral">&nbsp;</span>
302
323
  <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-yes">3x</span>
304
- <span class="cline-any cline-no">&nbsp;</span>
324
+ <span class="cline-any cline-yes">6x</span>
325
+ <span class="cline-any cline-yes">8x</span>
305
326
  <span class="cline-any cline-no">&nbsp;</span>
306
327
  <span class="cline-any cline-neutral">&nbsp;</span>
307
328
  <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-no">&nbsp;</span>
309
- <span class="cline-any cline-no">&nbsp;</span>
329
+ <span class="cline-any cline-yes">8x</span>
330
+ <span class="cline-any cline-yes">5x</span>
310
331
  <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-no">&nbsp;</span>
332
+ <span class="cline-any cline-yes">3x</span>
312
333
  <span class="cline-any cline-neutral">&nbsp;</span>
313
334
  <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-no">&nbsp;</span>
315
- <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-yes">8x</span>
336
+ <span class="cline-any cline-yes">8x</span>
316
337
  <span class="cline-any cline-neutral">&nbsp;</span>
317
338
  <span class="cline-any cline-neutral">&nbsp;</span>
318
339
  <span class="cline-any cline-no">&nbsp;</span>
@@ -323,14 +344,21 @@
323
344
  <span class="cline-any cline-neutral">&nbsp;</span>
324
345
  <span class="cline-any cline-neutral">&nbsp;</span>
325
346
  <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-yes">3x</span>
327
- <span class="cline-any cline-no">&nbsp;</span>
328
- <span class="cline-any cline-no">&nbsp;</span>
347
+ <span class="cline-any cline-yes">6x</span>
348
+ <span class="cline-any cline-yes">6x</span>
329
349
  <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-yes">6x</span>
351
+ <span class="cline-any cline-yes">1x</span>
352
+ <span class="cline-any cline-yes">1x</span>
330
353
  <span class="cline-any cline-neutral">&nbsp;</span>
331
354
  <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-yes">3x</span>
333
- <span class="cline-any cline-yes">3x</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-yes">7x</span>
357
+ <span class="cline-any cline-yes">7x</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-yes">7x</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
362
  <span class="cline-any cline-neutral">&nbsp;</span>
335
363
  <span class="cline-any cline-neutral">&nbsp;</span>
336
364
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -354,20 +382,22 @@
354
382
  <span class="cline-any cline-yes">1x</span>
355
383
  <span class="cline-any cline-neutral">&nbsp;</span>
356
384
  <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-no">&nbsp;</span>
385
+ <span class="cline-any cline-yes">3x</span>
358
386
  <span class="cline-any cline-neutral">&nbsp;</span>
359
387
  <span class="cline-any cline-neutral">&nbsp;</span>
360
388
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { createLazy } from '../lazy.light';
361
389
  import { action, computed, makeObservable, observable, reaction } from 'mobx';
362
390
  import { FlagModel, ILabeledFlagModel } from './FlagModel';
363
391
  import { ValidatableModel } from './Validatable';
364
- import { IValueModel } from './ValuesCollector';
392
+ import { IValueModel } from './types';
365
393
  import { withLabel } from './wrappers';
394
+ import { ICountableModel, IResetableModel } from 'viewModels';
395
+ import { arraysCompareDistinct } from '../math';
366
396
  &nbsp;
367
- export class MultiSelect&lt;T = any&gt; extends ValidatableModel&lt;ReadonlyArray&lt;T&gt;&gt; implements IValueModel&lt;readonly string[]&gt; {
397
+ export class MultiSelect&lt;T = any&gt; extends ValidatableModel&lt;ReadonlyArray&lt;T&gt;&gt; implements IValueModel&lt;readonly string[]&gt;, IResetableModel, ICountableModel {
368
398
  &nbsp;
369
399
  @observable
370
- private _indexes = new Set&lt;number&gt;();
400
+ private readonly _indexes = new Set&lt;number&gt;();
371
401
  &nbsp;
372
402
  public readonly opened = new FlagModel();
373
403
  private readonly _initial: number[] = null;
@@ -399,50 +429,55 @@ export class MultiSelect&lt;T = any&gt; extends ValidatableModel&lt;ReadonlyArra
399
429
  }
400
430
  &nbsp;
401
431
  @computed
402
- <span class="fstat-no" title="function not covered" > get s</span>electedItems(): ReadonlyArray&lt;T&gt; {
403
- <span class="cstat-no" title="statement not covered" > return this.selectedIndexes.map(<span class="fstat-no" title="function not covered" >i </span>=&gt; <span class="cstat-no" title="statement not covered" >this._items[i])</span>;</span>
432
+ get selectedItems(): ReadonlyArray&lt;T&gt; {
433
+ return this.selectedIndexes.map(i =&gt; this._items[i]);
404
434
  }
405
435
  &nbsp;
406
436
  @computed
407
- <span class="fstat-no" title="function not covered" > get s</span>electedValues(): ReadonlyArray&lt;string&gt; {
408
- const values = <span class="cstat-no" title="statement not covered" >this.values;</span>
409
- <span class="cstat-no" title="statement not covered" > return this.selectedIndexes.map(<span class="fstat-no" title="function not covered" >i </span>=&gt; <span class="cstat-no" title="statement not covered" >values[i])</span>;</span>
437
+ get selectedValues(): ReadonlyArray&lt;string&gt; {
438
+ const values = this.values;
439
+ return this.selectedIndexes.map(i =&gt; values[i]);
410
440
  }
411
441
  &nbsp;
412
442
  <span class="fstat-no" title="function not covered" > get v</span>alue() { <span class="cstat-no" title="statement not covered" >return this.selectedValues; </span>}
413
443
  <span class="fstat-no" title="function not covered" > set v</span>alue(v: readonly string[]) { <span class="cstat-no" title="statement not covered" >this.selectValues(v); </span>}
414
444
  &nbsp;
415
445
  isIndexSelected(index: number) { return this._indexes.has(index); }
416
- <span class="fstat-no" title="function not covered" > isValueSelected(</span>value: string) { <span class="cstat-no" title="statement not covered" >return this.values.includes(value); </span>}
446
+ isValueSelected(value: string) { return this.selectedValues.includes(value); }
417
447
  &nbsp;
418
- <span class="fstat-no" title="function not covered" > get i</span>sEmpty() { <span class="cstat-no" title="statement not covered" >return this._indexes.size === 0; </span>}
448
+ get count() { return this._items.length; }
449
+ get selectedCount() { return this._indexes.size; }
450
+ <span class="fstat-no" title="function not covered" > get i</span>sEmpty() { <span class="cstat-no" title="statement not covered" >return this.selectedCount === 0; </span>}
451
+ &nbsp;
452
+ @computed
453
+ <span class="fstat-no" title="function not covered" > get i</span>sDefault() { <span class="cstat-no" title="statement not covered" >return arraysCompareDistinct(this.selectedIndexes, this._initial)?.diff === 0; </span>}
419
454
  &nbsp;
420
455
  <span class="fstat-no" title="function not covered" > protected get v</span>alueToValidate() { <span class="cstat-no" title="statement not covered" >return this.selectedItems; </span>}
421
456
  &nbsp;
422
- setItemSelected = <span class="fstat-no" title="function not covered" >(i</span>tem: T, selected: boolean) =&gt; {
423
- const i = <span class="cstat-no" title="statement not covered" >this.items.indexOf(item);</span>
424
- <span class="cstat-no" title="statement not covered" > if (i &gt;= 0) {</span>
425
- <span class="cstat-no" title="statement not covered" > this.setIndexSelected(i, selected);</span>
457
+ setItemSelected = (item: T, selected: boolean) =&gt; {
458
+ const i = this.items.indexOf(item);
459
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (i &gt;= 0) {
460
+ this.setIndexSelected(i, selected);
426
461
  }
427
462
  };
428
463
  &nbsp;
429
- selectItem = <span class="fstat-no" title="function not covered" >(i</span>tem: T) =&gt; <span class="cstat-no" title="statement not covered" >this.setItemSelected(item, true);</span>
430
- deSelectItem = <span class="fstat-no" title="function not covered" >(i</span>tem: T) =&gt; <span class="cstat-no" title="statement not covered" >this.setItemSelected(item, false);</span>
464
+ selectItem = (item: T) =&gt; this.setItemSelected(item, true);
465
+ deSelectItem = (item: T) =&gt; this.setItemSelected(item, false);
431
466
  &nbsp;
432
467
  @action
433
- selectItems = <span class="fstat-no" title="function not covered" >(i</span>tems: readonly T[]) =&gt; {
434
- <span class="cstat-no" title="statement not covered" > items.forEach(this.selectItem);</span>
468
+ selectItems = (items: readonly T[]) =&gt; {
469
+ items.forEach(this.selectItem);
435
470
  };
436
471
  &nbsp;
437
- setValueSelected = <span class="fstat-no" title="function not covered" >(v</span>alue: string, selected: boolean) =&gt; {
438
- const i = <span class="cstat-no" title="statement not covered" >this.values.indexOf(value);</span>
439
- <span class="cstat-no" title="statement not covered" > if (i &gt;= 0) {</span>
440
- <span class="cstat-no" title="statement not covered" > this.setIndexSelected(i, selected);</span>
472
+ setValueSelected = (value: string, selected: boolean) =&gt; {
473
+ const i = this.values.indexOf(value);
474
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (i &gt;= 0) {
475
+ this.setIndexSelected(i, selected);
441
476
  }
442
477
  };
443
478
  &nbsp;
444
- selectValue = <span class="fstat-no" title="function not covered" >(v</span>alue: string) =&gt; <span class="cstat-no" title="statement not covered" >this.setValueSelected(value, true);</span>
445
- deSelectValue = <span class="fstat-no" title="function not covered" >(v</span>alue: string) =&gt; <span class="cstat-no" title="statement not covered" >this.setValueSelected(value, false);</span>
479
+ selectValue = (value: string) =&gt; this.setValueSelected(value, true);
480
+ deSelectValue = (value: string) =&gt; this.setValueSelected(value, false);
446
481
  &nbsp;
447
482
  @action
448
483
  selectValues = <span class="fstat-no" title="function not covered" >(v</span>alues: readonly string[]) =&gt; {
@@ -450,19 +485,19 @@ export class MultiSelect&lt;T = any&gt; extends ValidatableModel&lt;ReadonlyArra
450
485
  };
451
486
  &nbsp;
452
487
  @action
453
- setIndexSelected = <span class="fstat-no" title="function not covered" >(i</span>ndex: number, selected: boolean) =&gt; {
454
- <span class="cstat-no" title="statement not covered" > if (this._indexesLocked) {</span>
488
+ setIndexSelected = (index: number, selected: boolean) =&gt; {
489
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this._indexesLocked) {
455
490
  <span class="cstat-no" title="statement not covered" > return;</span>
456
491
  }
457
492
  &nbsp;
458
- <span class="cstat-no" title="statement not covered" > if (selected) {</span>
459
- <span class="cstat-no" title="statement not covered" > this._indexes.add(index);</span>
493
+ if (selected) {
494
+ this._indexes.add(index);
460
495
  } else {
461
- <span class="cstat-no" title="statement not covered" > this._indexes.delete(index);</span>
496
+ this._indexes.delete(index);
462
497
  }
463
498
  &nbsp;
464
- <span class="cstat-no" title="statement not covered" > if (!this._flags.hasValue) {</span>
465
- <span class="cstat-no" title="statement not covered" > return;</span>
499
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!this._flags.hasValue) {
500
+ return;
466
501
  }
467
502
  &nbsp;
468
503
  <span class="cstat-no" title="statement not covered" > try {</span>
@@ -473,14 +508,21 @@ export class MultiSelect&lt;T = any&gt; extends ValidatableModel&lt;ReadonlyArra
473
508
  }
474
509
  };
475
510
  &nbsp;
476
- reset = <span class="fstat-no" title="function not covered" >() =</span>&gt; {
477
- <span class="cstat-no" title="statement not covered" > super.reset();</span>
478
- <span class="cstat-no" title="statement not covered" > this.setInitialIndexes();</span>
511
+ selectIndex = (index: number) =&gt; this.setIndexSelected(index, true);
512
+ deSelectIndex = (index: number) =&gt; this.setIndexSelected(index, false);
513
+ &nbsp;
514
+ reset = () =&gt; {
515
+ super.reset();
516
+ this.setInitialIndexes();
479
517
  };
480
518
  &nbsp;
481
519
  private setInitialIndexes() {
482
520
  this._indexes.clear();
483
521
  this._initial.forEach(i =&gt; this._indexes.add(i));
522
+ &nbsp;
523
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this._flags.hasValue) {
524
+ <span class="cstat-no" title="statement not covered" > this._flags.value.forEach(<span class="fstat-no" title="function not covered" >(f</span>lag, index) =&gt; <span class="cstat-no" title="statement not covered" >flag.value = this._indexes.has(index))</span>;</span>
525
+ }
484
526
  }
485
527
  &nbsp;
486
528
  private <span class="fstat-no" title="function not covered" >createFlags(</span>) {
@@ -503,8 +545,8 @@ export class MultiSelect&lt;T = any&gt; extends ValidatableModel&lt;ReadonlyArra
503
545
  &nbsp;
504
546
  export class MultiSelectString&lt;T extends string = string&gt; extends MultiSelect&lt;T&gt; {
505
547
  &nbsp;
506
- <span class="fstat-no" title="function not covered" > constructor(i</span>tems: ReadonlyArray&lt;T&gt;, ...selected: number[]) {
507
- <span class="cstat-no" title="statement not covered" > super(items, <span class="fstat-no" title="function not covered" >v </span>=&gt; <span class="cstat-no" title="statement not covered" >v,</span> ...selected);</span>
548
+ constructor(items: ReadonlyArray&lt;T&gt;, ...selected: number[]) {
549
+ super(items, v =&gt; v, ...selected);
508
550
  }
509
551
  }
510
552
  &nbsp;</pre></td></tr></table></pre>
@@ -514,7 +556,7 @@ export class MultiSelectString&lt;T extends string = string&gt; extends MultiSel
514
556
  <div class='footer quiet pad2 space-top1 center small'>
515
557
  Code coverage generated by
516
558
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
517
- at Mon Nov 22 2021 09:37:35 GMT+0000 (Coordinated Universal Time)
559
+ at Mon Nov 29 2021 14:39:58 GMT+0000 (Coordinated Universal Time)
518
560
  </div>
519
561
  </div>
520
562
  <script src="../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">85% </span>
26
+ <span class="strong">80.95% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>17/20</span>
28
+ <span class='fraction'>17/21</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">42.86% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/6</span>
42
+ <span class='fraction'>3/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">92.86% </span>
47
+ <span class="strong">86.67% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>13/14</span>
49
+ <span class='fraction'>13/15</span>
50
50
  </div>
51
51
 
52
52
 
@@ -93,7 +93,11 @@
93
93
  <a name='L34'></a><a href='#L34'>34</a>
94
94
  <a name='L35'></a><a href='#L35'>35</a>
95
95
  <a name='L36'></a><a href='#L36'>36</a>
96
- <a name='L37'></a><a href='#L37'>37</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
100
+ <span class="cline-any cline-neutral">&nbsp;</span>
97
101
  <span class="cline-any cline-neutral">&nbsp;</span>
98
102
  <span class="cline-any cline-neutral">&nbsp;</span>
99
103
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -116,6 +120,8 @@
116
120
  <span class="cline-any cline-yes">2x</span>
117
121
  <span class="cline-any cline-yes">1x</span>
118
122
  <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-no">&nbsp;</span>
124
+ <span class="cline-any cline-neutral">&nbsp;</span>
119
125
  <span class="cline-any cline-neutral">&nbsp;</span>
120
126
  <span class="cline-any cline-yes">3x</span>
121
127
  <span class="cline-any cline-no">&nbsp;</span>
@@ -130,9 +136,10 @@
130
136
  <span class="cline-any cline-neutral">&nbsp;</span>
131
137
  <span class="cline-any cline-yes">1x</span>
132
138
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { action, makeObservable, observable } from 'mobx';
133
- import { IValueModel } from './ValuesCollector';
139
+ import { IResetableModel } from 'viewModels';
140
+ import { IValueModel } from './types';
134
141
  &nbsp;
135
- export interface INumberModel {
142
+ export interface INumberModel extends IResetableModel {
136
143
  value: number;
137
144
  }
138
145
  &nbsp;
@@ -151,6 +158,8 @@ export class NumberModel implements INumberModel, IValueModel&lt;number&gt; {
151
158
  &nbsp;
152
159
  get value() { return this._value; }
153
160
  set value(v: number) { this._value = v; }
161
+ &nbsp;
162
+ <span class="fstat-no" title="function not covered" > get i</span>sDefault() { <span class="cstat-no" title="statement not covered" >return this._value === this._initial; </span>}
154
163
  &nbsp;
155
164
  @action
156
165
  reset = <span class="fstat-no" title="function not covered" >() =</span>&gt; {
@@ -172,7 +181,7 @@ export default NumberModel;
172
181
  <div class='footer quiet pad2 space-top1 center small'>
173
182
  Code coverage generated by
174
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
175
- at Mon Nov 22 2021 09:37:35 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Nov 29 2021 14:39:58 GMT+0000 (Coordinated Universal Time)
176
185
  </div>
177
186
  </div>
178
187
  <script src="../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">96.72% </span>
26
+ <span class="strong">95.16% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>59/61</span>
28
+ <span class='fraction'>59/62</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">91.67% </span>
40
+ <span class="strong">88% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>22/24</span>
42
+ <span class='fraction'>22/25</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">96.36% </span>
47
+ <span class="strong">94.64% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>53/55</span>
49
+ <span class='fraction'>53/56</span>
50
50
  </div>
51
51
 
52
52
 
@@ -182,13 +182,17 @@
182
182
  <a name='L123'></a><a href='#L123'>123</a>
183
183
  <a name='L124'></a><a href='#L124'>124</a>
184
184
  <a name='L125'></a><a href='#L125'>125</a>
185
- <a name='L126'></a><a href='#L126'>126</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
185
+ <a name='L126'></a><a href='#L126'>126</a>
186
+ <a name='L127'></a><a href='#L127'>127</a>
187
+ <a name='L128'></a><a href='#L128'>128</a>
188
+ <a name='L129'></a><a href='#L129'>129</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
186
189
  <span class="cline-any cline-yes">1x</span>
187
190
  <span class="cline-any cline-yes">1x</span>
188
191
  <span class="cline-any cline-yes">1x</span>
189
192
  <span class="cline-any cline-neutral">&nbsp;</span>
190
193
  <span class="cline-any cline-yes">1x</span>
191
194
  <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-neutral">&nbsp;</span>
192
196
  <span class="cline-any cline-yes">1x</span>
193
197
  <span class="cline-any cline-neutral">&nbsp;</span>
194
198
  <span class="cline-any cline-yes">5x</span>
@@ -251,6 +255,8 @@
251
255
  <span class="cline-any cline-neutral">&nbsp;</span>
252
256
  <span class="cline-any cline-neutral">&nbsp;</span>
253
257
  <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-no">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
260
  <span class="cline-any cline-neutral">&nbsp;</span>
255
261
  <span class="cline-any cline-yes">11x</span>
256
262
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -311,10 +317,11 @@
311
317
  import { observable, computed, makeObservable, reaction } from 'mobx';
312
318
  import { FlagModel, ILabeledFlagModel } from './FlagModel';
313
319
  import { ValidatableModel } from './Validatable';
314
- import { IValueModel } from './ValuesCollector';
320
+ import { IValueModel } from './types';
315
321
  import { withLabel } from './wrappers';
322
+ import { IResetableModel } from 'viewModels';
316
323
  &nbsp;
317
- export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements IValueModel&lt;string&gt; {
324
+ export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements IValueModel&lt;string&gt;, IResetableModel {
318
325
  @observable
319
326
  private _index: number = undefined;
320
327
  &nbsp;
@@ -375,6 +382,8 @@ export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements
375
382
  this.index = index;
376
383
  }
377
384
  }
385
+ &nbsp;
386
+ <span class="fstat-no" title="function not covered" > get i</span>sDefault() { <span class="cstat-no" title="statement not covered" >return this._index === this._initialIndex; </span>}
378
387
  &nbsp;
379
388
  get index() {
380
389
  return this._index;
@@ -439,7 +448,7 @@ export class SelectString&lt;T extends string = string&gt; extends Select&lt;T&g
439
448
  <div class='footer quiet pad2 space-top1 center small'>
440
449
  Code coverage generated by
441
450
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
442
- at Mon Nov 22 2021 09:37:35 GMT+0000 (Coordinated Universal Time)
451
+ at Mon Nov 29 2021 14:39:58 GMT+0000 (Coordinated Universal Time)
443
452
  </div>
444
453
  </div>
445
454
  <script src="../../prettify.js"></script>