filewisee 0.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/LICENSE +21 -0
- package/dist/compare.d.ts +46 -0
- package/dist/compare.d.ts.map +1 -0
- package/dist/compare.js +98 -0
- package/dist/compare.js.map +1 -0
- package/dist/constants.d.ts +15 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +15 -0
- package/dist/constants.js.map +1 -0
- package/dist/diff.d.ts +43 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +105 -0
- package/dist/diff.js.map +1 -0
- package/dist/file.d.ts +6 -0
- package/dist/file.d.ts.map +1 -0
- package/dist/file.js +37 -0
- package/dist/file.js.map +1 -0
- package/dist/format.d.ts +28 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +99 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/locale.d.ts +11 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +29 -0
- package/dist/locale.js.map +1 -0
- package/dist/manipulate.d.ts +65 -0
- package/dist/manipulate.d.ts.map +1 -0
- package/dist/manipulate.js +172 -0
- package/dist/manipulate.js.map +1 -0
- package/dist/parse.d.ts +24 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +135 -0
- package/dist/parse.js.map +1 -0
- package/dist/range.d.ts +25 -0
- package/dist/range.d.ts.map +1 -0
- package/dist/range.js +57 -0
- package/dist/range.js.map +1 -0
- package/dist/relative.d.ts +25 -0
- package/dist/relative.d.ts.map +1 -0
- package/dist/relative.js +60 -0
- package/dist/relative.js.map +1 -0
- package/dist/types.d.ts +37 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +33 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +64 -0
- package/dist/validate.js.map +1 -0
- package/package.json +40 -0
package/dist/locale.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Locale } from './types.ts';
|
|
2
|
+
/** Default English (US) locale used when none is supplied. */
|
|
3
|
+
export declare const enUS: Locale;
|
|
4
|
+
/**
|
|
5
|
+
* Sets the locale used by {@link format} and relative-time helpers when no
|
|
6
|
+
* explicit locale is passed.
|
|
7
|
+
*/
|
|
8
|
+
export declare function setDefaultLocale(locale: Locale): void;
|
|
9
|
+
/** Returns the currently active default locale. */
|
|
10
|
+
export declare function getDefaultLocale(): Locale;
|
|
11
|
+
//# sourceMappingURL=locale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,8DAA8D;AAC9D,eAAO,MAAM,IAAI,EAAE,MAclB,CAAA;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/locale.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Default English (US) locale used when none is supplied. */
|
|
2
|
+
export const enUS = {
|
|
3
|
+
months: [
|
|
4
|
+
'January', 'February', 'March', 'April', 'May', 'June',
|
|
5
|
+
'July', 'August', 'September', 'October', 'November', 'December',
|
|
6
|
+
],
|
|
7
|
+
monthsShort: [
|
|
8
|
+
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
|
|
9
|
+
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',
|
|
10
|
+
],
|
|
11
|
+
weekdays: [
|
|
12
|
+
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday',
|
|
13
|
+
],
|
|
14
|
+
weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
15
|
+
meridiem: ['AM', 'PM'],
|
|
16
|
+
};
|
|
17
|
+
let activeLocale = enUS;
|
|
18
|
+
/**
|
|
19
|
+
* Sets the locale used by {@link format} and relative-time helpers when no
|
|
20
|
+
* explicit locale is passed.
|
|
21
|
+
*/
|
|
22
|
+
export function setDefaultLocale(locale) {
|
|
23
|
+
activeLocale = locale;
|
|
24
|
+
}
|
|
25
|
+
/** Returns the currently active default locale. */
|
|
26
|
+
export function getDefaultLocale() {
|
|
27
|
+
return activeLocale;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,IAAI,GAAW;IAC1B,MAAM,EAAE;QACN,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;QACtD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;KACjE;IACD,WAAW,EAAE;QACX,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;QACxC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;KACzC;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU;KAC7E;IACD,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IAChE,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;CACvB,CAAA;AAED,IAAI,YAAY,GAAW,IAAI,CAAA;AAE/B;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,YAAY,GAAG,MAAM,CAAA;AACvB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,YAAY,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { DateInput, TimeUnit, Weekday } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Adds a number of `days` to a date, returning a new `Date`.
|
|
4
|
+
* Negative values subtract. The input is never mutated.
|
|
5
|
+
*/
|
|
6
|
+
export declare function addDays(input: DateInput, days: number): Date;
|
|
7
|
+
/** Adds `weeks` (×7 days) to a date. */
|
|
8
|
+
export declare function addWeeks(input: DateInput, weeks: number): Date;
|
|
9
|
+
/** Adds `hours` to a date. */
|
|
10
|
+
export declare function addHours(input: DateInput, hours: number): Date;
|
|
11
|
+
/** Adds `minutes` to a date. */
|
|
12
|
+
export declare function addMinutes(input: DateInput, minutes: number): Date;
|
|
13
|
+
/** Adds `seconds` to a date. */
|
|
14
|
+
export declare function addSeconds(input: DateInput, seconds: number): Date;
|
|
15
|
+
/** Adds `milliseconds` to a date. */
|
|
16
|
+
export declare function addMilliseconds(input: DateInput, milliseconds: number): Date;
|
|
17
|
+
/**
|
|
18
|
+
* Adds `months` to a date.
|
|
19
|
+
*
|
|
20
|
+
* Clamps the day-of-month so it never overflows into the next month — e.g.
|
|
21
|
+
* `addMonths('2024-01-31', 1)` yields `2024-02-29`, not `2024-03-02`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function addMonths(input: DateInput, months: number): Date;
|
|
24
|
+
/** Adds `quarters` (×3 months) to a date, with the same day-clamping as {@link addMonths}. */
|
|
25
|
+
export declare function addQuarters(input: DateInput, quarters: number): Date;
|
|
26
|
+
/** Adds `years` to a date, clamping Feb 29 → Feb 28 on non-leap years. */
|
|
27
|
+
export declare function addYears(input: DateInput, years: number): Date;
|
|
28
|
+
/**
|
|
29
|
+
* Generic add by {@link TimeUnit}. Negative `amount` subtracts.
|
|
30
|
+
*
|
|
31
|
+
* @example add('2024-01-01', 3, 'month') // 2024-04-01
|
|
32
|
+
*/
|
|
33
|
+
export declare function add(input: DateInput, amount: number, unit: TimeUnit): Date;
|
|
34
|
+
/** Subtracts `amount` of `unit` from a date — the inverse of {@link add}. */
|
|
35
|
+
export declare function subtract(input: DateInput, amount: number, unit: TimeUnit): Date;
|
|
36
|
+
/**
|
|
37
|
+
* Returns a new date snapped to the start of the given unit.
|
|
38
|
+
*
|
|
39
|
+
* @param weekStartsOn First day of the week for `unit: 'week'` (default `0` = Sunday).
|
|
40
|
+
* @example startOf('2024-03-15T13:45', 'month') // 2024-03-01T00:00:00.000
|
|
41
|
+
*/
|
|
42
|
+
export declare function startOf(input: DateInput, unit: TimeUnit, weekStartsOn?: Weekday): Date;
|
|
43
|
+
/**
|
|
44
|
+
* Returns a new date snapped to the last representable instant of the given
|
|
45
|
+
* unit (the millisecond before the next unit begins).
|
|
46
|
+
*
|
|
47
|
+
* @example endOf('2024-02-10', 'month') // 2024-02-29T23:59:59.999
|
|
48
|
+
*/
|
|
49
|
+
export declare function endOf(input: DateInput, unit: TimeUnit, weekStartsOn?: Weekday): Date;
|
|
50
|
+
/**
|
|
51
|
+
* Sets specific calendar/clock fields, returning a new `Date`.
|
|
52
|
+
* Only the provided fields change.
|
|
53
|
+
*
|
|
54
|
+
* @example set('2024-01-01', { hour: 9, minute: 30 })
|
|
55
|
+
*/
|
|
56
|
+
export declare function set(input: DateInput, values: Partial<{
|
|
57
|
+
year: number;
|
|
58
|
+
month: number;
|
|
59
|
+
date: number;
|
|
60
|
+
hour: number;
|
|
61
|
+
minute: number;
|
|
62
|
+
second: number;
|
|
63
|
+
millisecond: number;
|
|
64
|
+
}>): Date;
|
|
65
|
+
//# sourceMappingURL=manipulate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manipulate.d.ts","sourceRoot":"","sources":["../src/manipulate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAI9D;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED,wCAAwC;AACxC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED,8BAA8B;AAC9B,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI9D;AAED,gCAAgC;AAChC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED,gCAAgC;AAChC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED,qCAAqC;AACrC,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAShE;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAY1E;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,YAAY,GAAE,OAAW,GACxB,IAAI,CAuCN;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CACnB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,YAAY,GAAE,OAAW,GACxB,IAAI,CAYN;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CACjB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;IACzC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAClE,CAAC,GACD,IAAI,CAUN"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { MONTHS_PER_YEAR } from "./constants.js";
|
|
2
|
+
import { daysInMonth, toDate } from "./validate.js";
|
|
3
|
+
/**
|
|
4
|
+
* Adds a number of `days` to a date, returning a new `Date`.
|
|
5
|
+
* Negative values subtract. The input is never mutated.
|
|
6
|
+
*/
|
|
7
|
+
export function addDays(input, days) {
|
|
8
|
+
const date = toDate(input);
|
|
9
|
+
date.setDate(date.getDate() + days);
|
|
10
|
+
return date;
|
|
11
|
+
}
|
|
12
|
+
/** Adds `weeks` (×7 days) to a date. */
|
|
13
|
+
export function addWeeks(input, weeks) {
|
|
14
|
+
return addDays(input, weeks * 7);
|
|
15
|
+
}
|
|
16
|
+
/** Adds `hours` to a date. */
|
|
17
|
+
export function addHours(input, hours) {
|
|
18
|
+
const date = toDate(input);
|
|
19
|
+
date.setHours(date.getHours() + hours);
|
|
20
|
+
return date;
|
|
21
|
+
}
|
|
22
|
+
/** Adds `minutes` to a date. */
|
|
23
|
+
export function addMinutes(input, minutes) {
|
|
24
|
+
const date = toDate(input);
|
|
25
|
+
date.setMinutes(date.getMinutes() + minutes);
|
|
26
|
+
return date;
|
|
27
|
+
}
|
|
28
|
+
/** Adds `seconds` to a date. */
|
|
29
|
+
export function addSeconds(input, seconds) {
|
|
30
|
+
const date = toDate(input);
|
|
31
|
+
date.setSeconds(date.getSeconds() + seconds);
|
|
32
|
+
return date;
|
|
33
|
+
}
|
|
34
|
+
/** Adds `milliseconds` to a date. */
|
|
35
|
+
export function addMilliseconds(input, milliseconds) {
|
|
36
|
+
return new Date(toDate(input).getTime() + milliseconds);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Adds `months` to a date.
|
|
40
|
+
*
|
|
41
|
+
* Clamps the day-of-month so it never overflows into the next month — e.g.
|
|
42
|
+
* `addMonths('2024-01-31', 1)` yields `2024-02-29`, not `2024-03-02`.
|
|
43
|
+
*/
|
|
44
|
+
export function addMonths(input, months) {
|
|
45
|
+
const date = toDate(input);
|
|
46
|
+
const day = date.getDate();
|
|
47
|
+
// Move to the 1st to avoid intermediate overflow, then re-apply a clamped day.
|
|
48
|
+
date.setDate(1);
|
|
49
|
+
date.setMonth(date.getMonth() + months);
|
|
50
|
+
date.setDate(Math.min(day, daysInMonth(date.getFullYear(), date.getMonth())));
|
|
51
|
+
return date;
|
|
52
|
+
}
|
|
53
|
+
/** Adds `quarters` (×3 months) to a date, with the same day-clamping as {@link addMonths}. */
|
|
54
|
+
export function addQuarters(input, quarters) {
|
|
55
|
+
return addMonths(input, quarters * 3);
|
|
56
|
+
}
|
|
57
|
+
/** Adds `years` to a date, clamping Feb 29 → Feb 28 on non-leap years. */
|
|
58
|
+
export function addYears(input, years) {
|
|
59
|
+
return addMonths(input, years * MONTHS_PER_YEAR);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generic add by {@link TimeUnit}. Negative `amount` subtracts.
|
|
63
|
+
*
|
|
64
|
+
* @example add('2024-01-01', 3, 'month') // 2024-04-01
|
|
65
|
+
*/
|
|
66
|
+
export function add(input, amount, unit) {
|
|
67
|
+
switch (unit) {
|
|
68
|
+
case 'year': return addYears(input, amount);
|
|
69
|
+
case 'quarter': return addQuarters(input, amount);
|
|
70
|
+
case 'month': return addMonths(input, amount);
|
|
71
|
+
case 'week': return addWeeks(input, amount);
|
|
72
|
+
case 'day': return addDays(input, amount);
|
|
73
|
+
case 'hour': return addHours(input, amount);
|
|
74
|
+
case 'minute': return addMinutes(input, amount);
|
|
75
|
+
case 'second': return addSeconds(input, amount);
|
|
76
|
+
case 'millisecond': return addMilliseconds(input, amount);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Subtracts `amount` of `unit` from a date — the inverse of {@link add}. */
|
|
80
|
+
export function subtract(input, amount, unit) {
|
|
81
|
+
return add(input, -amount, unit);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Returns a new date snapped to the start of the given unit.
|
|
85
|
+
*
|
|
86
|
+
* @param weekStartsOn First day of the week for `unit: 'week'` (default `0` = Sunday).
|
|
87
|
+
* @example startOf('2024-03-15T13:45', 'month') // 2024-03-01T00:00:00.000
|
|
88
|
+
*/
|
|
89
|
+
export function startOf(input, unit, weekStartsOn = 0) {
|
|
90
|
+
const date = toDate(input);
|
|
91
|
+
switch (unit) {
|
|
92
|
+
case 'year':
|
|
93
|
+
date.setMonth(0, 1);
|
|
94
|
+
date.setHours(0, 0, 0, 0);
|
|
95
|
+
break;
|
|
96
|
+
case 'quarter': {
|
|
97
|
+
const q = Math.floor(date.getMonth() / 3);
|
|
98
|
+
date.setMonth(q * 3, 1);
|
|
99
|
+
date.setHours(0, 0, 0, 0);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'month':
|
|
103
|
+
date.setDate(1);
|
|
104
|
+
date.setHours(0, 0, 0, 0);
|
|
105
|
+
break;
|
|
106
|
+
case 'week': {
|
|
107
|
+
const diff = (date.getDay() - weekStartsOn + 7) % 7;
|
|
108
|
+
date.setDate(date.getDate() - diff);
|
|
109
|
+
date.setHours(0, 0, 0, 0);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case 'day':
|
|
113
|
+
date.setHours(0, 0, 0, 0);
|
|
114
|
+
break;
|
|
115
|
+
case 'hour':
|
|
116
|
+
date.setMinutes(0, 0, 0);
|
|
117
|
+
break;
|
|
118
|
+
case 'minute':
|
|
119
|
+
date.setSeconds(0, 0);
|
|
120
|
+
break;
|
|
121
|
+
case 'second':
|
|
122
|
+
date.setMilliseconds(0);
|
|
123
|
+
break;
|
|
124
|
+
case 'millisecond':
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
return date;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Returns a new date snapped to the last representable instant of the given
|
|
131
|
+
* unit (the millisecond before the next unit begins).
|
|
132
|
+
*
|
|
133
|
+
* @example endOf('2024-02-10', 'month') // 2024-02-29T23:59:59.999
|
|
134
|
+
*/
|
|
135
|
+
export function endOf(input, unit, weekStartsOn = 0) {
|
|
136
|
+
switch (unit) {
|
|
137
|
+
case 'year': return new Date(startOf(input, 'year').getFullYear() + 1, 0, 1, 0, 0, 0, -1);
|
|
138
|
+
case 'quarter': return new Date(addQuarters(startOf(input, 'quarter'), 1).getTime() - 1);
|
|
139
|
+
case 'month': return new Date(addMonths(startOf(input, 'month'), 1).getTime() - 1);
|
|
140
|
+
case 'week': return new Date(addDays(startOf(input, 'week', weekStartsOn), 7).getTime() - 1);
|
|
141
|
+
case 'day': return new Date(addDays(startOf(input, 'day'), 1).getTime() - 1);
|
|
142
|
+
case 'hour': return new Date(addHours(startOf(input, 'hour'), 1).getTime() - 1);
|
|
143
|
+
case 'minute': return new Date(addMinutes(startOf(input, 'minute'), 1).getTime() - 1);
|
|
144
|
+
case 'second': return new Date(addSeconds(startOf(input, 'second'), 1).getTime() - 1);
|
|
145
|
+
case 'millisecond': return toDate(input);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Sets specific calendar/clock fields, returning a new `Date`.
|
|
150
|
+
* Only the provided fields change.
|
|
151
|
+
*
|
|
152
|
+
* @example set('2024-01-01', { hour: 9, minute: 30 })
|
|
153
|
+
*/
|
|
154
|
+
export function set(input, values) {
|
|
155
|
+
const d = toDate(input);
|
|
156
|
+
if (values.year !== undefined)
|
|
157
|
+
d.setFullYear(values.year);
|
|
158
|
+
if (values.month !== undefined)
|
|
159
|
+
d.setMonth(values.month);
|
|
160
|
+
if (values.date !== undefined)
|
|
161
|
+
d.setDate(values.date);
|
|
162
|
+
if (values.hour !== undefined)
|
|
163
|
+
d.setHours(values.hour);
|
|
164
|
+
if (values.minute !== undefined)
|
|
165
|
+
d.setMinutes(values.minute);
|
|
166
|
+
if (values.second !== undefined)
|
|
167
|
+
d.setSeconds(values.second);
|
|
168
|
+
if (values.millisecond !== undefined)
|
|
169
|
+
d.setMilliseconds(values.millisecond);
|
|
170
|
+
return d;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=manipulate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manipulate.js","sourceRoot":"","sources":["../src/manipulate.ts"],"names":[],"mappings":"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"}
|
package/dist/parse.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Locale } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Parses an ISO-8601 string into a `Date`, returning `null` if it is not a
|
|
4
|
+
* valid, real instant. Thin, safe wrapper over the native parser.
|
|
5
|
+
*
|
|
6
|
+
* @example parseISO('2024-03-09T14:05:00Z') // Date
|
|
7
|
+
* @example parseISO('not a date') // null
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseISO(value: string): Date | null;
|
|
10
|
+
/**
|
|
11
|
+
* Parses a date string against an explicit token pattern (the inverse of
|
|
12
|
+
* {@link format}). Returns `null` if the string doesn't match or yields an
|
|
13
|
+
* invalid date.
|
|
14
|
+
*
|
|
15
|
+
* Unmatched clock fields default to zero; an unmatched year defaults to 1970.
|
|
16
|
+
* Literal text may be wrapped in `[...]`, mirroring {@link format}.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* parse('09/03/2024', 'DD/MM/YYYY') // 2024-03-09T00:00 local
|
|
20
|
+
* parse('March 9, 2024', 'MMMM D, YYYY') // 2024-03-09T00:00 local
|
|
21
|
+
* parse('2:05 pm', 'h:mm a') // today at 14:05
|
|
22
|
+
*/
|
|
23
|
+
export declare function parse(value: string, pattern: string, locale?: Locale): Date | null;
|
|
24
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,MAAM,EAAE,MAAM,YAAY,CAAA;AAInD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEnD;AA2BD;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAA2B,GAClC,IAAI,GAAG,IAAI,CA6Db"}
|
package/dist/parse.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { getDefaultLocale } from "./locale.js";
|
|
2
|
+
import { tryToDate } from "./validate.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parses an ISO-8601 string into a `Date`, returning `null` if it is not a
|
|
5
|
+
* valid, real instant. Thin, safe wrapper over the native parser.
|
|
6
|
+
*
|
|
7
|
+
* @example parseISO('2024-03-09T14:05:00Z') // Date
|
|
8
|
+
* @example parseISO('not a date') // null
|
|
9
|
+
*/
|
|
10
|
+
export function parseISO(value) {
|
|
11
|
+
return tryToDate(value);
|
|
12
|
+
}
|
|
13
|
+
/** Tokens understood by {@link parse}, mapped to a capturing regex fragment. */
|
|
14
|
+
const PARSE_TOKENS = {
|
|
15
|
+
YYYY: '(\\d{4})',
|
|
16
|
+
YY: '(\\d{2})',
|
|
17
|
+
MM: '(\\d{2})',
|
|
18
|
+
M: '(\\d{1,2})',
|
|
19
|
+
DD: '(\\d{2})',
|
|
20
|
+
D: '(\\d{1,2})',
|
|
21
|
+
HH: '(\\d{2})',
|
|
22
|
+
H: '(\\d{1,2})',
|
|
23
|
+
hh: '(\\d{2})',
|
|
24
|
+
h: '(\\d{1,2})',
|
|
25
|
+
mm: '(\\d{2})',
|
|
26
|
+
m: '(\\d{1,2})',
|
|
27
|
+
ss: '(\\d{2})',
|
|
28
|
+
s: '(\\d{1,2})',
|
|
29
|
+
SSS: '(\\d{3})',
|
|
30
|
+
MMMM: '([A-Za-z\\u00C0-\\u024F]+)',
|
|
31
|
+
MMM: '([A-Za-z\\u00C0-\\u024F]+)',
|
|
32
|
+
A: '([AaPp][Mm])',
|
|
33
|
+
a: '([AaPp][Mm])',
|
|
34
|
+
};
|
|
35
|
+
const escapeRegExp = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
36
|
+
/**
|
|
37
|
+
* Parses a date string against an explicit token pattern (the inverse of
|
|
38
|
+
* {@link format}). Returns `null` if the string doesn't match or yields an
|
|
39
|
+
* invalid date.
|
|
40
|
+
*
|
|
41
|
+
* Unmatched clock fields default to zero; an unmatched year defaults to 1970.
|
|
42
|
+
* Literal text may be wrapped in `[...]`, mirroring {@link format}.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* parse('09/03/2024', 'DD/MM/YYYY') // 2024-03-09T00:00 local
|
|
46
|
+
* parse('March 9, 2024', 'MMMM D, YYYY') // 2024-03-09T00:00 local
|
|
47
|
+
* parse('2:05 pm', 'h:mm a') // today at 14:05
|
|
48
|
+
*/
|
|
49
|
+
export function parse(value, pattern, locale = getDefaultLocale()) {
|
|
50
|
+
const order = [];
|
|
51
|
+
const tokenNames = Object.keys(PARSE_TOKENS).sort((a, b) => b.length - a.length);
|
|
52
|
+
const tokenRe = new RegExp(`\\[([^\\]]*)\\]|${tokenNames.join('|')}`, 'g');
|
|
53
|
+
// Build a regex from the pattern, recording the token order for later mapping.
|
|
54
|
+
const source = pattern.replace(tokenRe, (match, literal) => {
|
|
55
|
+
if (literal !== undefined)
|
|
56
|
+
return escapeRegExp(literal);
|
|
57
|
+
order.push(match);
|
|
58
|
+
return PARSE_TOKENS[match];
|
|
59
|
+
});
|
|
60
|
+
const m = new RegExp(`^${source}$`).exec(value);
|
|
61
|
+
if (!m)
|
|
62
|
+
return null;
|
|
63
|
+
const parts = {
|
|
64
|
+
year: 1970, month: 0, day: 1,
|
|
65
|
+
hour: 0, minute: 0, second: 0, ms: 0,
|
|
66
|
+
meridiem: null,
|
|
67
|
+
};
|
|
68
|
+
for (let i = 0; i < order.length; i++) {
|
|
69
|
+
const token = order[i];
|
|
70
|
+
const raw = m[i + 1];
|
|
71
|
+
switch (token) {
|
|
72
|
+
case 'YYYY':
|
|
73
|
+
parts.year = Number(raw);
|
|
74
|
+
break;
|
|
75
|
+
case 'YY':
|
|
76
|
+
parts.year = 2000 + Number(raw);
|
|
77
|
+
break;
|
|
78
|
+
case 'MM':
|
|
79
|
+
case 'M':
|
|
80
|
+
parts.month = Number(raw) - 1;
|
|
81
|
+
break;
|
|
82
|
+
case 'DD':
|
|
83
|
+
case 'D':
|
|
84
|
+
parts.day = Number(raw);
|
|
85
|
+
break;
|
|
86
|
+
case 'HH':
|
|
87
|
+
case 'H':
|
|
88
|
+
case 'hh':
|
|
89
|
+
case 'h':
|
|
90
|
+
parts.hour = Number(raw);
|
|
91
|
+
break;
|
|
92
|
+
case 'mm':
|
|
93
|
+
case 'm':
|
|
94
|
+
parts.minute = Number(raw);
|
|
95
|
+
break;
|
|
96
|
+
case 'ss':
|
|
97
|
+
case 's':
|
|
98
|
+
parts.second = Number(raw);
|
|
99
|
+
break;
|
|
100
|
+
case 'SSS':
|
|
101
|
+
parts.ms = Number(raw);
|
|
102
|
+
break;
|
|
103
|
+
case 'A':
|
|
104
|
+
case 'a':
|
|
105
|
+
parts.meridiem = raw.toLowerCase();
|
|
106
|
+
break;
|
|
107
|
+
case 'MMMM': {
|
|
108
|
+
const idx = locale.months.findIndex((mm) => mm.toLowerCase() === raw.toLowerCase());
|
|
109
|
+
if (idx === -1)
|
|
110
|
+
return null;
|
|
111
|
+
parts.month = idx;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case 'MMM': {
|
|
115
|
+
const idx = locale.monthsShort.findIndex((mm) => mm.toLowerCase() === raw.toLowerCase());
|
|
116
|
+
if (idx === -1)
|
|
117
|
+
return null;
|
|
118
|
+
parts.month = idx;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (parts.meridiem === 'pm' && parts.hour < 12)
|
|
124
|
+
parts.hour += 12;
|
|
125
|
+
if (parts.meridiem === 'am' && parts.hour === 12)
|
|
126
|
+
parts.hour = 0;
|
|
127
|
+
const date = new Date(parts.year, parts.month, parts.day, parts.hour, parts.minute, parts.second, parts.ms);
|
|
128
|
+
if (Number.isNaN(date.getTime()))
|
|
129
|
+
return null;
|
|
130
|
+
// Reject overflow (e.g. day 31 in a 30-day month silently rolling over).
|
|
131
|
+
if (date.getMonth() !== parts.month || date.getDate() !== parts.day)
|
|
132
|
+
return null;
|
|
133
|
+
return date;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
package/dist/range.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DateInput, Interval, TimeUnit } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Generates dates from `start` up to and including `end`, stepping by `step`
|
|
4
|
+
* units of `unit`. Yields lazily, so it is safe over very large ranges.
|
|
5
|
+
*
|
|
6
|
+
* Direction is inferred from the bounds — pass a positive `step` regardless of
|
|
7
|
+
* whether `start` is before or after `end`.
|
|
8
|
+
*
|
|
9
|
+
* @example [...eachOf('2024-01-01', '2024-01-03', 'day')] // 3 dates
|
|
10
|
+
*/
|
|
11
|
+
export declare function eachOf(start: DateInput, end: DateInput, unit: TimeUnit, step?: number): Generator<Date>;
|
|
12
|
+
/** Collects {@link eachOf} into an array of days between two dates (inclusive). */
|
|
13
|
+
export declare function eachDayOfInterval(start: DateInput, end: DateInput): Date[];
|
|
14
|
+
/** Collects each month start between two dates (inclusive). */
|
|
15
|
+
export declare function eachMonthOfInterval(start: DateInput, end: DateInput): Date[];
|
|
16
|
+
/** Returns `true` if two intervals share at least one instant. */
|
|
17
|
+
export declare function overlaps(a: Interval, b: Interval): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the overlapping interval shared by `a` and `b`, or `null` if they
|
|
20
|
+
* don't intersect.
|
|
21
|
+
*/
|
|
22
|
+
export declare function intersection(a: Interval, b: Interval): Interval | null;
|
|
23
|
+
/** Total number of whole days an interval spans (inclusive of both ends). */
|
|
24
|
+
export declare function durationDays(interval: Interval): number;
|
|
25
|
+
//# sourceMappingURL=range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAK/D;;;;;;;;GAQG;AACH,wBAAiB,MAAM,CACrB,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,QAAQ,EACd,IAAI,SAAI,GACP,SAAS,CAAC,IAAI,CAAC,CAajB;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,CAE1E;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,CAE5E;AAED,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAM1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAKtE;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEvD"}
|
package/dist/range.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { add, startOf } from "./manipulate.js";
|
|
2
|
+
import { isAfter, isBefore } from "./compare.js";
|
|
3
|
+
import { toDate } from "./validate.js";
|
|
4
|
+
/**
|
|
5
|
+
* Generates dates from `start` up to and including `end`, stepping by `step`
|
|
6
|
+
* units of `unit`. Yields lazily, so it is safe over very large ranges.
|
|
7
|
+
*
|
|
8
|
+
* Direction is inferred from the bounds — pass a positive `step` regardless of
|
|
9
|
+
* whether `start` is before or after `end`.
|
|
10
|
+
*
|
|
11
|
+
* @example [...eachOf('2024-01-01', '2024-01-03', 'day')] // 3 dates
|
|
12
|
+
*/
|
|
13
|
+
export function* eachOf(start, end, unit, step = 1) {
|
|
14
|
+
if (step <= 0)
|
|
15
|
+
throw new RangeError('step must be a positive number');
|
|
16
|
+
const from = toDate(start);
|
|
17
|
+
const to = toDate(end);
|
|
18
|
+
const ascending = !isAfter(from, to);
|
|
19
|
+
const signedStep = ascending ? step : -step;
|
|
20
|
+
let cursor = from;
|
|
21
|
+
while (ascending ? !isAfter(cursor, to) : !isBefore(cursor, to)) {
|
|
22
|
+
yield new Date(cursor.getTime());
|
|
23
|
+
cursor = add(cursor, signedStep, unit);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Collects {@link eachOf} into an array of days between two dates (inclusive). */
|
|
27
|
+
export function eachDayOfInterval(start, end) {
|
|
28
|
+
return [...eachOf(start, end, 'day')];
|
|
29
|
+
}
|
|
30
|
+
/** Collects each month start between two dates (inclusive). */
|
|
31
|
+
export function eachMonthOfInterval(start, end) {
|
|
32
|
+
return [...eachOf(startOf(start, 'month'), startOf(end, 'month'), 'month')];
|
|
33
|
+
}
|
|
34
|
+
/** Returns `true` if two intervals share at least one instant. */
|
|
35
|
+
export function overlaps(a, b) {
|
|
36
|
+
const aStart = toDate(a.start).getTime();
|
|
37
|
+
const aEnd = toDate(a.end).getTime();
|
|
38
|
+
const bStart = toDate(b.start).getTime();
|
|
39
|
+
const bEnd = toDate(b.end).getTime();
|
|
40
|
+
return Math.max(aStart, bStart) <= Math.min(aEnd, bEnd);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns the overlapping interval shared by `a` and `b`, or `null` if they
|
|
44
|
+
* don't intersect.
|
|
45
|
+
*/
|
|
46
|
+
export function intersection(a, b) {
|
|
47
|
+
if (!overlaps(a, b))
|
|
48
|
+
return null;
|
|
49
|
+
const start = Math.max(toDate(a.start).getTime(), toDate(b.start).getTime());
|
|
50
|
+
const end = Math.min(toDate(a.end).getTime(), toDate(b.end).getTime());
|
|
51
|
+
return { start: new Date(start), end: new Date(end) };
|
|
52
|
+
}
|
|
53
|
+
/** Total number of whole days an interval spans (inclusive of both ends). */
|
|
54
|
+
export function durationDays(interval) {
|
|
55
|
+
return eachDayOfInterval(interval.start, interval.end).length;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DateInput } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Human-friendly relative time, localised via the platform `Intl` API.
|
|
4
|
+
*
|
|
5
|
+
* @param input The date to describe.
|
|
6
|
+
* @param base The reference point (default: now).
|
|
7
|
+
* @param locale BCP-47 locale tag(s) for `Intl.RelativeTimeFormat` (default: runtime).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* formatRelative(addDays(new Date(), -3)) // "3 days ago"
|
|
11
|
+
* formatRelative(addHours(new Date(), 2)) // "in 2 hours"
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatRelative(input: DateInput, base?: DateInput, locale?: string | string[]): string;
|
|
14
|
+
/** Alias for {@link formatRelative} reading the other way: time from `base` to `input`. */
|
|
15
|
+
export declare const fromNow: (input: DateInput, locale?: string | string[]) => string;
|
|
16
|
+
/**
|
|
17
|
+
* Formats a millisecond duration compactly, largest unit first.
|
|
18
|
+
*
|
|
19
|
+
* @param ms Duration in milliseconds (sign is ignored).
|
|
20
|
+
* @param maxUnits How many units to show (default `2`), e.g. `"1h 30m"`.
|
|
21
|
+
*
|
|
22
|
+
* @example formatDuration(90_061_000) // "1d 1h" (maxUnits: 2)
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatDuration(ms: number, maxUnits?: number): string;
|
|
25
|
+
//# sourceMappingURL=relative.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative.d.ts","sourceRoot":"","sources":["../src/relative.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAwB3C;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,SAAsB,EAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GACzB,MAAM,CAQR;AAED,2FAA2F;AAC3F,eAAO,MAAM,OAAO,GAAI,OAAO,SAAS,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,KAAG,MAC5B,CAAA;AAE3C;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAgB/D"}
|