@rikdotcodes/temporal-polyfill 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/global.js ADDED
@@ -0,0 +1,3422 @@
1
+ !function() {
2
+ "use strict";
3
+ function clampProp(props, propName, min, max, overflow) {
4
+ return clampEntity(propName, ((props, propName) => {
5
+ const propVal = props[propName];
6
+ if (void 0 === propVal) {
7
+ throw new TypeError(missingField(propName));
8
+ }
9
+ return propVal;
10
+ })(props, propName), min, max, overflow);
11
+ }
12
+ function clampEntity(entityName, num, min, max, overflow, choices) {
13
+ const clamped = clampNumber(num, min, max);
14
+ if (overflow && num !== clamped) {
15
+ throw new RangeError(numberOutOfRange(entityName, num, min, max, choices));
16
+ }
17
+ return clamped;
18
+ }
19
+ function isObjectLike(arg) {
20
+ return null !== arg && /object|function/.test(typeof arg);
21
+ }
22
+ function memoize(generator, MapClass = Map) {
23
+ const map = new MapClass;
24
+ return (key, ...otherArgs) => {
25
+ if (map.has(key)) {
26
+ return map.get(key);
27
+ }
28
+ const val = generator(key, ...otherArgs);
29
+ return map.set(key, val), val;
30
+ };
31
+ }
32
+ function createNameDescriptors(name) {
33
+ return createPropDescriptors({
34
+ name: name
35
+ }, 1);
36
+ }
37
+ function createPropDescriptors(propVals, readonly) {
38
+ return mapProps((value => ({
39
+ value: value,
40
+ configurable: 1,
41
+ writable: !readonly
42
+ })), propVals);
43
+ }
44
+ function createGetterDescriptors(getters) {
45
+ return mapProps((getter => ({
46
+ get: getter,
47
+ configurable: 1
48
+ })), getters);
49
+ }
50
+ function createStringTagDescriptors(value) {
51
+ return {
52
+ [Symbol.toStringTag]: {
53
+ value: value,
54
+ configurable: 1
55
+ }
56
+ };
57
+ }
58
+ function zipProps(propNamesRev, args) {
59
+ const res = {};
60
+ let i = propNamesRev.length;
61
+ for (const arg of args) {
62
+ res[propNamesRev[--i]] = arg;
63
+ }
64
+ return res;
65
+ }
66
+ function mapProps(transformer, props, extraArg) {
67
+ const res = {};
68
+ for (const propName in props) {
69
+ res[propName] = transformer(props[propName], propName, extraArg);
70
+ }
71
+ return res;
72
+ }
73
+ function mapPropNames(generator, propNames, extraArg) {
74
+ const props = {};
75
+ for (let i = 0; i < propNames.length; i++) {
76
+ const propName = propNames[i];
77
+ props[propName] = generator(propName, i, extraArg);
78
+ }
79
+ return props;
80
+ }
81
+ function remapProps(oldNames, newNames, oldProps) {
82
+ const newProps = {};
83
+ for (let i = 0; i < oldNames.length; i++) {
84
+ newProps[newNames[i]] = oldProps[oldNames[i]];
85
+ }
86
+ return newProps;
87
+ }
88
+ function pluckProps(propNames, props) {
89
+ const res = Object.create(null);
90
+ for (const propName of propNames) {
91
+ res[propName] = props[propName];
92
+ }
93
+ return res;
94
+ }
95
+ function hasAnyPropsByName(props, names) {
96
+ for (const name of names) {
97
+ if (name in props) {
98
+ return 1;
99
+ }
100
+ }
101
+ return 0;
102
+ }
103
+ function allPropsEqual(propNames, props0, props1) {
104
+ for (const propName of propNames) {
105
+ if (props0[propName] !== props1[propName]) {
106
+ return 0;
107
+ }
108
+ }
109
+ return 1;
110
+ }
111
+ function zeroOutProps(propNames, clearUntilI, props) {
112
+ const copy = {
113
+ ...props
114
+ };
115
+ for (let i = 0; i < clearUntilI; i++) {
116
+ copy[propNames[i]] = 0;
117
+ }
118
+ return copy;
119
+ }
120
+ function bindArgs(f, ...boundArgs) {
121
+ return (...dynamicArgs) => f(...boundArgs, ...dynamicArgs);
122
+ }
123
+ function capitalize(s) {
124
+ return s[0].toUpperCase() + s.substring(1);
125
+ }
126
+ function sortStrings(strs) {
127
+ return strs.slice().sort();
128
+ }
129
+ function padNumber(digits, num) {
130
+ return String(num).padStart(digits, "0");
131
+ }
132
+ function compareNumbers(a, b) {
133
+ return Math.sign(a - b);
134
+ }
135
+ function clampNumber(num, min, max) {
136
+ return Math.min(Math.max(num, min), max);
137
+ }
138
+ function divModFloor(num, divisor) {
139
+ return [ Math.floor(num / divisor), modFloor(num, divisor) ];
140
+ }
141
+ function modFloor(num, divisor) {
142
+ return (num % divisor + divisor) % divisor;
143
+ }
144
+ function divModTrunc(num, divisor) {
145
+ return [ divTrunc(num, divisor), modTrunc(num, divisor) ];
146
+ }
147
+ function divTrunc(num, divisor) {
148
+ return Math.trunc(num / divisor) || 0;
149
+ }
150
+ function modTrunc(num, divisor) {
151
+ return num % divisor || 0;
152
+ }
153
+ function hasHalf(num) {
154
+ return .5 === Math.abs(num % 1);
155
+ }
156
+ function givenFieldsToBigNano(fields, largestUnit, fieldNames) {
157
+ let timeNano = 0, days = 0;
158
+ for (let unit = 0; unit <= largestUnit; unit++) {
159
+ const fieldVal = fields[fieldNames[unit]], unitNano = unitNanoMap[unit], unitInDay = nanoInUtcDay / unitNano, [unitDays, leftoverUnits] = divModTrunc(fieldVal, unitInDay);
160
+ timeNano += leftoverUnits * unitNano, days += unitDays;
161
+ }
162
+ const [timeDays, leftoverNano] = divModTrunc(timeNano, nanoInUtcDay);
163
+ return [ days + timeDays, leftoverNano ];
164
+ }
165
+ function nanoToGivenFields(nano, largestUnit, fieldNames) {
166
+ const fields = {};
167
+ for (let unit = largestUnit; unit >= 0; unit--) {
168
+ const divisor = unitNanoMap[unit];
169
+ fields[fieldNames[unit]] = divTrunc(nano, divisor), nano = modTrunc(nano, divisor);
170
+ }
171
+ return fields;
172
+ }
173
+ function createBigNano(days, timeNano) {
174
+ let [extraDays, newTimeNano] = divModTrunc(timeNano, nanoInUtcDay), newDays = days + extraDays;
175
+ const newDaysSign = Math.sign(newDays);
176
+ return newDaysSign && newDaysSign === -Math.sign(newTimeNano) && (newDays -= newDaysSign,
177
+ newTimeNano += newDaysSign * nanoInUtcDay), [ newDays, newTimeNano ];
178
+ }
179
+ function addBigNanos(a, b, sign = 1) {
180
+ return createBigNano(a[0] + b[0] * sign, a[1] + b[1] * sign);
181
+ }
182
+ function moveBigNano(a, b) {
183
+ return createBigNano(a[0], a[1] + b);
184
+ }
185
+ function diffBigNanos(a, b) {
186
+ return addBigNanos(b, a, -1);
187
+ }
188
+ function compareBigNanos(a, b) {
189
+ return compareNumbers(a[0], b[0]) || compareNumbers(a[1], b[1]);
190
+ }
191
+ function bigNanoOutside(subject, rangeStart, rangeEndExcl) {
192
+ return -1 === compareBigNanos(subject, rangeStart) || 1 === compareBigNanos(subject, rangeEndExcl);
193
+ }
194
+ function bigIntToBigNano(num, multiplierNano = 1) {
195
+ const wholeInDay = BigInt(nanoInUtcDay / multiplierNano);
196
+ return [ Number(num / wholeInDay), Number(num % wholeInDay) * multiplierNano ];
197
+ }
198
+ function numberToBigNano(num, multiplierNano = 1) {
199
+ const wholeInDay = nanoInUtcDay / multiplierNano, [days, remainder] = divModTrunc(num, wholeInDay);
200
+ return [ days, remainder * multiplierNano ];
201
+ }
202
+ function bigNanoToNumber(bigNano, divisorNano = 1, exact) {
203
+ const [days, timeNano] = bigNano, [whole, remainderNano] = divModTrunc(timeNano, divisorNano);
204
+ return days * (nanoInUtcDay / divisorNano) + (whole + (exact ? remainderNano / divisorNano : 0));
205
+ }
206
+ function divModBigNano(bigNano, divisorNano, divModFunc = divModFloor) {
207
+ const [days, timeNano] = bigNano, [whole, remainderNano] = divModFunc(timeNano, divisorNano);
208
+ return [ days * (nanoInUtcDay / divisorNano) + whole, remainderNano ];
209
+ }
210
+ function requireIntegerOrUndefined(input) {
211
+ if (void 0 !== input) {
212
+ return requireInteger(input);
213
+ }
214
+ }
215
+ function requirePositiveInteger(arg) {
216
+ return requireNumberIsPositive(requireInteger(arg));
217
+ }
218
+ function requireInteger(arg) {
219
+ return requireNumberIsInteger(requireNumber(arg));
220
+ }
221
+ function requirePropDefined(optionName, optionVal) {
222
+ if (null == optionVal) {
223
+ throw new RangeError(missingField(optionName));
224
+ }
225
+ return optionVal;
226
+ }
227
+ function requireObjectLike(arg) {
228
+ if (!isObjectLike(arg)) {
229
+ throw new TypeError(invalidObject);
230
+ }
231
+ return arg;
232
+ }
233
+ function requireType(typeName, arg, entityName = typeName) {
234
+ if (typeof arg !== typeName) {
235
+ throw new TypeError(invalidEntity(entityName, arg));
236
+ }
237
+ return arg;
238
+ }
239
+ function requireNumberIsInteger(num, entityName = "number") {
240
+ if (!Number.isInteger(num)) {
241
+ throw new RangeError(expectedInteger(entityName, num));
242
+ }
243
+ return num || 0;
244
+ }
245
+ function requireNumberIsPositive(num, entityName = "number") {
246
+ if (num <= 0) {
247
+ throw new RangeError(expectedPositive(entityName, num));
248
+ }
249
+ return num;
250
+ }
251
+ function toString(arg) {
252
+ if ("symbol" == typeof arg) {
253
+ throw new TypeError(forbiddenSymbolToString);
254
+ }
255
+ return String(arg);
256
+ }
257
+ function toStringViaPrimitive(arg, entityName) {
258
+ return isObjectLike(arg) ? String(arg) : requireString(arg, entityName);
259
+ }
260
+ function toBigInt(bi) {
261
+ if ("string" == typeof bi) {
262
+ return BigInt(bi);
263
+ }
264
+ if ("bigint" != typeof bi) {
265
+ throw new TypeError(invalidBigInt(bi));
266
+ }
267
+ return bi;
268
+ }
269
+ function toNumber(arg, entityName = "number") {
270
+ if ("bigint" == typeof arg) {
271
+ throw new TypeError(forbiddenBigIntToNumber(entityName));
272
+ }
273
+ if (arg = Number(arg), !Number.isFinite(arg)) {
274
+ throw new RangeError(expectedFinite(entityName, arg));
275
+ }
276
+ return arg;
277
+ }
278
+ function toInteger(arg, entityName) {
279
+ return Math.trunc(toNumber(arg, entityName)) || 0;
280
+ }
281
+ function toStrictInteger(arg, entityName) {
282
+ return requireNumberIsInteger(toNumber(arg, entityName), entityName);
283
+ }
284
+ function toPositiveInteger(arg, entityName) {
285
+ return requireNumberIsPositive(toInteger(arg, entityName), entityName);
286
+ }
287
+ function checkIsoYearMonthInBounds(isoFields) {
288
+ return clampProp(isoFields, "isoYear", isoYearMin, isoYearMax, 1), isoFields.isoYear === isoYearMin ? clampProp(isoFields, "isoMonth", 4, 12, 1) : isoFields.isoYear === isoYearMax && clampProp(isoFields, "isoMonth", 1, 9, 1),
289
+ isoFields;
290
+ }
291
+ function checkIsoDateInBounds(isoFields) {
292
+ return checkIsoDateTimeInBounds({
293
+ ...isoFields,
294
+ ...isoTimeFieldDefaults,
295
+ isoHour: 12
296
+ }), isoFields;
297
+ }
298
+ function checkIsoDateTimeInBounds(isoFields) {
299
+ const isoYear = clampProp(isoFields, "isoYear", isoYearMin, isoYearMax, 1), nudge = isoYear === isoYearMin ? 1 : isoYear === isoYearMax ? -1 : 0;
300
+ return nudge && checkEpochNanoInBounds(isoToEpochNano({
301
+ ...isoFields,
302
+ isoDay: isoFields.isoDay + nudge,
303
+ isoNanosecond: isoFields.isoNanosecond - nudge
304
+ })), isoFields;
305
+ }
306
+ function checkEpochNanoInBounds(epochNano) {
307
+ if (!epochNano || bigNanoOutside(epochNano, epochNanoMin, epochNanoMax)) {
308
+ throw new RangeError(outOfBoundsDate);
309
+ }
310
+ return epochNano;
311
+ }
312
+ function isoTimeFieldsToNano(isoTimeFields) {
313
+ return givenFieldsToBigNano(isoTimeFields, 5, isoTimeFieldNamesAsc)[1];
314
+ }
315
+ function nanoToIsoTimeAndDay(nano) {
316
+ const [dayDelta, timeNano] = divModFloor(nano, nanoInUtcDay);
317
+ return [ nanoToGivenFields(timeNano, 5, isoTimeFieldNamesAsc), dayDelta ];
318
+ }
319
+ function epochNanoToSecMod(epochNano) {
320
+ return divModBigNano(epochNano, nanoInSec);
321
+ }
322
+ function isoToEpochMilli(isoDateTimeFields) {
323
+ return isoArgsToEpochMilli(isoDateTimeFields.isoYear, isoDateTimeFields.isoMonth, isoDateTimeFields.isoDay, isoDateTimeFields.isoHour, isoDateTimeFields.isoMinute, isoDateTimeFields.isoSecond, isoDateTimeFields.isoMillisecond);
324
+ }
325
+ function isoToEpochNano(isoFields) {
326
+ const epochMilli = isoToEpochMilli(isoFields);
327
+ if (void 0 !== epochMilli) {
328
+ const [days, milliRemainder] = divModTrunc(epochMilli, milliInDay);
329
+ return [ days, milliRemainder * nanoInMilli + (isoFields.isoMicrosecond || 0) * nanoInMicro + (isoFields.isoNanosecond || 0) ];
330
+ }
331
+ }
332
+ function isoToEpochNanoWithOffset(isoFields, offsetNano) {
333
+ const [newIsoTimeFields, dayDelta] = nanoToIsoTimeAndDay(isoTimeFieldsToNano(isoFields) - offsetNano);
334
+ return checkEpochNanoInBounds(isoToEpochNano({
335
+ ...isoFields,
336
+ isoDay: isoFields.isoDay + dayDelta,
337
+ ...newIsoTimeFields
338
+ }));
339
+ }
340
+ function isoArgsToEpochSec(...args) {
341
+ return isoArgsToEpochMilli(...args) / milliInSec;
342
+ }
343
+ function isoArgsToEpochMilli(...args) {
344
+ const [legacyDate, daysNudged] = isoToLegacyDate(...args), epochMilli = legacyDate.valueOf();
345
+ if (!isNaN(epochMilli)) {
346
+ return epochMilli - daysNudged * milliInDay;
347
+ }
348
+ }
349
+ function isoToLegacyDate(isoYear, isoMonth = 1, isoDay = 1, isoHour = 0, isoMinute = 0, isoSec = 0, isoMilli = 0) {
350
+ const daysNudged = isoYear === isoYearMin ? 1 : isoYear === isoYearMax ? -1 : 0, legacyDate = new Date(0);
351
+ return legacyDate.setUTCHours(isoHour, isoMinute, isoSec, isoMilli), legacyDate.setUTCFullYear(isoYear, isoMonth - 1, isoDay + daysNudged),
352
+ [ legacyDate, daysNudged ];
353
+ }
354
+ function epochNanoToIso(epochNano, offsetNano) {
355
+ let [days, timeNano] = moveBigNano(epochNano, offsetNano);
356
+ timeNano < 0 && (timeNano += nanoInUtcDay, days -= 1);
357
+ const [timeMilli, nanoRemainder] = divModFloor(timeNano, nanoInMilli), [isoMicrosecond, isoNanosecond] = divModFloor(nanoRemainder, nanoInMicro);
358
+ return epochMilliToIso(days * milliInDay + timeMilli, isoMicrosecond, isoNanosecond);
359
+ }
360
+ function epochMilliToIso(epochMilli, isoMicrosecond = 0, isoNanosecond = 0) {
361
+ const daysOver = Math.ceil(Math.max(0, Math.abs(epochMilli) - maxMilli) / milliInDay) * Math.sign(epochMilli), legacyDate = new Date(epochMilli - daysOver * milliInDay);
362
+ return zipProps(isoDateTimeFieldNamesAsc, [ legacyDate.getUTCFullYear(), legacyDate.getUTCMonth() + 1, legacyDate.getUTCDate() + daysOver, legacyDate.getUTCHours(), legacyDate.getUTCMinutes(), legacyDate.getUTCSeconds(), legacyDate.getUTCMilliseconds(), isoMicrosecond, isoNanosecond ]);
363
+ }
364
+ function hashIntlFormatParts(intlFormat, epochMilli) {
365
+ if (epochMilli < -maxMilli) {
366
+ throw new RangeError(outOfBoundsDate);
367
+ }
368
+ const parts = intlFormat.formatToParts(epochMilli), hash = {};
369
+ for (const part of parts) {
370
+ hash[part.type] = part.value;
371
+ }
372
+ return hash;
373
+ }
374
+ function computeIsoDateParts(isoFields) {
375
+ return [ isoFields.isoYear, isoFields.isoMonth, isoFields.isoDay ];
376
+ }
377
+ function computeIsoMonthCodeParts(_isoYear, isoMonth) {
378
+ return [ isoMonth, 0 ];
379
+ }
380
+ function computeIsoMonthsInYear() {
381
+ return isoMonthsInYear;
382
+ }
383
+ function computeIsoDaysInMonth(isoYear, isoMonth) {
384
+ switch (isoMonth) {
385
+ case 2:
386
+ return computeIsoInLeapYear(isoYear) ? 29 : 28;
387
+
388
+ case 4:
389
+ case 6:
390
+ case 9:
391
+ case 11:
392
+ return 30;
393
+ }
394
+ return 31;
395
+ }
396
+ function computeIsoDaysInYear(isoYear) {
397
+ return computeIsoInLeapYear(isoYear) ? 366 : 365;
398
+ }
399
+ function computeIsoInLeapYear(isoYear) {
400
+ return isoYear % 4 == 0 && (isoYear % 100 != 0 || isoYear % 400 == 0);
401
+ }
402
+ function computeIsoDayOfWeek(isoDateFields) {
403
+ const [legacyDate, daysNudged] = isoToLegacyDate(isoDateFields.isoYear, isoDateFields.isoMonth, isoDateFields.isoDay);
404
+ return modFloor(legacyDate.getUTCDay() - daysNudged, 7) || 7;
405
+ }
406
+ function computeIsoEraParts(isoFields) {
407
+ return this.id === gregoryCalendarId ? (({isoYear: isoYear}) => isoYear < 1 ? [ "gregory-inverse", 1 - isoYear ] : [ "gregory", isoYear ])(isoFields) : "japanese" === this.id ? queryJapaneseEraParts(isoFields) : [];
408
+ }
409
+ function checkIsoDateTimeFields(isoDateTimeFields) {
410
+ return checkIsoDateFields(isoDateTimeFields), constrainIsoTimeFields(isoDateTimeFields, 1),
411
+ isoDateTimeFields;
412
+ }
413
+ function checkIsoDateFields(isoInternals) {
414
+ return constrainIsoDateFields(isoInternals, 1), isoInternals;
415
+ }
416
+ function isIsoDateFieldsValid(isoFields) {
417
+ return allPropsEqual(isoDateFieldNamesAsc, isoFields, constrainIsoDateFields(isoFields));
418
+ }
419
+ function constrainIsoDateFields(isoFields, overflow) {
420
+ const {isoYear: isoYear} = isoFields, isoMonth = clampProp(isoFields, "isoMonth", 1, computeIsoMonthsInYear(), overflow);
421
+ return {
422
+ isoYear: isoYear,
423
+ isoMonth: isoMonth,
424
+ isoDay: clampProp(isoFields, "isoDay", 1, computeIsoDaysInMonth(isoYear, isoMonth), overflow)
425
+ };
426
+ }
427
+ function constrainIsoTimeFields(isoTimeFields, overflow) {
428
+ return zipProps(isoTimeFieldNamesAsc, [ clampProp(isoTimeFields, "isoHour", 0, 23, overflow), clampProp(isoTimeFields, "isoMinute", 0, 59, overflow), clampProp(isoTimeFields, "isoSecond", 0, 59, overflow), clampProp(isoTimeFields, "isoMillisecond", 0, 999, overflow), clampProp(isoTimeFields, "isoMicrosecond", 0, 999, overflow), clampProp(isoTimeFields, "isoNanosecond", 0, 999, overflow) ]);
429
+ }
430
+ function createIntlFieldCache(epochMilliToIntlFields) {
431
+ return memoize((isoDateFields => {
432
+ const epochMilli = isoToEpochMilli(isoDateFields);
433
+ return epochMilliToIntlFields(epochMilli);
434
+ }), WeakMap);
435
+ }
436
+ function createIntlYearDataCache(epochMilliToIntlFields) {
437
+ const yearCorrection = epochMilliToIntlFields(0).year - isoEpochOriginYear;
438
+ return memoize((year => {
439
+ let intlFields, epochMilli = isoArgsToEpochMilli(year - yearCorrection), iterations = 0;
440
+ const millisReversed = [], monthStringsReversed = [];
441
+ do {
442
+ epochMilli += 400 * milliInDay;
443
+ } while ((intlFields = epochMilliToIntlFields(epochMilli)).year <= year);
444
+ do {
445
+ if (epochMilli += (1 - intlFields.day) * milliInDay, intlFields.year === year && (millisReversed.push(epochMilli),
446
+ monthStringsReversed.push(intlFields.monthString)), epochMilli -= milliInDay, ++iterations > 100 || epochMilli < -maxMilli) {
447
+ throw new RangeError(invalidProtocolResults);
448
+ }
449
+ } while ((intlFields = epochMilliToIntlFields(epochMilli)).year >= year);
450
+ return {
451
+ monthEpochMillis: millisReversed.reverse(),
452
+ monthStringToIndex: mapPropNamesToIndex(monthStringsReversed.reverse())
453
+ };
454
+ }));
455
+ }
456
+ function parseIntlYear(intlParts, calendarIdBase) {
457
+ let era, eraYear, year = parseIntlPartsYear(intlParts);
458
+ if (intlParts.era) {
459
+ const eraOrigins = eraOriginsByCalendarId[calendarIdBase], eraRemaps = eraRemapsByCalendarId[calendarIdBase] || {};
460
+ void 0 !== eraOrigins && (era = "islamic" === calendarIdBase ? "ah" : intlParts.era.normalize("NFD").toLowerCase().replace(/[^a-z0-9]/g, ""),
461
+ "bc" === era || "b" === era ? era = "bce" : "ad" === era || "a" === era ? era = "ce" : "beforeroc" === era && (era = "broc"),
462
+ era = eraRemaps[era] || era, eraYear = year, year = eraYearToYear(eraYear, eraOrigins[era] || 0));
463
+ }
464
+ return {
465
+ era: era,
466
+ eraYear: eraYear,
467
+ year: year
468
+ };
469
+ }
470
+ function parseIntlPartsYear(intlParts) {
471
+ return parseInt(intlParts.relatedYear || intlParts.year);
472
+ }
473
+ function computeIntlDateParts(isoFields) {
474
+ const {year: year, monthString: monthString, day: day} = this.queryFields(isoFields), {monthStringToIndex: monthStringToIndex} = this.queryYearData(year);
475
+ return [ year, monthStringToIndex[monthString] + 1, day ];
476
+ }
477
+ function computeIntlEpochMilli(year, month = 1, day = 1) {
478
+ return this.queryYearData(year).monthEpochMillis[month - 1] + (day - 1) * milliInDay;
479
+ }
480
+ function computeIntlMonthCodeParts(year, month) {
481
+ const leapMonth = computeIntlLeapMonth.call(this, year);
482
+ return [ monthToMonthCodeNumber(month, leapMonth), leapMonth === month ];
483
+ }
484
+ function computeIntlLeapMonth(year) {
485
+ const currentMonthStrings = queryMonthStrings(this, year), prevMonthStrings = queryMonthStrings(this, year - 1), currentLength = currentMonthStrings.length;
486
+ if (currentLength > prevMonthStrings.length) {
487
+ const leapMonthMeta = getCalendarLeapMonthMeta(this);
488
+ if (leapMonthMeta < 0) {
489
+ return -leapMonthMeta;
490
+ }
491
+ for (let i = 0; i < currentLength; i++) {
492
+ if (currentMonthStrings[i] !== prevMonthStrings[i]) {
493
+ return i + 1;
494
+ }
495
+ }
496
+ }
497
+ }
498
+ function computeIntlDaysInYear(year) {
499
+ return diffEpochMilliByDay(computeIntlEpochMilli.call(this, year), computeIntlEpochMilli.call(this, year + 1));
500
+ }
501
+ function computeIntlDaysInMonth(year, month) {
502
+ const {monthEpochMillis: monthEpochMillis} = this.queryYearData(year);
503
+ let nextMonth = month + 1, nextMonthEpochMilli = monthEpochMillis;
504
+ return nextMonth > monthEpochMillis.length && (nextMonth = 1, nextMonthEpochMilli = this.queryYearData(year + 1).monthEpochMillis),
505
+ diffEpochMilliByDay(monthEpochMillis[month - 1], nextMonthEpochMilli[nextMonth - 1]);
506
+ }
507
+ function computeIntlMonthsInYear(year) {
508
+ return this.queryYearData(year).monthEpochMillis.length;
509
+ }
510
+ function computeIntlEraParts(isoFields) {
511
+ const intlFields = this.queryFields(isoFields);
512
+ return [ intlFields.era, intlFields.eraYear ];
513
+ }
514
+ function queryMonthStrings(intlCalendar, year) {
515
+ return Object.keys(intlCalendar.queryYearData(year).monthStringToIndex);
516
+ }
517
+ function refineCalendarId(id) {
518
+ return resolveCalendarId(requireString(id));
519
+ }
520
+ function resolveCalendarId(id) {
521
+ if ((id = id.toLowerCase()) !== isoCalendarId && id !== gregoryCalendarId) {
522
+ const canonId = queryCalendarIntlFormat(id).resolvedOptions().calendar;
523
+ if (computeCalendarIdBase(id) !== computeCalendarIdBase(canonId)) {
524
+ throw new RangeError(invalidCalendar(id));
525
+ }
526
+ return canonId;
527
+ }
528
+ return id;
529
+ }
530
+ function computeCalendarIdBase(id) {
531
+ return "islamicc" === id && (id = "islamic"), id.split("-")[0];
532
+ }
533
+ function computeNativeWeekOfYear(isoFields) {
534
+ return this.weekParts(isoFields)[0];
535
+ }
536
+ function computeNativeYearOfWeek(isoFields) {
537
+ return this.weekParts(isoFields)[1];
538
+ }
539
+ function computeNativeDayOfYear(isoFields) {
540
+ const [year] = this.dateParts(isoFields);
541
+ return diffEpochMilliByDay(this.epochMilli(year), isoToEpochMilli(isoFields)) + 1;
542
+ }
543
+ function parseMonthCode(monthCode) {
544
+ const m = monthCodeRegExp.exec(monthCode);
545
+ if (!m) {
546
+ throw new RangeError(invalidMonthCode(monthCode));
547
+ }
548
+ return [ parseInt(m[1]), Boolean(m[2]) ];
549
+ }
550
+ function formatMonthCode(monthCodeNumber, isLeapMonth) {
551
+ return "M" + padNumber2(monthCodeNumber) + (isLeapMonth ? "L" : "");
552
+ }
553
+ function monthCodeNumberToMonth(monthCodeNumber, isLeapMonth, leapMonth) {
554
+ return monthCodeNumber + (isLeapMonth || leapMonth && monthCodeNumber >= leapMonth ? 1 : 0);
555
+ }
556
+ function monthToMonthCodeNumber(month, leapMonth) {
557
+ return month - (leapMonth && month >= leapMonth ? 1 : 0);
558
+ }
559
+ function eraYearToYear(eraYear, eraOrigin) {
560
+ return (eraOrigin + eraYear) * (Math.sign(eraOrigin) || 1) || 0;
561
+ }
562
+ function getCalendarEraOrigins(native) {
563
+ return eraOriginsByCalendarId[getCalendarIdBase(native)];
564
+ }
565
+ function getCalendarLeapMonthMeta(native) {
566
+ return leapMonthMetas[getCalendarIdBase(native)];
567
+ }
568
+ function getCalendarIdBase(native) {
569
+ return computeCalendarIdBase(native.id || isoCalendarId);
570
+ }
571
+ function refineOverflowOptions(options) {
572
+ return void 0 === options ? 0 : refineOverflow(requireObjectLike(options));
573
+ }
574
+ function refineZonedFieldOptions(options, defaultOffsetDisambig = 0) {
575
+ options = normalizeOptions(options);
576
+ const epochDisambig = refineEpochDisambig(options), offsetDisambig = refineOffsetDisambig(options, defaultOffsetDisambig);
577
+ return [ refineOverflow(options), offsetDisambig, epochDisambig ];
578
+ }
579
+ function refineDiffOptions(roundingModeInvert, options, defaultLargestUnit, maxUnit = 9, minUnit = 0, defaultRoundingMode = 4) {
580
+ options = normalizeOptions(options);
581
+ let largestUnit = refineLargestUnit(options, maxUnit, minUnit), roundingInc = parseRoundingIncInteger(options), roundingMode = refineRoundingMode(options, defaultRoundingMode);
582
+ const smallestUnit = refineSmallestUnit(options, maxUnit, minUnit, 1);
583
+ return null == largestUnit ? largestUnit = Math.max(defaultLargestUnit, smallestUnit) : checkLargestSmallestUnit(largestUnit, smallestUnit),
584
+ roundingInc = refineRoundingInc(roundingInc, smallestUnit, 1), roundingModeInvert && (roundingMode = (roundingMode => roundingMode < 4 ? (roundingMode + 2) % 4 : roundingMode)(roundingMode)),
585
+ [ largestUnit, smallestUnit, roundingInc, roundingMode ];
586
+ }
587
+ function refineRoundingOptions(options, maxUnit = 6, solarMode) {
588
+ let roundingInc = parseRoundingIncInteger(options = normalizeOptionsOrString(options, smallestUnitStr));
589
+ const roundingMode = refineRoundingMode(options, 7);
590
+ let smallestUnit = refineSmallestUnit(options, maxUnit);
591
+ return smallestUnit = requirePropDefined(smallestUnitStr, smallestUnit), roundingInc = refineRoundingInc(roundingInc, smallestUnit, void 0, solarMode),
592
+ [ smallestUnit, roundingInc, roundingMode ];
593
+ }
594
+ function refineDateDisplayOptions(options) {
595
+ return refineCalendarDisplay(normalizeOptions(options));
596
+ }
597
+ function refineTimeDisplayOptions(options, maxSmallestUnit) {
598
+ return refineTimeDisplayTuple(normalizeOptions(options), maxSmallestUnit);
599
+ }
600
+ function refineTimeDisplayTuple(options, maxSmallestUnit = 4) {
601
+ const subsecDigits = refineSubsecDigits(options);
602
+ return [ refineRoundingMode(options, 4), ...refineSmallestUnitAndSubsecDigits(refineSmallestUnit(options, maxSmallestUnit), subsecDigits) ];
603
+ }
604
+ function refineSmallestUnitAndSubsecDigits(smallestUnit, subsecDigits) {
605
+ return null != smallestUnit ? [ unitNanoMap[smallestUnit], smallestUnit < 4 ? 9 - 3 * smallestUnit : -1 ] : [ void 0 === subsecDigits ? 1 : 10 ** (9 - subsecDigits), subsecDigits ];
606
+ }
607
+ function parseRoundingIncInteger(options) {
608
+ const roundingInc = options[roundingIncName];
609
+ return void 0 === roundingInc ? 1 : toInteger(roundingInc, roundingIncName);
610
+ }
611
+ function refineRoundingInc(roundingInc, smallestUnit, allowManyLargeUnits, solarMode) {
612
+ const upUnitNano = solarMode ? nanoInUtcDay : unitNanoMap[smallestUnit + 1];
613
+ if (upUnitNano) {
614
+ const unitNano = unitNanoMap[smallestUnit];
615
+ if (upUnitNano % ((roundingInc = clampEntity(roundingIncName, roundingInc, 1, upUnitNano / unitNano - (solarMode ? 0 : 1), 1)) * unitNano)) {
616
+ throw new RangeError(invalidEntity(roundingIncName, roundingInc));
617
+ }
618
+ } else {
619
+ roundingInc = clampEntity(roundingIncName, roundingInc, 1, allowManyLargeUnits ? 10 ** 9 : 1, 1);
620
+ }
621
+ return roundingInc;
622
+ }
623
+ function refineSubsecDigits(options) {
624
+ let subsecDigits = options[subsecDigitsName];
625
+ if (void 0 !== subsecDigits) {
626
+ if ("number" != typeof subsecDigits) {
627
+ if ("auto" === toString(subsecDigits)) {
628
+ return;
629
+ }
630
+ throw new RangeError(invalidEntity(subsecDigitsName, subsecDigits));
631
+ }
632
+ subsecDigits = clampEntity(subsecDigitsName, Math.floor(subsecDigits), 0, 9, 1);
633
+ }
634
+ return subsecDigits;
635
+ }
636
+ function normalizeOptions(options) {
637
+ return void 0 === options ? {} : requireObjectLike(options);
638
+ }
639
+ function normalizeOptionsOrString(options, optionName) {
640
+ return "string" == typeof options ? {
641
+ [optionName]: options
642
+ } : requireObjectLike(options);
643
+ }
644
+ function fabricateOverflowOptions(overflow) {
645
+ return {
646
+ overflow: overflowMapNames[overflow]
647
+ };
648
+ }
649
+ function refineUnitOption(optionName, options, maxUnit = 9, minUnit = 0, ensureDefined) {
650
+ let unitStr = options[optionName];
651
+ if (void 0 === unitStr) {
652
+ return ensureDefined ? minUnit : void 0;
653
+ }
654
+ if (unitStr = toString(unitStr), "auto" === unitStr) {
655
+ return ensureDefined ? minUnit : null;
656
+ }
657
+ let unit = unitNameMap[unitStr];
658
+ if (void 0 === unit && (unit = durationFieldIndexes[unitStr]), void 0 === unit) {
659
+ throw new RangeError(invalidChoice(optionName, unitStr, unitNameMap));
660
+ }
661
+ return clampEntity(optionName, unit, minUnit, maxUnit, 1, unitNamesAsc), unit;
662
+ }
663
+ function refineChoiceOption(optionName, enumNameMap, options, defaultChoice = 0) {
664
+ const enumArg = options[optionName];
665
+ if (void 0 === enumArg) {
666
+ return defaultChoice;
667
+ }
668
+ const enumStr = toString(enumArg), enumNum = enumNameMap[enumStr];
669
+ if (void 0 === enumNum) {
670
+ throw new RangeError(invalidChoice(optionName, enumStr, enumNameMap));
671
+ }
672
+ return enumNum;
673
+ }
674
+ function checkLargestSmallestUnit(largestUnit, smallestUnit) {
675
+ if (smallestUnit > largestUnit) {
676
+ throw new RangeError(flippedSmallestLargestUnit);
677
+ }
678
+ }
679
+ function createInstantSlots(epochNano) {
680
+ return {
681
+ branding: InstantBranding,
682
+ epochNanoseconds: epochNano
683
+ };
684
+ }
685
+ function createZonedDateTimeSlots(epochNano, timeZoneId, calendarId) {
686
+ return {
687
+ branding: ZonedDateTimeBranding,
688
+ calendar: calendarId,
689
+ timeZone: timeZoneId,
690
+ epochNanoseconds: epochNano
691
+ };
692
+ }
693
+ function createPlainDateTimeSlots(isoFields, calendar = isoFields.calendar) {
694
+ return {
695
+ branding: PlainDateTimeBranding,
696
+ calendar: calendar,
697
+ ...pluckProps(isoDateTimeFieldNamesAlpha, isoFields)
698
+ };
699
+ }
700
+ function createPlainDateSlots(isoFields, calendar = isoFields.calendar) {
701
+ return {
702
+ branding: PlainDateBranding,
703
+ calendar: calendar,
704
+ ...pluckProps(isoDateFieldNamesAlpha, isoFields)
705
+ };
706
+ }
707
+ function createPlainYearMonthSlots(isoFields, calendar = isoFields.calendar) {
708
+ return {
709
+ branding: PlainYearMonthBranding,
710
+ calendar: calendar,
711
+ ...pluckProps(isoDateFieldNamesAlpha, isoFields)
712
+ };
713
+ }
714
+ function createPlainMonthDaySlots(isoFields, calendar = isoFields.calendar) {
715
+ return {
716
+ branding: PlainMonthDayBranding,
717
+ calendar: calendar,
718
+ ...pluckProps(isoDateFieldNamesAlpha, isoFields)
719
+ };
720
+ }
721
+ function createPlainTimeSlots(isoFields) {
722
+ return {
723
+ branding: PlainTimeBranding,
724
+ ...pluckProps(isoTimeFieldNamesAlpha, isoFields)
725
+ };
726
+ }
727
+ function createDurationSlots(durationFields) {
728
+ return {
729
+ branding: DurationBranding,
730
+ sign: computeDurationSign(durationFields),
731
+ ...pluckProps(durationFieldNamesAlpha, durationFields)
732
+ };
733
+ }
734
+ function getEpochMilli(slots) {
735
+ return divModBigNano(slots.epochNanoseconds, nanoInMilli)[0];
736
+ }
737
+ function extractEpochNano(slots) {
738
+ return slots.epochNanoseconds;
739
+ }
740
+ function totalDayTimeDuration(durationFields, totalUnit) {
741
+ return bigNanoToNumber(durationFieldsToBigNano(durationFields), unitNanoMap[totalUnit], 1);
742
+ }
743
+ function clampRelativeDuration(calendarOps, durationFields, clampUnit, clampDistance, marker, markerToEpochNano, moveMarker) {
744
+ const unitName = durationFieldNamesAsc[clampUnit], durationPlusDistance = {
745
+ ...durationFields,
746
+ [unitName]: durationFields[unitName] + clampDistance
747
+ }, marker0 = moveMarker(calendarOps, marker, durationFields), marker1 = moveMarker(calendarOps, marker, durationPlusDistance);
748
+ return [ markerToEpochNano(marker0), markerToEpochNano(marker1) ];
749
+ }
750
+ function computeEpochNanoFrac(epochNanoProgress, epochNano0, epochNano1) {
751
+ const denom = bigNanoToNumber(diffBigNanos(epochNano0, epochNano1));
752
+ if (!denom) {
753
+ throw new RangeError(invalidProtocolResults);
754
+ }
755
+ return bigNanoToNumber(diffBigNanos(epochNano0, epochNanoProgress)) / denom;
756
+ }
757
+ function roundDateTime(isoFields, smallestUnit, roundingInc, roundingMode) {
758
+ return roundDateTimeToNano(isoFields, computeNanoInc(smallestUnit, roundingInc), roundingMode);
759
+ }
760
+ function roundDateTimeToNano(isoFields, nanoInc, roundingMode) {
761
+ const [roundedIsoFields, dayDelta] = roundTimeToNano(isoFields, nanoInc, roundingMode);
762
+ return checkIsoDateTimeInBounds({
763
+ ...moveByDays(isoFields, dayDelta),
764
+ ...roundedIsoFields
765
+ });
766
+ }
767
+ function roundTimeToNano(isoFields, nanoInc, roundingMode) {
768
+ return nanoToIsoTimeAndDay(roundByInc(isoTimeFieldsToNano(isoFields), nanoInc, roundingMode));
769
+ }
770
+ function roundToMinute(offsetNano) {
771
+ return roundByInc(offsetNano, nanoInMinute, 7);
772
+ }
773
+ function computeNanoInc(smallestUnit, roundingInc) {
774
+ return unitNanoMap[smallestUnit] * roundingInc;
775
+ }
776
+ function computeDayInterval(isoFields) {
777
+ const isoFields0 = computeDayFloor(isoFields);
778
+ return [ isoFields0, moveByDays(isoFields0, 1) ];
779
+ }
780
+ function computeDayFloor(isoFields) {
781
+ return clearIsoFields(6, isoFields);
782
+ }
783
+ function roundDayTimeDurationByInc(durationFields, nanoInc, roundingMode) {
784
+ const maxUnit = Math.min(getMaxDurationUnit(durationFields), 6);
785
+ return nanoToDurationDayTimeFields(roundBigNanoByInc(durationFieldsToBigNano(durationFields, maxUnit), nanoInc, roundingMode), maxUnit);
786
+ }
787
+ function roundRelativeDuration(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, marker, markerToEpochNano, moveMarker) {
788
+ if (0 === smallestUnit && 1 === roundingInc) {
789
+ return durationFields;
790
+ }
791
+ const nudgeFunc = isUniformUnit(smallestUnit, marker) ? isZonedEpochSlots(marker) && smallestUnit < 6 && largestUnit >= 6 ? nudgeZonedTimeDuration : nudgeDayTimeDuration : nudgeRelativeDuration;
792
+ let [roundedDurationFields, roundedEpochNano, grewBigUnit] = nudgeFunc(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, marker, markerToEpochNano, moveMarker);
793
+ return grewBigUnit && 7 !== smallestUnit && (roundedDurationFields = ((durationFields, endEpochNano, largestUnit, smallestUnit, calendarOps, marker, markerToEpochNano, moveMarker) => {
794
+ const sign = computeDurationSign(durationFields);
795
+ for (let currentUnit = smallestUnit + 1; currentUnit <= largestUnit; currentUnit++) {
796
+ if (7 === currentUnit && 7 !== largestUnit) {
797
+ continue;
798
+ }
799
+ const baseDurationFields = clearDurationFields(currentUnit, durationFields);
800
+ baseDurationFields[durationFieldNamesAsc[currentUnit]] += sign;
801
+ const beyondThresholdNano = bigNanoToNumber(diffBigNanos(markerToEpochNano(moveMarker(calendarOps, marker, baseDurationFields)), endEpochNano));
802
+ if (beyondThresholdNano && Math.sign(beyondThresholdNano) !== sign) {
803
+ break;
804
+ }
805
+ durationFields = baseDurationFields;
806
+ }
807
+ return durationFields;
808
+ })(roundedDurationFields, roundedEpochNano, largestUnit, Math.max(6, smallestUnit), calendarOps, marker, markerToEpochNano, moveMarker)),
809
+ roundedDurationFields;
810
+ }
811
+ function roundBigNano(bigNano, smallestUnit, roundingInc, roundingMode, useDayOrigin) {
812
+ if (6 === smallestUnit) {
813
+ const daysExact = (bigNano => bigNano[0] + bigNano[1] / nanoInUtcDay)(bigNano);
814
+ return [ roundByInc(daysExact, roundingInc, roundingMode), 0 ];
815
+ }
816
+ return roundBigNanoByInc(bigNano, computeNanoInc(smallestUnit, roundingInc), roundingMode, useDayOrigin);
817
+ }
818
+ function roundBigNanoByInc(bigNano, nanoInc, roundingMode, useDayOrigin) {
819
+ let [days, timeNano] = bigNano;
820
+ useDayOrigin && timeNano < 0 && (timeNano += nanoInUtcDay, days -= 1);
821
+ const [dayDelta, roundedTimeNano] = divModFloor(roundByInc(timeNano, nanoInc, roundingMode), nanoInUtcDay);
822
+ return createBigNano(days + dayDelta, roundedTimeNano);
823
+ }
824
+ function roundByInc(num, inc, roundingMode) {
825
+ return roundWithMode(num / inc, roundingMode) * inc;
826
+ }
827
+ function roundWithMode(num, roundingMode) {
828
+ return roundingModeFuncs[roundingMode](num);
829
+ }
830
+ function nudgeDayTimeDuration(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode) {
831
+ const sign = computeDurationSign(durationFields), bigNano = durationFieldsToBigNano(durationFields), roundedBigNano = roundBigNano(bigNano, smallestUnit, roundingInc, roundingMode), nanoDiff = diffBigNanos(bigNano, roundedBigNano), expandedBigUnit = Math.sign(roundedBigNano[0] - bigNano[0]) === sign, roundedDayTimeFields = nanoToDurationDayTimeFields(roundedBigNano, Math.min(largestUnit, 6));
832
+ return [ {
833
+ ...durationFields,
834
+ ...roundedDayTimeFields
835
+ }, addBigNanos(endEpochNano, nanoDiff), expandedBigUnit ];
836
+ }
837
+ function nudgeZonedTimeDuration(durationFields, endEpochNano, _largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, marker, markerToEpochNano, moveMarker) {
838
+ const sign = computeDurationSign(durationFields) || 1, timeNano = bigNanoToNumber(durationFieldsToBigNano(durationFields, 5)), nanoInc = computeNanoInc(smallestUnit, roundingInc);
839
+ let roundedTimeNano = roundByInc(timeNano, nanoInc, roundingMode);
840
+ const [dayEpochNano0, dayEpochNano1] = clampRelativeDuration(calendarOps, {
841
+ ...durationFields,
842
+ ...durationTimeFieldDefaults
843
+ }, 6, sign, marker, markerToEpochNano, moveMarker), beyondDayNano = roundedTimeNano - bigNanoToNumber(diffBigNanos(dayEpochNano0, dayEpochNano1));
844
+ let dayDelta = 0;
845
+ beyondDayNano && Math.sign(beyondDayNano) !== sign ? endEpochNano = moveBigNano(dayEpochNano0, roundedTimeNano) : (dayDelta += sign,
846
+ roundedTimeNano = roundByInc(beyondDayNano, nanoInc, roundingMode), endEpochNano = moveBigNano(dayEpochNano1, roundedTimeNano));
847
+ const durationTimeFields = nanoToDurationTimeFields(roundedTimeNano);
848
+ return [ {
849
+ ...durationFields,
850
+ ...durationTimeFields,
851
+ days: durationFields.days + dayDelta
852
+ }, endEpochNano, Boolean(dayDelta) ];
853
+ }
854
+ function nudgeRelativeDuration(durationFields, endEpochNano, _largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, marker, markerToEpochNano, moveMarker) {
855
+ const sign = computeDurationSign(durationFields), smallestUnitFieldName = durationFieldNamesAsc[smallestUnit], baseDurationFields = clearDurationFields(smallestUnit, durationFields);
856
+ 7 === smallestUnit && (durationFields = {
857
+ ...durationFields,
858
+ weeks: durationFields.weeks + Math.trunc(durationFields.days / 7)
859
+ });
860
+ const truncedVal = divTrunc(durationFields[smallestUnitFieldName], roundingInc) * roundingInc;
861
+ baseDurationFields[smallestUnitFieldName] = truncedVal;
862
+ const [epochNano0, epochNano1] = clampRelativeDuration(calendarOps, baseDurationFields, smallestUnit, roundingInc * sign, marker, markerToEpochNano, moveMarker), exactVal = truncedVal + computeEpochNanoFrac(endEpochNano, epochNano0, epochNano1) * sign * roundingInc, roundedVal = roundByInc(exactVal, roundingInc, roundingMode), expanded = Math.sign(roundedVal - exactVal) === sign;
863
+ return baseDurationFields[smallestUnitFieldName] = roundedVal, [ baseDurationFields, expanded ? epochNano1 : epochNano0, expanded ];
864
+ }
865
+ function formatInstantIso(refineTimeZoneString, getTimeZoneOps, instantSlots, options) {
866
+ const [timeZoneArg, roundingMode, nanoInc, subsecDigits] = (options => {
867
+ const timeDisplayTuple = refineTimeDisplayTuple(options = normalizeOptions(options));
868
+ return [ options.timeZone, ...timeDisplayTuple ];
869
+ })(options), providedTimeZone = void 0 !== timeZoneArg;
870
+ return ((providedTimeZone, timeZoneOps, epochNano, roundingMode, nanoInc, subsecDigits) => {
871
+ epochNano = roundBigNanoByInc(epochNano, nanoInc, roundingMode, 1);
872
+ const offsetNano = timeZoneOps.getOffsetNanosecondsFor(epochNano);
873
+ return formatIsoDateTimeFields(epochNanoToIso(epochNano, offsetNano), subsecDigits) + (providedTimeZone ? formatOffsetNano(roundToMinute(offsetNano)) : "Z");
874
+ })(providedTimeZone, getTimeZoneOps(providedTimeZone ? refineTimeZoneString(timeZoneArg) : utcTimeZoneId), instantSlots.epochNanoseconds, roundingMode, nanoInc, subsecDigits);
875
+ }
876
+ function formatZonedDateTimeIso(getTimeZoneOps, zonedDateTimeSlots0, options) {
877
+ const [a, b, c, d, e, f] = (options => {
878
+ options = normalizeOptions(options);
879
+ const calendarDisplay = refineCalendarDisplay(options), subsecDigits = refineSubsecDigits(options), offsetDisplay = refineOffsetDisplay(options), roundingMode = refineRoundingMode(options, 4), smallestUnit = refineSmallestUnit(options, 4);
880
+ return [ calendarDisplay, refineTimeZoneDisplay(options), offsetDisplay, roundingMode, ...refineSmallestUnitAndSubsecDigits(smallestUnit, subsecDigits) ];
881
+ })(options);
882
+ return ((getTimeZoneOps, calendarId, timeZoneId, epochNano, calendarDisplay, timeZoneDisplay, offsetDisplay, roundingMode, nanoInc, subsecDigits) => {
883
+ epochNano = roundBigNanoByInc(epochNano, nanoInc, roundingMode, 1);
884
+ const offsetNano = getTimeZoneOps(timeZoneId).getOffsetNanosecondsFor(epochNano);
885
+ return formatIsoDateTimeFields(epochNanoToIso(epochNano, offsetNano), subsecDigits) + formatOffsetNano(roundToMinute(offsetNano), offsetDisplay) + ((timeZoneId, timeZoneDisplay) => 1 !== timeZoneDisplay ? "[" + (2 === timeZoneDisplay ? "!" : "") + timeZoneId + "]" : "")(timeZoneId, timeZoneDisplay) + formatCalendar(calendarId, calendarDisplay);
886
+ })(getTimeZoneOps, zonedDateTimeSlots0.calendar, zonedDateTimeSlots0.timeZone, zonedDateTimeSlots0.epochNanoseconds, a, b, c, d, e, f);
887
+ }
888
+ function formatPlainDateTimeIso(plainDateTimeSlots0, options) {
889
+ const [a, b, c, d] = (options => (options = normalizeOptions(options), [ refineCalendarDisplay(options), ...refineTimeDisplayTuple(options) ]))(options);
890
+ return calendarId = plainDateTimeSlots0.calendar, calendarDisplay = a, subsecDigits = d,
891
+ formatIsoDateTimeFields(roundDateTimeToNano(plainDateTimeSlots0, c, b), subsecDigits) + formatCalendar(calendarId, calendarDisplay);
892
+ var calendarId, calendarDisplay, subsecDigits;
893
+ }
894
+ function formatPlainDateIso(plainDateSlots, options) {
895
+ return calendarId = plainDateSlots.calendar, isoFields = plainDateSlots, calendarDisplay = refineDateDisplayOptions(options),
896
+ formatIsoDateFields(isoFields) + formatCalendar(calendarId, calendarDisplay);
897
+ var calendarId, isoFields, calendarDisplay;
898
+ }
899
+ function formatPlainYearMonthIso(plainYearMonthSlots, options) {
900
+ return formatDateLikeIso(plainYearMonthSlots.calendar, formatIsoYearMonthFields, plainYearMonthSlots, refineDateDisplayOptions(options));
901
+ }
902
+ function formatPlainMonthDayIso(plainMonthDaySlots, options) {
903
+ return formatDateLikeIso(plainMonthDaySlots.calendar, formatIsoMonthDayFields, plainMonthDaySlots, refineDateDisplayOptions(options));
904
+ }
905
+ function formatPlainTimeIso(slots, options) {
906
+ const [a, b, c] = refineTimeDisplayOptions(options);
907
+ return subsecDigits = c, formatIsoTimeFields(roundTimeToNano(slots, b, a)[0], subsecDigits);
908
+ var subsecDigits;
909
+ }
910
+ function formatDurationIso(slots, options) {
911
+ const [roundingMode, nanoInc, subsecDigits] = refineTimeDisplayOptions(options, 3);
912
+ return nanoInc > 1 && checkDurationUnits(slots = {
913
+ ...slots,
914
+ ...roundDayTimeDurationByInc(slots, nanoInc, roundingMode)
915
+ }), ((durationSlots, subsecDigits) => {
916
+ const {sign: sign} = durationSlots, abs = -1 === sign ? negateDurationFields(durationSlots) : durationSlots, {hours: hours, minutes: minutes} = abs, [wholeSec, subsecNano] = divModBigNano(durationFieldsToBigNano(abs, 3), nanoInSec, divModTrunc);
917
+ checkDurationTimeUnit(wholeSec);
918
+ const subsecNanoString = formatSubsecNano(subsecNano, subsecDigits), forceSec = subsecDigits >= 0 || !sign || subsecNanoString;
919
+ return (sign < 0 ? "-" : "") + "P" + formatDurationFragments({
920
+ Y: formatDurationNumber(abs.years),
921
+ M: formatDurationNumber(abs.months),
922
+ W: formatDurationNumber(abs.weeks),
923
+ D: formatDurationNumber(abs.days)
924
+ }) + (hours || minutes || wholeSec || forceSec ? "T" + formatDurationFragments({
925
+ H: formatDurationNumber(hours),
926
+ M: formatDurationNumber(minutes),
927
+ S: formatDurationNumber(wholeSec, forceSec) + subsecNanoString
928
+ }) : "");
929
+ })(slots, subsecDigits);
930
+ }
931
+ function formatDateLikeIso(calendarId, formatSimple, isoFields, calendarDisplay) {
932
+ const showCalendar = calendarDisplay > 1 || 0 === calendarDisplay && calendarId !== isoCalendarId;
933
+ return 1 === calendarDisplay ? calendarId === isoCalendarId ? formatSimple(isoFields) : formatIsoDateFields(isoFields) : showCalendar ? formatIsoDateFields(isoFields) + formatCalendarId(calendarId, 2 === calendarDisplay) : formatSimple(isoFields);
934
+ }
935
+ function formatDurationFragments(fragObj) {
936
+ const parts = [];
937
+ for (const fragName in fragObj) {
938
+ const fragVal = fragObj[fragName];
939
+ fragVal && parts.push(fragVal, fragName);
940
+ }
941
+ return parts.join("");
942
+ }
943
+ function formatIsoDateTimeFields(isoDateTimeFields, subsecDigits) {
944
+ return formatIsoDateFields(isoDateTimeFields) + "T" + formatIsoTimeFields(isoDateTimeFields, subsecDigits);
945
+ }
946
+ function formatIsoDateFields(isoDateFields) {
947
+ return formatIsoYearMonthFields(isoDateFields) + "-" + padNumber2(isoDateFields.isoDay);
948
+ }
949
+ function formatIsoYearMonthFields(isoDateFields) {
950
+ const {isoYear: isoYear} = isoDateFields;
951
+ return (isoYear < 0 || isoYear > 9999 ? getSignStr(isoYear) + padNumber(6, Math.abs(isoYear)) : padNumber(4, isoYear)) + "-" + padNumber2(isoDateFields.isoMonth);
952
+ }
953
+ function formatIsoMonthDayFields(isoDateFields) {
954
+ return padNumber2(isoDateFields.isoMonth) + "-" + padNumber2(isoDateFields.isoDay);
955
+ }
956
+ function formatIsoTimeFields(isoTimeFields, subsecDigits) {
957
+ const parts = [ padNumber2(isoTimeFields.isoHour), padNumber2(isoTimeFields.isoMinute) ];
958
+ return -1 !== subsecDigits && parts.push(padNumber2(isoTimeFields.isoSecond) + ((isoMillisecond, isoMicrosecond, isoNanosecond, subsecDigits) => formatSubsecNano(isoMillisecond * nanoInMilli + isoMicrosecond * nanoInMicro + isoNanosecond, subsecDigits))(isoTimeFields.isoMillisecond, isoTimeFields.isoMicrosecond, isoTimeFields.isoNanosecond, subsecDigits)),
959
+ parts.join(":");
960
+ }
961
+ function formatOffsetNano(offsetNano, offsetDisplay = 0) {
962
+ if (1 === offsetDisplay) {
963
+ return "";
964
+ }
965
+ const [hour, nanoRemainder0] = divModFloor(Math.abs(offsetNano), nanoInHour), [minute, nanoRemainder1] = divModFloor(nanoRemainder0, nanoInMinute), [second, nanoRemainder2] = divModFloor(nanoRemainder1, nanoInSec);
966
+ return getSignStr(offsetNano) + padNumber2(hour) + ":" + padNumber2(minute) + (second || nanoRemainder2 ? ":" + padNumber2(second) + formatSubsecNano(nanoRemainder2) : "");
967
+ }
968
+ function formatCalendar(calendarId, calendarDisplay) {
969
+ return 1 !== calendarDisplay && (calendarDisplay > 1 || 0 === calendarDisplay && calendarId !== isoCalendarId) ? formatCalendarId(calendarId, 2 === calendarDisplay) : "";
970
+ }
971
+ function formatCalendarId(calendarId, isCritical) {
972
+ return "[" + (isCritical ? "!" : "") + "u-ca=" + calendarId + "]";
973
+ }
974
+ function formatSubsecNano(totalNano, subsecDigits) {
975
+ let s = padNumber(9, totalNano);
976
+ return s = void 0 === subsecDigits ? s.replace(trailingZerosRE, "") : s.slice(0, subsecDigits),
977
+ s ? "." + s : "";
978
+ }
979
+ function getSignStr(num) {
980
+ return num < 0 ? "-" : "+";
981
+ }
982
+ function formatDurationNumber(n, force) {
983
+ return n || force ? n.toLocaleString("fullwide", {
984
+ useGrouping: 0
985
+ }) : "";
986
+ }
987
+ function getMatchingInstantFor(timeZoneOps, isoFields, offsetNano, offsetDisambig = 0, epochDisambig = 0, epochFuzzy, hasZ) {
988
+ if (void 0 !== offsetNano && 1 === offsetDisambig && (1 === offsetDisambig || hasZ)) {
989
+ return isoToEpochNanoWithOffset(isoFields, offsetNano);
990
+ }
991
+ const possibleEpochNanos = timeZoneOps.getPossibleInstantsFor(isoFields);
992
+ if (void 0 !== offsetNano && 3 !== offsetDisambig) {
993
+ const matchingEpochNano = ((possibleEpochNanos, isoDateTimeFields, offsetNano, fuzzy) => {
994
+ const zonedEpochNano = isoToEpochNano(isoDateTimeFields);
995
+ fuzzy && (offsetNano = roundToMinute(offsetNano));
996
+ for (const possibleEpochNano of possibleEpochNanos) {
997
+ let possibleOffsetNano = bigNanoToNumber(diffBigNanos(possibleEpochNano, zonedEpochNano));
998
+ if (fuzzy && (possibleOffsetNano = roundToMinute(possibleOffsetNano)), possibleOffsetNano === offsetNano) {
999
+ return possibleEpochNano;
1000
+ }
1001
+ }
1002
+ })(possibleEpochNanos, isoFields, offsetNano, epochFuzzy);
1003
+ if (void 0 !== matchingEpochNano) {
1004
+ return matchingEpochNano;
1005
+ }
1006
+ if (0 === offsetDisambig) {
1007
+ throw new RangeError(invalidOffsetForTimeZone);
1008
+ }
1009
+ }
1010
+ return hasZ ? isoToEpochNano(isoFields) : getSingleInstantFor(timeZoneOps, isoFields, epochDisambig, possibleEpochNanos);
1011
+ }
1012
+ function getSingleInstantFor(timeZoneOps, isoFields, disambig = 0, possibleEpochNanos = timeZoneOps.getPossibleInstantsFor(isoFields)) {
1013
+ if (1 === possibleEpochNanos.length) {
1014
+ return possibleEpochNanos[0];
1015
+ }
1016
+ if (1 === disambig) {
1017
+ throw new RangeError(ambigOffset);
1018
+ }
1019
+ if (possibleEpochNanos.length) {
1020
+ return possibleEpochNanos[3 === disambig ? 1 : 0];
1021
+ }
1022
+ const zonedEpochNano = isoToEpochNano(isoFields), gapNano = ((timeZoneOps, zonedEpochNano) => {
1023
+ const startOffsetNano = timeZoneOps.getOffsetNanosecondsFor(moveBigNano(zonedEpochNano, -nanoInUtcDay));
1024
+ return (gapNano => {
1025
+ if (gapNano > nanoInUtcDay) {
1026
+ throw new RangeError(outOfBoundsDstGap);
1027
+ }
1028
+ return gapNano;
1029
+ })(timeZoneOps.getOffsetNanosecondsFor(moveBigNano(zonedEpochNano, nanoInUtcDay)) - startOffsetNano);
1030
+ })(timeZoneOps, zonedEpochNano), shiftNano = gapNano * (2 === disambig ? -1 : 1);
1031
+ return (possibleEpochNanos = timeZoneOps.getPossibleInstantsFor(epochNanoToIso(zonedEpochNano, shiftNano)))[2 === disambig ? 0 : possibleEpochNanos.length - 1];
1032
+ }
1033
+ function getStartOfDayInstantFor(timeZoneOps, isoFields) {
1034
+ const possibleEpochNanos = timeZoneOps.getPossibleInstantsFor(isoFields);
1035
+ if (possibleEpochNanos.length) {
1036
+ return possibleEpochNanos[0];
1037
+ }
1038
+ const zonedEpochNanoDayBefore = moveBigNano(isoToEpochNano(isoFields), -nanoInUtcDay);
1039
+ return timeZoneOps.getTransition(zonedEpochNanoDayBefore, 1);
1040
+ }
1041
+ function moveInstant(doSubtract, instantSlots, durationSlots) {
1042
+ return createInstantSlots(checkEpochNanoInBounds(addBigNanos(instantSlots.epochNanoseconds, (fields => {
1043
+ if (durationHasDateParts(fields)) {
1044
+ throw new RangeError(invalidLargeUnits);
1045
+ }
1046
+ return durationFieldsToBigNano(fields, 5);
1047
+ })(doSubtract ? negateDurationFields(durationSlots) : durationSlots))));
1048
+ }
1049
+ function moveZonedDateTime(getCalendarOps, getTimeZoneOps, doSubtract, zonedDateTimeSlots, durationSlots, options = Object.create(null)) {
1050
+ const timeZoneOps = getTimeZoneOps(zonedDateTimeSlots.timeZone), calendarOps = getCalendarOps(zonedDateTimeSlots.calendar);
1051
+ return {
1052
+ ...zonedDateTimeSlots,
1053
+ ...moveZonedEpochs(timeZoneOps, calendarOps, zonedDateTimeSlots, doSubtract ? negateDurationFields(durationSlots) : durationSlots, options)
1054
+ };
1055
+ }
1056
+ function movePlainDateTime(getCalendarOps, doSubtract, plainDateTimeSlots, durationSlots, options = Object.create(null)) {
1057
+ const {calendar: calendar} = plainDateTimeSlots;
1058
+ return createPlainDateTimeSlots(moveDateTime(getCalendarOps(calendar), plainDateTimeSlots, doSubtract ? negateDurationFields(durationSlots) : durationSlots, options), calendar);
1059
+ }
1060
+ function movePlainDate(getCalendarOps, doSubtract, plainDateSlots, durationSlots, options) {
1061
+ const {calendar: calendar} = plainDateSlots;
1062
+ return createPlainDateSlots(moveDate(getCalendarOps(calendar), plainDateSlots, doSubtract ? negateDurationFields(durationSlots) : durationSlots, options), calendar);
1063
+ }
1064
+ function movePlainYearMonth(getCalendarOps, doSubtract, plainYearMonthSlots, durationSlots, options) {
1065
+ const calendarId = plainYearMonthSlots.calendar, calendarOps = getCalendarOps(calendarId);
1066
+ let isoDateFields = checkIsoDateInBounds(moveToDayOfMonthUnsafe(calendarOps, plainYearMonthSlots));
1067
+ doSubtract && (durationSlots = negateDuration(durationSlots)), durationSlots.sign < 0 && (isoDateFields = calendarOps.dateAdd(isoDateFields, {
1068
+ ...durationFieldDefaults,
1069
+ months: 1
1070
+ }), isoDateFields = moveByDays(isoDateFields, -1));
1071
+ const movedIsoDateFields = calendarOps.dateAdd(isoDateFields, durationSlots, options);
1072
+ return createPlainYearMonthSlots(moveToDayOfMonthUnsafe(calendarOps, movedIsoDateFields), calendarId);
1073
+ }
1074
+ function movePlainTime(doSubtract, slots, durationSlots) {
1075
+ return createPlainTimeSlots(moveTime(slots, doSubtract ? negateDurationFields(durationSlots) : durationSlots)[0]);
1076
+ }
1077
+ function moveZonedEpochs(timeZoneOps, calendarOps, slots, durationFields, options) {
1078
+ const timeOnlyNano = durationFieldsToBigNano(durationFields, 5);
1079
+ let epochNano = slots.epochNanoseconds;
1080
+ if (durationHasDateParts(durationFields)) {
1081
+ const isoDateTimeFields = zonedEpochSlotsToIso(slots, timeZoneOps);
1082
+ epochNano = addBigNanos(getSingleInstantFor(timeZoneOps, {
1083
+ ...moveDate(calendarOps, isoDateTimeFields, {
1084
+ ...durationFields,
1085
+ ...durationTimeFieldDefaults
1086
+ }, options),
1087
+ ...pluckProps(isoTimeFieldNamesAsc, isoDateTimeFields)
1088
+ }), timeOnlyNano);
1089
+ } else {
1090
+ epochNano = addBigNanos(epochNano, timeOnlyNano), refineOverflowOptions(options);
1091
+ }
1092
+ return {
1093
+ epochNanoseconds: checkEpochNanoInBounds(epochNano)
1094
+ };
1095
+ }
1096
+ function moveDateTime(calendarOps, isoDateTimeFields, durationFields, options) {
1097
+ const [movedIsoTimeFields, dayDelta] = moveTime(isoDateTimeFields, durationFields);
1098
+ return checkIsoDateTimeInBounds({
1099
+ ...moveDate(calendarOps, isoDateTimeFields, {
1100
+ ...durationFields,
1101
+ ...durationTimeFieldDefaults,
1102
+ days: durationFields.days + dayDelta
1103
+ }, options),
1104
+ ...movedIsoTimeFields
1105
+ });
1106
+ }
1107
+ function moveDate(calendarOps, isoDateFields, durationFields, options) {
1108
+ if (durationFields.years || durationFields.months || durationFields.weeks) {
1109
+ return calendarOps.dateAdd(isoDateFields, durationFields, options);
1110
+ }
1111
+ refineOverflowOptions(options);
1112
+ const days = durationFields.days + durationFieldsToBigNano(durationFields, 5)[0];
1113
+ return days ? checkIsoDateInBounds(moveByDays(isoDateFields, days)) : isoDateFields;
1114
+ }
1115
+ function moveToDayOfMonthUnsafe(calendarOps, isoFields, dayOfMonth = 1) {
1116
+ return moveByDays(isoFields, dayOfMonth - calendarOps.day(isoFields));
1117
+ }
1118
+ function moveTime(isoFields, durationFields) {
1119
+ const [durDays, durTimeNano] = durationFieldsToBigNano(durationFields, 5), [newIsoFields, overflowDays] = nanoToIsoTimeAndDay(isoTimeFieldsToNano(isoFields) + durTimeNano);
1120
+ return [ newIsoFields, durDays + overflowDays ];
1121
+ }
1122
+ function moveByDays(isoFields, days) {
1123
+ return days ? {
1124
+ ...isoFields,
1125
+ ...epochMilliToIso(isoToEpochMilli(isoFields) + days * milliInDay)
1126
+ } : isoFields;
1127
+ }
1128
+ function diffInstants(invert, instantSlots0, instantSlots1, options) {
1129
+ const optionsTuple = refineDiffOptions(invert, options, 3, 5), durationFields = diffEpochNanos(instantSlots0.epochNanoseconds, instantSlots1.epochNanoseconds, ...optionsTuple);
1130
+ return createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1131
+ }
1132
+ function diffZonedDateTimes(getCalendarOps, getTimeZoneOps, invert, slots0, slots1, options) {
1133
+ const calendarId = getCommonCalendarId(slots0.calendar, slots1.calendar), [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 5), epochNano0 = slots0.epochNanoseconds, epochNano1 = slots1.epochNanoseconds, sign = compareBigNanos(epochNano1, epochNano0);
1134
+ let durationFields;
1135
+ if (sign) {
1136
+ if (largestUnit < 6) {
1137
+ durationFields = diffEpochNanos(epochNano0, epochNano1, largestUnit, smallestUnit, roundingInc, roundingMode);
1138
+ } else {
1139
+ const timeZoneOps = getTimeZoneOps(((a, b) => {
1140
+ if (!isTimeZoneIdsEqual(a, b)) {
1141
+ throw new RangeError(mismatchingTimeZones);
1142
+ }
1143
+ return a;
1144
+ })(slots0.timeZone, slots1.timeZone)), calendarOps = getCalendarOps(calendarId);
1145
+ durationFields = diffZonedEpochsBig(calendarOps, timeZoneOps, slots0, slots1, sign, largestUnit, options),
1146
+ durationFields = roundRelativeDuration(durationFields, epochNano1, largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, slots0, extractEpochNano, bindArgs(moveZonedEpochs, timeZoneOps));
1147
+ }
1148
+ } else {
1149
+ durationFields = durationFieldDefaults;
1150
+ }
1151
+ return createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1152
+ }
1153
+ function diffPlainDateTimes(getCalendarOps, invert, plainDateTimeSlots0, plainDateTimeSlots1, options) {
1154
+ const calendarId = getCommonCalendarId(plainDateTimeSlots0.calendar, plainDateTimeSlots1.calendar), [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 6), startEpochNano = isoToEpochNano(plainDateTimeSlots0), endEpochNano = isoToEpochNano(plainDateTimeSlots1), sign = compareBigNanos(endEpochNano, startEpochNano);
1155
+ let durationFields;
1156
+ if (sign) {
1157
+ if (largestUnit <= 6) {
1158
+ durationFields = diffEpochNanos(startEpochNano, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode);
1159
+ } else {
1160
+ const calendarOps = getCalendarOps(calendarId);
1161
+ durationFields = diffDateTimesBig(calendarOps, plainDateTimeSlots0, plainDateTimeSlots1, sign, largestUnit, options),
1162
+ durationFields = roundRelativeDuration(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, plainDateTimeSlots0, isoToEpochNano, moveDateTime);
1163
+ }
1164
+ } else {
1165
+ durationFields = durationFieldDefaults;
1166
+ }
1167
+ return createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1168
+ }
1169
+ function diffPlainDates(getCalendarOps, invert, plainDateSlots0, plainDateSlots1, options) {
1170
+ const calendarId = getCommonCalendarId(plainDateSlots0.calendar, plainDateSlots1.calendar);
1171
+ return diffDateLike(invert, (() => getCalendarOps(calendarId)), plainDateSlots0, plainDateSlots1, ...refineDiffOptions(invert, options, 6, 9, 6));
1172
+ }
1173
+ function diffPlainYearMonth(getCalendarOps, invert, plainYearMonthSlots0, plainYearMonthSlots1, options) {
1174
+ const calendarId = getCommonCalendarId(plainYearMonthSlots0.calendar, plainYearMonthSlots1.calendar), optionsTuple = refineDiffOptions(invert, options, 9, 9, 8), calendarOps = getCalendarOps(calendarId), firstOfMonth0 = moveToDayOfMonthUnsafe(calendarOps, plainYearMonthSlots0), firstOfMonth1 = moveToDayOfMonthUnsafe(calendarOps, plainYearMonthSlots1);
1175
+ return firstOfMonth0.isoYear === firstOfMonth1.isoYear && firstOfMonth0.isoMonth === firstOfMonth1.isoMonth && firstOfMonth0.isoDay === firstOfMonth1.isoDay ? createDurationSlots(durationFieldDefaults) : diffDateLike(invert, (() => calendarOps), checkIsoDateInBounds(firstOfMonth0), checkIsoDateInBounds(firstOfMonth1), ...optionsTuple, 8);
1176
+ }
1177
+ function diffDateLike(invert, getCalendarOps, startIsoFields, endIsoFields, largestUnit, smallestUnit, roundingInc, roundingMode, smallestPrecision = 6) {
1178
+ const startEpochNano = isoToEpochNano(startIsoFields), endEpochNano = isoToEpochNano(endIsoFields);
1179
+ if (void 0 === startEpochNano || void 0 === endEpochNano) {
1180
+ throw new RangeError(outOfBoundsDate);
1181
+ }
1182
+ let durationFields;
1183
+ if (compareBigNanos(endEpochNano, startEpochNano)) {
1184
+ if (6 === largestUnit) {
1185
+ durationFields = diffEpochNanos(startEpochNano, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode);
1186
+ } else {
1187
+ const calendarOps = getCalendarOps();
1188
+ durationFields = calendarOps.dateUntil(startIsoFields, endIsoFields, largestUnit),
1189
+ smallestUnit === smallestPrecision && 1 === roundingInc || (durationFields = roundRelativeDuration(durationFields, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, startIsoFields, isoToEpochNano, moveDate));
1190
+ }
1191
+ } else {
1192
+ durationFields = durationFieldDefaults;
1193
+ }
1194
+ return createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1195
+ }
1196
+ function diffPlainTimes(invert, plainTimeSlots0, plainTimeSlots1, options) {
1197
+ const [largestUnit, smallestUnit, roundingInc, roundingMode] = refineDiffOptions(invert, options, 5, 5), timeDiffNano = roundByInc(diffTimes(plainTimeSlots0, plainTimeSlots1), computeNanoInc(smallestUnit, roundingInc), roundingMode), durationFields = {
1198
+ ...durationFieldDefaults,
1199
+ ...nanoToDurationTimeFields(timeDiffNano, largestUnit)
1200
+ };
1201
+ return createDurationSlots(invert ? negateDurationFields(durationFields) : durationFields);
1202
+ }
1203
+ function diffZonedEpochsExact(timeZoneOps, calendarOps, slots0, slots1, largestUnit, origOptions) {
1204
+ const sign = compareBigNanos(slots1.epochNanoseconds, slots0.epochNanoseconds);
1205
+ return sign ? largestUnit < 6 ? diffEpochNanosExact(slots0.epochNanoseconds, slots1.epochNanoseconds, largestUnit) : diffZonedEpochsBig(calendarOps, timeZoneOps, slots0, slots1, sign, largestUnit, origOptions) : durationFieldDefaults;
1206
+ }
1207
+ function diffDateTimesExact(calendarOps, startIsoFields, endIsoFields, largestUnit, origOptions) {
1208
+ const startEpochNano = isoToEpochNano(startIsoFields), endEpochNano = isoToEpochNano(endIsoFields), sign = compareBigNanos(endEpochNano, startEpochNano);
1209
+ return sign ? largestUnit <= 6 ? diffEpochNanosExact(startEpochNano, endEpochNano, largestUnit) : diffDateTimesBig(calendarOps, startIsoFields, endIsoFields, sign, largestUnit, origOptions) : durationFieldDefaults;
1210
+ }
1211
+ function diffZonedEpochsBig(calendarOps, timeZoneOps, slots0, slots1, sign, largestUnit, origOptions) {
1212
+ const [isoFields0, isoFields1, remainderNano] = ((timeZoneOps, slots0, slots1, sign) => {
1213
+ function updateMid() {
1214
+ return midIsoFields = {
1215
+ ...moveByDays(endIsoFields, dayCorrection++ * -sign),
1216
+ ...startIsoTimeFields
1217
+ }, midEpochNano = getSingleInstantFor(timeZoneOps, midIsoFields), compareBigNanos(endEpochNano, midEpochNano) === -sign;
1218
+ }
1219
+ const startIsoFields = zonedEpochSlotsToIso(slots0, timeZoneOps), startIsoTimeFields = pluckProps(isoTimeFieldNamesAsc, startIsoFields), endIsoFields = zonedEpochSlotsToIso(slots1, timeZoneOps), endEpochNano = slots1.epochNanoseconds;
1220
+ let dayCorrection = 0;
1221
+ const timeDiffNano = diffTimes(startIsoFields, endIsoFields);
1222
+ let midIsoFields, midEpochNano;
1223
+ if (Math.sign(timeDiffNano) === -sign && dayCorrection++, updateMid() && (-1 === sign || updateMid())) {
1224
+ throw new RangeError(invalidProtocolResults);
1225
+ }
1226
+ const remainderNano = bigNanoToNumber(diffBigNanos(midEpochNano, endEpochNano));
1227
+ return [ startIsoFields, midIsoFields, remainderNano ];
1228
+ })(timeZoneOps, slots0, slots1, sign);
1229
+ var startIsoFields, endIsoFields;
1230
+ return {
1231
+ ...6 === largestUnit ? (startIsoFields = isoFields0, endIsoFields = isoFields1,
1232
+ {
1233
+ ...durationFieldDefaults,
1234
+ days: diffDays(startIsoFields, endIsoFields)
1235
+ }) : calendarOps.dateUntil(isoFields0, isoFields1, largestUnit, origOptions),
1236
+ ...nanoToDurationTimeFields(remainderNano)
1237
+ };
1238
+ }
1239
+ function diffDateTimesBig(calendarOps, startIsoFields, endIsoFields, sign, largestUnit, origOptions) {
1240
+ const [startIsoDate, endIsoDate, timeNano] = ((startIsoDateTime, endIsoDateTime, sign) => {
1241
+ let endIsoDate = endIsoDateTime, timeDiffNano = diffTimes(startIsoDateTime, endIsoDateTime);
1242
+ return Math.sign(timeDiffNano) === -sign && (endIsoDate = moveByDays(endIsoDateTime, -sign),
1243
+ timeDiffNano += nanoInUtcDay * sign), [ startIsoDateTime, endIsoDate, timeDiffNano ];
1244
+ })(startIsoFields, endIsoFields, sign);
1245
+ return {
1246
+ ...calendarOps.dateUntil(startIsoDate, endIsoDate, largestUnit, origOptions),
1247
+ ...nanoToDurationTimeFields(timeNano)
1248
+ };
1249
+ }
1250
+ function diffEpochNanos(startEpochNano, endEpochNano, largestUnit, smallestUnit, roundingInc, roundingMode) {
1251
+ return {
1252
+ ...durationFieldDefaults,
1253
+ ...nanoToDurationDayTimeFields(roundBigNano(diffBigNanos(startEpochNano, endEpochNano), smallestUnit, roundingInc, roundingMode), largestUnit)
1254
+ };
1255
+ }
1256
+ function diffEpochNanosExact(startEpochNano, endEpochNano, largestUnit) {
1257
+ return {
1258
+ ...durationFieldDefaults,
1259
+ ...nanoToDurationDayTimeFields(diffBigNanos(startEpochNano, endEpochNano), largestUnit)
1260
+ };
1261
+ }
1262
+ function diffDays(startIsoFields, endIsoFields) {
1263
+ return diffEpochMilliByDay(isoToEpochMilli(startIsoFields), isoToEpochMilli(endIsoFields));
1264
+ }
1265
+ function diffEpochMilliByDay(epochMilli0, epochMilli1) {
1266
+ return Math.trunc((epochMilli1 - epochMilli0) / milliInDay);
1267
+ }
1268
+ function diffTimes(isoTime0, isoTime1) {
1269
+ return isoTimeFieldsToNano(isoTime1) - isoTimeFieldsToNano(isoTime0);
1270
+ }
1271
+ function getCommonCalendarId(a, b) {
1272
+ if (a !== b) {
1273
+ throw new RangeError(mismatchingCalendars);
1274
+ }
1275
+ return a;
1276
+ }
1277
+ function createMarkerSystem(getCalendarOps, getTimeZoneOps, relativeToSlots) {
1278
+ const calendarOps = getCalendarOps(relativeToSlots.calendar);
1279
+ return isZonedEpochSlots(relativeToSlots) ? [ relativeToSlots, calendarOps, getTimeZoneOps(relativeToSlots.timeZone) ] : [ {
1280
+ ...relativeToSlots,
1281
+ ...isoTimeFieldDefaults
1282
+ }, calendarOps ];
1283
+ }
1284
+ function createMarkerToEpochNano(timeZoneOps) {
1285
+ return timeZoneOps ? extractEpochNano : isoToEpochNano;
1286
+ }
1287
+ function createMoveMarker(timeZoneOps) {
1288
+ return timeZoneOps ? bindArgs(moveZonedEpochs, timeZoneOps) : moveDateTime;
1289
+ }
1290
+ function createDiffMarkers(timeZoneOps) {
1291
+ return timeZoneOps ? bindArgs(diffZonedEpochsExact, timeZoneOps) : diffDateTimesExact;
1292
+ }
1293
+ function isZonedEpochSlots(marker) {
1294
+ return marker && marker.epochNanoseconds;
1295
+ }
1296
+ function isUniformUnit(unit, marker) {
1297
+ return unit <= 6 - (isZonedEpochSlots(marker) ? 1 : 0);
1298
+ }
1299
+ function addDurations(refineRelativeTo, getCalendarOps, getTimeZoneOps, doSubtract, slots, otherSlots, options) {
1300
+ const relativeToSlots = refineRelativeTo(normalizeOptions(options).relativeTo), maxUnit = Math.max(getMaxDurationUnit(slots), getMaxDurationUnit(otherSlots));
1301
+ if (isUniformUnit(maxUnit, relativeToSlots)) {
1302
+ return createDurationSlots(checkDurationUnits(((a, b, largestUnit, doSubtract) => {
1303
+ const combined = addBigNanos(durationFieldsToBigNano(a), durationFieldsToBigNano(b), doSubtract ? -1 : 1);
1304
+ if (!Number.isFinite(combined[0])) {
1305
+ throw new RangeError(outOfBoundsDate);
1306
+ }
1307
+ return {
1308
+ ...durationFieldDefaults,
1309
+ ...nanoToDurationDayTimeFields(combined, largestUnit)
1310
+ };
1311
+ })(slots, otherSlots, maxUnit, doSubtract)));
1312
+ }
1313
+ if (!relativeToSlots) {
1314
+ throw new RangeError("Missing relativeTo");
1315
+ }
1316
+ doSubtract && (otherSlots = negateDurationFields(otherSlots));
1317
+ const [marker, calendarOps, timeZoneOps] = createMarkerSystem(getCalendarOps, getTimeZoneOps, relativeToSlots), moveMarker = createMoveMarker(timeZoneOps), diffMarkers = createDiffMarkers(timeZoneOps), midMarker = moveMarker(calendarOps, marker, slots);
1318
+ return createDurationSlots(diffMarkers(calendarOps, marker, moveMarker(calendarOps, midMarker, otherSlots), maxUnit));
1319
+ }
1320
+ function negateDuration(slots) {
1321
+ return createDurationSlots(negateDurationFields(slots));
1322
+ }
1323
+ function negateDurationFields(fields) {
1324
+ const res = {};
1325
+ for (const fieldName of durationFieldNamesAsc) {
1326
+ res[fieldName] = -1 * fields[fieldName] || 0;
1327
+ }
1328
+ return res;
1329
+ }
1330
+ function computeDurationSign(fields, fieldNames = durationFieldNamesAsc) {
1331
+ let sign = 0;
1332
+ for (const fieldName of fieldNames) {
1333
+ const fieldSign = Math.sign(fields[fieldName]);
1334
+ if (fieldSign) {
1335
+ if (sign && sign !== fieldSign) {
1336
+ throw new RangeError(forbiddenDurationSigns);
1337
+ }
1338
+ sign = fieldSign;
1339
+ }
1340
+ }
1341
+ return sign;
1342
+ }
1343
+ function checkDurationUnits(fields) {
1344
+ for (const calendarUnit of durationCalendarFieldNamesAsc) {
1345
+ clampEntity(calendarUnit, fields[calendarUnit], -maxCalendarUnit, maxCalendarUnit, 1);
1346
+ }
1347
+ return checkDurationTimeUnit(bigNanoToNumber(durationFieldsToBigNano(fields), nanoInSec)),
1348
+ fields;
1349
+ }
1350
+ function checkDurationTimeUnit(n) {
1351
+ if (!Number.isSafeInteger(n)) {
1352
+ throw new RangeError(outOfBoundsDuration);
1353
+ }
1354
+ }
1355
+ function durationFieldsToBigNano(fields, largestUnit = 6) {
1356
+ return givenFieldsToBigNano(fields, largestUnit, durationFieldNamesAsc);
1357
+ }
1358
+ function nanoToDurationDayTimeFields(bigNano, largestUnit = 6) {
1359
+ const [days, timeNano] = bigNano, dayTimeFields = nanoToGivenFields(timeNano, largestUnit, durationFieldNamesAsc);
1360
+ if (dayTimeFields[durationFieldNamesAsc[largestUnit]] += days * (nanoInUtcDay / unitNanoMap[largestUnit]),
1361
+ !Number.isFinite(dayTimeFields[durationFieldNamesAsc[largestUnit]])) {
1362
+ throw new RangeError(outOfBoundsDate);
1363
+ }
1364
+ return dayTimeFields;
1365
+ }
1366
+ function nanoToDurationTimeFields(nano, largestUnit = 5) {
1367
+ return nanoToGivenFields(nano, largestUnit, durationFieldNamesAsc);
1368
+ }
1369
+ function durationHasDateParts(fields) {
1370
+ return Boolean(computeDurationSign(fields, durationDateFieldNamesAsc));
1371
+ }
1372
+ function getMaxDurationUnit(fields) {
1373
+ let unit = 9;
1374
+ for (;unit > 0 && !fields[durationFieldNamesAsc[unit]]; unit--) {}
1375
+ return unit;
1376
+ }
1377
+ function createSplitTuple(startEpochSec, endEpochSec) {
1378
+ return [ startEpochSec, endEpochSec ];
1379
+ }
1380
+ function computePeriod(epochSec) {
1381
+ const startEpochSec = Math.floor(epochSec / periodDur) * periodDur;
1382
+ return [ startEpochSec, startEpochSec + periodDur ];
1383
+ }
1384
+ function parseOffsetNano(s) {
1385
+ const offsetNano = parseOffsetNanoMaybe(s);
1386
+ if (void 0 === offsetNano) {
1387
+ throw new RangeError(failedParse(s));
1388
+ }
1389
+ return offsetNano;
1390
+ }
1391
+ function parsePlainDate(s, isPlainYearMonth, isPlainMonthDay) {
1392
+ let organized = parseDateTimeLike(requireString(s));
1393
+ if (!organized || organized.hasZ) {
1394
+ throw new RangeError(failedParse(s));
1395
+ }
1396
+ return isPlainYearMonth ? organized.calendar === isoCalendarId && (organized = -271821 === organized.isoYear && 4 === organized.isoMonth ? {
1397
+ ...organized,
1398
+ isoDay: 20,
1399
+ ...isoTimeFieldDefaults
1400
+ } : {
1401
+ ...organized,
1402
+ isoDay: 1,
1403
+ ...isoTimeFieldDefaults
1404
+ }) : isPlainMonthDay && organized.calendar === isoCalendarId && (organized = {
1405
+ ...organized,
1406
+ isoYear: isoEpochFirstLeapYear
1407
+ }), createPlainDateSlots(organized.hasTime ? finalizeDateTime(organized) : finalizeDate(organized));
1408
+ }
1409
+ function requireIsoCalendar(organized) {
1410
+ if (organized.calendar !== isoCalendarId) {
1411
+ throw new RangeError(invalidSubstring(organized.calendar));
1412
+ }
1413
+ }
1414
+ function finalizeZonedDateTime(organized, offsetNano, offsetDisambig = 0, epochDisambig = 0) {
1415
+ const timeZoneId = resolveTimeZoneId(organized.timeZone), timeZoneImpl = queryNativeTimeZone(timeZoneId);
1416
+ let epochNano;
1417
+ return checkIsoDateTimeFields(organized), epochNano = organized.hasTime ? getMatchingInstantFor(timeZoneImpl, organized, offsetNano, offsetDisambig, epochDisambig, !timeZoneImpl.offsetNano, organized.hasZ) : getStartOfDayInstantFor(timeZoneImpl, organized),
1418
+ createZonedDateTimeSlots(epochNano, timeZoneId, resolveCalendarId(organized.calendar));
1419
+ }
1420
+ function finalizeDateTime(organized) {
1421
+ return resolveSlotsCalendar(checkIsoDateTimeInBounds(checkIsoDateTimeFields(organized)));
1422
+ }
1423
+ function finalizeDate(organized) {
1424
+ return resolveSlotsCalendar(checkIsoDateInBounds(checkIsoDateFields(organized)));
1425
+ }
1426
+ function resolveSlotsCalendar(organized) {
1427
+ return {
1428
+ ...organized,
1429
+ calendar: resolveCalendarId(organized.calendar)
1430
+ };
1431
+ }
1432
+ function parseDateTimeLike(s) {
1433
+ const parts = dateTimeRegExp.exec(s);
1434
+ return parts ? (parts => {
1435
+ const zOrOffset = parts[10], hasZ = "Z" === (zOrOffset || "").toUpperCase();
1436
+ return {
1437
+ isoYear: organizeIsoYearParts(parts),
1438
+ isoMonth: parseInt(parts[4]),
1439
+ isoDay: parseInt(parts[5]),
1440
+ ...organizeTimeParts(parts.slice(5)),
1441
+ ...organizeAnnotationParts(parts[16]),
1442
+ hasTime: Boolean(parts[6]),
1443
+ hasZ: hasZ,
1444
+ offset: hasZ ? void 0 : zOrOffset
1445
+ };
1446
+ })(parts) : void 0;
1447
+ }
1448
+ function parseYearMonthOnly(s) {
1449
+ const parts = yearMonthRegExp.exec(s);
1450
+ return parts ? (parts => ({
1451
+ isoYear: organizeIsoYearParts(parts),
1452
+ isoMonth: parseInt(parts[4]),
1453
+ isoDay: 1,
1454
+ ...organizeAnnotationParts(parts[5])
1455
+ }))(parts) : void 0;
1456
+ }
1457
+ function parseMonthDayOnly(s) {
1458
+ const parts = monthDayRegExp.exec(s);
1459
+ return parts ? (parts => ({
1460
+ isoYear: isoEpochFirstLeapYear,
1461
+ isoMonth: parseInt(parts[1]),
1462
+ isoDay: parseInt(parts[2]),
1463
+ ...organizeAnnotationParts(parts[3])
1464
+ }))(parts) : void 0;
1465
+ }
1466
+ function parseOffsetNanoMaybe(s, onlyHourMinute) {
1467
+ const parts = offsetRegExp.exec(s);
1468
+ return parts ? ((parts, onlyHourMinute) => {
1469
+ const firstSubMinutePart = parts[4] || parts[5];
1470
+ if (onlyHourMinute && firstSubMinutePart) {
1471
+ throw new RangeError(invalidSubstring(firstSubMinutePart));
1472
+ }
1473
+ return (offsetNano => {
1474
+ if (Math.abs(offsetNano) >= nanoInUtcDay) {
1475
+ throw new RangeError(outOfBoundsOffset);
1476
+ }
1477
+ return offsetNano;
1478
+ })((parseInt0(parts[2]) * nanoInHour + parseInt0(parts[3]) * nanoInMinute + parseInt0(parts[4]) * nanoInSec + parseSubsecNano(parts[5] || "")) * parseSign(parts[1]));
1479
+ })(parts, onlyHourMinute) : void 0;
1480
+ }
1481
+ function organizeIsoYearParts(parts) {
1482
+ const yearSign = parseSign(parts[1]), year = parseInt(parts[2] || parts[3]);
1483
+ if (yearSign < 0 && !year) {
1484
+ throw new RangeError(invalidSubstring(-0));
1485
+ }
1486
+ return yearSign * year;
1487
+ }
1488
+ function organizeTimeParts(parts) {
1489
+ const isoSecond = parseInt0(parts[3]);
1490
+ return {
1491
+ ...nanoToIsoTimeAndDay(parseSubsecNano(parts[4] || ""))[0],
1492
+ isoHour: parseInt0(parts[1]),
1493
+ isoMinute: parseInt0(parts[2]),
1494
+ isoSecond: 60 === isoSecond ? 59 : isoSecond
1495
+ };
1496
+ }
1497
+ function organizeAnnotationParts(s) {
1498
+ let calendarIsCritical, timeZoneId;
1499
+ const calendarIds = [];
1500
+ if (s.replace(annotationRegExp, ((whole, criticalStr, mainStr) => {
1501
+ const isCritical = Boolean(criticalStr), [val, name] = mainStr.split("=").reverse();
1502
+ if (name) {
1503
+ if ("u-ca" === name) {
1504
+ calendarIds.push(val), calendarIsCritical || (calendarIsCritical = isCritical);
1505
+ } else if (isCritical || /[A-Z]/.test(name)) {
1506
+ throw new RangeError(invalidSubstring(whole));
1507
+ }
1508
+ } else {
1509
+ if (timeZoneId) {
1510
+ throw new RangeError(invalidSubstring(whole));
1511
+ }
1512
+ timeZoneId = val;
1513
+ }
1514
+ return "";
1515
+ })), calendarIds.length > 1 && calendarIsCritical) {
1516
+ throw new RangeError(invalidSubstring(s));
1517
+ }
1518
+ return {
1519
+ timeZone: timeZoneId,
1520
+ calendar: calendarIds[0] || isoCalendarId
1521
+ };
1522
+ }
1523
+ function parseSubsecNano(fracStr) {
1524
+ return parseInt(fracStr.padEnd(9, "0"));
1525
+ }
1526
+ function createRegExp(meat) {
1527
+ return new RegExp(`^${meat}$`, "i");
1528
+ }
1529
+ function parseSign(s) {
1530
+ return s && "+" !== s ? -1 : 1;
1531
+ }
1532
+ function parseInt0(s) {
1533
+ return void 0 === s ? 0 : parseInt(s);
1534
+ }
1535
+ function resolveTimeZoneId(id) {
1536
+ const essence = getTimeZoneEssence(id);
1537
+ return "number" == typeof essence ? formatOffsetNano(essence) : essence ? (id => {
1538
+ if (badCharactersRegExp.test(id)) {
1539
+ throw new RangeError(invalidTimeZone(id));
1540
+ }
1541
+ if (icuRegExp.test(id)) {
1542
+ throw new RangeError(forbiddenIcuTimeZone);
1543
+ }
1544
+ return id.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("/");
1545
+ })(id) : utcTimeZoneId;
1546
+ }
1547
+ function getTimeZoneAtomic(id) {
1548
+ const essence = getTimeZoneEssence(id);
1549
+ return "number" == typeof essence ? essence : essence ? essence.resolvedOptions().timeZone : utcTimeZoneId;
1550
+ }
1551
+ function getTimeZoneEssence(id) {
1552
+ const offsetNano = parseOffsetNanoMaybe(id = id.toUpperCase(), 1);
1553
+ return void 0 !== offsetNano ? offsetNano : id !== utcTimeZoneId ? queryTimeZoneIntlFormat(id) : void 0;
1554
+ }
1555
+ function compareInstants(instantSlots0, instantSlots1) {
1556
+ return compareBigNanos(instantSlots0.epochNanoseconds, instantSlots1.epochNanoseconds);
1557
+ }
1558
+ function compareZonedDateTimes(zonedDateTimeSlots0, zonedDateTimeSlots1) {
1559
+ return compareBigNanos(zonedDateTimeSlots0.epochNanoseconds, zonedDateTimeSlots1.epochNanoseconds);
1560
+ }
1561
+ function compareIsoDateTimeFields(isoFields0, isoFields1) {
1562
+ return compareIsoDateFields(isoFields0, isoFields1) || compareIsoTimeFields(isoFields0, isoFields1);
1563
+ }
1564
+ function compareIsoDateFields(isoFields0, isoFields1) {
1565
+ return compareNumbers(isoToEpochMilli(isoFields0), isoToEpochMilli(isoFields1));
1566
+ }
1567
+ function compareIsoTimeFields(isoFields0, isoFields1) {
1568
+ return compareNumbers(isoTimeFieldsToNano(isoFields0), isoTimeFieldsToNano(isoFields1));
1569
+ }
1570
+ function isTimeZoneIdsEqual(a, b) {
1571
+ if (a === b) {
1572
+ return 1;
1573
+ }
1574
+ try {
1575
+ return getTimeZoneAtomic(a) === getTimeZoneAtomic(b);
1576
+ } catch (_a) {}
1577
+ }
1578
+ function createNativeOpsCreator(isoOps, intlOps) {
1579
+ return calendarId => calendarId === isoCalendarId ? isoOps : calendarId === gregoryCalendarId || "japanese" === calendarId ? Object.assign(Object.create(isoOps), {
1580
+ id: calendarId
1581
+ }) : Object.assign(Object.create(intlOps), queryIntlCalendar(calendarId));
1582
+ }
1583
+ function refineCalendarFields(calendarOps, bag, validFieldNames, requiredFieldNames = [], forcedValidFieldNames = []) {
1584
+ return refineFields(bag, [ ...calendarOps.fields(validFieldNames), ...forcedValidFieldNames ].sort(), requiredFieldNames);
1585
+ }
1586
+ function refineFields(bag, validFieldNames, requiredFieldNames, disallowEmpty = !requiredFieldNames) {
1587
+ const res = {};
1588
+ let prevFieldName, anyMatching = 0;
1589
+ for (const fieldName of validFieldNames) {
1590
+ if (fieldName === prevFieldName) {
1591
+ throw new RangeError(duplicateFields(fieldName));
1592
+ }
1593
+ if ("constructor" === fieldName || "__proto__" === fieldName) {
1594
+ throw new RangeError(forbiddenField(fieldName));
1595
+ }
1596
+ let fieldVal = bag[fieldName];
1597
+ if (void 0 !== fieldVal) {
1598
+ anyMatching = 1, builtinRefiners[fieldName] && (fieldVal = builtinRefiners[fieldName](fieldVal, fieldName)),
1599
+ res[fieldName] = fieldVal;
1600
+ } else if (requiredFieldNames) {
1601
+ if (requiredFieldNames.includes(fieldName)) {
1602
+ throw new TypeError(missingField(fieldName));
1603
+ }
1604
+ res[fieldName] = timeFieldDefaults[fieldName];
1605
+ }
1606
+ prevFieldName = fieldName;
1607
+ }
1608
+ if (disallowEmpty && !anyMatching) {
1609
+ throw new TypeError(noValidFields(validFieldNames));
1610
+ }
1611
+ return res;
1612
+ }
1613
+ function refineTimeBag(fields, overflow) {
1614
+ return constrainIsoTimeFields(timeFieldsToIso({
1615
+ ...timeFieldDefaults,
1616
+ ...fields
1617
+ }), overflow);
1618
+ }
1619
+ function convertToIso(calendarOps, input, inputFieldNames, extra, extraFieldNames) {
1620
+ input = pluckProps(inputFieldNames = calendarOps.fields(inputFieldNames), input),
1621
+ extra = refineFields(extra, extraFieldNames = calendarOps.fields(extraFieldNames), []);
1622
+ let mergedFields = calendarOps.mergeFields(input, extra);
1623
+ return mergedFields = refineFields(mergedFields, [ ...inputFieldNames, ...extraFieldNames ].sort(), []),
1624
+ calendarOps.dateFromFields(mergedFields);
1625
+ }
1626
+ function refineYear(calendarNative, fields) {
1627
+ const eraOrigins = getCalendarEraOrigins(calendarNative), eraRemaps = eraRemapsByCalendarId[calendarNative.id || ""] || {};
1628
+ let {era: era, eraYear: eraYear, year: year} = fields;
1629
+ if (void 0 !== era || void 0 !== eraYear) {
1630
+ if (void 0 === era || void 0 === eraYear) {
1631
+ throw new TypeError(mismatchingEraParts);
1632
+ }
1633
+ if (!eraOrigins) {
1634
+ throw new RangeError(forbiddenEraParts);
1635
+ }
1636
+ const eraOrigin = eraOrigins[eraRemaps[era] || era];
1637
+ if (void 0 === eraOrigin) {
1638
+ throw new RangeError(invalidEra(era));
1639
+ }
1640
+ const yearByEra = eraYearToYear(eraYear, eraOrigin);
1641
+ if (void 0 !== year && year !== yearByEra) {
1642
+ throw new RangeError(mismatchingYearAndEra);
1643
+ }
1644
+ year = yearByEra;
1645
+ } else if (void 0 === year) {
1646
+ throw new TypeError(missingYear(eraOrigins));
1647
+ }
1648
+ return year;
1649
+ }
1650
+ function refineMonth(calendarNative, fields, year, overflow) {
1651
+ let {month: month, monthCode: monthCode} = fields;
1652
+ if (void 0 !== monthCode) {
1653
+ const monthByCode = ((calendarNative, monthCode, year, overflow) => {
1654
+ const leapMonth = calendarNative.leapMonth(year), [monthCodeNumber, wantsLeapMonth] = parseMonthCode(monthCode);
1655
+ let month = monthCodeNumberToMonth(monthCodeNumber, wantsLeapMonth, leapMonth);
1656
+ if (wantsLeapMonth) {
1657
+ const leapMonthMeta = getCalendarLeapMonthMeta(calendarNative);
1658
+ if (void 0 === leapMonthMeta) {
1659
+ throw new RangeError(invalidLeapMonth);
1660
+ }
1661
+ if (leapMonthMeta > 0) {
1662
+ if (month > leapMonthMeta) {
1663
+ throw new RangeError(invalidLeapMonth);
1664
+ }
1665
+ if (void 0 === leapMonth) {
1666
+ if (1 === overflow) {
1667
+ throw new RangeError(invalidLeapMonth);
1668
+ }
1669
+ month--;
1670
+ }
1671
+ } else {
1672
+ if (month !== -leapMonthMeta) {
1673
+ throw new RangeError(invalidLeapMonth);
1674
+ }
1675
+ if (void 0 === leapMonth && 1 === overflow) {
1676
+ throw new RangeError(invalidLeapMonth);
1677
+ }
1678
+ }
1679
+ }
1680
+ return month;
1681
+ })(calendarNative, monthCode, year, overflow);
1682
+ if (void 0 !== month && month !== monthByCode) {
1683
+ throw new RangeError(mismatchingMonthAndCode);
1684
+ }
1685
+ month = monthByCode, overflow = 1;
1686
+ } else if (void 0 === month) {
1687
+ throw new TypeError(missingMonth);
1688
+ }
1689
+ return clampEntity("month", month, 1, calendarNative.monthsInYearPart(year), overflow);
1690
+ }
1691
+ function refineDay(calendarNative, fields, month, year, overflow) {
1692
+ return clampProp(fields, "day", 1, calendarNative.daysInMonthParts(year, month), overflow);
1693
+ }
1694
+ function spliceFields(dest, additional, allPropNames, deletablePropNames) {
1695
+ let anyMatching = 0;
1696
+ const nonMatchingPropNames = [];
1697
+ for (const propName of allPropNames) {
1698
+ void 0 !== additional[propName] ? anyMatching = 1 : nonMatchingPropNames.push(propName);
1699
+ }
1700
+ if (Object.assign(dest, additional), anyMatching) {
1701
+ for (const deletablePropName of deletablePropNames || nonMatchingPropNames) {
1702
+ delete dest[deletablePropName];
1703
+ }
1704
+ }
1705
+ }
1706
+ function computeDateEssentials(slots) {
1707
+ const calendarOps = createNativePartOps(slots.calendar), [year, month, day] = calendarOps.dateParts(slots), [monthCodeNumber, isLeapMonth] = calendarOps.monthCodeParts(year, month);
1708
+ return {
1709
+ year: year,
1710
+ monthCode: formatMonthCode(monthCodeNumber, isLeapMonth),
1711
+ day: day
1712
+ };
1713
+ }
1714
+ function zonedDateTimeToPlainDateTime(getTimeZoneOps, zonedDateTimeSlots0) {
1715
+ return createPlainDateTimeSlots(zonedEpochSlotsToIso(zonedDateTimeSlots0, getTimeZoneOps));
1716
+ }
1717
+ function zonedDateTimeToPlainDate(getTimeZoneOps, zonedDateTimeSlots0) {
1718
+ return createPlainDateSlots(zonedEpochSlotsToIso(zonedDateTimeSlots0, getTimeZoneOps));
1719
+ }
1720
+ function zonedDateTimeToPlainTime(getTimeZoneOps, zonedDateTimeSlots0) {
1721
+ return createPlainTimeSlots(zonedEpochSlotsToIso(zonedDateTimeSlots0, getTimeZoneOps));
1722
+ }
1723
+ function createSlotClass(branding, construct, getters, methods, staticMethods) {
1724
+ function Class(...args) {
1725
+ if (!(this instanceof Class)) {
1726
+ throw new TypeError("Invalid calling context");
1727
+ }
1728
+ setSlots(this, construct(...args));
1729
+ }
1730
+ function bindMethod(method, methodName) {
1731
+ return Object.defineProperties((function(...args) {
1732
+ return method.call(this, getSpecificSlots(this), ...args);
1733
+ }), createNameDescriptors(methodName));
1734
+ }
1735
+ function getSpecificSlots(obj) {
1736
+ const slots = getSlots(obj);
1737
+ if (!slots || slots.branding !== branding) {
1738
+ throw new TypeError("Invalid calling context");
1739
+ }
1740
+ return slots;
1741
+ }
1742
+ return Object.defineProperties(Class.prototype, {
1743
+ ...createGetterDescriptors(mapProps(bindMethod, getters)),
1744
+ ...createPropDescriptors(mapProps(bindMethod, methods)),
1745
+ ...createStringTagDescriptors("Temporal." + branding)
1746
+ }), Object.defineProperties(Class, {
1747
+ ...createPropDescriptors(staticMethods),
1748
+ ...createNameDescriptors(branding)
1749
+ }), [ Class, slots => {
1750
+ const instance = Object.create(Class.prototype);
1751
+ return setSlots(instance, slots), instance;
1752
+ }, getSpecificSlots ];
1753
+ }
1754
+ function rejectInvalidBag(bag) {
1755
+ if (getSlots(bag) || void 0 !== bag.calendar || void 0 !== bag.timeZone) {
1756
+ throw new TypeError("Invalid bag");
1757
+ }
1758
+ return bag;
1759
+ }
1760
+ function getCalendarIdFromBag(bag) {
1761
+ return extractCalendarIdFromBag(bag) || isoCalendarId;
1762
+ }
1763
+ function extractCalendarIdFromBag(bag) {
1764
+ const {calendar: calendarArg} = bag;
1765
+ if (void 0 !== calendarArg) {
1766
+ return refineCalendarArg(calendarArg);
1767
+ }
1768
+ }
1769
+ function refineCalendarArg(arg) {
1770
+ if (isObjectLike(arg)) {
1771
+ const {calendar: calendar} = getSlots(arg) || {};
1772
+ if (!calendar) {
1773
+ throw new TypeError(invalidCalendar(arg));
1774
+ }
1775
+ return calendar;
1776
+ }
1777
+ return (arg => resolveCalendarId((s => {
1778
+ const res = parseDateTimeLike(s) || parseYearMonthOnly(s) || parseMonthDayOnly(s);
1779
+ return res ? res.calendar : s;
1780
+ })(requireString(arg))))(arg);
1781
+ }
1782
+ function createCalendarGetters(methodNameMap) {
1783
+ const methods = {};
1784
+ for (const methodName in methodNameMap) {
1785
+ methods[methodName] = slots => {
1786
+ const {calendar: calendar} = slots;
1787
+ return createNativeStandardOps(calendar)[methodName](slots);
1788
+ };
1789
+ }
1790
+ return methods;
1791
+ }
1792
+ function neverValueOf() {
1793
+ throw new TypeError("Cannot use valueOf");
1794
+ }
1795
+ function refineTimeZoneArg(arg) {
1796
+ if (isObjectLike(arg)) {
1797
+ const {timeZone: timeZone} = getSlots(arg) || {};
1798
+ if (!timeZone) {
1799
+ throw new TypeError(invalidTimeZone(arg));
1800
+ }
1801
+ return timeZone;
1802
+ }
1803
+ return (arg => resolveTimeZoneId((s => {
1804
+ const parsed = parseDateTimeLike(s);
1805
+ return parsed && (parsed.timeZone || parsed.hasZ && utcTimeZoneId || parsed.offset) || s;
1806
+ })(requireString(arg))))(arg);
1807
+ }
1808
+ function toDurationSlots(arg) {
1809
+ if (isObjectLike(arg)) {
1810
+ const slots = getSlots(arg);
1811
+ return slots && slots.branding === DurationBranding ? slots : (bag => {
1812
+ const durationFields = refineFields(bag, durationFieldNamesAlpha);
1813
+ return createDurationSlots(checkDurationUnits({
1814
+ ...durationFieldDefaults,
1815
+ ...durationFields
1816
+ }));
1817
+ })(arg);
1818
+ }
1819
+ return (s => {
1820
+ const parsed = (s => {
1821
+ const parts = durationRegExp.exec(s);
1822
+ return parts ? (parts => {
1823
+ function parseUnit(wholeStr, fracStr, timeUnit) {
1824
+ let leftoverUnits = 0, wholeUnits = 0;
1825
+ if (timeUnit && ([leftoverUnits, leftoverNano] = divModFloor(leftoverNano, unitNanoMap[timeUnit])),
1826
+ void 0 !== wholeStr) {
1827
+ if (hasAnyFrac) {
1828
+ throw new RangeError(invalidSubstring(wholeStr));
1829
+ }
1830
+ wholeUnits = (s => {
1831
+ const n = parseInt(s);
1832
+ if (!Number.isFinite(n)) {
1833
+ throw new RangeError(invalidSubstring(s));
1834
+ }
1835
+ return n;
1836
+ })(wholeStr), hasAny = 1, fracStr && (leftoverNano = parseSubsecNano(fracStr) * (unitNanoMap[timeUnit] / nanoInSec),
1837
+ hasAnyFrac = 1);
1838
+ }
1839
+ return leftoverUnits + wholeUnits;
1840
+ }
1841
+ let hasAny = 0, hasAnyFrac = 0, leftoverNano = 0, durationFields = {
1842
+ ...zipProps(durationFieldNamesAsc, [ parseUnit(parts[2]), parseUnit(parts[3]), parseUnit(parts[4]), parseUnit(parts[5]), parseUnit(parts[6], parts[7], 5), parseUnit(parts[8], parts[9], 4), parseUnit(parts[10], parts[11], 3) ]),
1843
+ ...nanoToGivenFields(leftoverNano, 2, durationFieldNamesAsc)
1844
+ };
1845
+ if (!hasAny) {
1846
+ throw new RangeError(noValidFields(durationFieldNamesAsc));
1847
+ }
1848
+ return parseSign(parts[1]) < 0 && (durationFields = negateDurationFields(durationFields)),
1849
+ durationFields;
1850
+ })(parts) : void 0;
1851
+ })(requireString(s));
1852
+ if (!parsed) {
1853
+ throw new RangeError(failedParse(s));
1854
+ }
1855
+ return createDurationSlots(checkDurationUnits(parsed));
1856
+ })(arg);
1857
+ }
1858
+ function refinePublicRelativeTo(relativeTo) {
1859
+ if (void 0 !== relativeTo) {
1860
+ if (isObjectLike(relativeTo)) {
1861
+ const slots = getSlots(relativeTo) || {};
1862
+ switch (slots.branding) {
1863
+ case ZonedDateTimeBranding:
1864
+ case PlainDateBranding:
1865
+ return slots;
1866
+
1867
+ case PlainDateTimeBranding:
1868
+ return createPlainDateSlots(slots);
1869
+ }
1870
+ const calendarId = getCalendarIdFromBag(relativeTo);
1871
+ return {
1872
+ ...((refineTimeZoneString, getTimeZoneOps, calendarOps, bag) => {
1873
+ const fields = refineCalendarFields(calendarOps, bag, dateFieldNamesAlpha, [], timeAndZoneFieldNames);
1874
+ if (void 0 !== fields.timeZone) {
1875
+ const isoDateFields = calendarOps.dateFromFields(fields), isoTimeFields = refineTimeBag(fields), timeZoneId = refineTimeZoneString(fields.timeZone);
1876
+ return {
1877
+ epochNanoseconds: getMatchingInstantFor(getTimeZoneOps(timeZoneId), {
1878
+ ...isoDateFields,
1879
+ ...isoTimeFields
1880
+ }, void 0 !== fields.offset ? parseOffsetNano(fields.offset) : void 0),
1881
+ timeZone: timeZoneId
1882
+ };
1883
+ }
1884
+ return {
1885
+ ...calendarOps.dateFromFields(fields),
1886
+ ...isoTimeFieldDefaults
1887
+ };
1888
+ })(refineTimeZoneArg, queryNativeTimeZone, createNativeStandardOps(calendarId), relativeTo),
1889
+ calendar: calendarId
1890
+ };
1891
+ }
1892
+ return (s => {
1893
+ const organized = parseDateTimeLike(requireString(s));
1894
+ if (!organized) {
1895
+ throw new RangeError(failedParse(s));
1896
+ }
1897
+ if (organized.timeZone) {
1898
+ return finalizeZonedDateTime(organized, organized.offset ? parseOffsetNano(organized.offset) : void 0);
1899
+ }
1900
+ if (organized.hasZ) {
1901
+ throw new RangeError(failedParse(s));
1902
+ }
1903
+ return finalizeDate(organized);
1904
+ })(relativeTo);
1905
+ }
1906
+ }
1907
+ function createOptionsTransformer(standardNames, fallbacks, exclusions) {
1908
+ const excludedNameSet = new Set(exclusions);
1909
+ return (options, strictOptions) => {
1910
+ const hasAnyExclusions = exclusions && hasAnyPropsByName(options, exclusions);
1911
+ if (!hasAnyPropsByName(options = ((propNames, props) => {
1912
+ const filteredProps = {};
1913
+ for (const propName in props) {
1914
+ propNames.has(propName) || (filteredProps[propName] = props[propName]);
1915
+ }
1916
+ return filteredProps;
1917
+ })(excludedNameSet, options), standardNames)) {
1918
+ if (strictOptions && hasAnyExclusions) {
1919
+ throw new TypeError("Invalid formatting options");
1920
+ }
1921
+ options = {
1922
+ ...fallbacks,
1923
+ ...options
1924
+ };
1925
+ }
1926
+ return exclusions && (options.timeZone = utcTimeZoneId, [ "full", "long" ].includes(options.timeStyle) && (options.timeStyle = "medium")),
1927
+ options;
1928
+ };
1929
+ }
1930
+ function createFormatPrepper(config, queryFormat = createFormatForPrep, strictOptions = 0) {
1931
+ const [transformOptions, , , getForcedTimeZoneId] = config;
1932
+ return (locales, options = emptyOptions, ...slotsList) => {
1933
+ const subformat = queryFormat(getForcedTimeZoneId && getForcedTimeZoneId(...slotsList), locales, options, transformOptions, strictOptions), resolvedOptions = subformat.resolvedOptions();
1934
+ return [ subformat, ...toEpochMillis(config, resolvedOptions, slotsList) ];
1935
+ };
1936
+ }
1937
+ function createFormatForPrep(forcedTimeZoneId, locales, options, transformOptions, strictOptions) {
1938
+ if (options = transformOptions(options, strictOptions), forcedTimeZoneId) {
1939
+ if (void 0 !== options.timeZone) {
1940
+ throw new TypeError(forbiddenFormatTimeZone);
1941
+ }
1942
+ options.timeZone = forcedTimeZoneId;
1943
+ }
1944
+ return new RawDateTimeFormat(locales, options);
1945
+ }
1946
+ function toEpochMillis(config, resolvedOptions, slotsList) {
1947
+ const [, slotsToEpochMilli, strictCalendarCheck] = config;
1948
+ return slotsList.map((slots => (slots.calendar && ((internalCalendarId, resolvedCalendarId, strictCalendarCheck) => {
1949
+ if ((strictCalendarCheck || internalCalendarId !== isoCalendarId) && internalCalendarId !== resolvedCalendarId) {
1950
+ throw new RangeError(mismatchingCalendars);
1951
+ }
1952
+ })(slots.calendar, resolvedOptions.calendar, strictCalendarCheck), slotsToEpochMilli(slots, resolvedOptions))));
1953
+ }
1954
+ function slotsWithCalendarId(slots, calendarId) {
1955
+ return {
1956
+ ...slots,
1957
+ calendar: calendarId
1958
+ };
1959
+ }
1960
+ function toPlainTimeSlots(arg, options) {
1961
+ if (isObjectLike(arg)) {
1962
+ const slots = getSlots(arg) || {};
1963
+ switch (slots.branding) {
1964
+ case PlainTimeBranding:
1965
+ return refineOverflowOptions(options), slots;
1966
+
1967
+ case PlainDateTimeBranding:
1968
+ return refineOverflowOptions(options), createPlainTimeSlots(slots);
1969
+
1970
+ case ZonedDateTimeBranding:
1971
+ return refineOverflowOptions(options), zonedDateTimeToPlainTime(queryNativeTimeZone, slots);
1972
+ }
1973
+ return ((bag, options) => createPlainTimeSlots(refineTimeBag(refineFields(bag, timeFieldNamesAlpha, [], 1), refineOverflowOptions(options))))(arg, options);
1974
+ }
1975
+ const timeSlots = (s => {
1976
+ let altParsed, organized = (s => {
1977
+ const parts = timeRegExp.exec(s);
1978
+ return parts ? (organizeAnnotationParts(parts[10]), organizeTimeParts(parts)) : void 0;
1979
+ })(requireString(s));
1980
+ if (!organized) {
1981
+ if (organized = parseDateTimeLike(s), !organized) {
1982
+ throw new RangeError(failedParse(s));
1983
+ }
1984
+ if (!organized.hasTime) {
1985
+ throw new RangeError(failedParse(s));
1986
+ }
1987
+ if (organized.hasZ) {
1988
+ throw new RangeError(invalidSubstring("Z"));
1989
+ }
1990
+ requireIsoCalendar(organized);
1991
+ }
1992
+ if ((altParsed = parseYearMonthOnly(s)) && isIsoDateFieldsValid(altParsed)) {
1993
+ throw new RangeError(failedParse(s));
1994
+ }
1995
+ if ((altParsed = parseMonthDayOnly(s)) && isIsoDateFieldsValid(altParsed)) {
1996
+ throw new RangeError(failedParse(s));
1997
+ }
1998
+ return createPlainTimeSlots(constrainIsoTimeFields(organized, 1));
1999
+ })(arg);
2000
+ return refineOverflowOptions(options), timeSlots;
2001
+ }
2002
+ function optionalToPlainTimeFields(timeArg) {
2003
+ return void 0 === timeArg ? void 0 : toPlainTimeSlots(timeArg);
2004
+ }
2005
+ function toPlainDateTimeSlots(arg, options) {
2006
+ if (isObjectLike(arg)) {
2007
+ const slots = getSlots(arg) || {};
2008
+ switch (slots.branding) {
2009
+ case PlainDateTimeBranding:
2010
+ return refineOverflowOptions(options), slots;
2011
+
2012
+ case PlainDateBranding:
2013
+ return refineOverflowOptions(options), createPlainDateTimeSlots({
2014
+ ...slots,
2015
+ ...isoTimeFieldDefaults
2016
+ });
2017
+
2018
+ case ZonedDateTimeBranding:
2019
+ return refineOverflowOptions(options), zonedDateTimeToPlainDateTime(queryNativeTimeZone, slots);
2020
+ }
2021
+ return ((calendarOps, bag, options) => {
2022
+ const fields = refineCalendarFields(calendarOps, bag, dateFieldNamesAlpha, [], timeFieldNamesAsc), overflow = refineOverflowOptions(options);
2023
+ return createPlainDateTimeSlots(checkIsoDateTimeInBounds({
2024
+ ...calendarOps.dateFromFields(fields, fabricateOverflowOptions(overflow)),
2025
+ ...refineTimeBag(fields, overflow)
2026
+ }));
2027
+ })(createNativeStandardOps(getCalendarIdFromBag(arg)), arg, options);
2028
+ }
2029
+ const res = (s => {
2030
+ const organized = parseDateTimeLike(requireString(s));
2031
+ if (!organized || organized.hasZ) {
2032
+ throw new RangeError(failedParse(s));
2033
+ }
2034
+ return createPlainDateTimeSlots(finalizeDateTime(organized));
2035
+ })(arg);
2036
+ return refineOverflowOptions(options), res;
2037
+ }
2038
+ function toPlainMonthDaySlots(arg, options) {
2039
+ if (isObjectLike(arg)) {
2040
+ const slots = getSlots(arg);
2041
+ if (slots && slots.branding === PlainMonthDayBranding) {
2042
+ return refineOverflowOptions(options), slots;
2043
+ }
2044
+ const calendarIdMaybe = extractCalendarIdFromBag(arg);
2045
+ return ((calendarOps, calendarAbsent, bag, options) => {
2046
+ const fields = refineCalendarFields(calendarOps, bag, dateFieldNamesAlpha, dayFieldNames);
2047
+ return calendarAbsent && void 0 !== fields.month && void 0 === fields.monthCode && void 0 === fields.year && (fields.year = isoEpochFirstLeapYear),
2048
+ calendarOps.monthDayFromFields(fields, options);
2049
+ })(createNativeStandardOps(calendarIdMaybe || isoCalendarId), !calendarIdMaybe, arg, options);
2050
+ }
2051
+ const res = ((getCalendarOps, s) => {
2052
+ const organized = parseMonthDayOnly(requireString(s));
2053
+ if (organized) {
2054
+ return requireIsoCalendar(organized), createPlainMonthDaySlots(checkIsoDateFields(organized));
2055
+ }
2056
+ const dateSlots = parsePlainDate(s, 0, 1), {calendar: calendar} = dateSlots, calendarOps = getCalendarOps(calendar), [origYear, origMonth, day] = calendarOps.dateParts(dateSlots), [monthCodeNumber, isLeapMonth] = calendarOps.monthCodeParts(origYear, origMonth), [year, month] = calendarOps.yearMonthForMonthDay(monthCodeNumber, isLeapMonth, day);
2057
+ return createPlainMonthDaySlots(checkIsoDateInBounds(calendarOps.isoFields(year, month, day)), calendar);
2058
+ })(createNativeStandardOps, arg);
2059
+ return refineOverflowOptions(options), res;
2060
+ }
2061
+ function toPlainYearMonthSlots(arg, options) {
2062
+ if (isObjectLike(arg)) {
2063
+ const slots = getSlots(arg);
2064
+ return slots && slots.branding === PlainYearMonthBranding ? (refineOverflowOptions(options),
2065
+ slots) : ((calendarOps, bag, options) => {
2066
+ const fields = refineCalendarFields(calendarOps, bag, yearMonthFieldNames, void 0);
2067
+ return calendarOps.yearMonthFromFields(fields, options);
2068
+ })(createNativeStandardOps(getCalendarIdFromBag(arg)), arg, options);
2069
+ }
2070
+ const res = ((getCalendarOps, s) => {
2071
+ const organized = parseYearMonthOnly(requireString(s));
2072
+ if (organized) {
2073
+ return requireIsoCalendar(organized), createPlainYearMonthSlots(checkIsoYearMonthInBounds(checkIsoDateFields(organized)));
2074
+ }
2075
+ const isoSlots = parsePlainDate(s, 1);
2076
+ return createPlainYearMonthSlots(moveToDayOfMonthUnsafe(getCalendarOps(isoSlots.calendar), isoSlots));
2077
+ })(createNativeStandardOps, arg);
2078
+ return refineOverflowOptions(options), res;
2079
+ }
2080
+ function toPlainDateSlots(arg, options) {
2081
+ if (isObjectLike(arg)) {
2082
+ const slots = getSlots(arg) || {};
2083
+ switch (slots.branding) {
2084
+ case PlainDateBranding:
2085
+ return refineOverflowOptions(options), slots;
2086
+
2087
+ case PlainDateTimeBranding:
2088
+ return refineOverflowOptions(options), createPlainDateSlots(slots);
2089
+
2090
+ case ZonedDateTimeBranding:
2091
+ return refineOverflowOptions(options), zonedDateTimeToPlainDate(queryNativeTimeZone, slots);
2092
+ }
2093
+ return ((calendarOps, bag, options, requireFields = []) => {
2094
+ const fields = refineCalendarFields(calendarOps, bag, dateFieldNamesAlpha, requireFields);
2095
+ return calendarOps.dateFromFields(fields, options);
2096
+ })(createNativeStandardOps(getCalendarIdFromBag(arg)), arg, options);
2097
+ }
2098
+ const res = parsePlainDate(arg);
2099
+ return refineOverflowOptions(options), res;
2100
+ }
2101
+ function toZonedDateTimeSlots(arg, options) {
2102
+ if (isObjectLike(arg)) {
2103
+ const slots = getSlots(arg);
2104
+ if (slots && slots.branding === ZonedDateTimeBranding) {
2105
+ return refineZonedFieldOptions(options), slots;
2106
+ }
2107
+ const calendarId = getCalendarIdFromBag(arg);
2108
+ return ((refineTimeZoneString, getTimeZoneOps, calendarOps, calendarId, bag, options) => {
2109
+ const fields = refineCalendarFields(calendarOps, bag, dateFieldNamesAlpha, timeZoneFieldNames, timeAndZoneFieldNames), timeZoneId = refineTimeZoneString(fields.timeZone), [overflow, offsetDisambig, epochDisambig] = refineZonedFieldOptions(options), isoDateFields = calendarOps.dateFromFields(fields, fabricateOverflowOptions(overflow)), isoTimeFields = refineTimeBag(fields, overflow);
2110
+ return createZonedDateTimeSlots(getMatchingInstantFor(getTimeZoneOps(timeZoneId), {
2111
+ ...isoDateFields,
2112
+ ...isoTimeFields
2113
+ }, void 0 !== fields.offset ? parseOffsetNano(fields.offset) : void 0, offsetDisambig, epochDisambig), timeZoneId, calendarId);
2114
+ })(refineTimeZoneArg, queryNativeTimeZone, createNativeStandardOps(calendarId), calendarId, arg, options);
2115
+ }
2116
+ return ((s, options) => {
2117
+ const organized = parseDateTimeLike(requireString(s));
2118
+ if (!organized || !organized.timeZone) {
2119
+ throw new RangeError(failedParse(s));
2120
+ }
2121
+ const {offset: offset} = organized, offsetNano = offset ? parseOffsetNano(offset) : void 0, [, offsetDisambig, epochDisambig] = refineZonedFieldOptions(options);
2122
+ return finalizeZonedDateTime(organized, offsetNano, offsetDisambig, epochDisambig);
2123
+ })(arg, options);
2124
+ }
2125
+ function adaptDateMethods(methods) {
2126
+ return mapProps((method => slots => method(slotsToIso(slots))), methods);
2127
+ }
2128
+ function slotsToIso(slots) {
2129
+ return zonedEpochSlotsToIso(slots, queryNativeTimeZone);
2130
+ }
2131
+ function toInstantSlots(arg) {
2132
+ if (isObjectLike(arg)) {
2133
+ const slots = getSlots(arg);
2134
+ if (slots) {
2135
+ switch (slots.branding) {
2136
+ case InstantBranding:
2137
+ return slots;
2138
+
2139
+ case ZonedDateTimeBranding:
2140
+ return createInstantSlots(slots.epochNanoseconds);
2141
+ }
2142
+ }
2143
+ }
2144
+ return (s => {
2145
+ const organized = parseDateTimeLike(s = toStringViaPrimitive(s));
2146
+ if (!organized) {
2147
+ throw new RangeError(failedParse(s));
2148
+ }
2149
+ let offsetNano;
2150
+ if (organized.hasZ) {
2151
+ offsetNano = 0;
2152
+ } else {
2153
+ if (!organized.offset) {
2154
+ throw new RangeError(failedParse(s));
2155
+ }
2156
+ offsetNano = parseOffsetNano(organized.offset);
2157
+ }
2158
+ return organized.timeZone && parseOffsetNanoMaybe(organized.timeZone, 1), createInstantSlots(isoToEpochNanoWithOffset(checkIsoDateTimeFields(organized), offsetNano));
2159
+ })(arg);
2160
+ }
2161
+ function createFormatMethod(methodName) {
2162
+ return Object.defineProperties((function(...formattables) {
2163
+ const prepFormat = internalsMap.get(this), [format, ...rawFormattables] = prepFormat(methodName.includes("Range"), ...formattables);
2164
+ return format[methodName](...rawFormattables);
2165
+ }), createNameDescriptors(methodName));
2166
+ }
2167
+ function createProxiedMethod(methodName) {
2168
+ return Object.defineProperties((function(...args) {
2169
+ return internalsMap.get(this).rawFormat[methodName](...args);
2170
+ }), createNameDescriptors(methodName));
2171
+ }
2172
+ function createFormatPrepperForBranding(branding) {
2173
+ const config = classFormatConfigs[branding];
2174
+ if (!config) {
2175
+ throw new TypeError(invalidFormatType(branding));
2176
+ }
2177
+ return createFormatPrepper(config, memoize(createFormatForPrep), 1);
2178
+ }
2179
+ function getCurrentIsoDateTime(timeZoneOps) {
2180
+ const epochNano = getCurrentEpochNano();
2181
+ return epochNanoToIso(epochNano, timeZoneOps.getOffsetNanosecondsFor(epochNano));
2182
+ }
2183
+ function getCurrentEpochNano() {
2184
+ return numberToBigNano(Date.now(), nanoInMilli);
2185
+ }
2186
+ function getCurrentTimeZoneId() {
2187
+ return currentTimeZoneId || (currentTimeZoneId = (new RawDateTimeFormat).resolvedOptions().timeZone);
2188
+ }
2189
+ const expectedInteger = (entityName, num) => `Non-integer ${entityName}: ${num}`, expectedPositive = (entityName, num) => `Non-positive ${entityName}: ${num}`, expectedFinite = (entityName, num) => `Non-finite ${entityName}: ${num}`, forbiddenBigIntToNumber = entityName => `Cannot convert bigint to ${entityName}`, invalidBigInt = arg => `Invalid bigint: ${arg}`, forbiddenSymbolToString = "Cannot convert Symbol to string", invalidObject = "Invalid object", numberOutOfRange = (entityName, val, min, max, choices) => choices ? numberOutOfRange(entityName, choices[val], choices[min], choices[max]) : invalidEntity(entityName, val) + `; must be between ${min}-${max}`, invalidEntity = (fieldName, val) => `Invalid ${fieldName}: ${val}`, missingField = fieldName => `Missing ${fieldName}`, forbiddenField = fieldName => `Invalid field ${fieldName}`, duplicateFields = fieldName => `Duplicate field ${fieldName}`, noValidFields = validFields => "No valid fields: " + validFields.join(), invalidChoice = (fieldName, val, choiceMap) => invalidEntity(fieldName, val) + "; must be " + Object.keys(choiceMap).join(), forbiddenEraParts = "Forbidden era/eraYear", mismatchingEraParts = "Mismatching era/eraYear", mismatchingYearAndEra = "Mismatching year/eraYear", invalidEra = era => `Invalid era: ${era}`, missingYear = allowEra => "Missing year" + (allowEra ? "/era/eraYear" : ""), invalidMonthCode = monthCode => `Invalid monthCode: ${monthCode}`, mismatchingMonthAndCode = "Mismatching month/monthCode", missingMonth = "Missing month/monthCode", invalidLeapMonth = "Invalid leap month", invalidProtocolResults = "Invalid protocol results", invalidCalendar = calendarId => invalidEntity("Calendar", calendarId), mismatchingCalendars = "Mismatching Calendars", invalidTimeZone = calendarId => invalidEntity("TimeZone", calendarId), mismatchingTimeZones = "Mismatching TimeZones", forbiddenIcuTimeZone = "Forbidden ICU TimeZone", outOfBoundsOffset = "Out-of-bounds offset", outOfBoundsDstGap = "Out-of-bounds TimeZone gap", invalidOffsetForTimeZone = "Invalid TimeZone offset", ambigOffset = "Ambiguous offset", outOfBoundsDate = "Out-of-bounds date", outOfBoundsDuration = "Out-of-bounds duration", forbiddenDurationSigns = "Cannot mix duration signs", invalidLargeUnits = "Cannot use large units", flippedSmallestLargestUnit = "smallestUnit > largestUnit", failedParse = s => `Cannot parse: ${s}`, invalidSubstring = substring => `Invalid substring: ${substring}`, invalidFormatType = branding => `Cannot format ${branding}`, forbiddenFormatTimeZone = "Cannot specify TimeZone", mapPropNamesToIndex = bindArgs(mapPropNames, ((_propVal, i) => i)), mapPropNamesToConstant = bindArgs(mapPropNames, ((_propVal, _i, constant) => constant)), padNumber2 = bindArgs(padNumber, 2), unitNameMap = {
2190
+ nanosecond: 0,
2191
+ microsecond: 1,
2192
+ millisecond: 2,
2193
+ second: 3,
2194
+ minute: 4,
2195
+ hour: 5,
2196
+ day: 6,
2197
+ week: 7,
2198
+ month: 8,
2199
+ year: 9
2200
+ }, unitNamesAsc = Object.keys(unitNameMap), milliInDay = 864e5, milliInSec = 1e3, nanoInMicro = 1e3, nanoInMilli = 1e6, nanoInSec = 1e9, nanoInMinute = 6e10, nanoInHour = 36e11, nanoInUtcDay = 864e11, unitNanoMap = [ 1, nanoInMicro, nanoInMilli, nanoInSec, nanoInMinute, nanoInHour, nanoInUtcDay ], requireString = bindArgs(requireType, "string"), requireBoolean = bindArgs(requireType, "boolean"), requireNumber = bindArgs(requireType, "number"), durationFieldNamesAsc = unitNamesAsc.map((unitName => unitName + "s")), durationFieldNamesAlpha = sortStrings(durationFieldNamesAsc), durationTimeFieldNamesAsc = durationFieldNamesAsc.slice(0, 6), durationDateFieldNamesAsc = durationFieldNamesAsc.slice(6), durationCalendarFieldNamesAsc = durationDateFieldNamesAsc.slice(1), durationFieldIndexes = mapPropNamesToIndex(durationFieldNamesAsc), durationFieldDefaults = mapPropNamesToConstant(durationFieldNamesAsc, 0), durationTimeFieldDefaults = mapPropNamesToConstant(durationTimeFieldNamesAsc, 0), clearDurationFields = bindArgs(zeroOutProps, durationFieldNamesAsc), timeFieldNamesAsc = unitNamesAsc.slice(0, 6), timeFieldNamesAlpha = sortStrings(timeFieldNamesAsc), timeZoneFieldNames = [ "timeZone" ], timeAndOffsetFieldNames = [ ...timeFieldNamesAsc, "offset" ], timeAndZoneFieldNames = [ ...timeAndOffsetFieldNames, ...timeZoneFieldNames ], eraYearFieldNames = [ "era", "eraYear" ], allYearFieldNames = [ ...eraYearFieldNames, "year" ], yearFieldNames = [ "year" ], monthCodeFieldNames = [ "monthCode" ], monthFieldNames = [ "month", ...monthCodeFieldNames ], dayFieldNames = [ "day" ], yearMonthFieldNames = [ ...monthFieldNames, ...yearFieldNames ], yearMonthCodeFieldNames = [ ...monthCodeFieldNames, ...yearFieldNames ], dateFieldNamesAlpha = [ ...dayFieldNames, ...yearMonthFieldNames ], monthDayFieldNames = [ ...dayFieldNames, ...monthFieldNames ], monthCodeDayFieldNames = [ ...dayFieldNames, ...monthCodeFieldNames ], timeFieldDefaults = mapPropNamesToConstant(timeFieldNamesAsc, 0), isoCalendarId = "iso8601", gregoryCalendarId = "gregory", eraOriginsByCalendarId = {
2201
+ [gregoryCalendarId]: {
2202
+ "gregory-inverse": -1,
2203
+ gregory: 0
2204
+ },
2205
+ japanese: {
2206
+ "japanese-inverse": -1,
2207
+ japanese: 0,
2208
+ meiji: 1867,
2209
+ taisho: 1911,
2210
+ showa: 1925,
2211
+ heisei: 1988,
2212
+ reiwa: 2018
2213
+ },
2214
+ ethiopic: {
2215
+ ethioaa: 0,
2216
+ ethiopic: 5500
2217
+ },
2218
+ coptic: {
2219
+ "coptic-inverse": -1,
2220
+ coptic: 0
2221
+ },
2222
+ roc: {
2223
+ "roc-inverse": -1,
2224
+ roc: 0
2225
+ },
2226
+ buddhist: {
2227
+ be: 0
2228
+ },
2229
+ islamic: {
2230
+ ah: 0
2231
+ },
2232
+ indian: {
2233
+ saka: 0
2234
+ },
2235
+ persian: {
2236
+ ap: 0
2237
+ }
2238
+ }, eraRemapsByCalendarId = {
2239
+ [gregoryCalendarId]: {
2240
+ bce: "gregory-inverse",
2241
+ ce: "gregory"
2242
+ },
2243
+ japanese: {
2244
+ bce: "japanese-inverse",
2245
+ ce: "japanese"
2246
+ },
2247
+ ethiopic: {
2248
+ era0: "ethioaa",
2249
+ era1: "ethiopic"
2250
+ },
2251
+ coptic: {
2252
+ era0: "coptic-inverse",
2253
+ era1: "coptic"
2254
+ },
2255
+ roc: {
2256
+ broc: "roc-inverse",
2257
+ minguo: "roc"
2258
+ }
2259
+ }, leapMonthMetas = {
2260
+ chinese: 13,
2261
+ dangi: 13,
2262
+ hebrew: -6
2263
+ }, isoTimeFieldNamesAsc = [ "isoNanosecond", "isoMicrosecond", "isoMillisecond", "isoSecond", "isoMinute", "isoHour" ], isoDateFieldNamesAsc = [ "isoDay", "isoMonth", "isoYear" ], isoDateTimeFieldNamesAsc = [ ...isoTimeFieldNamesAsc, ...isoDateFieldNamesAsc ], isoDateFieldNamesAlpha = sortStrings(isoDateFieldNamesAsc), isoTimeFieldNamesAlpha = sortStrings(isoTimeFieldNamesAsc), isoDateTimeFieldNamesAlpha = sortStrings(isoDateTimeFieldNamesAsc), isoTimeFieldDefaults = mapPropNamesToConstant(isoTimeFieldNamesAlpha, 0), clearIsoFields = bindArgs(zeroOutProps, isoDateTimeFieldNamesAsc), maxMilli = 1e8 * milliInDay, epochNanoMax = [ 1e8, 0 ], epochNanoMin = [ -1e8, 0 ], isoYearMax = 275760, isoYearMin = -271821, RawDateTimeFormat = Intl.DateTimeFormat, isoEpochOriginYear = 1970, isoEpochFirstLeapYear = 1972, isoMonthsInYear = 12, primaryJapaneseEraMilli = isoArgsToEpochMilli(1868, 9, 8), queryJapaneseEraParts = memoize((isoFields => {
2264
+ const epochMilli = isoToEpochMilli(isoFields);
2265
+ if (epochMilli < primaryJapaneseEraMilli) {
2266
+ const {isoYear: isoYear} = isoFields;
2267
+ return isoYear < 1 ? [ "japanese-inverse", 1 - isoYear ] : [ "japanese", isoYear ];
2268
+ }
2269
+ const intlParts = hashIntlFormatParts(queryCalendarIntlFormat("japanese"), epochMilli), {era: era, eraYear: eraYear} = parseIntlYear(intlParts, "japanese");
2270
+ return [ era, eraYear ];
2271
+ }), WeakMap), utcTimeZoneId = "UTC", periodDur = 5184e3, minPossibleTransition = isoArgsToEpochSec(1847), maxPossibleTransition = isoArgsToEpochSec(new Date(0).getUTCFullYear() + 10), queryIntlCalendar = memoize((calendarId => {
2272
+ function epochMilliToIntlFields(epochMilli) {
2273
+ return ((intlParts, calendarIdBase) => ({
2274
+ ...parseIntlYear(intlParts, calendarIdBase),
2275
+ monthString: intlParts.month,
2276
+ day: parseInt(intlParts.day)
2277
+ }))(hashIntlFormatParts(intlFormat, epochMilli), calendarIdBase);
2278
+ }
2279
+ const intlFormat = queryCalendarIntlFormat(calendarId), calendarIdBase = computeCalendarIdBase(calendarId);
2280
+ return {
2281
+ id: calendarId,
2282
+ queryFields: createIntlFieldCache(epochMilliToIntlFields),
2283
+ queryYearData: createIntlYearDataCache(epochMilliToIntlFields)
2284
+ };
2285
+ })), queryCalendarIntlFormat = memoize((id => new RawDateTimeFormat("en-GB", {
2286
+ calendar: id,
2287
+ timeZone: utcTimeZoneId,
2288
+ era: "short",
2289
+ year: "numeric",
2290
+ month: "short",
2291
+ day: "numeric"
2292
+ }))), monthCodeRegExp = /^M(\d{2})(L?)$/, smallestUnitStr = "smallestUnit", roundingIncName = "roundingIncrement", subsecDigitsName = "fractionalSecondDigits", overflowMap = {
2293
+ constrain: 0,
2294
+ reject: 1
2295
+ }, overflowMapNames = Object.keys(overflowMap), directionMap = {
2296
+ previous: -1,
2297
+ next: 1
2298
+ }, refineSmallestUnit = bindArgs(refineUnitOption, smallestUnitStr), refineLargestUnit = bindArgs(refineUnitOption, "largestUnit"), refineTotalUnit = bindArgs(refineUnitOption, "unit"), refineOverflow = bindArgs(refineChoiceOption, "overflow", overflowMap), refineEpochDisambig = bindArgs(refineChoiceOption, "disambiguation", {
2299
+ compatible: 0,
2300
+ reject: 1,
2301
+ earlier: 2,
2302
+ later: 3
2303
+ }), refineOffsetDisambig = bindArgs(refineChoiceOption, "offset", {
2304
+ reject: 0,
2305
+ use: 1,
2306
+ prefer: 2,
2307
+ ignore: 3
2308
+ }), refineCalendarDisplay = bindArgs(refineChoiceOption, "calendarName", {
2309
+ auto: 0,
2310
+ never: 1,
2311
+ critical: 2,
2312
+ always: 3
2313
+ }), refineTimeZoneDisplay = bindArgs(refineChoiceOption, "timeZoneName", {
2314
+ auto: 0,
2315
+ never: 1,
2316
+ critical: 2
2317
+ }), refineOffsetDisplay = bindArgs(refineChoiceOption, "offset", {
2318
+ auto: 0,
2319
+ never: 1
2320
+ }), refineRoundingMode = bindArgs(refineChoiceOption, "roundingMode", {
2321
+ floor: 0,
2322
+ halfFloor: 1,
2323
+ ceil: 2,
2324
+ halfCeil: 3,
2325
+ trunc: 4,
2326
+ halfTrunc: 5,
2327
+ expand: 6,
2328
+ halfExpand: 7,
2329
+ halfEven: 8
2330
+ }), PlainYearMonthBranding = "PlainYearMonth", PlainMonthDayBranding = "PlainMonthDay", PlainDateBranding = "PlainDate", PlainDateTimeBranding = "PlainDateTime", PlainTimeBranding = "PlainTime", ZonedDateTimeBranding = "ZonedDateTime", InstantBranding = "Instant", DurationBranding = "Duration", roundingModeFuncs = [ Math.floor, num => hasHalf(num) ? Math.floor(num) : Math.round(num), Math.ceil, num => hasHalf(num) ? Math.ceil(num) : Math.round(num), Math.trunc, num => hasHalf(num) ? Math.trunc(num) || 0 : Math.round(num), num => num < 0 ? Math.floor(num) : Math.ceil(num), num => Math.sign(num) * Math.round(Math.abs(num)) || 0, num => hasHalf(num) ? (num = Math.trunc(num) || 0) + num % 2 : Math.round(num) ], trailingZerosRE = /0+$/, zonedEpochSlotsToIso = memoize(((slots, getTimeZoneOps) => {
2331
+ const {epochNanoseconds: epochNanoseconds} = slots, offsetNanoseconds = (getTimeZoneOps.getOffsetNanosecondsFor ? getTimeZoneOps : getTimeZoneOps(slots.timeZone)).getOffsetNanosecondsFor(epochNanoseconds), isoDateTimeFields = epochNanoToIso(epochNanoseconds, offsetNanoseconds);
2332
+ return {
2333
+ calendar: slots.calendar,
2334
+ ...isoDateTimeFields,
2335
+ offsetNanoseconds: offsetNanoseconds
2336
+ };
2337
+ }), WeakMap), maxCalendarUnit = 2 ** 32 - 1, queryNativeTimeZone = memoize((timeZoneId => {
2338
+ const essence = getTimeZoneEssence(timeZoneId);
2339
+ return "object" == typeof essence ? new IntlTimeZone(essence) : new FixedTimeZone(essence || 0);
2340
+ }));
2341
+ class FixedTimeZone {
2342
+ constructor(offsetNano) {
2343
+ this.offsetNano = offsetNano;
2344
+ }
2345
+ getOffsetNanosecondsFor() {
2346
+ return this.offsetNano;
2347
+ }
2348
+ getPossibleInstantsFor(isoDateTimeFields) {
2349
+ return (isoFields => {
2350
+ const bigNano = isoToEpochNano({
2351
+ ...isoFields,
2352
+ ...isoTimeFieldDefaults
2353
+ });
2354
+ if (!bigNano || Math.abs(bigNano[0]) > 1e8) {
2355
+ throw new RangeError(outOfBoundsDate);
2356
+ }
2357
+ })(isoDateTimeFields), [ isoToEpochNanoWithOffset(isoDateTimeFields, this.offsetNano) ];
2358
+ }
2359
+ getTransition() {}
2360
+ }
2361
+ class IntlTimeZone {
2362
+ constructor(format) {
2363
+ this.tzStore = (computeOffsetSec => {
2364
+ function getOffsetSec(epochSec) {
2365
+ const clampedEpochSec = clampNumber(epochSec, minTransition, maxTransition), [startEpochSec, endEpochSec] = computePeriod(clampedEpochSec), startOffsetSec = getSample(startEpochSec), endOffsetSec = getSample(endEpochSec);
2366
+ return startOffsetSec === endOffsetSec ? startOffsetSec : pinch(getSplit(startEpochSec, endEpochSec), startOffsetSec, endOffsetSec, epochSec);
2367
+ }
2368
+ function pinch(split, startOffsetSec, endOffsetSec, forEpochSec) {
2369
+ let offsetSec, splitDurSec;
2370
+ for (;(void 0 === forEpochSec || void 0 === (offsetSec = forEpochSec < split[0] ? startOffsetSec : forEpochSec >= split[1] ? endOffsetSec : void 0)) && (splitDurSec = split[1] - split[0]); ) {
2371
+ const middleEpochSec = split[0] + Math.floor(splitDurSec / 2);
2372
+ computeOffsetSec(middleEpochSec) === endOffsetSec ? split[1] = middleEpochSec : split[0] = middleEpochSec + 1;
2373
+ }
2374
+ return offsetSec;
2375
+ }
2376
+ const getSample = memoize(computeOffsetSec), getSplit = memoize(createSplitTuple);
2377
+ let minTransition = minPossibleTransition, maxTransition = maxPossibleTransition;
2378
+ return {
2379
+ getPossibleEpochSec(zonedEpochSec) {
2380
+ const wideOffsetSec0 = getOffsetSec(zonedEpochSec - 86400), wideOffsetSec1 = getOffsetSec(zonedEpochSec + 86400), wideUtcEpochSec0 = zonedEpochSec - wideOffsetSec0, wideUtcEpochSec1 = zonedEpochSec - wideOffsetSec1;
2381
+ if (wideOffsetSec0 === wideOffsetSec1) {
2382
+ return [ wideUtcEpochSec0 ];
2383
+ }
2384
+ const narrowOffsetSec0 = getOffsetSec(wideUtcEpochSec0);
2385
+ return narrowOffsetSec0 === getOffsetSec(wideUtcEpochSec1) ? [ zonedEpochSec - narrowOffsetSec0 ] : wideOffsetSec0 > wideOffsetSec1 ? [ wideUtcEpochSec0, wideUtcEpochSec1 ] : [];
2386
+ },
2387
+ getOffsetSec: getOffsetSec,
2388
+ getTransition(epochSec, direction) {
2389
+ const clampedEpochSec = clampNumber(epochSec, minTransition, maxTransition);
2390
+ let [startEpochSec, endEpochSec] = computePeriod(clampedEpochSec);
2391
+ const inc = periodDur * direction, inBounds = direction < 0 ? () => endEpochSec > minTransition || (minTransition = clampedEpochSec,
2392
+ 0) : () => startEpochSec < maxTransition || (maxTransition = clampedEpochSec, 0);
2393
+ for (;inBounds(); ) {
2394
+ const startOffsetSec = getSample(startEpochSec), endOffsetSec = getSample(endEpochSec);
2395
+ if (startOffsetSec !== endOffsetSec) {
2396
+ const split = getSplit(startEpochSec, endEpochSec);
2397
+ pinch(split, startOffsetSec, endOffsetSec);
2398
+ const transitionEpochSec = split[0];
2399
+ if ((compareNumbers(transitionEpochSec, epochSec) || 1) === direction) {
2400
+ return transitionEpochSec;
2401
+ }
2402
+ }
2403
+ startEpochSec += inc, endEpochSec += inc;
2404
+ }
2405
+ }
2406
+ };
2407
+ })((format => epochSec => {
2408
+ const intlParts = hashIntlFormatParts(format, epochSec * milliInSec);
2409
+ return isoArgsToEpochSec(parseIntlPartsYear(intlParts), parseInt(intlParts.month), parseInt(intlParts.day), parseInt(intlParts.hour), parseInt(intlParts.minute), parseInt(intlParts.second)) - epochSec;
2410
+ })(format));
2411
+ }
2412
+ getOffsetNanosecondsFor(epochNano) {
2413
+ return this.tzStore.getOffsetSec((epochNano => epochNanoToSecMod(epochNano)[0])(epochNano)) * nanoInSec;
2414
+ }
2415
+ getPossibleInstantsFor(isoFields) {
2416
+ const [zonedEpochSec, subsecNano] = [ isoArgsToEpochSec((isoDateTimeFields = isoFields).isoYear, isoDateTimeFields.isoMonth, isoDateTimeFields.isoDay, isoDateTimeFields.isoHour, isoDateTimeFields.isoMinute, isoDateTimeFields.isoSecond), isoDateTimeFields.isoMillisecond * nanoInMilli + isoDateTimeFields.isoMicrosecond * nanoInMicro + isoDateTimeFields.isoNanosecond ];
2417
+ var isoDateTimeFields;
2418
+ return this.tzStore.getPossibleEpochSec(zonedEpochSec).map((epochSec => checkEpochNanoInBounds(moveBigNano(numberToBigNano(epochSec, nanoInSec), subsecNano))));
2419
+ }
2420
+ getTransition(epochNano, direction) {
2421
+ const [epochSec, subsecNano] = epochNanoToSecMod(epochNano), resEpochSec = this.tzStore.getTransition(epochSec + (direction > 0 || subsecNano ? 1 : 0), direction);
2422
+ if (void 0 !== resEpochSec) {
2423
+ return numberToBigNano(resEpochSec, nanoInSec);
2424
+ }
2425
+ }
2426
+ }
2427
+ const timeRegExpStr = "(\\d{2})(?::?(\\d{2})(?::?(\\d{2})(?:[.,](\\d{1,9}))?)?)?", offsetRegExpStr = "([+-])" + timeRegExpStr, dateTimeRegExpStr = "(?:(?:([+-])(\\d{6}))|(\\d{4}))-?(\\d{2})-?(\\d{2})(?:[T ]" + timeRegExpStr + "(Z|" + offsetRegExpStr + ")?)?", yearMonthRegExp = createRegExp("(?:(?:([+-])(\\d{6}))|(\\d{4}))-?(\\d{2})((?:\\[(!?)([^\\]]*)\\]){0,9})"), monthDayRegExp = createRegExp("(?:--)?(\\d{2})-?(\\d{2})((?:\\[(!?)([^\\]]*)\\]){0,9})"), dateTimeRegExp = createRegExp(dateTimeRegExpStr + "((?:\\[(!?)([^\\]]*)\\]){0,9})"), timeRegExp = createRegExp("T?" + timeRegExpStr + "(?:" + offsetRegExpStr + ")?((?:\\[(!?)([^\\]]*)\\]){0,9})"), offsetRegExp = createRegExp(offsetRegExpStr), annotationRegExp = new RegExp("\\[(!?)([^\\]]*)\\]", "g"), durationRegExp = 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)?)?"), queryTimeZoneIntlFormat = memoize((id => new RawDateTimeFormat("en-GB", {
2428
+ timeZone: id,
2429
+ era: "short",
2430
+ year: "numeric",
2431
+ month: "numeric",
2432
+ day: "numeric",
2433
+ hour: "numeric",
2434
+ minute: "numeric",
2435
+ second: "numeric"
2436
+ }))), 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$/, badCharactersRegExp = /[^\w\/:+-]+/, nativeStandardBase = {
2437
+ dateAdd(isoDateFields, durationFields, options) {
2438
+ const overflow = refineOverflowOptions(options);
2439
+ let epochMilli, {years: years, months: months, weeks: weeks, days: days} = durationFields;
2440
+ if (days += durationFieldsToBigNano(durationFields, 5)[0], years || months) {
2441
+ epochMilli = ((moveOps, isoDateFields, years, months, overflow) => {
2442
+ let [year, month, day] = moveOps.dateParts(isoDateFields);
2443
+ if (years) {
2444
+ const [monthCodeNumber, isLeapMonth] = moveOps.monthCodeParts(year, month);
2445
+ year += years, month = monthCodeNumberToMonth(monthCodeNumber, isLeapMonth, moveOps.leapMonth(year)),
2446
+ month = clampEntity("month", month, 1, moveOps.monthsInYearPart(year), overflow);
2447
+ }
2448
+ return months && ([year, month] = moveOps.monthAdd(year, month, months)), day = clampEntity("day", day, 1, moveOps.daysInMonthParts(year, month), overflow),
2449
+ moveOps.epochMilli(year, month, day);
2450
+ })(this, isoDateFields, years, months, overflow);
2451
+ } else {
2452
+ if (!weeks && !days) {
2453
+ return isoDateFields;
2454
+ }
2455
+ epochMilli = isoToEpochMilli(isoDateFields);
2456
+ }
2457
+ if (void 0 === epochMilli) {
2458
+ throw new RangeError(outOfBoundsDate);
2459
+ }
2460
+ return epochMilli += (7 * weeks + days) * milliInDay, checkIsoDateInBounds(epochMilliToIso(epochMilli));
2461
+ },
2462
+ dateUntil(startIsoFields, endIsoFields, largestUnit) {
2463
+ if (largestUnit <= 7) {
2464
+ let weeks = 0, days = diffDays({
2465
+ ...startIsoFields,
2466
+ ...isoTimeFieldDefaults
2467
+ }, {
2468
+ ...endIsoFields,
2469
+ ...isoTimeFieldDefaults
2470
+ });
2471
+ return 7 === largestUnit && ([weeks, days] = divModTrunc(days, 7)), {
2472
+ ...durationFieldDefaults,
2473
+ weeks: weeks,
2474
+ days: days
2475
+ };
2476
+ }
2477
+ const yearMonthDayStart = this.dateParts(startIsoFields), yearMonthDayEnd = this.dateParts(endIsoFields);
2478
+ let [years, months, days] = ((calendarNative, year0, month0, day0, year1, month1, day1) => {
2479
+ let yearDiff = year1 - year0, monthDiff = month1 - month0, dayDiff = day1 - day0;
2480
+ if (yearDiff || monthDiff) {
2481
+ const sign = Math.sign(yearDiff || monthDiff);
2482
+ let daysInMonth1 = calendarNative.daysInMonthParts(year1, month1), dayCorrect = 0;
2483
+ if (Math.sign(dayDiff) === -sign) {
2484
+ const origDaysInMonth1 = daysInMonth1;
2485
+ [year1, month1] = calendarNative.monthAdd(year1, month1, -sign), yearDiff = year1 - year0,
2486
+ monthDiff = month1 - month0, daysInMonth1 = calendarNative.daysInMonthParts(year1, month1),
2487
+ dayCorrect = sign < 0 ? -origDaysInMonth1 : daysInMonth1;
2488
+ }
2489
+ if (dayDiff = day1 - Math.min(day0, daysInMonth1) + dayCorrect, yearDiff) {
2490
+ const [monthCodeNumber0, isLeapYear0] = calendarNative.monthCodeParts(year0, month0), [monthCodeNumber1, isLeapYear1] = calendarNative.monthCodeParts(year1, month1);
2491
+ if (monthDiff = monthCodeNumber1 - monthCodeNumber0 || Number(isLeapYear1) - Number(isLeapYear0),
2492
+ Math.sign(monthDiff) === -sign) {
2493
+ const monthCorrect = sign < 0 && -calendarNative.monthsInYearPart(year1);
2494
+ yearDiff = (year1 -= sign) - year0, monthDiff = month1 - monthCodeNumberToMonth(monthCodeNumber0, isLeapYear0, calendarNative.leapMonth(year1)) + (monthCorrect || calendarNative.monthsInYearPart(year1));
2495
+ }
2496
+ }
2497
+ }
2498
+ return [ yearDiff, monthDiff, dayDiff ];
2499
+ })(this, ...yearMonthDayStart, ...yearMonthDayEnd);
2500
+ return 8 === largestUnit && (months += this.monthsInYearSpan(years, yearMonthDayStart[0]),
2501
+ years = 0), {
2502
+ ...durationFieldDefaults,
2503
+ years: years,
2504
+ months: months,
2505
+ days: days
2506
+ };
2507
+ },
2508
+ dateFromFields(fields, options) {
2509
+ const overflow = refineOverflowOptions(options), year = refineYear(this, fields), month = refineMonth(this, fields, year, overflow), day = refineDay(this, fields, month, year, overflow);
2510
+ return createPlainDateSlots(checkIsoDateInBounds(this.isoFields(year, month, day)), this.id || isoCalendarId);
2511
+ },
2512
+ yearMonthFromFields(fields, options) {
2513
+ const overflow = refineOverflowOptions(options), year = refineYear(this, fields), month = refineMonth(this, fields, year, overflow);
2514
+ return createPlainYearMonthSlots(checkIsoYearMonthInBounds(this.isoFields(year, month, 1)), this.id || isoCalendarId);
2515
+ },
2516
+ monthDayFromFields(fields, options) {
2517
+ const overflow = refineOverflowOptions(options);
2518
+ let day, monthCodeNumber, isLeapMonth, yearMaybe = void 0 !== fields.eraYear || void 0 !== fields.year ? refineYear(this, fields) : void 0;
2519
+ const isIso = !this.id;
2520
+ if (void 0 === yearMaybe && isIso && (yearMaybe = isoEpochFirstLeapYear), void 0 !== yearMaybe) {
2521
+ const month = refineMonth(this, fields, yearMaybe, overflow);
2522
+ day = refineDay(this, fields, month, yearMaybe, overflow);
2523
+ const leapMonth = this.leapMonth(yearMaybe);
2524
+ monthCodeNumber = monthToMonthCodeNumber(month, leapMonth), isLeapMonth = month === leapMonth;
2525
+ } else {
2526
+ if (void 0 === fields.monthCode) {
2527
+ throw new TypeError(missingMonth);
2528
+ }
2529
+ if ([monthCodeNumber, isLeapMonth] = parseMonthCode(fields.monthCode), this.id && this.id !== gregoryCalendarId && "japanese" !== this.id) {
2530
+ if (this.id && "coptic" === computeCalendarIdBase(this.id) && 0 === overflow) {
2531
+ const maxLengthOfMonthCodeInAnyYear = isLeapMonth || 13 !== monthCodeNumber ? 30 : 6;
2532
+ day = fields.day, day = clampNumber(day, 1, maxLengthOfMonthCodeInAnyYear);
2533
+ } else if (this.id && "chinese" === computeCalendarIdBase(this.id) && 0 === overflow) {
2534
+ const maxLengthOfMonthCodeInAnyYear = !isLeapMonth || 1 !== monthCodeNumber && 9 !== monthCodeNumber && 10 !== monthCodeNumber && 11 !== monthCodeNumber && 12 !== monthCodeNumber ? 30 : 29;
2535
+ day = fields.day, day = clampNumber(day, 1, maxLengthOfMonthCodeInAnyYear);
2536
+ } else {
2537
+ day = fields.day;
2538
+ }
2539
+ } else {
2540
+ day = refineDay(this, fields, refineMonth(this, fields, isoEpochFirstLeapYear, overflow), isoEpochFirstLeapYear, overflow);
2541
+ }
2542
+ }
2543
+ const res = this.yearMonthForMonthDay(monthCodeNumber, isLeapMonth, day);
2544
+ if (!res) {
2545
+ throw new RangeError("Cannot guess year");
2546
+ }
2547
+ const [finalYear, finalMonth] = res;
2548
+ return createPlainMonthDaySlots(checkIsoDateInBounds(this.isoFields(finalYear, finalMonth, day)), this.id || isoCalendarId);
2549
+ },
2550
+ fields(fieldNames) {
2551
+ return getCalendarEraOrigins(this) && fieldNames.includes("year") ? [ ...fieldNames, ...eraYearFieldNames ] : fieldNames;
2552
+ },
2553
+ mergeFields(baseFields, additionalFields) {
2554
+ const merged = Object.assign(Object.create(null), baseFields);
2555
+ return spliceFields(merged, additionalFields, monthFieldNames), getCalendarEraOrigins(this) && (spliceFields(merged, additionalFields, allYearFieldNames),
2556
+ "japanese" === this.id && spliceFields(merged, additionalFields, monthDayFieldNames, eraYearFieldNames)),
2557
+ merged;
2558
+ },
2559
+ inLeapYear(isoFields) {
2560
+ const [year] = this.dateParts(isoFields);
2561
+ return this.inLeapYearPart(year);
2562
+ },
2563
+ monthsInYear(isoFields) {
2564
+ const [year] = this.dateParts(isoFields);
2565
+ return this.monthsInYearPart(year);
2566
+ },
2567
+ daysInMonth(isoFields) {
2568
+ const [year, month] = this.dateParts(isoFields);
2569
+ return this.daysInMonthParts(year, month);
2570
+ },
2571
+ daysInYear(isoFields) {
2572
+ const [year] = this.dateParts(isoFields);
2573
+ return this.daysInYearPart(year);
2574
+ },
2575
+ dayOfYear: computeNativeDayOfYear,
2576
+ era(isoFields) {
2577
+ return this.eraParts(isoFields)[0];
2578
+ },
2579
+ eraYear(isoFields) {
2580
+ return this.eraParts(isoFields)[1];
2581
+ },
2582
+ monthCode(isoFields) {
2583
+ const [year, month] = this.dateParts(isoFields), [monthCodeNumber, isLeapMonth] = this.monthCodeParts(year, month);
2584
+ return formatMonthCode(monthCodeNumber, isLeapMonth);
2585
+ },
2586
+ dayOfWeek: computeIsoDayOfWeek,
2587
+ daysInWeek() {
2588
+ return 7;
2589
+ }
2590
+ }, isoPartOps = {
2591
+ dateParts: computeIsoDateParts,
2592
+ eraParts: computeIsoEraParts,
2593
+ monthCodeParts: computeIsoMonthCodeParts
2594
+ }, isoWeekOps = {
2595
+ dayOfYear: computeNativeDayOfYear,
2596
+ dateParts: computeIsoDateParts,
2597
+ epochMilli: isoArgsToEpochMilli,
2598
+ weekOfYear: computeNativeWeekOfYear,
2599
+ yearOfWeek: computeNativeYearOfWeek,
2600
+ weekParts(isoDateFields) {
2601
+ function computeWeekShift(yDayOfWeek) {
2602
+ return (7 - yDayOfWeek < minDaysInWeek ? 7 : 0) - yDayOfWeek;
2603
+ }
2604
+ function computeWeeksInYear(delta) {
2605
+ const daysInYear = computeIsoDaysInYear(yearOfWeek + delta), sign = delta || 1, y1WeekShift = computeWeekShift(modFloor(y0DayOfWeek + daysInYear * sign, 7));
2606
+ return weeksInYear = (daysInYear + (y1WeekShift - y0WeekShift) * sign) / 7;
2607
+ }
2608
+ const minDaysInWeek = this.id ? 1 : 4, isoDayOfWeek = computeIsoDayOfWeek(isoDateFields), isoDayOfYear = this.dayOfYear(isoDateFields), dayOfWeek = modFloor(isoDayOfWeek - 1, 7), dayOfYear = isoDayOfYear - 1, y0DayOfWeek = modFloor(dayOfWeek - dayOfYear, 7), y0WeekShift = computeWeekShift(y0DayOfWeek);
2609
+ let weeksInYear, weekOfYear = Math.floor((dayOfYear - y0WeekShift) / 7) + 1, yearOfWeek = isoDateFields.isoYear;
2610
+ return weekOfYear ? weekOfYear > computeWeeksInYear(0) && (weekOfYear = 1, yearOfWeek++) : (weekOfYear = computeWeeksInYear(-1),
2611
+ yearOfWeek--), [ weekOfYear, yearOfWeek, weeksInYear ];
2612
+ }
2613
+ }, isoStandardOps = {
2614
+ ...nativeStandardBase,
2615
+ ...isoWeekOps,
2616
+ dateParts: computeIsoDateParts,
2617
+ eraParts: computeIsoEraParts,
2618
+ monthCodeParts: computeIsoMonthCodeParts,
2619
+ yearMonthForMonthDay(monthCodeNumber, isLeapMonth) {
2620
+ if (!isLeapMonth) {
2621
+ return [ isoEpochFirstLeapYear, monthCodeNumber ];
2622
+ }
2623
+ },
2624
+ inLeapYearPart: computeIsoInLeapYear,
2625
+ leapMonth() {},
2626
+ monthsInYearPart: computeIsoMonthsInYear,
2627
+ monthsInYearSpan: yearDelta => yearDelta * isoMonthsInYear,
2628
+ daysInMonthParts: computeIsoDaysInMonth,
2629
+ daysInYearPart: computeIsoDaysInYear,
2630
+ isoFields(year, month, day) {
2631
+ return {
2632
+ isoYear: year,
2633
+ isoMonth: month,
2634
+ isoDay: day
2635
+ };
2636
+ },
2637
+ epochMilli: isoArgsToEpochMilli,
2638
+ monthAdd(year, month, monthDelta) {
2639
+ return year += divTrunc(monthDelta, isoMonthsInYear), (month += modTrunc(monthDelta, isoMonthsInYear)) < 1 ? (year--,
2640
+ month += isoMonthsInYear) : month > isoMonthsInYear && (year++, month -= isoMonthsInYear),
2641
+ [ year, month ];
2642
+ },
2643
+ year(isoFields) {
2644
+ return isoFields.isoYear;
2645
+ },
2646
+ month(isoFields) {
2647
+ return isoFields.isoMonth;
2648
+ },
2649
+ day: isoFields => isoFields.isoDay
2650
+ }, intlPartOps = {
2651
+ dateParts: computeIntlDateParts,
2652
+ eraParts: computeIntlEraParts,
2653
+ monthCodeParts: computeIntlMonthCodeParts
2654
+ }, intlWeekOps = {
2655
+ dayOfYear: computeNativeDayOfYear,
2656
+ dateParts: computeIntlDateParts,
2657
+ epochMilli: computeIntlEpochMilli,
2658
+ weekOfYear: computeNativeWeekOfYear,
2659
+ yearOfWeek: computeNativeYearOfWeek,
2660
+ weekParts() {
2661
+ return [];
2662
+ }
2663
+ }, intlStandardOps = {
2664
+ ...nativeStandardBase,
2665
+ ...intlWeekOps,
2666
+ dateParts: computeIntlDateParts,
2667
+ eraParts: computeIntlEraParts,
2668
+ monthCodeParts: computeIntlMonthCodeParts,
2669
+ yearMonthForMonthDay(monthCodeNumber, isLeapMonth, day) {
2670
+ const startIsoYear = this.id && "chinese" === computeCalendarIdBase(this.id) ? ((monthCodeNumber, isLeapMonth, day) => {
2671
+ if (isLeapMonth) {
2672
+ switch (monthCodeNumber) {
2673
+ case 1:
2674
+ return 1651;
2675
+
2676
+ case 2:
2677
+ return day < 30 ? 1947 : 1765;
2678
+
2679
+ case 3:
2680
+ return day < 30 ? 1966 : 1955;
2681
+
2682
+ case 4:
2683
+ return day < 30 ? 1963 : 1944;
2684
+
2685
+ case 5:
2686
+ return day < 30 ? 1971 : 1952;
2687
+
2688
+ case 6:
2689
+ return day < 30 ? 1960 : 1941;
2690
+
2691
+ case 7:
2692
+ return day < 30 ? 1968 : 1938;
2693
+
2694
+ case 8:
2695
+ return day < 30 ? 1957 : 1718;
2696
+
2697
+ case 9:
2698
+ return 1832;
2699
+
2700
+ case 10:
2701
+ return 1870;
2702
+
2703
+ case 11:
2704
+ return 1814;
2705
+
2706
+ case 12:
2707
+ return 1890;
2708
+ }
2709
+ }
2710
+ return 1972;
2711
+ })(monthCodeNumber, isLeapMonth, day) : isoEpochFirstLeapYear;
2712
+ let [startYear, startMonth, startDay] = computeIntlDateParts.call(this, {
2713
+ isoYear: startIsoYear,
2714
+ isoMonth: isoMonthsInYear,
2715
+ isoDay: 31
2716
+ });
2717
+ const startYearLeapMonth = computeIntlLeapMonth.call(this, startYear), startMonthIsLeap = startMonth === startYearLeapMonth;
2718
+ 1 === (compareNumbers(monthCodeNumber, monthToMonthCodeNumber(startMonth, startYearLeapMonth)) || compareNumbers(Number(isLeapMonth), Number(startMonthIsLeap)) || compareNumbers(day, startDay)) && startYear--;
2719
+ for (let yearMove = 0; yearMove < 100; yearMove++) {
2720
+ const tryYear = startYear - yearMove, tryLeapMonth = computeIntlLeapMonth.call(this, tryYear), tryMonth = monthCodeNumberToMonth(monthCodeNumber, isLeapMonth, tryLeapMonth);
2721
+ if (isLeapMonth === (tryMonth === tryLeapMonth) && day <= computeIntlDaysInMonth.call(this, tryYear, tryMonth)) {
2722
+ return [ tryYear, tryMonth ];
2723
+ }
2724
+ }
2725
+ },
2726
+ inLeapYearPart(year) {
2727
+ const days = computeIntlDaysInYear.call(this, year);
2728
+ return days > computeIntlDaysInYear.call(this, year - 1) && days > computeIntlDaysInYear.call(this, year + 1);
2729
+ },
2730
+ leapMonth: computeIntlLeapMonth,
2731
+ monthsInYearPart: computeIntlMonthsInYear,
2732
+ monthsInYearSpan(yearDelta, yearStart) {
2733
+ const yearEnd = yearStart + yearDelta, yearSign = Math.sign(yearDelta), yearCorrection = yearSign < 0 ? -1 : 0;
2734
+ let months = 0;
2735
+ for (let year = yearStart; year !== yearEnd; year += yearSign) {
2736
+ months += computeIntlMonthsInYear.call(this, year + yearCorrection);
2737
+ }
2738
+ return months;
2739
+ },
2740
+ daysInMonthParts: computeIntlDaysInMonth,
2741
+ daysInYearPart: computeIntlDaysInYear,
2742
+ isoFields(year, month, day) {
2743
+ return epochMilliToIso(computeIntlEpochMilli.call(this, year, month, day));
2744
+ },
2745
+ epochMilli: computeIntlEpochMilli,
2746
+ monthAdd(year, month, monthDelta) {
2747
+ if (monthDelta) {
2748
+ if (month += monthDelta, !Number.isSafeInteger(month)) {
2749
+ throw new RangeError(outOfBoundsDate);
2750
+ }
2751
+ if (monthDelta < 0) {
2752
+ for (;month < 1; ) {
2753
+ month += computeIntlMonthsInYear.call(this, --year);
2754
+ }
2755
+ } else {
2756
+ let monthsInYear;
2757
+ for (;month > (monthsInYear = computeIntlMonthsInYear.call(this, year)); ) {
2758
+ month -= monthsInYear, year++;
2759
+ }
2760
+ }
2761
+ }
2762
+ return [ year, month ];
2763
+ },
2764
+ year(isoFields) {
2765
+ return this.queryFields(isoFields).year;
2766
+ },
2767
+ month(isoFields) {
2768
+ const {year: year, monthString: monthString} = this.queryFields(isoFields), {monthStringToIndex: monthStringToIndex} = this.queryYearData(year);
2769
+ return monthStringToIndex[monthString] + 1;
2770
+ },
2771
+ day(isoFields) {
2772
+ return this.queryFields(isoFields).day;
2773
+ }
2774
+ }, createNativePartOps = createNativeOpsCreator(isoPartOps, intlPartOps), createNativeStandardOps = createNativeOpsCreator(isoStandardOps, intlStandardOps), builtinRefiners = {
2775
+ ...{
2776
+ era: toStringViaPrimitive,
2777
+ eraYear: toInteger,
2778
+ year: toInteger,
2779
+ month: toPositiveInteger,
2780
+ monthCode(monthCode) {
2781
+ const s = toStringViaPrimitive(monthCode);
2782
+ return parseMonthCode(s), s;
2783
+ },
2784
+ day: toPositiveInteger
2785
+ },
2786
+ ...mapPropNamesToConstant(timeFieldNamesAsc, toInteger),
2787
+ ...mapPropNamesToConstant(durationFieldNamesAsc, toStrictInteger),
2788
+ offset(offsetString) {
2789
+ const s = toStringViaPrimitive(offsetString);
2790
+ return parseOffsetNano(s), s;
2791
+ }
2792
+ }, timeFieldsToIso = bindArgs(remapProps, timeFieldNamesAsc, isoTimeFieldNamesAsc), isoTimeFieldsToCal = bindArgs(remapProps, isoTimeFieldNamesAsc, timeFieldNamesAsc), slotsMap = new WeakMap, getSlots = slotsMap.get.bind(slotsMap), setSlots = slotsMap.set.bind(slotsMap), yearMonthOnlyRefiners = {
2793
+ era(input) {
2794
+ if (void 0 !== input) {
2795
+ return requireString(input);
2796
+ }
2797
+ },
2798
+ eraYear: requireIntegerOrUndefined,
2799
+ year: requireInteger,
2800
+ month: requirePositiveInteger,
2801
+ daysInMonth: requirePositiveInteger,
2802
+ daysInYear: requirePositiveInteger,
2803
+ inLeapYear: requireBoolean,
2804
+ monthsInYear: requirePositiveInteger
2805
+ }, monthOnlyRefiners = {
2806
+ monthCode: requireString
2807
+ }, dayOnlyRefiners = {
2808
+ day: requirePositiveInteger
2809
+ }, dateOnlyRefiners = {
2810
+ dayOfWeek: requirePositiveInteger,
2811
+ dayOfYear: requirePositiveInteger,
2812
+ weekOfYear(input) {
2813
+ if (void 0 !== input) {
2814
+ return requirePositiveInteger(input);
2815
+ }
2816
+ },
2817
+ yearOfWeek: requireIntegerOrUndefined,
2818
+ daysInWeek: requirePositiveInteger
2819
+ }, dateGetters = createCalendarGetters({
2820
+ ...yearMonthOnlyRefiners,
2821
+ ...monthOnlyRefiners,
2822
+ ...dayOnlyRefiners,
2823
+ ...dateOnlyRefiners
2824
+ }), yearMonthGetters = createCalendarGetters({
2825
+ ...yearMonthOnlyRefiners,
2826
+ ...monthOnlyRefiners
2827
+ }), monthDayGetters = createCalendarGetters({
2828
+ ...monthOnlyRefiners,
2829
+ ...dayOnlyRefiners
2830
+ }), calendarIdGetters = {
2831
+ calendarId: slots => slots.calendar
2832
+ }, durationGetters = mapPropNames((propName => slots => slots[propName]), durationFieldNamesAsc.concat("sign")), timeGetters = mapPropNames(((_name, i) => slots => slots[isoTimeFieldNamesAsc[i]]), timeFieldNamesAsc), epochGetters = {
2833
+ epochMilliseconds: getEpochMilli,
2834
+ epochNanoseconds(slots) {
2835
+ return ((bigNano, divisorNano = 1) => {
2836
+ const [days, timeNano] = bigNano, whole = Math.floor(timeNano / divisorNano), wholeInDay = nanoInUtcDay / divisorNano;
2837
+ return BigInt(days) * BigInt(wholeInDay) + BigInt(whole);
2838
+ })(slots.epochNanoseconds);
2839
+ }
2840
+ }, [Duration, createDuration, getDurationSlots] = createSlotClass(DurationBranding, ((years = 0, months = 0, weeks = 0, days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0, microseconds = 0, nanoseconds = 0) => createDurationSlots(checkDurationUnits(mapProps(toStrictInteger, zipProps(durationFieldNamesAsc, [ years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds ]))))), {
2841
+ ...durationGetters,
2842
+ blank(slots) {
2843
+ return !slots.sign;
2844
+ }
2845
+ }, {
2846
+ with: (slots, mod) => createDuration(((slots, fields) => {
2847
+ return createDurationSlots((initialFields = slots, modFields = fields, checkDurationUnits({
2848
+ ...initialFields,
2849
+ ...refineFields(modFields, durationFieldNamesAlpha)
2850
+ })));
2851
+ var initialFields, modFields;
2852
+ })(slots, mod)),
2853
+ negated: slots => createDuration(negateDuration(slots)),
2854
+ abs: slots => createDuration((slots => -1 === slots.sign ? negateDuration(slots) : slots)(slots)),
2855
+ add: (slots, otherArg, options) => createDuration(addDurations(refinePublicRelativeTo, createNativeStandardOps, queryNativeTimeZone, 0, slots, toDurationSlots(otherArg), options)),
2856
+ subtract: (slots, otherArg, options) => createDuration(addDurations(refinePublicRelativeTo, createNativeStandardOps, queryNativeTimeZone, 1, slots, toDurationSlots(otherArg), options)),
2857
+ round: (slots, options) => createDuration(((refineRelativeTo, getCalendarOps, getTimeZoneOps, slots, options) => {
2858
+ const durationLargestUnit = getMaxDurationUnit(slots), [largestUnit, smallestUnit, roundingInc, roundingMode, relativeToSlots] = ((options, defaultLargestUnit, refineRelativeTo) => {
2859
+ options = normalizeOptionsOrString(options, smallestUnitStr);
2860
+ let largestUnit = refineLargestUnit(options);
2861
+ const relativeToInternals = refineRelativeTo(options.relativeTo);
2862
+ let roundingInc = parseRoundingIncInteger(options);
2863
+ const roundingMode = refineRoundingMode(options, 7);
2864
+ let smallestUnit = refineSmallestUnit(options);
2865
+ if (void 0 === largestUnit && void 0 === smallestUnit) {
2866
+ throw new RangeError("Required smallestUnit or largestUnit");
2867
+ }
2868
+ if (null == smallestUnit && (smallestUnit = 0), null == largestUnit && (largestUnit = Math.max(smallestUnit, defaultLargestUnit)),
2869
+ checkLargestSmallestUnit(largestUnit, smallestUnit), roundingInc = refineRoundingInc(roundingInc, smallestUnit, 1),
2870
+ roundingInc > 1 && smallestUnit > 5 && largestUnit !== smallestUnit) {
2871
+ throw new RangeError("For calendar units with roundingIncrement > 1, use largestUnit = smallestUnit");
2872
+ }
2873
+ return [ largestUnit, smallestUnit, roundingInc, roundingMode, relativeToInternals ];
2874
+ })(options, durationLargestUnit, refineRelativeTo), maxUnit = Math.max(durationLargestUnit, largestUnit);
2875
+ if (!relativeToSlots && maxUnit <= 6) {
2876
+ return createDurationSlots(checkDurationUnits(((durationFields, largestUnit, smallestUnit, roundingInc, roundingMode) => {
2877
+ const roundedBigNano = roundBigNano(durationFieldsToBigNano(durationFields), smallestUnit, roundingInc, roundingMode);
2878
+ return {
2879
+ ...durationFieldDefaults,
2880
+ ...nanoToDurationDayTimeFields(roundedBigNano, largestUnit)
2881
+ };
2882
+ })(slots, largestUnit, smallestUnit, roundingInc, roundingMode)));
2883
+ }
2884
+ if (!isZonedEpochSlots(relativeToSlots) && !slots.sign) {
2885
+ return slots;
2886
+ }
2887
+ if (!relativeToSlots) {
2888
+ throw new RangeError("Missing relativeTo");
2889
+ }
2890
+ const [marker, calendarOps, timeZoneOps] = createMarkerSystem(getCalendarOps, getTimeZoneOps, relativeToSlots), markerToEpochNano = createMarkerToEpochNano(timeZoneOps), moveMarker = createMoveMarker(timeZoneOps), diffMarkers = createDiffMarkers(timeZoneOps), endMarker = moveMarker(calendarOps, marker, slots);
2891
+ isZonedEpochSlots(relativeToSlots) || (checkIsoDateTimeInBounds(marker), checkIsoDateTimeInBounds(endMarker));
2892
+ let balancedDuration = diffMarkers(calendarOps, marker, endMarker, largestUnit);
2893
+ const origSign = slots.sign, balancedSign = computeDurationSign(balancedDuration);
2894
+ if (origSign && balancedSign && origSign !== balancedSign) {
2895
+ throw new RangeError(invalidProtocolResults);
2896
+ }
2897
+ return balancedDuration = roundRelativeDuration(balancedDuration, markerToEpochNano(endMarker), largestUnit, smallestUnit, roundingInc, roundingMode, calendarOps, marker, markerToEpochNano, moveMarker),
2898
+ createDurationSlots(balancedDuration);
2899
+ })(refinePublicRelativeTo, createNativeStandardOps, queryNativeTimeZone, slots, options)),
2900
+ total: (slots, options) => ((refineRelativeTo, getCalendarOps, getTimeZoneOps, slots, options) => {
2901
+ const maxDurationUnit = getMaxDurationUnit(slots), [totalUnit, relativeToSlots] = ((options, refineRelativeTo) => {
2902
+ const relativeToInternals = refineRelativeTo((options = normalizeOptionsOrString(options, "unit")).relativeTo);
2903
+ let totalUnit = refineTotalUnit(options);
2904
+ return totalUnit = requirePropDefined("unit", totalUnit), [ totalUnit, relativeToInternals ];
2905
+ })(options, refineRelativeTo), maxUnit = Math.max(totalUnit, maxDurationUnit);
2906
+ if (!relativeToSlots && isUniformUnit(maxUnit, relativeToSlots)) {
2907
+ return totalDayTimeDuration(slots, totalUnit);
2908
+ }
2909
+ if (!relativeToSlots) {
2910
+ throw new RangeError("Missing relativeTo");
2911
+ }
2912
+ if (!slots.sign) {
2913
+ return 0;
2914
+ }
2915
+ const [marker, calendarOps, timeZoneOps] = createMarkerSystem(getCalendarOps, getTimeZoneOps, relativeToSlots), markerToEpochNano = createMarkerToEpochNano(timeZoneOps), moveMarker = createMoveMarker(timeZoneOps), diffMarkers = createDiffMarkers(timeZoneOps), endMarker = moveMarker(calendarOps, marker, slots);
2916
+ isZonedEpochSlots(relativeToSlots) || (checkIsoDateTimeInBounds(marker), checkIsoDateTimeInBounds(endMarker));
2917
+ const balancedDuration = diffMarkers(calendarOps, marker, endMarker, totalUnit);
2918
+ return isUniformUnit(totalUnit, relativeToSlots) ? totalDayTimeDuration(balancedDuration, totalUnit) : ((durationFields, endEpochNano, totalUnit, calendarOps, marker, markerToEpochNano, moveMarker) => {
2919
+ const sign = computeDurationSign(durationFields), [epochNano0, epochNano1] = clampRelativeDuration(calendarOps, clearDurationFields(totalUnit, durationFields), totalUnit, sign, marker, markerToEpochNano, moveMarker), frac = computeEpochNanoFrac(endEpochNano, epochNano0, epochNano1);
2920
+ return durationFields[durationFieldNamesAsc[totalUnit]] + frac * sign;
2921
+ })(balancedDuration, markerToEpochNano(endMarker), totalUnit, calendarOps, marker, markerToEpochNano, moveMarker);
2922
+ })(refinePublicRelativeTo, createNativeStandardOps, queryNativeTimeZone, slots, options),
2923
+ toLocaleString(slots, locales, options) {
2924
+ return Intl.DurationFormat ? new Intl.DurationFormat(locales, options).format(this) : formatDurationIso(slots);
2925
+ },
2926
+ toString: formatDurationIso,
2927
+ toJSON: slots => formatDurationIso(slots),
2928
+ valueOf: neverValueOf
2929
+ }, {
2930
+ from: arg => createDuration(toDurationSlots(arg)),
2931
+ compare: (durationArg0, durationArg1, options) => ((refineRelativeTo, getCalendarOps, getTimeZoneOps, durationSlots0, durationSlots1, options) => {
2932
+ const relativeToSlots = refineRelativeTo(normalizeOptions(options).relativeTo), maxUnit = Math.max(getMaxDurationUnit(durationSlots0), getMaxDurationUnit(durationSlots1));
2933
+ if (allPropsEqual(durationFieldNamesAsc, durationSlots0, durationSlots1)) {
2934
+ return 0;
2935
+ }
2936
+ if (isUniformUnit(maxUnit, relativeToSlots)) {
2937
+ return compareBigNanos(durationFieldsToBigNano(durationSlots0), durationFieldsToBigNano(durationSlots1));
2938
+ }
2939
+ if (!relativeToSlots) {
2940
+ throw new RangeError("Missing relativeTo");
2941
+ }
2942
+ const [marker, calendarOps, timeZoneOps] = createMarkerSystem(getCalendarOps, getTimeZoneOps, relativeToSlots), markerToEpochNano = createMarkerToEpochNano(timeZoneOps), moveMarker = createMoveMarker(timeZoneOps);
2943
+ return compareBigNanos(markerToEpochNano(moveMarker(calendarOps, marker, durationSlots0)), markerToEpochNano(moveMarker(calendarOps, marker, durationSlots1)));
2944
+ })(refinePublicRelativeTo, createNativeStandardOps, queryNativeTimeZone, toDurationSlots(durationArg0), toDurationSlots(durationArg1), options)
2945
+ }), timeZoneNameStrs = [ "timeZoneName" ], monthDayFallbacks = {
2946
+ month: "numeric",
2947
+ day: "numeric"
2948
+ }, yearMonthFallbacks = {
2949
+ year: "numeric",
2950
+ month: "numeric"
2951
+ }, dateFallbacks = {
2952
+ ...yearMonthFallbacks,
2953
+ day: "numeric"
2954
+ }, timeFallbacks = {
2955
+ hour: "numeric",
2956
+ minute: "numeric",
2957
+ second: "numeric"
2958
+ }, dateTimeFallbacks = {
2959
+ ...dateFallbacks,
2960
+ ...timeFallbacks
2961
+ }, zonedFallbacks = {
2962
+ ...dateTimeFallbacks,
2963
+ timeZoneName: "short"
2964
+ }, yearMonthFallbackNames = Object.keys(yearMonthFallbacks), monthDayFallbackNames = Object.keys(monthDayFallbacks), dateFallbackNames = Object.keys(dateFallbacks), timeFallbackNames = Object.keys(timeFallbacks), dateStyleNames = [ "dateStyle" ], yearMonthStandardNames = [ ...yearMonthFallbackNames, ...dateStyleNames ], monthDayStandardNames = [ ...monthDayFallbackNames, ...dateStyleNames ], dateStandardNames = [ ...dateFallbackNames, ...dateStyleNames, "weekday" ], timeStandardNames = [ ...timeFallbackNames, "dayPeriod", "timeStyle", "fractionalSecondDigits" ], dateTimeStandardNames = [ ...dateStandardNames, ...timeStandardNames ], dateExclusions = [ ...timeZoneNameStrs, ...timeStandardNames ], timeExclusions = [ ...timeZoneNameStrs, ...dateStandardNames ], yearMonthExclusions = [ ...timeZoneNameStrs, "day", "weekday", ...timeStandardNames ], monthDayExclusions = [ ...timeZoneNameStrs, "year", "weekday", ...timeStandardNames ], transformInstantOptions = createOptionsTransformer(dateTimeStandardNames, dateTimeFallbacks), transformZonedOptions = createOptionsTransformer(dateTimeStandardNames, zonedFallbacks), transformDateTimeOptions = createOptionsTransformer(dateTimeStandardNames, dateTimeFallbacks, timeZoneNameStrs), transformDateOptions = createOptionsTransformer(dateStandardNames, dateFallbacks, dateExclusions), transformTimeOptions = createOptionsTransformer(timeStandardNames, timeFallbacks, timeExclusions), transformYearMonthOptions = createOptionsTransformer(yearMonthStandardNames, yearMonthFallbacks, yearMonthExclusions), transformMonthDayOptions = createOptionsTransformer(monthDayStandardNames, monthDayFallbacks, monthDayExclusions), emptyOptions = {}, nonBuggyIsoResolve = new RawDateTimeFormat(void 0, {
2965
+ calendar: isoCalendarId
2966
+ }).resolvedOptions().calendar === isoCalendarId, instantConfig = [ transformInstantOptions, getEpochMilli ], zonedConfig = [ transformZonedOptions, getEpochMilli, 0, (slots0, slots1) => {
2967
+ const timeZoneId = slots0.timeZone;
2968
+ if (slots1 && slots1.timeZone !== timeZoneId) {
2969
+ throw new RangeError(mismatchingTimeZones);
2970
+ }
2971
+ return timeZoneId;
2972
+ } ], dateTimeConfig = [ transformDateTimeOptions, isoToEpochMilli ], dateConfig = [ transformDateOptions, isoToEpochMilli ], timeConfig = [ transformTimeOptions, isoFields => isoTimeFieldsToNano(isoFields) / nanoInMilli ], yearMonthConfig = [ transformYearMonthOptions, isoToEpochMilli, nonBuggyIsoResolve ], monthDayConfig = [ transformMonthDayOptions, isoToEpochMilli, nonBuggyIsoResolve ], classFormatConfigs = {
2973
+ Instant: instantConfig,
2974
+ PlainDateTime: dateTimeConfig,
2975
+ PlainDate: dateConfig,
2976
+ PlainTime: timeConfig,
2977
+ PlainYearMonth: yearMonthConfig,
2978
+ PlainMonthDay: monthDayConfig
2979
+ }, prepInstantFormat = createFormatPrepper(instantConfig), prepZonedDateTimeFormat = createFormatPrepper(zonedConfig), prepPlainDateTimeFormat = createFormatPrepper(dateTimeConfig), prepPlainDateFormat = createFormatPrepper(dateConfig), prepPlainTimeFormat = createFormatPrepper(timeConfig), prepPlainYearMonthFormat = createFormatPrepper(yearMonthConfig), prepPlainMonthDayFormat = createFormatPrepper(monthDayConfig), [PlainTime, createPlainTime] = createSlotClass(PlainTimeBranding, ((isoHour = 0, isoMinute = 0, isoSecond = 0, isoMillisecond = 0, isoMicrosecond = 0, isoNanosecond = 0) => createPlainTimeSlots(constrainIsoTimeFields(mapProps(toInteger, zipProps(isoTimeFieldNamesAsc, [ isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond ])), 1))), timeGetters, {
2980
+ with(_slots, mod, options) {
2981
+ return createPlainTime(((initialFields, mod, options) => createPlainTimeSlots(((initialFields, modFields, options) => refineTimeBag({
2982
+ ...pluckProps(timeFieldNamesAlpha, initialFields),
2983
+ ...refineFields(modFields, timeFieldNamesAlpha)
2984
+ }, refineOverflowOptions(options)))(initialFields, mod, options)))(this, rejectInvalidBag(mod), options));
2985
+ },
2986
+ add: (slots, durationArg) => createPlainTime(movePlainTime(0, slots, toDurationSlots(durationArg))),
2987
+ subtract: (slots, durationArg) => createPlainTime(movePlainTime(1, slots, toDurationSlots(durationArg))),
2988
+ until: (slots, otherArg, options) => createDuration(diffPlainTimes(0, slots, toPlainTimeSlots(otherArg), options)),
2989
+ since: (slots, otherArg, options) => createDuration(diffPlainTimes(1, slots, toPlainTimeSlots(otherArg), options)),
2990
+ round: (slots, options) => createPlainTime(((slots, options) => {
2991
+ const [a, b, c] = refineRoundingOptions(options, 5);
2992
+ var roundingMode;
2993
+ return createPlainTimeSlots((roundingMode = c, roundTimeToNano(slots, computeNanoInc(a, b), roundingMode)[0]));
2994
+ })(slots, options)),
2995
+ equals(slots, other) {
2996
+ return !compareIsoTimeFields(slots, toPlainTimeSlots(other));
2997
+ },
2998
+ toLocaleString(slots, locales, options) {
2999
+ const [format, epochMilli] = prepPlainTimeFormat(locales, options, slots);
3000
+ return format.format(epochMilli);
3001
+ },
3002
+ toString: formatPlainTimeIso,
3003
+ toJSON: slots => formatPlainTimeIso(slots),
3004
+ valueOf: neverValueOf
3005
+ }, {
3006
+ from: (arg, options) => createPlainTime(toPlainTimeSlots(arg, options)),
3007
+ compare: (arg0, arg1) => compareIsoTimeFields(toPlainTimeSlots(arg0), toPlainTimeSlots(arg1))
3008
+ }), [PlainDateTime, createPlainDateTime] = createSlotClass(PlainDateTimeBranding, bindArgs(((refineCalendarArg, isoYear, isoMonth, isoDay, isoHour = 0, isoMinute = 0, isoSecond = 0, isoMillisecond = 0, isoMicrosecond = 0, isoNanosecond = 0, calendarArg = isoCalendarId) => createPlainDateTimeSlots(checkIsoDateTimeInBounds(checkIsoDateTimeFields(mapProps(toInteger, zipProps(isoDateTimeFieldNamesAsc, [ isoYear, isoMonth, isoDay, isoHour, isoMinute, isoSecond, isoMillisecond, isoMicrosecond, isoNanosecond ])))), refineCalendarArg(calendarArg))), refineCalendarId), {
3009
+ ...calendarIdGetters,
3010
+ ...dateGetters,
3011
+ ...timeGetters
3012
+ }, {
3013
+ with: (slots, mod, options) => createPlainDateTime(((getCalendarOps, plainDateTimeSlots, modFields, options) => {
3014
+ const calendarOps = getCalendarOps(plainDateTimeSlots.calendar), validFieldNames = [ ...calendarOps.fields(dateFieldNamesAlpha), ...timeFieldNamesAsc ].sort(), origFields = {
3015
+ ...computeDateEssentials(slots = plainDateTimeSlots),
3016
+ hour: slots.isoHour,
3017
+ minute: slots.isoMinute,
3018
+ second: slots.isoSecond,
3019
+ millisecond: slots.isoMillisecond,
3020
+ microsecond: slots.isoMicrosecond,
3021
+ nanosecond: slots.isoNanosecond
3022
+ };
3023
+ var slots;
3024
+ const partialFields = refineFields(modFields, validFieldNames), overflow = refineOverflowOptions(options), mergedCalendarFields = calendarOps.mergeFields(origFields, partialFields), mergedAllFields = {
3025
+ ...origFields,
3026
+ ...partialFields
3027
+ };
3028
+ return createPlainDateTimeSlots(checkIsoDateTimeInBounds({
3029
+ ...calendarOps.dateFromFields(mergedCalendarFields, fabricateOverflowOptions(overflow)),
3030
+ ...constrainIsoTimeFields(timeFieldsToIso(mergedAllFields), overflow)
3031
+ }));
3032
+ })(createNativeStandardOps, slots, rejectInvalidBag(mod), options)),
3033
+ withCalendar: (slots, calendarArg) => createPlainDateTime(slotsWithCalendarId(slots, refineCalendarArg(calendarArg))),
3034
+ withPlainTime: (slots, plainTimeArg) => createPlainDateTime(((plainDateTimeSlots, plainTimeSlots = isoTimeFieldDefaults) => createPlainDateTimeSlots(checkIsoDateTimeInBounds({
3035
+ ...plainDateTimeSlots,
3036
+ ...plainTimeSlots
3037
+ })))(slots, optionalToPlainTimeFields(plainTimeArg))),
3038
+ add: (slots, durationArg, options) => createPlainDateTime(movePlainDateTime(createNativeStandardOps, 0, slots, toDurationSlots(durationArg), options)),
3039
+ subtract: (slots, durationArg, options) => createPlainDateTime(movePlainDateTime(createNativeStandardOps, 1, slots, toDurationSlots(durationArg), options)),
3040
+ until: (slots, otherArg, options) => createDuration(diffPlainDateTimes(createNativeStandardOps, 0, slots, toPlainDateTimeSlots(otherArg), options)),
3041
+ since: (slots, otherArg, options) => createDuration(diffPlainDateTimes(createNativeStandardOps, 1, slots, toPlainDateTimeSlots(otherArg), options)),
3042
+ round: (slots, options) => createPlainDateTime(((slots, options) => createPlainDateTimeSlots(roundDateTime(slots, ...refineRoundingOptions(options)), slots.calendar))(slots, options)),
3043
+ equals(slots, otherArg) {
3044
+ return !compareIsoDateTimeFields(plainDateTimeSlots0 = slots, plainDateTimeSlots1 = toPlainDateTimeSlots(otherArg)) && plainDateTimeSlots0.calendar === plainDateTimeSlots1.calendar;
3045
+ var plainDateTimeSlots0, plainDateTimeSlots1;
3046
+ },
3047
+ toZonedDateTime: (slots, timeZoneArg, options) => createZonedDateTime(((getTimeZoneOps, plainDateTimeSlots, timeZoneId, options) => {
3048
+ const epochNano = ((getTimeZoneOps, timeZoneId, isoFields, options) => {
3049
+ const epochDisambig = (options => refineEpochDisambig(normalizeOptions(options)))(options);
3050
+ return getSingleInstantFor(getTimeZoneOps(timeZoneId), isoFields, epochDisambig);
3051
+ })(getTimeZoneOps, timeZoneId, plainDateTimeSlots, options);
3052
+ return createZonedDateTimeSlots(checkEpochNanoInBounds(epochNano), timeZoneId, plainDateTimeSlots.calendar);
3053
+ })(queryNativeTimeZone, slots, refineTimeZoneArg(timeZoneArg), options)),
3054
+ toPlainDate: slots => createPlainDate(createPlainDateSlots(slots)),
3055
+ toPlainTime: slots => createPlainTime(createPlainTimeSlots(slots)),
3056
+ toLocaleString(slots, locales, options) {
3057
+ const [format, epochMilli] = prepPlainDateTimeFormat(locales, options, slots);
3058
+ return format.format(epochMilli);
3059
+ },
3060
+ toString: formatPlainDateTimeIso,
3061
+ toJSON: slots => formatPlainDateTimeIso(slots),
3062
+ valueOf: neverValueOf
3063
+ }, {
3064
+ from: (arg, options) => createPlainDateTime(toPlainDateTimeSlots(arg, options)),
3065
+ compare: (arg0, arg1) => compareIsoDateTimeFields(toPlainDateTimeSlots(arg0), toPlainDateTimeSlots(arg1))
3066
+ }), [PlainMonthDay, createPlainMonthDay, getPlainMonthDaySlots] = createSlotClass(PlainMonthDayBranding, bindArgs(((refineCalendarArg, isoMonth, isoDay, calendarArg = isoCalendarId, referenceIsoYear = isoEpochFirstLeapYear) => {
3067
+ const isoMonthInt = toInteger(isoMonth), isoDayInt = toInteger(isoDay), calendarId = refineCalendarArg(calendarArg);
3068
+ return createPlainMonthDaySlots(checkIsoDateInBounds(checkIsoDateFields({
3069
+ isoYear: toInteger(referenceIsoYear),
3070
+ isoMonth: isoMonthInt,
3071
+ isoDay: isoDayInt
3072
+ })), calendarId);
3073
+ }), refineCalendarId), {
3074
+ ...calendarIdGetters,
3075
+ ...monthDayGetters
3076
+ }, {
3077
+ with: (slots, mod, options) => createPlainMonthDay(((getCalendarOps, plainMonthDaySlots, modFields, options) => {
3078
+ const calendarOps = getCalendarOps(plainMonthDaySlots.calendar), validFieldNames = calendarOps.fields(dateFieldNamesAlpha).sort(), origFields = (slots => {
3079
+ const calendarOps = createNativePartOps(slots.calendar), [year, month, day] = calendarOps.dateParts(slots), [monthCodeNumber, isLeapMonth] = calendarOps.monthCodeParts(year, month);
3080
+ return {
3081
+ monthCode: formatMonthCode(monthCodeNumber, isLeapMonth),
3082
+ day: day
3083
+ };
3084
+ })(plainMonthDaySlots), partialFields = refineFields(modFields, validFieldNames), mergedFields = calendarOps.mergeFields(origFields, partialFields);
3085
+ return calendarOps.monthDayFromFields(mergedFields, options);
3086
+ })(createNativeStandardOps, slots, rejectInvalidBag(mod), options)),
3087
+ equals(slots, otherArg) {
3088
+ return !compareIsoDateFields(plainMonthDaySlots0 = slots, plainMonthDaySlots1 = toPlainMonthDaySlots(otherArg)) && plainMonthDaySlots0.calendar === plainMonthDaySlots1.calendar;
3089
+ var plainMonthDaySlots0, plainMonthDaySlots1;
3090
+ },
3091
+ toPlainDate(slots, bag) {
3092
+ return createPlainDate(((getCalendarOps, plainMonthDaySlots, plainMonthDayFields, bag) => ((calendarOps, input, bag) => convertToIso(calendarOps, input, monthCodeDayFieldNames, requireObjectLike(bag), yearFieldNames))(getCalendarOps(plainMonthDaySlots.calendar), plainMonthDayFields, bag))(createNativeStandardOps, slots, this, bag));
3093
+ },
3094
+ toLocaleString(slots, locales, options) {
3095
+ const [format, epochMilli] = prepPlainMonthDayFormat(locales, options, slots);
3096
+ return format.format(epochMilli);
3097
+ },
3098
+ toString: formatPlainMonthDayIso,
3099
+ toJSON: slots => formatPlainMonthDayIso(slots),
3100
+ valueOf: neverValueOf
3101
+ }, {
3102
+ from: (arg, options) => createPlainMonthDay(toPlainMonthDaySlots(arg, options))
3103
+ }), [PlainYearMonth, createPlainYearMonth, getPlainYearMonthSlots] = createSlotClass(PlainYearMonthBranding, bindArgs(((refineCalendarArg, isoYear, isoMonth, calendarArg = isoCalendarId, referenceIsoDay = 1) => {
3104
+ const isoYearInt = toInteger(isoYear), isoMonthInt = toInteger(isoMonth), calendarId = refineCalendarArg(calendarArg);
3105
+ return createPlainYearMonthSlots(checkIsoYearMonthInBounds(checkIsoDateFields({
3106
+ isoYear: isoYearInt,
3107
+ isoMonth: isoMonthInt,
3108
+ isoDay: toInteger(referenceIsoDay)
3109
+ })), calendarId);
3110
+ }), refineCalendarId), {
3111
+ ...calendarIdGetters,
3112
+ ...yearMonthGetters
3113
+ }, {
3114
+ with: (slots, mod, options) => createPlainYearMonth(((getCalendarOps, plainYearMonthSlots, modFields, options) => {
3115
+ const calendarOps = getCalendarOps(plainYearMonthSlots.calendar), validFieldNames = calendarOps.fields(yearMonthFieldNames).sort(), origFields = (slots => {
3116
+ const calendarOps = createNativePartOps(slots.calendar), [year, month] = calendarOps.dateParts(slots), [monthCodeNumber, isLeapMonth] = calendarOps.monthCodeParts(year, month);
3117
+ return {
3118
+ year: year,
3119
+ monthCode: formatMonthCode(monthCodeNumber, isLeapMonth)
3120
+ };
3121
+ })(plainYearMonthSlots), partialFields = refineFields(modFields, validFieldNames), mergedFields = calendarOps.mergeFields(origFields, partialFields);
3122
+ return calendarOps.yearMonthFromFields(mergedFields, options);
3123
+ })(createNativeStandardOps, slots, rejectInvalidBag(mod), options)),
3124
+ add: (slots, durationArg, options) => createPlainYearMonth(movePlainYearMonth(createNativeStandardOps, 0, slots, toDurationSlots(durationArg), options)),
3125
+ subtract: (slots, durationArg, options) => createPlainYearMonth(movePlainYearMonth(createNativeStandardOps, 1, slots, toDurationSlots(durationArg), options)),
3126
+ until: (slots, otherArg, options) => createDuration(diffPlainYearMonth(createNativeStandardOps, 0, slots, toPlainYearMonthSlots(otherArg), options)),
3127
+ since: (slots, otherArg, options) => createDuration(diffPlainYearMonth(createNativeStandardOps, 1, slots, toPlainYearMonthSlots(otherArg), options)),
3128
+ equals(slots, otherArg) {
3129
+ return !compareIsoDateFields(plainYearMonthSlots0 = slots, plainYearMonthSlots1 = toPlainYearMonthSlots(otherArg)) && plainYearMonthSlots0.calendar === plainYearMonthSlots1.calendar;
3130
+ var plainYearMonthSlots0, plainYearMonthSlots1;
3131
+ },
3132
+ toPlainDate(slots, bag) {
3133
+ return createPlainDate(((getCalendarOps, plainYearMonthSlots, plainYearMonthFields, bag) => ((calendarOps, input, bag) => convertToIso(calendarOps, input, yearMonthCodeFieldNames, requireObjectLike(bag), dayFieldNames))(getCalendarOps(plainYearMonthSlots.calendar), plainYearMonthFields, bag))(createNativeStandardOps, slots, this, bag));
3134
+ },
3135
+ toLocaleString(slots, locales, options) {
3136
+ const [format, epochMilli] = prepPlainYearMonthFormat(locales, options, slots);
3137
+ return format.format(epochMilli);
3138
+ },
3139
+ toString: formatPlainYearMonthIso,
3140
+ toJSON: slots => formatPlainYearMonthIso(slots),
3141
+ valueOf: neverValueOf
3142
+ }, {
3143
+ from: (arg, options) => createPlainYearMonth(toPlainYearMonthSlots(arg, options)),
3144
+ compare: (arg0, arg1) => compareIsoDateFields(toPlainYearMonthSlots(arg0), toPlainYearMonthSlots(arg1))
3145
+ }), [PlainDate, createPlainDate, getPlainDateSlots] = createSlotClass(PlainDateBranding, bindArgs(((refineCalendarArg, isoYear, isoMonth, isoDay, calendarArg = isoCalendarId) => createPlainDateSlots(checkIsoDateInBounds(checkIsoDateFields(mapProps(toInteger, {
3146
+ isoYear: isoYear,
3147
+ isoMonth: isoMonth,
3148
+ isoDay: isoDay
3149
+ }))), refineCalendarArg(calendarArg))), refineCalendarId), {
3150
+ ...calendarIdGetters,
3151
+ ...dateGetters
3152
+ }, {
3153
+ with: (slots, mod, options) => createPlainDate(((getCalendarOps, plainDateSlots, modFields, options) => {
3154
+ const calendarOps = getCalendarOps(plainDateSlots.calendar), validFieldNames = calendarOps.fields(dateFieldNamesAlpha).sort(), origFields = computeDateEssentials(plainDateSlots), partialFields = refineFields(modFields, validFieldNames), mergedFields = calendarOps.mergeFields(origFields, partialFields);
3155
+ return calendarOps.dateFromFields(mergedFields, options);
3156
+ })(createNativeStandardOps, slots, rejectInvalidBag(mod), options)),
3157
+ withCalendar: (slots, calendarArg) => createPlainDate(slotsWithCalendarId(slots, refineCalendarArg(calendarArg))),
3158
+ add: (slots, durationArg, options) => createPlainDate(movePlainDate(createNativeStandardOps, 0, slots, toDurationSlots(durationArg), options)),
3159
+ subtract: (slots, durationArg, options) => createPlainDate(movePlainDate(createNativeStandardOps, 1, slots, toDurationSlots(durationArg), options)),
3160
+ until: (slots, otherArg, options) => createDuration(diffPlainDates(createNativeStandardOps, 0, slots, toPlainDateSlots(otherArg), options)),
3161
+ since: (slots, otherArg, options) => createDuration(diffPlainDates(createNativeStandardOps, 1, slots, toPlainDateSlots(otherArg), options)),
3162
+ equals(slots, otherArg) {
3163
+ return !compareIsoDateFields(plainDateSlots0 = slots, plainDateSlots1 = toPlainDateSlots(otherArg)) && plainDateSlots0.calendar === plainDateSlots1.calendar;
3164
+ var plainDateSlots0, plainDateSlots1;
3165
+ },
3166
+ toZonedDateTime(slots, options) {
3167
+ const optionsObj = isObjectLike(options) ? options : {
3168
+ timeZone: options
3169
+ };
3170
+ return createZonedDateTime(((refineTimeZoneString, refinePlainTimeArg, getTimeZoneOps, plainDateSlots, options) => {
3171
+ const timeZoneId = refineTimeZoneString(options.timeZone), plainTimeArg = options.plainTime, isoTimeFields = void 0 !== plainTimeArg ? refinePlainTimeArg(plainTimeArg) : void 0, timeZoneOps = getTimeZoneOps(timeZoneId);
3172
+ let epochNano;
3173
+ return epochNano = isoTimeFields ? getSingleInstantFor(timeZoneOps, {
3174
+ ...plainDateSlots,
3175
+ ...isoTimeFields
3176
+ }) : getStartOfDayInstantFor(timeZoneOps, {
3177
+ ...plainDateSlots,
3178
+ ...isoTimeFieldDefaults
3179
+ }), createZonedDateTimeSlots(epochNano, timeZoneId, plainDateSlots.calendar);
3180
+ })(refineTimeZoneArg, toPlainTimeSlots, queryNativeTimeZone, slots, optionsObj));
3181
+ },
3182
+ toPlainDateTime: (slots, plainTimeArg) => createPlainDateTime(((plainDateSlots, plainTimeFields = isoTimeFieldDefaults) => createPlainDateTimeSlots(checkIsoDateTimeInBounds({
3183
+ ...plainDateSlots,
3184
+ ...plainTimeFields
3185
+ })))(slots, optionalToPlainTimeFields(plainTimeArg))),
3186
+ toPlainYearMonth(slots) {
3187
+ return createPlainYearMonth((this, ((calendarOps, input) => {
3188
+ const fields = refineCalendarFields(calendarOps, input, yearMonthCodeFieldNames);
3189
+ return calendarOps.yearMonthFromFields(fields, void 0);
3190
+ })(createNativeStandardOps(slots.calendar), this)));
3191
+ },
3192
+ toPlainMonthDay(slots) {
3193
+ return createPlainMonthDay((this, ((calendarOps, input) => {
3194
+ const fields = refineCalendarFields(calendarOps, input, monthCodeDayFieldNames);
3195
+ return calendarOps.monthDayFromFields(fields);
3196
+ })(createNativeStandardOps(slots.calendar), this)));
3197
+ },
3198
+ toLocaleString(slots, locales, options) {
3199
+ const [format, epochMilli] = prepPlainDateFormat(locales, options, slots);
3200
+ return format.format(epochMilli);
3201
+ },
3202
+ toString: formatPlainDateIso,
3203
+ toJSON: slots => formatPlainDateIso(slots),
3204
+ valueOf: neverValueOf
3205
+ }, {
3206
+ from: (arg, options) => createPlainDate(toPlainDateSlots(arg, options)),
3207
+ compare: (arg0, arg1) => compareIsoDateFields(toPlainDateSlots(arg0), toPlainDateSlots(arg1))
3208
+ }), [ZonedDateTime, createZonedDateTime] = createSlotClass(ZonedDateTimeBranding, bindArgs(((refineCalendarArg, refineTimeZoneArg, epochNano, timeZoneArg, calendarArg = isoCalendarId) => createZonedDateTimeSlots(checkEpochNanoInBounds(bigIntToBigNano(toBigInt(epochNano))), refineTimeZoneArg(timeZoneArg), refineCalendarArg(calendarArg))), refineCalendarId, (id => resolveTimeZoneId(requireString(id)))), {
3209
+ ...epochGetters,
3210
+ ...calendarIdGetters,
3211
+ ...adaptDateMethods(dateGetters),
3212
+ ...adaptDateMethods(timeGetters),
3213
+ offset: slots => formatOffsetNano(slotsToIso(slots).offsetNanoseconds),
3214
+ offsetNanoseconds: slots => slotsToIso(slots).offsetNanoseconds,
3215
+ timeZoneId: slots => slots.timeZone,
3216
+ hoursInDay: slots => ((getTimeZoneOps, slots) => {
3217
+ const timeZoneOps = getTimeZoneOps(slots.timeZone), isoFields = zonedEpochSlotsToIso(slots, timeZoneOps), [isoFields0, isoFields1] = computeDayInterval(isoFields), hoursExact = bigNanoToNumber(diffBigNanos(getStartOfDayInstantFor(timeZoneOps, isoFields0), getStartOfDayInstantFor(timeZoneOps, isoFields1)), nanoInHour, 1);
3218
+ if (hoursExact <= 0) {
3219
+ throw new RangeError(invalidProtocolResults);
3220
+ }
3221
+ return hoursExact;
3222
+ })(queryNativeTimeZone, slots)
3223
+ }, {
3224
+ with: (slots, mod, options) => createZonedDateTime(((getCalendarOps, getTimeZoneOps, zonedDateTimeSlots, modFields, options) => {
3225
+ const {calendar: calendar, timeZone: timeZone} = zonedDateTimeSlots, calendarOps = getCalendarOps(calendar), timeZoneOps = getTimeZoneOps(timeZone), validFieldNames = [ ...calendarOps.fields(dateFieldNamesAlpha), ...timeAndOffsetFieldNames ].sort(), origFields = (slots => {
3226
+ const isoFields = zonedEpochSlotsToIso(slots, queryNativeTimeZone), offsetString = formatOffsetNano(isoFields.offsetNanoseconds), calendarOps = createNativePartOps(slots.calendar), [year, month, day] = calendarOps.dateParts(isoFields), [monthCodeNumber, isLeapMonth] = calendarOps.monthCodeParts(year, month), monthCode = formatMonthCode(monthCodeNumber, isLeapMonth);
3227
+ return {
3228
+ ...isoTimeFieldsToCal(isoFields),
3229
+ year: year,
3230
+ monthCode: monthCode,
3231
+ day: day,
3232
+ offset: offsetString
3233
+ };
3234
+ })(zonedDateTimeSlots), partialFields = refineFields(modFields, validFieldNames), mergedCalendarFields = calendarOps.mergeFields(origFields, partialFields), mergedAllFields = {
3235
+ ...origFields,
3236
+ ...partialFields
3237
+ }, [overflow, offsetDisambig, epochDisambig] = refineZonedFieldOptions(options, 2);
3238
+ return createZonedDateTimeSlots(getMatchingInstantFor(timeZoneOps, {
3239
+ ...calendarOps.dateFromFields(mergedCalendarFields, fabricateOverflowOptions(overflow)),
3240
+ ...constrainIsoTimeFields(timeFieldsToIso(mergedAllFields), overflow)
3241
+ }, parseOffsetNano(mergedAllFields.offset), offsetDisambig, epochDisambig), timeZone, calendar);
3242
+ })(createNativeStandardOps, queryNativeTimeZone, slots, rejectInvalidBag(mod), options)),
3243
+ withCalendar: (slots, calendarArg) => createZonedDateTime(slotsWithCalendarId(slots, refineCalendarArg(calendarArg))),
3244
+ withTimeZone: (slots, timeZoneArg) => createZonedDateTime(((slots, timeZoneId) => ({
3245
+ ...slots,
3246
+ timeZone: timeZoneId
3247
+ }))(slots, refineTimeZoneArg(timeZoneArg))),
3248
+ withPlainTime: (slots, plainTimeArg) => createZonedDateTime(((getTimeZoneOps, zonedDateTimeSlots, plainTimeSlots) => {
3249
+ const timeZoneId = zonedDateTimeSlots.timeZone, timeZoneOps = getTimeZoneOps(timeZoneId), isoFields = {
3250
+ ...zonedEpochSlotsToIso(zonedDateTimeSlots, timeZoneOps),
3251
+ ...plainTimeSlots || isoTimeFieldDefaults
3252
+ };
3253
+ let epochNano;
3254
+ return epochNano = plainTimeSlots ? getMatchingInstantFor(timeZoneOps, isoFields, isoFields.offsetNanoseconds, 2) : getStartOfDayInstantFor(timeZoneOps, isoFields),
3255
+ createZonedDateTimeSlots(epochNano, timeZoneId, zonedDateTimeSlots.calendar);
3256
+ })(queryNativeTimeZone, slots, optionalToPlainTimeFields(plainTimeArg))),
3257
+ add: (slots, durationArg, options) => createZonedDateTime(moveZonedDateTime(createNativeStandardOps, queryNativeTimeZone, 0, slots, toDurationSlots(durationArg), options)),
3258
+ subtract: (slots, durationArg, options) => createZonedDateTime(moveZonedDateTime(createNativeStandardOps, queryNativeTimeZone, 1, slots, toDurationSlots(durationArg), options)),
3259
+ until: (slots, otherArg, options) => createDuration(createDurationSlots(diffZonedDateTimes(createNativeStandardOps, queryNativeTimeZone, 0, slots, toZonedDateTimeSlots(otherArg), options))),
3260
+ since: (slots, otherArg, options) => createDuration(createDurationSlots(diffZonedDateTimes(createNativeStandardOps, queryNativeTimeZone, 1, slots, toZonedDateTimeSlots(otherArg), options))),
3261
+ round: (slots, options) => createZonedDateTime(((getTimeZoneOps, slots, options) => {
3262
+ let {epochNanoseconds: epochNanoseconds, timeZone: timeZone, calendar: calendar} = slots;
3263
+ const [smallestUnit, roundingInc, roundingMode] = refineRoundingOptions(options);
3264
+ if (0 === smallestUnit && 1 === roundingInc) {
3265
+ return slots;
3266
+ }
3267
+ const timeZoneOps = getTimeZoneOps(timeZone);
3268
+ if (6 === smallestUnit) {
3269
+ epochNanoseconds = ((computeInterval, timeZoneOps, slots, roundingMode) => {
3270
+ const isoSlots = zonedEpochSlotsToIso(slots, timeZoneOps), [isoFields0, isoFields1] = computeInterval(isoSlots), epochNano = slots.epochNanoseconds, epochNano0 = getStartOfDayInstantFor(timeZoneOps, isoFields0), epochNano1 = getStartOfDayInstantFor(timeZoneOps, isoFields1);
3271
+ if (bigNanoOutside(epochNano, epochNano0, epochNano1)) {
3272
+ throw new RangeError(invalidProtocolResults);
3273
+ }
3274
+ return roundWithMode(computeEpochNanoFrac(epochNano, epochNano0, epochNano1), roundingMode) ? epochNano1 : epochNano0;
3275
+ })(computeDayInterval, timeZoneOps, slots, roundingMode);
3276
+ } else {
3277
+ const offsetNano = timeZoneOps.getOffsetNanosecondsFor(epochNanoseconds);
3278
+ epochNanoseconds = getMatchingInstantFor(timeZoneOps, roundDateTime(epochNanoToIso(epochNanoseconds, offsetNano), smallestUnit, roundingInc, roundingMode), offsetNano, 2, 0, 1);
3279
+ }
3280
+ return createZonedDateTimeSlots(epochNanoseconds, timeZone, calendar);
3281
+ })(queryNativeTimeZone, slots, options)),
3282
+ startOfDay: slots => createZonedDateTime(((getTimeZoneOps, slots) => {
3283
+ const {timeZone: timeZone, calendar: calendar} = slots, epochNano1 = ((computeAlignment, timeZoneOps, slots) => getStartOfDayInstantFor(timeZoneOps, computeAlignment(zonedEpochSlotsToIso(slots, timeZoneOps))))(computeDayFloor, getTimeZoneOps(timeZone), slots);
3284
+ return createZonedDateTimeSlots(epochNano1, timeZone, calendar);
3285
+ })(queryNativeTimeZone, slots)),
3286
+ equals(slots, otherArg) {
3287
+ return !compareZonedDateTimes(zonedDateTimeSlots0 = slots, zonedDateTimeSlots1 = toZonedDateTimeSlots(otherArg)) && !!isTimeZoneIdsEqual(zonedDateTimeSlots0.timeZone, zonedDateTimeSlots1.timeZone) && zonedDateTimeSlots0.calendar === zonedDateTimeSlots1.calendar;
3288
+ var zonedDateTimeSlots0, zonedDateTimeSlots1;
3289
+ },
3290
+ toInstant: slots => createInstant(createInstantSlots(slots.epochNanoseconds)),
3291
+ toPlainDateTime: slots => createPlainDateTime(zonedDateTimeToPlainDateTime(queryNativeTimeZone, slots)),
3292
+ toPlainDate: slots => createPlainDate(zonedDateTimeToPlainDate(queryNativeTimeZone, slots)),
3293
+ toPlainTime: slots => createPlainTime(zonedDateTimeToPlainTime(queryNativeTimeZone, slots)),
3294
+ toLocaleString(slots, locales, options = {}) {
3295
+ const [format, epochMilli] = prepZonedDateTimeFormat(locales, options, slots);
3296
+ return format.format(epochMilli);
3297
+ },
3298
+ toString: (slots, options) => formatZonedDateTimeIso(queryNativeTimeZone, slots, options),
3299
+ toJSON: slots => formatZonedDateTimeIso(queryNativeTimeZone, slots),
3300
+ valueOf: neverValueOf,
3301
+ getTimeZoneTransition(slots, options) {
3302
+ const {timeZone: timeZoneId, epochNanoseconds: epochNano} = slots, direction = (options => {
3303
+ const normalizedOptions = normalizeOptionsOrString(options, "direction"), res = refineChoiceOption("direction", directionMap, normalizedOptions, 0);
3304
+ if (!res) {
3305
+ throw new RangeError(invalidEntity("direction", res));
3306
+ }
3307
+ return res;
3308
+ })(options), newEpochNano = queryNativeTimeZone(timeZoneId).getTransition(epochNano, direction);
3309
+ return newEpochNano ? createZonedDateTime({
3310
+ ...slots,
3311
+ epochNanoseconds: newEpochNano
3312
+ }) : null;
3313
+ }
3314
+ }, {
3315
+ from: (arg, options) => createZonedDateTime(toZonedDateTimeSlots(arg, options)),
3316
+ compare: (arg0, arg1) => compareZonedDateTimes(toZonedDateTimeSlots(arg0), toZonedDateTimeSlots(arg1))
3317
+ }), [Instant, createInstant, getInstantSlots] = createSlotClass(InstantBranding, (epochNano => createInstantSlots(checkEpochNanoInBounds(bigIntToBigNano(toBigInt(epochNano))))), epochGetters, {
3318
+ add: (slots, durationArg) => createInstant(moveInstant(0, slots, toDurationSlots(durationArg))),
3319
+ subtract: (slots, durationArg) => createInstant(moveInstant(1, slots, toDurationSlots(durationArg))),
3320
+ until: (slots, otherArg, options) => createDuration(diffInstants(0, slots, toInstantSlots(otherArg), options)),
3321
+ since: (slots, otherArg, options) => createDuration(diffInstants(1, slots, toInstantSlots(otherArg), options)),
3322
+ round: (slots, options) => createInstant(((instantSlots, options) => {
3323
+ const [smallestUnit, roundingInc, roundingMode] = refineRoundingOptions(options, 5, 1);
3324
+ return createInstantSlots(roundBigNano(instantSlots.epochNanoseconds, smallestUnit, roundingInc, roundingMode, 1));
3325
+ })(slots, options)),
3326
+ equals(slots, otherArg) {
3327
+ return !compareInstants(slots, toInstantSlots(otherArg));
3328
+ },
3329
+ toZonedDateTimeISO: (slots, timeZoneArg) => createZonedDateTime(((instantSlots, timeZoneId, calendarId = isoCalendarId) => createZonedDateTimeSlots(instantSlots.epochNanoseconds, timeZoneId, calendarId))(slots, refineTimeZoneArg(timeZoneArg))),
3330
+ toLocaleString(slots, locales, options) {
3331
+ const [format, epochMilli] = prepInstantFormat(locales, options, slots);
3332
+ return format.format(epochMilli);
3333
+ },
3334
+ toString: (slots, options) => formatInstantIso(refineTimeZoneArg, queryNativeTimeZone, slots, options),
3335
+ toJSON: slots => formatInstantIso(refineTimeZoneArg, queryNativeTimeZone, slots),
3336
+ valueOf: neverValueOf
3337
+ }, {
3338
+ from: arg => createInstant(toInstantSlots(arg)),
3339
+ fromEpochMilliseconds: epochMilli => createInstant((epochMilli => createInstantSlots(checkEpochNanoInBounds(numberToBigNano(toStrictInteger(epochMilli), nanoInMilli))))(epochMilli)),
3340
+ fromEpochNanoseconds: epochNano => createInstant((epochNano => createInstantSlots(checkEpochNanoInBounds(bigIntToBigNano(toBigInt(epochNano)))))(epochNano)),
3341
+ compare: (a, b) => compareInstants(toInstantSlots(a), toInstantSlots(b))
3342
+ }), DateTimeFormat = function() {
3343
+ function DateTimeFormatFunc(locales, options) {
3344
+ return new DateTimeFormatNew(locales, options);
3345
+ }
3346
+ function DateTimeFormatNew(locales, options = Object.create(null)) {
3347
+ internalsMap.set(this, ((locales, options) => {
3348
+ const rawFormat = new RawDateTimeFormat(locales, options), resolveOptions = rawFormat.resolvedOptions(), resolvedLocale = resolveOptions.locale, copiedOptions = pluckProps(Object.keys(options), resolveOptions), queryFormatPrepperForBranding = memoize(createFormatPrepperForBranding), prepFormat = (isRange, ...formattables) => {
3349
+ if (isRange) {
3350
+ if (2 !== formattables.length) {
3351
+ throw new TypeError("Mismatching types for formatting");
3352
+ }
3353
+ for (const formattable of formattables) {
3354
+ if (void 0 === formattable) {
3355
+ throw new TypeError("Mismatching types for formatting");
3356
+ }
3357
+ }
3358
+ }
3359
+ isRange || void 0 !== formattables[0] || (formattables = []);
3360
+ const formattableEssences = formattables.map((formattable => getSlots(formattable) || Number(formattable)));
3361
+ let overallBranding, i = 0;
3362
+ for (const formattableEssence of formattableEssences) {
3363
+ const slotsBranding = "object" == typeof formattableEssence ? formattableEssence.branding : void 0;
3364
+ if (i++ && slotsBranding !== overallBranding) {
3365
+ throw new TypeError("Mismatching types for formatting");
3366
+ }
3367
+ overallBranding = slotsBranding;
3368
+ }
3369
+ return overallBranding ? queryFormatPrepperForBranding(overallBranding)(resolvedLocale, copiedOptions, ...formattableEssences) : [ rawFormat, ...formattableEssences ];
3370
+ };
3371
+ return prepFormat.rawFormat = rawFormat, prepFormat;
3372
+ })(locales, options));
3373
+ }
3374
+ const members = RawDateTimeFormat.prototype, memberDescriptors = Object.getOwnPropertyDescriptors(members), classDescriptors = Object.getOwnPropertyDescriptors(RawDateTimeFormat);
3375
+ for (const memberName in memberDescriptors) {
3376
+ const memberDescriptor = memberDescriptors[memberName], formatLikeMethod = memberName.startsWith("format") && createFormatMethod(memberName);
3377
+ "function" == typeof memberDescriptor.value ? memberDescriptor.value = "constructor" === memberName ? DateTimeFormatFunc : formatLikeMethod || createProxiedMethod(memberName) : formatLikeMethod && (memberDescriptor.get = function() {
3378
+ if (!internalsMap.has(this)) {
3379
+ throw new TypeError("Invalid calling context");
3380
+ }
3381
+ return (...args) => formatLikeMethod.apply(this, args);
3382
+ }, Object.defineProperties(memberDescriptor.get, createNameDescriptors(`get ${memberName}`)));
3383
+ }
3384
+ return classDescriptors.prototype.value = DateTimeFormatNew.prototype = Object.create({}, memberDescriptors),
3385
+ Object.defineProperties(DateTimeFormatFunc, classDescriptors), DateTimeFormatFunc;
3386
+ }(), internalsMap = new WeakMap;
3387
+ let currentTimeZoneId;
3388
+ const Now = Object.defineProperties({}, {
3389
+ ...createStringTagDescriptors("Temporal.Now"),
3390
+ ...createPropDescriptors({
3391
+ timeZoneId: () => getCurrentTimeZoneId(),
3392
+ instant: () => createInstant(createInstantSlots(getCurrentEpochNano())),
3393
+ zonedDateTimeISO: (timeZoneArg = getCurrentTimeZoneId()) => createZonedDateTime(createZonedDateTimeSlots(getCurrentEpochNano(), refineTimeZoneArg(timeZoneArg), isoCalendarId)),
3394
+ plainDateTimeISO: (timeZoneArg = getCurrentTimeZoneId()) => createPlainDateTime(createPlainDateTimeSlots(getCurrentIsoDateTime(queryNativeTimeZone(refineTimeZoneArg(timeZoneArg))), isoCalendarId)),
3395
+ plainDateISO: (timeZoneArg = getCurrentTimeZoneId()) => createPlainDate(createPlainDateSlots(getCurrentIsoDateTime(queryNativeTimeZone(refineTimeZoneArg(timeZoneArg))), isoCalendarId)),
3396
+ plainTimeISO: (timeZoneArg = getCurrentTimeZoneId()) => createPlainTime(createPlainTimeSlots(getCurrentIsoDateTime(queryNativeTimeZone(refineTimeZoneArg(timeZoneArg)))))
3397
+ })
3398
+ }), Temporal = Object.defineProperties({}, {
3399
+ ...createStringTagDescriptors("Temporal"),
3400
+ ...createPropDescriptors({
3401
+ PlainYearMonth: PlainYearMonth,
3402
+ PlainMonthDay: PlainMonthDay,
3403
+ PlainDate: PlainDate,
3404
+ PlainTime: PlainTime,
3405
+ PlainDateTime: PlainDateTime,
3406
+ ZonedDateTime: ZonedDateTime,
3407
+ Instant: Instant,
3408
+ Duration: Duration,
3409
+ Now: Now
3410
+ })
3411
+ });
3412
+ Object.defineProperties(globalThis, createPropDescriptors({
3413
+ Temporal: Temporal
3414
+ })), Object.defineProperties(Intl, createPropDescriptors({
3415
+ DateTimeFormat: DateTimeFormat
3416
+ })), Object.defineProperties(Date.prototype, createPropDescriptors({
3417
+ toTemporalInstant() {
3418
+ const epochMilli = Date.prototype.valueOf.call(this);
3419
+ return createInstant(createInstantSlots(numberToBigNano(requireNumberIsInteger(epochMilli), nanoInMilli)));
3420
+ }
3421
+ }));
3422
+ }();