@zajno/common 1.6.1 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/coverage/clover.xml +66 -21
  2. package/coverage/coverage-final.json +3 -2
  3. package/coverage/lcov-report/__tests__/helpers/expect.ts.html +94 -0
  4. package/coverage/lcov-report/__tests__/helpers/index.html +131 -0
  5. package/coverage/lcov-report/__tests__/helpers/main.ts.html +121 -0
  6. package/coverage/lcov-report/async/arrays.ts.html +199 -0
  7. package/coverage/lcov-report/async/index.html +19 -19
  8. package/coverage/lcov-report/async/timeout.ts.html +121 -19
  9. package/coverage/lcov-report/dates/calc.ts.html +301 -0
  10. package/coverage/lcov-report/dates/convert.ts.html +658 -0
  11. package/coverage/lcov-report/dates/datex.ts.html +211 -0
  12. package/coverage/lcov-report/dates/format.ts.html +403 -0
  13. package/coverage/lcov-report/dates/index.html +251 -0
  14. package/coverage/lcov-report/dates/index.ts.html +112 -0
  15. package/coverage/lcov-report/dates/parse.ts.html +157 -0
  16. package/coverage/lcov-report/dates/period.ts.html +154 -0
  17. package/coverage/lcov-report/dates/shift.ts.html +355 -0
  18. package/coverage/lcov-report/dates/types.ts.html +181 -0
  19. package/coverage/lcov-report/dates/yearDate.ts.html +193 -0
  20. package/coverage/lcov-report/fields/index.html +116 -0
  21. package/coverage/lcov-report/fields/update.ts.html +457 -0
  22. package/coverage/lcov-report/functions/disposer.ts.html +376 -0
  23. package/coverage/lcov-report/functions/index.html +116 -0
  24. package/coverage/lcov-report/functions/safeCall.ts.html +103 -0
  25. package/coverage/lcov-report/index.html +26 -26
  26. package/coverage/lcov-report/lazy/index.html +131 -0
  27. package/coverage/lcov-report/lazy/light.ts.html +172 -0
  28. package/coverage/lcov-report/lazy/promise.ts.html +241 -0
  29. package/coverage/lcov-report/lazy/singleton.ts.html +181 -0
  30. package/coverage/lcov-report/logger/batch.ts.html +112 -0
  31. package/coverage/lcov-report/logger/console.ts.html +241 -0
  32. package/coverage/lcov-report/logger/index.html +80 -20
  33. package/coverage/lcov-report/logger/index.ts.html +48 -48
  34. package/coverage/lcov-report/logger/named.ts.html +226 -0
  35. package/coverage/lcov-report/logger/proxy.ts.html +172 -0
  36. package/coverage/lcov-report/math/arrays.ts.html +907 -0
  37. package/coverage/lcov-report/math/calc.ts.html +292 -0
  38. package/coverage/lcov-report/math/distribution.ts.html +145 -0
  39. package/coverage/lcov-report/math/index.html +161 -0
  40. package/coverage/lcov-report/math/index.ts.html +166 -0
  41. package/coverage/lcov-report/observing/event.ts.html +358 -0
  42. package/coverage/lcov-report/observing/index.html +116 -0
  43. package/coverage/lcov-report/observing/transition.ts.html +634 -0
  44. package/coverage/lcov-report/queue/index.html +18 -18
  45. package/coverage/lcov-report/queue/tasks.ts.html +358 -0
  46. package/coverage/lcov-report/src/__tests__/helpers/expect.ts.html +1 -1
  47. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  48. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  49. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  50. package/coverage/lcov-report/src/async/index.html +1 -1
  51. package/coverage/lcov-report/src/async/timeout.ts.html +13 -13
  52. package/coverage/lcov-report/src/cache.ts.html +1 -1
  53. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  54. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  55. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  56. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  57. package/coverage/lcov-report/src/dates/index.html +1 -1
  58. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  59. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  60. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  61. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  62. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  63. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  64. package/coverage/lcov-report/src/disposer.ts.html +1 -1
  65. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  66. package/coverage/lcov-report/src/event.ts.html +1 -1
  67. package/coverage/lcov-report/src/fields/index.html +1 -1
  68. package/coverage/lcov-report/src/fields/update.ts.html +1 -1
  69. package/coverage/lcov-report/src/functions.ts.html +13 -13
  70. package/coverage/lcov-report/src/index.html +16 -16
  71. package/coverage/lcov-report/src/lazy/index.html +1 -1
  72. package/coverage/lcov-report/src/lazy/light.ts.html +1 -1
  73. package/coverage/lcov-report/src/lazy/observable.ts.html +1 -1
  74. package/coverage/lcov-report/src/lazy/promise.ts.html +1 -1
  75. package/coverage/lcov-report/src/lazy/singleton.ts.html +1 -1
  76. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  77. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  78. package/coverage/lcov-report/src/logger/index.html +1 -1
  79. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  80. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  81. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  82. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  83. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  84. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  85. package/coverage/lcov-report/src/math/index.html +1 -1
  86. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  87. package/coverage/lcov-report/src/observersMap.ts.html +1 -1
  88. package/coverage/lcov-report/src/observingCache.ts.html +1 -1
  89. package/coverage/lcov-report/src/queue/index.html +24 -9
  90. package/coverage/lcov-report/src/queue/parallel.ts.html +1 -1
  91. package/coverage/lcov-report/src/queue/tasks.ts.html +358 -0
  92. package/coverage/lcov-report/src/tempoCache.ts.html +1 -1
  93. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  94. package/coverage/lcov-report/src/types/comparator.ts.html +103 -0
  95. package/coverage/lcov-report/src/types/getter.ts.html +127 -0
  96. package/coverage/lcov-report/src/types/index.html +146 -0
  97. package/coverage/lcov-report/src/types/index.ts.html +112 -0
  98. package/coverage/lcov-report/src/types.ts.html +1 -1
  99. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  100. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  101. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  102. package/coverage/lcov-report/src/validation/index.html +1 -1
  103. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  104. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  105. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  106. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  107. package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +1 -1
  108. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +1 -1
  109. package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +1 -1
  110. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  111. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  112. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  113. package/coverage/lcov-report/src/viewModels/TextModel.ts.html +1 -1
  114. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
  115. package/coverage/lcov-report/src/viewModels/index.html +1 -1
  116. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  117. package/coverage/lcov-report/structures/helpers/enum.ts.html +454 -0
  118. package/coverage/lcov-report/structures/helpers/index.html +116 -0
  119. package/coverage/lcov-report/structures/index.html +116 -0
  120. package/coverage/lcov-report/structures/promiseCache.ts.html +628 -0
  121. package/coverage/lcov-report/structures/queue/index.html +116 -0
  122. package/coverage/lcov-report/structures/queue/parallel.ts.html +511 -0
  123. package/coverage/lcov-report/structures/subscribersMap.ts.html +400 -0
  124. package/coverage/lcov-report/structures/subscribersPromiseCache.ts.html +562 -0
  125. package/coverage/lcov-report/structures/tempoCache.ts.html +139 -0
  126. package/coverage/lcov-report/tasks.ts.html +355 -0
  127. package/coverage/lcov-report/types/comparator.ts.html +103 -0
  128. package/coverage/lcov-report/types/getter.ts.html +127 -0
  129. package/coverage/lcov-report/types/index.html +146 -0
  130. package/coverage/lcov-report/types/index.ts.html +112 -0
  131. package/coverage/lcov-report/validation/ValidationErrors.ts.html +163 -0
  132. package/coverage/lcov-report/validation/creditCard.ts.html +160 -0
  133. package/coverage/lcov-report/validation/helpers.ts.html +226 -0
  134. package/coverage/lcov-report/validation/index.html +107 -12
  135. package/coverage/lcov-report/validation/index.ts.html +13 -8
  136. package/coverage/lcov-report/validation/types.ts.html +139 -0
  137. package/coverage/lcov-report/validation/validators.ts.html +250 -0
  138. package/coverage/lcov-report/validation/wrappers.ts.html +163 -0
  139. package/coverage/lcov-report/viewModels/LoadingModel.ts.html +15 -7
  140. package/coverage/lcov-report/viewModels/index.html +19 -59
  141. package/coverage/lcov.info +112 -24
  142. package/lib/assert.d.ts +3 -0
  143. package/lib/assert.d.ts.map +1 -0
  144. package/lib/assert.js +21 -0
  145. package/lib/assert.js.map +1 -0
  146. package/lib/queue/tasks.d.ts +17 -0
  147. package/lib/queue/tasks.d.ts.map +1 -0
  148. package/lib/queue/tasks.js +76 -0
  149. package/lib/queue/tasks.js.map +1 -0
  150. package/package.json +1 -1
  151. package/src/.DS_Store +0 -0
  152. package/src/assert.ts +19 -0
  153. package/src/queue/__tests__/tasks.test.ts +87 -0
  154. package/src/queue/tasks.ts +91 -0
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">77.91% </span>
26
+ <span class="strong">95.24% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>127/163</span>
28
+ <span class='fraction'>20/21</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">59.32% </span>
33
+ <span class="strong">87.5% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>35/59</span>
35
+ <span class='fraction'>7/8</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">65% </span>
40
+ <span class="strong">85.71% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>39/60</span>
42
+ <span class='fraction'>6/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.29% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>119/152</span>
49
+ <span class='fraction'>20/20</span>
50
50
  </div>
51
51
 
52
52
 
@@ -54,8 +54,14 @@
54
54
  <p class="quiet">
55
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
56
  </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
57
63
  </div>
58
- <div class='status-line medium'></div>
64
+ <div class='status-line high'></div>
59
65
  <div class="pad1">
60
66
  <table class="coverage-summary">
61
67
  <thead>
@@ -73,65 +79,20 @@
73
79
  </tr>
74
80
  </thead>
75
81
  <tbody><tr>
76
- <td class="file high" data-value="CommonModel.ts"><a href="CommonModel.ts.html">CommonModel.ts</a></td>
77
- <td data-value="100" class="pic high">
78
- <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
79
- </td>
80
- <td data-value="100" class="pct high">100%</td>
81
- <td data-value="19" class="abs high">19/19</td>
82
- <td data-value="50" class="pct medium">50%</td>
83
- <td data-value="8" class="abs medium">4/8</td>
84
- <td data-value="100" class="pct high">100%</td>
85
- <td data-value="6" class="abs high">6/6</td>
86
- <td data-value="100" class="pct high">100%</td>
87
- <td data-value="19" class="abs high">19/19</td>
88
- </tr>
89
-
90
- <tr>
91
82
  <td class="file high" data-value="LoadingModel.ts"><a href="LoadingModel.ts.html">LoadingModel.ts</a></td>
92
83
  <td data-value="95.24" class="pic high">
93
84
  <div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
94
85
  </td>
95
86
  <td data-value="95.24" class="pct high">95.24%</td>
96
87
  <td data-value="21" class="abs high">20/21</td>
97
- <td data-value="90" class="pct high">90%</td>
98
- <td data-value="10" class="abs high">9/10</td>
88
+ <td data-value="87.5" class="pct high">87.5%</td>
89
+ <td data-value="8" class="abs high">7/8</td>
99
90
  <td data-value="85.71" class="pct high">85.71%</td>
100
91
  <td data-value="7" class="abs high">6/7</td>
101
92
  <td data-value="100" class="pct high">100%</td>
102
93
  <td data-value="20" class="abs high">20/20</td>
103
94
  </tr>
104
95
 
105
- <tr>
106
- <td class="file high" data-value="SelectModel.ts"><a href="SelectModel.ts.html">SelectModel.ts</a></td>
107
- <td data-value="90.91" class="pic high">
108
- <div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
109
- </td>
110
- <td data-value="90.91" class="pct high">90.91%</td>
111
- <td data-value="66" class="abs high">60/66</td>
112
- <td data-value="83.33" class="pct high">83.33%</td>
113
- <td data-value="18" class="abs high">15/18</td>
114
- <td data-value="84.62" class="pct high">84.62%</td>
115
- <td data-value="26" class="abs high">22/26</td>
116
- <td data-value="90.16" class="pct high">90.16%</td>
117
- <td data-value="61" class="abs high">55/61</td>
118
- </tr>
119
-
120
- <tr>
121
- <td class="file low" data-value="TextModel.ts"><a href="TextModel.ts.html">TextModel.ts</a></td>
122
- <td data-value="49.12" class="pic low">
123
- <div class="chart"><div class="cover-fill" style="width: 49%"></div><div class="cover-empty" style="width: 51%"></div></div>
124
- </td>
125
- <td data-value="49.12" class="pct low">49.12%</td>
126
- <td data-value="57" class="abs low">28/57</td>
127
- <td data-value="30.43" class="pct low">30.43%</td>
128
- <td data-value="23" class="abs low">7/23</td>
129
- <td data-value="23.81" class="pct low">23.81%</td>
130
- <td data-value="21" class="abs low">5/21</td>
131
- <td data-value="48.08" class="pct low">48.08%</td>
132
- <td data-value="52" class="abs low">25/52</td>
133
- </tr>
134
-
135
96
  </tbody>
136
97
  </table>
137
98
  </div>
@@ -139,10 +100,9 @@
139
100
  </div><!-- /wrapper -->
140
101
  <div class='footer quiet pad2 space-top1 center small'>
141
102
  Code coverage generated by
142
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
143
- at Sat Jun 04 2022 17:01:00 GMT+0000 (Coordinated Universal Time)
103
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
+ at 2022-10-29T12:13:47.151Z
144
105
  </div>
145
- </div>
146
106
  <script src="../prettify.js"></script>
147
107
  <script>
148
108
  window.onload = function () {
@@ -518,15 +518,15 @@ SF:src/functions.ts
518
518
  FN:10,safeCall
519
519
  FNF:1
520
520
  FNH:1
521
- FNDA:17,safeCall
522
- DA:10,1
523
- DA:11,17
524
- DA:12,0
521
+ FNDA:21,safeCall
522
+ DA:10,2
523
+ DA:11,21
524
+ DA:12,3
525
525
  LF:3
526
- LH:2
527
- BRDA:11,0,0,0
526
+ LH:3
527
+ BRDA:11,0,0,3
528
528
  BRF:1
529
- BRH:0
529
+ BRH:1
530
530
  end_of_record
531
531
  TN:
532
532
  SF:src/observersMap.ts
@@ -1101,9 +1101,9 @@ FN:75,(anonymous_12)
1101
1101
  FN:79,(anonymous_13)
1102
1102
  FNF:14
1103
1103
  FNH:10
1104
- FNDA:18,setTimeoutAsync
1105
- FNDA:18,(anonymous_1)
1106
- FNDA:18,(anonymous_2)
1104
+ FNDA:22,setTimeoutAsync
1105
+ FNDA:22,(anonymous_1)
1106
+ FNDA:22,(anonymous_2)
1107
1107
  FNDA:0,(anonymous_3)
1108
1108
  FNDA:0,setTimeoutFramesAsync
1109
1109
  FNDA:0,(anonymous_5)
@@ -1115,23 +1115,23 @@ FNDA:4,(anonymous_10)
1115
1115
  FNDA:3,(anonymous_11)
1116
1116
  FNDA:1,(anonymous_12)
1117
1117
  FNDA:3,(anonymous_13)
1118
- DA:2,6
1119
- DA:3,18
1120
- DA:6,18
1121
- DA:7,18
1122
- DA:8,18
1123
- DA:9,18
1124
- DA:10,18
1125
- DA:11,18
1126
- DA:16,18
1118
+ DA:2,7
1119
+ DA:3,22
1120
+ DA:6,22
1121
+ DA:7,22
1122
+ DA:8,22
1123
+ DA:9,22
1124
+ DA:10,22
1125
+ DA:11,22
1126
+ DA:16,22
1127
1127
  DA:17,0
1128
1128
  DA:18,0
1129
1129
  DA:19,0
1130
1130
  DA:20,0
1131
1131
  DA:21,0
1132
1132
  DA:24,0
1133
- DA:27,18
1134
- DA:32,6
1133
+ DA:27,22
1134
+ DA:32,7
1135
1135
  DA:33,0
1136
1136
  DA:34,0
1137
1137
  DA:37,0
@@ -1141,7 +1141,7 @@ DA:41,0
1141
1141
  DA:42,0
1142
1142
  DA:44,0
1143
1143
  DA:48,0
1144
- DA:52,6
1144
+ DA:52,7
1145
1145
  DA:53,3
1146
1146
  DA:55,3
1147
1147
  DA:56,3
@@ -1162,8 +1162,8 @@ DA:80,3
1162
1162
  DA:81,3
1163
1163
  LF:45
1164
1164
  LH:30
1165
- BRDA:2,0,0,18
1166
- BRDA:10,1,0,18
1165
+ BRDA:2,0,0,22
1166
+ BRDA:10,1,0,22
1167
1167
  BRDA:16,2,0,0
1168
1168
  BRDA:20,3,0,0
1169
1169
  BRDA:33,4,0,0
@@ -3135,6 +3135,94 @@ BRF:54
3135
3135
  BRH:24
3136
3136
  end_of_record
3137
3137
  TN:
3138
+ SF:src/queue/tasks.ts
3139
+ FN:17,(anonymous_0)
3140
+ FN:64,(anonymous_1)
3141
+ FN:78,(anonymous_2)
3142
+ FN:23,(anonymous_3)
3143
+ FN:24,(anonymous_4)
3144
+ FN:26,(anonymous_5)
3145
+ FN:31,(anonymous_6)
3146
+ FN:44,(anonymous_7)
3147
+ FN:45,(anonymous_8)
3148
+ FNF:9
3149
+ FNH:8
3150
+ FNDA:6,(anonymous_0)
3151
+ FNDA:4,(anonymous_1)
3152
+ FNDA:4,(anonymous_2)
3153
+ FNDA:9,(anonymous_3)
3154
+ FNDA:6,(anonymous_4)
3155
+ FNDA:0,(anonymous_5)
3156
+ FNDA:5,(anonymous_6)
3157
+ FNDA:2,(anonymous_7)
3158
+ FNDA:2,(anonymous_8)
3159
+ DA:11,1
3160
+ DA:13,6
3161
+ DA:14,6
3162
+ DA:15,6
3163
+ DA:17,6
3164
+ DA:18,6
3165
+ DA:19,2
3166
+ DA:23,9
3167
+ DA:24,6
3168
+ DA:27,0
3169
+ DA:28,0
3170
+ DA:32,5
3171
+ DA:33,1
3172
+ DA:36,4
3173
+ DA:38,2
3174
+ DA:44,2
3175
+ DA:45,2
3176
+ DA:46,2
3177
+ DA:47,2
3178
+ DA:48,2
3179
+ DA:49,2
3180
+ DA:51,0
3181
+ DA:52,0
3182
+ DA:57,2
3183
+ DA:58,2
3184
+ DA:61,2
3185
+ DA:64,6
3186
+ DA:65,4
3187
+ DA:66,4
3188
+ DA:67,4
3189
+ DA:68,4
3190
+ DA:70,0
3191
+ DA:71,0
3192
+ DA:73,4
3193
+ DA:74,4
3194
+ DA:78,6
3195
+ DA:79,4
3196
+ DA:80,2
3197
+ DA:83,2
3198
+ DA:84,2
3199
+ DA:85,0
3200
+ DA:88,2
3201
+ LF:42
3202
+ LH:35
3203
+ BRDA:70,0,0,0
3204
+ BRDA:70,0,1,0
3205
+ BRDA:70,1,0,0
3206
+ BRDA:70,1,1,0
3207
+ BRDA:70,2,0,0
3208
+ BRDA:70,2,1,0
3209
+ BRDA:70,2,2,0
3210
+ BRDA:79,3,0,2
3211
+ BRDA:79,4,0,4
3212
+ BRDA:79,4,1,2
3213
+ BRDA:84,5,0,0
3214
+ BRDA:84,6,0,2
3215
+ BRDA:84,6,1,2
3216
+ BRDA:84,6,2,2
3217
+ BRDA:18,7,0,2
3218
+ BRDA:18,8,0,6
3219
+ BRDA:18,8,1,5
3220
+ BRDA:32,9,0,1
3221
+ BRDA:36,10,0,2
3222
+ BRF:19
3223
+ BRH:11
3224
+ end_of_record
3225
+ TN:
3138
3226
  SF:src/validation/ValidationErrors.ts
3139
3227
  FN:3,(anonymous_0)
3140
3228
  FN:24,(anonymous_1)
@@ -0,0 +1,3 @@
1
+ import { Getter } from './types';
2
+ export declare function assert(condition: boolean, error: Getter<string | Error>, objectToLog?: Getter<any>): asserts condition;
3
+ //# sourceMappingURL=assert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAetH"}
package/lib/assert.js ADDED
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assert = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const types_1 = require("./types");
6
+ const logger_1 = tslib_1.__importDefault(require("./logger"));
7
+ function assert(condition, error, objectToLog) {
8
+ if (condition) {
9
+ return;
10
+ }
11
+ const e = types_1.Getter.getValue(error);
12
+ if (objectToLog) {
13
+ logger_1.default.error('Assertion failed:', e, types_1.Getter.getValue(objectToLog));
14
+ }
15
+ if (typeof e === 'string') {
16
+ throw new Error(e);
17
+ }
18
+ throw e;
19
+ }
20
+ exports.assert = assert;
21
+ //# sourceMappingURL=assert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.js","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":";;;;AAAA,mCAAiC;AACjC,8DAA8B;AAE9B,SAAgB,MAAM,CAAC,SAAkB,EAAE,KAA6B,EAAE,WAAyB;IAC/F,IAAI,SAAS,EAAE;QACX,OAAO;KACV;IAED,MAAM,CAAC,GAAG,cAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,WAAW,EAAE;QACb,gBAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,cAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;KACtE;IAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;KACtB;IAED,MAAM,CAAC,CAAC;AACZ,CAAC;AAfD,wBAeC"}
@@ -0,0 +1,17 @@
1
+ import type { ILogger } from '../logger';
2
+ declare type Factory<T> = () => Promise<T>;
3
+ export declare class TasksQueue<T> {
4
+ readonly limit: number;
5
+ private readonly _items;
6
+ private _running;
7
+ private _logger;
8
+ constructor(limit: number);
9
+ get isFull(): boolean;
10
+ get running(): number;
11
+ addLogger(logger: ILogger): this;
12
+ enqueue(factory: Factory<T>, name?: string): Promise<T>;
13
+ private _runFactory;
14
+ private _tryRunNext;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/queue/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,aAAK,OAAO,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAQnC,qBAAa,UAAU,CAAC,CAAC;IAMT,QAAQ,CAAC,KAAK,EAAE,MAAM;IAJlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,OAAO,CAAwB;gBAElB,KAAK,EAAE,MAAM;IAMlC,IAAW,MAAM,YAA0C;IAC3D,IAAW,OAAO,WAA4B;IAE9C,SAAS,CAAC,MAAM,EAAE,OAAO;IAKlB,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAiC9D,OAAO,CAAC,WAAW,CAYjB;IAEF,OAAO,CAAC,WAAW,CAWjB;CAEL"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TasksQueue = void 0;
4
+ class TasksQueue {
5
+ constructor(limit) {
6
+ this.limit = limit;
7
+ this._items = [];
8
+ this._running = 0;
9
+ this._logger = null;
10
+ this._runFactory = async (factory, name) => {
11
+ var _a;
12
+ this._running++;
13
+ try {
14
+ const result = await factory();
15
+ return result;
16
+ }
17
+ catch (err) {
18
+ (_a = this._logger) === null || _a === void 0 ? void 0 : _a.warn(`Factory "${name || factory.name || '<unknown>'}" thrown. Rethrowing...`);
19
+ throw err;
20
+ }
21
+ finally {
22
+ this._running--;
23
+ this._tryRunNext();
24
+ }
25
+ };
26
+ this._tryRunNext = async () => {
27
+ if (!this._items.length || this.isFull) {
28
+ return;
29
+ }
30
+ const next = this._items.shift();
31
+ if (!next || !next.finish || !next.factory) {
32
+ return;
33
+ }
34
+ await next.finish(this._runFactory(next.factory));
35
+ };
36
+ if (!limit || limit < 0) {
37
+ throw new Error('TasksQueue: limit should be a positive number');
38
+ }
39
+ }
40
+ get isFull() { return this._running >= this.limit; }
41
+ get running() { return this._running; }
42
+ addLogger(logger) {
43
+ this._logger = logger;
44
+ return this;
45
+ }
46
+ enqueue(factory, name) {
47
+ if (typeof factory !== 'function') {
48
+ throw new Error('Invalid arg: factory not a function');
49
+ }
50
+ if (this.isFull) {
51
+ const item = {
52
+ factory,
53
+ finish: undefined,
54
+ name,
55
+ };
56
+ const waitPromise = new Promise((resolve, reject) => {
57
+ item.finish = async (res) => {
58
+ try {
59
+ const rr = await res;
60
+ resolve(rr);
61
+ return rr;
62
+ }
63
+ catch (err) {
64
+ reject(err);
65
+ throw err;
66
+ }
67
+ };
68
+ });
69
+ this._items.push(item);
70
+ return waitPromise;
71
+ }
72
+ return this._runFactory(factory);
73
+ }
74
+ }
75
+ exports.TasksQueue = TasksQueue;
76
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/queue/tasks.ts"],"names":[],"mappings":";;;AAUA,MAAa,UAAU;IAMnB,YAAqB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAJjB,WAAM,GAAmB,EAAE,CAAC;QACrC,aAAQ,GAAG,CAAC,CAAC;QACb,YAAO,GAAmB,IAAI,CAAC;QAiD/B,gBAAW,GAAG,KAAK,EAAE,OAAmB,EAAE,IAAa,EAAc,EAAE;;YAC3E,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;aACjB;YAAC,OAAO,GAAG,EAAE;gBACV,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,YAAY,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,WAAW,yBAAyB,CAAC,CAAC;gBAC7F,MAAM,GAAG,CAAC;aACb;oBAAS;gBACN,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC,CAAC;QAEM,gBAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;gBACpC,OAAO;aACV;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACxC,OAAO;aACV;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC;QAvEE,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;SACpE;IACL,CAAC;IAED,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,IAAW,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,SAAS,CAAC,MAAe;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,OAAmB,EAAE,IAAa;QAC7C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;SAC1D;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YAEb,MAAM,IAAI,GAAiB;gBACvB,OAAO;gBACP,MAAM,EAAE,SAAS;gBACjB,IAAI;aACP,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnD,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE;oBACxB,IAAI;wBACA,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC;wBACrB,OAAO,CAAC,EAAE,CAAC,CAAC;wBACZ,OAAO,EAAE,CAAC;qBACb;oBAAC,OAAO,GAAG,EAAE;wBACV,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,MAAM,GAAG,CAAC;qBACb;gBACL,CAAC,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,WAAW,CAAC;SACtB;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CA6BJ;AAhFD,gCAgFC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "1.6.1",
3
+ "version": "1.6.3",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
package/src/.DS_Store CHANGED
Binary file
package/src/assert.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { Getter } from './types';
2
+ import logger from './logger';
3
+
4
+ export function assert(condition: boolean, error: Getter<string | Error>, objectToLog?: Getter<any>): asserts condition {
5
+ if (condition) {
6
+ return;
7
+ }
8
+
9
+ const e = Getter.getValue(error);
10
+ if (objectToLog) {
11
+ logger.error('Assertion failed:', e, Getter.getValue(objectToLog));
12
+ }
13
+
14
+ if (typeof e === 'string') {
15
+ throw new Error(e);
16
+ }
17
+
18
+ throw e;
19
+ }
@@ -0,0 +1,87 @@
1
+ import { TasksQueue } from '../tasks';
2
+ import { setTimeoutAsync } from '../../async/timeout';
3
+ import { safeCall } from '../../functions';
4
+ import 'jest-extended';
5
+
6
+ describe('TasksQueue', () => {
7
+
8
+ const createFactory = <T>(res: T, cb?: () => void) => {
9
+ return async () => {
10
+ await setTimeoutAsync(50);
11
+ safeCall(cb);
12
+ return res;
13
+ };
14
+ };
15
+
16
+ it('correctly initializes', async () => {
17
+ const fnZero = async () => {
18
+ return new TasksQueue(0);
19
+ };
20
+ const fnNegative = async () => {
21
+ return new TasksQueue(-12);
22
+ };
23
+ const fnPositive = async () => {
24
+ return new TasksQueue(12);
25
+ };
26
+
27
+ await expect(fnZero()).rejects.toThrow();
28
+ await expect(fnNegative()).rejects.toThrow();
29
+ await expect(fnPositive()).resolves.not.toBeNull();
30
+
31
+ const failEnqueue = async () => {
32
+ const q = new TasksQueue<number>(123);
33
+ q.enqueue(null as any);
34
+ };
35
+
36
+ await expect(failEnqueue()).rejects.toThrow();
37
+ });
38
+
39
+ it('runs without limit', async () => {
40
+ const queue = new TasksQueue(5);
41
+
42
+ expect(queue.isFull).toBeFalsy();
43
+ expect(queue.running).toBe(0);
44
+
45
+ const val1 = 123;
46
+
47
+ const res1 = queue.enqueue(createFactory(val1));
48
+
49
+ expect(queue.isFull).toBeFalsy();
50
+ expect(queue.running).toBe(1);
51
+
52
+ await expect(res1).resolves.toBe(val1);
53
+ });
54
+
55
+ it('runs with limit 1', async () => {
56
+ const queue = new TasksQueue(1);
57
+
58
+ const val1 = 123;
59
+ const cb1 = jest.fn();
60
+ const res1 = queue.enqueue(createFactory(val1, cb1));
61
+
62
+ const val2 = 321;
63
+ const cb2 = jest.fn();
64
+ const res2 = queue.enqueue(createFactory(val2, cb2));
65
+
66
+ const val3 = 111;
67
+ const cb3 = jest.fn();
68
+ const res3 = queue.enqueue(createFactory(val3, cb3));
69
+
70
+ expect(queue.isFull).toBeTruthy();
71
+ expect(queue.running).toBe(1);
72
+
73
+ await expect(res1).resolves.toBe(val1);
74
+ expect(queue.running).toBe(1);
75
+
76
+ await expect(res2).resolves.toBe(val2);
77
+
78
+ expect(queue.running).toBe(1);
79
+ await expect(res3).resolves.toBe(val3);
80
+
81
+ expect(queue.running).toBe(0);
82
+
83
+ expect(cb1).toHaveBeenCalledBefore(cb2);
84
+ expect(cb2).toHaveBeenCalledBefore(cb3);
85
+ expect(cb3).toHaveBeenCalled();
86
+ });
87
+ });
@@ -0,0 +1,91 @@
1
+ import type { ILogger } from '../logger';
2
+
3
+ type Factory<T> = () => Promise<T>;
4
+
5
+ type QueueItem<T> = {
6
+ factory: Factory<T>;
7
+ finish?: (res: Promise<T>) => Promise<T>;
8
+ name?: string;
9
+ };
10
+
11
+ export class TasksQueue<T> {
12
+
13
+ private readonly _items: QueueItem<T>[] = [];
14
+ private _running = 0;
15
+ private _logger: ILogger | null = null;
16
+
17
+ constructor(readonly limit: number) {
18
+ if (!limit || limit < 0) {
19
+ throw new Error('TasksQueue: limit should be a positive number');
20
+ }
21
+ }
22
+
23
+ public get isFull() { return this._running >= this.limit; }
24
+ public get running() { return this._running; }
25
+
26
+ addLogger(logger: ILogger) {
27
+ this._logger = logger;
28
+ return this;
29
+ }
30
+
31
+ public enqueue(factory: Factory<T>, name?: string): Promise<T> {
32
+ if (typeof factory !== 'function') {
33
+ throw new Error('Invalid arg: factory not a function');
34
+ }
35
+
36
+ if (this.isFull) {
37
+
38
+ const item: QueueItem<T> = {
39
+ factory,
40
+ finish: undefined,
41
+ name,
42
+ };
43
+
44
+ const waitPromise = new Promise<T>((resolve, reject) => {
45
+ item.finish = async (res) => {
46
+ try {
47
+ const rr = await res;
48
+ resolve(rr);
49
+ return rr;
50
+ } catch (err) {
51
+ reject(err);
52
+ throw err;
53
+ }
54
+ };
55
+ });
56
+
57
+ this._items.push(item);
58
+ return waitPromise;
59
+ }
60
+
61
+ return this._runFactory(factory);
62
+ }
63
+
64
+ private _runFactory = async (factory: Factory<T>, name?: string): Promise<T> => {
65
+ this._running++;
66
+ try {
67
+ const result = await factory();
68
+ return result;
69
+ } catch (err) {
70
+ this._logger?.warn(`Factory "${name || factory.name || '<unknown>'}" thrown. Rethrowing...`);
71
+ throw err;
72
+ } finally {
73
+ this._running--;
74
+ this._tryRunNext();
75
+ }
76
+ };
77
+
78
+ private _tryRunNext = async () => {
79
+ if (!this._items.length || this.isFull) {
80
+ return;
81
+ }
82
+
83
+ const next = this._items.shift();
84
+ if (!next || !next.finish || !next.factory) {
85
+ return;
86
+ }
87
+
88
+ await next.finish(this._runFactory(next.factory));
89
+ };
90
+
91
+ }