@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
package/dist/time.d.ts ADDED
@@ -0,0 +1,189 @@
1
+ export declare const MAX_JS_DATE = 8640000000000000;
2
+ /** in millis */
3
+ export declare const millis = 1;
4
+ /** in millis */
5
+ export declare const second: number;
6
+ /** in millis */
7
+ export declare const minute: number;
8
+ /** in millis */
9
+ export declare const hour: number;
10
+ /** in millis */
11
+ export declare const day: number;
12
+ /** in millis */
13
+ export declare const week: number;
14
+ /**
15
+ * In millis
16
+ * 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.
17
+ */
18
+ export declare const solarYear: number;
19
+ /** in millis */
20
+ export declare const month: number;
21
+ /** in millis */
22
+ export declare const year: number;
23
+ /** 366 days */
24
+ export declare const leapYear: number;
25
+ /** 29 days */
26
+ export declare const leapFebruary: number;
27
+ /** in millis */
28
+ export declare const january: number;
29
+ /** in millis */
30
+ export declare const february: number;
31
+ /** in millis */
32
+ export declare const march: number;
33
+ /** in millis */
34
+ export declare const april: number;
35
+ /** in millis */
36
+ export declare const may: number;
37
+ /** in millis */
38
+ export declare const june: number;
39
+ /** in millis */
40
+ export declare const july: number;
41
+ /** in millis */
42
+ export declare const august: number;
43
+ /** in millis */
44
+ export declare const september: number;
45
+ /** in millis */
46
+ export declare const october: number;
47
+ /** in millis */
48
+ export declare const november: number;
49
+ /** in millis */
50
+ export declare const december: number;
51
+ export declare const months: number[];
52
+ export declare const leapMonths: number[];
53
+ export interface Duration {
54
+ years?: number;
55
+ months?: number;
56
+ weeks?: number;
57
+ days?: number;
58
+ hours?: number;
59
+ minutes?: number;
60
+ seconds?: number;
61
+ milliseconds?: number;
62
+ }
63
+ export interface Interval {
64
+ start?: Date;
65
+ end?: Date;
66
+ }
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
+ export declare function durationToMilliSeconds(duration: Duration): number;
80
+ export declare function millisecondsToDuration(millis: number): Duration;
81
+ /**
82
+ * parse a duration into millisecconds
83
+ *
84
+ * @example
85
+ * ```js
86
+ * durationToMilliSeconds({seconds:1}) // => 1
87
+ * durationToMilliSeconds({minutes:1}) // => 60
88
+ * durationToMilliSeconds({hours:1}) // => 3_600
89
+ * durationToMilliSeconds({minutes:1,seconds:1}) // => 61
90
+ * durationToMilliSeconds({hours:1,minutes:1,seconds:1}) // => 3_661
91
+ * ```
92
+ */
93
+ export declare function durationToSeconds(duration: Duration): number;
94
+ /**
95
+ * check if the duration is larger than the interval
96
+ */
97
+ export declare function isDurationBiggerThanInterval(interval: Interval, duration: Duration): boolean;
98
+ /**
99
+ * divide the given interval into smaller intervals, each having the duration equal to the given duration
100
+ *
101
+ * @example
102
+ * ```js
103
+ * const start=new Date('2000-01-01');
104
+ * const end=new Date('2000-01-10');
105
+ *
106
+ * splitIntervalByDuration({start, end},{days:1});
107
+ * // [
108
+ * // {start:2000-01-01, end:2000-01-02},
109
+ * // {start:2000-01-02, end:2000-01-03},
110
+ * // {start:2000-01-03, end:2000-01-04},
111
+ * // {start:2000-01-04, end:2000-01-05},
112
+ * // {start:2000-01-05, end:2000-01-06},
113
+ * // {start:2000-01-06, end:2000-01-07},
114
+ * // {start:2000-01-07, end:2000-01-08},
115
+ * // {start:2000-01-08, end:2000-01-09},
116
+ * // {start:2000-01-09, end:2000-01-10},
117
+ * // ]
118
+ * ```
119
+ */
120
+ export declare function splitIntervalByDuration(interval: Interval, duration: Duration): Interval[];
121
+ /**
122
+ * multiply the given duration
123
+ *
124
+ * @example
125
+ * ```js
126
+ * const duration={moths:2, days:3, hours:4};
127
+ *
128
+ * multiplyDuration(duration:Duration,multiplier:number) // => {moths:4, days:6, hours:8}
129
+ * ```
130
+ */
131
+ export declare function multiplyDuration(duration: Duration, multiplier: number): Duration;
132
+ /**
133
+ * add the given durations
134
+ *
135
+ * @example
136
+ * ```js
137
+ * const duration1={moths:2, days:3, hours:4};
138
+ * const duration2={moths:2, days:3, hours:4};
139
+ * const duration3={moths:2, days:3, hours:4};
140
+ *
141
+ * addDurations(duration1,duration2,duration3) // => {moths:6, days:9, hours:12}
142
+ * ```
143
+ */
144
+ export declare function addDurations(...durations: Duration[]): Duration;
145
+ export declare function isValidDate(value: any): value is Date;
146
+ /**
147
+ * Format a date into sql datetime value
148
+ * @param date
149
+ * @returns
150
+ * * @example
151
+ * ```js
152
+ * const date = new Date();
153
+ * toSqlDate() // => "2017-06-29 17:54:04"
154
+ *
155
+ */
156
+ export declare function toSqlDate(date: Date): string;
157
+ /**
158
+ * Convert an interval to a duration
159
+ * @param interval
160
+ * @returns
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * const interval = { start: new Date('2000-01-01'), end: new Date('2000-01-10') };
165
+ * const duration = IntervalToDuration(interval);
166
+ * // { years: 0, months: 0, weeks: 0, days: 9, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }
167
+ * ```
168
+ */
169
+ export declare function intervalToDuration(interval: Interval): Duration;
170
+ /**
171
+ * Humanize a duration object into a human-readable string.
172
+ * @example
173
+ * ```js
174
+ * const duration = { years: 1, months: 2, days: 3, hours: 4, minutes: 5, seconds: 6 };
175
+ * humanizeDuration(duration) // => "1 year, 2 months, 3 days, 4 hours, 5 minutes and 6 seconds"
176
+ * ```
177
+ * * @example
178
+ * ```js
179
+ * const duration = { seconds: 4000 };
180
+ * humanizeDuration(duration) // => "1 hour, 6 minutes and 40 seconds"
181
+ * ```
182
+ * @param inDuration
183
+ * @param options
184
+ * @returns
185
+ */
186
+ export declare function humanizeDuration(inDuration: Duration, options?: {
187
+ reduce?: boolean;
188
+ }): string;
189
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"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"}
package/dist/time.js ADDED
@@ -0,0 +1,308 @@
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 + (duration?.months || 0) * exports.month + (duration?.weeks || 0) * exports.week + (duration?.days || 0) * exports.day + (duration?.hours || 0) * exports.hour + (duration?.minutes || 0) * exports.minute + (duration?.seconds || 0) * exports.second + (duration?.milliseconds || 0) * exports.millis;
81
+ }
82
+ function millisecondsToDuration(millis) {
83
+ const duration = {};
84
+ duration.years = Math.floor(millis / exports.year);
85
+ millis %= exports.year;
86
+ duration.months = Math.floor(millis / exports.month);
87
+ millis %= exports.month;
88
+ duration.weeks = Math.floor(millis / exports.week);
89
+ millis %= exports.week;
90
+ duration.days = Math.floor(millis / exports.day);
91
+ millis %= exports.day;
92
+ duration.hours = Math.floor(millis / exports.hour);
93
+ millis %= exports.hour;
94
+ duration.minutes = Math.floor(millis / exports.minute);
95
+ millis %= exports.minute;
96
+ duration.seconds = Math.floor(millis / exports.second);
97
+ millis %= exports.second;
98
+ duration.milliseconds = millis;
99
+ return duration;
100
+ }
101
+ /**
102
+ * parse a duration into millisecconds
103
+ *
104
+ * @example
105
+ * ```js
106
+ * durationToMilliSeconds({seconds:1}) // => 1
107
+ * durationToMilliSeconds({minutes:1}) // => 60
108
+ * durationToMilliSeconds({hours:1}) // => 3_600
109
+ * durationToMilliSeconds({minutes:1,seconds:1}) // => 61
110
+ * durationToMilliSeconds({hours:1,minutes:1,seconds:1}) // => 3_661
111
+ * ```
112
+ */
113
+ function durationToSeconds(duration) {
114
+ return durationToMilliSeconds(duration) / exports.second;
115
+ }
116
+ /**
117
+ * check if the duration is larger than the interval
118
+ */
119
+ function isDurationBiggerThanInterval(interval, duration) {
120
+ const intervalSeconds = Math.abs(interval.end.getTime() - interval.start.getTime()) / 1000;
121
+ const durationSeconds = durationToSeconds(duration);
122
+ return durationSeconds > intervalSeconds;
123
+ }
124
+ /**
125
+ * divide the given interval into smaller intervals, each having the duration equal to the given duration
126
+ *
127
+ * @example
128
+ * ```js
129
+ * const start=new Date('2000-01-01');
130
+ * const end=new Date('2000-01-10');
131
+ *
132
+ * splitIntervalByDuration({start, end},{days:1});
133
+ * // [
134
+ * // {start:2000-01-01, end:2000-01-02},
135
+ * // {start:2000-01-02, end:2000-01-03},
136
+ * // {start:2000-01-03, end:2000-01-04},
137
+ * // {start:2000-01-04, end:2000-01-05},
138
+ * // {start:2000-01-05, end:2000-01-06},
139
+ * // {start:2000-01-06, end:2000-01-07},
140
+ * // {start:2000-01-07, end:2000-01-08},
141
+ * // {start:2000-01-08, end:2000-01-09},
142
+ * // {start:2000-01-09, end:2000-01-10},
143
+ * // ]
144
+ * ```
145
+ */
146
+ function splitIntervalByDuration(interval, duration) {
147
+ if (!interval?.start || !interval?.end)
148
+ return;
149
+ if (isDurationBiggerThanInterval(interval, duration))
150
+ return [interval];
151
+ const intervals = [];
152
+ var start = interval.start;
153
+ while (start < interval.end) {
154
+ let end = new Date(start.getTime() + durationToMilliSeconds(duration));
155
+ if (end > interval.end)
156
+ end = interval.end;
157
+ intervals.push({ start, end });
158
+ start = end;
159
+ }
160
+ return intervals;
161
+ }
162
+ /**
163
+ * multiply the given duration
164
+ *
165
+ * @example
166
+ * ```js
167
+ * const duration={moths:2, days:3, hours:4};
168
+ *
169
+ * multiplyDuration(duration:Duration,multiplier:number) // => {moths:4, days:6, hours:8}
170
+ * ```
171
+ */
172
+ function multiplyDuration(duration, multiplier) {
173
+ return {
174
+ years: duration.years * multiplier,
175
+ months: duration.months * multiplier,
176
+ weeks: duration.weeks * multiplier,
177
+ days: duration.days * multiplier,
178
+ hours: duration.hours * multiplier,
179
+ minutes: duration.minutes * multiplier,
180
+ seconds: duration.seconds * multiplier,
181
+ };
182
+ }
183
+ /**
184
+ * add the given durations
185
+ *
186
+ * @example
187
+ * ```js
188
+ * const duration1={moths:2, days:3, hours:4};
189
+ * const duration2={moths:2, days:3, hours:4};
190
+ * const duration3={moths:2, days:3, hours:4};
191
+ *
192
+ * addDurations(duration1,duration2,duration3) // => {moths:6, days:9, hours:12}
193
+ * ```
194
+ */
195
+ function addDurations(...durations) {
196
+ const retval = {
197
+ years: 0,
198
+ months: 0,
199
+ weeks: 0,
200
+ days: 0,
201
+ hours: 0,
202
+ minutes: 0,
203
+ seconds: 0,
204
+ };
205
+ for (const duration of durations) {
206
+ retval.years += duration.years || 0;
207
+ retval.months += duration.months || 0;
208
+ retval.weeks += duration.weeks || 0;
209
+ retval.days += duration.days || 0;
210
+ retval.hours += duration.hours || 0;
211
+ retval.minutes += duration.minutes || 0;
212
+ retval.seconds += duration.seconds || 0;
213
+ }
214
+ return retval;
215
+ }
216
+ function isValidDate(value) {
217
+ return value instanceof Date && !isNaN(value.valueOf());
218
+ }
219
+ /**
220
+ * Format a date into sql datetime value
221
+ * @param date
222
+ * @returns
223
+ * * @example
224
+ * ```js
225
+ * const date = new Date();
226
+ * toSqlDate() // => "2017-06-29 17:54:04"
227
+ *
228
+ */
229
+ function toSqlDate(date) {
230
+ return date.toISOString().slice(0, 19).replace('T', ' ');
231
+ }
232
+ /**
233
+ * Convert an interval to a duration
234
+ * @param interval
235
+ * @returns
236
+ *
237
+ * @example
238
+ * ```ts
239
+ * const interval = { start: new Date('2000-01-01'), end: new Date('2000-01-10') };
240
+ * const duration = IntervalToDuration(interval);
241
+ * // { years: 0, months: 0, weeks: 0, days: 9, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }
242
+ * ```
243
+ */
244
+ function intervalToDuration(interval) {
245
+ if (interval.end === undefined) {
246
+ throw new Error('Invalid interval, end date is missing: ' + JSON.stringify(interval));
247
+ }
248
+ if (interval.start === undefined) {
249
+ throw new Error('Invalid interval, start date is missing: ' + JSON.stringify(interval));
250
+ }
251
+ const start = interval.start.getTime();
252
+ const end = interval.end.getTime();
253
+ if (start > end) {
254
+ throw new Error('Invalid interval, end date is before start date: ' + JSON.stringify(interval));
255
+ }
256
+ let durationInMs = end - start;
257
+ const duration = millisecondsToDuration(durationInMs);
258
+ return duration;
259
+ }
260
+ /**
261
+ * Humanize a duration object into a human-readable string.
262
+ * @example
263
+ * ```js
264
+ * const duration = { years: 1, months: 2, days: 3, hours: 4, minutes: 5, seconds: 6 };
265
+ * humanizeDuration(duration) // => "1 year, 2 months, 3 days, 4 hours, 5 minutes and 6 seconds"
266
+ * ```
267
+ * * @example
268
+ * ```js
269
+ * const duration = { seconds: 4000 };
270
+ * humanizeDuration(duration) // => "1 hour, 6 minutes and 40 seconds"
271
+ * ```
272
+ * @param inDuration
273
+ * @param options
274
+ * @returns
275
+ */
276
+ function humanizeDuration(inDuration, options) {
277
+ let duration = { ...inDuration };
278
+ if (options?.reduce) {
279
+ duration = millisecondsToDuration(durationToMilliSeconds(duration));
280
+ }
281
+ const parts = [];
282
+ if (duration.years)
283
+ parts.push(`${duration.years} year${duration.years > 1 ? 's' : ''}`);
284
+ if (duration.months)
285
+ parts.push(`${duration.months} month${duration.months > 1 ? 's' : ''}`);
286
+ if (duration.weeks)
287
+ parts.push(`${duration.weeks} week${duration.weeks > 1 ? 's' : ''}`);
288
+ if (duration.days)
289
+ parts.push(`${duration.days} day${duration.days > 1 ? 's' : ''}`);
290
+ if (duration.hours)
291
+ parts.push(`${duration.hours} hour${duration.hours > 1 ? 's' : ''}`);
292
+ if (duration.minutes)
293
+ parts.push(`${duration.minutes} minute${duration.minutes > 1 ? 's' : ''}`);
294
+ if (duration.seconds)
295
+ parts.push(`${duration.seconds} second${duration.seconds > 1 ? 's' : ''}`);
296
+ if (duration.milliseconds)
297
+ parts.push(`${duration.milliseconds} millisecond${duration.milliseconds > 1 ? 's' : ''}`);
298
+ // handle singular case
299
+ if (parts.length === 1) {
300
+ return parts[0];
301
+ }
302
+ if (parts.length === 0) {
303
+ return '0 milliseconds';
304
+ }
305
+ const last = parts.pop();
306
+ return parts.join(', ') + ' and ' + last;
307
+ }
308
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { Interval, Duration } from '../time/time';
2
+ /**
3
+ * @description A utility class to track the duration of multiple tasks and estimate completion times.
4
+ * - It records the start and end times of each task, calculates elapsed time, estimates remaining time,
5
+ * - and provides the expected finish time based on the average duration of completed tasks.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * // let's assume the date is Jan 1, 2000, 00:00:00
10
+ * const tracker = new TaskDurationTracker(5); // Initialize tracker for 5 tasks
11
+ *
12
+ * for (let i = 0; i < 5; i++) {
13
+ * performTask(i); // Lets assume it takes 1 second to perform a task
14
+ * tracker.recordTaskEnd(); // Record the end of the task
15
+ *
16
+ * console.log(`Completed ${tracker.getCompletedTasks()} out of ${tracker.tasksCount} tasks.`);
17
+ * console.log(`Elapsed Time: ${tracker.getElapsedTime().milliseconds} ms`);
18
+ * console.log(`Estimated Completion Time: ${tracker.getEstimatedCompletionTime().milliseconds} ms`);
19
+ * console.log(`Expected Finish Time: ${tracker.getExpectedFinishTime()}`);
20
+ *
21
+ * }
22
+ * // OUTPUT:
23
+ * // Completed 1 out of 5 tasks.
24
+ * // Elapsed Time: 1000 ms
25
+ * // Estimated Completion Time: 4000 ms
26
+ * // Expected Finish Time: Jan 1, 2000, 00:00:05
27
+ *
28
+ * // Completed 2 out of 5 tasks.
29
+ * // Elapsed Time: 2000 ms
30
+ * // Estimated Completion Time: 3000 ms
31
+ * // Expected Finish Time: Jan 1, 2000, 00:00:05
32
+ *
33
+ * // Completed 3 out of 5 tasks.
34
+ * // Elapsed Time: 3000 ms
35
+ * // Estimated Completion Time: 2000 ms
36
+ * // Expected Finish Time: Jan 1, 2000, 00:00:05
37
+ *
38
+ * // Completed 4 out of 5 tasks.
39
+ * // Elapsed Time: 4000 ms
40
+ * // Estimated Completion Time: 1000 ms
41
+ * // Expected Finish Time: Jan 1, 2000, 00:00:05
42
+ *
43
+ * // Completed 5 out of 5 tasks.
44
+ * // Elapsed Time: 5000 ms
45
+ * // Estimated Completion Time: 0 ms
46
+ * // Expected Finish Time: Jan 1, 2000, 00:00:05
47
+ * ```
48
+ *
49
+ * @see {@link Duration}
50
+ * @see {@link Interval}
51
+ */
52
+ export declare class TaskDurationTracker {
53
+ tasksCount: number;
54
+ private intervals;
55
+ private creationTime;
56
+ constructor(tasksCount: number);
57
+ /**
58
+ * @description Gets the total elapsed time since the first task started.
59
+ * @returns the total elapsed time since the first task started.
60
+ */
61
+ getElapsedTime(): Duration;
62
+ /**
63
+ * @description Estimates the total time taken to complete all tasks.
64
+ */
65
+ getEstimatedCompletionTime(): Duration;
66
+ /**
67
+ * @description Gets the expected finish time for all tasks.
68
+ */
69
+ getExpectedFinishTime(): Date;
70
+ /**
71
+ * @description Gets the number of completed tasks.
72
+ * @returns the number of completed tasks.
73
+ */
74
+ getCompletedTasks(): number;
75
+ /**
76
+ * @description Gets the number of remaining tasks.
77
+ * @returns the number of remaining tasks.
78
+ */
79
+ getRemainingTasks(): number;
80
+ /**
81
+ * @description Gets the mean time taken per task.
82
+ * @returns the mean time taken per task.
83
+ */
84
+ getMeanTimePerTask(): Duration;
85
+ /**
86
+ * @description Adds a task interval to the tracker.
87
+ * @param interval The interval of the task to add.
88
+ */
89
+ addCompletedTask(interval: Interval): void;
90
+ /**
91
+ * @description Gets the start time of the first task, or the creation time if no tasks have been started.
92
+ * @returns the start time of the first task, or the creation time if no tasks have been started.
93
+ */
94
+ getStartTime(): Date;
95
+ /**
96
+ * @description Marks the current task as completed,
97
+ * - the start time is either the end time of the last task or the TaskDurationTracker creation time,
98
+ * - the end time is the current time.
99
+ */
100
+ recordTaskEnd(): void;
101
+ }
102
+ //# sourceMappingURL=task_duration_tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task_duration_tracker.d.ts","sourceRoot":"","sources":["../../src/utils/task_duration_tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAkD,MAAM,cAAc,CAAC;AAElG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,qBAAa,mBAAmB;IAIZ,UAAU,EAAE,MAAM;IAHrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAc;gBAEf,UAAU,EAAE,MAAM;IAErC;;;OAGG;IACH,cAAc,IAAI,QAAQ;IAK1B;;OAEG;IACH,0BAA0B,IAAI,QAAQ;IAOtC;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAK7B;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACH,kBAAkB,IAAI,QAAQ;IAe9B;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI1C;;;OAGG;IACH,YAAY,IAAI,IAAI;IAIpB;;;;OAIG;IACH,aAAa,IAAI,IAAI;CAMrB"}