@addsign/moje-agenda-shared-lib 1.0.60 → 2.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/dist/Dialog-DZMfjbGC.js +421 -0
- package/dist/Dialog-DZMfjbGC.js.map +1 -0
- package/dist/assets/style.css +4369 -0
- package/dist/assets/tailwind.css +1365 -1193
- package/dist/check-B7dJm08z.js +12 -0
- package/dist/check-B7dJm08z.js.map +1 -0
- package/dist/components/Button.js +1 -1
- package/dist/components/datatable/DataTable.js +6 -2
- package/dist/components/datatable/DataTable.js.map +1 -1
- package/dist/components/datatable/DataTableServer.js +6 -2
- package/dist/components/datatable/DataTableServer.js.map +1 -1
- package/dist/components/form/AutocompleteSearchBar.js +6 -2
- package/dist/components/form/AutocompleteSearchBar.js.map +1 -1
- package/dist/components/form/AutocompleteSearchBarServer.js +6 -2
- package/dist/components/form/AutocompleteSearchBarServer.js.map +1 -1
- package/dist/components/form/FileInput.js +7 -3
- package/dist/components/form/FileInput.js.map +1 -1
- package/dist/components/form/FileInputMultiple.js +7 -3
- package/dist/components/form/FileInputMultiple.js.map +1 -1
- package/dist/components/form/FormField.js +6 -2
- package/dist/components/form/FormField.js.map +1 -1
- package/dist/components/form/PositionsSelectorSingle.js +6 -2
- package/dist/components/form/PositionsSelectorSingle.js.map +1 -1
- package/dist/components/form/SelectField.js +6 -2
- package/dist/components/form/SelectField.js.map +1 -1
- package/dist/components/profiles/ProfileOverview.js +6 -2
- package/dist/components/profiles/ProfileOverview.js.map +1 -1
- package/dist/components/ui/Combobox.d.ts +1 -0
- package/dist/components/ui/Combobox.js +138 -0
- package/dist/components/ui/Combobox.js.map +1 -0
- package/dist/components/ui/DateTimePicker.js +19 -5
- package/dist/components/ui/DateTimePicker.js.map +1 -1
- package/dist/components/ui/Dialog.js +15 -413
- package/dist/components/ui/Dialog.js.map +1 -1
- package/dist/components/ui/ScrollArea.js +2 -1
- package/dist/components/ui/ScrollArea.js.map +1 -1
- package/dist/components/ui/command.d.ts +80 -0
- package/dist/components/ui/command.js +643 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/datepicker.js +14 -1
- package/dist/components/ui/datepicker.js.map +1 -1
- package/dist/components/ui/popover.js +3 -2
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/radioGroup.d.ts +5 -0
- package/dist/components/ui/radioGroup.js +586 -0
- package/dist/components/ui/radioGroup.js.map +1 -0
- package/dist/components/ui/select.js +9 -144
- package/dist/components/ui/select.js.map +1 -1
- package/dist/index-BXrwe-_7.js +1395 -0
- package/dist/index-BXrwe-_7.js.map +1 -0
- package/dist/index-Bk8dRTPE.js +11 -0
- package/dist/index-Bk8dRTPE.js.map +1 -0
- package/dist/index-BlzC-wss.js +140 -0
- package/dist/index-BlzC-wss.js.map +1 -0
- package/dist/index-Bp9GiUkg.js +2266 -0
- package/dist/index-Bp9GiUkg.js.map +1 -0
- package/dist/index-BzVVosDl.js +57 -0
- package/dist/index-BzVVosDl.js.map +1 -0
- package/dist/index-CbAQSs_C.js +40 -0
- package/dist/index-CbAQSs_C.js.map +1 -0
- package/dist/index-Dz_fWpFA.js +2203 -0
- package/dist/index-Dz_fWpFA.js.map +1 -0
- package/dist/index-IXOTxK3N.js +7 -0
- package/dist/index-IXOTxK3N.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.js +29 -12
- package/dist/main.js.map +1 -1
- package/dist/parse-D2yb8751.js +1727 -0
- package/dist/parse-D2yb8751.js.map +1 -0
- package/dist/tailwind-l0sNRNKZ.js +2 -0
- package/dist/tailwind-l0sNRNKZ.js.map +1 -0
- package/lib/components/Button.tsx +57 -0
- package/lib/components/Calendar.tsx +242 -0
- package/lib/components/ConfirmationModalDialog.tsx +115 -0
- package/lib/components/Modal.tsx +73 -0
- package/lib/components/ModalDialog.tsx +63 -0
- package/lib/components/Spinner.tsx +25 -0
- package/lib/components/SpinnerIcon.tsx +12 -0
- package/lib/components/datatable/DataTable.tsx +442 -0
- package/lib/components/datatable/DataTableServer.tsx +939 -0
- package/lib/components/datatable/DatatableSettings.tsx +48 -0
- package/lib/components/datatable/Resizable.tsx +99 -0
- package/lib/components/datatable/types.ts +33 -0
- package/lib/components/form/AutocompleteSearchBar.tsx +424 -0
- package/lib/components/form/AutocompleteSearchBarServer.tsx +257 -0
- package/lib/components/form/DateField.tsx +124 -0
- package/lib/components/form/DateRangeField.tsx +116 -0
- package/lib/components/form/FileInput.tsx +188 -0
- package/lib/components/form/FileInputMultiple.tsx +186 -0
- package/lib/components/form/FormField.tsx +371 -0
- package/lib/components/form/InputField.tsx +230 -0
- package/lib/components/form/PositionsSelectorSingle.tsx +266 -0
- package/lib/components/form/RadioGroup.tsx +64 -0
- package/lib/components/form/SelectField.tsx +267 -0
- package/lib/components/layout/IconInCircle.tsx +29 -0
- package/lib/components/layout/PageTitle.tsx +19 -0
- package/lib/components/layout/SectionTitle.tsx +22 -0
- package/lib/components/profiles/ProfileOverview.tsx +212 -0
- package/lib/components/ui/Calendar.tsx +68 -0
- package/lib/components/ui/Combobox.tsx +122 -0
- package/lib/components/ui/DatePicker.tsx +124 -0
- package/lib/components/ui/DateTimePicker.tsx +187 -0
- package/lib/components/ui/Dialog.tsx +118 -0
- package/lib/components/ui/ScrollArea.tsx +45 -0
- package/lib/components/ui/button.tsx +56 -0
- package/lib/components/ui/command.tsx +153 -0
- package/lib/components/ui/form.tsx +177 -0
- package/lib/components/ui/input.tsx +22 -0
- package/lib/components/ui/label.tsx +24 -0
- package/lib/components/ui/popover.tsx +31 -0
- package/lib/components/ui/radioGroup.tsx +44 -0
- package/lib/components/ui/select.tsx +158 -0
- package/lib/contexts/FederationContext.tsx +28 -0
- package/lib/contexts/useFederationContext.ts +4 -0
- package/lib/css/tailwind.css +10 -0
- package/lib/fonts/arial.ts +3 -0
- package/lib/fonts/arialBold.ts +4 -0
- package/lib/main.ts +64 -0
- package/lib/types.ts +492 -0
- package/lib/utils/PdfManager.ts +224 -0
- package/lib/utils/getFullName.tsx +83 -0
- package/lib/utils/getIntersectingDays.ts +28 -0
- package/lib/utils/handleErrors.ts +28 -0
- package/lib/utils/hasRightInModule.ts +17 -0
- package/lib/utils/hasRole.ts +12 -0
- package/lib/utils/utils.ts +6 -0
- package/lib/vite-env.d.ts +1 -0
- package/package.json +5 -2
|
@@ -0,0 +1,1727 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
import { g as getDefaultOptions$1, t as toDate, c as constructFrom, m as millisecondsInHour, a as millisecondsInMinute, b as millisecondsInSecond, d as getWeekYear, e as startOfWeek, h as startOfISOWeek, j as getWeek, k as getISOWeek, l as addDays, n as getTimezoneOffsetInMilliseconds, o as enUS, p as longFormatters, q as isProtectedWeekYearToken, w as warnOrThrowProtectedError, r as isProtectedDayOfYearToken } from "./Calendar-DWT4e7Th.js";
|
|
8
|
+
function getDefaultOptions() {
|
|
9
|
+
return Object.assign({}, getDefaultOptions$1());
|
|
10
|
+
}
|
|
11
|
+
function getISODay(date) {
|
|
12
|
+
const _date = toDate(date);
|
|
13
|
+
let day = _date.getDay();
|
|
14
|
+
if (day === 0) {
|
|
15
|
+
day = 7;
|
|
16
|
+
}
|
|
17
|
+
return day;
|
|
18
|
+
}
|
|
19
|
+
function transpose(fromDate, constructor) {
|
|
20
|
+
const date = constructor instanceof Date ? constructFrom(constructor, 0) : new constructor(0);
|
|
21
|
+
date.setFullYear(
|
|
22
|
+
fromDate.getFullYear(),
|
|
23
|
+
fromDate.getMonth(),
|
|
24
|
+
fromDate.getDate()
|
|
25
|
+
);
|
|
26
|
+
date.setHours(
|
|
27
|
+
fromDate.getHours(),
|
|
28
|
+
fromDate.getMinutes(),
|
|
29
|
+
fromDate.getSeconds(),
|
|
30
|
+
fromDate.getMilliseconds()
|
|
31
|
+
);
|
|
32
|
+
return date;
|
|
33
|
+
}
|
|
34
|
+
const TIMEZONE_UNIT_PRIORITY = 10;
|
|
35
|
+
class Setter {
|
|
36
|
+
constructor() {
|
|
37
|
+
__publicField(this, "subPriority", 0);
|
|
38
|
+
}
|
|
39
|
+
validate(_utcDate, _options) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
class ValueSetter extends Setter {
|
|
44
|
+
constructor(value, validateValue, setValue, priority, subPriority) {
|
|
45
|
+
super();
|
|
46
|
+
this.value = value;
|
|
47
|
+
this.validateValue = validateValue;
|
|
48
|
+
this.setValue = setValue;
|
|
49
|
+
this.priority = priority;
|
|
50
|
+
if (subPriority) {
|
|
51
|
+
this.subPriority = subPriority;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
validate(date, options) {
|
|
55
|
+
return this.validateValue(date, this.value, options);
|
|
56
|
+
}
|
|
57
|
+
set(date, flags, options) {
|
|
58
|
+
return this.setValue(date, flags, this.value, options);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
class DateToSystemTimezoneSetter extends Setter {
|
|
62
|
+
constructor() {
|
|
63
|
+
super(...arguments);
|
|
64
|
+
__publicField(this, "priority", TIMEZONE_UNIT_PRIORITY);
|
|
65
|
+
__publicField(this, "subPriority", -1);
|
|
66
|
+
}
|
|
67
|
+
set(date, flags) {
|
|
68
|
+
if (flags.timestampIsSet)
|
|
69
|
+
return date;
|
|
70
|
+
return constructFrom(date, transpose(date, Date));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
class Parser {
|
|
74
|
+
run(dateString, token, match, options) {
|
|
75
|
+
const result = this.parse(dateString, token, match, options);
|
|
76
|
+
if (!result) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
setter: new ValueSetter(
|
|
81
|
+
result.value,
|
|
82
|
+
this.validate,
|
|
83
|
+
this.set,
|
|
84
|
+
this.priority,
|
|
85
|
+
this.subPriority
|
|
86
|
+
),
|
|
87
|
+
rest: result.rest
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
validate(_utcDate, _value, _options) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
class EraParser extends Parser {
|
|
95
|
+
constructor() {
|
|
96
|
+
super(...arguments);
|
|
97
|
+
__publicField(this, "priority", 140);
|
|
98
|
+
__publicField(this, "incompatibleTokens", ["R", "u", "t", "T"]);
|
|
99
|
+
}
|
|
100
|
+
parse(dateString, token, match) {
|
|
101
|
+
switch (token) {
|
|
102
|
+
case "G":
|
|
103
|
+
case "GG":
|
|
104
|
+
case "GGG":
|
|
105
|
+
return match.era(dateString, { width: "abbreviated" }) || match.era(dateString, { width: "narrow" });
|
|
106
|
+
case "GGGGG":
|
|
107
|
+
return match.era(dateString, { width: "narrow" });
|
|
108
|
+
case "GGGG":
|
|
109
|
+
default:
|
|
110
|
+
return match.era(dateString, { width: "wide" }) || match.era(dateString, { width: "abbreviated" }) || match.era(dateString, { width: "narrow" });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
set(date, flags, value) {
|
|
114
|
+
flags.era = value;
|
|
115
|
+
date.setFullYear(value, 0, 1);
|
|
116
|
+
date.setHours(0, 0, 0, 0);
|
|
117
|
+
return date;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const numericPatterns = {
|
|
121
|
+
month: /^(1[0-2]|0?\d)/,
|
|
122
|
+
// 0 to 12
|
|
123
|
+
date: /^(3[0-1]|[0-2]?\d)/,
|
|
124
|
+
// 0 to 31
|
|
125
|
+
dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,
|
|
126
|
+
// 0 to 366
|
|
127
|
+
week: /^(5[0-3]|[0-4]?\d)/,
|
|
128
|
+
// 0 to 53
|
|
129
|
+
hour23h: /^(2[0-3]|[0-1]?\d)/,
|
|
130
|
+
// 0 to 23
|
|
131
|
+
hour24h: /^(2[0-4]|[0-1]?\d)/,
|
|
132
|
+
// 0 to 24
|
|
133
|
+
hour11h: /^(1[0-1]|0?\d)/,
|
|
134
|
+
// 0 to 11
|
|
135
|
+
hour12h: /^(1[0-2]|0?\d)/,
|
|
136
|
+
// 0 to 12
|
|
137
|
+
minute: /^[0-5]?\d/,
|
|
138
|
+
// 0 to 59
|
|
139
|
+
second: /^[0-5]?\d/,
|
|
140
|
+
// 0 to 59
|
|
141
|
+
singleDigit: /^\d/,
|
|
142
|
+
// 0 to 9
|
|
143
|
+
twoDigits: /^\d{1,2}/,
|
|
144
|
+
// 0 to 99
|
|
145
|
+
threeDigits: /^\d{1,3}/,
|
|
146
|
+
// 0 to 999
|
|
147
|
+
fourDigits: /^\d{1,4}/,
|
|
148
|
+
// 0 to 9999
|
|
149
|
+
anyDigitsSigned: /^-?\d+/,
|
|
150
|
+
singleDigitSigned: /^-?\d/,
|
|
151
|
+
// 0 to 9, -0 to -9
|
|
152
|
+
twoDigitsSigned: /^-?\d{1,2}/,
|
|
153
|
+
// 0 to 99, -0 to -99
|
|
154
|
+
threeDigitsSigned: /^-?\d{1,3}/,
|
|
155
|
+
// 0 to 999, -0 to -999
|
|
156
|
+
fourDigitsSigned: /^-?\d{1,4}/
|
|
157
|
+
// 0 to 9999, -0 to -9999
|
|
158
|
+
};
|
|
159
|
+
const timezonePatterns = {
|
|
160
|
+
basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/,
|
|
161
|
+
basic: /^([+-])(\d{2})(\d{2})|Z/,
|
|
162
|
+
basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,
|
|
163
|
+
extended: /^([+-])(\d{2}):(\d{2})|Z/,
|
|
164
|
+
extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/
|
|
165
|
+
};
|
|
166
|
+
function mapValue(parseFnResult, mapFn) {
|
|
167
|
+
if (!parseFnResult) {
|
|
168
|
+
return parseFnResult;
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
value: mapFn(parseFnResult.value),
|
|
172
|
+
rest: parseFnResult.rest
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function parseNumericPattern(pattern, dateString) {
|
|
176
|
+
const matchResult = dateString.match(pattern);
|
|
177
|
+
if (!matchResult) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
value: parseInt(matchResult[0], 10),
|
|
182
|
+
rest: dateString.slice(matchResult[0].length)
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function parseTimezonePattern(pattern, dateString) {
|
|
186
|
+
const matchResult = dateString.match(pattern);
|
|
187
|
+
if (!matchResult) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
if (matchResult[0] === "Z") {
|
|
191
|
+
return {
|
|
192
|
+
value: 0,
|
|
193
|
+
rest: dateString.slice(1)
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const sign = matchResult[1] === "+" ? 1 : -1;
|
|
197
|
+
const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;
|
|
198
|
+
const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;
|
|
199
|
+
const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;
|
|
200
|
+
return {
|
|
201
|
+
value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),
|
|
202
|
+
rest: dateString.slice(matchResult[0].length)
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
function parseAnyDigitsSigned(dateString) {
|
|
206
|
+
return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);
|
|
207
|
+
}
|
|
208
|
+
function parseNDigits(n, dateString) {
|
|
209
|
+
switch (n) {
|
|
210
|
+
case 1:
|
|
211
|
+
return parseNumericPattern(numericPatterns.singleDigit, dateString);
|
|
212
|
+
case 2:
|
|
213
|
+
return parseNumericPattern(numericPatterns.twoDigits, dateString);
|
|
214
|
+
case 3:
|
|
215
|
+
return parseNumericPattern(numericPatterns.threeDigits, dateString);
|
|
216
|
+
case 4:
|
|
217
|
+
return parseNumericPattern(numericPatterns.fourDigits, dateString);
|
|
218
|
+
default:
|
|
219
|
+
return parseNumericPattern(new RegExp("^\\d{1," + n + "}"), dateString);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function parseNDigitsSigned(n, dateString) {
|
|
223
|
+
switch (n) {
|
|
224
|
+
case 1:
|
|
225
|
+
return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);
|
|
226
|
+
case 2:
|
|
227
|
+
return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);
|
|
228
|
+
case 3:
|
|
229
|
+
return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);
|
|
230
|
+
case 4:
|
|
231
|
+
return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);
|
|
232
|
+
default:
|
|
233
|
+
return parseNumericPattern(new RegExp("^-?\\d{1," + n + "}"), dateString);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
function dayPeriodEnumToHours(dayPeriod) {
|
|
237
|
+
switch (dayPeriod) {
|
|
238
|
+
case "morning":
|
|
239
|
+
return 4;
|
|
240
|
+
case "evening":
|
|
241
|
+
return 17;
|
|
242
|
+
case "pm":
|
|
243
|
+
case "noon":
|
|
244
|
+
case "afternoon":
|
|
245
|
+
return 12;
|
|
246
|
+
case "am":
|
|
247
|
+
case "midnight":
|
|
248
|
+
case "night":
|
|
249
|
+
default:
|
|
250
|
+
return 0;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function normalizeTwoDigitYear(twoDigitYear, currentYear) {
|
|
254
|
+
const isCommonEra = currentYear > 0;
|
|
255
|
+
const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;
|
|
256
|
+
let result;
|
|
257
|
+
if (absCurrentYear <= 50) {
|
|
258
|
+
result = twoDigitYear || 100;
|
|
259
|
+
} else {
|
|
260
|
+
const rangeEnd = absCurrentYear + 50;
|
|
261
|
+
const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;
|
|
262
|
+
const isPreviousCentury = twoDigitYear >= rangeEnd % 100;
|
|
263
|
+
result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);
|
|
264
|
+
}
|
|
265
|
+
return isCommonEra ? result : 1 - result;
|
|
266
|
+
}
|
|
267
|
+
function isLeapYearIndex(year) {
|
|
268
|
+
return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
|
|
269
|
+
}
|
|
270
|
+
class YearParser extends Parser {
|
|
271
|
+
constructor() {
|
|
272
|
+
super(...arguments);
|
|
273
|
+
__publicField(this, "priority", 130);
|
|
274
|
+
__publicField(this, "incompatibleTokens", ["Y", "R", "u", "w", "I", "i", "e", "c", "t", "T"]);
|
|
275
|
+
}
|
|
276
|
+
parse(dateString, token, match) {
|
|
277
|
+
const valueCallback = (year) => ({
|
|
278
|
+
year,
|
|
279
|
+
isTwoDigitYear: token === "yy"
|
|
280
|
+
});
|
|
281
|
+
switch (token) {
|
|
282
|
+
case "y":
|
|
283
|
+
return mapValue(parseNDigits(4, dateString), valueCallback);
|
|
284
|
+
case "yo":
|
|
285
|
+
return mapValue(
|
|
286
|
+
match.ordinalNumber(dateString, {
|
|
287
|
+
unit: "year"
|
|
288
|
+
}),
|
|
289
|
+
valueCallback
|
|
290
|
+
);
|
|
291
|
+
default:
|
|
292
|
+
return mapValue(parseNDigits(token.length, dateString), valueCallback);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
validate(_date, value) {
|
|
296
|
+
return value.isTwoDigitYear || value.year > 0;
|
|
297
|
+
}
|
|
298
|
+
set(date, flags, value) {
|
|
299
|
+
const currentYear = date.getFullYear();
|
|
300
|
+
if (value.isTwoDigitYear) {
|
|
301
|
+
const normalizedTwoDigitYear = normalizeTwoDigitYear(
|
|
302
|
+
value.year,
|
|
303
|
+
currentYear
|
|
304
|
+
);
|
|
305
|
+
date.setFullYear(normalizedTwoDigitYear, 0, 1);
|
|
306
|
+
date.setHours(0, 0, 0, 0);
|
|
307
|
+
return date;
|
|
308
|
+
}
|
|
309
|
+
const year = !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year;
|
|
310
|
+
date.setFullYear(year, 0, 1);
|
|
311
|
+
date.setHours(0, 0, 0, 0);
|
|
312
|
+
return date;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
class LocalWeekYearParser extends Parser {
|
|
316
|
+
constructor() {
|
|
317
|
+
super(...arguments);
|
|
318
|
+
__publicField(this, "priority", 130);
|
|
319
|
+
__publicField(this, "incompatibleTokens", [
|
|
320
|
+
"y",
|
|
321
|
+
"R",
|
|
322
|
+
"u",
|
|
323
|
+
"Q",
|
|
324
|
+
"q",
|
|
325
|
+
"M",
|
|
326
|
+
"L",
|
|
327
|
+
"I",
|
|
328
|
+
"d",
|
|
329
|
+
"D",
|
|
330
|
+
"i",
|
|
331
|
+
"t",
|
|
332
|
+
"T"
|
|
333
|
+
]);
|
|
334
|
+
}
|
|
335
|
+
parse(dateString, token, match) {
|
|
336
|
+
const valueCallback = (year) => ({
|
|
337
|
+
year,
|
|
338
|
+
isTwoDigitYear: token === "YY"
|
|
339
|
+
});
|
|
340
|
+
switch (token) {
|
|
341
|
+
case "Y":
|
|
342
|
+
return mapValue(parseNDigits(4, dateString), valueCallback);
|
|
343
|
+
case "Yo":
|
|
344
|
+
return mapValue(
|
|
345
|
+
match.ordinalNumber(dateString, {
|
|
346
|
+
unit: "year"
|
|
347
|
+
}),
|
|
348
|
+
valueCallback
|
|
349
|
+
);
|
|
350
|
+
default:
|
|
351
|
+
return mapValue(parseNDigits(token.length, dateString), valueCallback);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
validate(_date, value) {
|
|
355
|
+
return value.isTwoDigitYear || value.year > 0;
|
|
356
|
+
}
|
|
357
|
+
set(date, flags, value, options) {
|
|
358
|
+
const currentYear = getWeekYear(date, options);
|
|
359
|
+
if (value.isTwoDigitYear) {
|
|
360
|
+
const normalizedTwoDigitYear = normalizeTwoDigitYear(
|
|
361
|
+
value.year,
|
|
362
|
+
currentYear
|
|
363
|
+
);
|
|
364
|
+
date.setFullYear(
|
|
365
|
+
normalizedTwoDigitYear,
|
|
366
|
+
0,
|
|
367
|
+
options.firstWeekContainsDate
|
|
368
|
+
);
|
|
369
|
+
date.setHours(0, 0, 0, 0);
|
|
370
|
+
return startOfWeek(date, options);
|
|
371
|
+
}
|
|
372
|
+
const year = !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year;
|
|
373
|
+
date.setFullYear(year, 0, options.firstWeekContainsDate);
|
|
374
|
+
date.setHours(0, 0, 0, 0);
|
|
375
|
+
return startOfWeek(date, options);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
class ISOWeekYearParser extends Parser {
|
|
379
|
+
constructor() {
|
|
380
|
+
super(...arguments);
|
|
381
|
+
__publicField(this, "priority", 130);
|
|
382
|
+
__publicField(this, "incompatibleTokens", [
|
|
383
|
+
"G",
|
|
384
|
+
"y",
|
|
385
|
+
"Y",
|
|
386
|
+
"u",
|
|
387
|
+
"Q",
|
|
388
|
+
"q",
|
|
389
|
+
"M",
|
|
390
|
+
"L",
|
|
391
|
+
"w",
|
|
392
|
+
"d",
|
|
393
|
+
"D",
|
|
394
|
+
"e",
|
|
395
|
+
"c",
|
|
396
|
+
"t",
|
|
397
|
+
"T"
|
|
398
|
+
]);
|
|
399
|
+
}
|
|
400
|
+
parse(dateString, token) {
|
|
401
|
+
if (token === "R") {
|
|
402
|
+
return parseNDigitsSigned(4, dateString);
|
|
403
|
+
}
|
|
404
|
+
return parseNDigitsSigned(token.length, dateString);
|
|
405
|
+
}
|
|
406
|
+
set(date, _flags, value) {
|
|
407
|
+
const firstWeekOfYear = constructFrom(date, 0);
|
|
408
|
+
firstWeekOfYear.setFullYear(value, 0, 4);
|
|
409
|
+
firstWeekOfYear.setHours(0, 0, 0, 0);
|
|
410
|
+
return startOfISOWeek(firstWeekOfYear);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
class ExtendedYearParser extends Parser {
|
|
414
|
+
constructor() {
|
|
415
|
+
super(...arguments);
|
|
416
|
+
__publicField(this, "priority", 130);
|
|
417
|
+
__publicField(this, "incompatibleTokens", ["G", "y", "Y", "R", "w", "I", "i", "e", "c", "t", "T"]);
|
|
418
|
+
}
|
|
419
|
+
parse(dateString, token) {
|
|
420
|
+
if (token === "u") {
|
|
421
|
+
return parseNDigitsSigned(4, dateString);
|
|
422
|
+
}
|
|
423
|
+
return parseNDigitsSigned(token.length, dateString);
|
|
424
|
+
}
|
|
425
|
+
set(date, _flags, value) {
|
|
426
|
+
date.setFullYear(value, 0, 1);
|
|
427
|
+
date.setHours(0, 0, 0, 0);
|
|
428
|
+
return date;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
class QuarterParser extends Parser {
|
|
432
|
+
constructor() {
|
|
433
|
+
super(...arguments);
|
|
434
|
+
__publicField(this, "priority", 120);
|
|
435
|
+
__publicField(this, "incompatibleTokens", [
|
|
436
|
+
"Y",
|
|
437
|
+
"R",
|
|
438
|
+
"q",
|
|
439
|
+
"M",
|
|
440
|
+
"L",
|
|
441
|
+
"w",
|
|
442
|
+
"I",
|
|
443
|
+
"d",
|
|
444
|
+
"D",
|
|
445
|
+
"i",
|
|
446
|
+
"e",
|
|
447
|
+
"c",
|
|
448
|
+
"t",
|
|
449
|
+
"T"
|
|
450
|
+
]);
|
|
451
|
+
}
|
|
452
|
+
parse(dateString, token, match) {
|
|
453
|
+
switch (token) {
|
|
454
|
+
case "Q":
|
|
455
|
+
case "QQ":
|
|
456
|
+
return parseNDigits(token.length, dateString);
|
|
457
|
+
case "Qo":
|
|
458
|
+
return match.ordinalNumber(dateString, { unit: "quarter" });
|
|
459
|
+
case "QQQ":
|
|
460
|
+
return match.quarter(dateString, {
|
|
461
|
+
width: "abbreviated",
|
|
462
|
+
context: "formatting"
|
|
463
|
+
}) || match.quarter(dateString, {
|
|
464
|
+
width: "narrow",
|
|
465
|
+
context: "formatting"
|
|
466
|
+
});
|
|
467
|
+
case "QQQQQ":
|
|
468
|
+
return match.quarter(dateString, {
|
|
469
|
+
width: "narrow",
|
|
470
|
+
context: "formatting"
|
|
471
|
+
});
|
|
472
|
+
case "QQQQ":
|
|
473
|
+
default:
|
|
474
|
+
return match.quarter(dateString, {
|
|
475
|
+
width: "wide",
|
|
476
|
+
context: "formatting"
|
|
477
|
+
}) || match.quarter(dateString, {
|
|
478
|
+
width: "abbreviated",
|
|
479
|
+
context: "formatting"
|
|
480
|
+
}) || match.quarter(dateString, {
|
|
481
|
+
width: "narrow",
|
|
482
|
+
context: "formatting"
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
validate(_date, value) {
|
|
487
|
+
return value >= 1 && value <= 4;
|
|
488
|
+
}
|
|
489
|
+
set(date, _flags, value) {
|
|
490
|
+
date.setMonth((value - 1) * 3, 1);
|
|
491
|
+
date.setHours(0, 0, 0, 0);
|
|
492
|
+
return date;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
class StandAloneQuarterParser extends Parser {
|
|
496
|
+
constructor() {
|
|
497
|
+
super(...arguments);
|
|
498
|
+
__publicField(this, "priority", 120);
|
|
499
|
+
__publicField(this, "incompatibleTokens", [
|
|
500
|
+
"Y",
|
|
501
|
+
"R",
|
|
502
|
+
"Q",
|
|
503
|
+
"M",
|
|
504
|
+
"L",
|
|
505
|
+
"w",
|
|
506
|
+
"I",
|
|
507
|
+
"d",
|
|
508
|
+
"D",
|
|
509
|
+
"i",
|
|
510
|
+
"e",
|
|
511
|
+
"c",
|
|
512
|
+
"t",
|
|
513
|
+
"T"
|
|
514
|
+
]);
|
|
515
|
+
}
|
|
516
|
+
parse(dateString, token, match) {
|
|
517
|
+
switch (token) {
|
|
518
|
+
case "q":
|
|
519
|
+
case "qq":
|
|
520
|
+
return parseNDigits(token.length, dateString);
|
|
521
|
+
case "qo":
|
|
522
|
+
return match.ordinalNumber(dateString, { unit: "quarter" });
|
|
523
|
+
case "qqq":
|
|
524
|
+
return match.quarter(dateString, {
|
|
525
|
+
width: "abbreviated",
|
|
526
|
+
context: "standalone"
|
|
527
|
+
}) || match.quarter(dateString, {
|
|
528
|
+
width: "narrow",
|
|
529
|
+
context: "standalone"
|
|
530
|
+
});
|
|
531
|
+
case "qqqqq":
|
|
532
|
+
return match.quarter(dateString, {
|
|
533
|
+
width: "narrow",
|
|
534
|
+
context: "standalone"
|
|
535
|
+
});
|
|
536
|
+
case "qqqq":
|
|
537
|
+
default:
|
|
538
|
+
return match.quarter(dateString, {
|
|
539
|
+
width: "wide",
|
|
540
|
+
context: "standalone"
|
|
541
|
+
}) || match.quarter(dateString, {
|
|
542
|
+
width: "abbreviated",
|
|
543
|
+
context: "standalone"
|
|
544
|
+
}) || match.quarter(dateString, {
|
|
545
|
+
width: "narrow",
|
|
546
|
+
context: "standalone"
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
validate(_date, value) {
|
|
551
|
+
return value >= 1 && value <= 4;
|
|
552
|
+
}
|
|
553
|
+
set(date, _flags, value) {
|
|
554
|
+
date.setMonth((value - 1) * 3, 1);
|
|
555
|
+
date.setHours(0, 0, 0, 0);
|
|
556
|
+
return date;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
class MonthParser extends Parser {
|
|
560
|
+
constructor() {
|
|
561
|
+
super(...arguments);
|
|
562
|
+
__publicField(this, "incompatibleTokens", [
|
|
563
|
+
"Y",
|
|
564
|
+
"R",
|
|
565
|
+
"q",
|
|
566
|
+
"Q",
|
|
567
|
+
"L",
|
|
568
|
+
"w",
|
|
569
|
+
"I",
|
|
570
|
+
"D",
|
|
571
|
+
"i",
|
|
572
|
+
"e",
|
|
573
|
+
"c",
|
|
574
|
+
"t",
|
|
575
|
+
"T"
|
|
576
|
+
]);
|
|
577
|
+
__publicField(this, "priority", 110);
|
|
578
|
+
}
|
|
579
|
+
parse(dateString, token, match) {
|
|
580
|
+
const valueCallback = (value) => value - 1;
|
|
581
|
+
switch (token) {
|
|
582
|
+
case "M":
|
|
583
|
+
return mapValue(
|
|
584
|
+
parseNumericPattern(numericPatterns.month, dateString),
|
|
585
|
+
valueCallback
|
|
586
|
+
);
|
|
587
|
+
case "MM":
|
|
588
|
+
return mapValue(parseNDigits(2, dateString), valueCallback);
|
|
589
|
+
case "Mo":
|
|
590
|
+
return mapValue(
|
|
591
|
+
match.ordinalNumber(dateString, {
|
|
592
|
+
unit: "month"
|
|
593
|
+
}),
|
|
594
|
+
valueCallback
|
|
595
|
+
);
|
|
596
|
+
case "MMM":
|
|
597
|
+
return match.month(dateString, {
|
|
598
|
+
width: "abbreviated",
|
|
599
|
+
context: "formatting"
|
|
600
|
+
}) || match.month(dateString, { width: "narrow", context: "formatting" });
|
|
601
|
+
case "MMMMM":
|
|
602
|
+
return match.month(dateString, {
|
|
603
|
+
width: "narrow",
|
|
604
|
+
context: "formatting"
|
|
605
|
+
});
|
|
606
|
+
case "MMMM":
|
|
607
|
+
default:
|
|
608
|
+
return match.month(dateString, { width: "wide", context: "formatting" }) || match.month(dateString, {
|
|
609
|
+
width: "abbreviated",
|
|
610
|
+
context: "formatting"
|
|
611
|
+
}) || match.month(dateString, { width: "narrow", context: "formatting" });
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
validate(_date, value) {
|
|
615
|
+
return value >= 0 && value <= 11;
|
|
616
|
+
}
|
|
617
|
+
set(date, _flags, value) {
|
|
618
|
+
date.setMonth(value, 1);
|
|
619
|
+
date.setHours(0, 0, 0, 0);
|
|
620
|
+
return date;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
class StandAloneMonthParser extends Parser {
|
|
624
|
+
constructor() {
|
|
625
|
+
super(...arguments);
|
|
626
|
+
__publicField(this, "priority", 110);
|
|
627
|
+
__publicField(this, "incompatibleTokens", [
|
|
628
|
+
"Y",
|
|
629
|
+
"R",
|
|
630
|
+
"q",
|
|
631
|
+
"Q",
|
|
632
|
+
"M",
|
|
633
|
+
"w",
|
|
634
|
+
"I",
|
|
635
|
+
"D",
|
|
636
|
+
"i",
|
|
637
|
+
"e",
|
|
638
|
+
"c",
|
|
639
|
+
"t",
|
|
640
|
+
"T"
|
|
641
|
+
]);
|
|
642
|
+
}
|
|
643
|
+
parse(dateString, token, match) {
|
|
644
|
+
const valueCallback = (value) => value - 1;
|
|
645
|
+
switch (token) {
|
|
646
|
+
case "L":
|
|
647
|
+
return mapValue(
|
|
648
|
+
parseNumericPattern(numericPatterns.month, dateString),
|
|
649
|
+
valueCallback
|
|
650
|
+
);
|
|
651
|
+
case "LL":
|
|
652
|
+
return mapValue(parseNDigits(2, dateString), valueCallback);
|
|
653
|
+
case "Lo":
|
|
654
|
+
return mapValue(
|
|
655
|
+
match.ordinalNumber(dateString, {
|
|
656
|
+
unit: "month"
|
|
657
|
+
}),
|
|
658
|
+
valueCallback
|
|
659
|
+
);
|
|
660
|
+
case "LLL":
|
|
661
|
+
return match.month(dateString, {
|
|
662
|
+
width: "abbreviated",
|
|
663
|
+
context: "standalone"
|
|
664
|
+
}) || match.month(dateString, { width: "narrow", context: "standalone" });
|
|
665
|
+
case "LLLLL":
|
|
666
|
+
return match.month(dateString, {
|
|
667
|
+
width: "narrow",
|
|
668
|
+
context: "standalone"
|
|
669
|
+
});
|
|
670
|
+
case "LLLL":
|
|
671
|
+
default:
|
|
672
|
+
return match.month(dateString, { width: "wide", context: "standalone" }) || match.month(dateString, {
|
|
673
|
+
width: "abbreviated",
|
|
674
|
+
context: "standalone"
|
|
675
|
+
}) || match.month(dateString, { width: "narrow", context: "standalone" });
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
validate(_date, value) {
|
|
679
|
+
return value >= 0 && value <= 11;
|
|
680
|
+
}
|
|
681
|
+
set(date, _flags, value) {
|
|
682
|
+
date.setMonth(value, 1);
|
|
683
|
+
date.setHours(0, 0, 0, 0);
|
|
684
|
+
return date;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
function setWeek(date, week, options) {
|
|
688
|
+
const _date = toDate(date);
|
|
689
|
+
const diff = getWeek(_date, options) - week;
|
|
690
|
+
_date.setDate(_date.getDate() - diff * 7);
|
|
691
|
+
return _date;
|
|
692
|
+
}
|
|
693
|
+
class LocalWeekParser extends Parser {
|
|
694
|
+
constructor() {
|
|
695
|
+
super(...arguments);
|
|
696
|
+
__publicField(this, "priority", 100);
|
|
697
|
+
__publicField(this, "incompatibleTokens", [
|
|
698
|
+
"y",
|
|
699
|
+
"R",
|
|
700
|
+
"u",
|
|
701
|
+
"q",
|
|
702
|
+
"Q",
|
|
703
|
+
"M",
|
|
704
|
+
"L",
|
|
705
|
+
"I",
|
|
706
|
+
"d",
|
|
707
|
+
"D",
|
|
708
|
+
"i",
|
|
709
|
+
"t",
|
|
710
|
+
"T"
|
|
711
|
+
]);
|
|
712
|
+
}
|
|
713
|
+
parse(dateString, token, match) {
|
|
714
|
+
switch (token) {
|
|
715
|
+
case "w":
|
|
716
|
+
return parseNumericPattern(numericPatterns.week, dateString);
|
|
717
|
+
case "wo":
|
|
718
|
+
return match.ordinalNumber(dateString, { unit: "week" });
|
|
719
|
+
default:
|
|
720
|
+
return parseNDigits(token.length, dateString);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
validate(_date, value) {
|
|
724
|
+
return value >= 1 && value <= 53;
|
|
725
|
+
}
|
|
726
|
+
set(date, _flags, value, options) {
|
|
727
|
+
return startOfWeek(setWeek(date, value, options), options);
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
function setISOWeek(date, week) {
|
|
731
|
+
const _date = toDate(date);
|
|
732
|
+
const diff = getISOWeek(_date) - week;
|
|
733
|
+
_date.setDate(_date.getDate() - diff * 7);
|
|
734
|
+
return _date;
|
|
735
|
+
}
|
|
736
|
+
class ISOWeekParser extends Parser {
|
|
737
|
+
constructor() {
|
|
738
|
+
super(...arguments);
|
|
739
|
+
__publicField(this, "priority", 100);
|
|
740
|
+
__publicField(this, "incompatibleTokens", [
|
|
741
|
+
"y",
|
|
742
|
+
"Y",
|
|
743
|
+
"u",
|
|
744
|
+
"q",
|
|
745
|
+
"Q",
|
|
746
|
+
"M",
|
|
747
|
+
"L",
|
|
748
|
+
"w",
|
|
749
|
+
"d",
|
|
750
|
+
"D",
|
|
751
|
+
"e",
|
|
752
|
+
"c",
|
|
753
|
+
"t",
|
|
754
|
+
"T"
|
|
755
|
+
]);
|
|
756
|
+
}
|
|
757
|
+
parse(dateString, token, match) {
|
|
758
|
+
switch (token) {
|
|
759
|
+
case "I":
|
|
760
|
+
return parseNumericPattern(numericPatterns.week, dateString);
|
|
761
|
+
case "Io":
|
|
762
|
+
return match.ordinalNumber(dateString, { unit: "week" });
|
|
763
|
+
default:
|
|
764
|
+
return parseNDigits(token.length, dateString);
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
validate(_date, value) {
|
|
768
|
+
return value >= 1 && value <= 53;
|
|
769
|
+
}
|
|
770
|
+
set(date, _flags, value) {
|
|
771
|
+
return startOfISOWeek(setISOWeek(date, value));
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
const DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
775
|
+
const DAYS_IN_MONTH_LEAP_YEAR = [
|
|
776
|
+
31,
|
|
777
|
+
29,
|
|
778
|
+
31,
|
|
779
|
+
30,
|
|
780
|
+
31,
|
|
781
|
+
30,
|
|
782
|
+
31,
|
|
783
|
+
31,
|
|
784
|
+
30,
|
|
785
|
+
31,
|
|
786
|
+
30,
|
|
787
|
+
31
|
|
788
|
+
];
|
|
789
|
+
class DateParser extends Parser {
|
|
790
|
+
constructor() {
|
|
791
|
+
super(...arguments);
|
|
792
|
+
__publicField(this, "priority", 90);
|
|
793
|
+
__publicField(this, "subPriority", 1);
|
|
794
|
+
__publicField(this, "incompatibleTokens", [
|
|
795
|
+
"Y",
|
|
796
|
+
"R",
|
|
797
|
+
"q",
|
|
798
|
+
"Q",
|
|
799
|
+
"w",
|
|
800
|
+
"I",
|
|
801
|
+
"D",
|
|
802
|
+
"i",
|
|
803
|
+
"e",
|
|
804
|
+
"c",
|
|
805
|
+
"t",
|
|
806
|
+
"T"
|
|
807
|
+
]);
|
|
808
|
+
}
|
|
809
|
+
parse(dateString, token, match) {
|
|
810
|
+
switch (token) {
|
|
811
|
+
case "d":
|
|
812
|
+
return parseNumericPattern(numericPatterns.date, dateString);
|
|
813
|
+
case "do":
|
|
814
|
+
return match.ordinalNumber(dateString, { unit: "date" });
|
|
815
|
+
default:
|
|
816
|
+
return parseNDigits(token.length, dateString);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
validate(date, value) {
|
|
820
|
+
const year = date.getFullYear();
|
|
821
|
+
const isLeapYear = isLeapYearIndex(year);
|
|
822
|
+
const month = date.getMonth();
|
|
823
|
+
if (isLeapYear) {
|
|
824
|
+
return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];
|
|
825
|
+
} else {
|
|
826
|
+
return value >= 1 && value <= DAYS_IN_MONTH[month];
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
set(date, _flags, value) {
|
|
830
|
+
date.setDate(value);
|
|
831
|
+
date.setHours(0, 0, 0, 0);
|
|
832
|
+
return date;
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
class DayOfYearParser extends Parser {
|
|
836
|
+
constructor() {
|
|
837
|
+
super(...arguments);
|
|
838
|
+
__publicField(this, "priority", 90);
|
|
839
|
+
__publicField(this, "subpriority", 1);
|
|
840
|
+
__publicField(this, "incompatibleTokens", [
|
|
841
|
+
"Y",
|
|
842
|
+
"R",
|
|
843
|
+
"q",
|
|
844
|
+
"Q",
|
|
845
|
+
"M",
|
|
846
|
+
"L",
|
|
847
|
+
"w",
|
|
848
|
+
"I",
|
|
849
|
+
"d",
|
|
850
|
+
"E",
|
|
851
|
+
"i",
|
|
852
|
+
"e",
|
|
853
|
+
"c",
|
|
854
|
+
"t",
|
|
855
|
+
"T"
|
|
856
|
+
]);
|
|
857
|
+
}
|
|
858
|
+
parse(dateString, token, match) {
|
|
859
|
+
switch (token) {
|
|
860
|
+
case "D":
|
|
861
|
+
case "DD":
|
|
862
|
+
return parseNumericPattern(numericPatterns.dayOfYear, dateString);
|
|
863
|
+
case "Do":
|
|
864
|
+
return match.ordinalNumber(dateString, { unit: "date" });
|
|
865
|
+
default:
|
|
866
|
+
return parseNDigits(token.length, dateString);
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
validate(date, value) {
|
|
870
|
+
const year = date.getFullYear();
|
|
871
|
+
const isLeapYear = isLeapYearIndex(year);
|
|
872
|
+
if (isLeapYear) {
|
|
873
|
+
return value >= 1 && value <= 366;
|
|
874
|
+
} else {
|
|
875
|
+
return value >= 1 && value <= 365;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
set(date, _flags, value) {
|
|
879
|
+
date.setMonth(0, value);
|
|
880
|
+
date.setHours(0, 0, 0, 0);
|
|
881
|
+
return date;
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
function setDay(date, day, options) {
|
|
885
|
+
var _a, _b, _c, _d;
|
|
886
|
+
const defaultOptions = getDefaultOptions$1();
|
|
887
|
+
const weekStartsOn = (options == null ? void 0 : options.weekStartsOn) ?? ((_b = (_a = options == null ? void 0 : options.locale) == null ? void 0 : _a.options) == null ? void 0 : _b.weekStartsOn) ?? defaultOptions.weekStartsOn ?? ((_d = (_c = defaultOptions.locale) == null ? void 0 : _c.options) == null ? void 0 : _d.weekStartsOn) ?? 0;
|
|
888
|
+
const _date = toDate(date);
|
|
889
|
+
const currentDay = _date.getDay();
|
|
890
|
+
const remainder = day % 7;
|
|
891
|
+
const dayIndex = (remainder + 7) % 7;
|
|
892
|
+
const delta = 7 - weekStartsOn;
|
|
893
|
+
const diff = day < 0 || day > 6 ? day - (currentDay + delta) % 7 : (dayIndex + delta) % 7 - (currentDay + delta) % 7;
|
|
894
|
+
return addDays(_date, diff);
|
|
895
|
+
}
|
|
896
|
+
class DayParser extends Parser {
|
|
897
|
+
constructor() {
|
|
898
|
+
super(...arguments);
|
|
899
|
+
__publicField(this, "priority", 90);
|
|
900
|
+
__publicField(this, "incompatibleTokens", ["D", "i", "e", "c", "t", "T"]);
|
|
901
|
+
}
|
|
902
|
+
parse(dateString, token, match) {
|
|
903
|
+
switch (token) {
|
|
904
|
+
case "E":
|
|
905
|
+
case "EE":
|
|
906
|
+
case "EEE":
|
|
907
|
+
return match.day(dateString, {
|
|
908
|
+
width: "abbreviated",
|
|
909
|
+
context: "formatting"
|
|
910
|
+
}) || match.day(dateString, { width: "short", context: "formatting" }) || match.day(dateString, { width: "narrow", context: "formatting" });
|
|
911
|
+
case "EEEEE":
|
|
912
|
+
return match.day(dateString, {
|
|
913
|
+
width: "narrow",
|
|
914
|
+
context: "formatting"
|
|
915
|
+
});
|
|
916
|
+
case "EEEEEE":
|
|
917
|
+
return match.day(dateString, { width: "short", context: "formatting" }) || match.day(dateString, { width: "narrow", context: "formatting" });
|
|
918
|
+
case "EEEE":
|
|
919
|
+
default:
|
|
920
|
+
return match.day(dateString, { width: "wide", context: "formatting" }) || match.day(dateString, {
|
|
921
|
+
width: "abbreviated",
|
|
922
|
+
context: "formatting"
|
|
923
|
+
}) || match.day(dateString, { width: "short", context: "formatting" }) || match.day(dateString, { width: "narrow", context: "formatting" });
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
validate(_date, value) {
|
|
927
|
+
return value >= 0 && value <= 6;
|
|
928
|
+
}
|
|
929
|
+
set(date, _flags, value, options) {
|
|
930
|
+
date = setDay(date, value, options);
|
|
931
|
+
date.setHours(0, 0, 0, 0);
|
|
932
|
+
return date;
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
class LocalDayParser extends Parser {
|
|
936
|
+
constructor() {
|
|
937
|
+
super(...arguments);
|
|
938
|
+
__publicField(this, "priority", 90);
|
|
939
|
+
__publicField(this, "incompatibleTokens", [
|
|
940
|
+
"y",
|
|
941
|
+
"R",
|
|
942
|
+
"u",
|
|
943
|
+
"q",
|
|
944
|
+
"Q",
|
|
945
|
+
"M",
|
|
946
|
+
"L",
|
|
947
|
+
"I",
|
|
948
|
+
"d",
|
|
949
|
+
"D",
|
|
950
|
+
"E",
|
|
951
|
+
"i",
|
|
952
|
+
"c",
|
|
953
|
+
"t",
|
|
954
|
+
"T"
|
|
955
|
+
]);
|
|
956
|
+
}
|
|
957
|
+
parse(dateString, token, match, options) {
|
|
958
|
+
const valueCallback = (value) => {
|
|
959
|
+
const wholeWeekDays = Math.floor((value - 1) / 7) * 7;
|
|
960
|
+
return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;
|
|
961
|
+
};
|
|
962
|
+
switch (token) {
|
|
963
|
+
case "e":
|
|
964
|
+
case "ee":
|
|
965
|
+
return mapValue(parseNDigits(token.length, dateString), valueCallback);
|
|
966
|
+
case "eo":
|
|
967
|
+
return mapValue(
|
|
968
|
+
match.ordinalNumber(dateString, {
|
|
969
|
+
unit: "day"
|
|
970
|
+
}),
|
|
971
|
+
valueCallback
|
|
972
|
+
);
|
|
973
|
+
case "eee":
|
|
974
|
+
return match.day(dateString, {
|
|
975
|
+
width: "abbreviated",
|
|
976
|
+
context: "formatting"
|
|
977
|
+
}) || match.day(dateString, { width: "short", context: "formatting" }) || match.day(dateString, { width: "narrow", context: "formatting" });
|
|
978
|
+
case "eeeee":
|
|
979
|
+
return match.day(dateString, {
|
|
980
|
+
width: "narrow",
|
|
981
|
+
context: "formatting"
|
|
982
|
+
});
|
|
983
|
+
case "eeeeee":
|
|
984
|
+
return match.day(dateString, { width: "short", context: "formatting" }) || match.day(dateString, { width: "narrow", context: "formatting" });
|
|
985
|
+
case "eeee":
|
|
986
|
+
default:
|
|
987
|
+
return match.day(dateString, { width: "wide", context: "formatting" }) || match.day(dateString, {
|
|
988
|
+
width: "abbreviated",
|
|
989
|
+
context: "formatting"
|
|
990
|
+
}) || match.day(dateString, { width: "short", context: "formatting" }) || match.day(dateString, { width: "narrow", context: "formatting" });
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
validate(_date, value) {
|
|
994
|
+
return value >= 0 && value <= 6;
|
|
995
|
+
}
|
|
996
|
+
set(date, _flags, value, options) {
|
|
997
|
+
date = setDay(date, value, options);
|
|
998
|
+
date.setHours(0, 0, 0, 0);
|
|
999
|
+
return date;
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
class StandAloneLocalDayParser extends Parser {
|
|
1003
|
+
constructor() {
|
|
1004
|
+
super(...arguments);
|
|
1005
|
+
__publicField(this, "priority", 90);
|
|
1006
|
+
__publicField(this, "incompatibleTokens", [
|
|
1007
|
+
"y",
|
|
1008
|
+
"R",
|
|
1009
|
+
"u",
|
|
1010
|
+
"q",
|
|
1011
|
+
"Q",
|
|
1012
|
+
"M",
|
|
1013
|
+
"L",
|
|
1014
|
+
"I",
|
|
1015
|
+
"d",
|
|
1016
|
+
"D",
|
|
1017
|
+
"E",
|
|
1018
|
+
"i",
|
|
1019
|
+
"e",
|
|
1020
|
+
"t",
|
|
1021
|
+
"T"
|
|
1022
|
+
]);
|
|
1023
|
+
}
|
|
1024
|
+
parse(dateString, token, match, options) {
|
|
1025
|
+
const valueCallback = (value) => {
|
|
1026
|
+
const wholeWeekDays = Math.floor((value - 1) / 7) * 7;
|
|
1027
|
+
return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;
|
|
1028
|
+
};
|
|
1029
|
+
switch (token) {
|
|
1030
|
+
case "c":
|
|
1031
|
+
case "cc":
|
|
1032
|
+
return mapValue(parseNDigits(token.length, dateString), valueCallback);
|
|
1033
|
+
case "co":
|
|
1034
|
+
return mapValue(
|
|
1035
|
+
match.ordinalNumber(dateString, {
|
|
1036
|
+
unit: "day"
|
|
1037
|
+
}),
|
|
1038
|
+
valueCallback
|
|
1039
|
+
);
|
|
1040
|
+
case "ccc":
|
|
1041
|
+
return match.day(dateString, {
|
|
1042
|
+
width: "abbreviated",
|
|
1043
|
+
context: "standalone"
|
|
1044
|
+
}) || match.day(dateString, { width: "short", context: "standalone" }) || match.day(dateString, { width: "narrow", context: "standalone" });
|
|
1045
|
+
case "ccccc":
|
|
1046
|
+
return match.day(dateString, {
|
|
1047
|
+
width: "narrow",
|
|
1048
|
+
context: "standalone"
|
|
1049
|
+
});
|
|
1050
|
+
case "cccccc":
|
|
1051
|
+
return match.day(dateString, { width: "short", context: "standalone" }) || match.day(dateString, { width: "narrow", context: "standalone" });
|
|
1052
|
+
case "cccc":
|
|
1053
|
+
default:
|
|
1054
|
+
return match.day(dateString, { width: "wide", context: "standalone" }) || match.day(dateString, {
|
|
1055
|
+
width: "abbreviated",
|
|
1056
|
+
context: "standalone"
|
|
1057
|
+
}) || match.day(dateString, { width: "short", context: "standalone" }) || match.day(dateString, { width: "narrow", context: "standalone" });
|
|
1058
|
+
}
|
|
1059
|
+
}
|
|
1060
|
+
validate(_date, value) {
|
|
1061
|
+
return value >= 0 && value <= 6;
|
|
1062
|
+
}
|
|
1063
|
+
set(date, _flags, value, options) {
|
|
1064
|
+
date = setDay(date, value, options);
|
|
1065
|
+
date.setHours(0, 0, 0, 0);
|
|
1066
|
+
return date;
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
function setISODay(date, day) {
|
|
1070
|
+
const _date = toDate(date);
|
|
1071
|
+
const currentDay = getISODay(_date);
|
|
1072
|
+
const diff = day - currentDay;
|
|
1073
|
+
return addDays(_date, diff);
|
|
1074
|
+
}
|
|
1075
|
+
class ISODayParser extends Parser {
|
|
1076
|
+
constructor() {
|
|
1077
|
+
super(...arguments);
|
|
1078
|
+
__publicField(this, "priority", 90);
|
|
1079
|
+
__publicField(this, "incompatibleTokens", [
|
|
1080
|
+
"y",
|
|
1081
|
+
"Y",
|
|
1082
|
+
"u",
|
|
1083
|
+
"q",
|
|
1084
|
+
"Q",
|
|
1085
|
+
"M",
|
|
1086
|
+
"L",
|
|
1087
|
+
"w",
|
|
1088
|
+
"d",
|
|
1089
|
+
"D",
|
|
1090
|
+
"E",
|
|
1091
|
+
"e",
|
|
1092
|
+
"c",
|
|
1093
|
+
"t",
|
|
1094
|
+
"T"
|
|
1095
|
+
]);
|
|
1096
|
+
}
|
|
1097
|
+
parse(dateString, token, match) {
|
|
1098
|
+
const valueCallback = (value) => {
|
|
1099
|
+
if (value === 0) {
|
|
1100
|
+
return 7;
|
|
1101
|
+
}
|
|
1102
|
+
return value;
|
|
1103
|
+
};
|
|
1104
|
+
switch (token) {
|
|
1105
|
+
case "i":
|
|
1106
|
+
case "ii":
|
|
1107
|
+
return parseNDigits(token.length, dateString);
|
|
1108
|
+
case "io":
|
|
1109
|
+
return match.ordinalNumber(dateString, { unit: "day" });
|
|
1110
|
+
case "iii":
|
|
1111
|
+
return mapValue(
|
|
1112
|
+
match.day(dateString, {
|
|
1113
|
+
width: "abbreviated",
|
|
1114
|
+
context: "formatting"
|
|
1115
|
+
}) || match.day(dateString, {
|
|
1116
|
+
width: "short",
|
|
1117
|
+
context: "formatting"
|
|
1118
|
+
}) || match.day(dateString, {
|
|
1119
|
+
width: "narrow",
|
|
1120
|
+
context: "formatting"
|
|
1121
|
+
}),
|
|
1122
|
+
valueCallback
|
|
1123
|
+
);
|
|
1124
|
+
case "iiiii":
|
|
1125
|
+
return mapValue(
|
|
1126
|
+
match.day(dateString, {
|
|
1127
|
+
width: "narrow",
|
|
1128
|
+
context: "formatting"
|
|
1129
|
+
}),
|
|
1130
|
+
valueCallback
|
|
1131
|
+
);
|
|
1132
|
+
case "iiiiii":
|
|
1133
|
+
return mapValue(
|
|
1134
|
+
match.day(dateString, {
|
|
1135
|
+
width: "short",
|
|
1136
|
+
context: "formatting"
|
|
1137
|
+
}) || match.day(dateString, {
|
|
1138
|
+
width: "narrow",
|
|
1139
|
+
context: "formatting"
|
|
1140
|
+
}),
|
|
1141
|
+
valueCallback
|
|
1142
|
+
);
|
|
1143
|
+
case "iiii":
|
|
1144
|
+
default:
|
|
1145
|
+
return mapValue(
|
|
1146
|
+
match.day(dateString, {
|
|
1147
|
+
width: "wide",
|
|
1148
|
+
context: "formatting"
|
|
1149
|
+
}) || match.day(dateString, {
|
|
1150
|
+
width: "abbreviated",
|
|
1151
|
+
context: "formatting"
|
|
1152
|
+
}) || match.day(dateString, {
|
|
1153
|
+
width: "short",
|
|
1154
|
+
context: "formatting"
|
|
1155
|
+
}) || match.day(dateString, {
|
|
1156
|
+
width: "narrow",
|
|
1157
|
+
context: "formatting"
|
|
1158
|
+
}),
|
|
1159
|
+
valueCallback
|
|
1160
|
+
);
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
validate(_date, value) {
|
|
1164
|
+
return value >= 1 && value <= 7;
|
|
1165
|
+
}
|
|
1166
|
+
set(date, _flags, value) {
|
|
1167
|
+
date = setISODay(date, value);
|
|
1168
|
+
date.setHours(0, 0, 0, 0);
|
|
1169
|
+
return date;
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
class AMPMParser extends Parser {
|
|
1173
|
+
constructor() {
|
|
1174
|
+
super(...arguments);
|
|
1175
|
+
__publicField(this, "priority", 80);
|
|
1176
|
+
__publicField(this, "incompatibleTokens", ["b", "B", "H", "k", "t", "T"]);
|
|
1177
|
+
}
|
|
1178
|
+
parse(dateString, token, match) {
|
|
1179
|
+
switch (token) {
|
|
1180
|
+
case "a":
|
|
1181
|
+
case "aa":
|
|
1182
|
+
case "aaa":
|
|
1183
|
+
return match.dayPeriod(dateString, {
|
|
1184
|
+
width: "abbreviated",
|
|
1185
|
+
context: "formatting"
|
|
1186
|
+
}) || match.dayPeriod(dateString, {
|
|
1187
|
+
width: "narrow",
|
|
1188
|
+
context: "formatting"
|
|
1189
|
+
});
|
|
1190
|
+
case "aaaaa":
|
|
1191
|
+
return match.dayPeriod(dateString, {
|
|
1192
|
+
width: "narrow",
|
|
1193
|
+
context: "formatting"
|
|
1194
|
+
});
|
|
1195
|
+
case "aaaa":
|
|
1196
|
+
default:
|
|
1197
|
+
return match.dayPeriod(dateString, {
|
|
1198
|
+
width: "wide",
|
|
1199
|
+
context: "formatting"
|
|
1200
|
+
}) || match.dayPeriod(dateString, {
|
|
1201
|
+
width: "abbreviated",
|
|
1202
|
+
context: "formatting"
|
|
1203
|
+
}) || match.dayPeriod(dateString, {
|
|
1204
|
+
width: "narrow",
|
|
1205
|
+
context: "formatting"
|
|
1206
|
+
});
|
|
1207
|
+
}
|
|
1208
|
+
}
|
|
1209
|
+
set(date, _flags, value) {
|
|
1210
|
+
date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);
|
|
1211
|
+
return date;
|
|
1212
|
+
}
|
|
1213
|
+
}
|
|
1214
|
+
class AMPMMidnightParser extends Parser {
|
|
1215
|
+
constructor() {
|
|
1216
|
+
super(...arguments);
|
|
1217
|
+
__publicField(this, "priority", 80);
|
|
1218
|
+
__publicField(this, "incompatibleTokens", ["a", "B", "H", "k", "t", "T"]);
|
|
1219
|
+
}
|
|
1220
|
+
parse(dateString, token, match) {
|
|
1221
|
+
switch (token) {
|
|
1222
|
+
case "b":
|
|
1223
|
+
case "bb":
|
|
1224
|
+
case "bbb":
|
|
1225
|
+
return match.dayPeriod(dateString, {
|
|
1226
|
+
width: "abbreviated",
|
|
1227
|
+
context: "formatting"
|
|
1228
|
+
}) || match.dayPeriod(dateString, {
|
|
1229
|
+
width: "narrow",
|
|
1230
|
+
context: "formatting"
|
|
1231
|
+
});
|
|
1232
|
+
case "bbbbb":
|
|
1233
|
+
return match.dayPeriod(dateString, {
|
|
1234
|
+
width: "narrow",
|
|
1235
|
+
context: "formatting"
|
|
1236
|
+
});
|
|
1237
|
+
case "bbbb":
|
|
1238
|
+
default:
|
|
1239
|
+
return match.dayPeriod(dateString, {
|
|
1240
|
+
width: "wide",
|
|
1241
|
+
context: "formatting"
|
|
1242
|
+
}) || match.dayPeriod(dateString, {
|
|
1243
|
+
width: "abbreviated",
|
|
1244
|
+
context: "formatting"
|
|
1245
|
+
}) || match.dayPeriod(dateString, {
|
|
1246
|
+
width: "narrow",
|
|
1247
|
+
context: "formatting"
|
|
1248
|
+
});
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
set(date, _flags, value) {
|
|
1252
|
+
date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);
|
|
1253
|
+
return date;
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
class DayPeriodParser extends Parser {
|
|
1257
|
+
constructor() {
|
|
1258
|
+
super(...arguments);
|
|
1259
|
+
__publicField(this, "priority", 80);
|
|
1260
|
+
__publicField(this, "incompatibleTokens", ["a", "b", "t", "T"]);
|
|
1261
|
+
}
|
|
1262
|
+
parse(dateString, token, match) {
|
|
1263
|
+
switch (token) {
|
|
1264
|
+
case "B":
|
|
1265
|
+
case "BB":
|
|
1266
|
+
case "BBB":
|
|
1267
|
+
return match.dayPeriod(dateString, {
|
|
1268
|
+
width: "abbreviated",
|
|
1269
|
+
context: "formatting"
|
|
1270
|
+
}) || match.dayPeriod(dateString, {
|
|
1271
|
+
width: "narrow",
|
|
1272
|
+
context: "formatting"
|
|
1273
|
+
});
|
|
1274
|
+
case "BBBBB":
|
|
1275
|
+
return match.dayPeriod(dateString, {
|
|
1276
|
+
width: "narrow",
|
|
1277
|
+
context: "formatting"
|
|
1278
|
+
});
|
|
1279
|
+
case "BBBB":
|
|
1280
|
+
default:
|
|
1281
|
+
return match.dayPeriod(dateString, {
|
|
1282
|
+
width: "wide",
|
|
1283
|
+
context: "formatting"
|
|
1284
|
+
}) || match.dayPeriod(dateString, {
|
|
1285
|
+
width: "abbreviated",
|
|
1286
|
+
context: "formatting"
|
|
1287
|
+
}) || match.dayPeriod(dateString, {
|
|
1288
|
+
width: "narrow",
|
|
1289
|
+
context: "formatting"
|
|
1290
|
+
});
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
set(date, _flags, value) {
|
|
1294
|
+
date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);
|
|
1295
|
+
return date;
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
class Hour1to12Parser extends Parser {
|
|
1299
|
+
constructor() {
|
|
1300
|
+
super(...arguments);
|
|
1301
|
+
__publicField(this, "priority", 70);
|
|
1302
|
+
__publicField(this, "incompatibleTokens", ["H", "K", "k", "t", "T"]);
|
|
1303
|
+
}
|
|
1304
|
+
parse(dateString, token, match) {
|
|
1305
|
+
switch (token) {
|
|
1306
|
+
case "h":
|
|
1307
|
+
return parseNumericPattern(numericPatterns.hour12h, dateString);
|
|
1308
|
+
case "ho":
|
|
1309
|
+
return match.ordinalNumber(dateString, { unit: "hour" });
|
|
1310
|
+
default:
|
|
1311
|
+
return parseNDigits(token.length, dateString);
|
|
1312
|
+
}
|
|
1313
|
+
}
|
|
1314
|
+
validate(_date, value) {
|
|
1315
|
+
return value >= 1 && value <= 12;
|
|
1316
|
+
}
|
|
1317
|
+
set(date, _flags, value) {
|
|
1318
|
+
const isPM = date.getHours() >= 12;
|
|
1319
|
+
if (isPM && value < 12) {
|
|
1320
|
+
date.setHours(value + 12, 0, 0, 0);
|
|
1321
|
+
} else if (!isPM && value === 12) {
|
|
1322
|
+
date.setHours(0, 0, 0, 0);
|
|
1323
|
+
} else {
|
|
1324
|
+
date.setHours(value, 0, 0, 0);
|
|
1325
|
+
}
|
|
1326
|
+
return date;
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
class Hour0to23Parser extends Parser {
|
|
1330
|
+
constructor() {
|
|
1331
|
+
super(...arguments);
|
|
1332
|
+
__publicField(this, "priority", 70);
|
|
1333
|
+
__publicField(this, "incompatibleTokens", ["a", "b", "h", "K", "k", "t", "T"]);
|
|
1334
|
+
}
|
|
1335
|
+
parse(dateString, token, match) {
|
|
1336
|
+
switch (token) {
|
|
1337
|
+
case "H":
|
|
1338
|
+
return parseNumericPattern(numericPatterns.hour23h, dateString);
|
|
1339
|
+
case "Ho":
|
|
1340
|
+
return match.ordinalNumber(dateString, { unit: "hour" });
|
|
1341
|
+
default:
|
|
1342
|
+
return parseNDigits(token.length, dateString);
|
|
1343
|
+
}
|
|
1344
|
+
}
|
|
1345
|
+
validate(_date, value) {
|
|
1346
|
+
return value >= 0 && value <= 23;
|
|
1347
|
+
}
|
|
1348
|
+
set(date, _flags, value) {
|
|
1349
|
+
date.setHours(value, 0, 0, 0);
|
|
1350
|
+
return date;
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
class Hour0To11Parser extends Parser {
|
|
1354
|
+
constructor() {
|
|
1355
|
+
super(...arguments);
|
|
1356
|
+
__publicField(this, "priority", 70);
|
|
1357
|
+
__publicField(this, "incompatibleTokens", ["h", "H", "k", "t", "T"]);
|
|
1358
|
+
}
|
|
1359
|
+
parse(dateString, token, match) {
|
|
1360
|
+
switch (token) {
|
|
1361
|
+
case "K":
|
|
1362
|
+
return parseNumericPattern(numericPatterns.hour11h, dateString);
|
|
1363
|
+
case "Ko":
|
|
1364
|
+
return match.ordinalNumber(dateString, { unit: "hour" });
|
|
1365
|
+
default:
|
|
1366
|
+
return parseNDigits(token.length, dateString);
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
validate(_date, value) {
|
|
1370
|
+
return value >= 0 && value <= 11;
|
|
1371
|
+
}
|
|
1372
|
+
set(date, _flags, value) {
|
|
1373
|
+
const isPM = date.getHours() >= 12;
|
|
1374
|
+
if (isPM && value < 12) {
|
|
1375
|
+
date.setHours(value + 12, 0, 0, 0);
|
|
1376
|
+
} else {
|
|
1377
|
+
date.setHours(value, 0, 0, 0);
|
|
1378
|
+
}
|
|
1379
|
+
return date;
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
class Hour1To24Parser extends Parser {
|
|
1383
|
+
constructor() {
|
|
1384
|
+
super(...arguments);
|
|
1385
|
+
__publicField(this, "priority", 70);
|
|
1386
|
+
__publicField(this, "incompatibleTokens", ["a", "b", "h", "H", "K", "t", "T"]);
|
|
1387
|
+
}
|
|
1388
|
+
parse(dateString, token, match) {
|
|
1389
|
+
switch (token) {
|
|
1390
|
+
case "k":
|
|
1391
|
+
return parseNumericPattern(numericPatterns.hour24h, dateString);
|
|
1392
|
+
case "ko":
|
|
1393
|
+
return match.ordinalNumber(dateString, { unit: "hour" });
|
|
1394
|
+
default:
|
|
1395
|
+
return parseNDigits(token.length, dateString);
|
|
1396
|
+
}
|
|
1397
|
+
}
|
|
1398
|
+
validate(_date, value) {
|
|
1399
|
+
return value >= 1 && value <= 24;
|
|
1400
|
+
}
|
|
1401
|
+
set(date, _flags, value) {
|
|
1402
|
+
const hours = value <= 24 ? value % 24 : value;
|
|
1403
|
+
date.setHours(hours, 0, 0, 0);
|
|
1404
|
+
return date;
|
|
1405
|
+
}
|
|
1406
|
+
}
|
|
1407
|
+
class MinuteParser extends Parser {
|
|
1408
|
+
constructor() {
|
|
1409
|
+
super(...arguments);
|
|
1410
|
+
__publicField(this, "priority", 60);
|
|
1411
|
+
__publicField(this, "incompatibleTokens", ["t", "T"]);
|
|
1412
|
+
}
|
|
1413
|
+
parse(dateString, token, match) {
|
|
1414
|
+
switch (token) {
|
|
1415
|
+
case "m":
|
|
1416
|
+
return parseNumericPattern(numericPatterns.minute, dateString);
|
|
1417
|
+
case "mo":
|
|
1418
|
+
return match.ordinalNumber(dateString, { unit: "minute" });
|
|
1419
|
+
default:
|
|
1420
|
+
return parseNDigits(token.length, dateString);
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
validate(_date, value) {
|
|
1424
|
+
return value >= 0 && value <= 59;
|
|
1425
|
+
}
|
|
1426
|
+
set(date, _flags, value) {
|
|
1427
|
+
date.setMinutes(value, 0, 0);
|
|
1428
|
+
return date;
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
class SecondParser extends Parser {
|
|
1432
|
+
constructor() {
|
|
1433
|
+
super(...arguments);
|
|
1434
|
+
__publicField(this, "priority", 50);
|
|
1435
|
+
__publicField(this, "incompatibleTokens", ["t", "T"]);
|
|
1436
|
+
}
|
|
1437
|
+
parse(dateString, token, match) {
|
|
1438
|
+
switch (token) {
|
|
1439
|
+
case "s":
|
|
1440
|
+
return parseNumericPattern(numericPatterns.second, dateString);
|
|
1441
|
+
case "so":
|
|
1442
|
+
return match.ordinalNumber(dateString, { unit: "second" });
|
|
1443
|
+
default:
|
|
1444
|
+
return parseNDigits(token.length, dateString);
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
validate(_date, value) {
|
|
1448
|
+
return value >= 0 && value <= 59;
|
|
1449
|
+
}
|
|
1450
|
+
set(date, _flags, value) {
|
|
1451
|
+
date.setSeconds(value, 0);
|
|
1452
|
+
return date;
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
class FractionOfSecondParser extends Parser {
|
|
1456
|
+
constructor() {
|
|
1457
|
+
super(...arguments);
|
|
1458
|
+
__publicField(this, "priority", 30);
|
|
1459
|
+
__publicField(this, "incompatibleTokens", ["t", "T"]);
|
|
1460
|
+
}
|
|
1461
|
+
parse(dateString, token) {
|
|
1462
|
+
const valueCallback = (value) => Math.trunc(value * Math.pow(10, -token.length + 3));
|
|
1463
|
+
return mapValue(parseNDigits(token.length, dateString), valueCallback);
|
|
1464
|
+
}
|
|
1465
|
+
set(date, _flags, value) {
|
|
1466
|
+
date.setMilliseconds(value);
|
|
1467
|
+
return date;
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1470
|
+
class ISOTimezoneWithZParser extends Parser {
|
|
1471
|
+
constructor() {
|
|
1472
|
+
super(...arguments);
|
|
1473
|
+
__publicField(this, "priority", 10);
|
|
1474
|
+
__publicField(this, "incompatibleTokens", ["t", "T", "x"]);
|
|
1475
|
+
}
|
|
1476
|
+
parse(dateString, token) {
|
|
1477
|
+
switch (token) {
|
|
1478
|
+
case "X":
|
|
1479
|
+
return parseTimezonePattern(
|
|
1480
|
+
timezonePatterns.basicOptionalMinutes,
|
|
1481
|
+
dateString
|
|
1482
|
+
);
|
|
1483
|
+
case "XX":
|
|
1484
|
+
return parseTimezonePattern(timezonePatterns.basic, dateString);
|
|
1485
|
+
case "XXXX":
|
|
1486
|
+
return parseTimezonePattern(
|
|
1487
|
+
timezonePatterns.basicOptionalSeconds,
|
|
1488
|
+
dateString
|
|
1489
|
+
);
|
|
1490
|
+
case "XXXXX":
|
|
1491
|
+
return parseTimezonePattern(
|
|
1492
|
+
timezonePatterns.extendedOptionalSeconds,
|
|
1493
|
+
dateString
|
|
1494
|
+
);
|
|
1495
|
+
case "XXX":
|
|
1496
|
+
default:
|
|
1497
|
+
return parseTimezonePattern(timezonePatterns.extended, dateString);
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1500
|
+
set(date, flags, value) {
|
|
1501
|
+
if (flags.timestampIsSet)
|
|
1502
|
+
return date;
|
|
1503
|
+
return constructFrom(
|
|
1504
|
+
date,
|
|
1505
|
+
date.getTime() - getTimezoneOffsetInMilliseconds(date) - value
|
|
1506
|
+
);
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
class ISOTimezoneParser extends Parser {
|
|
1510
|
+
constructor() {
|
|
1511
|
+
super(...arguments);
|
|
1512
|
+
__publicField(this, "priority", 10);
|
|
1513
|
+
__publicField(this, "incompatibleTokens", ["t", "T", "X"]);
|
|
1514
|
+
}
|
|
1515
|
+
parse(dateString, token) {
|
|
1516
|
+
switch (token) {
|
|
1517
|
+
case "x":
|
|
1518
|
+
return parseTimezonePattern(
|
|
1519
|
+
timezonePatterns.basicOptionalMinutes,
|
|
1520
|
+
dateString
|
|
1521
|
+
);
|
|
1522
|
+
case "xx":
|
|
1523
|
+
return parseTimezonePattern(timezonePatterns.basic, dateString);
|
|
1524
|
+
case "xxxx":
|
|
1525
|
+
return parseTimezonePattern(
|
|
1526
|
+
timezonePatterns.basicOptionalSeconds,
|
|
1527
|
+
dateString
|
|
1528
|
+
);
|
|
1529
|
+
case "xxxxx":
|
|
1530
|
+
return parseTimezonePattern(
|
|
1531
|
+
timezonePatterns.extendedOptionalSeconds,
|
|
1532
|
+
dateString
|
|
1533
|
+
);
|
|
1534
|
+
case "xxx":
|
|
1535
|
+
default:
|
|
1536
|
+
return parseTimezonePattern(timezonePatterns.extended, dateString);
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
set(date, flags, value) {
|
|
1540
|
+
if (flags.timestampIsSet)
|
|
1541
|
+
return date;
|
|
1542
|
+
return constructFrom(
|
|
1543
|
+
date,
|
|
1544
|
+
date.getTime() - getTimezoneOffsetInMilliseconds(date) - value
|
|
1545
|
+
);
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
class TimestampSecondsParser extends Parser {
|
|
1549
|
+
constructor() {
|
|
1550
|
+
super(...arguments);
|
|
1551
|
+
__publicField(this, "priority", 40);
|
|
1552
|
+
__publicField(this, "incompatibleTokens", "*");
|
|
1553
|
+
}
|
|
1554
|
+
parse(dateString) {
|
|
1555
|
+
return parseAnyDigitsSigned(dateString);
|
|
1556
|
+
}
|
|
1557
|
+
set(date, _flags, value) {
|
|
1558
|
+
return [constructFrom(date, value * 1e3), { timestampIsSet: true }];
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
class TimestampMillisecondsParser extends Parser {
|
|
1562
|
+
constructor() {
|
|
1563
|
+
super(...arguments);
|
|
1564
|
+
__publicField(this, "priority", 20);
|
|
1565
|
+
__publicField(this, "incompatibleTokens", "*");
|
|
1566
|
+
}
|
|
1567
|
+
parse(dateString) {
|
|
1568
|
+
return parseAnyDigitsSigned(dateString);
|
|
1569
|
+
}
|
|
1570
|
+
set(date, _flags, value) {
|
|
1571
|
+
return [constructFrom(date, value), { timestampIsSet: true }];
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
const parsers = {
|
|
1575
|
+
G: new EraParser(),
|
|
1576
|
+
y: new YearParser(),
|
|
1577
|
+
Y: new LocalWeekYearParser(),
|
|
1578
|
+
R: new ISOWeekYearParser(),
|
|
1579
|
+
u: new ExtendedYearParser(),
|
|
1580
|
+
Q: new QuarterParser(),
|
|
1581
|
+
q: new StandAloneQuarterParser(),
|
|
1582
|
+
M: new MonthParser(),
|
|
1583
|
+
L: new StandAloneMonthParser(),
|
|
1584
|
+
w: new LocalWeekParser(),
|
|
1585
|
+
I: new ISOWeekParser(),
|
|
1586
|
+
d: new DateParser(),
|
|
1587
|
+
D: new DayOfYearParser(),
|
|
1588
|
+
E: new DayParser(),
|
|
1589
|
+
e: new LocalDayParser(),
|
|
1590
|
+
c: new StandAloneLocalDayParser(),
|
|
1591
|
+
i: new ISODayParser(),
|
|
1592
|
+
a: new AMPMParser(),
|
|
1593
|
+
b: new AMPMMidnightParser(),
|
|
1594
|
+
B: new DayPeriodParser(),
|
|
1595
|
+
h: new Hour1to12Parser(),
|
|
1596
|
+
H: new Hour0to23Parser(),
|
|
1597
|
+
K: new Hour0To11Parser(),
|
|
1598
|
+
k: new Hour1To24Parser(),
|
|
1599
|
+
m: new MinuteParser(),
|
|
1600
|
+
s: new SecondParser(),
|
|
1601
|
+
S: new FractionOfSecondParser(),
|
|
1602
|
+
X: new ISOTimezoneWithZParser(),
|
|
1603
|
+
x: new ISOTimezoneParser(),
|
|
1604
|
+
t: new TimestampSecondsParser(),
|
|
1605
|
+
T: new TimestampMillisecondsParser()
|
|
1606
|
+
};
|
|
1607
|
+
const formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g;
|
|
1608
|
+
const longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;
|
|
1609
|
+
const escapedStringRegExp = /^'([^]*?)'?$/;
|
|
1610
|
+
const doubleQuoteRegExp = /''/g;
|
|
1611
|
+
const notWhitespaceRegExp = /\S/;
|
|
1612
|
+
const unescapedLatinCharacterRegExp = /[a-zA-Z]/;
|
|
1613
|
+
function parse(dateStr, formatStr, referenceDate, options) {
|
|
1614
|
+
var _a, _b, _c, _d;
|
|
1615
|
+
const defaultOptions = getDefaultOptions();
|
|
1616
|
+
const locale = defaultOptions.locale ?? enUS;
|
|
1617
|
+
const firstWeekContainsDate = defaultOptions.firstWeekContainsDate ?? ((_b = (_a = defaultOptions.locale) == null ? void 0 : _a.options) == null ? void 0 : _b.firstWeekContainsDate) ?? 1;
|
|
1618
|
+
const weekStartsOn = defaultOptions.weekStartsOn ?? ((_d = (_c = defaultOptions.locale) == null ? void 0 : _c.options) == null ? void 0 : _d.weekStartsOn) ?? 0;
|
|
1619
|
+
if (formatStr === "") {
|
|
1620
|
+
if (dateStr === "") {
|
|
1621
|
+
return toDate(referenceDate);
|
|
1622
|
+
} else {
|
|
1623
|
+
return constructFrom(referenceDate, NaN);
|
|
1624
|
+
}
|
|
1625
|
+
}
|
|
1626
|
+
const subFnOptions = {
|
|
1627
|
+
firstWeekContainsDate,
|
|
1628
|
+
weekStartsOn,
|
|
1629
|
+
locale
|
|
1630
|
+
};
|
|
1631
|
+
const setters = [new DateToSystemTimezoneSetter()];
|
|
1632
|
+
const tokens = formatStr.match(longFormattingTokensRegExp).map((substring) => {
|
|
1633
|
+
const firstCharacter = substring[0];
|
|
1634
|
+
if (firstCharacter in longFormatters) {
|
|
1635
|
+
const longFormatter = longFormatters[firstCharacter];
|
|
1636
|
+
return longFormatter(substring, locale.formatLong);
|
|
1637
|
+
}
|
|
1638
|
+
return substring;
|
|
1639
|
+
}).join("").match(formattingTokensRegExp);
|
|
1640
|
+
const usedTokens = [];
|
|
1641
|
+
for (let token of tokens) {
|
|
1642
|
+
if (isProtectedWeekYearToken(token)) {
|
|
1643
|
+
warnOrThrowProtectedError(token, formatStr, dateStr);
|
|
1644
|
+
}
|
|
1645
|
+
if (isProtectedDayOfYearToken(token)) {
|
|
1646
|
+
warnOrThrowProtectedError(token, formatStr, dateStr);
|
|
1647
|
+
}
|
|
1648
|
+
const firstCharacter = token[0];
|
|
1649
|
+
const parser = parsers[firstCharacter];
|
|
1650
|
+
if (parser) {
|
|
1651
|
+
const { incompatibleTokens } = parser;
|
|
1652
|
+
if (Array.isArray(incompatibleTokens)) {
|
|
1653
|
+
const incompatibleToken = usedTokens.find(
|
|
1654
|
+
(usedToken) => incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter
|
|
1655
|
+
);
|
|
1656
|
+
if (incompatibleToken) {
|
|
1657
|
+
throw new RangeError(
|
|
1658
|
+
`The format string mustn't contain \`${incompatibleToken.fullToken}\` and \`${token}\` at the same time`
|
|
1659
|
+
);
|
|
1660
|
+
}
|
|
1661
|
+
} else if (parser.incompatibleTokens === "*" && usedTokens.length > 0) {
|
|
1662
|
+
throw new RangeError(
|
|
1663
|
+
`The format string mustn't contain \`${token}\` and any other token at the same time`
|
|
1664
|
+
);
|
|
1665
|
+
}
|
|
1666
|
+
usedTokens.push({ token: firstCharacter, fullToken: token });
|
|
1667
|
+
const parseResult = parser.run(
|
|
1668
|
+
dateStr,
|
|
1669
|
+
token,
|
|
1670
|
+
locale.match,
|
|
1671
|
+
subFnOptions
|
|
1672
|
+
);
|
|
1673
|
+
if (!parseResult) {
|
|
1674
|
+
return constructFrom(referenceDate, NaN);
|
|
1675
|
+
}
|
|
1676
|
+
setters.push(parseResult.setter);
|
|
1677
|
+
dateStr = parseResult.rest;
|
|
1678
|
+
} else {
|
|
1679
|
+
if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
|
|
1680
|
+
throw new RangeError(
|
|
1681
|
+
"Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"
|
|
1682
|
+
);
|
|
1683
|
+
}
|
|
1684
|
+
if (token === "''") {
|
|
1685
|
+
token = "'";
|
|
1686
|
+
} else if (firstCharacter === "'") {
|
|
1687
|
+
token = cleanEscapedString(token);
|
|
1688
|
+
}
|
|
1689
|
+
if (dateStr.indexOf(token) === 0) {
|
|
1690
|
+
dateStr = dateStr.slice(token.length);
|
|
1691
|
+
} else {
|
|
1692
|
+
return constructFrom(referenceDate, NaN);
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
}
|
|
1696
|
+
if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {
|
|
1697
|
+
return constructFrom(referenceDate, NaN);
|
|
1698
|
+
}
|
|
1699
|
+
const uniquePrioritySetters = setters.map((setter) => setter.priority).sort((a, b) => b - a).filter((priority, index, array) => array.indexOf(priority) === index).map(
|
|
1700
|
+
(priority) => setters.filter((setter) => setter.priority === priority).sort((a, b) => b.subPriority - a.subPriority)
|
|
1701
|
+
).map((setterArray) => setterArray[0]);
|
|
1702
|
+
let date = toDate(referenceDate);
|
|
1703
|
+
if (isNaN(date.getTime())) {
|
|
1704
|
+
return constructFrom(referenceDate, NaN);
|
|
1705
|
+
}
|
|
1706
|
+
const flags = {};
|
|
1707
|
+
for (const setter of uniquePrioritySetters) {
|
|
1708
|
+
if (!setter.validate(date, subFnOptions)) {
|
|
1709
|
+
return constructFrom(referenceDate, NaN);
|
|
1710
|
+
}
|
|
1711
|
+
const result = setter.set(date, flags, subFnOptions);
|
|
1712
|
+
if (Array.isArray(result)) {
|
|
1713
|
+
date = result[0];
|
|
1714
|
+
Object.assign(flags, result[1]);
|
|
1715
|
+
} else {
|
|
1716
|
+
date = result;
|
|
1717
|
+
}
|
|
1718
|
+
}
|
|
1719
|
+
return constructFrom(referenceDate, date);
|
|
1720
|
+
}
|
|
1721
|
+
function cleanEscapedString(input) {
|
|
1722
|
+
return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'");
|
|
1723
|
+
}
|
|
1724
|
+
export {
|
|
1725
|
+
parse as p
|
|
1726
|
+
};
|
|
1727
|
+
//# sourceMappingURL=parse-D2yb8751.js.map
|