@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
@@ -66,6 +66,7 @@ export function parseTimeWithPattern(value, pattern, locale) {
66
66
  return "";
67
67
  if (typeof pattern !== "string")
68
68
  return "";
69
+ // A time pattern has no year token, so no two-digit-year window applies.
69
70
  const fields = parseValueWithPattern(value, pattern, locale, TIME_PATTERN_FIELDS);
70
71
  if (fields === null)
71
72
  return "";
@@ -9,6 +9,8 @@ import { Temporal } from "@js-temporal/polyfill";
9
9
  * - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
10
10
  * Temporal's GetOptionsObject rejects it.
11
11
  * - Returns "" for invalid input.
12
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
13
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
12
14
  *
13
15
  * @param value ISO PlainDate string
14
16
  * @param unit unit to extract from the date
@@ -16,6 +18,7 @@ import { Temporal } from "@js-temporal/polyfill";
16
18
  * @returns string representation of the requested unit or "" on invalid input
17
19
  *
18
20
  * @example parseUnitFromDate("2024-03-15", "year") // "2024"
21
+ * @example parseUnitFromDate("0005-06-01", "year") // "0005"
19
22
  * @example parseUnitFromDate("2024-03-15", "month") // "03"
20
23
  * @example parseUnitFromDate("2024-03-15", "day") // "15"
21
24
  * @example parseUnitFromDate("2024-03-15", "week") // "11"
@@ -4,6 +4,7 @@ import { resolveWeekStartsOn } from "../../internal/resolveWeekStartsOn.js";
4
4
  import { getWeekNumber } from "../calculate/getWeekNumber.js";
5
5
  import { isValidDate } from "../validate/index.js";
6
6
  import { isOptionsArgument } from "../../internal/isObject.js";
7
+ import { isoYearString } from "../../internal/isoYearString.js";
7
8
  /**
8
9
  * Return a specific date unit extracted from a PlainDate string.
9
10
  *
@@ -14,6 +15,8 @@ import { isOptionsArgument } from "../../internal/isObject.js";
14
15
  * - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
15
16
  * Temporal's GetOptionsObject rejects it.
16
17
  * - Returns "" for invalid input.
18
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
19
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
17
20
  *
18
21
  * @param value ISO PlainDate string
19
22
  * @param unit unit to extract from the date
@@ -21,6 +24,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
21
24
  * @returns string representation of the requested unit or "" on invalid input
22
25
  *
23
26
  * @example parseUnitFromDate("2024-03-15", "year") // "2024"
27
+ * @example parseUnitFromDate("0005-06-01", "year") // "0005"
24
28
  * @example parseUnitFromDate("2024-03-15", "month") // "03"
25
29
  * @example parseUnitFromDate("2024-03-15", "day") // "15"
26
30
  * @example parseUnitFromDate("2024-03-15", "week") // "11"
@@ -44,7 +48,7 @@ export function parseUnitFromDate(value, unit, optionsArg) {
44
48
  const date = Temporal.PlainDate.from(value);
45
49
  switch (resolveDateTimeUnit(unit)) {
46
50
  case "year":
47
- return date.year.toString();
51
+ return isoYearString(date.year);
48
52
  case "month":
49
53
  return date.month.toString().padStart(2, "0");
50
54
  case "day":
@@ -11,6 +11,8 @@ import { Temporal } from "@js-temporal/polyfill";
11
11
  * - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
12
12
  * Temporal's GetOptionsObject rejects it.
13
13
  * - Returns "" for invalid input.
14
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
15
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
14
16
  *
15
17
  * @param value ISO PlainDateTime string
16
18
  * @param unit unit to extract from the datetime
@@ -18,6 +20,7 @@ import { Temporal } from "@js-temporal/polyfill";
18
20
  * @returns string representation of the requested unit or "" on invalid input
19
21
  *
20
22
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "year") // "2024"
23
+ * @example parseUnitFromDateTime("0005-06-01T12:30:00", "year") // "0005"
21
24
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "week") // "11"
22
25
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "hour") // "14"
23
26
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "millisecond") // "123"
@@ -5,6 +5,7 @@ import { resolveWeekStartsOn } from "../../internal/resolveWeekStartsOn.js";
5
5
  import { getWeekNumber } from "../calculate/getWeekNumber.js";
6
6
  import { isValidDateTime } from "../validate/index.js";
7
7
  import { isOptionsArgument } from "../../internal/isObject.js";
8
+ import { isoYearString } from "../../internal/isoYearString.js";
8
9
  /**
9
10
  * Return a specific unit extracted from a PlainDateTime string.
10
11
  *
@@ -17,6 +18,8 @@ import { isOptionsArgument } from "../../internal/isObject.js";
17
18
  * - `optionsArg` must be an object or omitted: `null` or any other primitive returns "", as
18
19
  * Temporal's GetOptionsObject rejects it.
19
20
  * - Returns "" for invalid input.
21
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
22
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
20
23
  *
21
24
  * @param value ISO PlainDateTime string
22
25
  * @param unit unit to extract from the datetime
@@ -24,6 +27,7 @@ import { isOptionsArgument } from "../../internal/isObject.js";
24
27
  * @returns string representation of the requested unit or "" on invalid input
25
28
  *
26
29
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "year") // "2024"
30
+ * @example parseUnitFromDateTime("0005-06-01T12:30:00", "year") // "0005"
27
31
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "week") // "11"
28
32
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "hour") // "14"
29
33
  * @example parseUnitFromDateTime("2024-03-15T14:30:45.123", "millisecond") // "123"
@@ -45,7 +49,7 @@ export function parseUnitFromDateTime(value, unit, optionsArg) {
45
49
  const dateTime = Temporal.PlainDateTime.from(value);
46
50
  switch (resolveDateTimeUnit(unit)) {
47
51
  case "year":
48
- return dateTime.year.toString();
52
+ return isoYearString(dateTime.year);
49
53
  case "month":
50
54
  return dateTime.month.toString().padStart(2, "0");
51
55
  case "day":
@@ -1,13 +1,16 @@
1
1
  /**
2
2
  * Return the year for a given ISO 8601 date string.
3
3
  *
4
- * - Returns the year as a string (e.g., "2024").
4
+ * - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
5
+ * digits outside 0000–9999 (`"+010000"`, `"-000005"`).
5
6
  * - Returns "" for invalid input.
6
7
  *
7
8
  * @param value ISO date string
8
- * @returns Year (YYYY) or "" on invalid input
9
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
9
10
  *
10
11
  * @example parseYearFromDate("2024-03-15") // "2024"
12
+ * @example parseYearFromDate("0005-06-01") // "0005"
13
+ * @example parseYearFromDate("+010000-01-01") // "+010000"
11
14
  * @example parseYearFromDate("invalid") // ""
12
15
  */
13
16
  export declare function parseYearFromDate(value: string): string;
@@ -1,15 +1,19 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { isValidDate } from "../validate/index.js";
3
+ import { isoYearString } from "../../internal/isoYearString.js";
3
4
  /**
4
5
  * Return the year for a given ISO 8601 date string.
5
6
  *
6
- * - Returns the year as a string (e.g., "2024").
7
+ * - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
8
+ * digits outside 0000–9999 (`"+010000"`, `"-000005"`).
7
9
  * - Returns "" for invalid input.
8
10
  *
9
11
  * @param value ISO date string
10
- * @returns Year (YYYY) or "" on invalid input
12
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
11
13
  *
12
14
  * @example parseYearFromDate("2024-03-15") // "2024"
15
+ * @example parseYearFromDate("0005-06-01") // "0005"
16
+ * @example parseYearFromDate("+010000-01-01") // "+010000"
13
17
  * @example parseYearFromDate("invalid") // ""
14
18
  */
15
19
  export function parseYearFromDate(value) {
@@ -17,7 +21,7 @@ export function parseYearFromDate(value) {
17
21
  return "";
18
22
  try {
19
23
  const date = Temporal.PlainDate.from(value);
20
- return date.year.toString();
24
+ return isoYearString(date.year);
21
25
  }
22
26
  catch {
23
27
  return "";
@@ -1,13 +1,15 @@
1
1
  /**
2
2
  * Return the year for a given ISO 8601 datetime string.
3
3
  *
4
- * - Returns the year as a string (e.g., "2024").
4
+ * - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
5
+ * digits outside 0000–9999 (`"+010000"`, `"-000005"`).
5
6
  * - Returns "" for invalid input.
6
7
  *
7
8
  * @param value ISO datetime string
8
- * @returns Year (YYYY) or "" on invalid input
9
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
9
10
  *
10
11
  * @example parseYearFromDateTime("2024-03-15T12:30:00") // "2024"
12
+ * @example parseYearFromDateTime("0005-06-01T12:30:00") // "0005"
11
13
  * @example parseYearFromDateTime("invalid") // ""
12
14
  */
13
15
  export declare function parseYearFromDateTime(value: string): string;
@@ -1,15 +1,18 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { isValidDateTime } from "../validate/index.js";
3
+ import { isoYearString } from "../../internal/isoYearString.js";
3
4
  /**
4
5
  * Return the year for a given ISO 8601 datetime string.
5
6
  *
6
- * - Returns the year as a string (e.g., "2024").
7
+ * - Returns the year as Temporal writes it: four digits (`"2024"`, `"0005"`), or a sign and six
8
+ * digits outside 0000–9999 (`"+010000"`, `"-000005"`).
7
9
  * - Returns "" for invalid input.
8
10
  *
9
11
  * @param value ISO datetime string
10
- * @returns Year (YYYY) or "" on invalid input
12
+ * @returns the year as four digits, or a sign and six digits outside 0000–9999, or "" on invalid input
11
13
  *
12
14
  * @example parseYearFromDateTime("2024-03-15T12:30:00") // "2024"
15
+ * @example parseYearFromDateTime("0005-06-01T12:30:00") // "0005"
13
16
  * @example parseYearFromDateTime("invalid") // ""
14
17
  */
15
18
  export function parseYearFromDateTime(value) {
@@ -17,7 +20,7 @@ export function parseYearFromDateTime(value) {
17
20
  return "";
18
21
  try {
19
22
  const dateTime = Temporal.PlainDateTime.from(value);
20
- return dateTime.year.toString();
23
+ return isoYearString(dateTime.year);
21
24
  }
22
25
  catch {
23
26
  return "";
@@ -12,6 +12,7 @@ export * from "./isValidDateTimeRange.js";
12
12
  export * from "./isValidDateTimeUnit.js";
13
13
  export * from "./isValidDateUnit.js";
14
14
  export * from "./isValidIsoDateLike.js";
15
+ export * from "./isValidSqlDateTime.js";
15
16
  export * from "./isValidTime.js";
16
17
  export * from "./isValidTimeCycleField.js";
17
18
  export * from "./isValidTimeDurationUnit.js";
@@ -12,6 +12,7 @@ export * from "./isValidDateTimeRange.js";
12
12
  export * from "./isValidDateTimeUnit.js";
13
13
  export * from "./isValidDateUnit.js";
14
14
  export * from "./isValidIsoDateLike.js";
15
+ export * from "./isValidSqlDateTime.js";
15
16
  export * from "./isValidTime.js";
16
17
  export * from "./isValidTimeCycleField.js";
17
18
  export * from "./isValidTimeDurationUnit.js";
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Return true when `value` is a real SQL timestamp literal without a time zone: the
3
+ * `YYYY-MM-DD HH:MM:SS[.fff]` value of a standard SQL `TIMESTAMP` or a MySQL/SQLite `DATETIME`
4
+ * column. It checks one date-and-time value, not a SQL statement.
5
+ *
6
+ * - True exactly when `parseSqlDateTime` returns a plain string for the same value: the validator
7
+ * calls the parser, so the two cannot disagree.
8
+ * - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, as `sqlDateTime`
9
+ * matches: a single space separator, a four-digit year `0001`–`9999`, two-digit month, day,
10
+ * hour, minute and second (seconds are required), and an optional `.` followed by up to 9
11
+ * fraction digits.
12
+ * - Checks the calendar as well as the shape. The `sqlDateTime` pattern proves the shape alone, so
13
+ * it matches a day that does not exist: 30 February, 29 February in a common year and 31 June
14
+ * are false here.
15
+ * - False for a second of 60: GMT rejects leap seconds.
16
+ * - **Plain only.** A `T` separator, a `Z` and an offset are false: SQL's offset-carrying
17
+ * `TIMESTAMP WITH TIME ZONE` literal is out of scope.
18
+ * - False for a non-string. Read the value with `parseSqlDateTime`; write one with
19
+ * `formatSqlDateTime`.
20
+ *
21
+ * @param value candidate SQL timestamp literal
22
+ * @returns boolean indicating validity
23
+ *
24
+ * @example isValidSqlDateTime("2024-03-15 14:30:00") // true
25
+ * @example isValidSqlDateTime("2024-03-15 14:30:00.123456789") // true
26
+ * @example isValidSqlDateTime("2024-02-30 14:30:00") // false (February has no 30th; the sqlDateTime pattern matches it)
27
+ * @example isValidSqlDateTime("2023-02-29 14:30:00") // false (2023 has no 29 February; the sqlDateTime pattern matches it)
28
+ * @example isValidSqlDateTime("2024-06-31 00:00:00") // false (June has 30 days; the sqlDateTime pattern matches it)
29
+ * @example isValidSqlDateTime("2024-03-15 14:30") // false (seconds are required)
30
+ * @example isValidSqlDateTime("2024-03-15T14:30:00") // false (T separator)
31
+ * @example isValidSqlDateTime("not a date") // false
32
+ */
33
+ export declare function isValidSqlDateTime(value: string): boolean;
@@ -0,0 +1,36 @@
1
+ import { parseSqlDateTime } from "../parse/parseSqlDateTime.js";
2
+ /**
3
+ * Return true when `value` is a real SQL timestamp literal without a time zone: the
4
+ * `YYYY-MM-DD HH:MM:SS[.fff]` value of a standard SQL `TIMESTAMP` or a MySQL/SQLite `DATETIME`
5
+ * column. It checks one date-and-time value, not a SQL statement.
6
+ *
7
+ * - True exactly when `parseSqlDateTime` returns a plain string for the same value: the validator
8
+ * calls the parser, so the two cannot disagree.
9
+ * - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, as `sqlDateTime`
10
+ * matches: a single space separator, a four-digit year `0001`–`9999`, two-digit month, day,
11
+ * hour, minute and second (seconds are required), and an optional `.` followed by up to 9
12
+ * fraction digits.
13
+ * - Checks the calendar as well as the shape. The `sqlDateTime` pattern proves the shape alone, so
14
+ * it matches a day that does not exist: 30 February, 29 February in a common year and 31 June
15
+ * are false here.
16
+ * - False for a second of 60: GMT rejects leap seconds.
17
+ * - **Plain only.** A `T` separator, a `Z` and an offset are false: SQL's offset-carrying
18
+ * `TIMESTAMP WITH TIME ZONE` literal is out of scope.
19
+ * - False for a non-string. Read the value with `parseSqlDateTime`; write one with
20
+ * `formatSqlDateTime`.
21
+ *
22
+ * @param value candidate SQL timestamp literal
23
+ * @returns boolean indicating validity
24
+ *
25
+ * @example isValidSqlDateTime("2024-03-15 14:30:00") // true
26
+ * @example isValidSqlDateTime("2024-03-15 14:30:00.123456789") // true
27
+ * @example isValidSqlDateTime("2024-02-30 14:30:00") // false (February has no 30th; the sqlDateTime pattern matches it)
28
+ * @example isValidSqlDateTime("2023-02-29 14:30:00") // false (2023 has no 29 February; the sqlDateTime pattern matches it)
29
+ * @example isValidSqlDateTime("2024-06-31 00:00:00") // false (June has 30 days; the sqlDateTime pattern matches it)
30
+ * @example isValidSqlDateTime("2024-03-15 14:30") // false (seconds are required)
31
+ * @example isValidSqlDateTime("2024-03-15T14:30:00") // false (T separator)
32
+ * @example isValidSqlDateTime("not a date") // false
33
+ */
34
+ export function isValidSqlDateTime(value) {
35
+ return parseSqlDateTime(value) !== "";
36
+ }
@@ -5,17 +5,23 @@
5
5
  * (`"...[America/New_York]"`) when one is.
6
6
  * - No disambiguation policy applies: an instant maps to exactly one wall time in a zone,
7
7
  * so DST gaps and overlaps cannot arise on this direction of the conversion.
8
- * - A time zone, when given, must be a valid IANA identifier. `undefined` is the same as omitting
9
- * it (UTC), as TC39 treats an undefined argument as absent.
8
+ * - A time zone, when given, must be a time zone identifier: an IANA name or a UTC offset to the
9
+ * minute. `undefined` is the same as omitting it (UTC), as TC39 treats an undefined argument as
10
+ * absent.
10
11
  * - Rejects values outside the range `Temporal.Instant` can represent
11
12
  * (±8_640_000_000_000_000_000_000n, i.e. ±10^8 days from the epoch).
12
13
  * - **Storage round-trip:** most engines cannot hold nanoseconds — PostgreSQL `timestamptz`
13
14
  * stores microseconds — so writing this value and reading it back breaks equality unless
14
15
  * the caller applies `truncateNanoseconds` to the target precision first.
15
16
  * - Returns "" on invalid input.
17
+ * - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
18
+ * 9557 §4.1), so the result could not name it. Pass the IANA name, or call
19
+ * `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
20
+ * bracket.
16
21
  *
17
22
  * @param nanoseconds nanoseconds since the Unix epoch (bigint)
18
- * @param timeZone optional IANA name or UTC offset; omitted or `undefined` is UTC
23
+ * @param timeZone optional IANA name or a UTC offset to the minute (what `isValidTimeZone`
24
+ * accepts); omitted or `undefined` is UTC
19
25
  * @returns ISO 8601 instant string (UTC), zoned ISO 8601 string when a timeZone is given, or "" on invalid input
20
26
  *
21
27
  * @example fromNanoseconds(0n) // "1970-01-01T00:00:00Z"
@@ -8,17 +8,23 @@ import { isValidTimeZone } from "../../zoned/validate/index.js";
8
8
  * (`"...[America/New_York]"`) when one is.
9
9
  * - No disambiguation policy applies: an instant maps to exactly one wall time in a zone,
10
10
  * so DST gaps and overlaps cannot arise on this direction of the conversion.
11
- * - A time zone, when given, must be a valid IANA identifier. `undefined` is the same as omitting
12
- * it (UTC), as TC39 treats an undefined argument as absent.
11
+ * - A time zone, when given, must be a time zone identifier: an IANA name or a UTC offset to the
12
+ * minute. `undefined` is the same as omitting it (UTC), as TC39 treats an undefined argument as
13
+ * absent.
13
14
  * - Rejects values outside the range `Temporal.Instant` can represent
14
15
  * (±8_640_000_000_000_000_000_000n, i.e. ±10^8 days from the epoch).
15
16
  * - **Storage round-trip:** most engines cannot hold nanoseconds — PostgreSQL `timestamptz`
16
17
  * stores microseconds — so writing this value and reading it back breaks equality unless
17
18
  * the caller applies `truncateNanoseconds` to the target precision first.
18
19
  * - Returns "" on invalid input.
20
+ * - An offset with seconds (`-00:44:30`) returns `""`. A written zone cannot carry seconds (RFC
21
+ * 9557 §4.1), so the result could not name it. Pass the IANA name, or call
22
+ * `fromOffsetInstant({ instant, offset })` for the local time with its full offset and no
23
+ * bracket.
19
24
  *
20
25
  * @param nanoseconds nanoseconds since the Unix epoch (bigint)
21
- * @param timeZone optional IANA name or UTC offset; omitted or `undefined` is UTC
26
+ * @param timeZone optional IANA name or a UTC offset to the minute (what `isValidTimeZone`
27
+ * accepts); omitted or `undefined` is UTC
22
28
  * @returns ISO 8601 instant string (UTC), zoned ISO 8601 string when a timeZone is given, or "" on invalid input
23
29
  *
24
30
  * @example fromNanoseconds(0n) // "1970-01-01T00:00:00Z"
@@ -0,0 +1,60 @@
1
+ /**
2
+ * RegExp matching a GS1 EPCIS 2.0 `eventTimeZoneOffset`: the `pattern` the EPCIS JSON schema
3
+ * (https://ref.gs1.org/standards/epcis/epcis-json-schema.json, a normative artefact of EPCIS 2.0 /
4
+ * ISO/IEC 19987) gives for the field, verbatim: `^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$`.
5
+ *
6
+ * - The pattern is the JSON binding's. The XML binding's XSD types the same field as a bare
7
+ * `xsd:string` and gives no pattern.
8
+ * - The rule both bindings carry is the standard's prose, EPCIS Standard Release 2.0 §7.4.1
9
+ * (https://ref.gs1.org/standards/epcis/): the value "SHALL be a string consisting of the
10
+ * character '+' or the character '-', followed by two digits whose value is within the range
11
+ * 00 through 14 (inclusive), followed by a colon character ':', followed by two digits whose
12
+ * value is within the range 00 through 59 (inclusive), except that if the value of the first
13
+ * two digits is 14, the value of the second two digits must be 00." The pattern is that
14
+ * sentence as a regular expression.
15
+ * - `±HH:MM` from `-13:59` through `+13:59`, plus `±14:00`. GS1 published the grammar, so it is
16
+ * neither loosened nor tightened here: `-14:00` matches because the sign group is independent
17
+ * of the `14:00` alternative, and `-00:00` matches.
18
+ * - `Z` does not match: it is `eventTime`'s designator, and this field records the offset in
19
+ * force where the event happened. `+0200` (no colon) and `+02` (hours only) do not match.
20
+ * - Shape only. `parseEpcisEvent` reads the value through Temporal, and returns `-00:00` as
21
+ * `+00:00`. To check a value that may not be a string, use `isValidEpcisTimeZoneOffset`: for a
22
+ * string it gives this pattern's answer.
23
+ *
24
+ * Capture groups: 1 sign, 2 the hours-and-minutes or `14:00`, 3 hours, 4 minutes (3 and 4 are
25
+ * `undefined` for `14:00`).
26
+ *
27
+ * @example epcisTimeZoneOffset.test("-05:00") // true
28
+ * @example epcisTimeZoneOffset.test("+14:00") // true
29
+ * @example epcisTimeZoneOffset.test("+14:01") // false (past the range GS1 allows)
30
+ * @example epcisTimeZoneOffset.test("Z") // false (a designator, not an offset)
31
+ * @example epcisTimeZoneOffset.test("+0200") // false (no colon)
32
+ */
33
+ export declare const epcisTimeZoneOffset: RegExp;
34
+ /**
35
+ * RegExp matching a GS1 EPCIS 2.0 `eventTime` (and `recordTime`): the `DateTimeStamp` pattern of
36
+ * the EPCIS XSD (https://ref.gs1.org/standards/epcis/epcglobal-epcis-2_0.xsd, a normative
37
+ * artefact of EPCIS 2.0 / ISO/IEC 19987), verbatim and anchored.
38
+ *
39
+ * - The pattern is the XML binding's. The JSON schema types the same field as a string with
40
+ * `format: date-time` and gives no pattern, so this is the stricter of the two bindings.
41
+ * - A date-time with seconds required, an optional fraction of any length, then `Z` or an offset
42
+ * in the same range as `epcisTimeZoneOffset`.
43
+ * - GS1 published the grammar, so it is neither loosened nor tightened here: four-digit years
44
+ * only, upper-case `T` and `Z`, a colon in the offset, no space separator.
45
+ * - Shape only; calendar validity is Temporal's (`2023-02-29T00:00:00Z` matches and
46
+ * `Temporal.Instant.from` rejects it). To check that a string is a real `eventTime`, use
47
+ * `isValidEpcisEventTime`: this pattern also matches a day that does not exist and a fraction
48
+ * longer than nine digits.
49
+ *
50
+ * Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second, 7 fraction with its
51
+ * period (optional), 8 `Z` or the offset, 9 the offset, 10 sign, 11 hours-and-minutes or
52
+ * `14:00`, 12 hours, 13 minutes.
53
+ *
54
+ * @example epcisEventTime.test("2024-06-15T14:30:00Z") // true
55
+ * @example epcisEventTime.test("2024-06-15T14:30:00.123-05:00") // true
56
+ * @example epcisEventTime.test("2024-06-15T14:30Z") // false (seconds are required)
57
+ * @example epcisEventTime.test("2024-06-15T14:30:00") // false (Z or an offset is required)
58
+ * @example epcisEventTime.test("2024-06-15T14:30:00+15:00") // false (offset past the range GS1 allows)
59
+ */
60
+ export declare const epcisEventTime: RegExp;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * RegExp matching a GS1 EPCIS 2.0 `eventTimeZoneOffset`: the `pattern` the EPCIS JSON schema
3
+ * (https://ref.gs1.org/standards/epcis/epcis-json-schema.json, a normative artefact of EPCIS 2.0 /
4
+ * ISO/IEC 19987) gives for the field, verbatim: `^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$`.
5
+ *
6
+ * - The pattern is the JSON binding's. The XML binding's XSD types the same field as a bare
7
+ * `xsd:string` and gives no pattern.
8
+ * - The rule both bindings carry is the standard's prose, EPCIS Standard Release 2.0 §7.4.1
9
+ * (https://ref.gs1.org/standards/epcis/): the value "SHALL be a string consisting of the
10
+ * character '+' or the character '-', followed by two digits whose value is within the range
11
+ * 00 through 14 (inclusive), followed by a colon character ':', followed by two digits whose
12
+ * value is within the range 00 through 59 (inclusive), except that if the value of the first
13
+ * two digits is 14, the value of the second two digits must be 00." The pattern is that
14
+ * sentence as a regular expression.
15
+ * - `±HH:MM` from `-13:59` through `+13:59`, plus `±14:00`. GS1 published the grammar, so it is
16
+ * neither loosened nor tightened here: `-14:00` matches because the sign group is independent
17
+ * of the `14:00` alternative, and `-00:00` matches.
18
+ * - `Z` does not match: it is `eventTime`'s designator, and this field records the offset in
19
+ * force where the event happened. `+0200` (no colon) and `+02` (hours only) do not match.
20
+ * - Shape only. `parseEpcisEvent` reads the value through Temporal, and returns `-00:00` as
21
+ * `+00:00`. To check a value that may not be a string, use `isValidEpcisTimeZoneOffset`: for a
22
+ * string it gives this pattern's answer.
23
+ *
24
+ * Capture groups: 1 sign, 2 the hours-and-minutes or `14:00`, 3 hours, 4 minutes (3 and 4 are
25
+ * `undefined` for `14:00`).
26
+ *
27
+ * @example epcisTimeZoneOffset.test("-05:00") // true
28
+ * @example epcisTimeZoneOffset.test("+14:00") // true
29
+ * @example epcisTimeZoneOffset.test("+14:01") // false (past the range GS1 allows)
30
+ * @example epcisTimeZoneOffset.test("Z") // false (a designator, not an offset)
31
+ * @example epcisTimeZoneOffset.test("+0200") // false (no colon)
32
+ */
33
+ export const epcisTimeZoneOffset = /^([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)$/;
34
+ /**
35
+ * RegExp matching a GS1 EPCIS 2.0 `eventTime` (and `recordTime`): the `DateTimeStamp` pattern of
36
+ * the EPCIS XSD (https://ref.gs1.org/standards/epcis/epcglobal-epcis-2_0.xsd, a normative
37
+ * artefact of EPCIS 2.0 / ISO/IEC 19987), verbatim and anchored.
38
+ *
39
+ * - The pattern is the XML binding's. The JSON schema types the same field as a string with
40
+ * `format: date-time` and gives no pattern, so this is the stricter of the two bindings.
41
+ * - A date-time with seconds required, an optional fraction of any length, then `Z` or an offset
42
+ * in the same range as `epcisTimeZoneOffset`.
43
+ * - GS1 published the grammar, so it is neither loosened nor tightened here: four-digit years
44
+ * only, upper-case `T` and `Z`, a colon in the offset, no space separator.
45
+ * - Shape only; calendar validity is Temporal's (`2023-02-29T00:00:00Z` matches and
46
+ * `Temporal.Instant.from` rejects it). To check that a string is a real `eventTime`, use
47
+ * `isValidEpcisEventTime`: this pattern also matches a day that does not exist and a fraction
48
+ * longer than nine digits.
49
+ *
50
+ * Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second, 7 fraction with its
51
+ * period (optional), 8 `Z` or the offset, 9 the offset, 10 sign, 11 hours-and-minutes or
52
+ * `14:00`, 12 hours, 13 minutes.
53
+ *
54
+ * @example epcisEventTime.test("2024-06-15T14:30:00Z") // true
55
+ * @example epcisEventTime.test("2024-06-15T14:30:00.123-05:00") // true
56
+ * @example epcisEventTime.test("2024-06-15T14:30Z") // false (seconds are required)
57
+ * @example epcisEventTime.test("2024-06-15T14:30:00") // false (Z or an offset is required)
58
+ * @example epcisEventTime.test("2024-06-15T14:30:00+15:00") // false (offset past the range GS1 allows)
59
+ */
60
+ export const epcisEventTime = /^([0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|(([+]|[-])((0[0-9]|1[0-3]):([0-5][0-9])|14:00)))$/;
@@ -1,13 +1,15 @@
1
1
  /**
2
- * RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `formatHttp` emits and
2
+ * RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `formatHttpDate` emits and
3
3
  * the preferred HTTP-date form. Day, year, and time-of-day fields are all fixed-width per the
4
4
  * grammar (unlike RFC 5322's leniently-sized day); the trailing "GMT" literal is mandatory,
5
5
  * never a numeric offset.
6
6
  *
7
7
  * - **IMF-fixdate only.** RFC 9110 requires a recipient to accept all three HTTP-date formats;
8
- * the obsolete rfc850-date and asctime-date do not match this pattern. `parseHttp` reads all
8
+ * the obsolete rfc850-date and asctime-date do not match this pattern. `parseHttpDate` reads all
9
9
  * three.
10
- * - The day name is not checked against the date; `parseHttp` does check it.
10
+ * - The day name is not checked against the date; `parseHttpDate` does check it.
11
+ * - To check that a string is a real HTTP-date, use `isValidHttpDate`: this pattern also matches
12
+ * a day that does not exist and an hour out of range.
11
13
  *
12
14
  * Capture groups: 1 day-of-week, 2 day, 3 month, 4 year, 5 hour, 6 minute, 7 second.
13
15
  *
@@ -15,6 +17,6 @@
15
17
  * @example httpDate.test("Jun 09 2021 10:18:14 GMT") // false (missing day-of-week)
16
18
  * @example httpDate.test("Wed, 9 Jun 2021 10:18:14 GMT") // false (single-digit day)
17
19
  * @example httpDate.test("Wed, 09 Jun 2021 10:18:14 +0000") // false (numeric offset)
18
- * @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date: parseHttp reads it)
20
+ * @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date: parseHttpDate reads it)
19
21
  */
20
22
  export declare const httpDate: RegExp;
@@ -1,13 +1,15 @@
1
1
  /**
2
- * RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `formatHttp` emits and
2
+ * RegExp matching RFC 9110 §5.6.7 IMF-fixdate — the only form GMT's `formatHttpDate` emits and
3
3
  * the preferred HTTP-date form. Day, year, and time-of-day fields are all fixed-width per the
4
4
  * grammar (unlike RFC 5322's leniently-sized day); the trailing "GMT" literal is mandatory,
5
5
  * never a numeric offset.
6
6
  *
7
7
  * - **IMF-fixdate only.** RFC 9110 requires a recipient to accept all three HTTP-date formats;
8
- * the obsolete rfc850-date and asctime-date do not match this pattern. `parseHttp` reads all
8
+ * the obsolete rfc850-date and asctime-date do not match this pattern. `parseHttpDate` reads all
9
9
  * three.
10
- * - The day name is not checked against the date; `parseHttp` does check it.
10
+ * - The day name is not checked against the date; `parseHttpDate` does check it.
11
+ * - To check that a string is a real HTTP-date, use `isValidHttpDate`: this pattern also matches
12
+ * a day that does not exist and an hour out of range.
11
13
  *
12
14
  * Capture groups: 1 day-of-week, 2 day, 3 month, 4 year, 5 hour, 6 minute, 7 second.
13
15
  *
@@ -15,6 +17,6 @@
15
17
  * @example httpDate.test("Jun 09 2021 10:18:14 GMT") // false (missing day-of-week)
16
18
  * @example httpDate.test("Wed, 9 Jun 2021 10:18:14 GMT") // false (single-digit day)
17
19
  * @example httpDate.test("Wed, 09 Jun 2021 10:18:14 +0000") // false (numeric offset)
18
- * @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date: parseHttp reads it)
20
+ * @example httpDate.test("Wednesday, 09-Jun-21 10:18:14 GMT") // false (rfc850-date: parseHttpDate reads it)
19
21
  */
20
22
  export const httpDate = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d{2}):(\d{2}):(\d{2}) GMT$/;
@@ -3,6 +3,7 @@ export * from "./calendar-date.js";
3
3
  export * from "./calendar-zoned-date-time.js";
4
4
  export * from "./date.js";
5
5
  export * from "./date-time.js";
6
+ export * from "./epcis.js";
6
7
  export * from "./http-date.js";
7
8
  export * from "./leap-second.js";
8
9
  export * from "./nanoseconds.js";
@@ -4,6 +4,7 @@ export * from "./calendar-date.js";
4
4
  export * from "./calendar-zoned-date-time.js";
5
5
  export * from "./date.js";
6
6
  export * from "./date-time.js";
7
+ export * from "./epcis.js";
7
8
  export * from "./http-date.js";
8
9
  export * from "./leap-second.js";
9
10
  export * from "./nanoseconds.js";
@@ -13,6 +13,8 @@
13
13
  * `parseRfc2822` reads the full receiver grammar — use it to decode a header, and this
14
14
  * pattern only to check that a string has the strict shape.
15
15
  * - The day-of-week is not checked against the date; `parseRfc2822` does check it.
16
+ * - To check that a string is a real RFC 5322 date-time, use `isValidRfc2822DateTime`: this
17
+ * pattern also matches a day that does not exist and an hour or zone out of range.
16
18
  *
17
19
  * Capture groups: 1 day-of-week (optional, for weekday-prefixed form), 2 day, 3 month,
18
20
  * 4 year, 5 hour, 6 minute, 7 second (optional), 8 zone.
@@ -13,6 +13,8 @@
13
13
  * `parseRfc2822` reads the full receiver grammar — use it to decode a header, and this
14
14
  * pattern only to check that a string has the strict shape.
15
15
  * - The day-of-week is not checked against the date; `parseRfc2822` does check it.
16
+ * - To check that a string is a real RFC 5322 date-time, use `isValidRfc2822DateTime`: this
17
+ * pattern also matches a day that does not exist and an hour or zone out of range.
16
18
  *
17
19
  * Capture groups: 1 day-of-week (optional, for weekday-prefixed form), 2 day, 3 month,
18
20
  * 4 year, 5 hour, 6 minute, 7 second (optional), 8 zone.
@@ -11,7 +11,9 @@
11
11
  * `:59`), and the fraction is capped at 9 digits (`time-secfrac` is `1*DIGIT`; Temporal keeps
12
12
  * nanoseconds).
13
13
  * - Shape-only validation; real calendar validation is delegated to
14
- * `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`.
14
+ * `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`. To check that a
15
+ * string is a real RFC 3339 date-time, use `isValidRfc3339DateTime`: this pattern also matches
16
+ * a day that does not exist, such as 29 February 2023.
15
17
  * - Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second,
16
18
  * 7 fractional (optional), 8 offset.
17
19
  *
@@ -11,7 +11,9 @@
11
11
  * `:59`), and the fraction is capped at 9 digits (`time-secfrac` is `1*DIGIT`; Temporal keeps
12
12
  * nanoseconds).
13
13
  * - Shape-only validation; real calendar validation is delegated to
14
- * `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`.
14
+ * `Temporal.PlainDateTime.from(...).toZonedDateTime(offset)` in `parseRfc3339`. To check that a
15
+ * string is a real RFC 3339 date-time, use `isValidRfc3339DateTime`: this pattern also matches
16
+ * a day that does not exist, such as 29 February 2023.
15
17
  * - Capture groups: 1 year, 2 month, 3 day, 4 hour, 5 minute, 6 second,
16
18
  * 7 fractional (optional), 8 offset.
17
19
  *
@@ -16,7 +16,8 @@
16
16
  * - SECOND `60`–`61` does not match, although Table 10 allows them: GMT rejects leap seconds
17
17
  * because Temporal would read one as `:59`.
18
18
  * - Shape-only validation; the calendar date is checked by `Temporal.PlainDateTime.from` in
19
- * `parseSql`.
19
+ * `parseSqlDateTime`. To check that a string is a real SQL timestamp literal, use
20
+ * `isValidSqlDateTime`: this pattern also matches a day that does not exist, such as 30 February.
20
21
  *
21
22
  * Capture groups: 1 month, 2 day, 3 hour. The year, minute, second and fraction are not
22
23
  * captured.
@@ -16,7 +16,8 @@
16
16
  * - SECOND `60`–`61` does not match, although Table 10 allows them: GMT rejects leap seconds
17
17
  * because Temporal would read one as `:59`.
18
18
  * - Shape-only validation; the calendar date is checked by `Temporal.PlainDateTime.from` in
19
- * `parseSql`.
19
+ * `parseSqlDateTime`. To check that a string is a real SQL timestamp literal, use
20
+ * `isValidSqlDateTime`: this pattern also matches a day that does not exist, such as 30 February.
20
21
  *
21
22
  * Capture groups: 1 month, 2 day, 3 hour. The year, minute, second and fraction are not
22
23
  * captured.