topkat-utils 1.3.6 → 1.3.8

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 (32) hide show
  1. package/README.md +1 -0
  2. package/coverage/clover.xml +34 -21
  3. package/coverage/coverage-final.json +3 -3
  4. package/coverage/lcov-report/clean-stack-trace.ts.html +8 -17
  5. package/coverage/lcov-report/config.ts.html +1 -1
  6. package/coverage/lcov-report/error-utils.ts.html +1 -1
  7. package/coverage/lcov-report/index.html +30 -30
  8. package/coverage/lcov-report/is-empty.ts.html +1 -1
  9. package/coverage/lcov-report/is-nodejs.ts.html +1 -1
  10. package/coverage/lcov-report/is-object.ts.html +1 -1
  11. package/coverage/lcov-report/isset.ts.html +1 -1
  12. package/coverage/lcov-report/logger-utils.ts.html +22 -22
  13. package/coverage/lcov-report/loop-utils.ts.html +1 -1
  14. package/coverage/lcov-report/math-utils.ts.html +1 -1
  15. package/coverage/lcov-report/object-utils.ts.html +57 -9
  16. package/coverage/lcov-report/regexp-utils.ts.html +1 -1
  17. package/coverage/lcov-report/remove-circular-json-stringify.ts.html +1 -1
  18. package/coverage/lcov-report/string-utils.ts.html +1 -1
  19. package/coverage/lcov-report/timer-utils.ts.html +1 -1
  20. package/coverage/lcov-report/transaction-utils.ts.html +1 -1
  21. package/coverage/lcov.info +38 -30
  22. package/dist/src/clean-stack-trace.js +3 -5
  23. package/dist/src/clean-stack-trace.js.map +1 -1
  24. package/dist/src/logger-utils.js +2 -2
  25. package/dist/src/logger-utils.js.map +1 -1
  26. package/dist/src/object-utils.d.ts +5 -0
  27. package/dist/src/object-utils.js +14 -1
  28. package/dist/src/object-utils.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/clean-stack-trace.ts +2 -5
  31. package/src/logger-utils.ts +2 -2
  32. package/src/object-utils.ts +17 -1
@@ -25,14 +25,14 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>41/41</span>
28
+ <span class='fraction'>38/38</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">66.66% </span>
33
+ <span class="strong">85.71% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>6/9</span>
35
+ <span class='fraction'>6/7</span>
36
36
  </div>
37
37
 
38
38
 
@@ -46,7 +46,7 @@
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'>41/41</span>
49
+ <span class='fraction'>38/38</span>
50
50
  </div>
51
51
 
52
52
 
@@ -101,10 +101,7 @@
101
101
  <a name='L36'></a><a href='#L36'>36</a>
102
102
  <a name='L37'></a><a href='#L37'>37</a>
103
103
  <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
104
+ <a name='L39'></a><a href='#L39'>39</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
108
105
  <span class="cline-any cline-yes">2x</span>
109
106
  <span class="cline-any cline-yes">2x</span>
110
107
  <span class="cline-any cline-yes">2x</span>
@@ -138,9 +135,6 @@
138
135
  <span class="cline-any cline-yes">2x</span>
139
136
  <span class="cline-any cline-yes">8x</span>
140
137
  <span class="cline-any cline-yes">6x</span>
141
- <span class="cline-any cline-yes">6x</span>
142
- <span class="cline-any cline-yes">6x</span>
143
- <span class="cline-any cline-yes">6x</span>
144
138
  <span class="cline-any cline-yes">2x</span>
145
139
  <span class="cline-any cline-yes">2x</span>
146
140
  <span class="cline-any cline-yes">2x</span>
@@ -177,11 +171,8 @@ export function cleanStackTrace(stack) {
177
171
  const linesClean = lines
178
172
  .filter(l =&gt; l &amp;&amp; !removeIfContain.some(text =&gt; l.includes(text)))
179
173
  .map((line, i) =&gt; {
180
- if (i === 0) return ''
181
- else {
182
- const [, start, fileName, end] = line.match(/(^.+\/)([^/]+:\d+:\d+)(.{0,3})/)<span class="branch-0 cbranch-no" title="branch not covered" > || []</span>
183
- return fileName ? `\x1b[2m${start}\x1b[0m${fileName}\x1b[2m${end}\x1b[0m` <span class="branch-0 cbranch-no" title="branch not covered" >: `\x1b[2m${line}\x1b[0m`</span>
184
- }
174
+ if (i === 0) return '' // usually just the word "Error:"
175
+ else return line
185
176
  })
186
177
  .join('\n')
187
178
  return linesClean
@@ -193,7 +184,7 @@ export function cleanStackTrace(stack) {
193
184
  <div class='footer quiet pad2 space-top1 center small'>
194
185
  Code coverage generated by
195
186
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
196
- at 2025-03-16T17:17:04.902Z
187
+ at 2025-03-18T21:40:52.988Z
197
188
  </div>
198
189
  <script src="prettify.js"></script>
199
190
  <script>
@@ -349,7 +349,7 @@ type RecursivePartial&lt;T&gt; = {
349
349
  <div class='footer quiet pad2 space-top1 center small'>
350
350
  Code coverage generated by
351
351
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
352
- at 2025-03-16T17:17:04.902Z
352
+ at 2025-03-18T21:40:52.988Z
353
353
  </div>
354
354
  <script src="prettify.js"></script>
355
355
  <script>
@@ -715,7 +715,7 @@ export const failSafe = tryCatch // ALIAS
715
715
  <div class='footer quiet pad2 space-top1 center small'>
716
716
  Code coverage generated by
717
717
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
718
- at 2025-03-16T17:17:04.902Z
718
+ at 2025-03-18T21:40:52.988Z
719
719
  </div>
720
720
  <script src="prettify.js"></script>
721
721
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">39.73% </span>
26
+ <span class="strong">39.98% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>763/1920</span>
28
+ <span class='fraction'>773/1933</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">54.54% </span>
33
+ <span class="strong">57.69% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>30/55</span>
35
+ <span class='fraction'>30/52</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">9.48% </span>
40
+ <span class="strong">9.55% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>13/137</span>
42
+ <span class='fraction'>13/136</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">39.73% </span>
47
+ <span class="strong">39.98% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>763/1920</span>
49
+ <span class='fraction'>773/1933</span>
50
50
  </div>
51
51
 
52
52
 
@@ -84,13 +84,13 @@
84
84
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
86
  <td data-value="100" class="pct high">100%</td>
87
- <td data-value="41" class="abs high">41/41</td>
88
- <td data-value="66.66" class="pct medium">66.66%</td>
89
- <td data-value="9" class="abs medium">6/9</td>
87
+ <td data-value="38" class="abs high">38/38</td>
88
+ <td data-value="85.71" class="pct high">85.71%</td>
89
+ <td data-value="7" class="abs high">6/7</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
91
  <td data-value="1" class="abs high">1/1</td>
92
92
  <td data-value="100" class="pct high">100%</td>
93
- <td data-value="41" class="abs high">41/41</td>
93
+ <td data-value="38" class="abs high">38/38</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -185,17 +185,17 @@
185
185
 
186
186
  <tr>
187
187
  <td class="file low" data-value="logger-utils.ts"><a href="logger-utils.ts.html">logger-utils.ts</a></td>
188
- <td data-value="42.03" class="pic low">
189
- <div class="chart"><div class="cover-fill" style="width: 42%"></div><div class="cover-empty" style="width: 58%"></div></div>
188
+ <td data-value="41.2" class="pic low">
189
+ <div class="chart"><div class="cover-fill" style="width: 41%"></div><div class="cover-empty" style="width: 59%"></div></div>
190
190
  </td>
191
- <td data-value="42.03" class="pct low">42.03%</td>
192
- <td data-value="364" class="abs low">153/364</td>
193
- <td data-value="26.08" class="pct low">26.08%</td>
194
- <td data-value="23" class="abs low">6/23</td>
195
- <td data-value="11.9" class="pct low">11.9%</td>
196
- <td data-value="42" class="abs low">5/42</td>
197
- <td data-value="42.03" class="pct low">42.03%</td>
198
- <td data-value="364" class="abs low">153/364</td>
191
+ <td data-value="41.2" class="pct low">41.2%</td>
192
+ <td data-value="364" class="abs low">150/364</td>
193
+ <td data-value="27.27" class="pct low">27.27%</td>
194
+ <td data-value="22" class="abs low">6/22</td>
195
+ <td data-value="12.5" class="pct low">12.5%</td>
196
+ <td data-value="40" class="abs low">5/40</td>
197
+ <td data-value="41.2" class="pct low">41.2%</td>
198
+ <td data-value="364" class="abs low">150/364</td>
199
199
  </tr>
200
200
 
201
201
  <tr>
@@ -230,17 +230,17 @@
230
230
 
231
231
  <tr>
232
232
  <td class="file low" data-value="object-utils.ts"><a href="object-utils.ts.html">object-utils.ts</a></td>
233
- <td data-value="29.05" class="pic low">
234
- <div class="chart"><div class="cover-fill" style="width: 29%"></div><div class="cover-empty" style="width: 71%"></div></div>
233
+ <td data-value="31.52" class="pic low">
234
+ <div class="chart"><div class="cover-fill" style="width: 31%"></div><div class="cover-empty" style="width: 69%"></div></div>
235
235
  </td>
236
- <td data-value="29.05" class="pct low">29.05%</td>
237
- <td data-value="444" class="abs low">129/444</td>
236
+ <td data-value="31.52" class="pct low">31.52%</td>
237
+ <td data-value="460" class="abs low">145/460</td>
238
238
  <td data-value="100" class="pct high">100%</td>
239
239
  <td data-value="0" class="abs high">0/0</td>
240
240
  <td data-value="0" class="pct low">0%</td>
241
- <td data-value="27" class="abs low">0/27</td>
242
- <td data-value="29.05" class="pct low">29.05%</td>
243
- <td data-value="444" class="abs low">129/444</td>
241
+ <td data-value="28" class="abs low">0/28</td>
242
+ <td data-value="31.52" class="pct low">31.52%</td>
243
+ <td data-value="460" class="abs low">145/460</td>
244
244
  </tr>
245
245
 
246
246
  <tr>
@@ -326,7 +326,7 @@
326
326
  <div class='footer quiet pad2 space-top1 center small'>
327
327
  Code coverage generated by
328
328
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
329
- at 2025-03-16T17:17:04.902Z
329
+ at 2025-03-18T21:40:52.988Z
330
330
  </div>
331
331
  <script src="prettify.js"></script>
332
332
  <script>
@@ -88,7 +88,7 @@
88
88
  <div class='footer quiet pad2 space-top1 center small'>
89
89
  Code coverage generated by
90
90
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
91
- at 2025-03-16T17:17:04.902Z
91
+ at 2025-03-18T21:40:52.988Z
92
92
  </div>
93
93
  <script src="prettify.js"></script>
94
94
  <script>
@@ -94,7 +94,7 @@ export function isNodeJs(): boolean {
94
94
  <div class='footer quiet pad2 space-top1 center small'>
95
95
  Code coverage generated by
96
96
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
97
- at 2025-03-16T17:17:04.902Z
97
+ at 2025-03-18T21:40:52.988Z
98
98
  </div>
99
99
  <script src="prettify.js"></script>
100
100
  <script>
@@ -76,7 +76,7 @@
76
76
  <div class='footer quiet pad2 space-top1 center small'>
77
77
  Code coverage generated by
78
78
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
79
- at 2025-03-16T17:17:04.902Z
79
+ at 2025-03-18T21:40:52.988Z
80
80
  </div>
81
81
  <script src="prettify.js"></script>
82
82
  <script>
@@ -76,7 +76,7 @@
76
76
  <div class='footer quiet pad2 space-top1 center small'>
77
77
  Code coverage generated by
78
78
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
79
- at 2025-03-16T17:17:04.902Z
79
+ at 2025-03-18T21:40:52.988Z
80
80
  </div>
81
81
  <script src="prettify.js"></script>
82
82
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">42.03% </span>
26
+ <span class="strong">41.2% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>153/364</span>
28
+ <span class='fraction'>150/364</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">26.08% </span>
33
+ <span class="strong">27.27% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>6/23</span>
35
+ <span class='fraction'>6/22</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">11.9% </span>
40
+ <span class="strong">12.5% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/42</span>
42
+ <span class='fraction'>5/40</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">42.03% </span>
47
+ <span class="strong">41.2% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>153/364</span>
49
+ <span class='fraction'>150/364</span>
50
50
  </div>
51
51
 
52
52
 
@@ -735,11 +735,13 @@
735
735
  <span class="cline-any cline-no">&nbsp;</span>
736
736
  <span class="cline-any cline-no">&nbsp;</span>
737
737
  <span class="cline-any cline-no">&nbsp;</span>
738
- <span class="cline-any cline-yes">1x</span>
739
738
  <span class="cline-any cline-yes">2x</span>
740
739
  <span class="cline-any cline-yes">2x</span>
741
740
  <span class="cline-any cline-yes">2x</span>
742
- <span class="cline-any cline-yes">1x</span>
741
+ <span class="cline-any cline-yes">2x</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
743
745
  <span class="cline-any cline-no">&nbsp;</span>
744
746
  <span class="cline-any cline-no">&nbsp;</span>
745
747
  <span class="cline-any cline-no">&nbsp;</span>
@@ -785,13 +787,11 @@
785
787
  <span class="cline-any cline-no">&nbsp;</span>
786
788
  <span class="cline-any cline-no">&nbsp;</span>
787
789
  <span class="cline-any cline-no">&nbsp;</span>
790
+ <span class="cline-any cline-yes">2x</span>
791
+ <span class="cline-any cline-yes">2x</span>
788
792
  <span class="cline-any cline-no">&nbsp;</span>
789
793
  <span class="cline-any cline-no">&nbsp;</span>
790
- <span class="cline-any cline-yes">1x</span>
791
- <span class="cline-any cline-yes">1x</span>
792
794
  <span class="cline-any cline-no">&nbsp;</span>
793
- <span class="cline-any cline-yes">1x</span>
794
- <span class="cline-any cline-yes">1x</span>
795
795
  <span class="cline-any cline-neutral">&nbsp;</span>
796
796
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/* eslint-disable no-console */
797
797
  /* eslint-disable no-control-regex */
@@ -996,12 +996,12 @@ export const C = {
996
996
  function logErrPrivate(level: NotInfoLogLevel, color: Color, ...errors) {
997
997
  const { isProd } = configFn()
998
998
  &nbsp;
999
- if (errors.length === 1 &amp;&amp; typeof errors[0].log === 'function') <span class="branch-0 cbranch-no" title="branch not covered" >return errors[0].log()</span>
999
+ if (errors.length === 1 &amp;&amp; typeof errors[0]?.log === 'function') <span class="branch-0 cbranch-no" title="branch not covered" >return errors[0].log()</span>
1000
1000
  &nbsp;
1001
1001
  let stackTrace = (new Error('')).stack<span class="branch-0 cbranch-no" title="branch not covered" > || ''</span>
1002
1002
  const displayStack = errors[0] === false <span class="branch-0 cbranch-no" title="branch not covered" >? errors.shift() </span>: true
1003
1003
  const symbol = level === 'error' <span class="branch-0 cbranch-no" title="branch not covered" >? '✘ ' </span>: '⚠ '
1004
- if (errors.length &gt; 1<span class="branch-0 cbranch-no" title="branch not covered" > &amp;&amp; !isset(errors[0]))</span> <span class="branch-0 cbranch-no" title="branch not covered" >errors.shift()</span>
1004
+ if (errors.length &gt; 1<span class="branch-0 cbranch-no" title="branch not covered" > &amp;&amp; !isset(errors[0]))</span> <span class="branch-0 cbranch-no" title="branch not covered" >errors.shift() /</span>/ remove first empty object
1005
1005
  &nbsp;
1006
1006
  const getStringFromErr = (err, i) =&gt; {
1007
1007
  if (!isset(err)) <span class="branch-0 cbranch-no" title="branch not covered" >return ''</span>
@@ -1094,7 +1094,7 @@ function logErrPrivate(level: NotInfoLogLevel, color: Color, ...errors) {
1094
1094
  * @param {String} char Default: '.'
1095
1095
  * @param {String} msg String before char. Final output will be `${str}${char.repeat(step)}`
1096
1096
  */
1097
- <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" >export function cliProgressBar(step: number, char = '.', msg = `\x1b[2mⓘ Waiting response`) {</span></span></span>
1097
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >export function cliProgressBar(step: number, char = '.', msg = `\x1b[2mⓘ Waiting response`) {</span></span>
1098
1098
  <span class="cstat-no" title="statement not covered" > if (typeof process?.stdout?.clearLine === 'function') {</span>
1099
1099
  <span class="cstat-no" title="statement not covered" > process.stdout.cursorTo(0)</span>
1100
1100
  <span class="cstat-no" title="statement not covered" > process.stdout.write(`${msg}${char.repeat(step)}\x1b[0m`) // \x1b[0m == reset color</span>
@@ -1104,8 +1104,8 @@ function logErrPrivate(level: NotInfoLogLevel, color: Color, ...errors) {
1104
1104
  type loadingSpinnerTypes = 'arrow' | 'dots'
1105
1105
  &nbsp;
1106
1106
  /** This allow an intuitive inline loading spinner with a check mark when loading as finished or a red cross for errors */
1107
- <span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >export class cliLoadingSpinner {</span></span>
1108
- <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" > /** Please use it like spinner.start('myStuff') then spinner.end()</span></span></span>
1107
+ <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >export class cliLoadingSpinner {</span></span></span>
1108
+ <span class="cstat-no" title="statement not covered" > /** Please use it like spinner.start('myStuff') then spinner.end()</span>
1109
1109
  <span class="cstat-no" title="statement not covered" > * @param {String} type in: ['arrow', 'dots']</span>
1110
1110
  <span class="cstat-no" title="statement not covered" > */</span>
1111
1111
  <span class="cstat-no" title="statement not covered" > frameRate: number</span>
@@ -1155,8 +1155,8 @@ type loadingSpinnerTypes = 'arrow' | 'dots'
1155
1155
  &nbsp;
1156
1156
  &nbsp;
1157
1157
  <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >export function dim(str = '') {</span></span>
1158
- return configFn()?.terminal?.noColor ? str : `\x1b[2m${str.toString().split('\n').join('\x1b[0m\n\x1b[2m')}\x1b[0m`
1159
- }
1158
+ <span class="cstat-no" title="statement not covered" > return configFn()?.terminal?.noColor ? str : `\x1b[2m${str.toString().split('\n').join('\x1b[0m\n\x1b[2m')}\x1b[0m`</span>
1159
+ <span class="cstat-no" title="statement not covered" >}</span>
1160
1160
  &nbsp;
1161
1161
  &nbsp;</pre></td></tr></table></pre>
1162
1162
 
@@ -1165,7 +1165,7 @@ type loadingSpinnerTypes = 'arrow' | 'dots'
1165
1165
  <div class='footer quiet pad2 space-top1 center small'>
1166
1166
  Code coverage generated by
1167
1167
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1168
- at 2025-03-16T17:17:04.902Z
1168
+ at 2025-03-18T21:40:52.988Z
1169
1169
  </div>
1170
1170
  <script src="prettify.js"></script>
1171
1171
  <script>
@@ -559,7 +559,7 @@ export <span class="fstat-no" title="function not covered" >async function recur
559
559
  <div class='footer quiet pad2 space-top1 center small'>
560
560
  Code coverage generated by
561
561
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
562
- at 2025-03-16T17:17:04.902Z
562
+ at 2025-03-18T21:40:52.988Z
563
563
  </div>
564
564
  <script src="prettify.js"></script>
565
565
  <script>
@@ -244,7 +244,7 @@ import { isset } from './isset'
244
244
  <div class='footer quiet pad2 space-top1 center small'>
245
245
  Code coverage generated by
246
246
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
247
- at 2025-03-16T17:17:04.902Z
247
+ at 2025-03-18T21:40:52.988Z
248
248
  </div>
249
249
  <script src="prettify.js"></script>
250
250
  <script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">29.05% </span>
26
+ <span class="strong">31.52% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>129/444</span>
28
+ <span class='fraction'>145/460</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/27</span>
42
+ <span class='fraction'>0/28</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">29.05% </span>
47
+ <span class="strong">31.52% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>129/444</span>
49
+ <span class='fraction'>145/460</span>
50
50
  </div>
51
51
 
52
52
 
@@ -506,7 +506,23 @@
506
506
  <a name='L441'></a><a href='#L441'>441</a>
507
507
  <a name='L442'></a><a href='#L442'>442</a>
508
508
  <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
510
526
  <span class="cline-any cline-yes">2x</span>
511
527
  <span class="cline-any cline-yes">2x</span>
512
528
  <span class="cline-any cline-yes">2x</span>
@@ -949,7 +965,23 @@
949
965
  <span class="cline-any cline-no">&nbsp;</span>
950
966
  <span class="cline-any cline-yes">2x</span>
951
967
  <span class="cline-any cline-yes">2x</span>
952
- <span class="cline-any cline-yes">2x</span></td><td class="text"><pre class="prettyprint lang-js">//----------------------------------------
968
+ <span class="cline-any cline-yes">2x</span>
969
+ <span class="cline-any cline-yes">2x</span>
970
+ <span class="cline-any cline-yes">2x</span>
971
+ <span class="cline-any cline-yes">2x</span>
972
+ <span class="cline-any cline-yes">2x</span>
973
+ <span class="cline-any cline-yes">1x</span>
974
+ <span class="cline-any cline-yes">1x</span>
975
+ <span class="cline-any cline-yes">1x</span>
976
+ <span class="cline-any cline-yes">1x</span>
977
+ <span class="cline-any cline-yes">1x</span>
978
+ <span class="cline-any cline-yes">1x</span>
979
+ <span class="cline-any cline-yes">1x</span>
980
+ <span class="cline-any cline-yes">1x</span>
981
+ <span class="cline-any cline-yes">1x</span>
982
+ <span class="cline-any cline-yes">1x</span>
983
+ <span class="cline-any cline-yes">1x</span>
984
+ <span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">//----------------------------------------
953
985
  // OBJECT UTILS
954
986
  //----------------------------------------
955
987
  import { ObjectGeneric } from './types'
@@ -1392,14 +1424,30 @@ type StringKeys&lt;T&gt; = keyof T extends infer K ? K extends string ? K : neve
1392
1424
  <span class="cstat-no" title="statement not covered" >}</span>
1393
1425
  &nbsp;
1394
1426
  export const keys = objKeys
1395
- export const entries = objEntries</pre></td></tr></table></pre>
1427
+ export const entries = objEntries
1428
+ &nbsp;
1429
+ &nbsp;
1430
+ &nbsp;
1431
+ /** A Helper to create JavascriptProxies, will add __isProxy and toJSON helper to prevent error when logging the proxy and to be able to check if the object is proxyfied */
1432
+ <span class="fstat-no" title="function not covered" >export function createProxy&lt;T extends Record&lt;string, any&gt;&gt;(obj: T, optn: {</span>
1433
+ getter: Required&lt;ProxyHandler&lt;T&gt;&gt;['get'],
1434
+ jsonRepresentation?: (obj: T) =&gt; string
1435
+ }) {
1436
+ return new Proxy(obj, {
1437
+ get(target, prop, receiver) {
1438
+ if (prop === '__isProxy') return true
1439
+ else if (prop === 'toJSON') return optn?.jsonRepresentation?.(target) || '[TopkatUtils Proxy]'
1440
+ return optn.getter(target, prop, receiver)
1441
+ }
1442
+ })
1443
+ }</pre></td></tr></table></pre>
1396
1444
 
1397
1445
  <div class='push'></div><!-- for sticky footer -->
1398
1446
  </div><!-- /wrapper -->
1399
1447
  <div class='footer quiet pad2 space-top1 center small'>
1400
1448
  Code coverage generated by
1401
1449
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1402
- at 2025-03-16T17:17:04.902Z
1450
+ at 2025-03-18T21:40:52.988Z
1403
1451
  </div>
1404
1452
  <script src="prettify.js"></script>
1405
1453
  <script>
@@ -223,7 +223,7 @@ import { C } from './logger-utils'
223
223
  <div class='footer quiet pad2 space-top1 center small'>
224
224
  Code coverage generated by
225
225
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
226
- at 2025-03-16T17:17:04.902Z
226
+ at 2025-03-18T21:40:52.988Z
227
227
  </div>
228
228
  <script src="prettify.js"></script>
229
229
  <script>
@@ -124,7 +124,7 @@
124
124
  <div class='footer quiet pad2 space-top1 center small'>
125
125
  Code coverage generated by
126
126
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
127
- at 2025-03-16T17:17:04.902Z
127
+ at 2025-03-18T21:40:52.988Z
128
128
  </div>
129
129
  <script src="prettify.js"></script>
130
130
  <script>
@@ -949,7 +949,7 @@ export type MiniTemplaterOptions = {
949
949
  <div class='footer quiet pad2 space-top1 center small'>
950
950
  Code coverage generated by
951
951
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
952
- at 2025-03-16T17:17:04.902Z
952
+ at 2025-03-18T21:40:52.988Z
953
953
  </div>
954
954
  <script src="prettify.js"></script>
955
955
  <script>
@@ -334,7 +334,7 @@ console.log('Process took ' + time.end())
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" rel="noopener noreferrer">istanbul</a>
337
- at 2025-03-16T17:17:04.902Z
337
+ at 2025-03-18T21:40:52.988Z
338
338
  </div>
339
339
  <script src="prettify.js"></script>
340
340
  <script>
@@ -259,7 +259,7 @@ export <span class="fstat-no" title="function not covered" >async function waitF
259
259
  <div class='footer quiet pad2 space-top1 center small'>
260
260
  Code coverage generated by
261
261
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
262
- at 2025-03-16T17:17:04.902Z
262
+ at 2025-03-18T21:40:52.988Z
263
263
  </div>
264
264
  <script src="prettify.js"></script>
265
265
  <script>