@zajno/common 1.4.16 → 1.4.17
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 +27 -15
- package/coverage/coverage-final.json +2 -1
- package/coverage/lcov-report/index.html +18 -18
- 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 +12 -12
- 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 +1 -1
- package/coverage/lcov-report/src/index.html +24 -9
- package/coverage/lcov-report/src/lazy.light.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/tempoCache.ts.html +134 -0
- package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
- 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/tempoCache.ts.html +134 -0
- package/coverage/lcov-report/timer.ts.html +200 -0
- package/coverage/lcov.info +43 -17
- package/lib/tempoCache.d.ts +10 -0
- package/lib/tempoCache.d.ts.map +1 -0
- package/lib/tempoCache.js +21 -0
- package/lib/tempoCache.js.map +1 -0
- package/lib/timeHelper.d.ts +0 -7
- package/lib/timeHelper.d.ts.map +1 -1
- package/lib/timeHelper.js +3 -19
- package/lib/timeHelper.js.map +1 -1
- package/lib/timer.d.ts +15 -0
- package/lib/timer.d.ts.map +1 -0
- package/lib/timer.js +36 -0
- package/lib/timer.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/tempoCache.test.ts +31 -0
- package/src/tempoCache.ts +18 -0
- package/src/timeHelper.ts +3 -18
- package/src/timer.ts +40 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for timer.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="index.html">All files</a> timer.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">93.75% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>15/16</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/1</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">85.71% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>6/7</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">93.75% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>15/16</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
</div>
|
|
58
|
+
<div class='status-line high'></div>
|
|
59
|
+
<pre><table class="coverage">
|
|
60
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
61
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
62
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
63
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
64
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
65
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
66
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
67
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
68
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
69
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
70
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
71
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
72
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
73
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
74
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
75
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
76
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
77
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
78
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
79
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
80
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
81
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
82
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
83
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
84
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
85
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
86
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
87
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
88
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
89
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
90
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
91
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
92
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
93
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
94
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
95
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
96
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
97
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
98
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
99
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
100
|
+
<a name='L41'></a><a href='#L41'>41</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
101
|
+
<span class="cline-any cline-yes">1x</span>
|
|
102
|
+
<span class="cline-any cline-neutral"> </span>
|
|
103
|
+
<span class="cline-any cline-yes">1x</span>
|
|
104
|
+
<span class="cline-any cline-yes">1x</span>
|
|
105
|
+
<span class="cline-any cline-neutral"> </span>
|
|
106
|
+
<span class="cline-any cline-yes">1x</span>
|
|
107
|
+
<span class="cline-any cline-yes">1x</span>
|
|
108
|
+
<span class="cline-any cline-neutral"> </span>
|
|
109
|
+
<span class="cline-any cline-yes">1x</span>
|
|
110
|
+
<span class="cline-any cline-yes">1x</span>
|
|
111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
114
|
+
<span class="cline-any cline-no"> </span>
|
|
115
|
+
<span class="cline-any cline-neutral"> </span>
|
|
116
|
+
<span class="cline-any cline-neutral"> </span>
|
|
117
|
+
<span class="cline-any cline-neutral"> </span>
|
|
118
|
+
<span class="cline-any cline-yes">1x</span>
|
|
119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
121
|
+
<span class="cline-any cline-neutral"> </span>
|
|
122
|
+
<span class="cline-any cline-yes">1x</span>
|
|
123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
124
|
+
<span class="cline-any cline-neutral"> </span>
|
|
125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
126
|
+
<span class="cline-any cline-yes">1x</span>
|
|
127
|
+
<span class="cline-any cline-neutral"> </span>
|
|
128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
129
|
+
<span class="cline-any cline-yes">1x</span>
|
|
130
|
+
<span class="cline-any cline-yes">1x</span>
|
|
131
|
+
<span class="cline-any cline-yes">1x</span>
|
|
132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
133
|
+
<span class="cline-any cline-neutral"> </span>
|
|
134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
135
|
+
<span class="cline-any cline-neutral"> </span>
|
|
136
|
+
<span class="cline-any cline-yes">2x</span>
|
|
137
|
+
<span class="cline-any cline-yes">2x</span>
|
|
138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
140
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { IDisposable } from './disposer';
|
|
141
|
+
import { Event, EventHandler, IEvent } from './event';
|
|
142
|
+
|
|
143
|
+
export class Timer implements IDisposable, IEvent<number> {
|
|
144
|
+
private readonly _event = new Event<number>();
|
|
145
|
+
|
|
146
|
+
private _now: number = Date.now();
|
|
147
|
+
private _handle = null;
|
|
148
|
+
|
|
149
|
+
constructor(readonly interval = <span class="branch-0 cbranch-no" title="branch not covered" >3600 * 1000)</span> {
|
|
150
|
+
this.restart();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
<span class="fstat-no" title="function not covered" > get n</span>ow() {
|
|
154
|
+
<span class="cstat-no" title="statement not covered" > return this._now;</span>
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
on(handler: EventHandler<number>): () => void {
|
|
158
|
+
return this._event.on(handler);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
off(handler: EventHandler<number>): void {
|
|
162
|
+
return this._event.off(handler);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
public restart() {
|
|
166
|
+
this.dispose();
|
|
167
|
+
|
|
168
|
+
// Update _now once an hour
|
|
169
|
+
this._handle = setInterval(() => {
|
|
170
|
+
this._now = Date.now();
|
|
171
|
+
this._event.trigger(this._now);
|
|
172
|
+
}, this.interval);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public dispose(): void {
|
|
176
|
+
clearInterval(this._handle);
|
|
177
|
+
this._handle = null;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
</pre></td></tr></table></pre>
|
|
181
|
+
|
|
182
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
183
|
+
</div><!-- /wrapper -->
|
|
184
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
185
|
+
Code coverage generated by
|
|
186
|
+
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
187
|
+
at Thu Apr 21 2022 11:32:20 GMT+0000 (Coordinated Universal Time)
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
<script src="prettify.js"></script>
|
|
191
|
+
<script>
|
|
192
|
+
window.onload = function () {
|
|
193
|
+
prettyPrint();
|
|
194
|
+
};
|
|
195
|
+
</script>
|
|
196
|
+
<script src="sorter.js"></script>
|
|
197
|
+
<script src="block-navigation.js"></script>
|
|
198
|
+
</body>
|
|
199
|
+
</html>
|
|
200
|
+
|
package/coverage/lcov.info
CHANGED
|
@@ -809,6 +809,32 @@ BRF:26
|
|
|
809
809
|
BRH:16
|
|
810
810
|
end_of_record
|
|
811
811
|
TN:
|
|
812
|
+
SF:src/tempoCache.ts
|
|
813
|
+
FN:7,(anonymous_0)
|
|
814
|
+
FN:9,(anonymous_1)
|
|
815
|
+
FN:11,(anonymous_2)
|
|
816
|
+
FNF:3
|
|
817
|
+
FNH:3
|
|
818
|
+
FNDA:1,(anonymous_0)
|
|
819
|
+
FNDA:8,(anonymous_1)
|
|
820
|
+
FNDA:8,(anonymous_2)
|
|
821
|
+
DA:2,1
|
|
822
|
+
DA:4,1
|
|
823
|
+
DA:5,1
|
|
824
|
+
DA:7,1
|
|
825
|
+
DA:9,8
|
|
826
|
+
DA:12,8
|
|
827
|
+
DA:13,3
|
|
828
|
+
DA:14,3
|
|
829
|
+
DA:16,8
|
|
830
|
+
LF:9
|
|
831
|
+
LH:9
|
|
832
|
+
BRDA:12,0,0,3
|
|
833
|
+
BRDA:12,0,1,5
|
|
834
|
+
BRF:2
|
|
835
|
+
BRH:2
|
|
836
|
+
end_of_record
|
|
837
|
+
TN:
|
|
812
838
|
SF:src/transitionObserver.ts
|
|
813
839
|
FN:25,(anonymous_0)
|
|
814
840
|
FN:122,(anonymous_1)
|
|
@@ -1099,30 +1125,30 @@ FN:37,(anonymous_5)
|
|
|
1099
1125
|
FN:40,(anonymous_6)
|
|
1100
1126
|
FNF:7
|
|
1101
1127
|
FNH:3
|
|
1102
|
-
FNDA:
|
|
1103
|
-
FNDA:
|
|
1104
|
-
FNDA:
|
|
1128
|
+
FNDA:9,setTimeoutAsync
|
|
1129
|
+
FNDA:9,(anonymous_1)
|
|
1130
|
+
FNDA:9,(anonymous_2)
|
|
1105
1131
|
FNDA:0,(anonymous_3)
|
|
1106
1132
|
FNDA:0,setTimeoutFramesAsync
|
|
1107
1133
|
FNDA:0,(anonymous_5)
|
|
1108
1134
|
FNDA:0,(anonymous_6)
|
|
1109
|
-
DA:2,
|
|
1110
|
-
DA:3,
|
|
1111
|
-
DA:6,
|
|
1112
|
-
DA:7,
|
|
1113
|
-
DA:8,
|
|
1114
|
-
DA:9,
|
|
1115
|
-
DA:10,
|
|
1116
|
-
DA:11,
|
|
1117
|
-
DA:16,
|
|
1135
|
+
DA:2,3
|
|
1136
|
+
DA:3,9
|
|
1137
|
+
DA:6,9
|
|
1138
|
+
DA:7,9
|
|
1139
|
+
DA:8,9
|
|
1140
|
+
DA:9,9
|
|
1141
|
+
DA:10,9
|
|
1142
|
+
DA:11,9
|
|
1143
|
+
DA:16,9
|
|
1118
1144
|
DA:17,0
|
|
1119
1145
|
DA:18,0
|
|
1120
1146
|
DA:19,0
|
|
1121
1147
|
DA:20,0
|
|
1122
1148
|
DA:21,0
|
|
1123
1149
|
DA:24,0
|
|
1124
|
-
DA:27,
|
|
1125
|
-
DA:32,
|
|
1150
|
+
DA:27,9
|
|
1151
|
+
DA:32,3
|
|
1126
1152
|
DA:33,0
|
|
1127
1153
|
DA:34,0
|
|
1128
1154
|
DA:37,0
|
|
@@ -1134,11 +1160,11 @@ DA:44,0
|
|
|
1134
1160
|
DA:48,0
|
|
1135
1161
|
LF:26
|
|
1136
1162
|
LH:11
|
|
1137
|
-
BRDA:2,0,0,
|
|
1138
|
-
BRDA:10,1,0,
|
|
1163
|
+
BRDA:2,0,0,9
|
|
1164
|
+
BRDA:10,1,0,9
|
|
1139
1165
|
BRDA:10,1,1,0
|
|
1140
1166
|
BRDA:16,2,0,0
|
|
1141
|
-
BRDA:16,2,1,
|
|
1167
|
+
BRDA:16,2,1,9
|
|
1142
1168
|
BRDA:20,3,0,0
|
|
1143
1169
|
BRDA:20,3,1,0
|
|
1144
1170
|
BRDA:33,4,0,0
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class TempoCache<T> {
|
|
2
|
+
readonly factory: () => T;
|
|
3
|
+
readonly lifetimeMs: number;
|
|
4
|
+
private _expiringAt;
|
|
5
|
+
private _current;
|
|
6
|
+
constructor(factory: () => T, lifetimeMs: number);
|
|
7
|
+
get isExpired(): boolean;
|
|
8
|
+
get current(): T;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=tempoCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempoCache.d.ts","sourceRoot":"","sources":["../src/tempoCache.ts"],"names":[],"mappings":"AACA,qBAAa,UAAU,CAAC,CAAC;IAKT,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM;IAHlE,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAgB;gBAEX,OAAO,EAAE,MAAM,CAAC,EAAW,UAAU,EAAE,MAAM;IAElE,IAAW,SAAS,YAA6C;IAEjE,IAAW,OAAO,MAMjB;CACJ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TempoCache = void 0;
|
|
4
|
+
class TempoCache {
|
|
5
|
+
constructor(factory, lifetimeMs) {
|
|
6
|
+
this.factory = factory;
|
|
7
|
+
this.lifetimeMs = lifetimeMs;
|
|
8
|
+
this._expiringAt = 0; // already expired
|
|
9
|
+
this._current = undefined;
|
|
10
|
+
}
|
|
11
|
+
get isExpired() { return Date.now() >= this._expiringAt; }
|
|
12
|
+
get current() {
|
|
13
|
+
if (this.isExpired) {
|
|
14
|
+
this._current = this.factory();
|
|
15
|
+
this._expiringAt = Date.now() + this.lifetimeMs;
|
|
16
|
+
}
|
|
17
|
+
return this._current;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.TempoCache = TempoCache;
|
|
21
|
+
//# sourceMappingURL=tempoCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempoCache.js","sourceRoot":"","sources":["../src/tempoCache.ts"],"names":[],"mappings":";;;AACA,MAAa,UAAU;IAKnB,YAAqB,OAAgB,EAAW,UAAkB;QAA7C,YAAO,GAAP,OAAO,CAAS;QAAW,eAAU,GAAV,UAAU,CAAQ;QAH1D,gBAAW,GAAW,CAAC,CAAC,CAAC,kBAAkB;QAC3C,aAAQ,GAAM,SAAS,CAAC;IAEsC,CAAC;IAEvE,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjE,IAAW,OAAO;QACd,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;SACnD;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACJ;AAhBD,gCAgBC"}
|
package/lib/timeHelper.d.ts
CHANGED
|
@@ -4,11 +4,4 @@ export declare function formatMS(ms: number): string;
|
|
|
4
4
|
export declare function formatTime(n: number): string;
|
|
5
5
|
/** @deprecated */
|
|
6
6
|
export declare function secToFormattedMin(totalSec: number): string;
|
|
7
|
-
declare class Time {
|
|
8
|
-
private _now;
|
|
9
|
-
constructor();
|
|
10
|
-
get now(): number;
|
|
11
|
-
}
|
|
12
|
-
export declare const TimeHelper: Time;
|
|
13
|
-
export {};
|
|
14
7
|
//# sourceMappingURL=timeHelper.d.ts.map
|
package/lib/timeHelper.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeHelper.d.ts","sourceRoot":"","sources":["../src/timeHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timeHelper.d.ts","sourceRoot":"","sources":["../src/timeHelper.ts"],"names":[],"mappings":"AAIA,kBAAkB;AAClB,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAU3C;AAED,kBAAkB;AAClB,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED,kBAAkB;AAClB,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW1D"}
|
package/lib/timeHelper.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
exports.secToFormattedMin = exports.formatTime = exports.formatMS = void 0;
|
|
4
|
+
// eslint-disable-next-line no-console
|
|
5
|
+
console.warn('"timeHelper" module is deprecated. Please use "dates" one.');
|
|
6
6
|
/** @deprecated */
|
|
7
7
|
function formatMS(ms) {
|
|
8
8
|
if (!ms && ms !== 0) {
|
|
@@ -34,20 +34,4 @@ function secToFormattedMin(totalSec) {
|
|
|
34
34
|
return res;
|
|
35
35
|
}
|
|
36
36
|
exports.secToFormattedMin = secToFormattedMin;
|
|
37
|
-
class Time {
|
|
38
|
-
constructor() {
|
|
39
|
-
this._now = new Date().getTime();
|
|
40
|
-
mobx_1.makeObservable(this);
|
|
41
|
-
// Update _now once an hour
|
|
42
|
-
setInterval(() => { this._now = new Date().getTime(); }, 1000 * 3600);
|
|
43
|
-
}
|
|
44
|
-
get now() {
|
|
45
|
-
return this._now;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
tslib_1.__decorate([
|
|
49
|
-
mobx_1.observable,
|
|
50
|
-
tslib_1.__metadata("design:type", Number)
|
|
51
|
-
], Time.prototype, "_now", void 0);
|
|
52
|
-
exports.TimeHelper = new Time();
|
|
53
37
|
//# sourceMappingURL=timeHelper.js.map
|
package/lib/timeHelper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeHelper.js","sourceRoot":"","sources":["../src/timeHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"timeHelper.js","sourceRoot":"","sources":["../src/timeHelper.ts"],"names":[],"mappings":";;;AACA,sCAAsC;AACtC,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;AAE3E,kBAAkB;AAClB,SAAgB,QAAQ,CAAC,EAAU;IAC/B,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;QACjB,OAAO,EAAE,CAAC;KACb;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACpG,CAAC;AAVD,4BAUC;AAED,kBAAkB;AAClB,SAAgB,UAAU,CAAC,CAAS;IAChC,IAAI,CAAC,GAAG,EAAE,EAAE;QACR,OAAO,GAAG,GAAG,CAAC,CAAC;KAClB;IAED,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAND,gCAMC;AAED,kBAAkB;AAClB,SAAgB,iBAAiB,CAAC,QAAgB;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAE/B,IAAI,GAAG,EAAE;QACL,GAAG,IAAI,GAAG,CAAC;QACX,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;KACtC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAXD,8CAWC"}
|
package/lib/timer.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IDisposable } from './disposer';
|
|
2
|
+
import { EventHandler, IEvent } from './event';
|
|
3
|
+
export declare class Timer implements IDisposable, IEvent<number> {
|
|
4
|
+
readonly interval: number;
|
|
5
|
+
private readonly _event;
|
|
6
|
+
private _now;
|
|
7
|
+
private _handle;
|
|
8
|
+
constructor(interval?: number);
|
|
9
|
+
get now(): number;
|
|
10
|
+
on(handler: EventHandler<number>): () => void;
|
|
11
|
+
off(handler: EventHandler<number>): void;
|
|
12
|
+
restart(): void;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=timer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAS,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtD,qBAAa,KAAM,YAAW,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;IAMzC,QAAQ,CAAC,QAAQ;IAL7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAE9C,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,OAAO,CAAQ;gBAEF,QAAQ,SAAc;IAI3C,IAAI,GAAG,WAEN;IAED,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IAI7C,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI;IAIjC,OAAO;IAUP,OAAO,IAAI,IAAI;CAIzB"}
|
package/lib/timer.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Timer = void 0;
|
|
4
|
+
const event_1 = require("./event");
|
|
5
|
+
class Timer {
|
|
6
|
+
constructor(interval = 3600 * 1000) {
|
|
7
|
+
this.interval = interval;
|
|
8
|
+
this._event = new event_1.Event();
|
|
9
|
+
this._now = Date.now();
|
|
10
|
+
this._handle = null;
|
|
11
|
+
this.restart();
|
|
12
|
+
}
|
|
13
|
+
get now() {
|
|
14
|
+
return this._now;
|
|
15
|
+
}
|
|
16
|
+
on(handler) {
|
|
17
|
+
return this._event.on(handler);
|
|
18
|
+
}
|
|
19
|
+
off(handler) {
|
|
20
|
+
return this._event.off(handler);
|
|
21
|
+
}
|
|
22
|
+
restart() {
|
|
23
|
+
this.dispose();
|
|
24
|
+
// Update _now once an hour
|
|
25
|
+
this._handle = setInterval(() => {
|
|
26
|
+
this._now = Date.now();
|
|
27
|
+
this._event.trigger(this._now);
|
|
28
|
+
}, this.interval);
|
|
29
|
+
}
|
|
30
|
+
dispose() {
|
|
31
|
+
clearInterval(this._handle);
|
|
32
|
+
this._handle = null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.Timer = Timer;
|
|
36
|
+
//# sourceMappingURL=timer.js.map
|
package/lib/timer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../src/timer.ts"],"names":[],"mappings":";;;AACA,mCAAsD;AAEtD,MAAa,KAAK;IAMd,YAAqB,WAAW,IAAI,GAAG,IAAI;QAAtB,aAAQ,GAAR,QAAQ,CAAc;QAL1B,WAAM,GAAG,IAAI,aAAK,EAAU,CAAC;QAEtC,SAAI,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,YAAO,GAAG,IAAI,CAAC;QAGnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,EAAE,CAAC,OAA6B;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,OAA6B;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,2BAA2B;QAC3B,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAEM,OAAO;QACV,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;CACJ;AApCD,sBAoCC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { TempoCache } from '../tempoCache';
|
|
2
|
+
import { setTimeoutAsync } from '../async/timeout';
|
|
3
|
+
|
|
4
|
+
describe('TempoCache', () => {
|
|
5
|
+
it('just works', async () => {
|
|
6
|
+
let incrementer = 1;
|
|
7
|
+
|
|
8
|
+
const example = new TempoCache(() => Promise.resolve(incrementer++), 199);
|
|
9
|
+
|
|
10
|
+
expect(await example.current).toBe(1);
|
|
11
|
+
await expect(example.current).resolves.toBe(1);
|
|
12
|
+
|
|
13
|
+
await setTimeoutAsync(100);
|
|
14
|
+
|
|
15
|
+
await expect(example.current).resolves.toBe(1);
|
|
16
|
+
|
|
17
|
+
await setTimeoutAsync(200);
|
|
18
|
+
|
|
19
|
+
await expect(example.current).resolves.toBe(2);
|
|
20
|
+
|
|
21
|
+
await setTimeoutAsync(100);
|
|
22
|
+
|
|
23
|
+
await expect(example.current).resolves.toBe(2);
|
|
24
|
+
await expect(example.current).resolves.toBe(2);
|
|
25
|
+
|
|
26
|
+
await setTimeoutAsync(300);
|
|
27
|
+
|
|
28
|
+
await expect(example.current).resolves.toBe(3);
|
|
29
|
+
await expect(example.current).resolves.toBe(3);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
export class TempoCache<T> {
|
|
3
|
+
|
|
4
|
+
private _expiringAt: number = 0; // already expired
|
|
5
|
+
private _current: T = undefined;
|
|
6
|
+
|
|
7
|
+
constructor(readonly factory: () => T, readonly lifetimeMs: number) { }
|
|
8
|
+
|
|
9
|
+
public get isExpired() { return Date.now() >= this._expiringAt; }
|
|
10
|
+
|
|
11
|
+
public get current() {
|
|
12
|
+
if (this.isExpired) {
|
|
13
|
+
this._current = this.factory();
|
|
14
|
+
this._expiringAt = Date.now() + this.lifetimeMs;
|
|
15
|
+
}
|
|
16
|
+
return this._current;
|
|
17
|
+
}
|
|
18
|
+
}
|
package/src/timeHelper.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
// eslint-disable-next-line no-console
|
|
3
|
+
console.warn('"timeHelper" module is deprecated. Please use "dates" one.');
|
|
2
4
|
|
|
3
5
|
/** @deprecated */
|
|
4
6
|
export function formatMS(ms: number): string {
|
|
@@ -35,20 +37,3 @@ export function secToFormattedMin(totalSec: number): string {
|
|
|
35
37
|
|
|
36
38
|
return res;
|
|
37
39
|
}
|
|
38
|
-
|
|
39
|
-
class Time {
|
|
40
|
-
@observable
|
|
41
|
-
private _now: number = new Date().getTime();
|
|
42
|
-
|
|
43
|
-
constructor() {
|
|
44
|
-
makeObservable(this);
|
|
45
|
-
// Update _now once an hour
|
|
46
|
-
setInterval(() => { this._now = new Date().getTime(); }, 1000 * 3600);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
get now() {
|
|
50
|
-
return this._now;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export const TimeHelper = new Time();
|
package/src/timer.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { IDisposable } from './disposer';
|
|
2
|
+
import { Event, EventHandler, IEvent } from './event';
|
|
3
|
+
|
|
4
|
+
export class Timer implements IDisposable, IEvent<number> {
|
|
5
|
+
private readonly _event = new Event<number>();
|
|
6
|
+
|
|
7
|
+
private _now: number = Date.now();
|
|
8
|
+
private _handle = null;
|
|
9
|
+
|
|
10
|
+
constructor(readonly interval = 3600 * 1000) {
|
|
11
|
+
this.restart();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
get now() {
|
|
15
|
+
return this._now;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
on(handler: EventHandler<number>): () => void {
|
|
19
|
+
return this._event.on(handler);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
off(handler: EventHandler<number>): void {
|
|
23
|
+
return this._event.off(handler);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public restart() {
|
|
27
|
+
this.dispose();
|
|
28
|
+
|
|
29
|
+
// Update _now once an hour
|
|
30
|
+
this._handle = setInterval(() => {
|
|
31
|
+
this._now = Date.now();
|
|
32
|
+
this._event.trigger(this._now);
|
|
33
|
+
}, this.interval);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public dispose(): void {
|
|
37
|
+
clearInterval(this._handle);
|
|
38
|
+
this._handle = null;
|
|
39
|
+
}
|
|
40
|
+
}
|