@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.
- package/coverage/clover.xml +66 -21
- package/coverage/coverage-final.json +3 -2
- package/coverage/lcov-report/__tests__/helpers/expect.ts.html +94 -0
- package/coverage/lcov-report/__tests__/helpers/index.html +131 -0
- package/coverage/lcov-report/__tests__/helpers/main.ts.html +121 -0
- package/coverage/lcov-report/async/arrays.ts.html +199 -0
- package/coverage/lcov-report/async/index.html +19 -19
- package/coverage/lcov-report/async/timeout.ts.html +121 -19
- package/coverage/lcov-report/dates/calc.ts.html +301 -0
- package/coverage/lcov-report/dates/convert.ts.html +658 -0
- package/coverage/lcov-report/dates/datex.ts.html +211 -0
- package/coverage/lcov-report/dates/format.ts.html +403 -0
- package/coverage/lcov-report/dates/index.html +251 -0
- package/coverage/lcov-report/dates/index.ts.html +112 -0
- package/coverage/lcov-report/dates/parse.ts.html +157 -0
- package/coverage/lcov-report/dates/period.ts.html +154 -0
- package/coverage/lcov-report/dates/shift.ts.html +355 -0
- package/coverage/lcov-report/dates/types.ts.html +181 -0
- package/coverage/lcov-report/dates/yearDate.ts.html +193 -0
- package/coverage/lcov-report/fields/index.html +116 -0
- package/coverage/lcov-report/fields/update.ts.html +457 -0
- package/coverage/lcov-report/functions/disposer.ts.html +376 -0
- package/coverage/lcov-report/functions/index.html +116 -0
- package/coverage/lcov-report/functions/safeCall.ts.html +103 -0
- package/coverage/lcov-report/index.html +26 -26
- package/coverage/lcov-report/lazy/index.html +131 -0
- package/coverage/lcov-report/lazy/light.ts.html +172 -0
- package/coverage/lcov-report/lazy/promise.ts.html +241 -0
- package/coverage/lcov-report/lazy/singleton.ts.html +181 -0
- package/coverage/lcov-report/logger/batch.ts.html +112 -0
- package/coverage/lcov-report/logger/console.ts.html +241 -0
- package/coverage/lcov-report/logger/index.html +80 -20
- package/coverage/lcov-report/logger/index.ts.html +48 -48
- package/coverage/lcov-report/logger/named.ts.html +226 -0
- package/coverage/lcov-report/logger/proxy.ts.html +172 -0
- package/coverage/lcov-report/math/arrays.ts.html +907 -0
- package/coverage/lcov-report/math/calc.ts.html +292 -0
- package/coverage/lcov-report/math/distribution.ts.html +145 -0
- package/coverage/lcov-report/math/index.html +161 -0
- package/coverage/lcov-report/math/index.ts.html +166 -0
- package/coverage/lcov-report/observing/event.ts.html +358 -0
- package/coverage/lcov-report/observing/index.html +116 -0
- package/coverage/lcov-report/observing/transition.ts.html +634 -0
- package/coverage/lcov-report/queue/index.html +18 -18
- package/coverage/lcov-report/queue/tasks.ts.html +358 -0
- package/coverage/lcov-report/src/__tests__/helpers/expect.ts.html +1 -1
- package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
- package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
- package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
- package/coverage/lcov-report/src/async/index.html +1 -1
- package/coverage/lcov-report/src/async/timeout.ts.html +13 -13
- package/coverage/lcov-report/src/cache.ts.html +1 -1
- package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
- package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
- package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
- package/coverage/lcov-report/src/dates/format.ts.html +1 -1
- package/coverage/lcov-report/src/dates/index.html +1 -1
- package/coverage/lcov-report/src/dates/index.ts.html +1 -1
- package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
- package/coverage/lcov-report/src/dates/period.ts.html +1 -1
- package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
- package/coverage/lcov-report/src/dates/types.ts.html +1 -1
- package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
- package/coverage/lcov-report/src/disposer.ts.html +1 -1
- package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
- package/coverage/lcov-report/src/event.ts.html +1 -1
- package/coverage/lcov-report/src/fields/index.html +1 -1
- package/coverage/lcov-report/src/fields/update.ts.html +1 -1
- package/coverage/lcov-report/src/functions.ts.html +13 -13
- package/coverage/lcov-report/src/index.html +16 -16
- package/coverage/lcov-report/src/lazy/index.html +1 -1
- package/coverage/lcov-report/src/lazy/light.ts.html +1 -1
- package/coverage/lcov-report/src/lazy/observable.ts.html +1 -1
- package/coverage/lcov-report/src/lazy/promise.ts.html +1 -1
- package/coverage/lcov-report/src/lazy/singleton.ts.html +1 -1
- package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
- package/coverage/lcov-report/src/logger/console.ts.html +1 -1
- package/coverage/lcov-report/src/logger/index.html +1 -1
- package/coverage/lcov-report/src/logger/index.ts.html +1 -1
- package/coverage/lcov-report/src/logger/named.ts.html +1 -1
- package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
- package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
- package/coverage/lcov-report/src/math/calc.ts.html +1 -1
- package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
- package/coverage/lcov-report/src/math/index.html +1 -1
- package/coverage/lcov-report/src/math/index.ts.html +1 -1
- package/coverage/lcov-report/src/observersMap.ts.html +1 -1
- package/coverage/lcov-report/src/observingCache.ts.html +1 -1
- package/coverage/lcov-report/src/queue/index.html +24 -9
- package/coverage/lcov-report/src/queue/parallel.ts.html +1 -1
- package/coverage/lcov-report/src/queue/tasks.ts.html +358 -0
- package/coverage/lcov-report/src/tempoCache.ts.html +1 -1
- package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
- package/coverage/lcov-report/src/types/comparator.ts.html +103 -0
- package/coverage/lcov-report/src/types/getter.ts.html +127 -0
- package/coverage/lcov-report/src/types/index.html +146 -0
- package/coverage/lcov-report/src/types/index.ts.html +112 -0
- package/coverage/lcov-report/src/types.ts.html +1 -1
- package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
- package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
- package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
- package/coverage/lcov-report/src/validation/index.html +1 -1
- package/coverage/lcov-report/src/validation/index.ts.html +1 -1
- package/coverage/lcov-report/src/validation/types.ts.html +1 -1
- package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
- package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/TextModel.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
- package/coverage/lcov-report/src/viewModels/index.html +1 -1
- package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
- package/coverage/lcov-report/structures/helpers/enum.ts.html +454 -0
- package/coverage/lcov-report/structures/helpers/index.html +116 -0
- package/coverage/lcov-report/structures/index.html +116 -0
- package/coverage/lcov-report/structures/promiseCache.ts.html +628 -0
- package/coverage/lcov-report/structures/queue/index.html +116 -0
- package/coverage/lcov-report/structures/queue/parallel.ts.html +511 -0
- package/coverage/lcov-report/structures/subscribersMap.ts.html +400 -0
- package/coverage/lcov-report/structures/subscribersPromiseCache.ts.html +562 -0
- package/coverage/lcov-report/structures/tempoCache.ts.html +139 -0
- package/coverage/lcov-report/tasks.ts.html +355 -0
- package/coverage/lcov-report/types/comparator.ts.html +103 -0
- package/coverage/lcov-report/types/getter.ts.html +127 -0
- package/coverage/lcov-report/types/index.html +146 -0
- package/coverage/lcov-report/types/index.ts.html +112 -0
- package/coverage/lcov-report/validation/ValidationErrors.ts.html +163 -0
- package/coverage/lcov-report/validation/creditCard.ts.html +160 -0
- package/coverage/lcov-report/validation/helpers.ts.html +226 -0
- package/coverage/lcov-report/validation/index.html +107 -12
- package/coverage/lcov-report/validation/index.ts.html +13 -8
- package/coverage/lcov-report/validation/types.ts.html +139 -0
- package/coverage/lcov-report/validation/validators.ts.html +250 -0
- package/coverage/lcov-report/validation/wrappers.ts.html +163 -0
- package/coverage/lcov-report/viewModels/LoadingModel.ts.html +15 -7
- package/coverage/lcov-report/viewModels/index.html +19 -59
- package/coverage/lcov.info +112 -24
- package/lib/assert.d.ts +3 -0
- package/lib/assert.d.ts.map +1 -0
- package/lib/assert.js +21 -0
- package/lib/assert.js.map +1 -0
- package/lib/queue/tasks.d.ts +17 -0
- package/lib/queue/tasks.d.ts.map +1 -0
- package/lib/queue/tasks.js +76 -0
- package/lib/queue/tasks.js.map +1 -0
- package/package.json +1 -1
- package/src/.DS_Store +0 -0
- package/src/assert.ts +19 -0
- package/src/queue/__tests__/tasks.test.ts +87 -0
- 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">
|
|
26
|
+
<span class="strong">95.24% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
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">
|
|
33
|
+
<span class="strong">87.5% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
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">
|
|
40
|
+
<span class="strong">85.71% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
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">
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
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
|
|
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="
|
|
98
|
-
<td data-value="
|
|
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
|
|
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 () {
|
package/coverage/lcov.info
CHANGED
|
@@ -518,15 +518,15 @@ SF:src/functions.ts
|
|
|
518
518
|
FN:10,safeCall
|
|
519
519
|
FNF:1
|
|
520
520
|
FNH:1
|
|
521
|
-
FNDA:
|
|
522
|
-
DA:10,
|
|
523
|
-
DA:11,
|
|
524
|
-
DA:12,
|
|
521
|
+
FNDA:21,safeCall
|
|
522
|
+
DA:10,2
|
|
523
|
+
DA:11,21
|
|
524
|
+
DA:12,3
|
|
525
525
|
LF:3
|
|
526
|
-
LH:
|
|
527
|
-
BRDA:11,0,0,
|
|
526
|
+
LH:3
|
|
527
|
+
BRDA:11,0,0,3
|
|
528
528
|
BRF:1
|
|
529
|
-
BRH:
|
|
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:
|
|
1105
|
-
FNDA:
|
|
1106
|
-
FNDA:
|
|
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,
|
|
1119
|
-
DA:3,
|
|
1120
|
-
DA:6,
|
|
1121
|
-
DA:7,
|
|
1122
|
-
DA:8,
|
|
1123
|
-
DA:9,
|
|
1124
|
-
DA:10,
|
|
1125
|
-
DA:11,
|
|
1126
|
-
DA:16,
|
|
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,
|
|
1134
|
-
DA:32,
|
|
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,
|
|
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,
|
|
1166
|
-
BRDA:10,1,0,
|
|
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)
|
package/lib/assert.d.ts
ADDED
|
@@ -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
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
|
+
}
|