@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,164 @@
1
+ import { zonedNextTransition, zonedPreviousTransition, } from "./zonedWallClockOperations.js";
2
+ /**
3
+ * The longest a daylight period can last: a forward change and the backward change that undoes it
4
+ * are less than 365 days apart. Daylight time is seasonal, so it recurs within every year, and
5
+ * 365 days is the shortest year. A longer advance is a change of standard time.
6
+ */
7
+ const DAYLIGHT_PERIOD_LIMIT_NANOSECONDS = 365n * 86400000000000n;
8
+ /**
9
+ * Offset changes read in each direction before the walk gives up and answers `false`, the
10
+ * sentinel: a bounded loop that runs out never returns a partial answer. Every walk here is also
11
+ * limited to 365 days, and a year of `Africa/Casablanca` holds four changes, so no real zone
12
+ * reaches the bound; `daylightTime.test.ts` reaches it with a made-up zone.
13
+ */
14
+ const MAX_WALKED_CHANGES = 64;
15
+ function offsetChangeAt(transition) {
16
+ return {
17
+ at: transition.epochNanoseconds,
18
+ step: transition.offsetNanoseconds -
19
+ transition.subtract({ nanoseconds: 1 }).offsetNanoseconds,
20
+ };
21
+ }
22
+ /**
23
+ * Apply one change to the list of advances not yet undone. A forward change joins the list. A
24
+ * backward change undoes the most recent advance of the same size, if that advance is less than
25
+ * 365 days old, and returns it; otherwise it undoes nothing.
26
+ */
27
+ function applyChange(open, change) {
28
+ if (change.step > 0) {
29
+ open.push(change);
30
+ return null;
31
+ }
32
+ for (let i = open.length - 1; i >= 0; i--) {
33
+ if (open[i].step !== -change.step) {
34
+ continue;
35
+ }
36
+ if (change.at - open[i].at >= DAYLIGHT_PERIOD_LIMIT_NANOSECONDS) {
37
+ return null;
38
+ }
39
+ return open.splice(i, 1)[0];
40
+ }
41
+ return null;
42
+ }
43
+ /** Whether `to` is less than the daylight period limit after `from`. */
44
+ function isWithinLimit(from, to) {
45
+ return to - from < DAYLIGHT_PERIOD_LIMIT_NANOSECONDS;
46
+ }
47
+ /**
48
+ * The advances still open just before `next`: made in the 365 days before it and not yet undone.
49
+ * An older advance cannot be undone at or after `next`. Null past `MAX_WALKED_CHANGES` changes.
50
+ *
51
+ * @param next the first change after the instant being judged
52
+ * @param latest the change before `next`, already known to be within the limit
53
+ */
54
+ function openAdvancesBefore(next, latest) {
55
+ const changes = [offsetChangeAt(latest)];
56
+ let cursor = latest;
57
+ for (let i = 0; i <= MAX_WALKED_CHANGES; i++) {
58
+ const previous = zonedPreviousTransition(cursor, next.epochNanoseconds - DAYLIGHT_PERIOD_LIMIT_NANOSECONDS);
59
+ if (previous === null ||
60
+ !isWithinLimit(previous.epochNanoseconds, next.epochNanoseconds)) {
61
+ const open = [];
62
+ for (const change of changes) {
63
+ applyChange(open, change);
64
+ }
65
+ return open;
66
+ }
67
+ changes.unshift(offsetChangeAt(previous));
68
+ cursor = previous;
69
+ }
70
+ return null;
71
+ }
72
+ /**
73
+ * Whether a change from `next` onwards undoes one of the `open` advances made at or before `at`.
74
+ * It has to come less than 365 days after `at`, since the advance is no later than `at`.
75
+ */
76
+ function isUndoneFrom(next, open, at) {
77
+ let cursor = next;
78
+ for (let i = 0; i <= MAX_WALKED_CHANGES; i++) {
79
+ if (cursor === null || !isWithinLimit(at, cursor.epochNanoseconds)) {
80
+ return false;
81
+ }
82
+ const undone = applyChange(open, offsetChangeAt(cursor));
83
+ if (undone !== null && undone.at <= at) {
84
+ return true;
85
+ }
86
+ cursor = zonedNextTransition(cursor, at + DAYLIGHT_PERIOD_LIMIT_NANOSECONDS);
87
+ }
88
+ return false;
89
+ }
90
+ /**
91
+ * Whether an instant is in daylight saving time, read from the zone's offset changes alone.
92
+ *
93
+ * The rule: daylight time runs from a forward change of the clocks to the backward change that
94
+ * undoes it. A backward change undoes the most recent forward change of the same size that is not
95
+ * yet undone, and only if it comes less than 365 days after it. An instant is in daylight time when
96
+ * it is at or after such a forward change and before the backward change paired with it.
97
+ *
98
+ * A forward change that is never undone, or undone a year or more later, is a change of standard
99
+ * time (`Europe/Istanbul` 2016, `Europe/Moscow` 2011 to 2014), as is any backward change with no
100
+ * forward change to undo (`Asia/Almaty` 2024).
101
+ *
102
+ * This is GMT's own definition, not the tz database's daylight flag, which no JavaScript API
103
+ * exposes and offsets do not determine.
104
+ *
105
+ * Cost: one transition lookup forward, then one back, and more only outside the ordinary summer
106
+ * case. A paired change is less than 365 days away, so every lookup is given that limit and reads
107
+ * no further: with GMT's own search (temporalCompat D13) at most 74 offset samples and 51 reads to
108
+ * pin a change, for any zone and any instant.
109
+ *
110
+ * @param zoned the instant, in the zone to read
111
+ * @returns true in daylight time, false in standard time or when the walk exceeds its bound
112
+ */
113
+ export function isInDaylightTime(zoned) {
114
+ const at = zoned.epochNanoseconds;
115
+ // Daylight time ends with a clock change. No change ahead, or none within the limit: standard.
116
+ const next = zonedNextTransition(zoned, at + DAYLIGHT_PERIOD_LIMIT_NANOSECONDS);
117
+ if (next === null || !isWithinLimit(at, next.epochNanoseconds)) {
118
+ return false;
119
+ }
120
+ // It begins with one too, and no change in the 365 days before `next` leaves nothing to undo.
121
+ const latest = zonedPreviousTransition(next, next.epochNanoseconds - DAYLIGHT_PERIOD_LIMIT_NANOSECONDS);
122
+ if (latest === null ||
123
+ !isWithinLimit(latest.epochNanoseconds, next.epochNanoseconds)) {
124
+ return false;
125
+ }
126
+ // The ordinary summer: the clocks last went forward, and next go back by as much. The latest
127
+ // advance is the most recent one open, so `next` undoes it whatever came before.
128
+ const latestStep = offsetChangeAt(latest).step;
129
+ const nextStep = next.offsetNanoseconds - zoned.offsetNanoseconds;
130
+ if (latestStep > 0 && nextStep === -latestStep) {
131
+ return true;
132
+ }
133
+ const open = openAdvancesBefore(next, latest);
134
+ if (open === null || open.length === 0) {
135
+ return false;
136
+ }
137
+ return isUndoneFrom(next, open, at);
138
+ }
139
+ /**
140
+ * Whether a zone observes daylight saving time as of an instant: the instant is in daylight time,
141
+ * or a daylight period begins within the 365 days after it. Same rule as `isInDaylightTime`.
142
+ *
143
+ * @param zoned the instant to judge from, in the zone to read
144
+ * @returns true when the zone observes daylight time then, false otherwise or past the walk bound
145
+ */
146
+ export function observesDaylightTime(zoned) {
147
+ if (isInDaylightTime(zoned)) {
148
+ return true;
149
+ }
150
+ let cursor = zoned;
151
+ for (let i = 0; i <= MAX_WALKED_CHANGES; i++) {
152
+ const next = zonedNextTransition(cursor, zoned.epochNanoseconds + DAYLIGHT_PERIOD_LIMIT_NANOSECONDS);
153
+ if (next === null ||
154
+ next.epochNanoseconds - zoned.epochNanoseconds >=
155
+ DAYLIGHT_PERIOD_LIMIT_NANOSECONDS) {
156
+ return false;
157
+ }
158
+ if (isInDaylightTime(next)) {
159
+ return true;
160
+ }
161
+ cursor = next;
162
+ }
163
+ return false;
164
+ }
@@ -2,16 +2,17 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import { plainDateUntil } from "./plainDateUntil.js";
3
3
  import { zonedUntil } from "./zonedWallClockDifference.js";
4
4
  export function durationUntilString(start, end, largestUnit, options) {
5
- const untilOptions = {
6
- largestUnit,
5
+ // Each option is read once (GetOption); the difference below works on these values.
6
+ const roundingOptions = {
7
7
  smallestUnit: options?.smallestUnit,
8
8
  roundingIncrement: options?.roundingIncrement,
9
9
  roundingMode: options?.roundingMode,
10
10
  };
11
+ const untilOptions = { largestUnit, ...roundingOptions };
11
12
  const duration = start instanceof Temporal.ZonedDateTime
12
13
  ? zonedUntil(start, end, untilOptions)
13
14
  : start instanceof Temporal.PlainDate
14
- ? plainDateUntil(start, end, largestUnit, options)
15
+ ? plainDateUntil(start, end, largestUnit, roundingOptions)
15
16
  : start.until(end, untilOptions);
16
17
  return duration.toString({
17
18
  smallestUnit: options?.toStringSmallestUnit,
@@ -2,8 +2,7 @@
2
2
  // RFC 7231) mandate English weekday/month
3
3
  // abbreviations regardless of the caller's locale — these are fixed,
4
4
  // non-locale-adaptive grammars, not a display format, so hardcoding the
5
- // English names here is not the i18n bug it would be in a formatter (see
6
- // roadmap Decision 1 / J13's "Why this survives Decision 1").
5
+ // English names here is not the i18n bug it would be in a formatter.
7
6
  // Index 0 = Monday, aligned with Temporal's 1-7 `dayOfWeek` via `[dayOfWeek - 1]`.
8
7
  export const ENGLISH_WEEKDAY_NAMES = [
9
8
  "Mon",
@@ -8,6 +8,8 @@ export declare const MIN_EPOCH_NANOSECONDS = -8640000000000000000000n;
8
8
  * +10^8 days from the Unix epoch, i.e. `+275760-09-13T00:00:00Z`.
9
9
  */
10
10
  export declare const MAX_EPOCH_NANOSECONDS = 8640000000000000000000n;
11
+ /** TC39 `CheckISODaysRange`: a date may sit at most 10^8 days from the Unix epoch. */
12
+ export declare const MAX_ISO_EPOCH_DAYS = 100000000;
11
13
  /**
12
14
  * Digits in `MAX_EPOCH_NANOSECONDS` (22) — the longest a decimal form of an in-range
13
15
  * epoch-nanosecond value can be, sign excluded.
@@ -8,6 +8,8 @@ export const MIN_EPOCH_NANOSECONDS = -8640000000000000000000n;
8
8
  * +10^8 days from the Unix epoch, i.e. `+275760-09-13T00:00:00Z`.
9
9
  */
10
10
  export const MAX_EPOCH_NANOSECONDS = 8640000000000000000000n;
11
+ /** TC39 `CheckISODaysRange`: a date may sit at most 10^8 days from the Unix epoch. */
12
+ export const MAX_ISO_EPOCH_DAYS = 100_000_000;
11
13
  /**
12
14
  * Digits in `MAX_EPOCH_NANOSECONDS` (22) — the longest a decimal form of an in-range
13
15
  * epoch-nanosecond value can be, sign excluded.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * An ISO 8601 duration as exact elapsed nanoseconds, signed, or `null` when it is not one.
3
+ *
4
+ * The transport rule for a span of exact time (`transitTime`, `classifyPunctuality`,
5
+ * `nextDeparture`, …):
6
+ *
7
+ * - Hours, minutes, seconds and fractions are elapsed time, and a day is 24 hours exactly. That
8
+ * is how TC39 Temporal's `Duration.prototype.round` and `total` read a day when no
9
+ * `relativeTo` is given.
10
+ * - Years, months and weeks return `null`: `round` and `total` require a `relativeTo` for them,
11
+ * so they have no exact length on their own. A zero calendar component (`P0Y1D`) changes
12
+ * nothing. (`Temporal.Instant#add` accepts no date unit at all, days included; callers add the
13
+ * nanoseconds this returns instead.)
14
+ * - The result keeps the duration's sign, so a caller that needs a non-negative amount checks
15
+ * `< 0n` itself. `-PT0S` is `0n`.
16
+ * - Summed in bigint, so it stays exact past 2^53 ns and across the whole instant range.
17
+ *
18
+ * @param value candidate ISO 8601 duration string
19
+ * @returns the duration in nanoseconds, negative for a negative duration, or null on invalid input
20
+ *
21
+ * @example exactDurationNanoseconds("PT1H") // 3600000000000n
22
+ * @example exactDurationNanoseconds("-PT5M") // -300000000000n
23
+ * @example exactDurationNanoseconds("P1D") // 86400000000000n
24
+ * @example exactDurationNanoseconds("P1W") // null
25
+ */
26
+ export declare function exactDurationNanoseconds(value: unknown): bigint | null;
27
+ /**
28
+ * `exactDurationNanoseconds` for an amount that may not be negative — a tolerance, a minimum
29
+ * connection — or `null`. Zero is allowed, and `-PT0S` is zero.
30
+ *
31
+ * @param value candidate ISO 8601 duration string
32
+ * @returns the duration in nanoseconds, zero or more, or null on invalid input or a negative duration
33
+ *
34
+ * @example nonNegativeExactDurationNanoseconds("PT15M") // 900000000000n
35
+ * @example nonNegativeExactDurationNanoseconds("-PT15M") // null
36
+ */
37
+ export declare function nonNegativeExactDurationNanoseconds(value: unknown): bigint | null;
@@ -0,0 +1,64 @@
1
+ import { Temporal } from "@js-temporal/polyfill";
2
+ import { NANOSECONDS_PER_DAY, NANOSECONDS_PER_MICROSECOND, NANOSECONDS_PER_MILLISECOND, NANOSECONDS_PER_SECOND, } from "./foreignEpochs.js";
3
+ const NANOSECONDS_PER_HOUR = 3600000000000n;
4
+ const NANOSECONDS_PER_MINUTE = 60000000000n;
5
+ /**
6
+ * An ISO 8601 duration as exact elapsed nanoseconds, signed, or `null` when it is not one.
7
+ *
8
+ * The transport rule for a span of exact time (`transitTime`, `classifyPunctuality`,
9
+ * `nextDeparture`, …):
10
+ *
11
+ * - Hours, minutes, seconds and fractions are elapsed time, and a day is 24 hours exactly. That
12
+ * is how TC39 Temporal's `Duration.prototype.round` and `total` read a day when no
13
+ * `relativeTo` is given.
14
+ * - Years, months and weeks return `null`: `round` and `total` require a `relativeTo` for them,
15
+ * so they have no exact length on their own. A zero calendar component (`P0Y1D`) changes
16
+ * nothing. (`Temporal.Instant#add` accepts no date unit at all, days included; callers add the
17
+ * nanoseconds this returns instead.)
18
+ * - The result keeps the duration's sign, so a caller that needs a non-negative amount checks
19
+ * `< 0n` itself. `-PT0S` is `0n`.
20
+ * - Summed in bigint, so it stays exact past 2^53 ns and across the whole instant range.
21
+ *
22
+ * @param value candidate ISO 8601 duration string
23
+ * @returns the duration in nanoseconds, negative for a negative duration, or null on invalid input
24
+ *
25
+ * @example exactDurationNanoseconds("PT1H") // 3600000000000n
26
+ * @example exactDurationNanoseconds("-PT5M") // -300000000000n
27
+ * @example exactDurationNanoseconds("P1D") // 86400000000000n
28
+ * @example exactDurationNanoseconds("P1W") // null
29
+ */
30
+ export function exactDurationNanoseconds(value) {
31
+ if (typeof value !== "string") {
32
+ return null;
33
+ }
34
+ try {
35
+ const duration = Temporal.Duration.from(value);
36
+ if (duration.years !== 0 || duration.months !== 0 || duration.weeks !== 0) {
37
+ return null;
38
+ }
39
+ return (BigInt(duration.days) * NANOSECONDS_PER_DAY +
40
+ BigInt(duration.hours) * NANOSECONDS_PER_HOUR +
41
+ BigInt(duration.minutes) * NANOSECONDS_PER_MINUTE +
42
+ BigInt(duration.seconds) * NANOSECONDS_PER_SECOND +
43
+ BigInt(duration.milliseconds) * NANOSECONDS_PER_MILLISECOND +
44
+ BigInt(duration.microseconds) * NANOSECONDS_PER_MICROSECOND +
45
+ BigInt(duration.nanoseconds));
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ /**
52
+ * `exactDurationNanoseconds` for an amount that may not be negative — a tolerance, a minimum
53
+ * connection — or `null`. Zero is allowed, and `-PT0S` is zero.
54
+ *
55
+ * @param value candidate ISO 8601 duration string
56
+ * @returns the duration in nanoseconds, zero or more, or null on invalid input or a negative duration
57
+ *
58
+ * @example nonNegativeExactDurationNanoseconds("PT15M") // 900000000000n
59
+ * @example nonNegativeExactDurationNanoseconds("-PT15M") // null
60
+ */
61
+ export function nonNegativeExactDurationNanoseconds(value) {
62
+ const nanoseconds = exactDurationNanoseconds(value);
63
+ return nanoseconds === null || nanoseconds < 0n ? null : nanoseconds;
64
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * How an exact moment was written, so a result can be written the same way: in a named zone
3
+ * (the bracket), at a UTC offset (its text exactly as written), or as a `Z` instant.
4
+ */
5
+ export type MomentNotation = {
6
+ kind: "zone";
7
+ timeZone: string;
8
+ } | {
9
+ kind: "offset";
10
+ offset: string;
11
+ } | {
12
+ kind: "utc";
13
+ };
14
+ /** An exact moment: its epoch nanoseconds and how it was written. */
15
+ export type ExactMoment = {
16
+ nanoseconds: bigint;
17
+ notation: MomentNotation;
18
+ };
19
+ /**
20
+ * Read an exact moment the way `transitTime` reads a departure, or `null`.
21
+ *
22
+ * - A zoned string (`…-04:00[America/New_York]`) is read through its bracket, which must name a
23
+ * real zone that agrees with the offset, as `isValidZonedDateTime` requires. An offset written
24
+ * to the minute agrees when it is the zone's sub-minute offset rounded (TC39
25
+ * `ToTemporalZonedDateTime`, match-minutes), which is how `writeExactMoment` writes one.
26
+ * - A wall time with a bracket and no offset is read in that zone with the `"compatible"`
27
+ * disambiguation policy (`context/reference/LOCAL_TIME_RESOLUTION.md`): an **ambiguous** wall
28
+ * time, a fall-back hour the clock ran through twice, resolves to the **earlier** instant
29
+ * (`2024-11-03T01:30:00[America/New_York]` is `01:30-04:00`), and a **nonexistent** one, a
30
+ * spring-forward hour the clock skipped, to the **later** instant
31
+ * (`2024-03-10T02:30:00[America/New_York]` is `03:30-04:00`). A caller that must not guess
32
+ * refuses the offset-less form before calling, as `nextDeparture` does.
33
+ * - A string that names a zone the zoned read rejects is `null`; it never falls back to its
34
+ * offset. That includes a zoned string whose local date is −271821-04-19, which
35
+ * `Temporal.ZonedDateTime.from` refuses although its instant is in range.
36
+ * - Otherwise an instant (`Z` or an offset) as `parseInstantNanoseconds` reads it: calendar and
37
+ * elective annotations are ignored and a critical unknown one is rejected. Its offset text is
38
+ * kept exactly as written, sub-minute and `,` fractions included.
39
+ *
40
+ * @param value candidate zoned datetime or instant string
41
+ * @returns the moment's epoch nanoseconds and notation, or null on invalid input
42
+ *
43
+ * @example readExactMoment("2024-06-15T10:00:00+09:00") // { nanoseconds: 1718413200000000000n, notation: { kind: "offset", offset: "+09:00" } }
44
+ * @example readExactMoment("2024-06-15T10:00:00Z[Not/AZone]") // null
45
+ * @example readExactMoment("2024-03-10T02:30:00[America/New_York]") // { nanoseconds: 1710055800000000000n, notation: { kind: "zone", timeZone: "America/New_York" } } (nonexistent: the later instant, 03:30-04:00)
46
+ */
47
+ export declare function readExactMoment(value: unknown): ExactMoment | null;
48
+ /**
49
+ * Write epoch nanoseconds the way a moment was written: in its zone, at its offset text, or as a
50
+ * `Z` instant. `""` when the nanoseconds leave the instant range (±8.64e21 ns).
51
+ *
52
+ * - A zone notation is written as Temporal writes a `ZonedDateTime`: the offset in force at that
53
+ * instant, rounded to the minute (`-00:45` for Monrovia's −00:44:30), then the bracket.
54
+ * `readExactMoment` and `parseInstantNanoseconds` read that string back as the same instant,
55
+ * with two exceptions, both Temporal's own. A wall time repeated inside a sub-minute offset
56
+ * change reads as its first pass, in both readers (`parseInstantNanoseconds` states the
57
+ * rule). And `readExactMoment`, a zoned read, refuses a string whose local date is
58
+ * −271821-04-19 (`CheckISODaysRange` in `Temporal.ZonedDateTime.from`): the string written
59
+ * for the first hours of the instant range in a zone west of Greenwich reads as `null` there,
60
+ * and as its instant in `parseInstantNanoseconds`
61
+ * (`context/domination/js-temporal-polyfill-bugs.md` § J).
62
+ * - An offset notation keeps its text as written. The wall clock is shifted, never the instant
63
+ * (`wallClockAtOffset`), so the last hours of the range still write at a positive offset.
64
+ *
65
+ * @param nanoseconds epoch nanoseconds of the moment to write
66
+ * @param notation how to write it, from `readExactMoment`
67
+ * @returns the moment as a zoned, offset or `Z` string, or "" when it is out of range
68
+ *
69
+ * @example writeExactMoment(0n, { kind: "offset", offset: "+09:00" }) // "1970-01-01T09:00:00+09:00"
70
+ * @example writeExactMoment(0n, { kind: "zone", timeZone: "UTC" }) // "1970-01-01T00:00:00+00:00[UTC]"
71
+ */
72
+ export declare function writeExactMoment(nanoseconds: bigint, notation: MomentNotation): string;
@@ -0,0 +1,114 @@
1
+ import { Temporal } from "@js-temporal/polyfill";
2
+ import { isValidZonedDateTime } from "../zoned/validate/isValidZonedDateTime.js";
3
+ import { parseInstantNanoseconds } from "./instantNanoseconds.js";
4
+ import { EXTENDED_UTC_OFFSET, TIME_ZONE_ANNOTATION } from "./isoStringBody.js";
5
+ import { wallClockAtOffset } from "./wallClockAtOffset.js";
6
+ import { utcOffsetStringNanoseconds, zonedDateTimeFrom, } from "./zonedWallClock.js";
7
+ /**
8
+ * Trailing `Z` or extended offset of an instant string, before any annotation. The offset grammar
9
+ * is `isValidInstant`'s own (`EXTENDED_UTC_OFFSET`), so every offset it accepts, `,` fractions
10
+ * included, is captured as written.
11
+ */
12
+ const trailingOffset = new RegExp(`(Z|${EXTENDED_UTC_OFFSET})(?:\\[[^\\]]*\\])*$`);
13
+ /**
14
+ * A time-zone annotation anywhere in the string (`TIME_ZONE_ANNOTATION`). Every `key=value`
15
+ * bracket is a tagged annotation, which the instant parse already decides.
16
+ */
17
+ const zoneAnnotation = new RegExp(TIME_ZONE_ANNOTATION);
18
+ /**
19
+ * Read an exact moment the way `transitTime` reads a departure, or `null`.
20
+ *
21
+ * - A zoned string (`…-04:00[America/New_York]`) is read through its bracket, which must name a
22
+ * real zone that agrees with the offset, as `isValidZonedDateTime` requires. An offset written
23
+ * to the minute agrees when it is the zone's sub-minute offset rounded (TC39
24
+ * `ToTemporalZonedDateTime`, match-minutes), which is how `writeExactMoment` writes one.
25
+ * - A wall time with a bracket and no offset is read in that zone with the `"compatible"`
26
+ * disambiguation policy (`context/reference/LOCAL_TIME_RESOLUTION.md`): an **ambiguous** wall
27
+ * time, a fall-back hour the clock ran through twice, resolves to the **earlier** instant
28
+ * (`2024-11-03T01:30:00[America/New_York]` is `01:30-04:00`), and a **nonexistent** one, a
29
+ * spring-forward hour the clock skipped, to the **later** instant
30
+ * (`2024-03-10T02:30:00[America/New_York]` is `03:30-04:00`). A caller that must not guess
31
+ * refuses the offset-less form before calling, as `nextDeparture` does.
32
+ * - A string that names a zone the zoned read rejects is `null`; it never falls back to its
33
+ * offset. That includes a zoned string whose local date is −271821-04-19, which
34
+ * `Temporal.ZonedDateTime.from` refuses although its instant is in range.
35
+ * - Otherwise an instant (`Z` or an offset) as `parseInstantNanoseconds` reads it: calendar and
36
+ * elective annotations are ignored and a critical unknown one is rejected. Its offset text is
37
+ * kept exactly as written, sub-minute and `,` fractions included.
38
+ *
39
+ * @param value candidate zoned datetime or instant string
40
+ * @returns the moment's epoch nanoseconds and notation, or null on invalid input
41
+ *
42
+ * @example readExactMoment("2024-06-15T10:00:00+09:00") // { nanoseconds: 1718413200000000000n, notation: { kind: "offset", offset: "+09:00" } }
43
+ * @example readExactMoment("2024-06-15T10:00:00Z[Not/AZone]") // null
44
+ * @example readExactMoment("2024-03-10T02:30:00[America/New_York]") // { nanoseconds: 1710055800000000000n, notation: { kind: "zone", timeZone: "America/New_York" } } (nonexistent: the later instant, 03:30-04:00)
45
+ */
46
+ export function readExactMoment(value) {
47
+ if (typeof value !== "string") {
48
+ return null;
49
+ }
50
+ try {
51
+ if (isValidZonedDateTime(value)) {
52
+ const zoned = zonedDateTimeFrom(value);
53
+ return {
54
+ nanoseconds: zoned.epochNanoseconds,
55
+ notation: { kind: "zone", timeZone: zoned.timeZoneId },
56
+ };
57
+ }
58
+ if (zoneAnnotation.test(value)) {
59
+ return null;
60
+ }
61
+ const nanoseconds = parseInstantNanoseconds(value);
62
+ if (nanoseconds === null) {
63
+ return null;
64
+ }
65
+ const offset = trailingOffset.exec(value)?.[1] ?? "Z";
66
+ return {
67
+ nanoseconds,
68
+ notation: offset === "Z" ? { kind: "utc" } : { kind: "offset", offset },
69
+ };
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ /**
76
+ * Write epoch nanoseconds the way a moment was written: in its zone, at its offset text, or as a
77
+ * `Z` instant. `""` when the nanoseconds leave the instant range (±8.64e21 ns).
78
+ *
79
+ * - A zone notation is written as Temporal writes a `ZonedDateTime`: the offset in force at that
80
+ * instant, rounded to the minute (`-00:45` for Monrovia's −00:44:30), then the bracket.
81
+ * `readExactMoment` and `parseInstantNanoseconds` read that string back as the same instant,
82
+ * with two exceptions, both Temporal's own. A wall time repeated inside a sub-minute offset
83
+ * change reads as its first pass, in both readers (`parseInstantNanoseconds` states the
84
+ * rule). And `readExactMoment`, a zoned read, refuses a string whose local date is
85
+ * −271821-04-19 (`CheckISODaysRange` in `Temporal.ZonedDateTime.from`): the string written
86
+ * for the first hours of the instant range in a zone west of Greenwich reads as `null` there,
87
+ * and as its instant in `parseInstantNanoseconds`
88
+ * (`context/domination/js-temporal-polyfill-bugs.md` § J).
89
+ * - An offset notation keeps its text as written. The wall clock is shifted, never the instant
90
+ * (`wallClockAtOffset`), so the last hours of the range still write at a positive offset.
91
+ *
92
+ * @param nanoseconds epoch nanoseconds of the moment to write
93
+ * @param notation how to write it, from `readExactMoment`
94
+ * @returns the moment as a zoned, offset or `Z` string, or "" when it is out of range
95
+ *
96
+ * @example writeExactMoment(0n, { kind: "offset", offset: "+09:00" }) // "1970-01-01T09:00:00+09:00"
97
+ * @example writeExactMoment(0n, { kind: "zone", timeZone: "UTC" }) // "1970-01-01T00:00:00+00:00[UTC]"
98
+ */
99
+ export function writeExactMoment(nanoseconds, notation) {
100
+ try {
101
+ const instant = Temporal.Instant.fromEpochNanoseconds(nanoseconds);
102
+ if (notation.kind === "zone") {
103
+ return instant.toZonedDateTimeISO(notation.timeZone).toString();
104
+ }
105
+ if (notation.kind === "utc") {
106
+ return instant.toString();
107
+ }
108
+ const wall = wallClockAtOffset(instant, utcOffsetStringNanoseconds(notation.offset));
109
+ return `${wall.toString()}${notation.offset}`;
110
+ }
111
+ catch {
112
+ return "";
113
+ }
114
+ }
@@ -10,9 +10,10 @@ import type { FiscalPattern } from "../types/index.js";
10
10
  * off the result.
11
11
  *
12
12
  * - The month-day is moved into `year` with Temporal's `overflow: "constrain"`, so a
13
- * February 29 anchor targets February 28 in a common year before the weekday shift. A
14
- * "month-end" rule (the 26 CFR 1.441-2 style, "the last Saturday of February") would
15
- * instead put a February 28 anchor on February 29 in a leap year; this does not.
13
+ * February 29 anchor targets February 28 in a common year before the weekday shift. A rule
14
+ * tied to the end of a month ("the last Saturday of February", or the Saturday nearest the
15
+ * month's last day) would instead put a February 28 anchor on February 29 in a leap year;
16
+ * this does not.
16
17
  */
17
18
  export declare function fiscalYearEndIn(anchor: Temporal.PlainDate, year: number): Temporal.PlainDate;
18
19
  /**
@@ -32,9 +32,10 @@ const NEAREST_WEEKDAY_RADIUS = 3;
32
32
  * off the result.
33
33
  *
34
34
  * - The month-day is moved into `year` with Temporal's `overflow: "constrain"`, so a
35
- * February 29 anchor targets February 28 in a common year before the weekday shift. A
36
- * "month-end" rule (the 26 CFR 1.441-2 style, "the last Saturday of February") would
37
- * instead put a February 28 anchor on February 29 in a leap year; this does not.
35
+ * February 29 anchor targets February 28 in a common year before the weekday shift. A rule
36
+ * tied to the end of a month ("the last Saturday of February", or the Saturday nearest the
37
+ * month's last day) would instead put a February 28 anchor on February 29 in a leap year;
38
+ * this does not.
38
39
  */
39
40
  export function fiscalYearEndIn(anchor, year) {
40
41
  const target = anchor.with({ year }, { overflow: "constrain" });
@@ -13,7 +13,7 @@ import type { Temporal } from "@js-temporal/polyfill";
13
13
  * @example formatCalendarDays(1, 1710685800000, "UTC", "en-US", "short") // "tomorrow at 2:30 PM"
14
14
  * @example formatCalendarDays(-9, 1710685800000, "UTC", "en-US", "short") // "March 17, 2024 at 2:30 PM"
15
15
  */
16
- export declare function formatCalendarDays(diffDays: number, epochMilliseconds: number, timeZone: string, locale: string | string[] | undefined, timeStyle: "short" | "medium" | "full"): string;
16
+ export declare function formatCalendarDays(diffDays: number, epochMilliseconds: number, timeZone: string, locale: string | string[] | undefined, timeStyle: "short" | "medium" | "long" | "full"): string;
17
17
  /**
18
18
  * `formatCalendarDays` for two instants, counting calendar days between their dates in `timeZone`.
19
19
  *
@@ -25,4 +25,4 @@ export declare function formatCalendarDays(diffDays: number, epochMilliseconds:
25
25
  * @returns the phrase; throws where Temporal or `Intl` throws
26
26
  * @example formatCalendarInstants(Temporal.Instant.from("2024-03-17T14:30:00Z"), Temporal.Instant.from("2024-03-16T09:00:00Z"), "UTC", "en-US", "short") // "tomorrow at 2:30 PM"
27
27
  */
28
- export declare function formatCalendarInstants(target: Temporal.Instant, reference: Temporal.Instant, timeZone: string, locale: string | string[] | undefined, timeStyle: "short" | "medium" | "full"): string;
28
+ export declare function formatCalendarInstants(target: Temporal.Instant, reference: Temporal.Instant, timeZone: string, locale: string | string[] | undefined, timeStyle: "short" | "medium" | "long" | "full"): string;
@@ -23,5 +23,25 @@ export interface RelativeDurationFormatOptions {
23
23
  * @example formatRelativeDuration(Temporal.Duration.from({ hours: 36 }), "en-US", { largestUnit: "hour" }, () => 0) // "in 36 hours"
24
24
  * @example formatRelativeDuration(Temporal.Duration.from({ days: 400 }), "en-US", {}, () => 1) // "next year" (month/year totals come from calendarTotal)
25
25
  */
26
- export declare function formatRelativeDuration(diff: Temporal.Duration, locale: string | string[] | undefined, options: RelativeDurationFormatOptions, calendarTotal: (unit: RelativeUnitName) => number): string;
26
+ export declare function formatRelativeDuration(diff: Temporal.Duration, locale: string | string[] | undefined, options: RelativeDurationFormatOptions, calendarTotal: (unit: RelativeUnit) => number): string;
27
+ /**
28
+ * Round a distance to a whole number of `unit` and render it with `Intl.RelativeTimeFormat`. The
29
+ * shared last step of every `formatRelative*` function.
30
+ *
31
+ * - `numeric` and `style` are read here, once each (GetOption); `roundingMethod` is passed in
32
+ * because the caller has already read it.
33
+ *
34
+ * @param total the signed fractional distance in `unit`
35
+ * @param unit the singular unit the distance is written in
36
+ * @param locale BCP 47 locale(s) passed through to `Intl.RelativeTimeFormat`
37
+ * @param options the caller's options, read for `numeric` (default `"auto"`) and `style`
38
+ * (default `"long"`)
39
+ * @param roundingMethod the caller's `roundingMethod`, `undefined` for the default `"round"`
40
+ * @returns the formatted phrase; throws where `Intl` throws or the rounding method is invalid, for
41
+ * the caller's sentinel
42
+ * @example formatRelativeAmount(-1.5, "hour", "en-US", {}, "floor") // "2 hours ago"
43
+ * @example formatRelativeAmount(1, "day", "en-US", { numeric: "always" }, undefined) // "in 1 day"
44
+ * @example formatRelativeAmount(1, "day", "en-US", { style: "wide" as never }, undefined) // throws RangeError
45
+ */
46
+ export declare function formatRelativeAmount(total: number, unit: RelativeUnit, locale: string | string[] | undefined, options: Pick<RelativeDurationFormatOptions, "numeric" | "style">, roundingMethod: RelativeRoundingMethod | undefined): string;
27
47
  export {};