@northguild/gmt 1.17.0 → 1.18.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 (638) hide show
  1. package/README.md +462 -22
  2. package/dist/calendar/calculate/bucketRange.d.ts +3 -3
  3. package/dist/calendar/calculate/bucketRange.js +6 -6
  4. package/dist/calendar/calculate/floorToZone.d.ts +5 -3
  5. package/dist/calendar/calculate/floorToZone.js +6 -5
  6. package/dist/calendar/calculate/getFiscalPeriod.d.ts +21 -8
  7. package/dist/calendar/calculate/getFiscalPeriod.js +9 -8
  8. package/dist/calendar/calculate/getIsoWeekDate.d.ts +10 -5
  9. package/dist/calendar/calculate/getIsoWeekDate.js +1 -5
  10. package/dist/calendar/calculate/getOrdinalDate.d.ts +10 -3
  11. package/dist/calendar/calculate/getOrdinalDate.js +2 -3
  12. package/dist/calendar/calculate/getQuarter.d.ts +21 -9
  13. package/dist/calendar/calculate/getQuarter.js +8 -12
  14. package/dist/calendar/hours/addOperatingTime.d.ts +53 -0
  15. package/dist/calendar/hours/addOperatingTime.js +59 -0
  16. package/dist/calendar/hours/index.d.ts +7 -0
  17. package/dist/calendar/hours/index.js +7 -0
  18. package/dist/calendar/hours/isOpenAt.d.ts +39 -0
  19. package/dist/calendar/hours/isOpenAt.js +44 -0
  20. package/dist/calendar/hours/nextCloseAt.d.ts +49 -0
  21. package/dist/calendar/hours/nextCloseAt.js +51 -0
  22. package/dist/calendar/hours/nextOpenAt.d.ts +45 -0
  23. package/dist/calendar/hours/nextOpenAt.js +47 -0
  24. package/dist/calendar/hours/operatingIntervals.d.ts +43 -0
  25. package/dist/calendar/hours/operatingIntervals.js +52 -0
  26. package/dist/calendar/hours/operatingTimeBetween.d.ts +40 -0
  27. package/dist/calendar/hours/operatingTimeBetween.js +49 -0
  28. package/dist/calendar/hours/recurringWindows.d.ts +61 -0
  29. package/dist/calendar/hours/recurringWindows.js +80 -0
  30. package/dist/calendar/index.d.ts +1 -0
  31. package/dist/calendar/index.js +1 -0
  32. package/dist/duration/calculate/durationAs.d.ts +13 -8
  33. package/dist/duration/calculate/durationAs.js +4 -8
  34. package/dist/duration/compare/compareDurations.d.ts +12 -6
  35. package/dist/duration/compare/compareDurations.js +3 -6
  36. package/dist/duration/format/formatDuration.d.ts +16 -4
  37. package/dist/duration/format/formatDuration.js +4 -5
  38. package/dist/duration/normalize/normalizeDuration.d.ts +39 -14
  39. package/dist/duration/normalize/normalizeDuration.js +6 -15
  40. package/dist/duration/parse/parseDuration.d.ts +21 -3
  41. package/dist/duration/parse/parseDuration.js +1 -3
  42. package/dist/instant/convert/classifyLocal.d.ts +1 -1
  43. package/dist/instant/convert/classifyLocal.js +1 -1
  44. package/dist/instant/convert/fromOffsetInstant.d.ts +3 -1
  45. package/dist/instant/convert/fromOffsetInstant.js +3 -1
  46. package/dist/instant/convert/resolveLocal.d.ts +12 -7
  47. package/dist/instant/convert/resolveLocal.js +6 -10
  48. package/dist/instant/convert/toOffsetInstant.d.ts +22 -9
  49. package/dist/instant/convert/toOffsetInstant.js +10 -3
  50. package/dist/intermodal/calculate/billingTimeline.d.ts +31 -11
  51. package/dist/intermodal/calculate/billingTimeline.js +2 -2
  52. package/dist/intermodal/calculate/chargeableDays.d.ts +13 -11
  53. package/dist/intermodal/calculate/chargeableDays.js +4 -9
  54. package/dist/intermodal/calculate/demurrageClock.d.ts +16 -7
  55. package/dist/intermodal/calculate/demurrageClock.js +7 -7
  56. package/dist/intermodal/calculate/freeTimeExpiry.d.ts +5 -4
  57. package/dist/intermodal/calculate/freeTimeExpiry.js +6 -6
  58. package/dist/internal/businessCalendar.d.ts +5 -0
  59. package/dist/internal/businessCalendar.js +5 -1
  60. package/dist/internal/cycleFieldValue.d.ts +6 -4
  61. package/dist/internal/cycleFieldValue.js +6 -4
  62. package/dist/internal/daylightTime.d.ts +33 -0
  63. package/dist/internal/daylightTime.js +164 -0
  64. package/dist/internal/durationUntilString.js +4 -3
  65. package/dist/internal/englishCalendarNames.js +1 -2
  66. package/dist/internal/epochNanoseconds.d.ts +2 -0
  67. package/dist/internal/epochNanoseconds.js +2 -0
  68. package/dist/internal/exactDuration.d.ts +37 -0
  69. package/dist/internal/exactDuration.js +64 -0
  70. package/dist/internal/exactMoment.d.ts +72 -0
  71. package/dist/internal/exactMoment.js +114 -0
  72. package/dist/internal/fiscalCalendar.d.ts +4 -3
  73. package/dist/internal/fiscalCalendar.js +4 -3
  74. package/dist/internal/formatCalendarDays.d.ts +2 -2
  75. package/dist/internal/formatRelativeDuration.d.ts +21 -1
  76. package/dist/internal/formatRelativeDuration.js +47 -7
  77. package/dist/internal/index.d.ts +9 -4
  78. package/dist/internal/index.js +9 -4
  79. package/dist/internal/instantFormatOptions.js +2 -1
  80. package/dist/internal/instantNanoseconds.d.ts +75 -9
  81. package/dist/internal/instantNanoseconds.js +192 -11
  82. package/dist/internal/joinDateTimeConnector.d.ts +1 -1
  83. package/dist/internal/monthGridWeekRow.d.ts +2 -1
  84. package/dist/internal/monthGridWeekRow.js +2 -1
  85. package/dist/internal/normalizeTimeZone.d.ts +2 -2
  86. package/dist/internal/normalizeTimeZone.js +2 -2
  87. package/dist/internal/operatingSchedule.d.ts +129 -0
  88. package/dist/internal/operatingSchedule.js +668 -0
  89. package/dist/internal/optionOrDefault.d.ts +18 -0
  90. package/dist/internal/optionOrDefault.js +20 -0
  91. package/dist/internal/patternToken.d.ts +2 -2
  92. package/dist/internal/patternToken.js +28 -13
  93. package/dist/internal/plainDateUntil.js +10 -6
  94. package/dist/internal/punctuality.d.ts +38 -0
  95. package/dist/internal/punctuality.js +59 -0
  96. package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
  97. package/dist/internal/readDateTimeFormatOptions.js +93 -0
  98. package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
  99. package/dist/internal/resolveDurationRelativeTo.js +11 -1
  100. package/dist/internal/resolveRelativeRounding.d.ts +17 -6
  101. package/dist/internal/resolveRelativeRounding.js +27 -7
  102. package/dist/internal/resolveRelativeUnit.d.ts +30 -0
  103. package/dist/internal/resolveRelativeUnit.js +40 -0
  104. package/dist/internal/splitStep.d.ts +24 -1
  105. package/dist/internal/splitStep.js +34 -2
  106. package/dist/internal/startOrEndOfZoned.js +2 -3
  107. package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
  108. package/dist/internal/temporalCompat/capabilities.js +35 -3
  109. package/dist/internal/temporalCompat/fieldSearch.js +1 -1
  110. package/dist/internal/temporalCompat/index.d.ts +1 -1
  111. package/dist/internal/temporalCompat/index.js +1 -1
  112. package/dist/internal/temporalCompat/repros.d.ts +1 -1
  113. package/dist/internal/temporalCompat/repros.js +157 -0
  114. package/dist/internal/timestampEvents.d.ts +32 -0
  115. package/dist/internal/timestampEvents.js +76 -0
  116. package/dist/internal/utcZonedDateTime.d.ts +5 -2
  117. package/dist/internal/utcZonedDateTime.js +8 -5
  118. package/dist/internal/zonedBucket.js +8 -6
  119. package/dist/internal/zonedLocalDates.js +1 -1
  120. package/dist/internal/zonedTransitionSearch.d.ts +27 -0
  121. package/dist/internal/zonedTransitionSearch.js +218 -0
  122. package/dist/internal/zonedWallClock.d.ts +21 -7
  123. package/dist/internal/zonedWallClock.js +87 -18
  124. package/dist/internal/zonedWallClockOperations.d.ts +26 -13
  125. package/dist/internal/zonedWallClockOperations.js +87 -34
  126. package/dist/interval/validate/isValidInterval.d.ts +6 -3
  127. package/dist/interval/validate/isValidInterval.js +6 -3
  128. package/dist/plain/calculate/addDate.d.ts +11 -8
  129. package/dist/plain/calculate/addDate.js +5 -8
  130. package/dist/plain/calculate/addDateTime.d.ts +7 -4
  131. package/dist/plain/calculate/addDateTime.js +1 -4
  132. package/dist/plain/calculate/cycleDate.d.ts +16 -7
  133. package/dist/plain/calculate/cycleDate.js +3 -7
  134. package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
  135. package/dist/plain/calculate/cycleDateTime.js +1 -4
  136. package/dist/plain/calculate/cycleTime.d.ts +10 -5
  137. package/dist/plain/calculate/cycleTime.js +3 -5
  138. package/dist/plain/calculate/diffDate.d.ts +1 -1
  139. package/dist/plain/calculate/diffDate.js +1 -1
  140. package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
  141. package/dist/plain/calculate/diffDateAsDuration.js +1 -1
  142. package/dist/plain/calculate/diffDateTime.d.ts +1 -1
  143. package/dist/plain/calculate/diffDateTime.js +1 -1
  144. package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
  145. package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
  146. package/dist/plain/calculate/diffTime.d.ts +1 -1
  147. package/dist/plain/calculate/diffTime.js +1 -1
  148. package/dist/plain/calculate/endOfDate.d.ts +8 -3
  149. package/dist/plain/calculate/endOfDate.js +1 -3
  150. package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
  151. package/dist/plain/calculate/endOfDateTime.js +1 -5
  152. package/dist/plain/calculate/endOfTime.d.ts +8 -2
  153. package/dist/plain/calculate/endOfTime.js +1 -2
  154. package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
  155. package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
  156. package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
  157. package/dist/plain/calculate/getWeekOfMonth.js +7 -4
  158. package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
  159. package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
  160. package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
  161. package/dist/plain/calculate/getWeeksInMonth.js +5 -2
  162. package/dist/plain/calculate/nextWeekday.d.ts +7 -3
  163. package/dist/plain/calculate/nextWeekday.js +1 -3
  164. package/dist/plain/calculate/previousWeekday.d.ts +7 -3
  165. package/dist/plain/calculate/previousWeekday.js +1 -3
  166. package/dist/plain/calculate/roundDate.d.ts +20 -7
  167. package/dist/plain/calculate/roundDate.js +3 -10
  168. package/dist/plain/calculate/roundDateTime.d.ts +22 -8
  169. package/dist/plain/calculate/roundDateTime.js +3 -11
  170. package/dist/plain/calculate/roundTime.d.ts +20 -4
  171. package/dist/plain/calculate/roundTime.js +3 -7
  172. package/dist/plain/calculate/setDate.d.ts +7 -5
  173. package/dist/plain/calculate/setDate.js +1 -5
  174. package/dist/plain/calculate/setDateTime.d.ts +8 -5
  175. package/dist/plain/calculate/setDateTime.js +1 -5
  176. package/dist/plain/calculate/setTime.d.ts +10 -6
  177. package/dist/plain/calculate/setTime.js +4 -6
  178. package/dist/plain/calculate/startOfDate.d.ts +8 -2
  179. package/dist/plain/calculate/startOfDate.js +1 -2
  180. package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
  181. package/dist/plain/calculate/startOfDateTime.js +1 -2
  182. package/dist/plain/calculate/startOfTime.d.ts +8 -1
  183. package/dist/plain/calculate/startOfTime.js +1 -1
  184. package/dist/plain/calculate/subtractDate.d.ts +7 -4
  185. package/dist/plain/calculate/subtractDate.js +1 -4
  186. package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
  187. package/dist/plain/calculate/subtractDateTime.js +1 -4
  188. package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
  189. package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
  190. package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
  191. package/dist/plain/compare/areDatesEqualBy.js +8 -6
  192. package/dist/plain/compare/isBetweenDate.d.ts +13 -2
  193. package/dist/plain/compare/isBetweenDate.js +4 -4
  194. package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
  195. package/dist/plain/compare/isBetweenDateTime.js +4 -4
  196. package/dist/plain/compare/isBetweenTime.d.ts +13 -2
  197. package/dist/plain/compare/isBetweenTime.js +4 -4
  198. package/dist/plain/compare/isRelativeDay.d.ts +1 -1
  199. package/dist/plain/compare/isRelativeDay.js +1 -1
  200. package/dist/plain/compare/isThisUnit.d.ts +1 -1
  201. package/dist/plain/compare/isThisUnit.js +1 -1
  202. package/dist/plain/format/formatCalendar.d.ts +21 -14
  203. package/dist/plain/format/formatCalendar.js +21 -16
  204. package/dist/plain/format/formatDate.js +5 -3
  205. package/dist/plain/format/formatDateRange.js +4 -2
  206. package/dist/plain/format/formatDateTime.js +4 -2
  207. package/dist/plain/format/formatDateTimeRange.js +4 -2
  208. package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
  209. package/dist/plain/format/formatDateTimeToParts.js +10 -6
  210. package/dist/plain/format/formatDateToParts.d.ts +13 -2
  211. package/dist/plain/format/formatDateToParts.js +8 -4
  212. package/dist/plain/format/formatRelativeDate.d.ts +16 -3
  213. package/dist/plain/format/formatRelativeDate.js +26 -15
  214. package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
  215. package/dist/plain/format/formatRelativeDateTime.js +8 -5
  216. package/dist/plain/format/formatRelativeTime.d.ts +16 -3
  217. package/dist/plain/format/formatRelativeTime.js +21 -13
  218. package/dist/plain/format/formatTime.js +4 -2
  219. package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
  220. package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
  221. package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
  222. package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
  223. package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
  224. package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
  225. package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
  226. package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
  227. package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
  228. package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
  229. package/dist/plain/interval/intervalFromDurationDate.js +1 -3
  230. package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
  231. package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
  232. package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
  233. package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
  234. package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
  235. package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
  236. package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
  237. package/dist/plain/interval/intervalSplitAtDate.js +2 -0
  238. package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
  239. package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
  240. package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
  241. package/dist/plain/interval/intervalSplitAtTime.js +2 -0
  242. package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
  243. package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
  244. package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
  245. package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
  246. package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
  247. package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
  248. package/dist/plain/interval/intervalXorDate.d.ts +9 -0
  249. package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
  250. package/dist/plain/interval/intervalXorTime.d.ts +9 -0
  251. package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
  252. package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
  253. package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
  254. package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
  255. package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
  256. package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
  257. package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
  258. package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
  259. package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
  260. package/dist/plain/map/mapDatesInRange.d.ts +8 -4
  261. package/dist/plain/map/mapDatesInRange.js +1 -4
  262. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +10 -7
  263. package/dist/plain/parse/parseDateTimeWithPattern.js +10 -7
  264. package/dist/plain/parse/parseDateWithPattern.d.ts +10 -7
  265. package/dist/plain/parse/parseDateWithPattern.js +10 -7
  266. package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
  267. package/dist/plain/parse/parseTimeWithPattern.js +10 -7
  268. package/dist/plain/parse/parseUnitFromDate.d.ts +11 -3
  269. package/dist/plain/parse/parseUnitFromDate.js +3 -3
  270. package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
  271. package/dist/plain/parse/parseUnitFromDateTime.js +3 -3
  272. package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
  273. package/dist/plain/parse/parseWeekFromDate.js +2 -6
  274. package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
  275. package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
  276. package/dist/plain/validate/isValidDateRange.d.ts +19 -4
  277. package/dist/plain/validate/isValidDateRange.js +1 -4
  278. package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
  279. package/dist/plain/validate/isValidDateTimeRange.js +2 -5
  280. package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
  281. package/dist/plain/validate/isValidTimeRange.js +2 -5
  282. package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
  283. package/dist/precision/convert/fromExcelSerial.js +4 -5
  284. package/dist/precision/convert/fromNanoseconds.d.ts +1 -1
  285. package/dist/precision/convert/fromNanoseconds.js +1 -1
  286. package/dist/precision/convert/toExcelSerial.d.ts +9 -3
  287. package/dist/precision/convert/toExcelSerial.js +3 -4
  288. package/dist/precision/convert/toNanoseconds.d.ts +11 -6
  289. package/dist/precision/convert/toNanoseconds.js +11 -6
  290. package/dist/precision/validate/isValidInstant.d.ts +12 -3
  291. package/dist/precision/validate/isValidInstant.js +12 -3
  292. package/dist/span/calculate/spanMs.d.ts +10 -4
  293. package/dist/span/calculate/spanMs.js +10 -4
  294. package/dist/span/calculate/spanNs.d.ts +10 -4
  295. package/dist/span/calculate/spanNs.js +10 -4
  296. package/dist/span/validate/isValidSpan.d.ts +8 -3
  297. package/dist/span/validate/isValidSpan.js +8 -3
  298. package/dist/transport/calculate/bestAvailable.d.ts +47 -0
  299. package/dist/transport/calculate/bestAvailable.js +76 -0
  300. package/dist/transport/calculate/crossingTime.d.ts +58 -0
  301. package/dist/transport/calculate/crossingTime.js +76 -0
  302. package/dist/transport/calculate/cutoffAt.d.ts +90 -0
  303. package/dist/transport/calculate/cutoffAt.js +209 -0
  304. package/dist/transport/calculate/cutoffSchedule.d.ts +70 -0
  305. package/dist/transport/calculate/cutoffSchedule.js +71 -0
  306. package/dist/transport/calculate/dwellTime.d.ts +16 -7
  307. package/dist/transport/calculate/dwellTime.js +12 -8
  308. package/dist/transport/calculate/estimateDrift.d.ts +65 -0
  309. package/dist/transport/calculate/estimateDrift.js +75 -0
  310. package/dist/transport/calculate/index.d.ts +8 -0
  311. package/dist/transport/calculate/index.js +8 -0
  312. package/dist/transport/calculate/nextDeparture.d.ts +78 -0
  313. package/dist/transport/calculate/nextDeparture.js +131 -0
  314. package/dist/transport/calculate/punctualityRate.d.ts +42 -0
  315. package/dist/transport/calculate/punctualityRate.js +59 -0
  316. package/dist/transport/calculate/scheduleDelivery.d.ts +150 -0
  317. package/dist/transport/calculate/scheduleDelivery.js +300 -0
  318. package/dist/transport/calculate/transitTime.d.ts +21 -3
  319. package/dist/transport/calculate/transitTime.js +29 -46
  320. package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
  321. package/dist/transport/compare/classifyPunctuality.js +64 -0
  322. package/dist/transport/compare/index.d.ts +4 -0
  323. package/dist/transport/compare/index.js +4 -0
  324. package/dist/transport/compare/isPastCutoff.d.ts +33 -0
  325. package/dist/transport/compare/isPastCutoff.js +48 -0
  326. package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
  327. package/dist/transport/compare/scheduleDeviation.js +53 -0
  328. package/dist/transport/compare/timeToCutoff.d.ts +31 -0
  329. package/dist/transport/compare/timeToCutoff.js +47 -0
  330. package/dist/transport/convert/etaAtZone.d.ts +7 -0
  331. package/dist/transport/convert/etaAtZone.js +9 -4
  332. package/dist/transport/index.d.ts +1 -0
  333. package/dist/transport/index.js +1 -0
  334. package/dist/types/business-calendar.d.ts +19 -14
  335. package/dist/types/calendar-options.d.ts +15 -3
  336. package/dist/types/date-cycle-field.d.ts +5 -0
  337. package/dist/types/date-duration-unit.d.ts +4 -0
  338. package/dist/types/date-time-cycle-field.d.ts +4 -0
  339. package/dist/types/date-time-duration-units.d.ts +4 -0
  340. package/dist/types/date-time-unit.d.ts +4 -0
  341. package/dist/types/date-unit.d.ts +4 -0
  342. package/dist/types/disambiguation.d.ts +8 -0
  343. package/dist/types/duration-relative-to.d.ts +8 -0
  344. package/dist/types/duration-string-options.d.ts +28 -0
  345. package/dist/types/fiscal-calendar.d.ts +1 -1
  346. package/dist/types/fractional-digit.d.ts +5 -0
  347. package/dist/types/free-time-options.d.ts +21 -11
  348. package/dist/types/index.d.ts +2 -1
  349. package/dist/types/index.js +2 -1
  350. package/dist/types/interval.d.ts +8 -1
  351. package/dist/types/offset.d.ts +9 -0
  352. package/dist/types/operating-schedule.d.ts +71 -0
  353. package/dist/types/overflow.d.ts +6 -0
  354. package/dist/types/relative-rounding-method.d.ts +6 -0
  355. package/dist/types/relative-time-options.d.ts +33 -5
  356. package/dist/types/rounding-options.d.ts +27 -0
  357. package/dist/types/time-cycle-field.d.ts +4 -0
  358. package/dist/types/time-duration-unit.d.ts +4 -0
  359. package/dist/types/time-unit.d.ts +4 -0
  360. package/dist/types/transport-timestamps.d.ts +54 -0
  361. package/dist/types/transport-timestamps.js +0 -0
  362. package/dist/unix/calculate/addUnix.d.ts +19 -5
  363. package/dist/unix/calculate/addUnix.js +1 -5
  364. package/dist/unix/calculate/diffUnix.d.ts +13 -3
  365. package/dist/unix/calculate/diffUnix.js +1 -3
  366. package/dist/unix/calculate/diffUnixAsDuration.d.ts +13 -3
  367. package/dist/unix/calculate/diffUnixAsDuration.js +1 -3
  368. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +13 -3
  369. package/dist/unix/calculate/endOfQuarterForUnix.js +1 -3
  370. package/dist/unix/calculate/endOfUnix.d.ts +20 -4
  371. package/dist/unix/calculate/endOfUnix.js +1 -4
  372. package/dist/unix/calculate/isBetweenUnix.d.ts +26 -4
  373. package/dist/unix/calculate/isBetweenUnix.js +4 -6
  374. package/dist/unix/calculate/roundUnix.d.ts +31 -3
  375. package/dist/unix/calculate/roundUnix.js +3 -6
  376. package/dist/unix/calculate/setUnix.d.ts +35 -9
  377. package/dist/unix/calculate/setUnix.js +4 -13
  378. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +13 -3
  379. package/dist/unix/calculate/startOfQuarterForUnix.js +1 -3
  380. package/dist/unix/calculate/startOfUnix.d.ts +20 -4
  381. package/dist/unix/calculate/startOfUnix.js +1 -4
  382. package/dist/unix/calculate/subtractUnix.d.ts +19 -5
  383. package/dist/unix/calculate/subtractUnix.js +1 -5
  384. package/dist/unix/compare/areUnixEqual.d.ts +7 -1
  385. package/dist/unix/compare/areUnixEqual.js +1 -1
  386. package/dist/unix/compare/areUnixEqualBy.d.ts +24 -7
  387. package/dist/unix/compare/areUnixEqualBy.js +13 -9
  388. package/dist/unix/compare/isAfterUnix.d.ts +7 -1
  389. package/dist/unix/compare/isAfterUnix.js +1 -1
  390. package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
  391. package/dist/unix/compare/isBeforeUnix.js +1 -1
  392. package/dist/unix/convert/convertUnixToPlainDate.d.ts +14 -4
  393. package/dist/unix/convert/convertUnixToPlainDate.js +2 -4
  394. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +14 -4
  395. package/dist/unix/convert/convertUnixToPlainDateTime.js +2 -4
  396. package/dist/unix/convert/convertUnixToPlainTime.d.ts +14 -4
  397. package/dist/unix/convert/convertUnixToPlainTime.js +2 -4
  398. package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
  399. package/dist/unix/convert/convertUnixToUtc.js +3 -4
  400. package/dist/unix/convert/convertUnixToZoned.d.ts +10 -5
  401. package/dist/unix/convert/convertUnixToZoned.js +4 -5
  402. package/dist/unix/format/formatCalendarUnix.d.ts +27 -19
  403. package/dist/unix/format/formatCalendarUnix.js +4 -5
  404. package/dist/unix/format/formatRelativeUnix.d.ts +54 -5
  405. package/dist/unix/format/formatRelativeUnix.js +3 -5
  406. package/dist/unix/format/formatUnix.d.ts +24 -6
  407. package/dist/unix/format/formatUnix.js +8 -7
  408. package/dist/unix/get/getUnixNow.d.ts +8 -3
  409. package/dist/unix/get/getUnixNow.js +1 -3
  410. package/dist/unix/interval/intervalCountUnix.d.ts +14 -5
  411. package/dist/unix/interval/intervalCountUnix.js +2 -5
  412. package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
  413. package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
  414. package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
  415. package/dist/unix/interval/intervalFromDurationUnix.d.ts +33 -5
  416. package/dist/unix/interval/intervalFromDurationUnix.js +6 -5
  417. package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
  418. package/dist/unix/interval/intervalLengthUnix.d.ts +16 -6
  419. package/dist/unix/interval/intervalLengthUnix.js +4 -6
  420. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +13 -3
  421. package/dist/unix/interval/intervalOverlappingDaysUnix.js +1 -3
  422. package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
  423. package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
  424. package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
  425. package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
  426. package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
  427. package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
  428. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +42 -11
  429. package/dist/unix/interval/splitIntervalByUnitUnix.js +21 -16
  430. package/dist/unix/parse/parseDateFromUnix.d.ts +13 -2
  431. package/dist/unix/parse/parseDateFromUnix.js +1 -2
  432. package/dist/unix/parse/parseDayFromUnix.d.ts +14 -2
  433. package/dist/unix/parse/parseDayFromUnix.js +2 -2
  434. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +13 -1
  435. package/dist/unix/parse/parseDayOfWeekFromUnix.js +1 -1
  436. package/dist/unix/parse/parseHourFromUnix.d.ts +14 -2
  437. package/dist/unix/parse/parseHourFromUnix.js +2 -2
  438. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +14 -2
  439. package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
  440. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +14 -2
  441. package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
  442. package/dist/unix/parse/parseMinuteFromUnix.d.ts +14 -2
  443. package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
  444. package/dist/unix/parse/parseMonthFromUnix.d.ts +14 -2
  445. package/dist/unix/parse/parseMonthFromUnix.js +2 -2
  446. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +14 -2
  447. package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
  448. package/dist/unix/parse/parseSecondFromUnix.d.ts +14 -2
  449. package/dist/unix/parse/parseSecondFromUnix.js +2 -2
  450. package/dist/unix/parse/parseTimeFromUnix.d.ts +13 -2
  451. package/dist/unix/parse/parseTimeFromUnix.js +1 -2
  452. package/dist/unix/parse/parseUnitFromUnix.d.ts +22 -3
  453. package/dist/unix/parse/parseUnitFromUnix.js +2 -3
  454. package/dist/unix/parse/parseWeekFromUnix.d.ts +23 -7
  455. package/dist/unix/parse/parseWeekFromUnix.js +3 -7
  456. package/dist/unix/parse/parseYearFromUnix.d.ts +14 -2
  457. package/dist/unix/parse/parseYearFromUnix.js +2 -2
  458. package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
  459. package/dist/unix/validate/isValidUnixRange.js +1 -4
  460. package/dist/utc/calculate/addUtc.d.ts +7 -4
  461. package/dist/utc/calculate/addUtc.js +1 -4
  462. package/dist/utc/calculate/diffUtc.d.ts +1 -1
  463. package/dist/utc/calculate/diffUtc.js +1 -1
  464. package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
  465. package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
  466. package/dist/utc/calculate/endOfUtc.d.ts +16 -3
  467. package/dist/utc/calculate/endOfUtc.js +2 -3
  468. package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
  469. package/dist/utc/calculate/isBetweenUtc.js +4 -4
  470. package/dist/utc/calculate/roundUtc.d.ts +26 -9
  471. package/dist/utc/calculate/roundUtc.js +3 -12
  472. package/dist/utc/calculate/setUtc.d.ts +7 -4
  473. package/dist/utc/calculate/setUtc.js +1 -4
  474. package/dist/utc/calculate/startOfUtc.d.ts +15 -2
  475. package/dist/utc/calculate/startOfUtc.js +1 -2
  476. package/dist/utc/calculate/subtractUtc.d.ts +7 -4
  477. package/dist/utc/calculate/subtractUtc.js +1 -4
  478. package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
  479. package/dist/utc/compare/areUtcEqualBy.js +2 -3
  480. package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -3
  481. package/dist/utc/convert/convertUtcToPlainDate.js +5 -6
  482. package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +8 -3
  483. package/dist/utc/convert/convertUtcToPlainDateTime.js +5 -6
  484. package/dist/utc/convert/convertUtcToPlainTime.d.ts +8 -3
  485. package/dist/utc/convert/convertUtcToPlainTime.js +5 -6
  486. package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
  487. package/dist/utc/convert/convertUtcToUnix.js +3 -4
  488. package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
  489. package/dist/utc/convert/convertUtcToZoned.js +1 -1
  490. package/dist/utc/format/formatCalendarUtc.d.ts +19 -8
  491. package/dist/utc/format/formatCalendarUtc.js +8 -6
  492. package/dist/utc/format/formatHttp.d.ts +1 -1
  493. package/dist/utc/format/formatHttp.js +1 -1
  494. package/dist/utc/format/formatRelativeUtc.d.ts +30 -10
  495. package/dist/utc/format/formatRelativeUtc.js +9 -11
  496. package/dist/utc/format/formatUtc.d.ts +17 -15
  497. package/dist/utc/format/formatUtc.js +8 -8
  498. package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
  499. package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
  500. package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
  501. package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
  502. package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
  503. package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
  504. package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
  505. package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
  506. package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
  507. package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
  508. package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
  509. package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
  510. package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
  511. package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
  512. package/dist/utc/parse/parseDateFromUtc.d.ts +7 -3
  513. package/dist/utc/parse/parseDateFromUtc.js +1 -3
  514. package/dist/utc/parse/parseDayFromUtc.d.ts +7 -3
  515. package/dist/utc/parse/parseDayFromUtc.js +1 -3
  516. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -3
  517. package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -6
  518. package/dist/utc/parse/parseHourFromUtc.d.ts +7 -3
  519. package/dist/utc/parse/parseHourFromUtc.js +1 -3
  520. package/dist/utc/parse/parseHttp.d.ts +1 -1
  521. package/dist/utc/parse/parseHttp.js +1 -1
  522. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +7 -3
  523. package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -3
  524. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -3
  525. package/dist/utc/parse/parseMillisecondFromUtc.js +1 -3
  526. package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -3
  527. package/dist/utc/parse/parseMinuteFromUtc.js +1 -3
  528. package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -3
  529. package/dist/utc/parse/parseMonthFromUtc.js +1 -3
  530. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +7 -3
  531. package/dist/utc/parse/parseNanosecondFromUtc.js +1 -3
  532. package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -3
  533. package/dist/utc/parse/parseSecondFromUtc.js +1 -3
  534. package/dist/utc/parse/parseTimeFromUtc.d.ts +8 -3
  535. package/dist/utc/parse/parseTimeFromUtc.js +5 -6
  536. package/dist/utc/parse/parseUnitFromUtc.d.ts +17 -5
  537. package/dist/utc/parse/parseUnitFromUtc.js +6 -8
  538. package/dist/utc/parse/parseWeekFromUtc.d.ts +18 -10
  539. package/dist/utc/parse/parseWeekFromUtc.js +7 -13
  540. package/dist/utc/parse/parseYearFromUtc.d.ts +7 -3
  541. package/dist/utc/parse/parseYearFromUtc.js +1 -3
  542. package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
  543. package/dist/utc/validate/isValidUtcRange.js +2 -5
  544. package/dist/zoned/calculate/addZoned.d.ts +20 -10
  545. package/dist/zoned/calculate/addZoned.js +6 -13
  546. package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
  547. package/dist/zoned/calculate/cycleZoned.js +1 -8
  548. package/dist/zoned/calculate/diffZoned.d.ts +1 -1
  549. package/dist/zoned/calculate/diffZoned.js +1 -1
  550. package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
  551. package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
  552. package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
  553. package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
  554. package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
  555. package/dist/zoned/calculate/endOfZoned.js +2 -3
  556. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
  557. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
  558. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
  559. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
  560. package/dist/zoned/calculate/roundZoned.d.ts +21 -4
  561. package/dist/zoned/calculate/roundZoned.js +3 -7
  562. package/dist/zoned/calculate/setZoned.d.ts +25 -8
  563. package/dist/zoned/calculate/setZoned.js +4 -12
  564. package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
  565. package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
  566. package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
  567. package/dist/zoned/calculate/startOfZoned.js +1 -3
  568. package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
  569. package/dist/zoned/calculate/subtractZoned.js +6 -13
  570. package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
  571. package/dist/zoned/compare/areZonedEqualBy.js +7 -5
  572. package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
  573. package/dist/zoned/compare/isBetweenZoned.js +4 -3
  574. package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
  575. package/dist/zoned/compare/isInDaylightSaving.js +40 -44
  576. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +18 -5
  577. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -11
  578. package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
  579. package/dist/zoned/convert/convertZonedToUnix.js +2 -4
  580. package/dist/zoned/convert/convertZonedToZoned.d.ts +1 -1
  581. package/dist/zoned/convert/convertZonedToZoned.js +1 -1
  582. package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
  583. package/dist/zoned/format/formatCalendarZoned.js +13 -9
  584. package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
  585. package/dist/zoned/format/formatRelativeZoned.js +7 -4
  586. package/dist/zoned/format/formatRfc2822.d.ts +2 -2
  587. package/dist/zoned/format/formatRfc2822.js +2 -2
  588. package/dist/zoned/format/formatRfc3339.d.ts +2 -3
  589. package/dist/zoned/format/formatRfc3339.js +2 -3
  590. package/dist/zoned/format/formatTimeZoneName.d.ts +12 -3
  591. package/dist/zoned/format/formatTimeZoneName.js +5 -4
  592. package/dist/zoned/format/formatZonedDateTime.js +2 -1
  593. package/dist/zoned/format/formatZonedRange.js +2 -1
  594. package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
  595. package/dist/zoned/format/formatZonedToParts.js +8 -5
  596. package/dist/zoned/get/getDstTransitions.d.ts +9 -10
  597. package/dist/zoned/get/getDstTransitions.js +12 -3
  598. package/dist/zoned/get/getTimeZoneOffset.d.ts +4 -1
  599. package/dist/zoned/get/getTimeZoneOffset.js +6 -3
  600. package/dist/zoned/get/getZonedNow.d.ts +13 -1
  601. package/dist/zoned/get/getZonedNow.js +12 -3
  602. package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
  603. package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
  604. package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
  605. package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
  606. package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
  607. package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
  608. package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
  609. package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
  610. package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
  611. package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
  612. package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
  613. package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
  614. package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
  615. package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
  616. package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
  617. package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
  618. package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
  619. package/dist/zoned/parse/parseRfc2822.js +1 -1
  620. package/dist/zoned/parse/parseUnitFromZoned.d.ts +9 -3
  621. package/dist/zoned/parse/parseUnitFromZoned.js +1 -3
  622. package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
  623. package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
  624. package/dist/zoned/validate/hasDaylightSaving.d.ts +42 -11
  625. package/dist/zoned/validate/hasDaylightSaving.js +47 -31
  626. package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
  627. package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
  628. package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
  629. package/dist/zoned/validate/isValidZonedRange.js +1 -4
  630. package/package.json +18 -5
  631. package/skills/gmt-arithmetic/SKILL.md +1 -1
  632. package/skills/gmt-basics/SKILL.md +10 -1
  633. package/skills/gmt-integration/SKILL.md +10 -5
  634. package/skills/gmt-timezone/SKILL.md +150 -21
  635. package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
  636. package/dist/internal/resolveReadingTimeZone.js +0 -18
  637. package/dist/types/duration-unit.d.ts +0 -5
  638. /package/dist/types/{duration-unit.js → operating-schedule.js} +0 -0
@@ -11,16 +11,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
11
11
  * durationAs("P1DT2H30M", "hours") is 26.5, not the 2 that `getDurationUnit` reads.
12
12
  * - The result is fractional, not rounded: durationAs("P1DT2H30M", "days") is
13
13
  * 1.1041666666666667. Round it yourself, or reach for `normalizeDuration` instead.
14
- * - `relativeTo` is required whenever a calendar unit (year/month/week) is involved, in
15
- * *either* direction — as the requested `unit`, or because the input duration already has
16
- * a nonzero year/month/week component. Without it, returns null. This is the same
17
- * documented gap `normalizeDuration` (A3) carries; `addDuration`/`subtractDuration` (A2)
18
- * have it worse still, since Temporal gives them no `relativeTo` option at all.
14
+ * - The calendar-unit rule of `relativeTo` is the same one `normalizeDuration` (A3) carries;
15
+ * `addDuration`/`subtractDuration` (A2) have it worse still, since Temporal gives them no
16
+ * `relativeTo` option at all.
19
17
  * - The requested-unit half of that rule bites even on day/time-only input: "P1DT2H30M" has
20
18
  * no calendar component, yet durationAs("P1DT2H30M", "weeks") is still null — a week is a
21
19
  * calendar quantity to Temporal regardless of what it is being measured from.
22
- * - `relativeTo` changes the answer for non-calendar units too when it names a zoned instant:
23
- * a day spanning a DST spring-forward transition totals 23 hours, not 24.
24
20
  * - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
25
21
  * offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
26
22
  * nonexistent one the later instant, and an offset that does not match the zone returns null.
@@ -43,7 +39,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
43
39
  *
44
40
  * @param value ISO 8601 duration string
45
41
  * @param unit DateTimeDurationUnit to total into ("years" | "months" | "weeks" | "days" | "hours" | "minutes" | "seconds" | "milliseconds" | "microseconds" | "nanoseconds", or the singular name)
46
- * @param options optional: { relativeTo } — anchor date/instant, required for any calendar unit
42
+ * @param options The anchor calendar units are measured from
47
43
  * @returns the fractional total in `unit`, or null on invalid input
48
44
  *
49
45
  * @example durationAs("P1DT2H30M", "hours") // 26.5
@@ -5,16 +5,13 @@ import type { DurationRelativeTo } from "../../types/index.js";
5
5
  * - Uses Temporal.Duration.compare: -1 when `a` is shorter, 0 when equal, 1 when `a` is longer.
6
6
  * - Equality is by length, not by spelling — "PT60M" and "PT1H" compare 0, as do "P1D" and
7
7
  * "PT24H" absent a `relativeTo`.
8
- * - `relativeTo` is required whenever a calendar unit (year/month/week) appears on either
9
- * side and the two durations differ; without it, returns null. Field-identical durations
10
- * compare 0 without it ("P1Y" vs "P1Y"), since Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
8
+ * - Field-identical durations compare 0 without a `relativeTo` ("P1Y" vs "P1Y"), since
9
+ * Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
11
10
  * (A2): Temporal.Duration.compare *does* accept `relativeTo`, while .add/.subtract do not,
12
11
  * so calendar-unit durations are comparable here even though they cannot be combined there.
13
12
  * `durationAs` and `normalizeDuration` (A3) carry the same relativeTo rule as this function.
14
13
  * - The anchor genuinely decides the answer rather than merely unblocking it: "P1M" is longer
15
14
  * than "P30D" relative to January (31 days) and shorter relative to February 2024 (29).
16
- * - It matters for non-calendar units too when it names a zoned instant — across a DST
17
- * spring-forward, "P1D" is 23 real hours and so compares shorter than "PT24H".
18
15
  * - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
19
16
  * offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
20
17
  * nonexistent one the later instant, and an offset that does not match the zone returns null.
@@ -37,7 +34,7 @@ import type { DurationRelativeTo } from "../../types/index.js";
37
34
  *
38
35
  * @param a ISO 8601 duration string
39
36
  * @param b ISO 8601 duration string
40
- * @param options optional: { relativeTo } — anchor date/instant, required when either side has a calendar unit
37
+ * @param options The anchor calendar units are measured from
41
38
  * @returns -1, 0, or 1, or null on invalid input
42
39
  *
43
40
  * @example compareDurations("PT1H", "PT30M") // 1
@@ -56,5 +53,14 @@ import type { DurationRelativeTo } from "../../types/index.js";
56
53
  * @example compareDurations("P1M", "P30D", { relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // 0 (a date-time without a zone reads as its date, as Temporal reads relativeTo)
57
54
  */
58
55
  export declare function compareDurations(a: string, b: string, options?: {
56
+ /**
57
+ * The date or zoned date-time both durations are measured from. It is required when either
58
+ * side has a year, month or week and the two differ. With a zoned value, days follow that
59
+ * zone's clock changes, so across a spring-forward transition `"P1D"` is 23 hours and
60
+ * compares shorter than `"PT24H"`.
61
+ *
62
+ * @defaultValue None. Days are 24 hours, and two different durations of which one has a
63
+ * year, month or week return `null`.
64
+ */
59
65
  relativeTo?: DurationRelativeTo;
60
66
  }): number | null;
@@ -7,16 +7,13 @@ import { isOptionsArgument } from "../../internal/isObject.js";
7
7
  * - Uses Temporal.Duration.compare: -1 when `a` is shorter, 0 when equal, 1 when `a` is longer.
8
8
  * - Equality is by length, not by spelling — "PT60M" and "PT1H" compare 0, as do "P1D" and
9
9
  * "PT24H" absent a `relativeTo`.
10
- * - `relativeTo` is required whenever a calendar unit (year/month/week) appears on either
11
- * side and the two durations differ; without it, returns null. Field-identical durations
12
- * compare 0 without it ("P1Y" vs "P1Y"), since Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
10
+ * - Field-identical durations compare 0 without a `relativeTo` ("P1Y" vs "P1Y"), since
11
+ * Temporal checks identity first. Note the asymmetry with `addDuration`/`subtractDuration`
13
12
  * (A2): Temporal.Duration.compare *does* accept `relativeTo`, while .add/.subtract do not,
14
13
  * so calendar-unit durations are comparable here even though they cannot be combined there.
15
14
  * `durationAs` and `normalizeDuration` (A3) carry the same relativeTo rule as this function.
16
15
  * - The anchor genuinely decides the answer rather than merely unblocking it: "P1M" is longer
17
16
  * than "P30D" relative to January (31 days) and shorter relative to February 2024 (29).
18
- * - It matters for non-calendar units too when it names a zoned instant — across a DST
19
- * spring-forward, "P1D" is 23 real hours and so compares shorter than "PT24H".
20
17
  * - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
21
18
  * offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
22
19
  * nonexistent one the later instant, and an offset that does not match the zone returns null.
@@ -39,7 +36,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
39
36
  *
40
37
  * @param a ISO 8601 duration string
41
38
  * @param b ISO 8601 duration string
42
- * @param options optional: { relativeTo } — anchor date/instant, required when either side has a calendar unit
39
+ * @param options The anchor calendar units are measured from
43
40
  * @returns -1, 0, or 1, or null on invalid input
44
41
  *
45
42
  * @example compareDurations("PT1H", "PT30M") // 1
@@ -1,5 +1,19 @@
1
+ /** How `formatDuration` writes unit names, and whether it writes zero components. */
1
2
  export interface FormatDurationOptions {
3
+ /**
4
+ * The length of each unit name, as the `unitDisplay` of `Intl.NumberFormat`: `"long"` ("90
5
+ * minutes"), `"short"` ("90 min") or `"narrow"` ("90m"). The components are joined as a long list
6
+ * ("1 day, 2 hours, and 30 minutes") for `"long"` and as a short list otherwise.
7
+ *
8
+ * @defaultValue `"long"`
9
+ */
2
10
  style?: "long" | "short" | "narrow";
11
+ /**
12
+ * Whether components that are zero are written. `false` leaves them out, so `"P1DT0H30M"`
13
+ * reads "1 day and 30 minutes"; `true` writes every unit from years to seconds.
14
+ *
15
+ * @defaultValue `false`
16
+ */
3
17
  zero?: boolean;
4
18
  }
5
19
  /**
@@ -16,10 +30,8 @@ export interface FormatDurationOptions {
16
30
  * - To render fewer fraction digits, round the string first with parseDuration, e.g.
17
31
  * { smallestUnit: "millisecond", roundingMode: "halfExpand" } for the 3-digit output this
18
32
  * function produced before (parseDuration's default roundingMode "trunc" drops the digits).
19
- * - By default, zero-valued components are omitted (e.g. "P1DT0H30M" -> "1 day and 30
20
- * minutes"). Pass { zero: true } to include them.
21
33
  * - A zero-length duration (e.g. "PT0S") always renders its seconds component
22
- * ("0 seconds") even with the default zero-omitting behavior, since omitting
34
+ * ("0 seconds") even when zero components are left out, since omitting
23
35
  * every component would otherwise produce "".
24
36
  * - Negative durations render each component with a leading "-" (Temporal stores
25
37
  * every field of a negative duration as a negative number).
@@ -27,7 +39,7 @@ export interface FormatDurationOptions {
27
39
  *
28
40
  * @param value ISO 8601 duration string
29
41
  * @param locale BCP 47 locale tag, passed to Intl.NumberFormat/Intl.ListFormat; system default if omitted, or a preference list of tags (ECMA-402)
30
- * @param options optional: { style: "long" | "short" | "narrow" (default "long"), zero: boolean (default false) }
42
+ * @param options How unit names are written, and whether zero components are shown
31
43
  * @returns human-readable rendering of the duration, or "" on invalid input
32
44
  *
33
45
  * @example formatDuration("P1DT2H30M", "en-US") // "1 day, 2 hours, and 30 minutes"
@@ -1,5 +1,6 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { isOptionsArgument } from "../../internal/isObject.js";
3
+ import { optionOrDefault } from "../../internal/optionOrDefault.js";
3
4
  const UNIT_TO_INTL = {
4
5
  years: "year",
5
6
  months: "month",
@@ -58,10 +59,8 @@ function exactSeconds(duration) {
58
59
  * - To render fewer fraction digits, round the string first with parseDuration, e.g.
59
60
  * { smallestUnit: "millisecond", roundingMode: "halfExpand" } for the 3-digit output this
60
61
  * function produced before (parseDuration's default roundingMode "trunc" drops the digits).
61
- * - By default, zero-valued components are omitted (e.g. "P1DT0H30M" -> "1 day and 30
62
- * minutes"). Pass { zero: true } to include them.
63
62
  * - A zero-length duration (e.g. "PT0S") always renders its seconds component
64
- * ("0 seconds") even with the default zero-omitting behavior, since omitting
63
+ * ("0 seconds") even when zero components are left out, since omitting
65
64
  * every component would otherwise produce "".
66
65
  * - Negative durations render each component with a leading "-" (Temporal stores
67
66
  * every field of a negative duration as a negative number).
@@ -69,7 +68,7 @@ function exactSeconds(duration) {
69
68
  *
70
69
  * @param value ISO 8601 duration string
71
70
  * @param locale BCP 47 locale tag, passed to Intl.NumberFormat/Intl.ListFormat; system default if omitted, or a preference list of tags (ECMA-402)
72
- * @param options optional: { style: "long" | "short" | "narrow" (default "long"), zero: boolean (default false) }
71
+ * @param options How unit names are written, and whether zero components are shown
73
72
  * @returns human-readable rendering of the duration, or "" on invalid input
74
73
  *
75
74
  * @example formatDuration("P1DT2H30M", "en-US") // "1 day, 2 hours, and 30 minutes"
@@ -94,7 +93,7 @@ export function formatDuration(value, locale, options = {}) {
94
93
  }
95
94
  try {
96
95
  const duration = Temporal.Duration.from(value);
97
- const style = options.style === undefined ? "long" : options.style;
96
+ const style = optionOrDefault(options.style, "long");
98
97
  const includeZero = options.zero ?? false;
99
98
  const amounts = {
100
99
  years: duration.years,
@@ -4,19 +4,9 @@ import type { DurationRelativeTo } from "../../types/index.js";
4
4
  * Roll an ISO 8601 duration string's small units into larger ones.
5
5
  *
6
6
  * - Uses Temporal.Duration.from and .round to rebalance, then .toString() to re-emit.
7
- * - Defaults to { largestUnit: "auto" }, which resolves to the larger of smallestUnit and the
8
- * duration's own largest non-zero unit, then balances up to it. Units are promoted only up to
9
- * a unit already present: "PT90M" stays "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M"
10
- * becomes "PT2H30M". Pass an explicit largestUnit to promote further.
11
- * - relativeTo is required whenever a calendar unit (year/month/week) is involved,
12
- * either as the requested largestUnit or because the input duration already has a
13
- * nonzero year/month/week component (this applies even under the "auto" default).
14
- * Without relativeTo in either case, returns "".
15
- * - roundingIncrement must evenly divide, and be less than, 24 for hour, 60 for minute/second
16
- * and 1000 for millisecond/microsecond/nanosecond (so 60 and 24 themselves are rejected).
17
- * For year/month/week/day it has no maximum, but an increment above 1 is rejected unless
18
- * largestUnit is that same unit ("auto" resolves to the largest unit present). An invalid
19
- * increment returns "".
7
+ * - With no options, units are promoted only up to a unit already present: "PT90M" stays
8
+ * "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M" becomes "PT2H30M". Pass an explicit
9
+ * largestUnit to promote further.
20
10
  * - A zoned relativeTo string resolves its wall time with disambiguation "compatible" and offset
21
11
  * "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a nonexistent
22
12
  * one the later instant, and an offset that does not match the zone returns "". Pass an
@@ -38,7 +28,7 @@ import type { DurationRelativeTo } from "../../types/index.js";
38
28
  * invalid relativeTo.
39
29
  *
40
30
  * @param value ISO 8601 duration string
41
- * @param options optional: { largestUnit, smallestUnit, roundingIncrement, roundingMode, relativeTo } per Temporal's Duration.round options
31
+ * @param options The units to balance between, the rounding, and the anchor for calendar units, as Temporal's Duration.round takes them
42
32
  * @returns rebalanced ISO 8601 duration string, or "" on invalid input
43
33
  *
44
34
  * @example normalizeDuration("PT90M", { largestUnit: "hour" }) // "PT1H30M"
@@ -55,9 +45,44 @@ import type { DurationRelativeTo } from "../../types/index.js";
55
45
  * @example normalizeDuration("P45D", { largestUnit: "month", relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // "P1M15D" (a date-time without a zone reads as its date, as Temporal reads relativeTo)
56
46
  */
57
47
  export declare function normalizeDuration(value: string, options?: {
48
+ /**
49
+ * The largest unit the result may carry; smaller units are rolled up into it. `"auto"` is
50
+ * the larger of `smallestUnit` and the duration's own largest nonzero unit, so nothing is
51
+ * promoted past a unit already present.
52
+ *
53
+ * @defaultValue `"auto"`
54
+ */
58
55
  largestUnit?: Temporal.LargestUnit<Temporal.DateTimeUnit>;
56
+ /**
57
+ * The smallest unit the result may carry; anything smaller is rounded into it.
58
+ *
59
+ * @defaultValue `"nanosecond"`, Temporal's default.
60
+ */
59
61
  smallestUnit?: Temporal.SmallestUnit<Temporal.DateTimeUnit>;
62
+ /**
63
+ * The step `smallestUnit` is rounded to. It must evenly divide, and be less than, 24 for
64
+ * hour, 60 for minute and second, and 1000 for the sub-second units. For year, month, week
65
+ * and day it has no maximum, but an increment above 1 is rejected unless `largestUnit` is
66
+ * that same unit; an invalid increment returns `""`.
67
+ *
68
+ * @defaultValue `1`, Temporal's default.
69
+ */
60
70
  roundingIncrement?: number;
71
+ /**
72
+ * Which way a value between two steps goes when `smallestUnit` or `roundingIncrement` rounds
73
+ * the duration. `"halfExpand"` rounds to the nearest step, a half going away from zero, and
74
+ * `"trunc"` rounds toward zero.
75
+ *
76
+ * @defaultValue `"halfExpand"`, Temporal's default.
77
+ */
61
78
  roundingMode?: Temporal.RoundingMode;
79
+ /**
80
+ * The date or zoned date-time the duration is measured from. It is required whenever a year,
81
+ * month or week is involved, as `largestUnit` or `smallestUnit` or as a nonzero field of the
82
+ * duration, even under the `"auto"` default.
83
+ *
84
+ * @defaultValue None. Days are 24 hours, and a duration or unit that involves a year, month
85
+ * or week returns `""`.
86
+ */
62
87
  relativeTo?: DurationRelativeTo;
63
88
  }): string;
@@ -1,23 +1,14 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { durationRound, resolveDurationRelativeTo } from "../../internal/index.js";
3
3
  import { isOptionsArgument } from "../../internal/isObject.js";
4
+ import { optionOrDefault } from "../../internal/optionOrDefault.js";
4
5
  /**
5
6
  * Roll an ISO 8601 duration string's small units into larger ones.
6
7
  *
7
8
  * - Uses Temporal.Duration.from and .round to rebalance, then .toString() to re-emit.
8
- * - Defaults to { largestUnit: "auto" }, which resolves to the larger of smallestUnit and the
9
- * duration's own largest non-zero unit, then balances up to it. Units are promoted only up to
10
- * a unit already present: "PT90M" stays "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M"
11
- * becomes "PT2H30M". Pass an explicit largestUnit to promote further.
12
- * - relativeTo is required whenever a calendar unit (year/month/week) is involved,
13
- * either as the requested largestUnit or because the input duration already has a
14
- * nonzero year/month/week component (this applies even under the "auto" default).
15
- * Without relativeTo in either case, returns "".
16
- * - roundingIncrement must evenly divide, and be less than, 24 for hour, 60 for minute/second
17
- * and 1000 for millisecond/microsecond/nanosecond (so 60 and 24 themselves are rejected).
18
- * For year/month/week/day it has no maximum, but an increment above 1 is rejected unless
19
- * largestUnit is that same unit ("auto" resolves to the largest unit present). An invalid
20
- * increment returns "".
9
+ * - With no options, units are promoted only up to a unit already present: "PT90M" stays
10
+ * "PT90M", but "P1DT25H" becomes "P2DT1H" and "PT1H90M" becomes "PT2H30M". Pass an explicit
11
+ * largestUnit to promote further.
21
12
  * - A zoned relativeTo string resolves its wall time with disambiguation "compatible" and offset
22
13
  * "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a nonexistent
23
14
  * one the later instant, and an offset that does not match the zone returns "". Pass an
@@ -39,7 +30,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
39
30
  * invalid relativeTo.
40
31
  *
41
32
  * @param value ISO 8601 duration string
42
- * @param options optional: { largestUnit, smallestUnit, roundingIncrement, roundingMode, relativeTo } per Temporal's Duration.round options
33
+ * @param options The units to balance between, the rounding, and the anchor for calendar units, as Temporal's Duration.round takes them
43
34
  * @returns rebalanced ISO 8601 duration string, or "" on invalid input
44
35
  *
45
36
  * @example normalizeDuration("PT90M", { largestUnit: "hour" }) // "PT1H30M"
@@ -65,7 +56,7 @@ export function normalizeDuration(value, options) {
65
56
  try {
66
57
  const duration = Temporal.Duration.from(value);
67
58
  return durationRound(duration, {
68
- largestUnit: options?.largestUnit === undefined ? "auto" : options.largestUnit,
59
+ largestUnit: optionOrDefault(options?.largestUnit, "auto"),
69
60
  smallestUnit: options?.smallestUnit,
70
61
  roundingIncrement: options?.roundingIncrement,
71
62
  roundingMode: options?.roundingMode,
@@ -3,12 +3,10 @@ import { Temporal } from "@js-temporal/polyfill";
3
3
  * Parse and re-normalize an ISO 8601 duration string.
4
4
  *
5
5
  * - Uses Temporal.Duration.from to parse, then .toString() to re-emit.
6
- * - `smallestUnit`, `fractionalSecondDigits`, and `roundingMode` control the precision/rounding
7
- * of the re-emitted string, per Temporal's ToStringPrecisionOptions.
8
6
  * - Returns "" for invalid input.
9
7
  *
10
8
  * @param value ISO 8601 duration string
11
- * @param options optional: smallestUnit ("second" | "millisecond" | "microsecond" | "nanosecond" — "minute"/"hour" are rejected by Temporal, resulting in ""), fractionalSecondDigits ("auto" | 0-9, ignored when smallestUnit is also set), roundingMode
9
+ * @param options The precision of the string written back, as Temporal's ToStringPrecisionOptions
12
10
  * @returns re-normalized ISO 8601 duration string, or "" on invalid input
13
11
  *
14
12
  * @example parseDuration("P1DT2H30M") // "P1DT2H30M"
@@ -18,7 +16,27 @@ import { Temporal } from "@js-temporal/polyfill";
18
16
  * @example parseDuration("invalid") // ""
19
17
  */
20
18
  export declare function parseDuration(value: string, options?: {
19
+ /**
20
+ * The smallest unit written in the string: `"second"`, `"millisecond"`, `"microsecond"` or
21
+ * `"nanosecond"`. It sets how many fractional-second digits appear and takes precedence over
22
+ * `fractionalSecondDigits`. `"minute"` returns `""`, as `Temporal.Duration` refuses it.
23
+ *
24
+ * @defaultValue None. The precision comes from `fractionalSecondDigits`.
25
+ */
21
26
  smallestUnit?: Temporal.ToStringPrecisionOptions["smallestUnit"];
27
+ /**
28
+ * The number of fractional-second digits written: `0` to `9` writes exactly that many, and
29
+ * `"auto"` writes as many as the duration needs, with no trailing zeros. It has no effect when
30
+ * `smallestUnit` is given.
31
+ *
32
+ * @defaultValue `"auto"`, Temporal's default.
33
+ */
22
34
  fractionalSecondDigits?: Temporal.ToStringPrecisionOptions["fractionalSecondDigits"];
35
+ /**
36
+ * How the duration is rounded when the precision asked for drops digits. `"trunc"` cuts them
37
+ * off; `"halfExpand"` rounds to the nearest value, a half going away from zero.
38
+ *
39
+ * @defaultValue `"trunc"`, Temporal's default.
40
+ */
23
41
  roundingMode?: Temporal.ToStringPrecisionOptions["roundingMode"];
24
42
  }): string;
@@ -4,12 +4,10 @@ import { isOptionsArgument } from "../../internal/isObject.js";
4
4
  * Parse and re-normalize an ISO 8601 duration string.
5
5
  *
6
6
  * - Uses Temporal.Duration.from to parse, then .toString() to re-emit.
7
- * - `smallestUnit`, `fractionalSecondDigits`, and `roundingMode` control the precision/rounding
8
- * of the re-emitted string, per Temporal's ToStringPrecisionOptions.
9
7
  * - Returns "" for invalid input.
10
8
  *
11
9
  * @param value ISO 8601 duration string
12
- * @param options optional: smallestUnit ("second" | "millisecond" | "microsecond" | "nanosecond" — "minute"/"hour" are rejected by Temporal, resulting in ""), fractionalSecondDigits ("auto" | 0-9, ignored when smallestUnit is also set), roundingMode
10
+ * @param options The precision of the string written back, as Temporal's ToStringPrecisionOptions
13
11
  * @returns re-normalized ISO 8601 duration string, or "" on invalid input
14
12
  *
15
13
  * @example parseDuration("P1DT2H30M") // "P1DT2H30M"
@@ -34,7 +34,7 @@ export type LocalTimeClassification = "unique" | "ambiguous" | "nonexistent";
34
34
  * - Returns null on invalid input — never `"unique"`, which would read as a verdict.
35
35
  *
36
36
  * @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
37
- * @param timeZone IANA timeZone identifier the wall time is read in
37
+ * @param timeZone IANA name or UTC offset the wall time is read in
38
38
  * @returns "unique" | "ambiguous" | "nonexistent", or null on invalid input
39
39
  *
40
40
  * @example classifyLocal("2024-07-15T12:00:00", "America/New_York") // "unique"
@@ -22,7 +22,7 @@ import { plainToZoned } from "../../internal/index.js";
22
22
  * - Returns null on invalid input — never `"unique"`, which would read as a verdict.
23
23
  *
24
24
  * @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
25
- * @param timeZone IANA timeZone identifier the wall time is read in
25
+ * @param timeZone IANA name or UTC offset the wall time is read in
26
26
  * @returns "unique" | "ambiguous" | "nonexistent", or null on invalid input
27
27
  *
28
28
  * @example classifyLocal("2024-07-15T12:00:00", "America/New_York") // "unique"
@@ -24,7 +24,9 @@ import type { OffsetInstant } from "./toOffsetInstant.js";
24
24
  * - With a `timeZone`, a sub-minute offset is *written* rounded to the minute, because RFC
25
25
  * 9557 has no field for the seconds — `Africa/Monrovia`'s `-00:44:30` renders as `-00:45`.
26
26
  * The bracketed zone is what resolves it, so the instant stays exact and the round trip
27
- * returns `-00:44:30`. Without a `timeZone` there is no zone to resolve against, so the
27
+ * returns `-00:44:30`. Two exceptions, both Temporal's own: a wall time repeated inside
28
+ * a sub-minute offset change reads back as its first pass (see `isValidInstant`), and a
29
+ * string whose local date is −271821-04-19 is refused by `toOffsetInstant`. Without a `timeZone` there is no zone to resolve against, so the
28
30
  * full `±HH:MM:SS` is written instead; that is ISO 8601, not RFC 9557.
29
31
  * - Returns `""` on invalid input.
30
32
  *
@@ -26,7 +26,9 @@ import { utcOffset } from "../../regex/index.js";
26
26
  * - With a `timeZone`, a sub-minute offset is *written* rounded to the minute, because RFC
27
27
  * 9557 has no field for the seconds — `Africa/Monrovia`'s `-00:44:30` renders as `-00:45`.
28
28
  * The bracketed zone is what resolves it, so the instant stays exact and the round trip
29
- * returns `-00:44:30`. Without a `timeZone` there is no zone to resolve against, so the
29
+ * returns `-00:44:30`. Two exceptions, both Temporal's own: a wall time repeated inside
30
+ * a sub-minute offset change reads back as its first pass (see `isValidInstant`), and a
31
+ * string whose local date is −271821-04-19 is refused by `toOffsetInstant`. Without a `timeZone` there is no zone to resolve against, so the
30
32
  * full `±HH:MM:SS` is written instead; that is ISO 8601, not RFC 9557.
31
33
  * - Returns `""` on invalid input.
32
34
  *
@@ -6,11 +6,8 @@ import type { Disambiguation } from "../../types/index.js";
6
6
  * into an instant takes a zone the sender did not send plus a policy for the two days a year
7
7
  * the mapping is not one-to-one. This states both.
8
8
  *
9
- * - `disambiguation` decides what happens when the wall time is ambiguous (a fall-back hour
10
- * that happens twice) or nonexistent (a spring-forward hour that never happens):
11
- * `"compatible"` (the default, matching Temporal), `"earlier"`, `"later"`, or `"reject"`,
12
- * which returns `""` rather than resolving. Call `classifyLocal` first to find out which
13
- * case you are in before a policy is applied.
9
+ * - Call `classifyLocal` first to find out whether the wall time is ambiguous or nonexistent
10
+ * before a `disambiguation` policy is applied.
14
11
  * - Returns a UTC instant, exactly — no rounding, so a nanosecond wall time survives. Pass it
15
12
  * to `toOffsetInstant` for the offset pair, or reach for `convertPlainDateTimeToZoned` when
16
13
  * what you want is the bracketed zoned string (it defaults to millisecond precision).
@@ -21,8 +18,8 @@ import type { Disambiguation } from "../../types/index.js";
21
18
  * - Returns `""` on invalid input.
22
19
  *
23
20
  * @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
24
- * @param timeZone IANA timeZone identifier the wall time is read in
25
- * @param optionsArg optional: disambiguation ("compatible" | "earlier" | "later" | "reject")
21
+ * @param timeZone IANA name or UTC offset the wall time is read in
22
+ * @param optionsArg How an ambiguous or nonexistent wall time is resolved
26
23
  * @returns UTC instant string ending in "Z", or "" on invalid input
27
24
  *
28
25
  * @example resolveLocal("2024-07-15T12:00:00", "America/New_York") // "2024-07-15T16:00:00Z"
@@ -36,5 +33,13 @@ import type { Disambiguation } from "../../types/index.js";
36
33
  * @example resolveLocal("2024-07-15T12:00:00", "Invalid/Zone") // ""
37
34
  */
38
35
  export declare function resolveLocal(localDateTime: string, timeZone: string, optionsArg?: {
36
+ /**
37
+ * What happens when the wall time is ambiguous (a fall-back hour that happens twice) or
38
+ * nonexistent (a spring-forward hour that never happens). `"compatible"` takes the earlier
39
+ * instant of an ambiguous time and the later one of a nonexistent time, `"earlier"` and
40
+ * `"later"` take that side in both cases, and `"reject"` returns `""` rather than resolving.
41
+ *
42
+ * @defaultValue `"compatible"`, Temporal's default.
43
+ */
39
44
  disambiguation?: Disambiguation;
40
45
  }): string;
@@ -2,6 +2,7 @@ import { isValidDateTime } from "../../plain/validate/index.js";
2
2
  import { isValidTimeZone } from "../../zoned/validate/index.js";
3
3
  import { isoStringBody, zonedDateTimeFrom } from "../../internal/index.js";
4
4
  import { isOptionsArgument } from "../../internal/isObject.js";
5
+ import { optionOrDefault } from "../../internal/optionOrDefault.js";
5
6
  const DISAMBIGUATIONS = [
6
7
  "compatible",
7
8
  "earlier",
@@ -15,11 +16,8 @@ const DISAMBIGUATIONS = [
15
16
  * into an instant takes a zone the sender did not send plus a policy for the two days a year
16
17
  * the mapping is not one-to-one. This states both.
17
18
  *
18
- * - `disambiguation` decides what happens when the wall time is ambiguous (a fall-back hour
19
- * that happens twice) or nonexistent (a spring-forward hour that never happens):
20
- * `"compatible"` (the default, matching Temporal), `"earlier"`, `"later"`, or `"reject"`,
21
- * which returns `""` rather than resolving. Call `classifyLocal` first to find out which
22
- * case you are in before a policy is applied.
19
+ * - Call `classifyLocal` first to find out whether the wall time is ambiguous or nonexistent
20
+ * before a `disambiguation` policy is applied.
23
21
  * - Returns a UTC instant, exactly — no rounding, so a nanosecond wall time survives. Pass it
24
22
  * to `toOffsetInstant` for the offset pair, or reach for `convertPlainDateTimeToZoned` when
25
23
  * what you want is the bracketed zoned string (it defaults to millisecond precision).
@@ -30,8 +28,8 @@ const DISAMBIGUATIONS = [
30
28
  * - Returns `""` on invalid input.
31
29
  *
32
30
  * @param localDateTime zoneless ISO 8601 local datetime string (e.g. "2024-11-03T01:30:00")
33
- * @param timeZone IANA timeZone identifier the wall time is read in
34
- * @param optionsArg optional: disambiguation ("compatible" | "earlier" | "later" | "reject")
31
+ * @param timeZone IANA name or UTC offset the wall time is read in
32
+ * @param optionsArg How an ambiguous or nonexistent wall time is resolved
35
33
  * @returns UTC instant string ending in "Z", or "" on invalid input
36
34
  *
37
35
  * @example resolveLocal("2024-07-15T12:00:00", "America/New_York") // "2024-07-15T16:00:00Z"
@@ -49,9 +47,7 @@ export function resolveLocal(localDateTime, timeZone, optionsArg) {
49
47
  if (!isOptionsArgument(optionsArg)) {
50
48
  return "";
51
49
  }
52
- const disambiguation = optionsArg?.disambiguation === undefined
53
- ? "compatible"
54
- : optionsArg.disambiguation;
50
+ const disambiguation = optionOrDefault(optionsArg?.disambiguation, "compatible");
55
51
  if (!isValidDateTime(localDateTime) ||
56
52
  !isValidTimeZone(timeZone) ||
57
53
  !DISAMBIGUATIONS.includes(disambiguation)) {
@@ -1,14 +1,6 @@
1
1
  /**
2
2
  * An absolute instant paired with the local UTC offset in force where the event happened.
3
3
  *
4
- * @remarks Members:
5
- *
6
- * | Member | Type | Description |
7
- * | --- | --- | --- |
8
- * | `instant` | `string` | UTC instant, ISO 8601 ending in `Z` (e.g. `2024-07-15T16:00:00Z`). Orders events globally. |
9
- * | `offset` | `string` | UTC offset in force where the event happened, `±HH:MM` (or `±HH:MM:SS` for a pre-1972 zone that did not run on a whole minute). Renders the event as the human on the ground saw it. |
10
- * | `timeZone` | `string \| undefined` | IANA zone identifier, when one is known. Absent from most feeds, so absent from most pairs. |
11
- *
12
4
  * Neither `instant` nor `offset` derives from the other, which is why both are stored. It is
13
5
  * the shape GS1 EPCIS 2.0 (`eventTime` + a required `eventTimeZoneOffset`), UN/EDIFACT DTM
14
6
  * (qualifier `303`/`304`) and DICOM (`DT` + `&ZZXX`) all exchange.
@@ -22,8 +14,22 @@
22
14
  * };
23
15
  */
24
16
  export interface OffsetInstant {
17
+ /**
18
+ * The UTC instant, ISO 8601 ending in `Z` (e.g. `2024-07-15T16:00:00Z`). Orders events globally.
19
+ */
25
20
  instant: string;
21
+ /**
22
+ * The UTC offset in force where the event happened, `±HH:MM` (or `±HH:MM:SS` for a pre-1972
23
+ * zone that did not run on a whole minute). Renders the event as the human on the ground saw it.
24
+ */
26
25
  offset: string;
26
+ /**
27
+ * The IANA name of the zone, when one is known. Most feeds send none, so `toOffsetInstant` leaves
28
+ * it out unless the string or its `timeZone` argument names a zone.
29
+ *
30
+ * @defaultValue None. The pair names no zone, and `offset` alone places the instant on a local
31
+ * clock.
32
+ */
27
33
  timeZone?: string;
28
34
  }
29
35
  /**
@@ -68,10 +74,15 @@ export interface OffsetInstant {
68
74
  * rounding it would put the pair 30 seconds from the event it describes. Such a zone's
69
75
  * *string* still carries the rounded `-00:45`, because RFC 9557 caps a written offset at
70
76
  * minutes; the bracketed zone is what resolves it, so the instant stays exact.
77
+ * - A bracketed zone is checked as `Temporal.ZonedDateTime.from` checks it, which also rejects
78
+ * a local date of −271821-04-19. A zone west of Greenwich shows that date for the first hours
79
+ * of the instant range, so a zoned string written there
80
+ * (`-271821-04-19T23:59:00-00:01[Europe/London]`) returns null, although `isValidInstant`
81
+ * accepts it. Pass the instant in `Z` form with `timeZone` instead.
71
82
  * - Returns null on invalid input, not a zero-offset pair — `+00:00` is a real offset.
72
83
  *
73
84
  * @param value ISO 8601 instant string, with an offset designator and optionally a bracketed zone
74
- * @param timeZone optional IANA zone identifier to read the offset in
85
+ * @param timeZone optional IANA name or UTC offset to read the offset in
75
86
  * @returns `{ instant, offset, timeZone? }`, or null on invalid input
76
87
  *
77
88
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[America/New_York]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00", timeZone: "America/New_York" }
@@ -83,6 +94,8 @@ export interface OffsetInstant {
83
94
  * @example toOffsetInstant("1969-12-31T23:15:30-00:45[Africa/Monrovia]") // { instant: "1970-01-01T00:00:00Z", offset: "-00:44:30", timeZone: "Africa/Monrovia" } — the zone, not the rounded offset, fixes the instant
84
95
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[-04:00]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00" } — a bracketed offset is not a zone, so no timeZone field
85
96
  * @example toOffsetInstant("2024-07-15T12:00:00-05:00[America/New_York]") // null (offset contradicts the bracketed zone)
97
+ * @example toOffsetInstant("-271821-04-19T23:59:00-00:01[Europe/London]") // null (a bracketed zone on a local date before Temporal's date range)
98
+ * @example toOffsetInstant("-271821-04-20T00:00:15Z", "Europe/London") // { instant: "-271821-04-20T00:00:15Z", offset: "-00:01:15", timeZone: "Europe/London" }
86
99
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[foo=bar]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00" } — an elective annotation is ignored
87
100
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[!foo=bar]") // null (an unknown critical annotation)
88
101
  * @example toOffsetInstant("2024-07-15T12:00:00") // null (no offset designator)
@@ -46,10 +46,15 @@ const timeZoneAnnotation = new RegExp(`^${TIME_ZONE_ANNOTATION}`);
46
46
  * rounding it would put the pair 30 seconds from the event it describes. Such a zone's
47
47
  * *string* still carries the rounded `-00:45`, because RFC 9557 caps a written offset at
48
48
  * minutes; the bracketed zone is what resolves it, so the instant stays exact.
49
+ * - A bracketed zone is checked as `Temporal.ZonedDateTime.from` checks it, which also rejects
50
+ * a local date of −271821-04-19. A zone west of Greenwich shows that date for the first hours
51
+ * of the instant range, so a zoned string written there
52
+ * (`-271821-04-19T23:59:00-00:01[Europe/London]`) returns null, although `isValidInstant`
53
+ * accepts it. Pass the instant in `Z` form with `timeZone` instead.
49
54
  * - Returns null on invalid input, not a zero-offset pair — `+00:00` is a real offset.
50
55
  *
51
56
  * @param value ISO 8601 instant string, with an offset designator and optionally a bracketed zone
52
- * @param timeZone optional IANA zone identifier to read the offset in
57
+ * @param timeZone optional IANA name or UTC offset to read the offset in
53
58
  * @returns `{ instant, offset, timeZone? }`, or null on invalid input
54
59
  *
55
60
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[America/New_York]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00", timeZone: "America/New_York" }
@@ -61,6 +66,8 @@ const timeZoneAnnotation = new RegExp(`^${TIME_ZONE_ANNOTATION}`);
61
66
  * @example toOffsetInstant("1969-12-31T23:15:30-00:45[Africa/Monrovia]") // { instant: "1970-01-01T00:00:00Z", offset: "-00:44:30", timeZone: "Africa/Monrovia" } — the zone, not the rounded offset, fixes the instant
62
67
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[-04:00]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00" } — a bracketed offset is not a zone, so no timeZone field
63
68
  * @example toOffsetInstant("2024-07-15T12:00:00-05:00[America/New_York]") // null (offset contradicts the bracketed zone)
69
+ * @example toOffsetInstant("-271821-04-19T23:59:00-00:01[Europe/London]") // null (a bracketed zone on a local date before Temporal's date range)
70
+ * @example toOffsetInstant("-271821-04-20T00:00:15Z", "Europe/London") // { instant: "-271821-04-20T00:00:15Z", offset: "-00:01:15", timeZone: "Europe/London" }
64
71
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[foo=bar]") // { instant: "2024-07-15T16:00:00Z", offset: "-04:00" } — an elective annotation is ignored
65
72
  * @example toOffsetInstant("2024-07-15T12:00:00-04:00[!foo=bar]") // null (an unknown critical annotation)
66
73
  * @example toOffsetInstant("2024-07-15T12:00:00") // null (no offset designator)
@@ -80,8 +87,8 @@ export function toOffsetInstant(value, timeZone) {
80
87
  return null;
81
88
  }
82
89
  try {
83
- // `parseInstantNanoseconds` reads the offset and ignores the bracket, so a self-
84
- // contradictory string parses fine as an instant. `ZonedDateTime.from` is what checks
90
+ // `parseInstantNanoseconds` does not validate the bracket, so a self-contradictory string
91
+ // parses fine as an instant. `ZonedDateTime.from` is what checks
85
92
  // the two agree, and it runs even when `timeZone` overrides the bracketed zone.
86
93
  // Only a time zone annotation makes the string zoned: it is the first annotation, and the
87
94
  // only kind with no `=` (RFC 9557 §4.1). A calendar or elective annotation alone leaves an