@zajno/common 1.3.9 → 1.3.13

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 (69) hide show
  1. package/coverage/clover.xml +56 -41
  2. package/coverage/coverage-final.json +2 -1
  3. package/coverage/lcov-report/index.html +26 -26
  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 +15 -15
  22. package/coverage/lcov-report/src/fields/update.ts.html +69 -12
  23. package/coverage/lcov-report/src/functions.ts.html +122 -0
  24. package/coverage/lcov-report/src/index.html +24 -9
  25. package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
  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 +14 -2
  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 +1 -1
  48. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  49. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  50. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  51. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
  52. package/coverage/lcov-report/src/viewModels/index.html +1 -1
  53. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  54. package/coverage/lcov.info +150 -97
  55. package/lib/fields/update.d.ts +8 -2
  56. package/lib/fields/update.d.ts.map +1 -1
  57. package/lib/fields/update.js +13 -1
  58. package/lib/fields/update.js.map +1 -1
  59. package/lib/functions.d.ts +1 -2
  60. package/lib/functions.d.ts.map +1 -1
  61. package/lib/functions.js.map +1 -1
  62. package/lib/types.d.ts +3 -0
  63. package/lib/types.d.ts.map +1 -1
  64. package/package.json +5 -3
  65. package/src/fields/update.ts +22 -3
  66. package/src/functions.ts +1 -3
  67. package/src/types.ts +4 -0
  68. package/tsconfig.json +6 -4
  69. package/yarn-error.log +3709 -0
@@ -178,7 +178,7 @@ export async function <span class="fstat-no" title="function not covered" >mapAs
178
178
  <div class='footer quiet pad2 space-top1 center small'>
179
179
  Code coverage generated by
180
180
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
181
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
181
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
182
182
  </div>
183
183
  </div>
184
184
  <script src="../../prettify.js"></script>
@@ -95,7 +95,7 @@
95
95
  <div class='footer quiet pad2 space-top1 center small'>
96
96
  Code coverage generated by
97
97
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
98
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
98
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
99
99
  </div>
100
100
  </div>
101
101
  <script src="../../prettify.js"></script>
@@ -280,7 +280,7 @@ export function clamp(d: Date, low: Date, high: Date) {
280
280
  <div class='footer quiet pad2 space-top1 center small'>
281
281
  Code coverage generated by
282
282
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
283
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
283
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
284
284
  </div>
285
285
  </div>
286
286
  <script src="../../prettify.js"></script>
@@ -637,7 +637,7 @@ export function getDaysStreak(dates: number[], descentOrder: boolean): number {
637
637
  <div class='footer quiet pad2 space-top1 center small'>
638
638
  Code coverage generated by
639
639
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
640
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
640
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
641
641
  </div>
642
642
  </div>
643
643
  <script src="../../prettify.js"></script>
@@ -190,7 +190,7 @@ export namespace DateX {
190
190
  <div class='footer quiet pad2 space-top1 center small'>
191
191
  Code coverage generated by
192
192
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
193
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
193
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
194
194
  </div>
195
195
  </div>
196
196
  <script src="../../prettify.js"></script>
@@ -382,7 +382,7 @@ export namespace Format {
382
382
  <div class='footer quiet pad2 space-top1 center small'>
383
383
  Code coverage generated by
384
384
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
385
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
385
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
386
386
  </div>
387
387
  </div>
388
388
  <script src="../../prettify.js"></script>
@@ -230,7 +230,7 @@
230
230
  <div class='footer quiet pad2 space-top1 center small'>
231
231
  Code coverage generated by
232
232
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
233
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
233
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
234
234
  </div>
235
235
  </div>
236
236
  <script src="../../prettify.js"></script>
@@ -91,7 +91,7 @@ export * from './yearDate';
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
94
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
94
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  </div>
97
97
  <script src="../../prettify.js"></script>
@@ -136,7 +136,7 @@ export namespace Parse {
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
139
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
139
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../../prettify.js"></script>
@@ -133,7 +133,7 @@ export namespace Period {
133
133
  <div class='footer quiet pad2 space-top1 center small'>
134
134
  Code coverage generated by
135
135
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
136
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
136
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
137
137
  </div>
138
138
  </div>
139
139
  <script src="../../prettify.js"></script>
@@ -334,7 +334,7 @@ export function isSame(d1: Date | number, d2: Date | number, g: Granularity, loc
334
334
  <div class='footer quiet pad2 space-top1 center small'>
335
335
  Code coverage generated by
336
336
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
337
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
337
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
338
338
  </div>
339
339
  </div>
340
340
  <script src="../../prettify.js"></script>
@@ -160,7 +160,7 @@ export namespace ConstantGranularity {
160
160
  <div class='footer quiet pad2 space-top1 center small'>
161
161
  Code coverage generated by
162
162
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
163
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
163
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
164
164
  </div>
165
165
  </div>
166
166
  <script src="../../prettify.js"></script>
@@ -172,7 +172,7 @@ export namespace YearDate {
172
172
  <div class='footer quiet pad2 space-top1 center small'>
173
173
  Code coverage generated by
174
174
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
175
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
175
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
176
176
  </div>
177
177
  </div>
178
178
  <script src="../../prettify.js"></script>
@@ -433,7 +433,7 @@ export class EnumBitwiseHelper&lt;T extends number&gt; extends EnumHelper&lt;T&g
433
433
  <div class='footer quiet pad2 space-top1 center small'>
434
434
  Code coverage generated by
435
435
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
436
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
436
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
437
437
  </div>
438
438
  </div>
439
439
  <script src="../prettify.js"></script>
@@ -262,7 +262,7 @@ export class Event&lt;T = any&gt; implements IEvent&lt;T&gt; {
262
262
  <div class='footer quiet pad2 space-top1 center small'>
263
263
  Code coverage generated by
264
264
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
265
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
265
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
266
266
  </div>
267
267
  </div>
268
268
  <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">73.33% </span>
26
+ <span class="strong">75.93% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>33/45</span>
28
+ <span class='fraction'>41/54</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">80% </span>
33
+ <span class="strong">80.77% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>40/50</span>
35
+ <span class='fraction'>63/78</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">78.38% </span>
47
+ <span class="strong">80.43% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>29/37</span>
49
+ <span class='fraction'>37/46</span>
50
50
  </div>
51
51
 
52
52
 
@@ -74,17 +74,17 @@
74
74
  </thead>
75
75
  <tbody><tr>
76
76
  <td class="file medium" data-value="update.ts"><a href="update.ts.html">update.ts</a></td>
77
- <td data-value="73.33" class="pic medium">
78
- <div class="chart"><div class="cover-fill" style="width: 73%"></div><div class="cover-empty" style="width: 27%"></div></div>
77
+ <td data-value="75.93" class="pic medium">
78
+ <div class="chart"><div class="cover-fill" style="width: 75%"></div><div class="cover-empty" style="width: 25%"></div></div>
79
79
  </td>
80
- <td data-value="73.33" class="pct medium">73.33%</td>
81
- <td data-value="45" class="abs medium">33/45</td>
82
- <td data-value="80" class="pct high">80%</td>
83
- <td data-value="50" class="abs high">40/50</td>
80
+ <td data-value="75.93" class="pct medium">75.93%</td>
81
+ <td data-value="54" class="abs medium">41/54</td>
82
+ <td data-value="80.77" class="pct high">80.77%</td>
83
+ <td data-value="78" class="abs high">63/78</td>
84
84
  <td data-value="45.45" class="pct low">45.45%</td>
85
85
  <td data-value="11" class="abs low">5/11</td>
86
- <td data-value="78.38" class="pct medium">78.38%</td>
87
- <td data-value="37" class="abs medium">29/37</td>
86
+ <td data-value="80.43" class="pct high">80.43%</td>
87
+ <td data-value="46" class="abs high">37/46</td>
88
88
  </tr>
89
89
 
90
90
  </tbody>
@@ -95,7 +95,7 @@
95
95
  <div class='footer quiet pad2 space-top1 center small'>
96
96
  Code coverage generated by
97
97
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
98
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
98
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
99
99
  </div>
100
100
  </div>
101
101
  <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">73.33% </span>
26
+ <span class="strong">75.93% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>33/45</span>
28
+ <span class='fraction'>41/54</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">80% </span>
33
+ <span class="strong">80.77% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>40/50</span>
35
+ <span class='fraction'>63/78</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">78.38% </span>
47
+ <span class="strong">80.43% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>29/37</span>
49
+ <span class='fraction'>37/46</span>
50
50
  </div>
51
51
 
52
52
 
@@ -155,7 +155,27 @@
155
155
  <a name='L96'></a><a href='#L96'>96</a>
156
156
  <a name='L97'></a><a href='#L97'>97</a>
157
157
  <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a>
166
+ <a name='L107'></a><a href='#L107'>107</a>
167
+ <a name='L108'></a><a href='#L108'>108</a>
168
+ <a name='L109'></a><a href='#L109'>109</a>
169
+ <a name='L110'></a><a href='#L110'>110</a>
170
+ <a name='L111'></a><a href='#L111'>111</a>
171
+ <a name='L112'></a><a href='#L112'>112</a>
172
+ <a name='L113'></a><a href='#L113'>113</a>
173
+ <a name='L114'></a><a href='#L114'>114</a>
174
+ <a name='L115'></a><a href='#L115'>115</a>
175
+ <a name='L116'></a><a href='#L116'>116</a>
176
+ <a name='L117'></a><a href='#L117'>117</a>
177
+ <a name='L118'></a><a href='#L118'>118</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
159
179
  <span class="cline-any cline-neutral">&nbsp;</span>
160
180
  <span class="cline-any cline-neutral">&nbsp;</span>
161
181
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -203,6 +223,13 @@
203
223
  <span class="cline-any cline-neutral">&nbsp;</span>
204
224
  <span class="cline-any cline-neutral">&nbsp;</span>
205
225
  <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
233
  <span class="cline-any cline-yes">1x</span>
207
234
  <span class="cline-any cline-neutral">&nbsp;</span>
208
235
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -219,13 +246,19 @@
219
246
  <span class="cline-any cline-neutral">&nbsp;</span>
220
247
  <span class="cline-any cline-yes">5x</span>
221
248
  <span class="cline-any cline-yes">5x</span>
249
+ <span class="cline-any cline-yes">5x</span>
250
+ <span class="cline-any cline-yes">5x</span>
251
+ <span class="cline-any cline-yes">5x</span>
222
252
  <span class="cline-any cline-neutral">&nbsp;</span>
223
253
  <span class="cline-any cline-neutral">&nbsp;</span>
224
254
  <span class="cline-any cline-yes">5x</span>
225
255
  <span class="cline-any cline-yes">5x</span>
226
256
  <span class="cline-any cline-yes">31x</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
258
  <span class="cline-any cline-yes">10x</span>
228
259
  <span class="cline-any cline-yes">10x</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-yes">10x</span>
229
262
  <span class="cline-any cline-yes">10x</span>
230
263
  <span class="cline-any cline-neutral">&nbsp;</span>
231
264
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -238,8 +271,13 @@
238
271
  <span class="cline-any cline-yes">12x</span>
239
272
  <span class="cline-any cline-yes">7x</span>
240
273
  <span class="cline-any cline-yes">7x</span>
274
+ <span class="cline-any cline-yes">7x</span>
241
275
  <span class="cline-any cline-yes">5x</span>
242
276
  <span class="cline-any cline-yes">1x</span>
277
+ <span class="cline-any cline-yes">1x</span>
278
+ <span class="cline-any cline-yes">1x</span>
279
+ <span class="cline-any cline-no">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
281
  <span class="cline-any cline-neutral">&nbsp;</span>
244
282
  <span class="cline-any cline-neutral">&nbsp;</span>
245
283
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -253,7 +291,8 @@
253
291
  <span class="cline-any cline-neutral">&nbsp;</span>
254
292
  <span class="cline-any cline-neutral">&nbsp;</span>
255
293
  <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Comparator } from '../types';
294
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { safeCall } from '../functions';
295
+ import { Comparator } from '../types';
257
296
  &nbsp;
258
297
  export namespace Fields {
259
298
  export type Getter&lt;T&gt; = (obj: Partial&lt;T&gt;) =&gt; T[keyof T];
@@ -263,7 +302,7 @@ export namespace Fields {
263
302
  }
264
303
  &nbsp;
265
304
  &nbsp;
266
- export function <span class="fstat-no" title="function not covered" >updateField&lt;</span>T&gt;(target: T, source: Partial&lt;T&gt;, diff: Partial&lt;T&gt;, key: keyof T, hasChanged: Fields.Comparer&lt;T&gt; = <span class="branch-0 cbranch-no" title="branch not covered" >null)</span>: boolean {
305
+ export function <span class="fstat-no" title="function not covered" >updateField&lt;</span>T&gt;(target: T, source: Partial&lt;T&gt;, diff: Partial&lt;T&gt;, key: keyof T, hasChanged: null | Fields.Comparer&lt;T&gt; = <span class="branch-0 cbranch-no" title="branch not covered" >null)</span>: boolean {
267
306
  <span class="cstat-no" title="statement not covered" > return updateFieldExtended(target, source, diff, <span class="fstat-no" title="function not covered" >t </span>=&gt; <span class="cstat-no" title="statement not covered" >t[key],</span> <span class="fstat-no" title="function not covered" >(t</span>, v) =&gt; <span class="cstat-no" title="statement not covered" >t[key] = v,</span> hasChanged);</span>
268
307
  }
269
308
  &nbsp;
@@ -273,7 +312,7 @@ export function <span class="fstat-no" title="function not covered" >updateField
273
312
  diff: Partial&lt;T&gt;,
274
313
  get: Fields.Getter&lt;T&gt;,
275
314
  set: Fields.Setter&lt;T&gt;,
276
- hasChanged: Fields.Comparer&lt;T&gt; = <span class="branch-0 cbranch-no" title="branch not covered" >null,</span>
315
+ hasChanged: null | Fields.Comparer&lt;T&gt; = <span class="branch-0 cbranch-no" title="branch not covered" >null,</span>
277
316
  ): boolean {
278
317
  &nbsp;
279
318
  <span class="cstat-no" title="statement not covered" > hasChanged = hasChanged || (<span class="fstat-no" title="function not covered" >(v</span>1: T, v2: T) =&gt; (<span class="cstat-no" title="statement not covered" >get(v1) !== get(v2))</span>);</span>
@@ -299,6 +338,13 @@ export type UpdateArrayOptions&lt;T&gt; = {
299
338
  comparator?: Comparator&lt;T&gt;,
300
339
  updater?: Fields.Updater&lt;T&gt;,
301
340
  sorter?: Comparator&lt;T, number&gt; | null | undefined,
341
+ hooks?: UpdateArrayHooks&lt;T&gt;,
342
+ };
343
+ &nbsp;
344
+ export type UpdateArrayHooks&lt;T&gt; = {
345
+ onAdded?: (item: T) =&gt; void,
346
+ onDeleted?: (item: T) =&gt; void,
347
+ onUpdated?: (previous: T, next: T) =&gt; void,
302
348
  };
303
349
  &nbsp;
304
350
  export function updateArray&lt;T&gt;(
@@ -317,12 +363,18 @@ export function updateArray&lt;T&gt;(
317
363
  &nbsp;
318
364
  const comparator = options?.comparator || DefaultComparator;
319
365
  const updater = options?.updater || DefaultUpdater;
366
+ const onDeleted = options?.hooks<span class="branch-1 cbranch-no" title="branch not covered" >?.onDeleted;</span>
367
+ const onUpdate = options?.hooks<span class="branch-1 cbranch-no" title="branch not covered" >?.onUpdated;</span>
368
+ const onAdded = options?.hooks<span class="branch-1 cbranch-no" title="branch not covered" >?.onAdded;</span>
320
369
  &nbsp;
321
370
  // remove all missing elements
322
371
  <span class="missing-if-branch" title="else path not taken" >E</span>if (!options?.additive) {
323
372
  for (let i = 0; i &lt; result.length; ++i) {
324
373
  if (source.find(item =&gt; comparator(item, result[i])) == null) {
325
- result.splice(i, 1);
374
+ // DELETE
375
+ const removed = result.splice(i, 1);
376
+ safeCall(onDeleted, removed[0]);
377
+ &nbsp;
326
378
  ++changed;
327
379
  --i;
328
380
  }
@@ -335,9 +387,14 @@ export function updateArray&lt;T&gt;(
335
387
  const existingItem = result[existingIndex];
336
388
  if (existingIndex &lt; 0) {
337
389
  result.push(i);
390
+ safeCall(onAdded, i);
338
391
  ++changed;
339
392
  } else if (typeof existingItem === 'object') {
393
+ const before = onUpdate != null ? <span class="branch-0 cbranch-no" title="branch not covered" >{ ...existingItem } </span>: undefined;
340
394
  result[existingIndex] = updater(existingItem, i);
395
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (onUpdate != null) {
396
+ <span class="cstat-no" title="statement not covered" > onUpdate(before!, result[existingIndex]);</span>
397
+ }
341
398
  }
342
399
  });
343
400
  &nbsp;
@@ -358,7 +415,7 @@ export function updateArray&lt;T&gt;(
358
415
  <div class='footer quiet pad2 space-top1 center small'>
359
416
  Code coverage generated by
360
417
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
361
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
418
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
362
419
  </div>
363
420
  </div>
364
421
  <script src="../../prettify.js"></script>
@@ -0,0 +1,122 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/functions.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> functions.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">66.67% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>2/3</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">50% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>1/2</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/1</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">66.67% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>2/3</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
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
+ </p>
57
+ </div>
58
+ <div class='status-line medium'></div>
59
+ <pre><table class="coverage">
60
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
+ <a name='L2'></a><a href='#L2'>2</a>
62
+ <a name='L3'></a><a href='#L3'>3</a>
63
+ <a name='L4'></a><a href='#L4'>4</a>
64
+ <a name='L5'></a><a href='#L5'>5</a>
65
+ <a name='L6'></a><a href='#L6'>6</a>
66
+ <a name='L7'></a><a href='#L7'>7</a>
67
+ <a name='L8'></a><a href='#L8'>8</a>
68
+ <a name='L9'></a><a href='#L9'>9</a>
69
+ <a name='L10'></a><a href='#L10'>10</a>
70
+ <a name='L11'></a><a href='#L11'>11</a>
71
+ <a name='L12'></a><a href='#L12'>12</a>
72
+ <a name='L13'></a><a href='#L13'>13</a>
73
+ <a name='L14'></a><a href='#L14'>14</a>
74
+ <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
75
+ <span class="cline-any cline-neutral">&nbsp;</span>
76
+ <span class="cline-any cline-neutral">&nbsp;</span>
77
+ <span class="cline-any cline-neutral">&nbsp;</span>
78
+ <span class="cline-any cline-neutral">&nbsp;</span>
79
+ <span class="cline-any cline-neutral">&nbsp;</span>
80
+ <span class="cline-any cline-neutral">&nbsp;</span>
81
+ <span class="cline-any cline-neutral">&nbsp;</span>
82
+ <span class="cline-any cline-neutral">&nbsp;</span>
83
+ <span class="cline-any cline-yes">1x</span>
84
+ <span class="cline-any cline-yes">17x</span>
85
+ <span class="cline-any cline-no">&nbsp;</span>
86
+ <span class="cline-any cline-neutral">&nbsp;</span>
87
+ <span class="cline-any cline-neutral">&nbsp;</span>
88
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">&nbsp;
89
+ type PropertiesOf&lt;T&gt; = Exclude&lt;{
90
+ [K in keyof T]: T[K] extends Function ? never : K
91
+ }[keyof T], undefined&gt;;
92
+ &nbsp;
93
+ export type RemoveFunctionFields&lt;T&gt; = {
94
+ readonly [P in PropertiesOf&lt;T&gt;]: T[P];
95
+ };
96
+ &nbsp;
97
+ export function safeCall&lt;T extends (...args: any) =&gt; any&gt;(cb: T | undefined, ...args: Parameters&lt;T&gt;): ReturnType&lt;T&gt; | void {
98
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (cb) {
99
+ <span class="cstat-no" title="statement not covered" > return cb.apply(null, args);</span>
100
+ }
101
+ }
102
+ &nbsp;</pre></td></tr></table></pre>
103
+
104
+ <div class='push'></div><!-- for sticky footer -->
105
+ </div><!-- /wrapper -->
106
+ <div class='footer quiet pad2 space-top1 center small'>
107
+ Code coverage generated by
108
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
109
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
110
+ </div>
111
+ </div>
112
+ <script src="../prettify.js"></script>
113
+ <script>
114
+ window.onload = function () {
115
+ prettyPrint();
116
+ };
117
+ </script>
118
+ <script src="../sorter.js"></script>
119
+ <script src="../block-navigation.js"></script>
120
+ </body>
121
+ </html>
122
+
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.85% </span>
26
+ <span class="strong">87.5% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>159/181</span>
28
+ <span class='fraction'>161/184</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">82.83% </span>
33
+ <span class="strong">82.18% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>82/99</span>
35
+ <span class='fraction'>83/101</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">81.82% </span>
40
+ <span class="strong">82.09% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>54/66</span>
42
+ <span class='fraction'>55/67</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88% </span>
47
+ <span class="strong">87.64% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>154/175</span>
49
+ <span class='fraction'>156/178</span>
50
50
  </div>
51
51
 
52
52
 
@@ -102,6 +102,21 @@
102
102
  <td data-value="23" class="abs medium">13/23</td>
103
103
  </tr>
104
104
 
105
+ <tr>
106
+ <td class="file medium" data-value="functions.ts"><a href="functions.ts.html">functions.ts</a></td>
107
+ <td data-value="66.67" class="pic medium">
108
+ <div class="chart"><div class="cover-fill" style="width: 66%"></div><div class="cover-empty" style="width: 34%"></div></div>
109
+ </td>
110
+ <td data-value="66.67" class="pct medium">66.67%</td>
111
+ <td data-value="3" class="abs medium">2/3</td>
112
+ <td data-value="50" class="pct medium">50%</td>
113
+ <td data-value="2" class="abs medium">1/2</td>
114
+ <td data-value="100" class="pct high">100%</td>
115
+ <td data-value="1" class="abs high">1/1</td>
116
+ <td data-value="66.67" class="pct medium">66.67%</td>
117
+ <td data-value="3" class="abs medium">2/3</td>
118
+ </tr>
119
+
105
120
  <tr>
106
121
  <td class="file high" data-value="lazy.light.ts"><a href="lazy.light.ts.html">lazy.light.ts</a></td>
107
122
  <td data-value="85.71" class="pic high">
@@ -155,7 +170,7 @@
155
170
  <div class='footer quiet pad2 space-top1 center small'>
156
171
  Code coverage generated by
157
172
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
158
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
173
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
159
174
  </div>
160
175
  </div>
161
176
  <script src="../prettify.js"></script>
@@ -139,7 +139,7 @@ export function createLazy&lt;T&gt;(factory: () =&gt; T) {
139
139
  <div class='footer quiet pad2 space-top1 center small'>
140
140
  Code coverage generated by
141
141
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
142
- at Tue Jan 18 2022 11:27:24 GMT+0000 (Coordinated Universal Time)
142
+ at Thu Jan 20 2022 14:25:44 GMT+0000 (Coordinated Universal Time)
143
143
  </div>
144
144
  </div>
145
145
  <script src="../prettify.js"></script>