@zajno/common 1.3.3 → 1.3.7

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 (88) hide show
  1. package/coverage/clover.xml +80 -25
  2. package/coverage/coverage-final.json +3 -2
  3. package/coverage/lcov-report/index.html +35 -20
  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 +111 -0
  22. package/coverage/lcov-report/src/{viewModels/SelectViewModel.ts.html → fields/update.ts.html} +118 -178
  23. package/coverage/lcov-report/src/index.html +1 -1
  24. package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
  25. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  26. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  27. package/coverage/lcov-report/src/logger/index.html +1 -1
  28. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  29. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  30. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  31. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  32. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  33. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  34. package/coverage/lcov-report/src/math/index.html +1 -1
  35. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  36. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  37. package/coverage/lcov-report/src/types.ts.html +1 -1
  38. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  39. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  40. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  41. package/coverage/lcov-report/src/validation/index.html +1 -1
  42. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  43. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  44. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  45. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  46. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +51 -9
  47. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  48. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  49. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  50. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +34 -10
  51. package/coverage/lcov-report/src/viewModels/index.html +29 -29
  52. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  53. package/coverage/lcov-report/update.ts.html +374 -0
  54. package/coverage/lcov.info +189 -51
  55. package/lib/fields/update.d.ts +17 -6
  56. package/lib/fields/update.d.ts.map +1 -1
  57. package/lib/fields/update.js +29 -13
  58. package/lib/fields/update.js.map +1 -1
  59. package/lib/ident.d.ts +6 -0
  60. package/lib/ident.d.ts.map +1 -0
  61. package/lib/ident.js +3 -0
  62. package/lib/ident.js.map +1 -0
  63. package/lib/unsubscriber.d.ts +4 -0
  64. package/lib/unsubscriber.d.ts.map +1 -1
  65. package/lib/unsubscriber.js +8 -1
  66. package/lib/unsubscriber.js.map +1 -1
  67. package/lib/viewModels/FlagModel.d.ts +2 -0
  68. package/lib/viewModels/FlagModel.d.ts.map +1 -1
  69. package/lib/viewModels/FlagModel.js +18 -0
  70. package/lib/viewModels/FlagModel.js.map +1 -1
  71. package/lib/viewModels/PromptModal.d.ts.map +1 -1
  72. package/lib/viewModels/PromptModal.js +1 -1
  73. package/lib/viewModels/PromptModal.js.map +1 -1
  74. package/lib/viewModels/Validatable.d.ts +2 -1
  75. package/lib/viewModels/Validatable.d.ts.map +1 -1
  76. package/lib/viewModels/Validatable.js +7 -0
  77. package/lib/viewModels/Validatable.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/fields/__tests__/fields.update.test.ts +73 -0
  80. package/src/fields/update.ts +54 -20
  81. package/src/ident.ts +8 -0
  82. package/src/unsubscriber.ts +7 -0
  83. package/src/viewModels/FlagModel.ts +14 -0
  84. package/src/viewModels/PromptModal.ts +1 -1
  85. package/src/viewModels/Validatable.ts +8 -0
  86. package/coverage/lcov-report/src/viewModels/LabeledFlagModel.ts.html +0 -146
  87. package/coverage/lcov-report/transitionObserver.ts.html +0 -572
  88. package/yarn-error.log +0 -3709
@@ -0,0 +1,374 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for update.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> update.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">73.33% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>33/45</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">80% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>40/50</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">45.45% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>5/11</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">78.38% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>29/37</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>
75
+ <a name='L16'></a><a href='#L16'>16</a>
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>
113
+ <a name='L54'></a><a href='#L54'>54</a>
114
+ <a name='L55'></a><a href='#L55'>55</a>
115
+ <a name='L56'></a><a href='#L56'>56</a>
116
+ <a name='L57'></a><a href='#L57'>57</a>
117
+ <a name='L58'></a><a href='#L58'>58</a>
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>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a>
131
+ <a name='L72'></a><a href='#L72'>72</a>
132
+ <a name='L73'></a><a href='#L73'>73</a>
133
+ <a name='L74'></a><a href='#L74'>74</a>
134
+ <a name='L75'></a><a href='#L75'>75</a>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a>
139
+ <a name='L80'></a><a href='#L80'>80</a>
140
+ <a name='L81'></a><a href='#L81'>81</a>
141
+ <a name='L82'></a><a href='#L82'>82</a>
142
+ <a name='L83'></a><a href='#L83'>83</a>
143
+ <a name='L84'></a><a href='#L84'>84</a>
144
+ <a name='L85'></a><a href='#L85'>85</a>
145
+ <a name='L86'></a><a href='#L86'>86</a>
146
+ <a name='L87'></a><a href='#L87'>87</a>
147
+ <a name='L88'></a><a href='#L88'>88</a>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-neutral">&nbsp;</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span>
163
+ <span class="cline-any cline-neutral">&nbsp;</span>
164
+ <span class="cline-any cline-neutral">&nbsp;</span>
165
+ <span class="cline-any cline-neutral">&nbsp;</span>
166
+ <span class="cline-any cline-neutral">&nbsp;</span>
167
+ <span class="cline-any cline-neutral">&nbsp;</span>
168
+ <span class="cline-any cline-yes">1x</span>
169
+ <span class="cline-any cline-no">&nbsp;</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-yes">1x</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-no">&nbsp;</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-no">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-no">&nbsp;</span>
186
+ <span class="cline-any cline-no">&nbsp;</span>
187
+ <span class="cline-any cline-no">&nbsp;</span>
188
+ <span class="cline-any cline-no">&nbsp;</span>
189
+ <span class="cline-any cline-neutral">&nbsp;</span>
190
+ <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-no">&nbsp;</span>
192
+ <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-yes">38x</span>
196
+ <span class="cline-any cline-yes">1x</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-yes">6x</span>
212
+ <span class="cline-any cline-yes">1x</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-neutral">&nbsp;</span>
215
+ <span class="cline-any cline-yes">5x</span>
216
+ <span class="cline-any cline-yes">5x</span>
217
+ <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-neutral">&nbsp;</span>
219
+ <span class="cline-any cline-neutral">&nbsp;</span>
220
+ <span class="cline-any cline-yes">5x</span>
221
+ <span class="cline-any cline-yes">5x</span>
222
+ <span class="cline-any cline-neutral">&nbsp;</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-yes">5x</span>
225
+ <span class="cline-any cline-yes">5x</span>
226
+ <span class="cline-any cline-yes">31x</span>
227
+ <span class="cline-any cline-yes">10x</span>
228
+ <span class="cline-any cline-yes">10x</span>
229
+ <span class="cline-any cline-yes">10x</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>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-yes">5x</span>
236
+ <span class="cline-any cline-yes">15x</span>
237
+ <span class="cline-any cline-yes">12x</span>
238
+ <span class="cline-any cline-yes">12x</span>
239
+ <span class="cline-any cline-yes">7x</span>
240
+ <span class="cline-any cline-yes">7x</span>
241
+ <span class="cline-any cline-yes">5x</span>
242
+ <span class="cline-any cline-yes">1x</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-yes">5x</span>
247
+ <span class="cline-any cline-yes">5x</span>
248
+ <span class="cline-any cline-yes">4x</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-yes">5x</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <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';
257
+ &nbsp;
258
+ export namespace Fields {
259
+ export type Getter&lt;T&gt; = (obj: Partial&lt;T&gt;) =&gt; T[keyof T];
260
+ export type Setter&lt;T&gt; = (obj: Partial&lt;T&gt;, val: T[keyof T]) =&gt; void;
261
+ export type Comparer&lt;T&gt; = (source: Partial&lt;T&gt;, target: Partial&lt;T&gt;) =&gt; boolean;
262
+ export type Updater&lt;T&gt; = (target: T, source: T) =&gt; T;
263
+ }
264
+ &nbsp;
265
+ &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 {
267
+ <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
+ }
269
+ &nbsp;
270
+ export function <span class="fstat-no" title="function not covered" >updateFieldExtended&lt;</span>T&gt;(
271
+ target: T,
272
+ source: Partial&lt;T&gt;,
273
+ diff: Partial&lt;T&gt;,
274
+ get: Fields.Getter&lt;T&gt;,
275
+ 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>
277
+ ): boolean {
278
+ &nbsp;
279
+ <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>
280
+ &nbsp;
281
+ let changed = <span class="cstat-no" title="statement not covered" >true;</span>
282
+ &nbsp;
283
+ <span class="cstat-no" title="statement not covered" > if (get(source) !== undefined &amp;&amp; hasChanged(source, target)) {</span>
284
+ <span class="cstat-no" title="statement not covered" > changed = true;</span>
285
+ <span class="cstat-no" title="statement not covered" > set(diff, get(target));</span>
286
+ <span class="cstat-no" title="statement not covered" > set(target, get(source));</span>
287
+ }
288
+ &nbsp;
289
+ <span class="cstat-no" title="statement not covered" > return changed;</span>
290
+ &nbsp;
291
+ }
292
+ &nbsp;
293
+ const DefaultComparator: Comparator&lt;any&gt; = (v1, v2) =&gt; v1 === v2;
294
+ const DefaultUpdater: Fields.Updater&lt;any&gt; = <span class="fstat-no" title="function not covered" >(v</span>1, v2) =&gt; <span class="cstat-no" title="statement not covered" >Object.assign(v1, v2);</span>
295
+ &nbsp;
296
+ export type UpdateArrayOptions&lt;T&gt; = {
297
+ additive?: boolean,
298
+ clone?: boolean,
299
+ comparator?: Comparator&lt;T&gt;,
300
+ updater?: Fields.Updater&lt;T&gt;,
301
+ sorter?: Comparator&lt;T, number&gt; | null | undefined,
302
+ };
303
+ &nbsp;
304
+ export function updateArray&lt;T&gt;(
305
+ target: T[] | null,
306
+ source: T[],
307
+ options?: UpdateArrayOptions&lt;T&gt;,
308
+ ): { changed: number, result: T[] } {
309
+ if (!source) {
310
+ return { changed: 0, result: target };
311
+ }
312
+ &nbsp;
313
+ let changed = 0;
314
+ const result = Array.isArray(target)
315
+ ? (options?.clone ? target.slice() : target)
316
+ : <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
317
+ &nbsp;
318
+ const comparator = options?.comparator || DefaultComparator;
319
+ const updater = options?.updater || DefaultUpdater;
320
+ &nbsp;
321
+ // remove all missing elements
322
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!options?.additive) {
323
+ for (let i = 0; i &lt; result.length; ++i) {
324
+ if (source.find(item =&gt; comparator(item, result[i])) == null) {
325
+ result.splice(i, 1);
326
+ ++changed;
327
+ --i;
328
+ }
329
+ }
330
+ }
331
+ &nbsp;
332
+ // add all new elements and update existing
333
+ source.forEach(i =&gt; {
334
+ const existingIndex = result.findIndex(item =&gt; comparator(i, item));
335
+ const existingItem = result[existingIndex];
336
+ if (existingIndex &lt; 0) {
337
+ result.push(i);
338
+ ++changed;
339
+ } else if (typeof existingItem === 'object') {
340
+ result[existingIndex] = updater(existingItem, i);
341
+ }
342
+ });
343
+ &nbsp;
344
+ const sorter = options?.sorter;
345
+ if (sorter !== null) {
346
+ result.sort(sorter || undefined);
347
+ }
348
+ &nbsp;
349
+ return {
350
+ result,
351
+ changed,
352
+ };
353
+ }
354
+ &nbsp;</pre></td></tr></table></pre>
355
+
356
+ <div class='push'></div><!-- for sticky footer -->
357
+ </div><!-- /wrapper -->
358
+ <div class='footer quiet pad2 space-top1 center small'>
359
+ Code coverage generated by
360
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
361
+ at Mon Jan 03 2022 18:18:41 GMT+0000 (Coordinated Universal Time)
362
+ </div>
363
+ </div>
364
+ <script src="prettify.js"></script>
365
+ <script>
366
+ window.onload = function () {
367
+ prettyPrint();
368
+ };
369
+ </script>
370
+ <script src="sorter.js"></script>
371
+ <script src="block-navigation.js"></script>
372
+ </body>
373
+ </html>
374
+
@@ -1340,6 +1340,124 @@ BRF:53
1340
1340
  BRH:51
1341
1341
  end_of_record
1342
1342
  TN:
1343
+ SF:src/fields/update.ts
1344
+ FN:11,updateField
1345
+ FN:12,(anonymous_1)
1346
+ FN:12,(anonymous_2)
1347
+ FN:15,updateFieldExtended
1348
+ FN:24,(anonymous_4)
1349
+ FN:38,(anonymous_5)
1350
+ FN:39,(anonymous_6)
1351
+ FN:49,updateArray
1352
+ FN:69,(anonymous_8)
1353
+ FN:78,(anonymous_9)
1354
+ FN:79,(anonymous_10)
1355
+ FNF:11
1356
+ FNH:5
1357
+ FNDA:0,updateField
1358
+ FNDA:0,(anonymous_1)
1359
+ FNDA:0,(anonymous_2)
1360
+ FNDA:0,updateFieldExtended
1361
+ FNDA:0,(anonymous_4)
1362
+ FNDA:38,(anonymous_5)
1363
+ FNDA:0,(anonymous_6)
1364
+ FNDA:6,updateArray
1365
+ FNDA:31,(anonymous_8)
1366
+ FNDA:12,(anonymous_9)
1367
+ FNDA:15,(anonymous_10)
1368
+ DA:11,1
1369
+ DA:12,0
1370
+ DA:15,1
1371
+ DA:24,0
1372
+ DA:26,0
1373
+ DA:28,0
1374
+ DA:29,0
1375
+ DA:30,0
1376
+ DA:31,0
1377
+ DA:34,0
1378
+ DA:38,38
1379
+ DA:39,1
1380
+ DA:49,1
1381
+ DA:54,6
1382
+ DA:55,1
1383
+ DA:58,5
1384
+ DA:59,5
1385
+ DA:63,5
1386
+ DA:64,5
1387
+ DA:67,5
1388
+ DA:68,5
1389
+ DA:69,31
1390
+ DA:70,10
1391
+ DA:71,10
1392
+ DA:72,10
1393
+ DA:78,5
1394
+ DA:79,15
1395
+ DA:80,12
1396
+ DA:81,12
1397
+ DA:82,7
1398
+ DA:83,7
1399
+ DA:84,5
1400
+ DA:85,1
1401
+ DA:89,5
1402
+ DA:90,5
1403
+ DA:91,4
1404
+ DA:94,5
1405
+ LF:37
1406
+ LH:29
1407
+ BRDA:11,0,0,0
1408
+ BRDA:21,1,0,0
1409
+ BRDA:24,2,0,0
1410
+ BRDA:24,2,1,0
1411
+ BRDA:28,3,0,0
1412
+ BRDA:28,3,1,0
1413
+ BRDA:28,4,0,0
1414
+ BRDA:28,4,1,0
1415
+ BRDA:54,5,0,1
1416
+ BRDA:54,5,1,5
1417
+ BRDA:60,6,0,5
1418
+ BRDA:60,6,1,0
1419
+ BRDA:60,7,0,2
1420
+ BRDA:60,7,1,3
1421
+ BRDA:60,8,0,2
1422
+ BRDA:60,8,1,3
1423
+ BRDA:60,9,0,5
1424
+ BRDA:60,9,1,5
1425
+ BRDA:63,10,0,5
1426
+ BRDA:63,10,1,4
1427
+ BRDA:63,11,0,2
1428
+ BRDA:63,11,1,3
1429
+ BRDA:63,12,0,5
1430
+ BRDA:63,12,1,5
1431
+ BRDA:64,13,0,5
1432
+ BRDA:64,13,1,4
1433
+ BRDA:64,14,0,2
1434
+ BRDA:64,14,1,3
1435
+ BRDA:64,15,0,5
1436
+ BRDA:64,15,1,5
1437
+ BRDA:67,16,0,5
1438
+ BRDA:67,16,1,0
1439
+ BRDA:67,17,0,2
1440
+ BRDA:67,17,1,3
1441
+ BRDA:67,18,0,5
1442
+ BRDA:67,18,1,5
1443
+ BRDA:69,19,0,10
1444
+ BRDA:69,19,1,5
1445
+ BRDA:81,20,0,7
1446
+ BRDA:81,20,1,5
1447
+ BRDA:84,21,0,1
1448
+ BRDA:84,21,1,4
1449
+ BRDA:89,22,0,2
1450
+ BRDA:89,22,1,3
1451
+ BRDA:89,23,0,5
1452
+ BRDA:89,23,1,5
1453
+ BRDA:90,24,0,4
1454
+ BRDA:90,24,1,1
1455
+ BRDA:91,25,0,4
1456
+ BRDA:91,25,1,3
1457
+ BRF:50
1458
+ BRH:40
1459
+ end_of_record
1460
+ TN:
1343
1461
  SF:src/logger/batch.ts
1344
1462
  FN:3,batchLoggers
1345
1463
  FN:5,(anonymous_1)
@@ -2315,18 +2433,22 @@ TN:
2315
2433
  SF:src/viewModels/FlagModel.ts
2316
2434
  FN:20,(anonymous_0)
2317
2435
  FN:36,(anonymous_1)
2318
- FN:41,(anonymous_2)
2319
- FN:25,(anonymous_3)
2320
- FN:29,(anonymous_4)
2321
- FN:33,(anonymous_5)
2322
- FNF:6
2436
+ FN:43,(anonymous_2)
2437
+ FN:50,(anonymous_3)
2438
+ FN:55,(anonymous_4)
2439
+ FN:25,(anonymous_5)
2440
+ FN:29,(anonymous_6)
2441
+ FN:33,(anonymous_7)
2442
+ FNF:8
2323
2443
  FNH:3
2324
2444
  FNDA:17,(anonymous_0)
2325
2445
  FNDA:0,(anonymous_1)
2326
2446
  FNDA:0,(anonymous_2)
2327
- FNDA:39,(anonymous_3)
2328
- FNDA:38,(anonymous_4)
2329
- FNDA:0,(anonymous_5)
2447
+ FNDA:0,(anonymous_3)
2448
+ FNDA:0,(anonymous_4)
2449
+ FNDA:39,(anonymous_5)
2450
+ FNDA:38,(anonymous_6)
2451
+ FNDA:0,(anonymous_7)
2330
2452
  DA:1,3
2331
2453
  DA:15,3
2332
2454
  DA:18,17
@@ -2337,10 +2459,18 @@ DA:30,38
2337
2459
  DA:33,0
2338
2460
  DA:36,17
2339
2461
  DA:37,0
2340
- DA:41,17
2341
- DA:42,0
2342
- LF:12
2343
- LH:9
2462
+ DA:38,0
2463
+ DA:39,0
2464
+ DA:43,17
2465
+ DA:44,0
2466
+ DA:45,0
2467
+ DA:46,0
2468
+ DA:50,17
2469
+ DA:51,0
2470
+ DA:55,17
2471
+ DA:56,0
2472
+ LF:20
2473
+ LH:11
2344
2474
  BRDA:20,0,0,13
2345
2475
  BRF:1
2346
2476
  BRH:1
@@ -2717,26 +2847,28 @@ FN:31,(anonymous_2)
2717
2847
  FN:33,(anonymous_3)
2718
2848
  FN:35,(anonymous_4)
2719
2849
  FN:41,(anonymous_5)
2720
- FN:64,(anonymous_6)
2721
- FN:70,(anonymous_7)
2722
- FN:75,(anonymous_8)
2723
- FN:77,(anonymous_9)
2724
- FN:80,(anonymous_10)
2725
- FN:81,(anonymous_11)
2726
- FNF:12
2850
+ FN:49,(anonymous_6)
2851
+ FN:72,(anonymous_7)
2852
+ FN:78,(anonymous_8)
2853
+ FN:83,(anonymous_9)
2854
+ FN:85,(anonymous_10)
2855
+ FN:88,(anonymous_11)
2856
+ FN:89,(anonymous_12)
2857
+ FNF:13
2727
2858
  FNH:6
2728
2859
  FNDA:1,(anonymous_0)
2729
2860
  FNDA:11,(anonymous_1)
2730
2861
  FNDA:0,(anonymous_2)
2731
2862
  FNDA:1,(anonymous_3)
2732
2863
  FNDA:11,(anonymous_4)
2733
- FNDA:1,(anonymous_5)
2734
- FNDA:0,(anonymous_6)
2735
- FNDA:2,(anonymous_7)
2736
- FNDA:0,(anonymous_8)
2864
+ FNDA:0,(anonymous_5)
2865
+ FNDA:1,(anonymous_6)
2866
+ FNDA:0,(anonymous_7)
2867
+ FNDA:2,(anonymous_8)
2737
2868
  FNDA:0,(anonymous_9)
2738
2869
  FNDA:0,(anonymous_10)
2739
2870
  FNDA:0,(anonymous_11)
2871
+ FNDA:0,(anonymous_12)
2740
2872
  DA:1,2
2741
2873
  DA:2,2
2742
2874
  DA:3,2
@@ -2753,27 +2885,31 @@ DA:33,1
2753
2885
  DA:36,11
2754
2886
  DA:37,11
2755
2887
  DA:38,11
2756
- DA:42,1
2888
+ DA:42,0
2757
2889
  DA:43,0
2758
- DA:46,1
2759
- DA:47,1
2760
- DA:48,1
2761
- DA:52,0
2890
+ DA:44,0
2891
+ DA:46,0
2892
+ DA:50,1
2893
+ DA:51,0
2894
+ DA:54,1
2762
2895
  DA:55,1
2763
2896
  DA:56,1
2764
- DA:58,0
2765
- DA:59,0
2766
- DA:61,1
2767
- DA:65,0
2897
+ DA:60,0
2898
+ DA:63,1
2899
+ DA:64,1
2768
2900
  DA:66,0
2769
- DA:70,2
2770
- DA:71,2
2771
- DA:72,2
2772
- DA:76,0
2773
- DA:77,0
2774
- DA:80,0
2775
- DA:81,0
2776
- LF:36
2901
+ DA:67,0
2902
+ DA:69,1
2903
+ DA:73,0
2904
+ DA:74,0
2905
+ DA:78,2
2906
+ DA:79,2
2907
+ DA:80,2
2908
+ DA:84,0
2909
+ DA:85,0
2910
+ DA:88,0
2911
+ DA:89,0
2912
+ LF:40
2777
2913
  LH:25
2778
2914
  BRDA:36,0,0,11
2779
2915
  BRDA:36,0,1,11
@@ -2786,17 +2922,19 @@ BRDA:37,3,1,0
2786
2922
  BRDA:37,4,0,11
2787
2923
  BRDA:37,4,1,11
2788
2924
  BRDA:42,5,0,0
2789
- BRDA:42,5,1,1
2790
- BRDA:49,6,0,1
2791
- BRDA:49,6,1,0
2792
- BRDA:55,7,0,1
2793
- BRDA:55,7,1,0
2794
- BRDA:59,8,0,0
2795
- BRDA:59,8,1,0
2796
- BRDA:75,9,0,0
2797
- BRDA:76,10,0,0
2798
- BRDA:76,10,1,0
2799
- BRF:21
2925
+ BRDA:42,5,1,0
2926
+ BRDA:50,6,0,0
2927
+ BRDA:50,6,1,1
2928
+ BRDA:57,7,0,1
2929
+ BRDA:57,7,1,0
2930
+ BRDA:63,8,0,1
2931
+ BRDA:63,8,1,0
2932
+ BRDA:67,9,0,0
2933
+ BRDA:67,9,1,0
2934
+ BRDA:83,10,0,0
2935
+ BRDA:84,11,0,0
2936
+ BRDA:84,11,1,0
2937
+ BRF:23
2800
2938
  BRH:11
2801
2939
  end_of_record
2802
2940
  TN: