@fedify/redis 2.4.0-dev.1583 → 2.4.0-dev.1599

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.
@@ -0,0 +1,2711 @@
1
+
2
+ const require_errorMessages = require("../../../../temporal-utils@1.0.1/node_modules/temporal-utils/dist/errorMessages.cjs");
3
+ const require_utils = require("../../../../temporal-utils@1.0.1/node_modules/temporal-utils/dist/utils.cjs");
4
+ //#region ../../node_modules/.pnpm/temporal-polyfill@1.0.1/node_modules/temporal-polyfill/chunks/internal.js
5
+ const invalidEntity = require_errorMessages.invalidEntity;
6
+ const missingField = (fieldName) => `Missing ${fieldName}`;
7
+ const noValidFields = (validFields) => "No valid fields: " + validFields.join();
8
+ const invalidBag = "Invalid bag";
9
+ const invalidChoice = (fieldName, val, choiceMap) => require_errorMessages.invalidEntity(fieldName, val) + "; must be " + Object.keys(choiceMap).join();
10
+ const forbiddenValueOf = "Cannot use valueOf";
11
+ const invalidCallingContext = "Invalid calling context";
12
+ const missingYear = (allowEra) => "Missing year" + (allowEra ? "/era/eraYear" : "");
13
+ const invalidLeapMonth = "Invalid leap month";
14
+ const invalidCalendar = (calendarId) => require_errorMessages.invalidEntity("Calendar", calendarId);
15
+ const exoticCalendarRequired = (calendarId, remedy) => `Unknown calendar ${calendarId}; might need ${remedy}`;
16
+ const invalidTimeZone = (calendarId) => require_errorMessages.invalidEntity("TimeZone", calendarId);
17
+ const failedParse = (s) => `Cannot parse: ${s}`;
18
+ const invalidSubstring = (substring) => `Invalid substring: ${substring}`;
19
+ const constrainToRange = require_utils.constrainToRange;
20
+ const isObjectLike = require_utils.isObjectLike;
21
+ function throwRangeError(message) {
22
+ throw new RangeError(message);
23
+ }
24
+ function throwTypeError(message) {
25
+ throw new TypeError(message);
26
+ }
27
+ function clampProp(props, propName, min, max, overflow) {
28
+ return clampEntity(propName, ((props, propName) => {
29
+ const propVal = props[propName];
30
+ return void 0 === propVal && throwTypeError(missingField(propName)), propVal;
31
+ })(props, propName), min, max, overflow);
32
+ }
33
+ function clampEntity(entityName, num, min, max, overflow, choices) {
34
+ const clamped = constrainToRange(num, min, max);
35
+ return overflow && num !== clamped && throwRangeError(((entityName, val, min, max, choices) => choices ? require_errorMessages.numberOutOfRange(entityName, choices[val], choices[min], choices[max]) : require_errorMessages.numberOutOfRange(entityName, val, min, max))(entityName, num, min, max, choices)), clamped;
36
+ }
37
+ function memoize(generator, MapClass = Map) {
38
+ const map = new MapClass();
39
+ return (key, ...otherArgs) => {
40
+ if (map.has(key)) return map.get(key);
41
+ const val = generator(key, ...otherArgs);
42
+ return map.set(key, val), val;
43
+ };
44
+ }
45
+ const createNameDescriptors = (name) => createPropDescriptors({ name }, 1);
46
+ const createPropDescriptors = (propVals, readonly) => mapProps((value) => ({
47
+ value,
48
+ configurable: 1,
49
+ writable: !readonly
50
+ }), propVals);
51
+ const createStringTagDescriptors = (value) => ({ [Symbol.toStringTag]: {
52
+ value,
53
+ configurable: 1
54
+ } });
55
+ function mapProps(transformer, props) {
56
+ const res = {};
57
+ for (const propName in props) res[propName] = transformer(props[propName], propName);
58
+ return res;
59
+ }
60
+ function zipPropsConst(propNames, propVal) {
61
+ const res = {};
62
+ for (const propName of propNames) res[propName] = propVal;
63
+ return res;
64
+ }
65
+ function createPropGetters(propNames) {
66
+ const getters = {};
67
+ for (const propName of propNames) getters[propName] = (slots) => slots[propName];
68
+ return getters;
69
+ }
70
+ function pluckProps(propNames, props, dest = Object.create(null)) {
71
+ for (const propName of propNames) dest[propName] = props[propName];
72
+ return dest;
73
+ }
74
+ function allPropsEqual(propNames, props0, props1) {
75
+ for (const propName of propNames) if (props0[propName] !== props1[propName]) return 0;
76
+ return 1;
77
+ }
78
+ function zeroOutProps(propNames, clearUntilI, props) {
79
+ const copy = { ...props };
80
+ for (let i = 0; i < clearUntilI; i++) copy[propNames[i]] = 0;
81
+ return copy;
82
+ }
83
+ function bindArgs(f, ...boundArgs) {
84
+ return (...dynamicArgs) => f(...boundArgs, ...dynamicArgs);
85
+ }
86
+ function noop() {}
87
+ function capitalize(s) {
88
+ return s[0].toUpperCase() + s.substring(1);
89
+ }
90
+ function sortStrings(...strss) {
91
+ return [].concat(...strss).sort();
92
+ }
93
+ function createRegExp(meat) {
94
+ return new RegExp(`^${meat}$`, "i");
95
+ }
96
+ function parseSubsecNano(fracStr) {
97
+ return parseInt(fracStr.padEnd(9, "0"));
98
+ }
99
+ function parseSign(s) {
100
+ return s && "+" !== s ? -1 : 1;
101
+ }
102
+ function parseInt0(s) {
103
+ return void 0 === s ? 0 : parseInt(s);
104
+ }
105
+ function padNumber(digits, num) {
106
+ return String(num).padStart(digits, "0");
107
+ }
108
+ const padNumber2 = /* @__PURE__ */ bindArgs(padNumber, 2);
109
+ function compareNumbers(a, b) {
110
+ return Math.sign(a - b);
111
+ }
112
+ function compareBigInts(a, b) {
113
+ return a < b ? -1 : a > b ? 1 : 0;
114
+ }
115
+ function divFloorBigInt(num, denom) {
116
+ const whole = num / denom;
117
+ return num % denom < 0n ? whole - 1n : whole;
118
+ }
119
+ function divModFloorBigInt(num, divisor) {
120
+ const quotient = divFloorBigInt(num, divisor);
121
+ return [quotient, num - quotient * divisor];
122
+ }
123
+ function divModFloor(num, divisor) {
124
+ return [Math.floor(num / divisor), modFloor(num, divisor)];
125
+ }
126
+ function modFloor(num, divisor) {
127
+ return (num % divisor + divisor) % divisor;
128
+ }
129
+ function divTrunc(num, divisor) {
130
+ return Math.trunc(num / divisor) || 0;
131
+ }
132
+ function modTrunc(num, divisor) {
133
+ return num % divisor || 0;
134
+ }
135
+ function fabricateNearHalfFraction(halfCompare, sign = 1) {
136
+ return sign * (.5 + halfCompare / 5);
137
+ }
138
+ function hasHalf(num) {
139
+ return .5 === Math.abs(num % 1);
140
+ }
141
+ const isoCalendarId = "iso8601";
142
+ const gregoryCalendarId = "gregory";
143
+ const gregoryEraOrigins = {
144
+ "bce": -1,
145
+ "ce": 0
146
+ };
147
+ function normalizeEraName(era) {
148
+ const normalized = era.normalize("NFD").toLowerCase().replace(/[^a-z0-9]/g, "");
149
+ return "bc" === normalized || "b" === normalized ? "bce" : "ad" === normalized || "a" === normalized ? "ce" : normalized;
150
+ }
151
+ function getCalendarSlotId(calendar) {
152
+ return calendar === void 0 ? "iso8601" : 0 === calendar ? "gregory" : calendar.id;
153
+ }
154
+ const monthCodeRegExp = /^M(\d{2})(L?)$/;
155
+ function parseMonthCode(monthCode) {
156
+ const m = monthCodeRegExp.exec(monthCode);
157
+ return m || throwRangeError(((monthCode) => `Invalid monthCode: ${monthCode}`)(monthCode)), [parseInt(m[1]), Boolean(m[2])];
158
+ }
159
+ function formatMonthCode(monthCodeNumber, isLeapMonth) {
160
+ return "M" + padNumber2(monthCodeNumber) + (isLeapMonth ? "L" : "");
161
+ }
162
+ function monthCodeNumberToMonth(monthCodeNumber, isLeapMonth, leapMonth) {
163
+ return monthCodeNumber + (isLeapMonth || leapMonth && monthCodeNumber >= leapMonth ? 1 : 0);
164
+ }
165
+ const unitNameMap = {
166
+ nanosecond: 0,
167
+ microsecond: 1,
168
+ millisecond: 2,
169
+ second: 3,
170
+ minute: 4,
171
+ hour: 5,
172
+ day: 6,
173
+ week: 7,
174
+ month: 8,
175
+ year: 9
176
+ };
177
+ const unitNamesAsc = /* @__PURE__ */ Object.keys(unitNameMap);
178
+ const nanoInMicro = require_utils.nanoInMicro;
179
+ const nanoInMilli = require_utils.nanoInMilli;
180
+ const nanoInSec = require_utils.nanoInSec;
181
+ const nanoInMinute = require_utils.nanoInMinute;
182
+ const nanoInHour = require_utils.nanoInHour;
183
+ const nanoInUtcDay = 864e11;
184
+ const unitNanoMap = [
185
+ 1,
186
+ nanoInMicro,
187
+ nanoInMilli,
188
+ nanoInSec,
189
+ nanoInMinute,
190
+ nanoInHour,
191
+ nanoInUtcDay
192
+ ];
193
+ const bigNanoInMicro = /* @__PURE__ */ BigInt(nanoInMicro);
194
+ const bigNanoInMilli = /* @__PURE__ */ BigInt(nanoInMilli);
195
+ const bigNanoInSec = /* @__PURE__ */ BigInt(nanoInSec);
196
+ const bigNanoInMinute = /* @__PURE__ */ BigInt(nanoInMinute);
197
+ const bigNanoInHour = /* @__PURE__ */ BigInt(nanoInHour);
198
+ const bigNanoInUtcDay = /* @__PURE__ */ BigInt(nanoInUtcDay);
199
+ function divideBigNanoToExactNumber(bigNano, divisorNano) {
200
+ const days = Number(bigNano / bigNanoInUtcDay);
201
+ const timeNano = Number(bigNano % bigNanoInUtcDay);
202
+ return days * (nanoInUtcDay / divisorNano) + (Math.trunc(timeNano / divisorNano) + timeNano % divisorNano / divisorNano);
203
+ }
204
+ const timeFieldNamesAsc = /* @__PURE__ */ unitNamesAsc.slice(0, 6);
205
+ const timeGetters = /* @__PURE__ */ createPropGetters(timeFieldNamesAsc);
206
+ const yearFieldNamesAsc = ["year"];
207
+ const dayFieldNamesAsc = ["day"];
208
+ const calendarDateFieldNamesAsc = [
209
+ "day",
210
+ "month",
211
+ "year"
212
+ ];
213
+ const offsetFieldNames = ["offset"];
214
+ const timeZoneFieldNames = ["timeZone"];
215
+ const eraYearFieldNames = ["era", "eraYear"];
216
+ const allYearFieldNames = [
217
+ "era",
218
+ "eraYear",
219
+ "year"
220
+ ];
221
+ const monthFieldNames = ["month", "monthCode"];
222
+ const monthDayFieldNames = [
223
+ "day",
224
+ "month",
225
+ "monthCode"
226
+ ];
227
+ const timeFieldNamesAlpha = /* @__PURE__ */ sortStrings(timeFieldNamesAsc);
228
+ const yearFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(eraYearFieldNames, yearFieldNamesAsc);
229
+ const yearMonthFieldNamesAlpha = /* @__PURE__ */ sortStrings(monthFieldNames, yearFieldNamesAsc);
230
+ const yearMonthFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(eraYearFieldNames, yearMonthFieldNamesAlpha);
231
+ const yearMonthCodeFieldNamesAlpha = /* @__PURE__ */ sortStrings(["monthCode"], yearFieldNamesAsc);
232
+ const yearMonthCodeFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(eraYearFieldNames, yearMonthCodeFieldNamesAlpha);
233
+ const monthCodeDayFieldNamesAlpha = /* @__PURE__ */ sortStrings(dayFieldNamesAsc, ["monthCode"]);
234
+ const dateFieldNamesAlpha = /* @__PURE__ */ sortStrings(dayFieldNamesAsc, yearMonthFieldNamesAlpha);
235
+ const dateFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(dayFieldNamesAsc, eraYearFieldNames, yearMonthFieldNamesAlpha);
236
+ const dateTimeFieldNamesAlpha = /* @__PURE__ */ sortStrings(dateFieldNamesAlpha, timeFieldNamesAsc);
237
+ const dateTimeFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(dateFieldNamesWithEraAlpha, timeFieldNamesAsc);
238
+ const dateTimeAndOffsetFieldNamesAlpha = /* @__PURE__ */ sortStrings(dateFieldNamesAlpha, timeFieldNamesAsc, offsetFieldNames);
239
+ const dateTimeAndOffsetFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(dateFieldNamesWithEraAlpha, timeFieldNamesAsc, offsetFieldNames);
240
+ const dateTimeAndZoneFieldNamesAlpha = /* @__PURE__ */ sortStrings(dateFieldNamesAlpha, timeFieldNamesAsc, offsetFieldNames, timeZoneFieldNames);
241
+ const dateTimeAndZoneFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(dateFieldNamesWithEraAlpha, timeFieldNamesAsc, offsetFieldNames, timeZoneFieldNames);
242
+ const yearMonthCodeDayFieldNamesAlpha = /* @__PURE__ */ sortStrings(dayFieldNamesAsc, yearMonthCodeFieldNamesAlpha);
243
+ const yearMonthCodeDayFieldNamesWithEraAlpha = /* @__PURE__ */ sortStrings(dayFieldNamesAsc, eraYearFieldNames, yearMonthCodeFieldNamesAlpha);
244
+ const timeFieldDefaults = /* @__PURE__ */ zipPropsConst(timeFieldNamesAsc, 0);
245
+ function validateTimeFields(timeFields) {
246
+ return constrainTimeFields(timeFields, 1), timeFields;
247
+ }
248
+ const maxValues = {
249
+ hour: 23,
250
+ minute: 59,
251
+ second: 59
252
+ };
253
+ function constrainTimeFields(timeFields, overflow) {
254
+ const constrainedFields = {};
255
+ for (const fieldName of timeFieldNamesAsc) constrainedFields[fieldName] = clampEntity(fieldName, timeFields[fieldName], 0, maxValues[fieldName] || 999, overflow);
256
+ return constrainedFields;
257
+ }
258
+ function timeFieldsToNano(timeFields) {
259
+ return timeFieldsToSec(timeFields) * nanoInSec + timeFieldsToSubsecNano(timeFields);
260
+ }
261
+ function timeFieldsToMilli(timeFields) {
262
+ return 1e3 * timeFieldsToSec(timeFields) + timeFields.millisecond;
263
+ }
264
+ function timeFieldsToSec(timeFields) {
265
+ return 3600 * timeFields.hour + 60 * timeFields.minute + timeFields.second;
266
+ }
267
+ function timeFieldsToSubsecNano(timeFields) {
268
+ return timeFields.millisecond * nanoInMilli + timeFields.microsecond * nanoInMicro + timeFields.nanosecond;
269
+ }
270
+ function nanoToTimeAndDay(nano) {
271
+ const [dayDelta, timeNano] = divModFloor(nano, nanoInUtcDay);
272
+ return [nanoToTimeFields(timeNano), dayDelta];
273
+ }
274
+ function nanoToTimeFields(timeNano) {
275
+ const [timeMilli, nanoAfterMilli] = divModFloor(timeNano, nanoInMilli);
276
+ const [microsecond, nanosecond] = divModFloor(nanoAfterMilli, nanoInMicro);
277
+ return milliToTimeFields(timeMilli, microsecond, nanosecond);
278
+ }
279
+ function milliToTimeFields(timeMilli, microsecond = 0, nanosecond = 0) {
280
+ const [hour, milliAfterHour] = divModFloor(timeMilli, 36e5);
281
+ const [minute, milliAfterMinute] = divModFloor(milliAfterHour, 6e4);
282
+ const [second, millisecond] = divModFloor(milliAfterMinute, 1e3);
283
+ return {
284
+ hour,
285
+ minute,
286
+ second,
287
+ millisecond,
288
+ microsecond,
289
+ nanosecond
290
+ };
291
+ }
292
+ function epochNanoToSecMod(epochNano) {
293
+ const [epochSec, nano] = divModFloorBigInt(epochNano, bigNanoInSec);
294
+ return [Number(epochSec), Number(nano)];
295
+ }
296
+ function isoDateTimeToEpochNano(isoDateTime) {
297
+ return isoDateToEpochNano(isoDateTime) + BigInt(timeFieldsToNano(isoDateTime));
298
+ }
299
+ function isoDateTimeToEpochMilli(isoDateTime) {
300
+ return isoDateToEpochMilli(isoDateTime) + timeFieldsToMilli(isoDateTime);
301
+ }
302
+ function isoDateToEpochNano(isoDate) {
303
+ return BigInt(isoDateToEpochDays(isoDate)) * bigNanoInUtcDay;
304
+ }
305
+ function isoDateToEpochMilli(isoDate) {
306
+ return 864e5 * isoDateToEpochDays(isoDate);
307
+ }
308
+ function isoDateToEpochDays(isoDate) {
309
+ return isoArgsToEpochDays(isoDate.year, isoDate.month, isoDate.day);
310
+ }
311
+ function isoArgsToEpochDays(isoYear, isoMonth = 1, isoDay = 1) {
312
+ const monthIndex = isoMonth - 1;
313
+ return isoYear += Math.floor(monthIndex / 12), isoMonth = modFloor(monthIndex, 12), Date.UTC(isoYear % 400 - 400, isoMonth, 0) / 864e5 + 146097 * (divTrunc(isoYear, 400) + 1) + isoDay;
314
+ }
315
+ function epochNanoToIsoDateTime(epochNano) {
316
+ const [epochDays, nanoAfterDay] = divModFloorBigInt(epochNano, bigNanoInUtcDay);
317
+ return {
318
+ ...epochDaysToIsoDate(Number(epochDays)),
319
+ ...nanoToTimeFields(Number(nanoAfterDay))
320
+ };
321
+ }
322
+ function epochDaysToIsoDate(epochDays) {
323
+ const legacyDate = /* @__PURE__ */ new Date(864e5 * modFloor(epochDays, 146097));
324
+ return {
325
+ year: legacyDate.getUTCFullYear() + 400 * Math.floor(epochDays / 146097),
326
+ month: legacyDate.getUTCMonth() + 1,
327
+ day: legacyDate.getUTCDate()
328
+ };
329
+ }
330
+ const isoEpochFirstLeapYear = 1972;
331
+ function computeIsoMonthCodeParts(month) {
332
+ return [month, 0];
333
+ }
334
+ function computeIsoYearMonthFieldsForMonthDay(monthCodeNumber, isLeapMonth) {
335
+ if (!isLeapMonth) return {
336
+ year: 1972,
337
+ month: monthCodeNumber
338
+ };
339
+ }
340
+ function computeIsoFieldsFromParts(year, month, day) {
341
+ return {
342
+ year,
343
+ month,
344
+ day
345
+ };
346
+ }
347
+ function computeIsoDaysInMonth(year, month) {
348
+ switch (month) {
349
+ case 2: return computeIsoInLeapYear(year) ? 29 : 28;
350
+ case 4:
351
+ case 6:
352
+ case 9:
353
+ case 11: return 30;
354
+ }
355
+ return 31;
356
+ }
357
+ function computeIsoDaysInYear(year) {
358
+ return computeIsoInLeapYear(year) ? 366 : 365;
359
+ }
360
+ function computeIsoInLeapYear(year) {
361
+ return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
362
+ }
363
+ function addIsoMonths(year, month, monthDelta) {
364
+ return year += divTrunc(monthDelta, 12), (month += modTrunc(monthDelta, 12)) < 1 ? (year--, month += 12) : month > 12 && (year++, month -= 12), {
365
+ year,
366
+ month
367
+ };
368
+ }
369
+ function diffIsoMonthSlots(year0, month0, year1, month1) {
370
+ return 12 * (year1 - year0) + month1 - month0;
371
+ }
372
+ function computeIsoDayOfWeek(isoDateFields) {
373
+ return modFloor(isoArgsToEpochDays(isoDateFields.year, isoDateFields.month, isoDateFields.day) + 4, 7) || 7;
374
+ }
375
+ function computeIsoDayOfYear(isoDateFields) {
376
+ return isoArgsToEpochDays(isoDateFields.year, isoDateFields.month, isoDateFields.day) - isoArgsToEpochDays(isoDateFields.year) + 1;
377
+ }
378
+ function computeIsoWeekFields(isoDateFields) {
379
+ let yearOfWeek = isoDateFields.year;
380
+ let weekOfYear = Math.floor((computeIsoDayOfYear(isoDateFields) - computeIsoDayOfWeek(isoDateFields) + 10) / 7);
381
+ let weeksInYear = computeIsoWeeksInYear(yearOfWeek);
382
+ return weekOfYear < 1 ? weekOfYear = weeksInYear = computeIsoWeeksInYear(--yearOfWeek) : weekOfYear > weeksInYear && (weekOfYear = 1, weeksInYear = computeIsoWeeksInYear(++yearOfWeek)), {
383
+ weekOfYear,
384
+ yearOfWeek,
385
+ Ie: weeksInYear
386
+ };
387
+ }
388
+ function computeIsoWeeksInYear(year) {
389
+ const y0DayOfWeek = computeIsoDayOfWeek({
390
+ year,
391
+ month: 1,
392
+ day: 1
393
+ });
394
+ return 4 === y0DayOfWeek || 3 === y0DayOfWeek && computeIsoInLeapYear(year) ? 53 : 52;
395
+ }
396
+ function computeGregoryEraFields({ year }) {
397
+ return year < 1 ? {
398
+ era: "bce",
399
+ eraYear: 1 - year
400
+ } : {
401
+ era: "ce",
402
+ eraYear: year
403
+ };
404
+ }
405
+ function validateIsoDateTimeFields(isoDateTime) {
406
+ return validateIsoDateFields(isoDateTime), validateTimeFields(isoDateTime);
407
+ }
408
+ function validateIsoDateFields(isoInternals) {
409
+ return constrainIsoDateFields(isoInternals, 1), isoInternals;
410
+ }
411
+ function isIsoDateFieldsValid(isoDate) {
412
+ return allPropsEqual(calendarDateFieldNamesAsc, isoDate, constrainIsoDateFields(isoDate));
413
+ }
414
+ function constrainIsoDateFields(isoDate, overflow) {
415
+ const { year } = isoDate;
416
+ const month = clampProp(isoDate, "month", 1, 12, overflow);
417
+ return {
418
+ year,
419
+ month,
420
+ day: clampProp(isoDate, "day", 1, computeIsoDaysInMonth(year, month), overflow)
421
+ };
422
+ }
423
+ function computeCalendarDateFields(calendar, isoDate) {
424
+ return calendar ? calendar.ie(isoDate) : isoDate;
425
+ }
426
+ function computeCalendarMonthCodeParts(calendar, year, month) {
427
+ return calendar ? calendar.O(year, month) : computeIsoMonthCodeParts(month);
428
+ }
429
+ function computeCalendarEraFields(calendar, isoDate) {
430
+ return 0 === calendar ? computeGregoryEraFields(isoDate) : calendar ? calendar.h(isoDate) : {};
431
+ }
432
+ function computeCalendarIsoFieldsFromParts(calendar, year, month, day) {
433
+ return calendar ? calendar.je(year, month, day) : computeIsoFieldsFromParts(year, month, day);
434
+ }
435
+ function computeCalendarMonthsInYearForYear(calendar, year) {
436
+ return calendar ? calendar.k(year) : 12;
437
+ }
438
+ function computeCalendarDaysInMonthForYearMonth(calendar, year, month) {
439
+ return calendar ? calendar.p(year, month) : computeIsoDaysInMonth(year, month);
440
+ }
441
+ function computeCalendarMonthCode(calendar, isoDate) {
442
+ const { year, month } = computeCalendarDateFields(calendar, isoDate);
443
+ const [monthCodeNumber, isLeapMonth] = computeCalendarMonthCodeParts(calendar, year, month);
444
+ return formatMonthCode(monthCodeNumber, isLeapMonth);
445
+ }
446
+ function computeCalendarInLeapYear(calendar, isoDate) {
447
+ const { year } = computeCalendarDateFields(calendar, isoDate);
448
+ return calendar ? calendar.u(year) : computeIsoInLeapYear(year);
449
+ }
450
+ function computeCalendarMonthsInYear(calendar, isoDate) {
451
+ const { year } = computeCalendarDateFields(calendar, isoDate);
452
+ return computeCalendarMonthsInYearForYear(calendar, year);
453
+ }
454
+ function computeCalendarDaysInMonth(calendar, isoDate) {
455
+ const { year, month } = computeCalendarDateFields(calendar, isoDate);
456
+ return computeCalendarDaysInMonthForYearMonth(calendar, year, month);
457
+ }
458
+ function computeCalendarDaysInYear(calendar, isoDate) {
459
+ const { year } = computeCalendarDateFields(calendar, isoDate);
460
+ return calendar ? calendar.j(year) : computeIsoDaysInYear(year);
461
+ }
462
+ function computeCalendarDayOfYear(calendar, isoDate) {
463
+ if (!calendar) return computeIsoDayOfYear(isoDate);
464
+ const { year } = computeCalendarDateFields(calendar, isoDate);
465
+ const yearStartIsoDate = computeCalendarIsoFieldsFromParts(calendar, year, 1, 1);
466
+ return isoDateToEpochDays(isoDate) - isoDateToEpochDays(yearStartIsoDate) + 1;
467
+ }
468
+ function computeCalendarWeekOfYear(calendar, isoDate) {
469
+ return calendar === void 0 ? computeIsoWeekFields(isoDate).weekOfYear : void 0;
470
+ }
471
+ function computeCalendarYearOfWeek(calendar, isoDate) {
472
+ return calendar === void 0 ? computeIsoWeekFields(isoDate).yearOfWeek : void 0;
473
+ }
474
+ const durationFieldNamesAsc = /* @__PURE__ */ unitNamesAsc.map((unitName) => unitName + "s");
475
+ const durationGetters = /* @__PURE__ */ createPropGetters(durationFieldNamesAsc);
476
+ const durationFieldNamesAlpha = /* @__PURE__ */ sortStrings(durationFieldNamesAsc);
477
+ const durationTimeFieldNamesAsc = /* @__PURE__ */ durationFieldNamesAsc.slice(0, 6);
478
+ const durationDateFieldNamesAsc = /* @__PURE__ */ durationFieldNamesAsc.slice(6);
479
+ const durationCalendarFieldNamesAsc = /* @__PURE__ */ durationDateFieldNamesAsc.slice(1);
480
+ const durationFieldIndexes = /* @__PURE__ */ durationFieldNamesAsc.reduce((indexes, fieldName, i) => (indexes[fieldName] = i, indexes), {});
481
+ const durationFieldDefaults = /* @__PURE__ */ zipPropsConst(durationFieldNamesAsc, 0);
482
+ const durationTimeFieldDefaults = /* @__PURE__ */ zipPropsConst(durationTimeFieldNamesAsc, 0);
483
+ const clearDurationFields = /* @__PURE__ */ bindArgs(zeroOutProps, durationFieldNamesAsc);
484
+ function requirePropDefined(optionName, optionVal) {
485
+ return optionVal ?? throwRangeError(missingField(optionName)), optionVal;
486
+ }
487
+ const requireString = /* @__PURE__ */ bindArgs(requireType, "string");
488
+ function requireType(typeName, arg, entityName = typeName) {
489
+ return typeof arg !== typeName && throwTypeError(invalidEntity(entityName, arg)), arg;
490
+ }
491
+ function requireNumberIsInteger(num, entityName = "number") {
492
+ return Number.isInteger(num) || throwRangeError(((entityName, num) => `Non-integer ${entityName}: ${num}`)(entityName, num)), num || 0;
493
+ }
494
+ function toString(arg) {
495
+ return "symbol" == typeof arg && throwTypeError("Cannot convert Symbol to string"), String(arg);
496
+ }
497
+ function toStringViaPrimitive(arg, entityName) {
498
+ return require_utils.isObjectLike(arg) ? String(arg) : requireString(arg, entityName);
499
+ }
500
+ function toBigInt(bi) {
501
+ return "boolean" == typeof bi ? BigInt(bi ? 1 : 0) : "string" == typeof bi ? BigInt(bi) : ("bigint" != typeof bi && throwTypeError(`Invalid bigint: ${bi}`), bi);
502
+ }
503
+ function toStrictInteger(arg, entityName) {
504
+ return requireNumberIsInteger(require_utils.toFiniteNumber(arg, entityName), entityName);
505
+ }
506
+ function normalizeOptionsOrString(options, optionName) {
507
+ return "string" == typeof options ? ((optionName, optionVal) => {
508
+ const res = Object.create(null);
509
+ return res[optionName] = optionVal, res;
510
+ })(optionName, options) : require_utils.requireObjectLike(options);
511
+ }
512
+ const smallestUnitStr = "smallestUnit";
513
+ const overflowMap = {
514
+ constrain: 0,
515
+ reject: 1
516
+ };
517
+ const epochDisambigMap = {
518
+ compatible: 0,
519
+ reject: 1,
520
+ earlier: 2,
521
+ later: 3
522
+ };
523
+ const offsetDisambigMap = {
524
+ reject: 0,
525
+ use: 1,
526
+ prefer: 2,
527
+ ignore: 3
528
+ };
529
+ const calendarDisplayMap = {
530
+ auto: 0,
531
+ never: 1,
532
+ critical: 2,
533
+ always: 3
534
+ };
535
+ const timeZoneDisplayMap = {
536
+ auto: 0,
537
+ never: 1,
538
+ critical: 2
539
+ };
540
+ const offsetDisplayMap = {
541
+ auto: 0,
542
+ never: 1
543
+ };
544
+ const roundingModeMap = {
545
+ floor: 0,
546
+ halfFloor: 1,
547
+ ceil: 2,
548
+ halfCeil: 3,
549
+ trunc: 4,
550
+ halfTrunc: 5,
551
+ expand: 6,
552
+ halfExpand: 7,
553
+ halfEven: 8
554
+ };
555
+ const roundingModeFuncs = [
556
+ Math.floor,
557
+ (num) => hasHalf(num) ? Math.floor(num) : Math.round(num),
558
+ Math.ceil,
559
+ (num) => hasHalf(num) ? Math.ceil(num) : Math.round(num),
560
+ Math.trunc,
561
+ (num) => hasHalf(num) ? Math.trunc(num) || 0 : Math.round(num),
562
+ (num) => num < 0 ? Math.floor(num) : Math.ceil(num),
563
+ (num) => Math.sign(num) * Math.round(Math.abs(num)) || 0,
564
+ (num) => hasHalf(num) ? (num = Math.trunc(num) || 0) + num % 2 : Math.round(num)
565
+ ];
566
+ const directionMap = {
567
+ previous: -1,
568
+ next: 1
569
+ };
570
+ function coerceRoundingIncInteger(options) {
571
+ const roundingInc = options.roundingIncrement;
572
+ return void 0 === roundingInc ? 1 : require_utils.toIntegerWithTrunc(roundingInc, "roundingIncrement");
573
+ }
574
+ function coerceFractionalSecondDigits(options) {
575
+ let subsecDigits = options.fractionalSecondDigits;
576
+ if (void 0 !== subsecDigits) {
577
+ if ("number" != typeof subsecDigits) {
578
+ if ("auto" === toString(subsecDigits)) return;
579
+ throwRangeError(invalidEntity("fractionalSecondDigits", subsecDigits));
580
+ }
581
+ subsecDigits = clampEntity("fractionalSecondDigits", Math.floor(subsecDigits), 0, 9, 1);
582
+ }
583
+ return subsecDigits;
584
+ }
585
+ function coerceUnitOption(optionName, options, minUnit = 0, ensureDefined) {
586
+ let unitStr = options[optionName];
587
+ if (void 0 === unitStr) return ensureDefined ? minUnit : void 0;
588
+ if (unitStr = toString(unitStr), "auto" === unitStr) return ensureDefined ? minUnit : null;
589
+ let unit = unitNameMap[unitStr];
590
+ return void 0 === unit && (unit = durationFieldIndexes[unitStr]), void 0 === unit && throwRangeError(invalidChoice(optionName, unitStr, unitNameMap)), unit;
591
+ }
592
+ function coerceChoiceOption(optionName, enumNameMap, options, defaultChoice = 0) {
593
+ const enumArg = options[optionName];
594
+ if (void 0 === enumArg) return defaultChoice;
595
+ const enumStr = toString(enumArg);
596
+ const enumNum = enumNameMap[enumStr];
597
+ return void 0 === enumNum && throwRangeError(invalidChoice(optionName, enumStr, enumNameMap)), enumNum;
598
+ }
599
+ const coerceSmallestUnit = /* @__PURE__ */ bindArgs(coerceUnitOption, smallestUnitStr);
600
+ const coerceLargestUnit = /* @__PURE__ */ bindArgs(coerceUnitOption, "largestUnit");
601
+ const coerceTotalUnit = /* @__PURE__ */ bindArgs(coerceUnitOption, "unit");
602
+ const coerceOverflow = /* @__PURE__ */ bindArgs(coerceChoiceOption, "overflow", overflowMap);
603
+ const coerceEpochDisambig = /* @__PURE__ */ bindArgs(coerceChoiceOption, "disambiguation", epochDisambigMap);
604
+ const coerceOffsetDisambig = /* @__PURE__ */ bindArgs(coerceChoiceOption, "offset", offsetDisambigMap);
605
+ const coerceCalendarDisplay = /* @__PURE__ */ bindArgs(coerceChoiceOption, "calendarName", calendarDisplayMap);
606
+ const coerceTimeZoneDisplay = /* @__PURE__ */ bindArgs(coerceChoiceOption, "timeZoneName", timeZoneDisplayMap);
607
+ const coerceOffsetDisplay = /* @__PURE__ */ bindArgs(coerceChoiceOption, "offset", offsetDisplayMap);
608
+ const coerceRoundingMode = /* @__PURE__ */ bindArgs(coerceChoiceOption, "roundingMode", roundingModeMap);
609
+ const coerceDirection = /* @__PURE__ */ bindArgs(coerceChoiceOption, "direction", directionMap);
610
+ function validateRoundingInc(roundingInc, smallestUnit, allowManyLargeUnits, solarMode) {
611
+ const upUnitNano = solarMode ? nanoInUtcDay : unitNanoMap[smallestUnit + 1];
612
+ if (upUnitNano) {
613
+ const unitNano = unitNanoMap[smallestUnit];
614
+ upUnitNano % ((roundingInc = clampEntity("roundingIncrement", roundingInc, 1, upUnitNano / unitNano - (solarMode ? 0 : 1), 1)) * unitNano) && throwRangeError(invalidEntity("roundingIncrement", roundingInc));
615
+ } else roundingInc = clampEntity("roundingIncrement", roundingInc, 1, allowManyLargeUnits ? 10 ** 9 : 1, 1);
616
+ return roundingInc;
617
+ }
618
+ function validateUnitRange(optionName, unit, minUnit, maxUnit) {
619
+ return null != unit && clampEntity(optionName, unit, minUnit, maxUnit, 1, unitNamesAsc), unit;
620
+ }
621
+ function checkLargestSmallestUnit(largestUnit, smallestUnit) {
622
+ smallestUnit > largestUnit && throwRangeError("smallestUnit > largestUnit");
623
+ }
624
+ function refineDiffOptions(roundingModeInvert, options, defaultLargestUnit, maxUnit = 9, minUnit = 0, defaultRoundingMode = 4) {
625
+ options = require_utils.normalizeOptions(options);
626
+ let largestUnit = coerceLargestUnit(options, minUnit);
627
+ let roundingInc = coerceRoundingIncInteger(options);
628
+ let roundingMode = coerceRoundingMode(options, defaultRoundingMode);
629
+ let smallestUnit = coerceSmallestUnit(options, minUnit, 1);
630
+ return largestUnit = validateUnitRange("largestUnit", largestUnit, minUnit, maxUnit), smallestUnit = validateUnitRange(smallestUnitStr, smallestUnit, minUnit, maxUnit), null == largestUnit ? largestUnit = Math.max(defaultLargestUnit, smallestUnit) : checkLargestSmallestUnit(largestUnit, smallestUnit), roundingInc = validateRoundingInc(roundingInc, smallestUnit, 1), roundingModeInvert && (roundingMode = ((roundingMode) => roundingMode < 4 ? (roundingMode + 2) % 4 : roundingMode)(roundingMode)), [
631
+ largestUnit,
632
+ smallestUnit,
633
+ roundingInc,
634
+ roundingMode
635
+ ];
636
+ }
637
+ function refineRoundingOptions(options, maxUnit = 6, solarMode) {
638
+ let roundingInc = coerceRoundingIncInteger(options = normalizeOptionsOrString(options, smallestUnitStr));
639
+ const roundingMode = coerceRoundingMode(options, 7);
640
+ let smallestUnit = coerceSmallestUnit(options);
641
+ return smallestUnit = requirePropDefined(smallestUnitStr, smallestUnit), smallestUnit = validateUnitRange(smallestUnitStr, smallestUnit, 0, maxUnit), roundingInc = validateRoundingInc(roundingInc, smallestUnit, void 0, solarMode), [
642
+ smallestUnit,
643
+ roundingInc,
644
+ roundingMode
645
+ ];
646
+ }
647
+ function combineDateAndTime(isoDate, time) {
648
+ return pluckProps(calendarDateFieldNamesAsc, isoDate, pluckProps(timeFieldNamesAsc, time));
649
+ }
650
+ function refineOverflowOptions(options) {
651
+ return void 0 === options ? 0 : coerceOverflow(require_utils.requireObjectLike(options));
652
+ }
653
+ function refineZonedFieldOptions(options, defaultOffsetDisambig = 0) {
654
+ options = require_utils.normalizeOptions(options);
655
+ const epochDisambig = coerceEpochDisambig(options);
656
+ const offsetDisambig = coerceOffsetDisambig(options, defaultOffsetDisambig);
657
+ return [
658
+ coerceOverflow(options),
659
+ offsetDisambig,
660
+ epochDisambig
661
+ ];
662
+ }
663
+ const epochNanoMax = /* @__PURE__ */ BigInt(1e8) * bigNanoInUtcDay;
664
+ const epochNanoMin = /* @__PURE__ */ BigInt(-1e8) * bigNanoInUtcDay;
665
+ const plainDateEpochNanoMin = epochNanoMin - bigNanoInUtcDay;
666
+ const isoYearMonthIndexMin = -3261848;
667
+ function checkIsoYearMonthInBounds(isoDate) {
668
+ const isoYearMonthIndex = 12 * isoDate.year + isoDate.month;
669
+ return (isoYearMonthIndex < isoYearMonthIndexMin || isoYearMonthIndex > 3309129) && throwRangeError("Out-of-bounds date"), isoDate;
670
+ }
671
+ function checkIsoDateInBounds(isoDate, allowPlainDateLowerEdge = 1) {
672
+ return checkIsoDateEpochNanoInBounds(isoDateToEpochNano(isoDate), allowPlainDateLowerEdge), isoDate;
673
+ }
674
+ function checkIsoDateTimeInBounds(isoDateTime) {
675
+ const epochNano = isoDateToEpochNano(isoDateTime);
676
+ return checkIsoDateEpochNanoInBounds(epochNano), epochNano !== plainDateEpochNanoMin || timeFieldsToNano(isoDateTime) || throwRangeError("Out-of-bounds date"), isoDateTime;
677
+ }
678
+ function checkIsoDateEpochNanoInBounds(epochNano, allowPlainDateLowerEdge = 1) {
679
+ (epochNano < (allowPlainDateLowerEdge ? plainDateEpochNanoMin : epochNanoMin) || epochNano > epochNanoMax) && throwRangeError("Out-of-bounds date");
680
+ }
681
+ function checkEpochNanoInBounds(epochNano) {
682
+ return (epochNano < epochNanoMin || epochNano > epochNanoMax) && throwRangeError("Out-of-bounds date"), epochNano;
683
+ }
684
+ function isoDateTimeAndOffsetToEpochNano(isoDateTime, offsetNano) {
685
+ return checkEpochNanoInBounds(isoDateToEpochNano(isoDateTime) + BigInt(timeFieldsToNano(isoDateTime) - offsetNano));
686
+ }
687
+ function createEpochNanoSlots(epochNano) {
688
+ return { epochNanoseconds: epochNano };
689
+ }
690
+ function createZonedEpochNanoSlots(epochNano, timeZone, calendar) {
691
+ return {
692
+ calendar,
693
+ timeZone,
694
+ epochNanoseconds: epochNano
695
+ };
696
+ }
697
+ function createDateTimeSlots(isoDateTime, calendar) {
698
+ return pluckProps(timeFieldNamesAsc, isoDateTime, createDateSlots(isoDateTime, calendar));
699
+ }
700
+ function createDateSlots(isoDate, calendar) {
701
+ return pluckProps(calendarDateFieldNamesAsc, isoDate, { calendar });
702
+ }
703
+ function createTimeSlots(time) {
704
+ return pluckProps(timeFieldNamesAsc, time);
705
+ }
706
+ function createDurationSlots(durationFields) {
707
+ return pluckProps(durationFieldNamesAsc, durationFields, { sign: computeDurationSign(durationFields) });
708
+ }
709
+ function getEpochMilli(slots) {
710
+ return epochNano = slots.epochNanoseconds, Number(divFloorBigInt(epochNano, bigNanoInMilli));
711
+ var epochNano;
712
+ }
713
+ function getEpochNano(slots) {
714
+ return slots.epochNanoseconds;
715
+ }
716
+ function totalDuration(refineRelativeTo, slots, options) {
717
+ const maxDurationUnit = getMaxDurationUnit(slots);
718
+ const [totalUnit, relativeToSlots] = ((options, refineRelativeTo) => {
719
+ const relativeToInternals = refineRelativeTo((options = normalizeOptionsOrString(options, "unit")).relativeTo);
720
+ let totalUnit = coerceTotalUnit(options);
721
+ return totalUnit = requirePropDefined("unit", totalUnit), [totalUnit, relativeToInternals];
722
+ })(options, refineRelativeTo);
723
+ if (!relativeToSlots && isUniformUnit(Math.max(totalUnit, maxDurationUnit), relativeToSlots)) return totalDayTimeDuration(slots, totalUnit);
724
+ if (relativeToSlots || throwRangeError("Missing relativeTo"), !slots.sign && isUniformUnit(totalUnit, relativeToSlots)) return 0;
725
+ const markerSpanOps = createMarkerSpanOps(relativeToSlots);
726
+ const endMarker = markerSpanOps.G(markerSpanOps.i, slots);
727
+ checkMarkerSpanInBounds(markerSpanOps, endMarker);
728
+ const balancedDuration = markerSpanOps.re(markerSpanOps.i, endMarker, totalUnit);
729
+ return isUniformUnit(totalUnit, relativeToSlots) ? totalDayTimeDuration(balancedDuration, totalUnit) : totalRelativeDuration(balancedDuration, markerSpanOps.V(endMarker), totalUnit, markerSpanOps);
730
+ }
731
+ function totalRelativeDuration(durationFields, endEpochNano, totalUnit, markerMoveOps) {
732
+ const sign = computeDurationSign(durationFields) || 1;
733
+ const nudgeWindow = clampRelativeDuration(clearDurationFields(totalUnit, durationFields), totalUnit, sign, markerMoveOps, endEpochNano);
734
+ const epochNano0 = nudgeWindow.ae;
735
+ const epochNano1 = nudgeWindow.de;
736
+ const denom = Number(epochNano1 - epochNano0);
737
+ const numerator = Number(endEpochNano - epochNano0);
738
+ return nudgeWindow.ye[durationFieldNamesAsc[totalUnit]] + numerator / denom * sign;
739
+ }
740
+ function totalDayTimeDuration(durationFields, totalUnit) {
741
+ return divideBigNanoToExactNumber(durationDayTimeToBigNano(durationFields), unitNanoMap[totalUnit]);
742
+ }
743
+ function clampRelativeDuration(durationFields, clampUnit, clampDistance, markerMoveOps, epochNanoProgress) {
744
+ const unitName = durationFieldNamesAsc[clampUnit];
745
+ let startDurationFields = durationFields;
746
+ let shifted = 0;
747
+ let window = computeRelativeDurationWindow(startDurationFields, unitName, clampDistance, markerMoveOps);
748
+ return epochNanoProgress && !((epochNanoProgress, epochNano0, epochNano1, sign) => sign > 0 ? compareBigInts(epochNano0, epochNanoProgress) <= 0 && compareBigInts(epochNanoProgress, epochNano1) <= 0 : compareBigInts(epochNano1, epochNanoProgress) <= 0 && compareBigInts(epochNanoProgress, epochNano0) <= 0)(epochNanoProgress, window.ae, window.de, Math.sign(clampDistance)) && (startDurationFields = {
749
+ ...durationFields,
750
+ [unitName]: durationFields[unitName] + clampDistance
751
+ }, shifted = 1, window = computeRelativeDurationWindow(startDurationFields, unitName, clampDistance, markerMoveOps)), {
752
+ ...window,
753
+ ye: startDurationFields,
754
+ He: shifted
755
+ };
756
+ }
757
+ function computeRelativeDurationWindow(startDurationFields, unitName, clampDistance, markerMoveOps) {
758
+ const endDurationFields = {
759
+ ...startDurationFields,
760
+ [unitName]: startDurationFields[unitName] + clampDistance
761
+ };
762
+ return {
763
+ ae: moveMarkerToEpochNano(markerMoveOps, startDurationFields),
764
+ de: moveMarkerToEpochNano(markerMoveOps, endDurationFields),
765
+ Ae: endDurationFields
766
+ };
767
+ }
768
+ function computeEpochNanoFrac(epochNanoProgress, epochNano0, epochNano1) {
769
+ const denomBig = epochNano1 - epochNano0;
770
+ const numeratorBig = epochNanoProgress - epochNano0;
771
+ if (!numeratorBig) return 0;
772
+ const absNumerator = numeratorBig < 0n ? -numeratorBig : numeratorBig;
773
+ const absDenom = denomBig < 0n ? -denomBig : denomBig;
774
+ const fracSign = compareBigInts(numeratorBig, 0n) === compareBigInts(denomBig, 0n) ? 1 : -1;
775
+ return compareBigInts(absNumerator, absDenom) <= 0 ? absNumerator === absDenom ? fracSign : fabricateNearHalfFraction(compareBigInts(2n * absNumerator, absDenom), fracSign) : Number(numeratorBig) / Number(denomBig);
776
+ }
777
+ function roundZonedEpochSlotsToUnit(slots, smallestUnit, roundingInc, roundingMode) {
778
+ let { epochNanoseconds } = slots;
779
+ const { timeZone, calendar } = slots;
780
+ if (0 === smallestUnit && 1 === roundingInc) return {
781
+ epochNanoseconds,
782
+ timeZone,
783
+ calendar
784
+ };
785
+ if (6 === smallestUnit) {
786
+ const isoFields0 = combineDateAndTime(zonedEpochSlotsToIso(slots), timeFieldDefaults);
787
+ const isoFields1 = combineDateAndTime(moveByDays(isoFields0, 1), timeFieldDefaults);
788
+ const epochNano0 = getStartOfDayInstantFor(timeZone, isoFields0);
789
+ const epochNano1 = getStartOfDayInstantFor(timeZone, isoFields1);
790
+ epochNanoseconds = roundWithMode(computeEpochNanoFrac(epochNanoseconds, epochNano0, epochNano1), roundingMode) ? epochNano1 : epochNano0;
791
+ } else {
792
+ const isoDateTime = zonedEpochSlotsToIso(slots);
793
+ const offsetNano = isoDateTime.offsetNanoseconds;
794
+ epochNanoseconds = getMatchingInstantFor(timeZone, roundDateTimeToNano(isoDateTime, computeNanoInc(smallestUnit, roundingInc), roundingMode), offsetNano, 2, 0, 1);
795
+ }
796
+ return {
797
+ epochNanoseconds,
798
+ timeZone,
799
+ calendar
800
+ };
801
+ }
802
+ function computeZonedHoursInDay(slots) {
803
+ const { timeZone } = slots;
804
+ const isoFields0 = combineDateAndTime(zonedEpochSlotsToIso(slots), timeFieldDefaults);
805
+ const isoFields1 = combineDateAndTime(moveByDays(isoFields0, 1), timeFieldDefaults);
806
+ const epochNano0 = getStartOfDayInstantFor(timeZone, isoFields0);
807
+ return divideBigNanoToExactNumber(getStartOfDayInstantFor(timeZone, isoFields1) - epochNano0, nanoInHour);
808
+ }
809
+ function computeZonedStartOfDay(slots) {
810
+ const { timeZone, calendar } = slots;
811
+ return createZonedEpochNanoSlots(getStartOfDayInstantFor(timeZone, combineDateAndTime(zonedEpochSlotsToIso(slots), timeFieldDefaults)), timeZone, calendar);
812
+ }
813
+ function roundDateTimeToNano(isoDateTime, nanoInc, roundingMode) {
814
+ const [roundedTimeFields, dayDelta] = roundTimeToNano(isoDateTime, nanoInc, roundingMode);
815
+ const roundedIsoDateTime = combineDateAndTime(moveByDays(isoDateTime, dayDelta), roundedTimeFields);
816
+ return checkIsoDateTimeInBounds(roundedIsoDateTime), roundedIsoDateTime;
817
+ }
818
+ function roundTimeToNano(timeFields, nanoInc, roundingMode) {
819
+ return nanoToTimeAndDay(roundNumberToInc(timeFieldsToNano(timeFields), nanoInc, roundingMode));
820
+ }
821
+ function roundToMinute(offsetNano) {
822
+ return roundNumberToInc(offsetNano, nanoInMinute, 7);
823
+ }
824
+ function computeNanoInc(smallestUnit, roundingInc) {
825
+ return unitNanoMap[smallestUnit] * roundingInc;
826
+ }
827
+ function computeBigNanoInc(smallestUnit, roundingInc) {
828
+ return BigInt(unitNanoMap[smallestUnit]) * BigInt(roundingInc);
829
+ }
830
+ function roundDayTimeDurationByInc(durationFields, nanoInc, roundingMode) {
831
+ const maxUnit = Math.min(getMaxDurationUnit(durationFields), 6);
832
+ return nanoToDurationDayTimeFields(roundBigNanoToInc(durationDayTimeToBigNano(durationFields), BigInt(nanoInc), roundingMode), maxUnit);
833
+ }
834
+ function roundRelativeDuration(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, markerMoveOps) {
835
+ if (0 === smallestUnit && 1 === roundingInc) return durationFields;
836
+ const sign = computeDurationSign(durationFields) || 1;
837
+ let [roundedDurationFields, roundedEpochNano, grewBigUnit] = (isUniformUnit(smallestUnit, markerMoveOps.i) ? isZonedEpochSlots(markerMoveOps.i) && smallestUnit < 6 && largestUnit >= 6 ? nudgeZonedTimeDuration : nudgeDayTimeDuration : nudgeRelativeDuration)(sign, durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, markerMoveOps);
838
+ return grewBigUnit && 7 !== smallestUnit && (roundedDurationFields = ((durationFields, endEpochNano, largestUnit, smallestUnit, sign, markerMoveOps) => {
839
+ for (let currentUnit = smallestUnit + 1; currentUnit <= largestUnit; currentUnit++) {
840
+ if (7 === currentUnit && 7 !== largestUnit) continue;
841
+ const baseDurationFields = clearDurationFields(currentUnit, durationFields);
842
+ baseDurationFields[durationFieldNamesAsc[currentUnit]] += sign;
843
+ const thresholdCompare = compareBigInts(endEpochNano, moveMarkerToEpochNano(markerMoveOps, baseDurationFields));
844
+ if (thresholdCompare && thresholdCompare !== sign) break;
845
+ durationFields = baseDurationFields;
846
+ }
847
+ return durationFields;
848
+ })(roundedDurationFields, roundedEpochNano, largestUnit, Math.max(6, smallestUnit), sign, markerMoveOps)), roundedDurationFields;
849
+ }
850
+ function roundBigNanoToInc(bigNano, bigNanoInc, roundingMode) {
851
+ return roundBigNanoToIncWithTail(bigNano, bigNanoInc, roundingMode, bigNano / bigNanoInc % 2n);
852
+ }
853
+ function roundBigNanoToDayOriginInc(bigNano, bigNanoInc, roundingMode) {
854
+ const [day, timeNano] = divModFloorBigInt(bigNano, bigNanoInUtcDay);
855
+ const dayOriginNano = day * bigNanoInUtcDay;
856
+ return dayOriginNano + roundBigNanoToIncWithTail(timeNano, bigNanoInc, roundingMode, (dayOriginNano / bigNanoInc + timeNano / bigNanoInc) % 2n);
857
+ }
858
+ function roundBigNanoToIncWithTail(bigNano, bigNanoInc, roundingMode, quotientTail) {
859
+ const quotient = bigNano / bigNanoInc;
860
+ const remainder = bigNano % bigNanoInc;
861
+ let fraction = 0;
862
+ remainder && (fraction = fabricateNearHalfFraction(compareBigInts(2n * (remainder < 0n ? -remainder : remainder), bigNanoInc), Math.sign(Number(remainder))));
863
+ const roundedTail = roundWithMode(Number(quotientTail) + fraction, roundingMode);
864
+ return (quotient - quotientTail + BigInt(roundedTail)) * bigNanoInc;
865
+ }
866
+ function roundNumberToInc(num, roundingInc, roundingMode) {
867
+ return roundWithMode(num / roundingInc, roundingMode) * roundingInc;
868
+ }
869
+ function roundWithMode(num, roundingMode) {
870
+ return roundingModeFuncs[roundingMode](num);
871
+ }
872
+ function nudgeDayTimeDuration(sign, durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode) {
873
+ const bigNano = durationDayTimeToBigNano(durationFields);
874
+ const roundedBigNano = roundBigNanoToInc(bigNano, computeBigNanoInc(smallestUnit, roundingInc), roundingMode);
875
+ const nanoDiff = roundedBigNano - bigNano;
876
+ const expandedBigUnit = Math.sign(Number(roundedBigNano / bigNanoInUtcDay) - Number(bigNano / bigNanoInUtcDay)) === sign;
877
+ const roundedDayTimeFields = nanoToDurationDayTimeFields(roundedBigNano, Math.min(largestUnit, 6));
878
+ return [
879
+ {
880
+ ...durationFields,
881
+ ...roundedDayTimeFields
882
+ },
883
+ endEpochNano + nanoDiff,
884
+ expandedBigUnit
885
+ ];
886
+ }
887
+ function nudgeZonedTimeDuration(sign, durationFields, endEpochNano, _largestUnit, smallestUnit, roundingInc, roundingMode, markerMoveOps) {
888
+ const timeNano = Number(durationTimeToBigNano(durationFields));
889
+ const nanoInc = computeNanoInc(smallestUnit, roundingInc);
890
+ let roundedTimeNano = roundNumberToInc(timeNano, nanoInc, roundingMode);
891
+ const dayWindow = clampRelativeDuration({
892
+ ...durationFields,
893
+ ...durationTimeFieldDefaults
894
+ }, 6, sign, markerMoveOps, endEpochNano);
895
+ const dayEpochNano0 = dayWindow.ae;
896
+ const dayEpochNano1 = dayWindow.de;
897
+ const beyondDayNano = roundedTimeNano - Number(dayEpochNano1 - dayEpochNano0);
898
+ let dayDelta = 0;
899
+ beyondDayNano && Math.sign(beyondDayNano) !== sign ? endEpochNano = dayEpochNano0 + BigInt(roundedTimeNano) : (dayDelta += sign, roundedTimeNano = roundNumberToInc(beyondDayNano, nanoInc, roundingMode), endEpochNano = dayEpochNano1 + BigInt(roundedTimeNano));
900
+ const durationTimeFields = nanoToDurationTimeFields(roundedTimeNano);
901
+ return [
902
+ {
903
+ ...durationFields,
904
+ ...durationTimeFields,
905
+ days: durationFields.days + dayDelta
906
+ },
907
+ endEpochNano,
908
+ Boolean(dayDelta)
909
+ ];
910
+ }
911
+ function nudgeRelativeDuration(sign, durationFields, endEpochNano, _largestUnit, smallestUnit, roundingInc, roundingMode, markerMoveOps) {
912
+ const smallestUnitFieldName = durationFieldNamesAsc[smallestUnit];
913
+ const baseDurationFields = clearDurationFields(smallestUnit, durationFields);
914
+ 7 === smallestUnit && (durationFields = {
915
+ ...durationFields,
916
+ weeks: durationFields.weeks + Math.trunc(durationFields.days / 7)
917
+ });
918
+ baseDurationFields[smallestUnitFieldName] = divTrunc(durationFields[smallestUnitFieldName], roundingInc) * roundingInc;
919
+ const nudgeWindow = clampRelativeDuration(baseDurationFields, smallestUnit, roundingInc * sign, markerMoveOps, endEpochNano);
920
+ const epochNano0 = nudgeWindow.ae;
921
+ const epochNano1 = nudgeWindow.de;
922
+ const frac = computeEpochNanoFrac(endEpochNano, epochNano0, epochNano1);
923
+ const windowStartVal = nudgeWindow.ye[smallestUnitFieldName];
924
+ const windowEndVal = nudgeWindow.Ae[smallestUnitFieldName];
925
+ const roundedVal = roundNumberToInc(windowStartVal + frac * sign * roundingInc, roundingInc, roundingMode);
926
+ const roundedToEnd = roundedVal === windowEndVal;
927
+ return baseDurationFields[smallestUnitFieldName] = roundedVal, [
928
+ baseDurationFields,
929
+ roundedToEnd ? epochNano1 : epochNano0,
930
+ nudgeWindow.He || roundedToEnd
931
+ ];
932
+ }
933
+ function getTimeZoneTransitionEpochNanoseconds(slots, options) {
934
+ return slots.timeZone.U(slots.epochNanoseconds, ((options) => {
935
+ const res = coerceDirection(normalizeOptionsOrString(options, "direction"), 0);
936
+ return res || throwRangeError(invalidEntity("direction", res)), res;
937
+ })(options));
938
+ }
939
+ const zonedEpochSlotsToIso = /* @__PURE__ */ memoize(_zonedEpochSlotsToIso, WeakMap);
940
+ function _zonedEpochSlotsToIso(slots) {
941
+ const { epochNanoseconds, timeZone } = slots;
942
+ const offsetNanoseconds = timeZone.C(epochNanoseconds);
943
+ return {
944
+ ...epochNanoToIsoDateTime(epochNanoseconds + BigInt(offsetNanoseconds)),
945
+ offsetNanoseconds
946
+ };
947
+ }
948
+ function getMatchingInstantFor(timeZone, isoDateTime, offsetNano, offsetDisambig = 0, epochDisambig = 0, epochFuzzy, hasZ) {
949
+ if (void 0 !== offsetNano && 1 === offsetDisambig && (1 === offsetDisambig || hasZ)) return isoDateTimeAndOffsetToEpochNano(isoDateTime, offsetNano);
950
+ 2 !== offsetDisambig && 0 !== offsetDisambig || checkIsoDateInBounds(isoDateTime, 0);
951
+ const possibleEpochNanos = timeZone.R(isoDateTime);
952
+ if (void 0 !== offsetNano && 3 !== offsetDisambig) {
953
+ const matchingEpochNano = ((possibleEpochNanos, isoDateTime, offsetNano, fuzzy) => {
954
+ const zonedEpochNano = isoDateTimeToEpochNano(isoDateTime);
955
+ fuzzy && (offsetNano = roundToMinute(offsetNano));
956
+ for (const possibleEpochNano of possibleEpochNanos) {
957
+ let possibleOffsetNano = Number(zonedEpochNano - possibleEpochNano);
958
+ if (fuzzy && (possibleOffsetNano = roundToMinute(possibleOffsetNano)), possibleOffsetNano === offsetNano) return possibleEpochNano;
959
+ }
960
+ })(possibleEpochNanos, isoDateTime, offsetNano, epochFuzzy);
961
+ if (void 0 !== matchingEpochNano) return matchingEpochNano;
962
+ 0 === offsetDisambig && throwRangeError("Invalid TimeZone offset");
963
+ }
964
+ return hasZ ? isoDateTimeToEpochNano(isoDateTime) : getSingleInstantFor(timeZone, isoDateTime, epochDisambig, possibleEpochNanos);
965
+ }
966
+ function getSingleInstantFor(timeZone, isoDateTime, disambig = 0, possibleEpochNanos = timeZone.R(isoDateTime)) {
967
+ if (1 === possibleEpochNanos.length) return possibleEpochNanos[0];
968
+ if (1 === disambig && throwRangeError("Ambiguous offset"), possibleEpochNanos.length) return possibleEpochNanos[3 === disambig ? 1 : 0];
969
+ const zonedEpochNano = isoDateTimeToEpochNano(isoDateTime);
970
+ const gapNano = ((timeZone, zonedEpochNano) => {
971
+ const startOffsetNano = timeZone.C(zonedEpochNano - bigNanoInUtcDay);
972
+ return ((gapNano) => (gapNano > 864e11 && throwRangeError("Out-of-bounds TimeZone gap"), gapNano))(timeZone.C(zonedEpochNano + bigNanoInUtcDay) - startOffsetNano);
973
+ })(timeZone, zonedEpochNano);
974
+ const shiftedIsoDateTime = epochNanoToIsoDateTime(zonedEpochNano + BigInt(gapNano * (2 === disambig ? -1 : 1)));
975
+ return (possibleEpochNanos = timeZone.R(shiftedIsoDateTime))[2 === disambig ? 0 : possibleEpochNanos.length - 1];
976
+ }
977
+ function getStartOfDayInstantFor(timeZone, isoDateTime) {
978
+ const possibleEpochNanos = timeZone.R(isoDateTime);
979
+ if (possibleEpochNanos.length) return possibleEpochNanos[0];
980
+ const zonedEpochNanoDayBefore = isoDateTimeToEpochNano(isoDateTime) - bigNanoInUtcDay;
981
+ return timeZone.U(zonedEpochNanoDayBefore, 1);
982
+ }
983
+ function moveYearMonth(doSubtract, calendar, isoDateFields, durationSlots, options) {
984
+ const overflow = refineOverflowOptions(options);
985
+ durationSlots.sign && getMaxDurationUnit(durationSlots) < 8 && throwRangeError("Cannot use small units");
986
+ return moveToStartOfMonth(calendar, dateAddWithOverflow(calendar, checkIsoDateInBounds(moveToStartOfMonth(calendar, isoDateFields)), doSubtract ? negateDurationFields(durationSlots) : durationSlots, overflow));
987
+ }
988
+ function moveEpochNano(epochNano, durationFields) {
989
+ return checkEpochNanoInBounds(epochNano + (durationHasDateParts(fields = durationFields) && throwRangeError("Cannot use large units"), durationTimeToBigNano(fields)));
990
+ var fields;
991
+ }
992
+ function moveZonedEpochSlots(slots, durationFields, options) {
993
+ const { calendar, epochNanoseconds: epochNano, timeZone } = slots;
994
+ const timeOnlyNano = durationTimeToBigNano(durationFields);
995
+ let movedEpochNano = epochNano;
996
+ if (durationHasDateParts(durationFields)) {
997
+ const isoDateTime = zonedEpochSlotsToIso(slots);
998
+ movedEpochNano = getSingleInstantFor(timeZone, combineDateAndTime(moveDate(calendar, isoDateTime, {
999
+ ...durationFields,
1000
+ ...durationTimeFieldDefaults
1001
+ }, options), isoDateTime)) + timeOnlyNano;
1002
+ } else movedEpochNano += timeOnlyNano, refineOverflowOptions(options);
1003
+ return {
1004
+ ...slots,
1005
+ epochNanoseconds: checkEpochNanoInBounds(movedEpochNano)
1006
+ };
1007
+ }
1008
+ function moveDateTime(calendar, isoDateTimeFields, durationFields, options) {
1009
+ const [movedTimeFields, dayDelta] = moveTime(isoDateTimeFields, durationFields);
1010
+ const movedIsoDateTimeFields = combineDateAndTime(moveDate(calendar, isoDateTimeFields, {
1011
+ ...durationFields,
1012
+ ...durationTimeFieldDefaults,
1013
+ days: durationFields.days + dayDelta
1014
+ }, options), movedTimeFields);
1015
+ return checkIsoDateTimeInBounds(movedIsoDateTimeFields), movedIsoDateTimeFields;
1016
+ }
1017
+ function moveDate(calendar, isoDateFields, durationFields, options) {
1018
+ if (durationFields.years || durationFields.months || durationFields.weeks) return dateAddWithOverflow(calendar, isoDateFields, durationFields, refineOverflowOptions(options));
1019
+ refineOverflowOptions(options);
1020
+ const days = durationFields.days + Number(durationTimeToBigNano(durationFields) / bigNanoInUtcDay);
1021
+ return days ? checkIsoDateInBounds(moveByDays(isoDateFields, days)) : isoDateFields;
1022
+ }
1023
+ function moveToStartOfMonth(calendar, isoDateFields) {
1024
+ return moveByDays(isoDateFields, 1 - computeCalendarDateFields(calendar, isoDateFields).day);
1025
+ }
1026
+ function moveTime(timeFields, durationFields) {
1027
+ const durationBigNano = durationTimeToBigNano(durationFields);
1028
+ const durDays = Number(durationBigNano / bigNanoInUtcDay);
1029
+ const durTimeNano = Number(durationBigNano % bigNanoInUtcDay);
1030
+ const [newTimeFields, overflowDays] = nanoToTimeAndDay(timeFieldsToNano(timeFields) + durTimeNano);
1031
+ return [newTimeFields, durDays + overflowDays];
1032
+ }
1033
+ function moveByDays(isoDate, days) {
1034
+ return days ? epochDaysToIsoDate(isoDateToEpochDays(isoDate) + days) : isoDate;
1035
+ }
1036
+ function dateAddWithOverflow(calendar, isoDateFields, durationFields, overflow) {
1037
+ let { years, months, weeks, days } = durationFields;
1038
+ let isoDate;
1039
+ if (days += Number(durationTimeToBigNano(durationFields) / bigNanoInUtcDay), years || months) isoDate = addDateMonths(calendar, isoDateFields, years, months, overflow);
1040
+ else {
1041
+ if (!weeks && !days) return isoDateFields;
1042
+ isoDate = isoDateFields;
1043
+ }
1044
+ return (weeks || days) && (isoDate = moveByDays(isoDate, 7 * weeks + days)), checkIsoDateInBounds(isoDate);
1045
+ }
1046
+ function addDateMonths(calendar, isoDateFields, years, months, overflow) {
1047
+ let { year, month, day } = computeCalendarDateFields(calendar, isoDateFields);
1048
+ if (years) {
1049
+ const [monthCodeNumber, isLeapMonth] = computeCalendarMonthCodeParts(calendar, year, month);
1050
+ year += years, month = computeYearMovedMonth(calendar, monthCodeNumber, isLeapMonth, calendar ? calendar.q(year) : void 0, overflow), month = clampEntity("month", month, 1, computeCalendarMonthsInYearForYear(calendar, year), overflow);
1051
+ }
1052
+ if (months) {
1053
+ const yearMonthParts = calendar ? calendar.N(year, month, months) : addIsoMonths(year, month, months);
1054
+ ({year: year, month: month} = yearMonthParts);
1055
+ }
1056
+ return day = clampEntity("day", day, 1, computeCalendarDaysInMonthForYearMonth(calendar, year, month), overflow), computeCalendarIsoFieldsFromParts(calendar, year, month, day);
1057
+ }
1058
+ function computeYearMovedMonth(calendar, monthCodeNumber, isLeapMonth, targetLeapMonth, overflow) {
1059
+ if (isLeapMonth) {
1060
+ const leapMonthMeta = calendar ? calendar.m : void 0;
1061
+ return void 0 !== targetLeapMonth && (leapMonthMeta < 0 || targetLeapMonth === monthCodeNumber + 1) ? targetLeapMonth : (1 === overflow && throwRangeError(invalidLeapMonth), leapMonthMeta < 0 ? -leapMonthMeta : monthCodeNumber);
1062
+ }
1063
+ return monthCodeNumberToMonth(monthCodeNumber, 0, targetLeapMonth);
1064
+ }
1065
+ function getCommonCalendar(a, b) {
1066
+ return getCalendarSlotId(a) !== getCalendarSlotId(b) && throwRangeError("Mismatching Calendars"), a;
1067
+ }
1068
+ function getCommonTimeZone(a, b) {
1069
+ return a.o !== b.o && throwRangeError("Mismatching TimeZones"), a;
1070
+ }
1071
+ function getZonedTimeZoneId(slots) {
1072
+ return slots.timeZone.id;
1073
+ }
1074
+ function diffInstants(invert, instantSlots0, instantSlots1, options) {
1075
+ const [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 3, 5);
1076
+ const durationFields = diffEpochNanos(instantSlots0.epochNanoseconds, instantSlots1.epochNanoseconds, largestUnit, smallestUnit, roundingInc, roundingMode);
1077
+ return createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1078
+ }
1079
+ function diffZonedDateTimes(invert, calendar, slots0, slots1, options) {
1080
+ const [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 5);
1081
+ const epochNano0 = slots0.epochNanoseconds;
1082
+ const epochNano1 = slots1.epochNanoseconds;
1083
+ let durationFields;
1084
+ return compareBigInts(epochNano1, epochNano0) ? largestUnit < 6 ? durationFields = diffEpochNanos(epochNano0, epochNano1, largestUnit, smallestUnit, roundingInc, roundingMode) : (durationFields = diffZonedEpochsExact(getCommonTimeZone(slots0.timeZone, slots1.timeZone), calendar, slots0, slots1, largestUnit), durationFields = roundRelativeDuration(durationFields, epochNano1, largestUnit, smallestUnit, roundingInc, roundingMode, createMarkerMoveOps(slots0, getEpochNano, moveZonedEpochSlots))) : durationFields = durationFieldDefaults, createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1085
+ }
1086
+ function diffPlainDateTimes(invert, calendar, plainDateTimeSlots0, plainDateTimeSlots1, options) {
1087
+ const [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 6);
1088
+ const startEpochNano = isoDateTimeToEpochNano(plainDateTimeSlots0);
1089
+ const endEpochNano = isoDateTimeToEpochNano(plainDateTimeSlots1);
1090
+ const sign = compareBigInts(endEpochNano, startEpochNano);
1091
+ let durationFields;
1092
+ return sign ? largestUnit <= 6 ? durationFields = diffEpochNanos(startEpochNano, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode) : (durationFields = diffDateTimesBig(calendar, plainDateTimeSlots0, plainDateTimeSlots1, sign, largestUnit), durationFields = roundRelativeDuration(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, createMarkerMoveOps(plainDateTimeSlots0, isoDateTimeToEpochNano, bindArgs(moveDateTime, calendar)))) : durationFields = durationFieldDefaults, createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1093
+ }
1094
+ function diffPlainDates(invert, calendar, plainDateSlots0, plainDateSlots1, options) {
1095
+ const [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 6, 9, 6);
1096
+ return diffDateLike(invert, calendar, plainDateSlots0, plainDateSlots1, largestUnit, smallestUnit, roundingInc, roundingMode);
1097
+ }
1098
+ function diffPlainYearMonth(invert, calendar, plainYearMonthSlots0, plainYearMonthSlots1, options) {
1099
+ const [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 9, 9, 8);
1100
+ const firstOfMonth0 = moveToStartOfMonth(calendar, plainYearMonthSlots0);
1101
+ const firstOfMonth1 = moveToStartOfMonth(calendar, plainYearMonthSlots1);
1102
+ return compareIsoDate(firstOfMonth0, firstOfMonth1) ? diffDateLike(invert, calendar, checkIsoDateInBounds(firstOfMonth0), checkIsoDateInBounds(firstOfMonth1), largestUnit, smallestUnit, roundingInc, roundingMode, 8) : createDurationSlots(durationFieldDefaults);
1103
+ }
1104
+ function diffDateLike(invert, calendar, startIsoDate, endIsoDate, largestUnit, smallestUnit, roundingInc, roundingMode, smallestPrecision = 6) {
1105
+ const startEpochNano = isoDateToEpochNano(startIsoDate);
1106
+ const endEpochNano = isoDateToEpochNano(endIsoDate);
1107
+ let durationFields;
1108
+ return compareBigInts(endEpochNano, startEpochNano) ? 6 === largestUnit ? durationFields = diffEpochNanos(startEpochNano, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode) : (durationFields = diffCalendarDates(calendar, startIsoDate, endIsoDate, largestUnit), smallestUnit === smallestPrecision && 1 === roundingInc || (durationFields = roundRelativeDuration(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, createMarkerMoveOps(startIsoDate, isoDateToEpochNano, bindArgs(moveDate, calendar))))) : durationFields = durationFieldDefaults, createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1109
+ }
1110
+ function diffPlainTimes(invert, plainTimeSlots0, plainTimeSlots1, options) {
1111
+ const [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 5, 5);
1112
+ const timeDiffNano = roundNumberToInc(timeFieldsToNano(plainTimeSlots1) - timeFieldsToNano(plainTimeSlots0), computeNanoInc(smallestUnit, roundingInc), roundingMode);
1113
+ const durationFields = {
1114
+ ...durationFieldDefaults,
1115
+ ...nanoToDurationTimeFields(timeDiffNano, largestUnit)
1116
+ };
1117
+ return createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1118
+ }
1119
+ function diffZonedEpochsExact(timeZone, calendar, slots0, slots1, largestUnit) {
1120
+ const sign = compareBigInts(slots1.epochNanoseconds, slots0.epochNanoseconds);
1121
+ if (!sign) return durationFieldDefaults;
1122
+ if (largestUnit < 6) return {
1123
+ ...durationFieldDefaults,
1124
+ ...nanoToDurationDayTimeFields(slots1.epochNanoseconds - slots0.epochNanoseconds, largestUnit)
1125
+ };
1126
+ if (!compareIsoDate(zonedEpochSlotsToIso(slots0), zonedEpochSlotsToIso(slots1))) return {
1127
+ ...durationFieldDefaults,
1128
+ ...nanoToDurationDayTimeFields(slots1.epochNanoseconds - slots0.epochNanoseconds, 5)
1129
+ };
1130
+ const [isoFields0, isoFields1, remainderNano] = prepareZonedEpochDiff(timeZone, slots0, slots1, sign);
1131
+ return {
1132
+ ...6 === largestUnit ? {
1133
+ ...durationFieldDefaults,
1134
+ days: diffDays(isoFields0, isoFields1)
1135
+ } : diffCalendarDates(calendar, isoFields0, isoFields1, largestUnit),
1136
+ ...nanoToDurationTimeFields(remainderNano)
1137
+ };
1138
+ }
1139
+ function diffDateTimesExact(calendar, startIsoDateTime, endIsoDateTime, largestUnit) {
1140
+ const startEpochNano = isoDateTimeToEpochNano(startIsoDateTime);
1141
+ const endEpochNano = isoDateTimeToEpochNano(endIsoDateTime);
1142
+ const sign = compareBigInts(endEpochNano, startEpochNano);
1143
+ return sign ? largestUnit <= 6 ? {
1144
+ ...durationFieldDefaults,
1145
+ ...nanoToDurationDayTimeFields(endEpochNano - startEpochNano, largestUnit)
1146
+ } : diffDateTimesBig(calendar, startIsoDateTime, endIsoDateTime, sign, largestUnit) : durationFieldDefaults;
1147
+ }
1148
+ function diffDateTimesBig(calendar, startIsoDateTime, endIsoDateTime, sign, largestUnit) {
1149
+ let diffEndDate = endIsoDateTime;
1150
+ let timeNano = timeFieldsToNano(endIsoDateTime) - timeFieldsToNano(startIsoDateTime);
1151
+ return Math.sign(timeNano) === -sign && (diffEndDate = moveByDays(endIsoDateTime, -sign), timeNano += 864e11 * sign), {
1152
+ ...diffCalendarDates(calendar, startIsoDateTime, diffEndDate, largestUnit),
1153
+ ...nanoToDurationTimeFields(timeNano)
1154
+ };
1155
+ }
1156
+ function diffCalendarDates(calendar, startIsoDate, endIsoDate, largestUnit) {
1157
+ if (largestUnit <= 7) {
1158
+ const days = diffDays(startIsoDate, endIsoDate);
1159
+ return 7 === largestUnit ? {
1160
+ ...durationFieldDefaults,
1161
+ weeks: divTrunc(days, 7),
1162
+ days: modTrunc(days, 7)
1163
+ } : {
1164
+ ...durationFieldDefaults,
1165
+ days
1166
+ };
1167
+ }
1168
+ const yearMonthDayStart = computeCalendarDateFields(calendar, startIsoDate);
1169
+ const yearMonthDayEnd = computeCalendarDateFields(calendar, endIsoDate);
1170
+ if (8 === largestUnit) {
1171
+ const { year: year0, month: month0, day: day0 } = yearMonthDayStart;
1172
+ const { year: year1, month: month1, day: day1 } = yearMonthDayEnd;
1173
+ const sign = Math.sign(compareNumbers(year1, year0) || compareNumbers(month1, month0) || diffDays(startIsoDate, endIsoDate));
1174
+ let months = 0;
1175
+ let days = 0;
1176
+ if (sign) {
1177
+ months = calendar ? calendar.ne(year0, month0, year1, month1) : diffIsoMonthSlots(year0, month0, year1, month1);
1178
+ let anchorIsoDate = addDateMonths(calendar, startIsoDate, 0, months, 0);
1179
+ sign * compareNumbers(day0, day1) > 0 && (months -= sign, anchorIsoDate = addDateMonths(calendar, startIsoDate, 0, months, 0)), days = diffDays(anchorIsoDate, endIsoDate);
1180
+ }
1181
+ return {
1182
+ ...durationFieldDefaults,
1183
+ months,
1184
+ days
1185
+ };
1186
+ }
1187
+ const { year: year0, month: month0, day: day0 } = yearMonthDayStart;
1188
+ let { year: year1, month: month1, day: day1 } = yearMonthDayEnd;
1189
+ let yearDiff = year1 - year0;
1190
+ let monthDiff = month1 - month0;
1191
+ let dayDiff = day1 - day0;
1192
+ if (yearDiff || monthDiff) {
1193
+ const sign = Math.sign(yearDiff || monthDiff);
1194
+ let daysInMonth1 = computeCalendarDaysInMonthForYearMonth(calendar, year1, month1);
1195
+ let dayCorrect = 0;
1196
+ if (Math.sign(day1 - day0) === -sign) {
1197
+ const origDaysInMonth1 = daysInMonth1;
1198
+ const yearMonthParts = calendar ? calendar.N(year1, month1, -sign) : addIsoMonths(year1, month1, -sign);
1199
+ ({year: year1, month: month1} = yearMonthParts), yearDiff = year1 - year0, monthDiff = month1 - month0, daysInMonth1 = computeCalendarDaysInMonthForYearMonth(calendar, year1, month1), dayCorrect = sign < 0 ? -origDaysInMonth1 : daysInMonth1;
1200
+ }
1201
+ if (dayDiff = day1 - Math.min(day0, daysInMonth1) + dayCorrect, yearDiff) {
1202
+ const [monthCodeNumber0, isLeapMonth0] = computeCalendarMonthCodeParts(calendar, year0, month0);
1203
+ const [monthCodeNumber1, isLeapMonth1] = computeCalendarMonthCodeParts(calendar, year1, month1);
1204
+ const leapMonthMeta = calendar ? calendar.m : void 0;
1205
+ if (monthDiff = void 0 !== leapMonthMeta && isLeapMonth0 && !isLeapMonth1 && (leapMonthMeta < 0 ? sign > 0 && monthCodeNumber1 === -leapMonthMeta : sign < 0 && monthCodeNumber1 === monthCodeNumber0) ? 0 : monthCodeNumber1 - monthCodeNumber0 || Number(isLeapMonth1) - Number(isLeapMonth0), Math.sign(monthDiff) === -sign) {
1206
+ const monthCorrect = sign < 0 && -computeCalendarMonthsInYearForYear(calendar, year1);
1207
+ year1 -= sign, yearDiff = year1 - year0, monthDiff = month1 - computeYearMovedMonth(calendar, monthCodeNumber0, isLeapMonth0, calendar ? calendar.q(year1) : void 0, 0) + (monthCorrect || computeCalendarMonthsInYearForYear(calendar, year1));
1208
+ } else if (calendar) {
1209
+ const month0Projected = computeYearMovedMonth(calendar, monthCodeNumber0, isLeapMonth0, calendar.q(year1), 0);
1210
+ monthDiff = calendar.ne(year1, month0Projected, year1, month1);
1211
+ }
1212
+ }
1213
+ }
1214
+ return {
1215
+ ...durationFieldDefaults,
1216
+ years: yearDiff,
1217
+ months: monthDiff,
1218
+ days: dayDiff
1219
+ };
1220
+ }
1221
+ function compareIsoDate(isoDate0, isoDate1) {
1222
+ return compareNumbers(isoDate0.year, isoDate1.year) || compareNumbers(isoDate0.month, isoDate1.month) || compareNumbers(isoDate0.day, isoDate1.day);
1223
+ }
1224
+ function prepareZonedEpochDiff(timeZone, slots0, slots1, sign) {
1225
+ const startIsoDate = zonedEpochSlotsToIso(slots0);
1226
+ const endIsoDate = zonedEpochSlotsToIso(slots1);
1227
+ const endEpochNano = slots1.epochNanoseconds;
1228
+ let dayCorrection = 0;
1229
+ const timeDiffNano = timeFieldsToNano(endIsoDate) - timeFieldsToNano(startIsoDate);
1230
+ Math.sign(timeDiffNano) === -sign && dayCorrection++;
1231
+ const maxDayCorrection = dayCorrection + (sign > 0 ? 1 : 0);
1232
+ for (; dayCorrection <= maxDayCorrection; dayCorrection++) {
1233
+ const midIsoDate = moveByDays(endIsoDate, dayCorrection * -sign);
1234
+ const midEpochNano = getSingleInstantFor(timeZone, combineDateAndTime(midIsoDate, startIsoDate));
1235
+ if (compareBigInts(endEpochNano, midEpochNano) !== -sign) return [
1236
+ startIsoDate,
1237
+ midIsoDate,
1238
+ Number(endEpochNano - midEpochNano)
1239
+ ];
1240
+ }
1241
+ }
1242
+ function diffEpochNanos(startEpochNano, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode) {
1243
+ return {
1244
+ ...durationFieldDefaults,
1245
+ ...nanoToDurationDayTimeFields(roundBigNanoToInc(endEpochNano - startEpochNano, computeBigNanoInc(smallestUnit, roundingInc), roundingMode), largestUnit)
1246
+ };
1247
+ }
1248
+ function diffDays(startIsoDate, endIsoDate) {
1249
+ return isoDateToEpochDays(endIsoDate) - isoDateToEpochDays(startIsoDate);
1250
+ }
1251
+ function createMarkerMoveOps(marker, markerToEpochNano, moveMarker) {
1252
+ return {
1253
+ i: marker,
1254
+ V: markerToEpochNano,
1255
+ G: moveMarker
1256
+ };
1257
+ }
1258
+ function createMarkerSpanOps(relativeToSlots) {
1259
+ const { calendar } = relativeToSlots;
1260
+ if (isZonedEpochSlots(relativeToSlots)) {
1261
+ const { timeZone } = relativeToSlots;
1262
+ return {
1263
+ i: relativeToSlots,
1264
+ V: getEpochNano,
1265
+ G: moveZonedEpochSlots,
1266
+ re: bindArgs(diffZonedEpochsExact, timeZone, calendar)
1267
+ };
1268
+ }
1269
+ return {
1270
+ i: normalizeDateTimeMarker(relativeToSlots),
1271
+ V: isoDateTimeToEpochNano,
1272
+ G: bindArgs(moveDateTime, calendar),
1273
+ re: bindArgs(diffDateTimesExact, calendar)
1274
+ };
1275
+ }
1276
+ function moveMarkerToEpochNano(markerMoveOps, durationFields) {
1277
+ return markerMoveOps.V(markerMoveOps.G(markerMoveOps.i, durationFields));
1278
+ }
1279
+ function isZonedEpochSlots(marker) {
1280
+ return "timeZone" in marker;
1281
+ }
1282
+ function checkMarkerSpanInBounds(markerSpanOps, endMarker) {
1283
+ isZonedEpochSlots(markerSpanOps.i) || (checkMarkerInBounds(markerSpanOps.i), checkMarkerInBounds(endMarker));
1284
+ }
1285
+ function normalizeDateTimeMarker(marker) {
1286
+ return combineDateAndTime(marker, "hour" in marker ? marker : timeFieldDefaults);
1287
+ }
1288
+ function checkMarkerInBounds(marker) {
1289
+ checkIsoDateTimeInBounds(normalizeDateTimeMarker(marker));
1290
+ }
1291
+ function isUniformUnit(unit, marker) {
1292
+ return unit <= 6 - (marker && isZonedEpochSlots(marker) ? 1 : 0);
1293
+ }
1294
+ function nanoToGivenFields(nano, largestUnit, fieldNames) {
1295
+ const fields = {};
1296
+ for (let unit = largestUnit; unit >= 0; unit--) {
1297
+ const divisor = unitNanoMap[unit];
1298
+ fields[fieldNames[unit]] = divTrunc(nano, divisor), nano = modTrunc(nano, divisor);
1299
+ }
1300
+ return fields;
1301
+ }
1302
+ const maxDurationSeconds = 2 ** 53;
1303
+ function addDurations(refineRelativeTo, doSubtract, slots, otherSlots, options) {
1304
+ const relativeToSlots = refineRelativeTo(require_utils.normalizeOptions(options).relativeTo);
1305
+ const maxUnit = Math.max(getMaxDurationUnit(slots), getMaxDurationUnit(otherSlots));
1306
+ if (isUniformUnit(maxUnit, relativeToSlots)) return addDayTimeDurationsChecked(doSubtract, slots, otherSlots, maxUnit);
1307
+ relativeToSlots || throwRangeError("Missing relativeTo"), doSubtract && (otherSlots = negateDurationFields(otherSlots));
1308
+ const markerSpanOps = createMarkerSpanOps(relativeToSlots);
1309
+ const midMarker = markerSpanOps.G(markerSpanOps.i, slots);
1310
+ const endMarker = markerSpanOps.G(midMarker, otherSlots);
1311
+ return createDurationSlots(markerSpanOps.re(markerSpanOps.i, endMarker, maxUnit));
1312
+ }
1313
+ function addDayTimeDurationsChecked(doSubtract, slots, otherSlots, maxUnit) {
1314
+ return createDurationSlots(validateDurationFields(((a, b, largestUnit, doSubtract) => {
1315
+ const combined = durationDayTimeToBigNano(a) + durationDayTimeToBigNano(b) * BigInt(doSubtract ? -1 : 1);
1316
+ return Number.isFinite(Number(combined / bigNanoInUtcDay)) || throwRangeError("Out-of-bounds date"), {
1317
+ ...durationFieldDefaults,
1318
+ ...nanoToDurationDayTimeFields(combined, largestUnit)
1319
+ };
1320
+ })(slots, otherSlots, maxUnit, doSubtract)));
1321
+ }
1322
+ function roundDuration(refineRelativeTo, slots, options) {
1323
+ const durationLargestUnit = getMaxDurationUnit(slots);
1324
+ const [largestUnit, smallestUnit, roundingInc, roundingMode, relativeToSlots] = ((options, defaultLargestUnit, refineRelativeTo) => {
1325
+ options = normalizeOptionsOrString(options, smallestUnitStr);
1326
+ let largestUnit = coerceLargestUnit(options);
1327
+ const relativeToInternals = refineRelativeTo(options.relativeTo);
1328
+ let roundingInc = coerceRoundingIncInteger(options);
1329
+ const roundingMode = coerceRoundingMode(options, 7);
1330
+ let smallestUnit = coerceSmallestUnit(options);
1331
+ return void 0 === largestUnit && void 0 === smallestUnit && throwRangeError("Required smallestUnit or largestUnit"), smallestUnit ??= 0, largestUnit ??= Math.max(smallestUnit, defaultLargestUnit), checkLargestSmallestUnit(largestUnit, smallestUnit), roundingInc = validateRoundingInc(roundingInc, smallestUnit, 1), roundingInc > 1 && smallestUnit > 5 && largestUnit !== smallestUnit && throwRangeError("For calendar units with roundingIncrement > 1, use largestUnit = smallestUnit"), [
1332
+ largestUnit,
1333
+ smallestUnit,
1334
+ roundingInc,
1335
+ roundingMode,
1336
+ relativeToInternals
1337
+ ];
1338
+ })(options, durationLargestUnit, refineRelativeTo);
1339
+ if (!relativeToSlots && Math.max(durationLargestUnit, largestUnit) <= 6) return createDurationSlots(validateDurationFields(((durationFields, largestUnit, smallestUnit, roundingInc, roundingMode) => {
1340
+ const roundedBigNano = roundBigNanoToInc(durationDayTimeToBigNano(durationFields), computeBigNanoInc(smallestUnit, roundingInc), roundingMode);
1341
+ return {
1342
+ ...durationFieldDefaults,
1343
+ ...nanoToDurationDayTimeFields(roundedBigNano, largestUnit)
1344
+ };
1345
+ })(slots, largestUnit, smallestUnit, roundingInc, roundingMode)));
1346
+ const needsZonedDayLength = relativeToSlots && isZonedEpochSlots(relativeToSlots) && largestUnit >= 6 && smallestUnit < 6;
1347
+ if (!slots.sign && !needsZonedDayLength) return slots;
1348
+ relativeToSlots || throwRangeError("Missing relativeTo");
1349
+ const markerSpanOps = createMarkerSpanOps(relativeToSlots);
1350
+ const endMarker = markerSpanOps.G(markerSpanOps.i, slots);
1351
+ checkMarkerSpanInBounds(markerSpanOps, endMarker);
1352
+ let balancedDuration = markerSpanOps.re(markerSpanOps.i, endMarker, largestUnit);
1353
+ return balancedDuration = roundRelativeDuration(balancedDuration, markerSpanOps.V(endMarker), largestUnit, smallestUnit, roundingInc, roundingMode, markerSpanOps), createDurationSlots(balancedDuration);
1354
+ }
1355
+ function absDuration(slots) {
1356
+ return -1 === slots.sign ? negateDuration(slots) : slots;
1357
+ }
1358
+ function negateDuration(slots) {
1359
+ return createDurationSlots(negateDurationFields(slots));
1360
+ }
1361
+ function negateDurationFields(fields) {
1362
+ const res = {};
1363
+ for (const fieldName of durationFieldNamesAsc) res[fieldName] = -1 * fields[fieldName] || 0;
1364
+ return res;
1365
+ }
1366
+ function computeDurationSign(fields, fieldNames = durationFieldNamesAsc) {
1367
+ let sign = 0;
1368
+ for (const fieldName of fieldNames) {
1369
+ const fieldSign = Math.sign(fields[fieldName]);
1370
+ fieldSign && (sign && sign !== fieldSign && throwRangeError("Cannot mix duration signs"), sign = fieldSign);
1371
+ }
1372
+ return sign;
1373
+ }
1374
+ function validateDurationFields(fields) {
1375
+ for (const calendarUnit of durationCalendarFieldNamesAsc) clampEntity(calendarUnit, fields[calendarUnit], -4294967295, 4294967295, 1);
1376
+ const bigNano = durationDayTimeToBigNano(fields);
1377
+ return validateDurationTimeUnit(Number(bigNano / bigNanoInSec)), fields;
1378
+ }
1379
+ function validateDurationTimeUnit(n) {
1380
+ Number.isSafeInteger(n) || throwRangeError("Out-of-bounds duration");
1381
+ }
1382
+ function durationDayTimeToBigNano(fields) {
1383
+ return BigInt(fields.days) * bigNanoInUtcDay + durationTimeToBigNano(fields);
1384
+ }
1385
+ function durationTimeToBigNano(fields) {
1386
+ return BigInt(fields.hours) * bigNanoInHour + BigInt(fields.minutes) * bigNanoInMinute + durationSubMinuteToBigNano(fields);
1387
+ }
1388
+ function durationSubMinuteToBigNano(fields) {
1389
+ return BigInt(fields.seconds) * bigNanoInSec + BigInt(fields.milliseconds) * bigNanoInMilli + BigInt(fields.microseconds) * bigNanoInMicro + BigInt(fields.nanoseconds);
1390
+ }
1391
+ function nanoToDurationDayTimeFields(bigNano, largestUnit = 6) {
1392
+ const days = Number(bigNano / bigNanoInUtcDay);
1393
+ const timeNano = Number(bigNano % bigNanoInUtcDay);
1394
+ const unitNano = unitNanoMap[largestUnit];
1395
+ const largestUnitVal = largestUnit <= 3 ? Number(bigNano / BigInt(unitNano)) : days * (nanoInUtcDay / unitNano) + divTrunc(timeNano, unitNano);
1396
+ Number.isFinite(largestUnitVal) || throwRangeError("Out-of-bounds date"), largestUnit <= 3 && Math.abs(largestUnitVal) / (nanoInSec / unitNanoMap[largestUnit]) >= maxDurationSeconds && throwRangeError("Out-of-bounds date");
1397
+ const dayTimeFields = nanoToGivenFields(timeNano, largestUnit, durationFieldNamesAsc);
1398
+ return dayTimeFields[durationFieldNamesAsc[largestUnit]] = largestUnitVal, dayTimeFields;
1399
+ }
1400
+ function nanoToDurationTimeFields(nano, largestUnit = 5) {
1401
+ return nanoToGivenFields(nano, largestUnit, durationFieldNamesAsc);
1402
+ }
1403
+ function durationHasDateParts(fields) {
1404
+ return Boolean(computeDurationSign(fields, durationDateFieldNamesAsc));
1405
+ }
1406
+ function getMaxDurationUnit(fields) {
1407
+ let unit = 9;
1408
+ for (; unit > 0 && !fields[durationFieldNamesAsc[unit]]; unit--);
1409
+ return unit;
1410
+ }
1411
+ function compareInstants(instantSlots0, instantSlots1) {
1412
+ return compareBigInts(instantSlots0.epochNanoseconds, instantSlots1.epochNanoseconds);
1413
+ }
1414
+ function compareZonedDateTimes(zonedDateTimeSlots0, zonedDateTimeSlots1) {
1415
+ return compareBigInts(zonedDateTimeSlots0.epochNanoseconds, zonedDateTimeSlots1.epochNanoseconds);
1416
+ }
1417
+ function compareDurations(refineRelativeTo, durationSlots0, durationSlots1, options) {
1418
+ const relativeToSlots = refineRelativeTo(require_utils.normalizeOptions(options).relativeTo);
1419
+ const maxUnit = Math.max(getMaxDurationUnit(durationSlots0), getMaxDurationUnit(durationSlots1));
1420
+ if (allPropsEqual(durationFieldNamesAsc, durationSlots0, durationSlots1)) return 0;
1421
+ if (isUniformUnit(maxUnit, relativeToSlots)) return compareBigInts(durationDayTimeToBigNano(durationSlots0), durationDayTimeToBigNano(durationSlots1));
1422
+ relativeToSlots || throwRangeError("Missing relativeTo");
1423
+ const markerSpanOps = createMarkerSpanOps(relativeToSlots);
1424
+ return compareBigInts(moveMarkerToEpochNano(markerSpanOps, durationSlots0), moveMarkerToEpochNano(markerSpanOps, durationSlots1));
1425
+ }
1426
+ function compareIsoDateTimeFields(isoDateTime0, isoDateTime1) {
1427
+ return compareIsoDateFields(isoDateTime0, isoDateTime1) || compareTimeFields(isoDateTime0, isoDateTime1);
1428
+ }
1429
+ function compareIsoDateFields(isoFields0, isoFields1) {
1430
+ return compareNumbers(isoDateToEpochDays(isoFields0), isoDateToEpochDays(isoFields1));
1431
+ }
1432
+ function compareTimeFields(isoFields0, isoFields1) {
1433
+ return compareNumbers(timeFieldsToNano(isoFields0), timeFieldsToNano(isoFields1));
1434
+ }
1435
+ function instantsEqual(instantSlots0, instantSlots1) {
1436
+ return !compareInstants(instantSlots0, instantSlots1);
1437
+ }
1438
+ function zonedDateTimesEqual(zonedDateTimeSlots0, zonedDateTimeSlots1) {
1439
+ return !compareZonedDateTimes(zonedDateTimeSlots0, zonedDateTimeSlots1) && zonedDateTimeSlots0.timeZone.o === zonedDateTimeSlots1.timeZone.o && zonedDateTimeSlots0.calendar === zonedDateTimeSlots1.calendar;
1440
+ }
1441
+ function plainDateTimesEqual(plainDateTimeSlots0, plainDateTimeSlots1) {
1442
+ return !compareIsoDateTimeFields(plainDateTimeSlots0, plainDateTimeSlots1) && plainDateTimeSlots0.calendar === plainDateTimeSlots1.calendar;
1443
+ }
1444
+ function plainDatesEqual(plainDateSlots0, plainDateSlots1) {
1445
+ return !compareIsoDateFields(plainDateSlots0, plainDateSlots1) && plainDateSlots0.calendar === plainDateSlots1.calendar;
1446
+ }
1447
+ function plainYearMonthsEqual(plainYearMonthSlots0, plainYearMonthSlots1) {
1448
+ return !compareIsoDateFields(plainYearMonthSlots0, plainYearMonthSlots1) && plainYearMonthSlots0.calendar === plainYearMonthSlots1.calendar;
1449
+ }
1450
+ function plainMonthDaysEqual(plainMonthDaySlots0, plainMonthDaySlots1) {
1451
+ return !compareIsoDateFields(plainMonthDaySlots0, plainMonthDaySlots1) && plainMonthDaySlots0.calendar === plainMonthDaySlots1.calendar;
1452
+ }
1453
+ function plainTimesEqual(plainTimeSlots0, plainTimeSlots1) {
1454
+ return !compareTimeFields(plainTimeSlots0, plainTimeSlots1);
1455
+ }
1456
+ function getCalendarEraOrigins(calendar) {
1457
+ return 0 === calendar ? gregoryEraOrigins : calendar ? calendar.l : void 0;
1458
+ }
1459
+ function getCalendarFieldNames(calendar, fieldNames, fieldNamesWithEra = fieldNames) {
1460
+ return getCalendarEraOrigins(calendar) ? fieldNamesWithEra : fieldNames;
1461
+ }
1462
+ function resolveCalendarYear(calendar, fields) {
1463
+ const exoticCalendar = calendar || void 0;
1464
+ const eraOrigins = getCalendarEraOrigins(calendar);
1465
+ let { era, eraYear, year } = fields;
1466
+ if (void 0 !== year && (year = require_utils.toIntegerWithTrunc(year, "year")), void 0 !== eraYear && (eraYear = require_utils.toIntegerWithTrunc(eraYear, "eraYear")), void 0 !== era || void 0 !== eraYear) {
1467
+ void 0 !== era && void 0 !== eraYear || throwTypeError("Mismatching era/eraYear"), eraOrigins || throwRangeError("Forbidden era/eraYear");
1468
+ const normalizedEra = normalizeEraName(era);
1469
+ const eraOrigin = eraOrigins[normalizedEra];
1470
+ void 0 === eraOrigin && throwRangeError(((era) => `Invalid era: ${era}`)(era));
1471
+ const yearByEra = exoticCalendar?.te ? exoticCalendar.te(eraYear, normalizedEra, eraOrigin) : eraYearToYear(eraYear, eraOrigin);
1472
+ void 0 !== year && year !== yearByEra && throwRangeError("Mismatching year/eraYear"), year = yearByEra;
1473
+ } else void 0 === year && throwTypeError(missingYear(eraOrigins));
1474
+ return year;
1475
+ }
1476
+ function resolveCalendarMonth(calendar, fields, year, overflow, monthCodeParts) {
1477
+ let { month, monthCode } = fields;
1478
+ if (void 0 !== monthCode) {
1479
+ const monthByCode = ((calendar, monthCode, year, overflow, monthCodeParts = parseMonthCode(monthCode)) => {
1480
+ const leapMonth = calendar ? calendar.q(year) : void 0;
1481
+ const [monthCodeNumber, wantsLeapMonth] = monthCodeParts;
1482
+ let month = monthCodeNumberToMonth(monthCodeNumber, wantsLeapMonth, leapMonth);
1483
+ if (wantsLeapMonth) {
1484
+ const leapMonthMeta = calendar ? calendar.m : void 0;
1485
+ void 0 === leapMonthMeta && throwRangeError(invalidLeapMonth), leapMonthMeta > 0 ? (month > leapMonthMeta && throwRangeError(invalidLeapMonth), leapMonth !== month && (1 === overflow && throwRangeError(invalidLeapMonth), month = monthCodeNumberToMonth(monthCodeNumber, 0, leapMonth))) : (month !== -leapMonthMeta && throwRangeError(invalidLeapMonth), void 0 === leapMonth && 1 === overflow && throwRangeError(invalidLeapMonth));
1486
+ }
1487
+ return month;
1488
+ })(calendar, monthCode, year, overflow, monthCodeParts);
1489
+ void 0 !== month && month !== monthByCode && throwRangeError("Mismatching month/monthCode"), month = monthByCode, overflow = 1;
1490
+ } else void 0 === month && throwTypeError("Missing month/monthCode");
1491
+ return clampEntity("month", month, 1, computeCalendarMonthsInYearForYear(calendar, year), overflow);
1492
+ }
1493
+ function resolveCalendarDay(calendar, fields, month, year, overflow) {
1494
+ return clampProp(fields, "day", 1, computeCalendarDaysInMonthForYearMonth(calendar, year, month), overflow);
1495
+ }
1496
+ function eraYearToYear(eraYear, eraOrigin) {
1497
+ return (eraOrigin + eraYear) * (Math.sign(eraOrigin) || 1) || 0;
1498
+ }
1499
+ function resolveTimeFields(fields, overflow) {
1500
+ return constrainTimeFields(pluckProps(timeFieldNamesAsc, {
1501
+ ...timeFieldDefaults,
1502
+ ...fields
1503
+ }), overflow);
1504
+ }
1505
+ const offsetRegExp = /* @__PURE__ */ createRegExp("([+-])(\\d{2})(?::?(\\d{2})(?::?(\\d{2})(?:[.,](\\d{1,9}))?)?)?");
1506
+ function parseOffsetNano(s) {
1507
+ const offsetNano = parseOffsetNanoMaybe(s);
1508
+ return void 0 === offsetNano && throwRangeError(failedParse(s)), offsetNano;
1509
+ }
1510
+ function parseOffsetNanoMaybe(s, onlyHourMinute) {
1511
+ const parts = offsetRegExp.exec(s);
1512
+ if (parts && ((s) => ((s) => {
1513
+ "T" !== s[0] && "t" !== s[0] || (s = s.slice(1));
1514
+ const fractionIndex = s.search(/[.,]/);
1515
+ const main = fractionIndex < 0 ? s : s.slice(0, fractionIndex);
1516
+ const parts = main.split(":");
1517
+ return 1 === parts.length ? /^(?:\d{2}|\d{4}|\d{6})$/i.test(main) : (2 === parts.length || 3 === parts.length) && parts.every((part) => 2 === part.length && /^\d{2}$/i.test(part));
1518
+ })(s.slice(1)))(parts[0])) return ((parts, onlyHourMinute) => {
1519
+ const firstSubMinutePart = parts[4] || parts[5];
1520
+ onlyHourMinute && firstSubMinutePart && throwRangeError(invalidSubstring(firstSubMinutePart));
1521
+ return offsetNano = (parseInt0(parts[2]) * nanoInHour + parseInt0(parts[3]) * nanoInMinute + parseInt0(parts[4]) * nanoInSec + parseSubsecNano(parts[5] || "")) * parseSign(parts[1]), Math.abs(offsetNano) >= 864e11 && throwRangeError("Out-of-bounds offset"), offsetNano;
1522
+ var offsetNano;
1523
+ })(parts, onlyHourMinute);
1524
+ }
1525
+ const dateFieldRefiners = {
1526
+ era: toStringViaPrimitive,
1527
+ month: require_utils.toPositiveIntegerWithTruncation,
1528
+ monthCode(monthCode, entityName = "monthCode") {
1529
+ return ((monthCode, entityName) => {
1530
+ if ("string" == typeof monthCode) return monthCode;
1531
+ if (monthCode && "object" == typeof monthCode) {
1532
+ const monthCodeToString = monthCode.toString;
1533
+ if ("function" == typeof monthCodeToString) return requireString(monthCodeToString.call(monthCode), entityName);
1534
+ }
1535
+ return requireString(monthCode, entityName);
1536
+ })(monthCode, entityName);
1537
+ },
1538
+ day: require_utils.toPositiveIntegerWithTruncation
1539
+ };
1540
+ const timeFieldRefiners = /* @__PURE__ */ zipPropsConst(timeFieldNamesAsc, require_utils.toIntegerWithTrunc);
1541
+ const durationFieldRefiners = /* @__PURE__ */ zipPropsConst(durationFieldNamesAsc, toStrictInteger);
1542
+ const offsetFieldRefiners = { offset(offsetString) {
1543
+ return parseOffsetNano(toStringViaPrimitive(offsetString));
1544
+ } };
1545
+ const dateTimeFieldRefiners = /* @__PURE__ */ Object.assign({}, dateFieldRefiners, timeFieldRefiners);
1546
+ const zonedDateTimeFieldRefiners = /* @__PURE__ */ Object.assign({}, dateTimeFieldRefiners, offsetFieldRefiners);
1547
+ function readAndRefineBagFields(bag, validFieldNames, fieldRefiners, requiredFieldNames, disallowEmpty = !requiredFieldNames) {
1548
+ const res = {};
1549
+ let anyMatching = 0;
1550
+ for (const fieldName of validFieldNames) {
1551
+ let fieldVal = bag[fieldName];
1552
+ if (void 0 !== fieldVal) {
1553
+ anyMatching = 1;
1554
+ const refiner = fieldRefiners[fieldName];
1555
+ refiner && (fieldVal = refiner(fieldVal, fieldName)), res[fieldName] = fieldVal;
1556
+ } else requiredFieldNames && requiredFieldNames.includes(fieldName) && throwTypeError(missingField(fieldName));
1557
+ }
1558
+ return disallowEmpty && !anyMatching && throwTypeError(noValidFields(validFieldNames)), res;
1559
+ }
1560
+ function createPlainDateTimeFromRefinedFields(isoDate, time = timeFieldDefaults, calendar) {
1561
+ const isoDateTime = combineDateAndTime(isoDate, time);
1562
+ return checkIsoDateTimeInBounds(isoDateTime), createDateTimeSlots(isoDateTime, calendar);
1563
+ }
1564
+ function createPlainDateFromFields(calendar, fields, options) {
1565
+ return createPlainDateFromPreparedFields(calendar, fields, prepareDateFields(calendar, fields), refineOverflowOptions(options));
1566
+ }
1567
+ function createPlainDateFromFieldsWithOptionsRefiner(calendar, fields, refineOptions) {
1568
+ const prepared = prepareDateFields(calendar, fields);
1569
+ const refinedOptions = refineOptions();
1570
+ return [createPlainDateFromPreparedFields(calendar, fields, prepared, refinedOptions[0]), ...refinedOptions];
1571
+ }
1572
+ function createPlainDateFromPreparedFields(calendar, fields, prepared, overflow) {
1573
+ const year = prepared[1];
1574
+ const month = resolveCalendarMonth(calendar, fields, year, overflow, prepared[0]);
1575
+ return createDateSlots(checkIsoDateInBounds(computeCalendarIsoFieldsFromParts(calendar, year, month, resolveCalendarDay(calendar, fields, month, year, overflow))), calendar);
1576
+ }
1577
+ function parseMonthCodeField(fields) {
1578
+ if (void 0 !== fields.monthCode) return parseMonthCode(fields.monthCode);
1579
+ }
1580
+ function prepareDateFields(calendar, fields) {
1581
+ const eraOrigins = getCalendarEraOrigins(calendar);
1582
+ return void 0 !== fields.year || void 0 !== fields.era && void 0 !== fields.eraYear || throwTypeError(missingYear(eraOrigins)), void 0 === fields.monthCode && void 0 === fields.month && throwTypeError("Missing month/monthCode"), void 0 === fields.day && throwTypeError(missingField("day")), [parseMonthCodeField(fields), resolveCalendarYear(calendar, fields)];
1583
+ }
1584
+ function createPlainYearMonthFromFields(calendar, fields, options) {
1585
+ const eraOrigins = getCalendarEraOrigins(calendar);
1586
+ void 0 !== fields.year || void 0 !== fields.era && void 0 !== fields.eraYear || throwTypeError(missingYear(eraOrigins)), void 0 === fields.monthCode && void 0 === fields.month && throwTypeError("Missing month/monthCode");
1587
+ const monthCodeParts = parseMonthCodeField(fields);
1588
+ const year = resolveCalendarYear(calendar, fields);
1589
+ return createDateSlots(checkIsoYearMonthInBounds(computeCalendarIsoFieldsFromParts(calendar, year, resolveCalendarMonth(calendar, fields, year, refineOverflowOptions(options), monthCodeParts), 1)), calendar);
1590
+ }
1591
+ function createPlainMonthDayFromFields(calendar, fields, options) {
1592
+ const isIso = calendar === void 0;
1593
+ const eraOrigins = getCalendarEraOrigins(calendar);
1594
+ void 0 === fields.day && throwTypeError(missingField("day")), isIso || void 0 === fields.month || void 0 !== fields.year || void 0 !== fields.era && void 0 !== fields.eraYear || throwTypeError(missingYear(eraOrigins));
1595
+ const monthCodeParts = parseMonthCodeField(fields);
1596
+ let yearMaybe = void 0 !== fields.eraYear || void 0 !== fields.year ? resolveCalendarYear(calendar, fields) : void 0;
1597
+ const overflow = refineOverflowOptions(options);
1598
+ let day;
1599
+ let monthCodeNumber;
1600
+ let isLeapMonth;
1601
+ if (void 0 === yearMaybe && isIso && (yearMaybe = 1972), void 0 !== yearMaybe) {
1602
+ isIso || checkIsoDateInBounds(computeCalendarIsoFieldsFromParts(calendar, yearMaybe, 1, 1));
1603
+ const month = resolveCalendarMonth(calendar, fields, yearMaybe, overflow, monthCodeParts);
1604
+ day = resolveCalendarDay(calendar, fields, month, yearMaybe, overflow), [monthCodeNumber, isLeapMonth] = computeCalendarMonthCodeParts(calendar, yearMaybe, month);
1605
+ } else {
1606
+ void 0 === fields.monthCode && throwTypeError("Missing month/monthCode"), [monthCodeNumber, isLeapMonth] = monthCodeParts;
1607
+ const referenceYear = calendar ? calendar.ge : 1972;
1608
+ if (void 0 !== referenceYear) day = resolveCalendarDay(calendar, fields, resolveCalendarMonth(calendar, fields, referenceYear, overflow, monthCodeParts), referenceYear, overflow);
1609
+ else {
1610
+ const constrainedDay = 0 === overflow && calendar ? calendar.ke?.(monthCodeNumber, isLeapMonth, fields.day) : void 0;
1611
+ day = void 0 !== constrainedDay ? constrainedDay : fields.day;
1612
+ }
1613
+ }
1614
+ isLeapMonth && ((calendar && calendar.Z?.[monthCodeNumber]) ?? Infinity) < fields.day && (1 === overflow && throwRangeError(invalidLeapMonth), isLeapMonth = 0, day = constrainToRange(fields.day, 1, (calendar && calendar.X) ?? Infinity));
1615
+ let res = calendar ? calendar.v(monthCodeNumber, Boolean(isLeapMonth), day) : computeIsoYearMonthFieldsForMonthDay(monthCodeNumber, Boolean(isLeapMonth));
1616
+ for (; !res && 0 === overflow && day > 1;) day--, res = calendar ? calendar.v(monthCodeNumber, Boolean(isLeapMonth), day) : computeIsoYearMonthFieldsForMonthDay(monthCodeNumber, Boolean(isLeapMonth));
1617
+ res || throwRangeError("Cannot guess year");
1618
+ const { year: finalYear, month: finalMonth } = res;
1619
+ return createDateSlots(checkIsoDateInBounds(computeCalendarIsoFieldsFromParts(calendar, finalYear, finalMonth, day)), calendar);
1620
+ }
1621
+ const RawDateTimeFormat = Intl.DateTimeFormat;
1622
+ function formatEpochMilliToPartsRecord(intlFormat, epochMilli) {
1623
+ epochMilli < -864e13 && throwRangeError("Out-of-bounds date");
1624
+ const parts = intlFormat.formatToParts(epochMilli);
1625
+ const hash = {};
1626
+ for (const part of parts) hash[part.type] = part.value;
1627
+ return hash;
1628
+ }
1629
+ const timeZonePeriodDaysByName = {
1630
+ "El_Aaiun": 17,
1631
+ "Tucuman": 12,
1632
+ "Tirane": 11,
1633
+ "Riga": 10,
1634
+ "Simferopol": 9,
1635
+ "Vienna": 9,
1636
+ "Tunis": 8,
1637
+ "Boa_Vista": 6,
1638
+ "Fortaleza": 6,
1639
+ "Maceio": 6,
1640
+ "Noronha": 6,
1641
+ "Recife": 6,
1642
+ "Gaza": 6,
1643
+ "Hebron": 6,
1644
+ "DeNoronha": 6
1645
+ };
1646
+ const minPossibleTransitionSec = -388152e4;
1647
+ function refineTimeDisplayTuple(options, maxSmallestUnit = 4) {
1648
+ const subsecDigits = coerceFractionalSecondDigits(options);
1649
+ return [coerceRoundingMode(options, 4), ...resolveSmallestUnitAndSubsecDigits(validateUnitRange(smallestUnitStr, coerceSmallestUnit(options), 0, maxSmallestUnit), subsecDigits)];
1650
+ }
1651
+ function refineDateDisplayOptions(options) {
1652
+ return coerceCalendarDisplay(require_utils.normalizeOptions(options));
1653
+ }
1654
+ function refineTimeDisplayOptions(options, maxSmallestUnit) {
1655
+ return refineTimeDisplayTuple(require_utils.normalizeOptions(options), maxSmallestUnit);
1656
+ }
1657
+ function resolveSmallestUnitAndSubsecDigits(smallestUnit, subsecDigits) {
1658
+ return null != smallestUnit ? [unitNanoMap[smallestUnit], smallestUnit < 4 ? 9 - 3 * smallestUnit : -1] : [void 0 === subsecDigits ? 1 : 10 ** (9 - subsecDigits), subsecDigits];
1659
+ }
1660
+ function formatInstantIso(refineTimeZoneString, instantSlots, options) {
1661
+ const [timeZoneArg, roundingMode, nanoInc, subsecDigits] = ((options) => {
1662
+ const subsecDigits = coerceFractionalSecondDigits(options = require_utils.normalizeOptions(options));
1663
+ const roundingMode = coerceRoundingMode(options, 4);
1664
+ const smallestUnit = coerceSmallestUnit(options);
1665
+ return [
1666
+ options.timeZone,
1667
+ roundingMode,
1668
+ ...resolveSmallestUnitAndSubsecDigits(validateUnitRange(smallestUnitStr, smallestUnit, 0, 4), subsecDigits)
1669
+ ];
1670
+ })(options);
1671
+ const providedTimeZone = void 0 !== timeZoneArg;
1672
+ return ((providedTimeZone, timeZone, epochNano, roundingMode, nanoInc, subsecDigits) => {
1673
+ epochNano = roundBigNanoToDayOriginInc(epochNano, BigInt(nanoInc), roundingMode);
1674
+ const offsetNano = timeZone.C(epochNano);
1675
+ return formatIsoDateTimeFields(epochNanoToIsoDateTime(epochNano + BigInt(offsetNano)), subsecDigits) + (providedTimeZone ? formatOffsetNano(roundToMinute(offsetNano)) : "Z");
1676
+ })(providedTimeZone, queryTimeZone(providedTimeZone ? refineTimeZoneString(timeZoneArg) : "UTC"), instantSlots.epochNanoseconds, roundingMode, nanoInc, subsecDigits);
1677
+ }
1678
+ function formatZonedDateTimeIso(zonedDateTimeSlots0, options) {
1679
+ const displayOptions = ((options) => {
1680
+ options = require_utils.normalizeOptions(options);
1681
+ const calendarDisplay = coerceCalendarDisplay(options);
1682
+ const subsecDigits = coerceFractionalSecondDigits(options);
1683
+ const offsetDisplay = coerceOffsetDisplay(options);
1684
+ const roundingMode = coerceRoundingMode(options, 4);
1685
+ const smallestUnit = coerceSmallestUnit(options);
1686
+ return [
1687
+ calendarDisplay,
1688
+ coerceTimeZoneDisplay(options),
1689
+ offsetDisplay,
1690
+ roundingMode,
1691
+ ...resolveSmallestUnitAndSubsecDigits(validateUnitRange(smallestUnitStr, smallestUnit, 0, 4), subsecDigits)
1692
+ ];
1693
+ })(options);
1694
+ return ((calendar, timeZoneId, timeZone, epochNano, calendarDisplay, timeZoneDisplay, offsetDisplay, roundingMode, nanoInc, subsecDigits) => {
1695
+ epochNano = roundBigNanoToDayOriginInc(epochNano, BigInt(nanoInc), roundingMode);
1696
+ const offsetNano = timeZone.C(epochNano);
1697
+ return formatIsoDateTimeFields(epochNanoToIsoDateTime(epochNano + BigInt(offsetNano)), subsecDigits) + formatOffsetNano(roundToMinute(offsetNano), offsetDisplay) + formatTimeZone(timeZoneId, timeZoneDisplay) + formatCalendar(calendar, calendarDisplay);
1698
+ })(zonedDateTimeSlots0.calendar, zonedDateTimeSlots0.timeZone.id, zonedDateTimeSlots0.timeZone, zonedDateTimeSlots0.epochNanoseconds, ...displayOptions);
1699
+ }
1700
+ function formatPlainDateTimeIso(plainDateTimeSlots0, options) {
1701
+ const displayOptions = ((options) => (options = require_utils.normalizeOptions(options), [coerceCalendarDisplay(options), ...refineTimeDisplayTuple(options)]))(options);
1702
+ return ((calendar, isoDateTime, calendarDisplay, roundingMode, nanoInc, subsecDigits) => formatIsoDateTimeFields(roundDateTimeToNano(isoDateTime, nanoInc, roundingMode), subsecDigits) + formatCalendar(calendar, calendarDisplay))(plainDateTimeSlots0.calendar, plainDateTimeSlots0, ...displayOptions);
1703
+ }
1704
+ function formatPlainDateIso(plainDateSlots, options) {
1705
+ return calendar = plainDateSlots.calendar, isoDate = plainDateSlots, calendarDisplay = refineDateDisplayOptions(options), formatIsoDateFields(isoDate) + formatCalendar(calendar, calendarDisplay);
1706
+ var calendar, isoDate, calendarDisplay;
1707
+ }
1708
+ function formatPlainYearMonthIso(plainYearMonthSlots, options) {
1709
+ return formatDateLikeIso(plainYearMonthSlots.calendar, formatIsoYearMonthFields, plainYearMonthSlots, refineDateDisplayOptions(options));
1710
+ }
1711
+ function formatPlainMonthDayIso(plainMonthDaySlots, options) {
1712
+ return formatDateLikeIso(plainMonthDaySlots.calendar, formatIsoMonthDayFields, plainMonthDaySlots, refineDateDisplayOptions(options));
1713
+ }
1714
+ function formatDateLikeIso(calendar, formatSimple, isoDate, calendarDisplay) {
1715
+ return 1 === calendarDisplay ? calendar === void 0 ? formatSimple(isoDate) : formatIsoDateFields(isoDate) : calendarDisplay > 1 || 0 === calendarDisplay && calendar !== void 0 ? formatIsoDateFields(isoDate) + formatCalendarId(getCalendarSlotId(calendar), 2 === calendarDisplay) : formatSimple(isoDate);
1716
+ }
1717
+ function formatPlainTimeIso(slots, options) {
1718
+ return ((fields, roundingMode, nanoInc, subsecDigits) => formatTimeFields(roundTimeToNano(fields, nanoInc, roundingMode)[0], subsecDigits))(slots, ...refineTimeDisplayOptions(options));
1719
+ }
1720
+ function formatDurationIso(slots, options) {
1721
+ const [roundingMode, nanoInc, subsecDigits] = refineTimeDisplayOptions(options, 3);
1722
+ return nanoInc > 1 && validateDurationFields(slots = {
1723
+ ...slots,
1724
+ ...roundDayTimeDurationByInc(slots, nanoInc, roundingMode)
1725
+ }), formatDurationSlots(slots, subsecDigits);
1726
+ }
1727
+ function formatDurationSlots(durationSlots, subsecDigits) {
1728
+ const { sign } = durationSlots;
1729
+ const abs = -1 === sign ? negateDurationFields(durationSlots) : durationSlots;
1730
+ const { hours, minutes } = abs;
1731
+ const bigNano = durationSubMinuteToBigNano(abs);
1732
+ const wholeSec = Number(bigNano / bigNanoInSec);
1733
+ const subsecNano = Number(bigNano % bigNanoInSec);
1734
+ validateDurationTimeUnit(wholeSec);
1735
+ const subsecNanoString = formatSubsecNano(subsecNano, subsecDigits);
1736
+ const forceSec = subsecDigits >= 0 || !sign || subsecNanoString;
1737
+ return (sign < 0 ? "-" : "") + "P" + formatDurationFragments({
1738
+ "Y": formatDurationNumber(abs.years),
1739
+ "M": formatDurationNumber(abs.months),
1740
+ "W": formatDurationNumber(abs.weeks),
1741
+ "D": formatDurationNumber(abs.days)
1742
+ }) + (hours || minutes || wholeSec || forceSec ? "T" + formatDurationFragments({
1743
+ "H": formatDurationNumber(hours),
1744
+ "M": formatDurationNumber(minutes),
1745
+ "S": formatDurationNumber(wholeSec, forceSec) + subsecNanoString
1746
+ }) : "");
1747
+ }
1748
+ function formatDurationFragments(fragObj) {
1749
+ const parts = [];
1750
+ for (const fragName in fragObj) {
1751
+ const fragVal = fragObj[fragName];
1752
+ fragVal && parts.push(fragVal, fragName);
1753
+ }
1754
+ return parts.join("");
1755
+ }
1756
+ function formatDurationNumber(n, force) {
1757
+ if (!n && !force) return "";
1758
+ const options = Object.create(null);
1759
+ return options.useGrouping = 0, n.toLocaleString("fullwide", options);
1760
+ }
1761
+ function formatIsoDateTimeFields(isoDateTime, subsecDigits) {
1762
+ return formatIsoDateFields(isoDateTime) + "T" + formatTimeFields(isoDateTime, subsecDigits);
1763
+ }
1764
+ function formatIsoDateFields(isoDateFields) {
1765
+ return formatIsoYearMonthFields(isoDateFields) + "-" + padNumber2(isoDateFields.day);
1766
+ }
1767
+ function formatIsoYearMonthFields(isoDateFields) {
1768
+ const { year } = isoDateFields;
1769
+ return (year < 0 || year > 9999 ? getSignStr(year) + padNumber(6, Math.abs(year)) : padNumber(4, year)) + "-" + padNumber2(isoDateFields.month);
1770
+ }
1771
+ function formatIsoMonthDayFields(isoDateFields) {
1772
+ return padNumber2(isoDateFields.month) + "-" + padNumber2(isoDateFields.day);
1773
+ }
1774
+ function formatTimeFields(timeFields, subsecDigits) {
1775
+ const parts = [padNumber2(timeFields.hour), padNumber2(timeFields.minute)];
1776
+ return -1 !== subsecDigits && parts.push(padNumber2(timeFields.second) + ((millisecond, microsecond, nanosecond, subsecDigits) => formatSubsecNano(millisecond * nanoInMilli + microsecond * nanoInMicro + nanosecond, subsecDigits))(timeFields.millisecond, timeFields.microsecond, timeFields.nanosecond, subsecDigits)), parts.join(":");
1777
+ }
1778
+ function formatOffsetNano(offsetNano, offsetDisplay = 0) {
1779
+ if (1 === offsetDisplay) return "";
1780
+ const [hour, nanoRemainder0] = divModFloor(Math.abs(offsetNano), nanoInHour);
1781
+ const [minute, nanoRemainder1] = divModFloor(nanoRemainder0, nanoInMinute);
1782
+ const [second, nanoRemainder2] = divModFloor(nanoRemainder1, nanoInSec);
1783
+ return getSignStr(offsetNano) + padNumber2(hour) + ":" + padNumber2(minute) + (second || nanoRemainder2 ? ":" + padNumber2(second) + formatSubsecNano(nanoRemainder2) : "");
1784
+ }
1785
+ function formatTimeZone(timeZoneId, timeZoneDisplay) {
1786
+ return 1 !== timeZoneDisplay ? "[" + (2 === timeZoneDisplay ? "!" : "") + timeZoneId + "]" : "";
1787
+ }
1788
+ function formatCalendar(calendar, calendarDisplay) {
1789
+ return calendarDisplay > 1 || 0 === calendarDisplay && calendar !== void 0 ? formatCalendarId(getCalendarSlotId(calendar), 2 === calendarDisplay) : "";
1790
+ }
1791
+ function formatCalendarId(calendarId, isCritical) {
1792
+ return "[" + (isCritical ? "!" : "") + "u-ca=" + calendarId + "]";
1793
+ }
1794
+ const trailingZerosRE = /0+$/;
1795
+ function formatSubsecNano(totalNano, subsecDigits) {
1796
+ let s = padNumber(9, totalNano);
1797
+ return s = void 0 === subsecDigits ? s.replace(trailingZerosRE, "") : s.slice(0, subsecDigits), s ? "." + s : "";
1798
+ }
1799
+ function getSignStr(num) {
1800
+ return num < 0 ? "-" : "+";
1801
+ }
1802
+ const icuRegExp = /^(AC|AE|AG|AR|AS|BE|BS|CA|CN|CS|CT|EA|EC|IE|IS|JS|MI|NE|NS|PL|PN|PR|PS|SS|VS)T$/;
1803
+ const badCharactersRegExp = /[^\w\/:+-]+/;
1804
+ function refineTimeZoneId(rawId) {
1805
+ return resolveTimeZoneId(requireString(rawId));
1806
+ }
1807
+ function resolveTimeZoneId(rawId) {
1808
+ return resolveTimeZoneRecord(rawId).id;
1809
+ }
1810
+ function resolveTimeZoneRecord(rawId) {
1811
+ const upperRawId = rawId.toUpperCase();
1812
+ const offsetRecord = ((upperRawId) => {
1813
+ const offsetNano = parseOffsetNanoMaybe(upperRawId, 1);
1814
+ if (void 0 !== offsetNano) return {
1815
+ id: formatOffsetNano(offsetNano),
1816
+ _: offsetNano,
1817
+ o: offsetNano
1818
+ };
1819
+ })(upperRawId);
1820
+ if (offsetRecord) return {
1821
+ kind: "fixed",
1822
+ ...offsetRecord
1823
+ };
1824
+ return queryNamedTimeZoneRecord("UTC" === upperRawId ? "UTC" : ((rawId) => (badCharactersRegExp.test(rawId) && throwRangeError(invalidTimeZone(rawId)), icuRegExp.test(rawId) && throwRangeError("Forbidden ICU TimeZone"), rawId.toLowerCase().split("/").map((part, partI) => (part.length <= 3 || /\d/.test(part)) && !/etc|yap/.test(part) ? part.toUpperCase() : part.replace(/baja|dumont|[a-z]+/g, (a, i) => a.length <= 2 && !partI || "in" === a || "chat" === a ? a.toUpperCase() : a.length > 2 || !i ? capitalize(a).replace(/island|noronha|murdo|rivadavia|urville/, capitalize) : a)).join("/")))(rawId));
1825
+ }
1826
+ const queryNamedTimeZoneRecord = /* @__PURE__ */ memoize((normId) => {
1827
+ if ("UTC" === normId) return {
1828
+ kind: "utc",
1829
+ id: normId,
1830
+ o: normId
1831
+ };
1832
+ const format = queryTimeZoneIntlFormat(normId.toUpperCase());
1833
+ return {
1834
+ kind: "named",
1835
+ id: normId,
1836
+ format,
1837
+ o: format.resolvedOptions().timeZone
1838
+ };
1839
+ });
1840
+ const queryTimeZoneIntlFormat = /* @__PURE__ */ memoize((upperNormId) => new RawDateTimeFormat("en-u-hc-h23", {
1841
+ calendar: "iso8601",
1842
+ timeZone: upperNormId,
1843
+ era: "short",
1844
+ year: "numeric",
1845
+ month: "numeric",
1846
+ day: "numeric",
1847
+ hour: "numeric",
1848
+ minute: "numeric",
1849
+ second: "numeric"
1850
+ }));
1851
+ function queryTimeZone(rawTimeZoneId) {
1852
+ const record = resolveTimeZoneRecord(rawTimeZoneId);
1853
+ return queryTimeZoneRecord(record.id, record);
1854
+ }
1855
+ const queryTimeZoneRecord = /* @__PURE__ */ memoize((normTimeZoneId, record) => "named" === record.kind ? new IntlTimeZone(normTimeZoneId, record.o, record.format) : new FixedTimeZone(normTimeZoneId, record.o, "fixed" === record.kind ? record._ : 0));
1856
+ var FixedTimeZone = class {
1857
+ constructor(id, compareKey, offsetNano) {
1858
+ this.id = id, this.o = compareKey, this._ = offsetNano;
1859
+ }
1860
+ C() {
1861
+ return this._;
1862
+ }
1863
+ R(isoDateTime) {
1864
+ return [isoDateTimeAndOffsetToEpochNano(isoDateTime, this._)];
1865
+ }
1866
+ U() {}
1867
+ };
1868
+ var IntlTimeZone = class {
1869
+ constructor(id, compareKey, format) {
1870
+ this.id = id, this.o = compareKey, this.qe = ((computeOffsetSec, periodDays) => {
1871
+ const getSample = memoize(computeOffsetSec);
1872
+ const getSplit = memoize(createSplitTuple);
1873
+ const periodSec = 86400 * periodDays;
1874
+ function getOffsetSec(epochSec) {
1875
+ const [startEpochSec, endEpochSec] = computePeriod(epochSec, periodSec);
1876
+ const clampedStartEpochSec = clampIntlSampleEpochSec(startEpochSec);
1877
+ const clampedEndEpochSec = clampIntlSampleEpochSec(endEpochSec);
1878
+ const startOffsetSec = getSample(clampedStartEpochSec);
1879
+ const endOffsetSec = getSample(clampedEndEpochSec);
1880
+ return startOffsetSec === endOffsetSec ? startOffsetSec : pinch(getSplit(clampedStartEpochSec, clampedEndEpochSec), startOffsetSec, endOffsetSec, epochSec);
1881
+ }
1882
+ function pinch(split, startOffsetSec, endOffsetSec, forEpochSec) {
1883
+ let offsetSec;
1884
+ let splitDurSec;
1885
+ for (; (void 0 === forEpochSec || void 0 === (offsetSec = forEpochSec < split[0] ? startOffsetSec : forEpochSec >= split[1] ? endOffsetSec : void 0)) && (splitDurSec = split[1] - split[0]);) {
1886
+ const middleEpochSec = split[0] + Math.floor(splitDurSec / 2);
1887
+ computeOffsetSec(middleEpochSec) === endOffsetSec ? split[1] = middleEpochSec : split[0] = middleEpochSec + 1;
1888
+ }
1889
+ return offsetSec;
1890
+ }
1891
+ return {
1892
+ Ee(zonedEpochSec) {
1893
+ const wideOffsetSec0 = getOffsetSec(zonedEpochSec - 86400);
1894
+ const wideOffsetSec1 = getOffsetSec(zonedEpochSec + 86400);
1895
+ const wideUtcEpochSec0 = zonedEpochSec - wideOffsetSec0;
1896
+ const wideUtcEpochSec1 = zonedEpochSec - wideOffsetSec1;
1897
+ if (wideOffsetSec0 === wideOffsetSec1) return [wideUtcEpochSec0];
1898
+ const narrowOffsetSec0 = getOffsetSec(wideUtcEpochSec0);
1899
+ return narrowOffsetSec0 === getOffsetSec(wideUtcEpochSec1) ? [zonedEpochSec - narrowOffsetSec0] : wideOffsetSec0 > wideOffsetSec1 ? [wideUtcEpochSec0, wideUtcEpochSec1] : [];
1900
+ },
1901
+ De: getOffsetSec,
1902
+ U: function getTransition(epochSec, direction) {
1903
+ if (direction > 0 && epochSec >= 864e10) return;
1904
+ if (direction < 0) {
1905
+ if (epochSec <= minPossibleTransitionSec) return;
1906
+ const lookaheadEpochSec = getCurrentEpochSec() + 94867200;
1907
+ if (epochSec > lookaheadEpochSec) return getTransition(lookaheadEpochSec, -1);
1908
+ }
1909
+ let [startEpochSec, endEpochSec] = computePeriod(direction > 0 ? Math.max(epochSec, minPossibleTransitionSec) : epochSec, periodSec);
1910
+ const inc = periodSec * direction;
1911
+ const searchLimit = direction > 0 ? Math.max(epochSec, getCurrentEpochSec()) + 94867200 : minPossibleTransitionSec;
1912
+ const inBounds = () => direction < 0 ? endEpochSec > searchLimit : startEpochSec < searchLimit;
1913
+ for (; inBounds();) {
1914
+ const clampedStartEpochSec = clampIntlSampleEpochSec(startEpochSec);
1915
+ const clampedEndEpochSec = clampIntlSampleEpochSec(endEpochSec);
1916
+ const startOffsetSec = getSample(clampedStartEpochSec);
1917
+ const endOffsetSec = getSample(clampedEndEpochSec);
1918
+ if (startOffsetSec !== endOffsetSec) {
1919
+ const split = getSplit(clampedStartEpochSec, clampedEndEpochSec);
1920
+ pinch(split, startOffsetSec, endOffsetSec);
1921
+ const transitionEpochSec = split[0];
1922
+ if ((compareNumbers(transitionEpochSec, epochSec) || 1) === direction) return transitionEpochSec;
1923
+ }
1924
+ startEpochSec += inc, endEpochSec += inc;
1925
+ }
1926
+ }
1927
+ };
1928
+ })(((format) => (epochSec) => {
1929
+ const intlParts = formatEpochMilliToPartsRecord(format, 1e3 * epochSec);
1930
+ return 86400 * isoArgsToEpochDays(((intlParts) => {
1931
+ const relatedYear = intlParts.relatedYear;
1932
+ if (void 0 !== relatedYear) return parseInt(relatedYear);
1933
+ const year = parseInt(intlParts.year);
1934
+ return void 0 !== intlParts.era && "bce" === normalizeEraName(intlParts.era) ? 1 - year : year;
1935
+ })(intlParts), parseInt(intlParts.month), parseInt(intlParts.day)) + 3600 * parseInt(intlParts.hour) + 60 * parseInt(intlParts.minute) + parseInt(intlParts.second) - epochSec;
1936
+ })(format), ((timeZoneId) => {
1937
+ return timeZonePeriodDaysByName[timeZoneId.split("/").pop()] || 60;
1938
+ })(id));
1939
+ }
1940
+ C(epochNano) {
1941
+ return this.qe.De(((epochNano) => epochNanoToSecMod(epochNano)[0])(epochNano)) * nanoInSec;
1942
+ }
1943
+ R(isoDateTime) {
1944
+ const zonedEpochSec = 86400 * isoDateToEpochDays(isoDateTime) + timeFieldsToSec(isoDateTime);
1945
+ const subsecNano = timeFieldsToSubsecNano(isoDateTime);
1946
+ return this.qe.Ee(zonedEpochSec).map((epochSec) => checkEpochNanoInBounds(BigInt(epochSec) * bigNanoInSec + BigInt(subsecNano)));
1947
+ }
1948
+ U(epochNano, direction) {
1949
+ const [epochSec, subsecNano] = epochNanoToSecMod(epochNano);
1950
+ const resEpochSec = this.qe.U(epochSec + (direction > 0 || subsecNano ? 1 : 0), direction);
1951
+ if (void 0 !== resEpochSec) return BigInt(resEpochSec) * bigNanoInSec;
1952
+ }
1953
+ };
1954
+ function getCurrentEpochSec() {
1955
+ return Math.floor(Date.now() / 1e3);
1956
+ }
1957
+ function createSplitTuple(startEpochSec, endEpochSec) {
1958
+ return [startEpochSec, endEpochSec];
1959
+ }
1960
+ function computePeriod(epochSec, periodSec) {
1961
+ const startEpochSec = Math.floor(epochSec / periodSec) * periodSec;
1962
+ return [startEpochSec, startEpochSec + periodSec];
1963
+ }
1964
+ function clampIntlSampleEpochSec(epochSec) {
1965
+ return constrainToRange(epochSec, -1e10, 864e10);
1966
+ }
1967
+ function refineMaybeZonedDateTimeObjectLike(refineTimeZoneString, calendar, bag) {
1968
+ const fields = readAndRefineBagFields(bag, getCalendarFieldNames(calendar, dateTimeAndZoneFieldNamesAlpha, dateTimeAndZoneFieldNamesWithEraAlpha), zonedDateTimeFieldRefiners, [], 0);
1969
+ if (void 0 !== fields.timeZone) {
1970
+ const isoDateFields = createPlainDateFromFields(calendar, fields);
1971
+ const timeFields = resolveTimeFields(fields);
1972
+ const timeZone = queryTimeZone(refineTimeZoneString(fields.timeZone));
1973
+ return {
1974
+ epochNanoseconds: getMatchingInstantFor(timeZone, combineDateAndTime(isoDateFields, timeFields), fields.offset),
1975
+ timeZone,
1976
+ calendar
1977
+ };
1978
+ }
1979
+ return createPlainDateFromFields(calendar, fields);
1980
+ }
1981
+ function refineZonedDateTimeObjectLike(refineTimeZoneString, calendar, bag, options) {
1982
+ const fields = readAndRefineBagFields(bag, getCalendarFieldNames(calendar, dateTimeAndZoneFieldNamesAlpha, dateTimeAndZoneFieldNamesWithEraAlpha), zonedDateTimeFieldRefiners, timeZoneFieldNames, 0);
1983
+ const timeZoneId = refineTimeZoneString(fields.timeZone);
1984
+ const [isoDateFields, overflow, offsetDisambig, epochDisambig] = createPlainDateFromFieldsWithOptionsRefiner(calendar, fields, () => refineZonedFieldOptions(options));
1985
+ const timeFields = resolveTimeFields(fields, overflow);
1986
+ const timeZone = queryTimeZone(timeZoneId);
1987
+ return createZonedEpochNanoSlots(getMatchingInstantFor(timeZone, combineDateAndTime(isoDateFields, timeFields), fields.offset, offsetDisambig, epochDisambig), timeZone, calendar);
1988
+ }
1989
+ function refinePlainDateTimeObjectLike(calendar, bag, options) {
1990
+ const fields = readAndRefineBagFields(bag, getCalendarFieldNames(calendar, dateTimeFieldNamesAlpha, dateTimeFieldNamesWithEraAlpha), dateTimeFieldRefiners, [], 0);
1991
+ const [isoDateInternals, overflow] = createPlainDateFromFieldsWithOptionsRefiner(calendar, fields, () => [refineOverflowOptions(options)]);
1992
+ return createPlainDateTimeFromRefinedFields(isoDateInternals, resolveTimeFields(fields, overflow), calendar);
1993
+ }
1994
+ function refinePlainDateObjectLike(calendar, bag, options, requireFields = []) {
1995
+ return createPlainDateFromFields(calendar, readAndRefineBagFields(bag, getCalendarFieldNames(calendar, dateFieldNamesAlpha, dateFieldNamesWithEraAlpha), dateFieldRefiners, requireFields), options);
1996
+ }
1997
+ function refinePlainYearMonthObjectLike(calendar, bag, options, requireFields) {
1998
+ return createPlainYearMonthFromFields(calendar, readAndRefineBagFields(bag, getCalendarFieldNames(calendar, yearMonthFieldNamesAlpha, yearMonthFieldNamesWithEraAlpha), dateFieldRefiners, requireFields), options);
1999
+ }
2000
+ function refinePlainMonthDayObjectLike(calendar, calendarAbsent, bag, options) {
2001
+ const fields = readAndRefineBagFields(bag, getCalendarFieldNames(calendar, dateFieldNamesAlpha, dateFieldNamesWithEraAlpha), dateFieldRefiners, dayFieldNamesAsc, 0);
2002
+ return calendarAbsent && void 0 !== fields.month && void 0 === fields.monthCode && void 0 === fields.year && (fields.year = 1972), createPlainMonthDayFromFields(calendar, fields, options);
2003
+ }
2004
+ function refinePlainTimeObjectLike(bag, options) {
2005
+ return resolveTimeFields(readAndRefineBagFields(bag, timeFieldNamesAlpha, timeFieldRefiners, [], 1), refineOverflowOptions(options));
2006
+ }
2007
+ function refineDurationObjectLike(bag) {
2008
+ const durationFields = readAndRefineBagFields(bag, durationFieldNamesAlpha, durationFieldRefiners);
2009
+ return createDurationSlots(validateDurationFields({
2010
+ ...durationFieldDefaults,
2011
+ ...durationFields
2012
+ }));
2013
+ }
2014
+ function throwFailedParse(s) {
2015
+ throwRangeError(failedParse(s));
2016
+ }
2017
+ function parseInstant(s) {
2018
+ const organized = parseDateTimeLike(s = toStringViaPrimitive(s));
2019
+ let offsetNano;
2020
+ return organized || throwFailedParse(s), organized.F ? offsetNano = 0 : organized.offset ? offsetNano = parseOffsetNano(organized.offset) : throwFailedParse(s), organized.timeZoneId && parseOffsetNanoMaybe(organized.timeZoneId, 1), validateIsoDateTimeFields(organized), createEpochNanoSlots(isoDateTimeAndOffsetToEpochNano(organized, offsetNano));
2021
+ }
2022
+ function parseRelativeToSlots(s, resolveCalendar) {
2023
+ const organized = parseDateTimeLike(requireString(s));
2024
+ return organized || throwFailedParse(s), organized.timeZoneId ? finalizeZonedDateTime(organized, resolveCalendar, void 0) : (organized.F && throwFailedParse(s), finalizeDate(organized, resolveCalendar));
2025
+ }
2026
+ function parseZonedDateTime(s, resolveCalendar, options) {
2027
+ const organized = parseDateTimeLike(requireString(s));
2028
+ return organized && organized.timeZoneId || throwFailedParse(s), finalizeZonedDateTime(organized, resolveCalendar, options);
2029
+ }
2030
+ function parsePlainDateTime(s, resolveCalendar) {
2031
+ const organized = parseDateTimeLike(requireString(s));
2032
+ return organized && !organized.F || throwFailedParse(s), finalizeDateTime(organized, resolveCalendar);
2033
+ }
2034
+ function parsePlainDate(s, resolveCalendar) {
2035
+ const slots = finalizeDateLike(parsePlainDateLike(requireString(s)), void 0, resolveCalendar);
2036
+ return createDateSlots(slots, slots.calendar);
2037
+ }
2038
+ function parsePlainYearMonth(s, resolveCalendar) {
2039
+ const organized = parseYearMonthOnly(requireString(s));
2040
+ if (organized) return requireIsoCalendar(organized), createDateSlots(checkIsoYearMonthInBounds(validateIsoDateFields(organized)), resolveCalendar(organized.calendarId));
2041
+ const dateSlots = finalizeDateLike(parsePlainDateLike(s), projectIsoYearMonthDate, resolveCalendar);
2042
+ const { calendar } = dateSlots;
2043
+ return createDateSlots(moveToStartOfMonth(calendar, dateSlots), calendar);
2044
+ }
2045
+ function requireIsoCalendar(organized) {
2046
+ "iso8601" !== organized.calendarId && throwRangeError(invalidSubstring(organized.calendarId));
2047
+ }
2048
+ function parsePlainMonthDay(s, resolveCalendar) {
2049
+ const organized = parseMonthDayOnly(requireString(s));
2050
+ if (organized) return requireIsoCalendar(organized), createDateSlots(validateIsoDateFields(organized), resolveCalendar(organized.calendarId));
2051
+ const dateSlots = finalizeDateLike(parsePlainDateLike(s), projectIsoMonthDayDate, resolveCalendar);
2052
+ const { calendar } = dateSlots;
2053
+ const { year: origYear, month: origMonth, day } = computeCalendarDateFields(calendar, dateSlots);
2054
+ const [monthCodeNumber, isLeapMonth] = computeCalendarMonthCodeParts(calendar, origYear, origMonth);
2055
+ const { year, month } = ((calendar, monthCodeNumber, isLeapMonth, day) => {
2056
+ const yearMonthFields = calendar ? calendar.v(monthCodeNumber, isLeapMonth, day) : computeIsoYearMonthFieldsForMonthDay(monthCodeNumber, isLeapMonth);
2057
+ return yearMonthFields || throwRangeError("Cannot guess year"), yearMonthFields;
2058
+ })(calendar, monthCodeNumber, isLeapMonth, day);
2059
+ return createDateSlots(checkIsoDateInBounds(computeCalendarIsoFieldsFromParts(calendar, year, month, day)), calendar);
2060
+ }
2061
+ function parsePlainTime(s) {
2062
+ let organized = ((s) => {
2063
+ const parts = parseTimeOnlyParts(s);
2064
+ return parts ? (organizeAnnotationParts(parts[13]), organizeTimeParts(parts, 1)) : void 0;
2065
+ })(s = requireString(s));
2066
+ let altParsed;
2067
+ return organized || (organized = parseDateTimeLike(s), organized ? (organized.fe || throwFailedParse(s), organized.F && throwRangeError(invalidSubstring("Z")), requireIsoCalendar(organized)) : throwFailedParse(s)), (altParsed = parseYearMonthOnly(s)) && isIsoDateFieldsValid(altParsed) && throwFailedParse(s), (altParsed = parseMonthDayOnly(s)) && isIsoDateFieldsValid(altParsed) && throwFailedParse(s), createTimeSlots(validateTimeFields(organized));
2068
+ }
2069
+ function parseDuration(s) {
2070
+ const parsed = ((s) => {
2071
+ const parts = durationRegExp.exec(s);
2072
+ return parts ? ((parts) => {
2073
+ let hasAny = 0;
2074
+ let hasAnyFrac = 0;
2075
+ let leftoverNano = 0;
2076
+ let durationFields = {
2077
+ years: parseUnit(parts[2]),
2078
+ months: parseUnit(parts[3]),
2079
+ weeks: parseUnit(parts[4]),
2080
+ days: parseUnit(parts[5]),
2081
+ hours: parseUnit(parts[6], parts[7], 5),
2082
+ minutes: parseUnit(parts[8], parts[9], 4),
2083
+ seconds: parseUnit(parts[10], parts[11], 3),
2084
+ ...nanoToGivenFields(leftoverNano, 2, durationFieldNamesAsc)
2085
+ };
2086
+ return hasAny || throwRangeError(noValidFields(durationFieldNamesAsc)), parseSign(parts[1]) < 0 && (durationFields = negateDurationFields(durationFields)), durationFields;
2087
+ function parseUnit(wholeStr, fracStr, timeUnit) {
2088
+ let leftoverUnits = 0;
2089
+ let wholeUnits = 0;
2090
+ return timeUnit && ([leftoverUnits, leftoverNano] = divModFloor(leftoverNano, unitNanoMap[timeUnit])), void 0 !== wholeStr && (hasAnyFrac && throwRangeError(invalidSubstring(wholeStr)), wholeUnits = ((s) => {
2091
+ const n = parseInt(s);
2092
+ return Number.isFinite(n) || throwRangeError(invalidSubstring(s)), n;
2093
+ })(wholeStr), hasAny = 1, fracStr && (leftoverNano = parseSubsecNano(fracStr) * (unitNanoMap[timeUnit] / nanoInSec), hasAnyFrac = 1)), leftoverUnits + wholeUnits;
2094
+ }
2095
+ })(parts) : void 0;
2096
+ })(requireString(s));
2097
+ return parsed || throwFailedParse(s), createDurationSlots(validateDurationFields(parsed));
2098
+ }
2099
+ function parseCalendarId(s) {
2100
+ const res = parseDateTimeLike(s) || parseYearMonthOnly(s) || parseMonthDayOnly(s);
2101
+ if (res) return res.calendarId;
2102
+ const timeParts = parseTimeOnlyParts(s);
2103
+ return timeParts ? organizeAnnotationParts(timeParts[13]).calendarId : s;
2104
+ }
2105
+ function parseTimeZoneId(s) {
2106
+ const parsed = parseDateTimeLike(s);
2107
+ return parsed && (parsed.timeZoneId || parsed.F && "UTC" || parsed.offset) || s;
2108
+ }
2109
+ function parsePlainDateLike(s) {
2110
+ const organized = parseDateTimeLike(s);
2111
+ return organized && !organized.F || throwFailedParse(s), organized;
2112
+ }
2113
+ function finalizeDateLike(organized, isoDateProjector, resolveCalendar) {
2114
+ return isoDateProjector && "iso8601" === organized.calendarId ? (validateIsoDateFields(organized), organized.fe && validateTimeFields(organized), finalizeDate(isoDateProjector(organized), resolveCalendar)) : organized.fe ? finalizeDateTime(organized, resolveCalendar) : finalizeDate(organized, resolveCalendar);
2115
+ }
2116
+ function projectIsoYearMonthDate(organized) {
2117
+ const day = 12 * organized.year + organized.month === isoYearMonthIndexMin ? 20 : 1;
2118
+ return {
2119
+ ...organized,
2120
+ day
2121
+ };
2122
+ }
2123
+ function projectIsoMonthDayDate(organized) {
2124
+ return {
2125
+ ...organized,
2126
+ year: 1972
2127
+ };
2128
+ }
2129
+ function finalizeZonedDateTime(organized, resolveCalendar, options) {
2130
+ const timeZone = queryTimeZone(resolveTimeZoneId(organized.timeZoneId));
2131
+ let epochNano;
2132
+ if (validateIsoDateTimeFields(organized), organized.fe) {
2133
+ const offsetNano = organized.offset ? parseOffsetNano(organized.offset) : void 0;
2134
+ const [, offsetDisambig, epochDisambig] = refineZonedFieldOptions(options);
2135
+ epochNano = getMatchingInstantFor(timeZone, organized, offsetNano, offsetDisambig, epochDisambig, !(timeZone._ || void 0 === organized.offset || (offset = organized.offset, offset.replace(/\D/g, "").length > 4)), organized.F);
2136
+ } else refineZonedFieldOptions(options), epochNano = getStartOfDayInstantFor(timeZone, organized);
2137
+ var offset;
2138
+ return checkEpochNanoInBounds(epochNano), createZonedEpochNanoSlots(epochNano, timeZone, resolveCalendar(organized.calendarId));
2139
+ }
2140
+ function finalizeDateTime(organized, resolveCalendar) {
2141
+ return validateIsoDateTimeFields(organized), checkIsoDateTimeInBounds(organized), {
2142
+ ...combineDateAndTime(organized, organized),
2143
+ calendar: resolveCalendar(organized.calendarId)
2144
+ };
2145
+ }
2146
+ function finalizeDate(organized, resolveCalendar) {
2147
+ return validateIsoDateFields(organized), checkIsoDateInBounds(organized), {
2148
+ calendar: resolveCalendar(organized.calendarId),
2149
+ year: organized.year,
2150
+ month: organized.month,
2151
+ day: organized.day
2152
+ };
2153
+ }
2154
+ function timeRegExpStr(separatorIndex) {
2155
+ return `(\\d{2})(?:(:?)(\\d{2})(?:\\${separatorIndex}(\\d{2})(?:[.,](\\d{1,9}))?)?)?`;
2156
+ }
2157
+ function offsetRegExpStr(separatorIndex) {
2158
+ return "([+-])" + timeRegExpStr(separatorIndex);
2159
+ }
2160
+ const dateTimeRegExpStr = "(?:(?:([+-])(\\d{6}))|(\\d{4}))(-?)(\\d{2})\\4(\\d{2})(?:[T ]" + timeRegExpStr(8) + "(Z|" + offsetRegExpStr(15) + ")?)?";
2161
+ const yearMonthRegExp = /* @__PURE__ */ createRegExp("(?:(?:([+-])(\\d{6}))|(\\d{4}))-?(\\d{2})((?:\\[(!?)([^\\]]*)\\]){0,9})");
2162
+ const monthDayRegExp = /* @__PURE__ */ createRegExp("(?:--)?(\\d{2})-?(\\d{2})((?:\\[(!?)([^\\]]*)\\]){0,9})");
2163
+ const dateTimeRegExp = /* @__PURE__ */ createRegExp(dateTimeRegExpStr + "((?:\\[(!?)([^\\]]*)\\]){0,9})");
2164
+ const timeRegExp = /* @__PURE__ */ createRegExp("T?" + timeRegExpStr(2) + `(${offsetRegExpStr(9)})?((?:\\[(!?)([^\\]]*)\\]){0,9})`);
2165
+ const annotationRegExp = /* @__PURE__ */ new RegExp("\\[(!?)([^\\]]*)\\]", "g");
2166
+ const durationRegExp = /* @__PURE__ */ createRegExp("([+-])?P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(?:T(?:(\\d+)(?:[.,](\\d{1,9}))?H)?(?:(\\d+)(?:[.,](\\d{1,9}))?M)?(?:(\\d+)(?:[.,](\\d{1,9}))?S)?)?");
2167
+ function parseDateTimeLike(s) {
2168
+ const parts = dateTimeRegExp.exec(s);
2169
+ return parts ? ((parts) => {
2170
+ const zOrOffset = parts[12];
2171
+ const hasZ = "Z" === (zOrOffset || "").toUpperCase();
2172
+ return {
2173
+ year: organizeIsoYearParts(parts),
2174
+ month: parseInt(parts[5]),
2175
+ day: parseInt(parts[6]),
2176
+ ...organizeTimeParts(parts, 7),
2177
+ ...organizeAnnotationParts(parts[19]),
2178
+ fe: Boolean(parts[7]),
2179
+ F: hasZ,
2180
+ offset: hasZ ? void 0 : zOrOffset
2181
+ };
2182
+ })(parts) : void 0;
2183
+ }
2184
+ function parseYearMonthOnly(s) {
2185
+ const parts = yearMonthRegExp.exec(s);
2186
+ if (parts) return ((parts) => ({
2187
+ year: organizeIsoYearParts(parts),
2188
+ month: parseInt(parts[4]),
2189
+ day: 1,
2190
+ ...organizeAnnotationParts(parts[5])
2191
+ }))(parts);
2192
+ }
2193
+ function parseMonthDayOnly(s) {
2194
+ const parts = monthDayRegExp.exec(s);
2195
+ return parts ? ((parts) => ({
2196
+ year: 1972,
2197
+ month: parseInt(parts[1]),
2198
+ day: parseInt(parts[2]),
2199
+ ...organizeAnnotationParts(parts[3])
2200
+ }))(parts) : void 0;
2201
+ }
2202
+ function parseTimeOnlyParts(s) {
2203
+ const parts = timeRegExp.exec(s);
2204
+ if (parts) return parts[6] && parseOffsetNano(parts[6]), parts;
2205
+ }
2206
+ function organizeTimeParts(parts, hourIndex) {
2207
+ const second = parseInt0(parts[hourIndex + 3]);
2208
+ return {
2209
+ ...nanoToTimeAndDay(parseSubsecNano(parts[hourIndex + 4] || ""))[0],
2210
+ hour: parseInt0(parts[hourIndex]),
2211
+ minute: parseInt0(parts[hourIndex + 2]),
2212
+ second: 60 === second ? 59 : second
2213
+ };
2214
+ }
2215
+ function organizeIsoYearParts(parts) {
2216
+ const yearSign = parseSign(parts[1]);
2217
+ const year = parseInt(parts[2] || parts[3]);
2218
+ return yearSign < 0 && !year && throwRangeError(invalidSubstring(-0)), yearSign * year;
2219
+ }
2220
+ function organizeAnnotationParts(s) {
2221
+ let calendarIsCritical;
2222
+ let timeZoneId;
2223
+ const calendarIds = [];
2224
+ return s.replace(annotationRegExp, (whole, criticalStr, mainStr) => {
2225
+ const isCritical = Boolean(criticalStr);
2226
+ const [val, name] = mainStr.split("=").reverse();
2227
+ return name ? "u-ca" === name ? (calendarIds.push(val.toLowerCase()), calendarIsCritical || (calendarIsCritical = isCritical)) : (isCritical || /[A-Z]/.test(name)) && throwRangeError(invalidSubstring(whole)) : (timeZoneId && throwRangeError(invalidSubstring(whole)), timeZoneId = val), "";
2228
+ }), calendarIds.length > 1 && calendarIsCritical && throwRangeError(invalidSubstring(s)), {
2229
+ timeZoneId,
2230
+ calendarId: calendarIds[0] || "iso8601"
2231
+ };
2232
+ }
2233
+ function mergeCalendarFields(calendar, baseFields, additionalFields) {
2234
+ const merged = Object.assign(Object.create(null), baseFields);
2235
+ return spliceFields(merged, additionalFields, monthFieldNames), getCalendarEraOrigins(calendar) && (spliceFields(merged, additionalFields, allYearFieldNames), calendar && calendar.le && spliceFields(merged, additionalFields, monthDayFieldNames, eraYearFieldNames)), merged;
2236
+ }
2237
+ function spliceFields(dest, additional, allPropNames, deletablePropNames) {
2238
+ let anyMatching = 0;
2239
+ const nonMatchingPropNames = [];
2240
+ for (const propName of allPropNames) void 0 !== additional[propName] ? anyMatching = 1 : nonMatchingPropNames.push(propName);
2241
+ if (Object.assign(dest, additional), anyMatching) for (const deletablePropName of deletablePropNames || nonMatchingPropNames) delete dest[deletablePropName];
2242
+ }
2243
+ function mergeZonedDateTimeFields(zonedDateTimeSlots, modFields, options) {
2244
+ const { calendar, timeZone } = zonedDateTimeSlots;
2245
+ const validFieldNames = getCalendarFieldNames(calendar, dateTimeAndOffsetFieldNamesAlpha, dateTimeAndOffsetFieldNamesWithEraAlpha);
2246
+ const zonedSlots = zonedEpochSlotsToIso(zonedDateTimeSlots);
2247
+ const { year, month, day } = computeCalendarDateFields(calendar, zonedSlots);
2248
+ const origFields = {
2249
+ year,
2250
+ monthCode: computeMonthCode(calendar, year, month),
2251
+ day,
2252
+ hour: zonedSlots.hour,
2253
+ minute: zonedSlots.minute,
2254
+ second: zonedSlots.second,
2255
+ millisecond: zonedSlots.millisecond,
2256
+ microsecond: zonedSlots.microsecond,
2257
+ nanosecond: zonedSlots.nanosecond,
2258
+ offset: zonedSlots.offsetNanoseconds
2259
+ };
2260
+ const partialFields = readAndRefineBagFields(modFields, validFieldNames, zonedDateTimeFieldRefiners);
2261
+ const mergedCalendarFields = mergeCalendarFields(calendar, origFields, partialFields);
2262
+ const mergedAllFields = {
2263
+ ...origFields,
2264
+ ...partialFields
2265
+ };
2266
+ const [isoDateFields, overflow, offsetDisambig, epochDisambig] = createPlainDateFromFieldsWithOptionsRefiner(calendar, mergedCalendarFields, () => refineZonedFieldOptions(options, 2));
2267
+ return createZonedEpochNanoSlots(getMatchingInstantFor(timeZone, combineDateAndTime(isoDateFields, constrainTimeFields(mergedAllFields, overflow)), mergedAllFields.offset, offsetDisambig, epochDisambig), timeZone, calendar);
2268
+ }
2269
+ function mergePlainDateTimeFields(plainDateTimeSlots, modFields, options) {
2270
+ const { calendar } = plainDateTimeSlots;
2271
+ const validFieldNames = getCalendarFieldNames(calendar, dateTimeFieldNamesAlpha, dateTimeFieldNamesWithEraAlpha);
2272
+ const { year, month, day } = computeCalendarDateFields(calendar, plainDateTimeSlots);
2273
+ const origFields = {
2274
+ year,
2275
+ monthCode: computeMonthCode(calendar, year, month),
2276
+ day,
2277
+ hour: plainDateTimeSlots.hour,
2278
+ minute: plainDateTimeSlots.minute,
2279
+ second: plainDateTimeSlots.second,
2280
+ millisecond: plainDateTimeSlots.millisecond,
2281
+ microsecond: plainDateTimeSlots.microsecond,
2282
+ nanosecond: plainDateTimeSlots.nanosecond
2283
+ };
2284
+ const partialFields = readAndRefineBagFields(modFields, validFieldNames, dateTimeFieldRefiners);
2285
+ const mergedCalendarFields = mergeCalendarFields(calendar, origFields, partialFields);
2286
+ const mergedAllFields = {
2287
+ ...origFields,
2288
+ ...partialFields
2289
+ };
2290
+ const [plainDateSlots, overflow] = createPlainDateFromFieldsWithOptionsRefiner(calendar, mergedCalendarFields, () => [refineOverflowOptions(options)]);
2291
+ return createPlainDateTimeFromRefinedFields(plainDateSlots, constrainTimeFields(mergedAllFields, overflow), calendar);
2292
+ }
2293
+ function mergePlainDateFields(plainDateSlots, modFields, options) {
2294
+ const { calendar } = plainDateSlots;
2295
+ const validFieldNames = getCalendarFieldNames(calendar, dateFieldNamesAlpha, dateFieldNamesWithEraAlpha);
2296
+ const { year, month, day } = computeCalendarDateFields(calendar, plainDateSlots);
2297
+ return createPlainDateFromFields(calendar, mergeCalendarFields(calendar, {
2298
+ year,
2299
+ monthCode: computeMonthCode(calendar, year, month),
2300
+ day
2301
+ }, readAndRefineBagFields(modFields, validFieldNames, dateFieldRefiners)), options);
2302
+ }
2303
+ function mergePlainYearMonthFields(plainYearMonthSlots, modFields, options) {
2304
+ const { calendar } = plainYearMonthSlots;
2305
+ const validFieldNames = getCalendarFieldNames(calendar, yearMonthFieldNamesAlpha, yearMonthFieldNamesWithEraAlpha);
2306
+ const { year, month } = computeCalendarDateFields(calendar, plainYearMonthSlots);
2307
+ return createPlainYearMonthFromFields(calendar, mergeCalendarFields(calendar, {
2308
+ year,
2309
+ monthCode: computeMonthCode(calendar, year, month)
2310
+ }, readAndRefineBagFields(modFields, validFieldNames, dateFieldRefiners)), options);
2311
+ }
2312
+ function mergePlainMonthDayFields(plainMonthDaySlots, modFields, options) {
2313
+ const { calendar } = plainMonthDaySlots;
2314
+ const validFieldNames = getCalendarFieldNames(calendar, dateFieldNamesAlpha, dateFieldNamesWithEraAlpha);
2315
+ const { year, month, day } = computeCalendarDateFields(calendar, plainMonthDaySlots);
2316
+ return createPlainMonthDayFromFields(calendar, mergeCalendarFields(calendar, {
2317
+ monthCode: computeMonthCode(calendar, year, month),
2318
+ day
2319
+ }, readAndRefineBagFields(modFields, validFieldNames, dateFieldRefiners)), options);
2320
+ }
2321
+ function mergePlainTimeFields(initialFields, mod, options) {
2322
+ return ((initialFields, modFields, options) => resolveTimeFields({
2323
+ ...pluckProps(timeFieldNamesAlpha, initialFields),
2324
+ ...readAndRefineBagFields(modFields, timeFieldNamesAlpha, timeFieldRefiners)
2325
+ }, refineOverflowOptions(options)))(initialFields, mod, options);
2326
+ }
2327
+ function mergeDurationFields(slots, fields) {
2328
+ return createDurationSlots((initialFields = slots, modFields = fields, validateDurationFields({
2329
+ ...initialFields,
2330
+ ...readAndRefineBagFields(modFields, durationFieldNamesAlpha, durationFieldRefiners)
2331
+ })));
2332
+ var initialFields, modFields;
2333
+ }
2334
+ function computeMonthCode(calendar, year, month) {
2335
+ const [monthCodeNumber, isLeapMonth] = computeCalendarMonthCodeParts(calendar, year, month);
2336
+ return formatMonthCode(monthCodeNumber, isLeapMonth);
2337
+ }
2338
+ function instantToZonedDateTime(instantSlots, timeZone, calendar) {
2339
+ return createZonedEpochNanoSlots(instantSlots.epochNanoseconds, timeZone, calendar);
2340
+ }
2341
+ function zonedDateTimeToInstant(zonedDateTimeSlots0) {
2342
+ return createEpochNanoSlots(zonedDateTimeSlots0.epochNanoseconds);
2343
+ }
2344
+ function zonedDateTimeToPlainDateTime(zonedDateTimeSlots0) {
2345
+ return createDateTimeSlots(zonedEpochSlotsToIso(zonedDateTimeSlots0), zonedDateTimeSlots0.calendar);
2346
+ }
2347
+ function zonedDateTimeToPlainDate(zonedDateTimeSlots0) {
2348
+ return createDateSlots(zonedEpochSlotsToIso(zonedDateTimeSlots0), zonedDateTimeSlots0.calendar);
2349
+ }
2350
+ function zonedDateTimeToPlainTime(zonedDateTimeSlots0) {
2351
+ return createTimeSlots(zonedEpochSlotsToIso(zonedDateTimeSlots0));
2352
+ }
2353
+ function plainDateTimeToZonedDateTime(plainDateTimeSlots, timeZone, options) {
2354
+ return createZonedEpochNanoSlots(checkEpochNanoInBounds(((timeZone, isoDateTime, options) => {
2355
+ return getSingleInstantFor(timeZone, isoDateTime, ((options) => coerceEpochDisambig(require_utils.normalizeOptions(options)))(options));
2356
+ })(timeZone, plainDateTimeSlots, options)), timeZone, plainDateTimeSlots.calendar);
2357
+ }
2358
+ function plainDateToZonedDateTime(refineTimeZoneString, refinePlainTimeArg, plainDateSlots, options) {
2359
+ const timeZoneId = refineTimeZoneString(options.timeZone);
2360
+ const plainTimeArg = options.plainTime;
2361
+ const timeFields = void 0 !== plainTimeArg ? refinePlainTimeArg(plainTimeArg) : void 0;
2362
+ const timeZone = queryTimeZone(timeZoneId);
2363
+ let epochNano;
2364
+ return epochNano = timeFields ? getSingleInstantFor(timeZone, combineDateAndTime(plainDateSlots, timeFields)) : getStartOfDayInstantFor(timeZone, combineDateAndTime(plainDateSlots, timeFieldDefaults)), createZonedEpochNanoSlots(epochNano, timeZone, plainDateSlots.calendar);
2365
+ }
2366
+ function convertPlainYearMonthToDate(calendar, input, bag) {
2367
+ return createPlainDateFromMergedFields(calendar, pluckProps(getCalendarFieldNames(calendar, yearMonthCodeFieldNamesAlpha, yearMonthCodeFieldNamesWithEraAlpha), input), readAndRefineBagFields(require_utils.requireObjectLike(bag), dayFieldNamesAsc, dateFieldRefiners, []));
2368
+ }
2369
+ function convertPlainMonthDayToDate(calendar, input, bag) {
2370
+ const extraFieldNames = getCalendarFieldNames(calendar, yearFieldNamesAsc, yearFieldNamesWithEraAlpha);
2371
+ return createPlainDateFromMergedFields(calendar, pluckProps(monthCodeDayFieldNamesAlpha, input), readAndRefineBagFields(require_utils.requireObjectLike(bag), extraFieldNames, dateFieldRefiners, []));
2372
+ }
2373
+ function convertToPlainMonthDay(calendar, input) {
2374
+ return createPlainMonthDayFromFields(calendar, readAndRefineBagFields(input, monthCodeDayFieldNamesAlpha, dateFieldRefiners));
2375
+ }
2376
+ function convertToPlainYearMonth(calendar, input, options) {
2377
+ return createPlainYearMonthFromFields(calendar, readAndRefineBagFields(input, getCalendarFieldNames(calendar, yearMonthCodeFieldNamesAlpha, yearMonthCodeFieldNamesWithEraAlpha), dateFieldRefiners), options);
2378
+ }
2379
+ function createPlainDateFromMergedFields(calendar, inputFields, extraFields) {
2380
+ const mergedFieldNames = getCalendarFieldNames(calendar, yearMonthCodeDayFieldNamesAlpha, yearMonthCodeDayFieldNamesWithEraAlpha);
2381
+ let mergedFields = mergeCalendarFields(calendar, inputFields, extraFields);
2382
+ return mergedFields = readAndRefineBagFields(mergedFields, mergedFieldNames, dateFieldRefiners, []), createPlainDateFromFields(calendar, mergedFields);
2383
+ }
2384
+ function epochMilliToInstant(epochMilli) {
2385
+ return createEpochNanoSlots(checkEpochNanoInBounds(BigInt(toStrictInteger(epochMilli)) * bigNanoInMilli));
2386
+ }
2387
+ function epochNanoToInstant(epochNano) {
2388
+ return createEpochNanoSlots(checkEpochNanoInBounds(toBigInt(epochNano)));
2389
+ }
2390
+ function applyPlainFormatTimeZone(options) {
2391
+ return options.timeZone = "UTC", ["full", "long"].includes(options.timeStyle) && (options.timeStyle = "medium"), options;
2392
+ }
2393
+ function applyZonedFormatTimeZone(options, timeZoneId) {
2394
+ return void 0 !== options.timeZone && throwTypeError("Cannot specify TimeZone"), options.timeZone = timeZoneId, options;
2395
+ }
2396
+ function checkResolvedCalendarCompatible(format, slots, strictCalendarCheck) {
2397
+ const resolvedCalendarId = format.resolvedOptions().calendar;
2398
+ !strictCalendarCheck && slots.calendar === void 0 || getCalendarSlotId(slots.calendar) === resolvedCalendarId || throwRangeError("Mismatching Calendars");
2399
+ }
2400
+ function createOptionsTransformer(shapeFieldNames, invalidShapeFieldNames, ignoredFieldNames, defaultShapeFields, dateStyleReplacementFields) {
2401
+ const shapeFieldNameSet = new Set(shapeFieldNames);
2402
+ const invalidShapeFieldNameSet = new Set(invalidShapeFieldNames);
2403
+ const ignoredFieldNameSet = new Set(ignoredFieldNames);
2404
+ return (options, allowPartialOverlap) => {
2405
+ const analysis = ((options, shapeFieldNameSet, invalidShapeFieldNameSet, ignoredFieldNameSet) => {
2406
+ const analysis = {
2407
+ dateStyle: void 0,
2408
+ timeStyle: void 0,
2409
+ me: {},
2410
+ pe: {},
2411
+ xe: {},
2412
+ oe: 0,
2413
+ ue: 0
2414
+ };
2415
+ for (const name of Object.keys(options)) {
2416
+ const value = options[name];
2417
+ void 0 === value || ignoredFieldNameSet.has(name) || (shapeFieldNameSet.has(name) ? "dateStyle" === name ? analysis.dateStyle = value : "timeStyle" === name ? analysis.timeStyle = value : analysis.me[name] = value : "era" === name ? analysis.pe[name] = value : invalidShapeFieldNameSet.has(name) ? "dateStyle" === name || "timeStyle" === name ? analysis.ue = 1 : analysis.oe = 1 : analysis.xe[name] = value);
2418
+ }
2419
+ return analysis;
2420
+ })(options, shapeFieldNameSet, invalidShapeFieldNameSet, ignoredFieldNameSet);
2421
+ const hasDateStyle = void 0 !== analysis.dateStyle;
2422
+ const hasTimeStyle = void 0 !== analysis.timeStyle;
2423
+ const hasAnyStyle = hasDateStyle || hasTimeStyle;
2424
+ const hasGranularShapeFields = Object.keys(analysis.me).length > 0;
2425
+ const hasInvalids = analysis.oe || analysis.ue;
2426
+ const hasShapeFields = hasGranularShapeFields || hasDateStyle || hasTimeStyle;
2427
+ const hasModifierFields = Object.keys(analysis.pe).length > 0;
2428
+ const hasStyleConflictFields = hasGranularShapeFields || hasModifierFields || analysis.oe;
2429
+ (!allowPartialOverlap && hasInvalids || allowPartialOverlap && hasInvalids && !hasShapeFields || hasAnyStyle && hasStyleConflictFields) && throwTypeError("Invalid formatting options");
2430
+ const transformedOptions = {};
2431
+ return hasAnyStyle || hasShapeFields || Object.assign(transformedOptions, defaultShapeFields), Object.assign(transformedOptions, analysis.me, analysis.pe, analysis.xe), hasDateStyle && (dateStyleReplacementFields ? Object.assign(transformedOptions, dateStyleReplacementFields[analysis.dateStyle]) : transformedOptions.dateStyle = analysis.dateStyle), hasTimeStyle && (transformedOptions.timeStyle = analysis.timeStyle), transformedOptions;
2432
+ };
2433
+ }
2434
+ const dateDefaultShapeFields = {
2435
+ year: "numeric",
2436
+ month: "numeric",
2437
+ day: "numeric"
2438
+ };
2439
+ const timeDefaultShapeFields = {
2440
+ hour: "numeric",
2441
+ minute: "numeric",
2442
+ second: "numeric"
2443
+ };
2444
+ const dateTimeDefaultShapeFields = /* @__PURE__ */ Object.assign({}, dateDefaultShapeFields, timeDefaultShapeFields);
2445
+ const zonedDateTimeDefaultShapeFields = /* @__PURE__ */ Object.assign({}, dateTimeDefaultShapeFields, { timeZoneName: "short" });
2446
+ const yearMonthDefaultShapeFields = {
2447
+ year: "numeric",
2448
+ month: "numeric"
2449
+ };
2450
+ const monthDayDefaultShapeFields = {
2451
+ month: "numeric",
2452
+ day: "numeric"
2453
+ };
2454
+ const dateShapeFieldNames = [
2455
+ "weekday",
2456
+ "year",
2457
+ "month",
2458
+ "day",
2459
+ "dateStyle"
2460
+ ];
2461
+ const timeShapeFieldNames = [
2462
+ "dayPeriod",
2463
+ "hour",
2464
+ "minute",
2465
+ "second",
2466
+ "fractionalSecondDigits",
2467
+ "timeStyle"
2468
+ ];
2469
+ const dateTimeShapeFieldNames = /* @__PURE__ */ dateShapeFieldNames.concat(timeShapeFieldNames);
2470
+ const yearMonthIgnoredFieldNames = /* @__PURE__ */ ["weekday", "day"].concat(timeShapeFieldNames);
2471
+ const monthDayIgnoredFieldNames = /* @__PURE__ */ ["weekday", "year"].concat(timeShapeFieldNames);
2472
+ const transformInstantOptions = /* @__PURE__ */ createOptionsTransformer(dateTimeShapeFieldNames, [], [], dateTimeDefaultShapeFields);
2473
+ const transformZonedOptions = /* @__PURE__ */ createOptionsTransformer(dateTimeShapeFieldNames, [], [], zonedDateTimeDefaultShapeFields);
2474
+ const transformDateTimeOptions = /* @__PURE__ */ createOptionsTransformer(dateTimeShapeFieldNames, [], ["timeZoneName"], dateTimeDefaultShapeFields);
2475
+ const transformDateOptions = /* @__PURE__ */ createOptionsTransformer(dateShapeFieldNames, timeShapeFieldNames, ["timeZoneName"], dateDefaultShapeFields);
2476
+ const transformTimeOptions = /* @__PURE__ */ createOptionsTransformer(timeShapeFieldNames, dateShapeFieldNames, ["timeZoneName", "era"], timeDefaultShapeFields);
2477
+ const transformYearMonthOptions = /* @__PURE__ */ createOptionsTransformer([
2478
+ "year",
2479
+ "month",
2480
+ "dateStyle"
2481
+ ], yearMonthIgnoredFieldNames, ["timeZoneName"], yearMonthDefaultShapeFields, {
2482
+ full: {
2483
+ year: "numeric",
2484
+ month: "long"
2485
+ },
2486
+ long: {
2487
+ year: "numeric",
2488
+ month: "long"
2489
+ },
2490
+ medium: {
2491
+ year: "numeric",
2492
+ month: "short"
2493
+ },
2494
+ short: {
2495
+ year: "2-digit",
2496
+ month: "numeric"
2497
+ }
2498
+ });
2499
+ const transformMonthDayOptions = /* @__PURE__ */ createOptionsTransformer([
2500
+ "month",
2501
+ "day",
2502
+ "dateStyle"
2503
+ ], monthDayIgnoredFieldNames, ["timeZoneName", "era"], monthDayDefaultShapeFields, {
2504
+ full: {
2505
+ month: "long",
2506
+ day: "numeric"
2507
+ },
2508
+ long: {
2509
+ month: "long",
2510
+ day: "numeric"
2511
+ },
2512
+ medium: {
2513
+ month: "short",
2514
+ day: "numeric"
2515
+ },
2516
+ short: {
2517
+ month: "numeric",
2518
+ day: "numeric"
2519
+ }
2520
+ });
2521
+ function zonedDateTimeWithPlainTime(zonedDateTimeSlots, plainTimeFields) {
2522
+ const { timeZone } = zonedDateTimeSlots;
2523
+ const isoDateTime = zonedEpochSlotsToIso(zonedDateTimeSlots);
2524
+ const { offsetNanoseconds } = isoDateTime;
2525
+ const time = plainTimeFields || timeFieldDefaults;
2526
+ let epochNano;
2527
+ return epochNano = plainTimeFields ? getMatchingInstantFor(timeZone, combineDateAndTime(isoDateTime, time), offsetNanoseconds, 2) : getStartOfDayInstantFor(timeZone, combineDateAndTime(isoDateTime, time)), createZonedEpochNanoSlots(epochNano, timeZone, zonedDateTimeSlots.calendar);
2528
+ }
2529
+ function getCurrentIsoDateTime(timeZone) {
2530
+ const epochNano = getCurrentEpochNano();
2531
+ const offsetNano = timeZone.C(epochNano);
2532
+ return epochNanoToIsoDateTime(epochNano + BigInt(offsetNano));
2533
+ }
2534
+ function getCurrentEpochNano() {
2535
+ return BigInt(Date.now()) * bigNanoInMilli;
2536
+ }
2537
+ function getCurrentTimeZoneId() {
2538
+ return new RawDateTimeFormat().resolvedOptions().timeZone;
2539
+ }
2540
+ //#endregion
2541
+ exports.RawDateTimeFormat = RawDateTimeFormat;
2542
+ exports.absDuration = absDuration;
2543
+ exports.addDurations = addDurations;
2544
+ exports.applyPlainFormatTimeZone = applyPlainFormatTimeZone;
2545
+ exports.applyZonedFormatTimeZone = applyZonedFormatTimeZone;
2546
+ exports.bigNanoInMilli = bigNanoInMilli;
2547
+ exports.checkEpochNanoInBounds = checkEpochNanoInBounds;
2548
+ exports.checkIsoDateInBounds = checkIsoDateInBounds;
2549
+ exports.checkIsoDateTimeInBounds = checkIsoDateTimeInBounds;
2550
+ exports.checkIsoYearMonthInBounds = checkIsoYearMonthInBounds;
2551
+ exports.checkResolvedCalendarCompatible = checkResolvedCalendarCompatible;
2552
+ exports.combineDateAndTime = combineDateAndTime;
2553
+ exports.compareDurations = compareDurations;
2554
+ exports.compareInstants = compareInstants;
2555
+ exports.compareIsoDateFields = compareIsoDateFields;
2556
+ exports.compareIsoDateTimeFields = compareIsoDateTimeFields;
2557
+ exports.compareTimeFields = compareTimeFields;
2558
+ exports.compareZonedDateTimes = compareZonedDateTimes;
2559
+ exports.computeBigNanoInc = computeBigNanoInc;
2560
+ exports.computeCalendarDateFields = computeCalendarDateFields;
2561
+ exports.computeCalendarDayOfYear = computeCalendarDayOfYear;
2562
+ exports.computeCalendarDaysInMonth = computeCalendarDaysInMonth;
2563
+ exports.computeCalendarDaysInYear = computeCalendarDaysInYear;
2564
+ exports.computeCalendarEraFields = computeCalendarEraFields;
2565
+ exports.computeCalendarInLeapYear = computeCalendarInLeapYear;
2566
+ exports.computeCalendarMonthCode = computeCalendarMonthCode;
2567
+ exports.computeCalendarMonthsInYear = computeCalendarMonthsInYear;
2568
+ exports.computeCalendarWeekOfYear = computeCalendarWeekOfYear;
2569
+ exports.computeCalendarYearOfWeek = computeCalendarYearOfWeek;
2570
+ exports.computeIsoDayOfWeek = computeIsoDayOfWeek;
2571
+ exports.computeNanoInc = computeNanoInc;
2572
+ exports.computeZonedHoursInDay = computeZonedHoursInDay;
2573
+ exports.computeZonedStartOfDay = computeZonedStartOfDay;
2574
+ exports.convertPlainMonthDayToDate = convertPlainMonthDayToDate;
2575
+ exports.convertPlainYearMonthToDate = convertPlainYearMonthToDate;
2576
+ exports.convertToPlainMonthDay = convertToPlainMonthDay;
2577
+ exports.convertToPlainYearMonth = convertToPlainYearMonth;
2578
+ exports.createDateSlots = createDateSlots;
2579
+ exports.createDateTimeSlots = createDateTimeSlots;
2580
+ exports.createDurationSlots = createDurationSlots;
2581
+ exports.createEpochNanoSlots = createEpochNanoSlots;
2582
+ exports.createNameDescriptors = createNameDescriptors;
2583
+ exports.createPlainDateTimeFromRefinedFields = createPlainDateTimeFromRefinedFields;
2584
+ exports.createPropDescriptors = createPropDescriptors;
2585
+ exports.createPropGetters = createPropGetters;
2586
+ exports.createStringTagDescriptors = createStringTagDescriptors;
2587
+ exports.createTimeSlots = createTimeSlots;
2588
+ exports.createZonedEpochNanoSlots = createZonedEpochNanoSlots;
2589
+ exports.diffInstants = diffInstants;
2590
+ exports.diffPlainDateTimes = diffPlainDateTimes;
2591
+ exports.diffPlainDates = diffPlainDates;
2592
+ exports.diffPlainTimes = diffPlainTimes;
2593
+ exports.diffPlainYearMonth = diffPlainYearMonth;
2594
+ exports.diffZonedDateTimes = diffZonedDateTimes;
2595
+ exports.durationGetters = durationGetters;
2596
+ exports.epochMilliToInstant = epochMilliToInstant;
2597
+ exports.epochNanoToInstant = epochNanoToInstant;
2598
+ exports.exoticCalendarRequired = exoticCalendarRequired;
2599
+ exports.forbiddenValueOf = forbiddenValueOf;
2600
+ exports.formatDurationIso = formatDurationIso;
2601
+ exports.formatInstantIso = formatInstantIso;
2602
+ exports.formatOffsetNano = formatOffsetNano;
2603
+ exports.formatPlainDateIso = formatPlainDateIso;
2604
+ exports.formatPlainDateTimeIso = formatPlainDateTimeIso;
2605
+ exports.formatPlainMonthDayIso = formatPlainMonthDayIso;
2606
+ exports.formatPlainTimeIso = formatPlainTimeIso;
2607
+ exports.formatPlainYearMonthIso = formatPlainYearMonthIso;
2608
+ exports.formatZonedDateTimeIso = formatZonedDateTimeIso;
2609
+ exports.getCalendarSlotId = getCalendarSlotId;
2610
+ exports.getCommonCalendar = getCommonCalendar;
2611
+ exports.getCurrentEpochNano = getCurrentEpochNano;
2612
+ exports.getCurrentIsoDateTime = getCurrentIsoDateTime;
2613
+ exports.getCurrentTimeZoneId = getCurrentTimeZoneId;
2614
+ exports.getEpochMilli = getEpochMilli;
2615
+ exports.getEpochNano = getEpochNano;
2616
+ exports.getTimeZoneTransitionEpochNanoseconds = getTimeZoneTransitionEpochNanoseconds;
2617
+ exports.getZonedTimeZoneId = getZonedTimeZoneId;
2618
+ exports.gregoryCalendarId = gregoryCalendarId;
2619
+ exports.instantToZonedDateTime = instantToZonedDateTime;
2620
+ exports.instantsEqual = instantsEqual;
2621
+ exports.invalidBag = invalidBag;
2622
+ exports.invalidCalendar = invalidCalendar;
2623
+ exports.invalidCallingContext = invalidCallingContext;
2624
+ exports.invalidTimeZone = invalidTimeZone;
2625
+ exports.isObjectLike = isObjectLike;
2626
+ exports.isoCalendarId = isoCalendarId;
2627
+ exports.isoDateTimeToEpochMilli = isoDateTimeToEpochMilli;
2628
+ exports.isoDateToEpochMilli = isoDateToEpochMilli;
2629
+ exports.isoEpochFirstLeapYear = isoEpochFirstLeapYear;
2630
+ exports.mapProps = mapProps;
2631
+ exports.mergeDurationFields = mergeDurationFields;
2632
+ exports.mergePlainDateFields = mergePlainDateFields;
2633
+ exports.mergePlainDateTimeFields = mergePlainDateTimeFields;
2634
+ exports.mergePlainMonthDayFields = mergePlainMonthDayFields;
2635
+ exports.mergePlainTimeFields = mergePlainTimeFields;
2636
+ exports.mergePlainYearMonthFields = mergePlainYearMonthFields;
2637
+ exports.mergeZonedDateTimeFields = mergeZonedDateTimeFields;
2638
+ exports.moveDate = moveDate;
2639
+ exports.moveDateTime = moveDateTime;
2640
+ exports.moveEpochNano = moveEpochNano;
2641
+ exports.moveTime = moveTime;
2642
+ exports.moveYearMonth = moveYearMonth;
2643
+ exports.moveZonedEpochSlots = moveZonedEpochSlots;
2644
+ exports.negateDuration = negateDuration;
2645
+ exports.negateDurationFields = negateDurationFields;
2646
+ exports.noop = noop;
2647
+ exports.parseCalendarId = parseCalendarId;
2648
+ exports.parseDuration = parseDuration;
2649
+ exports.parseInstant = parseInstant;
2650
+ exports.parsePlainDate = parsePlainDate;
2651
+ exports.parsePlainDateTime = parsePlainDateTime;
2652
+ exports.parsePlainMonthDay = parsePlainMonthDay;
2653
+ exports.parsePlainTime = parsePlainTime;
2654
+ exports.parsePlainYearMonth = parsePlainYearMonth;
2655
+ exports.parseRelativeToSlots = parseRelativeToSlots;
2656
+ exports.parseTimeZoneId = parseTimeZoneId;
2657
+ exports.parseZonedDateTime = parseZonedDateTime;
2658
+ exports.plainDateTimeToZonedDateTime = plainDateTimeToZonedDateTime;
2659
+ exports.plainDateTimesEqual = plainDateTimesEqual;
2660
+ exports.plainDateToZonedDateTime = plainDateToZonedDateTime;
2661
+ exports.plainDatesEqual = plainDatesEqual;
2662
+ exports.plainMonthDaysEqual = plainMonthDaysEqual;
2663
+ exports.plainTimesEqual = plainTimesEqual;
2664
+ exports.plainYearMonthsEqual = plainYearMonthsEqual;
2665
+ exports.queryTimeZone = queryTimeZone;
2666
+ exports.refineDurationObjectLike = refineDurationObjectLike;
2667
+ exports.refineMaybeZonedDateTimeObjectLike = refineMaybeZonedDateTimeObjectLike;
2668
+ exports.refineOverflowOptions = refineOverflowOptions;
2669
+ exports.refinePlainDateObjectLike = refinePlainDateObjectLike;
2670
+ exports.refinePlainDateTimeObjectLike = refinePlainDateTimeObjectLike;
2671
+ exports.refinePlainMonthDayObjectLike = refinePlainMonthDayObjectLike;
2672
+ exports.refinePlainTimeObjectLike = refinePlainTimeObjectLike;
2673
+ exports.refinePlainYearMonthObjectLike = refinePlainYearMonthObjectLike;
2674
+ exports.refineRoundingOptions = refineRoundingOptions;
2675
+ exports.refineTimeZoneId = refineTimeZoneId;
2676
+ exports.refineZonedDateTimeObjectLike = refineZonedDateTimeObjectLike;
2677
+ exports.refineZonedFieldOptions = refineZonedFieldOptions;
2678
+ exports.requireNumberIsInteger = requireNumberIsInteger;
2679
+ exports.requireString = requireString;
2680
+ exports.resolveTimeZoneId = resolveTimeZoneId;
2681
+ exports.roundBigNanoToDayOriginInc = roundBigNanoToDayOriginInc;
2682
+ exports.roundDateTimeToNano = roundDateTimeToNano;
2683
+ exports.roundDuration = roundDuration;
2684
+ exports.roundTimeToNano = roundTimeToNano;
2685
+ exports.roundZonedEpochSlotsToUnit = roundZonedEpochSlotsToUnit;
2686
+ exports.throwRangeError = throwRangeError;
2687
+ exports.throwTypeError = throwTypeError;
2688
+ exports.timeFieldDefaults = timeFieldDefaults;
2689
+ exports.timeFieldsToMilli = timeFieldsToMilli;
2690
+ exports.timeGetters = timeGetters;
2691
+ exports.toBigInt = toBigInt;
2692
+ exports.toStrictInteger = toStrictInteger;
2693
+ exports.totalDuration = totalDuration;
2694
+ exports.transformDateOptions = transformDateOptions;
2695
+ exports.transformDateTimeOptions = transformDateTimeOptions;
2696
+ exports.transformInstantOptions = transformInstantOptions;
2697
+ exports.transformMonthDayOptions = transformMonthDayOptions;
2698
+ exports.transformTimeOptions = transformTimeOptions;
2699
+ exports.transformYearMonthOptions = transformYearMonthOptions;
2700
+ exports.transformZonedOptions = transformZonedOptions;
2701
+ exports.validateDurationFields = validateDurationFields;
2702
+ exports.validateIsoDateFields = validateIsoDateFields;
2703
+ exports.validateIsoDateTimeFields = validateIsoDateTimeFields;
2704
+ exports.validateTimeFields = validateTimeFields;
2705
+ exports.zonedDateTimeToInstant = zonedDateTimeToInstant;
2706
+ exports.zonedDateTimeToPlainDate = zonedDateTimeToPlainDate;
2707
+ exports.zonedDateTimeToPlainDateTime = zonedDateTimeToPlainDateTime;
2708
+ exports.zonedDateTimeToPlainTime = zonedDateTimeToPlainTime;
2709
+ exports.zonedDateTimeWithPlainTime = zonedDateTimeWithPlainTime;
2710
+ exports.zonedDateTimesEqual = zonedDateTimesEqual;
2711
+ exports.zonedEpochSlotsToIso = zonedEpochSlotsToIso;