@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.
Files changed (90) hide show
  1. package/README.md +23 -0
  2. package/dist/bytes.d.ts +65 -0
  3. package/dist/bytes.d.ts.map +1 -0
  4. package/dist/bytes.js +68 -0
  5. package/dist/bytes.js.map +1 -0
  6. package/dist/collection/CircularArray.d.ts +98 -0
  7. package/dist/collection/CircularArray.d.ts.map +1 -0
  8. package/dist/collection/CircularArray.js +134 -0
  9. package/dist/collection/CircularArray.js.map +1 -0
  10. package/dist/collection/EvictingDequeue.d.ts +22 -0
  11. package/dist/collection/EvictingDequeue.d.ts.map +1 -0
  12. package/dist/collection/EvictingDequeue.js +57 -0
  13. package/dist/collection/EvictingDequeue.js.map +1 -0
  14. package/dist/collection/collection.d.ts +4 -0
  15. package/dist/collection/collection.d.ts.map +1 -0
  16. package/dist/collection/collection.js +23 -0
  17. package/dist/collection/collection.js.map +1 -0
  18. package/dist/collection/collectionOperations.d.ts +125 -0
  19. package/dist/collection/collectionOperations.d.ts.map +1 -0
  20. package/dist/collection/collectionOperations.js +193 -0
  21. package/dist/collection/collectionOperations.js.map +1 -0
  22. package/dist/cons.d.ts +34 -0
  23. package/dist/cons.d.ts.map +1 -0
  24. package/dist/cons.js +49 -0
  25. package/dist/cons.js.map +1 -0
  26. package/dist/consts.d.ts +2 -0
  27. package/dist/consts.d.ts.map +1 -0
  28. package/dist/consts.js +5 -0
  29. package/dist/consts.js.map +1 -0
  30. package/dist/index.d.ts +13 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +49 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/logger.d.ts +95 -0
  35. package/dist/logger.d.ts.map +1 -0
  36. package/dist/logger.js +172 -0
  37. package/dist/logger.js.map +1 -0
  38. package/dist/math.d.ts +183 -0
  39. package/dist/math.d.ts.map +1 -0
  40. package/dist/math.js +263 -0
  41. package/dist/math.js.map +1 -0
  42. package/dist/net/http.d.ts +22 -0
  43. package/dist/net/http.d.ts.map +1 -0
  44. package/dist/net/http.js +74 -0
  45. package/dist/net/http.js.map +1 -0
  46. package/dist/object.d.ts +98 -0
  47. package/dist/object.d.ts.map +1 -0
  48. package/dist/object.js +127 -0
  49. package/dist/object.js.map +1 -0
  50. package/dist/path/path.d.ts +2 -0
  51. package/dist/path/path.d.ts.map +1 -0
  52. package/dist/path/path.js +8 -0
  53. package/dist/path/path.js.map +1 -0
  54. package/dist/promises.d.ts +3 -0
  55. package/dist/promises.d.ts.map +1 -0
  56. package/dist/promises.js +13 -0
  57. package/dist/promises.js.map +1 -0
  58. package/dist/random.d.ts +46 -0
  59. package/dist/random.d.ts.map +1 -0
  60. package/dist/random.js +76 -0
  61. package/dist/random.js.map +1 -0
  62. package/dist/revivers.d.ts +25 -0
  63. package/dist/revivers.d.ts.map +1 -0
  64. package/dist/revivers.js +34 -0
  65. package/dist/revivers.js.map +1 -0
  66. package/dist/strings.d.ts +16 -0
  67. package/dist/strings.d.ts.map +1 -0
  68. package/dist/strings.js +34 -0
  69. package/dist/strings.js.map +1 -0
  70. package/dist/time/time.d.ts +189 -0
  71. package/dist/time/time.d.ts.map +1 -0
  72. package/dist/time/time.js +315 -0
  73. package/dist/time/time.js.map +1 -0
  74. package/dist/time/timer.d.ts +93 -0
  75. package/dist/time/timer.d.ts.map +1 -0
  76. package/dist/time/timer.js +182 -0
  77. package/dist/time/timer.js.map +1 -0
  78. package/dist/time.d.ts +189 -0
  79. package/dist/time.d.ts.map +1 -0
  80. package/dist/time.js +308 -0
  81. package/dist/time.js.map +1 -0
  82. package/dist/utils/task_duration_tracker.d.ts +102 -0
  83. package/dist/utils/task_duration_tracker.d.ts.map +1 -0
  84. package/dist/utils/task_duration_tracker.js +144 -0
  85. package/dist/utils/task_duration_tracker.js.map +1 -0
  86. package/dist/utils/utils.d.ts +24 -0
  87. package/dist/utils/utils.d.ts.map +1 -0
  88. package/dist/utils/utils.js +47 -0
  89. package/dist/utils/utils.js.map +1 -0
  90. 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":";;;;;;;;;;;;;;;AAAA,iCAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAa,KAAK;IA4CjB,YACS,QAA2B,EAC5B,UAA6C;QAD5C,aAAQ,GAAR,QAAQ,CAAmB;QAC5B,eAAU,GAAV,UAAU,CAAmC;QA7CrD;;WAEG;QACK,cAAS,GAAW,CAAC,CAAC,CAAC;QAE/B,uCAAuC;QAC/B,iBAAY,GAAW,CAAC,CAAC,CAAC;QAElC,oDAAoD;QAC5C,kBAAa,GAAW,CAAC,CAAC;QAElC,8BAA8B;QACtB,cAAS,GAAW,CAAC,CAAC;QAE9B,gCAAgC;QACxB,eAAU,GAAW,CAAC,CAAC;QAI/B;;WAEG;QACH,yBAAoB,KAAK,EAAC;QAE1B;;WAEG;QACH,wBAAmB,KAAK,EAAC;QAEzB;;WAEG;QACH,yBAAoB,KAAK,EAAC;QAE1B;;WAEG;QAEH,2BAAsB,KAAK,EAAC;QAS3B,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,UAAU,GAAG,IAAA,6BAAsB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,KAAK;QACJ,IAAI,uBAAA,IAAI,sBAAS,IAAI,uBAAA,IAAI,wBAAW;YAAE,OAAO;QAE7C,IAAI,CAAC,uBAAA,IAAI,sBAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC5B,uBAAA,IAAI,kBAAY,IAAI,MAAA,CAAC;QACtB,CAAC;QAED,uBAAA,IAAI,kBAAY,IAAI,MAAA,CAAC;QACrB,uBAAA,IAAI,iBAAW,KAAK,MAAA,CAAC;QAErB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEhC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAEpD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,uBAAA,IAAI,kBAAY,uBAAA,IAAI,iBAAW,KAAK,MAAA,MAAA,CAAC;YACrC,uBAAA,IAAI,oBAAc,IAAI,MAAA,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC,EAAE,UAAU,CAAC,CAAC;QAEf,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;QAE3B,OAAO,UAAU,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACJ,IAAI,CAAC,uBAAA,IAAI,sBAAS;YAAE,OAAO;QAE3B,uBAAA,IAAI,kBAAY,KAAK,MAAA,CAAC;QACtB,uBAAA,IAAI,iBAAW,IAAI,MAAA,CAAC;QAEpB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAElD,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE/B,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACT,OAAO,uBAAA,IAAI,qBAAQ,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACZ,OAAO,uBAAA,IAAI,wBAAW,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACV,OAAO,uBAAA,IAAI,sBAAS,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACV,OAAO,uBAAA,IAAI,sBAAS,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,WAAW;QACV,IAAI,CAAC,uBAAA,IAAI,sBAAS;YAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,uBAAA,IAAI,qBAAQ;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QACxC,IAAI,uBAAA,IAAI,wBAAW;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE5C,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACf,IAAI,CAAC,uBAAA,IAAI,sBAAS;YAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,uBAAA,IAAI,wBAAW;YAAE,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,aAAa;QACZ,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7C,CAAC;CACD;AAtKD,sBAsKC"}