@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,49 @@
1
+ import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
2
+ /**
3
+ * Return the first instant at or after `isoString` that `schedule` is closed, as a UTC instant.
4
+ *
5
+ * - Open at `isoString`: returns the end of the open interval holding it — when the gate
6
+ * closes. Windows that touch are one interval, so a schedule open 00:00–00:00 every day
7
+ * closes only where a day has no window.
8
+ * - Already closed at `isoString`: returns `isoString` itself, in UTC. Pair it with
9
+ * `nextOpenAt` to find the next open interval: `nextCloseAt(nextOpenAt(t, s), s)`.
10
+ * - Returns `""` when the schedule stays open past the search horizon — a schedule open around
11
+ * the clock never closes.
12
+ * - Holidays and overrides apply as in `operatingIntervals`.
13
+ * - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
14
+ * - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
15
+ * not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
16
+ * a search that would go more than 10,000 local dates past the input's date.
17
+ *
18
+ * @param isoString ISO 8601 instant string to search from, inclusive
19
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
20
+ * @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
21
+ * @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
22
+ *
23
+ * @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T21:00:00Z" — Monday 10:00 to 17:00 local
24
+ * @example nextCloseAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-15T16:00:00Z" — already closed
25
+ * @example nextCloseAt("2024-06-14T23:30:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // "2024-06-15T06:00:00Z" — Friday's night window
26
+ * @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] } }) // "2024-06-19T00:00:00Z" — two touching days are one interval
27
+ * @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "PT1H" }) // "" — still open an hour later
28
+ * @example nextCloseAt("invalid", { timeZone: "UTC", weekly: {} }) // ""
29
+ */
30
+ export declare function nextCloseAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
31
+ /**
32
+ * How far after `isoString` the search may go, as a non-negative ISO 8601 duration added in the
33
+ * schedule's zone, so `"P1D"` is one local day. A closing exactly at that horizon counts, and a
34
+ * horizon past Temporal's last instant stops there.
35
+ *
36
+ * @defaultValue `"P1Y"`
37
+ */
38
+ within?: string;
39
+ /**
40
+ * How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
41
+ * resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
42
+ * later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
43
+ * both cases. `"reject"` returns `""` when a window with such an edge could keep the schedule
44
+ * open past the answer.
45
+ *
46
+ * @defaultValue `"compatible"`, Temporal's default.
47
+ */
48
+ disambiguation?: Disambiguation;
49
+ }): string;
@@ -0,0 +1,51 @@
1
+ import { parseInstantNanoseconds } from "../../internal/index.js";
2
+ import { firstClosedInstant, instantText, parseOperatingSchedule, parseScheduleDisambiguation, parseSearchHorizon, } from "../../internal/operatingSchedule.js";
3
+ /**
4
+ * Return the first instant at or after `isoString` that `schedule` is closed, as a UTC instant.
5
+ *
6
+ * - Open at `isoString`: returns the end of the open interval holding it — when the gate
7
+ * closes. Windows that touch are one interval, so a schedule open 00:00–00:00 every day
8
+ * closes only where a day has no window.
9
+ * - Already closed at `isoString`: returns `isoString` itself, in UTC. Pair it with
10
+ * `nextOpenAt` to find the next open interval: `nextCloseAt(nextOpenAt(t, s), s)`.
11
+ * - Returns `""` when the schedule stays open past the search horizon — a schedule open around
12
+ * the clock never closes.
13
+ * - Holidays and overrides apply as in `operatingIntervals`.
14
+ * - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
15
+ * - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
16
+ * not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
17
+ * a search that would go more than 10,000 local dates past the input's date.
18
+ *
19
+ * @param isoString ISO 8601 instant string to search from, inclusive
20
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
21
+ * @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
22
+ * @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
23
+ *
24
+ * @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T21:00:00Z" — Monday 10:00 to 17:00 local
25
+ * @example nextCloseAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-15T16:00:00Z" — already closed
26
+ * @example nextCloseAt("2024-06-14T23:30:00Z", { timeZone: "UTC", weekly: { 5: [{ from: "23:00", to: "06:00" }] } }) // "2024-06-15T06:00:00Z" — Friday's night window
27
+ * @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] } }) // "2024-06-19T00:00:00Z" — two touching days are one interval
28
+ * @example nextCloseAt("2024-06-17T14:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "PT1H" }) // "" — still open an hour later
29
+ * @example nextCloseAt("invalid", { timeZone: "UTC", weekly: {} }) // ""
30
+ */
31
+ export function nextCloseAt(isoString, schedule, optionsArg) {
32
+ try {
33
+ const disambiguation = parseScheduleDisambiguation(optionsArg);
34
+ const resolved = parseOperatingSchedule(schedule);
35
+ const from = parseInstantNanoseconds(isoString);
36
+ if (disambiguation === null || resolved === null || from === null) {
37
+ return "";
38
+ }
39
+ const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.timeZone);
40
+ if (horizon === null) {
41
+ return "";
42
+ }
43
+ const answer = firstClosedInstant(resolved, from, horizon, disambiguation);
44
+ return typeof answer === "bigint" ? instantText(answer) : "";
45
+ }
46
+ catch {
47
+ // Never throws (Core Rule 3): a hostile
48
+ // argument is invalid input, not an exception.
49
+ return "";
50
+ }
51
+ }
@@ -0,0 +1,45 @@
1
+ import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
2
+ /**
3
+ * Return the first instant at or after `isoString` that `schedule` is open, as a UTC instant.
4
+ *
5
+ * - Already open at `isoString`: returns `isoString` itself, in UTC. Otherwise returns the start
6
+ * of the next open interval — the moment a gate opens, or a notice can be tendered.
7
+ * - Returns `""` when the schedule does not open within the search horizon, rather than
8
+ * searching forever.
9
+ * - Holidays and overrides apply as in `operatingIntervals`.
10
+ * - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
11
+ * - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
12
+ * not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
13
+ * a search that would go more than 10,000 local dates past the input's date.
14
+ *
15
+ * @param isoString ISO 8601 instant string to search from, inclusive
16
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
17
+ * @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
18
+ * @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
19
+ *
20
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T13:00:00Z" — Saturday noon to Monday 09:00 local
21
+ * @example nextOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — already open
22
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — Monday is past the horizon
23
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — never opens
24
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "-P1D" }) // ""
25
+ */
26
+ export declare function nextOpenAt(isoString: string, schedule: OperatingSchedule, optionsArg?: {
27
+ /**
28
+ * How far after `isoString` the search may go, as a non-negative ISO 8601 duration added in the
29
+ * schedule's zone, so `"P1D"` is one local day. An opening exactly at that horizon counts, and a
30
+ * horizon past Temporal's last instant stops there.
31
+ *
32
+ * @defaultValue `"P1Y"`
33
+ */
34
+ within?: string;
35
+ /**
36
+ * How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
37
+ * resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
38
+ * later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
39
+ * both cases. `"reject"` returns `""` when a window with such an edge could open before the
40
+ * answer.
41
+ *
42
+ * @defaultValue `"compatible"`, Temporal's default.
43
+ */
44
+ disambiguation?: Disambiguation;
45
+ }): string;
@@ -0,0 +1,47 @@
1
+ import { parseInstantNanoseconds } from "../../internal/index.js";
2
+ import { firstOpenInstant, instantText, parseOperatingSchedule, parseScheduleDisambiguation, parseSearchHorizon, } from "../../internal/operatingSchedule.js";
3
+ /**
4
+ * Return the first instant at or after `isoString` that `schedule` is open, as a UTC instant.
5
+ *
6
+ * - Already open at `isoString`: returns `isoString` itself, in UTC. Otherwise returns the start
7
+ * of the next open interval — the moment a gate opens, or a notice can be tendered.
8
+ * - Returns `""` when the schedule does not open within the search horizon, rather than
9
+ * searching forever.
10
+ * - Holidays and overrides apply as in `operatingIntervals`.
11
+ * - `isoString` is an instant: an offset (`Z`, `±HH:MM`) is required.
12
+ * - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, a `within` that is
13
+ * not a non-negative ISO duration, a `disambiguation` that is not one of the four values, and
14
+ * a search that would go more than 10,000 local dates past the input's date.
15
+ *
16
+ * @param isoString ISO 8601 instant string to search from, inclusive
17
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
18
+ * @param optionsArg How far the search goes, and how a window edge on a clock change is resolved
19
+ * @returns UTC instant string ending in "Z", or "" when none within the horizon or on invalid input
20
+ *
21
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T13:00:00Z" — Saturday noon to Monday 09:00 local
22
+ * @example nextOpenAt("2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "2024-06-17T14:00:00Z" — already open
23
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "P1D" }) // "" — Monday is past the horizon
24
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — never opens
25
+ * @example nextOpenAt("2024-06-15T16:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { within: "-P1D" }) // ""
26
+ */
27
+ export function nextOpenAt(isoString, schedule, optionsArg) {
28
+ try {
29
+ const disambiguation = parseScheduleDisambiguation(optionsArg);
30
+ const resolved = parseOperatingSchedule(schedule);
31
+ const from = parseInstantNanoseconds(isoString);
32
+ if (disambiguation === null || resolved === null || from === null) {
33
+ return "";
34
+ }
35
+ const horizon = parseSearchHorizon(from, optionsArg?.within, resolved.timeZone);
36
+ if (horizon === null) {
37
+ return "";
38
+ }
39
+ const answer = firstOpenInstant(resolved, from, horizon, disambiguation);
40
+ return typeof answer === "bigint" ? instantText(answer) : "";
41
+ }
42
+ catch {
43
+ // Never throws (Core Rule 3): a hostile
44
+ // argument is invalid input, not an exception.
45
+ return "";
46
+ }
47
+ }
@@ -0,0 +1,43 @@
1
+ import type { Disambiguation, Interval, OperatingSchedule } from "../../types/index.js";
2
+ /**
3
+ * Return the instants an `OperatingSchedule` is open inside `range`: its weekly windows with
4
+ * holidays closed and overrides applied, resolved in the schedule's zone.
5
+ *
6
+ * - Works date by date in `schedule.timeZone`. A date listed in `holidays` has no windows; a
7
+ * date with an override has exactly the override's windows, holiday or not. `holidays` may be
8
+ * a `BusinessCalendar`, whose `holidays` are read.
9
+ * - A window belongs to the date it starts on, so a holiday or override on Friday removes or
10
+ * replaces a Friday 23:00–06:00 window, and one on Saturday leaves it alone.
11
+ * - Window edges are local wall times; `recurringWindows` states the window rules in full.
12
+ * - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
13
+ * touch. Endpoints are UTC instants ending in `Z`, except a clipped edge, which is `range`'s
14
+ * own string.
15
+ * - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
16
+ * - Returns `[]` when `schedule` is not a valid `OperatingSchedule` (a weekday key other than
17
+ * `"1"`–`"7"`, a malformed window, an invalid zone, holiday or override date, or two overrides
18
+ * for one date), when `range` is not a valid `Interval`, when `disambiguation` is not one of
19
+ * the four values, and when the range spans more than 10,000 local dates (about 27 years)
20
+ * counted from the date `range.start` falls on.
21
+ *
22
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
23
+ * @param range `{ start, end }` record of ISO 8601 instant strings to expand the schedule inside
24
+ * @param optionsArg How a window edge on a clock change is resolved
25
+ * @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
26
+ *
27
+ * @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-06T00:00:00Z" }) // [{ start: "2024-07-05T13:00:00Z", end: "2024-07-05T21:00:00Z" }] — the holiday is closed
28
+ * @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"], overrides: [{ date: "2024-07-04", windows: [{ from: "10:00", to: "12:00" }] }] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-05T00:00:00Z" }) // [{ start: "2024-07-04T14:00:00Z", end: "2024-07-04T16:00:00Z" }] — the override wins
29
+ * @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }) // [{ start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }] — clipped to the range
30
+ * @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] }, overrides: [{ date: "2024-06-10", windows: [] }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // [] — closed by override
31
+ * @example operatingIntervals({ timeZone: "Invalid/Zone", weekly: {} }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // []
32
+ */
33
+ export declare function operatingIntervals(schedule: OperatingSchedule, range: Interval, optionsArg?: {
34
+ /**
35
+ * How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
36
+ * resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
37
+ * later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
38
+ * both cases. `"reject"` returns `[]` when a window with such an edge reaches the range.
39
+ *
40
+ * @defaultValue `"compatible"`, Temporal's default.
41
+ */
42
+ disambiguation?: Disambiguation;
43
+ }): Interval[];
@@ -0,0 +1,52 @@
1
+ import { parseIntervalNanoseconds } from "../../internal/index.js";
2
+ import { parseOperatingSchedule, parseScheduleDisambiguation, scheduleRunsWithin, } from "../../internal/operatingSchedule.js";
3
+ /**
4
+ * Return the instants an `OperatingSchedule` is open inside `range`: its weekly windows with
5
+ * holidays closed and overrides applied, resolved in the schedule's zone.
6
+ *
7
+ * - Works date by date in `schedule.timeZone`. A date listed in `holidays` has no windows; a
8
+ * date with an override has exactly the override's windows, holiday or not. `holidays` may be
9
+ * a `BusinessCalendar`, whose `holidays` are read.
10
+ * - A window belongs to the date it starts on, so a holiday or override on Friday removes or
11
+ * replaces a Friday 23:00–06:00 window, and one on Saturday leaves it alone.
12
+ * - Window edges are local wall times; `recurringWindows` states the window rules in full.
13
+ * - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
14
+ * touch. Endpoints are UTC instants ending in `Z`, except a clipped edge, which is `range`'s
15
+ * own string.
16
+ * - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
17
+ * - Returns `[]` when `schedule` is not a valid `OperatingSchedule` (a weekday key other than
18
+ * `"1"`–`"7"`, a malformed window, an invalid zone, holiday or override date, or two overrides
19
+ * for one date), when `range` is not a valid `Interval`, when `disambiguation` is not one of
20
+ * the four values, and when the range spans more than 10,000 local dates (about 27 years)
21
+ * counted from the date `range.start` falls on.
22
+ *
23
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
24
+ * @param range `{ start, end }` record of ISO 8601 instant strings to expand the schedule inside
25
+ * @param optionsArg How a window edge on a clock change is resolved
26
+ * @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
27
+ *
28
+ * @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-06T00:00:00Z" }) // [{ start: "2024-07-05T13:00:00Z", end: "2024-07-05T21:00:00Z" }] — the holiday is closed
29
+ * @example operatingIntervals({ timeZone: "America/New_York", weekly: { 4: [{ from: "09:00", to: "17:00" }] }, holidays: ["2024-07-04"], overrides: [{ date: "2024-07-04", windows: [{ from: "10:00", to: "12:00" }] }] }, { start: "2024-07-04T00:00:00Z", end: "2024-07-05T00:00:00Z" }) // [{ start: "2024-07-04T14:00:00Z", end: "2024-07-04T16:00:00Z" }] — the override wins
30
+ * @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }, { start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }) // [{ start: "2024-06-10T12:00:00Z", end: "2024-06-10T14:00:00Z" }] — clipped to the range
31
+ * @example operatingIntervals({ timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] }, overrides: [{ date: "2024-06-10", windows: [] }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // [] — closed by override
32
+ * @example operatingIntervals({ timeZone: "Invalid/Zone", weekly: {} }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }) // []
33
+ */
34
+ export function operatingIntervals(schedule, range, optionsArg) {
35
+ try {
36
+ const disambiguation = parseScheduleDisambiguation(optionsArg);
37
+ const resolved = parseOperatingSchedule(schedule);
38
+ const bounds = parseIntervalNanoseconds(range);
39
+ if (disambiguation === null || resolved === null || bounds === null) {
40
+ return [];
41
+ }
42
+ const runs = scheduleRunsWithin(resolved, bounds, disambiguation);
43
+ return runs === null
44
+ ? []
45
+ : runs.map((run) => ({ start: run.startText, end: run.endText }));
46
+ }
47
+ catch {
48
+ // Never throws (Core Rule 3): a hostile
49
+ // argument is invalid input, not an exception.
50
+ return [];
51
+ }
52
+ }
@@ -0,0 +1,40 @@
1
+ import type { Disambiguation, OperatingSchedule } from "../../types/index.js";
2
+ /**
3
+ * Return how much open time `schedule` has between two instants, as an exact ISO duration.
4
+ *
5
+ * - The open time in the half-open range `[start, end)`: the length of its intersection with
6
+ * `operatingIntervals(schedule, { start, end })`, summed as `sumIntervals` sums. A support
7
+ * ticket raised Friday 16:00 and answered Monday 10:00 on a 09:00–17:00 weekday desk has
8
+ * waited `PT2H` of open time.
9
+ * - Hours are the largest unit (`PT40H`, not `P1DT16H`): an open-time total has no calendar.
10
+ * Exact to the nanosecond, and elapsed time, not wall-clock distance, so a 00:00–00:00 window
11
+ * on a New York fall-back date adds 25 hours.
12
+ * - Holidays and overrides apply as in `operatingIntervals`.
13
+ * - `start === end` returns `"PT0S"`.
14
+ * - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, `start` after
15
+ * `end`, a `disambiguation` that is not one of the four values, and a range spanning more than
16
+ * 10,000 local dates (about 27 years) counted from the date `start` falls on.
17
+ *
18
+ * @param start ISO 8601 instant string where the clock starts (inclusive)
19
+ * @param end ISO 8601 instant string where the clock stops (exclusive)
20
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
21
+ * @param optionsArg How a window edge on a clock change is resolved
22
+ * @returns ISO 8601 duration string of the open time, or "" on invalid input
23
+ *
24
+ * @example operatingTimeBetween("2024-06-14T20:00:00Z", "2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "PT2H" — Friday 16:00 to Monday 10:00 local
25
+ * @example operatingTimeBetween("2024-06-15T00:00:00Z", "2024-06-16T00:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT0S" — a closed Saturday
26
+ * @example operatingTimeBetween("2024-11-03T04:00:00Z", "2024-11-04T05:00:00Z", { timeZone: "America/New_York", weekly: { 7: [{ from: "00:00", to: "00:00" }] } }) // "PT25H" — the fall-back day
27
+ * @example operatingTimeBetween("2024-06-10T09:00:00Z", "2024-06-10T09:30:00.5Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT30M0.5S"
28
+ * @example operatingTimeBetween("2024-06-17T00:00:00Z", "2024-06-10T00:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — start after end
29
+ */
30
+ export declare function operatingTimeBetween(start: string, end: string, schedule: OperatingSchedule, optionsArg?: {
31
+ /**
32
+ * How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
33
+ * resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
34
+ * later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
35
+ * both cases. `"reject"` returns `""` when a window with such an edge reaches the range.
36
+ *
37
+ * @defaultValue `"compatible"`, Temporal's default.
38
+ */
39
+ disambiguation?: Disambiguation;
40
+ }): string;
@@ -0,0 +1,49 @@
1
+ import { formatHourDuration, parseIntervalNanoseconds } from "../../internal/index.js";
2
+ import { parseOperatingSchedule, parseScheduleDisambiguation, scheduleRunsWithin, } from "../../internal/operatingSchedule.js";
3
+ /**
4
+ * Return how much open time `schedule` has between two instants, as an exact ISO duration.
5
+ *
6
+ * - The open time in the half-open range `[start, end)`: the length of its intersection with
7
+ * `operatingIntervals(schedule, { start, end })`, summed as `sumIntervals` sums. A support
8
+ * ticket raised Friday 16:00 and answered Monday 10:00 on a 09:00–17:00 weekday desk has
9
+ * waited `PT2H` of open time.
10
+ * - Hours are the largest unit (`PT40H`, not `P1DT16H`): an open-time total has no calendar.
11
+ * Exact to the nanosecond, and elapsed time, not wall-clock distance, so a 00:00–00:00 window
12
+ * on a New York fall-back date adds 25 hours.
13
+ * - Holidays and overrides apply as in `operatingIntervals`.
14
+ * - `start === end` returns `"PT0S"`.
15
+ * - Returns `""` on invalid input: an invalid instant or `OperatingSchedule`, `start` after
16
+ * `end`, a `disambiguation` that is not one of the four values, and a range spanning more than
17
+ * 10,000 local dates (about 27 years) counted from the date `start` falls on.
18
+ *
19
+ * @param start ISO 8601 instant string where the clock starts (inclusive)
20
+ * @param end ISO 8601 instant string where the clock stops (exclusive)
21
+ * @param schedule `{ timeZone, weekly, holidays?, overrides? }` operating schedule
22
+ * @param optionsArg How a window edge on a clock change is resolved
23
+ * @returns ISO 8601 duration string of the open time, or "" on invalid input
24
+ *
25
+ * @example operatingTimeBetween("2024-06-14T20:00:00Z", "2024-06-17T14:00:00Z", { timeZone: "America/New_York", weekly: { 1: [{ from: "09:00", to: "17:00" }], 5: [{ from: "09:00", to: "17:00" }] } }) // "PT2H" — Friday 16:00 to Monday 10:00 local
26
+ * @example operatingTimeBetween("2024-06-15T00:00:00Z", "2024-06-16T00:00:00Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT0S" — a closed Saturday
27
+ * @example operatingTimeBetween("2024-11-03T04:00:00Z", "2024-11-04T05:00:00Z", { timeZone: "America/New_York", weekly: { 7: [{ from: "00:00", to: "00:00" }] } }) // "PT25H" — the fall-back day
28
+ * @example operatingTimeBetween("2024-06-10T09:00:00Z", "2024-06-10T09:30:00.5Z", { timeZone: "UTC", weekly: { 1: [{ from: "09:00", to: "17:00" }] } }) // "PT30M0.5S"
29
+ * @example operatingTimeBetween("2024-06-17T00:00:00Z", "2024-06-10T00:00:00Z", { timeZone: "UTC", weekly: {} }) // "" — start after end
30
+ */
31
+ export function operatingTimeBetween(start, end, schedule, optionsArg) {
32
+ try {
33
+ const disambiguation = parseScheduleDisambiguation(optionsArg);
34
+ const resolved = parseOperatingSchedule(schedule);
35
+ const range = parseIntervalNanoseconds({ start, end });
36
+ if (disambiguation === null || resolved === null || range === null) {
37
+ return "";
38
+ }
39
+ const runs = scheduleRunsWithin(resolved, range, disambiguation);
40
+ return runs === null
41
+ ? ""
42
+ : formatHourDuration(runs.reduce((total, run) => total + (run.end - run.start), 0n));
43
+ }
44
+ catch {
45
+ // Never throws (Core Rule 3): a hostile
46
+ // argument is invalid input, not an exception.
47
+ return "";
48
+ }
49
+ }
@@ -0,0 +1,61 @@
1
+ import type { Disambiguation, Interval, OperatingSchedule } from "../../types/index.js";
2
+ /**
3
+ * Return the instants a weekly pattern of local windows is open inside `range`, read in
4
+ * `timeZone`: the primitive under operating hours, curfews and recurring crew windows.
5
+ *
6
+ * - `weekly` maps ISO weekdays (1 = Monday … 7 = Sunday) to `LocalWindow`s of wall time. A
7
+ * window whose `to` is at or before its `from` wraps past midnight and belongs to the date it
8
+ * starts on: `{ from: "23:00", to: "06:00" }` under 5 is Friday 23:00 to Saturday 06:00, and
9
+ * `{ from: "00:00", to: "00:00" }` is the whole day. No holidays or overrides; see
10
+ * `operatingIntervals` for those.
11
+ * - Each window edge is a local wall time resolved with `resolveLocal`. An edge in a skipped
12
+ * spring-forward hour is shifted by the gap: forward, or back when it is read `"earlier"` (TC39
13
+ * DisambiguatePossibleEpochNanoseconds), so in a zone that skips midnight a date's early
14
+ * window can open on the previous local date, before the date's own first instant; it still
15
+ * belongs to its own date.
16
+ * - A window "reaches the range" for `"reject"` when the widest span it could cover (its `from`
17
+ * read `"earlier"`, its `to` read `"later"`) overlaps `range`. A rejected window elsewhere
18
+ * does not matter.
19
+ * - Windows are elapsed time between their resolved edges, so the wall-clock length is not the
20
+ * real one on transition nights: in New York, 23:00–06:00 is 8 hours across the fall-back
21
+ * night and 6 across the spring-forward one, and 00:00–00:00 is 25 and 23 hours.
22
+ * - A window whose edges resolve to an empty or inverted span on a transition night — only a
23
+ * window shorter than the gap it straddles — is empty that day and left out.
24
+ * - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
25
+ * touch, so a run of whole-day windows is one interval. Endpoints are UTC instants ending in
26
+ * `Z`, except a clipped edge, which is `range`'s own string.
27
+ * - Local dates follow the zone's real days: a date the zone deleted (`Pacific/Apia` skipped
28
+ * 2011-12-30) has no windows, and a date re-entered after a fall-back is counted once.
29
+ * - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
30
+ * - Returns `[]` when `weekly` has a key other than `"1"`–`"7"` or a malformed window, when
31
+ * `range` is not a valid `Interval`, when `timeZone` is invalid, when `disambiguation` is not
32
+ * one of the four values, and when the range spans more than 10,000 local dates (about 27
33
+ * years) counted from the date `range.start` falls on, rather than a truncated list.
34
+ *
35
+ * @param weekly windows by ISO weekday, `{ 1: [{ from: "09:00", to: "17:00" }], … }`
36
+ * @param range `{ start, end }` record of ISO 8601 instant strings to expand the pattern inside
37
+ * @param timeZone IANA name or UTC offset the windows are read in
38
+ * @param optionsArg How a window edge on a clock change is resolved
39
+ * @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
40
+ *
41
+ * @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-06-10T13:00:00Z", end: "2024-06-10T21:00:00Z" }]
42
+ * @example recurringWindows({ 5: [{ from: "23:00", to: "06:00" }] }, { start: "2024-06-14T00:00:00Z", end: "2024-06-16T00:00:00Z" }, "UTC") // [{ start: "2024-06-14T23:00:00Z", end: "2024-06-15T06:00:00Z" }] — Friday night into Saturday
43
+ * @example recurringWindows({ 6: [{ from: "23:00", to: "06:00" }] }, { start: "2024-11-02T00:00:00Z", end: "2024-11-04T00:00:00Z" }, "America/New_York") // [{ start: "2024-11-03T03:00:00Z", end: "2024-11-03T11:00:00Z" }] — 8 hours across the fall-back night
44
+ * @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-03-10T07:30:00Z", end: "2024-03-10T08:00:00Z" }] — 02:30 does not exist; "compatible" reads it as 03:30
45
+ * @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York", { disambiguation: "reject" }) // []
46
+ * @example recurringWindows({ 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-13T00:00:00Z" }, "UTC") // [{ start: "2024-06-10T00:00:00Z", end: "2024-06-12T00:00:00Z" }] — touching days merge
47
+ * @example recurringWindows({ 8: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — not an ISO weekday
48
+ * @example recurringWindows({ 1: [{ from: "9am", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — malformed window
49
+ * @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "Invalid/Zone") // []
50
+ */
51
+ export declare function recurringWindows(weekly: OperatingSchedule["weekly"], range: Interval, timeZone: string, optionsArg?: {
52
+ /**
53
+ * How a window edge in a repeated or skipped local hour becomes an instant, as `resolveLocal`
54
+ * resolves it. `"compatible"` takes the earlier instant of a repeated fall-back hour and the
55
+ * later one of a skipped spring-forward hour, and `"earlier"` and `"later"` take that side in
56
+ * both cases. `"reject"` returns `[]` when a window with such an edge reaches the range.
57
+ *
58
+ * @defaultValue `"compatible"`, Temporal's default.
59
+ */
60
+ disambiguation?: Disambiguation;
61
+ }): Interval[];
@@ -0,0 +1,80 @@
1
+ import { parseIntervalNanoseconds } from "../../internal/index.js";
2
+ import { parseScheduleDisambiguation, parseWeeklyPattern, scheduleRunsWithin, } from "../../internal/operatingSchedule.js";
3
+ import { isValidTimeZone } from "../../zoned/validate/index.js";
4
+ /**
5
+ * Return the instants a weekly pattern of local windows is open inside `range`, read in
6
+ * `timeZone`: the primitive under operating hours, curfews and recurring crew windows.
7
+ *
8
+ * - `weekly` maps ISO weekdays (1 = Monday … 7 = Sunday) to `LocalWindow`s of wall time. A
9
+ * window whose `to` is at or before its `from` wraps past midnight and belongs to the date it
10
+ * starts on: `{ from: "23:00", to: "06:00" }` under 5 is Friday 23:00 to Saturday 06:00, and
11
+ * `{ from: "00:00", to: "00:00" }` is the whole day. No holidays or overrides; see
12
+ * `operatingIntervals` for those.
13
+ * - Each window edge is a local wall time resolved with `resolveLocal`. An edge in a skipped
14
+ * spring-forward hour is shifted by the gap: forward, or back when it is read `"earlier"` (TC39
15
+ * DisambiguatePossibleEpochNanoseconds), so in a zone that skips midnight a date's early
16
+ * window can open on the previous local date, before the date's own first instant; it still
17
+ * belongs to its own date.
18
+ * - A window "reaches the range" for `"reject"` when the widest span it could cover (its `from`
19
+ * read `"earlier"`, its `to` read `"later"`) overlaps `range`. A rejected window elsewhere
20
+ * does not matter.
21
+ * - Windows are elapsed time between their resolved edges, so the wall-clock length is not the
22
+ * real one on transition nights: in New York, 23:00–06:00 is 8 hours across the fall-back
23
+ * night and 6 across the spring-forward one, and 00:00–00:00 is 25 and 23 hours.
24
+ * - A window whose edges resolve to an empty or inverted span on a transition night — only a
25
+ * window shorter than the gap it straddles — is empty that day and left out.
26
+ * - The result is clipped to `range` (half-open), sorted, and merged where windows overlap or
27
+ * touch, so a run of whole-day windows is one interval. Endpoints are UTC instants ending in
28
+ * `Z`, except a clipped edge, which is `range`'s own string.
29
+ * - Local dates follow the zone's real days: a date the zone deleted (`Pacific/Apia` skipped
30
+ * 2011-12-30) has no windows, and a date re-entered after a fall-back is counted once.
31
+ * - `[]` is both a legitimate result (closed throughout, or an empty `range`) and the sentinel.
32
+ * - Returns `[]` when `weekly` has a key other than `"1"`–`"7"` or a malformed window, when
33
+ * `range` is not a valid `Interval`, when `timeZone` is invalid, when `disambiguation` is not
34
+ * one of the four values, and when the range spans more than 10,000 local dates (about 27
35
+ * years) counted from the date `range.start` falls on, rather than a truncated list.
36
+ *
37
+ * @param weekly windows by ISO weekday, `{ 1: [{ from: "09:00", to: "17:00" }], … }`
38
+ * @param range `{ start, end }` record of ISO 8601 instant strings to expand the pattern inside
39
+ * @param timeZone IANA name or UTC offset the windows are read in
40
+ * @param optionsArg How a window edge on a clock change is resolved
41
+ * @returns sorted, merged `{ start, end }` records of the open instants, or [] on invalid input
42
+ *
43
+ * @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-06-10T13:00:00Z", end: "2024-06-10T21:00:00Z" }]
44
+ * @example recurringWindows({ 5: [{ from: "23:00", to: "06:00" }] }, { start: "2024-06-14T00:00:00Z", end: "2024-06-16T00:00:00Z" }, "UTC") // [{ start: "2024-06-14T23:00:00Z", end: "2024-06-15T06:00:00Z" }] — Friday night into Saturday
45
+ * @example recurringWindows({ 6: [{ from: "23:00", to: "06:00" }] }, { start: "2024-11-02T00:00:00Z", end: "2024-11-04T00:00:00Z" }, "America/New_York") // [{ start: "2024-11-03T03:00:00Z", end: "2024-11-03T11:00:00Z" }] — 8 hours across the fall-back night
46
+ * @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York") // [{ start: "2024-03-10T07:30:00Z", end: "2024-03-10T08:00:00Z" }] — 02:30 does not exist; "compatible" reads it as 03:30
47
+ * @example recurringWindows({ 7: [{ from: "02:30", to: "04:00" }] }, { start: "2024-03-10T00:00:00Z", end: "2024-03-11T00:00:00Z" }, "America/New_York", { disambiguation: "reject" }) // []
48
+ * @example recurringWindows({ 1: [{ from: "00:00", to: "00:00" }], 2: [{ from: "00:00", to: "00:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-13T00:00:00Z" }, "UTC") // [{ start: "2024-06-10T00:00:00Z", end: "2024-06-12T00:00:00Z" }] — touching days merge
49
+ * @example recurringWindows({ 8: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — not an ISO weekday
50
+ * @example recurringWindows({ 1: [{ from: "9am", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "UTC") // [] — malformed window
51
+ * @example recurringWindows({ 1: [{ from: "09:00", to: "17:00" }] }, { start: "2024-06-10T00:00:00Z", end: "2024-06-11T00:00:00Z" }, "Invalid/Zone") // []
52
+ */
53
+ export function recurringWindows(weekly, range, timeZone, optionsArg) {
54
+ try {
55
+ const disambiguation = parseScheduleDisambiguation(optionsArg);
56
+ const weeklyWindows = parseWeeklyPattern(weekly);
57
+ const bounds = parseIntervalNanoseconds(range);
58
+ if (disambiguation === null ||
59
+ weeklyWindows === null ||
60
+ bounds === null ||
61
+ typeof timeZone !== "string" ||
62
+ !isValidTimeZone(timeZone)) {
63
+ return [];
64
+ }
65
+ const runs = scheduleRunsWithin({
66
+ timeZone,
67
+ weekly: weeklyWindows,
68
+ holidays: new Set(),
69
+ overrides: new Map(),
70
+ }, bounds, disambiguation);
71
+ return runs === null
72
+ ? []
73
+ : runs.map((run) => ({ start: run.startText, end: run.endText }));
74
+ }
75
+ catch {
76
+ // Never throws (Core Rule 3): a hostile
77
+ // argument is invalid input, not an exception.
78
+ return [];
79
+ }
80
+ }
@@ -1,4 +1,5 @@
1
1
  export * from "@js-temporal/polyfill";
2
2
  export * from "./business/index.js";
3
3
  export * from "./calculate/index.js";
4
+ export * from "./hours/index.js";
4
5
  export * from "./validate/index.js";
@@ -2,4 +2,5 @@
2
2
  export * from "@js-temporal/polyfill";
3
3
  export * from "./business/index.js";
4
4
  export * from "./calculate/index.js";
5
+ export * from "./hours/index.js";
5
6
  export * from "./validate/index.js";
@@ -7,16 +7,12 @@ import type { DateTimeDurationUnit, DurationRelativeTo } from "../../types/index
7
7
  * durationAs("P1DT2H30M", "hours") is 26.5, not the 2 that `getDurationUnit` reads.
8
8
  * - The result is fractional, not rounded: durationAs("P1DT2H30M", "days") is
9
9
  * 1.1041666666666667. Round it yourself, or reach for `normalizeDuration` instead.
10
- * - `relativeTo` is required whenever a calendar unit (year/month/week) is involved, in
11
- * *either* direction — as the requested `unit`, or because the input duration already has
12
- * a nonzero year/month/week component. Without it, returns null. This is the same
13
- * documented gap `normalizeDuration` (A3) carries; `addDuration`/`subtractDuration` (A2)
14
- * have it worse still, since Temporal gives them no `relativeTo` option at all.
10
+ * - The calendar-unit rule of `relativeTo` is the same one `normalizeDuration` (A3) carries;
11
+ * `addDuration`/`subtractDuration` (A2) have it worse still, since Temporal gives them no
12
+ * `relativeTo` option at all.
15
13
  * - The requested-unit half of that rule bites even on day/time-only input: "P1DT2H30M" has
16
14
  * no calendar component, yet durationAs("P1DT2H30M", "weeks") is still null — a week is a
17
15
  * calendar quantity to Temporal regardless of what it is being measured from.
18
- * - `relativeTo` changes the answer for non-calendar units too when it names a zoned instant:
19
- * a day spanning a DST spring-forward transition totals 23 hours, not 24.
20
16
  * - A zoned `relativeTo` string resolves its wall time with disambiguation "compatible" and
21
17
  * offset "reject", as Temporal does: an ambiguous wall time takes the earlier instant, a
22
18
  * nonexistent one the later instant, and an offset that does not match the zone returns null.
@@ -39,7 +35,7 @@ import type { DateTimeDurationUnit, DurationRelativeTo } from "../../types/index
39
35
  *
40
36
  * @param value ISO 8601 duration string
41
37
  * @param unit DateTimeDurationUnit to total into ("years" | "months" | "weeks" | "days" | "hours" | "minutes" | "seconds" | "milliseconds" | "microseconds" | "nanoseconds", or the singular name)
42
- * @param options optional: { relativeTo } — anchor date/instant, required for any calendar unit
38
+ * @param options The anchor calendar units are measured from
43
39
  * @returns the fractional total in `unit`, or null on invalid input
44
40
  *
45
41
  * @example durationAs("P1DT2H30M", "hours") // 26.5
@@ -58,5 +54,14 @@ import type { DateTimeDurationUnit, DurationRelativeTo } from "../../types/index
58
54
  * @example durationAs("P1M", "days", { relativeTo: "2024-02-10T00:00:00[u-ca=hebrew]" }) // 30 (a date-time without a zone reads as its date, as Temporal reads relativeTo)
59
55
  */
60
56
  export declare function durationAs(value: string, unit: DateTimeDurationUnit | Temporal.DateTimeUnit, options?: {
57
+ /**
58
+ * The date or zoned date-time the duration is measured from. It is required whenever a year,
59
+ * month or week is involved, as the `unit` asked for or as a nonzero field of the duration.
60
+ * With a zoned value, days follow that zone's clock changes, so a day spanning a
61
+ * spring-forward transition totals 23 hours.
62
+ *
63
+ * @defaultValue None. Days are 24 hours, and a duration or `unit` that involves a year, month
64
+ * or week returns `null`.
65
+ */
61
66
  relativeTo?: DurationRelativeTo;
62
67
  }): number | null;