@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
File without changes
@@ -0,0 +1,407 @@
1
+ /**
2
+ * The UN/EDIFACT data element 2379 (Date or time or period format code) value that states a
3
+ * calendar date. The mask and description are the UNTDID directory's, read from
4
+ * [UNECE's D.21B page as archived](http://web.archive.org/web/20240303123657/https://service.unece.org/trade/untdid/d21b/tred/tred2379.htm).
5
+ *
6
+ * - `102` `CCYYMMDD`: "Calendar date: C = Century ; Y = Year ; M = Month ; D = Day."
7
+ *
8
+ * Taken by `parseEdifactDate`, `formatEdifactDate` and `isValidEdifactDate`.
9
+ */
10
+ export type EdifactDateFormat = "102";
11
+ /**
12
+ * The UN/EDIFACT data element 2379 values that state a time of day with no date and no offset.
13
+ * Masks and descriptions are the UNTDID directory's, read from
14
+ * [UNECE's D.21B page as archived](http://web.archive.org/web/20240303123657/https://service.unece.org/trade/untdid/d21b/tred/tred2379.htm).
15
+ *
16
+ * - `401` `HHMM`: "Time without seconds: H = Hour; m = Minute."
17
+ * - `402` `HHMMSS`: "Time with seconds: H = Hour; m = Minute; s = Seconds."
18
+ *
19
+ * Taken by `parseEdifactTime`, `formatEdifactTime` and `isValidEdifactTime`.
20
+ */
21
+ export type EdifactTimeFormat = "401" | "402";
22
+ /**
23
+ * The UN/EDIFACT data element 2379 values that state a date and a time with no offset: a local
24
+ * time at a place the value does not name. Masks and descriptions are the UNTDID directory's,
25
+ * read from
26
+ * [UNECE's D.21B page as archived](http://web.archive.org/web/20240303123657/https://service.unece.org/trade/untdid/d21b/tred/tred2379.htm).
27
+ *
28
+ * - `203` `CCYYMMDDHHMM`: "Calendar date including time with minutes".
29
+ * - `204` `CCYYMMDDHHMMSS`: "Calendar date including time with seconds".
30
+ *
31
+ * Taken by `parseEdifactDateTime`, `formatEdifactDateTime` and `isValidEdifactDateTime`.
32
+ */
33
+ export type EdifactDateTimeFormat = "203" | "204";
34
+ /**
35
+ * The UN/EDIFACT data element 2379 values that state a date and a time with an offset from UTC.
36
+ * Masks and descriptions are the UNTDID directory's, read from
37
+ * [UNECE's D.21B page as archived](http://web.archive.org/web/20240303123657/https://service.unece.org/trade/untdid/d21b/tred/tred2379.htm).
38
+ *
39
+ * - `205` `CCYYMMDDHHMMZHHMM`: "Calendar date including time and time zone expressed in hours
40
+ * and minutes."
41
+ * - `208` `CCYYMMDDHHMMSSZHHMM`: "Calendar date including time with seconds, with Time Zone",
42
+ * where "Z = leading plus/minus sign, HHMM = difference to UTC in Hours and Minutes". In
43
+ * directories D.12A and later.
44
+ * - `303` `CCYYMMDDHHMMZZZ`: "See 203 plus Z=Time zone."
45
+ * - `304` `CCYYMMDDHHMMSSZZZ`: "See 204 plus Z=Time zone."
46
+ *
47
+ * The three `ZZZ` characters of `303` and `304` are read as an offset only: a signed hour
48
+ * (`+02`, `-05`) or the literals `UTC` and `GMT`. Taken by `parseEdifactOffsetDateTime`,
49
+ * `formatEdifactOffsetDateTime` and `isValidEdifactOffsetDateTime`.
50
+ */
51
+ export type EdifactOffsetDateTimeFormat = "205" | "208" | "303" | "304";
52
+ /**
53
+ * The UN/EDIFACT data element 2379 value that states a period between two calendar dates. The
54
+ * mask and description are the UNTDID directory's, read from
55
+ * [UNECE's D.21B page as archived](http://web.archive.org/web/20240303123657/https://service.unece.org/trade/untdid/d21b/tred/tred2379.htm).
56
+ *
57
+ * - `718` `CCYYMMDD-CCYYMMDD`: "A period of time specified by giving the start date followed by
58
+ * the end date (both including century). Data is to be transmitted as consecutive characters
59
+ * without hyphen."
60
+ *
61
+ * Taken by `parseEdifactDatePeriod`, `formatEdifactDatePeriod` and `isValidEdifactDatePeriod`.
62
+ */
63
+ export type EdifactDatePeriodFormat = "718";
64
+ /**
65
+ * The UN/EDIFACT data element 2379 value that states a period between two local date-times.
66
+ * The mask and description are the UNTDID directory's, read from
67
+ * [UNECE's D.21B page as archived](http://web.archive.org/web/20240303123657/https://service.unece.org/trade/untdid/d21b/tred/tred2379.htm).
68
+ *
69
+ * - `719` `CCYYMMDDHHMM-CCYYMMDDHHMM`: "A period of time which includes the century, year,
70
+ * month, day, hour and minute. Format of period to be given in actual message without
71
+ * hyphen."
72
+ *
73
+ * Taken by `parseEdifactDateTimePeriod`, `formatEdifactDateTimePeriod` and
74
+ * `isValidEdifactDateTimePeriod`.
75
+ */
76
+ export type EdifactDateTimePeriodFormat = "719";
77
+ /**
78
+ * The UN/EDIFACT data element 2379 (Date or time or period format code) values GMT reads and
79
+ * writes: 11 codes, each in the union of the one kind of value it states. Twelve directories
80
+ * were read: UNECE's own
81
+ * [D.21B](http://web.archive.org/web/20240303123657/https://service.unece.org/trade/untdid/d21b/tred/tred2379.htm)
82
+ * and
83
+ * [D.22B](http://web.archive.org/web/20260311101223/https://service.unece.org/trade/untdid/d22b/tred/tred2379.htm)
84
+ * pages, archived, and mirrors of D.93A, D.96A, D.01B, D.01C, D.03A, D.03B, D.04B, D.11B, D.12A
85
+ * and D.13B. No mask of a code GMT reads changed across them.
86
+ *
87
+ * Every other 2379 code returns the sentinel from every function. Among them:
88
+ *
89
+ * - The codes with a two-digit year, `101`, `201`, `202`, `206`, `207`, `301`, `302`, `713` and
90
+ * `717`: no standard says which century `YY` belongs to. Read one with `parseDateWithPattern`
91
+ * or `parseDateTimeWithPattern`, a `yy` pattern and its `yearWindow` option.
92
+ * - `209` and `404` (a time with an offset and no date) and `406` (an offset alone): none names
93
+ * a date, a time, a date-time or an instant.
94
+ * - The day-first and month-first forms `2`–`5`, `10` (`CCYYMMDDTHHMM`), the week date `103`,
95
+ * the ordinal date `105`, the time period `210`, `307` (milliseconds), the zoned period `308`,
96
+ * the time spans `501`–`503`, `711`, the partial values (a century, a year, a month, a week or
97
+ * a day of month alone), the weekday period `720` and the quantities (`801` and up).
98
+ *
99
+ * Narrow a candidate with `isValidEdifactDtmFormat`, and name its kind with
100
+ * `classifyEdifactDtmFormat`.
101
+ */
102
+ export type EdifactDtmFormat = EdifactDateFormat | EdifactTimeFormat | EdifactDateTimeFormat | EdifactOffsetDateTimeFormat | EdifactDatePeriodFormat | EdifactDateTimePeriodFormat;
103
+ /**
104
+ * A UN/EDIFACT data element 2379 format code with the kind of value it states: the result of
105
+ * `classifyEdifactDtmFormat`.
106
+ *
107
+ * The two members are tied together: testing `kind` narrows `format` to that kind's own union,
108
+ * so a code that arrived as a plain string can be passed to the kind's parser, formatter and
109
+ * validator with no cast.
110
+ */
111
+ export type EdifactDtmFormatClass = {
112
+ /** The kind of value the code states: a calendar date, read by `parseEdifactDate`. */
113
+ kind: "date";
114
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
115
+ format: EdifactDateFormat;
116
+ } | {
117
+ /** The kind of value the code states: a time of day, read by `parseEdifactTime`. */
118
+ kind: "time";
119
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
120
+ format: EdifactTimeFormat;
121
+ } | {
122
+ /** The kind of value the code states: a local date and time, read by `parseEdifactDateTime`. */
123
+ kind: "dateTime";
124
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
125
+ format: EdifactDateTimeFormat;
126
+ } | {
127
+ /** The kind of value the code states: a date and time with an offset from UTC, read by `parseEdifactOffsetDateTime`. */
128
+ kind: "offsetDateTime";
129
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
130
+ format: EdifactOffsetDateTimeFormat;
131
+ } | {
132
+ /** The kind of value the code states: a period between two dates, read by `parseEdifactDatePeriod`. */
133
+ kind: "datePeriod";
134
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
135
+ format: EdifactDatePeriodFormat;
136
+ } | {
137
+ /** The kind of value the code states: a period between two local date-times, read by `parseEdifactDateTimePeriod`. */
138
+ kind: "dateTimePeriod";
139
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
140
+ format: EdifactDateTimePeriodFormat;
141
+ };
142
+ /**
143
+ * The X12 data element 1250 (Date Time Period Format Qualifier) values that state a calendar
144
+ * date. Release 005010, read from
145
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
146
+ * text itself was not reached.
147
+ *
148
+ * - `D8` `CCYYMMDD`: "Date Expressed in Format CCYYMMDD".
149
+ * - `DB` `MMDDCCYY`: "Date Expressed in Format MMDDCCYY".
150
+ *
151
+ * Taken by `parseX12Date`, `formatX12Date` and `isValidX12Date`.
152
+ */
153
+ export type X12DateFormat = "D8" | "DB";
154
+ /**
155
+ * The X12 data element 1250 values that state a time of day. Release 005010, read from
156
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
157
+ * text itself was not reached.
158
+ *
159
+ * - `TM` `HHMM`: "Time Expressed in Format HHMM".
160
+ * - `TS` `HHMMSS`: "Time Expressed in Format HHMMSS".
161
+ *
162
+ * Taken by `formatX12Time`, and by `parseX12Time` and `isValidX12Time` as their optional
163
+ * qualifier. Both are also forms of data element 337 (Time), which `parseX12Time` reads when no
164
+ * qualifier is given and `formatX12TimeElement` writes by the element's own mask
165
+ * (`X12TimeElementForm`). `TS` is a code of data element 623 too (`X12TimeCode`), where it means
166
+ * Atlantic Standard Time.
167
+ */
168
+ export type X12TimeFormat = "TM" | "TS";
169
+ /**
170
+ * The four forms of X12 data element 337 (Time), each named by the element's own mask. Release
171
+ * 005010, read from
172
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/337); the X12
173
+ * text itself was not reached. The dictionary's definition: "Time expressed in 24-hour clock
174
+ * time as follows: HHMM, or HHMMSS, or HHMMSSD, or HHMMSSDD, where H = hours (00-23),
175
+ * M = minutes (00-59), S = integer seconds (00-59) and DD = decimal seconds; decimal seconds are
176
+ * expressed as follows: D = tenths (0-9) and DD = hundredths (00-99)".
177
+ *
178
+ * - `HHMM`: hours and minutes, 4 digits.
179
+ * - `HHMMSS`: hours, minutes and seconds, 6 digits.
180
+ * - `HHMMSSD`: with tenths of a second, 7 digits.
181
+ * - `HHMMSSDD`: with hundredths of a second, 8 digits.
182
+ *
183
+ * These are the element's own masks, not data element 1250 codes. Element 337 has no format
184
+ * qualifier, so no code names its form: the caller names it by the mask. `TM` and `TS`
185
+ * (`X12TimeFormat`) are the 1250 codes for the first two masks, and no 1250 code holds decimal
186
+ * seconds.
187
+ *
188
+ * Taken by `formatX12TimeElement`. `parseX12Time` reads all four forms when it is given no
189
+ * qualifier.
190
+ */
191
+ export type X12TimeElementForm = "HHMM" | "HHMMSS" | "HHMMSSD" | "HHMMSSDD";
192
+ /**
193
+ * The X12 data element 1250 values that state a date and a time with no offset: a local time at
194
+ * a place the value does not name. Release 005010, read from
195
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
196
+ * text itself was not reached.
197
+ *
198
+ * - `DT` `CCYYMMDDHHMM`: "Date and Time Expressed in Format CCYYMMDDHHMM".
199
+ * - `RTS` `CCYYMMDDHHMMSS`: "Date and Time Expressed in Format CCYYMMDDHHMMSS". One date-time,
200
+ * despite the `R`.
201
+ *
202
+ * Taken by `parseX12DateTime`, `formatX12DateTime` and `isValidX12DateTime`.
203
+ */
204
+ export type X12DateTimeFormat = "DT" | "RTS";
205
+ /**
206
+ * The X12 data element 1250 values that state a range between two calendar dates, transmitted
207
+ * with its hyphen. Release 005010, read from
208
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
209
+ * text itself was not reached.
210
+ *
211
+ * - `RD8` `CCYYMMDD-CCYYMMDD`: "Range of Dates Expressed in Format CCYYMMDD-CCYYMMDD".
212
+ * - `RD` `MMDDCCYY-MMDDCCYY`: "Range of Dates Expressed in Format MMDDCCYY-MMDDCCYY".
213
+ *
214
+ * Taken by `parseX12DateRange`, `formatX12DateRange` and `isValidX12DateRange`.
215
+ */
216
+ export type X12DateRangeFormat = "RD8" | "RD";
217
+ /**
218
+ * The X12 data element 1250 values that state a range between two local date-times,
219
+ * transmitted with its hyphen. Release 005010, read from
220
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
221
+ * text itself was not reached.
222
+ *
223
+ * - `RDT` `CCYYMMDDHHMM-CCYYMMDDHHMM`: "Range of Date and Time, Expressed in Format
224
+ * CCYYMMDDHHMM-CCYYMMDDHHMM".
225
+ * - `DTS` `CCYYMMDDHHMMSS-CCYYMMDDHHMMSS`: "Range of Date and Time Expressed in Format
226
+ * CCYYMMDDHHMMSS-CCYYMMDDHHMMSS". A range, despite having no `R`.
227
+ *
228
+ * Taken by `parseX12DateTimeRange`, `formatX12DateTimeRange` and `isValidX12DateTimeRange`.
229
+ */
230
+ export type X12DateTimeRangeFormat = "RDT" | "DTS";
231
+ /**
232
+ * The X12 data element 1250 (Date Time Period Format Qualifier) values GMT reads and writes: 10
233
+ * codes, each in the union of the one kind of value it states. Release 005010, read from
234
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-005010/element/1250); the X12
235
+ * text itself was not reached. The 42-code list is the same in release 008010.
236
+ *
237
+ * The other 32 codes of the element return the sentinel from every function. Among them:
238
+ *
239
+ * - The codes with a two-digit year, `D6`, `TT`, `TR`, `RD6` and `TU`: X12 does not say which
240
+ * century `YY` belongs to. Read one with `parseDateWithPattern` or `parseDateTimeWithPattern`,
241
+ * a `yy` pattern and its `yearWindow` option.
242
+ * - `TC` and `EH` (a day of the year with no whole year), `DDT` and `DTD` (a range with a date
243
+ * on one side and a date-time on the other), `RTM` (a range of times with no date) and `UN`
244
+ * (Unstructured).
245
+ * - `CC`, `CD`, `CM`, `CQ`, `CY`, `DA`, `DD`, `KA`, `MCY`, `MD`, `MM`, `RD2`, `RD4`, `RD5`,
246
+ * `RDM`, `RMD`, `RMY`, `TQ`, `YM`, `YMM` and `YY`.
247
+ *
248
+ * Narrow a candidate with `isValidX12DateTimePeriodFormat`, and name its kind with
249
+ * `classifyX12DateTimePeriodFormat`.
250
+ */
251
+ export type X12DateTimePeriodFormat = X12DateFormat | X12TimeFormat | X12DateTimeFormat | X12DateRangeFormat | X12DateTimeRangeFormat;
252
+ /**
253
+ * An X12 data element 1250 format qualifier with the kind of value it states: the result of
254
+ * `classifyX12DateTimePeriodFormat`.
255
+ *
256
+ * The two members are tied together: testing `kind` narrows `format` to that kind's own union,
257
+ * so a code that arrived as a plain string can be passed to the kind's parser, formatter and
258
+ * validator with no cast.
259
+ */
260
+ export type X12DateTimePeriodFormatClass = {
261
+ /** The kind of value the code states: a calendar date, read by `parseX12Date`. */
262
+ kind: "date";
263
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
264
+ format: X12DateFormat;
265
+ } | {
266
+ /** The kind of value the code states: a time of day, read by `parseX12Time(value, format)`. */
267
+ kind: "time";
268
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
269
+ format: X12TimeFormat;
270
+ } | {
271
+ /** The kind of value the code states: a local date and time, read by `parseX12DateTime`. */
272
+ kind: "dateTime";
273
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
274
+ format: X12DateTimeFormat;
275
+ } | {
276
+ /** The kind of value the code states: a range between two dates, read by `parseX12DateRange`. */
277
+ kind: "dateRange";
278
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
279
+ format: X12DateRangeFormat;
280
+ } | {
281
+ /** The kind of value the code states: a range between two local date-times, read by `parseX12DateTimeRange`. */
282
+ kind: "dateTimeRange";
283
+ /** The code itself, narrowed to the codes of that kind, so it fits the kind's functions. */
284
+ format: X12DateTimeRangeFormat;
285
+ };
286
+ /**
287
+ * The 56 X12 data element 623 (Time Code) values, release 008010, read from
288
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-008010/element/623); the X12
289
+ * text itself was not reached.
290
+ *
291
+ * [Release 005010](https://www.stedi.com/edi/x12-005010/element/623) has 51 of them: `25`–`29`
292
+ * were added in release 006010 and are not valid in an 004010 or 005010 interchange. The type
293
+ * names no release, so it is the superset.
294
+ *
295
+ * - `01`–`12`: UTC+1 through UTC+12 ("Equivalent to ISO P01" … `P12`).
296
+ * - `13`–`24`: UTC−12 through UTC−1, in **descending** order (`M12` … `M01`): `13` is UTC−12 and
297
+ * `24` is UTC−1.
298
+ * - `25`–`29`: the half-hour offsets `M2:30`, `M3:30`, `P5:30`, `P9:30`, `P10:30`.
299
+ * - `UT` ("Universal Time Coordinate") and `GM` ("Greenwich Mean Time"): UTC.
300
+ * - `AD`/`AS`/`AT` Alaska, `CD`/`CS`/`CT` Central, `ED`/`ES`/`ET` Eastern, `HD`/`HS`/`HT`
301
+ * Hawaii-Aleutian, `MD`/`MS`/`MT` Mountain, `ND`/`NS`/`NT` Newfoundland, `PD`/`PS`/`PT`
302
+ * Pacific, `TD`/`TS`/`TT` Atlantic: a named zone, daylight (`D`), standard (`S`) or unstated
303
+ * (`T`). X12 states no offset for these.
304
+ * - `LT`: local time of the event, whose place is elsewhere in the message.
305
+ *
306
+ * `TS`, `TT`, `CD` and `MD` are also codes of data element 1250, where they mean something
307
+ * unrelated: `TS` there is the format `HHMMSS` (`X12TimeFormat`). Narrow a candidate with
308
+ * `isValidX12TimeCode`; `X12OffsetTimeCode` and `X12ZoneTimeCode` split the list in two, and
309
+ * `classifyX12TimeCode` says which of the two a code belongs to.
310
+ */
311
+ export type X12TimeCode = "01" | "02" | "03" | "04" | "05" | "06" | "07" | "08" | "09" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "AD" | "AS" | "AT" | "CD" | "CS" | "CT" | "ED" | "ES" | "ET" | "GM" | "HD" | "HS" | "HT" | "LT" | "MD" | "MS" | "MT" | "ND" | "NS" | "NT" | "PD" | "PS" | "PT" | "TD" | "TS" | "TT" | "UT";
312
+ /**
313
+ * The 31 X12 data element 623 time codes that state an offset from UTC, the codes
314
+ * `x12TimeCodeOffset` reads. Release 008010, read from
315
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-008010/element/623); the X12
316
+ * text itself was not reached.
317
+ *
318
+ * - `01`–`12`: UTC+1 through UTC+12 ("Equivalent to ISO P01" … `P12`).
319
+ * - `13`–`24`: UTC−12 through UTC−1, in **descending** order (`M12` … `M01`): `13` is UTC−12 and
320
+ * `24` is UTC−1.
321
+ * - `25`–`29`: the half-hour offsets `M2:30`, `M3:30`, `P5:30`, `P9:30`, `P10:30`. Added in
322
+ * release 006010.
323
+ * - `UT` ("Universal Time Coordinate") and `GM` ("Greenwich Mean Time"): UTC.
324
+ */
325
+ export type X12OffsetTimeCode = "01" | "02" | "03" | "04" | "05" | "06" | "07" | "08" | "09" | "10" | "11" | "12" | "13" | "14" | "15" | "16" | "17" | "18" | "19" | "20" | "21" | "22" | "23" | "24" | "25" | "26" | "27" | "28" | "29" | "GM" | "UT";
326
+ /**
327
+ * The 25 X12 data element 623 time codes that name a zone and state no offset, the codes
328
+ * `x12TimeCodeZone` reads. Release 008010, read from
329
+ * [Stedi's X12-licensed dictionary](https://www.stedi.com/edi/x12-008010/element/623); the X12
330
+ * text itself was not reached.
331
+ *
332
+ * - `AD`/`AS`/`AT` Alaska, `CD`/`CS`/`CT` Central, `ED`/`ES`/`ET` Eastern, `HD`/`HS`/`HT`
333
+ * Hawaii-Aleutian, `MD`/`MS`/`MT` Mountain, `ND`/`NS`/`NT` Newfoundland, `PD`/`PS`/`PT`
334
+ * Pacific, `TD`/`TS`/`TT` Atlantic: daylight (`D`), standard (`S`) or unstated (`T`).
335
+ * - `LT`: local time of the event, whose place is elsewhere in the message.
336
+ */
337
+ export type X12ZoneTimeCode = "AD" | "AS" | "AT" | "CD" | "CS" | "CT" | "ED" | "ES" | "ET" | "HD" | "HS" | "HT" | "LT" | "MD" | "MS" | "MT" | "ND" | "NS" | "NT" | "PD" | "PS" | "PT" | "TD" | "TS" | "TT";
338
+ /**
339
+ * The zone an X12 data element 623 time code names: the result of `x12TimeCodeZone`. X12 states
340
+ * no offset for a named code, so the result carries none.
341
+ */
342
+ export interface X12NamedZone {
343
+ /**
344
+ * X12's own name for the zone, as its definition writes it: `Alaska`, `Central`, `Eastern`,
345
+ * `Hawaii-Aleutian`, `Mountain`, `Newfoundland`, `Pacific` or `Atlantic`, and `Local` for `LT`.
346
+ * It is a name, not an IANA identifier and not an offset: the caller maps it to a zone.
347
+ */
348
+ zone: string;
349
+ /**
350
+ * Whether the code says daylight time. `true` for a `D` code (`ED`), `false` for an `S` code
351
+ * (`ES`), and `null` for a code that says neither (`ET`, `LT`), where the date decides.
352
+ */
353
+ daylight: boolean | null;
354
+ }
355
+ /**
356
+ * An X12 data element 623 time code with what it states: the result of `classifyX12TimeCode`.
357
+ *
358
+ * The two members are tied together: testing `kind` narrows `timeCode` to the codes of one
359
+ * reader, so a code that arrived as a plain string can be passed to `x12TimeCodeOffset` or
360
+ * `x12TimeCodeZone` with no cast.
361
+ */
362
+ export type X12TimeCodeClass = {
363
+ /** The code states an offset from UTC: read it with `x12TimeCodeOffset`. */
364
+ kind: "offset";
365
+ /** The code itself, narrowed to the 31 codes that state an offset. */
366
+ timeCode: X12OffsetTimeCode;
367
+ } | {
368
+ /** The code names a zone and states no offset: read it with `x12TimeCodeZone`. */
369
+ kind: "zone";
370
+ /** The code itself, narrowed to the 25 codes that name a zone. */
371
+ timeCode: X12ZoneTimeCode;
372
+ };
373
+ /**
374
+ * A period between two calendar dates, as a UN/EDIFACT period (`718`) or an X12 range (`RD8`,
375
+ * `RD`) states it: the result of `parseEdifactDatePeriod` and `parseX12DateRange`.
376
+ *
377
+ * Neither standard says whether the end date is inside the period: that is the message's to
378
+ * define, so the two dates are returned as transmitted. The pair can be passed to the plain
379
+ * interval functions as `(start, end)`, for example
380
+ * `intervalLengthDate(period.start, period.end, "days")`; those functions leave `end` outside
381
+ * the interval.
382
+ */
383
+ export interface EdiDatePeriod {
384
+ /** The date the period starts on, `YYYY-MM-DD`. */
385
+ start: string;
386
+ /** The date the period ends on, `YYYY-MM-DD`. It is never before `start`, and may equal it. */
387
+ end: string;
388
+ }
389
+ /**
390
+ * A period between two local date-times, as a UN/EDIFACT period (`719`) or an X12 range (`RDT`,
391
+ * `DTS`) states it: the result of `parseEdifactDateTimePeriod` and `parseX12DateTimeRange`.
392
+ *
393
+ * Both ends are wall clocks at a place the value does not name: no code that states a period
394
+ * carries an offset, so neither end is an instant. Neither standard says whether the end is
395
+ * inside the period. The pair can be passed to the plain interval functions as `(start, end)`,
396
+ * for example `intervalLengthDateTime(period.start, period.end, "hours")`; those functions leave
397
+ * `end` outside the interval.
398
+ */
399
+ export interface EdiDateTimePeriod {
400
+ /** The local date-time the period starts at, `YYYY-MM-DDTHH:MM:SS`. Seconds are always written. */
401
+ start: string;
402
+ /**
403
+ * The local date-time the period ends at, `YYYY-MM-DDTHH:MM:SS`. Seconds are always written. It
404
+ * is never before `start`, and may equal it.
405
+ */
406
+ end: string;
407
+ }
File without changes
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The two time fields every GS1 EPCIS 2.0 (ISO/IEC 19987) event must carry.
3
+ *
4
+ * The EPCIS JSON schema lists both under `required`. `eventTime` says when the event happened;
5
+ * `eventTimeZoneOffset` says what the local clock was offset by where it happened. Neither
6
+ * derives from the other, so a system that keeps only `eventTime` cannot show the event in local
7
+ * time again. Read a pair with `parseEpcisEvent`, write one with `formatEpcisEvent` and check one
8
+ * with `isValidEpcisEvent`.
9
+ */
10
+ export interface EpcisEventTime {
11
+ /**
12
+ * When the event happened, in the `DateTimeStamp` grammar of the EPCIS XSD, the XML binding
13
+ * (`epcisEventTime`): `YYYY-MM-DDTHH:MM:SS`, an optional fraction, then `Z` or a `±HH:MM`
14
+ * offset. It fixes the instant and nothing else: an offset written here is not the event's
15
+ * local offset, and it does not have to equal `eventTimeZoneOffset` (EPCIS 2.0 §7.4.1.1).
16
+ */
17
+ eventTime: string;
18
+ /**
19
+ * The UTC offset in force where the event happened, in the pattern the EPCIS JSON schema gives
20
+ * (`epcisTimeZoneOffset`), which is the rule of EPCIS 2.0 §7.4.1: `±HH:MM` from `-14:00` to
21
+ * `+14:00`, never `Z`. It sets the local clock the event is shown on and does not move the
22
+ * instant. It cannot be worked out from `eventTime`.
23
+ */
24
+ eventTimeZoneOffset: string;
25
+ }
File without changes
@@ -0,0 +1,8 @@
1
+ import type { Temporal } from "@js-temporal/polyfill";
2
+ /**
3
+ * The plural name of a duration field that has an exact length: `"days"`, or a time field from
4
+ * `"hours"` down to `"nanoseconds"`. A day is 24 hours when nothing anchors it, as
5
+ * TC39 Temporal's `Duration.prototype.total` reads one without `relativeTo`. Years, months and
6
+ * weeks are left out: Temporal gives them no length without a date to measure from.
7
+ */
8
+ export type ExactDurationUnit = keyof Pick<Temporal.DurationLike, "days" | "hours" | "minutes" | "seconds" | "milliseconds" | "microseconds" | "nanoseconds">;
File without changes
@@ -23,9 +23,10 @@ export type FreeTimeOptions = {
23
23
  */
24
24
  basis: FreeTimeBasis;
25
25
  /**
26
- * The time zone of the terminal, depot or yard whose local midnight ends a day: an IANA name or a
27
- * UTC offset. GMT does not resolve a port or terminal code to a zone. A UTC offset such as
28
- * `"+02:00"` observes no DST.
26
+ * The time zone of the terminal, depot or yard whose local midnight ends a day, an IANA name or
27
+ * UTC offset: a time zone identifier (`+05:30`, `+0530`, `-08`) or a stored offset
28
+ * (`±HH:MM[:SS]`, what `getTimeZoneOffset` returns). GMT does not resolve a port or terminal code
29
+ * to a zone. A UTC offset such as `"+02:00"` observes no DST.
29
30
  */
30
31
  timeZone: string;
31
32
  /**
@@ -11,6 +11,10 @@ export * from "./datetime-format-options.js";
11
11
  export * from "./disambiguation.js";
12
12
  export * from "./duration-relative-to.js";
13
13
  export * from "./duration-string-options.js";
14
+ export * from "./duty.js";
15
+ export * from "./edi.js";
16
+ export * from "./epcis.js";
17
+ export * from "./exact-duration-unit.js";
14
18
  export * from "./fiscal-calendar.js";
15
19
  export * from "./fractional-digit.js";
16
20
  export * from "./free-time-options.js";
@@ -31,6 +35,7 @@ export * from "./time-cycle-field.js";
31
35
  export * from "./time-duration-unit.js";
32
36
  export * from "./time-unit.js";
33
37
  export * from "./transport-timestamps.js";
38
+ export * from "./two-digit-year.js";
34
39
  export * from "./unix-now-unit.js";
35
40
  export * from "./utc-now-unit.js";
36
41
  export * from "./zone-bucket-unit.js";
@@ -11,6 +11,10 @@ export * from "./datetime-format-options.js";
11
11
  export * from "./disambiguation.js";
12
12
  export * from "./duration-relative-to.js";
13
13
  export * from "./duration-string-options.js";
14
+ export * from "./duty.js";
15
+ export * from "./edi.js";
16
+ export * from "./epcis.js";
17
+ export * from "./exact-duration-unit.js";
14
18
  export * from "./fiscal-calendar.js";
15
19
  export * from "./fractional-digit.js";
16
20
  export * from "./free-time-options.js";
@@ -31,6 +35,7 @@ export * from "./time-cycle-field.js";
31
35
  export * from "./time-duration-unit.js";
32
36
  export * from "./time-unit.js";
33
37
  export * from "./transport-timestamps.js";
38
+ export * from "./two-digit-year.js";
34
39
  export * from "./unix-now-unit.js";
35
40
  export * from "./utc-now-unit.js";
36
41
  export * from "./zone-bucket-unit.js";
@@ -44,8 +44,9 @@ export type OperatingOverride = {
44
44
  */
45
45
  export type OperatingSchedule = {
46
46
  /**
47
- * The time zone the windows are read in: an IANA name or a UTC offset. A UTC offset such as
48
- * `"+02:00"` observes no DST.
47
+ * The time zone the windows are read in, an IANA name or UTC offset: a time zone identifier
48
+ * (`+05:30`, `+0530`, `-08`) or a stored offset (`±HH:MM[:SS]`, what `getTimeZoneOffset`
49
+ * returns). A UTC offset such as `"+02:00"` observes no DST.
49
50
  */
50
51
  timeZone: string;
51
52
  /**
@@ -0,0 +1,23 @@
1
+ /**
2
+ * How a two-digit year (`yy` in a pattern, `YYMMDD` in an EDI value) gets its century.
3
+ *
4
+ * No standard says which century a two-digit year belongs to, so GMT holds no cut-off of its own:
5
+ * the caller names the hundred-year window. A two-digit year is a legacy form; a four-digit year
6
+ * is the one to ask a data source for.
7
+ */
8
+ export interface TwoDigitYearOptions {
9
+ /**
10
+ * The hundred-year window a two-digit year falls in. A number is the first year of a fixed
11
+ * window, an integer from 0 to 9900: `2000` reads `00`–`99` as 2000–2099; `1950` reads `50`–`99`
12
+ * as 1950–1999 and `00`–`49` as 2000–2049. A fixed window gives the same answer in any year,
13
+ * so it is the form for stored data, archives and anything re-processed later. `"rolling"` is
14
+ * the hundred years around today: from 50 years before the current UTC calendar year to 49
15
+ * years after it (in 2026, 1976–2075). It is the form for live messages and never needs
16
+ * maintenance, but it gives a different answer for the same stored value as years pass. Any
17
+ * other value returns the function's sentinel.
18
+ *
19
+ * @defaultValue None. A value with a two-digit year returns the sentinel: no standard says which
20
+ * century it belongs to, so the caller states it.
21
+ */
22
+ yearWindow?: "rolling" | number;
23
+ }
File without changes
@@ -8,4 +8,4 @@
8
8
  *
9
9
  * Narrow a candidate unit with `isValidZoneBucketUnit`.
10
10
  */
11
- export type ZoneBucketUnit = "hour" | "day" | "week" | "month";
11
+ export type ZoneBucketUnit = "month" | "week" | "day" | "hour";
@@ -7,6 +7,12 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
7
7
  * - Validates duration units and values.
8
8
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
9
9
  * - Returns null for invalid input.
10
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
11
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
12
+ * offset's seconds (under a minute) of the last instant Temporal supports
13
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
14
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
15
+ * such limit.
10
16
  *
11
17
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
12
18
  * @param units Partial<Record<DateTimeDurationUnit, number>> object specifying units to add
@@ -19,6 +25,7 @@ import type { UnixUnit } from "../validate/isValidUnixUnit.js";
19
25
  * @example addUnix(1.5, { days: 1 }) // null (not an integer epoch)
20
26
  * @example addUnix("1706659200000", { days: 1 }) // 1706745600000 (digit string)
21
27
  * @example addUnix(1706659200000, { days: 1 }, { timeZone: "Mars/Olympus" }) // null (unknown zone)
28
+ * @example addUnix(45870000, { days: 1 }, { timeZone: "-00:44:30" }) // 132270000 (a stored offset with seconds)
22
29
  */
23
30
  export declare function addUnix(value: number | string, units: Partial<Record<DateTimeDurationUnit, number>>, options?: {
24
31
  /**
@@ -29,8 +36,10 @@ export declare function addUnix(value: number | string, units: Partial<Record<Da
29
36
  */
30
37
  epochUnit?: UnixUnit;
31
38
  /**
32
- * The time zone the calendar arithmetic runs in: an IANA name, a UTC offset, or `"local"` for
33
- * the system time zone. An unknown zone returns `null`.
39
+ * The time zone the calendar arithmetic runs in: an IANA name, a UTC offset (a time zone
40
+ * identifier such as `+05:30`, `+0530` or `-08`, or a stored offset `±HH:MM[:SS]`, what
41
+ * `getTimeZoneOffset` returns), or `"local"` for the system time zone. An unknown zone returns
42
+ * `null`.
34
43
  *
35
44
  * @defaultValue `"UTC"`
36
45
  */
@@ -1,5 +1,4 @@
1
- import { addToZoned, isValidAmount, resolveOverflow } from "../../internal/index.js";
2
- import { normalizeTimeZone } from "../../internal/normalizeTimeZone.js";
1
+ import { addToZoned, frameInstant, frameZoned, normalizeZoneFrame, readDurationUnits, resolveOverflow, } from "../../internal/index.js";
3
2
  import { resolveUnixEpochUnit, toUnixEpoch, unixEpochToInstant, } from "../../internal/unixEpochValue.js";
4
3
  import { isValidDateTimeDurationUnit } from "../../plain/validate/index.js";
5
4
  import { isOptionsArgument } from "../../internal/isObject.js";
@@ -10,6 +9,12 @@ import { isOptionsArgument } from "../../internal/isObject.js";
10
9
  * - Validates duration units and values.
11
10
  * - `value` is a safe integer or a digit string (`"1706659200000"`); anything else returns null.
12
11
  * - Returns null for invalid input.
12
+ * - **Limit at an offset with seconds.** The instant is placed in the offset's whole-minute zone,
13
+ * moved by its seconds, and the moved instant must be inside Temporal's range. So within the
14
+ * offset's seconds (under a minute) of the last instant Temporal supports
15
+ * (`+275760-09-13T00:00:00Z`) for an offset east of UTC, or of the first
16
+ * (`-271821-04-20T00:00:00Z`) for one west, this returns `null`. An offset to the minute has no
17
+ * such limit.
13
18
  *
14
19
  * @param value Unix epoch: a safe integer, or a string of optionally negative ASCII digits
15
20
  * @param units Partial<Record<DateTimeDurationUnit, number>> object specifying units to add
@@ -22,6 +27,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
22
27
  * @example addUnix(1.5, { days: 1 }) // null (not an integer epoch)
23
28
  * @example addUnix("1706659200000", { days: 1 }) // 1706745600000 (digit string)
24
29
  * @example addUnix(1706659200000, { days: 1 }, { timeZone: "Mars/Olympus" }) // null (unknown zone)
30
+ * @example addUnix(45870000, { days: 1 }, { timeZone: "-00:44:30" }) // 132270000 (a stored offset with seconds)
25
31
  */
26
32
  export function addUnix(value, units, options) {
27
33
  try {
@@ -29,15 +35,12 @@ export function addUnix(value, units, options) {
29
35
  return null;
30
36
  }
31
37
  const epochUnit = resolveUnixEpochUnit(options?.epochUnit);
32
- const timeZone = normalizeTimeZone(options?.timeZone);
38
+ const frame = normalizeZoneFrame(options?.timeZone);
33
39
  const overflow = resolveOverflow(options?.overflow);
34
- if (!timeZone || epochUnit === null)
40
+ if (frame === null || epochUnit === null)
35
41
  return null;
36
- const validUnits = typeof units === "object" &&
37
- units !== null &&
38
- Object.keys(units).every(isValidDateTimeDurationUnit);
39
- const validAmounts = validUnits && Object.values(units).every(isValidAmount);
40
- if (!validUnits || !validAmounts) {
42
+ const amounts = readDurationUnits(units, isValidDateTimeDurationUnit);
43
+ if (amounts === null) {
41
44
  return null;
42
45
  }
43
46
  const instant = unixEpochToInstant(value, epochUnit);
@@ -45,8 +48,8 @@ export function addUnix(value, units, options) {
45
48
  return null;
46
49
  }
47
50
  try {
48
- const zdt = instant.toZonedDateTimeISO(timeZone);
49
- return toUnixEpoch(addToZoned(zdt, units, { overflow }), epochUnit);
51
+ const zdt = frameZoned(instant, frame);
52
+ return toUnixEpoch(frameInstant(addToZoned(zdt, amounts, { overflow }), frame), epochUnit);
50
53
  }
51
54
  catch {
52
55
  return null;