@northguild/gmt 1.16.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 (654) hide show
  1. package/README.md +742 -21
  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/index.d.ts +2 -0
  43. package/dist/index.js +2 -0
  44. package/dist/instant/convert/classifyLocal.d.ts +1 -1
  45. package/dist/instant/convert/classifyLocal.js +1 -1
  46. package/dist/instant/convert/fromOffsetInstant.d.ts +3 -1
  47. package/dist/instant/convert/fromOffsetInstant.js +6 -12
  48. package/dist/instant/convert/resolveLocal.d.ts +12 -7
  49. package/dist/instant/convert/resolveLocal.js +6 -10
  50. package/dist/instant/convert/toOffsetInstant.d.ts +37 -1
  51. package/dist/instant/convert/toOffsetInstant.js +12 -28
  52. package/dist/intermodal/calculate/billingTimeline.d.ts +114 -0
  53. package/dist/intermodal/calculate/billingTimeline.js +168 -0
  54. package/dist/intermodal/calculate/chargeableDays.d.ts +100 -0
  55. package/dist/intermodal/calculate/chargeableDays.js +96 -0
  56. package/dist/intermodal/calculate/demurrageClock.d.ts +102 -0
  57. package/dist/intermodal/calculate/demurrageClock.js +140 -0
  58. package/dist/intermodal/calculate/freeTimeExpiry.d.ts +67 -0
  59. package/dist/intermodal/calculate/freeTimeExpiry.js +82 -0
  60. package/dist/intermodal/calculate/index.d.ts +4 -0
  61. package/dist/intermodal/calculate/index.js +4 -0
  62. package/dist/intermodal/index.d.ts +2 -0
  63. package/dist/intermodal/index.js +3 -0
  64. package/dist/internal/businessCalendar.d.ts +5 -0
  65. package/dist/internal/businessCalendar.js +5 -1
  66. package/dist/internal/cycleFieldValue.d.ts +6 -4
  67. package/dist/internal/cycleFieldValue.js +6 -4
  68. package/dist/internal/daylightTime.d.ts +33 -0
  69. package/dist/internal/daylightTime.js +164 -0
  70. package/dist/internal/durationUntilString.js +4 -3
  71. package/dist/internal/englishCalendarNames.js +1 -2
  72. package/dist/internal/epochNanoseconds.d.ts +2 -0
  73. package/dist/internal/epochNanoseconds.js +2 -0
  74. package/dist/internal/exactDuration.d.ts +37 -0
  75. package/dist/internal/exactDuration.js +64 -0
  76. package/dist/internal/exactMoment.d.ts +72 -0
  77. package/dist/internal/exactMoment.js +114 -0
  78. package/dist/internal/fiscalCalendar.d.ts +4 -3
  79. package/dist/internal/fiscalCalendar.js +4 -3
  80. package/dist/internal/formatCalendarDays.d.ts +2 -2
  81. package/dist/internal/formatRelativeDuration.d.ts +21 -1
  82. package/dist/internal/formatRelativeDuration.js +47 -7
  83. package/dist/internal/freeTimeLedger.d.ts +93 -0
  84. package/dist/internal/freeTimeLedger.js +262 -0
  85. package/dist/internal/index.d.ts +10 -3
  86. package/dist/internal/index.js +10 -3
  87. package/dist/internal/instantFormatOptions.js +2 -1
  88. package/dist/internal/instantNanoseconds.d.ts +75 -9
  89. package/dist/internal/instantNanoseconds.js +192 -11
  90. package/dist/internal/isoStringBody.d.ts +26 -0
  91. package/dist/internal/isoStringBody.js +22 -2
  92. package/dist/internal/joinDateTimeConnector.d.ts +1 -1
  93. package/dist/internal/monthGridWeekRow.d.ts +2 -1
  94. package/dist/internal/monthGridWeekRow.js +2 -1
  95. package/dist/internal/normalizeTimeZone.d.ts +2 -2
  96. package/dist/internal/normalizeTimeZone.js +2 -2
  97. package/dist/internal/operatingSchedule.d.ts +129 -0
  98. package/dist/internal/operatingSchedule.js +668 -0
  99. package/dist/internal/optionOrDefault.d.ts +18 -0
  100. package/dist/internal/optionOrDefault.js +20 -0
  101. package/dist/internal/patternToken.d.ts +2 -2
  102. package/dist/internal/patternToken.js +28 -13
  103. package/dist/internal/plainDateUntil.js +10 -6
  104. package/dist/internal/punctuality.d.ts +38 -0
  105. package/dist/internal/punctuality.js +59 -0
  106. package/dist/internal/readDateTimeFormatOptions.d.ts +30 -0
  107. package/dist/internal/readDateTimeFormatOptions.js +93 -0
  108. package/dist/internal/resolveDurationRelativeTo.d.ts +4 -0
  109. package/dist/internal/resolveDurationRelativeTo.js +11 -1
  110. package/dist/internal/resolveRelativeRounding.d.ts +17 -6
  111. package/dist/internal/resolveRelativeRounding.js +27 -7
  112. package/dist/internal/resolveRelativeUnit.d.ts +30 -0
  113. package/dist/internal/resolveRelativeUnit.js +40 -0
  114. package/dist/internal/splitStep.d.ts +24 -1
  115. package/dist/internal/splitStep.js +34 -2
  116. package/dist/internal/startOrEndOfZoned.js +2 -3
  117. package/dist/internal/temporalCompat/capabilities.d.ts +26 -0
  118. package/dist/internal/temporalCompat/capabilities.js +35 -3
  119. package/dist/internal/temporalCompat/fieldSearch.js +1 -1
  120. package/dist/internal/temporalCompat/index.d.ts +1 -1
  121. package/dist/internal/temporalCompat/index.js +1 -1
  122. package/dist/internal/temporalCompat/repros.d.ts +1 -1
  123. package/dist/internal/temporalCompat/repros.js +157 -0
  124. package/dist/internal/timestampEvents.d.ts +32 -0
  125. package/dist/internal/timestampEvents.js +76 -0
  126. package/dist/internal/utcZonedDateTime.d.ts +5 -2
  127. package/dist/internal/utcZonedDateTime.js +8 -5
  128. package/dist/internal/wallClockAtOffset.d.ts +22 -0
  129. package/dist/internal/wallClockAtOffset.js +26 -0
  130. package/dist/internal/zonedBucket.js +8 -6
  131. package/dist/internal/zonedLocalDates.js +1 -1
  132. package/dist/internal/zonedTransitionSearch.d.ts +27 -0
  133. package/dist/internal/zonedTransitionSearch.js +218 -0
  134. package/dist/internal/zonedWallClock.d.ts +21 -7
  135. package/dist/internal/zonedWallClock.js +87 -18
  136. package/dist/internal/zonedWallClockDifference.js +5 -4
  137. package/dist/internal/zonedWallClockOperations.d.ts +26 -13
  138. package/dist/internal/zonedWallClockOperations.js +87 -34
  139. package/dist/interval/validate/isValidInterval.d.ts +6 -3
  140. package/dist/interval/validate/isValidInterval.js +6 -3
  141. package/dist/plain/calculate/addDate.d.ts +11 -8
  142. package/dist/plain/calculate/addDate.js +5 -8
  143. package/dist/plain/calculate/addDateTime.d.ts +7 -4
  144. package/dist/plain/calculate/addDateTime.js +1 -4
  145. package/dist/plain/calculate/cycleDate.d.ts +16 -7
  146. package/dist/plain/calculate/cycleDate.js +3 -7
  147. package/dist/plain/calculate/cycleDateTime.d.ts +14 -4
  148. package/dist/plain/calculate/cycleDateTime.js +1 -4
  149. package/dist/plain/calculate/cycleTime.d.ts +10 -5
  150. package/dist/plain/calculate/cycleTime.js +3 -5
  151. package/dist/plain/calculate/diffDate.d.ts +1 -1
  152. package/dist/plain/calculate/diffDate.js +1 -1
  153. package/dist/plain/calculate/diffDateAsDuration.d.ts +1 -1
  154. package/dist/plain/calculate/diffDateAsDuration.js +1 -1
  155. package/dist/plain/calculate/diffDateTime.d.ts +1 -1
  156. package/dist/plain/calculate/diffDateTime.js +1 -1
  157. package/dist/plain/calculate/diffDateTimeAsDuration.d.ts +1 -1
  158. package/dist/plain/calculate/diffDateTimeAsDuration.js +1 -1
  159. package/dist/plain/calculate/diffTime.d.ts +1 -1
  160. package/dist/plain/calculate/diffTime.js +1 -1
  161. package/dist/plain/calculate/endOfDate.d.ts +8 -3
  162. package/dist/plain/calculate/endOfDate.js +1 -3
  163. package/dist/plain/calculate/endOfDateTime.d.ts +15 -5
  164. package/dist/plain/calculate/endOfDateTime.js +1 -5
  165. package/dist/plain/calculate/endOfTime.d.ts +8 -2
  166. package/dist/plain/calculate/endOfTime.js +1 -2
  167. package/dist/plain/calculate/getLocaleWeekYear.d.ts +16 -9
  168. package/dist/plain/calculate/getLocaleWeekYear.js +9 -9
  169. package/dist/plain/calculate/getWeekOfMonth.d.ts +7 -4
  170. package/dist/plain/calculate/getWeekOfMonth.js +7 -4
  171. package/dist/plain/calculate/getWeeksInLocaleWeekYear.d.ts +13 -6
  172. package/dist/plain/calculate/getWeeksInLocaleWeekYear.js +6 -6
  173. package/dist/plain/calculate/getWeeksInMonth.d.ts +5 -2
  174. package/dist/plain/calculate/getWeeksInMonth.js +5 -2
  175. package/dist/plain/calculate/nextWeekday.d.ts +7 -3
  176. package/dist/plain/calculate/nextWeekday.js +1 -3
  177. package/dist/plain/calculate/previousWeekday.d.ts +7 -3
  178. package/dist/plain/calculate/previousWeekday.js +1 -3
  179. package/dist/plain/calculate/roundDate.d.ts +20 -7
  180. package/dist/plain/calculate/roundDate.js +3 -10
  181. package/dist/plain/calculate/roundDateTime.d.ts +22 -8
  182. package/dist/plain/calculate/roundDateTime.js +3 -11
  183. package/dist/plain/calculate/roundTime.d.ts +20 -4
  184. package/dist/plain/calculate/roundTime.js +3 -7
  185. package/dist/plain/calculate/setDate.d.ts +7 -5
  186. package/dist/plain/calculate/setDate.js +1 -5
  187. package/dist/plain/calculate/setDateTime.d.ts +8 -5
  188. package/dist/plain/calculate/setDateTime.js +1 -5
  189. package/dist/plain/calculate/setTime.d.ts +10 -6
  190. package/dist/plain/calculate/setTime.js +4 -6
  191. package/dist/plain/calculate/startOfDate.d.ts +8 -2
  192. package/dist/plain/calculate/startOfDate.js +1 -2
  193. package/dist/plain/calculate/startOfDateTime.d.ts +15 -2
  194. package/dist/plain/calculate/startOfDateTime.js +1 -2
  195. package/dist/plain/calculate/startOfTime.d.ts +8 -1
  196. package/dist/plain/calculate/startOfTime.js +1 -1
  197. package/dist/plain/calculate/subtractDate.d.ts +7 -4
  198. package/dist/plain/calculate/subtractDate.js +1 -4
  199. package/dist/plain/calculate/subtractDateTime.d.ts +7 -4
  200. package/dist/plain/calculate/subtractDateTime.js +1 -4
  201. package/dist/plain/compare/areDateTimesEqualBy.d.ts +13 -5
  202. package/dist/plain/compare/areDateTimesEqualBy.js +6 -5
  203. package/dist/plain/compare/areDatesEqualBy.d.ts +15 -6
  204. package/dist/plain/compare/areDatesEqualBy.js +8 -6
  205. package/dist/plain/compare/isBetweenDate.d.ts +13 -2
  206. package/dist/plain/compare/isBetweenDate.js +4 -4
  207. package/dist/plain/compare/isBetweenDateTime.d.ts +13 -2
  208. package/dist/plain/compare/isBetweenDateTime.js +4 -4
  209. package/dist/plain/compare/isBetweenTime.d.ts +13 -2
  210. package/dist/plain/compare/isBetweenTime.js +4 -4
  211. package/dist/plain/compare/isRelativeDay.d.ts +1 -1
  212. package/dist/plain/compare/isRelativeDay.js +1 -1
  213. package/dist/plain/compare/isThisUnit.d.ts +1 -1
  214. package/dist/plain/compare/isThisUnit.js +1 -1
  215. package/dist/plain/format/formatCalendar.d.ts +21 -14
  216. package/dist/plain/format/formatCalendar.js +21 -16
  217. package/dist/plain/format/formatDate.js +5 -3
  218. package/dist/plain/format/formatDateRange.js +4 -2
  219. package/dist/plain/format/formatDateTime.js +4 -2
  220. package/dist/plain/format/formatDateTimeRange.js +4 -2
  221. package/dist/plain/format/formatDateTimeToParts.d.ts +15 -4
  222. package/dist/plain/format/formatDateTimeToParts.js +10 -6
  223. package/dist/plain/format/formatDateToParts.d.ts +13 -2
  224. package/dist/plain/format/formatDateToParts.js +8 -4
  225. package/dist/plain/format/formatRelativeDate.d.ts +16 -3
  226. package/dist/plain/format/formatRelativeDate.js +26 -15
  227. package/dist/plain/format/formatRelativeDateTime.d.ts +16 -3
  228. package/dist/plain/format/formatRelativeDateTime.js +8 -5
  229. package/dist/plain/format/formatRelativeTime.d.ts +16 -3
  230. package/dist/plain/format/formatRelativeTime.js +21 -13
  231. package/dist/plain/format/formatTime.js +4 -2
  232. package/dist/plain/interval/intervalDifferenceDate.d.ts +9 -0
  233. package/dist/plain/interval/intervalDifferenceDateTime.d.ts +9 -0
  234. package/dist/plain/interval/intervalDifferenceTime.d.ts +9 -0
  235. package/dist/plain/interval/intervalDivideEquallyDate.d.ts +19 -4
  236. package/dist/plain/interval/intervalDivideEquallyDate.js +3 -4
  237. package/dist/plain/interval/intervalDivideEquallyDateTime.d.ts +19 -4
  238. package/dist/plain/interval/intervalDivideEquallyDateTime.js +3 -4
  239. package/dist/plain/interval/intervalDivideEquallyTime.d.ts +19 -4
  240. package/dist/plain/interval/intervalDivideEquallyTime.js +3 -4
  241. package/dist/plain/interval/intervalFromDurationDate.d.ts +16 -3
  242. package/dist/plain/interval/intervalFromDurationDate.js +1 -3
  243. package/dist/plain/interval/intervalFromDurationDateTime.d.ts +16 -3
  244. package/dist/plain/interval/intervalFromDurationDateTime.js +1 -3
  245. package/dist/plain/interval/intervalFromDurationTime.d.ts +9 -0
  246. package/dist/plain/interval/intervalIntersectionDate.d.ts +9 -0
  247. package/dist/plain/interval/intervalIntersectionDateTime.d.ts +9 -0
  248. package/dist/plain/interval/intervalIntersectionTime.d.ts +9 -0
  249. package/dist/plain/interval/intervalSplitAtDate.d.ts +11 -0
  250. package/dist/plain/interval/intervalSplitAtDate.js +2 -0
  251. package/dist/plain/interval/intervalSplitAtDateTime.d.ts +11 -0
  252. package/dist/plain/interval/intervalSplitAtDateTime.js +2 -0
  253. package/dist/plain/interval/intervalSplitAtTime.d.ts +11 -0
  254. package/dist/plain/interval/intervalSplitAtTime.js +2 -0
  255. package/dist/plain/interval/intervalUnionDate.d.ts +9 -0
  256. package/dist/plain/interval/intervalUnionDateTime.d.ts +9 -0
  257. package/dist/plain/interval/intervalUnionTime.d.ts +9 -0
  258. package/dist/plain/interval/intervalXorAllDate.d.ts +9 -0
  259. package/dist/plain/interval/intervalXorAllDateTime.d.ts +9 -0
  260. package/dist/plain/interval/intervalXorAllTime.d.ts +9 -0
  261. package/dist/plain/interval/intervalXorDate.d.ts +9 -0
  262. package/dist/plain/interval/intervalXorDateTime.d.ts +9 -0
  263. package/dist/plain/interval/intervalXorTime.d.ts +9 -0
  264. package/dist/plain/interval/mergeIntervalsDate.d.ts +9 -0
  265. package/dist/plain/interval/mergeIntervalsDateTime.d.ts +9 -0
  266. package/dist/plain/interval/mergeIntervalsTime.d.ts +9 -0
  267. package/dist/plain/interval/splitIntervalByUnitDate.d.ts +23 -7
  268. package/dist/plain/interval/splitIntervalByUnitDate.js +7 -7
  269. package/dist/plain/interval/splitIntervalByUnitDateTime.d.ts +22 -6
  270. package/dist/plain/interval/splitIntervalByUnitDateTime.js +6 -6
  271. package/dist/plain/interval/splitIntervalByUnitTime.d.ts +17 -4
  272. package/dist/plain/interval/splitIntervalByUnitTime.js +1 -4
  273. package/dist/plain/map/mapDatesInRange.d.ts +8 -4
  274. package/dist/plain/map/mapDatesInRange.js +1 -4
  275. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +10 -7
  276. package/dist/plain/parse/parseDateTimeWithPattern.js +10 -7
  277. package/dist/plain/parse/parseDateWithPattern.d.ts +10 -7
  278. package/dist/plain/parse/parseDateWithPattern.js +10 -7
  279. package/dist/plain/parse/parseTimeWithPattern.d.ts +10 -7
  280. package/dist/plain/parse/parseTimeWithPattern.js +10 -7
  281. package/dist/plain/parse/parseUnitFromDate.d.ts +11 -3
  282. package/dist/plain/parse/parseUnitFromDate.js +3 -3
  283. package/dist/plain/parse/parseUnitFromDateTime.d.ts +11 -3
  284. package/dist/plain/parse/parseUnitFromDateTime.js +3 -3
  285. package/dist/plain/parse/parseWeekFromDate.d.ts +10 -6
  286. package/dist/plain/parse/parseWeekFromDate.js +2 -6
  287. package/dist/plain/parse/parseWeekFromDateTime.d.ts +10 -6
  288. package/dist/plain/parse/parseWeekFromDateTime.js +2 -6
  289. package/dist/plain/validate/isValidDateRange.d.ts +19 -4
  290. package/dist/plain/validate/isValidDateRange.js +1 -4
  291. package/dist/plain/validate/isValidDateTimeRange.d.ts +20 -5
  292. package/dist/plain/validate/isValidDateTimeRange.js +2 -5
  293. package/dist/plain/validate/isValidTimeRange.d.ts +20 -5
  294. package/dist/plain/validate/isValidTimeRange.js +2 -5
  295. package/dist/precision/convert/fromExcelSerial.d.ts +10 -4
  296. package/dist/precision/convert/fromExcelSerial.js +4 -5
  297. package/dist/precision/convert/fromNanoseconds.d.ts +1 -1
  298. package/dist/precision/convert/fromNanoseconds.js +1 -1
  299. package/dist/precision/convert/toExcelSerial.d.ts +9 -3
  300. package/dist/precision/convert/toExcelSerial.js +3 -4
  301. package/dist/precision/convert/toNanoseconds.d.ts +11 -6
  302. package/dist/precision/convert/toNanoseconds.js +11 -6
  303. package/dist/precision/validate/isValidInstant.d.ts +12 -3
  304. package/dist/precision/validate/isValidInstant.js +12 -3
  305. package/dist/span/calculate/spanMs.d.ts +10 -4
  306. package/dist/span/calculate/spanMs.js +10 -4
  307. package/dist/span/calculate/spanNs.d.ts +10 -4
  308. package/dist/span/calculate/spanNs.js +10 -4
  309. package/dist/span/validate/isValidSpan.d.ts +8 -3
  310. package/dist/span/validate/isValidSpan.js +8 -3
  311. package/dist/transport/calculate/bestAvailable.d.ts +47 -0
  312. package/dist/transport/calculate/bestAvailable.js +76 -0
  313. package/dist/transport/calculate/crossingTime.d.ts +58 -0
  314. package/dist/transport/calculate/crossingTime.js +76 -0
  315. package/dist/transport/calculate/cutoffAt.d.ts +90 -0
  316. package/dist/transport/calculate/cutoffAt.js +209 -0
  317. package/dist/transport/calculate/cutoffSchedule.d.ts +70 -0
  318. package/dist/transport/calculate/cutoffSchedule.js +71 -0
  319. package/dist/transport/calculate/dwellTime.d.ts +81 -0
  320. package/dist/transport/calculate/dwellTime.js +130 -0
  321. package/dist/transport/calculate/estimateDrift.d.ts +65 -0
  322. package/dist/transport/calculate/estimateDrift.js +75 -0
  323. package/dist/transport/calculate/index.d.ts +10 -0
  324. package/dist/transport/calculate/index.js +10 -0
  325. package/dist/transport/calculate/nextDeparture.d.ts +78 -0
  326. package/dist/transport/calculate/nextDeparture.js +131 -0
  327. package/dist/transport/calculate/punctualityRate.d.ts +42 -0
  328. package/dist/transport/calculate/punctualityRate.js +59 -0
  329. package/dist/transport/calculate/scheduleDelivery.d.ts +150 -0
  330. package/dist/transport/calculate/scheduleDelivery.js +300 -0
  331. package/dist/transport/calculate/transitTime.d.ts +71 -0
  332. package/dist/transport/calculate/transitTime.js +101 -0
  333. package/dist/transport/compare/classifyPunctuality.d.ts +46 -0
  334. package/dist/transport/compare/classifyPunctuality.js +64 -0
  335. package/dist/transport/compare/index.d.ts +4 -0
  336. package/dist/transport/compare/index.js +4 -0
  337. package/dist/transport/compare/isPastCutoff.d.ts +33 -0
  338. package/dist/transport/compare/isPastCutoff.js +48 -0
  339. package/dist/transport/compare/scheduleDeviation.d.ts +37 -0
  340. package/dist/transport/compare/scheduleDeviation.js +53 -0
  341. package/dist/transport/compare/timeToCutoff.d.ts +31 -0
  342. package/dist/transport/compare/timeToCutoff.js +47 -0
  343. package/dist/transport/convert/etaAtZone.d.ts +43 -0
  344. package/dist/transport/convert/etaAtZone.js +58 -0
  345. package/dist/transport/convert/index.d.ts +1 -0
  346. package/dist/transport/convert/index.js +1 -0
  347. package/dist/transport/index.d.ts +4 -0
  348. package/dist/transport/index.js +5 -0
  349. package/dist/types/business-calendar.d.ts +19 -14
  350. package/dist/types/calendar-options.d.ts +15 -3
  351. package/dist/types/date-cycle-field.d.ts +5 -0
  352. package/dist/types/date-duration-unit.d.ts +4 -0
  353. package/dist/types/date-time-cycle-field.d.ts +4 -0
  354. package/dist/types/date-time-duration-units.d.ts +4 -0
  355. package/dist/types/date-time-unit.d.ts +4 -0
  356. package/dist/types/date-unit.d.ts +4 -0
  357. package/dist/types/disambiguation.d.ts +8 -0
  358. package/dist/types/duration-relative-to.d.ts +8 -0
  359. package/dist/types/duration-string-options.d.ts +28 -0
  360. package/dist/types/fiscal-calendar.d.ts +1 -1
  361. package/dist/types/fractional-digit.d.ts +5 -0
  362. package/dist/types/free-time-options.d.ts +44 -0
  363. package/dist/types/index.d.ts +3 -1
  364. package/dist/types/index.js +3 -1
  365. package/dist/types/interval.d.ts +8 -1
  366. package/dist/types/offset.d.ts +9 -0
  367. package/dist/types/operating-schedule.d.ts +71 -0
  368. package/dist/types/operating-schedule.js +0 -0
  369. package/dist/types/overflow.d.ts +6 -0
  370. package/dist/types/relative-rounding-method.d.ts +6 -0
  371. package/dist/types/relative-time-options.d.ts +33 -5
  372. package/dist/types/rounding-options.d.ts +27 -0
  373. package/dist/types/time-cycle-field.d.ts +4 -0
  374. package/dist/types/time-duration-unit.d.ts +4 -0
  375. package/dist/types/time-unit.d.ts +4 -0
  376. package/dist/types/transport-timestamps.d.ts +54 -0
  377. package/dist/types/transport-timestamps.js +0 -0
  378. package/dist/unix/calculate/addUnix.d.ts +19 -5
  379. package/dist/unix/calculate/addUnix.js +1 -5
  380. package/dist/unix/calculate/diffUnix.d.ts +13 -3
  381. package/dist/unix/calculate/diffUnix.js +1 -3
  382. package/dist/unix/calculate/diffUnixAsDuration.d.ts +13 -3
  383. package/dist/unix/calculate/diffUnixAsDuration.js +1 -3
  384. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +13 -3
  385. package/dist/unix/calculate/endOfQuarterForUnix.js +1 -3
  386. package/dist/unix/calculate/endOfUnix.d.ts +20 -4
  387. package/dist/unix/calculate/endOfUnix.js +1 -4
  388. package/dist/unix/calculate/isBetweenUnix.d.ts +26 -4
  389. package/dist/unix/calculate/isBetweenUnix.js +4 -6
  390. package/dist/unix/calculate/roundUnix.d.ts +31 -3
  391. package/dist/unix/calculate/roundUnix.js +3 -6
  392. package/dist/unix/calculate/setUnix.d.ts +35 -9
  393. package/dist/unix/calculate/setUnix.js +4 -13
  394. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +13 -3
  395. package/dist/unix/calculate/startOfQuarterForUnix.js +1 -3
  396. package/dist/unix/calculate/startOfUnix.d.ts +20 -4
  397. package/dist/unix/calculate/startOfUnix.js +1 -4
  398. package/dist/unix/calculate/subtractUnix.d.ts +19 -5
  399. package/dist/unix/calculate/subtractUnix.js +1 -5
  400. package/dist/unix/compare/areUnixEqual.d.ts +7 -1
  401. package/dist/unix/compare/areUnixEqual.js +1 -1
  402. package/dist/unix/compare/areUnixEqualBy.d.ts +24 -7
  403. package/dist/unix/compare/areUnixEqualBy.js +13 -9
  404. package/dist/unix/compare/isAfterUnix.d.ts +7 -1
  405. package/dist/unix/compare/isAfterUnix.js +1 -1
  406. package/dist/unix/compare/isBeforeUnix.d.ts +7 -1
  407. package/dist/unix/compare/isBeforeUnix.js +1 -1
  408. package/dist/unix/convert/convertUnixToPlainDate.d.ts +14 -4
  409. package/dist/unix/convert/convertUnixToPlainDate.js +2 -4
  410. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +14 -4
  411. package/dist/unix/convert/convertUnixToPlainDateTime.js +2 -4
  412. package/dist/unix/convert/convertUnixToPlainTime.d.ts +14 -4
  413. package/dist/unix/convert/convertUnixToPlainTime.js +2 -4
  414. package/dist/unix/convert/convertUnixToUtc.d.ts +9 -4
  415. package/dist/unix/convert/convertUnixToUtc.js +3 -4
  416. package/dist/unix/convert/convertUnixToZoned.d.ts +10 -5
  417. package/dist/unix/convert/convertUnixToZoned.js +4 -5
  418. package/dist/unix/format/formatCalendarUnix.d.ts +27 -19
  419. package/dist/unix/format/formatCalendarUnix.js +4 -5
  420. package/dist/unix/format/formatRelativeUnix.d.ts +54 -5
  421. package/dist/unix/format/formatRelativeUnix.js +3 -5
  422. package/dist/unix/format/formatUnix.d.ts +24 -6
  423. package/dist/unix/format/formatUnix.js +8 -7
  424. package/dist/unix/get/getUnixNow.d.ts +8 -3
  425. package/dist/unix/get/getUnixNow.js +1 -3
  426. package/dist/unix/interval/intervalCountUnix.d.ts +14 -5
  427. package/dist/unix/interval/intervalCountUnix.js +2 -5
  428. package/dist/unix/interval/intervalDifferenceUnix.d.ts +6 -0
  429. package/dist/unix/interval/intervalDivideEquallyUnix.d.ts +18 -4
  430. package/dist/unix/interval/intervalDivideEquallyUnix.js +5 -4
  431. package/dist/unix/interval/intervalFromDurationUnix.d.ts +33 -5
  432. package/dist/unix/interval/intervalFromDurationUnix.js +6 -5
  433. package/dist/unix/interval/intervalIntersectionUnix.d.ts +6 -0
  434. package/dist/unix/interval/intervalLengthUnix.d.ts +16 -6
  435. package/dist/unix/interval/intervalLengthUnix.js +4 -6
  436. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +13 -3
  437. package/dist/unix/interval/intervalOverlappingDaysUnix.js +1 -3
  438. package/dist/unix/interval/intervalSplitAtUnix.d.ts +8 -0
  439. package/dist/unix/interval/intervalSplitAtUnix.js +2 -0
  440. package/dist/unix/interval/intervalUnionUnix.d.ts +6 -0
  441. package/dist/unix/interval/intervalXorAllUnix.d.ts +6 -0
  442. package/dist/unix/interval/intervalXorUnix.d.ts +6 -0
  443. package/dist/unix/interval/mergeIntervalsUnix.d.ts +6 -0
  444. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +42 -11
  445. package/dist/unix/interval/splitIntervalByUnitUnix.js +21 -16
  446. package/dist/unix/parse/parseDateFromUnix.d.ts +13 -2
  447. package/dist/unix/parse/parseDateFromUnix.js +1 -2
  448. package/dist/unix/parse/parseDayFromUnix.d.ts +14 -2
  449. package/dist/unix/parse/parseDayFromUnix.js +2 -2
  450. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +13 -1
  451. package/dist/unix/parse/parseDayOfWeekFromUnix.js +1 -1
  452. package/dist/unix/parse/parseHourFromUnix.d.ts +14 -2
  453. package/dist/unix/parse/parseHourFromUnix.js +2 -2
  454. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +14 -2
  455. package/dist/unix/parse/parseMicrosecondFromUnix.js +2 -2
  456. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +14 -2
  457. package/dist/unix/parse/parseMillisecondFromUnix.js +2 -2
  458. package/dist/unix/parse/parseMinuteFromUnix.d.ts +14 -2
  459. package/dist/unix/parse/parseMinuteFromUnix.js +2 -2
  460. package/dist/unix/parse/parseMonthFromUnix.d.ts +14 -2
  461. package/dist/unix/parse/parseMonthFromUnix.js +2 -2
  462. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +14 -2
  463. package/dist/unix/parse/parseNanosecondFromUnix.js +2 -2
  464. package/dist/unix/parse/parseSecondFromUnix.d.ts +14 -2
  465. package/dist/unix/parse/parseSecondFromUnix.js +2 -2
  466. package/dist/unix/parse/parseTimeFromUnix.d.ts +13 -2
  467. package/dist/unix/parse/parseTimeFromUnix.js +1 -2
  468. package/dist/unix/parse/parseUnitFromUnix.d.ts +22 -3
  469. package/dist/unix/parse/parseUnitFromUnix.js +2 -3
  470. package/dist/unix/parse/parseWeekFromUnix.d.ts +23 -7
  471. package/dist/unix/parse/parseWeekFromUnix.js +3 -7
  472. package/dist/unix/parse/parseYearFromUnix.d.ts +14 -2
  473. package/dist/unix/parse/parseYearFromUnix.js +2 -2
  474. package/dist/unix/validate/isValidUnixRange.d.ts +20 -4
  475. package/dist/unix/validate/isValidUnixRange.js +1 -4
  476. package/dist/utc/calculate/addUtc.d.ts +7 -4
  477. package/dist/utc/calculate/addUtc.js +1 -4
  478. package/dist/utc/calculate/diffUtc.d.ts +1 -1
  479. package/dist/utc/calculate/diffUtc.js +1 -1
  480. package/dist/utc/calculate/diffUtcAsDuration.d.ts +1 -1
  481. package/dist/utc/calculate/diffUtcAsDuration.js +1 -1
  482. package/dist/utc/calculate/endOfUtc.d.ts +16 -3
  483. package/dist/utc/calculate/endOfUtc.js +2 -3
  484. package/dist/utc/calculate/isBetweenUtc.d.ts +13 -2
  485. package/dist/utc/calculate/isBetweenUtc.js +4 -4
  486. package/dist/utc/calculate/roundUtc.d.ts +26 -9
  487. package/dist/utc/calculate/roundUtc.js +3 -12
  488. package/dist/utc/calculate/setUtc.d.ts +7 -4
  489. package/dist/utc/calculate/setUtc.js +1 -4
  490. package/dist/utc/calculate/startOfUtc.d.ts +15 -2
  491. package/dist/utc/calculate/startOfUtc.js +1 -2
  492. package/dist/utc/calculate/subtractUtc.d.ts +7 -4
  493. package/dist/utc/calculate/subtractUtc.js +1 -4
  494. package/dist/utc/compare/areUtcEqualBy.d.ts +9 -3
  495. package/dist/utc/compare/areUtcEqualBy.js +2 -3
  496. package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -3
  497. package/dist/utc/convert/convertUtcToPlainDate.js +5 -6
  498. package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +8 -3
  499. package/dist/utc/convert/convertUtcToPlainDateTime.js +5 -6
  500. package/dist/utc/convert/convertUtcToPlainTime.d.ts +8 -3
  501. package/dist/utc/convert/convertUtcToPlainTime.js +5 -6
  502. package/dist/utc/convert/convertUtcToUnix.d.ts +9 -4
  503. package/dist/utc/convert/convertUtcToUnix.js +3 -4
  504. package/dist/utc/convert/convertUtcToZoned.d.ts +1 -1
  505. package/dist/utc/convert/convertUtcToZoned.js +1 -1
  506. package/dist/utc/format/formatCalendarUtc.d.ts +19 -8
  507. package/dist/utc/format/formatCalendarUtc.js +8 -6
  508. package/dist/utc/format/formatHttp.d.ts +1 -1
  509. package/dist/utc/format/formatHttp.js +1 -1
  510. package/dist/utc/format/formatRelativeUtc.d.ts +30 -10
  511. package/dist/utc/format/formatRelativeUtc.js +9 -11
  512. package/dist/utc/format/formatUtc.d.ts +17 -15
  513. package/dist/utc/format/formatUtc.js +8 -8
  514. package/dist/utc/interval/intervalDifferenceUtc.d.ts +6 -0
  515. package/dist/utc/interval/intervalDivideEquallyUtc.d.ts +18 -4
  516. package/dist/utc/interval/intervalDivideEquallyUtc.js +5 -4
  517. package/dist/utc/interval/intervalFromDurationUtc.d.ts +13 -3
  518. package/dist/utc/interval/intervalFromDurationUtc.js +1 -3
  519. package/dist/utc/interval/intervalIntersectionUtc.d.ts +6 -0
  520. package/dist/utc/interval/intervalSplitAtUtc.d.ts +8 -0
  521. package/dist/utc/interval/intervalSplitAtUtc.js +2 -0
  522. package/dist/utc/interval/intervalUnionUtc.d.ts +6 -0
  523. package/dist/utc/interval/intervalXorAllUtc.d.ts +6 -0
  524. package/dist/utc/interval/intervalXorUtc.d.ts +6 -0
  525. package/dist/utc/interval/mergeIntervalsUtc.d.ts +6 -0
  526. package/dist/utc/interval/splitIntervalByUnitUtc.d.ts +19 -6
  527. package/dist/utc/interval/splitIntervalByUnitUtc.js +6 -6
  528. package/dist/utc/parse/parseDateFromUtc.d.ts +7 -3
  529. package/dist/utc/parse/parseDateFromUtc.js +1 -3
  530. package/dist/utc/parse/parseDayFromUtc.d.ts +7 -3
  531. package/dist/utc/parse/parseDayFromUtc.js +1 -3
  532. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +7 -3
  533. package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -6
  534. package/dist/utc/parse/parseHourFromUtc.d.ts +7 -3
  535. package/dist/utc/parse/parseHourFromUtc.js +1 -3
  536. package/dist/utc/parse/parseHttp.d.ts +1 -1
  537. package/dist/utc/parse/parseHttp.js +1 -1
  538. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +7 -3
  539. package/dist/utc/parse/parseMicrosecondFromUtc.js +1 -3
  540. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +7 -3
  541. package/dist/utc/parse/parseMillisecondFromUtc.js +1 -3
  542. package/dist/utc/parse/parseMinuteFromUtc.d.ts +7 -3
  543. package/dist/utc/parse/parseMinuteFromUtc.js +1 -3
  544. package/dist/utc/parse/parseMonthFromUtc.d.ts +7 -3
  545. package/dist/utc/parse/parseMonthFromUtc.js +1 -3
  546. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +7 -3
  547. package/dist/utc/parse/parseNanosecondFromUtc.js +1 -3
  548. package/dist/utc/parse/parseSecondFromUtc.d.ts +7 -3
  549. package/dist/utc/parse/parseSecondFromUtc.js +1 -3
  550. package/dist/utc/parse/parseTimeFromUtc.d.ts +8 -3
  551. package/dist/utc/parse/parseTimeFromUtc.js +5 -6
  552. package/dist/utc/parse/parseUnitFromUtc.d.ts +17 -5
  553. package/dist/utc/parse/parseUnitFromUtc.js +6 -8
  554. package/dist/utc/parse/parseWeekFromUtc.d.ts +18 -10
  555. package/dist/utc/parse/parseWeekFromUtc.js +7 -13
  556. package/dist/utc/parse/parseYearFromUtc.d.ts +7 -3
  557. package/dist/utc/parse/parseYearFromUtc.js +1 -3
  558. package/dist/utc/validate/isValidUtcRange.d.ts +16 -5
  559. package/dist/utc/validate/isValidUtcRange.js +2 -5
  560. package/dist/zoned/calculate/addZoned.d.ts +20 -10
  561. package/dist/zoned/calculate/addZoned.js +6 -13
  562. package/dist/zoned/calculate/cycleZoned.d.ts +33 -8
  563. package/dist/zoned/calculate/cycleZoned.js +1 -8
  564. package/dist/zoned/calculate/diffZoned.d.ts +1 -1
  565. package/dist/zoned/calculate/diffZoned.js +1 -1
  566. package/dist/zoned/calculate/diffZonedAsDuration.d.ts +1 -1
  567. package/dist/zoned/calculate/diffZonedAsDuration.js +1 -1
  568. package/dist/zoned/calculate/endOfQuarterForZoned.d.ts +9 -2
  569. package/dist/zoned/calculate/endOfQuarterForZoned.js +4 -5
  570. package/dist/zoned/calculate/endOfZoned.d.ts +16 -3
  571. package/dist/zoned/calculate/endOfZoned.js +2 -3
  572. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.d.ts +10 -3
  573. package/dist/zoned/calculate/getLocaleZonedEndOfWeek.js +5 -6
  574. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.d.ts +7 -1
  575. package/dist/zoned/calculate/getLocaleZonedStartOfWeek.js +3 -4
  576. package/dist/zoned/calculate/roundZoned.d.ts +21 -4
  577. package/dist/zoned/calculate/roundZoned.js +3 -7
  578. package/dist/zoned/calculate/setZoned.d.ts +25 -8
  579. package/dist/zoned/calculate/setZoned.js +4 -12
  580. package/dist/zoned/calculate/startOfQuarterForZoned.d.ts +7 -2
  581. package/dist/zoned/calculate/startOfQuarterForZoned.js +3 -5
  582. package/dist/zoned/calculate/startOfZoned.d.ts +15 -3
  583. package/dist/zoned/calculate/startOfZoned.js +1 -3
  584. package/dist/zoned/calculate/subtractZoned.d.ts +20 -10
  585. package/dist/zoned/calculate/subtractZoned.js +6 -13
  586. package/dist/zoned/compare/areZonedEqualBy.d.ts +14 -5
  587. package/dist/zoned/compare/areZonedEqualBy.js +7 -5
  588. package/dist/zoned/compare/isBetweenZoned.d.ts +13 -1
  589. package/dist/zoned/compare/isBetweenZoned.js +4 -3
  590. package/dist/zoned/compare/isInDaylightSaving.d.ts +38 -11
  591. package/dist/zoned/compare/isInDaylightSaving.js +40 -44
  592. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +18 -5
  593. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +6 -11
  594. package/dist/zoned/convert/convertZonedToUnix.d.ts +9 -4
  595. package/dist/zoned/convert/convertZonedToUnix.js +2 -4
  596. package/dist/zoned/convert/convertZonedToZoned.d.ts +1 -1
  597. package/dist/zoned/convert/convertZonedToZoned.js +1 -1
  598. package/dist/zoned/format/formatCalendarZoned.d.ts +18 -12
  599. package/dist/zoned/format/formatCalendarZoned.js +13 -9
  600. package/dist/zoned/format/formatRelativeZoned.d.ts +41 -12
  601. package/dist/zoned/format/formatRelativeZoned.js +7 -4
  602. package/dist/zoned/format/formatRfc2822.d.ts +2 -2
  603. package/dist/zoned/format/formatRfc2822.js +2 -2
  604. package/dist/zoned/format/formatRfc3339.d.ts +2 -3
  605. package/dist/zoned/format/formatRfc3339.js +2 -3
  606. package/dist/zoned/format/formatTimeZoneName.d.ts +12 -3
  607. package/dist/zoned/format/formatTimeZoneName.js +5 -4
  608. package/dist/zoned/format/formatZonedDateTime.js +2 -1
  609. package/dist/zoned/format/formatZonedRange.js +2 -1
  610. package/dist/zoned/format/formatZonedToParts.d.ts +15 -4
  611. package/dist/zoned/format/formatZonedToParts.js +8 -5
  612. package/dist/zoned/get/getDstTransitions.d.ts +9 -10
  613. package/dist/zoned/get/getDstTransitions.js +12 -3
  614. package/dist/zoned/get/getTimeZoneOffset.d.ts +4 -1
  615. package/dist/zoned/get/getTimeZoneOffset.js +6 -3
  616. package/dist/zoned/get/getZonedNow.d.ts +13 -1
  617. package/dist/zoned/get/getZonedNow.js +12 -3
  618. package/dist/zoned/interval/intervalDifferenceZoned.d.ts +9 -0
  619. package/dist/zoned/interval/intervalDivideEquallyZoned.d.ts +22 -4
  620. package/dist/zoned/interval/intervalDivideEquallyZoned.js +6 -4
  621. package/dist/zoned/interval/intervalFromDurationZoned.d.ts +29 -10
  622. package/dist/zoned/interval/intervalFromDurationZoned.js +6 -13
  623. package/dist/zoned/interval/intervalIntersectionZoned.d.ts +9 -0
  624. package/dist/zoned/interval/intervalSplitAtZoned.d.ts +11 -0
  625. package/dist/zoned/interval/intervalSplitAtZoned.js +2 -0
  626. package/dist/zoned/interval/intervalUnionZoned.d.ts +9 -0
  627. package/dist/zoned/interval/intervalXorAllZoned.d.ts +9 -0
  628. package/dist/zoned/interval/intervalXorZoned.d.ts +9 -0
  629. package/dist/zoned/interval/mergeIntervalsZoned.d.ts +9 -0
  630. package/dist/zoned/interval/splitIntervalByUnitZoned.d.ts +27 -6
  631. package/dist/zoned/interval/splitIntervalByUnitZoned.js +11 -6
  632. package/dist/zoned/map/mapZonedDatesInRange.d.ts +9 -4
  633. package/dist/zoned/map/mapZonedDatesInRange.js +2 -4
  634. package/dist/zoned/parse/parseRfc2822.d.ts +1 -1
  635. package/dist/zoned/parse/parseRfc2822.js +1 -1
  636. package/dist/zoned/parse/parseUnitFromZoned.d.ts +9 -3
  637. package/dist/zoned/parse/parseUnitFromZoned.js +1 -3
  638. package/dist/zoned/parse/parseWeekFromZoned.d.ts +10 -3
  639. package/dist/zoned/parse/parseWeekFromZoned.js +2 -3
  640. package/dist/zoned/validate/hasDaylightSaving.d.ts +42 -11
  641. package/dist/zoned/validate/hasDaylightSaving.js +47 -31
  642. package/dist/zoned/validate/isValidZonedDateTime.d.ts +13 -0
  643. package/dist/zoned/validate/isValidZonedDateTime.js +14 -1
  644. package/dist/zoned/validate/isValidZonedRange.d.ts +15 -4
  645. package/dist/zoned/validate/isValidZonedRange.js +1 -4
  646. package/package.json +53 -5
  647. package/skills/gmt-arithmetic/SKILL.md +1 -1
  648. package/skills/gmt-basics/SKILL.md +10 -1
  649. package/skills/gmt-integration/SKILL.md +10 -5
  650. package/skills/gmt-timezone/SKILL.md +210 -14
  651. package/dist/internal/resolveReadingTimeZone.d.ts +0 -11
  652. package/dist/internal/resolveReadingTimeZone.js +0 -18
  653. package/dist/types/duration-unit.d.ts +0 -5
  654. /package/dist/types/{duration-unit.js → free-time-options.js} +0 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The value of an option that was read once, or its default when the option is absent.
3
+ *
4
+ * - ECMA-402 `GetOption` (the Temporal specification defines the same operation) reads the
5
+ * property with one `Get` and returns the default only when that value is `undefined`. Pass
6
+ * the property read as the argument, so the option is read exactly once: a getter cannot
7
+ * answer one value to the check and another to the use.
8
+ * - `null` is a value, not an omission, so it is returned as it is for the caller to validate.
9
+ *
10
+ * @param value the option as read from the caller's object, `undefined` when absent
11
+ * @param fallback the documented default
12
+ * @returns `fallback` when `value` is `undefined`, otherwise `value`
13
+ *
14
+ * @example optionOrDefault(undefined, "compatible") // "compatible"
15
+ * @example optionOrDefault("later", "compatible") // "later"
16
+ * @example optionOrDefault(null, true) // null (a value for the caller to validate)
17
+ */
18
+ export function optionOrDefault(value, fallback) {
19
+ return value === undefined ? fallback : value;
20
+ }
@@ -3,8 +3,8 @@ import { type LocalesArgument } from "./resolveLocale.js";
3
3
  * Shared token-pattern engine for J11's `parse*WithPattern` family.
4
4
  *
5
5
  * This is GMT's one named exception to `context/coding-standards.md`'s
6
- * "manual string parsing" prohibition (Decision 4 in
7
- * `context/roadmap/issues/J.md`). The exception is scoped to this module
6
+ * "manual string parsing" prohibition (its section "Scoped exception:
7
+ * manual string parsing"). The exception is scoped to this module
8
8
  * and the three `parse*WithPattern` public functions, and is bound by
9
9
  * three rules, enforced throughout this file:
10
10
  * 1. The regex is always built *from the pattern string itself* at call
@@ -24,9 +24,10 @@ export const DATE_TIME_PATTERN_FIELDS = new Set([
24
24
  ...DATE_PATTERN_FIELDS,
25
25
  ...TIME_PATTERN_FIELDS,
26
26
  ]);
27
- // Recognized vocabulary letters (Decision 1's Luxon-derived token set,
28
- // restricted to what's unambiguous to parse — no offset/zone-name tokens
29
- // since this story is plain-only). Any other unquoted letter in a pattern
27
+ // Recognized vocabulary letters: a subset of the UTS #35 Date Field Symbol
28
+ // Table, with its field lengths (`MMM` abbreviated, `MMMM` wide), restricted
29
+ // to what's unambiguous to parse — no offset/zone-name tokens since this
30
+ // story is plain-only (Decision 1). Any other unquoted letter in a pattern
30
31
  // is malformed. Numeric ranges are baked into each regex so a shape
31
32
  // mismatch (e.g. "13" for a 12-hour token) fails at the regex stage,
32
33
  // before ever reaching Temporal.
@@ -78,13 +79,21 @@ const VOCABULARY_LETTERS = "yMdHhmsSEaG";
78
79
  /**
79
80
  * Split a pattern string into literal and letter-run parts.
80
81
  *
81
- * Quoted segments (`'...'`) are literals matched verbatim; a doubled `''`
82
- * *inside* an open quote is the escape for one literal `'` character
83
- * (mirrors Luxon's own escaping exactly — Decision 1 already establishes
84
- * Luxon's vocabulary as this story's starting point). Any character that
85
- * isn't part of a letter run and isn't inside a quote (separators,
86
- * literal digits, punctuation) is automatically a one-character literal —
87
- * no explicit quoting required for those.
82
+ * Literal text follows UTS #35 Part 4, Date Format Patterns
83
+ * (https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns):
84
+ * - "Any characters other than A..Z and a..z, including spaces and
85
+ * punctuation" are literals with no quoting.
86
+ * - "Any text between single vertical quotes ('xxxx'), which may include
87
+ * A..Z and a..z as literal text."
88
+ * - "Two adjacent single vertical quotes (''), which represent a literal
89
+ * single quote, either inside or outside quoted text."
90
+ *
91
+ * The pattern is read left to right, so a `''` pair is taken before a
92
+ * lone `'` is read as opening or closing quoted text: `''''` is two
93
+ * literal quotes, and `'''T'` is a literal quote followed by the quoted
94
+ * text `T`. UTS #35 defines quoted text only as text *between* two
95
+ * quotes, so a quote that never closes has no defined meaning and the
96
+ * pattern is malformed (`null`).
88
97
  */
89
98
  function tokenizePattern(pattern) {
90
99
  const parts = [];
@@ -92,6 +101,12 @@ function tokenizePattern(pattern) {
92
101
  while (i < pattern.length) {
93
102
  const ch = pattern[i];
94
103
  if (ch === "'") {
104
+ // `''` outside quoted text: one literal quote, no quoted text opened.
105
+ if (pattern[i + 1] === "'") {
106
+ parts.push({ type: "literal", text: "'" });
107
+ i += 2;
108
+ continue;
109
+ }
95
110
  let j = i + 1;
96
111
  let text = "";
97
112
  let closed = false;
@@ -109,9 +124,9 @@ function tokenizePattern(pattern) {
109
124
  text += pattern[j];
110
125
  j += 1;
111
126
  }
112
- // An unterminated quote has no unambiguous literal meaning — treat
113
- // it as a malformed pattern rather than guessing where it "should"
114
- // have closed.
127
+ // UTS #35 gives quoted text a meaning only between two quotes, so
128
+ // an unterminated quote is a malformed pattern, not a guess at
129
+ // where it should have closed.
115
130
  if (!closed)
116
131
  return null;
117
132
  parts.push({ type: "literal", text });
@@ -24,16 +24,20 @@ function singularDateUnit(unit) {
24
24
  * @example plainDateUntil(Temporal.PlainDate.from("2024-01-31"), Temporal.PlainDate.from("2024-03-01"), "months").toString() // "P1M1D"
25
25
  */
26
26
  export function plainDateUntil(start, end, largestUnit, options) {
27
- if (options?.smallestUnit === undefined &&
28
- options?.roundingIncrement === undefined &&
29
- options?.roundingMode === undefined) {
27
+ // Each option is read once (GetOption).
28
+ const smallestUnit = options?.smallestUnit;
29
+ const roundingIncrement = options?.roundingIncrement;
30
+ const roundingMode = options?.roundingMode;
31
+ if (smallestUnit === undefined &&
32
+ roundingIncrement === undefined &&
33
+ roundingMode === undefined) {
30
34
  return Temporal.Duration.from(calendarDateUntil(start, end, singularDateUnit(largestUnit)));
31
35
  }
32
36
  const untilOptions = {
33
37
  largestUnit: largestUnit,
34
- smallestUnit: options.smallestUnit,
35
- roundingIncrement: options.roundingIncrement,
36
- roundingMode: options.roundingMode,
38
+ smallestUnit,
39
+ roundingIncrement,
40
+ roundingMode,
37
41
  };
38
42
  // No D11 term here. The nudge window can only miss its target when the target sits strictly
39
43
  // between the window bounds by a sub-day amount, which is why every D11 case carries a time
@@ -0,0 +1,38 @@
1
+ import type { Punctuality } from "../types/index.js";
2
+ /** A `PunctualityTolerance` as non-negative exact nanoseconds; `early` is `null` when absent. */
3
+ export type ToleranceNanoseconds = {
4
+ late: bigint;
5
+ early: bigint | null;
6
+ };
7
+ /**
8
+ * Read a `PunctualityTolerance` once into exact nanoseconds, or `null` when it is invalid.
9
+ *
10
+ * - `late` and `early` are each read exactly once, so a caller that classifies many pairs under
11
+ * one tolerance really uses one tolerance, whatever a getter returns on a later read.
12
+ * - Each bound is an exact duration (a day is 24 hours; years, months and weeks refused) and not
13
+ * negative (`-PT0S` is zero). `late` is required; `early: undefined` is absent and
14
+ * `early: null` is invalid.
15
+ * - A hostile value (a throwing getter, a revoked Proxy) is invalid input: `null`, never a throw.
16
+ *
17
+ * @param tolerance candidate `{ late, early? }`
18
+ * @returns the bounds in nanoseconds, or null on invalid input
19
+ *
20
+ * @example parsePunctualityTolerance({ late: "PT15M" }) // { late: 900000000000n, early: null }
21
+ * @example parsePunctualityTolerance({ late: "-PT15M" }) // null
22
+ */
23
+ export declare function parsePunctualityTolerance(tolerance: unknown): ToleranceNanoseconds | null;
24
+ /**
25
+ * Classify a deviation (actual − planned, exact nanoseconds) against a tolerance.
26
+ *
27
+ * Late when the deviation is `late` or more; early when `early` is set and the deviation is
28
+ * `-early` or less; on time strictly between. Late is checked first, so with both bounds zero the
29
+ * plan itself is late.
30
+ *
31
+ * @param deviation actual minus planned, in nanoseconds
32
+ * @param tolerance the bounds from `parsePunctualityTolerance`
33
+ * @returns "early", "onTime" or "late"
34
+ *
35
+ * @example punctualityOf(900000000000n, { late: 900000000000n, early: null }) // "late"
36
+ * @example punctualityOf(0n, { late: 900000000000n, early: 0n }) // "early"
37
+ */
38
+ export declare function punctualityOf(deviation: bigint, tolerance: ToleranceNanoseconds): Punctuality;
@@ -0,0 +1,59 @@
1
+ import { nonNegativeExactDurationNanoseconds } from "./exactDuration.js";
2
+ import { isObject } from "./isObject.js";
3
+ /**
4
+ * Read a `PunctualityTolerance` once into exact nanoseconds, or `null` when it is invalid.
5
+ *
6
+ * - `late` and `early` are each read exactly once, so a caller that classifies many pairs under
7
+ * one tolerance really uses one tolerance, whatever a getter returns on a later read.
8
+ * - Each bound is an exact duration (a day is 24 hours; years, months and weeks refused) and not
9
+ * negative (`-PT0S` is zero). `late` is required; `early: undefined` is absent and
10
+ * `early: null` is invalid.
11
+ * - A hostile value (a throwing getter, a revoked Proxy) is invalid input: `null`, never a throw.
12
+ *
13
+ * @param tolerance candidate `{ late, early? }`
14
+ * @returns the bounds in nanoseconds, or null on invalid input
15
+ *
16
+ * @example parsePunctualityTolerance({ late: "PT15M" }) // { late: 900000000000n, early: null }
17
+ * @example parsePunctualityTolerance({ late: "-PT15M" }) // null
18
+ */
19
+ export function parsePunctualityTolerance(tolerance) {
20
+ try {
21
+ if (!isObject(tolerance)) {
22
+ return null;
23
+ }
24
+ const { late, early } = tolerance;
25
+ const lateNanoseconds = nonNegativeExactDurationNanoseconds(late);
26
+ const earlyNanoseconds = early === undefined ? null : nonNegativeExactDurationNanoseconds(early);
27
+ if (lateNanoseconds === null ||
28
+ (early !== undefined && earlyNanoseconds === null)) {
29
+ return null;
30
+ }
31
+ return { late: lateNanoseconds, early: earlyNanoseconds };
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ /**
38
+ * Classify a deviation (actual − planned, exact nanoseconds) against a tolerance.
39
+ *
40
+ * Late when the deviation is `late` or more; early when `early` is set and the deviation is
41
+ * `-early` or less; on time strictly between. Late is checked first, so with both bounds zero the
42
+ * plan itself is late.
43
+ *
44
+ * @param deviation actual minus planned, in nanoseconds
45
+ * @param tolerance the bounds from `parsePunctualityTolerance`
46
+ * @returns "early", "onTime" or "late"
47
+ *
48
+ * @example punctualityOf(900000000000n, { late: 900000000000n, early: null }) // "late"
49
+ * @example punctualityOf(0n, { late: 900000000000n, early: 0n }) // "early"
50
+ */
51
+ export function punctualityOf(deviation, tolerance) {
52
+ if (deviation >= tolerance.late) {
53
+ return "late";
54
+ }
55
+ if (tolerance.early !== null && deviation <= -tolerance.early) {
56
+ return "early";
57
+ }
58
+ return "onTime";
59
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Read a caller's `Intl.DateTimeFormat` options once, into a plain object of primitives.
3
+ *
4
+ * - A formatter that inspects the options before it hands them to `Intl.DateTimeFormat` would
5
+ * otherwise read each one several times, and a getter could answer one value to the check and
6
+ * another to the formatter. ECMA-402 CreateDateTimeFormat reads each option with one `Get`
7
+ * (GetOption); this does the same, in the same order, and everything after works on the copy.
8
+ * - Each value is converted once as well, right after its `Get`, as GetOption converts it:
9
+ * ToString for a string option, ToNumber for `fractionalSecondDigits`, ToBoolean for `hour12`.
10
+ * An option given as an object would otherwise be asked for its value by every
11
+ * `Intl.DateTimeFormat` built from the copy, and could answer each one differently. The range
12
+ * and the allowed values are still checked by `Intl.DateTimeFormat`. `timeZone` alone is copied
13
+ * unconverted, for the caller's own zone rule.
14
+ * - The object is coerced as ECMA-402 CoerceOptionsToObject coerces it: `undefined` is no options,
15
+ * `null` throws TypeError, and a string or a number has none of these properties. Inherited
16
+ * properties are read, as `Get` reads them.
17
+ * - Only the options `Intl.DateTimeFormat` reads are copied, and only those that are not
18
+ * `undefined`. Any other key was never read by the formatter, so dropping it changes nothing.
19
+ *
20
+ * @param options the caller's options argument
21
+ * @returns a plain object holding each option that was set, converted to its primitive; throws
22
+ * TypeError for `null`, or for a value that cannot be converted, for the caller's sentinel
23
+ *
24
+ * @example readDateTimeFormatOptions({ dateStyle: "long", extra: 1 }) // { dateStyle: "long" }
25
+ * @example readDateTimeFormatOptions({ month: { toString: () => "long" } }) // { month: "long" }
26
+ * @example readDateTimeFormatOptions(undefined) // {}
27
+ * @example readDateTimeFormatOptions("x") // {} (a string has no date-time options)
28
+ * @example readDateTimeFormatOptions(null) // throws TypeError
29
+ */
30
+ export declare function readDateTimeFormatOptions(options: unknown): Intl.DateTimeFormatOptions;
@@ -0,0 +1,93 @@
1
+ /**
2
+ * The options ECMA-402 CreateDateTimeFormat reads, in the order it reads them: the formatter's own
3
+ * settings, then `timeZone`, then each date-time component, then `formatMatcher` and the styles.
4
+ */
5
+ const DATE_TIME_FORMAT_OPTIONS = [
6
+ "localeMatcher",
7
+ "calendar",
8
+ "numberingSystem",
9
+ "hour12",
10
+ "hourCycle",
11
+ "timeZone",
12
+ "weekday",
13
+ "era",
14
+ "year",
15
+ "month",
16
+ "day",
17
+ "dayPeriod",
18
+ "hour",
19
+ "minute",
20
+ "second",
21
+ "fractionalSecondDigits",
22
+ "timeZoneName",
23
+ "formatMatcher",
24
+ "dateStyle",
25
+ "timeStyle",
26
+ ];
27
+ /**
28
+ * Convert an option's value as ECMA-402 GetOption converts it for that option's type: ToBoolean
29
+ * for `hour12`, ToNumber for `fractionalSecondDigits` (GetNumberOption), ToString for every other
30
+ * option. `timeZone` is the exception and is returned as it was read: each caller has its own
31
+ * rule for a zone, and one that hands it to `Intl.DateTimeFormat` does so once.
32
+ *
33
+ * The template literal and the unary plus are ToString and ToNumber exactly, so a symbol (and a
34
+ * bigint for a number) throws TypeError as it does inside `Intl.DateTimeFormat`.
35
+ */
36
+ function convertOption(name, value) {
37
+ switch (name) {
38
+ case "timeZone":
39
+ return value;
40
+ case "hour12":
41
+ return Boolean(value);
42
+ case "fractionalSecondDigits":
43
+ return +value;
44
+ default:
45
+ return `${value}`;
46
+ }
47
+ }
48
+ /**
49
+ * Read a caller's `Intl.DateTimeFormat` options once, into a plain object of primitives.
50
+ *
51
+ * - A formatter that inspects the options before it hands them to `Intl.DateTimeFormat` would
52
+ * otherwise read each one several times, and a getter could answer one value to the check and
53
+ * another to the formatter. ECMA-402 CreateDateTimeFormat reads each option with one `Get`
54
+ * (GetOption); this does the same, in the same order, and everything after works on the copy.
55
+ * - Each value is converted once as well, right after its `Get`, as GetOption converts it:
56
+ * ToString for a string option, ToNumber for `fractionalSecondDigits`, ToBoolean for `hour12`.
57
+ * An option given as an object would otherwise be asked for its value by every
58
+ * `Intl.DateTimeFormat` built from the copy, and could answer each one differently. The range
59
+ * and the allowed values are still checked by `Intl.DateTimeFormat`. `timeZone` alone is copied
60
+ * unconverted, for the caller's own zone rule.
61
+ * - The object is coerced as ECMA-402 CoerceOptionsToObject coerces it: `undefined` is no options,
62
+ * `null` throws TypeError, and a string or a number has none of these properties. Inherited
63
+ * properties are read, as `Get` reads them.
64
+ * - Only the options `Intl.DateTimeFormat` reads are copied, and only those that are not
65
+ * `undefined`. Any other key was never read by the formatter, so dropping it changes nothing.
66
+ *
67
+ * @param options the caller's options argument
68
+ * @returns a plain object holding each option that was set, converted to its primitive; throws
69
+ * TypeError for `null`, or for a value that cannot be converted, for the caller's sentinel
70
+ *
71
+ * @example readDateTimeFormatOptions({ dateStyle: "long", extra: 1 }) // { dateStyle: "long" }
72
+ * @example readDateTimeFormatOptions({ month: { toString: () => "long" } }) // { month: "long" }
73
+ * @example readDateTimeFormatOptions(undefined) // {}
74
+ * @example readDateTimeFormatOptions("x") // {} (a string has no date-time options)
75
+ * @example readDateTimeFormatOptions(null) // throws TypeError
76
+ */
77
+ export function readDateTimeFormatOptions(options) {
78
+ if (options === null) {
79
+ throw new TypeError("options must be an object or undefined");
80
+ }
81
+ const read = {};
82
+ if (options === undefined) {
83
+ return read;
84
+ }
85
+ const source = Object(options);
86
+ for (const name of DATE_TIME_FORMAT_OPTIONS) {
87
+ const value = source[name];
88
+ if (value !== undefined) {
89
+ read[name] = convertOption(name, value);
90
+ }
91
+ }
92
+ return read;
93
+ }
@@ -18,6 +18,10 @@ import type { DurationRelativeTo } from "../types/index.js";
18
18
  * calendar must be a `CalendarSystem`, and `"ethiopic"`/`"coptic"` compute in `"ethioaa"`,
19
19
  * which polyfill 0.5.1 can read. The digits are ISO, so this is the date Temporal itself would
20
20
  * read.
21
+ * - A zoned string without a calendar annotation is read with `zonedDateTimeFrom`, so its offset
22
+ * is matched against the zone as TC39 `ToRelativeTemporalObject` matches it: an offset written
23
+ * to the minute may be the zone's sub-minute offset rounded, and one written with seconds must
24
+ * be the zone's offset exactly (`"1970-01-01T00:00:00-00:45:00[Africa/Monrovia]"` throws).
21
25
  * - A leap second (second `60`) throws, in every spelling Temporal's grammar accepts — `T`, `t`
22
26
  * or space separator, extended or basic digits, with or without a designator. Temporal's
23
27
  * ParseISODateTime would otherwise clamp it to `:59`.
@@ -3,6 +3,7 @@ import { plainDateTime } from "../regex/date-time.js";
3
3
  import { parseCalendarDateValue, temporalStringLeapSecond, } from "./calendarDateString.js";
4
4
  import { parseCalendarZonedValue } from "./calendarZonedString.js";
5
5
  import { hasZonedDateTimeShape, isoStringBody } from "./isoStringBody.js";
6
+ import { zonedDateTimeFrom } from "./zonedWallClock.js";
6
7
  /**
7
8
  * A calendar annotation in any spelling: critical flag or not, any letter case. An upper-case key
8
9
  * is not Temporal syntax, so it is parsed here and throws rather than reaching Temporal later.
@@ -45,6 +46,10 @@ function hasRelativeToShape(value) {
45
46
  * calendar must be a `CalendarSystem`, and `"ethiopic"`/`"coptic"` compute in `"ethioaa"`,
46
47
  * which polyfill 0.5.1 can read. The digits are ISO, so this is the date Temporal itself would
47
48
  * read.
49
+ * - A zoned string without a calendar annotation is read with `zonedDateTimeFrom`, so its offset
50
+ * is matched against the zone as TC39 `ToRelativeTemporalObject` matches it: an offset written
51
+ * to the minute may be the zone's sub-minute offset rounded, and one written with seconds must
52
+ * be the zone's offset exactly (`"1970-01-01T00:00:00-00:45:00[Africa/Monrovia]"` throws).
48
53
  * - A leap second (second `60`) throws, in every spelling Temporal's grammar accepts — `T`, `t`
49
54
  * or space separator, extended or basic digits, with or without a designator. Temporal's
50
55
  * ParseISODateTime would otherwise clamp it to `:59`.
@@ -70,7 +75,12 @@ export function resolveDurationRelativeTo(relativeTo) {
70
75
  throw new RangeError(`Not an extended ISO 8601 date, date-time or zoned date-time: ${relativeTo}`);
71
76
  }
72
77
  if (!anyCalendarAnnotation.test(relativeTo)) {
73
- return relativeTo;
78
+ // A zoned string is read here, not handed on as text: `zonedDateTimeFrom` matches an offset
79
+ // written with seconds exactly, as TC39 `ToRelativeTemporalObject` requires and polyfill
80
+ // 0.5.1 does not (temporalCompat D12).
81
+ return timeZoneAnnotation.test(relativeTo)
82
+ ? zonedDateTimeFrom(relativeTo)
83
+ : relativeTo;
74
84
  }
75
85
  if (timeZoneAnnotation.test(relativeTo)) {
76
86
  return parseCalendarZonedValue(relativeTo);
@@ -3,17 +3,28 @@ import type { RelativeRoundingMethod } from "../types/index.js";
3
3
  * Round a relative-time distance to an integer using the given method, defaulting to "round".
4
4
  *
5
5
  * Applied directly to the signed fractional value (not its absolute value), so floor/ceil
6
- * respect whether the distance is past (negative) or future (positive) — matches date-fns's
7
- * `formatDistanceStrict` `roundingMethod` semantics. A rounded `-0` is preserved rather than
8
- * normalized to `0`: `Intl.RelativeTimeFormat` treats the sign of zero as meaningful (with
9
- * `numeric: "always"`, `-0` renders as "0 <unit> ago" and `0` as "in 0 <unit>"), so collapsing
10
- * it here would change existing `formatRelative*` output for near-zero distances.
6
+ * respect whether the distance is past (negative) or future (positive): "floor" rounds toward
7
+ * negative infinity and "ceil" toward positive infinity, as ECMA-262 `Math.floor` / `Math.ceil`
8
+ * and Temporal's rounding modes of the same names do. "round" is ECMA-262 `Math.round`, a half
9
+ * going toward positive infinity. Comparison: date-fns's `formatDistanceStrict` `roundingMethod`
10
+ * rounds the unsigned distance, so its floor and ceil differ for a past value.
11
+ *
12
+ * A rounded `-0` is preserved rather than normalized to `0`: `Intl.RelativeTimeFormat` treats the
13
+ * sign of zero as meaningful (with `numeric: "always"`, `-0` renders as "0 <unit> ago" and `0` as
14
+ * "in 0 <unit>"), so collapsing it here would change existing `formatRelative*` output for
15
+ * near-zero distances.
16
+ *
17
+ * The method is matched against the three names `RelativeRoundingMethod` lists, never looked up on
18
+ * `Math`: `Math.abs`, `Math.trunc`, `Math.random` and the keys `Math` inherits from
19
+ * `Object.prototype` are not rounding methods. An `undefined` method is the omitted option
20
+ * (ECMA-402 `GetOption`, which the Temporal specification also defines) and takes the default.
11
21
  *
12
22
  * @param value the fractional distance in the target display unit
13
23
  * @param method optional: "floor" | "ceil" | "round" (default "round")
14
- * @returns the rounded amount
24
+ * @returns the rounded amount; throws RangeError for any other method, for the caller's sentinel
15
25
  * @example resolveRelativeRounding(2.7) // 3
16
26
  * @example resolveRelativeRounding(2.7, "floor") // 2
17
27
  * @example resolveRelativeRounding(-2.7, "ceil") // -2
28
+ * @example resolveRelativeRounding(-2.7, "abs" as never) // throws RangeError
18
29
  */
19
30
  export declare function resolveRelativeRounding(value: number, method?: RelativeRoundingMethod): number;
@@ -2,19 +2,39 @@
2
2
  * Round a relative-time distance to an integer using the given method, defaulting to "round".
3
3
  *
4
4
  * Applied directly to the signed fractional value (not its absolute value), so floor/ceil
5
- * respect whether the distance is past (negative) or future (positive) — matches date-fns's
6
- * `formatDistanceStrict` `roundingMethod` semantics. A rounded `-0` is preserved rather than
7
- * normalized to `0`: `Intl.RelativeTimeFormat` treats the sign of zero as meaningful (with
8
- * `numeric: "always"`, `-0` renders as "0 <unit> ago" and `0` as "in 0 <unit>"), so collapsing
9
- * it here would change existing `formatRelative*` output for near-zero distances.
5
+ * respect whether the distance is past (negative) or future (positive): "floor" rounds toward
6
+ * negative infinity and "ceil" toward positive infinity, as ECMA-262 `Math.floor` / `Math.ceil`
7
+ * and Temporal's rounding modes of the same names do. "round" is ECMA-262 `Math.round`, a half
8
+ * going toward positive infinity. Comparison: date-fns's `formatDistanceStrict` `roundingMethod`
9
+ * rounds the unsigned distance, so its floor and ceil differ for a past value.
10
+ *
11
+ * A rounded `-0` is preserved rather than normalized to `0`: `Intl.RelativeTimeFormat` treats the
12
+ * sign of zero as meaningful (with `numeric: "always"`, `-0` renders as "0 <unit> ago" and `0` as
13
+ * "in 0 <unit>"), so collapsing it here would change existing `formatRelative*` output for
14
+ * near-zero distances.
15
+ *
16
+ * The method is matched against the three names `RelativeRoundingMethod` lists, never looked up on
17
+ * `Math`: `Math.abs`, `Math.trunc`, `Math.random` and the keys `Math` inherits from
18
+ * `Object.prototype` are not rounding methods. An `undefined` method is the omitted option
19
+ * (ECMA-402 `GetOption`, which the Temporal specification also defines) and takes the default.
10
20
  *
11
21
  * @param value the fractional distance in the target display unit
12
22
  * @param method optional: "floor" | "ceil" | "round" (default "round")
13
- * @returns the rounded amount
23
+ * @returns the rounded amount; throws RangeError for any other method, for the caller's sentinel
14
24
  * @example resolveRelativeRounding(2.7) // 3
15
25
  * @example resolveRelativeRounding(2.7, "floor") // 2
16
26
  * @example resolveRelativeRounding(-2.7, "ceil") // -2
27
+ * @example resolveRelativeRounding(-2.7, "abs" as never) // throws RangeError
17
28
  */
18
29
  export function resolveRelativeRounding(value, method = "round") {
19
- return Math[method](value);
30
+ switch (method) {
31
+ case "floor":
32
+ return Math.floor(value);
33
+ case "ceil":
34
+ return Math.ceil(value);
35
+ case "round":
36
+ return Math.round(value);
37
+ default:
38
+ throw new RangeError(`Invalid roundingMethod: ${String(method)}`);
39
+ }
20
40
  }
@@ -0,0 +1,30 @@
1
+ import type { RelativeUnit } from "../types/index.js";
2
+ /**
3
+ * Resolve the `largestUnit` option of a `formatRelative*` function to one of the units the
4
+ * function allows, in its singular form.
5
+ *
6
+ * - Temporal reads a unit option with GetTemporalUnitValuedOption, which takes a plural name as
7
+ * its singular, then checks it with ValidateTemporalUnitValue against the unit group of the
8
+ * type — date, time or datetime — and throws RangeError for a unit outside the group:
9
+ * `Temporal.PlainDate.prototype.until` rejects `"hour"`, `Temporal.PlainTime.prototype.until`
10
+ * rejects `"day"`. `allowed` is that group for the calling function.
11
+ * - `undefined` is the omitted option (GetOption), so the caller picks the unit from the distance.
12
+ * - Unit names are lower case, as in Temporal.
13
+ * - The set of units is Temporal's. Rejecting a value that is not a string is GMT's own rule, and
14
+ * stricter than Temporal: GetOption converts any value with ToString, so Temporal accepts
15
+ * `["day"]` and an object whose `toString` returns `"day"` (test262
16
+ * `largestunit-wrong-type.js`). GMT takes string inputs, and its other unit readers
17
+ * (`roundDate`, `roundDateTime`, `roundUtc`, `roundZoned`, `startOfDate`, `durationAs`,
18
+ * `areDatesEqualBy`) reject a non-string the same way, so this one does not convert either.
19
+ *
20
+ * @param largestUnit the option as read from the caller's object, `undefined` when absent
21
+ * @param allowed the singular units the calling function lists in its type
22
+ * @returns the singular unit, or `undefined` when the option is absent; throws RangeError for any
23
+ * other value, for the caller's sentinel
24
+ *
25
+ * @example resolveRelativeUnit("hours", ["hour", "minute", "second"]) // "hour"
26
+ * @example resolveRelativeUnit(undefined, ["hour", "minute", "second"]) // undefined
27
+ * @example resolveRelativeUnit("day", ["hour", "minute", "second"]) // throws RangeError
28
+ * @example resolveRelativeUnit(["hour"], ["hour", "minute", "second"]) // throws RangeError (GMT's rule; Temporal converts it to "hour")
29
+ */
30
+ export declare function resolveRelativeUnit<Unit extends RelativeUnit>(largestUnit: unknown, allowed: readonly Unit[]): Unit | undefined;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Resolve the `largestUnit` option of a `formatRelative*` function to one of the units the
3
+ * function allows, in its singular form.
4
+ *
5
+ * - Temporal reads a unit option with GetTemporalUnitValuedOption, which takes a plural name as
6
+ * its singular, then checks it with ValidateTemporalUnitValue against the unit group of the
7
+ * type — date, time or datetime — and throws RangeError for a unit outside the group:
8
+ * `Temporal.PlainDate.prototype.until` rejects `"hour"`, `Temporal.PlainTime.prototype.until`
9
+ * rejects `"day"`. `allowed` is that group for the calling function.
10
+ * - `undefined` is the omitted option (GetOption), so the caller picks the unit from the distance.
11
+ * - Unit names are lower case, as in Temporal.
12
+ * - The set of units is Temporal's. Rejecting a value that is not a string is GMT's own rule, and
13
+ * stricter than Temporal: GetOption converts any value with ToString, so Temporal accepts
14
+ * `["day"]` and an object whose `toString` returns `"day"` (test262
15
+ * `largestunit-wrong-type.js`). GMT takes string inputs, and its other unit readers
16
+ * (`roundDate`, `roundDateTime`, `roundUtc`, `roundZoned`, `startOfDate`, `durationAs`,
17
+ * `areDatesEqualBy`) reject a non-string the same way, so this one does not convert either.
18
+ *
19
+ * @param largestUnit the option as read from the caller's object, `undefined` when absent
20
+ * @param allowed the singular units the calling function lists in its type
21
+ * @returns the singular unit, or `undefined` when the option is absent; throws RangeError for any
22
+ * other value, for the caller's sentinel
23
+ *
24
+ * @example resolveRelativeUnit("hours", ["hour", "minute", "second"]) // "hour"
25
+ * @example resolveRelativeUnit(undefined, ["hour", "minute", "second"]) // undefined
26
+ * @example resolveRelativeUnit("day", ["hour", "minute", "second"]) // throws RangeError
27
+ * @example resolveRelativeUnit(["hour"], ["hour", "minute", "second"]) // throws RangeError (GMT's rule; Temporal converts it to "hour")
28
+ */
29
+ export function resolveRelativeUnit(largestUnit, allowed) {
30
+ if (largestUnit === undefined) {
31
+ return undefined;
32
+ }
33
+ const unit = typeof largestUnit === "string"
34
+ ? allowed.find((name) => name === largestUnit || `${name}s` === largestUnit)
35
+ : undefined;
36
+ if (unit === undefined) {
37
+ throw new RangeError(`Invalid largestUnit: ${String(largestUnit)}`);
38
+ }
39
+ return unit;
40
+ }
@@ -33,7 +33,8 @@ export declare function isExactDurationUnit(unit: string): boolean;
33
33
  * - A step that goes backwards returns `null`.
34
34
  * - More than `maxSlices` slices returns `null` as soon as the next one is due, so the work stays
35
35
  * bounded by the limit (owner decision A2, CORE-8).
36
- * - The last slice's end is trimmed to `end`. Callers handle `start >= end` before calling.
36
+ * - The last slice's end is `end` itself, whether the last step passes `end` (trimmed) or lands on
37
+ * it. Callers handle `start >= end` before calling.
37
38
  * - A step that throws a RangeError (it lands past Temporal's last representable value, so after
38
39
  * `end`) closes the split with a last slice ending at `end`.
39
40
  *
@@ -57,6 +58,28 @@ export declare function isExactDurationUnit(unit: string): boolean;
57
58
  export declare function tileByUnit<T extends {
58
59
  add(duration: Temporal.DurationLike): T;
59
60
  }>(start: T, end: T, compare: (a: T, b: T) => number, unit: string, amount: number, maxSlices: number, add?: (value: T, duration: Temporal.DurationLike) => T): Array<[T, T]> | null;
61
+ /**
62
+ * The step a split takes when its boundaries are then floored to whole `floorUnit`s.
63
+ *
64
+ * - An exact step shorter than one `floorUnit` moves each boundary by less than one unit, so the
65
+ * floored boundaries are every whole unit from the start to the end, each one repeated once per
66
+ * step that falls inside it. Stepping by one `floorUnit` gives those boundaries once each: no
67
+ * empty piece, and no work spent on steps the result cannot show.
68
+ * - Any other step is returned unchanged: a step of one `floorUnit` or more never floors two
69
+ * boundaries to the same value, a calendar step is never shorter than a second, and a
70
+ * fractional `amount` is left for Temporal to reject.
71
+ * - The split's start must itself be a whole `floorUnit`, as a Unix epoch is.
72
+ *
73
+ * @param unit plural duration unit, as returned by `resolveDurationUnit`
74
+ * @param amount positive number of units per step
75
+ * @param floorUnit plural exact unit the boundaries are floored to
76
+ * @returns the `[unit, amount]` to step by
77
+ *
78
+ * @example stepNoFinerThan("milliseconds", 500, "seconds") // ["seconds", 1]
79
+ * @example stepNoFinerThan("milliseconds", 1500, "seconds") // ["milliseconds", 1500]
80
+ * @example stepNoFinerThan("days", 1, "seconds") // ["days", 1]
81
+ */
82
+ export declare function stepNoFinerThan(unit: string, amount: number, floorUnit: string): [unit: string, amount: number];
60
83
  /**
61
84
  * A lower bound on the number of slices `tileByUnit` returns for a span, without stepping.
62
85
  *