chrono-node 2.3.7 → 2.4.1

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 (369) hide show
  1. package/README.md +2 -2
  2. package/dist/calculation/mergingCalculation.js +1 -0
  3. package/dist/calculation/mergingCalculation.js.map +1 -0
  4. package/dist/calculation/weeks.js +1 -0
  5. package/dist/calculation/weeks.js.map +1 -0
  6. package/dist/calculation/years.js +1 -0
  7. package/dist/calculation/years.js.map +1 -0
  8. package/dist/chrono.js +1 -0
  9. package/dist/chrono.js.map +1 -0
  10. package/dist/common/abstractRefiners.js +1 -0
  11. package/dist/common/abstractRefiners.js.map +1 -0
  12. package/dist/common/calculation/weekdays.d.ts +7 -0
  13. package/dist/common/calculation/weekdays.js +68 -0
  14. package/dist/common/calculation/weekdays.js.map +1 -0
  15. package/dist/common/casualReferences.d.ts +8 -0
  16. package/dist/common/casualReferences.js +65 -9
  17. package/dist/common/casualReferences.js.map +1 -0
  18. package/dist/common/parsers/AbstractParserWithWordBoundary.d.ts +1 -0
  19. package/dist/common/parsers/AbstractParserWithWordBoundary.js +5 -1
  20. package/dist/common/parsers/AbstractParserWithWordBoundary.js.map +1 -0
  21. package/dist/common/parsers/AbstractTimeExpressionParser.d.ts +2 -0
  22. package/dist/common/parsers/AbstractTimeExpressionParser.js +40 -27
  23. package/dist/common/parsers/AbstractTimeExpressionParser.js.map +1 -0
  24. package/dist/common/parsers/ISOFormatParser.js +1 -0
  25. package/dist/common/parsers/ISOFormatParser.js.map +1 -0
  26. package/dist/common/parsers/SlashDateFormatParser.js +1 -0
  27. package/dist/common/parsers/SlashDateFormatParser.js.map +1 -0
  28. package/dist/common/refiners/AbstractMergeDateRangeRefiner.js +1 -0
  29. package/dist/common/refiners/AbstractMergeDateRangeRefiner.js.map +1 -0
  30. package/dist/common/refiners/AbstractMergeDateTimeRefiner.js +1 -0
  31. package/dist/common/refiners/AbstractMergeDateTimeRefiner.js.map +1 -0
  32. package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js +2 -1
  33. package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js.map +1 -0
  34. package/dist/common/refiners/ExtractTimezoneOffsetRefiner.js +5 -1
  35. package/dist/common/refiners/ExtractTimezoneOffsetRefiner.js.map +1 -0
  36. package/dist/common/refiners/ForwardDateRefiner.js +1 -0
  37. package/dist/common/refiners/ForwardDateRefiner.js.map +1 -0
  38. package/dist/common/refiners/MergeWeekdayComponentRefiner.js +1 -0
  39. package/dist/common/refiners/MergeWeekdayComponentRefiner.js.map +1 -0
  40. package/dist/common/refiners/OverlapRemovalRefiner.js +1 -0
  41. package/dist/common/refiners/OverlapRemovalRefiner.js.map +1 -0
  42. package/dist/common/refiners/UnlikelyFormatFilter.js +1 -0
  43. package/dist/common/refiners/UnlikelyFormatFilter.js.map +1 -0
  44. package/dist/configurations.js +1 -0
  45. package/dist/configurations.js.map +1 -0
  46. package/dist/debugging.js +1 -0
  47. package/dist/debugging.js.map +1 -0
  48. package/dist/index.d.ts +11 -1
  49. package/dist/index.js +14 -1
  50. package/dist/index.js.map +1 -0
  51. package/dist/locales/de/constants.d.ts +3 -3
  52. package/dist/locales/de/constants.js +39 -20
  53. package/dist/locales/de/constants.js.map +1 -0
  54. package/dist/locales/de/index.js +5 -0
  55. package/dist/locales/de/index.js.map +1 -0
  56. package/dist/locales/de/parsers/DECasualDateParser.js +1 -0
  57. package/dist/locales/de/parsers/DECasualDateParser.js.map +1 -0
  58. package/dist/locales/de/parsers/DECasualTimeParser.js +1 -0
  59. package/dist/locales/de/parsers/DECasualTimeParser.js.map +1 -0
  60. package/dist/locales/de/parsers/DEMonthNameLittleEndianParser.js +1 -0
  61. package/dist/locales/de/parsers/DEMonthNameLittleEndianParser.js.map +1 -0
  62. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.d.ts +7 -0
  63. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js +115 -0
  64. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js.map +1 -0
  65. package/dist/locales/de/parsers/DETimeExpressionParser.d.ts +0 -1
  66. package/dist/locales/de/parsers/DETimeExpressionParser.js +4 -21
  67. package/dist/locales/de/parsers/DETimeExpressionParser.js.map +1 -0
  68. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.d.ts +8 -0
  69. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js +35 -0
  70. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js.map +1 -0
  71. package/dist/locales/de/parsers/DEWeekdayParser.js +3 -8
  72. package/dist/locales/de/parsers/DEWeekdayParser.js.map +1 -0
  73. package/dist/locales/de/refiners/DEMergeDateRangeRefiner.js +1 -0
  74. package/dist/locales/de/refiners/DEMergeDateRangeRefiner.js.map +1 -0
  75. package/dist/locales/de/refiners/DEMergeDateTimeRefiner.js +1 -0
  76. package/dist/locales/de/refiners/DEMergeDateTimeRefiner.js.map +1 -0
  77. package/dist/locales/en/constants.d.ts +4 -3
  78. package/dist/locales/en/constants.js +4 -0
  79. package/dist/locales/en/constants.js.map +1 -0
  80. package/dist/locales/en/index.js +1 -0
  81. package/dist/locales/en/index.js.map +1 -0
  82. package/dist/locales/en/parsers/ENCasualDateParser.js +1 -0
  83. package/dist/locales/en/parsers/ENCasualDateParser.js.map +1 -0
  84. package/dist/locales/en/parsers/ENCasualTimeParser.js +1 -0
  85. package/dist/locales/en/parsers/ENCasualTimeParser.js.map +1 -0
  86. package/dist/locales/en/parsers/ENCasualYearMonthDayParser.js +1 -0
  87. package/dist/locales/en/parsers/ENCasualYearMonthDayParser.js.map +1 -0
  88. package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js +1 -0
  89. package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js.map +1 -0
  90. package/dist/locales/en/parsers/ENMonthNameMiddleEndianParser.js +1 -0
  91. package/dist/locales/en/parsers/ENMonthNameMiddleEndianParser.js.map +1 -0
  92. package/dist/locales/en/parsers/ENMonthNameParser.js +1 -0
  93. package/dist/locales/en/parsers/ENMonthNameParser.js.map +1 -0
  94. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +1 -0
  95. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js.map +1 -0
  96. package/dist/locales/en/parsers/ENSlashMonthFormatParser.js +1 -0
  97. package/dist/locales/en/parsers/ENSlashMonthFormatParser.js.map +1 -0
  98. package/dist/locales/en/parsers/ENTimeExpressionParser.js +1 -0
  99. package/dist/locales/en/parsers/ENTimeExpressionParser.js.map +1 -0
  100. package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js +1 -0
  101. package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -0
  102. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +1 -0
  103. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -0
  104. package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js +1 -0
  105. package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -0
  106. package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js +1 -0
  107. package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -0
  108. package/dist/locales/en/parsers/ENWeekdayParser.js +4 -9
  109. package/dist/locales/en/parsers/ENWeekdayParser.js.map +1 -0
  110. package/dist/locales/en/refiners/ENMergeDateRangeRefiner.js +1 -0
  111. package/dist/locales/en/refiners/ENMergeDateRangeRefiner.js.map +1 -0
  112. package/dist/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -0
  113. package/dist/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -0
  114. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js +1 -0
  115. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js.map +1 -0
  116. package/dist/locales/fr/constants.js +1 -0
  117. package/dist/locales/fr/constants.js.map +1 -0
  118. package/dist/locales/fr/index.js +1 -0
  119. package/dist/locales/fr/index.js.map +1 -0
  120. package/dist/locales/fr/parsers/FRCasualDateParser.js +1 -0
  121. package/dist/locales/fr/parsers/FRCasualDateParser.js.map +1 -0
  122. package/dist/locales/fr/parsers/FRCasualTimeParser.js +1 -0
  123. package/dist/locales/fr/parsers/FRCasualTimeParser.js.map +1 -0
  124. package/dist/locales/fr/parsers/FRMonthNameLittleEndianParser.js +1 -0
  125. package/dist/locales/fr/parsers/FRMonthNameLittleEndianParser.js.map +1 -0
  126. package/dist/locales/fr/parsers/FRSpecificTimeExpressionParser.js +1 -0
  127. package/dist/locales/fr/parsers/FRSpecificTimeExpressionParser.js.map +1 -0
  128. package/dist/locales/fr/parsers/FRTimeExpressionParser.js +1 -0
  129. package/dist/locales/fr/parsers/FRTimeExpressionParser.js.map +1 -0
  130. package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js +1 -0
  131. package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js.map +1 -0
  132. package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js +1 -0
  133. package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js.map +1 -0
  134. package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js +2 -1
  135. package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js.map +1 -0
  136. package/dist/locales/fr/parsers/FRWeekdayParser.js +5 -10
  137. package/dist/locales/fr/parsers/FRWeekdayParser.js.map +1 -0
  138. package/dist/locales/fr/refiners/FRMergeDateRangeRefiner.js +1 -0
  139. package/dist/locales/fr/refiners/FRMergeDateRangeRefiner.js.map +1 -0
  140. package/dist/locales/fr/refiners/FRMergeDateTimeRefiner.js +1 -0
  141. package/dist/locales/fr/refiners/FRMergeDateTimeRefiner.js.map +1 -0
  142. package/dist/locales/ja/constants.js +1 -0
  143. package/dist/locales/ja/constants.js.map +1 -0
  144. package/dist/locales/ja/index.js +1 -0
  145. package/dist/locales/ja/index.js.map +1 -0
  146. package/dist/locales/ja/parsers/JPCasualDateParser.js +1 -0
  147. package/dist/locales/ja/parsers/JPCasualDateParser.js.map +1 -0
  148. package/dist/locales/ja/parsers/JPStandardParser.js +1 -0
  149. package/dist/locales/ja/parsers/JPStandardParser.js.map +1 -0
  150. package/dist/locales/ja/refiners/JPMergeDateRangeRefiner.js +1 -0
  151. package/dist/locales/ja/refiners/JPMergeDateRangeRefiner.js.map +1 -0
  152. package/dist/locales/nl/constants.js +1 -0
  153. package/dist/locales/nl/constants.js.map +1 -0
  154. package/dist/locales/nl/index.js +1 -0
  155. package/dist/locales/nl/index.js.map +1 -0
  156. package/dist/locales/nl/parsers/NLCasualDateParser.js +1 -0
  157. package/dist/locales/nl/parsers/NLCasualDateParser.js.map +1 -0
  158. package/dist/locales/nl/parsers/NLCasualDateTimeParser.js +1 -0
  159. package/dist/locales/nl/parsers/NLCasualDateTimeParser.js.map +1 -0
  160. package/dist/locales/nl/parsers/NLCasualTimeParser.js +1 -0
  161. package/dist/locales/nl/parsers/NLCasualTimeParser.js.map +1 -0
  162. package/dist/locales/nl/parsers/NLCasualYearMonthDayParser.js +1 -0
  163. package/dist/locales/nl/parsers/NLCasualYearMonthDayParser.js.map +1 -0
  164. package/dist/locales/nl/parsers/NLMonthNameMiddleEndianParser.js +1 -0
  165. package/dist/locales/nl/parsers/NLMonthNameMiddleEndianParser.js.map +1 -0
  166. package/dist/locales/nl/parsers/NLMonthNameParser.js +1 -0
  167. package/dist/locales/nl/parsers/NLMonthNameParser.js.map +1 -0
  168. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js +1 -0
  169. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js.map +1 -0
  170. package/dist/locales/nl/parsers/NLSlashMonthFormatParser.js +1 -0
  171. package/dist/locales/nl/parsers/NLSlashMonthFormatParser.js.map +1 -0
  172. package/dist/locales/nl/parsers/NLTimeExpressionParser.js +1 -0
  173. package/dist/locales/nl/parsers/NLTimeExpressionParser.js.map +1 -0
  174. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js +1 -0
  175. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js.map +1 -0
  176. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +1 -0
  177. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js.map +1 -0
  178. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js +1 -0
  179. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js.map +1 -0
  180. package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js +1 -0
  181. package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js.map +1 -0
  182. package/dist/locales/nl/parsers/NLWeekdayParser.js +4 -9
  183. package/dist/locales/nl/parsers/NLWeekdayParser.js.map +1 -0
  184. package/dist/locales/nl/refiners/NLMergeDateRangeRefiner.js +1 -0
  185. package/dist/locales/nl/refiners/NLMergeDateRangeRefiner.js.map +1 -0
  186. package/dist/locales/nl/refiners/NLMergeDateTimeRefiner.js +1 -0
  187. package/dist/locales/nl/refiners/NLMergeDateTimeRefiner.js.map +1 -0
  188. package/dist/locales/pt/constants.js +1 -0
  189. package/dist/locales/pt/constants.js.map +1 -0
  190. package/dist/locales/pt/index.js +1 -0
  191. package/dist/locales/pt/index.js.map +1 -0
  192. package/dist/locales/pt/parsers/PTCasualDateParser.js +1 -0
  193. package/dist/locales/pt/parsers/PTCasualDateParser.js.map +1 -0
  194. package/dist/locales/pt/parsers/PTCasualTimeParser.js +1 -0
  195. package/dist/locales/pt/parsers/PTCasualTimeParser.js.map +1 -0
  196. package/dist/locales/pt/parsers/PTMonthNameLittleEndianParser.js +1 -0
  197. package/dist/locales/pt/parsers/PTMonthNameLittleEndianParser.js.map +1 -0
  198. package/dist/locales/pt/parsers/PTTimeExpressionParser.js +1 -0
  199. package/dist/locales/pt/parsers/PTTimeExpressionParser.js.map +1 -0
  200. package/dist/locales/pt/parsers/PTWeekdayParser.js +5 -10
  201. package/dist/locales/pt/parsers/PTWeekdayParser.js.map +1 -0
  202. package/dist/locales/pt/refiners/PTMergeDateRangeRefiner.js +1 -0
  203. package/dist/locales/pt/refiners/PTMergeDateRangeRefiner.js.map +1 -0
  204. package/dist/locales/pt/refiners/PTMergeDateTimeRefiner.js +1 -0
  205. package/dist/locales/pt/refiners/PTMergeDateTimeRefiner.js.map +1 -0
  206. package/dist/locales/ru/constants.d.ts +33 -0
  207. package/dist/locales/ru/constants.js +301 -0
  208. package/dist/locales/ru/constants.js.map +1 -0
  209. package/dist/locales/ru/index.d.ts +8 -0
  210. package/dist/locales/ru/index.js +56 -0
  211. package/dist/locales/ru/index.js.map +1 -0
  212. package/dist/locales/ru/parsers/RUCasualDateParser.d.ts +8 -0
  213. package/dist/locales/ru/parsers/RUCasualDateParser.js +52 -0
  214. package/dist/locales/ru/parsers/RUCasualDateParser.js.map +1 -0
  215. package/dist/locales/ru/parsers/RUCasualTimeParser.d.ts +7 -0
  216. package/dist/locales/ru/parsers/RUCasualTimeParser.js +74 -0
  217. package/dist/locales/ru/parsers/RUCasualTimeParser.js.map +1 -0
  218. package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.d.ts +8 -0
  219. package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.js +59 -0
  220. package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.js.map +1 -0
  221. package/dist/locales/ru/parsers/RUMonthNameParser.d.ts +7 -0
  222. package/dist/locales/ru/parsers/RUMonthNameParser.js +45 -0
  223. package/dist/locales/ru/parsers/RUMonthNameParser.js.map +1 -0
  224. package/dist/locales/ru/parsers/RURelativeDateFormatParser.d.ts +8 -0
  225. package/dist/locales/ru/parsers/RURelativeDateFormatParser.js +60 -0
  226. package/dist/locales/ru/parsers/RURelativeDateFormatParser.js.map +1 -0
  227. package/dist/locales/ru/parsers/RUTimeExpressionParser.d.ts +12 -0
  228. package/dist/locales/ru/parsers/RUTimeExpressionParser.js +57 -0
  229. package/dist/locales/ru/parsers/RUTimeExpressionParser.js.map +1 -0
  230. package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.d.ts +8 -0
  231. package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.js +22 -0
  232. package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.js.map +1 -0
  233. package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.d.ts +8 -0
  234. package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js +29 -0
  235. package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js.map +1 -0
  236. package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.d.ts +8 -0
  237. package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.js +22 -0
  238. package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.js.map +1 -0
  239. package/dist/locales/ru/parsers/RUWeekdayParser.d.ts +8 -0
  240. package/dist/locales/ru/parsers/RUWeekdayParser.js +49 -0
  241. package/dist/locales/ru/parsers/RUWeekdayParser.js.map +1 -0
  242. package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.d.ts +4 -0
  243. package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.js +13 -0
  244. package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.js.map +1 -0
  245. package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.d.ts +4 -0
  246. package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.js +13 -0
  247. package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.js.map +1 -0
  248. package/dist/locales/zh/hans/constants.js +1 -0
  249. package/dist/locales/zh/hans/constants.js.map +1 -0
  250. package/dist/locales/zh/hans/index.js +1 -0
  251. package/dist/locales/zh/hans/index.js.map +1 -0
  252. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js +1 -0
  253. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js.map +1 -0
  254. package/dist/locales/zh/hans/parsers/ZHHansDateParser.js +1 -0
  255. package/dist/locales/zh/hans/parsers/ZHHansDateParser.js.map +1 -0
  256. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js +1 -0
  257. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js.map +1 -0
  258. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js +1 -0
  259. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js.map +1 -0
  260. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +1 -0
  261. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js.map +1 -0
  262. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js +1 -0
  263. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js.map +1 -0
  264. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js +1 -0
  265. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js.map +1 -0
  266. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js +1 -0
  267. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js.map +1 -0
  268. package/dist/locales/zh/hant/constants.js +1 -0
  269. package/dist/locales/zh/hant/constants.js.map +1 -0
  270. package/dist/locales/zh/hant/index.js +1 -0
  271. package/dist/locales/zh/hant/index.js.map +1 -0
  272. package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js +1 -0
  273. package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js.map +1 -0
  274. package/dist/locales/zh/hant/parsers/ZHHantDateParser.js +1 -0
  275. package/dist/locales/zh/hant/parsers/ZHHantDateParser.js.map +1 -0
  276. package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js +1 -0
  277. package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js.map +1 -0
  278. package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js +1 -0
  279. package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js.map +1 -0
  280. package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +1 -0
  281. package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js.map +1 -0
  282. package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js +1 -0
  283. package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js.map +1 -0
  284. package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js +1 -0
  285. package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js.map +1 -0
  286. package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js +1 -0
  287. package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js.map +1 -0
  288. package/dist/locales/zh/index.d.ts +1 -1
  289. package/dist/locales/zh/index.js +14 -2
  290. package/dist/locales/zh/index.js.map +1 -0
  291. package/dist/results.d.ts +5 -4
  292. package/dist/results.js +16 -12
  293. package/dist/results.js.map +1 -0
  294. package/dist/timezone.d.ts +1 -1
  295. package/dist/timezone.js +3 -2
  296. package/dist/timezone.js.map +1 -0
  297. package/dist/utils/dayjs.js +1 -0
  298. package/dist/utils/dayjs.js.map +1 -0
  299. package/dist/utils/pattern.js +1 -0
  300. package/dist/utils/pattern.js.map +1 -0
  301. package/dist/utils/timeunits.js +1 -0
  302. package/dist/utils/timeunits.js.map +1 -0
  303. package/package.json +1 -1
  304. package/src/chrono.ts +3 -1
  305. package/src/common/calculation/weekdays.ts +89 -0
  306. package/src/common/casualReferences.ts +64 -9
  307. package/src/common/parsers/AbstractParserWithWordBoundary.ts +5 -1
  308. package/src/common/parsers/AbstractTimeExpressionParser.ts +52 -28
  309. package/src/common/refiners/ExtractTimezoneAbbrRefiner.ts +3 -1
  310. package/src/common/refiners/ExtractTimezoneOffsetRefiner.ts +5 -1
  311. package/src/index.ts +12 -1
  312. package/src/locales/de/constants.ts +42 -22
  313. package/src/locales/de/index.ts +4 -0
  314. package/src/locales/de/parsers/DESpecificTimeExpressionParser.ts +150 -0
  315. package/src/locales/de/parsers/DETimeExpressionParser.ts +4 -23
  316. package/src/locales/de/parsers/DETimeUnitRelativeFormatParser.ts +42 -0
  317. package/src/locales/de/parsers/DEWeekdayParser.ts +2 -8
  318. package/src/locales/en/constants.ts +7 -3
  319. package/src/locales/en/parsers/ENWeekdayParser.ts +3 -9
  320. package/src/locales/fr/parsers/FRTimeUnitWithinFormatParser.ts +1 -1
  321. package/src/locales/fr/parsers/FRWeekdayParser.ts +4 -10
  322. package/src/locales/nl/parsers/NLWeekdayParser.ts +3 -9
  323. package/src/locales/pt/parsers/PTWeekdayParser.ts +4 -10
  324. package/src/locales/ru/constants.ts +342 -0
  325. package/src/locales/ru/index.ts +84 -0
  326. package/src/locales/ru/parsers/RUCasualDateParser.ts +44 -0
  327. package/src/locales/ru/parsers/RUCasualTimeParser.ts +56 -0
  328. package/src/locales/ru/parsers/RUMonthNameLittleEndianParser.ts +72 -0
  329. package/src/locales/ru/parsers/RUMonthNameParser.ts +61 -0
  330. package/src/locales/ru/parsers/RURelativeDateFormatParser.ts +75 -0
  331. package/src/locales/ru/parsers/RUTimeExpressionParser.ts +64 -0
  332. package/src/locales/ru/parsers/RUTimeUnitAgoFormatParser.ts +24 -0
  333. package/src/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.ts +34 -0
  334. package/src/locales/ru/parsers/RUTimeUnitWithinFormatParser.ts +24 -0
  335. package/src/locales/ru/parsers/RUWeekdayParser.ts +57 -0
  336. package/src/locales/ru/refiners/RUMergeDateRangeRefiner.ts +13 -0
  337. package/src/locales/ru/refiners/RUMergeDateTimeRefiner.ts +13 -0
  338. package/src/locales/zh/index.ts +1 -1
  339. package/src/results.ts +32 -21
  340. package/src/timezone.ts +3 -3
  341. package/src/utils/timeunits.ts +2 -2
  342. package/test/calculation.test.ts +116 -0
  343. package/test/de/de_month_name_little_endian.test.ts +12 -0
  344. package/test/de/de_time_exp.test.ts +59 -0
  345. package/test/de/de_time_units_casual_relative.test.ts +108 -0
  346. package/test/de/de_year.test.ts +147 -0
  347. package/test/en/en.test.ts +10 -0
  348. package/test/en/en_relative.test.ts +47 -2
  349. package/test/en/en_time_units_ago.test.ts +3 -3
  350. package/test/en/en_time_units_within.test.ts +2 -2
  351. package/test/en/en_timezone_exp.test.ts +30 -3
  352. package/test/en/en_weekday.test.ts +116 -1
  353. package/test/en/negative_cases.test.ts +8 -0
  354. package/test/fr/fr_time_units_ago.test.ts +3 -3
  355. package/test/fr/fr_time_units_within.test.ts +9 -2
  356. package/test/nl/nl_relative.test.ts +2 -2
  357. package/test/nl/nl_time_units_ago.test.ts +3 -3
  358. package/test/ru/ru_casual.test.ts +147 -0
  359. package/test/ru/ru_month.test.ts +70 -0
  360. package/test/ru/ru_month_name_little_endian.test.ts +145 -0
  361. package/test/ru/ru_relative.test.ts +74 -0
  362. package/test/ru/ru_time_exp.test.ts +111 -0
  363. package/test/ru/ru_time_units_ago.test.ts +48 -0
  364. package/test/ru/ru_time_units_casual_relative.test.ts +112 -0
  365. package/test/ru/ru_time_units_within.test.ts +16 -0
  366. package/test/ru/ru_weekday.test.ts +52 -0
  367. package/test/system_timezone.test.ts +22 -0
  368. package/tsconfig.json +1 -1
  369. package/src/calculation/weeks.ts +0 -38
@@ -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, parseYear } 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 RUMonthNameLittleEndianParser 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 = parseYear(match[YEAR_GROUP]);
57
+ result.start.assign("year", yearNumber);
58
+ } else {
59
+ const year = findYearClosestToRef(context.refDate, 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, parseYear } 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
+ * - Январь, 2012
25
+ * - Январь 2012
26
+ * - Январь
27
+ */
28
+ export default class RUMonthNameParser 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 = parseYear(match[YEAR_GROUP]);
53
+ result.start.assign("year", year);
54
+ } else {
55
+ const year = findYearClosestToRef(context.refDate, 1, month);
56
+ result.start.imply("year", year);
57
+ }
58
+
59
+ return result;
60
+ }
61
+ }
@@ -0,0 +1,75 @@
1
+ import { REGEX_PARTS, TIME_UNIT_DICTIONARY } from "../constants";
2
+ import { ParsingContext } from "../../../chrono";
3
+ import { ParsingComponents } from "../../../results";
4
+ import dayjs from "dayjs";
5
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
6
+ import { matchAnyPattern } from "../../../utils/pattern";
7
+
8
+ const PATTERN = new RegExp(
9
+ `(в прошлом|на прошлой|на следующей|в следующем|на этой|в этом)\\s*(${matchAnyPattern(
10
+ TIME_UNIT_DICTIONARY
11
+ )})(?=\\s*)${REGEX_PARTS.rightBoundary}`,
12
+ REGEX_PARTS.flags
13
+ );
14
+
15
+ const MODIFIER_WORD_GROUP = 1;
16
+ const RELATIVE_WORD_GROUP = 2;
17
+
18
+ export default class RURelativeDateFormatParser extends AbstractParserWithWordBoundaryChecking {
19
+ patternLeftBoundary(): string {
20
+ return REGEX_PARTS.leftBoundary;
21
+ }
22
+
23
+ innerPattern(): RegExp {
24
+ return PATTERN;
25
+ }
26
+
27
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
28
+ const modifier = match[MODIFIER_WORD_GROUP].toLowerCase();
29
+ const unitWord = match[RELATIVE_WORD_GROUP].toLowerCase();
30
+ const timeunit = TIME_UNIT_DICTIONARY[unitWord];
31
+
32
+ if (modifier == "на следующей" || modifier == "в следующем") {
33
+ const timeUnits = {};
34
+ timeUnits[timeunit] = 1;
35
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
36
+ }
37
+
38
+ if (modifier == "в прошлом" || modifier == "на прошлой") {
39
+ const timeUnits = {};
40
+ timeUnits[timeunit] = -1;
41
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
42
+ }
43
+
44
+ const components = context.createParsingComponents();
45
+ let date = dayjs(context.reference.instant);
46
+
47
+ // This week
48
+ if (timeunit.match(/week/i)) {
49
+ date = date.add(-date.get("d"), "d");
50
+ components.imply("day", date.date());
51
+ components.imply("month", date.month() + 1);
52
+ components.imply("year", date.year());
53
+ }
54
+
55
+ // This month
56
+ else if (timeunit.match(/month/i)) {
57
+ date = date.add(-date.date() + 1, "d");
58
+ components.imply("day", date.date());
59
+ components.assign("year", date.year());
60
+ components.assign("month", date.month() + 1);
61
+ }
62
+
63
+ // This year
64
+ else if (timeunit.match(/year/i)) {
65
+ date = date.add(-date.date() + 1, "d");
66
+ date = date.add(-date.month(), "month");
67
+
68
+ components.imply("day", date.date());
69
+ components.imply("month", date.month() + 1);
70
+ components.assign("year", date.year());
71
+ }
72
+
73
+ return components;
74
+ }
75
+ }
@@ -0,0 +1,64 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingComponents } from "../../../results";
3
+ import { Meridiem } from "../../../index";
4
+ import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser";
5
+ import { REGEX_PARTS } from "../constants";
6
+
7
+ export default class RUTimeExpressionParser extends AbstractTimeExpressionParser {
8
+ constructor(strictMode) {
9
+ super(strictMode);
10
+ }
11
+
12
+ patternFlags(): string {
13
+ return REGEX_PARTS.flags;
14
+ }
15
+
16
+ primaryPatternLeftBoundary(): string {
17
+ return `(^|\\s|T|(?:[^\\p{L}\\p{N}_]))`;
18
+ }
19
+
20
+ followingPhase(): string {
21
+ return `\\s*(?:\\-|\\–|\\~|\\〜|до|и|по|\\?)\\s*`;
22
+ }
23
+
24
+ primaryPrefix(): string {
25
+ return `(?:(?:в|с)\\s*)??`;
26
+ }
27
+
28
+ primarySuffix(): string {
29
+ return `(?:\\s*(?:утра|вечера|после полудня))?(?!\\/)${REGEX_PARTS.rightBoundary}`;
30
+ }
31
+
32
+ extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): null | ParsingComponents {
33
+ const components = super.extractPrimaryTimeComponents(context, match);
34
+ if (components) {
35
+ if (match[0].endsWith("вечера")) {
36
+ const hour = components.get("hour");
37
+ if (hour >= 6 && hour < 12) {
38
+ components.assign("hour", components.get("hour") + 12);
39
+ components.assign("meridiem", Meridiem.PM);
40
+ } else if (hour < 6) {
41
+ components.assign("meridiem", Meridiem.AM);
42
+ }
43
+ }
44
+
45
+ if (match[0].endsWith("после полудня")) {
46
+ components.assign("meridiem", Meridiem.PM);
47
+ const hour = components.get("hour");
48
+ if (hour >= 0 && hour <= 6) {
49
+ components.assign("hour", components.get("hour") + 12);
50
+ }
51
+ }
52
+
53
+ if (match[0].endsWith("утра")) {
54
+ components.assign("meridiem", Meridiem.AM);
55
+ const hour = components.get("hour");
56
+ if (hour < 12) {
57
+ components.assign("hour", components.get("hour"));
58
+ }
59
+ }
60
+ }
61
+
62
+ return components;
63
+ }
64
+ }
@@ -0,0 +1,24 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { parseTimeUnits, REGEX_PARTS, TIME_UNITS_PATTERN } from "../constants";
3
+ import { ParsingComponents } from "../../../results";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
5
+ import { reverseTimeUnits } from "../../../utils/timeunits";
6
+
7
+ const PATTERN = new RegExp(`(${TIME_UNITS_PATTERN})\\s{0,5}назад(?=(?:\\W|$))`, REGEX_PARTS.flags);
8
+
9
+ export default class RUTimeUnitAgoFormatParser extends AbstractParserWithWordBoundaryChecking {
10
+ patternLeftBoundary(): string {
11
+ return REGEX_PARTS.leftBoundary;
12
+ }
13
+
14
+ innerPattern(): RegExp {
15
+ return PATTERN;
16
+ }
17
+
18
+ innerExtract(context: ParsingContext, match: RegExpMatchArray) {
19
+ const timeUnits = parseTimeUnits(match[1]);
20
+ const outputTimeUnits = reverseTimeUnits(timeUnits);
21
+
22
+ return ParsingComponents.createRelativeFromReference(context.reference, outputTimeUnits);
23
+ }
24
+ }
@@ -0,0 +1,34 @@
1
+ import { TIME_UNITS_PATTERN, parseTimeUnits, REGEX_PARTS } from "../constants";
2
+ import { ParsingContext } from "../../../chrono";
3
+ import { ParsingComponents } from "../../../results";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
5
+ import { reverseTimeUnits } from "../../../utils/timeunits";
6
+
7
+ const PATTERN = new RegExp(
8
+ `(эти|последние|прошлые|следующие|после|через|\\+|-)\\s*(${TIME_UNITS_PATTERN})${REGEX_PARTS.rightBoundary}`,
9
+ REGEX_PARTS.flags
10
+ );
11
+
12
+ export default class RUTimeUnitCasualRelativeFormatParser extends AbstractParserWithWordBoundaryChecking {
13
+ patternLeftBoundary(): string {
14
+ return REGEX_PARTS.leftBoundary;
15
+ }
16
+
17
+ innerPattern(): RegExp {
18
+ return PATTERN;
19
+ }
20
+
21
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
22
+ const prefix = match[1].toLowerCase();
23
+ let timeUnits = parseTimeUnits(match[2]);
24
+ switch (prefix) {
25
+ case "последние":
26
+ case "прошлые":
27
+ case "-":
28
+ timeUnits = reverseTimeUnits(timeUnits);
29
+ break;
30
+ }
31
+
32
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
33
+ }
34
+ }
@@ -0,0 +1,24 @@
1
+ import { TIME_UNITS_PATTERN, parseTimeUnits, REGEX_PARTS } from "../constants";
2
+ import { ParsingContext } from "../../../chrono";
3
+ import { ParsingComponents } from "../../../results";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
5
+
6
+ const PATTERN = `(?:(?:около|примерно)\\s*(?:~\\s*)?)?(${TIME_UNITS_PATTERN})${REGEX_PARTS.rightBoundary}`;
7
+ const PATTERN_WITH_PREFIX = new RegExp(`(?:в течение|в течении)\\s*${PATTERN}`, REGEX_PARTS.flags);
8
+
9
+ const PATTERN_WITHOUT_PREFIX = new RegExp(PATTERN, "i");
10
+
11
+ export default class RUTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
12
+ patternLeftBoundary(): string {
13
+ return REGEX_PARTS.leftBoundary;
14
+ }
15
+
16
+ innerPattern(context: ParsingContext): RegExp {
17
+ return context.option.forwardDate ? PATTERN_WITHOUT_PREFIX : PATTERN_WITH_PREFIX;
18
+ }
19
+
20
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
21
+ const timeUnits = parseTimeUnits(match[1]);
22
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
23
+ }
24
+ }
@@ -0,0 +1,57 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingComponents } from "../../../results";
3
+ import { REGEX_PARTS, WEEKDAY_DICTIONARY } from "../constants";
4
+ import { matchAnyPattern } from "../../../utils/pattern";
5
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
6
+ import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays";
7
+
8
+ const PATTERN = new RegExp(
9
+ `(?:(?:,|\\(|()\\s*)?` +
10
+ `(?:в\\s*?)?` +
11
+ `(?:(эту|этот|прошлый|прошлую|следующий|следующую|следующего)\\s*)?` +
12
+ `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
13
+ `(?:\\s*(?:,|\\)|)))?` +
14
+ `(?:\\s*на\\s*(этой|прошлой|следующей)\\s*неделе)?` +
15
+ `${REGEX_PARTS.rightBoundary}`,
16
+ REGEX_PARTS.flags
17
+ );
18
+
19
+ const PREFIX_GROUP = 1;
20
+ const WEEKDAY_GROUP = 2;
21
+ const POSTFIX_GROUP = 3;
22
+
23
+ export default class RUWeekdayParser extends AbstractParserWithWordBoundaryChecking {
24
+ innerPattern(): RegExp {
25
+ return PATTERN;
26
+ }
27
+
28
+ patternLeftBoundary(): string {
29
+ return REGEX_PARTS.leftBoundary;
30
+ }
31
+
32
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
33
+ const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();
34
+ const weekday = WEEKDAY_DICTIONARY[dayOfWeek];
35
+ const prefix = match[PREFIX_GROUP];
36
+ const postfix = match[POSTFIX_GROUP];
37
+ let modifierWord = prefix || postfix;
38
+ modifierWord = modifierWord || "";
39
+ modifierWord = modifierWord.toLowerCase();
40
+
41
+ let modifier = null;
42
+ if (modifierWord == "прошлый" || modifierWord == "прошлую" || modifierWord == "прошлой") {
43
+ modifier = "last";
44
+ } else if (
45
+ modifierWord == "следующий" ||
46
+ modifierWord == "следующую" ||
47
+ modifierWord == "следующей" ||
48
+ modifierWord == "следующего"
49
+ ) {
50
+ modifier = "next";
51
+ } else if (modifierWord == "этот" || modifierWord == "эту" || modifierWord == "этой") {
52
+ modifier = "this";
53
+ }
54
+
55
+ return createParsingComponentsAtWeekday(context.reference, weekday, modifier);
56
+ }
57
+ }
@@ -0,0 +1,13 @@
1
+ import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMergeDateRangeRefiner";
2
+
3
+ /**
4
+ * Merging before and after results (see. AbstractMergeDateRangeRefiner)
5
+ * This implementation should provide Russian connecting phases
6
+ * - c 06.09.1989 [до|по] 11.12.1996
7
+ * - c пятницы и до среды
8
+ */
9
+ export default class RUMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {
10
+ patternBetween(): RegExp {
11
+ return /^\s*(и до|и по|до|по|-)\s*$/i;
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import AbstractMergeDateTimeRefiner from "../../../common/refiners/AbstractMergeDateTimeRefiner";
2
+
3
+ /**
4
+ * Merging date-only result and time-only result (see. AbstractMergeDateTimeRefiner).
5
+ * This implementation should provide English connecting phases
6
+ * - 2020-02-13 [в] 6:00
7
+ * - Завтра [,] 7:00
8
+ */
9
+ export default class RUMergeDateTimeRefiner extends AbstractMergeDateTimeRefiner {
10
+ patternBetween(): RegExp {
11
+ return new RegExp(`^\\s*(T|в|,|-)?\\s*$`);
12
+ }
13
+ }
@@ -1,2 +1,2 @@
1
1
  export * from "./hant";
2
- export { hans } from "./hans";
2
+ export * as hans from "./hans";
package/src/results.ts CHANGED
@@ -1,25 +1,49 @@
1
1
  import { Component, ParsedComponents, ParsedResult, ParsingReference } from "./index";
2
2
 
3
3
  import quarterOfYear from "dayjs/plugin/quarterOfYear";
4
- import dayjs, { OpUnitType, QUnitType } from "dayjs";
4
+ import dayjs, { QUnitType } from "dayjs";
5
5
  import { assignSimilarDate, assignSimilarTime, implySimilarTime } from "./utils/dayjs";
6
6
  import { toTimezoneOffset } from "./timezone";
7
7
  dayjs.extend(quarterOfYear);
8
8
 
9
9
  export class ReferenceWithTimezone {
10
10
  readonly instant: Date;
11
- readonly timezoneOffset?: number;
11
+ readonly timezoneOffset?: number | null;
12
12
 
13
13
  constructor(input?: ParsingReference | Date) {
14
14
  input = input ?? new Date();
15
15
  if (input instanceof Date) {
16
16
  this.instant = input;
17
- this.timezoneOffset = -input.getTimezoneOffset();
18
17
  } else {
19
18
  this.instant = input.instant ?? new Date();
20
19
  this.timezoneOffset = toTimezoneOffset(input.timezone);
21
20
  }
22
21
  }
22
+
23
+ /**
24
+ * Returns a JS date (system timezone) with the { year, month, day, hour, minute, second } equal to the reference.
25
+ * The output's instant is NOT the reference's instant when the reference's and system's timezone are different.
26
+ */
27
+ getDateWithAdjustedTimezone() {
28
+ return new Date(this.instant.getTime() + this.getSystemTimezoneAdjustmentMinute(this.instant) * 60000);
29
+ }
30
+
31
+ /**
32
+ * Returns the number minutes difference between the JS date's timezone and the reference timezone.
33
+ * @param date
34
+ * @param overrideTimezoneOffset
35
+ */
36
+ getSystemTimezoneAdjustmentMinute(date?: Date, overrideTimezoneOffset?: number): number {
37
+ if (!date || date.getTime() < 0) {
38
+ // Javascript date timezone calculation got effect when the time epoch < 0
39
+ // e.g. new Date('Tue Feb 02 1300 00:00:00 GMT+0900 (JST)') => Tue Feb 02 1300 00:18:59 GMT+0918 (JST)
40
+ date = new Date();
41
+ }
42
+
43
+ const currentTimezoneOffset = -date.getTimezoneOffset();
44
+ const targetTimezoneOffset = overrideTimezoneOffset ?? this.timezoneOffset ?? currentTimezoneOffset;
45
+ return currentTimezoneOffset - targetTimezoneOffset;
46
+ }
23
47
  }
24
48
 
25
49
  export class ParsingComponents implements ParsedComponents {
@@ -133,7 +157,7 @@ export class ParsingComponents implements ParsedComponents {
133
157
  toString() {
134
158
  return `[ParsingComponents {knownValues: ${JSON.stringify(this.knownValues)}, impliedValues: ${JSON.stringify(
135
159
  this.impliedValues
136
- )}}]`;
160
+ )}}, reference: ${JSON.stringify(this.reference)}]`;
137
161
  }
138
162
 
139
163
  dayjs() {
@@ -142,7 +166,8 @@ export class ParsingComponents implements ParsedComponents {
142
166
 
143
167
  date(): Date {
144
168
  const date = this.dateWithoutTimezoneAdjustment();
145
- return new Date(date.getTime() + this.getSystemTimezoneAdjustmentMinute(date) * 60000);
169
+ const timezoneAdjustment = this.reference.getSystemTimezoneAdjustmentMinute(date, this.get("timezoneOffset"));
170
+ return new Date(date.getTime() + timezoneAdjustment * 60000);
146
171
  }
147
172
 
148
173
  private dateWithoutTimezoneAdjustment() {
@@ -160,27 +185,13 @@ export class ParsingComponents implements ParsedComponents {
160
185
  return date;
161
186
  }
162
187
 
163
- private getSystemTimezoneAdjustmentMinute(date?: Date) {
164
- if (!date || date.getTime() < 0) {
165
- // Javascript date timezone calculation got effect when the time epoch < 0
166
- // e.g. new Date('Tue Feb 02 1300 00:00:00 GMT+0900 (JST)') => Tue Feb 02 1300 00:18:59 GMT+0918 (JST)
167
- date = new Date();
168
- }
169
-
170
- const currentTimezoneOffset = -date.getTimezoneOffset();
171
- const targetTimezoneOffset =
172
- this.get("timezoneOffset") ?? this.reference.timezoneOffset ?? currentTimezoneOffset;
173
-
174
- return currentTimezoneOffset - targetTimezoneOffset;
175
- }
176
-
177
188
  static createRelativeFromReference(
178
189
  reference: ReferenceWithTimezone,
179
- fragments: { [c in OpUnitType | QUnitType]?: number }
190
+ fragments: { [c in QUnitType]?: number }
180
191
  ): ParsingComponents {
181
192
  let date = dayjs(reference.instant);
182
193
  for (const key in fragments) {
183
- date = date.add(fragments[key as OpUnitType], key as OpUnitType);
194
+ date = date.add(fragments[key as QUnitType], key as QUnitType);
184
195
  }
185
196
 
186
197
  const components = new ParsingComponents(reference);
package/src/timezone.ts CHANGED
@@ -192,8 +192,8 @@ export const TIMEZONE_ABBR_MAP = {
192
192
  YEKT: 360,
193
193
  };
194
194
 
195
- export function toTimezoneOffset(timezoneInput: string | number): number | null {
196
- if (timezoneInput === null) {
195
+ export function toTimezoneOffset(timezoneInput?: string | number): number | null {
196
+ if (timezoneInput === null || timezoneInput === undefined) {
197
197
  return null;
198
198
  }
199
199
 
@@ -201,5 +201,5 @@ export function toTimezoneOffset(timezoneInput: string | number): number | null
201
201
  return timezoneInput;
202
202
  }
203
203
 
204
- return TIMEZONE_ABBR_MAP[timezoneInput] ?? 0;
204
+ return TIMEZONE_ABBR_MAP[timezoneInput] ?? null;
205
205
  }
@@ -18,8 +18,8 @@ export function addImpliedTimeUnits(components: ParsingComponents, timeUnits: Ti
18
18
 
19
19
  let date = components.dayjs();
20
20
  for (const key in timeUnits) {
21
- // noinspection JSUnfilteredForInLoop
22
- date = date.add(timeUnits[key], key as OpUnitType);
21
+ // noinspection JSUnfilteredForInLoop,TypeScriptValidateTypes
22
+ date = date.add(timeUnits[key], key as QUnitType);
23
23
  }
24
24
 
25
25
  if ("day" in timeUnits || "d" in timeUnits || "week" in timeUnits || "month" in timeUnits || "year" in timeUnits) {