@zajno/common 1.5.2 → 1.5.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 (82) hide show
  1. package/coverage/clover.xml +45 -37
  2. package/coverage/coverage-final.json +3 -3
  3. package/coverage/lcov-report/async/index.html +1 -1
  4. package/coverage/lcov-report/async/timeout.ts.html +12 -12
  5. package/coverage/lcov-report/index.html +19 -19
  6. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  7. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  8. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  9. package/coverage/lcov-report/src/async/index.html +1 -1
  10. package/coverage/lcov-report/src/async/timeout.ts.html +10 -10
  11. package/coverage/lcov-report/src/cache.ts.html +1 -1
  12. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  13. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  14. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  15. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  16. package/coverage/lcov-report/src/dates/index.html +1 -1
  17. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  19. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  20. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  21. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  22. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  23. package/coverage/lcov-report/src/disposer.ts.html +1 -1
  24. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  25. package/coverage/lcov-report/src/event.ts.html +1 -1
  26. package/coverage/lcov-report/src/fields/index.html +1 -1
  27. package/coverage/lcov-report/src/fields/update.ts.html +1 -1
  28. package/coverage/lcov-report/src/functions.ts.html +1 -1
  29. package/coverage/lcov-report/src/index.html +1 -1
  30. package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
  31. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  32. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  33. package/coverage/lcov-report/src/logger/index.html +1 -1
  34. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  35. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  36. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  37. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  38. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  39. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  40. package/coverage/lcov-report/src/math/index.html +1 -1
  41. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  42. package/coverage/lcov-report/src/observersMap.ts.html +1 -1
  43. package/coverage/lcov-report/src/observingCache.ts.html +1 -1
  44. package/coverage/lcov-report/src/tempoCache.ts.html +1 -1
  45. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  46. package/coverage/lcov-report/src/types.ts.html +1 -1
  47. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  48. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  49. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  50. package/coverage/lcov-report/src/validation/index.html +1 -1
  51. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  52. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  53. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  54. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  55. package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +1 -1
  56. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +1 -1
  57. package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +106 -34
  58. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  59. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +13 -13
  60. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  61. package/coverage/lcov-report/src/viewModels/TextModel.ts.html +1 -1
  62. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
  63. package/coverage/lcov-report/src/viewModels/index.html +19 -19
  64. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  65. package/coverage/lcov-report/validation/index.html +1 -1
  66. package/coverage/lcov-report/validation/index.ts.html +6 -6
  67. package/coverage/lcov-report/viewModels/CommonModel.ts.html +1 -1
  68. package/coverage/lcov-report/viewModels/LoadingModel.ts.html +129 -21
  69. package/coverage/lcov-report/viewModels/SelectModel.ts.html +54 -21
  70. package/coverage/lcov-report/viewModels/TextModel.ts.html +1 -1
  71. package/coverage/lcov-report/viewModels/index.html +23 -83
  72. package/coverage/lcov.info +85 -64
  73. package/lib/viewModels/LoadingModel.d.ts +12 -3
  74. package/lib/viewModels/LoadingModel.d.ts.map +1 -1
  75. package/lib/viewModels/LoadingModel.js +33 -16
  76. package/lib/viewModels/LoadingModel.js.map +1 -1
  77. package/lib/viewModels/types.d.ts +4 -1
  78. package/lib/viewModels/types.d.ts.map +1 -1
  79. package/package.json +1 -1
  80. package/src/viewModels/LoadingModel.ts +41 -17
  81. package/src/viewModels/__tests__/common.test.ts +27 -8
  82. package/src/viewModels/types.ts +5 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">95.24% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>8/8</span>
28
+ <span class='fraction'>20/21</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
33
+ <span class="strong">90% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/0</span>
35
+ <span class='fraction'>9/10</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">85.71% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>2/2</span>
42
+ <span class='fraction'>6/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>8/8</span>
49
+ <span class='fraction'>20/20</span>
50
50
  </div>
51
51
 
52
52
 
@@ -73,37 +73,145 @@
73
73
  <a name='L14'></a><a href='#L14'>14</a>
74
74
  <a name='L15'></a><a href='#L15'>15</a>
75
75
  <a name='L16'></a><a href='#L16'>16</a>
76
- <a name='L17'></a><a href='#L17'>17</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
76
+ <a name='L17'></a><a href='#L17'>17</a>
77
+ <a name='L18'></a><a href='#L18'>18</a>
78
+ <a name='L19'></a><a href='#L19'>19</a>
79
+ <a name='L20'></a><a href='#L20'>20</a>
80
+ <a name='L21'></a><a href='#L21'>21</a>
81
+ <a name='L22'></a><a href='#L22'>22</a>
82
+ <a name='L23'></a><a href='#L23'>23</a>
83
+ <a name='L24'></a><a href='#L24'>24</a>
84
+ <a name='L25'></a><a href='#L25'>25</a>
85
+ <a name='L26'></a><a href='#L26'>26</a>
86
+ <a name='L27'></a><a href='#L27'>27</a>
87
+ <a name='L28'></a><a href='#L28'>28</a>
88
+ <a name='L29'></a><a href='#L29'>29</a>
89
+ <a name='L30'></a><a href='#L30'>30</a>
90
+ <a name='L31'></a><a href='#L31'>31</a>
91
+ <a name='L32'></a><a href='#L32'>32</a>
92
+ <a name='L33'></a><a href='#L33'>33</a>
93
+ <a name='L34'></a><a href='#L34'>34</a>
94
+ <a name='L35'></a><a href='#L35'>35</a>
95
+ <a name='L36'></a><a href='#L36'>36</a>
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>
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>
105
+ <a name='L46'></a><a href='#L46'>46</a>
106
+ <a name='L47'></a><a href='#L47'>47</a>
107
+ <a name='L48'></a><a href='#L48'>48</a>
108
+ <a name='L49'></a><a href='#L49'>49</a>
109
+ <a name='L50'></a><a href='#L50'>50</a>
110
+ <a name='L51'></a><a href='#L51'>51</a>
111
+ <a name='L52'></a><a href='#L52'>52</a>
112
+ <a name='L53'></a><a href='#L53'>53</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
113
+ <span class="cline-any cline-neutral">&nbsp;</span>
77
114
  <span class="cline-any cline-neutral">&nbsp;</span>
78
115
  <span class="cline-any cline-yes">1x</span>
79
116
  <span class="cline-any cline-neutral">&nbsp;</span>
80
- <span class="cline-any cline-yes">3x</span>
117
+ <span class="cline-any cline-yes">2x</span>
118
+ <span class="cline-any cline-neutral">&nbsp;</span>
119
+ <span class="cline-any cline-yes">11x</span>
120
+ <span class="cline-any cline-neutral">&nbsp;</span>
121
+ <span class="cline-any cline-yes">5x</span>
122
+ <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-yes">4x</span>
124
+ <span class="cline-any cline-yes">2x</span>
125
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-yes">2x</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
+ <span class="cline-any cline-neutral">&nbsp;</span>
130
+ <span class="cline-any cline-neutral">&nbsp;</span>
131
+ <span class="cline-any cline-neutral">&nbsp;</span>
132
+ <span class="cline-any cline-neutral">&nbsp;</span>
133
+ <span class="cline-any cline-neutral">&nbsp;</span>
134
+ <span class="cline-any cline-neutral">&nbsp;</span>
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-yes">4x</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span>
139
+ <span class="cline-any cline-yes">2x</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-neutral">&nbsp;</span>
142
+ <span class="cline-any cline-neutral">&nbsp;</span>
143
+ <span class="cline-any cline-neutral">&nbsp;</span>
144
+ <span class="cline-any cline-neutral">&nbsp;</span>
81
145
  <span class="cline-any cline-neutral">&nbsp;</span>
82
146
  <span class="cline-any cline-neutral">&nbsp;</span>
83
147
  <span class="cline-any cline-yes">1x</span>
84
- <span class="cline-any cline-yes">1x</span>
85
- <span class="cline-any cline-yes">1x</span>
148
+ <span class="cline-any cline-yes">4x</span>
149
+ <span class="cline-any cline-yes">2x</span>
86
150
  <span class="cline-any cline-yes">1x</span>
87
151
  <span class="cline-any cline-neutral">&nbsp;</span>
88
152
  <span class="cline-any cline-yes">1x</span>
89
153
  <span class="cline-any cline-neutral">&nbsp;</span>
90
154
  <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-yes">2x</span>
156
+ <span class="cline-any cline-neutral">&nbsp;</span>
157
+ <span class="cline-any cline-yes">2x</span>
158
+ <span class="cline-any cline-yes">2x</span>
159
+ <span class="cline-any cline-yes">2x</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-yes">2x</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span>
91
163
  <span class="cline-any cline-neutral">&nbsp;</span>
92
164
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { NumberModel } from './NumberModel';
165
+ import { IResetableModel, IValueModel } from './types';
166
+ &nbsp;
167
+ export class LoadingModel implements IValueModel&lt;boolean&gt;, IResetableModel {
93
168
  &nbsp;
94
- export class LoadingModel extends NumberModel {
169
+ private readonly _number = new NumberModel(0);
95
170
  &nbsp;
96
- public get isLoading() { return this.value &gt; 0; }
171
+ public get isLoading() { return this._number.value &gt; 0; }
97
172
  &nbsp;
98
- public async useLoading&lt;T&gt;(cb: () =&gt; (T | Promise&lt;T&gt;)): Promise&lt;T&gt; {
99
- try {
100
- this.increment();
101
- const res = await cb();
102
- return res;
103
- } finally {
104
- this.decrement();
173
+ public get value(): boolean { return this.isLoading; }
174
+ public set value(v: boolean) {
175
+ if (v) {
176
+ this._number.increment();
177
+ } else {
178
+ this._number.decrement();
105
179
  }
106
180
  }
181
+ &nbsp;
182
+ public async useLoading&lt;T&gt;(cb: () =&gt; (T | Promise&lt;T&gt;)): Promise&lt;T&gt;;
183
+ public async useLoading&lt;T&gt;(cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: false): Promise&lt;T&gt;;
184
+ public async useLoading&lt;T&gt;(cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: true): Promise&lt;T | false&gt;;
185
+ public async useLoading&lt;T&gt;(cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: 'throw'): Promise&lt;T&gt;;
186
+ &nbsp;
187
+ public useLoading&lt;T&gt;(cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: boolean | 'throw' = false): Promise&lt;T | false&gt; {
188
+ return withLoading(this, cb, exclusive as any);
189
+ }
190
+ &nbsp;
191
+ public reset = <span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >this._number.reset();</span>
192
+ }
193
+ &nbsp;
194
+ export function withLoading&lt;T&gt;(model: IValueModel&lt;boolean&gt;, cb: () =&gt; (T | Promise&lt;T&gt;)): Promise&lt;T&gt;;
195
+ export function withLoading&lt;T&gt;(model: IValueModel&lt;boolean&gt;, cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: false): Promise&lt;T&gt;;
196
+ export function withLoading&lt;T&gt;(model: IValueModel&lt;boolean&gt;, cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: true): Promise&lt;T | false&gt;;
197
+ export function withLoading&lt;T&gt;(model: IValueModel&lt;boolean&gt;, cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: 'throw'): Promise&lt;T&gt;;
198
+ &nbsp;
199
+ export async function withLoading&lt;T&gt;(this: void, model: IValueModel&lt;boolean&gt;, cb: () =&gt; (T | Promise&lt;T&gt;), exclusive: boolean | 'throw' = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span>: Promise&lt;T | false&gt; {
200
+ if (exclusive &amp;&amp; model.value) {
201
+ if (exclusive === 'throw') {
202
+ throw new Error('Operation cannot be started because another one is in progress already.');
203
+ }
204
+ return false;
205
+ }
206
+ &nbsp;
207
+ model.value = true;
208
+ &nbsp;
209
+ try {
210
+ const res = await cb();
211
+ return res;
212
+ } finally {
213
+ model.value = false;
214
+ }
107
215
  }
108
216
  &nbsp;</pre></td></tr></table></pre>
109
217
 
@@ -112,7 +220,7 @@ export class LoadingModel extends NumberModel {
112
220
  <div class='footer quiet pad2 space-top1 center small'>
113
221
  Code coverage generated by
114
222
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
115
- at Fri Mar 18 2022 08:45:35 GMT+0000 (Coordinated Universal Time)
223
+ at Sat Jun 04 2022 17:01:00 GMT+0000 (Coordinated Universal Time)
116
224
  </div>
117
225
  </div>
118
226
  <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">90.63% </span>
26
+ <span class="strong">90.91% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>58/64</span>
28
+ <span class='fraction'>60/66</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">89.83% </span>
47
+ <span class="strong">90.16% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>53/59</span>
49
+ <span class='fraction'>55/61</span>
50
50
  </div>
51
51
 
52
52
 
@@ -198,36 +198,56 @@
198
198
  <a name='L139'></a><a href='#L139'>139</a>
199
199
  <a name='L140'></a><a href='#L140'>140</a>
200
200
  <a name='L141'></a><a href='#L141'>141</a>
201
- <a name='L142'></a><a href='#L142'>142</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
201
+ <a name='L142'></a><a href='#L142'>142</a>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
202
213
  <span class="cline-any cline-yes">2x</span>
203
214
  <span class="cline-any cline-yes">2x</span>
204
215
  <span class="cline-any cline-yes">2x</span>
205
216
  <span class="cline-any cline-neutral">&nbsp;</span>
206
217
  <span class="cline-any cline-yes">2x</span>
207
218
  <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-yes">2x</span>
208
220
  <span class="cline-any cline-neutral">&nbsp;</span>
209
221
  <span class="cline-any cline-yes">2x</span>
210
222
  <span class="cline-any cline-neutral">&nbsp;</span>
211
223
  <span class="cline-any cline-yes">6x</span>
212
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>
213
227
  <span class="cline-any cline-yes">6x</span>
214
228
  <span class="cline-any cline-yes">6x</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
215
230
  <span class="cline-any cline-yes">6x</span>
216
231
  <span class="cline-any cline-neutral">&nbsp;</span>
217
232
  <span class="cline-any cline-yes">6x</span>
218
233
  <span class="cline-any cline-neutral">&nbsp;</span>
219
234
  <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-yes">6x</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
236
  <span class="cline-any cline-yes">6x</span>
222
237
  <span class="cline-any cline-neutral">&nbsp;</span>
223
238
  <span class="cline-any cline-neutral">&nbsp;</span>
224
239
  <span class="cline-any cline-yes">6x</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-yes">6x</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
243
  <span class="cline-any cline-yes">6x</span>
226
244
  <span class="cline-any cline-neutral">&nbsp;</span>
227
245
  <span class="cline-any cline-neutral">&nbsp;</span>
228
246
  <span class="cline-any cline-neutral">&nbsp;</span>
229
247
  <span class="cline-any cline-neutral">&nbsp;</span>
230
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
251
  <span class="cline-any cline-yes">6x</span>
232
252
  <span class="cline-any cline-yes">6x</span>
233
253
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -244,7 +264,8 @@
244
264
  <span class="cline-any cline-neutral">&nbsp;</span>
245
265
  <span class="cline-any cline-neutral">&nbsp;</span>
246
266
  <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-yes">1x</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-yes">25x</span>
248
269
  <span class="cline-any cline-neutral">&nbsp;</span>
249
270
  <span class="cline-any cline-neutral">&nbsp;</span>
250
271
  <span class="cline-any cline-no">&nbsp;</span>
@@ -263,6 +284,7 @@
263
284
  <span class="cline-any cline-neutral">&nbsp;</span>
264
285
  <span class="cline-any cline-neutral">&nbsp;</span>
265
286
  <span class="cline-any cline-yes">4x</span>
287
+ <span class="cline-any cline-yes">4x</span>
266
288
  <span class="cline-any cline-neutral">&nbsp;</span>
267
289
  <span class="cline-any cline-neutral">&nbsp;</span>
268
290
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -339,33 +361,42 @@
339
361
  <span class="cline-any cline-yes">3x</span>
340
362
  <span class="cline-any cline-neutral">&nbsp;</span>
341
363
  <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { createLazy } from '../lazy.light';
343
- import { observable, computed, makeObservable, reaction, action } from 'mobx';
364
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { observable, computed, makeObservable, reaction, action } from 'mobx';
365
+ import { createLazy } from '../lazy.light';
344
366
  import { FlagModel, ILabeledFlagModel } from './FlagModel';
345
367
  import { ValidatableModel } from './Validatable';
346
368
  import { IValueModel } from './types';
347
369
  import { withLabel } from './wrappers';
348
- import { IResetableModel } from 'viewModels';
370
+ import { IResetableModel } from './types';
371
+ import { Getter } from '../types';
349
372
  &nbsp;
350
373
  export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements IValueModel&lt;string&gt;, IResetableModel {
351
374
  // @observable
352
375
  private _index: number = undefined;
353
376
  &nbsp;
354
- public readonly opened = new FlagModel();
377
+ private readonly _items: Getter&lt;readonly T[]&gt;;
378
+ &nbsp;
355
379
  private _indexLocked = false;
356
380
  private _initialIndex: number = null;
357
381
  &nbsp;
358
382
  private readonly _flags = createLazy(() =&gt; this.createFlags());
383
+ &nbsp;
384
+ public readonly opened = new FlagModel();
359
385
  &nbsp;
360
386
  constructor(
361
- private readonly _items: readonly T[],
387
+ items: Getter&lt;readonly T[]&gt;,
362
388
  private readonly _accessor: (item: T) =&gt; string,
363
389
  initialIndex: number = 0,
364
390
  ) {
365
391
  super();
366
- makeObservable&lt;Select&lt;T&gt;, '_index'&gt;(this, {
392
+ &nbsp;
393
+ this._items = items;
394
+ &nbsp;
395
+ makeObservable&lt;Select&lt;T&gt;, '_index' | '_items'&gt;(this, {
367
396
  '_index': observable,
397
+ '_items': observable.ref,
368
398
  values: computed,
399
+ items: computed,
369
400
  setIndex: action,
370
401
  });
371
402
  &nbsp;
@@ -377,15 +408,16 @@ export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements
377
408
  &nbsp;
378
409
  // @computed
379
410
  get values(): readonly string[] {
380
- return this._items.map(i =&gt; this._accessor(i));
411
+ return this.items.map(i =&gt; this._accessor(i));
381
412
  }
382
413
  &nbsp;
383
414
  get flags() {
384
415
  return this._flags.value;
385
416
  }
386
417
  &nbsp;
387
- get items() {
388
- return this._items;
418
+ // @computed
419
+ get items(): readonly T[] {
420
+ return Getter.getValue(this._items);
389
421
  }
390
422
  &nbsp;
391
423
  <span class="fstat-no" title="function not covered" > get v</span>alue() { <span class="cstat-no" title="statement not covered" >return this.selectedValue; </span>}
@@ -403,11 +435,12 @@ export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements
403
435
  }
404
436
  &nbsp;
405
437
  get selectedItem(): T {
406
- return this._items.length ? this._items[this._index] : <span class="branch-1 cbranch-no" title="branch not covered" >null;</span>
438
+ const items = this.items;
439
+ return items.length ? items[this._index] : <span class="branch-1 cbranch-no" title="branch not covered" >null;</span>
407
440
  }
408
441
  &nbsp;
409
442
  set selectedItem(item: T) {
410
- const index = this._items.indexOf(item);
443
+ const index = this.items.indexOf(item);
411
444
  if (index &gt;= 0) {
412
445
  this.index = index;
413
446
  }
@@ -447,13 +480,13 @@ export class Select&lt;T = any&gt; extends ValidatableModel&lt;T&gt; implements
447
480
  }
448
481
  };
449
482
  &nbsp;
450
- reset = () =&gt; {
483
+ public reset = () =&gt; {
451
484
  super.reset();
452
485
  this.index = this._initialIndex;
453
486
  };
454
487
  &nbsp;
455
488
  private createFlags() {
456
- const flags: ReadonlyArray&lt;ILabeledFlagModel&gt; = this._items
489
+ const flags: ReadonlyArray&lt;ILabeledFlagModel&gt; = this.items
457
490
  .map((item, index) =&gt; {
458
491
  const flag: ILabeledFlagModel = withLabel(
459
492
  new FlagModel(index === this.index),
@@ -487,7 +520,7 @@ export class SelectString&lt;T extends string = string&gt; extends Select&lt;T&g
487
520
  <div class='footer quiet pad2 space-top1 center small'>
488
521
  Code coverage generated by
489
522
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
490
- at Fri Mar 18 2022 08:45:35 GMT+0000 (Coordinated Universal Time)
523
+ at Sat Jun 04 2022 17:01:00 GMT+0000 (Coordinated Universal Time)
491
524
  </div>
492
525
  </div>
493
526
  <script src="../prettify.js"></script>
@@ -445,7 +445,7 @@ export class TextInputVM extends ValidatableModel&lt;string&gt; implements IValu
445
445
  <div class='footer quiet pad2 space-top1 center small'>
446
446
  Code coverage generated by
447
447
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
448
- at Fri Mar 18 2022 08:45:35 GMT+0000 (Coordinated Universal Time)
448
+ at Sat Jun 04 2022 17:01:00 GMT+0000 (Coordinated Universal Time)
449
449
  </div>
450
450
  </div>
451
451
  <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">74.02% </span>
26
+ <span class="strong">77.91% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>245/331</span>
28
+ <span class='fraction'>127/163</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">55.79% </span>
33
+ <span class="strong">59.32% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>53/95</span>
35
+ <span class='fraction'>35/59</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">62.02% </span>
40
+ <span class="strong">65% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>80/129</span>
42
+ <span class='fraction'>39/60</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">74.42% </span>
47
+ <span class="strong">78.29% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>224/301</span>
49
+ <span class='fraction'>119/152</span>
50
50
  </div>
51
51
 
52
52
 
@@ -87,79 +87,34 @@
87
87
  <td data-value="19" class="abs high">19/19</td>
88
88
  </tr>
89
89
 
90
- <tr>
91
- <td class="file medium" data-value="FlagModel.ts"><a href="FlagModel.ts.html">FlagModel.ts</a></td>
92
- <td data-value="59.09" class="pic medium">
93
- <div class="chart"><div class="cover-fill" style="width: 59%"></div><div class="cover-empty" style="width: 41%"></div></div>
94
- </td>
95
- <td data-value="59.09" class="pct medium">59.09%</td>
96
- <td data-value="22" class="abs medium">13/22</td>
97
- <td data-value="100" class="pct high">100%</td>
98
- <td data-value="1" class="abs high">1/1</td>
99
- <td data-value="44.44" class="pct low">44.44%</td>
100
- <td data-value="9" class="abs low">4/9</td>
101
- <td data-value="59.09" class="pct medium">59.09%</td>
102
- <td data-value="22" class="abs medium">13/22</td>
103
- </tr>
104
-
105
90
  <tr>
106
91
  <td class="file high" data-value="LoadingModel.ts"><a href="LoadingModel.ts.html">LoadingModel.ts</a></td>
107
- <td data-value="100" class="pic high">
108
- <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
92
+ <td data-value="95.24" class="pic high">
93
+ <div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
109
94
  </td>
95
+ <td data-value="95.24" class="pct high">95.24%</td>
96
+ <td data-value="21" class="abs high">20/21</td>
97
+ <td data-value="90" class="pct high">90%</td>
98
+ <td data-value="10" class="abs high">9/10</td>
99
+ <td data-value="85.71" class="pct high">85.71%</td>
100
+ <td data-value="7" class="abs high">6/7</td>
110
101
  <td data-value="100" class="pct high">100%</td>
111
- <td data-value="8" class="abs high">8/8</td>
112
- <td data-value="100" class="pct high">100%</td>
113
- <td data-value="0" class="abs high">0/0</td>
114
- <td data-value="100" class="pct high">100%</td>
115
- <td data-value="2" class="abs high">2/2</td>
116
- <td data-value="100" class="pct high">100%</td>
117
- <td data-value="8" class="abs high">8/8</td>
118
- </tr>
119
-
120
- <tr>
121
- <td class="file medium" data-value="MultiSelectModel.ts"><a href="MultiSelectModel.ts.html">MultiSelectModel.ts</a></td>
122
- <td data-value="75" class="pic medium">
123
- <div class="chart"><div class="cover-fill" style="width: 75%"></div><div class="cover-empty" style="width: 25%"></div></div>
124
- </td>
125
- <td data-value="75" class="pct medium">75%</td>
126
- <td data-value="96" class="abs medium">72/96</td>
127
- <td data-value="44.44" class="pct low">44.44%</td>
128
- <td data-value="18" class="abs low">8/18</td>
129
- <td data-value="66.67" class="pct medium">66.67%</td>
130
- <td data-value="42" class="abs medium">28/42</td>
131
- <td data-value="74.39" class="pct medium">74.39%</td>
132
- <td data-value="82" class="abs medium">61/82</td>
133
- </tr>
134
-
135
- <tr>
136
- <td class="file high" data-value="NumberModel.ts"><a href="NumberModel.ts.html">NumberModel.ts</a></td>
137
- <td data-value="89.47" class="pic high">
138
- <div class="chart"><div class="cover-fill" style="width: 89%"></div><div class="cover-empty" style="width: 11%"></div></div>
139
- </td>
140
- <td data-value="89.47" class="pct high">89.47%</td>
141
- <td data-value="19" class="abs high">17/19</td>
142
- <td data-value="100" class="pct high">100%</td>
143
- <td data-value="3" class="abs high">3/3</td>
144
- <td data-value="75" class="pct medium">75%</td>
145
- <td data-value="8" class="abs medium">6/8</td>
146
- <td data-value="88.24" class="pct high">88.24%</td>
147
- <td data-value="17" class="abs high">15/17</td>
102
+ <td data-value="20" class="abs high">20/20</td>
148
103
  </tr>
149
104
 
150
105
  <tr>
151
106
  <td class="file high" data-value="SelectModel.ts"><a href="SelectModel.ts.html">SelectModel.ts</a></td>
152
- <td data-value="90.63" class="pic high">
107
+ <td data-value="90.91" class="pic high">
153
108
  <div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
154
109
  </td>
155
- <td data-value="90.63" class="pct high">90.63%</td>
156
- <td data-value="64" class="abs high">58/64</td>
110
+ <td data-value="90.91" class="pct high">90.91%</td>
111
+ <td data-value="66" class="abs high">60/66</td>
157
112
  <td data-value="83.33" class="pct high">83.33%</td>
158
113
  <td data-value="18" class="abs high">15/18</td>
159
114
  <td data-value="84.62" class="pct high">84.62%</td>
160
115
  <td data-value="26" class="abs high">22/26</td>
161
- <td data-value="89.83" class="pct high">89.83%</td>
162
- <td data-value="59" class="abs high">53/59</td>
116
+ <td data-value="90.16" class="pct high">90.16%</td>
117
+ <td data-value="61" class="abs high">55/61</td>
163
118
  </tr>
164
119
 
165
120
  <tr>
@@ -177,21 +132,6 @@
177
132
  <td data-value="52" class="abs low">25/52</td>
178
133
  </tr>
179
134
 
180
- <tr>
181
- <td class="file medium" data-value="Validatable.ts"><a href="Validatable.ts.html">Validatable.ts</a></td>
182
- <td data-value="65.22" class="pic medium">
183
- <div class="chart"><div class="cover-fill" style="width: 65%"></div><div class="cover-empty" style="width: 35%"></div></div>
184
- </td>
185
- <td data-value="65.22" class="pct medium">65.22%</td>
186
- <td data-value="46" class="abs medium">30/46</td>
187
- <td data-value="62.5" class="pct medium">62.5%</td>
188
- <td data-value="24" class="abs medium">15/24</td>
189
- <td data-value="46.67" class="pct low">46.67%</td>
190
- <td data-value="15" class="abs low">7/15</td>
191
- <td data-value="71.43" class="pct medium">71.43%</td>
192
- <td data-value="42" class="abs medium">30/42</td>
193
- </tr>
194
-
195
135
  </tbody>
196
136
  </table>
197
137
  </div>
@@ -200,7 +140,7 @@
200
140
  <div class='footer quiet pad2 space-top1 center small'>
201
141
  Code coverage generated by
202
142
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
203
- at Fri Mar 18 2022 08:45:35 GMT+0000 (Coordinated Universal Time)
143
+ at Sat Jun 04 2022 17:01:00 GMT+0000 (Coordinated Universal Time)
204
144
  </div>
205
145
  </div>
206
146
  <script src="../prettify.js"></script>