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
@@ -0,0 +1,349 @@
1
+ import { OpUnitType, QUnitType } from "dayjs";
2
+ import { matchAnyPattern, repeatedTimeunitPattern } from "../../utils/pattern";
3
+ import { findMostLikelyADYear } from "../../calculation/years";
4
+ import { TimeUnits } from "../../utils/timeunits";
5
+
6
+ export const REGEX_PARTS = {
7
+ leftBoundary: "([^\\p{L}\\p{N}_]|^)",
8
+ rightBoundary: "(?=[^\\p{L}\\p{N}_]|$)",
9
+ flags: "iu",
10
+ };
11
+
12
+ export const WEEKDAY_DICTIONARY: { [word: string]: number } = {
13
+ "неділя": 0,
14
+ "неділі": 0,
15
+ "неділю": 0,
16
+ "нд": 0,
17
+ "нд.": 0,
18
+ "понеділок": 1,
19
+ "понеділка": 1,
20
+ "пн": 1,
21
+ "пн.": 1,
22
+ "вівторок": 2,
23
+ "вівторка": 2,
24
+ "вт": 2,
25
+ "вт.": 2,
26
+ "середа": 3,
27
+ "середи": 3,
28
+ "середу": 3,
29
+ "ср": 3,
30
+ "ср.": 3,
31
+ "четвер": 4,
32
+ "четверга": 4,
33
+ "четвергу": 4,
34
+ "чт": 4,
35
+ "чт.": 4,
36
+ "п'ятниця": 5,
37
+ "п'ятниці": 5,
38
+ "п'ятницю": 5,
39
+ "пт": 5,
40
+ "пт.": 5,
41
+ "субота": 6,
42
+ "суботи": 6,
43
+ "суботу": 6,
44
+ "сб": 6,
45
+ "сб.": 6,
46
+ };
47
+
48
+ export const FULL_MONTH_NAME_DICTIONARY: { [word: string]: number } = {
49
+ "січень": 1,
50
+ "січня": 1,
51
+ "січні": 1,
52
+ "лютий": 2,
53
+ "лютого": 2,
54
+ "лютому": 2,
55
+ "березень": 3,
56
+ "березня": 3,
57
+ "березні": 3,
58
+ "квітень": 4,
59
+ "квітня": 4,
60
+ "квітні": 4,
61
+ "травень": 5,
62
+ "травня": 5,
63
+ "травні": 5,
64
+ "червень": 6,
65
+ "червня": 6,
66
+ "червні": 6,
67
+ "липень": 7,
68
+ "липня": 7,
69
+ "липні": 7,
70
+ "серпень": 8,
71
+ "серпня": 8,
72
+ "серпні": 8,
73
+ "вересень": 9,
74
+ "вересня": 9,
75
+ "вересні": 9,
76
+ "жовтень": 10,
77
+ "жовтня": 10,
78
+ "жовтні": 10,
79
+ "листопад": 11,
80
+ "листопада": 11,
81
+ "листопаду": 11,
82
+ "грудень": 12,
83
+ "грудня": 12,
84
+ "грудні": 12,
85
+ };
86
+
87
+ export const MONTH_DICTIONARY: { [word: string]: number } = {
88
+ ...FULL_MONTH_NAME_DICTIONARY,
89
+ "січ": 1,
90
+ "січ.": 1,
91
+ "лют": 2,
92
+ "лют.": 2,
93
+ "бер": 3,
94
+ "бер.": 3,
95
+ "квіт": 4,
96
+ "квіт.": 4,
97
+ "трав": 5,
98
+ "трав.": 5,
99
+ "черв": 6,
100
+ "черв.": 6,
101
+ "лип": 7,
102
+ "лип.": 7,
103
+ "серп": 8,
104
+ "серп.": 8,
105
+ "сер": 8,
106
+ "cер.": 8,
107
+ "вер": 9,
108
+ "вер.": 9,
109
+ "верес": 9,
110
+ "верес.": 9,
111
+ "жовт": 10,
112
+ "жовт.": 10,
113
+ "листоп": 11,
114
+ "листоп.": 11,
115
+ "груд": 12,
116
+ "груд.": 12,
117
+ };
118
+
119
+ export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
120
+ "один": 1,
121
+ "одна": 1,
122
+ "одної": 1,
123
+ "одну": 1,
124
+ "дві": 2,
125
+ "два": 2,
126
+ "двох": 2,
127
+ "три": 3,
128
+ "трьох": 3,
129
+ "чотири": 4,
130
+ "чотирьох": 4,
131
+ "п'ять": 5,
132
+ "п'яти": 5,
133
+ "шість": 6,
134
+ "шести": 6,
135
+ "сім": 7,
136
+ "семи": 7,
137
+ "вісім": 8,
138
+ "восьми": 8,
139
+ "дев'ять": 9,
140
+ "дев'яти": 9,
141
+ "десять": 10,
142
+ "десяти": 10,
143
+ "одинадцять": 11,
144
+ "одинадцяти": 11,
145
+ "дванадцять": 12,
146
+ "дванадцяти": 12,
147
+ };
148
+
149
+ export const ORDINAL_WORD_DICTIONARY: { [word: string]: number } = {
150
+ "перше": 1,
151
+ "першого": 1,
152
+ "друге": 2,
153
+ "другого": 2,
154
+ "третє": 3,
155
+ "третього": 3,
156
+ "четверте": 4,
157
+ "четвертого": 4,
158
+ "п'яте": 5,
159
+ "п'ятого": 5,
160
+ "шосте": 6,
161
+ "шостого": 6,
162
+ "сьоме": 7,
163
+ "сьомого": 7,
164
+ "восьме": 8,
165
+ "восьмого": 8,
166
+ "дев'яте": 9,
167
+ "дев'ятого": 9,
168
+ "десяте": 10,
169
+ "десятого": 10,
170
+ "одинадцяте": 11,
171
+ "одинадцятого": 11,
172
+ "дванадцяте": 12,
173
+ "дванадцятого": 12,
174
+ "тринадцяте": 13,
175
+ "тринадцятого": 13,
176
+ "чотирнадцяте": 14,
177
+ "чотинрнадцятого": 14,
178
+ "п'ятнадцяте": 15,
179
+ "п'ятнадцятого": 15,
180
+ "шістнадцяте": 16,
181
+ "шістнадцятого": 16,
182
+ "сімнадцяте": 17,
183
+ "сімнадцятого": 17,
184
+ "вісімнадцяте": 18,
185
+ "вісімнадцятого": 18,
186
+ "дев'ятнадцяте": 19,
187
+ "дев'ятнадцятого": 19,
188
+ "двадцяте": 20,
189
+ "двадцятого": 20,
190
+ "двадцять перше": 21,
191
+ "двадцять першого": 21,
192
+ "двадцять друге": 22,
193
+ "двадцять другого": 22,
194
+ "двадцять третє": 23,
195
+ "двадцять третього": 23,
196
+ "двадцять четверте": 24,
197
+ "двадцять четвертого": 24,
198
+ "двадцять п'яте": 25,
199
+ "двадцять п'ятого": 25,
200
+ "двадцять шосте": 26,
201
+ "двадцять шостого": 26,
202
+ "двадцять сьоме": 27,
203
+ "двадцять сьомого": 27,
204
+ "двадцять восьме": 28,
205
+ "двадцять восьмого": 28,
206
+ "двадцять дев'яте": 29,
207
+ "двадцять дев'ятого": 29,
208
+ "тридцяте": 30,
209
+ "тридцятого": 30,
210
+ "тридцять перше": 31,
211
+ "тридцять першого": 31,
212
+ };
213
+
214
+ export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType | QUnitType } = {
215
+ сек: "second",
216
+ секунда: "second",
217
+ секунд: "second",
218
+ секунди: "second",
219
+ секунду: "second",
220
+ секундочок: "second",
221
+ секундочки: "second",
222
+ секундочку: "second",
223
+ хв: "minute",
224
+ хвилина: "minute",
225
+ хвилин: "minute",
226
+ хвилини: "minute",
227
+ хвилину: "minute",
228
+ хвилинок: "minute",
229
+ хвилинки: "minute",
230
+ хвилинку: "minute",
231
+ хвилиночок: "minute",
232
+ хвилиночки: "minute",
233
+ хвилиночку: "minute",
234
+ год: "hour",
235
+ година: "hour",
236
+ годин: "hour",
237
+ години: "hour",
238
+ годину: "hour",
239
+ годинка: "hour",
240
+ годинок: "hour",
241
+ годинки: "hour",
242
+ годинку: "hour",
243
+ день: "d",
244
+ дня: "d",
245
+ днів: "d",
246
+ дні: "d",
247
+ доба: "d",
248
+ добу: "d",
249
+ тиждень: "week",
250
+ тижню: "week",
251
+ тижня: "week",
252
+ тижні: "week",
253
+ тижнів: "week",
254
+ місяць: "month",
255
+ місяців: "month",
256
+ місяці: "month",
257
+ місяця: "month",
258
+ квартал: "quarter",
259
+ кварталу: "quarter",
260
+ квартала: "quarter",
261
+ кварталів: "quarter",
262
+ кварталі: "quarter",
263
+ рік: "year",
264
+ року: "year",
265
+ році: "year",
266
+ років: "year",
267
+ роки: "year",
268
+ };
269
+
270
+ //--------------------------------
271
+
272
+ export const NUMBER_PATTERN = `(?:${matchAnyPattern(
273
+ INTEGER_WORD_DICTIONARY
274
+ )}|[0-9]+|[0-9]+\\.[0-9]+|пів|декілька|пар(?:у)|\\s{0,3})`;
275
+
276
+ export function parseNumberPattern(match: string): number {
277
+ const num = match.toLowerCase();
278
+ if (INTEGER_WORD_DICTIONARY[num] !== undefined) {
279
+ return INTEGER_WORD_DICTIONARY[num];
280
+ }
281
+ if (num.match(/декілька/)) {
282
+ return 2;
283
+ } else if (num.match(/пів/)) {
284
+ return 0.5;
285
+ } else if (num.match(/пар/)) {
286
+ return 2;
287
+ } else if (num === "") {
288
+ return 1;
289
+ }
290
+ return parseFloat(num);
291
+ }
292
+
293
+ export const ORDINAL_NUMBER_PATTERN = `(?:${matchAnyPattern(ORDINAL_WORD_DICTIONARY)}|[0-9]{1,2}(?:го|ого|е)?)`;
294
+ export function parseOrdinalNumberPattern(match: string): number {
295
+ const num = match.toLowerCase();
296
+ if (ORDINAL_WORD_DICTIONARY[num] !== undefined) {
297
+ return ORDINAL_WORD_DICTIONARY[num];
298
+ }
299
+ return parseInt(num);
300
+ }
301
+
302
+ const year = "(?:\\s+(?:року|рік|р|р.))?";
303
+ export const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}${year}\\s*(?:н.е.|до н.е.|н. е.|до н. е.)|[1-2][0-9]{3}${year}|[5-9][0-9]${year})`;
304
+ export function parseYearPattern(match: string): number {
305
+ if (/(рік|року|р|р.)/i.test(match)) {
306
+ match = match.replace(/(рік|року|р|р.)/i, "");
307
+ }
308
+
309
+ if (/(до н.е.|до н. е.)/i.test(match)) {
310
+ //Before Common Era
311
+ match = match.replace(/(до н.е.|до н. е.)/i, "");
312
+ return -parseInt(match);
313
+ }
314
+
315
+ if (/(н. е.|н.е.)/i.test(match)) {
316
+ //Common Era
317
+ match = match.replace(/(н. е.|н.е.)/i, "");
318
+ return parseInt(match);
319
+ }
320
+
321
+ const rawYearNumber = parseInt(match);
322
+ return findMostLikelyADYear(rawYearNumber);
323
+ }
324
+
325
+ const SINGLE_TIME_UNIT_PATTERN = `(${NUMBER_PATTERN})\\s{0,3}(${matchAnyPattern(TIME_UNIT_DICTIONARY)})`;
326
+ const SINGLE_TIME_UNIT_REGEX = new RegExp(SINGLE_TIME_UNIT_PATTERN, "i");
327
+
328
+ export const TIME_UNITS_PATTERN = repeatedTimeunitPattern(
329
+ `(?:(?:близько|приблизно)\\s{0,3})?`,
330
+ SINGLE_TIME_UNIT_PATTERN
331
+ );
332
+
333
+ export function parseTimeUnits(timeunitText): TimeUnits {
334
+ const fragments = {};
335
+ let remainingText = timeunitText;
336
+ let match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
337
+ while (match) {
338
+ collectDateTimeFragment(fragments, match);
339
+ remainingText = remainingText.substring(match[0].length).trim();
340
+ match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
341
+ }
342
+ return fragments;
343
+ }
344
+
345
+ function collectDateTimeFragment(fragments, match) {
346
+ const num = parseNumberPattern(match[1]);
347
+ const unit = TIME_UNIT_DICTIONARY[match[2].toLowerCase()];
348
+ fragments[unit] = num;
349
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Chrono components for Ukrainian support (*parsers*, *refiners*, and *configuration*)
3
+ *
4
+ * @module
5
+ */
6
+
7
+ import UKTimeUnitWithinFormatParser from "./parsers/UKTimeUnitWithinFormatParser";
8
+ import UKMonthNameLittleEndianParser from "./parsers/UKMonthNameLittleEndianParser";
9
+ import UkMonthNameParser from "./parsers/UKMonthNameParser";
10
+ import UKTimeExpressionParser from "./parsers/UKTimeExpressionParser";
11
+ import UKTimeUnitAgoFormatParser from "./parsers/UKTimeUnitAgoFormatParser";
12
+ import UKMergeDateRangeRefiner from "./refiners/UKMergeDateRangeRefiner";
13
+ import UKMergeDateTimeRefiner from "./refiners/UKMergeDateTimeRefiner";
14
+
15
+ import { includeCommonConfiguration } from "../../configurations";
16
+ import UKCasualDateParser from "./parsers/UKCasualDateParser";
17
+ import UKCasualTimeParser from "./parsers/UKCasualTimeParser";
18
+ import UKWeekdayParser from "./parsers/UKWeekdayParser";
19
+ import UKRelativeDateFormatParser from "./parsers/UKRelativeDateFormatParser";
20
+
21
+ import { Chrono, Configuration, Parser, Refiner } from "../../chrono";
22
+ import { ParsingResult } from "../../results";
23
+ import { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday } from "../../types";
24
+ import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
25
+ import UKTimeUnitCasualRelativeFormatParser from "./parsers/UKTimeUnitCasualRelativeFormatParser";
26
+ import ISOFormatParser from "../../common/parsers/ISOFormatParser";
27
+
28
+ export { Chrono, Parser, Refiner, ParsingResult };
29
+ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday };
30
+
31
+ /**
32
+ * Chrono object configured for parsing *casual* Ukrainian
33
+ */
34
+ export const casual = new Chrono(createCasualConfiguration());
35
+
36
+ /**
37
+ * Chrono object configured for parsing *strict* Ukrainian
38
+ */
39
+ export const strict = new Chrono(createConfiguration(true));
40
+
41
+ /**
42
+ * Create a default *casual* {@Link Configuration} for Ukrainian chrono.
43
+ * It calls {@Link createConfiguration} and includes additional parsers.
44
+ */
45
+ export function createCasualConfiguration(): Configuration {
46
+ const option = createConfiguration(false);
47
+ option.parsers.unshift(new UKCasualDateParser());
48
+ option.parsers.unshift(new UKCasualTimeParser());
49
+ option.parsers.unshift(new UkMonthNameParser());
50
+ option.parsers.unshift(new UKRelativeDateFormatParser());
51
+ option.parsers.unshift(new UKTimeUnitCasualRelativeFormatParser());
52
+ return option;
53
+ }
54
+
55
+ /**
56
+ * Create a default {@Link Configuration} for Ukrainian chrono
57
+ *
58
+ * @param strictMode If the timeunit mentioning should be strict, not casual
59
+ */
60
+ export function createConfiguration(strictMode: boolean): Configuration {
61
+ return includeCommonConfiguration(
62
+ {
63
+ parsers: [
64
+ new ISOFormatParser(),
65
+ new SlashDateFormatParser(true),
66
+ new UKTimeUnitWithinFormatParser(),
67
+ new UKMonthNameLittleEndianParser(),
68
+ new UKWeekdayParser(),
69
+ new UKTimeExpressionParser(strictMode),
70
+ new UKTimeUnitAgoFormatParser(),
71
+ ],
72
+ refiners: [new UKMergeDateTimeRefiner(), new UKMergeDateRangeRefiner()],
73
+ },
74
+ strictMode
75
+ );
76
+ }
77
+
78
+ /**
79
+ * A shortcut for uk.casual.parse()
80
+ */
81
+ export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
82
+ return casual.parse(text, ref, option);
83
+ }
84
+
85
+ /**
86
+ * A shortcut for uk.casual.parseDate()
87
+ */
88
+ export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
89
+ return casual.parseDate(text, ref, option);
90
+ }
@@ -0,0 +1,50 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingComponents, ParsingResult } from "../../../results";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
4
+ import * as references from "../../../common/casualReferences";
5
+ import { REGEX_PARTS } from "../constants";
6
+
7
+ const PATTERN = new RegExp(
8
+ `(?:з|із|від)?\\s*(сьогодні|вчора|завтра|післязавтра|післяпіслязавтра|позапозавчора|позавчора)${REGEX_PARTS.rightBoundary}`,
9
+ REGEX_PARTS.flags
10
+ );
11
+
12
+ export default class UKCasualDateParser extends AbstractParserWithWordBoundaryChecking {
13
+ patternLeftBoundary(): string {
14
+ return REGEX_PARTS.leftBoundary;
15
+ }
16
+
17
+ innerPattern(context: ParsingContext): RegExp {
18
+ return PATTERN;
19
+ }
20
+
21
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult {
22
+ const lowerText = match[1].toLowerCase();
23
+ const component = context.createParsingComponents();
24
+
25
+ switch (lowerText) {
26
+ case "сьогодні":
27
+ return references.today(context.reference);
28
+
29
+ case "вчора":
30
+ return references.yesterday(context.reference);
31
+
32
+ case "завтра":
33
+ return references.tomorrow(context.reference);
34
+
35
+ case "післязавтра":
36
+ return references.theDayAfter(context.reference, 2);
37
+
38
+ case "післяпіслязавтра":
39
+ return references.theDayAfter(context.reference, 3);
40
+
41
+ case "позавчора":
42
+ return references.theDayBefore(context.reference, 2);
43
+
44
+ case "позапозавчора":
45
+ return references.theDayBefore(context.reference, 3);
46
+ }
47
+
48
+ return component;
49
+ }
50
+ }
@@ -0,0 +1,59 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
3
+ import * as references from "../../../common/casualReferences";
4
+ import { assignSimilarDate } from "../../../utils/dayjs";
5
+ import dayjs from "dayjs";
6
+ import { REGEX_PARTS } from "../constants";
7
+
8
+ const PATTERN = new RegExp(
9
+ `(зараз|минулого\\s*вечора|минулої\\s*ночі|наступної\\s*ночі|сьогодні\\s*вночі|цієї\\s*ночі|цього ранку|вранці|ранку|зранку|опівдні|ввечері|вечора|опівночі|вночі)` +
10
+ `${REGEX_PARTS.rightBoundary}`,
11
+ REGEX_PARTS.flags
12
+ );
13
+ export default class UKCasualTimeParser extends AbstractParserWithWordBoundaryChecking {
14
+ patternLeftBoundary(): string {
15
+ return REGEX_PARTS.leftBoundary;
16
+ }
17
+
18
+ innerPattern() {
19
+ return PATTERN;
20
+ }
21
+
22
+ innerExtract(context: ParsingContext, match: RegExpMatchArray) {
23
+ let targetDate = dayjs(context.reference.instant);
24
+ const lowerText = match[0].toLowerCase();
25
+ const component = context.createParsingComponents();
26
+
27
+ if (lowerText === "зараз") {
28
+ return references.now(context.reference);
29
+ }
30
+ if (lowerText === "ввечері" || lowerText === "вечора") {
31
+ return references.evening(context.reference);
32
+ }
33
+ if (lowerText.endsWith("вранці") || lowerText.endsWith("ранку") || lowerText.endsWith("зранку")) {
34
+ return references.morning(context.reference);
35
+ }
36
+ if (lowerText.endsWith("опівдні")) {
37
+ return references.noon(context.reference);
38
+ }
39
+ if (lowerText.match(/минулої\s*ночі/)) {
40
+ return references.lastNight(context.reference);
41
+ }
42
+ if (lowerText.match(/минулого\s*вечора/)) {
43
+ return references.yesterdayEvening(context.reference);
44
+ }
45
+ if (lowerText.match(/наступної\s*ночі/)) {
46
+ const daysToAdd = targetDate.hour() < 22 ? 1 : 2;
47
+ targetDate = targetDate.add(daysToAdd, "day");
48
+ assignSimilarDate(component, targetDate);
49
+ component.imply("hour", 1);
50
+ }
51
+ if (lowerText.match(/цієї\s*ночі/)) {
52
+ return references.midnight(context.reference);
53
+ }
54
+ if (lowerText.endsWith("опівночі") || lowerText.endsWith("вночі")) {
55
+ return references.midnight(context.reference);
56
+ }
57
+ return component;
58
+ }
59
+ }
@@ -0,0 +1,72 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingResult } from "../../../results";
3
+ import { findYearClosestToRef } from "../../../calculation/years";
4
+ import { MONTH_DICTIONARY, REGEX_PARTS } from "../constants";
5
+ import { YEAR_PATTERN, parseYearPattern } from "../constants";
6
+ import { ORDINAL_NUMBER_PATTERN, parseOrdinalNumberPattern } from "../constants";
7
+ import { matchAnyPattern } from "../../../utils/pattern";
8
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
9
+
10
+ // prettier-ignore
11
+ const PATTERN = new RegExp(
12
+ `(?:з|із)?\\s*(${ORDINAL_NUMBER_PATTERN})` +
13
+ `(?:` +
14
+ `\\s{0,3}(?:по|-|–|до)?\\s{0,3}` +
15
+ `(${ORDINAL_NUMBER_PATTERN})` +
16
+ `)?` +
17
+ `(?:-|\\/|\\s{0,3}(?:of)?\\s{0,3})` +
18
+ `(${matchAnyPattern(MONTH_DICTIONARY)})` +
19
+ `(?:` +
20
+ `(?:-|\\/|,?\\s{0,3})` +
21
+ `(${YEAR_PATTERN}(?![^\\s]\\d))` +
22
+ `)?` +
23
+ `${REGEX_PARTS.rightBoundary}`,
24
+ REGEX_PARTS.flags
25
+ );
26
+
27
+ const DATE_GROUP = 1;
28
+ const DATE_TO_GROUP = 2;
29
+ const MONTH_NAME_GROUP = 3;
30
+ const YEAR_GROUP = 4;
31
+
32
+ export default class UKMonthNameLittleEndianParser extends AbstractParserWithWordBoundaryChecking {
33
+ patternLeftBoundary(): string {
34
+ return REGEX_PARTS.leftBoundary;
35
+ }
36
+
37
+ innerPattern(): RegExp {
38
+ return PATTERN;
39
+ }
40
+
41
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {
42
+ const result = context.createParsingResult(match.index, match[0]);
43
+
44
+ const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];
45
+ const day = parseOrdinalNumberPattern(match[DATE_GROUP]);
46
+ if (day > 31) {
47
+ // e.g. "[96 Aug]" => "9[6 Aug]", we need to shift away from the next number
48
+ match.index = match.index + match[DATE_GROUP].length;
49
+ return null;
50
+ }
51
+
52
+ result.start.assign("month", month);
53
+ result.start.assign("day", day);
54
+
55
+ if (match[YEAR_GROUP]) {
56
+ const yearNumber = parseYearPattern(match[YEAR_GROUP]);
57
+ result.start.assign("year", yearNumber);
58
+ } else {
59
+ const year = findYearClosestToRef(context.reference.instant, day, month);
60
+ result.start.imply("year", year);
61
+ }
62
+
63
+ if (match[DATE_TO_GROUP]) {
64
+ const endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP]);
65
+
66
+ result.end = result.start.clone();
67
+ result.end.assign("day", endDate);
68
+ }
69
+
70
+ return result;
71
+ }
72
+ }
@@ -0,0 +1,61 @@
1
+ import { FULL_MONTH_NAME_DICTIONARY, MONTH_DICTIONARY, REGEX_PARTS } from "../constants";
2
+ import { ParsingContext } from "../../../chrono";
3
+ import { findYearClosestToRef } from "../../../calculation/years";
4
+ import { matchAnyPattern } from "../../../utils/pattern";
5
+ import { YEAR_PATTERN, parseYearPattern } from "../constants";
6
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
7
+
8
+ const PATTERN = new RegExp(
9
+ `((?:в|у)\\s*)?` +
10
+ `(${matchAnyPattern(MONTH_DICTIONARY)})` +
11
+ `\\s*` +
12
+ `(?:` +
13
+ `[,-]?\\s*(${YEAR_PATTERN})?` +
14
+ `)?` +
15
+ `(?=[^\\s\\w]|\\s+[^0-9]|\\s+$|$)`,
16
+ REGEX_PARTS.flags
17
+ );
18
+
19
+ const MONTH_NAME_GROUP = 2;
20
+ const YEAR_GROUP = 3;
21
+
22
+ /**
23
+ * The parser for parsing month name and year.
24
+ * - Cічень, 2012
25
+ * - Січень 2012
26
+ * - Січень
27
+ */
28
+ export default class UkMonthNameParser extends AbstractParserWithWordBoundaryChecking {
29
+ patternLeftBoundary(): string {
30
+ return REGEX_PARTS.leftBoundary;
31
+ }
32
+
33
+ innerPattern(): RegExp {
34
+ return PATTERN;
35
+ }
36
+
37
+ innerExtract(context: ParsingContext, match: RegExpMatchArray) {
38
+ const monthName = match[MONTH_NAME_GROUP].toLowerCase();
39
+
40
+ // skip some unlikely words "січ", "лют", ..
41
+ if (match[0].length <= 3 && !FULL_MONTH_NAME_DICTIONARY[monthName]) {
42
+ return null;
43
+ }
44
+
45
+ const result = context.createParsingResult(match.index, match.index + match[0].length);
46
+ result.start.imply("day", 1);
47
+
48
+ const month = MONTH_DICTIONARY[monthName];
49
+ result.start.assign("month", month);
50
+
51
+ if (match[YEAR_GROUP]) {
52
+ const year = parseYearPattern(match[YEAR_GROUP]);
53
+ result.start.assign("year", year);
54
+ } else {
55
+ const year = findYearClosestToRef(context.reference.instant, 1, month);
56
+ result.start.imply("year", year);
57
+ }
58
+
59
+ return result;
60
+ }
61
+ }