@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,105 @@
1
+ /**
2
+ * X12 data element 623 code → the zone its definition names, release 008010, read from Stedi's
3
+ * X12-licensed dictionary (https://www.stedi.com/edi/x12-008010/element/623); the X12 text was
4
+ * not reached. Each comment quotes the definition. Typed by `X12ZoneTimeCode`, so a missing code
5
+ * fails typecheck.
6
+ */
7
+ const X12_TIME_CODE_ZONE = {
8
+ // "Alaska Daylight Time", "Alaska Standard Time", "Alaska Time"
9
+ AD: { zone: "Alaska", daylight: true },
10
+ AS: { zone: "Alaska", daylight: false },
11
+ AT: { zone: "Alaska", daylight: null },
12
+ // "Central Daylight Time", "Central Standard Time", "Central Time"
13
+ CD: { zone: "Central", daylight: true },
14
+ CS: { zone: "Central", daylight: false },
15
+ CT: { zone: "Central", daylight: null },
16
+ // "Eastern Daylight Time", "Eastern Standard Time", "Eastern Time"
17
+ ED: { zone: "Eastern", daylight: true },
18
+ ES: { zone: "Eastern", daylight: false },
19
+ ET: { zone: "Eastern", daylight: null },
20
+ // "Hawaii-Aleutian Daylight Time", "Hawaii-Aleutian Standard Time", "Hawaii-Aleutian Time"
21
+ HD: { zone: "Hawaii-Aleutian", daylight: true },
22
+ HS: { zone: "Hawaii-Aleutian", daylight: false },
23
+ HT: { zone: "Hawaii-Aleutian", daylight: null },
24
+ // "Local Time"
25
+ LT: { zone: "Local", daylight: null },
26
+ // "Mountain Daylight Time", "Mountain Standard Time", "Mountain Time"
27
+ MD: { zone: "Mountain", daylight: true },
28
+ MS: { zone: "Mountain", daylight: false },
29
+ MT: { zone: "Mountain", daylight: null },
30
+ // "Newfoundland Daylight Time", "Newfoundland Standard Time", "Newfoundland Time"
31
+ ND: { zone: "Newfoundland", daylight: true },
32
+ NS: { zone: "Newfoundland", daylight: false },
33
+ NT: { zone: "Newfoundland", daylight: null },
34
+ // "Pacific Daylight Time", "Pacific Standard Time", "Pacific Time"
35
+ PD: { zone: "Pacific", daylight: true },
36
+ PS: { zone: "Pacific", daylight: false },
37
+ PT: { zone: "Pacific", daylight: null },
38
+ // "Atlantic Daylight Time", "Atlantic Standard Time", "Atlantic Time"
39
+ TD: { zone: "Atlantic", daylight: true },
40
+ TS: { zone: "Atlantic", daylight: false },
41
+ TT: { zone: "Atlantic", daylight: null },
42
+ };
43
+ /**
44
+ * Read the zone an X12 time code (data element 623) names.
45
+ *
46
+ * Data element 623 is the code beside the date (element 373) and time (element 337) of an X12
47
+ * `AT7`, `G62` or `DTM` segment. 25 of its 56 codes name a zone and state no offset; this
48
+ * function reads those. Codes are release 008010, read from
49
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-008010/element/623); the X12
50
+ * text itself was not reached.
51
+ *
52
+ * ### Time codes that name a zone
53
+ * | Codes | The dictionary's definition | `zone` |
54
+ * |---|---|---|
55
+ * | `AD`, `AS`, `AT` | "Alaska Daylight Time", "Alaska Standard Time", "Alaska Time" | `Alaska` |
56
+ * | `CD`, `CS`, `CT` | "Central Daylight Time", "Central Standard Time", "Central Time" | `Central` |
57
+ * | `ED`, `ES`, `ET` | "Eastern Daylight Time", "Eastern Standard Time", "Eastern Time" | `Eastern` |
58
+ * | `HD`, `HS`, `HT` | "Hawaii-Aleutian Daylight Time", "Hawaii-Aleutian Standard Time", "Hawaii-Aleutian Time" | `Hawaii-Aleutian` |
59
+ * | `MD`, `MS`, `MT` | "Mountain Daylight Time", "Mountain Standard Time", "Mountain Time" | `Mountain` |
60
+ * | `ND`, `NS`, `NT` | "Newfoundland Daylight Time", "Newfoundland Standard Time", "Newfoundland Time" | `Newfoundland` |
61
+ * | `PD`, `PS`, `PT` | "Pacific Daylight Time", "Pacific Standard Time", "Pacific Time" | `Pacific` |
62
+ * | `TD`, `TS`, `TT` | "Atlantic Daylight Time", "Atlantic Standard Time", "Atlantic Time" | `Atlantic` |
63
+ * | `LT` | "Local Time" | `Local` |
64
+ *
65
+ * - **The result is a zone name, not an offset.** X12 states no offset for these codes and GMT
66
+ * holds no registry of places, so the caller maps the name to an IANA zone. A caller might
67
+ * choose `America/New_York` for `Eastern`; the choice is the caller's. Resolve the local
68
+ * date-time in that zone with `resolveLocal`.
69
+ * - **`daylight` is `true` for a `D` code, `false` for an `S` code and `null` for a `T` code**,
70
+ * which says neither: the date decides. Both members are always present.
71
+ * - **`LT` is local to the event** and returns `{ zone: "Local", daylight: null }`. The place is
72
+ * elsewhere in the message, so the caller supplies its zone.
73
+ * - **An offset code returns `null`**: `01`–`29`, `UT` and `GM` state an offset and name no
74
+ * zone. Read one with `x12TimeCodeOffset`.
75
+ * - **`TS`, `TT`, `CD` and `MD` are codes of data element 1250 too**, with unrelated meanings:
76
+ * here they are Atlantic Standard, Atlantic, Central Daylight and Mountain Daylight Time;
77
+ * there `TS` is the format `HHMMSS`. Pass a time code here and a format qualifier to the
78
+ * `parseX12…` functions.
79
+ * - **For a code that arrives as a string**, call `classifyX12TimeCode` first: its `"zone"`
80
+ * result carries the code narrowed to this function's parameter.
81
+ * - Matching is exact: two characters, upper case, no padding. Each call returns a new object.
82
+ * Returns `null` for a code that is not one of the 56 and for a non-string.
83
+ *
84
+ * @param timeCode X12 data element 623 time code (e.g. "ES")
85
+ * @returns `{ zone, daylight }`, or null on invalid input
86
+ *
87
+ * @example x12TimeCodeZone("ES") // { zone: "Eastern", daylight: false }
88
+ * @example x12TimeCodeZone("ED") // { zone: "Eastern", daylight: true }
89
+ * @example x12TimeCodeZone("ET") // { zone: "Eastern", daylight: null } (the date decides)
90
+ * @example x12TimeCodeZone("PD") // { zone: "Pacific", daylight: true }
91
+ * @example x12TimeCodeZone("TS") // { zone: "Atlantic", daylight: false }
92
+ * @example x12TimeCodeZone("LT") // { zone: "Local", daylight: null } (the place is elsewhere in the message)
93
+ * @example x12TimeCodeZone("UT") // null (an offset code: use x12TimeCodeOffset)
94
+ * @example x12TimeCodeZone("20") // null (an offset code)
95
+ * @example x12TimeCodeZone("EST") // null (not a 623 code)
96
+ * @example x12TimeCodeZone("et") // null (matching is exact)
97
+ */
98
+ export function x12TimeCodeZone(timeCode) {
99
+ if (typeof timeCode !== "string" ||
100
+ !Object.hasOwn(X12_TIME_CODE_ZONE, timeCode)) {
101
+ return null;
102
+ }
103
+ // A copy, so a caller cannot change the table through a result.
104
+ return { ...X12_TIME_CODE_ZONE[timeCode] };
105
+ }
@@ -0,0 +1,18 @@
1
+ export * from "./isValidEdifactDate.js";
2
+ export * from "./isValidEdifactDatePeriod.js";
3
+ export * from "./isValidEdifactDateTime.js";
4
+ export * from "./isValidEdifactDateTimePeriod.js";
5
+ export * from "./isValidEdifactDtmFormat.js";
6
+ export * from "./isValidEdifactOffsetDateTime.js";
7
+ export * from "./isValidEdifactTime.js";
8
+ export * from "./isValidEpcisEvent.js";
9
+ export * from "./isValidEpcisEventTime.js";
10
+ export * from "./isValidEpcisTimeZoneOffset.js";
11
+ export * from "./isValidX12Date.js";
12
+ export * from "./isValidX12DateAndTime.js";
13
+ export * from "./isValidX12DateRange.js";
14
+ export * from "./isValidX12DateTime.js";
15
+ export * from "./isValidX12DateTimePeriodFormat.js";
16
+ export * from "./isValidX12DateTimeRange.js";
17
+ export * from "./isValidX12Time.js";
18
+ export * from "./isValidX12TimeCode.js";
@@ -0,0 +1,18 @@
1
+ export * from "./isValidEdifactDate.js";
2
+ export * from "./isValidEdifactDatePeriod.js";
3
+ export * from "./isValidEdifactDateTime.js";
4
+ export * from "./isValidEdifactDateTimePeriod.js";
5
+ export * from "./isValidEdifactDtmFormat.js";
6
+ export * from "./isValidEdifactOffsetDateTime.js";
7
+ export * from "./isValidEdifactTime.js";
8
+ export * from "./isValidEpcisEvent.js";
9
+ export * from "./isValidEpcisEventTime.js";
10
+ export * from "./isValidEpcisTimeZoneOffset.js";
11
+ export * from "./isValidX12Date.js";
12
+ export * from "./isValidX12DateAndTime.js";
13
+ export * from "./isValidX12DateRange.js";
14
+ export * from "./isValidX12DateTime.js";
15
+ export * from "./isValidX12DateTimePeriodFormat.js";
16
+ export * from "./isValidX12DateTimeRange.js";
17
+ export * from "./isValidX12Time.js";
18
+ export * from "./isValidX12TimeCode.js";
@@ -0,0 +1,26 @@
1
+ import type { EdifactDateFormat } from "../../types/edi.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * calendar date in a date format code (data element 2379).
5
+ *
6
+ * ### Format code
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `102` | `CCYYMMDD` | "Calendar date: C = Century ; Y = Year ; M = Month ; D = Day." |
10
+ *
11
+ * - True exactly when `parseEdifactDate` returns a date for the same arguments: the validator
12
+ * calls the parser, so the two cannot disagree.
13
+ * - Checks the calendar as well as the shape: 31 June and 29 February 2023 are false.
14
+ * - False for any other code, a code of another kind included; check a code alone with
15
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
16
+ *
17
+ * @param value The data element 2380 value (e.g. "20240615")
18
+ * @param format The data element 2379 format code
19
+ * @returns boolean indicating validity
20
+ *
21
+ * @example isValidEdifactDate("20240615", "102") // true
22
+ * @example isValidEdifactDate("20230229", "102") // false (2023 has no 29 February)
23
+ * @example isValidEdifactDate("240615", "102") // false (a two-digit year is not read)
24
+ * @example isValidEdifactDate("202406151430", "203") // false (a date-time code)
25
+ */
26
+ export declare function isValidEdifactDate(value: string, format: EdifactDateFormat): boolean;
@@ -0,0 +1,28 @@
1
+ import { parseEdifactDate } from "../parse/parseEdifactDate.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * calendar date in a date format code (data element 2379).
5
+ *
6
+ * ### Format code
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `102` | `CCYYMMDD` | "Calendar date: C = Century ; Y = Year ; M = Month ; D = Day." |
10
+ *
11
+ * - True exactly when `parseEdifactDate` returns a date for the same arguments: the validator
12
+ * calls the parser, so the two cannot disagree.
13
+ * - Checks the calendar as well as the shape: 31 June and 29 February 2023 are false.
14
+ * - False for any other code, a code of another kind included; check a code alone with
15
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
16
+ *
17
+ * @param value The data element 2380 value (e.g. "20240615")
18
+ * @param format The data element 2379 format code
19
+ * @returns boolean indicating validity
20
+ *
21
+ * @example isValidEdifactDate("20240615", "102") // true
22
+ * @example isValidEdifactDate("20230229", "102") // false (2023 has no 29 February)
23
+ * @example isValidEdifactDate("240615", "102") // false (a two-digit year is not read)
24
+ * @example isValidEdifactDate("202406151430", "203") // false (a date-time code)
25
+ */
26
+ export function isValidEdifactDate(value, format) {
27
+ return parseEdifactDate(value, format) !== "";
28
+ }
@@ -0,0 +1,28 @@
1
+ import type { EdifactDatePeriodFormat } from "../../types/edi.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
4
+ * between two real calendar dates, in a date period format code (data element 2379).
5
+ *
6
+ * ### Format code
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `718` | `CCYYMMDD-CCYYMMDD` | "A period of time specified by giving the start date followed by the end date (both including century). Data is to be transmitted as consecutive characters without hyphen." |
10
+ *
11
+ * - True exactly when `parseEdifactDatePeriod` returns a period for the same arguments: the
12
+ * validator calls the parser, so the two cannot disagree.
13
+ * - A period is valid in its wire form only, with no hyphen: `"20240615-20240620"` is false.
14
+ * - A period whose end precedes its start is false; an end equal to its start is true.
15
+ * - Checks the calendar as well as the shape: 29 February 2023 in either date is false.
16
+ * - False for any other code, a code of another kind included; check a code alone with
17
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
18
+ *
19
+ * @param value The data element 2380 value (e.g. "2024061520240620")
20
+ * @param format The data element 2379 format code
21
+ * @returns boolean indicating validity
22
+ *
23
+ * @example isValidEdifactDatePeriod("2024061520240620", "718") // true
24
+ * @example isValidEdifactDatePeriod("20240615-20240620", "718") // false (a period is transmitted without a hyphen)
25
+ * @example isValidEdifactDatePeriod("2024062020240615", "718") // false (the end precedes the start)
26
+ * @example isValidEdifactDatePeriod("20240615", "718") // false (one date)
27
+ */
28
+ export declare function isValidEdifactDatePeriod(value: string, format: EdifactDatePeriodFormat): boolean;
@@ -0,0 +1,30 @@
1
+ import { parseEdifactDatePeriod } from "../parse/parseEdifactDatePeriod.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
4
+ * between two real calendar dates, in a date period format code (data element 2379).
5
+ *
6
+ * ### Format code
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `718` | `CCYYMMDD-CCYYMMDD` | "A period of time specified by giving the start date followed by the end date (both including century). Data is to be transmitted as consecutive characters without hyphen." |
10
+ *
11
+ * - True exactly when `parseEdifactDatePeriod` returns a period for the same arguments: the
12
+ * validator calls the parser, so the two cannot disagree.
13
+ * - A period is valid in its wire form only, with no hyphen: `"20240615-20240620"` is false.
14
+ * - A period whose end precedes its start is false; an end equal to its start is true.
15
+ * - Checks the calendar as well as the shape: 29 February 2023 in either date is false.
16
+ * - False for any other code, a code of another kind included; check a code alone with
17
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
18
+ *
19
+ * @param value The data element 2380 value (e.g. "2024061520240620")
20
+ * @param format The data element 2379 format code
21
+ * @returns boolean indicating validity
22
+ *
23
+ * @example isValidEdifactDatePeriod("2024061520240620", "718") // true
24
+ * @example isValidEdifactDatePeriod("20240615-20240620", "718") // false (a period is transmitted without a hyphen)
25
+ * @example isValidEdifactDatePeriod("2024062020240615", "718") // false (the end precedes the start)
26
+ * @example isValidEdifactDatePeriod("20240615", "718") // false (one date)
27
+ */
28
+ export function isValidEdifactDatePeriod(value, format) {
29
+ return parseEdifactDatePeriod(value, format) !== null;
30
+ }
@@ -0,0 +1,30 @@
1
+ import type { EdifactDateTimeFormat } from "../../types/edi.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * date and time in a format code with no offset (data element 2379).
5
+ *
6
+ * ### Format codes
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `203` | `CCYYMMDDHHMM` | "Calendar date including time with minutes" |
10
+ * | `204` | `CCYYMMDDHHMMSS` | "Calendar date including time with seconds" |
11
+ *
12
+ * - True exactly when `parseEdifactDateTime` returns a date-time for the same arguments: the
13
+ * validator calls the parser, so the two cannot disagree.
14
+ * - A value is valid only against its code: `"202406151430"` is a `203` value and not a `204`
15
+ * one.
16
+ * - Checks the calendar as well as the shape: 31 June, 29 February 2023, hour 24 and second 60
17
+ * are false.
18
+ * - False for any other code, a code of another kind included; check a code alone with
19
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
20
+ *
21
+ * @param value The data element 2380 value (e.g. "202406151430")
22
+ * @param format The data element 2379 format code
23
+ * @returns boolean indicating validity
24
+ *
25
+ * @example isValidEdifactDateTime("202406151430", "203") // true
26
+ * @example isValidEdifactDateTime("20240615143045", "204") // true
27
+ * @example isValidEdifactDateTime("202406151430", "204") // false (twelve digits is a 203 value)
28
+ * @example isValidEdifactDateTime("202302291430", "203") // false (2023 has no 29 February)
29
+ */
30
+ export declare function isValidEdifactDateTime(value: string, format: EdifactDateTimeFormat): boolean;
@@ -0,0 +1,32 @@
1
+ import { parseEdifactDateTime } from "../parse/parseEdifactDateTime.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * date and time in a format code with no offset (data element 2379).
5
+ *
6
+ * ### Format codes
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `203` | `CCYYMMDDHHMM` | "Calendar date including time with minutes" |
10
+ * | `204` | `CCYYMMDDHHMMSS` | "Calendar date including time with seconds" |
11
+ *
12
+ * - True exactly when `parseEdifactDateTime` returns a date-time for the same arguments: the
13
+ * validator calls the parser, so the two cannot disagree.
14
+ * - A value is valid only against its code: `"202406151430"` is a `203` value and not a `204`
15
+ * one.
16
+ * - Checks the calendar as well as the shape: 31 June, 29 February 2023, hour 24 and second 60
17
+ * are false.
18
+ * - False for any other code, a code of another kind included; check a code alone with
19
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
20
+ *
21
+ * @param value The data element 2380 value (e.g. "202406151430")
22
+ * @param format The data element 2379 format code
23
+ * @returns boolean indicating validity
24
+ *
25
+ * @example isValidEdifactDateTime("202406151430", "203") // true
26
+ * @example isValidEdifactDateTime("20240615143045", "204") // true
27
+ * @example isValidEdifactDateTime("202406151430", "204") // false (twelve digits is a 203 value)
28
+ * @example isValidEdifactDateTime("202302291430", "203") // false (2023 has no 29 February)
29
+ */
30
+ export function isValidEdifactDateTime(value, format) {
31
+ return parseEdifactDateTime(value, format) !== "";
32
+ }
@@ -0,0 +1,28 @@
1
+ import type { EdifactDateTimePeriodFormat } from "../../types/edi.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
4
+ * between two real local date-times, in a date-time period format code (data element 2379).
5
+ *
6
+ * ### Format code
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `719` | `CCYYMMDDHHMM-CCYYMMDDHHMM` | "A period of time which includes the century, year, month, day, hour and minute. Format of period to be given in actual message without hyphen." |
10
+ *
11
+ * - True exactly when `parseEdifactDateTimePeriod` returns a period for the same arguments: the
12
+ * validator calls the parser, so the two cannot disagree.
13
+ * - A period is valid in its wire form only, with no hyphen.
14
+ * - A period whose end precedes its start is false; an end equal to its start is true.
15
+ * - Checks the calendar as well as the shape: hour 24 and 29 February 2023 are false.
16
+ * - False for any other code, a code of another kind included; check a code alone with
17
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
18
+ *
19
+ * @param value The data element 2380 value (e.g. "202406151430202406201600")
20
+ * @param format The data element 2379 format code
21
+ * @returns boolean indicating validity
22
+ *
23
+ * @example isValidEdifactDateTimePeriod("202406151430202406201600", "719") // true
24
+ * @example isValidEdifactDateTimePeriod("202406151430-202406201600", "719") // false (a period is transmitted without a hyphen)
25
+ * @example isValidEdifactDateTimePeriod("202406151431202406151430", "719") // false (the end precedes the start)
26
+ * @example isValidEdifactDateTimePeriod("202406151430", "719") // false (one date-time)
27
+ */
28
+ export declare function isValidEdifactDateTimePeriod(value: string, format: EdifactDateTimePeriodFormat): boolean;
@@ -0,0 +1,30 @@
1
+ import { parseEdifactDateTimePeriod } from "../parse/parseEdifactDateTimePeriod.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a period
4
+ * between two real local date-times, in a date-time period format code (data element 2379).
5
+ *
6
+ * ### Format code
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `719` | `CCYYMMDDHHMM-CCYYMMDDHHMM` | "A period of time which includes the century, year, month, day, hour and minute. Format of period to be given in actual message without hyphen." |
10
+ *
11
+ * - True exactly when `parseEdifactDateTimePeriod` returns a period for the same arguments: the
12
+ * validator calls the parser, so the two cannot disagree.
13
+ * - A period is valid in its wire form only, with no hyphen.
14
+ * - A period whose end precedes its start is false; an end equal to its start is true.
15
+ * - Checks the calendar as well as the shape: hour 24 and 29 February 2023 are false.
16
+ * - False for any other code, a code of another kind included; check a code alone with
17
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
18
+ *
19
+ * @param value The data element 2380 value (e.g. "202406151430202406201600")
20
+ * @param format The data element 2379 format code
21
+ * @returns boolean indicating validity
22
+ *
23
+ * @example isValidEdifactDateTimePeriod("202406151430202406201600", "719") // true
24
+ * @example isValidEdifactDateTimePeriod("202406151430-202406201600", "719") // false (a period is transmitted without a hyphen)
25
+ * @example isValidEdifactDateTimePeriod("202406151431202406151430", "719") // false (the end precedes the start)
26
+ * @example isValidEdifactDateTimePeriod("202406151430", "719") // false (one date-time)
27
+ */
28
+ export function isValidEdifactDateTimePeriod(value, format) {
29
+ return parseEdifactDateTimePeriod(value, format) !== null;
30
+ }
@@ -0,0 +1,39 @@
1
+ import type { EdifactDtmFormat } from "../../types/edi.js";
2
+ /**
3
+ * Return true when `format` is a UN/EDIFACT data element 2379 format code that the EDIFACT
4
+ * functions read and write.
5
+ *
6
+ * - The 11 supported codes are `102` (a date); `401`, `402` (a time); `203`, `204` (a date and
7
+ * time with no offset); `205`, `208`, `303`, `304` (a date and time with an offset); `718` (a
8
+ * period of dates) and `719` (a period of date-times). `classifyEdifactDtmFormat` names the
9
+ * kind of a code, and each kind has its own parser, formatter and validator.
10
+ * - A code with a two-digit year returns false: `101`, `201`, `202`, `206`, `207`, `301`,
11
+ * `302`, `713` and `717`. UN/EDIFACT does not say which century `YY` belongs to; read such a
12
+ * value with `parseDateWithPattern` or `parseDateTimeWithPattern`, a `yy` pattern and its
13
+ * `yearWindow` option.
14
+ * - `209` and `404` (a time with an offset and no date) and `406` (an offset alone) return
15
+ * false: none names a date, a time, a date-time or an instant.
16
+ * - Every other 2379 code returns false: the day-first and month-first dates `2`–`5`, `10`
17
+ * (`CCYYMMDDTHHMM`), `103`, the ordinal date `105`, `210`, `307`, `308`, the time spans
18
+ * `501`–`503`, `711`, the partial values, the weekday period `720` and the quantities (`801`
19
+ * and up).
20
+ * - Matching is exact: `" 203"`, `"0203"` and the number `203` are not codes.
21
+ * - Accepts any input type and returns false for non-string values.
22
+ * - A parser returns its sentinel for a code it does not read, the same sentinel it returns for
23
+ * a value that does not fit its code. Check the code here to tell an unsupported format apart
24
+ * from bad data.
25
+ *
26
+ * @param format candidate value of any type
27
+ * @returns boolean indicating validity
28
+ *
29
+ * @example isValidEdifactDtmFormat("203") // true
30
+ * @example isValidEdifactDtmFormat("718") // true
31
+ * @example isValidEdifactDtmFormat("208") // true
32
+ * @example isValidEdifactDtmFormat("101") // false (a two-digit year: not read)
33
+ * @example isValidEdifactDtmFormat("602") // false (a partial value: not supported)
34
+ * @example isValidEdifactDtmFormat("801") // false (a quantity: not supported)
35
+ * @example isValidEdifactDtmFormat("0203") // false (matching is exact)
36
+ * @example isValidEdifactDtmFormat(203) // false (a code is a string)
37
+ * @example isValidEdifactDtmFormat(null) // false
38
+ */
39
+ export declare function isValidEdifactDtmFormat(format: unknown): format is EdifactDtmFormat;
@@ -0,0 +1,42 @@
1
+ import { EDIFACT_DTM_FORMATS } from "../../internal/index.js";
2
+ /**
3
+ * Return true when `format` is a UN/EDIFACT data element 2379 format code that the EDIFACT
4
+ * functions read and write.
5
+ *
6
+ * - The 11 supported codes are `102` (a date); `401`, `402` (a time); `203`, `204` (a date and
7
+ * time with no offset); `205`, `208`, `303`, `304` (a date and time with an offset); `718` (a
8
+ * period of dates) and `719` (a period of date-times). `classifyEdifactDtmFormat` names the
9
+ * kind of a code, and each kind has its own parser, formatter and validator.
10
+ * - A code with a two-digit year returns false: `101`, `201`, `202`, `206`, `207`, `301`,
11
+ * `302`, `713` and `717`. UN/EDIFACT does not say which century `YY` belongs to; read such a
12
+ * value with `parseDateWithPattern` or `parseDateTimeWithPattern`, a `yy` pattern and its
13
+ * `yearWindow` option.
14
+ * - `209` and `404` (a time with an offset and no date) and `406` (an offset alone) return
15
+ * false: none names a date, a time, a date-time or an instant.
16
+ * - Every other 2379 code returns false: the day-first and month-first dates `2`–`5`, `10`
17
+ * (`CCYYMMDDTHHMM`), `103`, the ordinal date `105`, `210`, `307`, `308`, the time spans
18
+ * `501`–`503`, `711`, the partial values, the weekday period `720` and the quantities (`801`
19
+ * and up).
20
+ * - Matching is exact: `" 203"`, `"0203"` and the number `203` are not codes.
21
+ * - Accepts any input type and returns false for non-string values.
22
+ * - A parser returns its sentinel for a code it does not read, the same sentinel it returns for
23
+ * a value that does not fit its code. Check the code here to tell an unsupported format apart
24
+ * from bad data.
25
+ *
26
+ * @param format candidate value of any type
27
+ * @returns boolean indicating validity
28
+ *
29
+ * @example isValidEdifactDtmFormat("203") // true
30
+ * @example isValidEdifactDtmFormat("718") // true
31
+ * @example isValidEdifactDtmFormat("208") // true
32
+ * @example isValidEdifactDtmFormat("101") // false (a two-digit year: not read)
33
+ * @example isValidEdifactDtmFormat("602") // false (a partial value: not supported)
34
+ * @example isValidEdifactDtmFormat("801") // false (a quantity: not supported)
35
+ * @example isValidEdifactDtmFormat("0203") // false (matching is exact)
36
+ * @example isValidEdifactDtmFormat(203) // false (a code is a string)
37
+ * @example isValidEdifactDtmFormat(null) // false
38
+ */
39
+ export function isValidEdifactDtmFormat(format) {
40
+ return (typeof format === "string" &&
41
+ EDIFACT_DTM_FORMATS.includes(format));
42
+ }
@@ -0,0 +1,36 @@
1
+ import type { EdifactOffsetDateTimeFormat } from "../../types/edi.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * date and time with an offset from UTC, in a format code that carries one (data element 2379).
5
+ *
6
+ * ### Format codes
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `205` | `CCYYMMDDHHMMZHHMM` | "Calendar date including time and time zone expressed in hours and minutes." |
10
+ * | `208` | `CCYYMMDDHHMMSSZHHMM` | "Calendar date including time with seconds, with Time Zone" (D.12A and later) |
11
+ * | `303` | `CCYYMMDDHHMMZZZ` | "See 203 plus Z=Time zone." |
12
+ * | `304` | `CCYYMMDDHHMMSSZZZ` | "See 204 plus Z=Time zone." |
13
+ *
14
+ * - True exactly when `parseEdifactOffsetDateTime` returns a value for the same arguments: the
15
+ * validator calls the parser, so the two cannot disagree.
16
+ * - The three `ZZZ` characters of `303` and `304` are valid only as an offset: a signed hour
17
+ * from `00` to `23`, `UTC` or `GMT`. An abbreviation such as `CET`, a broken offset (`+24`)
18
+ * and a lone `Z` are false.
19
+ * - Takes the unescaped element value: `"202406151430?+02"` is false.
20
+ * - Checks the calendar as well as the shape: 29 February 2023, hour 24 and second 60 are
21
+ * false.
22
+ * - False for any other code, a code of another kind included; check a code alone with
23
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
24
+ *
25
+ * @param value The data element 2380 value, unescaped (e.g. "202406151430+0200")
26
+ * @param format The data element 2379 format code
27
+ * @returns boolean indicating validity
28
+ *
29
+ * @example isValidEdifactOffsetDateTime("202406151430+0200", "205") // true
30
+ * @example isValidEdifactOffsetDateTime("20240615143045+0530", "208") // true
31
+ * @example isValidEdifactOffsetDateTime("202406151430UTC", "303") // true
32
+ * @example isValidEdifactOffsetDateTime("20240615143045-05", "304") // true
33
+ * @example isValidEdifactOffsetDateTime("202406151430CET", "303") // false (an abbreviation names no offset)
34
+ * @example isValidEdifactOffsetDateTime("202406151430", "205") // false (no offset)
35
+ */
36
+ export declare function isValidEdifactOffsetDateTime(value: string, format: EdifactOffsetDateTimeFormat): boolean;
@@ -0,0 +1,38 @@
1
+ import { parseEdifactOffsetDateTime } from "../parse/parseEdifactOffsetDateTime.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * date and time with an offset from UTC, in a format code that carries one (data element 2379).
5
+ *
6
+ * ### Format codes
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `205` | `CCYYMMDDHHMMZHHMM` | "Calendar date including time and time zone expressed in hours and minutes." |
10
+ * | `208` | `CCYYMMDDHHMMSSZHHMM` | "Calendar date including time with seconds, with Time Zone" (D.12A and later) |
11
+ * | `303` | `CCYYMMDDHHMMZZZ` | "See 203 plus Z=Time zone." |
12
+ * | `304` | `CCYYMMDDHHMMSSZZZ` | "See 204 plus Z=Time zone." |
13
+ *
14
+ * - True exactly when `parseEdifactOffsetDateTime` returns a value for the same arguments: the
15
+ * validator calls the parser, so the two cannot disagree.
16
+ * - The three `ZZZ` characters of `303` and `304` are valid only as an offset: a signed hour
17
+ * from `00` to `23`, `UTC` or `GMT`. An abbreviation such as `CET`, a broken offset (`+24`)
18
+ * and a lone `Z` are false.
19
+ * - Takes the unescaped element value: `"202406151430?+02"` is false.
20
+ * - Checks the calendar as well as the shape: 29 February 2023, hour 24 and second 60 are
21
+ * false.
22
+ * - False for any other code, a code of another kind included; check a code alone with
23
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
24
+ *
25
+ * @param value The data element 2380 value, unescaped (e.g. "202406151430+0200")
26
+ * @param format The data element 2379 format code
27
+ * @returns boolean indicating validity
28
+ *
29
+ * @example isValidEdifactOffsetDateTime("202406151430+0200", "205") // true
30
+ * @example isValidEdifactOffsetDateTime("20240615143045+0530", "208") // true
31
+ * @example isValidEdifactOffsetDateTime("202406151430UTC", "303") // true
32
+ * @example isValidEdifactOffsetDateTime("20240615143045-05", "304") // true
33
+ * @example isValidEdifactOffsetDateTime("202406151430CET", "303") // false (an abbreviation names no offset)
34
+ * @example isValidEdifactOffsetDateTime("202406151430", "205") // false (no offset)
35
+ */
36
+ export function isValidEdifactOffsetDateTime(value, format) {
37
+ return parseEdifactOffsetDateTime(value, format) !== "";
38
+ }
@@ -0,0 +1,28 @@
1
+ import type { EdifactTimeFormat } from "../../types/edi.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * time of day in a time format code (data element 2379).
5
+ *
6
+ * ### Format codes
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `401` | `HHMM` | "Time without seconds: H = Hour; m = Minute." |
10
+ * | `402` | `HHMMSS` | "Time with seconds: H = Hour; m = Minute; s = Seconds." |
11
+ *
12
+ * - True exactly when `parseEdifactTime` returns a time for the same arguments: the validator
13
+ * calls the parser, so the two cannot disagree.
14
+ * - A value is valid only against its code: `"1430"` is a `401` value and not a `402` one.
15
+ * - Hour 24, minute 60 and second 60 are false.
16
+ * - False for any other code, a code of another kind included; check a code alone with
17
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
18
+ *
19
+ * @param value The data element 2380 value (e.g. "1430")
20
+ * @param format The data element 2379 format code
21
+ * @returns boolean indicating validity
22
+ *
23
+ * @example isValidEdifactTime("1430", "401") // true
24
+ * @example isValidEdifactTime("143045", "402") // true
25
+ * @example isValidEdifactTime("1430", "402") // false (four digits is a 401 value)
26
+ * @example isValidEdifactTime("2400", "401") // false (hour 24)
27
+ */
28
+ export declare function isValidEdifactTime(value: string, format: EdifactTimeFormat): boolean;
@@ -0,0 +1,30 @@
1
+ import { parseEdifactTime } from "../parse/parseEdifactTime.js";
2
+ /**
3
+ * Return true when `value` is a UN/EDIFACT `DTM` value (data element 2380) that states a real
4
+ * time of day in a time format code (data element 2379).
5
+ *
6
+ * ### Format codes
7
+ * | Code | Mask | The directory's description |
8
+ * |---|---|---|
9
+ * | `401` | `HHMM` | "Time without seconds: H = Hour; m = Minute." |
10
+ * | `402` | `HHMMSS` | "Time with seconds: H = Hour; m = Minute; s = Seconds." |
11
+ *
12
+ * - True exactly when `parseEdifactTime` returns a time for the same arguments: the validator
13
+ * calls the parser, so the two cannot disagree.
14
+ * - A value is valid only against its code: `"1430"` is a `401` value and not a `402` one.
15
+ * - Hour 24, minute 60 and second 60 are false.
16
+ * - False for any other code, a code of another kind included; check a code alone with
17
+ * `isValidEdifactDtmFormat`. False for a non-string argument.
18
+ *
19
+ * @param value The data element 2380 value (e.g. "1430")
20
+ * @param format The data element 2379 format code
21
+ * @returns boolean indicating validity
22
+ *
23
+ * @example isValidEdifactTime("1430", "401") // true
24
+ * @example isValidEdifactTime("143045", "402") // true
25
+ * @example isValidEdifactTime("1430", "402") // false (four digits is a 401 value)
26
+ * @example isValidEdifactTime("2400", "401") // false (hour 24)
27
+ */
28
+ export function isValidEdifactTime(value, format) {
29
+ return parseEdifactTime(value, format) !== "";
30
+ }