@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,97 @@
1
+ import { type EdiKind, type EdiStandard } from "./ediGrammar.js";
2
+ /**
3
+ * Read a single EDI date/time value against a format code of one kind, as one ISO 8601 string:
4
+ * the reader behind every public parser of a date, a time, a local date-time and a date-time
5
+ * with an offset.
6
+ *
7
+ * - The code must be one of `kind` in its standard's table (`ediGrammar.ts`); a code of another
8
+ * kind, a period or range code and a code that is not read return `""`.
9
+ * - The value is tested against the code's grammar, its digits are read into a field bag, and
10
+ * the bag goes through `Temporal.PlainDate.from` / `PlainTime.from` / `PlainDateTime.from` with
11
+ * `overflow: "reject"`: the grammar proves shape, Temporal proves the date is real.
12
+ * - A date is `YYYY-MM-DD`, a time `HH:MM:SS` and a local date-time `YYYY-MM-DDTHH:MM:SS`.
13
+ * Seconds are always written, `00` for a mask without them.
14
+ * - A date-time with an offset (`205`, `208`; `303` and `304`, whose `ZZZ` is `[+-]HH`, `UTC` or
15
+ * `GMT`) is the wall clock as written with its offset, `YYYY-MM-DDTHH:MM:SS±HH:MM`. The wall
16
+ * clock and the offset are joined as an extended ISO string, read by `toOffsetInstant` and
17
+ * written by `fromOffsetInstant`; no offset digit is moved by hand.
18
+ * - Never throws: any failure is `""`.
19
+ *
20
+ * @param standard which element the code belongs to
21
+ * @param kind the kind of value the calling function reads
22
+ * @param code the 2379 or 1250 format code
23
+ * @param value the element value, after the interchange has been unescaped
24
+ * @returns the value as one ISO 8601 string, or `""`
25
+ *
26
+ * @example readEdiValue("edifact", "date", "102", "20240615") // "2024-06-15"
27
+ * @example readEdiValue("edifact", "dateTime", "203", "202406151430") // "2024-06-15T14:30:00"
28
+ * @example readEdiValue("edifact", "offsetDateTime", "303", "202406151430+02") // "2024-06-15T14:30:00+02:00"
29
+ * @example readEdiValue("x12", "date", "DB", "06152024") // "2024-06-15"
30
+ * @example readEdiValue("edifact", "date", "203", "202406151430") // "" (a date-time code)
31
+ * @example readEdiValue("edifact", "date", "102", "20230229") // "" (2023 has no 29 February)
32
+ */
33
+ export declare function readEdiValue(standard: EdiStandard, kind: EdiKind, code: string, value: string): string;
34
+ /**
35
+ * Read an EDI period or range against a format code of one kind, as its two ends: the reader
36
+ * behind every public parser of a period (UNTDID 2379) and a range (X12 1250).
37
+ *
38
+ * - The code must be one of `kind`; a single-value code and a code of another kind return null.
39
+ * - Each half is read as `readEdiValue` reads a date or a local date-time. A 2379 period is run
40
+ * together and a 1250 range has exactly one hyphen: the grammar holds that.
41
+ * - An end that precedes its start returns null (**GMT rule**: a reversed period names no span
42
+ * of time). An end equal to its start is a valid period.
43
+ * - Never throws: any failure is null.
44
+ *
45
+ * @param standard which element the code belongs to
46
+ * @param kind the kind of period or range the calling function reads
47
+ * @param code the 2379 or 1250 format code
48
+ * @param value the element value
49
+ * @returns the two ends as ISO 8601 strings, or null
50
+ *
51
+ * @example readEdiRange("edifact", "datePeriod", "718", "2024061520240620") // { start: "2024-06-15", end: "2024-06-20" }
52
+ * @example readEdiRange("x12", "dateTimeRange", "RDT", "202406151430-202406201600") // { start: "2024-06-15T14:30:00", end: "2024-06-20T16:00:00" }
53
+ * @example readEdiRange("x12", "dateRange", "RD8", "20240620-20240615") // null (the end precedes the start)
54
+ * @example readEdiRange("edifact", "datePeriod", "102", "20240615") // null (a single date code)
55
+ */
56
+ export declare function readEdiRange(standard: EdiStandard, kind: EdiKind, code: string, value: string): {
57
+ start: string;
58
+ end: string;
59
+ } | null;
60
+ /**
61
+ * Read an X12 data element 337 (Time) value as an ISO 8601 time, `HH:MM:SS[.f[f]]`.
62
+ *
63
+ * - The value is tested against the grammar of each form in the element's layout table
64
+ * (`HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD`; `ediGrammar.ts`). The four masks have four lengths,
65
+ * so at most one matches. Its digits are read by part name, and the fields go through
66
+ * `Temporal.PlainTime.from` with `overflow: "reject"`.
67
+ * - Decimal seconds become the fraction of the second exactly: one digit is tenths, two are
68
+ * hundredths. Temporal writes no trailing zero, so `14304550` is `14:30:45.5`.
69
+ * - `""` for a non-string, a value of any other length or shape, hour 24, and minute or second
70
+ * 60. Never throws.
71
+ *
72
+ * @param value the element 337 value as transmitted
73
+ * @returns the time, or `""`
74
+ *
75
+ * @example readX12Time("1430") // "14:30:00"
76
+ * @example readX12Time("143045") // "14:30:45"
77
+ * @example readX12Time("14300012") // "14:30:00.12"
78
+ * @example readX12Time("2430") // ""
79
+ */
80
+ export declare function readX12Time(value: string): string;
81
+ /**
82
+ * Read the date (element 373, `CCYYMMDD`) and the time (element 337) of an X12 segment as one
83
+ * local date-time, `YYYY-MM-DDTHH:MM:SS[.f[f]]`.
84
+ *
85
+ * - The date is read by the `CCYYMMDD` mask of the 1250 code `D8` (one grammar, one reader) and
86
+ * the time by `readX12Time`; Temporal joins the two.
87
+ * - `""` when either is missing, is not a string or is not a real date or time. Never throws.
88
+ *
89
+ * @param date the element 373 value as transmitted
90
+ * @param time the element 337 value as transmitted
91
+ * @returns the local date-time, or `""`
92
+ *
93
+ * @example readX12DateAndTime("20240615", "1430") // "2024-06-15T14:30:00"
94
+ * @example readX12DateAndTime("20240615", "14300012") // "2024-06-15T14:30:00.12"
95
+ * @example readX12DateAndTime("20240615", "") // ""
96
+ */
97
+ export declare function readX12DateAndTime(date: string, time: string): string;
@@ -0,0 +1,288 @@
1
+ // Not re-exported from `internal/index.ts`: `toOffsetInstant` reads that barrel at module top
2
+ // level (`TIME_ZONE_ANNOTATION`), so a barrel entry for this module would close a cycle and leave
3
+ // the constant undefined when `toOffsetInstant` evaluates. Import this file directly.
4
+ import { Temporal } from "@js-temporal/polyfill";
5
+ import { fromOffsetInstant } from "../instant/convert/fromOffsetInstant.js";
6
+ import { toOffsetInstant } from "../instant/convert/toOffsetInstant.js";
7
+ import { MILLISECONDS_PER_DECIMAL_SECOND, X12_TIME_ELEMENT_FORMS, X12_TIME_ELEMENT_GRAMMAR, X12_TIME_ELEMENT_LAYOUT, ediCodeOfKind, } from "./ediGrammar.js";
8
+ /**
9
+ * The bag member each digit part of a mask fills. The offset parts (`ZS`, `ZH`, `ZM`) and `ZZZ`
10
+ * are text, not numbers, and are read apart.
11
+ */
12
+ const NUMBER_FIELD_OF_PART = {
13
+ CCYY: "year",
14
+ MM: "month",
15
+ DD: "day",
16
+ HH: "hour",
17
+ MI: "minute",
18
+ SS: "second",
19
+ SD: "tenths",
20
+ SDD: "hundredths",
21
+ };
22
+ /**
23
+ * The two `ZZZ` literals that are +00:00. `UTC` is what the SMDG IFTSAI 2.0 and BAPLIE 3.1.1
24
+ * guides write in a `303` value. `GMT` is the same scale by UN/ECE Recommendation 7 ¶12:
25
+ * "Co-ordinated Universal Time (formerly known as Greenwich Mean Time)".
26
+ */
27
+ const UTC_LITERALS = ["UTC", "GMT"];
28
+ /**
29
+ * Read a single EDI date/time value against a format code of one kind, as one ISO 8601 string:
30
+ * the reader behind every public parser of a date, a time, a local date-time and a date-time
31
+ * with an offset.
32
+ *
33
+ * - The code must be one of `kind` in its standard's table (`ediGrammar.ts`); a code of another
34
+ * kind, a period or range code and a code that is not read return `""`.
35
+ * - The value is tested against the code's grammar, its digits are read into a field bag, and
36
+ * the bag goes through `Temporal.PlainDate.from` / `PlainTime.from` / `PlainDateTime.from` with
37
+ * `overflow: "reject"`: the grammar proves shape, Temporal proves the date is real.
38
+ * - A date is `YYYY-MM-DD`, a time `HH:MM:SS` and a local date-time `YYYY-MM-DDTHH:MM:SS`.
39
+ * Seconds are always written, `00` for a mask without them.
40
+ * - A date-time with an offset (`205`, `208`; `303` and `304`, whose `ZZZ` is `[+-]HH`, `UTC` or
41
+ * `GMT`) is the wall clock as written with its offset, `YYYY-MM-DDTHH:MM:SS±HH:MM`. The wall
42
+ * clock and the offset are joined as an extended ISO string, read by `toOffsetInstant` and
43
+ * written by `fromOffsetInstant`; no offset digit is moved by hand.
44
+ * - Never throws: any failure is `""`.
45
+ *
46
+ * @param standard which element the code belongs to
47
+ * @param kind the kind of value the calling function reads
48
+ * @param code the 2379 or 1250 format code
49
+ * @param value the element value, after the interchange has been unescaped
50
+ * @returns the value as one ISO 8601 string, or `""`
51
+ *
52
+ * @example readEdiValue("edifact", "date", "102", "20240615") // "2024-06-15"
53
+ * @example readEdiValue("edifact", "dateTime", "203", "202406151430") // "2024-06-15T14:30:00"
54
+ * @example readEdiValue("edifact", "offsetDateTime", "303", "202406151430+02") // "2024-06-15T14:30:00+02:00"
55
+ * @example readEdiValue("x12", "date", "DB", "06152024") // "2024-06-15"
56
+ * @example readEdiValue("edifact", "date", "203", "202406151430") // "" (a date-time code)
57
+ * @example readEdiValue("edifact", "date", "102", "20230229") // "" (2023 has no 29 February)
58
+ */
59
+ export function readEdiValue(standard, kind, code, value) {
60
+ try {
61
+ const halves = readHalves(ediCodeOfKind(standard, kind, code), value);
62
+ return halves === null || halves.length !== 1 ? "" : halves[0];
63
+ }
64
+ catch {
65
+ return "";
66
+ }
67
+ }
68
+ /**
69
+ * Read an EDI period or range against a format code of one kind, as its two ends: the reader
70
+ * behind every public parser of a period (UNTDID 2379) and a range (X12 1250).
71
+ *
72
+ * - The code must be one of `kind`; a single-value code and a code of another kind return null.
73
+ * - Each half is read as `readEdiValue` reads a date or a local date-time. A 2379 period is run
74
+ * together and a 1250 range has exactly one hyphen: the grammar holds that.
75
+ * - An end that precedes its start returns null (**GMT rule**: a reversed period names no span
76
+ * of time). An end equal to its start is a valid period.
77
+ * - Never throws: any failure is null.
78
+ *
79
+ * @param standard which element the code belongs to
80
+ * @param kind the kind of period or range the calling function reads
81
+ * @param code the 2379 or 1250 format code
82
+ * @param value the element value
83
+ * @returns the two ends as ISO 8601 strings, or null
84
+ *
85
+ * @example readEdiRange("edifact", "datePeriod", "718", "2024061520240620") // { start: "2024-06-15", end: "2024-06-20" }
86
+ * @example readEdiRange("x12", "dateTimeRange", "RDT", "202406151430-202406201600") // { start: "2024-06-15T14:30:00", end: "2024-06-20T16:00:00" }
87
+ * @example readEdiRange("x12", "dateRange", "RD8", "20240620-20240615") // null (the end precedes the start)
88
+ * @example readEdiRange("edifact", "datePeriod", "102", "20240615") // null (a single date code)
89
+ */
90
+ export function readEdiRange(standard, kind, code, value) {
91
+ try {
92
+ const entry = ediCodeOfKind(standard, kind, code);
93
+ const halves = readHalves(entry, value);
94
+ if (entry === null || halves === null || halves.length !== 2) {
95
+ return null;
96
+ }
97
+ const [start, end] = halves;
98
+ return endPrecedesStart(entry.valueKind, start, end)
99
+ ? null
100
+ : { start, end };
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ /**
107
+ * Read an X12 data element 337 (Time) value as an ISO 8601 time, `HH:MM:SS[.f[f]]`.
108
+ *
109
+ * - The value is tested against the grammar of each form in the element's layout table
110
+ * (`HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD`; `ediGrammar.ts`). The four masks have four lengths,
111
+ * so at most one matches. Its digits are read by part name, and the fields go through
112
+ * `Temporal.PlainTime.from` with `overflow: "reject"`.
113
+ * - Decimal seconds become the fraction of the second exactly: one digit is tenths, two are
114
+ * hundredths. Temporal writes no trailing zero, so `14304550` is `14:30:45.5`.
115
+ * - `""` for a non-string, a value of any other length or shape, hour 24, and minute or second
116
+ * 60. Never throws.
117
+ *
118
+ * @param value the element 337 value as transmitted
119
+ * @returns the time, or `""`
120
+ *
121
+ * @example readX12Time("1430") // "14:30:00"
122
+ * @example readX12Time("143045") // "14:30:45"
123
+ * @example readX12Time("14300012") // "14:30:00.12"
124
+ * @example readX12Time("2430") // ""
125
+ */
126
+ export function readX12Time(value) {
127
+ try {
128
+ if (typeof value !== "string") {
129
+ return "";
130
+ }
131
+ for (const form of X12_TIME_ELEMENT_FORMS) {
132
+ const match = X12_TIME_ELEMENT_GRAMMAR[form].exec(value);
133
+ if (match !== null) {
134
+ return timeOf(readBag(X12_TIME_ELEMENT_LAYOUT[form].start, match.slice(1)));
135
+ }
136
+ }
137
+ return "";
138
+ }
139
+ catch {
140
+ return "";
141
+ }
142
+ }
143
+ /**
144
+ * Read the date (element 373, `CCYYMMDD`) and the time (element 337) of an X12 segment as one
145
+ * local date-time, `YYYY-MM-DDTHH:MM:SS[.f[f]]`.
146
+ *
147
+ * - The date is read by the `CCYYMMDD` mask of the 1250 code `D8` (one grammar, one reader) and
148
+ * the time by `readX12Time`; Temporal joins the two.
149
+ * - `""` when either is missing, is not a string or is not a real date or time. Never throws.
150
+ *
151
+ * @param date the element 373 value as transmitted
152
+ * @param time the element 337 value as transmitted
153
+ * @returns the local date-time, or `""`
154
+ *
155
+ * @example readX12DateAndTime("20240615", "1430") // "2024-06-15T14:30:00"
156
+ * @example readX12DateAndTime("20240615", "14300012") // "2024-06-15T14:30:00.12"
157
+ * @example readX12DateAndTime("20240615", "") // ""
158
+ */
159
+ export function readX12DateAndTime(date, time) {
160
+ try {
161
+ const dateOnly = readEdiValue("x12", "date", "D8", date);
162
+ const timeOnly = readX12Time(time);
163
+ if (dateOnly === "" || timeOnly === "") {
164
+ return "";
165
+ }
166
+ return Temporal.PlainDate.from(dateOnly)
167
+ .toPlainDateTime(Temporal.PlainTime.from(timeOnly))
168
+ .toString();
169
+ }
170
+ catch {
171
+ return "";
172
+ }
173
+ }
174
+ /**
175
+ * The value as one ISO 8601 string per half: one for a single value, two for a period or range.
176
+ * Null when there is no code, the value is not a string, it does not match the code's grammar,
177
+ * or a half states an offset no instant can be read at. Temporal throws for a date or time that
178
+ * is not real.
179
+ */
180
+ function readHalves(entry, value) {
181
+ if (entry === null || typeof value !== "string") {
182
+ return null;
183
+ }
184
+ const match = entry.grammar.exec(value);
185
+ if (match === null) {
186
+ return null;
187
+ }
188
+ const captures = match.slice(1);
189
+ const { start, end } = entry.layout;
190
+ const bags = end === undefined
191
+ ? [readBag(start, captures)]
192
+ : [
193
+ readBag(start, captures.slice(0, start.length)),
194
+ readBag(end, captures.slice(start.length)),
195
+ ];
196
+ const halves = [];
197
+ for (const bag of bags) {
198
+ const half = HALF_READERS[entry.valueKind](bag);
199
+ if (half === null) {
200
+ return null;
201
+ }
202
+ halves.push(half);
203
+ }
204
+ return halves;
205
+ }
206
+ /** The captured digits of one half, read by part name into a field bag. */
207
+ function readBag(parts, captures) {
208
+ const bag = {};
209
+ const text = {};
210
+ parts.forEach((part, index) => {
211
+ const raw = captures[index] ?? "";
212
+ const field = NUMBER_FIELD_OF_PART[part];
213
+ if (field === undefined) {
214
+ text[part] = raw;
215
+ }
216
+ else {
217
+ bag[field] = Number(raw);
218
+ }
219
+ });
220
+ const offset = offsetOf(text);
221
+ return offset === null ? bag : { ...bag, offset };
222
+ }
223
+ /**
224
+ * The `±HH:MM` a half states: `ZS`, `ZH` and `ZM` joined, or the three `ZZZ` characters read as
225
+ * a signed hour (UN/ECE Rec 7 ¶12, hours only) or as `UTC` or `GMT` (+00:00). The grammar
226
+ * admits nothing else in `ZZZ`. Null for a half with no offset.
227
+ */
228
+ function offsetOf(text) {
229
+ if (text.ZS !== undefined) {
230
+ return `${text.ZS}${text.ZH}:${text.ZM}`;
231
+ }
232
+ if (text.ZZZ === undefined) {
233
+ return null;
234
+ }
235
+ return UTC_LITERALS.includes(text.ZZZ) ? "+00:00" : `${text.ZZZ}:00`;
236
+ }
237
+ /**
238
+ * The time of day of a half that has no date, built by Temporal from its fields. The decimal
239
+ * seconds of X12 data element 337 are counted in milliseconds: "1" is one tenth (100 ms) and
240
+ * "12" is twelve hundredths (120 ms). A mask without them, which is every 2379 and 1250 mask,
241
+ * gives 0.
242
+ */
243
+ function timeOf(bag) {
244
+ return Temporal.PlainTime.from({
245
+ hour: bag.hour,
246
+ minute: bag.minute,
247
+ second: bag.second ?? 0,
248
+ millisecond: (bag.tenths ?? 0) * MILLISECONDS_PER_DECIMAL_SECOND.SD +
249
+ (bag.hundredths ?? 0) * MILLISECONDS_PER_DECIMAL_SECOND.SDD,
250
+ }, { overflow: "reject" }).toString();
251
+ }
252
+ /** The wall clock of a half that has a date and a time, built by Temporal from its fields. */
253
+ function localDateTime(bag) {
254
+ return Temporal.PlainDateTime.from({
255
+ year: bag.year,
256
+ month: bag.month,
257
+ day: bag.day,
258
+ hour: bag.hour,
259
+ minute: bag.minute,
260
+ second: bag.second ?? 0,
261
+ }, { overflow: "reject" }).toString();
262
+ }
263
+ /**
264
+ * Each kind's reader: one half's fields as the ISO 8601 string of that kind. Temporal throws for
265
+ * a date or time that is not real; null is for an offset no instant can be read at.
266
+ */
267
+ const HALF_READERS = {
268
+ date: (bag) => Temporal.PlainDate.from({ year: bag.year, month: bag.month, day: bag.day }, { overflow: "reject" }).toString(),
269
+ time: timeOf,
270
+ dateTime: localDateTime,
271
+ // The wall clock and its offset, read by `toOffsetInstant` and written back by
272
+ // `fromOffsetInstant`: the pair's own string, so `-00:00` is `+00:00` and the result reads
273
+ // back through the instant functions.
274
+ offsetDateTime: (bag) => {
275
+ const pair = toOffsetInstant(`${localDateTime(bag)}${bag.offset ?? ""}`);
276
+ const written = pair === null ? "" : fromOffsetInstant(pair);
277
+ return written === "" ? null : written;
278
+ },
279
+ };
280
+ /**
281
+ * GMT rule: a reversed period names no span of time. Two dates compare by calendar date and two
282
+ * local date-times to the second.
283
+ */
284
+ function endPrecedesStart(valueKind, start, end) {
285
+ return valueKind === "date"
286
+ ? Temporal.PlainDate.compare(end, start) < 0
287
+ : Temporal.PlainDateTime.compare(end, start) < 0;
288
+ }
@@ -0,0 +1,92 @@
1
+ import { type EdiKind, type EdiStandard } from "./ediGrammar.js";
2
+ /**
3
+ * Write one ISO 8601 value as a single EDI date/time value in a format code of one kind: the
4
+ * inverse of `readEdiValue`, driven by the same layout tables (`ediGrammar.ts`), so what one
5
+ * writes the other reads back.
6
+ *
7
+ * - The code must be one of `kind`; a code of another kind, a period or range code and a code
8
+ * that is not written return `""`.
9
+ * - The kind fixes the ISO 8601 string `value` must be, as the house plain functions fix theirs:
10
+ * a date is what `isValidDate` accepts, a time what `isValidTime` accepts, a local date-time
11
+ * what `isValidDateTime` accepts, and a date-time with an offset what `toOffsetInstant` reads
12
+ * (an offset, `Z`, or a bracketed zone that agrees). Temporal then reads the fields; no digit
13
+ * of the input is sliced.
14
+ * - Precision is cut to the mask and never refused: a fraction of a second is dropped under
15
+ * every 2379 and 1250 mask (none has decimal seconds) and the seconds under a mask with no
16
+ * `SS`. The cut is a truncation, never a rounding, so a written value never names a later
17
+ * minute or second than its input.
18
+ * - A value with an offset is written on its own wall clock, never the UTC clock. `ZHHMM` holds
19
+ * whole minutes and `ZZZ` whole hours, always written as the signed hour of UN/ECE
20
+ * Recommendation 7 ¶12 (`+02`), never `UTC` or `GMT`. An offset the field cannot hold returns
21
+ * `""`: rounding it would name another instant.
22
+ * - A year outside 0000–9999 returns `""`: `CCYY` is four digits and no sign.
23
+ * - Never throws: any failure is `""`.
24
+ *
25
+ * @param standard which element the code belongs to
26
+ * @param kind the kind of value the calling function writes
27
+ * @param code the 2379 or 1250 format code
28
+ * @param value one ISO 8601 string of that kind
29
+ * @returns the element value, or `""`
30
+ *
31
+ * @example writeEdiValue("edifact", "dateTime", "203", "2024-06-15T14:30:45") // "202406151430"
32
+ * @example writeEdiValue("edifact", "offsetDateTime", "303", "2024-06-15T14:30:00+02:00") // "202406151430+02"
33
+ * @example writeEdiValue("x12", "date", "DB", "2024-06-15") // "06152024"
34
+ * @example writeEdiValue("edifact", "offsetDateTime", "303", "2024-06-15T14:30:00+05:30") // "" (ZZZ holds whole hours)
35
+ * @example writeEdiValue("edifact", "date", "102", "2024-06-15T14:30:00") // "" (a date-time is not a date)
36
+ */
37
+ export declare function writeEdiValue(standard: EdiStandard, kind: EdiKind, code: string, value: string): string;
38
+ /**
39
+ * Write two ISO 8601 values as an EDI period or range in a format code of one kind: the inverse
40
+ * of `readEdiRange`.
41
+ *
42
+ * - The code must be one of `kind`; a single-value code and a code of another kind return `""`.
43
+ * - Each end is read and written as `writeEdiValue` reads and writes a date or a local
44
+ * date-time. The halves are joined by what the standard transmits: nothing for UNTDID 2379,
45
+ * one hyphen for X12 1250.
46
+ * - An end that precedes its start returns `""` (**GMT rule**: a reversed period names no span
47
+ * of time). The ends are compared as given, before either is cut to the mask, so an end 35
48
+ * seconds before its start is reversed under a minute mask too. An end equal to its start is
49
+ * written.
50
+ * - Never throws: any failure is `""`.
51
+ *
52
+ * @param standard which element the code belongs to
53
+ * @param kind the kind of period or range the calling function writes
54
+ * @param code the 2379 or 1250 format code
55
+ * @param start the first end, one ISO 8601 string of the kind's half
56
+ * @param end the second end, of the same kind
57
+ * @returns the element value, or `""`
58
+ *
59
+ * @example writeEdiRange("edifact", "datePeriod", "718", "2024-06-15", "2024-06-20") // "2024061520240620"
60
+ * @example writeEdiRange("x12", "dateRange", "RD8", "2024-06-15", "2024-06-20") // "20240615-20240620"
61
+ * @example writeEdiRange("x12", "dateRange", "RD8", "2024-06-20", "2024-06-15") // "" (the end precedes the start)
62
+ */
63
+ export declare function writeEdiRange(standard: EdiStandard, kind: EdiKind, code: string, start: string, end: string): string;
64
+ /**
65
+ * Write one ISO 8601 time as an X12 data element 337 (Time) value in one of the element's four
66
+ * forms: the inverse of `readX12Time`, driven by the same layout table (`ediGrammar.ts`), so
67
+ * what one writes the other reads back.
68
+ *
69
+ * - The form is the element's own mask (`HHMM`, `HHMMSS`, `HHMMSSD`, `HHMMSSDD`), looked up
70
+ * exactly and by own key. A data element 1250 code (`TM`, `TS`) and any other string return
71
+ * `""`.
72
+ * - `value` is a time, as `isValidTime` accepts it; Temporal then reads the fields. No digit of
73
+ * the input is sliced.
74
+ * - The form alone fixes the digits written. It is never read off the value, so the width of the
75
+ * field does not depend on the data: a time with no fraction is `14300000` under `HHMMSSDD`.
76
+ * - Precision is cut to the mask and never refused: `D` is the whole tenths of the second and
77
+ * `DD` its whole hundredths. The cut is a truncation, never a rounding, so a written value
78
+ * never names a later second than its input.
79
+ * - Never throws: any failure is `""`.
80
+ *
81
+ * @param form the element's mask
82
+ * @param value one ISO 8601 time
83
+ * @returns the element value, or `""`
84
+ *
85
+ * @example writeX12TimeElement("HHMMSSDD", "14:30:00.12") // "14300012"
86
+ * @example writeX12TimeElement("HHMMSSD", "14:30:00.12") // "1430001" (cut, not rounded)
87
+ * @example writeX12TimeElement("HHMMSSDD", "14:30") // "14300000"
88
+ * @example writeX12TimeElement("HHMM", "14:30:45.999") // "1430"
89
+ * @example writeX12TimeElement("TS", "14:30:45") // "" (a 1250 code, not a mask)
90
+ * @example writeX12TimeElement("HHMM", "2024-06-15T14:30:00") // "" (a date-time is not a time)
91
+ */
92
+ export declare function writeX12TimeElement(form: string, value: string): string;