ts-time-utils 0.0.1 → 1.0.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 +365 -1
- package/dist/age.d.ts +1 -10
- package/dist/age.d.ts.map +1 -1
- package/dist/constants.d.ts +2 -21
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +12 -13
- 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/constants.d.ts +2 -21
- package/dist/esm/constants.d.ts.map +1 -1
- package/dist/esm/constants.js +12 -13
- 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 +10 -6
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -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/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/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 +229 -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 +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -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/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/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 +229 -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 +39 -3
package/dist/duration.js
ADDED
|
@@ -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/age.d.ts
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { TimeUnit } from './constants.js';
|
|
2
|
-
|
|
3
|
-
* Age calculation result
|
|
4
|
-
*/
|
|
5
|
-
export interface AgeResult {
|
|
6
|
-
years: number;
|
|
7
|
-
months: number;
|
|
8
|
-
days: number;
|
|
9
|
-
totalDays: number;
|
|
10
|
-
totalMonths: number;
|
|
11
|
-
}
|
|
2
|
+
import type { AgeResult } from './types.js';
|
|
12
3
|
/**
|
|
13
4
|
* Calculate detailed age from birth date
|
|
14
5
|
* @param birthDate - date of birth
|
package/dist/esm/age.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"age.d.ts","sourceRoot":"","sources":["../../src/age.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"age.d.ts","sourceRoot":"","sources":["../../src/age.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,GAAE,IAAiB,GAAG,SAAS,CAyBzF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,IAAI,EACf,IAAI,EAAE,QAAQ,EACd,aAAa,GAAE,IAAiB,GAC/B,MAAM,CAsBR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,IAAI,EACf,aAAa,GAAE,IAAiB,GAC/B,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAQlD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,GAAE,IAAiB,GAAG,IAAI,CAYvF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,GAAE,IAAiB,GAAG,MAAM,CAG9F;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,GAAE,IAAiB,GAAG,OAAO,CAQrF"}
|
package/dist/esm/constants.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Constants for time conversions and utility types
|
|
3
3
|
*/
|
|
4
|
+
export type { TimeUnit, FormatOptions } from './types.js';
|
|
4
5
|
export declare const MILLISECONDS_PER_SECOND = 1000;
|
|
5
6
|
export declare const MILLISECONDS_PER_MINUTE: number;
|
|
6
7
|
export declare const MILLISECONDS_PER_HOUR: number;
|
|
@@ -8,28 +9,8 @@ export declare const MILLISECONDS_PER_DAY: number;
|
|
|
8
9
|
export declare const MILLISECONDS_PER_WEEK: number;
|
|
9
10
|
export declare const MILLISECONDS_PER_MONTH: number;
|
|
10
11
|
export declare const MILLISECONDS_PER_YEAR: number;
|
|
11
|
-
/**
|
|
12
|
-
* Second-based constants
|
|
13
|
-
*/
|
|
14
12
|
export declare const SECONDS_PER_MINUTE = 60;
|
|
15
13
|
export declare const SECONDS_PER_HOUR: number;
|
|
16
14
|
export declare const SECONDS_PER_DAY: number;
|
|
17
15
|
export declare const SECONDS_PER_WEEK: number;
|
|
18
|
-
/**
|
|
19
|
-
* Common time units
|
|
20
|
-
*/
|
|
21
|
-
export type TimeUnit = 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'years';
|
|
22
|
-
/**
|
|
23
|
-
* Formatting options
|
|
24
|
-
*/
|
|
25
|
-
export interface FormatOptions {
|
|
26
|
-
/** Include milliseconds in output */
|
|
27
|
-
includeMs?: boolean;
|
|
28
|
-
/** Use short format (e.g., "1h" vs "1 hour") */
|
|
29
|
-
short?: boolean;
|
|
30
|
-
/** Maximum number of units to show */
|
|
31
|
-
maxUnits?: number;
|
|
32
|
-
/** Round to nearest unit instead of floor */
|
|
33
|
-
round?: boolean;
|
|
34
|
-
}
|
|
35
16
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG1D,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,QAAY,CAAC;AACjD,eAAO,MAAM,qBAAqB,QAAiB,CAAC;AACpD,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AACxD,eAAO,MAAM,qBAAqB,QAA0B,CAAC;AAC7D,eAAO,MAAM,sBAAsB,QAA2B,CAAC;AAC/D,eAAO,MAAM,qBAAqB,QAA4B,CAAC;AAG/D,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,gBAAgB,QAAU,CAAC;AACxC,eAAO,MAAM,eAAe,QAAe,CAAC;AAC5C,eAAO,MAAM,gBAAgB,QAAmB,CAAC"}
|
package/dist/esm/constants.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Constants for time conversions and utility types
|
|
3
3
|
*/
|
|
4
|
+
// Milliseconds per unit
|
|
4
5
|
export const MILLISECONDS_PER_SECOND = 1000;
|
|
5
|
-
export const MILLISECONDS_PER_MINUTE = 60 *
|
|
6
|
-
export const MILLISECONDS_PER_HOUR = 60 *
|
|
7
|
-
export const MILLISECONDS_PER_DAY = 24 *
|
|
8
|
-
export const MILLISECONDS_PER_WEEK = 7 *
|
|
9
|
-
export const MILLISECONDS_PER_MONTH = 30 *
|
|
10
|
-
export const MILLISECONDS_PER_YEAR = 365 *
|
|
11
|
-
|
|
12
|
-
* Second-based constants
|
|
13
|
-
*/
|
|
6
|
+
export const MILLISECONDS_PER_MINUTE = 60 * 1000;
|
|
7
|
+
export const MILLISECONDS_PER_HOUR = 60 * 60 * 1000;
|
|
8
|
+
export const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
9
|
+
export const MILLISECONDS_PER_WEEK = 7 * 24 * 60 * 60 * 1000;
|
|
10
|
+
export const MILLISECONDS_PER_MONTH = 30 * 24 * 60 * 60 * 1000; // Approximate
|
|
11
|
+
export const MILLISECONDS_PER_YEAR = 365 * 24 * 60 * 60 * 1000; // Approximate
|
|
12
|
+
// Seconds per unit
|
|
14
13
|
export const SECONDS_PER_MINUTE = 60;
|
|
15
|
-
export const SECONDS_PER_HOUR = 60 *
|
|
16
|
-
export const SECONDS_PER_DAY = 24 *
|
|
17
|
-
export const SECONDS_PER_WEEK = 7 *
|
|
14
|
+
export const SECONDS_PER_HOUR = 60 * 60;
|
|
15
|
+
export const SECONDS_PER_DAY = 24 * 60 * 60;
|
|
16
|
+
export const SECONDS_PER_WEEK = 7 * 24 * 60 * 60;
|
|
@@ -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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"}
|