date-vir 8.6.4 → 9.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.
Files changed (39) hide show
  1. package/README.md +13 -13
  2. package/dist/date-operations/calculate-relative-date.d.ts +2 -1
  3. package/dist/date-operations/combine-dates.d.ts +9 -8
  4. package/dist/date-operations/date-position.d.ts +3 -2
  5. package/dist/date-operations/diff-dates.d.ts +4 -4
  6. package/dist/date-operations/diff-dates.js +4 -4
  7. package/dist/duration-shape.d.ts +294 -0
  8. package/dist/duration-shape.js +18 -1
  9. package/dist/extra-utils/has-date-props.d.ts +3 -2
  10. package/dist/extra-utils/js-date-conversion.d.ts +2 -2
  11. package/dist/extra-utils/js-date-conversion.js +2 -2
  12. package/dist/extra-utils/now.d.ts +4 -4
  13. package/dist/extra-utils/now.js +2 -2
  14. package/dist/extra-utils/override-date.d.ts +5 -4
  15. package/dist/extra-utils/override-date.js +3 -3
  16. package/dist/extra-utils/zero.d.ts +9 -8
  17. package/dist/extra-utils/zero.js +6 -6
  18. package/dist/formatting/simple-strings.d.ts +7 -6
  19. package/dist/formatting/simple-strings.js +1 -1
  20. package/dist/formatting/timestamp.d.ts +6 -6
  21. package/dist/formatting/timestamp.js +6 -6
  22. package/dist/full-date/create-full-date.d.ts +10 -10
  23. package/dist/full-date/create-full-date.js +7 -7
  24. package/dist/full-date/date-like.d.ts +2 -1
  25. package/dist/full-date/full-date-shape.d.ts +10 -9
  26. package/dist/full-date/is-valid-full-date.d.ts +2 -1
  27. package/dist/full-date/luxon-date-time-conversion.d.ts +2 -1
  28. package/dist/full-date/luxon-date-time-conversion.js +7 -2
  29. package/dist/full-date/maybe-create-date.d.ts +2 -1
  30. package/dist/full-date/parsing.d.ts +3 -2
  31. package/dist/full-date/string-parsing.d.ts +2 -1
  32. package/dist/full-date/string-parsing.js +0 -1
  33. package/dist/timezone/timezone-checks.d.ts +15 -2
  34. package/dist/timezone/timezone-checks.js +25 -8
  35. package/dist/timezone/timezone-shape.d.ts +4 -3
  36. package/dist/timezone/timezone-shape.js +2 -2
  37. package/dist/timezone/timezones.d.ts +21 -8
  38. package/dist/timezone/timezones.js +6 -5
  39. package/package.json +2 -2
package/README.md CHANGED
@@ -37,24 +37,24 @@ import {
37
37
  getNowFullDate,
38
38
  parseDateStringWithPattern,
39
39
  parseInputElementValue,
40
- Timezone,
40
+ TimezoneName,
41
41
  } from 'date-vir';
42
42
 
43
43
  /**
44
44
  * Creates a FullDate from a wide range of possible inputs. See TypeScript types for full details on
45
45
  * available inputs.
46
46
  */
47
- createFullDate('2023-06-05', Timezone['Europe/Rome']);
47
+ createFullDate('2023-06-05', TimezoneName['Europe/Rome']);
48
48
 
49
49
  /** Get the current date and time right now in the given timezone. */
50
- getNowFullDate(Timezone['America/Argentina/Buenos_Aires']);
50
+ getNowFullDate(TimezoneName['America/Argentina/Buenos_Aires']);
51
51
 
52
52
  /**
53
53
  * Parsed the value of an <input> element directly from the element itself. This is intended to be
54
54
  * used for type="date" or type="time" <input> elements, but any input element with a valid date or
55
55
  * time string will work.
56
56
  */
57
- parseInputElementValue(document.querySelector('input'), Timezone['Asia/Tokyo']);
57
+ parseInputElementValue(document.querySelector('input'), TimezoneName['Asia/Tokyo']);
58
58
 
59
59
  /**
60
60
  * If you have a really oddly formatted date/time string and createFullDate does not suffice, you
@@ -65,7 +65,7 @@ parseInputElementValue(document.querySelector('input'), Timezone['Asia/Tokyo']);
65
65
  parseDateStringWithPattern({
66
66
  dateString: '870-0-14-19 5 2023 6',
67
67
  formatString: 'S-s-h-m d yyyy M',
68
- timezone: Timezone['America/Cancun'],
68
+ timezone: TimezoneName['America/Cancun'],
69
69
  });
70
70
  ```
71
71
 
@@ -80,14 +80,14 @@ import {
80
80
  createFullDate,
81
81
  formatPresets,
82
82
  FullDatePart,
83
- Timezone,
83
+ TimezoneName,
84
84
  toHtmlInputString,
85
85
  toLocaleString,
86
86
  toTimestamp,
87
87
  toUtcIsoString,
88
88
  } from 'date-vir';
89
89
 
90
- const myFullDate = createFullDate('2023-06-05T14:19:00.870Z', Timezone['America/Chicago']);
90
+ const myFullDate = createFullDate('2023-06-05T14:19:00.870Z', TimezoneName['America/Chicago']);
91
91
 
92
92
  /**
93
93
  * Converts the given FullDate into a UTC unix timestamp with milliseconds. Since the output is a
@@ -123,11 +123,11 @@ toHtmlInputString(myFullDate, FullDatePart.Date); // returns '2023-06-05'
123
123
  <!-- example-link: src/readme-examples/timezones.example.ts -->
124
124
 
125
125
  ```TypeScript
126
- import {Timezone, userTimezone, utcTimezone} from 'date-vir';
126
+ import {TimezoneName, userTimezone, utcTimezone} from 'date-vir';
127
127
 
128
- Timezone['Africa/Abidjan'];
129
- Timezone['America/Los_Angeles'];
130
- Timezone['Etc/GMT+1'];
128
+ TimezoneName['Africa/Abidjan'];
129
+ TimezoneName['America/Los_Angeles'];
130
+ TimezoneName['Etc/GMT+1'];
131
131
 
132
132
  utcTimezone;
133
133
  userTimezone;
@@ -142,9 +142,9 @@ The parsing and timezone conversions in `date-vir` utilize the [`luxon`](https:/
142
142
  <!-- example-link: src/readme-examples/luxon-conversion.example.ts -->
143
143
 
144
144
  ```TypeScript
145
- import {createFullDate, Timezone, toLuxonDateTime} from 'date-vir';
145
+ import {createFullDate, TimezoneName, toLuxonDateTime} from 'date-vir';
146
146
 
147
- const myFullDate = createFullDate('2023-06-05T14:19:00.870Z', Timezone['America/Chicago']);
147
+ const myFullDate = createFullDate('2023-06-05T14:19:00.870Z', TimezoneName['America/Chicago']);
148
148
 
149
149
  toLuxonDateTime(myFullDate);
150
150
  ```
@@ -1,5 +1,6 @@
1
1
  import { type AnyDuration } from '@date-vir/duration';
2
2
  import { type FullDate } from '../full-date/full-date-shape.js';
3
+ import { type Timezone } from '../timezone/timezones.js';
3
4
  /**
4
5
  * Calculates a new date starting at the given fullDate and adding the given offsets. Offsets can be
5
6
  * negative to go backwards in time.
@@ -13,4 +14,4 @@ import { type FullDate } from '../full-date/full-date-shape.js';
13
14
  * calculateRelativeDate(getNowInUserTimezone(), {days: 2});
14
15
  * ```
15
16
  */
16
- export declare function calculateRelativeDate<const SpecificTimezone extends string>(fullDate: Readonly<FullDate<SpecificTimezone>>, offset: Readonly<AnyDuration>): FullDate<SpecificTimezone>;
17
+ export declare function calculateRelativeDate<const SpecificTimezone extends Timezone>(fullDate: Readonly<FullDate<SpecificTimezone>>, offset: Readonly<AnyDuration>): FullDate<SpecificTimezone>;
@@ -1,11 +1,12 @@
1
1
  import { type FullDatePart } from '../full-date/full-date-parts.js';
2
2
  import { type DatePart, type FullDate, type TimePart } from '../full-date/full-date-shape.js';
3
+ import { type Timezone } from '../timezone/timezones.js';
3
4
  /**
4
5
  * An object containing date and/or time parts or neither. Used for {@link combineDateParts}
5
6
  *
6
7
  * @category Internal
7
8
  */
8
- export type MaybeDateParts<SpecificTimezone extends string> = Partial<{
9
+ export type MaybeDateParts<SpecificTimezone extends Timezone> = Partial<{
9
10
  [FullDatePart.Date]: DatePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
10
11
  [FullDatePart.Time]: TimePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
11
12
  }>;
@@ -14,8 +15,8 @@ export type MaybeDateParts<SpecificTimezone extends string> = Partial<{
14
15
  *
15
16
  * @category Internal
16
17
  */
17
- export type MaybeDatePart<SpecificTimezone extends string> = FullDate<SpecificTimezone> | Partial<FullDate<SpecificTimezone>> | DatePart<SpecificTimezone> | TimePart<SpecificTimezone> | undefined;
18
- export declare function combineDateParts<const SpecificTimezone extends string>(maybeDateParts: {
18
+ export type MaybeDatePart<SpecificTimezone extends Timezone> = FullDate<SpecificTimezone> | Partial<FullDate<SpecificTimezone>> | DatePart<SpecificTimezone> | TimePart<SpecificTimezone> | undefined;
19
+ export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
19
20
  [FullDatePart.Date]: DatePart<SpecificTimezone>;
20
21
  [FullDatePart.Time]: TimePart<SpecificTimezone>;
21
22
  }): FullDate<SpecificTimezone>;
@@ -23,20 +24,20 @@ export declare function combineDateParts(maybeDateParts: {
23
24
  [FullDatePart.Date]?: undefined;
24
25
  [FullDatePart.Time]?: undefined;
25
26
  }): undefined;
26
- export declare function combineDateParts<const SpecificTimezone extends string>(maybeDateParts: {
27
+ export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
27
28
  [FullDatePart.Date]: DatePart<SpecificTimezone>;
28
29
  [FullDatePart.Time]?: undefined;
29
30
  }): DatePart<SpecificTimezone>;
30
- export declare function combineDateParts<const SpecificTimezone extends string>(maybeDateParts: {
31
+ export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
31
32
  [FullDatePart.Date]: DatePart<SpecificTimezone>;
32
33
  [FullDatePart.Time]?: TimePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
33
34
  }): FullDate<SpecificTimezone> | DatePart<SpecificTimezone>;
34
- export declare function combineDateParts<const SpecificTimezone extends string>(maybeDateParts: {
35
+ export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
35
36
  [FullDatePart.Date]?: undefined;
36
37
  [FullDatePart.Time]: TimePart<SpecificTimezone>;
37
38
  }): TimePart<SpecificTimezone>;
38
- export declare function combineDateParts<const SpecificTimezone extends string>(maybeDateParts: {
39
+ export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: {
39
40
  [FullDatePart.Date]?: DatePart<SpecificTimezone> | undefined | Partial<FullDate<SpecificTimezone>>;
40
41
  [FullDatePart.Time]: TimePart<SpecificTimezone>;
41
42
  }): FullDate<SpecificTimezone> | TimePart<SpecificTimezone>;
42
- export declare function combineDateParts<const SpecificTimezone extends string>(maybeDateParts: MaybeDateParts<SpecificTimezone>): MaybeDatePart<SpecificTimezone>;
43
+ export declare function combineDateParts<const SpecificTimezone extends Timezone>(maybeDateParts: MaybeDateParts<SpecificTimezone>): MaybeDatePart<SpecificTimezone>;
@@ -1,5 +1,6 @@
1
1
  import { DateUnit } from '@date-vir/duration';
2
2
  import { type FullDate } from '../full-date/full-date-shape.js';
3
+ import { type Timezone } from '../timezone/timezones.js';
3
4
  /**
4
5
  * Get the {@link DateUnit} value of a {@link FullDate}.
5
6
  *
@@ -53,7 +54,7 @@ export declare function getDateUnit(date: Readonly<FullDate>, unit: DateUnit): n
53
54
  * ); // outputs {year: 2024, month: 11, day: 1, hour: 0, minute: 0, second: 0, millisecond: 0, timezone: utcTimezone}
54
55
  * ```
55
56
  */
56
- export declare function getStartDate<const SpecificTimezone extends string>(date: Readonly<FullDate<SpecificTimezone>>, unit: DateUnit): FullDate<SpecificTimezone>;
57
+ export declare function getStartDate<const SpecificTimezone extends Timezone>(date: Readonly<FullDate<SpecificTimezone>>, unit: DateUnit): FullDate<SpecificTimezone>;
57
58
  /**
58
59
  * Get the end date of a specific {@link DateUnit} based on a given {@link FullDate}.
59
60
  *
@@ -80,7 +81,7 @@ export declare function getStartDate<const SpecificTimezone extends string>(date
80
81
  * ); // outputs {year: 2024, month: 11, day: 30, hour: 23, minute: 59, second: 59, millisecond: 999, timezone: utcTimezone}
81
82
  * ```
82
83
  */
83
- export declare function getEndDate<const SpecificTimezone extends string>(date: Readonly<FullDate<SpecificTimezone>>, unit: DateUnit): FullDate<SpecificTimezone>;
84
+ export declare function getEndDate<const SpecificTimezone extends Timezone>(date: Readonly<FullDate<SpecificTimezone>>, unit: DateUnit): FullDate<SpecificTimezone>;
84
85
  /**
85
86
  * Shape definition for all valid date position calculations. Used for {@link calculateDatePosition}.
86
87
  *
@@ -13,7 +13,7 @@ import { type FullDate } from '../full-date/full-date-shape.js';
13
13
  * @example
14
14
  *
15
15
  * ```ts
16
- * import {diffDates, DurationUnit} from 'date-vir';
16
+ * import {diffDates, DurationUnit, utcTimezone} from 'date-vir';
17
17
  *
18
18
  * const exampleDate: FullDate = {
19
19
  * year: 2024,
@@ -23,7 +23,7 @@ import { type FullDate } from '../full-date/full-date-shape.js';
23
23
  * minute: 1,
24
24
  * second: 1,
25
25
  * millisecond: 1,
26
- * timezone: 'UTC',
26
+ * timezone: utcTimezone,
27
27
  * };
28
28
  *
29
29
  * // get the diff in days
@@ -59,7 +59,7 @@ units: SelectedUnits, options?: Readonly<RoundOptions>): DurationBySelection<Sel
59
59
  * @example
60
60
  *
61
61
  * ```ts
62
- * import {isDateAfter, type FullDate} from 'date-vir';
62
+ * import {isDateAfter, type FullDate, utcTimezone} from 'date-vir';
63
63
  *
64
64
  * const exampleDate: FullDate = {
65
65
  * year: 2024,
@@ -69,7 +69,7 @@ units: SelectedUnits, options?: Readonly<RoundOptions>): DurationBySelection<Sel
69
69
  * minute: 1,
70
70
  * second: 1,
71
71
  * millisecond: 1,
72
- * timezone: 'UTC',
72
+ * timezone: utcTimezone,
73
73
  * };
74
74
  *
75
75
  * isDateAfter({
@@ -31,7 +31,7 @@ function getHighestPriorityConversionAccuracy(units) {
31
31
  * @example
32
32
  *
33
33
  * ```ts
34
- * import {diffDates, DurationUnit} from 'date-vir';
34
+ * import {diffDates, DurationUnit, utcTimezone} from 'date-vir';
35
35
  *
36
36
  * const exampleDate: FullDate = {
37
37
  * year: 2024,
@@ -41,7 +41,7 @@ function getHighestPriorityConversionAccuracy(units) {
41
41
  * minute: 1,
42
42
  * second: 1,
43
43
  * millisecond: 1,
44
- * timezone: 'UTC',
44
+ * timezone: utcTimezone,
45
45
  * };
46
46
  *
47
47
  * // get the diff in days
@@ -85,7 +85,7 @@ units, options = {}) {
85
85
  * @example
86
86
  *
87
87
  * ```ts
88
- * import {isDateAfter, type FullDate} from 'date-vir';
88
+ * import {isDateAfter, type FullDate, utcTimezone} from 'date-vir';
89
89
  *
90
90
  * const exampleDate: FullDate = {
91
91
  * year: 2024,
@@ -95,7 +95,7 @@ units, options = {}) {
95
95
  * minute: 1,
96
96
  * second: 1,
97
97
  * millisecond: 1,
98
- * timezone: 'UTC',
98
+ * timezone: utcTimezone,
99
99
  * };
100
100
  *
101
101
  * isDateAfter({
@@ -5,3 +5,297 @@ import { DurationUnit } from '@date-vir/duration';
5
5
  * @category Duration
6
6
  */
7
7
  export declare const anyDurationShape: import("object-shape-tester").Shape<import("@sinclair/typebox").TUnsafe<Partial<Record<DurationUnit, number>>>>;
8
+ /**
9
+ * A shape definition for {@link AtLeastOneDuration}.
10
+ *
11
+ * @category Duration
12
+ */
13
+ export declare const atLeastOneDurationShape: (defaultValue?: (((Required<Pick<{
14
+ years: number;
15
+ months: number;
16
+ weeks: number;
17
+ days: number;
18
+ hours: number;
19
+ minutes: number;
20
+ seconds: number;
21
+ milliseconds: number;
22
+ }, DurationUnit.Years>> & Partial<Pick<{
23
+ years: number;
24
+ months: number;
25
+ weeks: number;
26
+ days: number;
27
+ hours: number;
28
+ minutes: number;
29
+ seconds: number;
30
+ milliseconds: number;
31
+ }, DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
32
+ years: number;
33
+ months: number;
34
+ weeks: number;
35
+ days: number;
36
+ hours: number;
37
+ minutes: number;
38
+ seconds: number;
39
+ milliseconds: number;
40
+ }, DurationUnit.Months>> & Partial<Pick<{
41
+ years: number;
42
+ months: number;
43
+ weeks: number;
44
+ days: number;
45
+ hours: number;
46
+ minutes: number;
47
+ seconds: number;
48
+ milliseconds: number;
49
+ }, DurationUnit.Years | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
50
+ years: number;
51
+ months: number;
52
+ weeks: number;
53
+ days: number;
54
+ hours: number;
55
+ minutes: number;
56
+ seconds: number;
57
+ milliseconds: number;
58
+ }, DurationUnit.Weeks>> & Partial<Pick<{
59
+ years: number;
60
+ months: number;
61
+ weeks: number;
62
+ days: number;
63
+ hours: number;
64
+ minutes: number;
65
+ seconds: number;
66
+ milliseconds: number;
67
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
68
+ years: number;
69
+ months: number;
70
+ weeks: number;
71
+ days: number;
72
+ hours: number;
73
+ minutes: number;
74
+ seconds: number;
75
+ milliseconds: number;
76
+ }, DurationUnit.Days>> & Partial<Pick<{
77
+ years: number;
78
+ months: number;
79
+ weeks: number;
80
+ days: number;
81
+ hours: number;
82
+ minutes: number;
83
+ seconds: number;
84
+ milliseconds: number;
85
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
86
+ years: number;
87
+ months: number;
88
+ weeks: number;
89
+ days: number;
90
+ hours: number;
91
+ minutes: number;
92
+ seconds: number;
93
+ milliseconds: number;
94
+ }, DurationUnit.Hours>> & Partial<Pick<{
95
+ years: number;
96
+ months: number;
97
+ weeks: number;
98
+ days: number;
99
+ hours: number;
100
+ minutes: number;
101
+ seconds: number;
102
+ milliseconds: number;
103
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
104
+ years: number;
105
+ months: number;
106
+ weeks: number;
107
+ days: number;
108
+ hours: number;
109
+ minutes: number;
110
+ seconds: number;
111
+ milliseconds: number;
112
+ }, DurationUnit.Minutes>> & Partial<Pick<{
113
+ years: number;
114
+ months: number;
115
+ weeks: number;
116
+ days: number;
117
+ hours: number;
118
+ minutes: number;
119
+ seconds: number;
120
+ milliseconds: number;
121
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
122
+ years: number;
123
+ months: number;
124
+ weeks: number;
125
+ days: number;
126
+ hours: number;
127
+ minutes: number;
128
+ seconds: number;
129
+ milliseconds: number;
130
+ }, DurationUnit.Seconds>> & Partial<Pick<{
131
+ years: number;
132
+ months: number;
133
+ weeks: number;
134
+ days: number;
135
+ hours: number;
136
+ minutes: number;
137
+ seconds: number;
138
+ milliseconds: number;
139
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Milliseconds>>) | (Required<Pick<{
140
+ years: number;
141
+ months: number;
142
+ weeks: number;
143
+ days: number;
144
+ hours: number;
145
+ minutes: number;
146
+ seconds: number;
147
+ milliseconds: number;
148
+ }, DurationUnit.Milliseconds>> & Partial<Pick<{
149
+ years: number;
150
+ months: number;
151
+ weeks: number;
152
+ days: number;
153
+ hours: number;
154
+ minutes: number;
155
+ seconds: number;
156
+ milliseconds: number;
157
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds>>)) & {}) | undefined) => import("object-shape-tester").Shape<import("@sinclair/typebox").TUnsafe<((Required<Pick<{
158
+ years: number;
159
+ months: number;
160
+ weeks: number;
161
+ days: number;
162
+ hours: number;
163
+ minutes: number;
164
+ seconds: number;
165
+ milliseconds: number;
166
+ }, DurationUnit.Years>> & Partial<Pick<{
167
+ years: number;
168
+ months: number;
169
+ weeks: number;
170
+ days: number;
171
+ hours: number;
172
+ minutes: number;
173
+ seconds: number;
174
+ milliseconds: number;
175
+ }, DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
176
+ years: number;
177
+ months: number;
178
+ weeks: number;
179
+ days: number;
180
+ hours: number;
181
+ minutes: number;
182
+ seconds: number;
183
+ milliseconds: number;
184
+ }, DurationUnit.Months>> & Partial<Pick<{
185
+ years: number;
186
+ months: number;
187
+ weeks: number;
188
+ days: number;
189
+ hours: number;
190
+ minutes: number;
191
+ seconds: number;
192
+ milliseconds: number;
193
+ }, DurationUnit.Years | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
194
+ years: number;
195
+ months: number;
196
+ weeks: number;
197
+ days: number;
198
+ hours: number;
199
+ minutes: number;
200
+ seconds: number;
201
+ milliseconds: number;
202
+ }, DurationUnit.Weeks>> & Partial<Pick<{
203
+ years: number;
204
+ months: number;
205
+ weeks: number;
206
+ days: number;
207
+ hours: number;
208
+ minutes: number;
209
+ seconds: number;
210
+ milliseconds: number;
211
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
212
+ years: number;
213
+ months: number;
214
+ weeks: number;
215
+ days: number;
216
+ hours: number;
217
+ minutes: number;
218
+ seconds: number;
219
+ milliseconds: number;
220
+ }, DurationUnit.Days>> & Partial<Pick<{
221
+ years: number;
222
+ months: number;
223
+ weeks: number;
224
+ days: number;
225
+ hours: number;
226
+ minutes: number;
227
+ seconds: number;
228
+ milliseconds: number;
229
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
230
+ years: number;
231
+ months: number;
232
+ weeks: number;
233
+ days: number;
234
+ hours: number;
235
+ minutes: number;
236
+ seconds: number;
237
+ milliseconds: number;
238
+ }, DurationUnit.Hours>> & Partial<Pick<{
239
+ years: number;
240
+ months: number;
241
+ weeks: number;
242
+ days: number;
243
+ hours: number;
244
+ minutes: number;
245
+ seconds: number;
246
+ milliseconds: number;
247
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Minutes | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
248
+ years: number;
249
+ months: number;
250
+ weeks: number;
251
+ days: number;
252
+ hours: number;
253
+ minutes: number;
254
+ seconds: number;
255
+ milliseconds: number;
256
+ }, DurationUnit.Minutes>> & Partial<Pick<{
257
+ years: number;
258
+ months: number;
259
+ weeks: number;
260
+ days: number;
261
+ hours: number;
262
+ minutes: number;
263
+ seconds: number;
264
+ milliseconds: number;
265
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Seconds | DurationUnit.Milliseconds>>) | (Required<Pick<{
266
+ years: number;
267
+ months: number;
268
+ weeks: number;
269
+ days: number;
270
+ hours: number;
271
+ minutes: number;
272
+ seconds: number;
273
+ milliseconds: number;
274
+ }, DurationUnit.Seconds>> & Partial<Pick<{
275
+ years: number;
276
+ months: number;
277
+ weeks: number;
278
+ days: number;
279
+ hours: number;
280
+ minutes: number;
281
+ seconds: number;
282
+ milliseconds: number;
283
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Milliseconds>>) | (Required<Pick<{
284
+ years: number;
285
+ months: number;
286
+ weeks: number;
287
+ days: number;
288
+ hours: number;
289
+ minutes: number;
290
+ seconds: number;
291
+ milliseconds: number;
292
+ }, DurationUnit.Milliseconds>> & Partial<Pick<{
293
+ years: number;
294
+ months: number;
295
+ weeks: number;
296
+ days: number;
297
+ hours: number;
298
+ minutes: number;
299
+ seconds: number;
300
+ milliseconds: number;
301
+ }, DurationUnit.Years | DurationUnit.Months | DurationUnit.Weeks | DurationUnit.Days | DurationUnit.Hours | DurationUnit.Minutes | DurationUnit.Seconds>>)) & {}>>;
@@ -1,5 +1,6 @@
1
+ import { check } from '@augment-vir/assert';
1
2
  import { DurationUnit } from '@date-vir/duration';
2
- import { enumShape, recordShape } from 'object-shape-tester';
3
+ import { checkValidShape, createCustomShape, enumShape, recordShape } from 'object-shape-tester';
3
4
  /**
4
5
  * A shape definition for `AnyDuration`.
5
6
  *
@@ -10,3 +11,19 @@ export const anyDurationShape = recordShape({
10
11
  values: -1,
11
12
  partial: true,
12
13
  });
14
+ /**
15
+ * A shape definition for {@link AtLeastOneDuration}.
16
+ *
17
+ * @category Duration
18
+ */
19
+ export const atLeastOneDurationShape = createCustomShape({
20
+ default: {
21
+ milliseconds: 0,
22
+ },
23
+ name: 'AtLeastOneDuration',
24
+ checkValue(value) {
25
+ return (checkValidShape(value, anyDurationShape, {
26
+ preventExtraKeys: true,
27
+ }) && !check.isEmpty(value));
28
+ },
29
+ });
@@ -1,5 +1,6 @@
1
1
  import { type PartialWithUndefined, type SetRequiredAndNotNull } from '@augment-vir/common';
2
2
  import { type FullDate } from '../full-date/full-date-shape.js';
3
+ import { type Timezone } from '../timezone/timezones.js';
3
4
  /**
4
5
  * Checks that the input has all the requested {@link FullDate} keys.
5
6
  *
@@ -13,7 +14,7 @@ import { type FullDate } from '../full-date/full-date-shape.js';
13
14
  * hasFullDateKeys({year: 2024}, ['day']); // `false`
14
15
  * ```
15
16
  */
16
- export declare function hasFullDateKeys<SpecificTimezone extends string, PartialFullDate extends PartialWithUndefined<FullDate<SpecificTimezone>>,
17
+ export declare function hasFullDateKeys<SpecificTimezone extends Timezone, PartialFullDate extends PartialWithUndefined<FullDate<SpecificTimezone>>,
17
18
  /** A union of strings. */
18
19
  RequiredKeys extends keyof FullDate<SpecificTimezone>>(partialFullDate: PartialWithUndefined<FullDate<SpecificTimezone>>, keys: ReadonlyArray<RequiredKeys>): partialFullDate is SetRequiredAndNotNull<PartialFullDate, RequiredKeys>;
19
20
  /**
@@ -29,6 +30,6 @@ RequiredKeys extends keyof FullDate<SpecificTimezone>>(partialFullDate: PartialW
29
30
  * assertHasFullDateKeys({year: 2024}, ['day']); // fails
30
31
  * ```
31
32
  */
32
- export declare function assertHasFullDateKeys<SpecificTimezone extends string, PartialFullDate extends PartialWithUndefined<FullDate<SpecificTimezone>>,
33
+ export declare function assertHasFullDateKeys<SpecificTimezone extends Timezone, PartialFullDate extends PartialWithUndefined<FullDate<SpecificTimezone>>,
33
34
  /** A union of strings. */
34
35
  RequiredKeys extends keyof FullDate<SpecificTimezone>>(partialFullDate: PartialWithUndefined<FullDate<SpecificTimezone>>, keys: ReadonlyArray<RequiredKeys>): asserts partialFullDate is SetRequiredAndNotNull<PartialFullDate, RequiredKeys>;
@@ -7,7 +7,7 @@ import { type FullDate } from '../full-date/full-date-shape.js';
7
7
  * @example
8
8
  *
9
9
  * ```ts
10
- * import {toJsDate, type FullDate} from 'date-vir';
10
+ * import {toJsDate, type FullDate, utcTimezone} from 'date-vir';
11
11
  *
12
12
  * const exampleDate: Readonly<FullDate> = {
13
13
  * year: 2024,
@@ -17,7 +17,7 @@ import { type FullDate } from '../full-date/full-date-shape.js';
17
17
  * minute: 1,
18
18
  * second: 1,
19
19
  * millisecond: 1,
20
- * timezone: 'UTC',
20
+ * timezone: utcTimezone,
21
21
  * };
22
22
  *
23
23
  * toJsDate(exampleDate);
@@ -8,7 +8,7 @@ import { userTimezone } from '../timezone/timezones.js';
8
8
  * @example
9
9
  *
10
10
  * ```ts
11
- * import {toJsDate, type FullDate} from 'date-vir';
11
+ * import {toJsDate, type FullDate, utcTimezone} from 'date-vir';
12
12
  *
13
13
  * const exampleDate: Readonly<FullDate> = {
14
14
  * year: 2024,
@@ -18,7 +18,7 @@ import { userTimezone } from '../timezone/timezones.js';
18
18
  * minute: 1,
19
19
  * second: 1,
20
20
  * millisecond: 1,
21
- * timezone: 'UTC',
21
+ * timezone: utcTimezone,
22
22
  * };
23
23
  *
24
24
  * toJsDate(exampleDate);
@@ -1,6 +1,6 @@
1
1
  import { type UtcIsoString } from '../formatting/string-format-types.js';
2
2
  import { type FullDate } from '../full-date/full-date-shape.js';
3
- import { type UtcTimezone } from '../timezone/timezones.js';
3
+ import { type Timezone, type UtcTimezone } from '../timezone/timezones.js';
4
4
  /**
5
5
  * Get the time right now as a UTC ISO.
6
6
  *
@@ -47,10 +47,10 @@ export declare function getNowInUtcTimezone(): FullDate<UtcTimezone>;
47
47
  * @example
48
48
  *
49
49
  * ```ts
50
- * import {getNowFullDate, utcTimezone, timezones} from 'date-vir';
50
+ * import {getNowFullDate, TimezoneName, utcTimezone} from 'date-vir';
51
51
  *
52
52
  * getNowFullDate(utcTimezone);
53
- * getNowFullDate(timezones['Australia/Brisbane']);
53
+ * getNowFullDate(TimezoneName['Australia/Brisbane']);
54
54
  * ```
55
55
  */
56
- export declare function getNowFullDate<const SpecificTimezone extends string>(timezone: SpecificTimezone): FullDate<SpecificTimezone>;
56
+ export declare function getNowFullDate<const SpecificTimezone extends Timezone>(timezone: SpecificTimezone): FullDate<SpecificTimezone>;
@@ -57,10 +57,10 @@ export function getNowInUtcTimezone() {
57
57
  * @example
58
58
  *
59
59
  * ```ts
60
- * import {getNowFullDate, utcTimezone, timezones} from 'date-vir';
60
+ * import {getNowFullDate, TimezoneName, utcTimezone} from 'date-vir';
61
61
  *
62
62
  * getNowFullDate(utcTimezone);
63
- * getNowFullDate(timezones['Australia/Brisbane']);
63
+ * getNowFullDate(TimezoneName['Australia/Brisbane']);
64
64
  * ```
65
65
  */
66
66
  export function getNowFullDate(timezone) {