chrono-node 2.6.2 → 2.6.4

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 (372) hide show
  1. package/README.md +56 -4
  2. package/dist/cjs/calculation/mergingCalculation.js +2 -2
  3. package/dist/cjs/chrono.d.ts +3 -1
  4. package/dist/cjs/chrono.js +10 -4
  5. package/dist/cjs/chrono.js.map +1 -1
  6. package/dist/cjs/common/calculation/weekdays.d.ts +1 -1
  7. package/dist/cjs/common/calculation/weekdays.js +7 -7
  8. package/dist/cjs/common/casualReferences.js +7 -7
  9. package/dist/cjs/common/parsers/AbstractParserWithWordBoundary.d.ts +1 -1
  10. package/dist/cjs/common/parsers/AbstractTimeExpressionParser.js +16 -16
  11. package/dist/cjs/common/refiners/AbstractMergeDateRangeRefiner.js +15 -7
  12. package/dist/cjs/common/refiners/AbstractMergeDateRangeRefiner.js.map +1 -1
  13. package/dist/cjs/common/refiners/ExtractTimezoneAbbrRefiner.d.ts +3 -4
  14. package/dist/cjs/common/refiners/ExtractTimezoneAbbrRefiner.js +6 -196
  15. package/dist/cjs/common/refiners/ExtractTimezoneAbbrRefiner.js.map +1 -1
  16. package/dist/cjs/common/refiners/ForwardDateRefiner.js +14 -14
  17. package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
  18. package/dist/cjs/configurations.js +1 -1
  19. package/dist/cjs/configurations.js.map +1 -1
  20. package/dist/cjs/index.d.ts +7 -41
  21. package/dist/cjs/index.js +8 -16
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/locales/de/index.d.ts +5 -2
  24. package/dist/cjs/locales/de/index.js +7 -1
  25. package/dist/cjs/locales/de/index.js.map +1 -1
  26. package/dist/cjs/locales/de/parsers/DECasualTimeParser.js +8 -8
  27. package/dist/cjs/locales/de/parsers/DESpecificTimeExpressionParser.js +9 -9
  28. package/dist/cjs/locales/en/configuration.d.ts +5 -0
  29. package/dist/cjs/locales/en/configuration.js +58 -0
  30. package/dist/cjs/locales/en/configuration.js.map +1 -0
  31. package/dist/cjs/locales/en/constants.d.ts +5 -1
  32. package/dist/cjs/locales/en/constants.js +5 -18
  33. package/dist/cjs/locales/en/constants.js.map +1 -1
  34. package/dist/cjs/locales/en/index.d.ts +5 -4
  35. package/dist/cjs/locales/en/index.js +12 -51
  36. package/dist/cjs/locales/en/index.js.map +1 -1
  37. package/dist/cjs/locales/en/parsers/ENMonthNameMiddleEndianParser.d.ts +1 -1
  38. package/dist/cjs/locales/en/parsers/ENMonthNameParser.d.ts +1 -1
  39. package/dist/cjs/locales/en/parsers/ENTimeExpressionParser.js +5 -5
  40. package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js +2 -2
  41. package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
  42. package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.d.ts +2 -0
  43. package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +6 -1
  44. package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
  45. package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js +1 -1
  46. package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
  47. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.d.ts +2 -0
  48. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js +10 -1
  49. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  50. package/dist/cjs/locales/es/index.d.ts +5 -2
  51. package/dist/cjs/locales/es/index.js +7 -1
  52. package/dist/cjs/locales/es/index.js.map +1 -1
  53. package/dist/cjs/locales/es/parsers/ESCasualTimeParser.js +5 -5
  54. package/dist/cjs/locales/fr/index.d.ts +5 -2
  55. package/dist/cjs/locales/fr/index.js +7 -1
  56. package/dist/cjs/locales/fr/index.js.map +1 -1
  57. package/dist/cjs/locales/fr/parsers/FRCasualDateParser.js +2 -2
  58. package/dist/cjs/locales/fr/parsers/FRCasualTimeParser.js +6 -6
  59. package/dist/cjs/locales/fr/parsers/FRSpecificTimeExpressionParser.js +6 -6
  60. package/dist/cjs/locales/ja/index.d.ts +5 -2
  61. package/dist/cjs/locales/ja/index.js +7 -1
  62. package/dist/cjs/locales/ja/index.js.map +1 -1
  63. package/dist/cjs/locales/ja/parsers/JPCasualDateParser.js +27 -5
  64. package/dist/cjs/locales/ja/parsers/JPCasualDateParser.js.map +1 -1
  65. package/dist/cjs/locales/nl/index.d.ts +5 -2
  66. package/dist/cjs/locales/nl/index.js +7 -1
  67. package/dist/cjs/locales/nl/index.js.map +1 -1
  68. package/dist/cjs/locales/nl/parsers/NLCasualDateTimeParser.js +5 -5
  69. package/dist/cjs/locales/nl/parsers/NLCasualTimeParser.js +5 -5
  70. package/dist/cjs/locales/nl/parsers/NLMonthNameMiddleEndianParser.d.ts +1 -1
  71. package/dist/cjs/locales/pt/index.d.ts +5 -2
  72. package/dist/cjs/locales/pt/index.js +7 -1
  73. package/dist/cjs/locales/pt/index.js.map +1 -1
  74. package/dist/cjs/locales/pt/parsers/PTCasualTimeParser.js +5 -5
  75. package/dist/cjs/locales/ru/constants.js +4 -1
  76. package/dist/cjs/locales/ru/constants.js.map +1 -1
  77. package/dist/cjs/locales/ru/index.d.ts +5 -2
  78. package/dist/cjs/locales/ru/index.js +7 -1
  79. package/dist/cjs/locales/ru/index.js.map +1 -1
  80. package/dist/cjs/locales/ru/parsers/RUMonthNameParser.d.ts +1 -1
  81. package/dist/cjs/locales/ru/parsers/RUTimeExpressionParser.js +5 -5
  82. package/dist/cjs/locales/uk/constants.d.ts +33 -0
  83. package/dist/cjs/locales/uk/constants.js +301 -0
  84. package/dist/cjs/locales/uk/constants.js.map +1 -0
  85. package/dist/cjs/locales/uk/index.d.ts +11 -0
  86. package/dist/cjs/locales/uk/index.js +64 -0
  87. package/dist/cjs/locales/uk/index.js.map +1 -0
  88. package/dist/cjs/locales/uk/parsers/UKCasualDateParser.d.ts +8 -0
  89. package/dist/cjs/locales/uk/parsers/UKCasualDateParser.js +56 -0
  90. package/dist/cjs/locales/uk/parsers/UKCasualDateParser.js.map +1 -0
  91. package/dist/cjs/locales/uk/parsers/UKCasualTimeParser.d.ts +7 -0
  92. package/dist/cjs/locales/uk/parsers/UKCasualTimeParser.js +77 -0
  93. package/dist/cjs/locales/uk/parsers/UKCasualTimeParser.js.map +1 -0
  94. package/dist/cjs/locales/uk/parsers/UKMonthNameLittleEndianParser.d.ts +8 -0
  95. package/dist/cjs/locales/uk/parsers/UKMonthNameLittleEndianParser.js +59 -0
  96. package/dist/cjs/locales/uk/parsers/UKMonthNameLittleEndianParser.js.map +1 -0
  97. package/dist/cjs/locales/uk/parsers/UKMonthNameParser.d.ts +7 -0
  98. package/dist/cjs/locales/uk/parsers/UKMonthNameParser.js +45 -0
  99. package/dist/cjs/locales/uk/parsers/UKMonthNameParser.js.map +1 -0
  100. package/dist/cjs/locales/uk/parsers/UKRelativeDateFormatParser.d.ts +8 -0
  101. package/dist/cjs/locales/uk/parsers/UKRelativeDateFormatParser.js +66 -0
  102. package/dist/cjs/locales/uk/parsers/UKRelativeDateFormatParser.js.map +1 -0
  103. package/dist/cjs/locales/uk/parsers/UKTimeExpressionParser.d.ts +12 -0
  104. package/dist/cjs/locales/uk/parsers/UKTimeExpressionParser.js +57 -0
  105. package/dist/cjs/locales/uk/parsers/UKTimeExpressionParser.js.map +1 -0
  106. package/dist/cjs/locales/uk/parsers/UKTimeUnitAgoFormatParser.d.ts +8 -0
  107. package/dist/cjs/locales/uk/parsers/UKTimeUnitAgoFormatParser.js +22 -0
  108. package/dist/cjs/locales/uk/parsers/UKTimeUnitAgoFormatParser.js.map +1 -0
  109. package/dist/cjs/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.d.ts +8 -0
  110. package/dist/cjs/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js +29 -0
  111. package/dist/cjs/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js.map +1 -0
  112. package/dist/cjs/locales/uk/parsers/UKTimeUnitWithinFormatParser.d.ts +8 -0
  113. package/dist/cjs/locales/uk/parsers/UKTimeUnitWithinFormatParser.js +22 -0
  114. package/dist/cjs/locales/uk/parsers/UKTimeUnitWithinFormatParser.js.map +1 -0
  115. package/dist/cjs/locales/uk/parsers/UKWeekdayParser.d.ts +8 -0
  116. package/dist/cjs/locales/uk/parsers/UKWeekdayParser.js +50 -0
  117. package/dist/cjs/locales/uk/parsers/UKWeekdayParser.js.map +1 -0
  118. package/dist/cjs/locales/uk/refiners/UKMergeDateRangeRefiner.d.ts +4 -0
  119. package/dist/cjs/locales/uk/refiners/UKMergeDateRangeRefiner.js +13 -0
  120. package/dist/cjs/locales/uk/refiners/UKMergeDateRangeRefiner.js.map +1 -0
  121. package/dist/cjs/locales/uk/refiners/UKMergeDateTimeRefiner.d.ts +4 -0
  122. package/dist/cjs/locales/uk/refiners/UKMergeDateTimeRefiner.js +13 -0
  123. package/dist/cjs/locales/uk/refiners/UKMergeDateTimeRefiner.js.map +1 -0
  124. package/dist/cjs/locales/zh/hans/index.d.ts +5 -2
  125. package/dist/cjs/locales/zh/hans/index.js +8 -2
  126. package/dist/cjs/locales/zh/hans/index.js.map +1 -1
  127. package/dist/cjs/locales/zh/hans/parsers/ZHHansDateParser.d.ts +1 -1
  128. package/dist/cjs/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.d.ts +1 -1
  129. package/dist/cjs/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +1 -1
  130. package/dist/cjs/locales/zh/hant/index.d.ts +5 -2
  131. package/dist/cjs/locales/zh/hant/index.js +8 -2
  132. package/dist/cjs/locales/zh/hant/index.js.map +1 -1
  133. package/dist/cjs/locales/zh/hant/parsers/ZHHantDateParser.d.ts +1 -1
  134. package/dist/cjs/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.d.ts +1 -1
  135. package/dist/cjs/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +1 -1
  136. package/dist/cjs/results.d.ts +2 -2
  137. package/dist/cjs/results.js +3 -3
  138. package/dist/cjs/results.js.map +1 -1
  139. package/dist/cjs/timezone.d.ts +5 -194
  140. package/dist/cjs/timezone.js +80 -7
  141. package/dist/cjs/timezone.js.map +1 -1
  142. package/dist/cjs/types.d.ts +58 -0
  143. package/dist/cjs/types.js +34 -0
  144. package/dist/cjs/types.js.map +1 -0
  145. package/dist/cjs/utils/dayjs.js +3 -3
  146. package/dist/esm/calculation/mergingCalculation.js +1 -1
  147. package/dist/esm/chrono.d.ts +3 -1
  148. package/dist/esm/chrono.js +7 -4
  149. package/dist/esm/chrono.js.map +1 -1
  150. package/dist/esm/common/calculation/weekdays.d.ts +1 -1
  151. package/dist/esm/common/calculation/weekdays.js +1 -1
  152. package/dist/esm/common/casualReferences.js +1 -1
  153. package/dist/esm/common/parsers/AbstractParserWithWordBoundary.d.ts +1 -1
  154. package/dist/esm/common/parsers/AbstractTimeExpressionParser.js +1 -1
  155. package/dist/esm/common/refiners/AbstractMergeDateRangeRefiner.js +15 -7
  156. package/dist/esm/common/refiners/AbstractMergeDateRangeRefiner.js.map +1 -1
  157. package/dist/esm/common/refiners/ExtractTimezoneAbbrRefiner.d.ts +3 -4
  158. package/dist/esm/common/refiners/ExtractTimezoneAbbrRefiner.js +6 -196
  159. package/dist/esm/common/refiners/ExtractTimezoneAbbrRefiner.js.map +1 -1
  160. package/dist/esm/common/refiners/ForwardDateRefiner.js +14 -14
  161. package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
  162. package/dist/esm/configurations.js +1 -1
  163. package/dist/esm/configurations.js.map +1 -1
  164. package/dist/esm/index.d.ts +7 -41
  165. package/dist/esm/index.js +6 -17
  166. package/dist/esm/index.js.map +1 -1
  167. package/dist/esm/locales/de/index.d.ts +5 -2
  168. package/dist/esm/locales/de/index.js +4 -0
  169. package/dist/esm/locales/de/index.js.map +1 -1
  170. package/dist/esm/locales/de/parsers/DECasualTimeParser.js +1 -1
  171. package/dist/esm/locales/de/parsers/DESpecificTimeExpressionParser.js +1 -1
  172. package/dist/esm/locales/en/configuration.d.ts +5 -0
  173. package/dist/esm/locales/en/configuration.js +52 -0
  174. package/dist/esm/locales/en/configuration.js.map +1 -0
  175. package/dist/esm/locales/en/constants.d.ts +5 -1
  176. package/dist/esm/locales/en/constants.js +21 -0
  177. package/dist/esm/locales/en/constants.js.map +1 -1
  178. package/dist/esm/locales/en/index.d.ts +5 -4
  179. package/dist/esm/locales/en/index.js +9 -48
  180. package/dist/esm/locales/en/index.js.map +1 -1
  181. package/dist/esm/locales/en/parsers/ENMonthNameMiddleEndianParser.d.ts +1 -1
  182. package/dist/esm/locales/en/parsers/ENMonthNameParser.d.ts +1 -1
  183. package/dist/esm/locales/en/parsers/ENTimeExpressionParser.js +1 -1
  184. package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -3
  185. package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
  186. package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.d.ts +2 -0
  187. package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +7 -2
  188. package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
  189. package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js +2 -2
  190. package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
  191. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.d.ts +2 -0
  192. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js +11 -2
  193. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  194. package/dist/esm/locales/es/index.d.ts +5 -2
  195. package/dist/esm/locales/es/index.js +4 -0
  196. package/dist/esm/locales/es/index.js.map +1 -1
  197. package/dist/esm/locales/es/parsers/ESCasualTimeParser.js +1 -1
  198. package/dist/esm/locales/fr/index.d.ts +5 -2
  199. package/dist/esm/locales/fr/index.js +4 -0
  200. package/dist/esm/locales/fr/index.js.map +1 -1
  201. package/dist/esm/locales/fr/parsers/FRCasualDateParser.js +1 -1
  202. package/dist/esm/locales/fr/parsers/FRCasualTimeParser.js +1 -1
  203. package/dist/esm/locales/fr/parsers/FRSpecificTimeExpressionParser.js +1 -1
  204. package/dist/esm/locales/ja/index.d.ts +5 -2
  205. package/dist/esm/locales/ja/index.js +4 -0
  206. package/dist/esm/locales/ja/index.js.map +1 -1
  207. package/dist/esm/locales/ja/parsers/JPCasualDateParser.js +25 -3
  208. package/dist/esm/locales/ja/parsers/JPCasualDateParser.js.map +1 -1
  209. package/dist/esm/locales/nl/index.d.ts +5 -2
  210. package/dist/esm/locales/nl/index.js +4 -0
  211. package/dist/esm/locales/nl/index.js.map +1 -1
  212. package/dist/esm/locales/nl/parsers/NLCasualDateTimeParser.js +1 -1
  213. package/dist/esm/locales/nl/parsers/NLCasualTimeParser.js +1 -1
  214. package/dist/esm/locales/nl/parsers/NLMonthNameMiddleEndianParser.d.ts +1 -1
  215. package/dist/esm/locales/pt/index.d.ts +5 -2
  216. package/dist/esm/locales/pt/index.js +4 -0
  217. package/dist/esm/locales/pt/index.js.map +1 -1
  218. package/dist/esm/locales/pt/parsers/PTCasualTimeParser.js +1 -1
  219. package/dist/esm/locales/ru/constants.js +4 -1
  220. package/dist/esm/locales/ru/constants.js.map +1 -1
  221. package/dist/esm/locales/ru/index.d.ts +5 -2
  222. package/dist/esm/locales/ru/index.js +4 -0
  223. package/dist/esm/locales/ru/index.js.map +1 -1
  224. package/dist/esm/locales/ru/parsers/RUMonthNameParser.d.ts +1 -1
  225. package/dist/esm/locales/ru/parsers/RUTimeExpressionParser.js +1 -1
  226. package/dist/esm/locales/uk/constants.d.ts +33 -0
  227. package/dist/esm/locales/uk/constants.js +324 -0
  228. package/dist/esm/locales/uk/constants.js.map +1 -0
  229. package/dist/esm/locales/uk/index.d.ts +11 -0
  230. package/dist/esm/locales/uk/index.js +52 -0
  231. package/dist/esm/locales/uk/index.js.map +1 -0
  232. package/dist/esm/locales/uk/parsers/UKCasualDateParser.d.ts +8 -0
  233. package/dist/esm/locales/uk/parsers/UKCasualDateParser.js +34 -0
  234. package/dist/esm/locales/uk/parsers/UKCasualDateParser.js.map +1 -0
  235. package/dist/esm/locales/uk/parsers/UKCasualTimeParser.d.ts +7 -0
  236. package/dist/esm/locales/uk/parsers/UKCasualTimeParser.js +52 -0
  237. package/dist/esm/locales/uk/parsers/UKCasualTimeParser.js.map +1 -0
  238. package/dist/esm/locales/uk/parsers/UKMonthNameLittleEndianParser.d.ts +8 -0
  239. package/dist/esm/locales/uk/parsers/UKMonthNameLittleEndianParser.js +56 -0
  240. package/dist/esm/locales/uk/parsers/UKMonthNameLittleEndianParser.js.map +1 -0
  241. package/dist/esm/locales/uk/parsers/UKMonthNameParser.d.ts +7 -0
  242. package/dist/esm/locales/uk/parsers/UKMonthNameParser.js +42 -0
  243. package/dist/esm/locales/uk/parsers/UKMonthNameParser.js.map +1 -0
  244. package/dist/esm/locales/uk/parsers/UKRelativeDateFormatParser.d.ts +8 -0
  245. package/dist/esm/locales/uk/parsers/UKRelativeDateFormatParser.js +60 -0
  246. package/dist/esm/locales/uk/parsers/UKRelativeDateFormatParser.js.map +1 -0
  247. package/dist/esm/locales/uk/parsers/UKTimeExpressionParser.d.ts +12 -0
  248. package/dist/esm/locales/uk/parsers/UKTimeExpressionParser.js +54 -0
  249. package/dist/esm/locales/uk/parsers/UKTimeExpressionParser.js.map +1 -0
  250. package/dist/esm/locales/uk/parsers/UKTimeUnitAgoFormatParser.d.ts +8 -0
  251. package/dist/esm/locales/uk/parsers/UKTimeUnitAgoFormatParser.js +19 -0
  252. package/dist/esm/locales/uk/parsers/UKTimeUnitAgoFormatParser.js.map +1 -0
  253. package/dist/esm/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.d.ts +8 -0
  254. package/dist/esm/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js +26 -0
  255. package/dist/esm/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.js.map +1 -0
  256. package/dist/esm/locales/uk/parsers/UKTimeUnitWithinFormatParser.d.ts +8 -0
  257. package/dist/esm/locales/uk/parsers/UKTimeUnitWithinFormatParser.js +19 -0
  258. package/dist/esm/locales/uk/parsers/UKTimeUnitWithinFormatParser.js.map +1 -0
  259. package/dist/esm/locales/uk/parsers/UKWeekdayParser.d.ts +8 -0
  260. package/dist/esm/locales/uk/parsers/UKWeekdayParser.js +47 -0
  261. package/dist/esm/locales/uk/parsers/UKWeekdayParser.js.map +1 -0
  262. package/dist/esm/locales/uk/refiners/UKMergeDateRangeRefiner.d.ts +4 -0
  263. package/dist/esm/locales/uk/refiners/UKMergeDateRangeRefiner.js +7 -0
  264. package/dist/esm/locales/uk/refiners/UKMergeDateRangeRefiner.js.map +1 -0
  265. package/dist/esm/locales/uk/refiners/UKMergeDateTimeRefiner.d.ts +4 -0
  266. package/dist/esm/locales/uk/refiners/UKMergeDateTimeRefiner.js +7 -0
  267. package/dist/esm/locales/uk/refiners/UKMergeDateTimeRefiner.js.map +1 -0
  268. package/dist/esm/locales/zh/hans/index.d.ts +5 -2
  269. package/dist/esm/locales/zh/hans/index.js +5 -1
  270. package/dist/esm/locales/zh/hans/index.js.map +1 -1
  271. package/dist/esm/locales/zh/hans/parsers/ZHHansDateParser.d.ts +1 -1
  272. package/dist/esm/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.d.ts +1 -1
  273. package/dist/esm/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +1 -1
  274. package/dist/esm/locales/zh/hant/index.d.ts +5 -2
  275. package/dist/esm/locales/zh/hant/index.js +5 -1
  276. package/dist/esm/locales/zh/hant/index.js.map +1 -1
  277. package/dist/esm/locales/zh/hant/parsers/ZHHantDateParser.d.ts +1 -1
  278. package/dist/esm/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.d.ts +1 -1
  279. package/dist/esm/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +1 -1
  280. package/dist/esm/results.d.ts +2 -2
  281. package/dist/esm/results.js +3 -3
  282. package/dist/esm/results.js.map +1 -1
  283. package/dist/esm/timezone.d.ts +5 -194
  284. package/dist/esm/timezone.js +74 -6
  285. package/dist/esm/timezone.js.map +1 -1
  286. package/dist/esm/types.d.ts +58 -0
  287. package/dist/esm/types.js +31 -0
  288. package/dist/esm/types.js.map +1 -0
  289. package/dist/esm/utils/dayjs.js +1 -1
  290. package/package.json +12 -5
  291. package/src/calculation/mergingCalculation.ts +1 -1
  292. package/src/chrono.ts +14 -8
  293. package/src/common/calculation/weekdays.ts +1 -1
  294. package/src/common/casualReferences.ts +1 -1
  295. package/src/common/parsers/AbstractParserWithWordBoundary.ts +1 -1
  296. package/src/common/parsers/AbstractTimeExpressionParser.ts +1 -1
  297. package/src/common/parsers/ISOFormatParser.ts +1 -1
  298. package/src/common/refiners/AbstractMergeDateRangeRefiner.ts +13 -8
  299. package/src/common/refiners/ExtractTimezoneAbbrRefiner.ts +7 -201
  300. package/src/common/refiners/ForwardDateRefiner.ts +18 -16
  301. package/src/configurations.ts +3 -1
  302. package/src/index.ts +6 -107
  303. package/src/locales/de/index.ts +6 -2
  304. package/src/locales/de/parsers/DECasualTimeParser.ts +1 -1
  305. package/src/locales/de/parsers/DESpecificTimeExpressionParser.ts +1 -1
  306. package/src/locales/en/configuration.ts +70 -0
  307. package/src/locales/en/constants.ts +31 -1
  308. package/src/locales/en/index.ts +11 -65
  309. package/src/locales/en/parsers/ENTimeExpressionParser.ts +1 -1
  310. package/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +3 -3
  311. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +10 -2
  312. package/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +5 -2
  313. package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +16 -3
  314. package/src/locales/es/index.ts +6 -2
  315. package/src/locales/es/parsers/ESCasualTimeParser.ts +1 -1
  316. package/src/locales/fr/index.ts +6 -2
  317. package/src/locales/fr/parsers/FRCasualDateParser.ts +1 -1
  318. package/src/locales/fr/parsers/FRCasualTimeParser.ts +1 -1
  319. package/src/locales/fr/parsers/FRSpecificTimeExpressionParser.ts +1 -1
  320. package/src/locales/ja/index.ts +6 -2
  321. package/src/locales/ja/parsers/JPCasualDateParser.ts +26 -3
  322. package/src/locales/nl/index.ts +6 -2
  323. package/src/locales/nl/parsers/NLCasualDateTimeParser.ts +1 -1
  324. package/src/locales/nl/parsers/NLCasualTimeParser.ts +1 -1
  325. package/src/locales/pt/index.ts +6 -2
  326. package/src/locales/pt/parsers/PTCasualTimeParser.ts +1 -1
  327. package/src/locales/ru/constants.ts +4 -1
  328. package/src/locales/ru/index.ts +6 -2
  329. package/src/locales/ru/parsers/RUTimeExpressionParser.ts +1 -1
  330. package/src/locales/uk/constants.ts +349 -0
  331. package/src/locales/uk/index.ts +90 -0
  332. package/src/locales/uk/parsers/UKCasualDateParser.ts +50 -0
  333. package/src/locales/uk/parsers/UKCasualTimeParser.ts +59 -0
  334. package/src/locales/uk/parsers/UKMonthNameLittleEndianParser.ts +72 -0
  335. package/src/locales/uk/parsers/UKMonthNameParser.ts +61 -0
  336. package/src/locales/uk/parsers/UKRelativeDateFormatParser.ts +85 -0
  337. package/src/locales/uk/parsers/UKTimeExpressionParser.ts +64 -0
  338. package/src/locales/uk/parsers/UKTimeUnitAgoFormatParser.ts +24 -0
  339. package/src/locales/uk/parsers/UKTimeUnitCasualRelativeFormatParser.ts +34 -0
  340. package/src/locales/uk/parsers/UKTimeUnitWithinFormatParser.ts +27 -0
  341. package/src/locales/uk/parsers/UKWeekdayParser.ts +59 -0
  342. package/src/locales/uk/refiners/UKMergeDateRangeRefiner.ts +13 -0
  343. package/src/locales/uk/refiners/UKMergeDateTimeRefiner.ts +13 -0
  344. package/src/locales/zh/hans/index.ts +6 -2
  345. package/src/locales/zh/hant/index.ts +6 -2
  346. package/src/results.ts +4 -4
  347. package/src/timezone.ts +124 -7
  348. package/src/types.ts +150 -0
  349. package/src/utils/dayjs.ts +1 -1
  350. package/test/de/de_time_exp.test.ts +7 -7
  351. package/test/debugging.test.ts +17 -0
  352. package/test/en/en_month.test.ts +70 -0
  353. package/test/en/en_month_name_little_endian.test.ts +12 -0
  354. package/test/en/en_time_units_ago.test.ts +12 -0
  355. package/test/en/en_time_units_casual_relative.test.ts +18 -0
  356. package/test/en/en_time_units_later.test.ts +13 -10
  357. package/test/en/en_time_units_within.test.ts +12 -1
  358. package/test/en/en_timezone_exp.test.ts +142 -0
  359. package/test/en/en_weekday.test.ts +26 -0
  360. package/test/en/negative_cases.test.ts +2 -0
  361. package/test/fr/fr_time_exp.test.ts +2 -2
  362. package/test/ja/ja_casual.test.ts +50 -13
  363. package/test/system.test.ts +23 -1
  364. package/test/uk/uk_casual.test.ts +153 -0
  365. package/test/uk/uk_month.test.ts +70 -0
  366. package/test/uk/uk_month_name_little_endian.test.ts +148 -0
  367. package/test/uk/uk_relative.test.ts +74 -0
  368. package/test/uk/uk_time_exp.test.ts +111 -0
  369. package/test/uk/uk_time_units_ago.test.ts +48 -0
  370. package/test/uk/uk_time_units_casual_relative.test.ts +112 -0
  371. package/test/uk/uk_time_units_within.test.ts +16 -0
  372. package/test/uk/uk_weekday.test.ts +52 -0
@@ -1,4 +1,4 @@
1
- import { Meridiem } from "../index.js";
1
+ import { Meridiem } from "../types.js";
2
2
  export function assignTheNextDay(component, targetDayJs) {
3
3
  targetDayJs = targetDayJs.add(1, "day");
4
4
  assignSimilarDate(component, targetDayJs);
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "preset": "ts-jest"
16
16
  },
17
17
  "license": "MIT",
18
- "version": "2.6.2",
18
+ "version": "2.6.4",
19
19
  "directories": {
20
20
  "source": "./src",
21
21
  "test": "./test"
@@ -26,6 +26,14 @@
26
26
  ".": {
27
27
  "require": "./dist/cjs/index.js",
28
28
  "import": "./dist/esm/index.js"
29
+ },
30
+ "./*": {
31
+ "require": "./dist/cjs/locales/*/index.js",
32
+ "import": "./dist/esm/locales/*/index.js"
33
+ },
34
+ "./*/*": {
35
+ "require": "./dist/cjs/locales/*/*/index.js",
36
+ "import": "./dist/esm/locales/*/*/index.js"
29
37
  }
30
38
  },
31
39
  "engines": {
@@ -43,12 +51,12 @@
43
51
  "husky": "^4.2.5",
44
52
  "jest": "^26.1.0",
45
53
  "prettier": "^2.0.5",
54
+ "rimraf": "^3.0.2",
46
55
  "run-script-os": "^1.1.6",
47
56
  "ts-jest": "^26.1.1",
48
57
  "tsc-esm-fix": "^2.12.4",
49
58
  "typedoc": "^0.20.36",
50
- "typescript": "~4.2.4",
51
- "rimraf": "^3.0.2"
59
+ "typescript": "~4.2.4"
52
60
  },
53
61
  "husky": {
54
62
  "hooks": {
@@ -71,8 +79,7 @@
71
79
  "prettier:test": "prettier --write test --loglevel=warn",
72
80
  "watch": "jest --watch",
73
81
  "test": "jest --coverage",
74
- "test:silent": "jest --silent",
75
- "coveralls": "npm run test && cat coverage/lcov.info | coveralls"
82
+ "test:silent": "jest --silent"
76
83
  },
77
84
  "dependencies": {
78
85
  "dayjs": "^1.10.0"
@@ -1,5 +1,5 @@
1
1
  import { ParsingComponents, ParsingResult } from "../results";
2
- import { Meridiem } from "../index";
2
+ import { Meridiem } from "../types";
3
3
  import { assignSimilarDate, implySimilarDate } from "../utils/dayjs";
4
4
 
5
5
  export function mergeDateTimeResult(dateResult: ParsingResult, timeResult: ParsingResult): ParsingResult {
package/src/chrono.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ReferenceWithTimezone, ParsingComponents, ParsingResult } from "./results";
2
- import { Component, ParsedResult, ParsingOption, ParsingReference } from "./index";
2
+ import { Component, ParsedResult, ParsingOption, ParsingReference } from "./types";
3
3
  import { AsyncDebugBlock, DebugHandler } from "./debugging";
4
- import { createCasualConfiguration } from "./locales/en";
4
+ import ENDefaultConfiguration from "./locales/en/configuration";
5
5
 
6
6
  /**
7
7
  * Chrono configuration.
@@ -13,7 +13,7 @@ export interface Configuration {
13
13
  }
14
14
 
15
15
  /**
16
- * A abstraction for Chrono *Parser*.
16
+ * An abstraction for Chrono *Parser*.
17
17
  *
18
18
  * Each parser should recognize and handle a certain date format.
19
19
  * Chrono uses multiple parses (and refiners) together for parsing the input.
@@ -48,8 +48,10 @@ export class Chrono {
48
48
  parsers: Array<Parser>;
49
49
  refiners: Array<Refiner>;
50
50
 
51
+ defaultConfig = new ENDefaultConfiguration();
52
+
51
53
  constructor(configuration?: Configuration) {
52
- configuration = configuration || createCasualConfiguration();
54
+ configuration = configuration || this.defaultConfig.createCasualConfiguration();
53
55
  this.parsers = [...configuration.parsers];
54
56
  this.refiners = [...configuration.refiners];
55
57
  }
@@ -108,7 +110,7 @@ export class Chrono {
108
110
 
109
111
  const result = parser.extract(context, match);
110
112
  if (!result) {
111
- // If fail, move on by 1
113
+ // If fails, move on by 1
112
114
  remainingText = originalText.substring(match.index + 1);
113
115
  match = pattern.exec(remainingText);
114
116
  continue;
@@ -124,10 +126,14 @@ export class Chrono {
124
126
  parsedResult = context.createParsingResult(match.index, match[0], result);
125
127
  }
126
128
 
127
- context.debug(() => console.log(`${parser.constructor.name} extracted result ${parsedResult}`));
129
+ const parsedIndex = parsedResult.index;
130
+ const parsedText = parsedResult.text;
131
+ context.debug(() =>
132
+ console.log(`${parser.constructor.name} extracted (at index=${parsedIndex}) '${parsedText}'`)
133
+ );
128
134
 
129
135
  results.push(parsedResult);
130
- remainingText = originalText.substring(index + parsedResult.text.length);
136
+ remainingText = originalText.substring(parsedIndex + parsedText.length);
131
137
  match = pattern.exec(remainingText);
132
138
  }
133
139
 
@@ -141,7 +147,7 @@ export class ParsingContext implements DebugHandler {
141
147
  readonly reference: ReferenceWithTimezone;
142
148
 
143
149
  /**
144
- * @deprecated. Use reference.instant instead.
150
+ * @deprecated. Use `reference.instant` instead.
145
151
  */
146
152
  readonly refDate: Date;
147
153
 
@@ -1,4 +1,4 @@
1
- import { Weekday } from "../../index";
1
+ import { Weekday } from "../../types";
2
2
  import { ParsingComponents, ReferenceWithTimezone } from "../../results";
3
3
  import { addImpliedTimeUnits } from "../../utils/timeunits";
4
4
 
@@ -7,7 +7,7 @@ import {
7
7
  implySimilarTime,
8
8
  implyTheNextDay,
9
9
  } from "../utils/dayjs";
10
- import { Meridiem } from "../index";
10
+ import { Meridiem } from "../types";
11
11
 
12
12
  export function now(reference: ReferenceWithTimezone): ParsingComponents {
13
13
  const targetDate = dayjs(reference.instant);
@@ -1,6 +1,6 @@
1
1
  import { Parser, ParsingContext } from "../../chrono";
2
2
  import { ParsingComponents, ParsingResult } from "../../results";
3
- import { Component } from "../../index";
3
+ import { Component } from "../../types";
4
4
 
5
5
  /**
6
6
  *
@@ -1,6 +1,6 @@
1
1
  import { Parser, ParsingContext } from "../../chrono";
2
2
  import { ParsingComponents, ParsingResult } from "../../results";
3
- import { Meridiem } from "../../index";
3
+ import { Meridiem } from "../../types";
4
4
 
5
5
  // prettier-ignore
6
6
  function primaryTimePattern(leftBoundary: string, primaryPrefix: string, primarySuffix: string, flags: string) {
@@ -1,5 +1,5 @@
1
1
  import { ParsingContext } from "../../chrono";
2
- import { Component } from "../../index";
2
+ import { Component } from "../../types";
3
3
  import { AbstractParserWithWordBoundaryChecking } from "./AbstractParserWithWordBoundary";
4
4
 
5
5
  // ISO 8601
@@ -16,13 +16,13 @@ export default abstract class AbstractMergeDateRangeRefiner extends MergingRefin
16
16
  if (!fromResult.start.isOnlyWeekdayComponent() && !toResult.start.isOnlyWeekdayComponent()) {
17
17
  toResult.start.getCertainComponents().forEach((key) => {
18
18
  if (!fromResult.start.isCertain(key)) {
19
- fromResult.start.assign(key, toResult.start.get(key));
19
+ fromResult.start.imply(key, toResult.start.get(key));
20
20
  }
21
21
  });
22
22
 
23
23
  fromResult.start.getCertainComponents().forEach((key) => {
24
24
  if (!toResult.start.isCertain(key)) {
25
- toResult.start.assign(key, fromResult.start.get(key));
25
+ toResult.start.imply(key, fromResult.start.get(key));
26
26
  }
27
27
  });
28
28
  }
@@ -30,17 +30,22 @@ export default abstract class AbstractMergeDateRangeRefiner extends MergingRefin
30
30
  if (fromResult.start.date().getTime() > toResult.start.date().getTime()) {
31
31
  let fromMoment = fromResult.start.dayjs();
32
32
  let toMoment = toResult.start.dayjs();
33
-
34
- if (fromResult.start.isOnlyWeekdayComponent() && fromMoment.add(-7, "days").isBefore(toMoment)) {
33
+ if (toResult.start.isOnlyWeekdayComponent() && toMoment.add(7, "days").isAfter(fromMoment)) {
34
+ toMoment = toMoment.add(7, "days");
35
+ toResult.start.imply("day", toMoment.date());
36
+ toResult.start.imply("month", toMoment.month() + 1);
37
+ toResult.start.imply("year", toMoment.year());
38
+ } else if (fromResult.start.isOnlyWeekdayComponent() && fromMoment.add(-7, "days").isBefore(toMoment)) {
35
39
  fromMoment = fromMoment.add(-7, "days");
36
40
  fromResult.start.imply("day", fromMoment.date());
37
41
  fromResult.start.imply("month", fromMoment.month() + 1);
38
42
  fromResult.start.imply("year", fromMoment.year());
39
- } else if (toResult.start.isOnlyWeekdayComponent() && toMoment.add(7, "days").isAfter(fromMoment)) {
40
- toMoment = toMoment.add(7, "days");
41
- toResult.start.imply("day", toMoment.date());
42
- toResult.start.imply("month", toMoment.month() + 1);
43
+ } else if (toResult.start.isDateWithUnknownYear() && toMoment.add(1, "years").isAfter(fromMoment)) {
44
+ toMoment = toMoment.add(1, "years");
43
45
  toResult.start.imply("year", toMoment.year());
46
+ } else if (fromResult.start.isDateWithUnknownYear() && fromMoment.add(-1, "years").isBefore(toMoment)) {
47
+ fromMoment = fromMoment.add(-1, "years");
48
+ fromResult.start.imply("year", fromMoment.year());
44
49
  } else {
45
50
  [toResult, fromResult] = [fromResult, toResult];
46
51
  }
@@ -1,208 +1,13 @@
1
1
  // Map ABBR -> Offset in minute
2
2
  import { ParsingContext, Refiner } from "../../chrono";
3
+ import { TimezoneAbbrMap } from "../../types";
3
4
  import { ParsingResult } from "../../results";
5
+ import { toTimezoneOffset } from "../../timezone";
4
6
 
5
7
  const TIMEZONE_NAME_PATTERN = new RegExp("^\\s*,?\\s*\\(?([A-Z]{2,4})\\)?(?=\\W|$)", "i");
6
- const DEFAULT_TIMEZONE_ABBR_MAP = {
7
- ACDT: 630,
8
- ACST: 570,
9
- ADT: -180,
10
- AEDT: 660,
11
- AEST: 600,
12
- AFT: 270,
13
- AKDT: -480,
14
- AKST: -540,
15
- ALMT: 360,
16
- AMST: -180,
17
- AMT: -240,
18
- ANAST: 720,
19
- ANAT: 720,
20
- AQTT: 300,
21
- ART: -180,
22
- AST: -240,
23
- AWDT: 540,
24
- AWST: 480,
25
- AZOST: 0,
26
- AZOT: -60,
27
- AZST: 300,
28
- AZT: 240,
29
- BNT: 480,
30
- BOT: -240,
31
- BRST: -120,
32
- BRT: -180,
33
- BST: 60,
34
- BTT: 360,
35
- CAST: 480,
36
- CAT: 120,
37
- CCT: 390,
38
- CDT: -300,
39
- CEST: 120,
40
- CET: 60,
41
- CHADT: 825,
42
- CHAST: 765,
43
- CKT: -600,
44
- CLST: -180,
45
- CLT: -240,
46
- COT: -300,
47
- CST: -360,
48
- CVT: -60,
49
- CXT: 420,
50
- ChST: 600,
51
- DAVT: 420,
52
- EASST: -300,
53
- EAST: -360,
54
- EAT: 180,
55
- ECT: -300,
56
- EDT: -240,
57
- EEST: 180,
58
- EET: 120,
59
- EGST: 0,
60
- EGT: -60,
61
- EST: -300,
62
- ET: -300,
63
- FJST: 780,
64
- FJT: 720,
65
- FKST: -180,
66
- FKT: -240,
67
- FNT: -120,
68
- GALT: -360,
69
- GAMT: -540,
70
- GET: 240,
71
- GFT: -180,
72
- GILT: 720,
73
- GMT: 0,
74
- GST: 240,
75
- GYT: -240,
76
- HAA: -180,
77
- HAC: -300,
78
- HADT: -540,
79
- HAE: -240,
80
- HAP: -420,
81
- HAR: -360,
82
- HAST: -600,
83
- HAT: -90,
84
- HAY: -480,
85
- HKT: 480,
86
- HLV: -210,
87
- HNA: -240,
88
- HNC: -360,
89
- HNE: -300,
90
- HNP: -480,
91
- HNR: -420,
92
- HNT: -150,
93
- HNY: -540,
94
- HOVT: 420,
95
- ICT: 420,
96
- IDT: 180,
97
- IOT: 360,
98
- IRDT: 270,
99
- IRKST: 540,
100
- IRKT: 540,
101
- IRST: 210,
102
- IST: 330,
103
- JST: 540,
104
- KGT: 360,
105
- KRAST: 480,
106
- KRAT: 480,
107
- KST: 540,
108
- KUYT: 240,
109
- LHDT: 660,
110
- LHST: 630,
111
- LINT: 840,
112
- MAGST: 720,
113
- MAGT: 720,
114
- MART: -510,
115
- MAWT: 300,
116
- MDT: -360,
117
- MESZ: 120,
118
- MEZ: 60,
119
- MHT: 720,
120
- MMT: 390,
121
- MSD: 240,
122
- MSK: 240,
123
- MST: -420,
124
- MUT: 240,
125
- MVT: 300,
126
- MYT: 480,
127
- NCT: 660,
128
- NDT: -90,
129
- NFT: 690,
130
- NOVST: 420,
131
- NOVT: 360,
132
- NPT: 345,
133
- NST: -150,
134
- NUT: -660,
135
- NZDT: 780,
136
- NZST: 720,
137
- OMSST: 420,
138
- OMST: 420,
139
- PDT: -420,
140
- PET: -300,
141
- PETST: 720,
142
- PETT: 720,
143
- PGT: 600,
144
- PHOT: 780,
145
- PHT: 480,
146
- PKT: 300,
147
- PMDT: -120,
148
- PMST: -180,
149
- PONT: 660,
150
- PST: -480,
151
- PT: -480,
152
- PWT: 540,
153
- PYST: -180,
154
- PYT: -240,
155
- RET: 240,
156
- SAMT: 240,
157
- SAST: 120,
158
- SBT: 660,
159
- SCT: 240,
160
- SGT: 480,
161
- SRT: -180,
162
- SST: -660,
163
- TAHT: -600,
164
- TFT: 300,
165
- TJT: 300,
166
- TKT: 780,
167
- TLT: 540,
168
- TMT: 300,
169
- TVT: 720,
170
- ULAT: 480,
171
- UTC: 0,
172
- UYST: -120,
173
- UYT: -180,
174
- UZT: 300,
175
- VET: -210,
176
- VLAST: 660,
177
- VLAT: 660,
178
- VUT: 660,
179
- WAST: 120,
180
- WAT: 60,
181
- WEST: 60,
182
- WESZ: 60,
183
- WET: 0,
184
- WEZ: 0,
185
- WFT: 720,
186
- WGST: -120,
187
- WGT: -180,
188
- WIB: 420,
189
- WIT: 540,
190
- WITA: 480,
191
- WST: 780,
192
- WT: 0,
193
- YAKST: 600,
194
- YAKT: 600,
195
- YAPT: 600,
196
- YEKST: 360,
197
- YEKT: 360,
198
- };
199
8
 
200
9
  export default class ExtractTimezoneAbbrRefiner implements Refiner {
201
- private readonly timezone: { string: number };
202
-
203
- constructor(timezoneOverrides?: { string: number }) {
204
- this.timezone = { ...DEFAULT_TIMEZONE_ABBR_MAP, ...timezoneOverrides };
205
- }
10
+ constructor(private readonly timezoneOverrides?: TimezoneAbbrMap) {}
206
11
 
207
12
  refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {
208
13
  const timezoneOverrides = context.option.timezones ?? {};
@@ -215,11 +20,12 @@ export default class ExtractTimezoneAbbrRefiner implements Refiner {
215
20
  }
216
21
 
217
22
  const timezoneAbbr = match[1].toUpperCase();
218
- const extractedTimezoneOffset = timezoneOverrides[timezoneAbbr] ?? this.timezone[timezoneAbbr] ?? null;
219
- if (extractedTimezoneOffset === null) {
23
+ const refDate = result.start.date() ?? result.refDate ?? new Date();
24
+ const tzOverrides = { ...this.timezoneOverrides, ...timezoneOverrides };
25
+ const extractedTimezoneOffset = toTimezoneOffset(timezoneAbbr, refDate, tzOverrides);
26
+ if (extractedTimezoneOffset == null) {
220
27
  return;
221
28
  }
222
-
223
29
  context.debug(() => {
224
30
  console.log(
225
31
  `Extracting timezone: '${timezoneAbbr}' into: ${extractedTimezoneOffset} for: ${result.start}`
@@ -30,22 +30,6 @@ export default class ForwardDateRefiner implements Refiner {
30
30
  }
31
31
  }
32
32
 
33
- if (result.start.isOnlyDayMonthComponent() && refMoment.isAfter(result.start.dayjs())) {
34
- for (let i = 0; i < 3 && refMoment.isAfter(result.start.dayjs()); i++) {
35
- result.start.imply("year", result.start.get("year") + 1);
36
- context.debug(() => {
37
- console.log(`Forward yearly adjusted for ${result} (${result.start})`);
38
- });
39
-
40
- if (result.end && !result.end.isCertain("year")) {
41
- result.end.imply("year", result.end.get("year") + 1);
42
- context.debug(() => {
43
- console.log(`Forward yearly adjusted for ${result} (${result.end})`);
44
- });
45
- }
46
- }
47
- }
48
-
49
33
  if (result.start.isOnlyWeekdayComponent() && refMoment.isAfter(result.start.dayjs())) {
50
34
  if (refMoment.day() >= result.start.get("weekday")) {
51
35
  refMoment = refMoment.day(result.start.get("weekday") + 7);
@@ -76,6 +60,24 @@ export default class ForwardDateRefiner implements Refiner {
76
60
  });
77
61
  }
78
62
  }
63
+
64
+ // In case where we know the month, but not which year (e.g. "in December", "25th December"),
65
+ // try move to another year
66
+ if (result.start.isDateWithUnknownYear() && refMoment.isAfter(result.start.dayjs())) {
67
+ for (let i = 0; i < 3 && refMoment.isAfter(result.start.dayjs()); i++) {
68
+ result.start.imply("year", result.start.get("year") + 1);
69
+ context.debug(() => {
70
+ console.log(`Forward yearly adjusted for ${result} (${result.start})`);
71
+ });
72
+
73
+ if (result.end && !result.end.isCertain("year")) {
74
+ result.end.imply("year", result.end.get("year") + 1);
75
+ context.debug(() => {
76
+ console.log(`Forward yearly adjusted for ${result} (${result.end})`);
77
+ });
78
+ }
79
+ }
80
+ }
79
81
  });
80
82
 
81
83
  return results;
@@ -12,10 +12,12 @@ export function includeCommonConfiguration(configuration: Configuration, strictM
12
12
  configuration.parsers.unshift(new ISOFormatParser());
13
13
 
14
14
  configuration.refiners.unshift(new MergeWeekdayComponentRefiner());
15
- configuration.refiners.unshift(new ExtractTimezoneAbbrRefiner());
16
15
  configuration.refiners.unshift(new ExtractTimezoneOffsetRefiner());
17
16
  configuration.refiners.unshift(new OverlapRemovalRefiner());
18
17
 
18
+ // Unlike ExtractTimezoneOffsetRefiner, this refiner relies on knowing both date and time in cases where the tz
19
+ // is ambiguous (in terms of DST/non-DST). It therefore needs to be applied as late as possible in the parsing.
20
+ configuration.refiners.push(new ExtractTimezoneAbbrRefiner());
19
21
  configuration.refiners.push(new OverlapRemovalRefiner());
20
22
  configuration.refiners.push(new ForwardDateRefiner());
21
23
  configuration.refiners.push(new UnlikelyFormatFilter(strictMode));
package/src/index.ts CHANGED
@@ -1,114 +1,11 @@
1
1
  import { DebugHandler, DebugConsume } from "./debugging";
2
2
  import * as en from "./locales/en";
3
3
  import { Chrono, Parser, Refiner } from "./chrono";
4
- import type { ParsingResult } from "./results";
4
+ import { ParsingResult } from "./results";
5
+ import { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday } from "./types";
5
6
 
6
7
  export { en, Chrono, Parser, Refiner, ParsingResult };
7
-
8
- export interface ParsingOption {
9
- /**
10
- * To parse only forward dates (the results should be after the reference date).
11
- * This effects date/time implication (e.g. weekday or time mentioning)
12
- */
13
- forwardDate?: boolean;
14
-
15
- /**
16
- * Additional timezone keywords for the parsers to recognize
17
- */
18
- timezones?: { [tzKeyword: string]: number };
19
-
20
- /**
21
- * Internal debug event handler.
22
- * @internal
23
- */
24
- debug?: DebugHandler | DebugConsume;
25
- }
26
-
27
- export interface ParsingReference {
28
- /**
29
- * Reference date. The instant (JavaScript Date object) when the input is written or mention.
30
- * This effect date/time implication (e.g. weekday or time mentioning).
31
- * (default = now)
32
- */
33
- instant?: Date;
34
-
35
- /**
36
- * Reference timezone. The timezone where the input is written or mention.
37
- * Date/time implication will account the difference between input timezone and the current system timezone.
38
- * (default = current timezone)
39
- */
40
- timezone?: string | number;
41
- }
42
-
43
- /**
44
- * Parsed result or final output.
45
- * Each result object represents a date/time (or date/time-range) mentioning in the input.
46
- */
47
- export interface ParsedResult {
48
- readonly refDate: Date;
49
- readonly index: number;
50
- readonly text: string;
51
-
52
- readonly start: ParsedComponents;
53
- readonly end?: ParsedComponents;
54
-
55
- /**
56
- * Create a javascript date object (from the result.start).
57
- */
58
- date(): Date;
59
- }
60
-
61
- /**
62
- * A collection of parsed date/time components (e.g. day, hour, minute, ..., etc).
63
- *
64
- * Each parsed component has three different levels of certainty.
65
- * - *Certain* (or *Known*): The component is directly mentioned and parsed.
66
- * - *Implied*: The component is not directly mentioned, but implied by other parsed information.
67
- * - *Unknown*: Completely no mention of the component.
68
- */
69
- export interface ParsedComponents {
70
- /**
71
- * Check the component certainly if the component is *Certain* (or *Known*)
72
- */
73
- isCertain(component: Component): boolean;
74
-
75
- /**
76
- * Get the component value for either *Certain* or *Implied* value.
77
- */
78
- get(component: Component): number | null;
79
-
80
- /**
81
- * @return a javascript date object.
82
- */
83
- date(): Date;
84
- }
85
-
86
- export type Component =
87
- | "year"
88
- | "month"
89
- | "day"
90
- | "weekday"
91
- | "hour"
92
- | "minute"
93
- | "second"
94
- | "millisecond"
95
- | "meridiem"
96
- | "timezoneOffset";
97
-
98
- export enum Meridiem {
99
- AM = 0,
100
- PM = 1,
101
- }
102
-
103
- export enum Weekday {
104
- SUNDAY = 0,
105
- MONDAY = 1,
106
- TUESDAY = 2,
107
- WEDNESDAY = 3,
108
- THURSDAY = 4,
109
- FRIDAY = 5,
110
- SATURDAY = 6,
111
- }
8
+ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday };
112
9
 
113
10
  // Export all locales
114
11
  import * as de from "./locales/de";
@@ -119,7 +16,9 @@ import * as nl from "./locales/nl";
119
16
  import * as zh from "./locales/zh";
120
17
  import * as ru from "./locales/ru";
121
18
  import * as es from "./locales/es";
122
- export { de, fr, ja, pt, nl, zh, ru, es };
19
+ import * as uk from "./locales/uk";
20
+
21
+ export { de, fr, ja, pt, nl, zh, ru, es, uk };
123
22
 
124
23
  /**
125
24
  * A shortcut for {@link en | chrono.en.strict}
@@ -1,6 +1,7 @@
1
1
  import { includeCommonConfiguration } from "../../configurations";
2
- import { ParsedResult, ParsingOption } from "../../index";
3
- import { Chrono, Configuration } from "../../chrono";
2
+ import { Chrono, Configuration, Parser, Refiner } from "../../chrono";
3
+ import { ParsingResult } from "../../results";
4
+ import { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday } from "../../types";
4
5
  import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
5
6
  import ISOFormatParser from "../../common/parsers/ISOFormatParser";
6
7
  import DETimeExpressionParser from "./parsers/DETimeExpressionParser";
@@ -14,6 +15,9 @@ import DEMonthNameLittleEndianParser from "./parsers/DEMonthNameLittleEndianPars
14
15
  import DETimeUnitRelativeFormatParser from "./parsers/DETimeUnitRelativeFormatParser";
15
16
  import DETimeUnitWithinFormatParser from "./parsers/DETimeUnitWithinFormatParser";
16
17
 
18
+ export { Chrono, Parser, Refiner, ParsingResult };
19
+ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday };
20
+
17
21
  // Shortcuts
18
22
  export const casual = new Chrono(createCasualConfiguration());
19
23
  export const strict = new Chrono(createConfiguration(true));
@@ -1,7 +1,7 @@
1
1
  import { ParsingContext } from "../../../chrono";
2
2
  import { ParsingComponents, ParsingResult } from "../../../results";
3
3
  import dayjs from "dayjs";
4
- import { Meridiem } from "../../../index";
4
+ import { Meridiem } from "../../../types";
5
5
  import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
6
6
  import { implySimilarTime } from "../../../utils/dayjs";
7
7
  import { addImpliedTimeUnits } from "../../../utils/timeunits";
@@ -1,6 +1,6 @@
1
1
  import { Parser, ParsingContext } from "../../../chrono";
2
2
  import { ParsingComponents, ParsingResult } from "../../../results";
3
- import { Meridiem } from "../../../index";
3
+ import { Meridiem } from "../../../types";
4
4
 
5
5
  /**
6
6
  * 8h10m00s