@bitbeater/ecma-utils 2.7.0
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/README.md +23 -0
- package/dist/bytes.d.ts +65 -0
- package/dist/bytes.d.ts.map +1 -0
- package/dist/bytes.js +68 -0
- package/dist/bytes.js.map +1 -0
- package/dist/collection/CircularArray.d.ts +98 -0
- package/dist/collection/CircularArray.d.ts.map +1 -0
- package/dist/collection/CircularArray.js +134 -0
- package/dist/collection/CircularArray.js.map +1 -0
- package/dist/collection/EvictingDequeue.d.ts +22 -0
- package/dist/collection/EvictingDequeue.d.ts.map +1 -0
- package/dist/collection/EvictingDequeue.js +57 -0
- package/dist/collection/EvictingDequeue.js.map +1 -0
- package/dist/collection/collection.d.ts +4 -0
- package/dist/collection/collection.d.ts.map +1 -0
- package/dist/collection/collection.js +23 -0
- package/dist/collection/collection.js.map +1 -0
- package/dist/collection/collectionOperations.d.ts +125 -0
- package/dist/collection/collectionOperations.d.ts.map +1 -0
- package/dist/collection/collectionOperations.js +193 -0
- package/dist/collection/collectionOperations.js.map +1 -0
- package/dist/cons.d.ts +34 -0
- package/dist/cons.d.ts.map +1 -0
- package/dist/cons.js +49 -0
- package/dist/cons.js.map +1 -0
- package/dist/consts.d.ts +2 -0
- package/dist/consts.d.ts.map +1 -0
- package/dist/consts.js +5 -0
- package/dist/consts.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +95 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +172 -0
- package/dist/logger.js.map +1 -0
- package/dist/math.d.ts +183 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +263 -0
- package/dist/math.js.map +1 -0
- package/dist/net/http.d.ts +22 -0
- package/dist/net/http.d.ts.map +1 -0
- package/dist/net/http.js +74 -0
- package/dist/net/http.js.map +1 -0
- package/dist/object.d.ts +98 -0
- package/dist/object.d.ts.map +1 -0
- package/dist/object.js +127 -0
- package/dist/object.js.map +1 -0
- package/dist/path/path.d.ts +2 -0
- package/dist/path/path.d.ts.map +1 -0
- package/dist/path/path.js +8 -0
- package/dist/path/path.js.map +1 -0
- package/dist/promises.d.ts +3 -0
- package/dist/promises.d.ts.map +1 -0
- package/dist/promises.js +13 -0
- package/dist/promises.js.map +1 -0
- package/dist/random.d.ts +46 -0
- package/dist/random.d.ts.map +1 -0
- package/dist/random.js +76 -0
- package/dist/random.js.map +1 -0
- package/dist/revivers.d.ts +25 -0
- package/dist/revivers.d.ts.map +1 -0
- package/dist/revivers.js +34 -0
- package/dist/revivers.js.map +1 -0
- package/dist/strings.d.ts +16 -0
- package/dist/strings.d.ts.map +1 -0
- package/dist/strings.js +34 -0
- package/dist/strings.js.map +1 -0
- package/dist/time/time.d.ts +189 -0
- package/dist/time/time.d.ts.map +1 -0
- package/dist/time/time.js +315 -0
- package/dist/time/time.js.map +1 -0
- package/dist/time/timer.d.ts +93 -0
- package/dist/time/timer.d.ts.map +1 -0
- package/dist/time/timer.js +182 -0
- package/dist/time/timer.js.map +1 -0
- package/dist/time.d.ts +189 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +308 -0
- package/dist/time.js.map +1 -0
- package/dist/utils/task_duration_tracker.d.ts +102 -0
- package/dist/utils/task_duration_tracker.d.ts.map +1 -0
- package/dist/utils/task_duration_tracker.js +144 -0
- package/dist/utils/task_duration_tracker.js.map +1 -0
- package/dist/utils/utils.d.ts +24 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +47 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.leapMonths = exports.months = exports.december = exports.november = exports.october = exports.september = exports.august = exports.july = exports.june = exports.may = exports.april = exports.march = exports.february = exports.january = exports.leapFebruary = exports.leapYear = exports.year = exports.month = exports.solarYear = exports.week = exports.day = exports.hour = exports.minute = exports.second = exports.millis = exports.MAX_JS_DATE = void 0;
|
|
4
|
+
exports.durationToMilliSeconds = durationToMilliSeconds;
|
|
5
|
+
exports.millisecondsToDuration = millisecondsToDuration;
|
|
6
|
+
exports.durationToSeconds = durationToSeconds;
|
|
7
|
+
exports.isDurationBiggerThanInterval = isDurationBiggerThanInterval;
|
|
8
|
+
exports.splitIntervalByDuration = splitIntervalByDuration;
|
|
9
|
+
exports.multiplyDuration = multiplyDuration;
|
|
10
|
+
exports.addDurations = addDurations;
|
|
11
|
+
exports.isValidDate = isValidDate;
|
|
12
|
+
exports.toSqlDate = toSqlDate;
|
|
13
|
+
exports.intervalToDuration = intervalToDuration;
|
|
14
|
+
exports.humanizeDuration = humanizeDuration;
|
|
15
|
+
exports.MAX_JS_DATE = 8.64e15; // Sat Sep 13 275760 00:00:00 GMT+0000
|
|
16
|
+
/** in millis */
|
|
17
|
+
exports.millis = 1;
|
|
18
|
+
/** in millis */
|
|
19
|
+
exports.second = 1000 * exports.millis;
|
|
20
|
+
/** in millis */
|
|
21
|
+
exports.minute = 60 * exports.second;
|
|
22
|
+
/** in millis */
|
|
23
|
+
exports.hour = 60 * exports.minute;
|
|
24
|
+
/** in millis */
|
|
25
|
+
exports.day = 24 * exports.hour;
|
|
26
|
+
/** in millis */
|
|
27
|
+
exports.week = 7 * exports.day;
|
|
28
|
+
/**
|
|
29
|
+
* In millis
|
|
30
|
+
* The average month is 365/12 = 30.42 days in a regular year and 366/12 = 30.50 days in a leap year. The Gregorian (western) solar calendar has 365.2425/12 = 30.436875 days on the average, varying between 28 and 31 days.
|
|
31
|
+
*/
|
|
32
|
+
exports.solarYear = 365.25 * exports.day;
|
|
33
|
+
/** in millis */
|
|
34
|
+
exports.month = exports.solarYear / 12;
|
|
35
|
+
/** in millis */
|
|
36
|
+
exports.year = 365 * exports.day;
|
|
37
|
+
/** 366 days */
|
|
38
|
+
exports.leapYear = 366 * exports.day;
|
|
39
|
+
/** 29 days */
|
|
40
|
+
exports.leapFebruary = 29 * exports.day;
|
|
41
|
+
/** in millis */
|
|
42
|
+
exports.january = 31 * exports.day;
|
|
43
|
+
/** in millis */
|
|
44
|
+
exports.february = 28 * exports.day;
|
|
45
|
+
/** in millis */
|
|
46
|
+
exports.march = 31 * exports.day;
|
|
47
|
+
/** in millis */
|
|
48
|
+
exports.april = 30 * exports.day;
|
|
49
|
+
/** in millis */
|
|
50
|
+
exports.may = 31 * exports.day;
|
|
51
|
+
/** in millis */
|
|
52
|
+
exports.june = 30 * exports.day;
|
|
53
|
+
/** in millis */
|
|
54
|
+
exports.july = 31 * exports.day;
|
|
55
|
+
/** in millis */
|
|
56
|
+
exports.august = 31 * exports.day;
|
|
57
|
+
/** in millis */
|
|
58
|
+
exports.september = 30 * exports.day;
|
|
59
|
+
/** in millis */
|
|
60
|
+
exports.october = 31 * exports.day;
|
|
61
|
+
/** in millis */
|
|
62
|
+
exports.november = 30 * exports.day;
|
|
63
|
+
/** in millis */
|
|
64
|
+
exports.december = 31 * exports.day;
|
|
65
|
+
exports.months = [exports.january, exports.february, exports.march, exports.april, exports.may, exports.june, exports.july, exports.august, exports.september, exports.october, exports.november, exports.december];
|
|
66
|
+
exports.leapMonths = [exports.january, exports.leapFebruary, exports.march, exports.april, exports.may, exports.june, exports.july, exports.august, exports.september, exports.october, exports.november, exports.december];
|
|
67
|
+
/**
|
|
68
|
+
* parse a duration into millisecconds
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```js
|
|
72
|
+
* durationToMilliSeconds({seconds:1}) // => 1000
|
|
73
|
+
* durationToMilliSeconds({minutes:1}) // => 60_000
|
|
74
|
+
* durationToMilliSeconds({hours:1}) // => 3_600_000
|
|
75
|
+
* durationToMilliSeconds({minutes:1,seconds:1}) // => 61_000
|
|
76
|
+
* durationToMilliSeconds({hours:1,minutes:1,seconds:1}) // => 3_661_000
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
function durationToMilliSeconds(duration) {
|
|
80
|
+
return ((duration?.years || 0) * exports.year +
|
|
81
|
+
(duration?.months || 0) * exports.month +
|
|
82
|
+
(duration?.weeks || 0) * exports.week +
|
|
83
|
+
(duration?.days || 0) * exports.day +
|
|
84
|
+
(duration?.hours || 0) * exports.hour +
|
|
85
|
+
(duration?.minutes || 0) * exports.minute +
|
|
86
|
+
(duration?.seconds || 0) * exports.second +
|
|
87
|
+
(duration?.milliseconds || 0) * exports.millis);
|
|
88
|
+
}
|
|
89
|
+
function millisecondsToDuration(millis) {
|
|
90
|
+
const duration = {};
|
|
91
|
+
duration.years = Math.floor(millis / exports.year);
|
|
92
|
+
millis %= exports.year;
|
|
93
|
+
duration.months = Math.floor(millis / exports.month);
|
|
94
|
+
millis %= exports.month;
|
|
95
|
+
duration.weeks = Math.floor(millis / exports.week);
|
|
96
|
+
millis %= exports.week;
|
|
97
|
+
duration.days = Math.floor(millis / exports.day);
|
|
98
|
+
millis %= exports.day;
|
|
99
|
+
duration.hours = Math.floor(millis / exports.hour);
|
|
100
|
+
millis %= exports.hour;
|
|
101
|
+
duration.minutes = Math.floor(millis / exports.minute);
|
|
102
|
+
millis %= exports.minute;
|
|
103
|
+
duration.seconds = Math.floor(millis / exports.second);
|
|
104
|
+
millis %= exports.second;
|
|
105
|
+
duration.milliseconds = millis;
|
|
106
|
+
return duration;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* parse a duration into millisecconds
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```js
|
|
113
|
+
* durationToMilliSeconds({seconds:1}) // => 1
|
|
114
|
+
* durationToMilliSeconds({minutes:1}) // => 60
|
|
115
|
+
* durationToMilliSeconds({hours:1}) // => 3_600
|
|
116
|
+
* durationToMilliSeconds({minutes:1,seconds:1}) // => 61
|
|
117
|
+
* durationToMilliSeconds({hours:1,minutes:1,seconds:1}) // => 3_661
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
function durationToSeconds(duration) {
|
|
121
|
+
return durationToMilliSeconds(duration) / exports.second;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* check if the duration is larger than the interval
|
|
125
|
+
*/
|
|
126
|
+
function isDurationBiggerThanInterval(interval, duration) {
|
|
127
|
+
const intervalSeconds = Math.abs(interval.end.getTime() - interval.start.getTime()) / 1000;
|
|
128
|
+
const durationSeconds = durationToSeconds(duration);
|
|
129
|
+
return durationSeconds > intervalSeconds;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* divide the given interval into smaller intervals, each having the duration equal to the given duration
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```js
|
|
136
|
+
* const start=new Date('2000-01-01');
|
|
137
|
+
* const end=new Date('2000-01-10');
|
|
138
|
+
*
|
|
139
|
+
* splitIntervalByDuration({start, end},{days:1});
|
|
140
|
+
* // [
|
|
141
|
+
* // {start:2000-01-01, end:2000-01-02},
|
|
142
|
+
* // {start:2000-01-02, end:2000-01-03},
|
|
143
|
+
* // {start:2000-01-03, end:2000-01-04},
|
|
144
|
+
* // {start:2000-01-04, end:2000-01-05},
|
|
145
|
+
* // {start:2000-01-05, end:2000-01-06},
|
|
146
|
+
* // {start:2000-01-06, end:2000-01-07},
|
|
147
|
+
* // {start:2000-01-07, end:2000-01-08},
|
|
148
|
+
* // {start:2000-01-08, end:2000-01-09},
|
|
149
|
+
* // {start:2000-01-09, end:2000-01-10},
|
|
150
|
+
* // ]
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
function splitIntervalByDuration(interval, duration) {
|
|
154
|
+
if (!interval?.start || !interval?.end)
|
|
155
|
+
return;
|
|
156
|
+
if (isDurationBiggerThanInterval(interval, duration))
|
|
157
|
+
return [interval];
|
|
158
|
+
const intervals = [];
|
|
159
|
+
var start = interval.start;
|
|
160
|
+
while (start < interval.end) {
|
|
161
|
+
let end = new Date(start.getTime() + durationToMilliSeconds(duration));
|
|
162
|
+
if (end > interval.end)
|
|
163
|
+
end = interval.end;
|
|
164
|
+
intervals.push({ start, end });
|
|
165
|
+
start = end;
|
|
166
|
+
}
|
|
167
|
+
return intervals;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* multiply the given duration
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```js
|
|
174
|
+
* const duration={moths:2, days:3, hours:4};
|
|
175
|
+
*
|
|
176
|
+
* multiplyDuration(duration:Duration,multiplier:number) // => {moths:4, days:6, hours:8}
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
function multiplyDuration(duration, multiplier) {
|
|
180
|
+
return {
|
|
181
|
+
years: duration.years * multiplier,
|
|
182
|
+
months: duration.months * multiplier,
|
|
183
|
+
weeks: duration.weeks * multiplier,
|
|
184
|
+
days: duration.days * multiplier,
|
|
185
|
+
hours: duration.hours * multiplier,
|
|
186
|
+
minutes: duration.minutes * multiplier,
|
|
187
|
+
seconds: duration.seconds * multiplier,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* add the given durations
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```js
|
|
195
|
+
* const duration1={moths:2, days:3, hours:4};
|
|
196
|
+
* const duration2={moths:2, days:3, hours:4};
|
|
197
|
+
* const duration3={moths:2, days:3, hours:4};
|
|
198
|
+
*
|
|
199
|
+
* addDurations(duration1,duration2,duration3) // => {moths:6, days:9, hours:12}
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
function addDurations(...durations) {
|
|
203
|
+
const retval = {
|
|
204
|
+
years: 0,
|
|
205
|
+
months: 0,
|
|
206
|
+
weeks: 0,
|
|
207
|
+
days: 0,
|
|
208
|
+
hours: 0,
|
|
209
|
+
minutes: 0,
|
|
210
|
+
seconds: 0,
|
|
211
|
+
};
|
|
212
|
+
for (const duration of durations) {
|
|
213
|
+
retval.years += duration.years || 0;
|
|
214
|
+
retval.months += duration.months || 0;
|
|
215
|
+
retval.weeks += duration.weeks || 0;
|
|
216
|
+
retval.days += duration.days || 0;
|
|
217
|
+
retval.hours += duration.hours || 0;
|
|
218
|
+
retval.minutes += duration.minutes || 0;
|
|
219
|
+
retval.seconds += duration.seconds || 0;
|
|
220
|
+
}
|
|
221
|
+
return retval;
|
|
222
|
+
}
|
|
223
|
+
function isValidDate(value) {
|
|
224
|
+
return value instanceof Date && !isNaN(value.valueOf());
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Format a date into sql datetime value
|
|
228
|
+
* @param date
|
|
229
|
+
* @returns
|
|
230
|
+
* * @example
|
|
231
|
+
* ```js
|
|
232
|
+
* const date = new Date();
|
|
233
|
+
* toSqlDate() // => "2017-06-29 17:54:04"
|
|
234
|
+
*
|
|
235
|
+
*/
|
|
236
|
+
function toSqlDate(date) {
|
|
237
|
+
return date.toISOString().slice(0, 19).replace('T', ' ');
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Convert an interval to a duration
|
|
241
|
+
* @param interval
|
|
242
|
+
* @returns
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```ts
|
|
246
|
+
* const interval = { start: new Date('2000-01-01'), end: new Date('2000-01-10') };
|
|
247
|
+
* const duration = IntervalToDuration(interval);
|
|
248
|
+
* // { years: 0, months: 0, weeks: 0, days: 9, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
function intervalToDuration(interval) {
|
|
252
|
+
if (interval.end === undefined) {
|
|
253
|
+
throw new Error('Invalid interval, end date is missing: ' + JSON.stringify(interval));
|
|
254
|
+
}
|
|
255
|
+
if (interval.start === undefined) {
|
|
256
|
+
throw new Error('Invalid interval, start date is missing: ' + JSON.stringify(interval));
|
|
257
|
+
}
|
|
258
|
+
const start = interval.start.getTime();
|
|
259
|
+
const end = interval.end.getTime();
|
|
260
|
+
if (start > end) {
|
|
261
|
+
throw new Error('Invalid interval, end date is before start date: ' + JSON.stringify(interval));
|
|
262
|
+
}
|
|
263
|
+
let durationInMs = end - start;
|
|
264
|
+
const duration = millisecondsToDuration(durationInMs);
|
|
265
|
+
return duration;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Humanize a duration object into a human-readable string.
|
|
269
|
+
* @example
|
|
270
|
+
* ```js
|
|
271
|
+
* const duration = { years: 1, months: 2, days: 3, hours: 4, minutes: 5, seconds: 6 };
|
|
272
|
+
* humanizeDuration(duration) // => "1 year, 2 months, 3 days, 4 hours, 5 minutes and 6 seconds"
|
|
273
|
+
* ```
|
|
274
|
+
* * @example
|
|
275
|
+
* ```js
|
|
276
|
+
* const duration = { seconds: 4000 };
|
|
277
|
+
* humanizeDuration(duration) // => "1 hour, 6 minutes and 40 seconds"
|
|
278
|
+
* ```
|
|
279
|
+
* @param inDuration
|
|
280
|
+
* @param options
|
|
281
|
+
* @returns
|
|
282
|
+
*/
|
|
283
|
+
function humanizeDuration(inDuration, options) {
|
|
284
|
+
let duration = { ...inDuration };
|
|
285
|
+
if (options?.reduce) {
|
|
286
|
+
duration = millisecondsToDuration(durationToMilliSeconds(duration));
|
|
287
|
+
}
|
|
288
|
+
const parts = [];
|
|
289
|
+
if (duration.years)
|
|
290
|
+
parts.push(`${duration.years} year${duration.years > 1 ? 's' : ''}`);
|
|
291
|
+
if (duration.months)
|
|
292
|
+
parts.push(`${duration.months} month${duration.months > 1 ? 's' : ''}`);
|
|
293
|
+
if (duration.weeks)
|
|
294
|
+
parts.push(`${duration.weeks} week${duration.weeks > 1 ? 's' : ''}`);
|
|
295
|
+
if (duration.days)
|
|
296
|
+
parts.push(`${duration.days} day${duration.days > 1 ? 's' : ''}`);
|
|
297
|
+
if (duration.hours)
|
|
298
|
+
parts.push(`${duration.hours} hour${duration.hours > 1 ? 's' : ''}`);
|
|
299
|
+
if (duration.minutes)
|
|
300
|
+
parts.push(`${duration.minutes} minute${duration.minutes > 1 ? 's' : ''}`);
|
|
301
|
+
if (duration.seconds)
|
|
302
|
+
parts.push(`${duration.seconds} second${duration.seconds > 1 ? 's' : ''}`);
|
|
303
|
+
if (duration.milliseconds)
|
|
304
|
+
parts.push(`${duration.milliseconds} millisecond${duration.milliseconds > 1 ? 's' : ''}`);
|
|
305
|
+
// handle singular case
|
|
306
|
+
if (parts.length === 1) {
|
|
307
|
+
return parts[0];
|
|
308
|
+
}
|
|
309
|
+
if (parts.length === 0) {
|
|
310
|
+
return '0 milliseconds';
|
|
311
|
+
}
|
|
312
|
+
const last = parts.pop();
|
|
313
|
+
return parts.join(', ') + ' and ' + last;
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/time/time.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Duration } from './time';
|
|
2
|
+
/**
|
|
3
|
+
* A simple timer that can be started, paused, and resumed.
|
|
4
|
+
* @example
|
|
5
|
+
* ```js
|
|
6
|
+
* import { Timer } from 'iggs-utils/time/timer';
|
|
7
|
+
*
|
|
8
|
+
* const timer = new Timer(5000, (totalDuration) => {
|
|
9
|
+
* console.log(`Timer completed in ${totalDuration} ms`);
|
|
10
|
+
* });
|
|
11
|
+
*
|
|
12
|
+
* timer.start();
|
|
13
|
+
*
|
|
14
|
+
* // Pause the timer after 2 seconds
|
|
15
|
+
* setTimeout(() => {
|
|
16
|
+
* timer.pause();
|
|
17
|
+
* console.log('Timer paused');
|
|
18
|
+
* }, 2000);
|
|
19
|
+
*
|
|
20
|
+
* // Resume the timer after another 3 seconds
|
|
21
|
+
* setTimeout(() => {
|
|
22
|
+
* timer.start();
|
|
23
|
+
* console.log('Timer resumed');
|
|
24
|
+
* }, 5000);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class Timer {
|
|
28
|
+
#private;
|
|
29
|
+
private duration;
|
|
30
|
+
onComplete?: (totalDuration?: number) => void;
|
|
31
|
+
/**
|
|
32
|
+
* The time when the timer was started for the first time
|
|
33
|
+
*/
|
|
34
|
+
private startTime;
|
|
35
|
+
/** The time when the timer finished */
|
|
36
|
+
private finishedTime;
|
|
37
|
+
/** The time when the timer was started last time */
|
|
38
|
+
private lastStartTime;
|
|
39
|
+
/** The running elapsed time*/
|
|
40
|
+
private elapsedMs;
|
|
41
|
+
/** milliseconds to be timed */
|
|
42
|
+
private durationMs;
|
|
43
|
+
private timeoutId;
|
|
44
|
+
onPause: (elapsedMs: number) => void;
|
|
45
|
+
onStart: (timeLeftMs: number) => void;
|
|
46
|
+
constructor(duration: Duration | number, onComplete?: (totalDuration?: number) => void);
|
|
47
|
+
/**
|
|
48
|
+
* Start or resume the timer.
|
|
49
|
+
*
|
|
50
|
+
* @returns The time left in milliseconds
|
|
51
|
+
*/
|
|
52
|
+
start(): number;
|
|
53
|
+
/**
|
|
54
|
+
* Pause the timer.
|
|
55
|
+
*
|
|
56
|
+
* @returns The elapsed time in milliseconds
|
|
57
|
+
*/
|
|
58
|
+
pause(): number;
|
|
59
|
+
/**
|
|
60
|
+
* Indicates whether the timer is currently paused.
|
|
61
|
+
*/
|
|
62
|
+
get paused(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Indicates whether the timer has completed.
|
|
65
|
+
*/
|
|
66
|
+
get completed(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Indicates whether the timer is running.
|
|
69
|
+
*/
|
|
70
|
+
get running(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Indicates whether the timer has been started at least once.
|
|
73
|
+
*/
|
|
74
|
+
get started(): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Time elapsed while timer was running in milliseconds.
|
|
77
|
+
* It does not include time while timer was paused.
|
|
78
|
+
* @return Elapsed time in milliseconds
|
|
79
|
+
*/
|
|
80
|
+
elapsedTime(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Total time elapsed, from when the timer started until it completed in milliseconds.
|
|
83
|
+
* It includes time while timer was paused.
|
|
84
|
+
* @return Total elapsed time in milliseconds
|
|
85
|
+
*/
|
|
86
|
+
totalElapsedTime(): number;
|
|
87
|
+
/**
|
|
88
|
+
* Remaining time in milliseconds.
|
|
89
|
+
* @return Remaining time in milliseconds
|
|
90
|
+
*/
|
|
91
|
+
remainingTime(): number;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=timer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../src/time/timer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA0B,MAAM,QAAQ,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,KAAK;;IA6ChB,OAAO,CAAC,QAAQ;IACT,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI;IA7CrD;;OAEG;IACH,OAAO,CAAC,SAAS,CAAc;IAE/B,uCAAuC;IACvC,OAAO,CAAC,YAAY,CAAc;IAElC,oDAAoD;IACpD,OAAO,CAAC,aAAa,CAAa;IAElC,8BAA8B;IAC9B,OAAO,CAAC,SAAS,CAAa;IAE9B,gCAAgC;IAChC,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,SAAS,CAAM;IAuBhB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;gBAGpC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAC5B,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI;IASrD;;;;OAIG;IACH,KAAK,IAAI,MAAM;IA4Bf;;;;OAIG;IACH,KAAK,IAAI,MAAM;IAcf;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;OAIG;IACH,WAAW,IAAI,MAAM;IAQrB;;;;OAIG;IACH,gBAAgB,IAAI,MAAM;IAM1B;;;OAGG;IACH,aAAa,IAAI,MAAM;CAGvB"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
+
};
|
|
13
|
+
var _Timer_started, _Timer_paused, _Timer_running, _Timer_completed;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.Timer = void 0;
|
|
16
|
+
const time_1 = require("./time");
|
|
17
|
+
/**
|
|
18
|
+
* A simple timer that can be started, paused, and resumed.
|
|
19
|
+
* @example
|
|
20
|
+
* ```js
|
|
21
|
+
* import { Timer } from 'iggs-utils/time/timer';
|
|
22
|
+
*
|
|
23
|
+
* const timer = new Timer(5000, (totalDuration) => {
|
|
24
|
+
* console.log(`Timer completed in ${totalDuration} ms`);
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* timer.start();
|
|
28
|
+
*
|
|
29
|
+
* // Pause the timer after 2 seconds
|
|
30
|
+
* setTimeout(() => {
|
|
31
|
+
* timer.pause();
|
|
32
|
+
* console.log('Timer paused');
|
|
33
|
+
* }, 2000);
|
|
34
|
+
*
|
|
35
|
+
* // Resume the timer after another 3 seconds
|
|
36
|
+
* setTimeout(() => {
|
|
37
|
+
* timer.start();
|
|
38
|
+
* console.log('Timer resumed');
|
|
39
|
+
* }, 5000);
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
class Timer {
|
|
43
|
+
constructor(duration, onComplete) {
|
|
44
|
+
this.duration = duration;
|
|
45
|
+
this.onComplete = onComplete;
|
|
46
|
+
/**
|
|
47
|
+
* The time when the timer was started for the first time
|
|
48
|
+
*/
|
|
49
|
+
this.startTime = -1;
|
|
50
|
+
/** The time when the timer finished */
|
|
51
|
+
this.finishedTime = -1;
|
|
52
|
+
/** The time when the timer was started last time */
|
|
53
|
+
this.lastStartTime = 0;
|
|
54
|
+
/** The running elapsed time*/
|
|
55
|
+
this.elapsedMs = 0;
|
|
56
|
+
/** milliseconds to be timed */
|
|
57
|
+
this.durationMs = 0;
|
|
58
|
+
/**
|
|
59
|
+
* Indicates whether the timer has been started at least once.
|
|
60
|
+
*/
|
|
61
|
+
_Timer_started.set(this, false);
|
|
62
|
+
/**
|
|
63
|
+
* Indicates whether the timer is currently paused.
|
|
64
|
+
*/
|
|
65
|
+
_Timer_paused.set(this, false);
|
|
66
|
+
/**
|
|
67
|
+
* Indicates whether the timer is running.
|
|
68
|
+
*/
|
|
69
|
+
_Timer_running.set(this, false);
|
|
70
|
+
/**
|
|
71
|
+
* Indicates whether the timer has completed.
|
|
72
|
+
*/
|
|
73
|
+
_Timer_completed.set(this, false);
|
|
74
|
+
if (typeof this.duration === 'number') {
|
|
75
|
+
this.durationMs = this.duration;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.durationMs = (0, time_1.durationToMilliSeconds)(this.duration);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Start or resume the timer.
|
|
83
|
+
*
|
|
84
|
+
* @returns The time left in milliseconds
|
|
85
|
+
*/
|
|
86
|
+
start() {
|
|
87
|
+
if (__classPrivateFieldGet(this, _Timer_running, "f") || __classPrivateFieldGet(this, _Timer_completed, "f"))
|
|
88
|
+
return;
|
|
89
|
+
if (!__classPrivateFieldGet(this, _Timer_started, "f")) {
|
|
90
|
+
this.startTime = Date.now();
|
|
91
|
+
__classPrivateFieldSet(this, _Timer_started, true, "f");
|
|
92
|
+
}
|
|
93
|
+
__classPrivateFieldSet(this, _Timer_running, true, "f");
|
|
94
|
+
__classPrivateFieldSet(this, _Timer_paused, false, "f");
|
|
95
|
+
this.lastStartTime = Date.now();
|
|
96
|
+
const timeLeftMs = this.durationMs - this.elapsedMs;
|
|
97
|
+
this.timeoutId = setTimeout(() => {
|
|
98
|
+
__classPrivateFieldSet(this, _Timer_running, __classPrivateFieldSet(this, _Timer_paused, false, "f"), "f");
|
|
99
|
+
__classPrivateFieldSet(this, _Timer_completed, true, "f");
|
|
100
|
+
this.finishedTime = Date.now();
|
|
101
|
+
const totalDuration = this.finishedTime - this.startTime;
|
|
102
|
+
this.onComplete?.(totalDuration);
|
|
103
|
+
}, timeLeftMs);
|
|
104
|
+
this.onStart?.(timeLeftMs);
|
|
105
|
+
return timeLeftMs;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Pause the timer.
|
|
109
|
+
*
|
|
110
|
+
* @returns The elapsed time in milliseconds
|
|
111
|
+
*/
|
|
112
|
+
pause() {
|
|
113
|
+
if (!__classPrivateFieldGet(this, _Timer_running, "f"))
|
|
114
|
+
return;
|
|
115
|
+
__classPrivateFieldSet(this, _Timer_running, false, "f");
|
|
116
|
+
__classPrivateFieldSet(this, _Timer_paused, true, "f");
|
|
117
|
+
clearTimeout(this.timeoutId);
|
|
118
|
+
this.elapsedMs += Date.now() - this.lastStartTime;
|
|
119
|
+
this.onPause?.(this.elapsedMs);
|
|
120
|
+
return this.elapsedMs;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Indicates whether the timer is currently paused.
|
|
124
|
+
*/
|
|
125
|
+
get paused() {
|
|
126
|
+
return __classPrivateFieldGet(this, _Timer_paused, "f");
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Indicates whether the timer has completed.
|
|
130
|
+
*/
|
|
131
|
+
get completed() {
|
|
132
|
+
return __classPrivateFieldGet(this, _Timer_completed, "f");
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Indicates whether the timer is running.
|
|
136
|
+
*/
|
|
137
|
+
get running() {
|
|
138
|
+
return __classPrivateFieldGet(this, _Timer_running, "f");
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Indicates whether the timer has been started at least once.
|
|
142
|
+
*/
|
|
143
|
+
get started() {
|
|
144
|
+
return __classPrivateFieldGet(this, _Timer_started, "f");
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Time elapsed while timer was running in milliseconds.
|
|
148
|
+
* It does not include time while timer was paused.
|
|
149
|
+
* @return Elapsed time in milliseconds
|
|
150
|
+
*/
|
|
151
|
+
elapsedTime() {
|
|
152
|
+
if (!__classPrivateFieldGet(this, _Timer_started, "f"))
|
|
153
|
+
return 0;
|
|
154
|
+
if (__classPrivateFieldGet(this, _Timer_paused, "f"))
|
|
155
|
+
return this.elapsedMs;
|
|
156
|
+
if (__classPrivateFieldGet(this, _Timer_completed, "f"))
|
|
157
|
+
return this.durationMs;
|
|
158
|
+
return this.elapsedMs + (Date.now() - this.lastStartTime);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Total time elapsed, from when the timer started until it completed in milliseconds.
|
|
162
|
+
* It includes time while timer was paused.
|
|
163
|
+
* @return Total elapsed time in milliseconds
|
|
164
|
+
*/
|
|
165
|
+
totalElapsedTime() {
|
|
166
|
+
if (!__classPrivateFieldGet(this, _Timer_started, "f"))
|
|
167
|
+
return 0;
|
|
168
|
+
if (__classPrivateFieldGet(this, _Timer_completed, "f"))
|
|
169
|
+
return this.finishedTime - this.startTime;
|
|
170
|
+
return Date.now() - this.startTime;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Remaining time in milliseconds.
|
|
174
|
+
* @return Remaining time in milliseconds
|
|
175
|
+
*/
|
|
176
|
+
remainingTime() {
|
|
177
|
+
return this.durationMs - this.elapsedTime();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.Timer = Timer;
|
|
181
|
+
_Timer_started = new WeakMap(), _Timer_paused = new WeakMap(), _Timer_running = new WeakMap(), _Timer_completed = new WeakMap();
|
|
182
|
+
//# sourceMappingURL=timer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../../src/time/timer.ts"],"names":[],"mappings":"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"}
|