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