@northguild/gmt 1.15.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1113) hide show
  1. package/README.md +852 -272
  2. package/dist/calendar/business/businessDaysBetween.d.ts +37 -0
  3. package/dist/calendar/business/businessDaysBetween.js +89 -0
  4. package/dist/calendar/business/index.d.ts +7 -0
  5. package/dist/calendar/business/index.js +10 -0
  6. package/dist/calendar/business/mergeCalendars.d.ts +33 -0
  7. package/dist/calendar/business/mergeCalendars.js +68 -0
  8. package/dist/calendar/business/nextBusinessDay.d.ts +30 -0
  9. package/dist/calendar/business/nextBusinessDay.js +39 -0
  10. package/dist/calendar/business/previousBusinessDay.d.ts +30 -0
  11. package/dist/calendar/business/previousBusinessDay.js +39 -0
  12. package/dist/calendar/business/rollDate.d.ts +59 -0
  13. package/dist/calendar/business/rollDate.js +116 -0
  14. package/dist/calendar/calculate/bucketRange.d.ts +49 -0
  15. package/dist/calendar/calculate/bucketRange.js +169 -0
  16. package/dist/calendar/calculate/floorToZone.d.ts +42 -0
  17. package/dist/calendar/calculate/floorToZone.js +62 -0
  18. package/dist/calendar/calculate/getFiscalPeriod.d.ts +64 -0
  19. package/dist/calendar/calculate/getFiscalPeriod.js +96 -0
  20. package/dist/calendar/calculate/getIsoWeekDate.d.ts +35 -0
  21. package/dist/calendar/calculate/getIsoWeekDate.js +41 -0
  22. package/dist/calendar/calculate/getOrdinalDate.d.ts +25 -0
  23. package/dist/calendar/calculate/getOrdinalDate.js +28 -0
  24. package/dist/calendar/calculate/getQuarter.d.ts +36 -0
  25. package/dist/calendar/calculate/getQuarter.js +64 -0
  26. package/dist/calendar/calculate/index.d.ts +6 -0
  27. package/dist/calendar/calculate/index.js +6 -0
  28. package/dist/calendar/index.d.ts +4 -0
  29. package/dist/calendar/index.js +5 -0
  30. package/dist/calendar/validate/index.d.ts +4 -0
  31. package/dist/calendar/validate/index.js +4 -0
  32. package/dist/calendar/validate/isValidBusinessCalendar.d.ts +31 -0
  33. package/dist/calendar/validate/isValidBusinessCalendar.js +40 -0
  34. package/dist/calendar/validate/isValidFiscalPattern.d.ts +25 -0
  35. package/dist/calendar/validate/isValidFiscalPattern.js +29 -0
  36. package/dist/calendar/validate/isValidRollConvention.d.ts +28 -0
  37. package/dist/calendar/validate/isValidRollConvention.js +38 -0
  38. package/dist/calendar/validate/isValidZoneBucketUnit.d.ts +31 -0
  39. package/dist/calendar/validate/isValidZoneBucketUnit.js +39 -0
  40. package/dist/duration/calculate/durationAs.d.ts +27 -3
  41. package/dist/duration/calculate/durationAs.js +34 -8
  42. package/dist/duration/calculate/getDurationUnit.d.ts +5 -2
  43. package/dist/duration/calculate/getDurationUnit.js +7 -3
  44. package/dist/duration/compare/compareDurations.d.ts +25 -2
  45. package/dist/duration/compare/compareDurations.js +31 -7
  46. package/dist/duration/format/formatDuration.d.ts +14 -5
  47. package/dist/duration/format/formatDuration.js +47 -11
  48. package/dist/duration/index.d.ts +1 -0
  49. package/dist/duration/index.js +2 -0
  50. package/dist/duration/normalize/normalizeDuration.d.ts +33 -6
  51. package/dist/duration/normalize/normalizeDuration.js +41 -12
  52. package/dist/duration/parse/parseDuration.js +4 -0
  53. package/dist/index.d.ts +5 -0
  54. package/dist/index.js +5 -0
  55. package/dist/instant/convert/classifyLocal.d.ts +50 -0
  56. package/dist/instant/convert/classifyLocal.js +60 -0
  57. package/dist/instant/convert/fromOffsetInstant.d.ts +47 -0
  58. package/dist/instant/convert/fromOffsetInstant.js +99 -0
  59. package/dist/instant/convert/index.d.ts +4 -0
  60. package/dist/instant/convert/index.js +4 -0
  61. package/dist/instant/convert/resolveLocal.d.ts +40 -0
  62. package/dist/instant/convert/resolveLocal.js +76 -0
  63. package/dist/instant/convert/toOffsetInstant.d.ts +73 -0
  64. package/dist/instant/convert/toOffsetInstant.js +185 -0
  65. package/dist/instant/index.d.ts +2 -0
  66. package/dist/instant/index.js +3 -0
  67. package/dist/internal/adjustZonedBusinessDays.js +9 -7
  68. package/dist/internal/businessCalendar.d.ts +46 -0
  69. package/dist/internal/businessCalendar.js +230 -0
  70. package/dist/internal/businessDayValues.d.ts +20 -0
  71. package/dist/internal/businessDayValues.js +54 -0
  72. package/dist/internal/calendarDatePairPolicy.d.ts +10 -12
  73. package/dist/internal/calendarDatePairPolicy.js +13 -19
  74. package/dist/internal/calendarDateString.d.ts +32 -58
  75. package/dist/internal/calendarDateString.js +51 -93
  76. package/dist/internal/calendarSystemIds.d.ts +26 -2
  77. package/dist/internal/calendarSystemIds.js +57 -51
  78. package/dist/internal/calendarValueOfDate.d.ts +10 -12
  79. package/dist/internal/calendarValueOfDate.js +22 -20
  80. package/dist/internal/calendarValueOfZoned.d.ts +14 -17
  81. package/dist/internal/calendarValueOfZoned.js +25 -25
  82. package/dist/internal/calendarZonedPairPolicy.d.ts +11 -18
  83. package/dist/internal/calendarZonedPairPolicy.js +14 -25
  84. package/dist/internal/calendarZonedString.d.ts +41 -65
  85. package/dist/internal/calendarZonedString.js +52 -101
  86. package/dist/internal/compareUnixEpochs.d.ts +14 -0
  87. package/dist/internal/compareUnixEpochs.js +25 -0
  88. package/dist/internal/dateTimeUnitHelpers.d.ts +18 -0
  89. package/dist/internal/dateTimeUnitHelpers.js +27 -0
  90. package/dist/internal/dateUnitHelpers.d.ts +39 -1
  91. package/dist/internal/dateUnitHelpers.js +73 -11
  92. package/dist/internal/defaultFractionalDigits.d.ts +14 -0
  93. package/dist/internal/defaultFractionalDigits.js +23 -0
  94. package/dist/internal/differenceRecord.d.ts +32 -0
  95. package/dist/internal/differenceRecord.js +79 -0
  96. package/dist/internal/divisionBoundary.d.ts +19 -0
  97. package/dist/internal/divisionBoundary.js +23 -0
  98. package/dist/internal/durationUntilString.d.ts +1 -1
  99. package/dist/internal/durationUntilString.js +10 -2
  100. package/dist/internal/englishCalendarNames.d.ts +11 -0
  101. package/dist/internal/englishCalendarNames.js +21 -1
  102. package/dist/internal/epochNanoseconds.d.ts +27 -0
  103. package/dist/internal/epochNanoseconds.js +31 -0
  104. package/dist/internal/fiscalCalendar.d.ts +36 -0
  105. package/dist/internal/fiscalCalendar.js +86 -0
  106. package/dist/internal/floorDivide.d.ts +15 -0
  107. package/dist/internal/floorDivide.js +18 -0
  108. package/dist/internal/foreignEpochs.d.ts +134 -0
  109. package/dist/internal/foreignEpochs.js +139 -0
  110. package/dist/internal/formatCalendarDays.d.ts +28 -0
  111. package/dist/internal/formatCalendarDays.js +49 -0
  112. package/dist/internal/formatDateInCalendar.d.ts +14 -39
  113. package/dist/internal/formatDateInCalendar.js +16 -47
  114. package/dist/internal/formatRelativeDuration.d.ts +27 -0
  115. package/dist/internal/formatRelativeDuration.js +45 -0
  116. package/dist/internal/getLocaleFirstDayOfWeek.d.ts +9 -6
  117. package/dist/internal/getLocaleFirstDayOfWeek.js +9 -10
  118. package/dist/internal/getLocaleWeekYearBounds.d.ts +17 -9
  119. package/dist/internal/getLocaleWeekYearBounds.js +45 -26
  120. package/dist/internal/getLocaleWeekendDays.d.ts +9 -18
  121. package/dist/internal/getLocaleWeekendDays.js +9 -5
  122. package/dist/internal/halfOpenIntervals.d.ts +102 -0
  123. package/dist/internal/halfOpenIntervals.js +180 -0
  124. package/dist/internal/hasCalendarAnnotation.d.ts +20 -20
  125. package/dist/internal/hasCalendarAnnotation.js +23 -21
  126. package/dist/internal/hourDurationString.d.ts +16 -0
  127. package/dist/internal/hourDurationString.js +47 -0
  128. package/dist/internal/httpDateFields.d.ts +24 -0
  129. package/dist/internal/httpDateFields.js +86 -0
  130. package/dist/internal/index.d.ts +28 -9
  131. package/dist/internal/index.js +28 -9
  132. package/dist/internal/instantFormatOptions.d.ts +43 -0
  133. package/dist/internal/instantFormatOptions.js +99 -0
  134. package/dist/internal/instantIntervalText.d.ts +20 -0
  135. package/dist/internal/instantIntervalText.js +25 -0
  136. package/dist/internal/instantNanoseconds.d.ts +25 -0
  137. package/dist/internal/instantNanoseconds.js +41 -0
  138. package/dist/internal/intervalCountHelpers.d.ts +16 -10
  139. package/dist/internal/intervalCountHelpers.js +1 -31
  140. package/dist/internal/intervalNanoseconds.d.ts +47 -0
  141. package/dist/internal/intervalNanoseconds.js +86 -0
  142. package/dist/internal/isObject.d.ts +26 -0
  143. package/dist/internal/isObject.js +30 -0
  144. package/dist/internal/isoStringBody.d.ts +40 -0
  145. package/dist/internal/isoStringBody.js +85 -0
  146. package/dist/internal/joinDateTimeConnector.d.ts +1 -1
  147. package/dist/internal/localeWeekInfo.d.ts +34 -0
  148. package/dist/internal/localeWeekInfo.js +27 -0
  149. package/dist/internal/maxPieces.d.ts +41 -0
  150. package/dist/internal/maxPieces.js +53 -0
  151. package/dist/internal/measureNearRangeEnd.d.ts +26 -0
  152. package/dist/internal/measureNearRangeEnd.js +47 -0
  153. package/dist/internal/monthGridWeekRow.d.ts +4 -1
  154. package/dist/internal/monthGridWeekRow.js +3 -0
  155. package/dist/internal/normalizeTimeZone.d.ts +17 -10
  156. package/dist/internal/normalizeTimeZone.js +25 -15
  157. package/dist/internal/patternToken.d.ts +2 -1
  158. package/dist/internal/patternToken.js +10 -4
  159. package/dist/internal/plainDateAdd.d.ts +20 -0
  160. package/dist/internal/plainDateAdd.js +42 -0
  161. package/dist/internal/plainDateUntil.d.ts +21 -0
  162. package/dist/internal/plainDateUntil.js +48 -0
  163. package/dist/internal/plainFormatOptions.d.ts +59 -0
  164. package/dist/internal/plainFormatOptions.js +165 -0
  165. package/dist/internal/resolveDateTimeUnit.d.ts +4 -1
  166. package/dist/internal/resolveDateTimeUnit.js +2 -12
  167. package/dist/internal/resolveDurationRelativeTo.d.ts +28 -22
  168. package/dist/internal/resolveDurationRelativeTo.js +69 -25
  169. package/dist/internal/resolveDurationUnit.d.ts +4 -1
  170. package/dist/internal/resolveDurationUnit.js +2 -11
  171. package/dist/internal/resolveLocale.d.ts +37 -0
  172. package/dist/internal/resolveLocale.js +59 -0
  173. package/dist/internal/resolveManualRoundingOptions.d.ts +23 -0
  174. package/dist/internal/resolveManualRoundingOptions.js +39 -0
  175. package/dist/internal/resolveMinimalDaysInFirstWeek.d.ts +19 -0
  176. package/dist/internal/resolveMinimalDaysInFirstWeek.js +28 -0
  177. package/dist/internal/resolveOverflow.d.ts +6 -0
  178. package/dist/internal/resolveOverflow.js +7 -1
  179. package/dist/internal/resolveReadingTimeZone.d.ts +11 -0
  180. package/dist/internal/resolveReadingTimeZone.js +18 -0
  181. package/dist/internal/resolveUnixIntervalPair.d.ts +30 -0
  182. package/dist/internal/resolveUnixIntervalPair.js +53 -0
  183. package/dist/internal/resolveWeekStartsOn.d.ts +12 -0
  184. package/dist/internal/resolveWeekStartsOn.js +18 -0
  185. package/dist/internal/rfc5322DateTime.d.ts +26 -0
  186. package/dist/internal/rfc5322DateTime.js +176 -0
  187. package/dist/internal/splitStep.d.ts +81 -0
  188. package/dist/internal/splitStep.js +182 -0
  189. package/dist/internal/startOrEndOfUnix.d.ts +26 -0
  190. package/dist/internal/startOrEndOfUnix.js +47 -0
  191. package/dist/{utc/calculate → internal}/startOrEndOfUtc.d.ts +8 -4
  192. package/dist/{utc/calculate → internal}/startOrEndOfUtc.js +30 -26
  193. package/dist/internal/startOrEndOfZoned.d.ts +22 -0
  194. package/dist/internal/startOrEndOfZoned.js +49 -0
  195. package/dist/internal/temporalCompat/calendarDateArithmetic.d.ts +33 -0
  196. package/dist/internal/temporalCompat/calendarDateArithmetic.js +199 -0
  197. package/dist/internal/temporalCompat/calendarDateFromFields.d.ts +36 -0
  198. package/dist/internal/temporalCompat/calendarDateFromFields.js +120 -0
  199. package/dist/internal/temporalCompat/calendarFields.d.ts +25 -0
  200. package/dist/internal/temporalCompat/calendarFields.js +131 -0
  201. package/dist/internal/temporalCompat/capabilities.d.ts +28 -0
  202. package/dist/internal/temporalCompat/capabilities.js +74 -0
  203. package/dist/internal/temporalCompat/fieldSearch.d.ts +21 -0
  204. package/dist/internal/temporalCompat/fieldSearch.js +83 -0
  205. package/dist/internal/temporalCompat/fixedDay.d.ts +25 -0
  206. package/dist/internal/temporalCompat/fixedDay.js +45 -0
  207. package/dist/internal/temporalCompat/hebrewArithmetic.d.ts +19 -0
  208. package/dist/internal/temporalCompat/hebrewArithmetic.js +150 -0
  209. package/dist/internal/temporalCompat/index.d.ts +4 -0
  210. package/dist/internal/temporalCompat/index.js +5 -0
  211. package/dist/internal/temporalCompat/indianArithmetic.d.ts +16 -0
  212. package/dist/internal/temporalCompat/indianArithmetic.js +87 -0
  213. package/dist/internal/temporalCompat/largeMonthSpan.d.ts +19 -0
  214. package/dist/internal/temporalCompat/largeMonthSpan.js +199 -0
  215. package/dist/internal/temporalCompat/nonIsoArithmetic.d.ts +59 -0
  216. package/dist/internal/temporalCompat/nonIsoArithmetic.js +220 -0
  217. package/dist/internal/temporalCompat/readArithmeticModel.d.ts +3 -0
  218. package/dist/internal/temporalCompat/readArithmeticModel.js +284 -0
  219. package/dist/internal/temporalCompat/repros.d.ts +31 -0
  220. package/dist/internal/temporalCompat/repros.js +556 -0
  221. package/dist/internal/toInstantFromUtc.d.ts +10 -0
  222. package/dist/internal/toInstantFromUtc.js +19 -0
  223. package/dist/internal/unixEpochValue.d.ts +166 -0
  224. package/dist/internal/unixEpochValue.js +245 -0
  225. package/dist/internal/unixFormatReference.d.ts +18 -0
  226. package/dist/internal/unixFormatReference.js +44 -0
  227. package/dist/internal/unixZonedDateTime.d.ts +22 -0
  228. package/dist/internal/unixZonedDateTime.js +32 -0
  229. package/dist/internal/utcOffsetString.d.ts +39 -0
  230. package/dist/internal/utcOffsetString.js +75 -0
  231. package/dist/internal/utcZonedDateTime.d.ts +16 -0
  232. package/dist/internal/utcZonedDateTime.js +28 -0
  233. package/dist/internal/zonedBucket.d.ts +91 -0
  234. package/dist/internal/zonedBucket.js +441 -0
  235. package/dist/internal/zonedFormatReference.d.ts +15 -0
  236. package/dist/internal/zonedFormatReference.js +24 -0
  237. package/dist/internal/zonedLocalDates.d.ts +15 -0
  238. package/dist/internal/zonedLocalDates.js +58 -0
  239. package/dist/internal/zonedNowUnitValue.d.ts +24 -0
  240. package/dist/internal/zonedNowUnitValue.js +58 -0
  241. package/dist/internal/zonedWallClock.d.ts +84 -0
  242. package/dist/internal/zonedWallClock.js +427 -0
  243. package/dist/internal/zonedWallClockDifference.d.ts +92 -0
  244. package/dist/internal/zonedWallClockDifference.js +1173 -0
  245. package/dist/internal/zonedWallClockOperations.d.ts +132 -0
  246. package/dist/internal/zonedWallClockOperations.js +553 -0
  247. package/dist/internal/zonelessCalendarDate.d.ts +12 -0
  248. package/dist/internal/zonelessCalendarDate.js +22 -0
  249. package/dist/interval/calculate/clampInterval.d.ts +22 -0
  250. package/dist/interval/calculate/clampInterval.js +31 -0
  251. package/dist/interval/calculate/index.d.ts +6 -0
  252. package/dist/interval/calculate/index.js +6 -0
  253. package/dist/interval/calculate/intersectIntervals.d.ts +23 -0
  254. package/dist/interval/calculate/intersectIntervals.js +43 -0
  255. package/dist/interval/calculate/mergeIntervals.d.ts +28 -0
  256. package/dist/interval/calculate/mergeIntervals.js +44 -0
  257. package/dist/interval/calculate/splitIntervalAt.d.ts +28 -0
  258. package/dist/interval/calculate/splitIntervalAt.js +63 -0
  259. package/dist/interval/calculate/subtractIntervals.d.ts +31 -0
  260. package/dist/interval/calculate/subtractIntervals.js +64 -0
  261. package/dist/interval/calculate/sumIntervals.d.ts +26 -0
  262. package/dist/interval/calculate/sumIntervals.js +40 -0
  263. package/dist/interval/compare/index.d.ts +2 -0
  264. package/dist/interval/compare/index.js +2 -0
  265. package/dist/interval/compare/intervalContains.d.ts +25 -0
  266. package/dist/interval/compare/intervalContains.js +39 -0
  267. package/dist/interval/compare/intervalsOverlap.d.ts +28 -0
  268. package/dist/interval/compare/intervalsOverlap.js +42 -0
  269. package/dist/interval/index.d.ts +4 -0
  270. package/dist/interval/index.js +5 -0
  271. package/dist/interval/validate/index.d.ts +1 -0
  272. package/dist/interval/validate/index.js +1 -0
  273. package/dist/interval/validate/isValidInterval.d.ts +29 -0
  274. package/dist/interval/validate/isValidInterval.js +38 -0
  275. package/dist/plain/calculate/addBusinessDays.d.ts +26 -9
  276. package/dist/plain/calculate/addBusinessDays.js +29 -21
  277. package/dist/plain/calculate/addDate.d.ts +9 -8
  278. package/dist/plain/calculate/addDate.js +35 -22
  279. package/dist/plain/calculate/addDateTime.js +24 -10
  280. package/dist/plain/calculate/addTime.d.ts +5 -8
  281. package/dist/plain/calculate/addTime.js +23 -16
  282. package/dist/plain/calculate/clampDate.js +3 -3
  283. package/dist/plain/calculate/closestDateTo.d.ts +11 -7
  284. package/dist/plain/calculate/closestDateTo.js +36 -24
  285. package/dist/plain/calculate/cycleDate.d.ts +1 -1
  286. package/dist/plain/calculate/cycleDate.js +10 -3
  287. package/dist/plain/calculate/cycleDateTime.d.ts +1 -1
  288. package/dist/plain/calculate/cycleDateTime.js +10 -3
  289. package/dist/plain/calculate/cycleTime.d.ts +6 -8
  290. package/dist/plain/calculate/cycleTime.js +15 -9
  291. package/dist/plain/calculate/diffDate.d.ts +31 -14
  292. package/dist/plain/calculate/diffDate.js +73 -38
  293. package/dist/plain/calculate/diffDateAsDuration.d.ts +13 -8
  294. package/dist/plain/calculate/diffDateAsDuration.js +22 -9
  295. package/dist/plain/calculate/diffDateTime.d.ts +17 -5
  296. package/dist/plain/calculate/diffDateTime.js +67 -28
  297. package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +2 -2
  298. package/dist/plain/calculate/diffDateTimeAsDuration.js +10 -3
  299. package/dist/plain/calculate/diffTime.d.ts +18 -5
  300. package/dist/plain/calculate/diffTime.js +68 -27
  301. package/dist/plain/calculate/endOfDate.d.ts +10 -2
  302. package/dist/plain/calculate/endOfDate.js +52 -27
  303. package/dist/plain/calculate/endOfDateTime.d.ts +17 -2
  304. package/dist/plain/calculate/endOfDateTime.js +126 -103
  305. package/dist/plain/calculate/endOfTime.d.ts +16 -2
  306. package/dist/plain/calculate/endOfTime.js +77 -59
  307. package/dist/plain/calculate/getLargestDateDurationUnit.d.ts +13 -5
  308. package/dist/plain/calculate/getLargestDateDurationUnit.js +26 -10
  309. package/dist/plain/calculate/getLargestDateTimeDurationUnit.d.ts +13 -6
  310. package/dist/plain/calculate/getLargestDateTimeDurationUnit.js +37 -22
  311. package/dist/plain/calculate/getLargestTimeDurationUnit.d.ts +13 -6
  312. package/dist/plain/calculate/getLargestTimeDurationUnit.js +33 -18
  313. package/dist/plain/calculate/getLocaleDayOfWeek.d.ts +8 -4
  314. package/dist/plain/calculate/getLocaleDayOfWeek.js +8 -3
  315. package/dist/plain/calculate/getLocaleEndOfWeek.d.ts +8 -4
  316. package/dist/plain/calculate/getLocaleEndOfWeek.js +8 -3
  317. package/dist/plain/calculate/getLocaleStartOfWeek.d.ts +8 -4
  318. package/dist/plain/calculate/getLocaleStartOfWeek.js +8 -3
  319. package/dist/plain/calculate/getLocaleWeekYear.d.ts +29 -19
  320. package/dist/plain/calculate/getLocaleWeekYear.js +48 -28
  321. package/dist/plain/calculate/getWeekNumber.d.ts +21 -2
  322. package/dist/plain/calculate/getWeekNumber.js +33 -12
  323. package/dist/plain/calculate/getWeekOfMonth.d.ts +4 -2
  324. package/dist/plain/calculate/getWeekOfMonth.js +8 -3
  325. package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +25 -14
  326. package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +45 -25
  327. package/dist/plain/calculate/getWeeksInMonth.d.ts +4 -2
  328. package/dist/plain/calculate/getWeeksInMonth.js +8 -3
  329. package/dist/plain/calculate/getWeeksInYear.d.ts +5 -4
  330. package/dist/plain/calculate/getWeeksInYear.js +9 -14
  331. package/dist/plain/calculate/maxDate.js +19 -12
  332. package/dist/plain/calculate/maxDateTime.js +19 -12
  333. package/dist/plain/calculate/maxTime.js +19 -12
  334. package/dist/plain/calculate/minDate.js +19 -12
  335. package/dist/plain/calculate/minDateTime.js +19 -12
  336. package/dist/plain/calculate/minTime.js +19 -12
  337. package/dist/plain/calculate/nextWeekday.js +5 -0
  338. package/dist/plain/calculate/previousWeekday.js +5 -0
  339. package/dist/plain/calculate/roundDate.d.ts +23 -5
  340. package/dist/plain/calculate/roundDate.js +88 -46
  341. package/dist/plain/calculate/roundDateTime.d.ts +27 -3
  342. package/dist/plain/calculate/roundDateTime.js +128 -69
  343. package/dist/plain/calculate/roundTime.d.ts +8 -1
  344. package/dist/plain/calculate/roundTime.js +32 -17
  345. package/dist/plain/calculate/setDate.js +4 -0
  346. package/dist/plain/calculate/setDateTime.js +4 -0
  347. package/dist/plain/calculate/setTime.d.ts +1 -1
  348. package/dist/plain/calculate/setTime.js +5 -1
  349. package/dist/plain/calculate/sortDateTimes.js +17 -10
  350. package/dist/plain/calculate/sortDates.js +17 -10
  351. package/dist/plain/calculate/sortTimes.js +17 -10
  352. package/dist/plain/calculate/startOfDate.d.ts +7 -2
  353. package/dist/plain/calculate/startOfDate.js +52 -27
  354. package/dist/plain/calculate/startOfDateTime.d.ts +5 -2
  355. package/dist/plain/calculate/startOfDateTime.js +81 -62
  356. package/dist/plain/calculate/startOfQuarterForDateTime.d.ts +2 -0
  357. package/dist/plain/calculate/startOfQuarterForDateTime.js +12 -1
  358. package/dist/plain/calculate/startOfTime.d.ts +15 -2
  359. package/dist/plain/calculate/startOfTime.js +33 -37
  360. package/dist/plain/calculate/subtractBusinessDays.d.ts +25 -10
  361. package/dist/plain/calculate/subtractBusinessDays.js +28 -22
  362. package/dist/plain/calculate/subtractDate.d.ts +8 -7
  363. package/dist/plain/calculate/subtractDate.js +35 -21
  364. package/dist/plain/calculate/subtractDateTime.js +24 -10
  365. package/dist/plain/calculate/subtractTime.d.ts +5 -8
  366. package/dist/plain/calculate/subtractTime.js +23 -16
  367. package/dist/plain/chop/index.d.ts +0 -1
  368. package/dist/plain/chop/index.js +0 -1
  369. package/dist/plain/compare/areDateTimesEqualBy.d.ts +10 -5
  370. package/dist/plain/compare/areDateTimesEqualBy.js +35 -10
  371. package/dist/plain/compare/areDatesEqualBy.d.ts +10 -3
  372. package/dist/plain/compare/areDatesEqualBy.js +41 -14
  373. package/dist/plain/compare/isBetweenDate.js +32 -16
  374. package/dist/plain/compare/isBetweenDateTime.js +34 -18
  375. package/dist/plain/compare/isBetweenTime.js +32 -16
  376. package/dist/plain/compare/isBusinessDay.d.ts +25 -11
  377. package/dist/plain/compare/isBusinessDay.js +36 -15
  378. package/dist/plain/compare/isThisUnit.d.ts +13 -4
  379. package/dist/plain/compare/isThisUnit.js +33 -13
  380. package/dist/plain/compare/isWeekend.d.ts +8 -4
  381. package/dist/plain/compare/isWeekend.js +7 -3
  382. package/dist/plain/convert/convertDateToCalendar.d.ts +34 -33
  383. package/dist/plain/convert/convertDateToCalendar.js +41 -40
  384. package/dist/plain/format/formatCalendar.d.ts +12 -6
  385. package/dist/plain/format/formatCalendar.js +47 -25
  386. package/dist/plain/format/formatDate.d.ts +21 -4
  387. package/dist/plain/format/formatDate.js +37 -5
  388. package/dist/plain/format/formatDateRange.d.ts +17 -4
  389. package/dist/plain/format/formatDateRange.js +29 -5
  390. package/dist/plain/format/formatDateTime.d.ts +22 -4
  391. package/dist/plain/format/formatDateTime.js +31 -5
  392. package/dist/plain/format/formatDateTimeRange.d.ts +20 -4
  393. package/dist/plain/format/formatDateTimeRange.js +29 -5
  394. package/dist/plain/format/formatDateTimeToParts.d.ts +32 -6
  395. package/dist/plain/format/formatDateTimeToParts.js +40 -14
  396. package/dist/plain/format/formatDateToParts.d.ts +24 -3
  397. package/dist/plain/format/formatDateToParts.js +36 -11
  398. package/dist/plain/format/formatRelativeDate.d.ts +7 -3
  399. package/dist/plain/format/formatRelativeDate.js +39 -24
  400. package/dist/plain/format/formatRelativeDateTime.d.ts +15 -6
  401. package/dist/plain/format/formatRelativeDateTime.js +35 -33
  402. package/dist/plain/format/formatRelativeTime.d.ts +8 -4
  403. package/dist/plain/format/formatRelativeTime.js +36 -21
  404. package/dist/plain/format/formatSql.d.ts +15 -10
  405. package/dist/plain/format/formatSql.js +20 -11
  406. package/dist/plain/format/formatTime.d.ts +18 -4
  407. package/dist/plain/format/formatTime.js +32 -5
  408. package/dist/plain/get/getNowUnit.d.ts +3 -0
  409. package/dist/plain/get/getNowUnit.js +14 -29
  410. package/dist/plain/index.js +1 -1
  411. package/dist/plain/interval/intervalAbutsDate.d.ts +12 -7
  412. package/dist/plain/interval/intervalAbutsDate.js +15 -19
  413. package/dist/plain/interval/intervalAbutsDateTime.d.ts +9 -7
  414. package/dist/plain/interval/intervalAbutsDateTime.js +17 -23
  415. package/dist/plain/interval/intervalAbutsTime.d.ts +11 -5
  416. package/dist/plain/interval/intervalAbutsTime.js +19 -21
  417. package/dist/plain/interval/intervalContainsDate.d.ts +17 -10
  418. package/dist/plain/interval/intervalContainsDate.js +20 -15
  419. package/dist/plain/interval/intervalContainsDateTime.d.ts +16 -11
  420. package/dist/plain/interval/intervalContainsDateTime.js +24 -20
  421. package/dist/plain/interval/intervalContainsTime.d.ts +20 -10
  422. package/dist/plain/interval/intervalContainsTime.js +28 -19
  423. package/dist/plain/interval/intervalCountDate.d.ts +13 -8
  424. package/dist/plain/interval/intervalCountDate.js +46 -14
  425. package/dist/plain/interval/intervalCountDateTime.d.ts +6 -4
  426. package/dist/plain/interval/intervalCountDateTime.js +63 -18
  427. package/dist/plain/interval/intervalCountTime.d.ts +3 -4
  428. package/dist/plain/interval/intervalCountTime.js +9 -9
  429. package/dist/plain/interval/intervalDifferenceDate.d.ts +13 -6
  430. package/dist/plain/interval/intervalDifferenceDate.js +19 -32
  431. package/dist/plain/interval/intervalDifferenceDateTime.d.ts +10 -4
  432. package/dist/plain/interval/intervalDifferenceDateTime.js +21 -27
  433. package/dist/plain/interval/intervalDifferenceTime.d.ts +11 -4
  434. package/dist/plain/interval/intervalDifferenceTime.js +22 -27
  435. package/dist/plain/interval/intervalDivideEquallyDate.d.ts +16 -4
  436. package/dist/plain/interval/intervalDivideEquallyDate.js +57 -33
  437. package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +16 -4
  438. package/dist/plain/interval/intervalDivideEquallyDateTime.js +67 -31
  439. package/dist/plain/interval/intervalDivideEquallyTime.d.ts +16 -4
  440. package/dist/plain/interval/intervalDivideEquallyTime.js +58 -31
  441. package/dist/plain/interval/intervalEngulfsDate.d.ts +16 -9
  442. package/dist/plain/interval/intervalEngulfsDate.js +19 -12
  443. package/dist/plain/interval/intervalEngulfsDateTime.d.ts +16 -11
  444. package/dist/plain/interval/intervalEngulfsDateTime.js +24 -18
  445. package/dist/plain/interval/intervalEngulfsTime.d.ts +18 -8
  446. package/dist/plain/interval/intervalEngulfsTime.js +26 -15
  447. package/dist/plain/interval/intervalFromDurationDate.d.ts +5 -4
  448. package/dist/plain/interval/intervalFromDurationDate.js +11 -8
  449. package/dist/plain/interval/intervalFromDurationDateTime.js +4 -0
  450. package/dist/plain/interval/intervalFromDurationTime.d.ts +10 -12
  451. package/dist/plain/interval/intervalFromDurationTime.js +28 -17
  452. package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -4
  453. package/dist/plain/interval/intervalIntersectionDate.js +14 -9
  454. package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -4
  455. package/dist/plain/interval/intervalIntersectionDateTime.js +19 -13
  456. package/dist/plain/interval/intervalIntersectionTime.d.ts +7 -3
  457. package/dist/plain/interval/intervalIntersectionTime.js +17 -12
  458. package/dist/plain/interval/intervalLengthDate.d.ts +9 -6
  459. package/dist/plain/interval/intervalLengthDate.js +40 -8
  460. package/dist/plain/interval/intervalLengthDateTime.js +2 -2
  461. package/dist/plain/interval/intervalOverlappingDaysDate.d.ts +16 -17
  462. package/dist/plain/interval/intervalOverlappingDaysDate.js +30 -30
  463. package/dist/plain/interval/intervalOverlappingDaysDateTime.d.ts +7 -12
  464. package/dist/plain/interval/intervalOverlappingDaysDateTime.js +24 -24
  465. package/dist/plain/interval/intervalSplitAtDate.d.ts +10 -5
  466. package/dist/plain/interval/intervalSplitAtDate.js +48 -36
  467. package/dist/plain/interval/intervalSplitAtDateTime.d.ts +9 -4
  468. package/dist/plain/interval/intervalSplitAtDateTime.js +44 -32
  469. package/dist/plain/interval/intervalSplitAtTime.d.ts +9 -4
  470. package/dist/plain/interval/intervalSplitAtTime.js +44 -32
  471. package/dist/plain/interval/intervalUnionDate.d.ts +14 -6
  472. package/dist/plain/interval/intervalUnionDate.js +19 -11
  473. package/dist/plain/interval/intervalUnionDateTime.d.ts +12 -5
  474. package/dist/plain/interval/intervalUnionDateTime.js +22 -14
  475. package/dist/plain/interval/intervalUnionTime.d.ts +10 -3
  476. package/dist/plain/interval/intervalUnionTime.js +20 -12
  477. package/dist/plain/interval/intervalXorAllDate.d.ts +11 -10
  478. package/dist/plain/interval/intervalXorAllDate.js +37 -59
  479. package/dist/plain/interval/intervalXorAllDateTime.d.ts +7 -5
  480. package/dist/plain/interval/intervalXorAllDateTime.js +28 -48
  481. package/dist/plain/interval/intervalXorAllTime.d.ts +8 -4
  482. package/dist/plain/interval/intervalXorAllTime.js +29 -47
  483. package/dist/plain/interval/intervalXorDate.d.ts +10 -9
  484. package/dist/plain/interval/intervalXorDate.js +19 -54
  485. package/dist/plain/interval/intervalXorDateTime.d.ts +9 -7
  486. package/dist/plain/interval/intervalXorDateTime.js +23 -50
  487. package/dist/plain/interval/intervalXorTime.d.ts +8 -7
  488. package/dist/plain/interval/intervalXorTime.js +22 -50
  489. package/dist/plain/interval/intervalsOverlapDate.d.ts +14 -7
  490. package/dist/plain/interval/intervalsOverlapDate.js +17 -10
  491. package/dist/plain/interval/intervalsOverlapDateTime.d.ts +12 -7
  492. package/dist/plain/interval/intervalsOverlapDateTime.js +20 -14
  493. package/dist/plain/interval/intervalsOverlapTime.d.ts +10 -5
  494. package/dist/plain/interval/intervalsOverlapTime.js +18 -12
  495. package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -5
  496. package/dist/plain/interval/mergeIntervalsDate.js +37 -38
  497. package/dist/plain/interval/mergeIntervalsDateTime.d.ts +7 -3
  498. package/dist/plain/interval/mergeIntervalsDateTime.js +31 -32
  499. package/dist/plain/interval/mergeIntervalsTime.d.ts +7 -3
  500. package/dist/plain/interval/mergeIntervalsTime.js +31 -31
  501. package/dist/plain/interval/splitIntervalByUnitDate.d.ts +26 -6
  502. package/dist/plain/interval/splitIntervalByUnitDate.js +76 -43
  503. package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -2
  504. package/dist/plain/interval/splitIntervalByUnitDateTime.js +65 -39
  505. package/dist/plain/interval/splitIntervalByUnitTime.d.ts +18 -2
  506. package/dist/plain/interval/splitIntervalByUnitTime.js +76 -39
  507. package/dist/plain/interval/validate/isValidDateInterval.d.ts +4 -2
  508. package/dist/plain/interval/validate/isValidDateInterval.js +4 -2
  509. package/dist/plain/interval/validate/isValidDateTimeInterval.d.ts +5 -0
  510. package/dist/plain/interval/validate/isValidDateTimeInterval.js +7 -2
  511. package/dist/plain/interval/validate/isValidTimeInterval.d.ts +5 -0
  512. package/dist/plain/interval/validate/isValidTimeInterval.js +8 -18
  513. package/dist/plain/locale/getLocaleEraNames.d.ts +14 -4
  514. package/dist/plain/locale/getLocaleEraNames.js +56 -41
  515. package/dist/plain/locale/getLocaleMeridiems.d.ts +7 -4
  516. package/dist/plain/locale/getLocaleMeridiems.js +28 -22
  517. package/dist/plain/locale/getLocaleMonthNames.d.ts +14 -4
  518. package/dist/plain/locale/getLocaleMonthNames.js +34 -19
  519. package/dist/plain/locale/getLocaleWeekdayNames.d.ts +14 -7
  520. package/dist/plain/locale/getLocaleWeekdayNames.js +40 -22
  521. package/dist/plain/map/mapDatesInRange.d.ts +18 -1
  522. package/dist/plain/map/mapDatesInRange.js +53 -17
  523. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +3 -2
  524. package/dist/plain/parse/parseDateTimeWithPattern.js +30 -24
  525. package/dist/plain/parse/parseDateWithPattern.d.ts +3 -2
  526. package/dist/plain/parse/parseDateWithPattern.js +22 -16
  527. package/dist/plain/parse/parseMicrosecondFromDateTime.d.ts +2 -1
  528. package/dist/plain/parse/parseMicrosecondFromDateTime.js +2 -1
  529. package/dist/plain/parse/parseMicrosecondFromTime.d.ts +2 -1
  530. package/dist/plain/parse/parseMicrosecondFromTime.js +2 -1
  531. package/dist/plain/parse/parseNanosecondFromDateTime.d.ts +2 -1
  532. package/dist/plain/parse/parseNanosecondFromDateTime.js +2 -1
  533. package/dist/plain/parse/parseNanosecondFromTime.d.ts +2 -1
  534. package/dist/plain/parse/parseNanosecondFromTime.js +2 -1
  535. package/dist/plain/parse/parseSql.d.ts +15 -12
  536. package/dist/plain/parse/parseSql.js +16 -13
  537. package/dist/plain/parse/parseTimeWithPattern.d.ts +3 -2
  538. package/dist/plain/parse/parseTimeWithPattern.js +27 -21
  539. package/dist/plain/parse/parseUnitFromDate.d.ts +9 -2
  540. package/dist/plain/parse/parseUnitFromDate.js +39 -19
  541. package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
  542. package/dist/plain/parse/parseUnitFromDateTime.js +54 -28
  543. package/dist/plain/parse/parseUnitFromTime.d.ts +9 -3
  544. package/dist/plain/parse/parseUnitFromTime.js +13 -3
  545. package/dist/plain/parse/parseWeekFromDate.d.ts +5 -0
  546. package/dist/plain/parse/parseWeekFromDate.js +24 -5
  547. package/dist/plain/parse/parseWeekFromDateTime.d.ts +5 -0
  548. package/dist/plain/parse/parseWeekFromDateTime.js +26 -5
  549. package/dist/plain/validate/isLeapSecond.d.ts +27 -9
  550. package/dist/plain/validate/isLeapSecond.js +30 -9
  551. package/dist/plain/validate/isLeapYear.d.ts +7 -1
  552. package/dist/plain/validate/isLeapYear.js +10 -1
  553. package/dist/plain/validate/isValidCalendarDate.d.ts +37 -6
  554. package/dist/plain/validate/isValidCalendarDate.js +37 -6
  555. package/dist/plain/validate/isValidDate.d.ts +9 -1
  556. package/dist/plain/validate/isValidDate.js +14 -5
  557. package/dist/plain/validate/isValidDateRange.d.ts +11 -4
  558. package/dist/plain/validate/isValidDateRange.js +32 -22
  559. package/dist/plain/validate/isValidDateTime.d.ts +7 -1
  560. package/dist/plain/validate/isValidDateTime.js +12 -5
  561. package/dist/plain/validate/isValidDateTimeRange.d.ts +3 -2
  562. package/dist/plain/validate/isValidDateTimeRange.js +30 -15
  563. package/dist/plain/validate/isValidIsoDateLike.d.ts +6 -1
  564. package/dist/plain/validate/isValidIsoDateLike.js +13 -8
  565. package/dist/plain/validate/isValidTime.d.ts +6 -1
  566. package/dist/plain/validate/isValidTime.js +10 -3
  567. package/dist/plain/validate/isValidTimeRange.d.ts +4 -2
  568. package/dist/plain/validate/isValidTimeRange.js +31 -27
  569. package/dist/precision/calculate/index.d.ts +1 -0
  570. package/dist/precision/calculate/index.js +1 -0
  571. package/dist/precision/calculate/truncateNanoseconds.d.ts +37 -0
  572. package/dist/precision/calculate/truncateNanoseconds.js +41 -0
  573. package/dist/precision/convert/fromDotNetTicks.d.ts +30 -0
  574. package/dist/precision/convert/fromDotNetTicks.js +39 -0
  575. package/dist/precision/convert/fromExcelSerial.d.ts +38 -0
  576. package/dist/precision/convert/fromExcelSerial.js +81 -0
  577. package/dist/precision/convert/fromFileTime.d.ts +30 -0
  578. package/dist/precision/convert/fromFileTime.js +39 -0
  579. package/dist/precision/convert/fromNanoseconds.d.ts +29 -0
  580. package/dist/precision/convert/fromNanoseconds.js +50 -0
  581. package/dist/precision/convert/fromNtpTimestamp.d.ts +43 -0
  582. package/dist/precision/convert/fromNtpTimestamp.js +57 -0
  583. package/dist/precision/convert/fromPgMicroseconds.d.ts +26 -0
  584. package/dist/precision/convert/fromPgMicroseconds.js +33 -0
  585. package/dist/precision/convert/index.d.ts +12 -0
  586. package/dist/precision/convert/index.js +12 -0
  587. package/dist/precision/convert/toDotNetTicks.d.ts +29 -0
  588. package/dist/precision/convert/toDotNetTicks.js +40 -0
  589. package/dist/precision/convert/toExcelSerial.d.ts +56 -0
  590. package/dist/precision/convert/toExcelSerial.js +85 -0
  591. package/dist/precision/convert/toFileTime.d.ts +31 -0
  592. package/dist/precision/convert/toFileTime.js +43 -0
  593. package/dist/precision/convert/toNanoseconds.d.ts +37 -0
  594. package/dist/precision/convert/toNanoseconds.js +40 -0
  595. package/dist/precision/convert/toNtpTimestamp.d.ts +30 -0
  596. package/dist/precision/convert/toNtpTimestamp.js +38 -0
  597. package/dist/precision/convert/toPgMicroseconds.d.ts +29 -0
  598. package/dist/precision/convert/toPgMicroseconds.js +42 -0
  599. package/dist/precision/format/formatNanoseconds.d.ts +26 -0
  600. package/dist/precision/format/formatNanoseconds.js +32 -0
  601. package/dist/precision/format/index.d.ts +1 -0
  602. package/dist/precision/format/index.js +1 -0
  603. package/dist/precision/index.d.ts +6 -0
  604. package/dist/precision/index.js +7 -0
  605. package/dist/precision/parse/index.d.ts +1 -0
  606. package/dist/precision/parse/index.js +1 -0
  607. package/dist/precision/parse/parseNanoseconds.d.ts +27 -0
  608. package/dist/precision/parse/parseNanoseconds.js +32 -0
  609. package/dist/precision/validate/index.d.ts +3 -0
  610. package/dist/precision/validate/index.js +3 -0
  611. package/dist/precision/validate/isValidInstant.d.ts +37 -0
  612. package/dist/precision/validate/isValidInstant.js +40 -0
  613. package/dist/precision/validate/isValidNanoPattern.d.ts +27 -0
  614. package/dist/precision/validate/isValidNanoPattern.js +40 -0
  615. package/dist/precision/validate/isValidNanoseconds.d.ts +25 -0
  616. package/dist/precision/validate/isValidNanoseconds.js +28 -0
  617. package/dist/regex/calendar-date.d.ts +25 -14
  618. package/dist/regex/calendar-date.js +26 -15
  619. package/dist/regex/calendar-zoned-date-time.d.ts +22 -38
  620. package/dist/regex/calendar-zoned-date-time.js +23 -39
  621. package/dist/regex/date-time.d.ts +14 -4
  622. package/dist/regex/date-time.js +15 -5
  623. package/dist/regex/date.d.ts +45 -3
  624. package/dist/regex/date.js +47 -5
  625. package/dist/regex/http-date.d.ts +10 -6
  626. package/dist/regex/http-date.js +10 -6
  627. package/dist/regex/index.d.ts +3 -0
  628. package/dist/regex/index.js +4 -0
  629. package/dist/regex/leap-second.d.ts +41 -8
  630. package/dist/regex/leap-second.js +42 -9
  631. package/dist/regex/nanoseconds.d.ts +20 -0
  632. package/dist/regex/nanoseconds.js +20 -0
  633. package/dist/regex/rfc-2822.d.ts +15 -7
  634. package/dist/regex/rfc-2822.js +15 -7
  635. package/dist/regex/rfc-3339.d.ts +8 -1
  636. package/dist/regex/rfc-3339.js +9 -2
  637. package/dist/regex/sql-date-time.d.ts +27 -8
  638. package/dist/regex/sql-date-time.js +28 -9
  639. package/dist/regex/time-zone-like.d.ts +24 -15
  640. package/dist/regex/time-zone-like.js +25 -16
  641. package/dist/regex/time.d.ts +20 -6
  642. package/dist/regex/time.js +20 -6
  643. package/dist/regex/unix.d.ts +13 -5
  644. package/dist/regex/unix.js +13 -5
  645. package/dist/regex/utc-date-time.d.ts +19 -9
  646. package/dist/regex/utc-date-time.js +20 -10
  647. package/dist/regex/utc-offset.d.ts +24 -0
  648. package/dist/regex/utc-offset.js +24 -0
  649. package/dist/span/calculate/index.d.ts +3 -0
  650. package/dist/span/calculate/index.js +3 -0
  651. package/dist/span/calculate/spanMs.d.ts +52 -0
  652. package/dist/span/calculate/spanMs.js +80 -0
  653. package/dist/span/calculate/spanNs.d.ts +43 -0
  654. package/dist/span/calculate/spanNs.js +51 -0
  655. package/dist/span/calculate/spanWallClock.d.ts +60 -0
  656. package/dist/span/calculate/spanWallClock.js +80 -0
  657. package/dist/span/index.d.ts +3 -0
  658. package/dist/span/index.js +4 -0
  659. package/dist/span/validate/index.d.ts +1 -0
  660. package/dist/span/validate/index.js +1 -0
  661. package/dist/span/validate/isValidSpan.d.ts +37 -0
  662. package/dist/span/validate/isValidSpan.js +41 -0
  663. package/dist/types/business-calendar.d.ts +27 -0
  664. package/dist/types/business-calendar.js +0 -0
  665. package/dist/types/calendar-system.d.ts +9 -1
  666. package/dist/types/fiscal-calendar.d.ts +22 -0
  667. package/dist/types/fiscal-calendar.js +0 -0
  668. package/dist/types/index.d.ts +6 -0
  669. package/dist/types/index.js +5 -0
  670. package/dist/types/interval.d.ts +18 -0
  671. package/dist/types/interval.js +0 -0
  672. package/dist/types/now-unit.d.ts +1 -1
  673. package/dist/types/roll-convention.d.ts +32 -0
  674. package/dist/types/roll-convention.js +0 -0
  675. package/dist/types/utc-now-unit.d.ts +1 -1
  676. package/dist/types/zone-bucket-unit.d.ts +11 -0
  677. package/dist/types/zone-bucket-unit.js +0 -0
  678. package/dist/unix/calculate/addUnix.d.ts +10 -4
  679. package/dist/unix/calculate/addUnix.js +39 -26
  680. package/dist/unix/calculate/diffUnix.d.ts +38 -11
  681. package/dist/unix/calculate/diffUnix.js +84 -40
  682. package/dist/unix/calculate/diffUnixAsDuration.d.ts +17 -7
  683. package/dist/unix/calculate/diffUnixAsDuration.js +42 -23
  684. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +15 -11
  685. package/dist/unix/calculate/endOfQuarterForUnix.js +20 -39
  686. package/dist/unix/calculate/endOfUnix.d.ts +23 -18
  687. package/dist/unix/calculate/endOfUnix.js +37 -15
  688. package/dist/unix/calculate/isBetweenUnix.d.ts +12 -6
  689. package/dist/unix/calculate/isBetweenUnix.js +34 -23
  690. package/dist/unix/calculate/maxUnix.d.ts +6 -3
  691. package/dist/unix/calculate/maxUnix.js +17 -8
  692. package/dist/unix/calculate/minUnix.d.ts +6 -3
  693. package/dist/unix/calculate/minUnix.js +17 -8
  694. package/dist/unix/calculate/roundUnix.d.ts +24 -10
  695. package/dist/unix/calculate/roundUnix.js +67 -42
  696. package/dist/unix/calculate/setUnix.d.ts +14 -5
  697. package/dist/unix/calculate/setUnix.js +48 -29
  698. package/dist/unix/calculate/sortUnix.d.ts +6 -3
  699. package/dist/unix/calculate/sortUnix.js +19 -11
  700. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +17 -12
  701. package/dist/unix/calculate/startOfQuarterForUnix.js +22 -30
  702. package/dist/unix/calculate/startOfUnix.d.ts +23 -18
  703. package/dist/unix/calculate/startOfUnix.js +37 -15
  704. package/dist/unix/calculate/subtractUnix.d.ts +10 -4
  705. package/dist/unix/calculate/subtractUnix.js +39 -26
  706. package/dist/unix/compare/areUnixEqual.d.ts +9 -5
  707. package/dist/unix/compare/areUnixEqual.js +17 -13
  708. package/dist/unix/compare/areUnixEqualBy.d.ts +14 -7
  709. package/dist/unix/compare/areUnixEqualBy.js +14 -7
  710. package/dist/unix/compare/isAfterUnix.d.ts +8 -4
  711. package/dist/unix/compare/isAfterUnix.js +16 -12
  712. package/dist/unix/compare/isBeforeUnix.d.ts +7 -4
  713. package/dist/unix/compare/isBeforeUnix.js +15 -12
  714. package/dist/unix/convert/convertUnixToPlainDate.d.ts +17 -9
  715. package/dist/unix/convert/convertUnixToPlainDate.js +34 -21
  716. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +15 -9
  717. package/dist/unix/convert/convertUnixToPlainDateTime.js +32 -21
  718. package/dist/unix/convert/convertUnixToPlainTime.d.ts +15 -9
  719. package/dist/unix/convert/convertUnixToPlainTime.js +32 -21
  720. package/dist/unix/convert/convertUnixToUtc.d.ts +15 -7
  721. package/dist/unix/convert/convertUnixToUtc.js +20 -15
  722. package/dist/unix/convert/convertUnixToZoned.d.ts +17 -10
  723. package/dist/unix/convert/convertUnixToZoned.js +31 -20
  724. package/dist/unix/format/formatCalendarUnix.d.ts +22 -19
  725. package/dist/unix/format/formatCalendarUnix.js +35 -81
  726. package/dist/unix/format/formatRelativeUnix.d.ts +25 -8
  727. package/dist/unix/format/formatRelativeUnix.js +46 -93
  728. package/dist/unix/format/formatUnix.d.ts +26 -4
  729. package/dist/unix/format/formatUnix.js +48 -34
  730. package/dist/unix/get/getUnixNow.d.ts +13 -7
  731. package/dist/unix/get/getUnixNow.js +27 -17
  732. package/dist/unix/get/getUnixNowUnit.d.ts +5 -2
  733. package/dist/unix/get/getUnixNowUnit.js +9 -35
  734. package/dist/unix/index.d.ts +1 -0
  735. package/dist/unix/index.js +2 -0
  736. package/dist/unix/interval/intervalAbutsUnix.d.ts +17 -12
  737. package/dist/unix/interval/intervalAbutsUnix.js +23 -41
  738. package/dist/unix/interval/intervalContainsUnix.d.ts +17 -7
  739. package/dist/unix/interval/intervalContainsUnix.js +25 -37
  740. package/dist/unix/interval/intervalCountUnix.d.ts +30 -13
  741. package/dist/unix/interval/intervalCountUnix.js +49 -23
  742. package/dist/unix/interval/intervalDifferenceUnix.d.ts +19 -10
  743. package/dist/unix/interval/intervalDifferenceUnix.js +25 -43
  744. package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +24 -10
  745. package/dist/unix/interval/intervalDivideEquallyUnix.js +57 -36
  746. package/dist/unix/interval/intervalEngulfsUnix.d.ts +13 -7
  747. package/dist/unix/interval/intervalEngulfsUnix.js +18 -30
  748. package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -6
  749. package/dist/unix/interval/intervalFromDurationUnix.js +51 -39
  750. package/dist/unix/interval/intervalIntersectionUnix.d.ts +18 -11
  751. package/dist/unix/interval/intervalIntersectionUnix.js +25 -46
  752. package/dist/unix/interval/intervalLengthUnix.d.ts +21 -9
  753. package/dist/unix/interval/intervalLengthUnix.js +41 -18
  754. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +26 -12
  755. package/dist/unix/interval/intervalOverlappingDaysUnix.js +67 -63
  756. package/dist/unix/interval/intervalSplitAtUnix.d.ts +11 -6
  757. package/dist/unix/interval/intervalSplitAtUnix.js +41 -34
  758. package/dist/unix/interval/intervalUnionUnix.d.ts +15 -9
  759. package/dist/unix/interval/intervalUnionUnix.js +20 -42
  760. package/dist/unix/interval/intervalXorAllUnix.d.ts +8 -6
  761. package/dist/unix/interval/intervalXorAllUnix.js +21 -56
  762. package/dist/unix/interval/intervalXorUnix.d.ts +22 -11
  763. package/dist/unix/interval/intervalXorUnix.js +28 -56
  764. package/dist/unix/interval/intervalsOverlapUnix.d.ts +16 -10
  765. package/dist/unix/interval/intervalsOverlapUnix.js +21 -37
  766. package/dist/unix/interval/mergeIntervalsUnix.d.ts +10 -4
  767. package/dist/unix/interval/mergeIntervalsUnix.js +25 -36
  768. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +38 -8
  769. package/dist/unix/interval/splitIntervalByUnitUnix.js +72 -56
  770. package/dist/unix/interval/validate/isValidUnixInterval.d.ts +12 -6
  771. package/dist/unix/interval/validate/isValidUnixInterval.js +17 -16
  772. package/dist/unix/parse/index.d.ts +2 -0
  773. package/dist/unix/parse/index.js +2 -0
  774. package/dist/unix/parse/parseDateFromUnix.d.ts +10 -8
  775. package/dist/unix/parse/parseDateFromUnix.js +17 -29
  776. package/dist/unix/parse/parseDayFromUnix.d.ts +6 -4
  777. package/dist/unix/parse/parseDayFromUnix.js +18 -5
  778. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +8 -5
  779. package/dist/unix/parse/parseDayOfWeekFromUnix.js +15 -28
  780. package/dist/unix/parse/parseHourFromUnix.d.ts +6 -4
  781. package/dist/unix/parse/parseHourFromUnix.js +18 -5
  782. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
  783. package/dist/unix/parse/parseMicrosecondFromUnix.js +16 -3
  784. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
  785. package/dist/unix/parse/parseMillisecondFromUnix.js +16 -3
  786. package/dist/unix/parse/parseMinuteFromUnix.d.ts +6 -4
  787. package/dist/unix/parse/parseMinuteFromUnix.js +18 -5
  788. package/dist/unix/parse/parseMonthFromUnix.d.ts +6 -4
  789. package/dist/unix/parse/parseMonthFromUnix.js +18 -5
  790. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +8 -5
  791. package/dist/unix/parse/parseNanosecondFromUnix.js +20 -6
  792. package/dist/unix/parse/parseSecondFromUnix.d.ts +5 -3
  793. package/dist/unix/parse/parseSecondFromUnix.js +17 -4
  794. package/dist/unix/parse/parseTimeFromUnix.d.ts +10 -8
  795. package/dist/unix/parse/parseTimeFromUnix.js +17 -29
  796. package/dist/unix/parse/parseUnitFromUnix.d.ts +18 -11
  797. package/dist/unix/parse/parseUnitFromUnix.js +57 -55
  798. package/dist/unix/parse/parseWeekFromUnix.d.ts +15 -7
  799. package/dist/unix/parse/parseWeekFromUnix.js +32 -30
  800. package/dist/unix/parse/parseYearFromUnix.d.ts +5 -3
  801. package/dist/unix/parse/parseYearFromUnix.js +17 -4
  802. package/dist/unix/validate/isValidUnixMilliseconds.d.ts +8 -5
  803. package/dist/unix/validate/isValidUnixMilliseconds.js +10 -9
  804. package/dist/unix/validate/isValidUnixRange.d.ts +13 -7
  805. package/dist/unix/validate/isValidUnixRange.js +29 -19
  806. package/dist/unix/validate/isValidUnixSeconds.d.ts +8 -5
  807. package/dist/unix/validate/isValidUnixSeconds.js +10 -9
  808. package/dist/unix/validate/isValidUnixUnit.d.ts +9 -7
  809. package/dist/unix/validate/isValidUnixUnit.js +6 -8
  810. package/dist/utc/calculate/addUtc.js +26 -12
  811. package/dist/utc/calculate/diffUtc.d.ts +22 -7
  812. package/dist/utc/calculate/diffUtc.js +75 -31
  813. package/dist/utc/calculate/diffUtcAsDuration.d.ts +2 -2
  814. package/dist/utc/calculate/diffUtcAsDuration.js +10 -3
  815. package/dist/utc/calculate/endOfQuarterForUtc.d.ts +1 -1
  816. package/dist/utc/calculate/endOfQuarterForUtc.js +1 -1
  817. package/dist/utc/calculate/endOfUtc.d.ts +11 -4
  818. package/dist/utc/calculate/endOfUtc.js +22 -5
  819. package/dist/utc/calculate/isBetweenUtc.js +40 -24
  820. package/dist/utc/calculate/maxUtc.js +19 -12
  821. package/dist/utc/calculate/minUtc.js +19 -12
  822. package/dist/utc/calculate/roundUtc.d.ts +16 -2
  823. package/dist/utc/calculate/roundUtc.js +42 -31
  824. package/dist/utc/calculate/setUtc.d.ts +4 -8
  825. package/dist/utc/calculate/setUtc.js +25 -18
  826. package/dist/utc/calculate/sortUtc.js +17 -10
  827. package/dist/utc/calculate/startOfQuarterForUtc.d.ts +2 -0
  828. package/dist/utc/calculate/startOfQuarterForUtc.js +12 -1
  829. package/dist/utc/calculate/startOfUtc.d.ts +6 -4
  830. package/dist/utc/calculate/startOfUtc.js +17 -5
  831. package/dist/utc/calculate/subtractUtc.js +26 -12
  832. package/dist/utc/chop/chopUtc.d.ts +5 -2
  833. package/dist/utc/chop/chopUtc.js +8 -4
  834. package/dist/utc/compare/areUtcEqualBy.d.ts +10 -5
  835. package/dist/utc/compare/areUtcEqualBy.js +34 -11
  836. package/dist/utc/convert/convertUtcToPlainDate.js +22 -10
  837. package/dist/utc/convert/convertUtcToPlainDateTime.js +28 -16
  838. package/dist/utc/convert/convertUtcToPlainTime.js +22 -10
  839. package/dist/utc/convert/convertUtcToUnix.d.ts +12 -5
  840. package/dist/utc/convert/convertUtcToUnix.js +22 -13
  841. package/dist/utc/format/formatCalendarUtc.d.ts +11 -6
  842. package/dist/utc/format/formatCalendarUtc.js +32 -41
  843. package/dist/utc/format/formatHttp.d.ts +9 -3
  844. package/dist/utc/format/formatHttp.js +14 -12
  845. package/dist/utc/format/formatRelativeUtc.d.ts +18 -6
  846. package/dist/utc/format/formatRelativeUtc.js +43 -51
  847. package/dist/utc/format/formatUtc.d.ts +20 -3
  848. package/dist/utc/format/formatUtc.js +41 -12
  849. package/dist/utc/get/getUtcNowUnit.d.ts +3 -0
  850. package/dist/utc/get/getUtcNowUnit.js +11 -33
  851. package/dist/utc/index.d.ts +1 -0
  852. package/dist/utc/index.js +2 -0
  853. package/dist/utc/interval/intervalAbutsUtc.d.ts +10 -7
  854. package/dist/utc/interval/intervalAbutsUtc.js +18 -30
  855. package/dist/utc/interval/intervalContainsUtc.d.ts +19 -11
  856. package/dist/utc/interval/intervalContainsUtc.js +33 -34
  857. package/dist/utc/interval/intervalCountUtc.d.ts +3 -4
  858. package/dist/utc/interval/intervalCountUtc.js +12 -18
  859. package/dist/utc/interval/intervalDifferenceUtc.d.ts +13 -5
  860. package/dist/utc/interval/intervalDifferenceUtc.js +25 -51
  861. package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +16 -3
  862. package/dist/utc/interval/intervalDivideEquallyUtc.js +54 -34
  863. package/dist/utc/interval/intervalEngulfsUtc.d.ts +17 -12
  864. package/dist/utc/interval/intervalEngulfsUtc.js +25 -26
  865. package/dist/utc/interval/intervalFromDurationUtc.js +5 -0
  866. package/dist/utc/interval/intervalIntersectionUtc.d.ts +12 -6
  867. package/dist/utc/interval/intervalIntersectionUtc.js +24 -41
  868. package/dist/utc/interval/intervalLengthUtc.js +5 -7
  869. package/dist/utc/interval/intervalOverlappingDaysUtc.d.ts +7 -13
  870. package/dist/utc/interval/intervalOverlappingDaysUtc.js +25 -36
  871. package/dist/utc/interval/intervalSplitAtUtc.d.ts +7 -2
  872. package/dist/utc/interval/intervalSplitAtUtc.js +39 -33
  873. package/dist/utc/interval/intervalUnionUtc.d.ts +15 -7
  874. package/dist/utc/interval/intervalUnionUtc.js +31 -42
  875. package/dist/utc/interval/intervalXorAllUtc.d.ts +7 -4
  876. package/dist/utc/interval/intervalXorAllUtc.js +30 -52
  877. package/dist/utc/interval/intervalXorUtc.d.ts +8 -6
  878. package/dist/utc/interval/intervalXorUtc.js +22 -56
  879. package/dist/utc/interval/intervalsOverlapUtc.d.ts +15 -9
  880. package/dist/utc/interval/intervalsOverlapUtc.js +23 -39
  881. package/dist/utc/interval/mergeIntervalsUtc.d.ts +9 -2
  882. package/dist/utc/interval/mergeIntervalsUtc.js +23 -36
  883. package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +23 -2
  884. package/dist/utc/interval/splitIntervalByUnitUtc.js +65 -44
  885. package/dist/utc/interval/validate/isValidUtcInterval.d.ts +5 -0
  886. package/dist/utc/interval/validate/isValidUtcInterval.js +7 -6
  887. package/dist/utc/parse/parseDateFromUtc.d.ts +7 -1
  888. package/dist/utc/parse/parseDateFromUtc.js +14 -9
  889. package/dist/utc/parse/parseDayFromUtc.d.ts +7 -1
  890. package/dist/utc/parse/parseDayFromUtc.js +14 -8
  891. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -1
  892. package/dist/utc/parse/parseDayOfWeekFromUtc.js +24 -6
  893. package/dist/utc/parse/parseHourFromUtc.d.ts +7 -1
  894. package/dist/utc/parse/parseHourFromUtc.js +14 -8
  895. package/dist/utc/parse/parseHttp.d.ts +39 -14
  896. package/dist/utc/parse/parseHttp.js +69 -28
  897. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +9 -2
  898. package/dist/utc/parse/parseMicrosecondFromUtc.js +18 -9
  899. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -1
  900. package/dist/utc/parse/parseMillisecondFromUtc.js +16 -8
  901. package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -1
  902. package/dist/utc/parse/parseMinuteFromUtc.js +14 -8
  903. package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -1
  904. package/dist/utc/parse/parseMonthFromUtc.js +14 -8
  905. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +9 -2
  906. package/dist/utc/parse/parseNanosecondFromUtc.js +18 -9
  907. package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -1
  908. package/dist/utc/parse/parseSecondFromUtc.js +14 -8
  909. package/dist/utc/parse/parseTimeFromUtc.js +21 -10
  910. package/dist/utc/parse/parseUnitFromUtc.d.ts +18 -7
  911. package/dist/utc/parse/parseUnitFromUtc.js +58 -31
  912. package/dist/utc/parse/parseWeekFromUtc.d.ts +16 -3
  913. package/dist/utc/parse/parseWeekFromUtc.js +38 -10
  914. package/dist/utc/parse/parseYearFromUtc.d.ts +7 -1
  915. package/dist/utc/parse/parseYearFromUtc.js +14 -8
  916. package/dist/utc/validate/isValidUtc.d.ts +8 -1
  917. package/dist/utc/validate/isValidUtc.js +12 -3
  918. package/dist/utc/validate/isValidUtcRange.d.ts +3 -2
  919. package/dist/utc/validate/isValidUtcRange.js +30 -19
  920. package/dist/zoned/calculate/addZoned.d.ts +40 -27
  921. package/dist/zoned/calculate/addZoned.js +71 -56
  922. package/dist/zoned/calculate/addZonedBusinessDays.d.ts +2 -0
  923. package/dist/zoned/calculate/addZonedBusinessDays.js +5 -2
  924. package/dist/zoned/calculate/clampZoned.js +4 -3
  925. package/dist/zoned/calculate/closestZonedTo.d.ts +6 -6
  926. package/dist/zoned/calculate/closestZonedTo.js +35 -26
  927. package/dist/zoned/calculate/cycleZoned.d.ts +10 -7
  928. package/dist/zoned/calculate/cycleZoned.js +19 -11
  929. package/dist/zoned/calculate/diffZoned.d.ts +39 -17
  930. package/dist/zoned/calculate/diffZoned.js +90 -45
  931. package/dist/zoned/calculate/diffZonedAsDuration.d.ts +19 -9
  932. package/dist/zoned/calculate/diffZonedAsDuration.js +32 -15
  933. package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +11 -11
  934. package/dist/zoned/calculate/endOfQuarterForZoned.js +32 -31
  935. package/dist/zoned/calculate/endOfZoned.d.ts +21 -14
  936. package/dist/zoned/calculate/endOfZoned.js +25 -111
  937. package/dist/zoned/calculate/getHoursInZonedDay.d.ts +8 -1
  938. package/dist/zoned/calculate/getHoursInZonedDay.js +10 -14
  939. package/dist/zoned/calculate/getLocaleZonedDayOfWeek.d.ts +8 -4
  940. package/dist/zoned/calculate/getLocaleZonedDayOfWeek.js +9 -6
  941. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +20 -26
  942. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +40 -44
  943. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +16 -24
  944. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +36 -42
  945. package/dist/zoned/calculate/getQuarterForZoned.js +2 -2
  946. package/dist/zoned/calculate/maxZoned.js +20 -12
  947. package/dist/zoned/calculate/minZoned.d.ts +1 -1
  948. package/dist/zoned/calculate/minZoned.js +21 -13
  949. package/dist/zoned/calculate/roundZoned.d.ts +18 -4
  950. package/dist/zoned/calculate/roundZoned.js +58 -33
  951. package/dist/zoned/calculate/setZoned.d.ts +9 -3
  952. package/dist/zoned/calculate/setZoned.js +39 -18
  953. package/dist/zoned/calculate/sortZoned.js +18 -10
  954. package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +4 -7
  955. package/dist/zoned/calculate/startOfQuarterForZoned.js +23 -17
  956. package/dist/zoned/calculate/startOfZoned.d.ts +17 -13
  957. package/dist/zoned/calculate/startOfZoned.js +21 -103
  958. package/dist/zoned/calculate/subtractZoned.d.ts +36 -24
  959. package/dist/zoned/calculate/subtractZoned.js +66 -50
  960. package/dist/zoned/calculate/subtractZonedBusinessDays.d.ts +2 -0
  961. package/dist/zoned/calculate/subtractZonedBusinessDays.js +5 -2
  962. package/dist/zoned/chop/chopZonedDate.js +2 -2
  963. package/dist/zoned/chop/chopZonedDateTime.js +2 -2
  964. package/dist/zoned/chop/chopZonedMilliseconds.js +2 -2
  965. package/dist/zoned/chop/chopZonedSeconds.js +2 -2
  966. package/dist/zoned/chop/chopZonedTime.js +2 -2
  967. package/dist/zoned/chop/chopZonedTimezone.js +2 -2
  968. package/dist/zoned/compare/areZonedEqual.js +3 -2
  969. package/dist/zoned/compare/areZonedEqualBy.d.ts +15 -2
  970. package/dist/zoned/compare/areZonedEqualBy.js +45 -12
  971. package/dist/zoned/compare/isAfterZoned.js +3 -2
  972. package/dist/zoned/compare/isBeforeZoned.d.ts +1 -1
  973. package/dist/zoned/compare/isBeforeZoned.js +4 -3
  974. package/dist/zoned/compare/isBetweenZoned.js +46 -29
  975. package/dist/zoned/compare/isInDaylightSaving.js +4 -4
  976. package/dist/zoned/compare/isZonedBusinessDay.d.ts +7 -4
  977. package/dist/zoned/compare/isZonedBusinessDay.js +9 -6
  978. package/dist/zoned/compare/isZonedFuture.js +2 -1
  979. package/dist/zoned/compare/isZonedPast.js +2 -1
  980. package/dist/zoned/compare/isZonedRelativeDay.js +2 -1
  981. package/dist/zoned/compare/isZonedThisUnit.d.ts +12 -4
  982. package/dist/zoned/compare/isZonedThisUnit.js +37 -16
  983. package/dist/zoned/compare/isZonedWeekend.d.ts +8 -4
  984. package/dist/zoned/compare/isZonedWeekend.js +9 -6
  985. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +10 -5
  986. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +34 -16
  987. package/dist/zoned/convert/convertZonedToCalendar.d.ts +26 -38
  988. package/dist/zoned/convert/convertZonedToCalendar.js +33 -48
  989. package/dist/zoned/convert/convertZonedToPlainDateTime.d.ts +6 -0
  990. package/dist/zoned/convert/convertZonedToPlainDateTime.js +8 -2
  991. package/dist/zoned/convert/convertZonedToUnix.d.ts +12 -6
  992. package/dist/zoned/convert/convertZonedToUnix.js +23 -16
  993. package/dist/zoned/convert/convertZonedToUtc.js +2 -2
  994. package/dist/zoned/convert/convertZonedToZoned.js +2 -2
  995. package/dist/zoned/format/formatCalendarZoned.d.ts +7 -3
  996. package/dist/zoned/format/formatCalendarZoned.js +37 -39
  997. package/dist/zoned/format/formatRelativeZoned.d.ts +15 -6
  998. package/dist/zoned/format/formatRelativeZoned.js +54 -54
  999. package/dist/zoned/format/formatRfc2822.d.ts +14 -1
  1000. package/dist/zoned/format/formatRfc2822.js +27 -13
  1001. package/dist/zoned/format/formatRfc3339.d.ts +14 -1
  1002. package/dist/zoned/format/formatRfc3339.js +29 -3
  1003. package/dist/zoned/format/formatTimeZoneName.d.ts +3 -2
  1004. package/dist/zoned/format/formatTimeZoneName.js +28 -18
  1005. package/dist/zoned/format/formatZonedDateTime.d.ts +25 -5
  1006. package/dist/zoned/format/formatZonedDateTime.js +40 -9
  1007. package/dist/zoned/format/formatZonedRange.d.ts +24 -6
  1008. package/dist/zoned/format/formatZonedRange.js +61 -28
  1009. package/dist/zoned/format/formatZonedToParts.d.ts +29 -6
  1010. package/dist/zoned/format/formatZonedToParts.js +42 -13
  1011. package/dist/zoned/get/getDstTransitions.d.ts +6 -1
  1012. package/dist/zoned/get/getDstTransitions.js +17 -15
  1013. package/dist/zoned/get/getTimeZoneOffset.d.ts +11 -1
  1014. package/dist/zoned/get/getTimeZoneOffset.js +19 -2
  1015. package/dist/zoned/get/getZonedNow.js +20 -9
  1016. package/dist/zoned/get/getZonedNowUnit.d.ts +8 -4
  1017. package/dist/zoned/get/getZonedNowUnit.js +15 -31
  1018. package/dist/zoned/index.js +1 -1
  1019. package/dist/zoned/interval/intervalAbutsZoned.d.ts +18 -11
  1020. package/dist/zoned/interval/intervalAbutsZoned.js +24 -25
  1021. package/dist/zoned/interval/intervalContainsZoned.d.ts +16 -7
  1022. package/dist/zoned/interval/intervalContainsZoned.js +22 -14
  1023. package/dist/zoned/interval/intervalCountZoned.d.ts +19 -11
  1024. package/dist/zoned/interval/intervalCountZoned.js +32 -27
  1025. package/dist/zoned/interval/intervalDifferenceZoned.d.ts +13 -7
  1026. package/dist/zoned/interval/intervalDifferenceZoned.js +24 -36
  1027. package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +18 -9
  1028. package/dist/zoned/interval/intervalDivideEquallyZoned.js +67 -46
  1029. package/dist/zoned/interval/intervalEngulfsZoned.d.ts +10 -5
  1030. package/dist/zoned/interval/intervalEngulfsZoned.js +16 -10
  1031. package/dist/zoned/interval/intervalFromDurationZoned.d.ts +25 -11
  1032. package/dist/zoned/interval/intervalFromDurationZoned.js +61 -44
  1033. package/dist/zoned/interval/intervalIntersectionZoned.d.ts +12 -6
  1034. package/dist/zoned/interval/intervalIntersectionZoned.js +24 -18
  1035. package/dist/zoned/interval/intervalLengthZoned.d.ts +15 -6
  1036. package/dist/zoned/interval/intervalLengthZoned.js +23 -9
  1037. package/dist/zoned/interval/intervalOverlappingDaysZoned.d.ts +28 -17
  1038. package/dist/zoned/interval/intervalOverlappingDaysZoned.js +46 -34
  1039. package/dist/zoned/interval/intervalSplitAtZoned.d.ts +6 -3
  1040. package/dist/zoned/interval/intervalSplitAtZoned.js +52 -42
  1041. package/dist/zoned/interval/intervalUnionZoned.d.ts +14 -8
  1042. package/dist/zoned/interval/intervalUnionZoned.js +25 -20
  1043. package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -7
  1044. package/dist/zoned/interval/intervalXorAllZoned.js +42 -73
  1045. package/dist/zoned/interval/intervalXorZoned.d.ts +20 -12
  1046. package/dist/zoned/interval/intervalXorZoned.js +34 -64
  1047. package/dist/zoned/interval/intervalsOverlapZoned.d.ts +15 -7
  1048. package/dist/zoned/interval/intervalsOverlapZoned.js +21 -12
  1049. package/dist/zoned/interval/mergeIntervalsZoned.d.ts +10 -3
  1050. package/dist/zoned/interval/mergeIntervalsZoned.js +44 -41
  1051. package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +28 -5
  1052. package/dist/zoned/interval/splitIntervalByUnitZoned.js +72 -39
  1053. package/dist/zoned/interval/validate/isValidCalendarZonedInterval.d.ts +13 -10
  1054. package/dist/zoned/interval/validate/isValidCalendarZonedInterval.js +13 -10
  1055. package/dist/zoned/interval/validate/isValidZonedInterval.d.ts +7 -5
  1056. package/dist/zoned/interval/validate/isValidZonedInterval.js +12 -16
  1057. package/dist/zoned/map/mapZonedDatesInRange.d.ts +17 -1
  1058. package/dist/zoned/map/mapZonedDatesInRange.js +62 -26
  1059. package/dist/zoned/map/mapZonedHoursInDay.d.ts +10 -13
  1060. package/dist/zoned/map/mapZonedHoursInDay.js +13 -21
  1061. package/dist/zoned/parse/getZonedOffset.js +2 -2
  1062. package/dist/zoned/parse/getZonedOffsetAs.d.ts +4 -2
  1063. package/dist/zoned/parse/getZonedOffsetAs.js +10 -5
  1064. package/dist/zoned/parse/parseDateFromZoned.js +2 -2
  1065. package/dist/zoned/parse/parseDateTimeFromZoned.js +2 -2
  1066. package/dist/zoned/parse/parseDayFromZoned.js +2 -2
  1067. package/dist/zoned/parse/parseDayOfWeekFromZoned.js +2 -2
  1068. package/dist/zoned/parse/parseHourFromZoned.js +2 -2
  1069. package/dist/zoned/parse/parseMicrosecondFromZoned.d.ts +2 -1
  1070. package/dist/zoned/parse/parseMicrosecondFromZoned.js +4 -3
  1071. package/dist/zoned/parse/parseMillisecondFromZoned.js +2 -2
  1072. package/dist/zoned/parse/parseMinuteFromZoned.js +2 -2
  1073. package/dist/zoned/parse/parseMonthFromZoned.js +2 -2
  1074. package/dist/zoned/parse/parseNanosecondFromZoned.d.ts +2 -1
  1075. package/dist/zoned/parse/parseNanosecondFromZoned.js +4 -3
  1076. package/dist/zoned/parse/parseRfc2822.d.ts +32 -12
  1077. package/dist/zoned/parse/parseRfc2822.js +47 -45
  1078. package/dist/zoned/parse/parseRfc3339.d.ts +6 -0
  1079. package/dist/zoned/parse/parseRfc3339.js +6 -0
  1080. package/dist/zoned/parse/parseSecondFromZoned.js +2 -2
  1081. package/dist/zoned/parse/parseTimeFromZoned.js +2 -2
  1082. package/dist/zoned/parse/parseTimeZoneFromZoned.js +2 -2
  1083. package/dist/zoned/parse/parseUnitFromZoned.d.ts +14 -5
  1084. package/dist/zoned/parse/parseUnitFromZoned.js +59 -33
  1085. package/dist/zoned/parse/parseWeekFromZoned.d.ts +13 -3
  1086. package/dist/zoned/parse/parseWeekFromZoned.js +34 -10
  1087. package/dist/zoned/parse/parseYearFromZoned.js +2 -2
  1088. package/dist/zoned/validate/hasDaylightSaving.js +3 -3
  1089. package/dist/zoned/validate/isValidCalendarZonedDateTime.d.ts +31 -16
  1090. package/dist/zoned/validate/isValidCalendarZonedDateTime.js +31 -16
  1091. package/dist/zoned/validate/isValidTimeZone.d.ts +15 -2
  1092. package/dist/zoned/validate/isValidTimeZone.js +17 -4
  1093. package/dist/zoned/validate/isValidZonedDateTime.d.ts +14 -7
  1094. package/dist/zoned/validate/isValidZonedDateTime.js +20 -12
  1095. package/dist/zoned/validate/isValidZonedRange.d.ts +9 -2
  1096. package/dist/zoned/validate/isValidZonedRange.js +44 -16
  1097. package/package.json +475 -34
  1098. package/skills/gmt-arithmetic/SKILL.md +197 -16
  1099. package/skills/gmt-basics/SKILL.md +61 -14
  1100. package/skills/gmt-integration/SKILL.md +54 -8
  1101. package/skills/gmt-timezone/SKILL.md +141 -24
  1102. package/dist/internal/advanceBusinessDays.d.ts +0 -2
  1103. package/dist/internal/advanceBusinessDays.js +0 -15
  1104. package/dist/internal/ethiopicFamilyCalendar.d.ts +0 -47
  1105. package/dist/internal/ethiopicFamilyCalendar.js +0 -136
  1106. package/dist/internal/getLocaleMinimalDaysInFirstWeek.d.ts +0 -20
  1107. package/dist/internal/getLocaleMinimalDaysInFirstWeek.js +0 -31
  1108. package/dist/internal/resolveUnixTimeZone.d.ts +0 -20
  1109. package/dist/internal/resolveUnixTimeZone.js +0 -30
  1110. package/dist/unix/calculate/startOrEndOfUnix.d.ts +0 -27
  1111. package/dist/unix/calculate/startOrEndOfUnix.js +0 -140
  1112. package/dist/unix/interval/resolveUnixIntervalPair.d.ts +0 -7
  1113. package/dist/unix/interval/resolveUnixIntervalPair.js +0 -36
@@ -0,0 +1,1173 @@
1
+ import { Temporal } from "@js-temporal/polyfill";
2
+ import { MAX_EPOCH_NANOSECONDS, MIN_EPOCH_NANOSECONDS, } from "./epochNanoseconds.js";
3
+ import { calendarDateAdd as compatCalendarDateAdd, calendarDateUntil as compatCalendarDateUntil, isCalendarArithmeticCompatNeeded, isNudgeWindowCompatNeeded, } from "./temporalCompat/index.js";
4
+ import { epochNanosecondsFor, isNamedTimeZone, isValidEpoch, utcEpochNanoseconds, zonedDateTimeFrom, } from "./zonedWallClock.js";
5
+ const UNITS = [
6
+ "year",
7
+ "month",
8
+ "week",
9
+ "day",
10
+ "hour",
11
+ "minute",
12
+ "second",
13
+ "millisecond",
14
+ "microsecond",
15
+ "nanosecond",
16
+ ];
17
+ const NANOSECONDS_PER_HOUR = 3600000000000n;
18
+ const NANOSECONDS_PER_DAY = 24n * NANOSECONDS_PER_HOUR;
19
+ /** TC39 Table "Temporal units by descending magnitude", "Length in Nanoseconds" column. */
20
+ const NANOSECONDS_PER_TIME_UNIT = {
21
+ hour: NANOSECONDS_PER_HOUR,
22
+ minute: 60000000000n,
23
+ second: 1000000000n,
24
+ millisecond: 1000000n,
25
+ microsecond: 1000n,
26
+ nanosecond: 1n,
27
+ };
28
+ /** Upper bound on one unit's exact length in any zone: 366-day years, 31-day months, 2-day days. */
29
+ const UNIT_REACH = {
30
+ year: 366n * NANOSECONDS_PER_DAY,
31
+ month: 31n * NANOSECONDS_PER_DAY,
32
+ week: 7n * NANOSECONDS_PER_DAY,
33
+ day: 2n * NANOSECONDS_PER_DAY,
34
+ ...NANOSECONDS_PER_TIME_UNIT,
35
+ };
36
+ /** A wall clock lies within a day of its exact time, and the offset probes look one day further. */
37
+ const LIMIT_MARGIN = 2n * NANOSECONDS_PER_DAY;
38
+ /** TC39 `maxTimeDuration`: 2^53 × 10^9 − 1 nanoseconds. */
39
+ const MAX_TIME_DURATION = 2n ** 53n * 1000000000n - 1n;
40
+ /** The zone that resolves exactly like `"UTC"` in the spec but through the validating branch. */
41
+ const UTC_EQUIVALENT_OFFSET_ZONE = "+00:00";
42
+ /** Validates Temporal options exactly as the wrapped method does, far from any limit. */
43
+ const OPTIONS_PROBE = new Temporal.ZonedDateTime(0n, "UTC");
44
+ const ZERO_DURATION = new Temporal.Duration();
45
+ /** An RFC 9557 time zone annotation (`[Europe/London]`, `[!+01:00]`), never a `key=value` one. */
46
+ const TIME_ZONE_ANNOTATION = /\[!?[^\]=]+\]/;
47
+ const ZERO_DATE_DURATION = {
48
+ years: 0,
49
+ months: 0,
50
+ weeks: 0,
51
+ days: 0,
52
+ };
53
+ // ---------------------------------------------------------------------------------------------
54
+ // Units, signs and rounding
55
+ // ---------------------------------------------------------------------------------------------
56
+ /** A Temporal unit name, singular or plural, or null when it is not one. */
57
+ function toUnit(value) {
58
+ if (typeof value !== "string")
59
+ return null;
60
+ const singular = value.endsWith("s") ? value.slice(0, -1) : value;
61
+ return UNITS.find((unit) => unit === singular) ?? null;
62
+ }
63
+ /** TC39 `TemporalUnitCategory(unit)` is ~date~. */
64
+ function isDateUnit(unit) {
65
+ return UNITS.indexOf(unit) <= UNITS.indexOf("day");
66
+ }
67
+ /** TC39 `LargerOfTwoTemporalUnits`. */
68
+ function largerUnit(one, two) {
69
+ return UNITS.indexOf(one) <= UNITS.indexOf(two) ? one : two;
70
+ }
71
+ function bigintSign(value) {
72
+ if (value < 0n)
73
+ return -1;
74
+ return value > 0n ? 1 : 0;
75
+ }
76
+ function bigintAbs(value) {
77
+ return value < 0n ? -value : value;
78
+ }
79
+ /** TC39 `DateDurationSign`. */
80
+ function dateDurationSign(duration) {
81
+ for (const value of [
82
+ duration.years,
83
+ duration.months,
84
+ duration.weeks,
85
+ duration.days,
86
+ ]) {
87
+ if (value !== 0)
88
+ return value < 0 ? -1 : 1;
89
+ }
90
+ return 0;
91
+ }
92
+ /** TC39 `InternalDurationSign`. */
93
+ function internalDurationSign(duration) {
94
+ return dateDurationSign(duration.date) || bigintSign(duration.time);
95
+ }
96
+ /** TC39 `AdjustDateDurationRecord`. */
97
+ function adjustDateDuration(duration, days, weeks = duration.weeks, months = duration.months) {
98
+ return { years: duration.years, months, weeks, days };
99
+ }
100
+ /** TC39 `ToInternalDurationRecord`. */
101
+ function toInternalDuration(duration) {
102
+ const { years, months, weeks, days } = duration;
103
+ return {
104
+ date: { years, months, weeks, days },
105
+ time: BigInt(duration.hours) * NANOSECONDS_PER_TIME_UNIT.hour +
106
+ BigInt(duration.minutes) * NANOSECONDS_PER_TIME_UNIT.minute +
107
+ BigInt(duration.seconds) * NANOSECONDS_PER_TIME_UNIT.second +
108
+ BigInt(duration.milliseconds) * NANOSECONDS_PER_TIME_UNIT.millisecond +
109
+ BigInt(duration.microseconds) * NANOSECONDS_PER_TIME_UNIT.microsecond +
110
+ BigInt(duration.nanoseconds),
111
+ };
112
+ }
113
+ /** TC39 `DefaultTemporalLargestUnit`. */
114
+ function defaultLargestUnit(duration) {
115
+ return (UNITS.find((unit) => duration[`${unit}s`] !== 0) ?? "nanosecond");
116
+ }
117
+ /** TC39 `GetUnsignedRoundingMode`, as [positive, negative]. */
118
+ const UNSIGNED_ROUNDING_MODES = {
119
+ ceil: ["infinity", "zero"],
120
+ floor: ["zero", "infinity"],
121
+ expand: ["infinity", "infinity"],
122
+ trunc: ["zero", "zero"],
123
+ halfCeil: ["half-infinity", "half-zero"],
124
+ halfFloor: ["half-zero", "half-infinity"],
125
+ halfExpand: ["half-infinity", "half-infinity"],
126
+ halfTrunc: ["half-zero", "half-zero"],
127
+ halfEven: ["half-even", "half-even"],
128
+ };
129
+ function unsignedRoundingMode(roundingMode, sign) {
130
+ return UNSIGNED_ROUNDING_MODES[roundingMode][sign < 0 ? 1 : 0];
131
+ }
132
+ /** TC39 `ApplyUnsignedRoundingMode`, given the sign of (2 × remainder − increment) as `cmp`. */
133
+ function applyUnsignedRoundingMode(r1, r2, cmp, even, mode) {
134
+ if (mode === "zero")
135
+ return r1;
136
+ if (mode === "infinity")
137
+ return r2;
138
+ if (cmp !== 0)
139
+ return cmp < 0 ? r1 : r2;
140
+ if (mode === "half-zero")
141
+ return r1;
142
+ if (mode === "half-infinity")
143
+ return r2;
144
+ return even ? r1 : r2;
145
+ }
146
+ /** TC39 `RoundTimeDurationToIncrement`. */
147
+ function roundTimeDurationToIncrement(duration, increment, roundingMode) {
148
+ const quotient = bigintAbs(duration / increment);
149
+ const remainder = duration % increment;
150
+ const r1 = quotient * increment;
151
+ const rounded = remainder === 0n
152
+ ? r1
153
+ : applyUnsignedRoundingMode(r1, r1 + increment, bigintSign(bigintAbs(remainder * 2n) - increment), quotient % 2n === 0n, unsignedRoundingMode(roundingMode, bigintSign(duration)));
154
+ const result = duration < 0n ? -rounded : rounded;
155
+ if (bigintAbs(result) > MAX_TIME_DURATION) {
156
+ throw new RangeError("The rounded time duration is out of range");
157
+ }
158
+ return result;
159
+ }
160
+ /**
161
+ * The float64 value of `numerator / denominator`, as the polyfill's `TimeDuration#fdiv` computes
162
+ * TC39's exact division: the integer quotient plus 50 long-division decimal digits.
163
+ */
164
+ function divideToNumber(numerator, denominator) {
165
+ const divisor = bigintAbs(denominator);
166
+ let remainder = bigintAbs(numerator % denominator);
167
+ const digits = [];
168
+ while (remainder !== 0n && digits.length < 50) {
169
+ remainder *= 10n;
170
+ digits.push(String(remainder / divisor));
171
+ remainder %= divisor;
172
+ }
173
+ const magnitude = Number(`${bigintAbs(numerator / denominator)}.${digits.join("")}`);
174
+ return bigintSign(numerator) * bigintSign(denominator) < 0
175
+ ? -magnitude
176
+ : magnitude;
177
+ }
178
+ // ---------------------------------------------------------------------------------------------
179
+ // Date-time steps, from polyfill operations that are correct at the limits
180
+ // ---------------------------------------------------------------------------------------------
181
+ /** TC39 `GetISODateTimeFor`. */
182
+ function isoDateTimeFor(timeZone, epochNs) {
183
+ return new Temporal.ZonedDateTime(epochNs, timeZone).toPlainDateTime();
184
+ }
185
+ /** TC39 `GetEpochNanosecondsFor(timeZone, isoDateTime, ~compatible~)` for a named zone. */
186
+ function epochFor(timeZone, wall) {
187
+ return epochNanosecondsFor(timeZone, wall, "compatible");
188
+ }
189
+ /**
190
+ * TC39 `CombineISODateAndTimeRecord`. A combination outside the PlainDateTime limits throws here;
191
+ * the spec throws for it at the `GetEpochNanosecondsFor` that always follows.
192
+ */
193
+ function atTimeOf(date, wall) {
194
+ return date.toPlainDateTime(wall.toPlainTime());
195
+ }
196
+ /**
197
+ * TC39 `CalendarDateAdd(calendar, isoDate, duration, ~constrain~)`, through the Temporal compat
198
+ * layer (the polyfill's own `add` for `iso8601`).
199
+ */
200
+ function calendarDateAdd(calendar, isoDate, duration) {
201
+ return compatCalendarDateAdd(isoDate.withCalendar(calendar), duration, "constrain").withCalendar("iso8601");
202
+ }
203
+ /** TC39 `CalendarDateUntil`, through the Temporal compat layer. */
204
+ function calendarDateUntil(calendar, one, two, largestUnit) {
205
+ return compatCalendarDateUntil(one.withCalendar(calendar), two.withCalendar(calendar), largestUnit);
206
+ }
207
+ /** TC39 `AddInstant`. */
208
+ function addInstant(epochNs, time) {
209
+ const result = epochNs + time;
210
+ if (!isValidEpoch(result)) {
211
+ throw new RangeError("The result is outside the supported range");
212
+ }
213
+ return result;
214
+ }
215
+ /** TC39 `AddZonedDateTime(…, ~constrain~)`. */
216
+ function addZonedDateTime(zoned, duration) {
217
+ if (dateDurationSign(duration.date) === 0) {
218
+ return addInstant(zoned.epochNanoseconds, duration.time);
219
+ }
220
+ const wall = isoDateTimeFor(zoned.timeZoneId, zoned.epochNanoseconds);
221
+ const addedDate = calendarDateAdd(zoned.calendarId, wall.toPlainDate(), duration.date);
222
+ return addInstant(epochFor(zoned.timeZoneId, atTimeOf(addedDate, wall)), duration.time);
223
+ }
224
+ /** TC39 `TemporalDurationFromInternal` for a time `largestUnit`, balanced by `Instant#until`. */
225
+ function temporalDurationFromInternal(duration, largestUnit) {
226
+ const base = duration.time < 0n ? MAX_EPOCH_NANOSECONDS : MIN_EPOCH_NANOSECONDS;
227
+ const time = new Temporal.Instant(base).until(new Temporal.Instant(base + duration.time), { largestUnit });
228
+ const { years, months, weeks, days } = duration.date;
229
+ return new Temporal.Duration(years, months, weeks, days, time.hours, time.minutes, time.seconds, time.milliseconds, time.microseconds, time.nanoseconds);
230
+ }
231
+ // ---------------------------------------------------------------------------------------------
232
+ // Difference and rounding abstract operations
233
+ // ---------------------------------------------------------------------------------------------
234
+ /** TC39 `DifferenceZonedDateTime`. */
235
+ function differenceZonedDateTime(ns1, ns2, context, largestUnit) {
236
+ if (ns1 === ns2)
237
+ return { date: ZERO_DATE_DURATION, time: 0n };
238
+ const start = isoDateTimeFor(context.timeZone, ns1);
239
+ const end = isoDateTimeFor(context.timeZone, ns2);
240
+ const startDate = start.toPlainDate();
241
+ const endDate = end.toPlainDate();
242
+ if (Temporal.PlainDate.compare(startDate, endDate) === 0) {
243
+ return { date: ZERO_DATE_DURATION, time: ns2 - ns1 };
244
+ }
245
+ const sign = ns2 - ns1 < 0n ? 1 : -1;
246
+ const maxDayCorrection = sign === -1 ? 2 : 1;
247
+ // TimeDurationSign(DifferenceTime(start time, end time)) = sign
248
+ let dayCorrection = Temporal.PlainTime.compare(end.toPlainTime(), start.toPlainTime()) === sign
249
+ ? 1
250
+ : 0;
251
+ for (; dayCorrection <= maxDayCorrection; dayCorrection++) {
252
+ const intermediate = atTimeOf(endDate.add({ days: dayCorrection * sign }), start);
253
+ const time = ns2 - epochFor(context.timeZone, intermediate);
254
+ if (bigintSign(time) !== sign) {
255
+ return {
256
+ date: calendarDateUntil(context.calendar, startDate, intermediate.toPlainDate(), largerUnit(largestUnit, "day")),
257
+ time,
258
+ };
259
+ }
260
+ }
261
+ throw new RangeError("More than the maximum day correction was needed");
262
+ }
263
+ function truncateToIncrement(value, increment) {
264
+ return Math.trunc(value / increment) * increment;
265
+ }
266
+ /** The [[R1]]/[[R2]] bounds and their date durations, from TC39 `ComputeNudgeWindow` steps 1–4. */
267
+ function nudgeWindowBounds(sign, date, context, increment, unit, additionalShift) {
268
+ const shift = additionalShift ? increment * sign : 0;
269
+ if (unit === "year") {
270
+ const r1 = truncateToIncrement(date.years, increment) + shift;
271
+ const r2 = r1 + increment * sign;
272
+ return {
273
+ r1,
274
+ r2,
275
+ startDuration: { ...ZERO_DATE_DURATION, years: r1 },
276
+ endDuration: { ...ZERO_DATE_DURATION, years: r2 },
277
+ };
278
+ }
279
+ if (unit === "month") {
280
+ const r1 = truncateToIncrement(date.months, increment) + shift;
281
+ const r2 = r1 + increment * sign;
282
+ return {
283
+ r1,
284
+ r2,
285
+ startDuration: adjustDateDuration(date, 0, 0, r1),
286
+ endDuration: adjustDateDuration(date, 0, 0, r2),
287
+ };
288
+ }
289
+ if (unit === "week") {
290
+ const weeksStart = calendarDateAdd(context.calendar, context.wall.toPlainDate(), adjustDateDuration(date, 0, 0));
291
+ const weeksEnd = weeksStart.add({ days: date.days });
292
+ const untilResult = calendarDateUntil(context.calendar, weeksStart, weeksEnd, "week");
293
+ const r1 = truncateToIncrement(date.weeks + untilResult.weeks, increment);
294
+ const r2 = r1 + increment * sign;
295
+ return {
296
+ r1,
297
+ r2,
298
+ startDuration: adjustDateDuration(date, 0, r1),
299
+ endDuration: adjustDateDuration(date, 0, r2),
300
+ };
301
+ }
302
+ const r1 = truncateToIncrement(date.days, increment);
303
+ const r2 = r1 + increment * sign;
304
+ return {
305
+ r1,
306
+ r2,
307
+ startDuration: adjustDateDuration(date, r1),
308
+ endDuration: adjustDateDuration(date, r2),
309
+ };
310
+ }
311
+ /** The exact time `duration` after the origin wall clock, resolved in the zone. */
312
+ function windowBoundEpoch(context, duration) {
313
+ const date = calendarDateAdd(context.calendar, context.wall.toPlainDate(), duration);
314
+ return contextEpoch(context, atTimeOf(date, context.wall));
315
+ }
316
+ /**
317
+ * The exact time of `wall` in `context`: TC39 `GetEpochNanosecondsFor(timeZone, wall, ~compatible~)`,
318
+ * or `GetUTCEpochNanoseconds(wall)` when the time zone is unset (a plain context).
319
+ */
320
+ function contextEpoch(context, wall) {
321
+ return context.timeZone === undefined
322
+ ? utcEpochNanoseconds(wall)
323
+ : epochFor(context.timeZone, wall);
324
+ }
325
+ /** TC39 `ComputeNudgeWindow`. */
326
+ function computeNudgeWindow(sign, duration, originEpochNs, context, increment, unit, additionalShift) {
327
+ const bounds = nudgeWindowBounds(sign, duration.date, context, increment, unit, additionalShift);
328
+ // A start bound that adds nothing is the origin itself, never a re-resolved wall clock.
329
+ const startEpochNs = dateDurationSign(bounds.startDuration) === 0
330
+ ? originEpochNs
331
+ : windowBoundEpoch(context, bounds.startDuration);
332
+ return {
333
+ ...bounds,
334
+ startEpochNs,
335
+ endEpochNs: windowBoundEpoch(context, bounds.endDuration),
336
+ };
337
+ }
338
+ function windowContains(sign, window, destEpochNs) {
339
+ const [low, high] = sign === 1
340
+ ? [window.startEpochNs, window.endEpochNs]
341
+ : [window.endEpochNs, window.startEpochNs];
342
+ return low <= destEpochNs && destEpochNs <= high;
343
+ }
344
+ /** TC39 `NudgeToCalendarUnit`; `total` is its [[Total]]. */
345
+ function nudgeToCalendarUnit(sign, duration, originEpochNs, destEpochNs, context, increment, unit, roundingMode) {
346
+ let window = computeNudgeWindow(sign, duration, originEpochNs, context, increment, unit, false);
347
+ let didExpandCalendarUnit = false;
348
+ if (!windowContains(sign, window, destEpochNs)) {
349
+ window = computeNudgeWindow(sign, duration, originEpochNs, context, increment, unit, true);
350
+ didExpandCalendarUnit = true;
351
+ }
352
+ const { r1, r2, startEpochNs, endEpochNs } = window;
353
+ const progress = destEpochNs - startEpochNs;
354
+ const span = endEpochNs - startEpochNs;
355
+ const total = divideToNumber(span * BigInt(r1) + progress * BigInt(sign), span);
356
+ let roundedUnit;
357
+ if (progress === 0n) {
358
+ // The target is the lower bound itself, so it is already rounded. TC39 leaves this to
359
+ // ApplyUnsignedRoundingMode's "if x is equal to r1, return r1" step, which this
360
+ // comparison-based form cannot see: without the branch, `ceil` (unsigned mode "infinity")
361
+ // would expand an exact boundary to the next whole unit.
362
+ roundedUnit = Math.abs(r1);
363
+ }
364
+ else if (progress === span) {
365
+ roundedUnit = Math.abs(r2);
366
+ }
367
+ else {
368
+ roundedUnit = applyUnsignedRoundingMode(Math.abs(r1), Math.abs(r2), bigintSign(bigintAbs(progress * 2n) - bigintAbs(span)), (Math.abs(r1) / increment) % 2 === 0, unsignedRoundingMode(roundingMode, sign));
369
+ }
370
+ const expanded = roundedUnit === Math.abs(r2);
371
+ return {
372
+ nudgeResult: {
373
+ duration: {
374
+ date: expanded ? window.endDuration : window.startDuration,
375
+ time: 0n,
376
+ },
377
+ nudgedEpochNs: expanded ? endEpochNs : startEpochNs,
378
+ didExpandCalendarUnit: didExpandCalendarUnit || expanded,
379
+ },
380
+ total,
381
+ };
382
+ }
383
+ /** TC39 `NudgeToZonedTime`. */
384
+ function nudgeToZonedTime(sign, duration, context, increment, unit, roundingMode) {
385
+ const start = calendarDateAdd(context.calendar, context.wall.toPlainDate(), duration.date);
386
+ const startEpochNs = epochFor(context.timeZone, atTimeOf(start, context.wall));
387
+ const endEpochNs = epochFor(context.timeZone, atTimeOf(start.add({ days: sign }), context.wall));
388
+ const daySpan = endEpochNs - startEpochNs;
389
+ if (bigintSign(daySpan) !== sign) {
390
+ throw new RangeError("The time zone returned inconsistent instants");
391
+ }
392
+ const unitIncrement = BigInt(increment) * NANOSECONDS_PER_TIME_UNIT[unit];
393
+ let roundedTime = roundTimeDurationToIncrement(duration.time, unitIncrement, roundingMode);
394
+ const beyondDaySpan = roundedTime - daySpan;
395
+ const didRoundBeyondDay = bigintSign(beyondDaySpan) !== -sign;
396
+ let nudgedEpochNs = startEpochNs + roundedTime;
397
+ if (didRoundBeyondDay) {
398
+ roundedTime = roundTimeDurationToIncrement(beyondDaySpan, unitIncrement, roundingMode);
399
+ nudgedEpochNs = endEpochNs + roundedTime;
400
+ }
401
+ return {
402
+ duration: {
403
+ date: adjustDateDuration(duration.date, duration.date.days + (didRoundBeyondDay ? sign : 0)),
404
+ time: roundedTime,
405
+ },
406
+ nudgedEpochNs,
407
+ didExpandCalendarUnit: didRoundBeyondDay,
408
+ };
409
+ }
410
+ /** The date duration one `unit` further than `date`, per TC39 `BubbleRelativeDuration` step 6.a. */
411
+ function oneUnitFurther(date, unit, sign) {
412
+ if (unit === "year") {
413
+ return { ...ZERO_DATE_DURATION, years: date.years + sign };
414
+ }
415
+ if (unit === "month") {
416
+ return adjustDateDuration(date, 0, 0, date.months + sign);
417
+ }
418
+ return adjustDateDuration(date, 0, date.weeks + sign);
419
+ }
420
+ /** TC39 `BubbleRelativeDuration`. */
421
+ function bubbleRelativeDuration(sign, duration, nudgedEpochNs, context, largestUnit, smallestUnit) {
422
+ let bubbled = duration;
423
+ for (let index = UNITS.indexOf(smallestUnit) - 1; index >= UNITS.indexOf(largestUnit); index--) {
424
+ const unit = UNITS[index];
425
+ if (unit === "week" && largestUnit !== "week")
426
+ continue;
427
+ const endDuration = oneUnitFurther(bubbled.date, unit, sign);
428
+ const endEpochNs = windowBoundEpoch(context, endDuration);
429
+ if (bigintSign(nudgedEpochNs - endEpochNs) === -sign)
430
+ break;
431
+ bubbled = { date: endDuration, time: 0n };
432
+ }
433
+ return bubbled;
434
+ }
435
+ /** TC39 `RoundRelativeDuration` with a time zone. */
436
+ function roundRelativeDuration(duration, originEpochNs, destEpochNs, context, settings) {
437
+ const { largestUnit, smallestUnit } = settings;
438
+ const sign = internalDurationSign(duration) < 0 ? -1 : 1;
439
+ const nudgeResult = nudgeRelativeDuration(sign, duration, originEpochNs, destEpochNs, context, settings);
440
+ if (!nudgeResult.didExpandCalendarUnit || smallestUnit === "week") {
441
+ return nudgeResult.duration;
442
+ }
443
+ return bubbleRelativeDuration(sign, nudgeResult.duration, nudgeResult.nudgedEpochNs, context, largestUnit, largerUnit(smallestUnit, "day"));
444
+ }
445
+ /** TC39 `DifferenceZonedDateTimeWithRounding`. */
446
+ function differenceZonedDateTimeWithRounding(ns1, ns2, context, settings) {
447
+ const { largestUnit, smallestUnit, increment, roundingMode } = settings;
448
+ if (!isDateUnit(largestUnit)) {
449
+ // TC39 DifferenceInstant: the smallest unit is a time unit too.
450
+ return {
451
+ date: ZERO_DATE_DURATION,
452
+ time: roundTimeDurationToIncrement(ns2 - ns1, BigInt(increment) * NANOSECONDS_PER_TIME_UNIT[smallestUnit], roundingMode),
453
+ };
454
+ }
455
+ const difference = differenceZonedDateTime(ns1, ns2, context, largestUnit);
456
+ if (smallestUnit === "nanosecond" && increment === 1)
457
+ return difference;
458
+ return roundRelativeDuration(difference, ns1, ns2, { ...context, wall: isoDateTimeFor(context.timeZone, ns1) }, settings);
459
+ }
460
+ // ---------------------------------------------------------------------------------------------
461
+ // Plain context (defect 3, CORE-6 spec §3.6.3): no time zone, exact times are
462
+ // GetUTCEpochNanoseconds and are never checked against the instant range
463
+ // ---------------------------------------------------------------------------------------------
464
+ /** An ISO date far from the limits, used only to validate options. */
465
+ const PLAIN_DATE_PROBE = new Temporal.PlainDate(2000, 1, 1);
466
+ const PLAIN_DATE_TIME_PROBE = new Temporal.PlainDateTime(2000, 1, 1);
467
+ /** TC39 `IsCalendarUnit`. */
468
+ function isCalendarUnit(unit) {
469
+ return unit === "year" || unit === "month" || unit === "week";
470
+ }
471
+ /** TC39 `RoundRelativeDuration` steps 1–5: the nudge for `settings.smallestUnit` in `context`. */
472
+ function nudgeRelativeDuration(sign, duration, originEpochNs, destEpochNs, context, settings) {
473
+ const { largestUnit, smallestUnit, increment, roundingMode } = settings;
474
+ const { timeZone } = context;
475
+ // irregularLengthUnit: a calendar unit, or a day with a time zone.
476
+ if (isCalendarUnit(smallestUnit) ||
477
+ (timeZone !== undefined && smallestUnit === "day")) {
478
+ return nudgeToCalendarUnit(sign, duration, originEpochNs, destEpochNs, context, increment, smallestUnit, roundingMode).nudgeResult;
479
+ }
480
+ if (timeZone !== undefined) {
481
+ return nudgeToZonedTime(sign, duration, { ...context, timeZone }, increment, smallestUnit, roundingMode);
482
+ }
483
+ return nudgeToDayOrTime(duration, destEpochNs, largestUnit, increment, smallestUnit, roundingMode);
484
+ }
485
+ /** TC39 `NudgeToDayOrTime`. */
486
+ function nudgeToDayOrTime(duration, destEpochNs, largestUnit, increment, smallestUnit, roundingMode) {
487
+ const timeDuration = duration.time + BigInt(duration.date.days) * NANOSECONDS_PER_DAY;
488
+ const unitLength = smallestUnit === "day"
489
+ ? NANOSECONDS_PER_DAY
490
+ : NANOSECONDS_PER_TIME_UNIT[smallestUnit];
491
+ const roundedTime = roundTimeDurationToIncrement(timeDuration, unitLength * BigInt(increment), roundingMode);
492
+ // TotalTimeDuration(…, day) truncated: bigint division truncates toward zero.
493
+ const wholeDays = timeDuration / NANOSECONDS_PER_DAY;
494
+ const roundedWholeDays = roundedTime / NANOSECONDS_PER_DAY;
495
+ const keepsDays = isDateUnit(largestUnit);
496
+ return {
497
+ duration: {
498
+ date: adjustDateDuration(duration.date, keepsDays ? Number(roundedWholeDays) : 0),
499
+ time: keepsDays
500
+ ? roundedTime - roundedWholeDays * NANOSECONDS_PER_DAY
501
+ : roundedTime,
502
+ },
503
+ nudgedEpochNs: destEpochNs + (roundedTime - timeDuration),
504
+ didExpandCalendarUnit: bigintSign(roundedWholeDays - wholeDays) === bigintSign(timeDuration),
505
+ };
506
+ }
507
+ /** Nanoseconds since midnight on `wall`'s own date. */
508
+ function timeOfDayNanoseconds(wall) {
509
+ return (BigInt(wall.hour) * NANOSECONDS_PER_TIME_UNIT.hour +
510
+ BigInt(wall.minute) * NANOSECONDS_PER_TIME_UNIT.minute +
511
+ BigInt(wall.second) * NANOSECONDS_PER_TIME_UNIT.second +
512
+ BigInt(wall.millisecond) * NANOSECONDS_PER_TIME_UNIT.millisecond +
513
+ BigInt(wall.microsecond) * NANOSECONDS_PER_TIME_UNIT.microsecond +
514
+ BigInt(wall.nanosecond));
515
+ }
516
+ /** TC39 `DifferenceISODateTime`, for two ISO-calendar wall clocks. */
517
+ function differenceISODateTime(one, two, calendar, largestUnit) {
518
+ let time = timeOfDayNanoseconds(two) - timeOfDayNanoseconds(one);
519
+ const timeSign = bigintSign(time);
520
+ const dateSign = Temporal.PlainDate.compare(one.toPlainDate(), two.toPlainDate());
521
+ let adjustedDate = two.toPlainDate();
522
+ if (timeSign === dateSign) {
523
+ adjustedDate = adjustedDate.add({ days: timeSign });
524
+ time -= BigInt(timeSign) * NANOSECONDS_PER_DAY;
525
+ }
526
+ const dateLargestUnit = largerUnit("day", largestUnit);
527
+ const date = calendarDateUntil(calendar, one.toPlainDate(), adjustedDate, dateLargestUnit);
528
+ if (largestUnit === dateLargestUnit) {
529
+ return { date, time };
530
+ }
531
+ return {
532
+ date: adjustDateDuration(date, 0),
533
+ time: time + BigInt(date.days) * NANOSECONDS_PER_DAY,
534
+ };
535
+ }
536
+ function plainContext(calendar, wall) {
537
+ return { timeZone: undefined, calendar, wall };
538
+ }
539
+ /** TC39 `DifferencePlainDateTimeWithRounding`. */
540
+ function differencePlainDateTimeWithRounding(one, two, calendar, settings) {
541
+ if (Temporal.PlainDateTime.compare(one, two) === 0) {
542
+ return { date: ZERO_DATE_DURATION, time: 0n };
543
+ }
544
+ const difference = differenceISODateTime(one, two, calendar, settings.largestUnit);
545
+ if (settings.smallestUnit === "nanosecond" && settings.increment === 1) {
546
+ return difference;
547
+ }
548
+ return roundRelativeDuration(difference, utcEpochNanoseconds(one), utcEpochNanoseconds(two), plainContext(calendar, one), settings);
549
+ }
550
+ /** TC39 `DifferencePlainDateTimeWithTotal`. */
551
+ function differencePlainDateTimeWithTotal(one, two, calendar, unit) {
552
+ if (Temporal.PlainDateTime.compare(one, two) === 0)
553
+ return 0;
554
+ const difference = differenceISODateTime(one, two, calendar, unit);
555
+ if (isCalendarUnit(unit)) {
556
+ // TC39 TotalRelativeDuration for a calendar unit.
557
+ return nudgeToCalendarUnit(internalDurationSign(difference) < 0 ? -1 : 1, difference, utcEpochNanoseconds(one), utcEpochNanoseconds(two), plainContext(calendar, one), 1, unit, "trunc").total;
558
+ }
559
+ return divideToNumber(difference.time + BigInt(difference.date.days) * NANOSECONDS_PER_DAY, unit === "day" ? NANOSECONDS_PER_DAY : NANOSECONDS_PER_TIME_UNIT[unit]);
560
+ }
561
+ /**
562
+ * The origin and target wall clocks TC39 `Duration#round` / `Duration#total` build from a plain
563
+ * `relativeTo`: `ToInternalDurationRecordWith24HourDays`, `AddTime` from midnight, and
564
+ * `CalendarDateAdd` of the date part plus the whole days that carried out of the time.
565
+ */
566
+ function plainRelativeTarget(duration, plain) {
567
+ const internal = toInternalDuration(duration);
568
+ const time = internal.time + BigInt(internal.date.days) * NANOSECONDS_PER_DAY;
569
+ let carriedDays = time / NANOSECONDS_PER_DAY;
570
+ let timeOfDay = time % NANOSECONDS_PER_DAY;
571
+ if (timeOfDay < 0n) {
572
+ carriedDays -= 1n;
573
+ timeOfDay += NANOSECONDS_PER_DAY;
574
+ }
575
+ const origin = plain.withCalendar("iso8601").toPlainDateTime();
576
+ const targetDate = calendarDateAdd(plain.calendarId, origin.toPlainDate(), adjustDateDuration(internal.date, Number(carriedDays)));
577
+ return {
578
+ origin,
579
+ target: targetDate
580
+ .toPlainDateTime()
581
+ .add({ nanoseconds: Number(timeOfDay) }),
582
+ };
583
+ }
584
+ /** TC39 `DateDurationDays`. */
585
+ function dateDurationDays(date, plain) {
586
+ const yearsMonthsWeeks = adjustDateDuration(date, 0);
587
+ if (dateDurationSign(yearsMonthsWeeks) === 0)
588
+ return date.days;
589
+ const isoDate = plain.withCalendar("iso8601");
590
+ const later = calendarDateAdd(plain.calendarId, isoDate, yearsMonthsWeeks);
591
+ return date.days + isoDate.until(later, { largestUnit: "day" }).days;
592
+ }
593
+ /**
594
+ * `PlainDate#until(other, options)` with rounding options for two dates in one calendar, as TC39
595
+ * `DifferenceTemporalPlainDate` computes it: `CalendarDateUntil` through the Temporal compat layer,
596
+ * then — unless the granularity is one day — `RoundRelativeDuration` in a plain context.
597
+ *
598
+ * @param one the start, in the calendar to measure in
599
+ * @param two the end, in the same calendar
600
+ * @param options Temporal `largestUnit` / `smallestUnit` / `roundingIncrement` / `roundingMode`
601
+ * @returns the rounded date duration; throws where TC39 Temporal throws
602
+ */
603
+ export function plainDateUntilWithRounding(one, two, options) {
604
+ // Validates the options exactly as PlainDate#until does, far from any limit.
605
+ PLAIN_DATE_PROBE.until(PLAIN_DATE_PROBE, options);
606
+ const settings = roundingSettings(options.largestUnit, options.smallestUnit ?? "day", (smallestUnit) => largerUnit("day", smallestUnit), options.roundingIncrement, options.roundingMode ?? "trunc");
607
+ if (Temporal.PlainDate.compare(one, two) === 0) {
608
+ return new Temporal.Duration();
609
+ }
610
+ const calendar = one.calendarId;
611
+ const start = one.withCalendar("iso8601").toPlainDateTime();
612
+ const end = two.withCalendar("iso8601").toPlainDateTime();
613
+ let duration = {
614
+ date: calendarDateUntil(calendar, start.toPlainDate(), end.toPlainDate(), settings.largestUnit),
615
+ time: 0n,
616
+ };
617
+ if (settings.smallestUnit !== "day" || settings.increment !== 1) {
618
+ duration = roundRelativeDuration(duration, utcEpochNanoseconds(start), utcEpochNanoseconds(end), plainContext(calendar, start), settings);
619
+ }
620
+ const { years, months, weeks, days } = duration.date;
621
+ return new Temporal.Duration(years, months, weeks, days);
622
+ }
623
+ // ---------------------------------------------------------------------------------------------
624
+ // Fallbacks (defect 1): the TC39 result, or null to re-throw the polyfill's error
625
+ // ---------------------------------------------------------------------------------------------
626
+ /** Runs `validate` (a polyfill call far from the limits); null when the options are invalid. */
627
+ function optionsAreValid(validate) {
628
+ try {
629
+ validate();
630
+ return true;
631
+ }
632
+ catch {
633
+ return false;
634
+ }
635
+ }
636
+ function contextOf(zoned) {
637
+ return { timeZone: zoned.timeZoneId, calendar: zoned.calendarId };
638
+ }
639
+ /** TC39 `DifferenceTemporalZonedDateTime(~until~, …)` for a date `largestUnit`. */
640
+ function untilAtLimit(one, two, options, settings) {
641
+ if (!optionsAreValid(() => OPTIONS_PROBE.until(OPTIONS_PROBE, options)) ||
642
+ !isDateUnit(settings.largestUnit) ||
643
+ one.calendarId !== two.calendarId) {
644
+ return null;
645
+ }
646
+ const difference = differenceZonedDateTimeWithRounding(one.epochNanoseconds, two.epochNanoseconds, contextOf(one), settings);
647
+ return temporalDurationFromInternal(difference, "hour");
648
+ }
649
+ /** `Duration#total` with a zoned `relativeTo`: TC39 `DifferenceZonedDateTimeWithTotal`. */
650
+ function totalAtLimit(duration, zoned, unitOption, unit) {
651
+ if (!optionsAreValid(() => ZERO_DURATION.total({
652
+ unit: unitOption,
653
+ relativeTo: OPTIONS_PROBE,
654
+ }))) {
655
+ return null;
656
+ }
657
+ const origin = zoned.epochNanoseconds;
658
+ const target = addZonedDateTime(zoned, toInternalDuration(duration));
659
+ if (!isDateUnit(unit)) {
660
+ // TC39 TotalTimeDuration
661
+ return divideToNumber(target - origin, NANOSECONDS_PER_TIME_UNIT[unit]);
662
+ }
663
+ const context = contextOf(zoned);
664
+ const difference = differenceZonedDateTime(origin, target, context, unit);
665
+ // TC39 TotalRelativeDuration: a calendar unit, or a day with a time zone.
666
+ return nudgeToCalendarUnit(internalDurationSign(difference) < 0 ? -1 : 1, difference, origin, target, { ...context, wall: isoDateTimeFor(context.timeZone, origin) }, 1, unit, "trunc").total;
667
+ }
668
+ /** `Duration#round` with a zoned `relativeTo`. */
669
+ function roundAtLimit(duration, zoned, roundTo, settings) {
670
+ if (!canRoundBySpec(roundTo, settings, OPTIONS_PROBE)) {
671
+ return null;
672
+ }
673
+ const { largestUnit } = settings;
674
+ const target = addZonedDateTime(zoned, toInternalDuration(duration));
675
+ const rounded = differenceZonedDateTimeWithRounding(zoned.epochNanoseconds, target, contextOf(zoned), settings);
676
+ return temporalDurationFromInternal(rounded, isDateUnit(largestUnit) ? "hour" : largestUnit);
677
+ }
678
+ /** `Temporal.Duration.compare` with a zoned `relativeTo`, when either operand has date units. */
679
+ function compareAtLimit(one, two, zoned) {
680
+ if (!isDateUnit(defaultLargestUnit(one)) &&
681
+ !isDateUnit(defaultLargestUnit(two))) {
682
+ return null;
683
+ }
684
+ const after1 = addZonedDateTime(zoned, toInternalDuration(one));
685
+ const after2 = addZonedDateTime(zoned, toInternalDuration(two));
686
+ return bigintSign(after1 - after2);
687
+ }
688
+ // ---------------------------------------------------------------------------------------------
689
+ // Polyfill-first wrappers
690
+ // ---------------------------------------------------------------------------------------------
691
+ /** True when `epochs`, widened by `reach` and the limit margin, touch either range limit. */
692
+ function reachesRangeLimit(epochs, reach) {
693
+ const widen = reach + LIMIT_MARGIN;
694
+ return epochs.some((epoch) => epoch - widen <= MIN_EPOCH_NANOSECONDS ||
695
+ epoch + widen >= MAX_EPOCH_NANOSECONDS);
696
+ }
697
+ /** An upper bound on how far `duration` moves an exact time in any zone. */
698
+ function durationReach(duration) {
699
+ const { date, time } = toInternalDuration(duration);
700
+ return (BigInt(Math.abs(date.years)) * UNIT_REACH.year +
701
+ BigInt(Math.abs(date.months)) * UNIT_REACH.month +
702
+ BigInt(Math.abs(date.weeks)) * UNIT_REACH.week +
703
+ BigInt(Math.abs(date.days)) * UNIT_REACH.day +
704
+ bigintAbs(time));
705
+ }
706
+ /** How far rounding can look past its destination: one increment, then bubbling to `largestUnit`. */
707
+ function roundingReach(settings) {
708
+ const increment = Number.isSafeInteger(settings.increment)
709
+ ? Math.abs(settings.increment)
710
+ : 1;
711
+ return (UNIT_REACH[settings.largestUnit] +
712
+ BigInt(Math.max(increment, 1)) * UNIT_REACH[settings.smallestUnit]);
713
+ }
714
+ /** Resolves the units of `until`/`round` options; null when a unit name is not one Temporal knows. */
715
+ function roundingSettings(largestUnitOption, smallestUnitOption, defaultLargestUnitFor, increment, roundingMode) {
716
+ const smallestUnit = smallestUnitOption === undefined
717
+ ? "nanosecond"
718
+ : toUnit(smallestUnitOption);
719
+ if (smallestUnit === null)
720
+ return null;
721
+ const largestUnit = largestUnitOption === undefined || largestUnitOption === "auto"
722
+ ? defaultLargestUnitFor(smallestUnit)
723
+ : toUnit(largestUnitOption);
724
+ if (largestUnit === null)
725
+ return null;
726
+ return {
727
+ largestUnit,
728
+ smallestUnit,
729
+ increment: increment ?? 1,
730
+ roundingMode,
731
+ };
732
+ }
733
+ /** Defect 2: the spec validates every UTC exact time; `+00:00` resolves identically and does. */
734
+ function checkUtcValidity(compute) {
735
+ compute(UTC_EQUIVALENT_OFFSET_ZONE);
736
+ }
737
+ /**
738
+ * Returns `compute(timeZone)`, the polyfill's own result, unchanged. Near a range limit only:
739
+ * a UTC result is checked with `checkUtcValidity` (defect 2), and a named zone's error is
740
+ * replaced by `fallback`'s TC39 result when it has one (defect 1).
741
+ */
742
+ function runAtRangeLimit(timeZone, atRangeLimit, compute, fallback) {
743
+ let result;
744
+ try {
745
+ result = compute(timeZone);
746
+ }
747
+ catch (error) {
748
+ if (!atRangeLimit || !isNamedTimeZone(timeZone))
749
+ throw error;
750
+ const recovered = fallback();
751
+ if (recovered === null)
752
+ throw error;
753
+ return recovered;
754
+ }
755
+ if (atRangeLimit && timeZone === "UTC") {
756
+ checkUtcValidity(compute);
757
+ }
758
+ return result;
759
+ }
760
+ function inTimeZone(zoned, timeZone) {
761
+ return zoned.timeZoneId === timeZone ? zoned : zoned.withTimeZone(timeZone);
762
+ }
763
+ /** The zoned `relativeTo` Temporal would resolve, or null when it is not zoned. */
764
+ function zonedRelativeTo(relativeTo) {
765
+ if (relativeTo instanceof Temporal.ZonedDateTime)
766
+ return relativeTo;
767
+ try {
768
+ if (typeof relativeTo === "string") {
769
+ return TIME_ZONE_ANNOTATION.test(relativeTo)
770
+ ? zonedDateTimeFrom(relativeTo)
771
+ : null;
772
+ }
773
+ if (typeof relativeTo === "object" &&
774
+ !(relativeTo instanceof Temporal.PlainDateTime) &&
775
+ "timeZone" in relativeTo &&
776
+ relativeTo.timeZone !== undefined) {
777
+ return zonedDateTimeFrom(relativeTo);
778
+ }
779
+ }
780
+ catch {
781
+ // Not a valid zoned relativeTo: the polyfill call reports it.
782
+ }
783
+ return null;
784
+ }
785
+ const CALENDAR_DIFFERENCE_UNITS = new Set([
786
+ "year",
787
+ "years",
788
+ "month",
789
+ "months",
790
+ "week",
791
+ "weeks",
792
+ "day",
793
+ "days",
794
+ ]);
795
+ /**
796
+ * Whether Temporal's DifferenceTemporalZonedDateTime would reject `largestUnit` for this pair: a
797
+ * calendar unit (day or larger) between two different time zones (TimeZoneEquals is false), because
798
+ * "day lengths can vary between time zones due to DST". `ZonedDateTime#equals` applies TC39
799
+ * TimeZoneEquals, so `UTC` equals `Etc/UTC` and `Asia/Calcutta` equals `Asia/Kolkata`.
800
+ *
801
+ * @param one the start
802
+ * @param two the end
803
+ * @param largestUnit the requested `largestUnit`
804
+ * @returns true when the pair cannot be differenced in `largestUnit`
805
+ */
806
+ export function isCalendarDifferenceAcrossZones(one, two, largestUnit) {
807
+ if (!CALENDAR_DIFFERENCE_UNITS.has(largestUnit))
808
+ return false;
809
+ return !new Temporal.ZonedDateTime(0n, one.timeZoneId).equals(new Temporal.ZonedDateTime(0n, two.timeZoneId));
810
+ }
811
+ /**
812
+ * `ZonedDateTime#until`, correct at the range limits (see the note at the top of this file).
813
+ *
814
+ * @param one the start
815
+ * @param two the end
816
+ * @param options Temporal `largestUnit` / `smallestUnit` / `roundingIncrement` / `roundingMode`
817
+ * @returns the difference; throws where TC39 Temporal throws
818
+ */
819
+ export function zonedUntil(one, two, options = {}) {
820
+ const settings = roundingSettings(options.largestUnit, options.smallestUnit, (smallestUnit) => largerUnit("hour", smallestUnit), options.roundingIncrement, options.roundingMode ?? "trunc");
821
+ // Defect 3: a calendar whose arithmetic the polyfill gets wrong takes the spec path outright,
822
+ // because a wrong month-end difference (D6) is returned, not thrown.
823
+ if (settings !== null &&
824
+ one.timeZoneId === two.timeZoneId &&
825
+ one.calendarId === two.calendarId &&
826
+ isCalendarArithmeticCompatNeeded(one.calendarId)) {
827
+ const bySpec = untilAtLimit(one, two, options, settings);
828
+ if (bySpec !== null)
829
+ return bySpec;
830
+ }
831
+ // Defect 4: the polyfill rounds over a nudge window that need not contain the target, so a
832
+ // calendar `smallestUnit` from a day that a month add would constrain takes the spec path too.
833
+ if (settings !== null &&
834
+ one.timeZoneId === two.timeZoneId &&
835
+ one.calendarId === two.calendarId &&
836
+ isNudgeWindowUnit(settings.smallestUnit) &&
837
+ one.day >= 29 &&
838
+ isNudgeWindowCompatNeeded()) {
839
+ const bySpec = untilAtLimit(one, two, options, settings);
840
+ if (bySpec !== null)
841
+ return bySpec;
842
+ }
843
+ const atRangeLimit = settings !== null &&
844
+ one.timeZoneId === two.timeZoneId &&
845
+ reachesRangeLimit([one.epochNanoseconds, two.epochNanoseconds], roundingReach(settings));
846
+ return runAtRangeLimit(one.timeZoneId, atRangeLimit, (timeZone) => inTimeZone(one, timeZone).until(inTimeZone(two, timeZone), options), () => untilAtLimit(one, two, options, settings));
847
+ }
848
+ /** True when `Duration#round` accepts `roundTo` with `settings`, checked far from any limit. */
849
+ function canRoundBySpec(roundTo, settings, probe) {
850
+ const { largestUnit, smallestUnit, increment } = settings;
851
+ return (optionsAreValid(() => ZERO_DURATION.round({
852
+ ...roundTo,
853
+ relativeTo: probe,
854
+ })) &&
855
+ largerUnit(largestUnit, smallestUnit) === largestUnit &&
856
+ !(increment > 1 && largestUnit !== smallestUnit && isDateUnit(smallestUnit)));
857
+ }
858
+ /**
859
+ * The plain `relativeTo` Temporal would resolve (TC39 `ToRelativeTemporalObject` keeps only the
860
+ * date) when its calendar needs the Temporal compat layer in this runtime, or null. A string with
861
+ * no calendar annotation is ISO, so it is never parsed here.
862
+ */
863
+ function plainRelativeToNeedingCompat(relativeTo) {
864
+ let plain;
865
+ try {
866
+ if (relativeTo instanceof Temporal.PlainDateTime) {
867
+ plain = relativeTo.toPlainDate();
868
+ }
869
+ else if (typeof relativeTo === "string" &&
870
+ relativeTo.includes("u-ca=") &&
871
+ !TIME_ZONE_ANNOTATION.test(relativeTo)) {
872
+ plain = Temporal.PlainDate.from(relativeTo);
873
+ }
874
+ else {
875
+ return null;
876
+ }
877
+ }
878
+ catch {
879
+ return null;
880
+ }
881
+ return isCalendarArithmeticCompatNeeded(plain.calendarId) ? plain : null;
882
+ }
883
+ /** `Duration#total` with a plain `relativeTo`: TC39 `DifferencePlainDateTimeWithTotal`. */
884
+ function totalWithPlainRelativeTo(duration, plain, unitOption, unit) {
885
+ if (!optionsAreValid(() => ZERO_DURATION.total({
886
+ unit: unitOption,
887
+ relativeTo: PLAIN_DATE_PROBE,
888
+ }))) {
889
+ return null;
890
+ }
891
+ const { origin, target } = plainRelativeTarget(duration, plain);
892
+ return differencePlainDateTimeWithTotal(origin, target, plain.calendarId, unit);
893
+ }
894
+ /** `Duration#round` with a plain `relativeTo`: TC39 `DifferencePlainDateTimeWithRounding`. */
895
+ function roundWithPlainRelativeTo(duration, plain, roundTo, settings) {
896
+ if (!canRoundBySpec(roundTo, settings, PLAIN_DATE_PROBE)) {
897
+ return null;
898
+ }
899
+ const { origin, target } = plainRelativeTarget(duration, plain);
900
+ const rounded = differencePlainDateTimeWithRounding(origin, target, plain.calendarId, settings);
901
+ return temporalDurationFromInternal(rounded, isDateUnit(settings.largestUnit)
902
+ ? "hour"
903
+ : settings.largestUnit);
904
+ }
905
+ /** `Temporal.Duration.compare` with a plain `relativeTo`, when either operand has calendar units. */
906
+ function compareWithPlainRelativeTo(one, two, plain) {
907
+ if (!isCalendarUnit(defaultLargestUnit(one)) &&
908
+ !isCalendarUnit(defaultLargestUnit(two))) {
909
+ return null;
910
+ }
911
+ const first = toInternalDuration(one);
912
+ const second = toInternalDuration(two);
913
+ const time1 = first.time +
914
+ BigInt(dateDurationDays(first.date, plain)) * NANOSECONDS_PER_DAY;
915
+ const time2 = second.time +
916
+ BigInt(dateDurationDays(second.date, plain)) * NANOSECONDS_PER_DAY;
917
+ return bigintSign(time1 - time2);
918
+ }
919
+ /** Defect 3: `Duration#total` by the spec when the `relativeTo` calendar needs the compat layer. */
920
+ function calendarTotalBySpec(duration, unitOption, unit, relativeTo, zoned) {
921
+ if (zoned !== null) {
922
+ return isCalendarArithmeticCompatNeeded(zoned.calendarId)
923
+ ? totalAtLimit(duration, zoned, unitOption, unit)
924
+ : null;
925
+ }
926
+ const plain = plainRelativeToNeedingCompat(relativeTo);
927
+ return plain === null
928
+ ? null
929
+ : totalWithPlainRelativeTo(duration, plain, unitOption, unit);
930
+ }
931
+ /**
932
+ * Units whose nudge window can miss its target: only a month, or a year that carries months with it.
933
+ * A week or a day is a fixed count of days, so `relativeTo + r1 units` never has to constrain.
934
+ */
935
+ function isNudgeWindowUnit(unit) {
936
+ return unit === "month" || unit === "year";
937
+ }
938
+ /**
939
+ * The day of month a `relativeTo` resolves to, or 0 when there is none to read.
940
+ *
941
+ * Only the 29th, 30th and 31st can reach defect 4: below that, adding a month never constrains
942
+ * the day, so the two denominators coincide and the polyfill's answer is already the spec's.
943
+ */
944
+ function relativeToDayOfMonth(relativeTo, zoned) {
945
+ if (zoned !== null) {
946
+ return zoned.day;
947
+ }
948
+ try {
949
+ if (relativeTo instanceof Temporal.PlainDateTime) {
950
+ return relativeTo.day;
951
+ }
952
+ if (relativeTo instanceof Temporal.PlainDate) {
953
+ return relativeTo.day;
954
+ }
955
+ if (typeof relativeTo === "string") {
956
+ return Temporal.PlainDate.from(relativeTo).day;
957
+ }
958
+ if (relativeTo !== null && typeof relativeTo === "object") {
959
+ return Temporal.PlainDate.from(relativeTo).day;
960
+ }
961
+ }
962
+ catch {
963
+ return 0;
964
+ }
965
+ return 0;
966
+ }
967
+ /** The plain `relativeTo` Temporal would resolve, whatever its calendar, or null. */
968
+ function plainRelativeTo(relativeTo) {
969
+ try {
970
+ if (relativeTo instanceof Temporal.PlainDate) {
971
+ return relativeTo;
972
+ }
973
+ if (relativeTo instanceof Temporal.PlainDateTime) {
974
+ return relativeTo.toPlainDate();
975
+ }
976
+ if (typeof relativeTo === "string" &&
977
+ !TIME_ZONE_ANNOTATION.test(relativeTo)) {
978
+ return Temporal.PlainDate.from(relativeTo);
979
+ }
980
+ if (relativeTo !== null &&
981
+ typeof relativeTo === "object" &&
982
+ !(relativeTo instanceof Temporal.ZonedDateTime)) {
983
+ return Temporal.PlainDate.from(relativeTo);
984
+ }
985
+ }
986
+ catch {
987
+ return null;
988
+ }
989
+ return null;
990
+ }
991
+ /**
992
+ * Defect 4: `Duration#total` by the spec when the polyfill would divide the month fraction by the
993
+ * wrong month. Returns null whenever the defect cannot apply, leaving the polyfill's own answer.
994
+ */
995
+ function monthTotalBySpec(duration, unitOption, unit, relativeTo, zoned) {
996
+ if (!isNudgeWindowUnit(unit) ||
997
+ relativeToDayOfMonth(relativeTo, zoned) < 29 ||
998
+ !isNudgeWindowCompatNeeded()) {
999
+ return null;
1000
+ }
1001
+ if (zoned !== null) {
1002
+ return totalAtLimit(duration, zoned, unitOption, unit);
1003
+ }
1004
+ const plain = plainRelativeTo(relativeTo);
1005
+ return plain === null
1006
+ ? null
1007
+ : totalWithPlainRelativeTo(duration, plain, unitOption, unit);
1008
+ }
1009
+ /**
1010
+ * Defect 4: `Duration#round` by the spec when the polyfill would round over a nudge window that
1011
+ * does not contain the target. Returns null whenever the defect cannot apply, leaving the
1012
+ * polyfill's own answer.
1013
+ */
1014
+ function monthRoundBySpec(duration, roundTo, settings, zoned) {
1015
+ if (!isNudgeWindowUnit(settings.smallestUnit) ||
1016
+ relativeToDayOfMonth(roundTo.relativeTo, zoned) < 29 ||
1017
+ !isNudgeWindowCompatNeeded()) {
1018
+ return null;
1019
+ }
1020
+ if (zoned !== null) {
1021
+ return roundAtLimit(duration, zoned, roundTo, settings);
1022
+ }
1023
+ const plain = plainRelativeTo(roundTo.relativeTo);
1024
+ return plain === null
1025
+ ? null
1026
+ : roundWithPlainRelativeTo(duration, plain, roundTo, settings);
1027
+ }
1028
+ /** Defect 3: `Duration#round` by the spec when the `relativeTo` calendar needs the compat layer. */
1029
+ function calendarRoundBySpec(duration, roundTo, settings, zoned) {
1030
+ if (zoned !== null) {
1031
+ return isCalendarArithmeticCompatNeeded(zoned.calendarId)
1032
+ ? roundAtLimit(duration, zoned, roundTo, settings)
1033
+ : null;
1034
+ }
1035
+ const plain = plainRelativeToNeedingCompat(roundTo.relativeTo);
1036
+ return plain === null
1037
+ ? null
1038
+ : roundWithPlainRelativeTo(duration, plain, roundTo, settings);
1039
+ }
1040
+ /** Defect 3: `Duration.compare` by the spec when the `relativeTo` calendar needs the compat layer. */
1041
+ function calendarCompareBySpec(one, two, relativeTo, zoned) {
1042
+ if (zoned !== null) {
1043
+ return isCalendarArithmeticCompatNeeded(zoned.calendarId)
1044
+ ? compareAtLimit(Temporal.Duration.from(one), Temporal.Duration.from(two), zoned)
1045
+ : null;
1046
+ }
1047
+ const plain = plainRelativeToNeedingCompat(relativeTo);
1048
+ return plain === null
1049
+ ? null
1050
+ : compareWithPlainRelativeTo(Temporal.Duration.from(one), Temporal.Duration.from(two), plain);
1051
+ }
1052
+ /**
1053
+ * `PlainDateTime#until` / `#since`, correct when the polyfill would round over a nudge window that
1054
+ * does not contain the target (defect 4).
1055
+ *
1056
+ * The plain difference functions round through the polyfill directly, because neither the range
1057
+ * limits nor the non-ISO calendars reach them the way they reach the zoned ones. A calendar
1058
+ * `smallestUnit` measured from a day that a month add would constrain is the one case that does, so
1059
+ * it takes the spec path and everything else stays the polyfill's own call.
1060
+ *
1061
+ * @param one the earlier plain datetime
1062
+ * @param two the later plain datetime
1063
+ * @param options Temporal difference options, passed through unchanged when the defect cannot apply
1064
+ * @returns the difference; throws where TC39 Temporal throws
1065
+ */
1066
+ export function plainUntilWithRounding(one, two, options = {}) {
1067
+ const settings = roundingSettings(options.largestUnit, options.smallestUnit, (smallestUnit) => largerUnit("hour", smallestUnit), options.roundingIncrement, options.roundingMode ?? "trunc");
1068
+ if (settings !== null &&
1069
+ isNudgeWindowUnit(settings.smallestUnit) &&
1070
+ one.day >= 29 &&
1071
+ one.calendarId === two.calendarId &&
1072
+ Temporal.PlainDateTime.compare(one, two) <= 0 &&
1073
+ isNudgeWindowCompatNeeded() &&
1074
+ optionsAreValid(() => PLAIN_DATE_TIME_PROBE.until(PLAIN_DATE_TIME_PROBE, options))) {
1075
+ const rounded = differencePlainDateTimeWithRounding(one, two, one.calendarId, settings);
1076
+ return temporalDurationFromInternal(rounded, isDateUnit(settings.largestUnit)
1077
+ ? "hour"
1078
+ : settings.largestUnit);
1079
+ }
1080
+ return one.until(two, options);
1081
+ }
1082
+ /**
1083
+ * `Duration#total({ unit, relativeTo })`, correct at the range limits and in calendars the
1084
+ * polyfill gets wrong.
1085
+ *
1086
+ * @param duration the duration to total
1087
+ * @param unit the Temporal unit to total in
1088
+ * @param relativeTo Temporal `relativeTo`; a zoned one reaches the range-limit fallbacks, and a
1089
+ * zoned or plain one in a calendar that needs the compat layer takes the spec path
1090
+ * @returns the total; throws where TC39 Temporal throws
1091
+ */
1092
+ export function durationTotal(duration, unit, relativeTo) {
1093
+ const zoned = zonedRelativeTo(relativeTo);
1094
+ const resolvedUnit = toUnit(unit);
1095
+ const bySpec = resolvedUnit === null
1096
+ ? null
1097
+ : calendarTotalBySpec(duration, unit, resolvedUnit, relativeTo, zoned);
1098
+ if (bySpec !== null) {
1099
+ return bySpec;
1100
+ }
1101
+ // Defect 4: the polyfill's month fraction, when the day can be constrained.
1102
+ const byMonthSpec = resolvedUnit === null
1103
+ ? null
1104
+ : monthTotalBySpec(duration, unit, resolvedUnit, relativeTo, zoned);
1105
+ if (byMonthSpec !== null) {
1106
+ return byMonthSpec;
1107
+ }
1108
+ if (zoned === null) {
1109
+ return duration.total({ unit, relativeTo });
1110
+ }
1111
+ const atRangeLimit = resolvedUnit !== null &&
1112
+ reachesRangeLimit([zoned.epochNanoseconds], durationReach(duration) + UNIT_REACH[resolvedUnit]);
1113
+ return runAtRangeLimit(zoned.timeZoneId, atRangeLimit, (timeZone) => duration.total({ unit, relativeTo: inTimeZone(zoned, timeZone) }), () => totalAtLimit(duration, zoned, unit, resolvedUnit));
1114
+ }
1115
+ /**
1116
+ * `Duration#round(roundTo)`, correct at the range limits.
1117
+ *
1118
+ * @param duration the duration to round
1119
+ * @param roundTo Temporal round options; only a zoned `relativeTo` reaches the fallbacks
1120
+ * @returns the rounded duration; throws where TC39 Temporal throws
1121
+ */
1122
+ export function durationRound(duration, roundTo) {
1123
+ const zoned = zonedRelativeTo(roundTo.relativeTo);
1124
+ const settings = roundingSettings(roundTo.largestUnit, roundTo.smallestUnit, (smallestUnit) => largerUnit(defaultLargestUnit(duration), smallestUnit), roundTo.roundingIncrement, roundTo.roundingMode ?? "halfExpand");
1125
+ const bySpec = settings === null
1126
+ ? null
1127
+ : calendarRoundBySpec(duration, roundTo, settings, zoned);
1128
+ if (bySpec !== null) {
1129
+ return bySpec;
1130
+ }
1131
+ // Defect 4: the polyfill's nudge window, when the day can be constrained.
1132
+ const byNudgeSpec = settings === null
1133
+ ? null
1134
+ : monthRoundBySpec(duration, roundTo, settings, zoned);
1135
+ if (byNudgeSpec !== null) {
1136
+ return byNudgeSpec;
1137
+ }
1138
+ if (zoned === null) {
1139
+ return duration.round(roundTo);
1140
+ }
1141
+ const atRangeLimit = settings !== null &&
1142
+ reachesRangeLimit([zoned.epochNanoseconds], durationReach(duration) + roundingReach(settings));
1143
+ return runAtRangeLimit(zoned.timeZoneId, atRangeLimit, (timeZone) => duration.round({
1144
+ ...roundTo,
1145
+ relativeTo: inTimeZone(zoned, timeZone),
1146
+ }), () => roundAtLimit(duration, zoned, roundTo, settings));
1147
+ }
1148
+ /**
1149
+ * `Temporal.Duration.compare(one, two, { relativeTo })`, correct at the range limits.
1150
+ *
1151
+ * @param one the first duration
1152
+ * @param two the second duration
1153
+ * @param relativeTo Temporal `relativeTo`; only a zoned one reaches the fallbacks
1154
+ * @returns -1, 0 or 1; throws where TC39 Temporal throws
1155
+ */
1156
+ export function durationCompare(one, two, relativeTo) {
1157
+ const zoned = zonedRelativeTo(relativeTo);
1158
+ const bySpec = calendarCompareBySpec(one, two, relativeTo, zoned);
1159
+ if (bySpec !== null) {
1160
+ return bySpec;
1161
+ }
1162
+ if (zoned === null) {
1163
+ return Temporal.Duration.compare(one, two, { relativeTo });
1164
+ }
1165
+ const first = Temporal.Duration.from(one);
1166
+ const second = Temporal.Duration.from(two);
1167
+ const reach = durationReach(first) > durationReach(second)
1168
+ ? durationReach(first)
1169
+ : durationReach(second);
1170
+ return runAtRangeLimit(zoned.timeZoneId, reachesRangeLimit([zoned.epochNanoseconds], reach), (timeZone) => Temporal.Duration.compare(first, second, {
1171
+ relativeTo: inTimeZone(zoned, timeZone),
1172
+ }), () => compareAtLimit(first, second, zoned));
1173
+ }