@northguild/gmt 1.18.0 → 1.19.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 (593) hide show
  1. package/README.md +55 -2920
  2. package/dist/calendar/calculate/bucketRange.d.ts +10 -2
  3. package/dist/calendar/calculate/bucketRange.js +18 -61
  4. package/dist/calendar/calculate/floorToZone.d.ts +10 -2
  5. package/dist/calendar/calculate/floorToZone.js +15 -7
  6. package/dist/calendar/hours/addOperatingTime.d.ts +6 -0
  7. package/dist/calendar/hours/addOperatingTime.js +7 -1
  8. package/dist/calendar/hours/isOpenAt.d.ts +6 -0
  9. package/dist/calendar/hours/isOpenAt.js +6 -0
  10. package/dist/calendar/hours/nextCloseAt.d.ts +6 -0
  11. package/dist/calendar/hours/nextCloseAt.js +7 -1
  12. package/dist/calendar/hours/nextOpenAt.d.ts +6 -0
  13. package/dist/calendar/hours/nextOpenAt.js +7 -1
  14. package/dist/calendar/hours/operatingIntervals.d.ts +5 -0
  15. package/dist/calendar/hours/operatingIntervals.js +5 -0
  16. package/dist/calendar/hours/operatingTimeBetween.d.ts +5 -0
  17. package/dist/calendar/hours/operatingTimeBetween.js +5 -0
  18. package/dist/calendar/hours/recurringWindows.d.ts +8 -1
  19. package/dist/calendar/hours/recurringWindows.js +12 -4
  20. package/dist/duration/calculate/durationFromUnits.d.ts +47 -0
  21. package/dist/duration/calculate/durationFromUnits.js +67 -0
  22. package/dist/duration/calculate/getDurationUnit.d.ts +2 -2
  23. package/dist/duration/calculate/getDurationUnit.js +2 -2
  24. package/dist/duration/calculate/index.d.ts +3 -1
  25. package/dist/duration/calculate/index.js +3 -1
  26. package/dist/duration/calculate/negateDuration.d.ts +1 -1
  27. package/dist/duration/calculate/negateDuration.js +1 -1
  28. package/dist/duration/calculate/{durationAs.d.ts → totalDuration.d.ts} +25 -19
  29. package/dist/duration/calculate/{durationAs.js → totalDuration.js} +25 -19
  30. package/dist/duration/calculate/totalUnits.d.ts +49 -0
  31. package/dist/duration/calculate/totalUnits.js +73 -0
  32. package/dist/duration/compare/compareDurations.d.ts +1 -1
  33. package/dist/duration/compare/compareDurations.js +1 -1
  34. package/dist/duty/calculate/dutyDayFor.d.ts +38 -0
  35. package/dist/duty/calculate/dutyDayFor.js +71 -0
  36. package/dist/duty/calculate/dutyTotals.d.ts +24 -0
  37. package/dist/duty/calculate/dutyTotals.js +41 -0
  38. package/dist/duty/calculate/dutyViolations.d.ts +74 -0
  39. package/dist/duty/calculate/dutyViolations.js +65 -0
  40. package/dist/duty/calculate/evaluateDutyLog.d.ts +77 -0
  41. package/dist/duty/calculate/evaluateDutyLog.js +75 -0
  42. package/dist/duty/calculate/index.d.ts +7 -0
  43. package/dist/duty/calculate/index.js +7 -0
  44. package/dist/duty/calculate/longestRun.d.ts +28 -0
  45. package/dist/duty/calculate/longestRun.js +54 -0
  46. package/dist/duty/calculate/qualifyingRestPairs.d.ts +37 -0
  47. package/dist/duty/calculate/qualifyingRestPairs.js +58 -0
  48. package/dist/duty/calculate/qualifyingRests.d.ts +27 -0
  49. package/dist/duty/calculate/qualifyingRests.js +49 -0
  50. package/dist/duty/index.d.ts +3 -0
  51. package/dist/duty/index.js +4 -0
  52. package/dist/duty/validate/index.d.ts +1 -0
  53. package/dist/duty/validate/index.js +1 -0
  54. package/dist/duty/validate/isValidDutyLog.d.ts +24 -0
  55. package/dist/duty/validate/isValidDutyLog.js +34 -0
  56. package/dist/index.d.ts +1 -0
  57. package/dist/index.js +1 -0
  58. package/dist/instant/convert/classifyLocal.d.ts +5 -1
  59. package/dist/instant/convert/classifyLocal.js +16 -6
  60. package/dist/instant/convert/fromOffsetInstant.d.ts +4 -0
  61. package/dist/instant/convert/fromOffsetInstant.js +6 -1
  62. package/dist/instant/convert/resolveLocal.d.ts +7 -2
  63. package/dist/instant/convert/resolveLocal.js +16 -8
  64. package/dist/instant/convert/toOffsetInstant.d.ts +12 -8
  65. package/dist/instant/convert/toOffsetInstant.js +19 -11
  66. package/dist/instant/index.d.ts +1 -0
  67. package/dist/instant/index.js +1 -0
  68. package/dist/instant/validate/index.d.ts +1 -0
  69. package/dist/instant/validate/index.js +1 -0
  70. package/dist/instant/validate/isValidUtcOffset.d.ts +32 -0
  71. package/dist/instant/validate/isValidUtcOffset.js +35 -0
  72. package/dist/intermodal/calculate/chargeableDays.d.ts +6 -0
  73. package/dist/intermodal/calculate/chargeableDays.js +12 -4
  74. package/dist/intermodal/calculate/freeTimeExpiry.d.ts +7 -0
  75. package/dist/intermodal/calculate/freeTimeExpiry.js +15 -4
  76. package/dist/intermodal/calculate/index.d.ts +1 -0
  77. package/dist/intermodal/calculate/index.js +1 -0
  78. package/dist/intermodal/calculate/multimodalETA.d.ts +76 -0
  79. package/dist/intermodal/calculate/multimodalETA.js +145 -0
  80. package/dist/intermodal/format/bolTimestamp.d.ts +76 -0
  81. package/dist/intermodal/format/bolTimestamp.js +78 -0
  82. package/dist/intermodal/format/formatEdifactDate.d.ts +34 -0
  83. package/dist/intermodal/format/formatEdifactDate.js +42 -0
  84. package/dist/intermodal/format/formatEdifactDatePeriod.d.ts +35 -0
  85. package/dist/intermodal/format/formatEdifactDatePeriod.js +43 -0
  86. package/dist/intermodal/format/formatEdifactDateTime.d.ts +37 -0
  87. package/dist/intermodal/format/formatEdifactDateTime.js +45 -0
  88. package/dist/intermodal/format/formatEdifactDateTimePeriod.d.ts +40 -0
  89. package/dist/intermodal/format/formatEdifactDateTimePeriod.js +48 -0
  90. package/dist/intermodal/format/formatEdifactOffsetDateTime.d.ts +62 -0
  91. package/dist/intermodal/format/formatEdifactOffsetDateTime.js +70 -0
  92. package/dist/intermodal/format/formatEdifactTime.d.ts +35 -0
  93. package/dist/intermodal/format/formatEdifactTime.js +43 -0
  94. package/dist/intermodal/format/formatEpcisEvent.d.ts +47 -0
  95. package/dist/intermodal/format/formatEpcisEvent.js +79 -0
  96. package/dist/intermodal/format/formatX12Date.d.ts +35 -0
  97. package/dist/intermodal/format/formatX12Date.js +43 -0
  98. package/dist/intermodal/format/formatX12DateRange.d.ts +37 -0
  99. package/dist/intermodal/format/formatX12DateRange.js +45 -0
  100. package/dist/intermodal/format/formatX12DateTime.d.ts +39 -0
  101. package/dist/intermodal/format/formatX12DateTime.js +47 -0
  102. package/dist/intermodal/format/formatX12DateTimeRange.d.ts +40 -0
  103. package/dist/intermodal/format/formatX12DateTimeRange.js +48 -0
  104. package/dist/intermodal/format/formatX12Time.d.ts +42 -0
  105. package/dist/intermodal/format/formatX12Time.js +50 -0
  106. package/dist/intermodal/format/formatX12TimeElement.d.ts +46 -0
  107. package/dist/intermodal/format/formatX12TimeElement.js +54 -0
  108. package/dist/intermodal/format/index.d.ts +14 -0
  109. package/dist/intermodal/format/index.js +14 -0
  110. package/dist/intermodal/index.d.ts +3 -0
  111. package/dist/intermodal/index.js +3 -0
  112. package/dist/intermodal/parse/classifyEdifactDtmFormat.d.ts +48 -0
  113. package/dist/intermodal/parse/classifyEdifactDtmFormat.js +55 -0
  114. package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.d.ts +50 -0
  115. package/dist/intermodal/parse/classifyX12DateTimePeriodFormat.js +57 -0
  116. package/dist/intermodal/parse/classifyX12TimeCode.d.ts +46 -0
  117. package/dist/intermodal/parse/classifyX12TimeCode.js +57 -0
  118. package/dist/intermodal/parse/index.d.ts +18 -0
  119. package/dist/intermodal/parse/index.js +18 -0
  120. package/dist/intermodal/parse/parseEdifactDate.d.ts +37 -0
  121. package/dist/intermodal/parse/parseEdifactDate.js +45 -0
  122. package/dist/intermodal/parse/parseEdifactDatePeriod.d.ts +43 -0
  123. package/dist/intermodal/parse/parseEdifactDatePeriod.js +51 -0
  124. package/dist/intermodal/parse/parseEdifactDateTime.d.ts +43 -0
  125. package/dist/intermodal/parse/parseEdifactDateTime.js +51 -0
  126. package/dist/intermodal/parse/parseEdifactDateTimePeriod.d.ts +45 -0
  127. package/dist/intermodal/parse/parseEdifactDateTimePeriod.js +53 -0
  128. package/dist/intermodal/parse/parseEdifactOffsetDateTime.d.ts +60 -0
  129. package/dist/intermodal/parse/parseEdifactOffsetDateTime.js +68 -0
  130. package/dist/intermodal/parse/parseEdifactTime.d.ts +37 -0
  131. package/dist/intermodal/parse/parseEdifactTime.js +45 -0
  132. package/dist/intermodal/parse/parseEpcisEvent.d.ts +95 -0
  133. package/dist/intermodal/parse/parseEpcisEvent.js +102 -0
  134. package/dist/intermodal/parse/parseX12Date.d.ts +39 -0
  135. package/dist/intermodal/parse/parseX12Date.js +47 -0
  136. package/dist/intermodal/parse/parseX12DateAndTime.d.ts +52 -0
  137. package/dist/intermodal/parse/parseX12DateAndTime.js +61 -0
  138. package/dist/intermodal/parse/parseX12DateRange.d.ts +44 -0
  139. package/dist/intermodal/parse/parseX12DateRange.js +52 -0
  140. package/dist/intermodal/parse/parseX12DateTime.d.ts +45 -0
  141. package/dist/intermodal/parse/parseX12DateTime.js +53 -0
  142. package/dist/intermodal/parse/parseX12DateTimeRange.d.ts +46 -0
  143. package/dist/intermodal/parse/parseX12DateTimeRange.js +54 -0
  144. package/dist/intermodal/parse/parseX12Time.d.ts +65 -0
  145. package/dist/intermodal/parse/parseX12Time.js +77 -0
  146. package/dist/intermodal/parse/x12TimeCodeOffset.d.ts +57 -0
  147. package/dist/intermodal/parse/x12TimeCodeOffset.js +110 -0
  148. package/dist/intermodal/parse/x12TimeCodeZone.d.ts +57 -0
  149. package/dist/intermodal/parse/x12TimeCodeZone.js +105 -0
  150. package/dist/intermodal/validate/index.d.ts +18 -0
  151. package/dist/intermodal/validate/index.js +18 -0
  152. package/dist/intermodal/validate/isValidEdifactDate.d.ts +26 -0
  153. package/dist/intermodal/validate/isValidEdifactDate.js +28 -0
  154. package/dist/intermodal/validate/isValidEdifactDatePeriod.d.ts +28 -0
  155. package/dist/intermodal/validate/isValidEdifactDatePeriod.js +30 -0
  156. package/dist/intermodal/validate/isValidEdifactDateTime.d.ts +30 -0
  157. package/dist/intermodal/validate/isValidEdifactDateTime.js +32 -0
  158. package/dist/intermodal/validate/isValidEdifactDateTimePeriod.d.ts +28 -0
  159. package/dist/intermodal/validate/isValidEdifactDateTimePeriod.js +30 -0
  160. package/dist/intermodal/validate/isValidEdifactDtmFormat.d.ts +39 -0
  161. package/dist/intermodal/validate/isValidEdifactDtmFormat.js +42 -0
  162. package/dist/intermodal/validate/isValidEdifactOffsetDateTime.d.ts +36 -0
  163. package/dist/intermodal/validate/isValidEdifactOffsetDateTime.js +38 -0
  164. package/dist/intermodal/validate/isValidEdifactTime.d.ts +28 -0
  165. package/dist/intermodal/validate/isValidEdifactTime.js +30 -0
  166. package/dist/intermodal/validate/isValidEpcisEvent.d.ts +41 -0
  167. package/dist/intermodal/validate/isValidEpcisEvent.js +58 -0
  168. package/dist/intermodal/validate/isValidEpcisEventTime.d.ts +33 -0
  169. package/dist/intermodal/validate/isValidEpcisEventTime.js +48 -0
  170. package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.d.ts +30 -0
  171. package/dist/intermodal/validate/isValidEpcisTimeZoneOffset.js +38 -0
  172. package/dist/intermodal/validate/isValidX12Date.d.ts +28 -0
  173. package/dist/intermodal/validate/isValidX12Date.js +30 -0
  174. package/dist/intermodal/validate/isValidX12DateAndTime.d.ts +32 -0
  175. package/dist/intermodal/validate/isValidX12DateAndTime.js +35 -0
  176. package/dist/intermodal/validate/isValidX12DateRange.d.ts +29 -0
  177. package/dist/intermodal/validate/isValidX12DateRange.js +31 -0
  178. package/dist/intermodal/validate/isValidX12DateTime.d.ts +30 -0
  179. package/dist/intermodal/validate/isValidX12DateTime.js +32 -0
  180. package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.d.ts +43 -0
  181. package/dist/intermodal/validate/isValidX12DateTimePeriodFormat.js +46 -0
  182. package/dist/intermodal/validate/isValidX12DateTimeRange.d.ts +31 -0
  183. package/dist/intermodal/validate/isValidX12DateTimeRange.js +33 -0
  184. package/dist/intermodal/validate/isValidX12Time.d.ts +38 -0
  185. package/dist/intermodal/validate/isValidX12Time.js +40 -0
  186. package/dist/intermodal/validate/isValidX12TimeCode.d.ts +38 -0
  187. package/dist/intermodal/validate/isValidX12TimeCode.js +41 -0
  188. package/dist/internal/businessCalendar.js +4 -9
  189. package/dist/internal/dutyEngine.d.ts +125 -0
  190. package/dist/internal/dutyEngine.js +1746 -0
  191. package/dist/internal/dutyLog.d.ts +27 -0
  192. package/dist/internal/dutyLog.js +47 -0
  193. package/dist/internal/dutyPeriods.d.ts +135 -0
  194. package/dist/internal/dutyPeriods.js +369 -0
  195. package/dist/internal/dutyRules.d.ts +197 -0
  196. package/dist/internal/dutyRules.js +484 -0
  197. package/dist/internal/ediDateTimeFields.d.ts +97 -0
  198. package/dist/internal/ediDateTimeFields.js +288 -0
  199. package/dist/internal/ediDateTimeWriter.d.ts +92 -0
  200. package/dist/internal/ediDateTimeWriter.js +298 -0
  201. package/dist/internal/ediGrammar.d.ts +158 -0
  202. package/dist/internal/ediGrammar.js +384 -0
  203. package/dist/internal/englishCalendarNames.d.ts +3 -1
  204. package/dist/internal/englishCalendarNames.js +3 -1
  205. package/dist/internal/freeTimeLedger.d.ts +5 -0
  206. package/dist/internal/freeTimeLedger.js +11 -2
  207. package/dist/internal/index.d.ts +5 -2
  208. package/dist/internal/index.js +9 -2
  209. package/dist/internal/intervalNanoseconds.js +2 -1
  210. package/dist/internal/isObject.d.ts +13 -6
  211. package/dist/internal/isObject.js +14 -7
  212. package/dist/internal/isoYearString.d.ts +21 -0
  213. package/dist/internal/isoYearString.js +27 -0
  214. package/dist/internal/maxPieces.js +2 -1
  215. package/dist/internal/normalizeTimeZone.d.ts +4 -1
  216. package/dist/internal/normalizeTimeZone.js +4 -1
  217. package/dist/internal/operatingSchedule.d.ts +13 -4
  218. package/dist/internal/operatingSchedule.js +146 -58
  219. package/dist/internal/patternToken.d.ts +10 -3
  220. package/dist/internal/patternToken.js +31 -12
  221. package/dist/internal/readDurationUnits.d.ts +34 -0
  222. package/dist/internal/readDurationUnits.js +78 -0
  223. package/dist/internal/readSetFields.d.ts +50 -0
  224. package/dist/internal/readSetFields.js +179 -0
  225. package/dist/internal/resolveRelativeUnit.d.ts +1 -1
  226. package/dist/internal/resolveRelativeUnit.js +1 -1
  227. package/dist/internal/resolveUnixIntervalPair.d.ts +8 -2
  228. package/dist/internal/resolveUnixIntervalPair.js +11 -7
  229. package/dist/internal/startOrEndOfUnix.d.ts +2 -1
  230. package/dist/internal/startOrEndOfUnix.js +9 -6
  231. package/dist/internal/twoDigitYear.d.ts +19 -0
  232. package/dist/internal/twoDigitYear.js +22 -0
  233. package/dist/internal/unixEpochValue.js +3 -2
  234. package/dist/internal/unixWallClock.d.ts +24 -0
  235. package/dist/internal/unixWallClock.js +35 -0
  236. package/dist/internal/utcWallClock.d.ts +20 -0
  237. package/dist/internal/utcWallClock.js +32 -0
  238. package/dist/internal/yearWindowStart.d.ts +28 -0
  239. package/dist/internal/yearWindowStart.js +52 -0
  240. package/dist/internal/zoneBucketCap.d.ts +18 -0
  241. package/dist/internal/zoneBucketCap.js +64 -0
  242. package/dist/internal/zoneFrame.d.ts +180 -0
  243. package/dist/internal/zoneFrame.js +221 -0
  244. package/dist/internal/zonedNowUnitValue.d.ts +7 -4
  245. package/dist/internal/zonedNowUnitValue.js +8 -4
  246. package/dist/internal/zonedWallClockDifference.js +4 -4
  247. package/dist/internal/zonedWallClockOperations.d.ts +5 -2
  248. package/dist/internal/zonedWallClockOperations.js +7 -10
  249. package/dist/plain/calculate/addDate.js +4 -7
  250. package/dist/plain/calculate/addDateTime.js +4 -7
  251. package/dist/plain/calculate/addTime.js +4 -7
  252. package/dist/plain/calculate/endOfTime.d.ts +1 -1
  253. package/dist/plain/calculate/setDate.d.ts +20 -3
  254. package/dist/plain/calculate/setDate.js +27 -7
  255. package/dist/plain/calculate/setDateTime.d.ts +15 -3
  256. package/dist/plain/calculate/setDateTime.js +22 -7
  257. package/dist/plain/calculate/setTime.d.ts +13 -1
  258. package/dist/plain/calculate/setTime.js +21 -6
  259. package/dist/plain/calculate/startOfTime.d.ts +1 -1
  260. package/dist/plain/calculate/subtractDate.js +4 -7
  261. package/dist/plain/calculate/subtractDateTime.js +4 -7
  262. package/dist/plain/calculate/subtractTime.js +4 -7
  263. package/dist/plain/format/formatCalendar.js +2 -1
  264. package/dist/plain/format/formatRelativeDate.js +2 -1
  265. package/dist/plain/format/formatRelativeDateTime.js +2 -1
  266. package/dist/plain/format/formatRelativeTime.js +2 -1
  267. package/dist/plain/format/{formatSql.d.ts → formatSqlDateTime.d.ts} +7 -7
  268. package/dist/plain/format/{formatSql.js → formatSqlDateTime.js} +7 -7
  269. package/dist/plain/format/index.d.ts +1 -1
  270. package/dist/plain/format/index.js +1 -1
  271. package/dist/plain/get/getNowUnit.d.ts +2 -0
  272. package/dist/plain/get/getNowUnit.js +2 -0
  273. package/dist/plain/get/getYear.d.ts +2 -0
  274. package/dist/plain/get/getYear.js +4 -3
  275. package/dist/plain/interval/intervalXorAllDate.js +2 -2
  276. package/dist/plain/interval/intervalXorAllDateTime.js +2 -2
  277. package/dist/plain/interval/intervalXorAllTime.js +2 -2
  278. package/dist/plain/interval/mergeIntervalsDate.js +2 -2
  279. package/dist/plain/interval/mergeIntervalsDateTime.js +2 -2
  280. package/dist/plain/interval/mergeIntervalsTime.js +2 -2
  281. package/dist/plain/parse/index.d.ts +1 -1
  282. package/dist/plain/parse/index.js +1 -1
  283. package/dist/plain/parse/parseDateTimeWithPattern.d.ts +16 -3
  284. package/dist/plain/parse/parseDateTimeWithPattern.js +20 -5
  285. package/dist/plain/parse/parseDateWithPattern.d.ts +17 -3
  286. package/dist/plain/parse/parseDateWithPattern.js +21 -5
  287. package/dist/plain/parse/{parseSql.d.ts → parseSqlDateTime.d.ts} +8 -8
  288. package/dist/plain/parse/{parseSql.js → parseSqlDateTime.js} +8 -8
  289. package/dist/plain/parse/parseTimeWithPattern.js +1 -0
  290. package/dist/plain/parse/parseUnitFromDate.d.ts +3 -0
  291. package/dist/plain/parse/parseUnitFromDate.js +5 -1
  292. package/dist/plain/parse/parseUnitFromDateTime.d.ts +3 -0
  293. package/dist/plain/parse/parseUnitFromDateTime.js +5 -1
  294. package/dist/plain/parse/parseYearFromDate.d.ts +5 -2
  295. package/dist/plain/parse/parseYearFromDate.js +7 -3
  296. package/dist/plain/parse/parseYearFromDateTime.d.ts +4 -2
  297. package/dist/plain/parse/parseYearFromDateTime.js +6 -3
  298. package/dist/plain/validate/index.d.ts +1 -0
  299. package/dist/plain/validate/index.js +1 -0
  300. package/dist/plain/validate/isValidSqlDateTime.d.ts +33 -0
  301. package/dist/plain/validate/isValidSqlDateTime.js +36 -0
  302. package/dist/precision/convert/fromNanoseconds.d.ts +9 -3
  303. package/dist/precision/convert/fromNanoseconds.js +9 -3
  304. package/dist/regex/epcis.d.ts +60 -0
  305. package/dist/regex/epcis.js +60 -0
  306. package/dist/regex/http-date.d.ts +6 -4
  307. package/dist/regex/http-date.js +6 -4
  308. package/dist/regex/index.d.ts +1 -0
  309. package/dist/regex/index.js +1 -0
  310. package/dist/regex/rfc-2822.d.ts +2 -0
  311. package/dist/regex/rfc-2822.js +2 -0
  312. package/dist/regex/rfc-3339.d.ts +3 -1
  313. package/dist/regex/rfc-3339.js +3 -1
  314. package/dist/regex/sql-date-time.d.ts +2 -1
  315. package/dist/regex/sql-date-time.js +2 -1
  316. package/dist/regex/time-zone-like.d.ts +3 -2
  317. package/dist/regex/time-zone-like.js +3 -2
  318. package/dist/regex/utc-offset.d.ts +2 -1
  319. package/dist/regex/utc-offset.js +2 -1
  320. package/dist/transport/calculate/crossingTime.d.ts +6 -1
  321. package/dist/transport/calculate/crossingTime.js +6 -1
  322. package/dist/transport/calculate/cutoffAt.d.ts +6 -1
  323. package/dist/transport/calculate/cutoffAt.js +2 -0
  324. package/dist/transport/calculate/cutoffSchedule.d.ts +6 -1
  325. package/dist/transport/calculate/cutoffSchedule.js +2 -0
  326. package/dist/transport/calculate/dwellTime.d.ts +6 -1
  327. package/dist/transport/calculate/dwellTime.js +6 -1
  328. package/dist/transport/calculate/scheduleDelivery.d.ts +13 -5
  329. package/dist/transport/calculate/scheduleDelivery.js +6 -1
  330. package/dist/transport/convert/etaAtZone.d.ts +6 -1
  331. package/dist/transport/convert/etaAtZone.js +6 -1
  332. package/dist/types/business-calendar.d.ts +5 -4
  333. package/dist/types/duty.d.ts +777 -0
  334. package/dist/types/duty.js +0 -0
  335. package/dist/types/edi.d.ts +407 -0
  336. package/dist/types/edi.js +0 -0
  337. package/dist/types/epcis.d.ts +25 -0
  338. package/dist/types/epcis.js +0 -0
  339. package/dist/types/exact-duration-unit.d.ts +8 -0
  340. package/dist/types/exact-duration-unit.js +0 -0
  341. package/dist/types/free-time-options.d.ts +4 -3
  342. package/dist/types/index.d.ts +5 -0
  343. package/dist/types/index.js +5 -0
  344. package/dist/types/operating-schedule.d.ts +3 -2
  345. package/dist/types/two-digit-year.d.ts +23 -0
  346. package/dist/types/two-digit-year.js +0 -0
  347. package/dist/types/zone-bucket-unit.d.ts +1 -1
  348. package/dist/unix/calculate/addUnix.d.ts +11 -2
  349. package/dist/unix/calculate/addUnix.js +14 -11
  350. package/dist/unix/calculate/diffUnix.d.ts +10 -2
  351. package/dist/unix/calculate/diffUnix.js +11 -6
  352. package/dist/unix/calculate/diffUnixAsDuration.d.ts +10 -2
  353. package/dist/unix/calculate/diffUnixAsDuration.js +10 -5
  354. package/dist/unix/calculate/endOfQuarterForUnix.d.ts +10 -2
  355. package/dist/unix/calculate/endOfQuarterForUnix.js +6 -0
  356. package/dist/unix/calculate/endOfUnix.d.ts +11 -2
  357. package/dist/unix/calculate/endOfUnix.js +7 -0
  358. package/dist/unix/calculate/isBetweenUnix.d.ts +3 -2
  359. package/dist/unix/calculate/isBetweenUnix.js +3 -3
  360. package/dist/unix/calculate/roundUnix.d.ts +10 -2
  361. package/dist/unix/calculate/roundUnix.js +13 -6
  362. package/dist/unix/calculate/setUnix.d.ts +25 -5
  363. package/dist/unix/calculate/setUnix.js +33 -12
  364. package/dist/unix/calculate/startOfQuarterForUnix.d.ts +10 -2
  365. package/dist/unix/calculate/startOfQuarterForUnix.js +6 -0
  366. package/dist/unix/calculate/startOfUnix.d.ts +11 -2
  367. package/dist/unix/calculate/startOfUnix.js +7 -0
  368. package/dist/unix/calculate/subtractUnix.d.ts +10 -2
  369. package/dist/unix/calculate/subtractUnix.js +13 -11
  370. package/dist/unix/compare/areUnixEqualBy.d.ts +11 -2
  371. package/dist/unix/compare/areUnixEqualBy.js +7 -0
  372. package/dist/unix/convert/convertUnixToPlainDate.d.ts +5 -2
  373. package/dist/unix/convert/convertUnixToPlainDate.js +5 -4
  374. package/dist/unix/convert/convertUnixToPlainDateTime.d.ts +5 -2
  375. package/dist/unix/convert/convertUnixToPlainDateTime.js +5 -4
  376. package/dist/unix/convert/convertUnixToPlainTime.d.ts +5 -2
  377. package/dist/unix/convert/convertUnixToPlainTime.js +5 -4
  378. package/dist/unix/convert/convertUnixToZoned.d.ts +5 -1
  379. package/dist/unix/convert/convertUnixToZoned.js +5 -1
  380. package/dist/unix/format/formatCalendarUnix.d.ts +6 -2
  381. package/dist/unix/format/formatCalendarUnix.js +6 -1
  382. package/dist/unix/format/formatRelativeUnix.d.ts +11 -3
  383. package/dist/unix/format/formatRelativeUnix.js +13 -5
  384. package/dist/unix/format/formatUnix.d.ts +7 -2
  385. package/dist/unix/format/formatUnix.js +4 -0
  386. package/dist/unix/get/getUnixDay.d.ts +1 -3
  387. package/dist/unix/get/getUnixDay.js +5 -12
  388. package/dist/unix/get/getUnixHour.d.ts +1 -3
  389. package/dist/unix/get/getUnixHour.js +5 -12
  390. package/dist/unix/get/getUnixMicrosecond.d.ts +1 -3
  391. package/dist/unix/get/getUnixMicrosecond.js +4 -11
  392. package/dist/unix/get/getUnixMillisecond.d.ts +1 -3
  393. package/dist/unix/get/getUnixMillisecond.js +5 -12
  394. package/dist/unix/get/getUnixMinute.d.ts +1 -3
  395. package/dist/unix/get/getUnixMinute.js +5 -12
  396. package/dist/unix/get/getUnixMonth.d.ts +1 -3
  397. package/dist/unix/get/getUnixMonth.js +5 -12
  398. package/dist/unix/get/getUnixNanosecond.d.ts +1 -3
  399. package/dist/unix/get/getUnixNanosecond.js +4 -11
  400. package/dist/unix/get/getUnixNowUnit.d.ts +2 -0
  401. package/dist/unix/get/getUnixNowUnit.js +2 -0
  402. package/dist/unix/get/getUnixSecond.d.ts +1 -3
  403. package/dist/unix/get/getUnixSecond.js +5 -12
  404. package/dist/unix/get/getUnixYear.d.ts +3 -3
  405. package/dist/unix/get/getUnixYear.js +5 -12
  406. package/dist/unix/interval/intervalCountUnix.d.ts +11 -2
  407. package/dist/unix/interval/intervalCountUnix.js +7 -0
  408. package/dist/unix/interval/intervalFromDurationUnix.d.ts +10 -2
  409. package/dist/unix/interval/intervalFromDurationUnix.js +12 -7
  410. package/dist/unix/interval/intervalLengthUnix.d.ts +10 -2
  411. package/dist/unix/interval/intervalLengthUnix.js +6 -0
  412. package/dist/unix/interval/intervalOverlappingDaysUnix.d.ts +10 -2
  413. package/dist/unix/interval/intervalOverlappingDaysUnix.js +10 -5
  414. package/dist/unix/interval/splitIntervalByUnitUnix.d.ts +10 -2
  415. package/dist/unix/interval/splitIntervalByUnitUnix.js +12 -6
  416. package/dist/unix/parse/parseDateFromUnix.d.ts +4 -2
  417. package/dist/unix/parse/parseDateFromUnix.js +3 -3
  418. package/dist/unix/parse/parseDayFromUnix.d.ts +4 -2
  419. package/dist/unix/parse/parseDayOfWeekFromUnix.d.ts +4 -2
  420. package/dist/unix/parse/parseDayOfWeekFromUnix.js +2 -2
  421. package/dist/unix/parse/parseHourFromUnix.d.ts +4 -2
  422. package/dist/unix/parse/parseMicrosecondFromUnix.d.ts +4 -2
  423. package/dist/unix/parse/parseMillisecondFromUnix.d.ts +4 -2
  424. package/dist/unix/parse/parseMinuteFromUnix.d.ts +4 -2
  425. package/dist/unix/parse/parseMonthFromUnix.d.ts +4 -2
  426. package/dist/unix/parse/parseNanosecondFromUnix.d.ts +4 -2
  427. package/dist/unix/parse/parseSecondFromUnix.d.ts +4 -2
  428. package/dist/unix/parse/parseTimeFromUnix.d.ts +5 -2
  429. package/dist/unix/parse/parseTimeFromUnix.js +4 -3
  430. package/dist/unix/parse/parseUnitFromUnix.d.ts +9 -3
  431. package/dist/unix/parse/parseUnitFromUnix.js +21 -14
  432. package/dist/unix/parse/parseWeekFromUnix.d.ts +3 -2
  433. package/dist/unix/parse/parseWeekFromUnix.js +4 -4
  434. package/dist/unix/parse/parseYearFromUnix.d.ts +8 -3
  435. package/dist/unix/parse/parseYearFromUnix.js +4 -1
  436. package/dist/unix/validate/isValidUnixUnit.d.ts +1 -1
  437. package/dist/utc/calculate/addUtc.js +4 -7
  438. package/dist/utc/calculate/setUtc.d.ts +16 -3
  439. package/dist/utc/calculate/setUtc.js +22 -8
  440. package/dist/utc/calculate/subtractUtc.js +4 -7
  441. package/dist/utc/convert/convertUtcToPlainDate.d.ts +8 -2
  442. package/dist/utc/convert/convertUtcToPlainDate.js +10 -7
  443. package/dist/utc/convert/convertUtcToPlainDateTime.d.ts +9 -2
  444. package/dist/utc/convert/convertUtcToPlainDateTime.js +12 -13
  445. package/dist/utc/convert/convertUtcToPlainTime.d.ts +5 -2
  446. package/dist/utc/convert/convertUtcToPlainTime.js +7 -6
  447. package/dist/utc/convert/convertUtcToZoned.d.ts +5 -1
  448. package/dist/utc/convert/convertUtcToZoned.js +5 -1
  449. package/dist/utc/format/formatCalendarUtc.d.ts +6 -2
  450. package/dist/utc/format/formatCalendarUtc.js +6 -1
  451. package/dist/utc/format/{formatHttp.d.ts → formatHttpDate.d.ts} +7 -7
  452. package/dist/utc/format/{formatHttp.js → formatHttpDate.js} +7 -7
  453. package/dist/utc/format/formatRelativeUtc.d.ts +11 -3
  454. package/dist/utc/format/formatRelativeUtc.js +13 -5
  455. package/dist/utc/format/formatUtc.d.ts +7 -2
  456. package/dist/utc/format/formatUtc.js +4 -0
  457. package/dist/utc/format/index.d.ts +1 -1
  458. package/dist/utc/format/index.js +1 -1
  459. package/dist/utc/get/getUtcDay.d.ts +1 -3
  460. package/dist/utc/get/getUtcDay.js +5 -12
  461. package/dist/utc/get/getUtcHour.d.ts +1 -3
  462. package/dist/utc/get/getUtcHour.js +5 -12
  463. package/dist/utc/get/getUtcMicrosecond.d.ts +1 -3
  464. package/dist/utc/get/getUtcMicrosecond.js +4 -11
  465. package/dist/utc/get/getUtcMillisecond.d.ts +1 -3
  466. package/dist/utc/get/getUtcMillisecond.js +5 -12
  467. package/dist/utc/get/getUtcMinute.d.ts +1 -3
  468. package/dist/utc/get/getUtcMinute.js +5 -12
  469. package/dist/utc/get/getUtcMonth.d.ts +1 -3
  470. package/dist/utc/get/getUtcMonth.js +5 -12
  471. package/dist/utc/get/getUtcNanosecond.d.ts +1 -3
  472. package/dist/utc/get/getUtcNanosecond.js +4 -11
  473. package/dist/utc/get/getUtcNow.d.ts +1 -3
  474. package/dist/utc/get/getUtcNow.js +2 -9
  475. package/dist/utc/get/getUtcNowUnit.d.ts +2 -0
  476. package/dist/utc/get/getUtcNowUnit.js +2 -0
  477. package/dist/utc/get/getUtcSecond.d.ts +1 -3
  478. package/dist/utc/get/getUtcSecond.js +5 -12
  479. package/dist/utc/get/getUtcYear.d.ts +3 -3
  480. package/dist/utc/get/getUtcYear.js +5 -12
  481. package/dist/utc/interval/intervalXorAllUtc.js +2 -2
  482. package/dist/utc/interval/mergeIntervalsUtc.js +2 -2
  483. package/dist/utc/parse/index.d.ts +1 -1
  484. package/dist/utc/parse/index.js +1 -1
  485. package/dist/utc/parse/parseDateFromUtc.d.ts +4 -2
  486. package/dist/utc/parse/parseDateFromUtc.js +2 -2
  487. package/dist/utc/parse/parseDayFromUtc.d.ts +4 -2
  488. package/dist/utc/parse/parseDayFromUtc.js +2 -2
  489. package/dist/utc/parse/parseDayOfWeekFromUtc.d.ts +4 -2
  490. package/dist/utc/parse/parseDayOfWeekFromUtc.js +4 -4
  491. package/dist/utc/parse/parseHourFromUtc.d.ts +4 -2
  492. package/dist/utc/parse/parseHourFromUtc.js +2 -2
  493. package/dist/utc/parse/{parseHttp.d.ts → parseHttpDate.d.ts} +12 -12
  494. package/dist/utc/parse/{parseHttp.js → parseHttpDate.js} +12 -12
  495. package/dist/utc/parse/parseMicrosecondFromUtc.d.ts +4 -2
  496. package/dist/utc/parse/parseMicrosecondFromUtc.js +2 -2
  497. package/dist/utc/parse/parseMillisecondFromUtc.d.ts +4 -2
  498. package/dist/utc/parse/parseMillisecondFromUtc.js +2 -2
  499. package/dist/utc/parse/parseMinuteFromUtc.d.ts +4 -2
  500. package/dist/utc/parse/parseMinuteFromUtc.js +2 -2
  501. package/dist/utc/parse/parseMonthFromUtc.d.ts +4 -2
  502. package/dist/utc/parse/parseMonthFromUtc.js +2 -2
  503. package/dist/utc/parse/parseNanosecondFromUtc.d.ts +4 -2
  504. package/dist/utc/parse/parseNanosecondFromUtc.js +2 -2
  505. package/dist/utc/parse/parseSecondFromUtc.d.ts +4 -2
  506. package/dist/utc/parse/parseSecondFromUtc.js +2 -2
  507. package/dist/utc/parse/parseTimeFromUtc.d.ts +5 -2
  508. package/dist/utc/parse/parseTimeFromUtc.js +5 -4
  509. package/dist/utc/parse/parseUnitFromUtc.d.ts +10 -3
  510. package/dist/utc/parse/parseUnitFromUtc.js +11 -5
  511. package/dist/utc/parse/parseWeekFromUtc.d.ts +4 -2
  512. package/dist/utc/parse/parseWeekFromUtc.js +4 -4
  513. package/dist/utc/parse/parseYearFromUtc.d.ts +8 -4
  514. package/dist/utc/parse/parseYearFromUtc.js +8 -5
  515. package/dist/utc/validate/index.d.ts +2 -0
  516. package/dist/utc/validate/index.js +2 -0
  517. package/dist/utc/validate/isValidHttpDate.d.ts +35 -0
  518. package/dist/utc/validate/isValidHttpDate.js +38 -0
  519. package/dist/utc/validate/isValidUtc.d.ts +4 -0
  520. package/dist/utc/validate/isValidUtc.js +4 -0
  521. package/dist/utc/validate/isValidUtcTimestamp.d.ts +43 -0
  522. package/dist/utc/validate/isValidUtcTimestamp.js +48 -0
  523. package/dist/zoned/calculate/addZoned.js +4 -7
  524. package/dist/zoned/calculate/setZoned.d.ts +19 -5
  525. package/dist/zoned/calculate/setZoned.js +26 -9
  526. package/dist/zoned/calculate/subtractZoned.js +4 -7
  527. package/dist/zoned/convert/convertPlainDateTimeToZoned.d.ts +4 -1
  528. package/dist/zoned/convert/convertPlainDateTimeToZoned.js +4 -1
  529. package/dist/zoned/convert/convertZonedToZoned.d.ts +5 -1
  530. package/dist/zoned/convert/convertZonedToZoned.js +5 -1
  531. package/dist/zoned/format/formatCalendarZoned.js +2 -1
  532. package/dist/zoned/format/formatRelativeZoned.js +2 -1
  533. package/dist/zoned/format/formatTimeZoneName.d.ts +5 -1
  534. package/dist/zoned/format/formatTimeZoneName.js +5 -1
  535. package/dist/zoned/get/getDstTransitions.d.ts +5 -3
  536. package/dist/zoned/get/getDstTransitions.js +12 -7
  537. package/dist/zoned/get/getSystemTimeZone.d.ts +3 -1
  538. package/dist/zoned/get/getSystemTimeZone.js +5 -2
  539. package/dist/zoned/get/getTimeZoneOffset.d.ts +10 -2
  540. package/dist/zoned/get/getTimeZoneOffset.js +18 -5
  541. package/dist/zoned/get/getZonedDay.d.ts +2 -1
  542. package/dist/zoned/get/getZonedDay.js +6 -7
  543. package/dist/zoned/get/getZonedDayOfWeek.d.ts +2 -1
  544. package/dist/zoned/get/getZonedDayOfWeek.js +6 -5
  545. package/dist/zoned/get/getZonedHour.d.ts +2 -1
  546. package/dist/zoned/get/getZonedHour.js +6 -7
  547. package/dist/zoned/get/getZonedMicrosecond.d.ts +2 -1
  548. package/dist/zoned/get/getZonedMicrosecond.js +6 -5
  549. package/dist/zoned/get/getZonedMillisecond.d.ts +2 -1
  550. package/dist/zoned/get/getZonedMillisecond.js +6 -7
  551. package/dist/zoned/get/getZonedMinute.d.ts +2 -1
  552. package/dist/zoned/get/getZonedMinute.js +6 -7
  553. package/dist/zoned/get/getZonedMonth.d.ts +2 -1
  554. package/dist/zoned/get/getZonedMonth.js +6 -7
  555. package/dist/zoned/get/getZonedNanosecond.d.ts +2 -1
  556. package/dist/zoned/get/getZonedNanosecond.js +6 -5
  557. package/dist/zoned/get/getZonedNow.d.ts +5 -1
  558. package/dist/zoned/get/getZonedNow.js +5 -1
  559. package/dist/zoned/get/getZonedNowUnit.d.ts +6 -3
  560. package/dist/zoned/get/getZonedNowUnit.js +10 -7
  561. package/dist/zoned/get/getZonedSecond.d.ts +2 -1
  562. package/dist/zoned/get/getZonedSecond.js +6 -7
  563. package/dist/zoned/get/getZonedToday.d.ts +2 -1
  564. package/dist/zoned/get/getZonedToday.js +6 -5
  565. package/dist/zoned/get/getZonedWeekOfYear.d.ts +2 -1
  566. package/dist/zoned/get/getZonedWeekOfYear.js +6 -5
  567. package/dist/zoned/get/getZonedYear.d.ts +4 -1
  568. package/dist/zoned/get/getZonedYear.js +9 -7
  569. package/dist/zoned/interval/intervalXorAllZoned.js +2 -2
  570. package/dist/zoned/interval/mergeIntervalsZoned.js +2 -2
  571. package/dist/zoned/parse/parseUnitFromZoned.d.ts +4 -1
  572. package/dist/zoned/parse/parseUnitFromZoned.js +5 -1
  573. package/dist/zoned/parse/parseYearFromZoned.d.ts +4 -2
  574. package/dist/zoned/parse/parseYearFromZoned.js +6 -3
  575. package/dist/zoned/validate/hasDaylightSaving.d.ts +4 -2
  576. package/dist/zoned/validate/hasDaylightSaving.js +13 -7
  577. package/dist/zoned/validate/index.d.ts +2 -0
  578. package/dist/zoned/validate/index.js +2 -0
  579. package/dist/zoned/validate/isValidRfc2822DateTime.d.ts +32 -0
  580. package/dist/zoned/validate/isValidRfc2822DateTime.js +35 -0
  581. package/dist/zoned/validate/isValidRfc3339DateTime.d.ts +31 -0
  582. package/dist/zoned/validate/isValidRfc3339DateTime.js +34 -0
  583. package/dist/zoned/validate/isValidTimeZone.d.ts +5 -1
  584. package/dist/zoned/validate/isValidTimeZone.js +6 -2
  585. package/package.json +50 -1
  586. package/skills/gmt-arithmetic/SKILL.md +99 -12
  587. package/skills/gmt-basics/SKILL.md +57 -15
  588. package/skills/gmt-integration/SKILL.md +24 -9
  589. package/skills/gmt-timezone/SKILL.md +134 -29
  590. package/dist/internal/unixZonedDateTime.d.ts +0 -22
  591. package/dist/internal/unixZonedDateTime.js +0 -32
  592. package/dist/internal/utcZonedDateTime.d.ts +0 -19
  593. package/dist/internal/utcZonedDateTime.js +0 -31
@@ -0,0 +1,384 @@
1
+ /** What each half of a value of each kind is: a period of dates is two dates. */
2
+ const VALUE_KIND = {
3
+ date: "date",
4
+ time: "time",
5
+ dateTime: "dateTime",
6
+ offsetDateTime: "offsetDateTime",
7
+ datePeriod: "date",
8
+ dateTimePeriod: "dateTime",
9
+ dateRange: "date",
10
+ dateTimeRange: "dateTime",
11
+ };
12
+ /** Hour, 00–23. */
13
+ const HH = "([01][0-9]|2[0-3])";
14
+ /** Minute, 00–59. */
15
+ const MI = "([0-5][0-9])";
16
+ /** The regex source of each part: one capture group, the field's whole range of digits. */
17
+ const FRAGMENT = {
18
+ // Century and year: four digits.
19
+ CCYY: "(\\d{4})",
20
+ // Month, 01–12.
21
+ MM: "(0[1-9]|1[0-2])",
22
+ // Day of month, 01–31.
23
+ DD: "(0[1-9]|[12][0-9]|3[01])",
24
+ HH,
25
+ MI,
26
+ // Second, 00–59. `60` does not match: GMT rejects a leap second, which Temporal would read as 59.
27
+ SS: "([0-5][0-9])",
28
+ // Element 337: "D = tenths (0-9)". One digit.
29
+ SD: "(\\d)",
30
+ // Element 337: "DD = hundredths (00-99)". Two digits.
31
+ SDD: "(\\d{2})",
32
+ // 2379 codes 205 and 208: "Z is plus (+) or minus (-)", then hours and minutes.
33
+ ZS: "([+-])",
34
+ ZH: HH,
35
+ ZM: MI,
36
+ // 2379 codes 303 and 304: a signed hour `[+-]HH`, 00–23 (Rec 7 ¶12), or the literals `UTC` and
37
+ // `GMT`. Nothing else is read: no UN/EDIFACT text defines a zone abbreviation, and a sign or a
38
+ // digit outside a valid signed hour (`+24`, `000`) is a broken offset (GMT rule; see the file
39
+ // header).
40
+ ZZZ: "([+-](?:[01][0-9]|2[0-3])|UTC|GMT)",
41
+ };
42
+ /** The `ZHHMM` offset of 2379 codes 205 and 208: sign, hours, minutes. */
43
+ const ZHHMM = ["ZS", "ZH", "ZM"];
44
+ /** The parts' sources joined, anchored, flagless; a period's halves joined by `join`. */
45
+ function grammarOf(layout, join) {
46
+ const source = (parts) => parts.map((part) => FRAGMENT[part]).join("");
47
+ const end = layout.end === undefined ? "" : `${join}${source(layout.end)}`;
48
+ return new RegExp(`^${source(layout.start)}${end}$`);
49
+ }
50
+ /** A grammar table from a layout table, in the layout table's key order. */
51
+ function grammarsOf(layouts, join) {
52
+ const grammars = {};
53
+ for (const code of Object.keys(layouts)) {
54
+ grammars[code] = grammarOf(layouts[code], join);
55
+ }
56
+ return grammars;
57
+ }
58
+ /**
59
+ * The 11 UNTDID 2379 codes GMT reads, in directory order: a date (`102`), a date and time
60
+ * (`203`, `204`), a date and time with a `ZHHMM` offset (`205`, `208`), a date and time with
61
+ * three zone characters (`303`, `304`), a time (`401`, `402`) and a period (`718`, `719`).
62
+ *
63
+ * Every other 2379 code returns the sentinel; the file header lists the ones cut and why.
64
+ */
65
+ export const EDIFACT_DTM_FORMATS = [
66
+ "102",
67
+ "203",
68
+ "204",
69
+ "205",
70
+ "208",
71
+ "303",
72
+ "304",
73
+ "401",
74
+ "402",
75
+ "718",
76
+ "719",
77
+ ];
78
+ /**
79
+ * UNTDID 2379 code → its kind and its value's parts. Typed kind by kind from the public unions,
80
+ * so a missing code, and a code filed under a kind its union does not name, both fail typecheck.
81
+ */
82
+ const EDIFACT_DTM_LAYOUT = {
83
+ // 102 CCYYMMDD — "Calendar date: C = Century ; Y = Year ; M = Month ; D = Day."
84
+ "102": { kind: "date", start: ["CCYY", "MM", "DD"] },
85
+ // 203 CCYYMMDDHHMM — "Calendar date including time with minutes"
86
+ "203": { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI"] },
87
+ // 204 CCYYMMDDHHMMSS — "Calendar date including time with seconds"
88
+ "204": { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI", "SS"] },
89
+ // 205 CCYYMMDDHHMMZHHMM — "Calendar date including time and time zone expressed in hours and minutes."
90
+ "205": {
91
+ kind: "offsetDateTime",
92
+ start: ["CCYY", "MM", "DD", "HH", "MI", ...ZHHMM],
93
+ },
94
+ // 208 CCYYMMDDHHMMSSZHHMM — "Calendar date including time with seconds, with Time Zone: … Z = leading plus/minus sign, HHMM = difference to UTC in Hours and Minutes." (D.12A on)
95
+ "208": {
96
+ kind: "offsetDateTime",
97
+ start: ["CCYY", "MM", "DD", "HH", "MI", "SS", ...ZHHMM],
98
+ },
99
+ // 303 CCYYMMDDHHMMZZZ — "See 203 plus Z=Time zone."
100
+ "303": {
101
+ kind: "offsetDateTime",
102
+ start: ["CCYY", "MM", "DD", "HH", "MI", "ZZZ"],
103
+ },
104
+ // 304 CCYYMMDDHHMMSSZZZ — "See 204 plus Z=Time zone."
105
+ "304": {
106
+ kind: "offsetDateTime",
107
+ start: ["CCYY", "MM", "DD", "HH", "MI", "SS", "ZZZ"],
108
+ },
109
+ // 401 HHMM — "Time without seconds: H = Hour; m = Minute."
110
+ "401": { kind: "time", start: ["HH", "MI"] },
111
+ // 402 HHMMSS — "Time with seconds: H = Hour; m = Minute; s = Seconds."
112
+ "402": { kind: "time", start: ["HH", "MI", "SS"] },
113
+ // 718 CCYYMMDD-CCYYMMDD — "A period of time specified by giving the start date followed by the end date (both including century)."
114
+ "718": {
115
+ kind: "datePeriod",
116
+ start: ["CCYY", "MM", "DD"],
117
+ end: ["CCYY", "MM", "DD"],
118
+ },
119
+ // 719 CCYYMMDDHHMM-CCYYMMDDHHMM — "A period of time which includes the century, year, month, day, hour and minute."
120
+ "719": {
121
+ kind: "dateTimePeriod",
122
+ start: ["CCYY", "MM", "DD", "HH", "MI"],
123
+ end: ["CCYY", "MM", "DD", "HH", "MI"],
124
+ },
125
+ };
126
+ /**
127
+ * UNTDID 2379 code → the anchored, flagless grammar of its value. A period's halves are run
128
+ * together with nothing between them: every directory read gives a period "without hyphen" (the
129
+ * file header quotes each entry).
130
+ */
131
+ export const EDIFACT_DTM_GRAMMAR = grammarsOf(EDIFACT_DTM_LAYOUT, "");
132
+ /**
133
+ * The 10 X12 1250 codes GMT reads: a date (`D8`, `DB`), a date and time (`DT`, `RTS`), a time
134
+ * (`TM`, `TS`), a range of dates (`RD8`, `RD`) and a range of date-times (`RDT`, `DTS`).
135
+ *
136
+ * The other 32 of the 42 codes return the sentinel; the file header lists the ones cut and why.
137
+ * `TS` is also a code of data element 623, with an unrelated meaning there.
138
+ */
139
+ export const X12_DATE_TIME_PERIOD_FORMATS = ["D8", "DB", "DT", "RTS", "TM", "TS", "RD8", "RD", "RDT", "DTS"];
140
+ /**
141
+ * X12 1250 code → its kind and its value's parts. Typed kind by kind from the public unions, so
142
+ * a missing code, and a code filed under a kind its union does not name, both fail typecheck.
143
+ */
144
+ const X12_DATE_TIME_PERIOD_LAYOUT = {
145
+ // D8 CCYYMMDD — "Date Expressed in Format CCYYMMDD"
146
+ D8: { kind: "date", start: ["CCYY", "MM", "DD"] },
147
+ // DB MMDDCCYY — "Date Expressed in Format MMDDCCYY"
148
+ DB: { kind: "date", start: ["MM", "DD", "CCYY"] },
149
+ // DT CCYYMMDDHHMM — "Date and Time Expressed in Format CCYYMMDDHHMM"
150
+ DT: { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI"] },
151
+ // RTS CCYYMMDDHHMMSS — "Date and Time Expressed in Format CCYYMMDDHHMMSS" (one date-time despite the R)
152
+ RTS: { kind: "dateTime", start: ["CCYY", "MM", "DD", "HH", "MI", "SS"] },
153
+ // TM HHMM — "Time Expressed in Format HHMM"
154
+ TM: { kind: "time", start: ["HH", "MI"] },
155
+ // TS HHMMSS — "Time Expressed in Format HHMMSS"
156
+ TS: { kind: "time", start: ["HH", "MI", "SS"] },
157
+ // RD8 CCYYMMDD-CCYYMMDD — "Range of Dates Expressed in Format CCYYMMDD-CCYYMMDD"
158
+ RD8: {
159
+ kind: "dateRange",
160
+ start: ["CCYY", "MM", "DD"],
161
+ end: ["CCYY", "MM", "DD"],
162
+ },
163
+ // RD MMDDCCYY-MMDDCCYY — "Range of Dates Expressed in Format MMDDCCYY-MMDDCCYY"
164
+ RD: {
165
+ kind: "dateRange",
166
+ start: ["MM", "DD", "CCYY"],
167
+ end: ["MM", "DD", "CCYY"],
168
+ },
169
+ // RDT CCYYMMDDHHMM-CCYYMMDDHHMM — "Range of Date and Time, Expressed in Format CCYYMMDDHHMM-CCYYMMDDHHMM"
170
+ RDT: {
171
+ kind: "dateTimeRange",
172
+ start: ["CCYY", "MM", "DD", "HH", "MI"],
173
+ end: ["CCYY", "MM", "DD", "HH", "MI"],
174
+ },
175
+ // DTS CCYYMMDDHHMMSS-CCYYMMDDHHMMSS — "Range of Date and Time Expressed in Format CCYYMMDDHHMMSS-CCYYMMDDHHMMSS" (a range despite having no R)
176
+ DTS: {
177
+ kind: "dateTimeRange",
178
+ start: ["CCYY", "MM", "DD", "HH", "MI", "SS"],
179
+ end: ["CCYY", "MM", "DD", "HH", "MI", "SS"],
180
+ },
181
+ };
182
+ /**
183
+ * X12 1250 code → the anchored, flagless grammar of its value. A range's halves are joined by
184
+ * exactly one hyphen, the one X12 transmits.
185
+ */
186
+ export const X12_DATE_TIME_PERIOD_GRAMMAR = grammarsOf(X12_DATE_TIME_PERIOD_LAYOUT, "-");
187
+ /**
188
+ * X12 data element 337 (Time), the time element of `AT7`, `G62` and `DTM-03`: "Time expressed in
189
+ * 24-hour clock time as follows: HHMM, or HHMMSS, or HHMMSSD, or HHMMSSDD, where H = hours
190
+ * (00-23), M = minutes (00-59), S = integer seconds (00-59) and DD = decimal seconds; decimal
191
+ * seconds are expressed as follows: D = tenths (0-9) and DD = hundredths (00-99)", length 4 to 8
192
+ * (release 005010, https://www.stedi.com/edi/x12-005010/element/337).
193
+ *
194
+ * Mask → its parts, keyed by the element's own four masks in the order the definition gives
195
+ * them. Not a 1250 table: the element has no format qualifier, its four- and six-digit forms
196
+ * coincide with `TM` and `TS`, and no 1250 code holds decimal seconds. Typed from the public
197
+ * union, so a missing form fails typecheck.
198
+ */
199
+ export const X12_TIME_ELEMENT_LAYOUT = {
200
+ // HHMM — "H = hours (00-23), M = minutes (00-59)"
201
+ HHMM: { kind: "time", start: ["HH", "MI"] },
202
+ // HHMMSS — "S = integer seconds (00-59)"
203
+ HHMMSS: { kind: "time", start: ["HH", "MI", "SS"] },
204
+ // HHMMSSD — "D = tenths (0-9)"
205
+ HHMMSSD: { kind: "time", start: ["HH", "MI", "SS", "SD"] },
206
+ // HHMMSSDD — "DD = hundredths (00-99)"
207
+ HHMMSSDD: { kind: "time", start: ["HH", "MI", "SS", "SDD"] },
208
+ };
209
+ /**
210
+ * The four forms of X12 data element 337, shortest first: the layout table's own keys, so the
211
+ * list cannot name a form the table lacks.
212
+ */
213
+ export const X12_TIME_ELEMENT_FORMS = Object.keys(X12_TIME_ELEMENT_LAYOUT);
214
+ /**
215
+ * Element 337 form → the anchored, flagless grammar of its value. The four masks have four
216
+ * lengths (4, 6, 7 and 8 digits), so a value fits one form or none, and the reader needs no
217
+ * qualifier to tell them apart.
218
+ */
219
+ export const X12_TIME_ELEMENT_GRAMMAR = grammarsOf(X12_TIME_ELEMENT_LAYOUT, "");
220
+ /**
221
+ * The milliseconds one unit of each decimal-seconds part is worth: a tenth of a second is 100
222
+ * and a hundredth is 10. The reader multiplies by it and the writer divides by it, so the two
223
+ * agree on what `D` and `DD` mean.
224
+ */
225
+ export const MILLISECONDS_PER_DECIMAL_SECOND = { SD: 100, SDD: 10 };
226
+ /**
227
+ * Look a form of X12 data element 337 up by its mask, for the writer
228
+ * (`writeX12TimeElement`), whose caller names the form. The reader (`readX12Time`) is given no
229
+ * form: it tries the grammar of each form in the same table.
230
+ *
231
+ * - Matching is exact and by own key, so `"__proto__"`, `" HHMM"` and `"hhmm"` are not forms.
232
+ * - Null for a data element 1250 code (`TM`, `TS`): a qualifier is not a mask.
233
+ * - Null for a non-string argument.
234
+ *
235
+ * @param form the element's mask: `HHMM`, `HHMMSS`, `HHMMSSD` or `HHMMSSDD`
236
+ * @returns the form's parts in mask order, as a single time, or null
237
+ *
238
+ * @example x12TimeElementLayoutOf("HHMMSSDD") // { kind: "time", start: ["HH", "MI", "SS", "SDD"] }
239
+ * @example x12TimeElementLayoutOf("TS") // null (a 1250 code, not a mask)
240
+ * @example x12TimeElementLayoutOf("__proto__") // null
241
+ */
242
+ export function x12TimeElementLayoutOf(form) {
243
+ return typeof form === "string" &&
244
+ Object.hasOwn(X12_TIME_ELEMENT_LAYOUT, form)
245
+ ? X12_TIME_ELEMENT_LAYOUT[form]
246
+ : null;
247
+ }
248
+ /**
249
+ * The 56 X12 623 codes, release 008010, in dictionary order: `01`–`12` (UTC+1 … UTC+12), `13`–`24`
250
+ * (UTC−12 … UTC−1, descending), `25`–`29` (the half-hour offsets, added in release 006010), then
251
+ * the 27 letter codes. Release 005010 has the 51 codes other than `25`–`29`. Membership is by
252
+ * this list, never by shape. `TS`, `TT`, `CD` and `MD` are also codes of data element 1250, with
253
+ * unrelated meanings there.
254
+ */
255
+ export const X12_TIME_CODES = [
256
+ // fallow-ignore-next-line code-duplication -- the 56 DE 623 codes as a runtime list; `X12TimeCode` in types/edi.ts is the same enumeration in type position
257
+ "01",
258
+ "02",
259
+ "03",
260
+ "04",
261
+ "05",
262
+ "06",
263
+ "07",
264
+ "08",
265
+ "09",
266
+ "10",
267
+ "11",
268
+ "12",
269
+ "13",
270
+ "14",
271
+ "15",
272
+ "16",
273
+ "17",
274
+ "18",
275
+ "19",
276
+ "20",
277
+ "21",
278
+ "22",
279
+ "23",
280
+ "24",
281
+ "25",
282
+ "26",
283
+ "27",
284
+ "28",
285
+ "29",
286
+ "AD",
287
+ "AS",
288
+ "AT",
289
+ "CD",
290
+ "CS",
291
+ "CT",
292
+ "ED",
293
+ "ES",
294
+ "ET",
295
+ "GM",
296
+ "HD",
297
+ "HS",
298
+ "HT",
299
+ "LT",
300
+ "MD",
301
+ "MS",
302
+ "MT",
303
+ "ND",
304
+ "NS",
305
+ "NT",
306
+ "PD",
307
+ "PS",
308
+ "PT",
309
+ "TD",
310
+ "TS",
311
+ "TT",
312
+ "UT",
313
+ ];
314
+ const EDI_CODE_TABLES = {
315
+ edifact: {
316
+ layouts: EDIFACT_DTM_LAYOUT,
317
+ grammars: EDIFACT_DTM_GRAMMAR,
318
+ // UNTDID 2379, every directory read (twelve, from D.93A to D.22B): a period is given
319
+ // "without hyphen".
320
+ rangeSeparator: "",
321
+ },
322
+ x12: {
323
+ layouts: X12_DATE_TIME_PERIOD_LAYOUT,
324
+ grammars: X12_DATE_TIME_PERIOD_GRAMMAR,
325
+ // X12 1250: each range definition gives the format with its hyphen.
326
+ rangeSeparator: "-",
327
+ },
328
+ };
329
+ /**
330
+ * Look a format code up in its standard's tables: the one lookup the classifier, the reader and
331
+ * the writer share.
332
+ *
333
+ * - Matching is exact and by own key, so `"__proto__"`, `" 102"` and `"d8"` are not codes.
334
+ * - Null for a code that is not read (`101`, `209`, `D6`, `UN`), like an unknown code.
335
+ * - Null for a standard that is not `"edifact"` or `"x12"`, and for a non-string argument.
336
+ *
337
+ * @param standard which element the code belongs to
338
+ * @param code the 2379 or 1250 format code
339
+ * @returns the code's kind, layout, grammar and range separator, or null
340
+ *
341
+ * @example ediCodeOf("edifact", "718") // { kind: "datePeriod", valueKind: "date", layout: { kind: "datePeriod", start: ["CCYY", "MM", "DD"], end: [...] }, grammar: /^…$/, rangeSeparator: "" }
342
+ * @example ediCodeOf("x12", "RD8") // { kind: "dateRange", valueKind: "date", layout: {...}, grammar: /^…$/, rangeSeparator: "-" }
343
+ * @example ediCodeOf("edifact", "101") // null (a two-digit year: not read)
344
+ * @example ediCodeOf("edifact", "D8") // null (an X12 code)
345
+ */
346
+ export function ediCodeOf(standard, code) {
347
+ if (typeof standard !== "string" || typeof code !== "string") {
348
+ return null;
349
+ }
350
+ if (!Object.hasOwn(EDI_CODE_TABLES, standard)) {
351
+ return null;
352
+ }
353
+ const table = EDI_CODE_TABLES[standard];
354
+ if (!Object.hasOwn(table.layouts, code)) {
355
+ return null;
356
+ }
357
+ const layout = table.layouts[code];
358
+ const grammar = table.grammars[code];
359
+ return {
360
+ kind: layout.kind,
361
+ valueKind: VALUE_KIND[layout.kind],
362
+ layout,
363
+ grammar,
364
+ rangeSeparator: table.rangeSeparator,
365
+ };
366
+ }
367
+ /**
368
+ * Look a format code up as a code of one kind: null unless the code is in its standard's tables
369
+ * under exactly that kind. Each public function names its own kind here, so a code of another
370
+ * kind (`203` given to a date function) is refused before any value is read.
371
+ *
372
+ * @param standard which element the code belongs to
373
+ * @param kind the kind of value the calling function reads or writes
374
+ * @param code the 2379 or 1250 format code
375
+ * @returns the code's entry, or null when the code is not one of that kind
376
+ *
377
+ * @example ediCodeOfKind("edifact", "date", "102") // { kind: "date", … }
378
+ * @example ediCodeOfKind("edifact", "date", "203") // null (a date-time code)
379
+ * @example ediCodeOfKind("x12", "dateRange", "RD8") // { kind: "dateRange", … }
380
+ */
381
+ export function ediCodeOfKind(standard, kind, code) {
382
+ const entry = ediCodeOf(standard, code);
383
+ return entry !== null && entry.kind === kind ? entry : null;
384
+ }
@@ -5,7 +5,9 @@ export declare const ENGLISH_MONTH_NAMES: readonly ["Jan", "Feb", "Mar", "Apr",
5
5
  * The `Mon, 15 Jul 2024 12:00:00` stem RFC 5322 date-time and RFC 9110 IMF-fixdate share: English
6
6
  * day and month names, zero-padded fields, read from the date-time's own wall clock.
7
7
  *
8
- * @param zdt the date-time; the caller has already rejected a year outside 0-9999
8
+ * @param zdt the date-time; the caller has already rejected a year its grammar cannot hold: a
9
+ * negative one for RFC 5322 (`year = 4*DIGIT`, so five digits are written in full), and any
10
+ * outside 0000–9999 for RFC 9110 (`year = 4DIGIT`)
9
11
  * @returns the stem, without a zone or `GMT` suffix
10
12
  * @example englishDateTimeStem(Temporal.ZonedDateTime.from("2024-07-15T12:00:05+00:00[UTC]")) // "Mon, 15 Jul 2024 12:00:05"
11
13
  * @example englishDateTimeStem(Temporal.ZonedDateTime.from("0099-01-03T04:05:06+00:00[UTC]")) // "Sat, 03 Jan 0099 04:05:06"
@@ -32,7 +32,9 @@ export const ENGLISH_MONTH_NAMES = [
32
32
  * The `Mon, 15 Jul 2024 12:00:00` stem RFC 5322 date-time and RFC 9110 IMF-fixdate share: English
33
33
  * day and month names, zero-padded fields, read from the date-time's own wall clock.
34
34
  *
35
- * @param zdt the date-time; the caller has already rejected a year outside 0-9999
35
+ * @param zdt the date-time; the caller has already rejected a year its grammar cannot hold: a
36
+ * negative one for RFC 5322 (`year = 4*DIGIT`, so five digits are written in full), and any
37
+ * outside 0000–9999 for RFC 9110 (`year = 4DIGIT`)
36
38
  * @returns the stem, without a zone or `GMT` suffix
37
39
  * @example englishDateTimeStem(Temporal.ZonedDateTime.from("2024-07-15T12:00:05+00:00[UTC]")) // "Mon, 15 Jul 2024 12:00:05"
38
40
  * @example englishDateTimeStem(Temporal.ZonedDateTime.from("0099-01-03T04:05:06+00:00[UTC]")) // "Sat, 03 Jan 0099 04:05:06"
@@ -13,6 +13,11 @@ export declare const MAX_WALKED_DAYS = 10000;
13
13
  * are counted against, `null` when every local day after expiry is charged.
14
14
  */
15
15
  export type FreeTimeTerms = {
16
+ /**
17
+ * The counting zone as the caller wrote it: a time zone identifier or a stored UTC offset
18
+ * (`±HH:MM[:SS]`), so always readable by `zoneFrame`. The walk's zoned values are placed with
19
+ * `frameZoned` and turned back with `frameInstant`.
20
+ */
16
21
  timeZone: string;
17
22
  firstDay: "eventDay" | "nextDay";
18
23
  calendar: ResolvedBusinessCalendar | null;
@@ -1,8 +1,9 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
- import { isValidTimeZone } from "../zoned/validate/isValidTimeZone.js";
3
2
  import { isBusinessDate, parseBusinessCalendar, } from "./businessCalendar.js";
4
3
  import { isObject } from "./isObject.js";
5
4
  import { nextZonedBucketStart, zonedUnitStart } from "./zonedBucket.js";
5
+ import { zoneFrame } from "./zoneFrame.js";
6
+ import { certainlyTouchesMoreBuckets } from "./zoneBucketCap.js";
6
7
  /**
7
8
  * Local days a free-time walk may visit before giving up: the same cap as `bucketRange`. A
8
9
  * valid business calendar leaves at least one working day a week, so a working-day count needs
@@ -34,7 +35,7 @@ function readFreeTimeTerms(options, readChargeBasis = false) {
34
35
  if (firstDay !== "eventDay" && firstDay !== "nextDay") {
35
36
  return null;
36
37
  }
37
- if (typeof timeZone !== "string" || !isValidTimeZone(timeZone)) {
38
+ if (typeof timeZone !== "string" || zoneFrame(timeZone) === null) {
38
39
  return null;
39
40
  }
40
41
  const needsCalendar = basis === "working" || (readChargeBasis && chargeBasis === "working");
@@ -209,6 +210,14 @@ export function walkFreeTime(clockStart, freeDays, terms, clockEnd) {
209
210
  let expiresAt = null;
210
211
  let expiryPending = false;
211
212
  let skipEventDay = terms.firstDay === "nextDay";
213
+ // A dwell that certainly touches more local days than the walk may visit ends it with the
214
+ // sentinel anyway: the walk needs one visit for every day the dwell touches, and one more to
215
+ // pass it. Deciding that from the span skips a 10,000-day walk. When it is not certain, the walk
216
+ // runs as before, so no answer changes.
217
+ if (clockEnd !== undefined &&
218
+ certainlyTouchesMoreBuckets(clockStart, clockEnd, "day", MAX_WALKED_DAYS)) {
219
+ return null;
220
+ }
212
221
  let day = localDayOf(clockStart);
213
222
  if (day === null) {
214
223
  return null;
@@ -15,6 +15,7 @@ export { isValidEpochNanoseconds, MAX_EPOCH_NANOSECOND_DIGITS, } from "./epochNa
15
15
  export { dateCycleFieldBounds } from "./dateCycleFieldBounds.js";
16
16
  export { timeCycleFieldBounds } from "./timeCycleFieldBounds.js";
17
17
  export { durationUntilString } from "./durationUntilString.js";
18
+ export { EDIFACT_DTM_FORMATS, X12_DATE_TIME_PERIOD_FORMATS, X12_TIME_CODES, } from "./ediGrammar.js";
18
19
  export { exactDurationNanoseconds, nonNegativeExactDurationNanoseconds, } from "./exactDuration.js";
19
20
  export { type ExactMoment, readExactMoment, writeExactMoment, } from "./exactMoment.js";
20
21
  export { formatDateInCalendar } from "./formatDateInCalendar.js";
@@ -45,9 +46,10 @@ export { plainDateAdd } from "./plainDateAdd.js";
45
46
  export { parsePunctualityTolerance, punctualityOf } from "./punctuality.js";
46
47
  export { plainDateUntil } from "./plainDateUntil.js";
47
48
  export { resolveDateTimeUnit } from "./resolveDateTimeUnit.js";
49
+ export { readDurationUnits } from "./readDurationUnits.js";
50
+ export { DATE_FIELDS, DATE_TIME_FIELDS, readSetFields, TIME_FIELDS, } from "./readSetFields.js";
48
51
  export { resolveDurationUnit } from "./resolveDurationUnit.js";
49
52
  export { resolveOverflow } from "./resolveOverflow.js";
50
- export { resolveRelativeRounding } from "./resolveRelativeRounding.js";
51
53
  export { parseUnixEpochInterval, parseUnixEpochIntervalList, parseUnixEpochIntervalPair, parseUnixEpochValue, } from "./unixEpochValue.js";
52
54
  export { tileByUnit } from "./splitStep.js";
53
55
  export { parseTimestampEvents } from "./timestampEvents.js";
@@ -56,5 +58,6 @@ export { countZonedLocalDates } from "./zonedLocalDates.js";
56
58
  export { zonedDateTimeFrom } from "./zonedWallClock.js";
57
59
  export { wallClockAtOffset } from "./wallClockAtOffset.js";
58
60
  export { durationCompare, durationRound, durationTotal, isCalendarDifferenceAcrossZones, plainUntilWithRounding, zonedUntil, } from "./zonedWallClockDifference.js";
59
- export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition, zonedPreviousTransition, zonedStartOfDay, } from "./zonedWallClockOperations.js";
61
+ export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition, zonedStartOfDay, } from "./zonedWallClockOperations.js";
60
62
  export { zonelessCalendarDate } from "./zonelessCalendarDate.js";
63
+ export { frameInstant, frameOffset, frameWallClock, frameZoned, instantOfWallClock, normalizeZoneFrame, zoneFrame, } from "./zoneFrame.js";
@@ -15,6 +15,11 @@ export { isValidEpochNanoseconds, MAX_EPOCH_NANOSECOND_DIGITS, } from "./epochNa
15
15
  export { dateCycleFieldBounds } from "./dateCycleFieldBounds.js";
16
16
  export { timeCycleFieldBounds } from "./timeCycleFieldBounds.js";
17
17
  export { durationUntilString } from "./durationUntilString.js";
18
+ // The EDI readers (./ediDateTimeFields) and writers (./ediDateTimeWriter) are deliberately not
19
+ // re-exported here: they import `instant/convert/toOffsetInstant`, which reads this barrel at
20
+ // module top level, so a barrel entry would close a cycle. Import each from its own file
21
+ // ("../../internal/ediDateTimeFields", "../../internal/ediDateTimeWriter").
22
+ export { EDIFACT_DTM_FORMATS, X12_DATE_TIME_PERIOD_FORMATS, X12_TIME_CODES, } from "./ediGrammar.js";
18
23
  export { exactDurationNanoseconds, nonNegativeExactDurationNanoseconds, } from "./exactDuration.js";
19
24
  export { readExactMoment, writeExactMoment, } from "./exactMoment.js";
20
25
  export { formatDateInCalendar } from "./formatDateInCalendar.js";
@@ -45,9 +50,10 @@ export { plainDateAdd } from "./plainDateAdd.js";
45
50
  export { parsePunctualityTolerance, punctualityOf } from "./punctuality.js";
46
51
  export { plainDateUntil } from "./plainDateUntil.js";
47
52
  export { resolveDateTimeUnit } from "./resolveDateTimeUnit.js";
53
+ export { readDurationUnits } from "./readDurationUnits.js";
54
+ export { DATE_FIELDS, DATE_TIME_FIELDS, readSetFields, TIME_FIELDS, } from "./readSetFields.js";
48
55
  export { resolveDurationUnit } from "./resolveDurationUnit.js";
49
56
  export { resolveOverflow } from "./resolveOverflow.js";
50
- export { resolveRelativeRounding } from "./resolveRelativeRounding.js";
51
57
  export { parseUnixEpochInterval, parseUnixEpochIntervalList, parseUnixEpochIntervalPair, parseUnixEpochValue, } from "./unixEpochValue.js";
52
58
  export { tileByUnit } from "./splitStep.js";
53
59
  export { parseTimestampEvents } from "./timestampEvents.js";
@@ -56,5 +62,6 @@ export { countZonedLocalDates } from "./zonedLocalDates.js";
56
62
  export { zonedDateTimeFrom } from "./zonedWallClock.js";
57
63
  export { wallClockAtOffset } from "./wallClockAtOffset.js";
58
64
  export { durationCompare, durationRound, durationTotal, isCalendarDifferenceAcrossZones, plainUntilWithRounding, zonedUntil, } from "./zonedWallClockDifference.js";
59
- export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition, zonedPreviousTransition, zonedStartOfDay, } from "./zonedWallClockOperations.js";
65
+ export { addToZoned, addToZonedDisambiguated, plainToZoned, roundZonedDateTime, subtractFromZoned, withZonedFields, zonedHoursInDay, zonedNextTransition, zonedStartOfDay, } from "./zonedWallClockOperations.js";
60
66
  export { zonelessCalendarDate } from "./zonelessCalendarDate.js";
67
+ export { frameInstant, frameOffset, frameWallClock, frameZoned, instantOfWallClock, normalizeZoneFrame, zoneFrame, } from "./zoneFrame.js";
@@ -1,4 +1,5 @@
1
1
  import { parseInstantNanoseconds } from "./instantNanoseconds.js";
2
+ import { isObject } from "./isObject.js";
2
3
  /**
3
4
  * Parse a candidate `Interval` to epoch nanoseconds, or `null` when it is not one.
4
5
  *
@@ -13,7 +14,7 @@ import { parseInstantNanoseconds } from "./instantNanoseconds.js";
13
14
  * @example parseIntervalNanoseconds({ start: "1970-01-01T00:00:01Z", end: "1970-01-01T00:00:00Z" }) // null — inverted
14
15
  */
15
16
  export function parseIntervalNanoseconds(value) {
16
- if (typeof value !== "object" || value === null) {
17
+ if (!isObject(value)) {
17
18
  return null;
18
19
  }
19
20
  const { start: startText, end: endText } = value;
@@ -1,18 +1,25 @@
1
1
  /**
2
- * Type guard for a non-null object (arrays included), the shape an options bag or a props
3
- * object must have before it is destructured. A default parameter covers only `undefined`, so a
4
- * `null` or primitive argument reaches the destructure and throws `TypeError` without this check.
2
+ * Type guard for an ECMAScript Object (ECMA-262 §6.1.7): a non-null object, arrays included, or a
3
+ * function. It is the shape an options bag, a property bag or a props object must have before it
4
+ * is destructured. A default parameter covers only `undefined`, so a `null` or primitive argument
5
+ * reaches the destructure and throws `TypeError` without this check.
6
+ *
7
+ * A function is an Object, so it is accepted wherever Temporal and ECMA-402 accept one:
8
+ * GetOptionsObject returns any Object, and the polyfill reads
9
+ * `Object.assign(() => 0, { largestUnit: "hours" })` as `{ largestUnit: "hours" }`. Checking
10
+ * `typeof value === "object"` alone wrongly refused it.
5
11
  *
6
12
  * @param value candidate
7
13
  * @example isObject({ smallestUnit: "day" }) // true
14
+ * @example isObject(Object.assign(() => 0, { smallestUnit: "day" })) // true
8
15
  * @example isObject(null) // false
9
16
  * @example isObject("day") // false
10
- * @returns whether `value` is a non-null object
17
+ * @returns whether `value` is an Object
11
18
  */
12
19
  export declare function isObject(value: unknown): value is object;
13
20
  /**
14
21
  * Whether an `options` argument is acceptable under Temporal GetOptionsObject: omitted
15
- * (`undefined`, the defaults) or an object. `null`, a string, a number or a boolean is a TypeError
22
+ * (`undefined`, the defaults) or an Object, a function included. `null`, a string, a number or a boolean is a TypeError
16
23
  * there, so a function that takes an options bag returns its sentinel for it rather than silently
17
24
  * reading the defaults (e.g. a legacy positional unit string such as `"seconds"`).
18
25
  *
@@ -21,6 +28,6 @@ export declare function isObject(value: unknown): value is object;
21
28
  * @example isOptionsArgument({ overflow: "reject" }) // true
22
29
  * @example isOptionsArgument(null) // false
23
30
  * @example isOptionsArgument("seconds") // false
24
- * @returns whether `options` is `undefined` or a non-null object
31
+ * @returns whether `options` is `undefined` or an Object
25
32
  */
26
33
  export declare function isOptionsArgument(options: unknown): boolean;
@@ -1,20 +1,27 @@
1
1
  /**
2
- * Type guard for a non-null object (arrays included), the shape an options bag or a props
3
- * object must have before it is destructured. A default parameter covers only `undefined`, so a
4
- * `null` or primitive argument reaches the destructure and throws `TypeError` without this check.
2
+ * Type guard for an ECMAScript Object (ECMA-262 §6.1.7): a non-null object, arrays included, or a
3
+ * function. It is the shape an options bag, a property bag or a props object must have before it
4
+ * is destructured. A default parameter covers only `undefined`, so a `null` or primitive argument
5
+ * reaches the destructure and throws `TypeError` without this check.
6
+ *
7
+ * A function is an Object, so it is accepted wherever Temporal and ECMA-402 accept one:
8
+ * GetOptionsObject returns any Object, and the polyfill reads
9
+ * `Object.assign(() => 0, { largestUnit: "hours" })` as `{ largestUnit: "hours" }`. Checking
10
+ * `typeof value === "object"` alone wrongly refused it.
5
11
  *
6
12
  * @param value candidate
7
13
  * @example isObject({ smallestUnit: "day" }) // true
14
+ * @example isObject(Object.assign(() => 0, { smallestUnit: "day" })) // true
8
15
  * @example isObject(null) // false
9
16
  * @example isObject("day") // false
10
- * @returns whether `value` is a non-null object
17
+ * @returns whether `value` is an Object
11
18
  */
12
19
  export function isObject(value) {
13
- return typeof value === "object" && value !== null;
20
+ return ((typeof value === "object" && value !== null) || typeof value === "function");
14
21
  }
15
22
  /**
16
23
  * Whether an `options` argument is acceptable under Temporal GetOptionsObject: omitted
17
- * (`undefined`, the defaults) or an object. `null`, a string, a number or a boolean is a TypeError
24
+ * (`undefined`, the defaults) or an Object, a function included. `null`, a string, a number or a boolean is a TypeError
18
25
  * there, so a function that takes an options bag returns its sentinel for it rather than silently
19
26
  * reading the defaults (e.g. a legacy positional unit string such as `"seconds"`).
20
27
  *
@@ -23,7 +30,7 @@ export function isObject(value) {
23
30
  * @example isOptionsArgument({ overflow: "reject" }) // true
24
31
  * @example isOptionsArgument(null) // false
25
32
  * @example isOptionsArgument("seconds") // false
26
- * @returns whether `options` is `undefined` or a non-null object
33
+ * @returns whether `options` is `undefined` or an Object
27
34
  */
28
35
  export function isOptionsArgument(options) {
29
36
  return options === undefined || isObject(options);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Write an ISO year as Temporal writes it at the head of a date string (TC39 Temporal
3
+ * `PadISOYear ( y )`, §3.5.10): four digits from 0000 to 9999, otherwise a sign and six digits.
4
+ *
5
+ * A year written any other way does not read back. `"10000-01-01"` and `"00-5-01-01"` are not ISO
6
+ * 8601 or Temporal strings, and `isValidDate` rejects both; `"+010000-01-01"` and
7
+ * `"-000005-01-01"` are what `Temporal.PlainDate#toString` writes.
8
+ *
9
+ * - Every function that returns a year on its own writes it this way.
10
+ * - Where a Temporal value is at hand, let its own `toString` write the whole date. This is for a
11
+ * year on its own, or a date assembled from fields with no Temporal value behind them.
12
+ *
13
+ * @param year an ISO year, an integer
14
+ * @returns the year as `YYYY` or `±YYYYYY`
15
+ *
16
+ * @example isoYearString(2024) // "2024"
17
+ * @example isoYearString(5) // "0005"
18
+ * @example isoYearString(10000) // "+010000"
19
+ * @example isoYearString(-5) // "-000005"
20
+ */
21
+ export declare function isoYearString(year: number): string;