@zajno/common 1.3.15 → 1.4.2

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 (94) hide show
  1. package/coverage/clover.xml +105 -91
  2. package/coverage/coverage-final.json +6 -6
  3. package/coverage/lcov-report/index.html +19 -19
  4. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  5. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  6. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  7. package/coverage/lcov-report/src/async/index.html +1 -1
  8. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  9. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  10. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  11. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  12. package/coverage/lcov-report/src/dates/index.html +1 -1
  13. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  14. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  15. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  16. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  17. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  19. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  20. package/coverage/lcov-report/src/event.ts.html +1 -1
  21. package/coverage/lcov-report/src/fields/index.html +1 -1
  22. package/coverage/lcov-report/src/fields/update.ts.html +1 -1
  23. package/coverage/lcov-report/src/functions.ts.html +1 -1
  24. package/coverage/lcov-report/src/index.html +1 -1
  25. package/coverage/lcov-report/src/lazy.light.ts.html +4 -4
  26. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  27. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  28. package/coverage/lcov-report/src/logger/index.html +1 -1
  29. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  30. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  31. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  32. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  33. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  34. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  35. package/coverage/lcov-report/src/math/index.html +1 -1
  36. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  37. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  38. package/coverage/lcov-report/src/types.ts.html +1 -1
  39. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  40. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  41. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  42. package/coverage/lcov-report/src/validation/index.html +1 -1
  43. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  44. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  45. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  46. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  47. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +25 -10
  48. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +20 -8
  49. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +24 -9
  50. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +48 -21
  51. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +42 -18
  52. package/coverage/lcov-report/src/viewModels/index.html +52 -52
  53. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  54. package/coverage/lcov.info +266 -237
  55. package/lib/viewModels/CommonModel.d.ts +13 -0
  56. package/lib/viewModels/CommonModel.d.ts.map +1 -0
  57. package/lib/viewModels/CommonModel.js +37 -0
  58. package/lib/viewModels/CommonModel.js.map +1 -0
  59. package/lib/viewModels/FlagModel.d.ts +1 -0
  60. package/lib/viewModels/FlagModel.d.ts.map +1 -1
  61. package/lib/viewModels/FlagModel.js +8 -1
  62. package/lib/viewModels/FlagModel.js.map +1 -1
  63. package/lib/viewModels/MultiSelectModel.d.ts.map +1 -1
  64. package/lib/viewModels/MultiSelectModel.js +3 -0
  65. package/lib/viewModels/MultiSelectModel.js.map +1 -1
  66. package/lib/viewModels/NumberModel.d.ts +1 -0
  67. package/lib/viewModels/NumberModel.d.ts.map +1 -1
  68. package/lib/viewModels/NumberModel.js +8 -1
  69. package/lib/viewModels/NumberModel.js.map +1 -1
  70. package/lib/viewModels/SelectModel.d.ts +1 -0
  71. package/lib/viewModels/SelectModel.d.ts.map +1 -1
  72. package/lib/viewModels/SelectModel.js +24 -14
  73. package/lib/viewModels/SelectModel.js.map +1 -1
  74. package/lib/viewModels/TextModel.d.ts +2 -0
  75. package/lib/viewModels/TextModel.d.ts.map +1 -1
  76. package/lib/viewModels/TextModel.js +27 -23
  77. package/lib/viewModels/TextModel.js.map +1 -1
  78. package/lib/viewModels/Validatable.d.ts +3 -1
  79. package/lib/viewModels/Validatable.d.ts.map +1 -1
  80. package/lib/viewModels/Validatable.js +14 -7
  81. package/lib/viewModels/Validatable.js.map +1 -1
  82. package/lib/viewModels/index.d.ts +1 -0
  83. package/lib/viewModels/index.d.ts.map +1 -1
  84. package/lib/viewModels/index.js +1 -0
  85. package/lib/viewModels/index.js.map +1 -1
  86. package/package.json +1 -1
  87. package/src/viewModels/CommonModel.ts +43 -0
  88. package/src/viewModels/FlagModel.ts +6 -1
  89. package/src/viewModels/MultiSelectModel.ts +4 -0
  90. package/src/viewModels/NumberModel.ts +6 -1
  91. package/src/viewModels/SelectModel.ts +11 -2
  92. package/src/viewModels/TextModel.ts +21 -11
  93. package/src/viewModels/Validatable.ts +16 -8
  94. package/src/viewModels/index.ts +1 -0
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">64% </span>
26
+ <span class="strong">67.86% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>16/25</span>
28
+ <span class='fraction'>19/28</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">37.5% </span>
40
+ <span class="strong">44.44% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/8</span>
42
+ <span class='fraction'>4/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">55% </span>
47
+ <span class="strong">59.09% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>11/20</span>
49
+ <span class='fraction'>13/22</span>
50
50
  </div>
51
51
 
52
52
 
@@ -115,7 +115,12 @@
115
115
  <a name='L56'></a><a href='#L56'>56</a>
116
116
  <a name='L57'></a><a href='#L57'>57</a>
117
117
  <a name='L58'></a><a href='#L58'>58</a>
118
- <a name='L59'></a><a href='#L59'>59</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
118
+ <a name='L59'></a><a href='#L59'>59</a>
119
+ <a name='L60'></a><a href='#L60'>60</a>
120
+ <a name='L61'></a><a href='#L61'>61</a>
121
+ <a name='L62'></a><a href='#L62'>62</a>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
119
124
  <span class="cline-any cline-neutral">&nbsp;</span>
120
125
  <span class="cline-any cline-neutral">&nbsp;</span>
121
126
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -144,7 +149,12 @@
144
149
  <span class="cline-any cline-neutral">&nbsp;</span>
145
150
  <span class="cline-any cline-neutral">&nbsp;</span>
146
151
  <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-yes">38x</span>
152
+ <span class="cline-any cline-yes">50x</span>
153
+ <span class="cline-any cline-neutral">&nbsp;</span>
154
+ <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
+ <span class="cline-any cline-yes">17x</span>
157
+ <span class="cline-any cline-yes">50x</span>
148
158
  <span class="cline-any cline-neutral">&nbsp;</span>
149
159
  <span class="cline-any cline-neutral">&nbsp;</span>
150
160
  <span class="cline-any cline-no">&nbsp;</span>
@@ -202,8 +212,13 @@ export class FlagModel implements IFlagModel, IFlagModelReadonly {
202
212
  }
203
213
  &nbsp;
204
214
  set value(value: boolean) {
205
- this._value = value;
215
+ this.setValue(value);
206
216
  }
217
+ &nbsp;
218
+ @action
219
+ public readonly setValue = (value: boolean) =&gt; {
220
+ this._value = value;
221
+ };
207
222
  &nbsp;
208
223
  <span class="fstat-no" title="function not covered" > get i</span>sDefault() { <span class="cstat-no" title="statement not covered" >return this._value === false; </span>}
209
224
  &nbsp;
@@ -238,7 +253,7 @@ export class FlagModel implements IFlagModel, IFlagModelReadonly {
238
253
  <div class='footer quiet pad2 space-top1 center small'>
239
254
  Code coverage generated by
240
255
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
241
- at Sun Jan 23 2022 16:32:35 GMT+0000 (Coordinated Universal Time)
256
+ at Mon Jan 31 2022 16:39:21 GMT+0000 (Coordinated Universal Time)
242
257
  </div>
243
258
  </div>
244
259
  <script src="../../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">77.67% </span>
26
+ <span class="strong">77.14% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>80/103</span>
28
+ <span class='fraction'>81/105</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">43.75% </span>
33
+ <span class="strong">44.44% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>7/16</span>
35
+ <span class='fraction'>8/18</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">77.11% </span>
47
+ <span class="strong">76.47% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>64/83</span>
49
+ <span class='fraction'>65/85</span>
50
50
  </div>
51
51
 
52
52
 
@@ -221,7 +221,11 @@
221
221
  <a name='L162'></a><a href='#L162'>162</a>
222
222
  <a name='L163'></a><a href='#L163'>163</a>
223
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>
224
+ <a name='L165'></a><a href='#L165'>165</a>
225
+ <a name='L166'></a><a href='#L166'>166</a>
226
+ <a name='L167'></a><a href='#L167'>167</a>
227
+ <a name='L168'></a><a href='#L168'>168</a>
228
+ <a name='L169'></a><a href='#L169'>169</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
225
229
  <span class="cline-any cline-yes">1x</span>
226
230
  <span class="cline-any cline-yes">1x</span>
227
231
  <span class="cline-any cline-yes">1x</span>
@@ -333,6 +337,10 @@
333
337
  <span class="cline-any cline-neutral">&nbsp;</span>
334
338
  <span class="cline-any cline-neutral">&nbsp;</span>
335
339
  <span class="cline-any cline-yes">8x</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-yes">8x</span>
336
344
  <span class="cline-any cline-yes">8x</span>
337
345
  <span class="cline-any cline-neutral">&nbsp;</span>
338
346
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -495,6 +503,10 @@ export class MultiSelect&lt;T = any&gt; extends ValidatableModel&lt;ReadonlyArra
495
503
  } else {
496
504
  this._indexes.delete(index);
497
505
  }
506
+ &nbsp;
507
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this._validateOnChange) {
508
+ <span class="cstat-no" title="statement not covered" > this.validate();</span>
509
+ }
498
510
  &nbsp;
499
511
  <span class="missing-if-branch" title="else path not taken" >E</span>if (!this._flags.hasValue) {
500
512
  return;
@@ -556,7 +568,7 @@ export class MultiSelectString&lt;T extends string = string&gt; extends MultiSel
556
568
  <div class='footer quiet pad2 space-top1 center small'>
557
569
  Code coverage generated by
558
570
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
559
- at Sun Jan 23 2022 16:32:35 GMT+0000 (Coordinated Universal Time)
571
+ at Mon Jan 31 2022 16:39:21 GMT+0000 (Coordinated Universal Time)
560
572
  </div>
561
573
  </div>
562
574
  <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">80.95% </span>
26
+ <span class="strong">83.33% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>17/21</span>
28
+ <span class='fraction'>20/24</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">42.86% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/7</span>
42
+ <span class='fraction'>4/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">86.67% </span>
47
+ <span class="strong">88.24% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>13/15</span>
49
+ <span class='fraction'>15/17</span>
50
50
  </div>
51
51
 
52
52
 
@@ -96,7 +96,12 @@
96
96
  <a name='L37'></a><a href='#L37'>37</a>
97
97
  <a name='L38'></a><a href='#L38'>38</a>
98
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>
99
+ <a name='L40'></a><a href='#L40'>40</a>
100
+ <a name='L41'></a><a href='#L41'>41</a>
101
+ <a name='L42'></a><a href='#L42'>42</a>
102
+ <a name='L43'></a><a href='#L43'>43</a>
103
+ <a name='L44'></a><a href='#L44'>44</a>
104
+ <a name='L45'></a><a href='#L45'>45</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
100
105
  <span class="cline-any cline-neutral">&nbsp;</span>
101
106
  <span class="cline-any cline-neutral">&nbsp;</span>
102
107
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -120,6 +125,11 @@
120
125
  <span class="cline-any cline-yes">2x</span>
121
126
  <span class="cline-any cline-yes">1x</span>
122
127
  <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
+ <span class="cline-any cline-yes">3x</span>
130
+ <span class="cline-any cline-yes">1x</span>
131
+ <span class="cline-any cline-neutral">&nbsp;</span>
132
+ <span class="cline-any cline-neutral">&nbsp;</span>
123
133
  <span class="cline-any cline-no">&nbsp;</span>
124
134
  <span class="cline-any cline-neutral">&nbsp;</span>
125
135
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -157,7 +167,12 @@ export class NumberModel implements INumberModel, IValueModel&lt;number&gt; {
157
167
  }
158
168
  &nbsp;
159
169
  get value() { return this._value; }
160
- set value(v: number) { this._value = v; }
170
+ set value(v: number) { this.setValue(v); }
171
+ &nbsp;
172
+ @action
173
+ public readonly setValue = (v: number) =&gt; {
174
+ this._value = v;
175
+ };
161
176
  &nbsp;
162
177
  <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>}
163
178
  &nbsp;
@@ -181,7 +196,7 @@ export default NumberModel;
181
196
  <div class='footer quiet pad2 space-top1 center small'>
182
197
  Code coverage generated by
183
198
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Sun Jan 23 2022 16:32:35 GMT+0000 (Coordinated Universal Time)
199
+ at Mon Jan 31 2022 16:39:21 GMT+0000 (Coordinated Universal Time)
185
200
  </div>
186
201
  </div>
187
202
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">93.55% </span>
26
+ <span class="strong">91.04% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>58/62</span>
28
+ <span class='fraction'>61/67</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">93.75% </span>
33
+ <span class="strong">83.33% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>15/16</span>
35
+ <span class='fraction'>15/18</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">84% </span>
40
+ <span class="strong">84.62% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>21/25</span>
42
+ <span class='fraction'>22/26</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">90% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>52/56</span>
49
+ <span class='fraction'>54/60</span>
50
50
  </div>
51
51
 
52
52
 
@@ -185,7 +185,16 @@
185
185
  <a name='L126'></a><a href='#L126'>126</a>
186
186
  <a name='L127'></a><a href='#L127'>127</a>
187
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>
188
+ <a name='L129'></a><a href='#L129'>129</a>
189
+ <a name='L130'></a><a href='#L130'>130</a>
190
+ <a name='L131'></a><a href='#L131'>131</a>
191
+ <a name='L132'></a><a href='#L132'>132</a>
192
+ <a name='L133'></a><a href='#L133'>133</a>
193
+ <a name='L134'></a><a href='#L134'>134</a>
194
+ <a name='L135'></a><a href='#L135'>135</a>
195
+ <a name='L136'></a><a href='#L136'>136</a>
196
+ <a name='L137'></a><a href='#L137'>137</a>
197
+ <a name='L138'></a><a href='#L138'>138</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
189
198
  <span class="cline-any cline-yes">1x</span>
190
199
  <span class="cline-any cline-yes">1x</span>
191
200
  <span class="cline-any cline-yes">1x</span>
@@ -263,20 +272,29 @@
263
272
  <span class="cline-any cline-neutral">&nbsp;</span>
264
273
  <span class="cline-any cline-neutral">&nbsp;</span>
265
274
  <span class="cline-any cline-yes">16x</span>
266
- <span class="cline-any cline-yes">4x</span>
267
275
  <span class="cline-any cline-neutral">&nbsp;</span>
268
276
  <span class="cline-any cline-neutral">&nbsp;</span>
269
- <span class="cline-any cline-yes">12x</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-yes">5x</span>
279
+ <span class="cline-any cline-yes">16x</span>
280
+ <span class="cline-any cline-no">&nbsp;</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">16x</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-yes">16x</span>
286
+ <span class="cline-any cline-no">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
288
  <span class="cline-any cline-neutral">&nbsp;</span>
271
289
  <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-yes">12x</span>
273
- <span class="cline-any cline-yes">12x</span>
290
+ <span class="cline-any cline-yes">16x</span>
291
+ <span class="cline-any cline-yes">16x</span>
274
292
  <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-yes">12x</span>
276
- <span class="cline-any cline-yes">33x</span>
293
+ <span class="cline-any cline-yes">16x</span>
294
+ <span class="cline-any cline-yes">45x</span>
277
295
  <span class="cline-any cline-neutral">&nbsp;</span>
278
296
  <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-yes">12x</span>
297
+ <span class="cline-any cline-yes">16x</span>
280
298
  <span class="cline-any cline-neutral">&nbsp;</span>
281
299
  <span class="cline-any cline-neutral">&nbsp;</span>
282
300
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -314,7 +332,7 @@
314
332
  <span class="cline-any cline-neutral">&nbsp;</span>
315
333
  <span class="cline-any cline-neutral">&nbsp;</span>
316
334
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { createLazy } from '../lazy.light';
317
- import { observable, computed, makeObservable, reaction } from 'mobx';
335
+ import { observable, computed, makeObservable, reaction, action } from 'mobx';
318
336
  import { FlagModel, ILabeledFlagModel } from './FlagModel';
319
337
  import { ValidatableModel } from './Validatable';
320
338
  import { IValueModel } from './types';
@@ -390,11 +408,20 @@ export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements
390
408
  }
391
409
  &nbsp;
392
410
  set index(val: number) {
393
- if (this._indexLocked) {
394
- return;
411
+ this.setIndex(val);
412
+ }
413
+ &nbsp;
414
+ @action
415
+ public setIndex = (val: number) =&gt; {
416
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this._indexLocked) {
417
+ <span class="cstat-no" title="statement not covered" > return;</span>
395
418
  }
396
419
  &nbsp;
397
420
  this._index = val;
421
+ &nbsp;
422
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this._validateOnChange) {
423
+ <span class="cstat-no" title="statement not covered" > this.validate();</span>
424
+ }
398
425
  &nbsp;
399
426
  // update all flags to be properly selected
400
427
  try {
@@ -406,7 +433,7 @@ export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements
406
433
  } finally {
407
434
  this._indexLocked = false;
408
435
  }
409
- }
436
+ };
410
437
  &nbsp;
411
438
  reset = () =&gt; {
412
439
  super.reset();
@@ -448,7 +475,7 @@ export class SelectString&lt;T extends string = string&gt; extends Select&lt;T&g
448
475
  <div class='footer quiet pad2 space-top1 center small'>
449
476
  Code coverage generated by
450
477
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
451
- at Sun Jan 23 2022 16:32:35 GMT+0000 (Coordinated Universal Time)
478
+ at Mon Jan 31 2022 16:39:21 GMT+0000 (Coordinated Universal Time)
452
479
  </div>
453
480
  </div>
454
481
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">38.64% </span>
26
+ <span class="strong">37.5% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>17/44</span>
28
+ <span class='fraction'>18/48</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">4.35% </span>
33
+ <span class="strong">4.17% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>1/23</span>
35
+ <span class='fraction'>1/24</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">30.77% </span>
40
+ <span class="strong">26.67% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>4/13</span>
42
+ <span class='fraction'>4/15</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">41.03% </span>
47
+ <span class="strong">39.53% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>16/39</span>
49
+ <span class='fraction'>17/43</span>
50
50
  </div>
51
51
 
52
52
 
@@ -148,7 +148,15 @@
148
148
  <a name='L89'></a><a href='#L89'>89</a>
149
149
  <a name='L90'></a><a href='#L90'>90</a>
150
150
  <a name='L91'></a><a href='#L91'>91</a>
151
- <a name='L92'></a><a href='#L92'>92</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
152
160
  <span class="cline-any cline-yes">2x</span>
153
161
  <span class="cline-any cline-yes">2x</span>
154
162
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -171,6 +179,7 @@
171
179
  <span class="cline-any cline-yes">11x</span>
172
180
  <span class="cline-any cline-neutral">&nbsp;</span>
173
181
  <span class="cline-any cline-yes">11x</span>
182
+ <span class="cline-any cline-yes">11x</span>
174
183
  <span class="cline-any cline-neutral">&nbsp;</span>
175
184
  <span class="cline-any cline-neutral">&nbsp;</span>
176
185
  <span class="cline-any cline-yes">11x</span>
@@ -191,6 +200,11 @@
191
200
  <span class="cline-any cline-neutral">&nbsp;</span>
192
201
  <span class="cline-any cline-no">&nbsp;</span>
193
202
  <span class="cline-any cline-no">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-no">&nbsp;</span>
207
+ <span class="cline-any cline-no">&nbsp;</span>
194
208
  <span class="cline-any cline-no">&nbsp;</span>
195
209
  <span class="cline-any cline-neutral">&nbsp;</span>
196
210
  <span class="cline-any cline-no">&nbsp;</span>
@@ -212,10 +226,12 @@
212
226
  <span class="cline-any cline-neutral">&nbsp;</span>
213
227
  <span class="cline-any cline-no">&nbsp;</span>
214
228
  <span class="cline-any cline-no">&nbsp;</span>
229
+ <span class="cline-any cline-no">&nbsp;</span>
215
230
  <span class="cline-any cline-neutral">&nbsp;</span>
216
231
  <span class="cline-any cline-no">&nbsp;</span>
217
232
  <span class="cline-any cline-no">&nbsp;</span>
218
233
  <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
235
  <span class="cline-any cline-no">&nbsp;</span>
220
236
  <span class="cline-any cline-neutral">&nbsp;</span>
221
237
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -239,12 +255,12 @@
239
255
  <span class="cline-any cline-no">&nbsp;</span>
240
256
  <span class="cline-any cline-neutral">&nbsp;</span>
241
257
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { observable, makeObservable, action } from 'mobx';
258
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { observable, makeObservable, action, runInAction } from 'mobx';
243
259
  import { ValidatorFunction, ValidatorFunctionAsync, ValidationErrors, ValidationError } from '../validation';
244
260
  import { someAsync } from '../async/arrays';
245
261
  &nbsp;
246
262
  export type ValueValidator&lt;T, TErrors = ValidationErrors&gt; = ValidatorFunction&lt;T, TErrors&gt; | ValidatorFunctionAsync&lt;T, TErrors&gt;;
247
- export type ValidationErrorsStrings&lt;TErrors extends string | number = number&gt; = Record&lt;TErrors, string&gt;;
263
+ export type ValidationErrorsStrings&lt;TErrors extends string | number = number&gt; = Partial&lt;Omit&lt;Record&lt;TErrors, string&gt;, 0 | null&gt;&gt;;
248
264
  &nbsp;
249
265
  export type ValidationConfig&lt;T, TErrors extends string | number = ValidationErrors&gt; = {
250
266
  validator: ValueValidator&lt;Readonly&lt;T&gt;, TErrors&gt;,
@@ -262,6 +278,7 @@ export abstract class ValidatableModel&lt;T = string&gt; {
262
278
  private _error: string = null;
263
279
  &nbsp;
264
280
  private _validationError: ValidationError = null;
281
+ protected _validateOnChange = false;
265
282
  &nbsp;
266
283
  constructor() {
267
284
  makeObservable(this);
@@ -276,6 +293,11 @@ export abstract class ValidatableModel&lt;T = string&gt; {
276
293
  public <span class="fstat-no" title="function not covered" >setValidationConfig&lt;</span>TErrors extends string | number = ValidationErrors&gt;(config?: ValidationConfig&lt;T, TErrors&gt;) {
277
294
  <span class="cstat-no" title="statement not covered" > this._validator = config?.validator || EmptyValidator;</span>
278
295
  <span class="cstat-no" title="statement not covered" > this._strings = config?.errors;</span>
296
+ <span class="cstat-no" title="statement not covered" > return this;</span>
297
+ }
298
+ &nbsp;
299
+ public <span class="fstat-no" title="function not covered" >validateOnChange(</span>enable = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span> {
300
+ <span class="cstat-no" title="statement not covered" > this._validateOnChange = enable;</span>
279
301
  <span class="cstat-no" title="statement not covered" > return this;</span>
280
302
  }
281
303
  &nbsp;
@@ -301,12 +323,14 @@ export abstract class ValidatableModel&lt;T = string&gt; {
301
323
  <span class="cstat-no" title="statement not covered" > this._validationError = err as ValidationError;</span>
302
324
  }
303
325
  &nbsp;
304
- <span class="cstat-no" title="statement not covered" > if (!this._validationError) {</span>
305
- <span class="cstat-no" title="statement not covered" > this._error = null;</span>
306
- } else {
307
- const code = <span class="cstat-no" title="statement not covered" >this._validationError.code;</span>
308
- <span class="cstat-no" title="statement not covered" > this._error = this._strings &amp;&amp; this._strings[code];</span>
309
- }
326
+ <span class="cstat-no" title="statement not covered" > runInAction(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
327
+ <span class="cstat-no" title="statement not covered" > if (!this._validationError) {</span>
328
+ <span class="cstat-no" title="statement not covered" > this._error = null;</span>
329
+ } else {
330
+ const code = <span class="cstat-no" title="statement not covered" >this._validationError.code;</span>
331
+ <span class="cstat-no" title="statement not covered" > this._error = this._strings &amp;&amp; this._strings[code];</span>
332
+ }
333
+ });
310
334
  <span class="cstat-no" title="statement not covered" > return this._validationError == null;</span>
311
335
  }
312
336
  &nbsp;
@@ -337,7 +361,7 @@ export abstract class ValidatableModel&lt;T = string&gt; {
337
361
  <div class='footer quiet pad2 space-top1 center small'>
338
362
  Code coverage generated by
339
363
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
340
- at Sun Jan 23 2022 16:32:35 GMT+0000 (Coordinated Universal Time)
364
+ at Mon Jan 31 2022 16:39:21 GMT+0000 (Coordinated Universal Time)
341
365
  </div>
342
366
  </div>
343
367
  <script src="../../prettify.js"></script>