@zajno/common 2.0.0-beta.2 → 2.0.1

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 +2 -2
  2. package/coverage/lcov-report/__tests__/helpers/expect.ts.html +1 -1
  3. package/coverage/lcov-report/__tests__/helpers/index.html +1 -1
  4. package/coverage/lcov-report/__tests__/helpers/main.ts.html +1 -1
  5. package/coverage/lcov-report/async/arrays.ts.html +1 -1
  6. package/coverage/lcov-report/async/index.html +1 -1
  7. package/coverage/lcov-report/async/timeout.ts.html +1 -1
  8. package/coverage/lcov-report/dates/calc.ts.html +1 -1
  9. package/coverage/lcov-report/dates/convert.ts.html +1 -1
  10. package/coverage/lcov-report/dates/datex.ts.html +1 -1
  11. package/coverage/lcov-report/dates/format.ts.html +1 -1
  12. package/coverage/lcov-report/dates/index.html +1 -1
  13. package/coverage/lcov-report/dates/index.ts.html +1 -1
  14. package/coverage/lcov-report/dates/parse.ts.html +1 -1
  15. package/coverage/lcov-report/dates/period.ts.html +1 -1
  16. package/coverage/lcov-report/dates/shift.ts.html +1 -1
  17. package/coverage/lcov-report/dates/types.ts.html +1 -1
  18. package/coverage/lcov-report/dates/yearDate.ts.html +1 -1
  19. package/coverage/lcov-report/fields/index.html +1 -1
  20. package/coverage/lcov-report/fields/update.ts.html +1 -1
  21. package/coverage/lcov-report/functions/index.html +1 -1
  22. package/coverage/lcov-report/functions/safeCall.ts.html +1 -1
  23. package/coverage/lcov-report/index.html +1 -1
  24. package/coverage/lcov-report/lazy/index.html +1 -1
  25. package/coverage/lcov-report/lazy/promise.ts.html +1 -1
  26. package/coverage/lcov-report/lazy/singleton.ts.html +1 -1
  27. package/coverage/lcov-report/logger/batch.ts.html +1 -1
  28. package/coverage/lcov-report/logger/console.ts.html +1 -1
  29. package/coverage/lcov-report/logger/index.html +1 -1
  30. package/coverage/lcov-report/logger/index.ts.html +1 -1
  31. package/coverage/lcov-report/logger/named.ts.html +1 -1
  32. package/coverage/lcov-report/logger/proxy.ts.html +1 -1
  33. package/coverage/lcov-report/math/arrays.ts.html +1 -1
  34. package/coverage/lcov-report/math/calc.ts.html +1 -1
  35. package/coverage/lcov-report/math/distribution.ts.html +1 -1
  36. package/coverage/lcov-report/math/index.html +1 -1
  37. package/coverage/lcov-report/math/index.ts.html +1 -1
  38. package/coverage/lcov-report/observing/event.ts.html +1 -1
  39. package/coverage/lcov-report/observing/index.html +1 -1
  40. package/coverage/lcov-report/structures/helpers/enum.ts.html +1 -1
  41. package/coverage/lcov-report/structures/helpers/index.html +1 -1
  42. package/coverage/lcov-report/structures/index.html +1 -1
  43. package/coverage/lcov-report/structures/queue/index.html +1 -1
  44. package/coverage/lcov-report/structures/queue/parallel.ts.html +1 -1
  45. package/coverage/lcov-report/structures/queue/tasks.ts.html +1 -1
  46. package/coverage/lcov-report/structures/tempoCache.ts.html +1 -1
  47. package/coverage/lcov-report/types/comparator.ts.html +1 -1
  48. package/coverage/lcov-report/types/getter.ts.html +1 -1
  49. package/coverage/lcov-report/types/index.html +1 -1
  50. package/coverage/lcov-report/types/index.ts.html +26 -2
  51. package/coverage/lcov-report/validation/ValidationErrors.ts.html +1 -1
  52. package/coverage/lcov-report/validation/creditCard.ts.html +1 -1
  53. package/coverage/lcov-report/validation/helpers.ts.html +1 -1
  54. package/coverage/lcov-report/validation/index.html +1 -1
  55. package/coverage/lcov-report/validation/index.ts.html +1 -1
  56. package/coverage/lcov-report/validation/types.ts.html +1 -1
  57. package/coverage/lcov-report/validation/validators.ts.html +1 -1
  58. package/coverage/lcov-report/validation/wrappers.ts.html +1 -1
  59. package/lib/async/misc.d.ts +3 -0
  60. package/lib/async/misc.d.ts.map +1 -0
  61. package/lib/async/misc.js +13 -0
  62. package/lib/async/misc.js.map +1 -0
  63. package/lib/models/File.d.ts +10 -0
  64. package/lib/models/File.d.ts.map +1 -0
  65. package/lib/models/File.js +3 -0
  66. package/lib/models/File.js.map +1 -0
  67. package/lib/observing/progressTracker.d.ts +24 -0
  68. package/lib/observing/progressTracker.d.ts.map +1 -0
  69. package/lib/observing/progressTracker.js +71 -0
  70. package/lib/observing/progressTracker.js.map +1 -0
  71. package/lib/types/index.d.ts +4 -0
  72. package/lib/types/index.d.ts.map +1 -1
  73. package/package.json +1 -1
  74. package/src/async/misc.ts +11 -0
  75. package/src/models/File.ts +14 -0
  76. package/src/observing/progressTracker.ts +84 -0
  77. package/src/types/index.ts +8 -0
  78. package/lib/async/opts.d.ts +0 -2
  79. package/lib/async/opts.d.ts.map +0 -1
  80. package/lib/async/opts.js +0 -8
  81. package/lib/async/opts.js.map +0 -1
  82. package/src/async/opts.ts +0 -4
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <coverage generated="1667121704830" clover="3.2.0">
3
- <project timestamp="1667121704830" name="All files">
2
+ <coverage generated="1667688309810" clover="3.2.0">
3
+ <project timestamp="1667688309810" name="All files">
4
4
  <metrics statements="1106" coveredstatements="944" conditionals="713" coveredconditionals="560" methods="284" coveredmethods="219" elements="2103" coveredelements="1723" complexity="0" loc="1106" ncloc="1106" packages="14" files="42" classes="42"/>
5
5
  <package name="__tests__.helpers">
6
6
  <metrics statements="8" coveredstatements="8" conditionals="0" coveredconditionals="0" methods="2" coveredmethods="2"/>
@@ -79,7 +79,7 @@ export const expectAnythingOrNothing = expect.toBeOneOf([expect.anything(), unde
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at 2022-10-30T09:21:44.796Z
82
+ at 2022-11-05T22:45:09.773Z
83
83
  </div>
84
84
  <script src="../../prettify.js"></script>
85
85
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2022-10-30T09:21:44.796Z
119
+ at 2022-11-05T22:45:09.773Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -106,7 +106,7 @@ export const toArbitrary = (fakerGen) =&gt; {
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
109
- at 2022-10-30T09:21:44.796Z
109
+ at 2022-11-05T22:45:09.773Z
110
110
  </div>
111
111
  <script src="../../prettify.js"></script>
112
112
  <script>
@@ -184,7 +184,7 @@ export async function <span class="fstat-no" title="function not covered" >mapAs
184
184
  <div class='footer quiet pad2 space-top1 center small'>
185
185
  Code coverage generated by
186
186
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
187
- at 2022-10-30T09:21:44.796Z
187
+ at 2022-11-05T22:45:09.773Z
188
188
  </div>
189
189
  <script src="../prettify.js"></script>
190
190
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2022-10-30T09:21:44.796Z
119
+ at 2022-11-05T22:45:09.773Z
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
122
122
  <script>
@@ -322,7 +322,7 @@ export function timeoutPromise&lt;T&gt;(p: Promise&lt;T&gt;, timeoutMs: number,
322
322
  <div class='footer quiet pad2 space-top1 center small'>
323
323
  Code coverage generated by
324
324
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
325
- at 2022-10-30T09:21:44.796Z
325
+ at 2022-11-05T22:45:09.773Z
326
326
  </div>
327
327
  <script src="../prettify.js"></script>
328
328
  <script>
@@ -286,7 +286,7 @@ export function clamp(d: Date, low: Date, high: Date) {
286
286
  <div class='footer quiet pad2 space-top1 center small'>
287
287
  Code coverage generated by
288
288
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
289
- at 2022-10-30T09:21:44.796Z
289
+ at 2022-11-05T22:45:09.773Z
290
290
  </div>
291
291
  <script src="../prettify.js"></script>
292
292
  <script>
@@ -643,7 +643,7 @@ export function getDaysStreak(dates: number[], descentOrder: boolean): number {
643
643
  <div class='footer quiet pad2 space-top1 center small'>
644
644
  Code coverage generated by
645
645
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
646
- at 2022-10-30T09:21:44.796Z
646
+ at 2022-11-05T22:45:09.773Z
647
647
  </div>
648
648
  <script src="../prettify.js"></script>
649
649
  <script>
@@ -196,7 +196,7 @@ export namespace DateX {
196
196
  <div class='footer quiet pad2 space-top1 center small'>
197
197
  Code coverage generated by
198
198
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
199
- at 2022-10-30T09:21:44.796Z
199
+ at 2022-11-05T22:45:09.773Z
200
200
  </div>
201
201
  <script src="../prettify.js"></script>
202
202
  <script>
@@ -388,7 +388,7 @@ export namespace Format {
388
388
  <div class='footer quiet pad2 space-top1 center small'>
389
389
  Code coverage generated by
390
390
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
391
- at 2022-10-30T09:21:44.796Z
391
+ at 2022-11-05T22:45:09.773Z
392
392
  </div>
393
393
  <script src="../prettify.js"></script>
394
394
  <script>
@@ -236,7 +236,7 @@
236
236
  <div class='footer quiet pad2 space-top1 center small'>
237
237
  Code coverage generated by
238
238
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
239
- at 2022-10-30T09:21:44.796Z
239
+ at 2022-11-05T22:45:09.773Z
240
240
  </div>
241
241
  <script src="../prettify.js"></script>
242
242
  <script>
@@ -97,7 +97,7 @@ export * from './yearDate';
97
97
  <div class='footer quiet pad2 space-top1 center small'>
98
98
  Code coverage generated by
99
99
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
100
- at 2022-10-30T09:21:44.796Z
100
+ at 2022-11-05T22:45:09.773Z
101
101
  </div>
102
102
  <script src="../prettify.js"></script>
103
103
  <script>
@@ -142,7 +142,7 @@ export namespace Parse {
142
142
  <div class='footer quiet pad2 space-top1 center small'>
143
143
  Code coverage generated by
144
144
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
145
- at 2022-10-30T09:21:44.796Z
145
+ at 2022-11-05T22:45:09.773Z
146
146
  </div>
147
147
  <script src="../prettify.js"></script>
148
148
  <script>
@@ -139,7 +139,7 @@ export namespace Period {
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" rel="noopener noreferrer">istanbul</a>
142
- at 2022-10-30T09:21:44.796Z
142
+ at 2022-11-05T22:45:09.773Z
143
143
  </div>
144
144
  <script src="../prettify.js"></script>
145
145
  <script>
@@ -340,7 +340,7 @@ export function isSame(d1: Date | number, d2: Date | number, g: Granularity, loc
340
340
  <div class='footer quiet pad2 space-top1 center small'>
341
341
  Code coverage generated by
342
342
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
343
- at 2022-10-30T09:21:44.796Z
343
+ at 2022-11-05T22:45:09.773Z
344
344
  </div>
345
345
  <script src="../prettify.js"></script>
346
346
  <script>
@@ -166,7 +166,7 @@ export namespace ConstantGranularity {
166
166
  <div class='footer quiet pad2 space-top1 center small'>
167
167
  Code coverage generated by
168
168
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
169
- at 2022-10-30T09:21:44.796Z
169
+ at 2022-11-05T22:45:09.773Z
170
170
  </div>
171
171
  <script src="../prettify.js"></script>
172
172
  <script>
@@ -178,7 +178,7 @@ export namespace YearDate {
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" rel="noopener noreferrer">istanbul</a>
181
- at 2022-10-30T09:21:44.796Z
181
+ at 2022-11-05T22:45:09.773Z
182
182
  </div>
183
183
  <script src="../prettify.js"></script>
184
184
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2022-10-30T09:21:44.796Z
104
+ at 2022-11-05T22:45:09.773Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -442,7 +442,7 @@ export function updateArray&lt;T&gt;(
442
442
  <div class='footer quiet pad2 space-top1 center small'>
443
443
  Code coverage generated by
444
444
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
445
- at 2022-10-30T09:21:44.796Z
445
+ at 2022-11-05T22:45:09.773Z
446
446
  </div>
447
447
  <script src="../prettify.js"></script>
448
448
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2022-10-30T09:21:44.796Z
104
+ at 2022-11-05T22:45:09.773Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -88,7 +88,7 @@ export function safeCall&lt;T extends (...args: any) =&gt; any&gt;(cb: T | undef
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 2022-10-30T09:21:44.796Z
91
+ at 2022-11-05T22:45:09.773Z
92
92
  </div>
93
93
  <script src="../prettify.js"></script>
94
94
  <script>
@@ -296,7 +296,7 @@
296
296
  <div class='footer quiet pad2 space-top1 center small'>
297
297
  Code coverage generated by
298
298
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
299
- at 2022-10-30T09:21:44.796Z
299
+ at 2022-11-05T22:45:09.773Z
300
300
  </div>
301
301
  <script src="prettify.js"></script>
302
302
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2022-10-30T09:21:44.796Z
119
+ at 2022-11-05T22:45:09.773Z
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
122
122
  <script>
@@ -226,7 +226,7 @@ export class LazyPromise&lt;T&gt; implements IDisposable {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
229
- at 2022-10-30T09:21:44.796Z
229
+ at 2022-11-05T22:45:09.773Z
230
230
  </div>
231
231
  <script src="../prettify.js"></script>
232
232
  <script>
@@ -166,7 +166,7 @@ export class Lazy&lt;T&gt; implements IDisposable {
166
166
  <div class='footer quiet pad2 space-top1 center small'>
167
167
  Code coverage generated by
168
168
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
169
- at 2022-10-30T09:21:44.796Z
169
+ at 2022-11-05T22:45:09.773Z
170
170
  </div>
171
171
  <script src="../prettify.js"></script>
172
172
  <script>
@@ -97,7 +97,7 @@ export function batchLoggers(...loggers: ILogger[]): ILogger {
97
97
  <div class='footer quiet pad2 space-top1 center small'>
98
98
  Code coverage generated by
99
99
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
100
- at 2022-10-30T09:21:44.796Z
100
+ at 2022-11-05T22:45:09.773Z
101
101
  </div>
102
102
  <script src="../prettify.js"></script>
103
103
  <script>
@@ -226,7 +226,7 @@ export class BufferedConsoleLogger implements ILogger {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
229
- at 2022-10-30T09:21:44.796Z
229
+ at 2022-11-05T22:45:09.773Z
230
230
  </div>
231
231
  <script src="../prettify.js"></script>
232
232
  <script>
@@ -161,7 +161,7 @@
161
161
  <div class='footer quiet pad2 space-top1 center small'>
162
162
  Code coverage generated by
163
163
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
164
- at 2022-10-30T09:21:44.796Z
164
+ at 2022-11-05T22:45:09.773Z
165
165
  </div>
166
166
  <script src="../prettify.js"></script>
167
167
  <script>
@@ -283,7 +283,7 @@ function _createImplementation(overrideMode: typeof Mode = undefined): ILogger {
283
283
  <div class='footer quiet pad2 space-top1 center small'>
284
284
  Code coverage generated by
285
285
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
286
- at 2022-10-30T09:21:44.796Z
286
+ at 2022-11-05T22:45:09.773Z
287
287
  </div>
288
288
  <script src="../prettify.js"></script>
289
289
  <script>
@@ -211,7 +211,7 @@ export abstract class NamedLogger implements ILogger, ILoggerSwitchable {
211
211
  <div class='footer quiet pad2 space-top1 center small'>
212
212
  Code coverage generated by
213
213
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
214
- at 2022-10-30T09:21:44.796Z
214
+ at 2022-11-05T22:45:09.773Z
215
215
  </div>
216
216
  <script src="../prettify.js"></script>
217
217
  <script>
@@ -157,7 +157,7 @@ export class ProxyLogger extends NamedLogger {
157
157
  <div class='footer quiet pad2 space-top1 center small'>
158
158
  Code coverage generated by
159
159
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
160
- at 2022-10-30T09:21:44.796Z
160
+ at 2022-11-05T22:45:09.773Z
161
161
  </div>
162
162
  <script src="../prettify.js"></script>
163
163
  <script>
@@ -892,7 +892,7 @@ export function <span class="fstat-no" title="function not covered" >chunkify&lt
892
892
  <div class='footer quiet pad2 space-top1 center small'>
893
893
  Code coverage generated by
894
894
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
895
- at 2022-10-30T09:21:44.796Z
895
+ at 2022-11-05T22:45:09.773Z
896
896
  </div>
897
897
  <script src="../prettify.js"></script>
898
898
  <script>
@@ -277,7 +277,7 @@ export function <span class="fstat-no" title="function not covered" >badRandomSt
277
277
  <div class='footer quiet pad2 space-top1 center small'>
278
278
  Code coverage generated by
279
279
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
280
- at 2022-10-30T09:21:44.796Z
280
+ at 2022-11-05T22:45:09.773Z
281
281
  </div>
282
282
  <script src="../prettify.js"></script>
283
283
  <script>
@@ -130,7 +130,7 @@ export function extendDistribution&lt;T extends keyof any&gt;(count: number, typ
130
130
  <div class='footer quiet pad2 space-top1 center small'>
131
131
  Code coverage generated by
132
132
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
133
- at 2022-10-30T09:21:44.796Z
133
+ at 2022-11-05T22:45:09.773Z
134
134
  </div>
135
135
  <script src="../prettify.js"></script>
136
136
  <script>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2022-10-30T09:21:44.796Z
149
+ at 2022-11-05T22:45:09.773Z
150
150
  </div>
151
151
  <script src="../prettify.js"></script>
152
152
  <script>
@@ -151,7 +151,7 @@ export function format(n: number, digits?: number) {
151
151
  <div class='footer quiet pad2 space-top1 center small'>
152
152
  Code coverage generated by
153
153
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
154
- at 2022-10-30T09:21:44.796Z
154
+ at 2022-11-05T22:45:09.773Z
155
155
  </div>
156
156
  <script src="../prettify.js"></script>
157
157
  <script>
@@ -343,7 +343,7 @@ export function oneTimeSubscription&lt;T&gt;(e: IEvent&lt;T&gt;, filter?: Predic
343
343
  <div class='footer quiet pad2 space-top1 center small'>
344
344
  Code coverage generated by
345
345
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
346
- at 2022-10-30T09:21:44.796Z
346
+ at 2022-11-05T22:45:09.773Z
347
347
  </div>
348
348
  <script src="../prettify.js"></script>
349
349
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2022-10-30T09:21:44.796Z
104
+ at 2022-11-05T22:45:09.773Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -439,7 +439,7 @@ export class EnumBitwiseHelper&lt;T extends number&gt; extends EnumHelper&lt;T&g
439
439
  <div class='footer quiet pad2 space-top1 center small'>
440
440
  Code coverage generated by
441
441
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
442
- at 2022-10-30T09:21:44.796Z
442
+ at 2022-11-05T22:45:09.773Z
443
443
  </div>
444
444
  <script src="../../prettify.js"></script>
445
445
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2022-10-30T09:21:44.796Z
104
+ at 2022-11-05T22:45:09.773Z
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at 2022-10-30T09:21:44.796Z
104
+ at 2022-11-05T22:45:09.773Z
105
105
  </div>
106
106
  <script src="../prettify.js"></script>
107
107
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2022-10-30T09:21:44.796Z
119
+ at 2022-11-05T22:45:09.773Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -496,7 +496,7 @@ export class ParallelQueue {
496
496
  <div class='footer quiet pad2 space-top1 center small'>
497
497
  Code coverage generated by
498
498
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
499
- at 2022-10-30T09:21:44.796Z
499
+ at 2022-11-05T22:45:09.773Z
500
500
  </div>
501
501
  <script src="../../prettify.js"></script>
502
502
  <script>
@@ -343,7 +343,7 @@ export class TasksQueue&lt;T&gt; {
343
343
  <div class='footer quiet pad2 space-top1 center small'>
344
344
  Code coverage generated by
345
345
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
346
- at 2022-10-30T09:21:44.796Z
346
+ at 2022-11-05T22:45:09.773Z
347
347
  </div>
348
348
  <script src="../../prettify.js"></script>
349
349
  <script>
@@ -124,7 +124,7 @@ export class TempoCache&lt;T&gt; {
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 2022-10-30T09:21:44.796Z
127
+ at 2022-11-05T22:45:09.773Z
128
128
  </div>
129
129
  <script src="../prettify.js"></script>
130
130
  <script>
@@ -88,7 +88,7 @@ export namespace Comparator {
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 2022-10-30T09:21:44.796Z
91
+ at 2022-11-05T22:45:09.773Z
92
92
  </div>
93
93
  <script src="../prettify.js"></script>
94
94
  <script>
@@ -112,7 +112,7 @@ export namespace Getter {
112
112
  <div class='footer quiet pad2 space-top1 center small'>
113
113
  Code coverage generated by
114
114
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
115
- at 2022-10-30T09:21:44.796Z
115
+ at 2022-11-05T22:45:09.773Z
116
116
  </div>
117
117
  <script src="../prettify.js"></script>
118
118
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2022-10-30T09:21:44.796Z
134
+ at 2022-11-05T22:45:09.773Z
135
135
  </div>
136
136
  <script src="../prettify.js"></script>
137
137
  <script>
@@ -72,7 +72,15 @@
72
72
  <a name='L7'></a><a href='#L7'>7</a>
73
73
  <a name='L8'></a><a href='#L8'>8</a>
74
74
  <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">6x</span>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">6x</span>
76
84
  <span class="cline-any cline-yes">6x</span>
77
85
  <span class="cline-any cline-yes">6x</span>
78
86
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -81,6 +89,14 @@
81
89
  <span class="cline-any cline-neutral">&nbsp;</span>
82
90
  <span class="cline-any cline-neutral">&nbsp;</span>
83
91
  <span class="cline-any cline-neutral">&nbsp;</span>
92
+ <span class="cline-any cline-neutral">&nbsp;</span>
93
+ <span class="cline-any cline-neutral">&nbsp;</span>
94
+ <span class="cline-any cline-neutral">&nbsp;</span>
95
+ <span class="cline-any cline-neutral">&nbsp;</span>
96
+ <span class="cline-any cline-neutral">&nbsp;</span>
97
+ <span class="cline-any cline-neutral">&nbsp;</span>
98
+ <span class="cline-any cline-neutral">&nbsp;</span>
99
+ <span class="cline-any cline-neutral">&nbsp;</span>
84
100
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export * from './deep';
85
101
  export * from './getter';
86
102
  export * from './comparator';
@@ -90,6 +106,14 @@ export type Predicate&lt;T&gt; = (value: T) =&gt; boolean;
90
106
  export type TypedKeys&lt;T extends Object, K&gt; = {
91
107
  [P in keyof T]: T[P] extends K ? P : never
92
108
  }[keyof T];
109
+ &nbsp;
110
+ export type ArrayTail&lt;T&gt; = T extends [any, ...infer P] ? [...P] : T;
111
+ &nbsp;
112
+ export type NestedPick&lt;T, K extends any[]&gt; = K extends Array&lt;never&gt; // empty arr
113
+ ? T
114
+ : {
115
+ [P in K[0]]: P extends keyof T ? NestedPick&lt;T[P], ArrayTail&lt;K&gt;&gt; : never;
116
+ };
93
117
  &nbsp;</pre></td></tr></table></pre>
94
118
 
95
119
  <div class='push'></div><!-- for sticky footer -->
@@ -97,7 +121,7 @@ export type TypedKeys&lt;T extends Object, K&gt; = {
97
121
  <div class='footer quiet pad2 space-top1 center small'>
98
122
  Code coverage generated by
99
123
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
100
- at 2022-10-30T09:21:44.796Z
124
+ at 2022-11-05T22:45:09.773Z
101
125
  </div>
102
126
  <script src="../prettify.js"></script>
103
127
  <script>
@@ -148,7 +148,7 @@ export namespace <span class="branch-1 cbranch-no" title="branch not covered" >V
148
148
  <div class='footer quiet pad2 space-top1 center small'>
149
149
  Code coverage generated by
150
150
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
151
- at 2022-10-30T09:21:44.796Z
151
+ at 2022-11-05T22:45:09.773Z
152
152
  </div>
153
153
  <script src="../prettify.js"></script>
154
154
  <script>
@@ -145,7 +145,7 @@ export default {
145
145
  <div class='footer quiet pad2 space-top1 center small'>
146
146
  Code coverage generated by
147
147
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
148
- at 2022-10-30T09:21:44.796Z
148
+ at 2022-11-05T22:45:09.773Z
149
149
  </div>
150
150
  <script src="../prettify.js"></script>
151
151
  <script>
@@ -211,7 +211,7 @@ export function <span class="fstat-no" title="function not covered" >validateObj
211
211
  <div class='footer quiet pad2 space-top1 center small'>
212
212
  Code coverage generated by
213
213
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
214
- at 2022-10-30T09:21:44.796Z
214
+ at 2022-11-05T22:45:09.773Z
215
215
  </div>
216
216
  <script src="../prettify.js"></script>
217
217
  <script>
@@ -191,7 +191,7 @@
191
191
  <div class='footer quiet pad2 space-top1 center small'>
192
192
  Code coverage generated by
193
193
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
194
- at 2022-10-30T09:21:44.796Z
194
+ at 2022-11-05T22:45:09.773Z
195
195
  </div>
196
196
  <script src="../prettify.js"></script>
197
197
  <script>
@@ -97,7 +97,7 @@ export * from './helpers';
97
97
  <div class='footer quiet pad2 space-top1 center small'>
98
98
  Code coverage generated by
99
99
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
100
- at 2022-10-30T09:21:44.796Z
100
+ at 2022-11-05T22:45:09.773Z
101
101
  </div>
102
102
  <script src="../prettify.js"></script>
103
103
  <script>
@@ -124,7 +124,7 @@ export class ValidationError&lt;TErrors = ValidationErrors&gt; extends Error {
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 2022-10-30T09:21:44.796Z
127
+ at 2022-11-05T22:45:09.773Z
128
128
  </div>
129
129
  <script src="../prettify.js"></script>
130
130
  <script>
@@ -235,7 +235,7 @@ export const Validators = {
235
235
  <div class='footer quiet pad2 space-top1 center small'>
236
236
  Code coverage generated by
237
237
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
238
- at 2022-10-30T09:21:44.796Z
238
+ at 2022-11-05T22:45:09.773Z
239
239
  </div>
240
240
  <script src="../prettify.js"></script>
241
241
  <script>
@@ -148,7 +148,7 @@ export const Wrappers = {
148
148
  <div class='footer quiet pad2 space-top1 center small'>
149
149
  Code coverage generated by
150
150
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
151
- at 2022-10-30T09:21:44.796Z
151
+ at 2022-11-05T22:45:09.773Z
152
152
  </div>
153
153
  <script src="../prettify.js"></script>
154
154
  <script>
@@ -0,0 +1,3 @@
1
+ export declare function OptAwait<T>(cb: () => (T | Promise<T>), doAwait: boolean): Promise<T>;
2
+ export declare function chain(...promises: (() => Promise<void>)[]): Promise<void>;
3
+ //# sourceMappingURL=misc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../src/async/misc.ts"],"names":[],"mappings":"AACA,wBAAsB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAE1F;AAED,wBAAsB,KAAK,CAAC,GAAG,QAAQ,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,iBAK/D"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.chain = exports.OptAwait = void 0;
4
+ async function OptAwait(cb, doAwait) {
5
+ return cb && (doAwait ? (await cb()) : cb());
6
+ }
7
+ exports.OptAwait = OptAwait;
8
+ async function chain(...promises) {
9
+ const applyAsync = (acc, val) => acc.then(val);
10
+ return promises.reduce(applyAsync, Promise.resolve());
11
+ }
12
+ exports.chain = chain;
13
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/async/misc.ts"],"names":[],"mappings":";;;AACO,KAAK,UAAU,QAAQ,CAAI,EAA0B,EAAE,OAAgB;IAC1E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAFD,4BAEC;AAEM,KAAK,UAAU,KAAK,CAAC,GAAG,QAAiC;IAE5D,MAAM,UAAU,GAAG,CAAC,GAAkB,EAAE,GAAwB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnF,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,CAAC;AALD,sBAKC"}
@@ -0,0 +1,10 @@
1
+ export declare type FileMetadata = {
2
+ name: string;
3
+ /** size in bytes */
4
+ size: number;
5
+ /** refers to MIME type */
6
+ type: string;
7
+ format?: string;
8
+ lang?: string;
9
+ };
10
+ //# sourceMappingURL=File.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.d.ts","sourceRoot":"","sources":["../../src/models/File.ts"],"names":[],"mappings":"AACA,oBAAY,YAAY,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IAEb,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IAEb,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=File.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"File.js","sourceRoot":"","sources":["../../src/models/File.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { ILogger } from '../logger';
2
+ export declare class ProgressTracker {
3
+ readonly log: boolean | ILogger;
4
+ private readonly _firstTimestamp;
5
+ private _lastTimestamp;
6
+ private _lastCompleted;
7
+ private _completed;
8
+ private _total;
9
+ private readonly _deltas;
10
+ private readonly _changed;
11
+ constructor(log?: boolean | ILogger);
12
+ get changed(): import("./event").IEvent<{
13
+ completed: number;
14
+ total: number;
15
+ currentProgress: number;
16
+ totalElapsedMs: number;
17
+ totalEstimatedMs: number;
18
+ }>;
19
+ private get logger();
20
+ setTotal(total: number): this;
21
+ add(amount?: number, restart?: boolean): void;
22
+ track(completed: number, total: number): void;
23
+ }
24
+ //# sourceMappingURL=progressTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressTracker.d.ts","sourceRoot":"","sources":["../../src/observing/progressTracker.ts"],"names":[],"mappings":"AAEA,OAAe,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG5C,qBAAa,eAAe;IAaZ,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAX3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAc;IAC9C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAgB;IAEtC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAK;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgI;gBAEpI,GAAG,GAAE,OAAO,GAAG,OAAc;IAElD,IAAW,OAAO;;;;;;OAAqC;IAEvD,OAAO,KAAK,MAAM,GAIjB;IAEM,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,GAAG,CAAC,MAAM,SAAI,EAAE,OAAO,UAAQ;IAK/B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAuChD"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProgressTracker = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const DateHelpers = tslib_1.__importStar(require("../dates"));
6
+ const MathHelpers = tslib_1.__importStar(require("../math"));
7
+ const logger_1 = tslib_1.__importDefault(require("../logger"));
8
+ const event_1 = require("./event");
9
+ class ProgressTracker {
10
+ constructor(log = true) {
11
+ this.log = log;
12
+ this._firstTimestamp = Date.now();
13
+ this._lastTimestamp = null;
14
+ this._lastCompleted = null;
15
+ this._completed = 0;
16
+ this._total = 0;
17
+ this._deltas = [];
18
+ this._changed = new event_1.Event();
19
+ }
20
+ get changed() { return this._changed.expose(); }
21
+ get logger() {
22
+ return this.log === true
23
+ ? logger_1.default
24
+ : (this.log || null);
25
+ }
26
+ setTotal(total) {
27
+ this._total = total;
28
+ return this;
29
+ }
30
+ add(amount = 1, restart = false) {
31
+ this._completed = restart ? amount : (this._completed + amount);
32
+ this.track(this._completed, this._total);
33
+ }
34
+ track(completed, total) {
35
+ if (!this._lastTimestamp) {
36
+ this._lastTimestamp = this._firstTimestamp;
37
+ }
38
+ const elapsedDelta = Date.now() - this._lastTimestamp;
39
+ const completedDelta = completed - (this._lastCompleted || 0);
40
+ this._lastCompleted = completed;
41
+ const timePerCompleted = completedDelta > 0 ? (elapsedDelta / completedDelta) : 0;
42
+ this._deltas.push(timePerCompleted);
43
+ if (this._deltas.length > 20) {
44
+ this._deltas.shift();
45
+ }
46
+ const currentProgress = Math.floor(completed / (total || 100) * 100);
47
+ const itemsLeft = total - completed;
48
+ const leftProgressTime = itemsLeft * (MathHelpers.arrayAverage(this._deltas, true) || 1000);
49
+ this._lastTimestamp = Date.now();
50
+ const totalElapsedMs = this._lastTimestamp - this._firstTimestamp;
51
+ if (this.log) {
52
+ const totalElapsed = msToString(totalElapsedMs);
53
+ const totalEstimated = msToString(leftProgressTime);
54
+ this.logger.log(`Progress: ${completed}/${total} ${totalElapsed}/${totalEstimated} => ${currentProgress}%`);
55
+ }
56
+ this._changed.trigger({
57
+ completed,
58
+ total,
59
+ currentProgress,
60
+ totalElapsedMs,
61
+ totalEstimatedMs: leftProgressTime,
62
+ });
63
+ }
64
+ }
65
+ exports.ProgressTracker = ProgressTracker;
66
+ function msToString(ms) {
67
+ const decs = DateHelpers.decomposeMs(ms, 'second', 'minute', 'hour');
68
+ const nf = (n) => n.toString().padStart(2, '0');
69
+ return `${nf(decs.hour)}:${nf(decs.minute)}:${nf(decs.second)}`;
70
+ }
71
+ //# sourceMappingURL=progressTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressTracker.js","sourceRoot":"","sources":["../../src/observing/progressTracker.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,8 @@ export declare type Predicate<T> = (value: T) => boolean;
5
5
  export declare type TypedKeys<T extends Object, K> = {
6
6
  [P in keyof T]: T[P] extends K ? P : never;
7
7
  }[keyof T];
8
+ export declare type ArrayTail<T> = T extends [any, ...infer P] ? [...P] : T;
9
+ export declare type NestedPick<T, K extends any[]> = K extends Array<never> ? T : {
10
+ [P in K[0]]: P extends keyof T ? NestedPick<T[P], ArrayTail<K>> : never;
11
+ };
8
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAE7B,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;AAEjD,oBAAY,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;CAC7C,CAAC,MAAM,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAE7B,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;AAEjD,oBAAY,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;CAC7C,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAEpE,oBAAY,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAC7D,CAAC,GACD;KACG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC1E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "2.0.0-beta.2",
3
+ "version": "2.0.1",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,11 @@
1
+
2
+ export async function OptAwait<T>(cb: () => (T | Promise<T>), doAwait: boolean): Promise<T> {
3
+ return cb && (doAwait ? (await cb()) : cb());
4
+ }
5
+
6
+ export async function chain(...promises: (() => Promise<void>)[]) {
7
+
8
+ const applyAsync = (acc: Promise<void>, val: () => Promise<void>) => acc.then(val);
9
+
10
+ return promises.reduce(applyAsync, Promise.resolve());
11
+ }
@@ -0,0 +1,14 @@
1
+
2
+ export type FileMetadata = {
3
+ name: string;
4
+
5
+ /** size in bytes */
6
+ size: number;
7
+
8
+ /** refers to MIME type */
9
+ type: string;
10
+
11
+ format?: string;
12
+
13
+ lang?: string;
14
+ };
@@ -0,0 +1,84 @@
1
+ import * as DateHelpers from '../dates';
2
+ import * as MathHelpers from '../math';
3
+ import logger, { ILogger } from '../logger';
4
+ import { Event } from './event';
5
+
6
+ export class ProgressTracker {
7
+
8
+ private readonly _firstTimestamp = Date.now();
9
+ private _lastTimestamp: number = null;
10
+ private _lastCompleted: number = null;
11
+
12
+ private _completed = 0;
13
+ private _total = 0;
14
+
15
+ private readonly _deltas: number[] = [];
16
+
17
+ private readonly _changed = new Event<{ completed: number, total: number, currentProgress: number, totalElapsedMs: number, totalEstimatedMs: number }>();
18
+
19
+ constructor(readonly log: boolean | ILogger = true) { }
20
+
21
+ public get changed() { return this._changed.expose(); }
22
+
23
+ private get logger() {
24
+ return this.log === true
25
+ ? logger
26
+ : (this.log || null);
27
+ }
28
+
29
+ public setTotal(total: number) {
30
+ this._total = total;
31
+ return this;
32
+ }
33
+
34
+ public add(amount = 1, restart = false) {
35
+ this._completed = restart ? amount : (this._completed + amount);
36
+ this.track(this._completed, this._total);
37
+ }
38
+
39
+ public track(completed: number, total: number) {
40
+
41
+ if (!this._lastTimestamp) {
42
+ this._lastTimestamp = this._firstTimestamp;
43
+ }
44
+
45
+ const elapsedDelta = Date.now() - this._lastTimestamp;
46
+ const completedDelta = completed - (this._lastCompleted || 0);
47
+ this._lastCompleted = completed;
48
+ const timePerCompleted = completedDelta > 0 ? (elapsedDelta / completedDelta) : 0;
49
+
50
+ this._deltas.push(timePerCompleted);
51
+ if (this._deltas.length > 20) {
52
+ this._deltas.shift();
53
+ }
54
+
55
+ const currentProgress = Math.floor(completed / (total || 100) * 100);
56
+ const itemsLeft = total - completed;
57
+ const leftProgressTime = itemsLeft * (MathHelpers.arrayAverage(this._deltas, true) || 1000);
58
+
59
+ this._lastTimestamp = Date.now();
60
+
61
+ const totalElapsedMs = this._lastTimestamp - this._firstTimestamp;
62
+
63
+ if (this.log) {
64
+ const totalElapsed = msToString(totalElapsedMs);
65
+ const totalEstimated = msToString(leftProgressTime);
66
+
67
+ this.logger.log(`Progress: ${completed}/${total} ${totalElapsed}/${totalEstimated} => ${currentProgress}%`);
68
+ }
69
+
70
+ this._changed.trigger({
71
+ completed,
72
+ total,
73
+ currentProgress,
74
+ totalElapsedMs,
75
+ totalEstimatedMs: leftProgressTime,
76
+ });
77
+ }
78
+ }
79
+
80
+ function msToString(this: void, ms: number) {
81
+ const decs = DateHelpers.decomposeMs(ms, 'second', 'minute', 'hour');
82
+ const nf = (n: number) => n.toString().padStart(2, '0');
83
+ return `${nf(decs.hour)}:${nf(decs.minute)}:${nf(decs.second)}`;
84
+ }
@@ -7,3 +7,11 @@ export type Predicate<T> = (value: T) => boolean;
7
7
  export type TypedKeys<T extends Object, K> = {
8
8
  [P in keyof T]: T[P] extends K ? P : never
9
9
  }[keyof T];
10
+
11
+ export type ArrayTail<T> = T extends [any, ...infer P] ? [...P] : T;
12
+
13
+ export type NestedPick<T, K extends any[]> = K extends Array<never> // empty arr
14
+ ? T
15
+ : {
16
+ [P in K[0]]: P extends keyof T ? NestedPick<T[P], ArrayTail<K>> : never;
17
+ };
@@ -1,2 +0,0 @@
1
- export declare function OptAwait<T>(cb: () => (T | Promise<T>), doAwait: boolean): Promise<T>;
2
- //# sourceMappingURL=opts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opts.d.ts","sourceRoot":"","sources":["../../src/async/opts.ts"],"names":[],"mappings":"AACA,wBAAsB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAE1F"}
package/lib/async/opts.js DELETED
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OptAwait = void 0;
4
- async function OptAwait(cb, doAwait) {
5
- return cb && (doAwait ? (await cb()) : cb());
6
- }
7
- exports.OptAwait = OptAwait;
8
- //# sourceMappingURL=opts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"opts.js","sourceRoot":"","sources":["../../src/async/opts.ts"],"names":[],"mappings":";;;AACO,KAAK,UAAU,QAAQ,CAAI,EAA0B,EAAE,OAAgB;IAC1E,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAFD,4BAEC"}
package/src/async/opts.ts DELETED
@@ -1,4 +0,0 @@
1
-
2
- export async function OptAwait<T>(cb: () => (T | Promise<T>), doAwait: boolean): Promise<T> {
3
- return cb && (doAwait ? (await cb()) : cb());
4
- }