ts-time-utils 0.0.1 → 1.1.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 +590 -1
- package/dist/age.d.ts +1 -10
- package/dist/age.d.ts.map +1 -1
- package/dist/calculate.d.ts.map +1 -1
- package/dist/calculate.js +24 -10
- package/dist/constants.d.ts +2 -21
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -13
- package/dist/countdown.d.ts +217 -0
- package/dist/countdown.d.ts.map +1 -0
- package/dist/countdown.js +298 -0
- package/dist/dateRange.d.ts +266 -0
- package/dist/dateRange.d.ts.map +1 -0
- package/dist/dateRange.js +433 -0
- package/dist/duration.d.ts +171 -0
- package/dist/duration.d.ts.map +1 -0
- package/dist/duration.js +382 -0
- package/dist/esm/age.d.ts +1 -10
- package/dist/esm/age.d.ts.map +1 -1
- package/dist/esm/calculate.d.ts.map +1 -1
- package/dist/esm/calculate.js +24 -10
- package/dist/esm/constants.d.ts +2 -21
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +12 -13
- package/dist/esm/countdown.d.ts +217 -0
- package/dist/esm/countdown.d.ts.map +1 -0
- package/dist/esm/countdown.js +298 -0
- package/dist/esm/dateRange.d.ts +266 -0
- package/dist/esm/dateRange.d.ts.map +1 -0
- package/dist/esm/dateRange.js +433 -0
- package/dist/esm/duration.d.ts +171 -0
- package/dist/esm/duration.d.ts.map +1 -0
- package/dist/esm/duration.js +382 -0
- package/dist/esm/format.d.ts.map +1 -1
- package/dist/esm/index.d.ts +14 -6
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +16 -0
- package/dist/esm/interval.d.ts +3 -6
- package/dist/esm/interval.d.ts.map +1 -1
- package/dist/esm/locale.d.ts +94 -0
- package/dist/esm/locale.d.ts.map +1 -0
- package/dist/esm/locale.js +1087 -0
- package/dist/esm/naturalLanguage.d.ts +107 -0
- package/dist/esm/naturalLanguage.d.ts.map +1 -0
- package/dist/esm/naturalLanguage.js +344 -0
- package/dist/esm/performance.d.ts +2 -9
- package/dist/esm/performance.d.ts.map +1 -1
- package/dist/esm/performance.js +7 -8
- package/dist/esm/rangePresets.d.ts +7 -8
- package/dist/esm/rangePresets.d.ts.map +1 -1
- package/dist/esm/rangePresets.js +11 -9
- package/dist/esm/recurrence.d.ts +149 -0
- package/dist/esm/recurrence.d.ts.map +1 -0
- package/dist/esm/recurrence.js +404 -0
- package/dist/esm/serialize.d.ts +73 -0
- package/dist/esm/serialize.d.ts.map +1 -0
- package/dist/esm/serialize.js +365 -0
- package/dist/esm/timezone.d.ts +2 -6
- package/dist/esm/timezone.d.ts.map +1 -1
- package/dist/esm/timezone.js +1 -1
- package/dist/esm/types.d.ts +250 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +25 -0
- package/dist/esm/workingHours.d.ts +4 -13
- package/dist/esm/workingHours.d.ts.map +1 -1
- package/dist/esm/workingHours.js +3 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/index.d.ts +14 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/interval.d.ts +3 -6
- package/dist/interval.d.ts.map +1 -1
- package/dist/locale.d.ts +94 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +1087 -0
- package/dist/naturalLanguage.d.ts +107 -0
- package/dist/naturalLanguage.d.ts.map +1 -0
- package/dist/naturalLanguage.js +344 -0
- package/dist/performance.d.ts +2 -9
- package/dist/performance.d.ts.map +1 -1
- package/dist/performance.js +7 -8
- package/dist/rangePresets.d.ts +7 -8
- package/dist/rangePresets.d.ts.map +1 -1
- package/dist/rangePresets.js +11 -9
- package/dist/recurrence.d.ts +149 -0
- package/dist/recurrence.d.ts.map +1 -0
- package/dist/recurrence.js +404 -0
- package/dist/serialize.d.ts +73 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/serialize.js +365 -0
- package/dist/timezone.d.ts +2 -6
- package/dist/timezone.d.ts.map +1 -1
- package/dist/timezone.js +1 -1
- package/dist/types.d.ts +250 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/workingHours.d.ts +4 -13
- package/dist/workingHours.d.ts.map +1 -1
- package/dist/workingHours.js +3 -1
- package/package.json +67 -3
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import type { DurationInput, DurationComparison } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a duration of time with arithmetic and conversion capabilities
|
|
4
|
+
*/
|
|
5
|
+
export declare class Duration {
|
|
6
|
+
private readonly _milliseconds;
|
|
7
|
+
constructor(input: number | DurationInput | string);
|
|
8
|
+
/**
|
|
9
|
+
* Create Duration from milliseconds
|
|
10
|
+
*/
|
|
11
|
+
static fromMilliseconds(ms: number): Duration;
|
|
12
|
+
/**
|
|
13
|
+
* Create Duration from seconds
|
|
14
|
+
*/
|
|
15
|
+
static fromSeconds(seconds: number): Duration;
|
|
16
|
+
/**
|
|
17
|
+
* Create Duration from minutes
|
|
18
|
+
*/
|
|
19
|
+
static fromMinutes(minutes: number): Duration;
|
|
20
|
+
/**
|
|
21
|
+
* Create Duration from hours
|
|
22
|
+
*/
|
|
23
|
+
static fromHours(hours: number): Duration;
|
|
24
|
+
/**
|
|
25
|
+
* Create Duration from days
|
|
26
|
+
*/
|
|
27
|
+
static fromDays(days: number): Duration;
|
|
28
|
+
/**
|
|
29
|
+
* Create Duration from weeks
|
|
30
|
+
*/
|
|
31
|
+
static fromWeeks(weeks: number): Duration;
|
|
32
|
+
/**
|
|
33
|
+
* Create Duration from a string (e.g., "1h 30m", "2.5 hours", "90 seconds")
|
|
34
|
+
*/
|
|
35
|
+
static fromString(str: string): Duration;
|
|
36
|
+
/**
|
|
37
|
+
* Create Duration between two dates
|
|
38
|
+
*/
|
|
39
|
+
static between(start: Date, end: Date): Duration;
|
|
40
|
+
/**
|
|
41
|
+
* Get duration in milliseconds
|
|
42
|
+
*/
|
|
43
|
+
get milliseconds(): number;
|
|
44
|
+
/**
|
|
45
|
+
* Get duration in seconds
|
|
46
|
+
*/
|
|
47
|
+
get seconds(): number;
|
|
48
|
+
/**
|
|
49
|
+
* Get duration in minutes
|
|
50
|
+
*/
|
|
51
|
+
get minutes(): number;
|
|
52
|
+
/**
|
|
53
|
+
* Get duration in hours
|
|
54
|
+
*/
|
|
55
|
+
get hours(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Get duration in days
|
|
58
|
+
*/
|
|
59
|
+
get days(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Get duration in weeks
|
|
62
|
+
*/
|
|
63
|
+
get weeks(): number;
|
|
64
|
+
/**
|
|
65
|
+
* Add another duration
|
|
66
|
+
*/
|
|
67
|
+
add(other: Duration | number | DurationInput): Duration;
|
|
68
|
+
/**
|
|
69
|
+
* Subtract another duration
|
|
70
|
+
*/
|
|
71
|
+
subtract(other: Duration | number | DurationInput): Duration;
|
|
72
|
+
/**
|
|
73
|
+
* Multiply duration by a factor
|
|
74
|
+
*/
|
|
75
|
+
multiply(factor: number): Duration;
|
|
76
|
+
/**
|
|
77
|
+
* Divide duration by a factor
|
|
78
|
+
*/
|
|
79
|
+
divide(factor: number): Duration;
|
|
80
|
+
/**
|
|
81
|
+
* Get absolute duration (always positive)
|
|
82
|
+
*/
|
|
83
|
+
abs(): Duration;
|
|
84
|
+
/**
|
|
85
|
+
* Negate duration
|
|
86
|
+
*/
|
|
87
|
+
negate(): Duration;
|
|
88
|
+
/**
|
|
89
|
+
* Check if duration equals another
|
|
90
|
+
*/
|
|
91
|
+
equals(other: Duration | number): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Check if duration is greater than another
|
|
94
|
+
*/
|
|
95
|
+
greaterThan(other: Duration | number): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Check if duration is less than another
|
|
98
|
+
*/
|
|
99
|
+
lessThan(other: Duration | number): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Compare with another duration (-1, 0, 1)
|
|
102
|
+
*/
|
|
103
|
+
compareTo(other: Duration): DurationComparison;
|
|
104
|
+
/**
|
|
105
|
+
* Check if duration is zero
|
|
106
|
+
*/
|
|
107
|
+
isZero(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Check if duration is positive
|
|
110
|
+
*/
|
|
111
|
+
isPositive(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Check if duration is negative
|
|
114
|
+
*/
|
|
115
|
+
isNegative(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Convert to human-readable string
|
|
118
|
+
*/
|
|
119
|
+
toString(): string;
|
|
120
|
+
/**
|
|
121
|
+
* Convert to detailed object representation
|
|
122
|
+
*/
|
|
123
|
+
toObject(): Required<DurationInput>;
|
|
124
|
+
/**
|
|
125
|
+
* Convert to JSON representation
|
|
126
|
+
*/
|
|
127
|
+
toJSON(): number;
|
|
128
|
+
/**
|
|
129
|
+
* Create Duration from JSON
|
|
130
|
+
*/
|
|
131
|
+
static fromJSON(ms: number): Duration;
|
|
132
|
+
private calculateMilliseconds;
|
|
133
|
+
private parseString;
|
|
134
|
+
private normalizeToDuration;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create a new Duration instance
|
|
138
|
+
*/
|
|
139
|
+
export declare function createDuration(input: number | DurationInput | string): Duration;
|
|
140
|
+
/**
|
|
141
|
+
* Check if a value is a valid duration
|
|
142
|
+
*/
|
|
143
|
+
export declare function isValidDuration(value: any): value is Duration;
|
|
144
|
+
/**
|
|
145
|
+
* Parse duration from various formats
|
|
146
|
+
*/
|
|
147
|
+
export declare function parseDurationString(input: string | number | DurationInput): Duration;
|
|
148
|
+
/**
|
|
149
|
+
* Format duration to human-readable string
|
|
150
|
+
*/
|
|
151
|
+
export declare function formatDurationString(duration: Duration | number, options?: {
|
|
152
|
+
long?: boolean;
|
|
153
|
+
precision?: number;
|
|
154
|
+
}): string;
|
|
155
|
+
/**
|
|
156
|
+
* Get the maximum duration from an array
|
|
157
|
+
*/
|
|
158
|
+
export declare function maxDuration(...durations: Duration[]): Duration | null;
|
|
159
|
+
/**
|
|
160
|
+
* Get the minimum duration from an array
|
|
161
|
+
*/
|
|
162
|
+
export declare function minDuration(...durations: Duration[]): Duration | null;
|
|
163
|
+
/**
|
|
164
|
+
* Sum multiple durations
|
|
165
|
+
*/
|
|
166
|
+
export declare function sumDurations(...durations: Duration[]): Duration;
|
|
167
|
+
/**
|
|
168
|
+
* Get average duration from an array
|
|
169
|
+
*/
|
|
170
|
+
export declare function averageDuration(...durations: Duration[]): Duration | null;
|
|
171
|
+
//# sourceMappingURL=duration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/duration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import { MILLISECONDS_PER_SECOND, MILLISECONDS_PER_MINUTE, MILLISECONDS_PER_HOUR, MILLISECONDS_PER_DAY, MILLISECONDS_PER_WEEK } from './constants.js';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a duration of time with arithmetic and conversion capabilities
|
|
4
|
+
*/
|
|
5
|
+
export class Duration {
|
|
6
|
+
constructor(input) {
|
|
7
|
+
if (typeof input === 'number') {
|
|
8
|
+
this._milliseconds = input;
|
|
9
|
+
}
|
|
10
|
+
else if (typeof input === 'string') {
|
|
11
|
+
this._milliseconds = this.parseString(input);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
this._milliseconds = this.calculateMilliseconds(input);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create Duration from milliseconds
|
|
19
|
+
*/
|
|
20
|
+
static fromMilliseconds(ms) {
|
|
21
|
+
return new Duration(ms);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create Duration from seconds
|
|
25
|
+
*/
|
|
26
|
+
static fromSeconds(seconds) {
|
|
27
|
+
return new Duration(seconds * MILLISECONDS_PER_SECOND);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create Duration from minutes
|
|
31
|
+
*/
|
|
32
|
+
static fromMinutes(minutes) {
|
|
33
|
+
return new Duration(minutes * MILLISECONDS_PER_MINUTE);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create Duration from hours
|
|
37
|
+
*/
|
|
38
|
+
static fromHours(hours) {
|
|
39
|
+
return new Duration(hours * MILLISECONDS_PER_HOUR);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create Duration from days
|
|
43
|
+
*/
|
|
44
|
+
static fromDays(days) {
|
|
45
|
+
return new Duration(days * MILLISECONDS_PER_DAY);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create Duration from weeks
|
|
49
|
+
*/
|
|
50
|
+
static fromWeeks(weeks) {
|
|
51
|
+
return new Duration(weeks * MILLISECONDS_PER_WEEK);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create Duration from a string (e.g., "1h 30m", "2.5 hours", "90 seconds")
|
|
55
|
+
*/
|
|
56
|
+
static fromString(str) {
|
|
57
|
+
return new Duration(str);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create Duration between two dates
|
|
61
|
+
*/
|
|
62
|
+
static between(start, end) {
|
|
63
|
+
return new Duration(Math.abs(end.getTime() - start.getTime()));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get duration in milliseconds
|
|
67
|
+
*/
|
|
68
|
+
get milliseconds() {
|
|
69
|
+
return this._milliseconds;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get duration in seconds
|
|
73
|
+
*/
|
|
74
|
+
get seconds() {
|
|
75
|
+
return this._milliseconds / MILLISECONDS_PER_SECOND;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get duration in minutes
|
|
79
|
+
*/
|
|
80
|
+
get minutes() {
|
|
81
|
+
return this._milliseconds / MILLISECONDS_PER_MINUTE;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get duration in hours
|
|
85
|
+
*/
|
|
86
|
+
get hours() {
|
|
87
|
+
return this._milliseconds / MILLISECONDS_PER_HOUR;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get duration in days
|
|
91
|
+
*/
|
|
92
|
+
get days() {
|
|
93
|
+
return this._milliseconds / MILLISECONDS_PER_DAY;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get duration in weeks
|
|
97
|
+
*/
|
|
98
|
+
get weeks() {
|
|
99
|
+
return this._milliseconds / MILLISECONDS_PER_WEEK;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Add another duration
|
|
103
|
+
*/
|
|
104
|
+
add(other) {
|
|
105
|
+
const otherDuration = this.normalizeToDuration(other);
|
|
106
|
+
return new Duration(this._milliseconds + otherDuration._milliseconds);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Subtract another duration
|
|
110
|
+
*/
|
|
111
|
+
subtract(other) {
|
|
112
|
+
const otherDuration = this.normalizeToDuration(other);
|
|
113
|
+
return new Duration(Math.max(0, this._milliseconds - otherDuration._milliseconds));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Multiply duration by a factor
|
|
117
|
+
*/
|
|
118
|
+
multiply(factor) {
|
|
119
|
+
return new Duration(this._milliseconds * factor);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Divide duration by a factor
|
|
123
|
+
*/
|
|
124
|
+
divide(factor) {
|
|
125
|
+
if (factor === 0) {
|
|
126
|
+
throw new Error('Cannot divide duration by zero');
|
|
127
|
+
}
|
|
128
|
+
return new Duration(this._milliseconds / factor);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get absolute duration (always positive)
|
|
132
|
+
*/
|
|
133
|
+
abs() {
|
|
134
|
+
return new Duration(Math.abs(this._milliseconds));
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Negate duration
|
|
138
|
+
*/
|
|
139
|
+
negate() {
|
|
140
|
+
return new Duration(-this._milliseconds);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check if duration equals another
|
|
144
|
+
*/
|
|
145
|
+
equals(other) {
|
|
146
|
+
const otherMs = typeof other === 'number' ? other : other._milliseconds;
|
|
147
|
+
return Math.abs(this._milliseconds - otherMs) < 1; // Allow for floating point precision
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if duration is greater than another
|
|
151
|
+
*/
|
|
152
|
+
greaterThan(other) {
|
|
153
|
+
const otherMs = typeof other === 'number' ? other : other._milliseconds;
|
|
154
|
+
return this._milliseconds > otherMs;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Check if duration is less than another
|
|
158
|
+
*/
|
|
159
|
+
lessThan(other) {
|
|
160
|
+
const otherMs = typeof other === 'number' ? other : other._milliseconds;
|
|
161
|
+
return this._milliseconds < otherMs;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Compare with another duration (-1, 0, 1)
|
|
165
|
+
*/
|
|
166
|
+
compareTo(other) {
|
|
167
|
+
if (this._milliseconds < other._milliseconds)
|
|
168
|
+
return -1;
|
|
169
|
+
if (this._milliseconds > other._milliseconds)
|
|
170
|
+
return 1;
|
|
171
|
+
return 0;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Check if duration is zero
|
|
175
|
+
*/
|
|
176
|
+
isZero() {
|
|
177
|
+
return Math.abs(this._milliseconds) < 1;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if duration is positive
|
|
181
|
+
*/
|
|
182
|
+
isPositive() {
|
|
183
|
+
return this._milliseconds > 0;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Check if duration is negative
|
|
187
|
+
*/
|
|
188
|
+
isNegative() {
|
|
189
|
+
return this._milliseconds < 0;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Convert to human-readable string
|
|
193
|
+
*/
|
|
194
|
+
toString() {
|
|
195
|
+
if (this.isZero())
|
|
196
|
+
return '0ms';
|
|
197
|
+
const parts = [];
|
|
198
|
+
let remaining = Math.abs(this._milliseconds);
|
|
199
|
+
const units = [
|
|
200
|
+
{ name: 'd', value: MILLISECONDS_PER_DAY },
|
|
201
|
+
{ name: 'h', value: MILLISECONDS_PER_HOUR },
|
|
202
|
+
{ name: 'm', value: MILLISECONDS_PER_MINUTE },
|
|
203
|
+
{ name: 's', value: MILLISECONDS_PER_SECOND },
|
|
204
|
+
{ name: 'ms', value: 1 }
|
|
205
|
+
];
|
|
206
|
+
for (const unit of units) {
|
|
207
|
+
if (remaining >= unit.value) {
|
|
208
|
+
const count = Math.floor(remaining / unit.value);
|
|
209
|
+
parts.push(`${count}${unit.name}`);
|
|
210
|
+
remaining %= unit.value;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const result = parts.join(' ');
|
|
214
|
+
return this._milliseconds < 0 ? `-${result}` : result;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Convert to detailed object representation
|
|
218
|
+
*/
|
|
219
|
+
toObject() {
|
|
220
|
+
const ms = Math.abs(this._milliseconds);
|
|
221
|
+
const days = Math.floor(ms / MILLISECONDS_PER_DAY);
|
|
222
|
+
const hours = Math.floor((ms % MILLISECONDS_PER_DAY) / MILLISECONDS_PER_HOUR);
|
|
223
|
+
const minutes = Math.floor((ms % MILLISECONDS_PER_HOUR) / MILLISECONDS_PER_MINUTE);
|
|
224
|
+
const seconds = Math.floor((ms % MILLISECONDS_PER_MINUTE) / MILLISECONDS_PER_SECOND);
|
|
225
|
+
const milliseconds = ms % MILLISECONDS_PER_SECOND;
|
|
226
|
+
return {
|
|
227
|
+
years: 0, // Years/months require complex calendar calculations
|
|
228
|
+
months: 0,
|
|
229
|
+
weeks: Math.floor(days / 7),
|
|
230
|
+
days: days,
|
|
231
|
+
hours,
|
|
232
|
+
minutes,
|
|
233
|
+
seconds,
|
|
234
|
+
milliseconds
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Convert to JSON representation
|
|
239
|
+
*/
|
|
240
|
+
toJSON() {
|
|
241
|
+
return this._milliseconds;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Create Duration from JSON
|
|
245
|
+
*/
|
|
246
|
+
static fromJSON(ms) {
|
|
247
|
+
return new Duration(ms);
|
|
248
|
+
}
|
|
249
|
+
calculateMilliseconds(input) {
|
|
250
|
+
let total = 0;
|
|
251
|
+
if (input.milliseconds)
|
|
252
|
+
total += input.milliseconds;
|
|
253
|
+
if (input.seconds)
|
|
254
|
+
total += input.seconds * MILLISECONDS_PER_SECOND;
|
|
255
|
+
if (input.minutes)
|
|
256
|
+
total += input.minutes * MILLISECONDS_PER_MINUTE;
|
|
257
|
+
if (input.hours)
|
|
258
|
+
total += input.hours * MILLISECONDS_PER_HOUR;
|
|
259
|
+
if (input.days)
|
|
260
|
+
total += input.days * MILLISECONDS_PER_DAY;
|
|
261
|
+
if (input.weeks)
|
|
262
|
+
total += input.weeks * MILLISECONDS_PER_WEEK;
|
|
263
|
+
// Approximate conversions for months and years
|
|
264
|
+
if (input.months)
|
|
265
|
+
total += input.months * MILLISECONDS_PER_DAY * 30.44; // Average month
|
|
266
|
+
if (input.years)
|
|
267
|
+
total += input.years * MILLISECONDS_PER_DAY * 365.25; // Average year
|
|
268
|
+
return total;
|
|
269
|
+
}
|
|
270
|
+
parseString(str) {
|
|
271
|
+
const normalized = str.toLowerCase().trim();
|
|
272
|
+
// Handle simple formats like "1000", "1000ms"
|
|
273
|
+
if (/^\d+(?:ms)?$/.test(normalized)) {
|
|
274
|
+
return parseInt(normalized.replace('ms', ''));
|
|
275
|
+
}
|
|
276
|
+
// Handle complex formats like "1h 30m 45s"
|
|
277
|
+
const patterns = [
|
|
278
|
+
{ regex: /(\d+(?:\.\d+)?)\s*y(?:ears?)?(?!\w)/g, multiplier: MILLISECONDS_PER_DAY * 365.25 },
|
|
279
|
+
{ regex: /(\d+(?:\.\d+)?)\s*mo(?:nths?)?(?!\w)/g, multiplier: MILLISECONDS_PER_DAY * 30.44 },
|
|
280
|
+
{ regex: /(\d+(?:\.\d+)?)\s*w(?:eeks?)?(?!\w)/g, multiplier: MILLISECONDS_PER_WEEK },
|
|
281
|
+
{ regex: /(\d+(?:\.\d+)?)\s*d(?:ays?)?(?!\w)/g, multiplier: MILLISECONDS_PER_DAY },
|
|
282
|
+
{ regex: /(\d+(?:\.\d+)?)\s*h(?:ours?)?(?!\w)/g, multiplier: MILLISECONDS_PER_HOUR },
|
|
283
|
+
{ regex: /(\d+(?:\.\d+)?)\s*min(?:utes?)?(?!\w)/g, multiplier: MILLISECONDS_PER_MINUTE },
|
|
284
|
+
{ regex: /(\d+(?:\.\d+)?)\s*m(?!s|o)(?!\w)/g, multiplier: MILLISECONDS_PER_MINUTE },
|
|
285
|
+
{ regex: /(\d+(?:\.\d+)?)\s*s(?:ec(?:onds?)?)?(?!\w)/g, multiplier: MILLISECONDS_PER_SECOND },
|
|
286
|
+
{ regex: /(\d+(?:\.\d+)?)\s*ms(?!\w)/g, multiplier: 1 }
|
|
287
|
+
];
|
|
288
|
+
let total = 0;
|
|
289
|
+
let hasMatch = false;
|
|
290
|
+
for (const pattern of patterns) {
|
|
291
|
+
let match;
|
|
292
|
+
while ((match = pattern.regex.exec(normalized)) !== null) {
|
|
293
|
+
total += parseFloat(match[1]) * pattern.multiplier;
|
|
294
|
+
hasMatch = true;
|
|
295
|
+
}
|
|
296
|
+
pattern.regex.lastIndex = 0; // Reset regex
|
|
297
|
+
}
|
|
298
|
+
if (!hasMatch) {
|
|
299
|
+
throw new Error(`Invalid duration format: ${str}`);
|
|
300
|
+
}
|
|
301
|
+
return total;
|
|
302
|
+
}
|
|
303
|
+
normalizeToDuration(input) {
|
|
304
|
+
if (input instanceof Duration) {
|
|
305
|
+
return input;
|
|
306
|
+
}
|
|
307
|
+
return new Duration(input);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Create a new Duration instance
|
|
312
|
+
*/
|
|
313
|
+
export function createDuration(input) {
|
|
314
|
+
return new Duration(input);
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Check if a value is a valid duration
|
|
318
|
+
*/
|
|
319
|
+
export function isValidDuration(value) {
|
|
320
|
+
return value instanceof Duration;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Parse duration from various formats
|
|
324
|
+
*/
|
|
325
|
+
export function parseDurationString(input) {
|
|
326
|
+
return new Duration(input);
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Format duration to human-readable string
|
|
330
|
+
*/
|
|
331
|
+
export function formatDurationString(duration, options) {
|
|
332
|
+
const d = typeof duration === 'number' ? new Duration(duration) : duration;
|
|
333
|
+
if (options?.long) {
|
|
334
|
+
const obj = d.toObject();
|
|
335
|
+
const parts = [];
|
|
336
|
+
const units = [
|
|
337
|
+
{ key: 'days', singular: 'day', plural: 'days' },
|
|
338
|
+
{ key: 'hours', singular: 'hour', plural: 'hours' },
|
|
339
|
+
{ key: 'minutes', singular: 'minute', plural: 'minutes' },
|
|
340
|
+
{ key: 'seconds', singular: 'second', plural: 'seconds' }
|
|
341
|
+
];
|
|
342
|
+
for (const unit of units) {
|
|
343
|
+
const value = obj[unit.key];
|
|
344
|
+
if (value > 0) {
|
|
345
|
+
parts.push(`${value} ${value === 1 ? unit.singular : unit.plural}`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return parts.length > 0 ? parts.join(', ') : '0 seconds';
|
|
349
|
+
}
|
|
350
|
+
return d.toString();
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Get the maximum duration from an array
|
|
354
|
+
*/
|
|
355
|
+
export function maxDuration(...durations) {
|
|
356
|
+
if (durations.length === 0)
|
|
357
|
+
return null;
|
|
358
|
+
return durations.reduce((max, current) => current.greaterThan(max) ? current : max);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get the minimum duration from an array
|
|
362
|
+
*/
|
|
363
|
+
export function minDuration(...durations) {
|
|
364
|
+
if (durations.length === 0)
|
|
365
|
+
return null;
|
|
366
|
+
return durations.reduce((min, current) => current.lessThan(min) ? current : min);
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Sum multiple durations
|
|
370
|
+
*/
|
|
371
|
+
export function sumDurations(...durations) {
|
|
372
|
+
return durations.reduce((sum, current) => sum.add(current), new Duration(0));
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Get average duration from an array
|
|
376
|
+
*/
|
|
377
|
+
export function averageDuration(...durations) {
|
|
378
|
+
if (durations.length === 0)
|
|
379
|
+
return null;
|
|
380
|
+
const sum = sumDurations(...durations);
|
|
381
|
+
return sum.divide(durations.length);
|
|
382
|
+
}
|
package/dist/esm/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,aAAa,EACd,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,aAAa,EACd,MAAM,gBAAgB,CAAC;AAGxB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CA2E9E;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CA+CvE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAE,KAAK,GAAG,KAAK,GAAG,KAAa,GAAG,MAAM,CAcpF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyDtD"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -5,13 +5,21 @@
|
|
|
5
5
|
export { formatDuration, timeAgo, formatTime, parseDuration } from './format.js';
|
|
6
6
|
export { differenceInUnits, addTime, subtractTime, startOf, endOf, isBetween, businessDaysBetween } from './calculate.js';
|
|
7
7
|
export { isValidDate, isLeapYear, isPast, isFuture, isToday, isYesterday, isTomorrow, isSameDay, isWeekend, isWeekday, isValidTimeString, isValidISOString } from './validate.js';
|
|
8
|
-
export { calculateAge, getAgeInUnits, getLifeStage, getNextBirthday, getDaysUntilBirthday, isBirthday
|
|
8
|
+
export { calculateAge, getAgeInUnits, getLifeStage, getNextBirthday, getDaysUntilBirthday, isBirthday } from './age.js';
|
|
9
9
|
export { getWeekNumber, getWeekOfMonth, getQuarter, getDayOfYear, getWeeksInYear, getDaysInMonth, getDaysInYear, getEaster, getMonthsInYear, getDaysInMonthArray, getWeekdaysInMonth, getFirstDayOfMonth, getLastDayOfMonth, getFirstDayOfYear, getLastDayOfYear } from './calendar.js';
|
|
10
10
|
export { parseDate, parseRelativeDate, parseTimeAgo, parseCustomFormat, parseManyFormats } from './parse.js';
|
|
11
|
-
export { sleep, timeout, debounce, throttle, retry, createStopwatch, measureTime, measureAsync, benchmark, Stopwatch
|
|
12
|
-
export { createInterval, isValidInterval, intervalDuration, intervalContains, intervalsOverlap, intervalIntersection, mergeIntervals, subtractInterval, splitIntervalByDay, totalIntervalCoverage, normalizeIntervals
|
|
13
|
-
export { getTimezoneOffset, formatInTimeZone, getZonedTime, convertDateToZone, isValidTimeZone, COMMON_TIMEZONES, getLocalOffset, compareZoneOffsets, reinterpretAsZone
|
|
14
|
-
export { DEFAULT_WORKING_HOURS, isWorkingDay, isWorkingTime, nextWorkingTime, workingTimeBetween, addWorkingHours
|
|
15
|
-
export { today, yesterday, tomorrow, lastNDays, nextNDays, thisWeek, lastWeek, nextWeek, thisMonth, lastMonth, nextMonth, thisYear, lastYear, nextYear, rollingWindowDays, quarterRange, lastQuarter, nextQuarter, RANGE_PRESETS
|
|
11
|
+
export { sleep, timeout, debounce, throttle, retry, createStopwatch, measureTime, measureAsync, benchmark, Stopwatch } from './performance.js';
|
|
12
|
+
export { createInterval, isValidInterval, intervalDuration, intervalContains, intervalsOverlap, intervalIntersection, mergeIntervals, subtractInterval, splitIntervalByDay, totalIntervalCoverage, normalizeIntervals } from './interval.js';
|
|
13
|
+
export { getTimezoneOffset, formatInTimeZone, getZonedTime, convertDateToZone, isValidTimeZone, COMMON_TIMEZONES, getLocalOffset, compareZoneOffsets, reinterpretAsZone } from './timezone.js';
|
|
14
|
+
export { DEFAULT_WORKING_HOURS, isWorkingDay, isWorkingTime, nextWorkingTime, workingTimeBetween, addWorkingHours } from './workingHours.js';
|
|
15
|
+
export { today, yesterday, tomorrow, lastNDays, nextNDays, thisWeek, lastWeek, nextWeek, thisMonth, lastMonth, nextMonth, thisYear, lastYear, nextYear, rollingWindowDays, quarterRange, lastQuarter, nextQuarter, RANGE_PRESETS } from './rangePresets.js';
|
|
16
|
+
export { Duration, createDuration, isValidDuration, parseDurationString, formatDurationString, maxDuration, minDuration, sumDurations, averageDuration } from './duration.js';
|
|
17
|
+
export { serializeDate, deserializeDate, createDateReviver, createDateReplacer, parseISOString, toEpochTimestamp, fromEpochTimestamp, createEpochTimestamp, toDateObject, fromDateObject, isValidISODateString, isValidEpochTimestamp, cloneDate, datesEqual, now, parseJSONWithDates, stringifyWithDates } from './serialize.js';
|
|
18
|
+
export { registerLocale, getLocaleConfig, getSupportedLocales, formatRelativeTime, formatDateLocale, formatTimeLocale, formatDateTimeLocale, getMonthNames, getDayNames, getFirstDayOfWeek, isLocaleSupported, getBestMatchingLocale, detectLocale, convertRelativeTime, detectLocaleFromRelativeTime, convertFormatPattern, convertFormattedDate, convertRelativeTimeArray, compareLocaleFormats } from './locale.js';
|
|
19
|
+
export { createRecurrence, getNextOccurrence, getOccurrencesBetween, isRecurrenceDate, isValidRecurrenceRule, recurrenceToString } from './recurrence.js';
|
|
20
|
+
export { createCountdown, getRemainingTime, formatCountdown, isExpired, getProgressPercentage, getTimeUntil, createDeadline, type Countdown, type RemainingTime, type CountdownOptions } from './countdown.js';
|
|
21
|
+
export { dateRangeOverlap, hasOverlappingRanges, mergeDateRanges, findGaps, splitRange, containsDate, getIntersection, getUnion, subtractRange, getRangeDuration, expandRange, shrinkRange, rangeContains, sortRanges } from './dateRange.js';
|
|
22
|
+
export { parseNaturalDate, parseRelativePhrase, extractDatesFromText, suggestDateFromContext, type NaturalParseOptions, type ExtractedDate } from './naturalLanguage.js';
|
|
16
23
|
export { MILLISECONDS_PER_SECOND, MILLISECONDS_PER_MINUTE, MILLISECONDS_PER_HOUR, MILLISECONDS_PER_DAY, MILLISECONDS_PER_WEEK, MILLISECONDS_PER_MONTH, MILLISECONDS_PER_YEAR, SECONDS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK, type TimeUnit, type FormatOptions } from './constants.js';
|
|
24
|
+
export type { DateInput, DateRange, ParseOptions, WorkingHoursConfig, AgeResult, ZonedTime, Interval, BenchmarkResult, RecurrencePattern, RecurrenceRule, RecurrenceFrequency, LocaleFormatOptions, BusinessConfig, DateValidator, DateTransformer, TimeUtilsError, ParseError, ValidationError, DurationUnit, DurationInput, DurationComparison, SerializationOptions, DateObject, EpochTimestamp, SupportedLocale, LocaleConfig, RelativeTimeOptions, RelativeTimeUnit } from './types.js';
|
|
17
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,cAAc,EACd,OAAO,EACP,UAAU,EACV,aAAa,EACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,OAAO,EACP,KAAK,EACL,SAAS,EACT,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,WAAW,EACX,UAAU,EACV,MAAM,EACN,QAAQ,EACR,OAAO,EACP,WAAW,EACX,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -24,5 +24,21 @@ export { getTimezoneOffset, formatInTimeZone, getZonedTime, convertDateToZone, i
|
|
|
24
24
|
export { DEFAULT_WORKING_HOURS, isWorkingDay, isWorkingTime, nextWorkingTime, workingTimeBetween, addWorkingHours } from './workingHours.js';
|
|
25
25
|
// Range preset utilities
|
|
26
26
|
export { today, yesterday, tomorrow, lastNDays, nextNDays, thisWeek, lastWeek, nextWeek, thisMonth, lastMonth, nextMonth, thisYear, lastYear, nextYear, rollingWindowDays, quarterRange, lastQuarter, nextQuarter, RANGE_PRESETS } from './rangePresets.js';
|
|
27
|
+
// Duration utilities
|
|
28
|
+
export { Duration, createDuration, isValidDuration, parseDurationString, formatDurationString, maxDuration, minDuration, sumDurations, averageDuration } from './duration.js';
|
|
29
|
+
// Serialization utilities
|
|
30
|
+
export { serializeDate, deserializeDate, createDateReviver, createDateReplacer, parseISOString, toEpochTimestamp, fromEpochTimestamp, createEpochTimestamp, toDateObject, fromDateObject, isValidISODateString, isValidEpochTimestamp, cloneDate, datesEqual, now, parseJSONWithDates, stringifyWithDates } from './serialize.js';
|
|
31
|
+
// Locale utilities
|
|
32
|
+
export { registerLocale, getLocaleConfig, getSupportedLocales, formatRelativeTime, formatDateLocale, formatTimeLocale, formatDateTimeLocale, getMonthNames, getDayNames, getFirstDayOfWeek, isLocaleSupported, getBestMatchingLocale, detectLocale,
|
|
33
|
+
// Conversion utilities
|
|
34
|
+
convertRelativeTime, detectLocaleFromRelativeTime, convertFormatPattern, convertFormattedDate, convertRelativeTimeArray, compareLocaleFormats } from './locale.js';
|
|
35
|
+
// Recurrence utilities
|
|
36
|
+
export { createRecurrence, getNextOccurrence, getOccurrencesBetween, isRecurrenceDate, isValidRecurrenceRule, recurrenceToString } from './recurrence.js';
|
|
37
|
+
// Countdown utilities
|
|
38
|
+
export { createCountdown, getRemainingTime, formatCountdown, isExpired, getProgressPercentage, getTimeUntil, createDeadline } from './countdown.js';
|
|
39
|
+
// Date range utilities
|
|
40
|
+
export { dateRangeOverlap, hasOverlappingRanges, mergeDateRanges, findGaps, splitRange, containsDate, getIntersection, getUnion, subtractRange, getRangeDuration, expandRange, shrinkRange, rangeContains, sortRanges } from './dateRange.js';
|
|
41
|
+
// Natural language parsing utilities
|
|
42
|
+
export { parseNaturalDate, parseRelativePhrase, extractDatesFromText, suggestDateFromContext } from './naturalLanguage.js';
|
|
27
43
|
// Constants and types
|
|
28
44
|
export { MILLISECONDS_PER_SECOND, MILLISECONDS_PER_MINUTE, MILLISECONDS_PER_HOUR, MILLISECONDS_PER_DAY, MILLISECONDS_PER_WEEK, MILLISECONDS_PER_MONTH, MILLISECONDS_PER_YEAR, SECONDS_PER_MINUTE, SECONDS_PER_HOUR, SECONDS_PER_DAY, SECONDS_PER_WEEK } from './constants.js';
|
package/dist/esm/interval.d.ts
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Interval utilities: operations on time intervals [start, end)
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
start: Date;
|
|
6
|
-
end: Date;
|
|
7
|
-
}
|
|
4
|
+
import type { Interval, DateInput } from './types.js';
|
|
8
5
|
/** Create an interval ensuring start <= end */
|
|
9
|
-
export declare function createInterval(start:
|
|
6
|
+
export declare function createInterval(start: DateInput, end: DateInput): Interval | null;
|
|
10
7
|
/** Validate an object is a proper interval */
|
|
11
8
|
export declare function isValidInterval(i: any): i is Interval;
|
|
12
9
|
/** Duration of interval in ms */
|
|
13
10
|
export declare function intervalDuration(i: Interval): number;
|
|
14
11
|
/** Whether interval contains date (inclusive start, exclusive end) */
|
|
15
|
-
export declare function intervalContains(i: Interval, date:
|
|
12
|
+
export declare function intervalContains(i: Interval, date: DateInput): boolean;
|
|
16
13
|
/** Whether two intervals overlap */
|
|
17
14
|
export declare function intervalsOverlap(a: Interval, b: Interval): boolean;
|
|
18
15
|
/** Intersection of two intervals, or null */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interval.d.ts","sourceRoot":"","sources":["../../src/interval.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,
|
|
1
|
+
{"version":3,"file":"interval.d.ts","sourceRoot":"","sources":["../../src/interval.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtD,+CAA+C;AAC/C,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAKhF;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,QAAQ,CAErD;AAED,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAGtE;AAED,oCAAoC;AACpC,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAElE;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAI9E;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAgBhE;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAMrE;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAU1D;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAEnE;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,CAEzF"}
|