@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.
Files changed (82) hide show
  1. package/coverage/clover.xml +27 -15
  2. package/coverage/coverage-final.json +2 -1
  3. package/coverage/lcov-report/index.html +18 -18
  4. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  5. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  6. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  7. package/coverage/lcov-report/src/async/index.html +1 -1
  8. package/coverage/lcov-report/src/async/timeout.ts.html +12 -12
  9. package/coverage/lcov-report/src/cache.ts.html +1 -1
  10. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  11. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  12. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  13. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  14. package/coverage/lcov-report/src/dates/index.html +1 -1
  15. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  16. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  17. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  18. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  19. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  20. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  21. package/coverage/lcov-report/src/disposer.ts.html +1 -1
  22. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  23. package/coverage/lcov-report/src/event.ts.html +1 -1
  24. package/coverage/lcov-report/src/fields/index.html +1 -1
  25. package/coverage/lcov-report/src/fields/update.ts.html +1 -1
  26. package/coverage/lcov-report/src/functions.ts.html +1 -1
  27. package/coverage/lcov-report/src/index.html +24 -9
  28. package/coverage/lcov-report/src/lazy.light.ts.html +1 -1
  29. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  30. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  31. package/coverage/lcov-report/src/logger/index.html +1 -1
  32. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  33. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  34. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  35. package/coverage/lcov-report/src/math/arrays.ts.html +1 -1
  36. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  37. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  38. package/coverage/lcov-report/src/math/index.html +1 -1
  39. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  40. package/coverage/lcov-report/src/observersMap.ts.html +1 -1
  41. package/coverage/lcov-report/src/observingCache.ts.html +1 -1
  42. package/coverage/lcov-report/src/tempoCache.ts.html +134 -0
  43. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  44. package/coverage/lcov-report/src/types.ts.html +1 -1
  45. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  46. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  47. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  48. package/coverage/lcov-report/src/validation/index.html +1 -1
  49. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  50. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  51. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  52. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  53. package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +1 -1
  54. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +1 -1
  55. package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +1 -1
  56. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  57. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  58. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  59. package/coverage/lcov-report/src/viewModels/TextModel.ts.html +1 -1
  60. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
  61. package/coverage/lcov-report/src/viewModels/index.html +1 -1
  62. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  63. package/coverage/lcov-report/tempoCache.ts.html +134 -0
  64. package/coverage/lcov-report/timer.ts.html +200 -0
  65. package/coverage/lcov.info +43 -17
  66. package/lib/tempoCache.d.ts +10 -0
  67. package/lib/tempoCache.d.ts.map +1 -0
  68. package/lib/tempoCache.js +21 -0
  69. package/lib/tempoCache.js.map +1 -0
  70. package/lib/timeHelper.d.ts +0 -7
  71. package/lib/timeHelper.d.ts.map +1 -1
  72. package/lib/timeHelper.js +3 -19
  73. package/lib/timeHelper.js.map +1 -1
  74. package/lib/timer.d.ts +15 -0
  75. package/lib/timer.d.ts.map +1 -0
  76. package/lib/timer.js +36 -0
  77. package/lib/timer.js.map +1 -0
  78. package/package.json +1 -1
  79. package/src/__tests__/tempoCache.test.ts +31 -0
  80. package/src/tempoCache.ts +18 -0
  81. package/src/timeHelper.ts +3 -18
  82. 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">&nbsp;</span>
101
+ <span class="cline-any cline-yes">1x</span>
102
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</span>
112
+ <span class="cline-any cline-neutral">&nbsp;</span>
113
+ <span class="cline-any cline-neutral">&nbsp;</span>
114
+ <span class="cline-any cline-no">&nbsp;</span>
115
+ <span class="cline-any cline-neutral">&nbsp;</span>
116
+ <span class="cline-any cline-neutral">&nbsp;</span>
117
+ <span class="cline-any cline-neutral">&nbsp;</span>
118
+ <span class="cline-any cline-yes">1x</span>
119
+ <span class="cline-any cline-neutral">&nbsp;</span>
120
+ <span class="cline-any cline-neutral">&nbsp;</span>
121
+ <span class="cline-any cline-neutral">&nbsp;</span>
122
+ <span class="cline-any cline-yes">1x</span>
123
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-neutral">&nbsp;</span>
125
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-yes">1x</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
133
+ <span class="cline-any cline-neutral">&nbsp;</span>
134
+ <span class="cline-any cline-neutral">&nbsp;</span>
135
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { IDisposable } from './disposer';
141
+ import { Event, EventHandler, IEvent } from './event';
142
+ &nbsp;
143
+ export class Timer implements IDisposable, IEvent&lt;number&gt; {
144
+ private readonly _event = new Event&lt;number&gt;();
145
+ &nbsp;
146
+ private _now: number = Date.now();
147
+ private _handle = null;
148
+ &nbsp;
149
+ constructor(readonly interval = <span class="branch-0 cbranch-no" title="branch not covered" >3600 * 1000)</span> {
150
+ this.restart();
151
+ }
152
+ &nbsp;
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
+ &nbsp;
157
+ on(handler: EventHandler&lt;number&gt;): () =&gt; void {
158
+ return this._event.on(handler);
159
+ }
160
+ &nbsp;
161
+ off(handler: EventHandler&lt;number&gt;): void {
162
+ return this._event.off(handler);
163
+ }
164
+ &nbsp;
165
+ public restart() {
166
+ this.dispose();
167
+ &nbsp;
168
+ // Update _now once an hour
169
+ this._handle = setInterval(() =&gt; {
170
+ this._now = Date.now();
171
+ this._event.trigger(this._now);
172
+ }, this.interval);
173
+ }
174
+ &nbsp;
175
+ public dispose(): void {
176
+ clearInterval(this._handle);
177
+ this._handle = null;
178
+ }
179
+ }
180
+ &nbsp;</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
+
@@ -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:5,setTimeoutAsync
1103
- FNDA:5,(anonymous_1)
1104
- FNDA:5,(anonymous_2)
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,2
1110
- DA:3,5
1111
- DA:6,5
1112
- DA:7,5
1113
- DA:8,5
1114
- DA:9,5
1115
- DA:10,5
1116
- DA:11,5
1117
- DA:16,5
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,5
1125
- DA:32,2
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,5
1138
- BRDA:10,1,0,5
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,5
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"timeHelper.d.ts","sourceRoot":"","sources":["../src/timeHelper.ts"],"names":[],"mappings":"AAEA,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;AAED,cAAM,IAAI;IAEN,OAAO,CAAC,IAAI,CAAgC;;IAQ5C,IAAI,GAAG,WAEN;CACJ;AAED,eAAO,MAAM,UAAU,MAAa,CAAC"}
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.TimeHelper = exports.secToFormattedMin = exports.formatTime = exports.formatMS = void 0;
4
- const tslib_1 = require("tslib");
5
- const mobx_1 = require("mobx");
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
@@ -1 +1 @@
1
- {"version":3,"file":"timeHelper.js","sourceRoot":"","sources":["../src/timeHelper.ts"],"names":[],"mappings":";;;;AAAA,+BAAkD;AAElD,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;AAED,MAAM,IAAI;IAIN;QAFQ,SAAI,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAGxC,qBAAc,CAAC,IAAI,CAAC,CAAC;QACrB,2BAA2B;QAC3B,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CACJ;AAXG;IADC,iBAAU;;kCACiC;AAanC,QAAA,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC"}
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
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "1.4.16",
3
+ "version": "1.4.17",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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
- import { observable, makeObservable } from 'mobx';
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
+ }