@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
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
|
package/dist/time.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":";;;AAoFA,wDAEC;AAGD,wDA2BC;AAcD,8CAEC;AAKD,oEAKC;AAwBD,0DAmBC;AAYD,4CAUC;AAcD,oCAsBC;AAED,kCAEC;AAYD,8BAEC;AAcD,gDAwBC;AAkBD,4CA6BC;AA1VY,QAAA,WAAW,GAAG,OAAO,CAAC,CAAC,sCAAsC;AAE1E,gBAAgB;AACH,QAAA,MAAM,GAAG,CAAC,CAAC;AACxB,gBAAgB;AACH,QAAA,MAAM,GAAG,IAAI,GAAG,cAAM,CAAC;AACpC,gBAAgB;AACH,QAAA,MAAM,GAAG,EAAE,GAAG,cAAM,CAAC;AAClC,gBAAgB;AACH,QAAA,IAAI,GAAG,EAAE,GAAG,cAAM,CAAC;AAChC,gBAAgB;AACH,QAAA,GAAG,GAAG,EAAE,GAAG,YAAI,CAAC;AAC7B,gBAAgB;AACH,QAAA,IAAI,GAAG,CAAC,GAAG,WAAG,CAAC;AAC5B;;;GAGG;AACU,QAAA,SAAS,GAAG,MAAM,GAAG,WAAG,CAAC;AACtC,gBAAgB;AACH,QAAA,KAAK,GAAG,iBAAS,GAAG,EAAE,CAAC;AACpC,gBAAgB;AACH,QAAA,IAAI,GAAG,GAAG,GAAG,WAAG,CAAC;AAC9B,eAAe;AACF,QAAA,QAAQ,GAAG,GAAG,GAAG,WAAG,CAAC;AAClC,cAAc;AACD,QAAA,YAAY,GAAG,EAAE,GAAG,WAAG,CAAC;AAErC,gBAAgB;AACH,QAAA,OAAO,GAAG,EAAE,GAAG,WAAG,CAAC;AAChC,gBAAgB;AACH,QAAA,QAAQ,GAAG,EAAE,GAAG,WAAG,CAAC;AACjC,gBAAgB;AACH,QAAA,KAAK,GAAG,EAAE,GAAG,WAAG,CAAC;AAC9B,gBAAgB;AACH,QAAA,KAAK,GAAG,EAAE,GAAG,WAAG,CAAC;AAC9B,gBAAgB;AACH,QAAA,GAAG,GAAG,EAAE,GAAG,WAAG,CAAC;AAC5B,gBAAgB;AACH,QAAA,IAAI,GAAG,EAAE,GAAG,WAAG,CAAC;AAC7B,gBAAgB;AACH,QAAA,IAAI,GAAG,EAAE,GAAG,WAAG,CAAC;AAC7B,gBAAgB;AACH,QAAA,MAAM,GAAG,EAAE,GAAG,WAAG,CAAC;AAC/B,gBAAgB;AACH,QAAA,SAAS,GAAG,EAAE,GAAG,WAAG,CAAC;AAClC,gBAAgB;AACH,QAAA,OAAO,GAAG,EAAE,GAAG,WAAG,CAAC;AAChC,gBAAgB;AACH,QAAA,QAAQ,GAAG,EAAE,GAAG,WAAG,CAAC;AACjC,gBAAgB;AACH,QAAA,QAAQ,GAAG,EAAE,GAAG,WAAG,CAAC;AAEpB,QAAA,MAAM,GAAG,CAAC,eAAO,EAAE,gBAAQ,EAAE,aAAK,EAAE,aAAK,EAAE,WAAG,EAAE,YAAI,EAAE,YAAI,EAAE,cAAM,EAAE,iBAAS,EAAE,eAAO,EAAE,gBAAQ,EAAE,gBAAQ,CAAC,CAAC;AAE5G,QAAA,UAAU,GAAG,CAAC,eAAO,EAAE,oBAAY,EAAE,aAAK,EAAE,aAAK,EAAE,WAAG,EAAE,YAAI,EAAE,YAAI,EAAE,cAAM,EAAE,iBAAS,EAAE,eAAO,EAAE,gBAAQ,EAAE,gBAAQ,CAAC,CAAC;AAiBjI;;;;;;;;;;;GAWG;AACH,SAAgB,sBAAsB,CAAC,QAAkB;IACxD,OAAO,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,YAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,aAAK,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,YAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,WAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,YAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,cAAM,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,cAAM,GAAG,CAAC,QAAQ,EAAE,YAAY,IAAI,CAAC,CAAC,GAAG,cAAM,CAAC;AACvR,CAAC;AAGD,SAAgB,sBAAsB,CAAC,MAAc;IACpD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,YAAI,CAAC;IAEf,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,aAAK,CAAC,CAAC;IAC7C,MAAM,IAAI,aAAK,CAAC;IAEhB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,YAAI,CAAC;IAEf,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,WAAG,CAAC,CAAC;IACzC,MAAM,IAAI,WAAG,CAAC;IAEd,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,YAAI,CAAC;IAEf,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,cAAM,CAAC;IAEjB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAM,CAAC,CAAC;IAC/C,MAAM,IAAI,cAAM,CAAC;IAEjB,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;IAE/B,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,iBAAiB,CAAC,QAAkB;IACnD,OAAO,sBAAsB,CAAC,QAAQ,CAAC,GAAG,cAAM,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAgB,4BAA4B,CAAC,QAAkB,EAAE,QAAkB;IAClF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3F,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO,eAAe,GAAG,eAAe,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,uBAAuB,CAAC,QAAkB,EAAE,QAAkB;IAC7E,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG;QAAE,OAAO;IAC/C,IAAI,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExE,MAAM,SAAS,GAAe,EAAE,CAAC;IAEjC,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE3B,OAAO,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,GAAG,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7E,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG;YAAE,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;QAE3C,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAE/B,KAAK,GAAG,GAAG,CAAC;IACb,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,QAAkB,EAAE,UAAkB;IACtE,OAAO;QACN,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,UAAU;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU;QACpC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,UAAU;QAClC,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,UAAU;QAChC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,UAAU;QAClC,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,UAAU;QACtC,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,UAAU;KACtC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,YAAY,CAAC,GAAG,SAAqB;IACpD,MAAM,MAAM,GAAa;QACxB,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;KACV,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAgB,WAAW,CAAC,KAAU;IACrC,OAAO,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,SAAS,CAAC,IAAU;IACnC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,kBAAkB,CAAC,QAAkB;IAEpD,IAAI,QAAQ,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAInC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC;IAE/B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAEtD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,gBAAgB,CAAC,UAAoB,EAAE,OAA8B;IACpF,IAAI,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;IAEjC,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,QAAQ,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,IAAI,QAAQ,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,SAAS,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7F,IAAI,QAAQ,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,QAAQ,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,IAAI,QAAQ,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrF,IAAI,QAAQ,CAAC,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,QAAQ,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,IAAI,QAAQ,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjG,IAAI,QAAQ,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjG,IAAI,QAAQ,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,YAAY,eAAe,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAGrH,uBAAuB;IACvB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;AAC1C,CAAC"}
|
|
@@ -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"}
|