@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
@@ -4,6 +4,7 @@ import { joinDateTimeConnector, normalizeDateTime } from "../../internal/index.j
4
4
  import { plainTimeStyle } from "../../internal/plainFormatOptions.js";
5
5
  import { isValidDateTime } from "../validate/index.js";
6
6
  import { optionOrDefault } from "../../internal/optionOrDefault.js";
7
+ import { isObject } from "../../internal/isObject.js";
7
8
  // GMT's own rule, not a standard's: the relative day label is kept for distances
8
9
  // under one week (up to 6 calendar days either way). From 7 days out the phrase
9
10
  // is an absolute date, which is easier to place than a day count.
@@ -51,7 +52,7 @@ export function formatCalendar(value, locale, options = {}) {
51
52
  try {
52
53
  // Temporal GetOptionsObject: options must be an object or omitted; null and other primitives are
53
54
  // invalid input.
54
- if (options === null || typeof options !== "object")
55
+ if (!isObject(options))
55
56
  return "";
56
57
  if (!isValidDateTime(value))
57
58
  return "";
@@ -3,6 +3,7 @@ import { durationTotal } from "../../internal/index.js";
3
3
  import { formatRelativeAmount } from "../../internal/formatRelativeDuration.js";
4
4
  import { isValidDate } from "../validate/index.js";
5
5
  import { resolveRelativeUnit } from "../../internal/resolveRelativeUnit.js";
6
+ import { isObject } from "../../internal/isObject.js";
6
7
  // Temporal's date unit group: the units a PlainDate difference may be written in.
7
8
  const DATE_UNITS = [
8
9
  "year",
@@ -40,7 +41,7 @@ export function formatRelativeDate(value, locale, options = {}) {
40
41
  try {
41
42
  // Temporal GetOptionsObject: options must be an object or omitted; null and other primitives are
42
43
  // invalid input.
43
- if (options === null || typeof options !== "object")
44
+ if (!isObject(options))
44
45
  return "";
45
46
  if (!isValidDate(value))
46
47
  return "";
@@ -3,6 +3,7 @@ import { Temporal } from "@js-temporal/polyfill";
3
3
  import { durationTotal } from "../../internal/index.js";
4
4
  import { formatRelativeDuration } from "../../internal/formatRelativeDuration.js";
5
5
  import { isValidDateTime } from "../validate/index.js";
6
+ import { isObject } from "../../internal/isObject.js";
6
7
  /**
7
8
  * Format the relative time between a plain date-time and a reference date-time.
8
9
  *
@@ -33,7 +34,7 @@ export function formatRelativeDateTime(value, locale, options = {}) {
33
34
  try {
34
35
  // Temporal GetOptionsObject: options must be an object or omitted; null and other primitives are
35
36
  // invalid input.
36
- if (options === null || typeof options !== "object")
37
+ if (!isObject(options))
37
38
  return "";
38
39
  if (!isValidDateTime(value))
39
40
  return "";
@@ -2,6 +2,7 @@ import { Temporal } from "@js-temporal/polyfill";
2
2
  import { formatRelativeAmount } from "../../internal/formatRelativeDuration.js";
3
3
  import { isValidTime } from "../validate/index.js";
4
4
  import { resolveRelativeUnit } from "../../internal/resolveRelativeUnit.js";
5
+ import { isObject } from "../../internal/isObject.js";
5
6
  // Temporal's time unit group down to the second: the units a PlainTime difference may be written
6
7
  // in, less the sub-second units, which Intl.RelativeTimeFormat does not have.
7
8
  const TIME_UNITS = [
@@ -38,7 +39,7 @@ export function formatRelativeTime(value, locale, options = {}) {
38
39
  try {
39
40
  // Temporal GetOptionsObject: options must be an object or omitted; null and other primitives are
40
41
  // invalid input.
41
- if (options === null || typeof options !== "object")
42
+ if (!isObject(options))
42
43
  return "";
43
44
  if (!isValidTime(value))
44
45
  return "";
@@ -3,7 +3,7 @@
3
3
  * `YYYY-MM-DD HH:MM:SS[.fff]` form of standard SQL `TIMESTAMP` and MySQL/SQLite `DATETIME`
4
4
  * columns.
5
5
  *
6
- * - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, which `parseSql`
6
+ * - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, which `parseSqlDateTime`
7
7
  * reads: the date, a single space, and the time with seconds always written.
8
8
  * - A year outside SQL-92's `0001`–`9999` (Table 10) returns `""`: the literal has no sign and
9
9
  * no expanded year to write it with.
@@ -16,10 +16,10 @@
16
16
  * @param value plain ISO 8601 datetime string (e.g. "2024-03-15T14:30:00")
17
17
  * @returns SQL timestamp literal, or "" on invalid input
18
18
  *
19
- * @example formatSql("2024-03-15T14:30:00") // "2024-03-15 14:30:00"
20
- * @example formatSql("2024-03-15T14:30") // "2024-03-15 14:30:00"
21
- * @example formatSql("2024-03-15T14:30:00.500") // "2024-03-15 14:30:00.5"
22
- * @example formatSql("0000-01-01T00:00:00") // "" (year outside 0001–9999)
23
- * @example formatSql("invalid") // ""
19
+ * @example formatSqlDateTime("2024-03-15T14:30:00") // "2024-03-15 14:30:00"
20
+ * @example formatSqlDateTime("2024-03-15T14:30") // "2024-03-15 14:30:00"
21
+ * @example formatSqlDateTime("2024-03-15T14:30:00.500") // "2024-03-15 14:30:00.5"
22
+ * @example formatSqlDateTime("0000-01-01T00:00:00") // "" (year outside 0001–9999)
23
+ * @example formatSqlDateTime("invalid") // ""
24
24
  */
25
- export declare function formatSql(value: string): string;
25
+ export declare function formatSqlDateTime(value: string): string;
@@ -5,7 +5,7 @@ import { isValidDateTime } from "../validate/index.js";
5
5
  * `YYYY-MM-DD HH:MM:SS[.fff]` form of standard SQL `TIMESTAMP` and MySQL/SQLite `DATETIME`
6
6
  * columns.
7
7
  *
8
- * - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, which `parseSql`
8
+ * - **Grammar:** SQL-92 §5.3 `<timestamp string>` and the ODBC `ts` escape, which `parseSqlDateTime`
9
9
  * reads: the date, a single space, and the time with seconds always written.
10
10
  * - A year outside SQL-92's `0001`–`9999` (Table 10) returns `""`: the literal has no sign and
11
11
  * no expanded year to write it with.
@@ -18,13 +18,13 @@ import { isValidDateTime } from "../validate/index.js";
18
18
  * @param value plain ISO 8601 datetime string (e.g. "2024-03-15T14:30:00")
19
19
  * @returns SQL timestamp literal, or "" on invalid input
20
20
  *
21
- * @example formatSql("2024-03-15T14:30:00") // "2024-03-15 14:30:00"
22
- * @example formatSql("2024-03-15T14:30") // "2024-03-15 14:30:00"
23
- * @example formatSql("2024-03-15T14:30:00.500") // "2024-03-15 14:30:00.5"
24
- * @example formatSql("0000-01-01T00:00:00") // "" (year outside 0001–9999)
25
- * @example formatSql("invalid") // ""
21
+ * @example formatSqlDateTime("2024-03-15T14:30:00") // "2024-03-15 14:30:00"
22
+ * @example formatSqlDateTime("2024-03-15T14:30") // "2024-03-15 14:30:00"
23
+ * @example formatSqlDateTime("2024-03-15T14:30:00.500") // "2024-03-15 14:30:00.5"
24
+ * @example formatSqlDateTime("0000-01-01T00:00:00") // "" (year outside 0001–9999)
25
+ * @example formatSqlDateTime("invalid") // ""
26
26
  */
27
- export function formatSql(value) {
27
+ export function formatSqlDateTime(value) {
28
28
  if (!isValidDateTime(value))
29
29
  return "";
30
30
  try {
@@ -8,5 +8,5 @@ export * from "./formatDateToParts.js";
8
8
  export * from "./formatRelativeDate.js";
9
9
  export * from "./formatRelativeDateTime.js";
10
10
  export * from "./formatRelativeTime.js";
11
- export * from "./formatSql.js";
11
+ export * from "./formatSqlDateTime.js";
12
12
  export * from "./formatTime.js";
@@ -8,5 +8,5 @@ export * from "./formatDateToParts.js";
8
8
  export * from "./formatRelativeDate.js";
9
9
  export * from "./formatRelativeDateTime.js";
10
10
  export * from "./formatRelativeTime.js";
11
- export * from "./formatSql.js";
11
+ export * from "./formatSqlDateTime.js";
12
12
  export * from "./formatTime.js";
@@ -8,6 +8,8 @@ export type { NowUnit };
8
8
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
9
9
  * does; `"dayOfWeek"` has no plural.
10
10
  * - Returns "" when unit is invalid or system timezone is unavailable.
11
+ * - The `"year"` unit is written as Temporal writes a year: four digits (`"2024"`, `"0005"`), or a
12
+ * sign and six digits outside 0000–9999 (`"+010000"`, `"-000005"`).
11
13
  *
12
14
  * @param unit unit to extract from current local time
13
15
  * @returns string representation of the requested unit or "" on invalid
@@ -15,6 +15,8 @@ function isValidPlainNowUnit(unit) {
15
15
  * - `unit` accepts the singular or plural name of a Temporal unit (`"hour"` or `"hours"`), as Temporal
16
16
  * does; `"dayOfWeek"` has no plural.
17
17
  * - Returns "" when unit is invalid or system timezone is unavailable.
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"`).
18
20
  *
19
21
  * @param unit unit to extract from current local time
20
22
  * @returns string representation of the requested unit or "" on invalid
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * - Uses Temporal.Now.zonedDateTimeISO to get current year in system timezone.
5
5
  * - Returns zero-padded string (e.g., "2024").
6
+ * - A year outside 0000–9999 is written with a sign and six digits (`+010000`, `-000005`), as
7
+ * Temporal writes it at the head of a date.
6
8
  * - Returns "" when system timezone is unavailable.
7
9
  *
8
10
  * @returns current year string (zero-padded) or "" on invalid
@@ -1,10 +1,13 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { getSystemTimeZone } from "../../zoned/get/getSystemTimeZone.js";
3
+ import { isoYearString } from "../../internal/isoYearString.js";
3
4
  /**
4
5
  * Return the current year as a zero-padded string in the system timeZone.
5
6
  *
6
7
  * - Uses Temporal.Now.zonedDateTimeISO to get current year in system timezone.
7
8
  * - Returns zero-padded string (e.g., "2024").
9
+ * - A year outside 0000–9999 is written with a sign and six digits (`+010000`, `-000005`), as
10
+ * Temporal writes it at the head of a date.
8
11
  * - Returns "" when system timezone is unavailable.
9
12
  *
10
13
  * @returns current year string (zero-padded) or "" on invalid
@@ -17,9 +20,7 @@ export function getYear() {
17
20
  if (!timeZone)
18
21
  return "";
19
22
  try {
20
- return Temporal.Now.zonedDateTimeISO(timeZone)
21
- .year.toString()
22
- .padStart(4, "0");
23
+ return isoYearString(Temporal.Now.zonedDateTimeISO(timeZone).year);
23
24
  }
24
25
  catch {
25
26
  return "";
@@ -2,6 +2,7 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { calendarOfAllDateValues, formatDateInCalendar, halfOpenXor, parseCalendarDateValue, } from "../../internal/index.js";
4
4
  import { isValidDateInterval } from "./validate/index.js";
5
+ import { isObject } from "../../internal/isObject.js";
5
6
  /**
6
7
  * Return the symmetric difference across a list of date intervals — the set of dates covered
7
8
  * by an odd number of the input intervals.
@@ -36,8 +37,7 @@ export function intervalXorAllDate(intervals) {
36
37
  if (!Array.isArray(intervals) || intervals.length === 0) {
37
38
  return [];
38
39
  }
39
- if (!intervals.every((interval) => interval &&
40
- typeof interval === "object" &&
40
+ if (!intervals.every((interval) => isObject(interval) &&
41
41
  isValidDateInterval(interval.start, interval.end))) {
42
42
  return [];
43
43
  }
@@ -1,6 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { halfOpenXor } from "../../internal/index.js";
3
3
  import { isValidDateTimeInterval } from "./validate/index.js";
4
+ import { isObject } from "../../internal/isObject.js";
4
5
  /**
5
6
  * Return the symmetric difference across a list of datetime intervals — the set of instants
6
7
  * covered by an odd number of the input intervals.
@@ -30,8 +31,7 @@ export function intervalXorAllDateTime(intervals) {
30
31
  if (!Array.isArray(intervals) || intervals.length === 0) {
31
32
  return [];
32
33
  }
33
- if (!intervals.every((interval) => interval &&
34
- typeof interval === "object" &&
34
+ if (!intervals.every((interval) => isObject(interval) &&
35
35
  isValidDateTimeInterval(interval.start, interval.end))) {
36
36
  return [];
37
37
  }
@@ -1,6 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { halfOpenXor } from "../../internal/index.js";
3
3
  import { isValidTimeInterval } from "./validate/index.js";
4
+ import { isObject } from "../../internal/isObject.js";
4
5
  /**
5
6
  * Return the symmetric difference across a list of time intervals — the set of clock times
6
7
  * covered by an odd number of the input intervals.
@@ -31,8 +32,7 @@ export function intervalXorAllTime(intervals) {
31
32
  if (!Array.isArray(intervals) || intervals.length === 0) {
32
33
  return [];
33
34
  }
34
- if (!intervals.every((interval) => interval &&
35
- typeof interval === "object" &&
35
+ if (!intervals.every((interval) => isObject(interval) &&
36
36
  isValidTimeInterval(interval.start, interval.end))) {
37
37
  return [];
38
38
  }
@@ -1,6 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { calendarOfAllDateValues, formatDateInCalendar, halfOpenMerge, parseCalendarDateValue, } from "../../internal/index.js";
3
3
  import { isValidDateInterval } from "./validate/index.js";
4
+ import { isObject } from "../../internal/isObject.js";
4
5
  /**
5
6
  * Collapse a list of date intervals into the minimum set of non-overlapping intervals.
6
7
  *
@@ -34,8 +35,7 @@ export function mergeIntervalsDate(intervals) {
34
35
  if (!Array.isArray(intervals) || intervals.length === 0) {
35
36
  return [];
36
37
  }
37
- if (!intervals.every((interval) => interval &&
38
- typeof interval === "object" &&
38
+ if (!intervals.every((interval) => isObject(interval) &&
39
39
  isValidDateInterval(interval.start, interval.end))) {
40
40
  return [];
41
41
  }
@@ -1,6 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { halfOpenMerge } from "../../internal/index.js";
3
3
  import { isValidDateTimeInterval } from "./validate/index.js";
4
+ import { isObject } from "../../internal/isObject.js";
4
5
  /**
5
6
  * Collapse a list of datetime intervals into the minimum set of non-overlapping intervals.
6
7
  *
@@ -29,8 +30,7 @@ export function mergeIntervalsDateTime(intervals) {
29
30
  if (!Array.isArray(intervals) || intervals.length === 0) {
30
31
  return [];
31
32
  }
32
- if (!intervals.every((interval) => interval &&
33
- typeof interval === "object" &&
33
+ if (!intervals.every((interval) => isObject(interval) &&
34
34
  isValidDateTimeInterval(interval.start, interval.end))) {
35
35
  return [];
36
36
  }
@@ -1,6 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { halfOpenMerge } from "../../internal/index.js";
3
3
  import { isValidTimeInterval } from "./validate/index.js";
4
+ import { isObject } from "../../internal/isObject.js";
4
5
  /**
5
6
  * Collapse a list of time intervals into the minimum set of non-overlapping intervals.
6
7
  *
@@ -29,8 +30,7 @@ export function mergeIntervalsTime(intervals) {
29
30
  if (!Array.isArray(intervals) || intervals.length === 0) {
30
31
  return [];
31
32
  }
32
- if (!intervals.every((interval) => interval &&
33
- typeof interval === "object" &&
33
+ if (!intervals.every((interval) => isObject(interval) &&
34
34
  isValidTimeInterval(interval.start, interval.end))) {
35
35
  return [];
36
36
  }
@@ -18,7 +18,7 @@ export * from "./parseNanosecondFromDateTime.js";
18
18
  export * from "./parseNanosecondFromTime.js";
19
19
  export * from "./parseSecondFromDateTime.js";
20
20
  export * from "./parseSecondFromTime.js";
21
- export * from "./parseSql.js";
21
+ export * from "./parseSqlDateTime.js";
22
22
  export * from "./parseTimeWithPattern.js";
23
23
  export * from "./parseUnitFromDate.js";
24
24
  export * from "./parseUnitFromDateTime.js";
@@ -18,7 +18,7 @@ export * from "./parseNanosecondFromDateTime.js";
18
18
  export * from "./parseNanosecondFromTime.js";
19
19
  export * from "./parseSecondFromDateTime.js";
20
20
  export * from "./parseSecondFromTime.js";
21
- export * from "./parseSql.js";
21
+ export * from "./parseSqlDateTime.js";
22
22
  export * from "./parseTimeWithPattern.js";
23
23
  export * from "./parseUnitFromDate.js";
24
24
  export * from "./parseUnitFromDateTime.js";
@@ -1,3 +1,4 @@
1
+ import type { TwoDigitYearOptions } from "../../types/two-digit-year.js";
1
2
  /**
2
3
  * Parse a datetime string against a caller-supplied token pattern (e.g.
3
4
  * `"MM/dd/yyyy HH:mm:ss"`, `"dd-MMM-yyyy h:mm a"`) and return it as an
@@ -17,7 +18,7 @@
17
18
  * | Token | Field | Width | Range | Notes |
18
19
  * |---|---|---|---|---|
19
20
  * | `yyyy` | year | 4 digits | 0000–9999 | |
20
- * | `yy` | year | 2 digits | 00–99 | Pivot: 00–68 → 2000–2068, 69–99 → 1969–1999 (fixed rule) |
21
+ * | `yy` | year | 2 digits | 00–99 | Needs `options.yearWindow`; returns `""` without it |
21
22
  * | `MM` | month | 2 digits | 01–12 | |
22
23
  * | `M` | month | 1-2 digits | 1–12 | |
23
24
  * | `MMMM` | month name (long) | locale | — | `getLocaleMonthNames(locale, "long")` |
@@ -73,17 +74,29 @@
73
74
  * - Fields absent from `pattern` default the way `Temporal.PlainDateTime.from`
74
75
  * defaults an omitted field (time fields default to `0`; `year`/`month`/`day`
75
76
  * are still required for a valid result).
77
+ * - A `yy` token needs the caller's hundred-year window,
78
+ * `options.yearWindow`: no standard says which century a two-digit
79
+ * year belongs to, and a cut-off built into a library is right today
80
+ * and wrong later. Without a valid window a `yy` pattern returns `""`.
81
+ * A pattern with no `yy` never reads the option, so a `"rolling"`
82
+ * window reads no clock for it. A two-digit year is a legacy form; a
83
+ * four-digit year is the one to ask a data source for.
76
84
  *
77
85
  * @param value The string to decode (e.g. "03/15/2024 14:30:00")
78
86
  * @param pattern The token pattern describing `value`'s shape (e.g. "MM/dd/yyyy HH:mm:ss")
79
87
  * @param locale Optional BCP 47 locale tag, or a preference list of tags, for name-based tokens (default "en-US")
88
+ * @param options The hundred-year window a `yy` token resolves in
80
89
  * @returns ISO `PlainDateTime` string, or "" on no match, malformed pattern, or invalid input
81
90
  *
82
91
  * @example parseDateTimeWithPattern("03/15/2024 14:30:00", "MM/dd/yyyy HH:mm:ss") // "2024-03-15T14:30:00"
83
92
  * @example parseDateTimeWithPattern("15-Mar-2024 02:30 PM", "dd-MMM-yyyy hh:mm a") // "2024-03-15T14:30:00"
84
- * @example parseDateTimeWithPattern("Mar 15, '24 at 14:30", "MMM d, ''yy 'at' HH:mm") // "2024-03-15T14:30:00" ('' is one literal quote)
93
+ * @example parseDateTimeWithPattern("Mar 15, '24 at 14:30", "MMM d, ''yy 'at' HH:mm", undefined, { yearWindow: 2000 }) // "2024-03-15T14:30:00" ('' is one literal quote)
94
+ * @example parseDateTimeWithPattern("99-03-15 14:30", "yy-MM-dd HH:mm", undefined, { yearWindow: 1950 }) // "1999-03-15T14:30:00" (1950–2049 window)
95
+ * @example parseDateTimeWithPattern("24-03-15 14:30", "yy-MM-dd HH:mm", undefined, { yearWindow: "rolling" }) // "2024-03-15T14:30:00" (while the current UTC year is 1975–2074)
96
+ * @example parseDateTimeWithPattern("24-03-15 14:30", "yy-MM-dd HH:mm") // "" (yy with no window)
97
+ * @example parseDateTimeWithPattern("03/15/2024 14:30:00", "MM/dd/yyyy HH:mm:ss", undefined, { yearWindow: 2000 }) // "2024-03-15T14:30:00" (yyyy ignores the window)
85
98
  * @example parseDateTimeWithPattern("02/31/2024 14:30:00", "MM/dd/yyyy HH:mm:ss") // "" (shape-valid, not a real date)
86
99
  * @example parseDateTimeWithPattern("not a date", "MM/dd/yyyy HH:mm:ss") // ""
87
100
  * @example parseDateTimeWithPattern("19 mai 2024 10:20", "d MMMM yyyy HH:mm", ["fr-FR", "en-US"]) // "2024-05-19T10:20:00"
88
101
  */
89
- export declare function parseDateTimeWithPattern(value: string, pattern: string, locale?: string | string[]): string;
102
+ export declare function parseDateTimeWithPattern(value: string, pattern: string, locale?: string | string[], options?: TwoDigitYearOptions): string;
@@ -1,5 +1,6 @@
1
+ // fallow-ignore-file code-duplication -- sibling of parseDateWithPattern; each keeps its own guard, options check and try/catch, by design
1
2
  import { Temporal } from "@js-temporal/polyfill";
2
- import { DATE_TIME_PATTERN_FIELDS, parseValueWithPattern, } from "../../internal/index.js";
3
+ import { DATE_TIME_PATTERN_FIELDS, isOptionsArgument, parseValueWithPattern, } from "../../internal/index.js";
3
4
  /**
4
5
  * Parse a datetime string against a caller-supplied token pattern (e.g.
5
6
  * `"MM/dd/yyyy HH:mm:ss"`, `"dd-MMM-yyyy h:mm a"`) and return it as an
@@ -19,7 +20,7 @@ import { DATE_TIME_PATTERN_FIELDS, parseValueWithPattern, } from "../../internal
19
20
  * | Token | Field | Width | Range | Notes |
20
21
  * |---|---|---|---|---|
21
22
  * | `yyyy` | year | 4 digits | 0000–9999 | |
22
- * | `yy` | year | 2 digits | 00–99 | Pivot: 00–68 → 2000–2068, 69–99 → 1969–1999 (fixed rule) |
23
+ * | `yy` | year | 2 digits | 00–99 | Needs `options.yearWindow`; returns `""` without it |
23
24
  * | `MM` | month | 2 digits | 01–12 | |
24
25
  * | `M` | month | 1-2 digits | 1–12 | |
25
26
  * | `MMMM` | month name (long) | locale | — | `getLocaleMonthNames(locale, "long")` |
@@ -75,26 +76,40 @@ import { DATE_TIME_PATTERN_FIELDS, parseValueWithPattern, } from "../../internal
75
76
  * - Fields absent from `pattern` default the way `Temporal.PlainDateTime.from`
76
77
  * defaults an omitted field (time fields default to `0`; `year`/`month`/`day`
77
78
  * are still required for a valid result).
79
+ * - A `yy` token needs the caller's hundred-year window,
80
+ * `options.yearWindow`: no standard says which century a two-digit
81
+ * year belongs to, and a cut-off built into a library is right today
82
+ * and wrong later. Without a valid window a `yy` pattern returns `""`.
83
+ * A pattern with no `yy` never reads the option, so a `"rolling"`
84
+ * window reads no clock for it. A two-digit year is a legacy form; a
85
+ * four-digit year is the one to ask a data source for.
78
86
  *
79
87
  * @param value The string to decode (e.g. "03/15/2024 14:30:00")
80
88
  * @param pattern The token pattern describing `value`'s shape (e.g. "MM/dd/yyyy HH:mm:ss")
81
89
  * @param locale Optional BCP 47 locale tag, or a preference list of tags, for name-based tokens (default "en-US")
90
+ * @param options The hundred-year window a `yy` token resolves in
82
91
  * @returns ISO `PlainDateTime` string, or "" on no match, malformed pattern, or invalid input
83
92
  *
84
93
  * @example parseDateTimeWithPattern("03/15/2024 14:30:00", "MM/dd/yyyy HH:mm:ss") // "2024-03-15T14:30:00"
85
94
  * @example parseDateTimeWithPattern("15-Mar-2024 02:30 PM", "dd-MMM-yyyy hh:mm a") // "2024-03-15T14:30:00"
86
- * @example parseDateTimeWithPattern("Mar 15, '24 at 14:30", "MMM d, ''yy 'at' HH:mm") // "2024-03-15T14:30:00" ('' is one literal quote)
95
+ * @example parseDateTimeWithPattern("Mar 15, '24 at 14:30", "MMM d, ''yy 'at' HH:mm", undefined, { yearWindow: 2000 }) // "2024-03-15T14:30:00" ('' is one literal quote)
96
+ * @example parseDateTimeWithPattern("99-03-15 14:30", "yy-MM-dd HH:mm", undefined, { yearWindow: 1950 }) // "1999-03-15T14:30:00" (1950–2049 window)
97
+ * @example parseDateTimeWithPattern("24-03-15 14:30", "yy-MM-dd HH:mm", undefined, { yearWindow: "rolling" }) // "2024-03-15T14:30:00" (while the current UTC year is 1975–2074)
98
+ * @example parseDateTimeWithPattern("24-03-15 14:30", "yy-MM-dd HH:mm") // "" (yy with no window)
99
+ * @example parseDateTimeWithPattern("03/15/2024 14:30:00", "MM/dd/yyyy HH:mm:ss", undefined, { yearWindow: 2000 }) // "2024-03-15T14:30:00" (yyyy ignores the window)
87
100
  * @example parseDateTimeWithPattern("02/31/2024 14:30:00", "MM/dd/yyyy HH:mm:ss") // "" (shape-valid, not a real date)
88
101
  * @example parseDateTimeWithPattern("not a date", "MM/dd/yyyy HH:mm:ss") // ""
89
102
  * @example parseDateTimeWithPattern("19 mai 2024 10:20", "d MMMM yyyy HH:mm", ["fr-FR", "en-US"]) // "2024-05-19T10:20:00"
90
103
  */
91
- export function parseDateTimeWithPattern(value, pattern, locale) {
104
+ export function parseDateTimeWithPattern(value, pattern, locale, options) {
92
105
  try {
93
106
  if (typeof value !== "string")
94
107
  return "";
95
108
  if (typeof pattern !== "string")
96
109
  return "";
97
- const fields = parseValueWithPattern(value, pattern, locale, DATE_TIME_PATTERN_FIELDS);
110
+ if (!isOptionsArgument(options))
111
+ return "";
112
+ const fields = parseValueWithPattern(value, pattern, locale, DATE_TIME_PATTERN_FIELDS, options);
98
113
  if (fields === null)
99
114
  return "";
100
115
  try {
@@ -1,3 +1,4 @@
1
+ import type { TwoDigitYearOptions } from "../../types/two-digit-year.js";
1
2
  /**
2
3
  * Parse a date string against a caller-supplied token pattern (e.g.
3
4
  * `"MM/dd/yyyy"`, `"dd-MMM-yyyy"`) and return it as an ISO `PlainDate`
@@ -17,7 +18,7 @@
17
18
  * | Token | Field | Width | Range | Notes |
18
19
  * |---|---|---|---|---|
19
20
  * | `yyyy` | year | 4 digits | 0000–9999 | |
20
- * | `yy` | year | 2 digits | 00–99 | Pivot: 00–68 → 2000–2068, 69–99 → 1969–1999 (fixed rule) |
21
+ * | `yy` | year | 2 digits | 00–99 | Needs `options.yearWindow`; returns `""` without it |
21
22
  * | `MM` | month | 2 digits | 01–12 | |
22
23
  * | `M` | month | 1-2 digits | 1–12 | |
23
24
  * | `MMMM` | month name (long) | locale | — | `getLocaleMonthNames(locale, "long")` |
@@ -56,17 +57,30 @@
56
57
  * overflow: "reject" })`, so `"02/31/2024"` against `"MM/dd/yyyy"`
57
58
  * still returns `""` — the regex only proves the shape, Temporal
58
59
  * proves the date is real.
60
+ * - A `yy` token needs the caller's hundred-year window,
61
+ * `options.yearWindow`: no standard says which century a two-digit
62
+ * year belongs to, and a cut-off built into a library is right today
63
+ * and wrong later. Without a valid window a `yy` pattern returns `""`.
64
+ * A pattern with no `yy` never reads the option, so a `"rolling"`
65
+ * window reads no clock for it. A two-digit year is a legacy form; a
66
+ * four-digit year is the one to ask a data source for.
59
67
  *
60
68
  * @param value The string to decode (e.g. "03/15/2024")
61
69
  * @param pattern The token pattern describing `value`'s shape (e.g. "MM/dd/yyyy")
62
70
  * @param locale Optional BCP 47 locale tag, or a preference list of tags, for name-based tokens (default "en-US")
71
+ * @param options The hundred-year window a `yy` token resolves in
63
72
  * @returns ISO `PlainDate` string, or "" on no match, malformed pattern, or invalid input
64
73
  *
65
74
  * @example parseDateWithPattern("03/15/2024", "MM/dd/yyyy") // "2024-03-15"
66
75
  * @example parseDateWithPattern("15-Mar-2024", "dd-MMM-yyyy") // "2024-03-15"
67
- * @example parseDateWithPattern("Mar 15, '24", "MMM d, ''yy") // "2024-03-15" ('' is one literal quote)
76
+ * @example parseDateWithPattern("Mar 15, '24", "MMM d, ''yy", undefined, { yearWindow: 2000 }) // "2024-03-15" ('' is one literal quote)
77
+ * @example parseDateWithPattern("03/15/24", "MM/dd/yy", undefined, { yearWindow: 1950 }) // "2024-03-15" (1950–2049 window)
78
+ * @example parseDateWithPattern("03/15/99", "MM/dd/yy", undefined, { yearWindow: 1950 }) // "1999-03-15"
79
+ * @example parseDateWithPattern("03/15/24", "MM/dd/yy", undefined, { yearWindow: "rolling" }) // "2024-03-15" (while the current UTC year is 1975–2074)
80
+ * @example parseDateWithPattern("03/15/24", "MM/dd/yy") // "" (yy with no window)
81
+ * @example parseDateWithPattern("03/15/2024", "MM/dd/yyyy", undefined, { yearWindow: 2000 }) // "2024-03-15" (yyyy ignores the window)
68
82
  * @example parseDateWithPattern("02/31/2024", "MM/dd/yyyy") // "" (shape-valid, not a real date)
69
83
  * @example parseDateWithPattern("14:30", "HH:mm") // "" (time token in a date-only pattern)
70
84
  * @example parseDateWithPattern("19 mai 2024", "d MMMM yyyy", ["fr-FR", "en-US"]) // "2024-05-19"
71
85
  */
72
- export declare function parseDateWithPattern(value: string, pattern: string, locale?: string | string[]): string;
86
+ export declare function parseDateWithPattern(value: string, pattern: string, locale?: string | string[], options?: TwoDigitYearOptions): string;
@@ -1,5 +1,6 @@
1
+ // fallow-ignore-file code-duplication -- sibling of parseDateTimeWithPattern; each keeps its own guard, options check and try/catch, by design
1
2
  import { Temporal } from "@js-temporal/polyfill";
2
- import { DATE_PATTERN_FIELDS, parseValueWithPattern } from "../../internal/index.js";
3
+ import { DATE_PATTERN_FIELDS, isOptionsArgument, parseValueWithPattern, } from "../../internal/index.js";
3
4
  /**
4
5
  * Parse a date string against a caller-supplied token pattern (e.g.
5
6
  * `"MM/dd/yyyy"`, `"dd-MMM-yyyy"`) and return it as an ISO `PlainDate`
@@ -19,7 +20,7 @@ import { DATE_PATTERN_FIELDS, parseValueWithPattern } from "../../internal/index
19
20
  * | Token | Field | Width | Range | Notes |
20
21
  * |---|---|---|---|---|
21
22
  * | `yyyy` | year | 4 digits | 0000–9999 | |
22
- * | `yy` | year | 2 digits | 00–99 | Pivot: 00–68 → 2000–2068, 69–99 → 1969–1999 (fixed rule) |
23
+ * | `yy` | year | 2 digits | 00–99 | Needs `options.yearWindow`; returns `""` without it |
23
24
  * | `MM` | month | 2 digits | 01–12 | |
24
25
  * | `M` | month | 1-2 digits | 1–12 | |
25
26
  * | `MMMM` | month name (long) | locale | — | `getLocaleMonthNames(locale, "long")` |
@@ -58,26 +59,41 @@ import { DATE_PATTERN_FIELDS, parseValueWithPattern } from "../../internal/index
58
59
  * overflow: "reject" })`, so `"02/31/2024"` against `"MM/dd/yyyy"`
59
60
  * still returns `""` — the regex only proves the shape, Temporal
60
61
  * proves the date is real.
62
+ * - A `yy` token needs the caller's hundred-year window,
63
+ * `options.yearWindow`: no standard says which century a two-digit
64
+ * year belongs to, and a cut-off built into a library is right today
65
+ * and wrong later. Without a valid window a `yy` pattern returns `""`.
66
+ * A pattern with no `yy` never reads the option, so a `"rolling"`
67
+ * window reads no clock for it. A two-digit year is a legacy form; a
68
+ * four-digit year is the one to ask a data source for.
61
69
  *
62
70
  * @param value The string to decode (e.g. "03/15/2024")
63
71
  * @param pattern The token pattern describing `value`'s shape (e.g. "MM/dd/yyyy")
64
72
  * @param locale Optional BCP 47 locale tag, or a preference list of tags, for name-based tokens (default "en-US")
73
+ * @param options The hundred-year window a `yy` token resolves in
65
74
  * @returns ISO `PlainDate` string, or "" on no match, malformed pattern, or invalid input
66
75
  *
67
76
  * @example parseDateWithPattern("03/15/2024", "MM/dd/yyyy") // "2024-03-15"
68
77
  * @example parseDateWithPattern("15-Mar-2024", "dd-MMM-yyyy") // "2024-03-15"
69
- * @example parseDateWithPattern("Mar 15, '24", "MMM d, ''yy") // "2024-03-15" ('' is one literal quote)
78
+ * @example parseDateWithPattern("Mar 15, '24", "MMM d, ''yy", undefined, { yearWindow: 2000 }) // "2024-03-15" ('' is one literal quote)
79
+ * @example parseDateWithPattern("03/15/24", "MM/dd/yy", undefined, { yearWindow: 1950 }) // "2024-03-15" (1950–2049 window)
80
+ * @example parseDateWithPattern("03/15/99", "MM/dd/yy", undefined, { yearWindow: 1950 }) // "1999-03-15"
81
+ * @example parseDateWithPattern("03/15/24", "MM/dd/yy", undefined, { yearWindow: "rolling" }) // "2024-03-15" (while the current UTC year is 1975–2074)
82
+ * @example parseDateWithPattern("03/15/24", "MM/dd/yy") // "" (yy with no window)
83
+ * @example parseDateWithPattern("03/15/2024", "MM/dd/yyyy", undefined, { yearWindow: 2000 }) // "2024-03-15" (yyyy ignores the window)
70
84
  * @example parseDateWithPattern("02/31/2024", "MM/dd/yyyy") // "" (shape-valid, not a real date)
71
85
  * @example parseDateWithPattern("14:30", "HH:mm") // "" (time token in a date-only pattern)
72
86
  * @example parseDateWithPattern("19 mai 2024", "d MMMM yyyy", ["fr-FR", "en-US"]) // "2024-05-19"
73
87
  */
74
- export function parseDateWithPattern(value, pattern, locale) {
88
+ export function parseDateWithPattern(value, pattern, locale, options) {
75
89
  try {
76
90
  if (typeof value !== "string")
77
91
  return "";
78
92
  if (typeof pattern !== "string")
79
93
  return "";
80
- const fields = parseValueWithPattern(value, pattern, locale, DATE_PATTERN_FIELDS);
94
+ if (!isOptionsArgument(options))
95
+ return "";
96
+ const fields = parseValueWithPattern(value, pattern, locale, DATE_PATTERN_FIELDS, options);
81
97
  if (fields === null)
82
98
  return "";
83
99
  try {
@@ -8,7 +8,7 @@
8
8
  * two-digit month, day, hour, minute and second (seconds are required), and an optional `.`
9
9
  * followed by up to 9 fraction digits.
10
10
  * - **Plain only.** SQL's offset-carrying `TIMESTAMP WITH TIME ZONE` literal is out of scope; see
11
- * `formatSql`'s JSDoc.
11
+ * `formatSqlDateTime`'s JSDoc.
12
12
  * - The fraction is written as `Temporal.PlainDateTime#toString` writes it: trailing zeros are
13
13
  * dropped (`.500` → `.5`, `.000` → none), and a `.` with no digits is dropped. `Temporal.PlainDateTime.from`
14
14
  * proves the value is a real calendar date and time.
@@ -16,11 +16,11 @@
16
16
  * @param value SQL timestamp literal (e.g. "2024-03-15 14:30:00")
17
17
  * @returns plain ISO 8601 datetime string, or "" on invalid input
18
18
  *
19
- * @example parseSql("2024-03-15 14:30:00") // "2024-03-15T14:30:00"
20
- * @example parseSql("2024-03-15 14:30:00.5") // "2024-03-15T14:30:00.5"
21
- * @example parseSql("2024-03-15 14:30") // "" (seconds are required)
22
- * @example parseSql("0000-01-01 00:00:00") // "" (year outside 0001–9999)
23
- * @example parseSql("2024-03-15T14:30:00") // "" (wrong separator)
24
- * @example parseSql("not a date") // ""
19
+ * @example parseSqlDateTime("2024-03-15 14:30:00") // "2024-03-15T14:30:00"
20
+ * @example parseSqlDateTime("2024-03-15 14:30:00.5") // "2024-03-15T14:30:00.5"
21
+ * @example parseSqlDateTime("2024-03-15 14:30") // "" (seconds are required)
22
+ * @example parseSqlDateTime("0000-01-01 00:00:00") // "" (year outside 0001–9999)
23
+ * @example parseSqlDateTime("2024-03-15T14:30:00") // "" (wrong separator)
24
+ * @example parseSqlDateTime("not a date") // ""
25
25
  */
26
- export declare function parseSql(value: string): string;
26
+ export declare function parseSqlDateTime(value: string): string;
@@ -10,7 +10,7 @@ import { sqlDateTime } from "../../regex/index.js";
10
10
  * two-digit month, day, hour, minute and second (seconds are required), and an optional `.`
11
11
  * followed by up to 9 fraction digits.
12
12
  * - **Plain only.** SQL's offset-carrying `TIMESTAMP WITH TIME ZONE` literal is out of scope; see
13
- * `formatSql`'s JSDoc.
13
+ * `formatSqlDateTime`'s JSDoc.
14
14
  * - The fraction is written as `Temporal.PlainDateTime#toString` writes it: trailing zeros are
15
15
  * dropped (`.500` → `.5`, `.000` → none), and a `.` with no digits is dropped. `Temporal.PlainDateTime.from`
16
16
  * proves the value is a real calendar date and time.
@@ -18,14 +18,14 @@ import { sqlDateTime } from "../../regex/index.js";
18
18
  * @param value SQL timestamp literal (e.g. "2024-03-15 14:30:00")
19
19
  * @returns plain ISO 8601 datetime string, or "" on invalid input
20
20
  *
21
- * @example parseSql("2024-03-15 14:30:00") // "2024-03-15T14:30:00"
22
- * @example parseSql("2024-03-15 14:30:00.5") // "2024-03-15T14:30:00.5"
23
- * @example parseSql("2024-03-15 14:30") // "" (seconds are required)
24
- * @example parseSql("0000-01-01 00:00:00") // "" (year outside 0001–9999)
25
- * @example parseSql("2024-03-15T14:30:00") // "" (wrong separator)
26
- * @example parseSql("not a date") // ""
21
+ * @example parseSqlDateTime("2024-03-15 14:30:00") // "2024-03-15T14:30:00"
22
+ * @example parseSqlDateTime("2024-03-15 14:30:00.5") // "2024-03-15T14:30:00.5"
23
+ * @example parseSqlDateTime("2024-03-15 14:30") // "" (seconds are required)
24
+ * @example parseSqlDateTime("0000-01-01 00:00:00") // "" (year outside 0001–9999)
25
+ * @example parseSqlDateTime("2024-03-15T14:30:00") // "" (wrong separator)
26
+ * @example parseSqlDateTime("not a date") // ""
27
27
  */
28
- export function parseSql(value) {
28
+ export function parseSqlDateTime(value) {
29
29
  if (typeof value !== "string")
30
30
  return "";
31
31
  if (!sqlDateTime.test(value))