@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,39 @@
1
+ import type { X12DateTimeFormat } from "../../types/edi.js";
2
+ /**
3
+ * Write an ISO 8601 local date-time as an X12 Date Time Period value (data element 1251) in a
4
+ * date-time format qualifier (data element 1250). The inverse of `parseX12DateTime`.
5
+ *
6
+ * Codes are release 005010, read from
7
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
8
+ * text itself was not reached.
9
+ *
10
+ * ### Format codes
11
+ * | Code | Mask | The dictionary's definition |
12
+ * |---|---|---|
13
+ * | `DT` | `CCYYMMDDHHMM` | "Date and Time Expressed in Format CCYYMMDDHHMM" |
14
+ * | `RTS` | `CCYYMMDDHHMMSS` | "Date and Time Expressed in Format CCYYMMDDHHMMSS" |
15
+ *
16
+ * - `value` is a local date-time, as `isValidDateTime` accepts it. A date and a time return
17
+ * `""`.
18
+ * - **No 1250 code carries an offset**, so an instant ending in `Z` and a date-time with an
19
+ * offset return `""`: an instant is not written as a wall clock. Pass the local date-time.
20
+ * - Precision is cut to the mask, never rounded: a fraction of a second is always dropped, and
21
+ * `DT` drops the seconds too. `2024-06-15T14:30:45.9` is `202406151430` under `DT` and
22
+ * `20240615143045` under `RTS`.
23
+ * - A year outside 0000–9999 returns `""`: `CCYY` is four digits and no sign.
24
+ * - Returns `""` for any other code, a code of another kind included, and for a non-string
25
+ * argument.
26
+ *
27
+ * @param value ISO 8601 local date-time (e.g. "2024-06-15T14:30:00")
28
+ * @param format X12 data element 1250 format qualifier
29
+ * @returns the data element 1251 value, or "" on invalid input
30
+ *
31
+ * @example formatX12DateTime("2024-06-15T14:30:00", "DT") // "202406151430"
32
+ * @example formatX12DateTime("2024-06-15T14:30:45", "RTS") // "20240615143045"
33
+ * @example formatX12DateTime("2024-06-15T14:30:45", "DT") // "202406151430" (the mask has no seconds)
34
+ * @example formatX12DateTime("2024-06-15T14:30:45.9", "RTS") // "20240615143045" (cut, not rounded)
35
+ * @example formatX12DateTime("2024-06-15", "DT") // "" (a date is not a date-time)
36
+ * @example formatX12DateTime("2024-06-15T14:30:00Z", "DT") // "" (no 1250 code carries an offset)
37
+ * @example formatX12DateTime("2023-02-29T14:30:00", "DT") // "" (not a real date)
38
+ */
39
+ export declare function formatX12DateTime(value: string, format: X12DateTimeFormat): string;
@@ -0,0 +1,47 @@
1
+ import { writeEdiValue } from "../../internal/ediDateTimeWriter.js";
2
+ /**
3
+ * Write an ISO 8601 local date-time as an X12 Date Time Period value (data element 1251) in a
4
+ * date-time format qualifier (data element 1250). The inverse of `parseX12DateTime`.
5
+ *
6
+ * Codes are release 005010, read from
7
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
8
+ * text itself was not reached.
9
+ *
10
+ * ### Format codes
11
+ * | Code | Mask | The dictionary's definition |
12
+ * |---|---|---|
13
+ * | `DT` | `CCYYMMDDHHMM` | "Date and Time Expressed in Format CCYYMMDDHHMM" |
14
+ * | `RTS` | `CCYYMMDDHHMMSS` | "Date and Time Expressed in Format CCYYMMDDHHMMSS" |
15
+ *
16
+ * - `value` is a local date-time, as `isValidDateTime` accepts it. A date and a time return
17
+ * `""`.
18
+ * - **No 1250 code carries an offset**, so an instant ending in `Z` and a date-time with an
19
+ * offset return `""`: an instant is not written as a wall clock. Pass the local date-time.
20
+ * - Precision is cut to the mask, never rounded: a fraction of a second is always dropped, and
21
+ * `DT` drops the seconds too. `2024-06-15T14:30:45.9` is `202406151430` under `DT` and
22
+ * `20240615143045` under `RTS`.
23
+ * - A year outside 0000–9999 returns `""`: `CCYY` is four digits and no sign.
24
+ * - Returns `""` for any other code, a code of another kind included, and for a non-string
25
+ * argument.
26
+ *
27
+ * @param value ISO 8601 local date-time (e.g. "2024-06-15T14:30:00")
28
+ * @param format X12 data element 1250 format qualifier
29
+ * @returns the data element 1251 value, or "" on invalid input
30
+ *
31
+ * @example formatX12DateTime("2024-06-15T14:30:00", "DT") // "202406151430"
32
+ * @example formatX12DateTime("2024-06-15T14:30:45", "RTS") // "20240615143045"
33
+ * @example formatX12DateTime("2024-06-15T14:30:45", "DT") // "202406151430" (the mask has no seconds)
34
+ * @example formatX12DateTime("2024-06-15T14:30:45.9", "RTS") // "20240615143045" (cut, not rounded)
35
+ * @example formatX12DateTime("2024-06-15", "DT") // "" (a date is not a date-time)
36
+ * @example formatX12DateTime("2024-06-15T14:30:00Z", "DT") // "" (no 1250 code carries an offset)
37
+ * @example formatX12DateTime("2023-02-29T14:30:00", "DT") // "" (not a real date)
38
+ */
39
+ export function formatX12DateTime(value, format) {
40
+ try {
41
+ return writeEdiValue("x12", "dateTime", format, value);
42
+ }
43
+ catch {
44
+ // Never throws (Core Rule 3): a hostile argument is invalid input, not an exception.
45
+ return "";
46
+ }
47
+ }
@@ -0,0 +1,40 @@
1
+ import type { X12DateTimeRangeFormat } from "../../types/edi.js";
2
+ /**
3
+ * Write two ISO 8601 local date-times as an X12 Date Time Period range (data element 1251) in a
4
+ * date-time range format qualifier (data element 1250). The inverse of `parseX12DateTimeRange`.
5
+ *
6
+ * Codes are release 005010, read from
7
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
8
+ * text itself was not reached.
9
+ *
10
+ * ### Format codes
11
+ * | Code | Mask | The dictionary's definition |
12
+ * |---|---|---|
13
+ * | `RDT` | `CCYYMMDDHHMM-CCYYMMDDHHMM` | "Range of Date and Time, Expressed in Format CCYYMMDDHHMM-CCYYMMDDHHMM" |
14
+ * | `DTS` | `CCYYMMDDHHMMSS-CCYYMMDDHHMMSS` | "Range of Date and Time Expressed in Format CCYYMMDDHHMMSS-CCYYMMDDHHMMSS" |
15
+ *
16
+ * - `start` and `end` are local date-times, as `isValidDateTime` accepts them: the two members
17
+ * `parseX12DateTimeRange` returns. A date, an instant ending in `Z` and a date-time with an
18
+ * offset return `""`: no 1250 code carries an offset.
19
+ * - **The range is written with the one hyphen X12 transmits.**
20
+ * - Precision is cut to the mask, never rounded: a fraction of a second is always dropped from
21
+ * both ends, and `RDT` drops the seconds too.
22
+ * - **An end before its start returns `""`**: a reversed range names no span of time. The ends
23
+ * are compared as given, before either is cut to the mask. An end equal to its start is
24
+ * written.
25
+ * - A year outside 0000–9999 in either end returns `""`.
26
+ * - Returns `""` for any other code, a code of another kind included, and for a non-string
27
+ * argument.
28
+ *
29
+ * @param start ISO 8601 local date-time the range starts at (e.g. "2024-06-15T14:30:00")
30
+ * @param end ISO 8601 local date-time the range ends at (e.g. "2024-06-20T16:00:00")
31
+ * @param format X12 data element 1250 format qualifier
32
+ * @returns the data element 1251 value, or "" on invalid input
33
+ *
34
+ * @example formatX12DateTimeRange("2024-06-15T14:30:00", "2024-06-20T16:00:00", "RDT") // "202406151430-202406201600"
35
+ * @example formatX12DateTimeRange("2024-06-15T14:30:45", "2024-06-20T16:00:30", "DTS") // "20240615143045-20240620160030"
36
+ * @example formatX12DateTimeRange("2024-06-15T14:30:45", "2024-06-20T16:00:30", "RDT") // "202406151430-202406201600" (the mask has no seconds)
37
+ * @example formatX12DateTimeRange("2024-06-15T14:31:00", "2024-06-15T14:30:00", "RDT") // "" (the end precedes the start)
38
+ * @example formatX12DateTimeRange("2024-06-15", "2024-06-20", "RDT") // "" (dates: use formatX12DateRange)
39
+ */
40
+ export declare function formatX12DateTimeRange(start: string, end: string, format: X12DateTimeRangeFormat): string;
@@ -0,0 +1,48 @@
1
+ import { writeEdiRange } from "../../internal/ediDateTimeWriter.js";
2
+ /**
3
+ * Write two ISO 8601 local date-times as an X12 Date Time Period range (data element 1251) in a
4
+ * date-time range format qualifier (data element 1250). The inverse of `parseX12DateTimeRange`.
5
+ *
6
+ * Codes are release 005010, read from
7
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
8
+ * text itself was not reached.
9
+ *
10
+ * ### Format codes
11
+ * | Code | Mask | The dictionary's definition |
12
+ * |---|---|---|
13
+ * | `RDT` | `CCYYMMDDHHMM-CCYYMMDDHHMM` | "Range of Date and Time, Expressed in Format CCYYMMDDHHMM-CCYYMMDDHHMM" |
14
+ * | `DTS` | `CCYYMMDDHHMMSS-CCYYMMDDHHMMSS` | "Range of Date and Time Expressed in Format CCYYMMDDHHMMSS-CCYYMMDDHHMMSS" |
15
+ *
16
+ * - `start` and `end` are local date-times, as `isValidDateTime` accepts them: the two members
17
+ * `parseX12DateTimeRange` returns. A date, an instant ending in `Z` and a date-time with an
18
+ * offset return `""`: no 1250 code carries an offset.
19
+ * - **The range is written with the one hyphen X12 transmits.**
20
+ * - Precision is cut to the mask, never rounded: a fraction of a second is always dropped from
21
+ * both ends, and `RDT` drops the seconds too.
22
+ * - **An end before its start returns `""`**: a reversed range names no span of time. The ends
23
+ * are compared as given, before either is cut to the mask. An end equal to its start is
24
+ * written.
25
+ * - A year outside 0000–9999 in either end returns `""`.
26
+ * - Returns `""` for any other code, a code of another kind included, and for a non-string
27
+ * argument.
28
+ *
29
+ * @param start ISO 8601 local date-time the range starts at (e.g. "2024-06-15T14:30:00")
30
+ * @param end ISO 8601 local date-time the range ends at (e.g. "2024-06-20T16:00:00")
31
+ * @param format X12 data element 1250 format qualifier
32
+ * @returns the data element 1251 value, or "" on invalid input
33
+ *
34
+ * @example formatX12DateTimeRange("2024-06-15T14:30:00", "2024-06-20T16:00:00", "RDT") // "202406151430-202406201600"
35
+ * @example formatX12DateTimeRange("2024-06-15T14:30:45", "2024-06-20T16:00:30", "DTS") // "20240615143045-20240620160030"
36
+ * @example formatX12DateTimeRange("2024-06-15T14:30:45", "2024-06-20T16:00:30", "RDT") // "202406151430-202406201600" (the mask has no seconds)
37
+ * @example formatX12DateTimeRange("2024-06-15T14:31:00", "2024-06-15T14:30:00", "RDT") // "" (the end precedes the start)
38
+ * @example formatX12DateTimeRange("2024-06-15", "2024-06-20", "RDT") // "" (dates: use formatX12DateRange)
39
+ */
40
+ export function formatX12DateTimeRange(start, end, format) {
41
+ try {
42
+ return writeEdiRange("x12", "dateTimeRange", format, start, end);
43
+ }
44
+ catch {
45
+ // Never throws (Core Rule 3): a hostile argument is invalid input, not an exception.
46
+ return "";
47
+ }
48
+ }
@@ -0,0 +1,42 @@
1
+ import type { X12TimeFormat } from "../../types/edi.js";
2
+ /**
3
+ * Write an ISO 8601 time as an X12 time in a time format qualifier (data element 1250). The
4
+ * result is also a data element 337 (Time) value: `parseX12Time` reads it back with the same
5
+ * qualifier, and with none.
6
+ *
7
+ * Codes are release 005010, read from
8
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
9
+ * text itself was not reached.
10
+ *
11
+ * ### Format codes
12
+ * | Code | Mask | The dictionary's definition |
13
+ * |---|---|---|
14
+ * | `TM` | `HHMM` | "Time Expressed in Format HHMM" |
15
+ * | `TS` | `HHMMSS` | "Time Expressed in Format HHMMSS" |
16
+ *
17
+ * - `value` is a time, as `isValidTime` accepts it: `HH:MM`, with seconds and a fraction of a
18
+ * second if it has them. A date-time, a date or a time with an offset returns `""`.
19
+ * - Precision is cut to the mask, never rounded: a fraction of a second is always dropped, and
20
+ * `TM` drops the seconds too. `14:30:45.123` is `1430` under `TM` and `143045` under `TS`.
21
+ * - **To write the time element of a freight segment** (`AT7-06`, `G62-04`, `DTM-03`), use
22
+ * `formatX12TimeElement`: it writes all four forms of data element 337, named by the
23
+ * element's own masks, tenths and hundredths of a second included. `TM` and `TS` give the same
24
+ * digits as that element's `HHMM` and `HHMMSS` forms, and no 1250 code holds decimal seconds.
25
+ * - `TS` here is the format `HHMMSS`. As a data element 623 time code, `TS` is Atlantic Standard
26
+ * Time: read that with `x12TimeCodeZone`.
27
+ * - Returns `""` for any other code, a code of another kind included, and for a non-string
28
+ * argument.
29
+ *
30
+ * @param value ISO 8601 time (e.g. "14:30:00")
31
+ * @param format X12 data element 1250 format qualifier
32
+ * @returns the X12 time value, or "" on invalid input
33
+ *
34
+ * @example formatX12Time("14:30:00", "TM") // "1430"
35
+ * @example formatX12Time("14:30:45", "TS") // "143045"
36
+ * @example formatX12Time("14:30:45.123", "TM") // "1430" (the mask has no seconds)
37
+ * @example formatX12Time("14:30:45.9", "TS") // "143045" (cut, not rounded)
38
+ * @example formatX12Time("14:30", "TS") // "143000"
39
+ * @example formatX12Time("2024-06-15T14:30:00", "TM") // "" (a date-time is not a time)
40
+ * @example formatX12Time("24:00", "TM") // "" (not a real time)
41
+ */
42
+ export declare function formatX12Time(value: string, format: X12TimeFormat): string;
@@ -0,0 +1,50 @@
1
+ import { writeEdiValue } from "../../internal/ediDateTimeWriter.js";
2
+ /**
3
+ * Write an ISO 8601 time as an X12 time in a time format qualifier (data element 1250). The
4
+ * result is also a data element 337 (Time) value: `parseX12Time` reads it back with the same
5
+ * qualifier, and with none.
6
+ *
7
+ * Codes are release 005010, read from
8
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
9
+ * text itself was not reached.
10
+ *
11
+ * ### Format codes
12
+ * | Code | Mask | The dictionary's definition |
13
+ * |---|---|---|
14
+ * | `TM` | `HHMM` | "Time Expressed in Format HHMM" |
15
+ * | `TS` | `HHMMSS` | "Time Expressed in Format HHMMSS" |
16
+ *
17
+ * - `value` is a time, as `isValidTime` accepts it: `HH:MM`, with seconds and a fraction of a
18
+ * second if it has them. A date-time, a date or a time with an offset returns `""`.
19
+ * - Precision is cut to the mask, never rounded: a fraction of a second is always dropped, and
20
+ * `TM` drops the seconds too. `14:30:45.123` is `1430` under `TM` and `143045` under `TS`.
21
+ * - **To write the time element of a freight segment** (`AT7-06`, `G62-04`, `DTM-03`), use
22
+ * `formatX12TimeElement`: it writes all four forms of data element 337, named by the
23
+ * element's own masks, tenths and hundredths of a second included. `TM` and `TS` give the same
24
+ * digits as that element's `HHMM` and `HHMMSS` forms, and no 1250 code holds decimal seconds.
25
+ * - `TS` here is the format `HHMMSS`. As a data element 623 time code, `TS` is Atlantic Standard
26
+ * Time: read that with `x12TimeCodeZone`.
27
+ * - Returns `""` for any other code, a code of another kind included, and for a non-string
28
+ * argument.
29
+ *
30
+ * @param value ISO 8601 time (e.g. "14:30:00")
31
+ * @param format X12 data element 1250 format qualifier
32
+ * @returns the X12 time value, or "" on invalid input
33
+ *
34
+ * @example formatX12Time("14:30:00", "TM") // "1430"
35
+ * @example formatX12Time("14:30:45", "TS") // "143045"
36
+ * @example formatX12Time("14:30:45.123", "TM") // "1430" (the mask has no seconds)
37
+ * @example formatX12Time("14:30:45.9", "TS") // "143045" (cut, not rounded)
38
+ * @example formatX12Time("14:30", "TS") // "143000"
39
+ * @example formatX12Time("2024-06-15T14:30:00", "TM") // "" (a date-time is not a time)
40
+ * @example formatX12Time("24:00", "TM") // "" (not a real time)
41
+ */
42
+ export function formatX12Time(value, format) {
43
+ try {
44
+ return writeEdiValue("x12", "time", format, value);
45
+ }
46
+ catch {
47
+ // Never throws (Core Rule 3): a hostile argument is invalid input, not an exception.
48
+ return "";
49
+ }
50
+ }
@@ -0,0 +1,46 @@
1
+ import type { X12TimeElementForm } from "../../types/edi.js";
2
+ /**
3
+ * Write an ISO 8601 time as an X12 data element 337 (Time) value, in the form the caller names
4
+ * by the element's own mask. `parseX12Time` reads the result back when it is given no qualifier.
5
+ *
6
+ * Element 337 is the time element of many X12 segments: in freight, `AT7-06`, `G62-04` and
7
+ * `DTM-03`. No format qualifier travels with it, so nothing in the segment says which of its
8
+ * four forms a value is in. The definition is release 005010, read from
9
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/337); the X12
10
+ * text itself was not reached.
11
+ *
12
+ * ### Forms
13
+ * | Form | Digits | The dictionary's definition |
14
+ * |---|---|---|
15
+ * | `HHMM` | 4 | "H = hours (00-23), M = minutes (00-59)" |
16
+ * | `HHMMSS` | 6 | "S = integer seconds (00-59)" |
17
+ * | `HHMMSSD` | 7 | "D = tenths (0-9)" |
18
+ * | `HHMMSSDD` | 8 | "DD = hundredths (00-99)" |
19
+ *
20
+ * - `value` is a time, as `isValidTime` accepts it: `HH:MM`, with seconds and a fraction of a
21
+ * second if it has them. A date-time, a date or a time with an offset returns `""`.
22
+ * - **The form alone fixes the digits written.** It is never read off the value, so the width of
23
+ * the field does not depend on the data: a time with no fraction is `14300000` under
24
+ * `HHMMSSDD`, and a time with one is `1430` under `HHMM`.
25
+ * - Precision is cut to the mask, never rounded. `D` is the whole tenths of the second and `DD`
26
+ * its whole hundredths, so `14:30:45.999` is `1430459` under `HHMMSSD` and `14304599` under
27
+ * `HHMMSSDD`. A written value never names a later second than its input.
28
+ * - **The form is a mask, not a data element 1250 code.** `TM` and `TS` return `""` here. To
29
+ * write a time that travels with a 1250 qualifier (`DTP-03`, `DTM-06`), use `formatX12Time`.
30
+ * - Returns `""` for any other form and for a non-string argument.
31
+ *
32
+ * @param value ISO 8601 time (e.g. "14:30:00.12")
33
+ * @param form The element 337 mask to write: `HHMM`, `HHMMSS`, `HHMMSSD` or `HHMMSSDD`
34
+ * @returns the X12 time value, or "" on invalid input
35
+ *
36
+ * @example formatX12TimeElement("14:30:00.12", "HHMMSSDD") // "14300012"
37
+ * @example formatX12TimeElement("14:30:00.12", "HHMMSSD") // "1430001" (cut, not rounded)
38
+ * @example formatX12TimeElement("14:30:00", "HHMMSSDD") // "14300000"
39
+ * @example formatX12TimeElement("14:30", "HHMM") // "1430"
40
+ * @example formatX12TimeElement("14:30:45.999", "HHMMSS") // "143045"
41
+ * @example formatX12TimeElement("14:30:45.999", "HHMMSSD") // "1430459" (cut, not rounded)
42
+ * @example formatX12TimeElement("14:30:45", "TS") // "" (a 1250 code is not a mask)
43
+ * @example formatX12TimeElement("2024-06-15T14:30:00", "HHMM") // "" (a date-time is not a time)
44
+ * @example formatX12TimeElement("24:00", "HHMM") // "" (not a real time)
45
+ */
46
+ export declare function formatX12TimeElement(value: string, form: X12TimeElementForm): string;
@@ -0,0 +1,54 @@
1
+ import { writeX12TimeElement } from "../../internal/ediDateTimeWriter.js";
2
+ /**
3
+ * Write an ISO 8601 time as an X12 data element 337 (Time) value, in the form the caller names
4
+ * by the element's own mask. `parseX12Time` reads the result back when it is given no qualifier.
5
+ *
6
+ * Element 337 is the time element of many X12 segments: in freight, `AT7-06`, `G62-04` and
7
+ * `DTM-03`. No format qualifier travels with it, so nothing in the segment says which of its
8
+ * four forms a value is in. The definition is release 005010, read from
9
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/337); the X12
10
+ * text itself was not reached.
11
+ *
12
+ * ### Forms
13
+ * | Form | Digits | The dictionary's definition |
14
+ * |---|---|---|
15
+ * | `HHMM` | 4 | "H = hours (00-23), M = minutes (00-59)" |
16
+ * | `HHMMSS` | 6 | "S = integer seconds (00-59)" |
17
+ * | `HHMMSSD` | 7 | "D = tenths (0-9)" |
18
+ * | `HHMMSSDD` | 8 | "DD = hundredths (00-99)" |
19
+ *
20
+ * - `value` is a time, as `isValidTime` accepts it: `HH:MM`, with seconds and a fraction of a
21
+ * second if it has them. A date-time, a date or a time with an offset returns `""`.
22
+ * - **The form alone fixes the digits written.** It is never read off the value, so the width of
23
+ * the field does not depend on the data: a time with no fraction is `14300000` under
24
+ * `HHMMSSDD`, and a time with one is `1430` under `HHMM`.
25
+ * - Precision is cut to the mask, never rounded. `D` is the whole tenths of the second and `DD`
26
+ * its whole hundredths, so `14:30:45.999` is `1430459` under `HHMMSSD` and `14304599` under
27
+ * `HHMMSSDD`. A written value never names a later second than its input.
28
+ * - **The form is a mask, not a data element 1250 code.** `TM` and `TS` return `""` here. To
29
+ * write a time that travels with a 1250 qualifier (`DTP-03`, `DTM-06`), use `formatX12Time`.
30
+ * - Returns `""` for any other form and for a non-string argument.
31
+ *
32
+ * @param value ISO 8601 time (e.g. "14:30:00.12")
33
+ * @param form The element 337 mask to write: `HHMM`, `HHMMSS`, `HHMMSSD` or `HHMMSSDD`
34
+ * @returns the X12 time value, or "" on invalid input
35
+ *
36
+ * @example formatX12TimeElement("14:30:00.12", "HHMMSSDD") // "14300012"
37
+ * @example formatX12TimeElement("14:30:00.12", "HHMMSSD") // "1430001" (cut, not rounded)
38
+ * @example formatX12TimeElement("14:30:00", "HHMMSSDD") // "14300000"
39
+ * @example formatX12TimeElement("14:30", "HHMM") // "1430"
40
+ * @example formatX12TimeElement("14:30:45.999", "HHMMSS") // "143045"
41
+ * @example formatX12TimeElement("14:30:45.999", "HHMMSSD") // "1430459" (cut, not rounded)
42
+ * @example formatX12TimeElement("14:30:45", "TS") // "" (a 1250 code is not a mask)
43
+ * @example formatX12TimeElement("2024-06-15T14:30:00", "HHMM") // "" (a date-time is not a time)
44
+ * @example formatX12TimeElement("24:00", "HHMM") // "" (not a real time)
45
+ */
46
+ export function formatX12TimeElement(value, form) {
47
+ try {
48
+ return writeX12TimeElement(form, value);
49
+ }
50
+ catch {
51
+ // Never throws (Core Rule 3): a hostile argument is invalid input, not an exception.
52
+ return "";
53
+ }
54
+ }
@@ -0,0 +1,14 @@
1
+ export * from "./bolTimestamp.js";
2
+ export * from "./formatEdifactDate.js";
3
+ export * from "./formatEdifactDatePeriod.js";
4
+ export * from "./formatEdifactDateTime.js";
5
+ export * from "./formatEdifactDateTimePeriod.js";
6
+ export * from "./formatEdifactOffsetDateTime.js";
7
+ export * from "./formatEdifactTime.js";
8
+ export * from "./formatEpcisEvent.js";
9
+ export * from "./formatX12Date.js";
10
+ export * from "./formatX12DateRange.js";
11
+ export * from "./formatX12DateTime.js";
12
+ export * from "./formatX12DateTimeRange.js";
13
+ export * from "./formatX12Time.js";
14
+ export * from "./formatX12TimeElement.js";
@@ -0,0 +1,14 @@
1
+ export * from "./bolTimestamp.js";
2
+ export * from "./formatEdifactDate.js";
3
+ export * from "./formatEdifactDatePeriod.js";
4
+ export * from "./formatEdifactDateTime.js";
5
+ export * from "./formatEdifactDateTimePeriod.js";
6
+ export * from "./formatEdifactOffsetDateTime.js";
7
+ export * from "./formatEdifactTime.js";
8
+ export * from "./formatEpcisEvent.js";
9
+ export * from "./formatX12Date.js";
10
+ export * from "./formatX12DateRange.js";
11
+ export * from "./formatX12DateTime.js";
12
+ export * from "./formatX12DateTimeRange.js";
13
+ export * from "./formatX12Time.js";
14
+ export * from "./formatX12TimeElement.js";
@@ -1,2 +1,5 @@
1
1
  export * from "@js-temporal/polyfill";
2
2
  export * from "./calculate/index.js";
3
+ export * from "./format/index.js";
4
+ export * from "./parse/index.js";
5
+ export * from "./validate/index.js";
@@ -1,3 +1,6 @@
1
1
  // Re-export the Temporal polyfill (`Temporal`, `Intl`, `toTemporalInstant`) so every namespace subpath offers it
2
2
  export * from "@js-temporal/polyfill";
3
3
  export * from "./calculate/index.js";
4
+ export * from "./format/index.js";
5
+ export * from "./parse/index.js";
6
+ export * from "./validate/index.js";
@@ -0,0 +1,48 @@
1
+ import type { EdifactDtmFormatClass } from "../../types/edi.js";
2
+ /**
3
+ * Name the kind of value a UN/EDIFACT data element 2379 format code states, and return the code
4
+ * narrowed to that kind, so a code that arrives as data reaches the function that reads it.
5
+ *
6
+ * Each kind has its own parser, formatter and validator, and each takes only its own codes. A
7
+ * generic `DTM` reader holds the code as a plain string: it calls this function, tests `kind`,
8
+ * and passes `format` on. Testing `kind` narrows `format` to that kind's union, so the call
9
+ * needs no cast.
10
+ *
11
+ * ### Kinds
12
+ * | `kind` | Codes | Read by |
13
+ * |---|---|---|
14
+ * | `"date"` | `102` | `parseEdifactDate` |
15
+ * | `"time"` | `401`, `402` | `parseEdifactTime` |
16
+ * | `"dateTime"` | `203`, `204` | `parseEdifactDateTime` |
17
+ * | `"offsetDateTime"` | `205`, `208`, `303`, `304` | `parseEdifactOffsetDateTime` |
18
+ * | `"datePeriod"` | `718` | `parseEdifactDatePeriod` |
19
+ * | `"dateTimePeriod"` | `719` | `parseEdifactDateTimePeriod` |
20
+ *
21
+ * - **The narrowing pattern.** With `const classified = classifyEdifactDtmFormat(code)`, the
22
+ * line `if (classified?.kind === "date") parseEdifactDate(value, classified.format)` compiles
23
+ * with no cast: inside the test, `classified.format` is `EdifactDateFormat`.
24
+ * - Both members are always present, and each call returns a new object.
25
+ * - Returns `null` for every code no function reads: the two-digit-year codes (`101`, `201`,
26
+ * `202`, `206`, `207`, `301`, `302`, `713`, `717`), `209`, `404`, `406` and every other 2379
27
+ * code.
28
+ * - Matching is exact: `" 203"`, `"0203"` and the number `203` are not codes.
29
+ * - Returns a result exactly when `isValidEdifactDtmFormat` is true.
30
+ *
31
+ * @param format The data element 2379 format code, as it arrives (e.g. "203")
32
+ * @returns `{ kind, format }`, or null on invalid input
33
+ *
34
+ * @example classifyEdifactDtmFormat("102") // { kind: "date", format: "102" }
35
+ * @example classifyEdifactDtmFormat("401") // { kind: "time", format: "401" }
36
+ * @example classifyEdifactDtmFormat("402") // { kind: "time", format: "402" }
37
+ * @example classifyEdifactDtmFormat("203") // { kind: "dateTime", format: "203" }
38
+ * @example classifyEdifactDtmFormat("204") // { kind: "dateTime", format: "204" }
39
+ * @example classifyEdifactDtmFormat("205") // { kind: "offsetDateTime", format: "205" }
40
+ * @example classifyEdifactDtmFormat("208") // { kind: "offsetDateTime", format: "208" }
41
+ * @example classifyEdifactDtmFormat("303") // { kind: "offsetDateTime", format: "303" }
42
+ * @example classifyEdifactDtmFormat("304") // { kind: "offsetDateTime", format: "304" }
43
+ * @example classifyEdifactDtmFormat("718") // { kind: "datePeriod", format: "718" }
44
+ * @example classifyEdifactDtmFormat("719") // { kind: "dateTimePeriod", format: "719" }
45
+ * @example classifyEdifactDtmFormat("101") // null (a two-digit year is not read)
46
+ * @example classifyEdifactDtmFormat("602") // null (not a supported code)
47
+ */
48
+ export declare function classifyEdifactDtmFormat(format: string): EdifactDtmFormatClass | null;
@@ -0,0 +1,55 @@
1
+ import { ediCodeOf } from "../../internal/ediGrammar.js";
2
+ /**
3
+ * Name the kind of value a UN/EDIFACT data element 2379 format code states, and return the code
4
+ * narrowed to that kind, so a code that arrives as data reaches the function that reads it.
5
+ *
6
+ * Each kind has its own parser, formatter and validator, and each takes only its own codes. A
7
+ * generic `DTM` reader holds the code as a plain string: it calls this function, tests `kind`,
8
+ * and passes `format` on. Testing `kind` narrows `format` to that kind's union, so the call
9
+ * needs no cast.
10
+ *
11
+ * ### Kinds
12
+ * | `kind` | Codes | Read by |
13
+ * |---|---|---|
14
+ * | `"date"` | `102` | `parseEdifactDate` |
15
+ * | `"time"` | `401`, `402` | `parseEdifactTime` |
16
+ * | `"dateTime"` | `203`, `204` | `parseEdifactDateTime` |
17
+ * | `"offsetDateTime"` | `205`, `208`, `303`, `304` | `parseEdifactOffsetDateTime` |
18
+ * | `"datePeriod"` | `718` | `parseEdifactDatePeriod` |
19
+ * | `"dateTimePeriod"` | `719` | `parseEdifactDateTimePeriod` |
20
+ *
21
+ * - **The narrowing pattern.** With `const classified = classifyEdifactDtmFormat(code)`, the
22
+ * line `if (classified?.kind === "date") parseEdifactDate(value, classified.format)` compiles
23
+ * with no cast: inside the test, `classified.format` is `EdifactDateFormat`.
24
+ * - Both members are always present, and each call returns a new object.
25
+ * - Returns `null` for every code no function reads: the two-digit-year codes (`101`, `201`,
26
+ * `202`, `206`, `207`, `301`, `302`, `713`, `717`), `209`, `404`, `406` and every other 2379
27
+ * code.
28
+ * - Matching is exact: `" 203"`, `"0203"` and the number `203` are not codes.
29
+ * - Returns a result exactly when `isValidEdifactDtmFormat` is true.
30
+ *
31
+ * @param format The data element 2379 format code, as it arrives (e.g. "203")
32
+ * @returns `{ kind, format }`, or null on invalid input
33
+ *
34
+ * @example classifyEdifactDtmFormat("102") // { kind: "date", format: "102" }
35
+ * @example classifyEdifactDtmFormat("401") // { kind: "time", format: "401" }
36
+ * @example classifyEdifactDtmFormat("402") // { kind: "time", format: "402" }
37
+ * @example classifyEdifactDtmFormat("203") // { kind: "dateTime", format: "203" }
38
+ * @example classifyEdifactDtmFormat("204") // { kind: "dateTime", format: "204" }
39
+ * @example classifyEdifactDtmFormat("205") // { kind: "offsetDateTime", format: "205" }
40
+ * @example classifyEdifactDtmFormat("208") // { kind: "offsetDateTime", format: "208" }
41
+ * @example classifyEdifactDtmFormat("303") // { kind: "offsetDateTime", format: "303" }
42
+ * @example classifyEdifactDtmFormat("304") // { kind: "offsetDateTime", format: "304" }
43
+ * @example classifyEdifactDtmFormat("718") // { kind: "datePeriod", format: "718" }
44
+ * @example classifyEdifactDtmFormat("719") // { kind: "dateTimePeriod", format: "719" }
45
+ * @example classifyEdifactDtmFormat("101") // null (a two-digit year is not read)
46
+ * @example classifyEdifactDtmFormat("602") // null (not a supported code)
47
+ */
48
+ export function classifyEdifactDtmFormat(format) {
49
+ const entry = ediCodeOf("edifact", format);
50
+ // The layout table is typed kind by kind from the format unions, so the kind an entry carries
51
+ // is the kind of the union its code belongs to.
52
+ return entry === null
53
+ ? null
54
+ : { kind: entry.kind, format };
55
+ }
@@ -0,0 +1,50 @@
1
+ import type { X12DateTimePeriodFormatClass } from "../../types/edi.js";
2
+ /**
3
+ * Name the kind of value an X12 data element 1250 format qualifier states, and return the code
4
+ * narrowed to that kind, so a code that arrives as data reaches the function that reads it.
5
+ *
6
+ * Each kind has its own parser, formatter and validator, and each takes only its own codes. A
7
+ * generic `DTP` reader holds `DTP-02` as a plain string: it calls this function, tests `kind`,
8
+ * and passes `format` on. Testing `kind` narrows `format` to that kind's union, so the call
9
+ * needs no cast. Codes are release 005010, read from
10
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
11
+ * text itself was not reached.
12
+ *
13
+ * ### Kinds
14
+ * | `kind` | Codes | Read by |
15
+ * |---|---|---|
16
+ * | `"date"` | `D8`, `DB` | `parseX12Date` |
17
+ * | `"time"` | `TM`, `TS` | `parseX12Time(value, format)` |
18
+ * | `"dateTime"` | `DT`, `RTS` | `parseX12DateTime` |
19
+ * | `"dateRange"` | `RD8`, `RD` | `parseX12DateRange` |
20
+ * | `"dateTimeRange"` | `RDT`, `DTS` | `parseX12DateTimeRange` |
21
+ *
22
+ * - **The narrowing pattern.** With `const classified = classifyX12DateTimePeriodFormat(code)`,
23
+ * the line `if (classified?.kind === "date") parseX12Date(value, classified.format)` compiles
24
+ * with no cast: inside the test, `classified.format` is `X12DateFormat`.
25
+ * - Both members are always present, and each call returns a new object.
26
+ * - `RTS` is one date-time despite its `R`, and `DTS` is a range despite having none.
27
+ * - Returns `null` for every code no function reads: the two-digit-year codes (`D6`, `TT`, `TR`,
28
+ * `RD6`, `TU`), `TC`, `EH`, `DDT`, `DTD`, `RTM`, `UN` and every other 1250 code.
29
+ * - This is a format qualifier, not a time code: `TS` here is the format `HHMMSS`. Classify a
30
+ * data element 623 time code with `classifyX12TimeCode`.
31
+ * - Matching is exact: `"d8"` and `" D8"` are not codes.
32
+ * - Returns a result exactly when `isValidX12DateTimePeriodFormat` is true.
33
+ *
34
+ * @param format X12 data element 1250 format qualifier, as it arrives (e.g. "D8")
35
+ * @returns `{ kind, format }`, or null on invalid input
36
+ *
37
+ * @example classifyX12DateTimePeriodFormat("D8") // { kind: "date", format: "D8" }
38
+ * @example classifyX12DateTimePeriodFormat("DB") // { kind: "date", format: "DB" }
39
+ * @example classifyX12DateTimePeriodFormat("TM") // { kind: "time", format: "TM" }
40
+ * @example classifyX12DateTimePeriodFormat("TS") // { kind: "time", format: "TS" }
41
+ * @example classifyX12DateTimePeriodFormat("DT") // { kind: "dateTime", format: "DT" }
42
+ * @example classifyX12DateTimePeriodFormat("RTS") // { kind: "dateTime", format: "RTS" }
43
+ * @example classifyX12DateTimePeriodFormat("RD8") // { kind: "dateRange", format: "RD8" }
44
+ * @example classifyX12DateTimePeriodFormat("RD") // { kind: "dateRange", format: "RD" }
45
+ * @example classifyX12DateTimePeriodFormat("RDT") // { kind: "dateTimeRange", format: "RDT" }
46
+ * @example classifyX12DateTimePeriodFormat("DTS") // { kind: "dateTimeRange", format: "DTS" }
47
+ * @example classifyX12DateTimePeriodFormat("D6") // null (a two-digit year is not read)
48
+ * @example classifyX12DateTimePeriodFormat("UN") // null (unstructured: nothing to read)
49
+ */
50
+ export declare function classifyX12DateTimePeriodFormat(format: string): X12DateTimePeriodFormatClass | null;
@@ -0,0 +1,57 @@
1
+ import { ediCodeOf } from "../../internal/ediGrammar.js";
2
+ /**
3
+ * Name the kind of value an X12 data element 1250 format qualifier states, and return the code
4
+ * narrowed to that kind, so a code that arrives as data reaches the function that reads it.
5
+ *
6
+ * Each kind has its own parser, formatter and validator, and each takes only its own codes. A
7
+ * generic `DTP` reader holds `DTP-02` as a plain string: it calls this function, tests `kind`,
8
+ * and passes `format` on. Testing `kind` narrows `format` to that kind's union, so the call
9
+ * needs no cast. Codes are release 005010, read from
10
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
11
+ * text itself was not reached.
12
+ *
13
+ * ### Kinds
14
+ * | `kind` | Codes | Read by |
15
+ * |---|---|---|
16
+ * | `"date"` | `D8`, `DB` | `parseX12Date` |
17
+ * | `"time"` | `TM`, `TS` | `parseX12Time(value, format)` |
18
+ * | `"dateTime"` | `DT`, `RTS` | `parseX12DateTime` |
19
+ * | `"dateRange"` | `RD8`, `RD` | `parseX12DateRange` |
20
+ * | `"dateTimeRange"` | `RDT`, `DTS` | `parseX12DateTimeRange` |
21
+ *
22
+ * - **The narrowing pattern.** With `const classified = classifyX12DateTimePeriodFormat(code)`,
23
+ * the line `if (classified?.kind === "date") parseX12Date(value, classified.format)` compiles
24
+ * with no cast: inside the test, `classified.format` is `X12DateFormat`.
25
+ * - Both members are always present, and each call returns a new object.
26
+ * - `RTS` is one date-time despite its `R`, and `DTS` is a range despite having none.
27
+ * - Returns `null` for every code no function reads: the two-digit-year codes (`D6`, `TT`, `TR`,
28
+ * `RD6`, `TU`), `TC`, `EH`, `DDT`, `DTD`, `RTM`, `UN` and every other 1250 code.
29
+ * - This is a format qualifier, not a time code: `TS` here is the format `HHMMSS`. Classify a
30
+ * data element 623 time code with `classifyX12TimeCode`.
31
+ * - Matching is exact: `"d8"` and `" D8"` are not codes.
32
+ * - Returns a result exactly when `isValidX12DateTimePeriodFormat` is true.
33
+ *
34
+ * @param format X12 data element 1250 format qualifier, as it arrives (e.g. "D8")
35
+ * @returns `{ kind, format }`, or null on invalid input
36
+ *
37
+ * @example classifyX12DateTimePeriodFormat("D8") // { kind: "date", format: "D8" }
38
+ * @example classifyX12DateTimePeriodFormat("DB") // { kind: "date", format: "DB" }
39
+ * @example classifyX12DateTimePeriodFormat("TM") // { kind: "time", format: "TM" }
40
+ * @example classifyX12DateTimePeriodFormat("TS") // { kind: "time", format: "TS" }
41
+ * @example classifyX12DateTimePeriodFormat("DT") // { kind: "dateTime", format: "DT" }
42
+ * @example classifyX12DateTimePeriodFormat("RTS") // { kind: "dateTime", format: "RTS" }
43
+ * @example classifyX12DateTimePeriodFormat("RD8") // { kind: "dateRange", format: "RD8" }
44
+ * @example classifyX12DateTimePeriodFormat("RD") // { kind: "dateRange", format: "RD" }
45
+ * @example classifyX12DateTimePeriodFormat("RDT") // { kind: "dateTimeRange", format: "RDT" }
46
+ * @example classifyX12DateTimePeriodFormat("DTS") // { kind: "dateTimeRange", format: "DTS" }
47
+ * @example classifyX12DateTimePeriodFormat("D6") // null (a two-digit year is not read)
48
+ * @example classifyX12DateTimePeriodFormat("UN") // null (unstructured: nothing to read)
49
+ */
50
+ export function classifyX12DateTimePeriodFormat(format) {
51
+ const entry = ediCodeOf("x12", format);
52
+ // The layout table is typed kind by kind from the format unions, so the kind an entry carries
53
+ // is the kind of the union its code belongs to.
54
+ return entry === null
55
+ ? null
56
+ : { kind: entry.kind, format };
57
+ }