@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
@@ -1,14 +1,14 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { plainDateTimeFormatOptions } from "../../internal/plainFormatOptions.js";
3
3
  import { isValidDateTime } from "../validate/index.js";
4
+ import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
4
5
  /**
5
6
  * Return the locale-formatted parts of a PlainDateTime.
6
7
  *
7
8
  * - This is GMT's substitute for a token formatter (Luxon `toFormat`, date-fns
8
9
  * `format`). A token pattern hard-codes field order and ships US ordering to
9
10
  * every locale; `formatToParts` gives the caller full control over presentation
10
- * while the *locale* keeps control of order. See Decision 1 in
11
- * `context/roadmap/issues/J.md`.
11
+ * while the *locale* keeps control of order.
12
12
  * - Each part is `{ type, value }` where `type` can be:
13
13
  * `"era"`, `"year"`, `"relatedYear"`, `"yearName"`, `"month"`, `"day"`, `"weekday"`,
14
14
  * `"hour"`, `"minute"`, `"second"`, `"fractionalSecond"`, `"dayPeriod"`, `"literal"`.
@@ -26,8 +26,11 @@ import { isValidDateTime } from "../validate/index.js";
26
26
  * zone field): a `timeZoneName` option is ignored, and a `"long"`/`"full"` `timeStyle` keeps its
27
27
  * hour, minute and second and drops the zone, formatting as the locale's `"medium"` time. As in
28
28
  * `Intl.DateTimeFormat`, `timeZoneName` together with `dateStyle`/`timeStyle` yields `[]`.
29
- * - Before the day period, `en-US` has used U+202F NARROW NO-BREAK SPACE since CLDR 42 (ICU 72), not
30
- * an ordinary space; the examples write it as `"\u202f"` so the difference is visible.
29
+ * - The literal before the day period depends on the runtime. CLDR 42 (ICU 72) put U+202F NARROW
30
+ * NO-BREAK SPACE there for `en-US`; Node 22 and 24 return it in the parts, and Node 26 returns
31
+ * an ordinary space (U+0020) instead. Both were checked on those runtimes. The examples show the
32
+ * Node 22 and 24 form, written as `"\u202f"` so the difference is visible. Treat the two
33
+ * characters as equal when you compare parts.
31
34
  * - Returns `[]` for invalid input.
32
35
  * - **Compatibility:** before 1.16.0 a call with no field options returned only the date parts.
33
36
  * Pass `{ year: "numeric", month: "numeric", day: "numeric" }` to keep that output.
@@ -62,9 +65,10 @@ export function formatDateTimeToParts(value, locale, options) {
62
65
  // PlainDateTime format may contain, so no zone field can appear.
63
66
  // Constructing with the caller's options first surfaces the TypeError or
64
67
  // RangeError Intl.DateTimeFormat raises for invalid ones.
65
- new Intl.DateTimeFormat(locale, options);
68
+ const read = readDateTimeFormatOptions(options);
69
+ new Intl.DateTimeFormat(locale, read);
66
70
  const epochMilliseconds = Temporal.PlainDateTime.from(value).toZonedDateTime("UTC").epochMilliseconds;
67
- return new Intl.DateTimeFormat(locale, plainDateTimeFormatOptions(options ?? {}))
71
+ return new Intl.DateTimeFormat(locale, plainDateTimeFormatOptions(read))
68
72
  .formatToParts(epochMilliseconds)
69
73
  .map((p) => ({ type: p.type, value: p.value }));
70
74
  }
@@ -5,8 +5,7 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
5
5
  * - This is GMT's substitute for a token formatter (Luxon `toFormat`, date-fns
6
6
  * `format`). A token pattern hard-codes field order and ships US ordering to
7
7
  * every locale; `formatToParts` gives the caller full control over presentation
8
- * while the *locale* keeps control of order. See Decision 1 in
9
- * `context/roadmap/issues/J.md`.
8
+ * while the *locale* keeps control of order.
10
9
  * - Each part is `{ type, value }` where `type` is one of:
11
10
  * `"era"`, `"year"`, `"relatedYear"`, `"yearName"`, `"month"`, `"day"`, `"weekday"`,
12
11
  * `"literal"`.
@@ -22,6 +21,9 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
22
21
  * ignored. With both `dateStyle` and `timeStyle` the parts keep the date style and drop the
23
22
  * `timeStyle` (the `Intl.DateTimeFormat` entry point, required ~any~), whereas the text sibling
24
23
  * `formatDate` returns `""` (`PlainDate#toLocaleString`, required ~date~, is a TypeError).
24
+ * - The `formatZonedToParts` example below writes the literal before the day period as
25
+ * `"\u202f"`, U+202F NARROW NO-BREAK SPACE, which Node 22 and 24 return; Node 26 returns an
26
+ * ordinary space there (see `formatZonedToParts`).
25
27
  * - Returns `[]` for invalid input.
26
28
  * - **Compatibility:** before 1.16.0 time options leaked a UTC midnight and a `"UTC"` zone name
27
29
  * into the parts. `formatZonedToParts` on the date at midnight UTC returns those parts.
@@ -44,6 +46,15 @@ import type { DateTimeFormatOptions } from "../../types/index.js";
44
46
  * @example formatDateToParts("2024-02-03", ["fr-FR", "en-US"]) // [{ type: "day", value: "03" }, { type: "literal", value: "/" }, …]
45
47
  */
46
48
  export declare function formatDateToParts(value: string, locale?: string | string[], options?: DateTimeFormatOptions): Array<{
49
+ /**
50
+ * The kind of part, named as ECMA-402 `Intl.DateTimeFormat.prototype.formatToParts` names it: a
51
+ * field such as `"year"`, `"month"` or `"day"`, or `"literal"` for the separator text between
52
+ * fields.
53
+ */
47
54
  type: string;
55
+ /**
56
+ * The text of the part in the requested locale, exactly as the formatter wrote it. Joining every
57
+ * `value` in array order gives the whole formatted text.
58
+ */
48
59
  value: string;
49
60
  }>;
@@ -1,14 +1,14 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { plainDateFormatOptions } from "../../internal/plainFormatOptions.js";
3
3
  import { isValidDate } from "../validate/index.js";
4
+ import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
4
5
  /**
5
6
  * Return the locale-formatted parts of a PlainDate.
6
7
  *
7
8
  * - This is GMT's substitute for a token formatter (Luxon `toFormat`, date-fns
8
9
  * `format`). A token pattern hard-codes field order and ships US ordering to
9
10
  * every locale; `formatToParts` gives the caller full control over presentation
10
- * while the *locale* keeps control of order. See Decision 1 in
11
- * `context/roadmap/issues/J.md`.
11
+ * while the *locale* keeps control of order.
12
12
  * - Each part is `{ type, value }` where `type` is one of:
13
13
  * `"era"`, `"year"`, `"relatedYear"`, `"yearName"`, `"month"`, `"day"`, `"weekday"`,
14
14
  * `"literal"`.
@@ -24,6 +24,9 @@ import { isValidDate } from "../validate/index.js";
24
24
  * ignored. With both `dateStyle` and `timeStyle` the parts keep the date style and drop the
25
25
  * `timeStyle` (the `Intl.DateTimeFormat` entry point, required ~any~), whereas the text sibling
26
26
  * `formatDate` returns `""` (`PlainDate#toLocaleString`, required ~date~, is a TypeError).
27
+ * - The `formatZonedToParts` example below writes the literal before the day period as
28
+ * `"\u202f"`, U+202F NARROW NO-BREAK SPACE, which Node 22 and 24 return; Node 26 returns an
29
+ * ordinary space there (see `formatZonedToParts`).
27
30
  * - Returns `[]` for invalid input.
28
31
  * - **Compatibility:** before 1.16.0 time options leaked a UTC midnight and a `"UTC"` zone name
29
32
  * into the parts. `formatZonedToParts` on the date at midnight UTC returns those parts.
@@ -56,8 +59,9 @@ export function formatDateToParts(value, locale, options) {
56
59
  // PlainDate format may contain, so no time or zone field can appear.
57
60
  // Constructing with the caller's options first surfaces the TypeError or
58
61
  // RangeError Intl.DateTimeFormat raises for invalid ones.
59
- new Intl.DateTimeFormat(locale, options);
60
- const resolved = plainDateFormatOptions(options ?? {});
62
+ const read = readDateTimeFormatOptions(options);
63
+ new Intl.DateTimeFormat(locale, read);
64
+ const resolved = plainDateFormatOptions(read);
61
65
  if (resolved === null) {
62
66
  return [];
63
67
  }
@@ -1,19 +1,32 @@
1
1
  import type { RelativeDateUnit, RelativeTimeFormatOptions } from "../../types/index.js";
2
+ /**
3
+ * Options for `formatRelativeDate`: the reference date, the display unit, the rounding and the
4
+ * wording.
5
+ */
2
6
  export interface FormatRelativeDateOptions extends RelativeTimeFormatOptions {
3
- largestUnit?: RelativeDateUnit;
7
+ /**
8
+ * The unit the distance is written in, whatever its size: `"day"`, `"week"`, `"month"` or
9
+ * `"year"`, singular or plural. Any other value returns `""`, a time unit such as `"hour"`
10
+ * included: a date has no time, and Temporal throws RangeError for a unit outside the units of
11
+ * the type. Omitted, the unit is picked from the distance: day under 7 days, week under 28,
12
+ * month under 365 and year beyond.
13
+ *
14
+ * @defaultValue None. The unit is picked from the distance.
15
+ */
16
+ largestUnit?: RelativeDateUnit | `${RelativeDateUnit}s`;
4
17
  }
5
18
  /**
6
19
  * Format the relative time between a plain date and a reference date.
7
20
  *
8
21
  * - Auto-picks the display unit (day/week/month/year) based on the distance, unless
9
22
  * `largestUnit` forces one.
10
- * - `roundingMethod` controls how the distance rounds to the display unit.
23
+ * - `largestUnit` is one of those four units, singular or plural. Any other value returns `""`.
11
24
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
12
25
  * Temporal's GetOptionsObject rejects it.
13
26
  *
14
27
  * @param value ISO date string to format
15
28
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
16
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
29
+ * @param options How the distance is measured, rounded and worded
17
30
  * @returns the formatted relative-time string, or "" on invalid input
18
31
  *
19
32
  * @example formatRelativeDate("2026-01-15", "en-US", { reference: "2026-04-15" }) // "3 months ago"
@@ -1,6 +1,15 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
- import { durationTotal, normalizeDateTime, resolveRelativeRounding, } from "../../internal/index.js";
2
+ import { durationTotal } from "../../internal/index.js";
3
+ import { formatRelativeAmount } from "../../internal/formatRelativeDuration.js";
3
4
  import { isValidDate } from "../validate/index.js";
5
+ import { resolveRelativeUnit } from "../../internal/resolveRelativeUnit.js";
6
+ // Temporal's date unit group: the units a PlainDate difference may be written in.
7
+ const DATE_UNITS = [
8
+ "year",
9
+ "month",
10
+ "week",
11
+ "day",
12
+ ];
4
13
  const AUTO_UNITS = [
5
14
  { unit: "day", maxDays: 7 },
6
15
  { unit: "week", maxDays: 28 },
@@ -12,13 +21,13 @@ const AUTO_UNITS = [
12
21
  *
13
22
  * - Auto-picks the display unit (day/week/month/year) based on the distance, unless
14
23
  * `largestUnit` forces one.
15
- * - `roundingMethod` controls how the distance rounds to the display unit.
24
+ * - `largestUnit` is one of those four units, singular or plural. Any other value returns `""`.
16
25
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
17
26
  * Temporal's GetOptionsObject rejects it.
18
27
  *
19
28
  * @param value ISO date string to format
20
29
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
21
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
30
+ * @param options How the distance is measured, rounded and worded
22
31
  * @returns the formatted relative-time string, or "" on invalid input
23
32
  *
24
33
  * @example formatRelativeDate("2026-01-15", "en-US", { reference: "2026-04-15" }) // "3 months ago"
@@ -35,30 +44,32 @@ export function formatRelativeDate(value, locale, options = {}) {
35
44
  return "";
36
45
  if (!isValidDate(value))
37
46
  return "";
38
- if (options.reference !== undefined && !isValidDate(options.reference))
47
+ // Each option is read once (GetOption).
48
+ const referenceOption = options.reference;
49
+ if (referenceOption !== undefined && !isValidDate(referenceOption))
39
50
  return "";
40
51
  try {
52
+ const forcedUnit = resolveRelativeUnit(options.largestUnit, DATE_UNITS);
53
+ const roundingMethod = options.roundingMethod;
41
54
  const target = Temporal.PlainDate.from(value);
42
- const reference = options.reference
43
- ? Temporal.PlainDate.from(options.reference)
55
+ const reference = referenceOption
56
+ ? Temporal.PlainDate.from(referenceOption)
44
57
  : Temporal.Now.plainDateISO();
45
58
  const diff = target.since(reference);
46
59
  const absDays = Math.abs(diff.total("day"));
47
- const unit = options.largestUnit === undefined
60
+ const unit = forcedUnit === undefined
48
61
  ? (AUTO_UNITS.find((t) => absDays < t.maxDays)?.unit ?? "year")
49
- : options.largestUnit;
50
- let amount;
62
+ : forcedUnit;
63
+ let total;
51
64
  try {
52
- amount = resolveRelativeRounding(diff.total(unit), options.roundingMethod);
65
+ total = diff.total(unit);
53
66
  }
54
67
  catch {
55
68
  // month/year are calendrical and need a relativeTo anchor
56
- amount = resolveRelativeRounding(durationTotal(diff, unit, reference), options.roundingMethod);
69
+ total = durationTotal(diff, unit, reference);
57
70
  }
58
- return normalizeDateTime(new Intl.RelativeTimeFormat(locale, {
59
- numeric: options.numeric === undefined ? "auto" : options.numeric,
60
- style: options.style === undefined ? "long" : options.style,
61
- }).format(amount, unit));
71
+ // Outside the retry: an invalid roundingMethod throws once, straight to the sentinel.
72
+ return formatRelativeAmount(total, unit, locale, options, roundingMethod);
62
73
  }
63
74
  catch {
64
75
  return "";
@@ -1,6 +1,18 @@
1
1
  import type { RelativeDateTimeUnit, RelativeTimeFormatOptions } from "../../types/index.js";
2
+ /**
3
+ * Options for `formatRelativeDateTime`: the reference date-time, the display unit, the rounding
4
+ * and the wording.
5
+ */
2
6
  export interface FormatRelativeDateTimeOptions extends RelativeTimeFormatOptions {
3
- largestUnit?: RelativeDateTimeUnit;
7
+ /**
8
+ * The unit the distance is written in, whatever its size: `"second"`, `"minute"`, `"hour"`,
9
+ * `"day"`, `"week"`, `"month"` or `"year"`, singular or plural. Any other value returns `""`.
10
+ * Omitted, the unit is picked from the distance: second under a minute, minute under an hour,
11
+ * hour under a day, day under 7 days, week under 28, month under 365 and year beyond.
12
+ *
13
+ * @defaultValue None. The unit is picked from the distance.
14
+ */
15
+ largestUnit?: RelativeDateTimeUnit | `${RelativeDateTimeUnit}s`;
4
16
  }
5
17
  /**
6
18
  * Format the relative time between a plain date-time and a reference date-time.
@@ -11,13 +23,14 @@ export interface FormatRelativeDateTimeOptions extends RelativeTimeFormatOptions
11
23
  * "3 years ago".
12
24
  * - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
13
25
  * Pass `largestUnit: "day"` to keep a day count.
14
- * - `roundingMethod` controls how the distance rounds to the display unit.
26
+ * - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
27
+ * other value returns `""`.
15
28
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
16
29
  * Temporal's GetOptionsObject rejects it.
17
30
  *
18
31
  * @param value ISO date-time string to format
19
32
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
20
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
33
+ * @param options How the distance is measured, rounded and worded
21
34
  * @returns the formatted relative-time string, or "" on invalid input
22
35
  *
23
36
  * @example formatRelativeDateTime("2026-03-17T09:00:00", "en-GB", { style: "long", reference: "2026-03-17T06:00:00" }) // "in 3 hours"
@@ -12,13 +12,14 @@ import { isValidDateTime } from "../validate/index.js";
12
12
  * "3 years ago".
13
13
  * - **Compatibility:** before 1.16.0 week, month and year were never auto-picked ("1,096 days ago").
14
14
  * Pass `largestUnit: "day"` to keep a day count.
15
- * - `roundingMethod` controls how the distance rounds to the display unit.
15
+ * - `largestUnit` is one of the seven units from `"second"` to `"year"`, singular or plural. Any
16
+ * other value returns `""`.
16
17
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
17
18
  * Temporal's GetOptionsObject rejects it.
18
19
  *
19
20
  * @param value ISO date-time string to format
20
21
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
21
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
22
+ * @param options How the distance is measured, rounded and worded
22
23
  * @returns the formatted relative-time string, or "" on invalid input
23
24
  *
24
25
  * @example formatRelativeDateTime("2026-03-17T09:00:00", "en-GB", { style: "long", reference: "2026-03-17T06:00:00" }) // "in 3 hours"
@@ -36,12 +37,14 @@ export function formatRelativeDateTime(value, locale, options = {}) {
36
37
  return "";
37
38
  if (!isValidDateTime(value))
38
39
  return "";
39
- if (options.reference !== undefined && !isValidDateTime(options.reference))
40
+ // Each option is read once (GetOption).
41
+ const referenceOption = options.reference;
42
+ if (referenceOption !== undefined && !isValidDateTime(referenceOption))
40
43
  return "";
41
44
  try {
42
45
  const target = Temporal.PlainDateTime.from(value);
43
- const reference = options.reference
44
- ? Temporal.PlainDateTime.from(options.reference)
46
+ const reference = referenceOption
47
+ ? Temporal.PlainDateTime.from(referenceOption)
45
48
  : Temporal.Now.plainDateTimeISO();
46
49
  const diff = target.since(reference);
47
50
  // month/year are calendrical — relativeTo needs a PlainDate
@@ -1,19 +1,32 @@
1
1
  import type { RelativeTimeFormatOptions, RelativeTimeUnit } from "../../types/index.js";
2
+ /**
3
+ * Options for `formatRelativeTime`: the reference time, the display unit, the rounding and the
4
+ * wording.
5
+ */
2
6
  export interface FormatRelativeTimeOptions extends RelativeTimeFormatOptions {
3
- largestUnit?: RelativeTimeUnit;
7
+ /**
8
+ * The unit the distance is written in, whatever its size: `"second"`, `"minute"` or `"hour"`,
9
+ * singular or plural. Any other value returns `""`, a date unit such as `"day"` included: a time
10
+ * has no date, and Temporal throws RangeError for a unit outside the units of the type. Omitted,
11
+ * the unit is picked from the distance: second under a minute, minute under an hour and hour
12
+ * beyond.
13
+ *
14
+ * @defaultValue None. The unit is picked from the distance.
15
+ */
16
+ largestUnit?: RelativeTimeUnit | `${RelativeTimeUnit}s`;
4
17
  }
5
18
  /**
6
19
  * Format the relative time between a plain time and a reference time.
7
20
  *
8
21
  * - Auto-picks the display unit (second/minute/hour) based on the distance, unless
9
22
  * `largestUnit` forces one.
10
- * - `roundingMethod` controls how the distance rounds to the display unit.
23
+ * - `largestUnit` is one of those three units, singular or plural. Any other value returns `""`.
11
24
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
12
25
  * Temporal's GetOptionsObject rejects it.
13
26
  *
14
27
  * @param value ISO time string to format
15
28
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
16
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
29
+ * @param options How the distance is measured, rounded and worded
17
30
  * @returns the formatted relative-time string, or "" on invalid input
18
31
  *
19
32
  * @example formatRelativeTime("14:30:00", "en-US", { style: "short", reference: "16:30:00" }) // "2 hr. ago"
@@ -1,6 +1,14 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
- import { normalizeDateTime, resolveRelativeRounding } from "../../internal/index.js";
2
+ import { formatRelativeAmount } from "../../internal/formatRelativeDuration.js";
3
3
  import { isValidTime } from "../validate/index.js";
4
+ import { resolveRelativeUnit } from "../../internal/resolveRelativeUnit.js";
5
+ // Temporal's time unit group down to the second: the units a PlainTime difference may be written
6
+ // in, less the sub-second units, which Intl.RelativeTimeFormat does not have.
7
+ const TIME_UNITS = [
8
+ "hour",
9
+ "minute",
10
+ "second",
11
+ ];
4
12
  const AUTO_UNITS = [
5
13
  { unit: "second", maxSeconds: 60 },
6
14
  { unit: "minute", maxSeconds: 3_600 },
@@ -11,13 +19,13 @@ const AUTO_UNITS = [
11
19
  *
12
20
  * - Auto-picks the display unit (second/minute/hour) based on the distance, unless
13
21
  * `largestUnit` forces one.
14
- * - `roundingMethod` controls how the distance rounds to the display unit.
22
+ * - `largestUnit` is one of those three units, singular or plural. Any other value returns `""`.
15
23
  * - `options` must be an object or omitted: `null` or any other primitive returns `""`, as
16
24
  * Temporal's GetOptionsObject rejects it.
17
25
  *
18
26
  * @param value ISO time string to format
19
27
  * @param locale optional: BCP 47 locale tag, or a preference list of tags (ECMA-402)
20
- * @param options optional: { style, numeric, largestUnit, roundingMethod, reference }
28
+ * @param options How the distance is measured, rounded and worded
21
29
  * @returns the formatted relative-time string, or "" on invalid input
22
30
  *
23
31
  * @example formatRelativeTime("14:30:00", "en-US", { style: "short", reference: "16:30:00" }) // "2 hr. ago"
@@ -34,23 +42,23 @@ export function formatRelativeTime(value, locale, options = {}) {
34
42
  return "";
35
43
  if (!isValidTime(value))
36
44
  return "";
37
- if (options.reference !== undefined && !isValidTime(options.reference))
45
+ // Each option is read once (GetOption).
46
+ const referenceOption = options.reference;
47
+ if (referenceOption !== undefined && !isValidTime(referenceOption))
38
48
  return "";
39
49
  try {
50
+ const forcedUnit = resolveRelativeUnit(options.largestUnit, TIME_UNITS);
51
+ const roundingMethod = options.roundingMethod;
40
52
  const target = Temporal.PlainTime.from(value);
41
- const reference = options.reference
42
- ? Temporal.PlainTime.from(options.reference)
53
+ const reference = referenceOption
54
+ ? Temporal.PlainTime.from(referenceOption)
43
55
  : Temporal.Now.plainTimeISO();
44
56
  const diff = target.since(reference);
45
57
  const absSeconds = Math.abs(diff.total("second"));
46
- const unit = options.largestUnit === undefined
58
+ const unit = forcedUnit === undefined
47
59
  ? (AUTO_UNITS.find((t) => absSeconds < t.maxSeconds)?.unit ?? "hour")
48
- : options.largestUnit;
49
- const amount = resolveRelativeRounding(diff.total(unit), options.roundingMethod);
50
- return normalizeDateTime(new Intl.RelativeTimeFormat(locale, {
51
- numeric: options.numeric === undefined ? "auto" : options.numeric,
52
- style: options.style === undefined ? "long" : options.style,
53
- }).format(amount, unit));
60
+ : forcedUnit;
61
+ return formatRelativeAmount(diff.total(unit), unit, locale, options, roundingMethod);
54
62
  }
55
63
  catch {
56
64
  return "";
@@ -2,6 +2,7 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import { normalizeDateTime } from "../../internal/index.js";
3
3
  import { plainTimeFormatOptions } from "../../internal/plainFormatOptions.js";
4
4
  import { isValidTime } from "../validate/index.js";
5
+ import { readDateTimeFormatOptions } from "../../internal/readDateTimeFormatOptions.js";
5
6
  /**
6
7
  * Return a localized string for a PlainTime ISO input using Intl options.
7
8
  *
@@ -42,8 +43,9 @@ export function formatTime(value, locale, options) {
42
43
  // (CreateDateTimeFormat ~time~, ~time~). Constructing with the caller's
43
44
  // options first surfaces the TypeError or RangeError Intl.DateTimeFormat
44
45
  // raises for invalid ones.
45
- new Intl.DateTimeFormat(locale, options);
46
- const resolved = plainTimeFormatOptions(options ?? {});
46
+ const read = readDateTimeFormatOptions(options);
47
+ new Intl.DateTimeFormat(locale, read);
48
+ const resolved = plainTimeFormatOptions(read);
47
49
  if (resolved === null) {
48
50
  return "";
49
51
  }
@@ -32,6 +32,15 @@
32
32
  * @example intervalDifferenceDate("invalid", "2024-12-31", "2024-06-01", "2024-07-01") // []
33
33
  */
34
34
  export declare function intervalDifferenceDate(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
35
+ /**
36
+ * The date the interval begins on, as an ISO 8601 date (`YYYY-MM-DD`). It keeps a calendar
37
+ * annotation such as `[u-ca=hebrew]` when the inputs carry one.
38
+ */
35
39
  start: string;
40
+ /**
41
+ * The first date after the interval, in the same format as `start`. It is exclusive: the interval
42
+ * holds everything from `start` up to but not including this value. It is always later than
43
+ * `start`.
44
+ */
36
45
  end: string;
37
46
  }>;
@@ -25,6 +25,15 @@
25
25
  * @example intervalDifferenceDateTime("invalid", "2024-12-31T17:00:00", "2024-06-01T12:00:00", "2024-07-01T13:00:00") // []
26
26
  */
27
27
  export declare function intervalDifferenceDateTime(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
28
+ /**
29
+ * The date-time the interval begins at, as an ISO 8601 date-time string with no offset or time
30
+ * zone.
31
+ */
28
32
  start: string;
33
+ /**
34
+ * The first date-time after the interval, in the same format as `start`. It is exclusive: the
35
+ * interval holds everything from `start` up to but not including this value. It is always later
36
+ * than `start`.
37
+ */
29
38
  end: string;
30
39
  }>;
@@ -27,6 +27,15 @@
27
27
  * @example intervalDifferenceTime("invalid", "17:00:00", "12:00:00", "13:00:00") // []
28
28
  */
29
29
  export declare function intervalDifferenceTime(aStart: string, aEnd: string, bStart: string, bEnd: string): Array<{
30
+ /**
31
+ * The clock time the interval begins at, as an ISO 8601 time string with no date, offset or time
32
+ * zone.
33
+ */
30
34
  start: string;
35
+ /**
36
+ * The first clock time after the interval, in the same format as `start`. It is exclusive: the
37
+ * interval holds everything from `start` up to but not including this value. It is always later
38
+ * than `start`.
39
+ */
31
40
  end: string;
32
41
  }>;
@@ -10,6 +10,8 @@
10
10
  * the nearest whole day (`round(totalDays · i / n)`, computed exactly in `bigint`, an exact half
11
11
  * rounding up) — when `totalDays` isn't evenly divisible by `n`, the resulting sub-intervals
12
12
  * differ by at most one day rather than being mathematically exact.
13
+ * - When `n` is larger than the number of whole days in the interval, some pieces are empty (their
14
+ * `start` equals their `end`): the result always has exactly `n` pieces.
13
15
  * - `n === 1` returns the original interval unchanged, as a single-element array.
14
16
  * - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals.
15
17
  * - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
@@ -18,14 +20,11 @@
18
20
  * carry the *same* calendar tag (or both be bare ISO); a mismatch returns `[]` (E5 decision
19
21
  * of record D4). Internal boundaries are computed in whole days (calendar-independent), then
20
22
  * re-formatted in the shared calendar.
21
- * - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when `n`
22
- * exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
23
- * before building any piece. An invalid `maxPieces` also returns `[]`.
24
23
  *
25
24
  * @param start ISO PlainDate string for the interval start, optionally calendar-annotated
26
25
  * @param end ISO PlainDate string for the interval end, optionally calendar-annotated
27
26
  * @param n number of equal sub-intervals to produce (positive integer)
28
- * @param options optional: `maxPieces` (positive safe integer, default `1_000_000`)
27
+ * @param options The limit on the size of the result
29
28
  * @returns array of `n` `{ start, end }` records, or `[]` on invalid input / mismatched calendars
30
29
  *
31
30
  * @example intervalDivideEquallyDate("2024-01-01", "2024-01-05", 4) // [{ start: "2024-01-01", end: "2024-01-02" }, { start: "2024-01-02", end: "2024-01-03" }, { start: "2024-01-03", end: "2024-01-04" }, { start: "2024-01-04", end: "2024-01-05" }]
@@ -38,8 +37,24 @@
38
37
  * @example intervalDivideEquallyDate("2024-01-01", "2024-01-10", 3, { maxPieces: 3 }) // [{ start: "2024-01-01", end: "2024-01-04" }, { start: "2024-01-04", end: "2024-01-07" }, { start: "2024-01-07", end: "2024-01-10" }]
39
38
  */
40
39
  export declare function intervalDivideEquallyDate(start: string, end: string, n: number, options?: {
40
+ /**
41
+ * The most records the result may hold. A result that would hold more, or more than the longest
42
+ * possible array (2^32 - 1 elements), returns `[]` and none is built. A value that is not a
43
+ * positive safe integer also returns `[]`.
44
+ *
45
+ * @defaultValue `1_000_000`
46
+ */
41
47
  maxPieces?: number;
42
48
  }): Array<{
49
+ /**
50
+ * The date the interval begins on, as an ISO 8601 date (`YYYY-MM-DD`). It keeps a calendar
51
+ * annotation such as `[u-ca=hebrew]` when the inputs carry one.
52
+ */
43
53
  start: string;
54
+ /**
55
+ * The first date after the interval, in the same format as `start`. It is exclusive: the interval
56
+ * holds everything from `start` up to but not including this value. It can equal `start`, which
57
+ * makes the interval empty.
58
+ */
44
59
  end: string;
45
60
  }>;
@@ -15,6 +15,8 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
15
15
  * the nearest whole day (`round(totalDays · i / n)`, computed exactly in `bigint`, an exact half
16
16
  * rounding up) — when `totalDays` isn't evenly divisible by `n`, the resulting sub-intervals
17
17
  * differ by at most one day rather than being mathematically exact.
18
+ * - When `n` is larger than the number of whole days in the interval, some pieces are empty (their
19
+ * `start` equals their `end`): the result always has exactly `n` pieces.
18
20
  * - `n === 1` returns the original interval unchanged, as a single-element array.
19
21
  * - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals.
20
22
  * - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
@@ -23,14 +25,11 @@ import { exceedsPieceLimit, resolveMaxPieces } from "../../internal/maxPieces.js
23
25
  * carry the *same* calendar tag (or both be bare ISO); a mismatch returns `[]` (E5 decision
24
26
  * of record D4). Internal boundaries are computed in whole days (calendar-independent), then
25
27
  * re-formatted in the shared calendar.
26
- * - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when `n`
27
- * exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
28
- * before building any piece. An invalid `maxPieces` also returns `[]`.
29
28
  *
30
29
  * @param start ISO PlainDate string for the interval start, optionally calendar-annotated
31
30
  * @param end ISO PlainDate string for the interval end, optionally calendar-annotated
32
31
  * @param n number of equal sub-intervals to produce (positive integer)
33
- * @param options optional: `maxPieces` (positive safe integer, default `1_000_000`)
32
+ * @param options The limit on the size of the result
34
33
  * @returns array of `n` `{ start, end }` records, or `[]` on invalid input / mismatched calendars
35
34
  *
36
35
  * @example intervalDivideEquallyDate("2024-01-01", "2024-01-05", 4) // [{ start: "2024-01-01", end: "2024-01-02" }, { start: "2024-01-02", end: "2024-01-03" }, { start: "2024-01-03", end: "2024-01-04" }, { start: "2024-01-04", end: "2024-01-05" }]
@@ -10,18 +10,17 @@
10
10
  * `bigint`: the split is exact whenever the total divides evenly by `n`, and within half a
11
11
  * nanosecond of the exact cut otherwise (an exact half rounds up), at any span length — the
12
12
  * whole PlainDateTime range included.
13
+ * - When `n` is larger than the number of nanoseconds in the interval, some pieces are empty (their
14
+ * `start` equals their `end`): the result always has exactly `n` pieces.
13
15
  * - `n === 1` returns the original interval unchanged, as a single-element array.
14
16
  * - A zero-length interval (`start === end`) returns `n` identical zero-length sub-intervals.
15
17
  * - Returns `[]` when `n` is not a positive integer, or on invalid input (unparseable
16
18
  * start/end, `start > end`).
17
- * - `options.maxPieces` (positive safe integer, default `1_000_000`) bounds the output: when `n`
18
- * exceeds it, or exceeds the longest possible array (2^32 - 1), the function returns `[]`
19
- * before building any piece. An invalid `maxPieces` also returns `[]`.
20
19
  *
21
20
  * @param start ISO PlainDateTime string for the interval start
22
21
  * @param end ISO PlainDateTime string for the interval end
23
22
  * @param n number of equal sub-intervals to produce (positive integer)
24
- * @param options optional: `maxPieces` (positive safe integer, default `1_000_000`)
23
+ * @param options The limit on the size of the result
25
24
  * @returns array of `n` `{ start, end }` records, or `[]` on invalid input
26
25
  *
27
26
  * @example intervalDivideEquallyDateTime("2024-01-01T00:00:00", "2024-01-04T00:00:00", 3) // [{ start: "2024-01-01T00:00:00", end: "2024-01-02T00:00:00" }, { start: "2024-01-02T00:00:00", end: "2024-01-03T00:00:00" }, { start: "2024-01-03T00:00:00", end: "2024-01-04T00:00:00" }]
@@ -32,8 +31,24 @@
32
31
  * @example intervalDivideEquallyDateTime("2024-01-01T00:00:00", "2024-01-04T00:00:00", 3, { maxPieces: 3 }) // [{ start: "2024-01-01T00:00:00", end: "2024-01-02T00:00:00" }, { start: "2024-01-02T00:00:00", end: "2024-01-03T00:00:00" }, { start: "2024-01-03T00:00:00", end: "2024-01-04T00:00:00" }]
33
32
  */
34
33
  export declare function intervalDivideEquallyDateTime(start: string, end: string, n: number, options?: {
34
+ /**
35
+ * The most records the result may hold. A result that would hold more, or more than the longest
36
+ * possible array (2^32 - 1 elements), returns `[]` and none is built. A value that is not a
37
+ * positive safe integer also returns `[]`.
38
+ *
39
+ * @defaultValue `1_000_000`
40
+ */
35
41
  maxPieces?: number;
36
42
  }): Array<{
43
+ /**
44
+ * The date-time the interval begins at, as an ISO 8601 date-time string with no offset or time
45
+ * zone.
46
+ */
37
47
  start: string;
48
+ /**
49
+ * The first date-time after the interval, in the same format as `start`. It is exclusive: the
50
+ * interval holds everything from `start` up to but not including this value. It can equal
51
+ * `start`, which makes the interval empty.
52
+ */
38
53
  end: string;
39
54
  }>;