chrono-node 2.3.6 → 2.3.9

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 (362) hide show
  1. package/README.md +3 -3
  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/casualReferences.d.ts +8 -0
  13. package/dist/common/casualReferences.js +65 -9
  14. package/dist/common/casualReferences.js.map +1 -0
  15. package/dist/common/parsers/AbstractParserWithWordBoundary.d.ts +1 -0
  16. package/dist/common/parsers/AbstractParserWithWordBoundary.js +5 -1
  17. package/dist/common/parsers/AbstractParserWithWordBoundary.js.map +1 -0
  18. package/dist/common/parsers/AbstractTimeExpressionParser.d.ts +2 -0
  19. package/dist/common/parsers/AbstractTimeExpressionParser.js +40 -27
  20. package/dist/common/parsers/AbstractTimeExpressionParser.js.map +1 -0
  21. package/dist/common/parsers/ISOFormatParser.js +1 -0
  22. package/dist/common/parsers/ISOFormatParser.js.map +1 -0
  23. package/dist/common/parsers/SlashDateFormatParser.js +1 -0
  24. package/dist/common/parsers/SlashDateFormatParser.js.map +1 -0
  25. package/dist/common/refiners/AbstractMergeDateRangeRefiner.js +1 -0
  26. package/dist/common/refiners/AbstractMergeDateRangeRefiner.js.map +1 -0
  27. package/dist/common/refiners/AbstractMergeDateTimeRefiner.js +1 -0
  28. package/dist/common/refiners/AbstractMergeDateTimeRefiner.js.map +1 -0
  29. package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js +2 -1
  30. package/dist/common/refiners/ExtractTimezoneAbbrRefiner.js.map +1 -0
  31. package/dist/common/refiners/ExtractTimezoneOffsetRefiner.js +5 -1
  32. package/dist/common/refiners/ExtractTimezoneOffsetRefiner.js.map +1 -0
  33. package/dist/common/refiners/ForwardDateRefiner.js +1 -0
  34. package/dist/common/refiners/ForwardDateRefiner.js.map +1 -0
  35. package/dist/common/refiners/MergeWeekdayComponentRefiner.js +1 -0
  36. package/dist/common/refiners/MergeWeekdayComponentRefiner.js.map +1 -0
  37. package/dist/common/refiners/OverlapRemovalRefiner.js +1 -0
  38. package/dist/common/refiners/OverlapRemovalRefiner.js.map +1 -0
  39. package/dist/common/refiners/UnlikelyFormatFilter.js +1 -0
  40. package/dist/common/refiners/UnlikelyFormatFilter.js.map +1 -0
  41. package/dist/configurations.js +1 -0
  42. package/dist/configurations.js.map +1 -0
  43. package/dist/debugging.js +1 -0
  44. package/dist/debugging.js.map +1 -0
  45. package/dist/index.d.ts +2 -1
  46. package/dist/index.js +4 -1
  47. package/dist/index.js.map +1 -0
  48. package/dist/locales/de/constants.d.ts +3 -3
  49. package/dist/locales/de/constants.js +39 -20
  50. package/dist/locales/de/constants.js.map +1 -0
  51. package/dist/locales/de/index.js +5 -0
  52. package/dist/locales/de/index.js.map +1 -0
  53. package/dist/locales/de/parsers/DECasualDateParser.js +1 -0
  54. package/dist/locales/de/parsers/DECasualDateParser.js.map +1 -0
  55. package/dist/locales/de/parsers/DECasualTimeParser.js +1 -0
  56. package/dist/locales/de/parsers/DECasualTimeParser.js.map +1 -0
  57. package/dist/locales/de/parsers/DEMonthNameLittleEndianParser.js +1 -0
  58. package/dist/locales/de/parsers/DEMonthNameLittleEndianParser.js.map +1 -0
  59. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.d.ts +7 -0
  60. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js +115 -0
  61. package/dist/locales/de/parsers/DESpecificTimeExpressionParser.js.map +1 -0
  62. package/dist/locales/de/parsers/DETimeExpressionParser.d.ts +0 -1
  63. package/dist/locales/de/parsers/DETimeExpressionParser.js +4 -21
  64. package/dist/locales/de/parsers/DETimeExpressionParser.js.map +1 -0
  65. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.d.ts +8 -0
  66. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js +35 -0
  67. package/dist/locales/de/parsers/DETimeUnitRelativeFormatParser.js.map +1 -0
  68. package/dist/locales/de/parsers/DEWeekdayParser.js +1 -0
  69. package/dist/locales/de/parsers/DEWeekdayParser.js.map +1 -0
  70. package/dist/locales/de/refiners/DEMergeDateRangeRefiner.js +1 -0
  71. package/dist/locales/de/refiners/DEMergeDateRangeRefiner.js.map +1 -0
  72. package/dist/locales/de/refiners/DEMergeDateTimeRefiner.js +1 -0
  73. package/dist/locales/de/refiners/DEMergeDateTimeRefiner.js.map +1 -0
  74. package/dist/locales/en/constants.d.ts +2 -2
  75. package/dist/locales/en/constants.js +4 -0
  76. package/dist/locales/en/constants.js.map +1 -0
  77. package/dist/locales/en/index.js +3 -1
  78. package/dist/locales/en/index.js.map +1 -0
  79. package/dist/locales/en/parsers/ENCasualDateParser.js +1 -0
  80. package/dist/locales/en/parsers/ENCasualDateParser.js.map +1 -0
  81. package/dist/locales/en/parsers/ENCasualTimeParser.js +1 -0
  82. package/dist/locales/en/parsers/ENCasualTimeParser.js.map +1 -0
  83. package/dist/locales/en/parsers/ENCasualYearMonthDayParser.js +1 -0
  84. package/dist/locales/en/parsers/ENCasualYearMonthDayParser.js.map +1 -0
  85. package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js +1 -0
  86. package/dist/locales/en/parsers/ENMonthNameLittleEndianParser.js.map +1 -0
  87. package/dist/locales/en/parsers/ENMonthNameMiddleEndianParser.js +1 -0
  88. package/dist/locales/en/parsers/ENMonthNameMiddleEndianParser.js.map +1 -0
  89. package/dist/locales/en/parsers/ENMonthNameParser.js +1 -0
  90. package/dist/locales/en/parsers/ENMonthNameParser.js.map +1 -0
  91. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js +3 -2
  92. package/dist/locales/en/parsers/ENRelativeDateFormatParser.js.map +1 -0
  93. package/dist/locales/en/parsers/ENSlashMonthFormatParser.js +1 -0
  94. package/dist/locales/en/parsers/ENSlashMonthFormatParser.js.map +1 -0
  95. package/dist/locales/en/parsers/ENTimeExpressionParser.js +1 -0
  96. package/dist/locales/en/parsers/ENTimeExpressionParser.js.map +1 -0
  97. package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js +1 -0
  98. package/dist/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -0
  99. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +2 -1
  100. package/dist/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -0
  101. package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js +1 -0
  102. package/dist/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -0
  103. package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js +1 -0
  104. package/dist/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -0
  105. package/dist/locales/en/parsers/ENWeekdayParser.js +1 -0
  106. package/dist/locales/en/parsers/ENWeekdayParser.js.map +1 -0
  107. package/dist/locales/en/refiners/ENMergeDateRangeRefiner.js +1 -0
  108. package/dist/locales/en/refiners/ENMergeDateRangeRefiner.js.map +1 -0
  109. package/dist/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -0
  110. package/dist/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -0
  111. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.d.ts +7 -0
  112. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js +36 -0
  113. package/dist/locales/en/refiners/ENMergeRelativeDateRefiner.js.map +1 -0
  114. package/dist/locales/fr/constants.js +1 -0
  115. package/dist/locales/fr/constants.js.map +1 -0
  116. package/dist/locales/fr/index.js +1 -0
  117. package/dist/locales/fr/index.js.map +1 -0
  118. package/dist/locales/fr/parsers/FRCasualDateParser.js +1 -0
  119. package/dist/locales/fr/parsers/FRCasualDateParser.js.map +1 -0
  120. package/dist/locales/fr/parsers/FRCasualTimeParser.js +1 -0
  121. package/dist/locales/fr/parsers/FRCasualTimeParser.js.map +1 -0
  122. package/dist/locales/fr/parsers/FRMonthNameLittleEndianParser.js +1 -0
  123. package/dist/locales/fr/parsers/FRMonthNameLittleEndianParser.js.map +1 -0
  124. package/dist/locales/fr/parsers/FRSpecificTimeExpressionParser.js +1 -0
  125. package/dist/locales/fr/parsers/FRSpecificTimeExpressionParser.js.map +1 -0
  126. package/dist/locales/fr/parsers/FRTimeExpressionParser.js +1 -0
  127. package/dist/locales/fr/parsers/FRTimeExpressionParser.js.map +1 -0
  128. package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js +1 -0
  129. package/dist/locales/fr/parsers/FRTimeUnitAgoFormatParser.js.map +1 -0
  130. package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js +1 -0
  131. package/dist/locales/fr/parsers/FRTimeUnitRelativeFormatParser.js.map +1 -0
  132. package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js +2 -1
  133. package/dist/locales/fr/parsers/FRTimeUnitWithinFormatParser.js.map +1 -0
  134. package/dist/locales/fr/parsers/FRWeekdayParser.js +1 -0
  135. package/dist/locales/fr/parsers/FRWeekdayParser.js.map +1 -0
  136. package/dist/locales/fr/refiners/FRMergeDateRangeRefiner.js +1 -0
  137. package/dist/locales/fr/refiners/FRMergeDateRangeRefiner.js.map +1 -0
  138. package/dist/locales/fr/refiners/FRMergeDateTimeRefiner.js +1 -0
  139. package/dist/locales/fr/refiners/FRMergeDateTimeRefiner.js.map +1 -0
  140. package/dist/locales/ja/constants.js +1 -0
  141. package/dist/locales/ja/constants.js.map +1 -0
  142. package/dist/locales/ja/index.js +1 -0
  143. package/dist/locales/ja/index.js.map +1 -0
  144. package/dist/locales/ja/parsers/JPCasualDateParser.js +1 -0
  145. package/dist/locales/ja/parsers/JPCasualDateParser.js.map +1 -0
  146. package/dist/locales/ja/parsers/JPStandardParser.js +1 -0
  147. package/dist/locales/ja/parsers/JPStandardParser.js.map +1 -0
  148. package/dist/locales/ja/refiners/JPMergeDateRangeRefiner.js +1 -0
  149. package/dist/locales/ja/refiners/JPMergeDateRangeRefiner.js.map +1 -0
  150. package/dist/locales/nl/constants.js +1 -0
  151. package/dist/locales/nl/constants.js.map +1 -0
  152. package/dist/locales/nl/index.js +1 -0
  153. package/dist/locales/nl/index.js.map +1 -0
  154. package/dist/locales/nl/parsers/NLCasualDateParser.js +1 -0
  155. package/dist/locales/nl/parsers/NLCasualDateParser.js.map +1 -0
  156. package/dist/locales/nl/parsers/NLCasualDateTimeParser.js +1 -0
  157. package/dist/locales/nl/parsers/NLCasualDateTimeParser.js.map +1 -0
  158. package/dist/locales/nl/parsers/NLCasualTimeParser.js +1 -0
  159. package/dist/locales/nl/parsers/NLCasualTimeParser.js.map +1 -0
  160. package/dist/locales/nl/parsers/NLCasualYearMonthDayParser.js +1 -0
  161. package/dist/locales/nl/parsers/NLCasualYearMonthDayParser.js.map +1 -0
  162. package/dist/locales/nl/parsers/NLMonthNameMiddleEndianParser.js +1 -0
  163. package/dist/locales/nl/parsers/NLMonthNameMiddleEndianParser.js.map +1 -0
  164. package/dist/locales/nl/parsers/NLMonthNameParser.js +1 -0
  165. package/dist/locales/nl/parsers/NLMonthNameParser.js.map +1 -0
  166. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js +1 -0
  167. package/dist/locales/nl/parsers/NLRelativeDateFormatParser.js.map +1 -0
  168. package/dist/locales/nl/parsers/NLSlashMonthFormatParser.js +1 -0
  169. package/dist/locales/nl/parsers/NLSlashMonthFormatParser.js.map +1 -0
  170. package/dist/locales/nl/parsers/NLTimeExpressionParser.js +1 -0
  171. package/dist/locales/nl/parsers/NLTimeExpressionParser.js.map +1 -0
  172. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js +1 -0
  173. package/dist/locales/nl/parsers/NLTimeUnitAgoFormatParser.js.map +1 -0
  174. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js +1 -0
  175. package/dist/locales/nl/parsers/NLTimeUnitCasualRelativeFormatParser.js.map +1 -0
  176. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js +1 -0
  177. package/dist/locales/nl/parsers/NLTimeUnitLaterFormatParser.js.map +1 -0
  178. package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js +1 -0
  179. package/dist/locales/nl/parsers/NLTimeUnitWithinFormatParser.js.map +1 -0
  180. package/dist/locales/nl/parsers/NLWeekdayParser.js +1 -0
  181. package/dist/locales/nl/parsers/NLWeekdayParser.js.map +1 -0
  182. package/dist/locales/nl/refiners/NLMergeDateRangeRefiner.js +1 -0
  183. package/dist/locales/nl/refiners/NLMergeDateRangeRefiner.js.map +1 -0
  184. package/dist/locales/nl/refiners/NLMergeDateTimeRefiner.js +1 -0
  185. package/dist/locales/nl/refiners/NLMergeDateTimeRefiner.js.map +1 -0
  186. package/dist/locales/pt/constants.js +1 -0
  187. package/dist/locales/pt/constants.js.map +1 -0
  188. package/dist/locales/pt/index.js +1 -0
  189. package/dist/locales/pt/index.js.map +1 -0
  190. package/dist/locales/pt/parsers/PTCasualDateParser.js +1 -0
  191. package/dist/locales/pt/parsers/PTCasualDateParser.js.map +1 -0
  192. package/dist/locales/pt/parsers/PTCasualTimeParser.js +1 -0
  193. package/dist/locales/pt/parsers/PTCasualTimeParser.js.map +1 -0
  194. package/dist/locales/pt/parsers/PTMonthNameLittleEndianParser.js +1 -0
  195. package/dist/locales/pt/parsers/PTMonthNameLittleEndianParser.js.map +1 -0
  196. package/dist/locales/pt/parsers/PTTimeExpressionParser.js +1 -0
  197. package/dist/locales/pt/parsers/PTTimeExpressionParser.js.map +1 -0
  198. package/dist/locales/pt/parsers/PTWeekdayParser.js +1 -0
  199. package/dist/locales/pt/parsers/PTWeekdayParser.js.map +1 -0
  200. package/dist/locales/pt/refiners/PTMergeDateRangeRefiner.js +1 -0
  201. package/dist/locales/pt/refiners/PTMergeDateRangeRefiner.js.map +1 -0
  202. package/dist/locales/pt/refiners/PTMergeDateTimeRefiner.js +1 -0
  203. package/dist/locales/pt/refiners/PTMergeDateTimeRefiner.js.map +1 -0
  204. package/dist/locales/ru/constants.d.ts +33 -0
  205. package/dist/locales/ru/constants.js +302 -0
  206. package/dist/locales/ru/constants.js.map +1 -0
  207. package/dist/locales/ru/index.d.ts +8 -0
  208. package/dist/locales/ru/index.js +56 -0
  209. package/dist/locales/ru/index.js.map +1 -0
  210. package/dist/locales/ru/parsers/RUCasualDateParser.d.ts +8 -0
  211. package/dist/locales/ru/parsers/RUCasualDateParser.js +52 -0
  212. package/dist/locales/ru/parsers/RUCasualDateParser.js.map +1 -0
  213. package/dist/locales/ru/parsers/RUCasualTimeParser.d.ts +7 -0
  214. package/dist/locales/ru/parsers/RUCasualTimeParser.js +74 -0
  215. package/dist/locales/ru/parsers/RUCasualTimeParser.js.map +1 -0
  216. package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.d.ts +8 -0
  217. package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.js +59 -0
  218. package/dist/locales/ru/parsers/RUMonthNameLittleEndianParser.js.map +1 -0
  219. package/dist/locales/ru/parsers/RUMonthNameParser.d.ts +7 -0
  220. package/dist/locales/ru/parsers/RUMonthNameParser.js +45 -0
  221. package/dist/locales/ru/parsers/RUMonthNameParser.js.map +1 -0
  222. package/dist/locales/ru/parsers/RURelativeDateFormatParser.d.ts +8 -0
  223. package/dist/locales/ru/parsers/RURelativeDateFormatParser.js +60 -0
  224. package/dist/locales/ru/parsers/RURelativeDateFormatParser.js.map +1 -0
  225. package/dist/locales/ru/parsers/RUTimeExpressionParser.d.ts +12 -0
  226. package/dist/locales/ru/parsers/RUTimeExpressionParser.js +57 -0
  227. package/dist/locales/ru/parsers/RUTimeExpressionParser.js.map +1 -0
  228. package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.d.ts +8 -0
  229. package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.js +22 -0
  230. package/dist/locales/ru/parsers/RUTimeUnitAgoFormatParser.js.map +1 -0
  231. package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.d.ts +8 -0
  232. package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js +29 -0
  233. package/dist/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js.map +1 -0
  234. package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.d.ts +8 -0
  235. package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.js +22 -0
  236. package/dist/locales/ru/parsers/RUTimeUnitWithinFormatParser.js.map +1 -0
  237. package/dist/locales/ru/parsers/RUWeekdayParser.d.ts +8 -0
  238. package/dist/locales/ru/parsers/RUWeekdayParser.js +55 -0
  239. package/dist/locales/ru/parsers/RUWeekdayParser.js.map +1 -0
  240. package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.d.ts +4 -0
  241. package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.js +13 -0
  242. package/dist/locales/ru/refiners/RUMergeDateRangeRefiner.js.map +1 -0
  243. package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.d.ts +4 -0
  244. package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.js +13 -0
  245. package/dist/locales/ru/refiners/RUMergeDateTimeRefiner.js.map +1 -0
  246. package/dist/locales/zh/hans/constants.js +1 -0
  247. package/dist/locales/zh/hans/constants.js.map +1 -0
  248. package/dist/locales/zh/hans/index.js +1 -0
  249. package/dist/locales/zh/hans/index.js.map +1 -0
  250. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js +1 -0
  251. package/dist/locales/zh/hans/parsers/ZHHansCasualDateParser.js.map +1 -0
  252. package/dist/locales/zh/hans/parsers/ZHHansDateParser.js +1 -0
  253. package/dist/locales/zh/hans/parsers/ZHHansDateParser.js.map +1 -0
  254. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js +1 -0
  255. package/dist/locales/zh/hans/parsers/ZHHansDeadlineFormatParser.js.map +1 -0
  256. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js +1 -0
  257. package/dist/locales/zh/hans/parsers/ZHHansRelationWeekdayParser.js.map +1 -0
  258. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +1 -0
  259. package/dist/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js.map +1 -0
  260. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js +1 -0
  261. package/dist/locales/zh/hans/parsers/ZHHansWeekdayParser.js.map +1 -0
  262. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js +1 -0
  263. package/dist/locales/zh/hans/refiners/ZHHansMergeDateRangeRefiner.js.map +1 -0
  264. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js +1 -0
  265. package/dist/locales/zh/hans/refiners/ZHHansMergeDateTimeRefiner.js.map +1 -0
  266. package/dist/locales/zh/hant/constants.js +1 -0
  267. package/dist/locales/zh/hant/constants.js.map +1 -0
  268. package/dist/locales/zh/hant/index.js +1 -0
  269. package/dist/locales/zh/hant/index.js.map +1 -0
  270. package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js +1 -0
  271. package/dist/locales/zh/hant/parsers/ZHHantCasualDateParser.js.map +1 -0
  272. package/dist/locales/zh/hant/parsers/ZHHantDateParser.js +1 -0
  273. package/dist/locales/zh/hant/parsers/ZHHantDateParser.js.map +1 -0
  274. package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js +1 -0
  275. package/dist/locales/zh/hant/parsers/ZHHantDeadlineFormatParser.js.map +1 -0
  276. package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js +1 -0
  277. package/dist/locales/zh/hant/parsers/ZHHantRelationWeekdayParser.js.map +1 -0
  278. package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +1 -0
  279. package/dist/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js.map +1 -0
  280. package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js +1 -0
  281. package/dist/locales/zh/hant/parsers/ZHHantWeekdayParser.js.map +1 -0
  282. package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js +1 -0
  283. package/dist/locales/zh/hant/refiners/ZHHantMergeDateRangeRefiner.js.map +1 -0
  284. package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js +1 -0
  285. package/dist/locales/zh/hant/refiners/ZHHantMergeDateTimeRefiner.js.map +1 -0
  286. package/dist/locales/zh/index.d.ts +1 -1
  287. package/dist/locales/zh/index.js +14 -2
  288. package/dist/locales/zh/index.js.map +1 -0
  289. package/dist/results.d.ts +3 -3
  290. package/dist/results.js +2 -2
  291. package/dist/results.js.map +1 -0
  292. package/dist/timezone.d.ts +1 -1
  293. package/dist/timezone.js +4 -3
  294. package/dist/timezone.js.map +1 -0
  295. package/dist/utils/dayjs.js +1 -0
  296. package/dist/utils/dayjs.js.map +1 -0
  297. package/dist/utils/pattern.js +1 -0
  298. package/dist/utils/pattern.js.map +1 -0
  299. package/dist/utils/timeunits.js +1 -0
  300. package/dist/utils/timeunits.js.map +1 -0
  301. package/package.json +1 -1
  302. package/src/common/casualReferences.ts +64 -9
  303. package/src/common/parsers/AbstractParserWithWordBoundary.ts +5 -1
  304. package/src/common/parsers/AbstractTimeExpressionParser.ts +52 -28
  305. package/src/common/refiners/ExtractTimezoneAbbrRefiner.ts +3 -1
  306. package/src/common/refiners/ExtractTimezoneOffsetRefiner.ts +5 -1
  307. package/src/index.ts +2 -1
  308. package/src/locales/de/constants.ts +42 -22
  309. package/src/locales/de/index.ts +4 -0
  310. package/src/locales/de/parsers/DESpecificTimeExpressionParser.ts +150 -0
  311. package/src/locales/de/parsers/DETimeExpressionParser.ts +4 -23
  312. package/src/locales/de/parsers/DETimeUnitRelativeFormatParser.ts +42 -0
  313. package/src/locales/en/constants.ts +5 -2
  314. package/src/locales/en/index.ts +2 -1
  315. package/src/locales/en/parsers/ENRelativeDateFormatParser.ts +2 -2
  316. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +1 -1
  317. package/src/locales/en/refiners/ENMergeRelativeDateRefiner.ts +58 -0
  318. package/src/locales/fr/parsers/FRTimeUnitWithinFormatParser.ts +1 -1
  319. package/src/locales/ru/constants.ts +344 -0
  320. package/src/locales/ru/index.ts +84 -0
  321. package/src/locales/ru/parsers/RUCasualDateParser.ts +44 -0
  322. package/src/locales/ru/parsers/RUCasualTimeParser.ts +56 -0
  323. package/src/locales/ru/parsers/RUMonthNameLittleEndianParser.ts +72 -0
  324. package/src/locales/ru/parsers/RUMonthNameParser.ts +61 -0
  325. package/src/locales/ru/parsers/RURelativeDateFormatParser.ts +75 -0
  326. package/src/locales/ru/parsers/RUTimeExpressionParser.ts +64 -0
  327. package/src/locales/ru/parsers/RUTimeUnitAgoFormatParser.ts +24 -0
  328. package/src/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.ts +34 -0
  329. package/src/locales/ru/parsers/RUTimeUnitWithinFormatParser.ts +24 -0
  330. package/src/locales/ru/parsers/RUWeekdayParser.ts +63 -0
  331. package/src/locales/ru/refiners/RUMergeDateRangeRefiner.ts +13 -0
  332. package/src/locales/ru/refiners/RUMergeDateTimeRefiner.ts +13 -0
  333. package/src/locales/zh/index.ts +1 -1
  334. package/src/results.ts +5 -6
  335. package/src/timezone.ts +4 -4
  336. package/src/utils/timeunits.ts +2 -2
  337. package/test/de/de_month_name_little_endian.test.ts +12 -0
  338. package/test/de/de_time_exp.test.ts +59 -0
  339. package/test/de/de_time_units_casual_relative.test.ts +108 -0
  340. package/test/de/de_year.test.ts +147 -0
  341. package/test/en/en_merging_relative_dates.test.ts +51 -0
  342. package/test/en/en_relative.test.ts +67 -2
  343. package/test/en/en_time_units_ago.test.ts +3 -3
  344. package/test/en/en_time_units_casual_relative.test.ts +16 -0
  345. package/test/en/en_time_units_within.test.ts +2 -2
  346. package/test/en/en_timezone_exp.test.ts +30 -3
  347. package/test/en/negative_cases.test.ts +8 -0
  348. package/test/fr/fr_time_units_ago.test.ts +3 -3
  349. package/test/fr/fr_time_units_within.test.ts +9 -2
  350. package/test/nl/nl_relative.test.ts +2 -2
  351. package/test/nl/nl_time_units_ago.test.ts +3 -3
  352. package/test/ru/ru_casual.test.ts +147 -0
  353. package/test/ru/ru_month.test.ts +70 -0
  354. package/test/ru/ru_month_name_little_endian.test.ts +145 -0
  355. package/test/ru/ru_relative.test.ts +74 -0
  356. package/test/ru/ru_time_exp.test.ts +111 -0
  357. package/test/ru/ru_time_units_ago.test.ts +48 -0
  358. package/test/ru/ru_time_units_casual_relative.test.ts +112 -0
  359. package/test/ru/ru_time_units_within.test.ts +16 -0
  360. package/test/ru/ru_weekday.test.ts +52 -0
  361. package/test/system_timezone.test.ts +22 -0
  362. package/tsconfig.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dayjs.js","sourceRoot":"","sources":["../../src/utils/dayjs.ts"],"names":[],"mappings":";;;AAEA,oCAAoC;AAEpC,SAAgB,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC1C,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAJD,4CAIC;AAED,SAAgB,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAJD,8CAIC;AAED,SAAgB,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE;QAC5B,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;SAAM;QACH,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;AACL,CAAC;AAVD,8CAUC;AAED,SAAgB,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9D,CAAC;AALD,4CAKC"}
@@ -28,3 +28,4 @@ function matchAnyPattern(dictionary) {
28
28
  return `(?:${joinedTerms})`;
29
29
  }
30
30
  exports.matchAnyPattern = matchAnyPattern;
31
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/utils/pattern.ts"],"names":[],"mappings":";;;AAEA,SAAgB,uBAAuB,CAAC,MAAc,EAAE,qBAA6B;IACjF,MAAM,8BAA8B,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzF,OAAO,GAAG,MAAM,GAAG,8BAA8B,wBAAwB,8BAA8B,SAAS,CAAC;AACrH,CAAC;AAHD,0DAGC;AAED,SAAgB,YAAY,CAAC,UAA0B;IACnD,IAAI,IAAc,CAAC;IACnB,IAAI,UAAU,YAAY,KAAK,EAAE;QAC7B,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;KAC1B;SAAM,IAAI,UAAU,YAAY,GAAG,EAAE;QAClC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAE,UAAmC,CAAC,IAAI,EAAE,CAAC,CAAC;KAClE;SAAM;QACH,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAClC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAXD,oCAWC;AAED,SAAgB,eAAe,CAAC,UAA0B;IAGtD,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC;SACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACnC,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE3B,OAAO,MAAM,WAAW,GAAG,CAAC;AAChC,CAAC;AATD,0CASC"}
@@ -28,3 +28,4 @@ function addImpliedTimeUnits(components, timeUnits) {
28
28
  return output;
29
29
  }
30
30
  exports.addImpliedTimeUnits = addImpliedTimeUnits;
31
+ //# sourceMappingURL=timeunits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeunits.js","sourceRoot":"","sources":["../../src/utils/timeunits.ts"],"names":[],"mappings":";;;AAKA,SAAgB,gBAAgB,CAAC,SAAoB;IACjD,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;QAEzB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KACnC;IAED,OAAO,QAAqB,CAAC;AACjC,CAAC;AARD,4CAQC;AAED,SAAgB,mBAAmB,CAAC,UAA6B,EAAE,SAAoB;IACnF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;IAElC,IAAI,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;QAEzB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAgB,CAAC,CAAC;KACrD;IAED,IAAI,KAAK,IAAI,SAAS,IAAI,GAAG,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,EAAE;QAC9G,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACrC;IAED,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,EAAE;QACvE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACrC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAtBD,kDAsBC"}
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "preset": "ts-jest"
16
16
  },
17
17
  "license": "MIT",
18
- "version": "2.3.6",
18
+ "version": "2.3.9",
19
19
  "directories": {
20
20
  "source": "./src",
21
21
  "test": "./test"
@@ -1,6 +1,6 @@
1
1
  import { ParsingComponents, ReferenceWithTimezone } from "../results";
2
2
  import dayjs from "dayjs";
3
- import { assignSimilarDate, assignSimilarTime, assignTheNextDay, implySimilarTime } from "../utils/dayjs";
3
+ import { assignSimilarDate, assignSimilarTime, implySimilarTime } from "../utils/dayjs";
4
4
  import { Meridiem } from "../index";
5
5
 
6
6
  export function now(reference: ReferenceWithTimezone): ParsingComponents {
@@ -26,21 +26,26 @@ export function today(reference: ReferenceWithTimezone): ParsingComponents {
26
26
  * The previous day. Imply the same time.
27
27
  */
28
28
  export function yesterday(reference: ReferenceWithTimezone): ParsingComponents {
29
- let targetDate = dayjs(reference.instant);
30
- const component = new ParsingComponents(reference, {});
31
- targetDate = targetDate.add(-1, "day");
32
- assignSimilarDate(component, targetDate);
33
- implySimilarTime(component, targetDate);
34
- return component;
29
+ return theDayBefore(reference, 1);
30
+ }
31
+
32
+ export function theDayBefore(reference: ReferenceWithTimezone, numDay: number): ParsingComponents {
33
+ return theDayAfter(reference, -numDay);
35
34
  }
36
35
 
37
36
  /**
38
37
  * The following day with dayjs.assignTheNextDay()
39
38
  */
40
39
  export function tomorrow(reference: ReferenceWithTimezone): ParsingComponents {
41
- const targetDate = dayjs(reference.instant);
40
+ return theDayAfter(reference, 1);
41
+ }
42
+
43
+ export function theDayAfter(reference: ReferenceWithTimezone, nDays: number): ParsingComponents {
44
+ let targetDate = dayjs(reference.instant);
42
45
  const component = new ParsingComponents(reference, {});
43
- assignTheNextDay(component, targetDate);
46
+ targetDate = targetDate.add(nDays, "day");
47
+ assignSimilarDate(component, targetDate);
48
+ implySimilarTime(component, targetDate);
44
49
  return component;
45
50
  }
46
51
 
@@ -52,3 +57,53 @@ export function tonight(reference: ReferenceWithTimezone, implyHour = 22): Parsi
52
57
  assignSimilarDate(component, targetDate);
53
58
  return component;
54
59
  }
60
+
61
+ export function lastNight(reference: ReferenceWithTimezone, implyHour = 0): ParsingComponents {
62
+ let targetDate = dayjs(reference.instant);
63
+ const component = new ParsingComponents(reference, {});
64
+ if (targetDate.hour() < 6) {
65
+ targetDate = targetDate.add(-1, "day");
66
+ }
67
+ assignSimilarDate(component, targetDate);
68
+ component.imply("hour", implyHour);
69
+ return component;
70
+ }
71
+
72
+ export function evening(reference: ReferenceWithTimezone, implyHour = 20): ParsingComponents {
73
+ const component = new ParsingComponents(reference, {});
74
+ component.imply("meridiem", Meridiem.PM);
75
+ component.imply("hour", implyHour);
76
+ return component;
77
+ }
78
+
79
+ export function yesterdayEvening(reference: ReferenceWithTimezone, implyHour = 20): ParsingComponents {
80
+ let targetDate = dayjs(reference.instant);
81
+ const component = new ParsingComponents(reference, {});
82
+ targetDate = targetDate.add(-1, "day");
83
+ assignSimilarDate(component, targetDate);
84
+ component.imply("hour", implyHour);
85
+ component.imply("meridiem", Meridiem.PM);
86
+ return component;
87
+ }
88
+
89
+ export function midnight(reference: ReferenceWithTimezone): ParsingComponents {
90
+ const component = new ParsingComponents(reference, {});
91
+ component.imply("hour", 0);
92
+ component.imply("minute", 0);
93
+ component.imply("second", 0);
94
+ return component;
95
+ }
96
+
97
+ export function morning(reference: ReferenceWithTimezone, implyHour = 6): ParsingComponents {
98
+ const component = new ParsingComponents(reference, {});
99
+ component.imply("meridiem", Meridiem.AM);
100
+ component.imply("hour", implyHour);
101
+ return component;
102
+ }
103
+
104
+ export function noon(reference: ReferenceWithTimezone): ParsingComponents {
105
+ const component = new ParsingComponents(reference, {});
106
+ component.imply("meridiem", Meridiem.AM);
107
+ component.imply("hour", 12);
108
+ return component;
109
+ }
@@ -15,13 +15,17 @@ export abstract class AbstractParserWithWordBoundaryChecking implements Parser {
15
15
  private cachedInnerPattern?: RegExp = null;
16
16
  private cachedPattern?: RegExp = null;
17
17
 
18
+ patternLeftBoundary(): string {
19
+ return `(\\W|^)`;
20
+ }
21
+
18
22
  pattern(context: ParsingContext): RegExp {
19
23
  const innerPattern = this.innerPattern(context);
20
24
  if (innerPattern == this.cachedInnerPattern) {
21
25
  return this.cachedPattern;
22
26
  }
23
27
 
24
- this.cachedPattern = new RegExp(`(\\W|^)${innerPattern.source}`, innerPattern.flags);
28
+ this.cachedPattern = new RegExp(`${this.patternLeftBoundary()}${innerPattern.source}`, innerPattern.flags);
25
29
  this.cachedInnerPattern = innerPattern;
26
30
  return this.cachedPattern;
27
31
  }
@@ -3,23 +3,23 @@ import { ParsingComponents, ParsingResult } from "../../results";
3
3
  import { Meridiem } from "../../index";
4
4
 
5
5
  // prettier-ignore
6
- function primaryTimePattern(primaryPrefix: string, primarySuffix: string) {
6
+ function primaryTimePattern(leftBoundary: string, primaryPrefix: string, primarySuffix: string, flags: string) {
7
7
  return new RegExp(
8
- "(^|\\s|T|\\b)" +
8
+ `${leftBoundary}` +
9
9
  `${primaryPrefix}` +
10
- "(\\d{1,4})" +
11
- "(?:" +
12
- "(?:\\.|\\:|\\:)" +
13
- "(\\d{1,2})" +
14
- "(?:" +
15
- "(?:\\:|\\:)" +
16
- "(\\d{2})" +
17
- "(?:\\.(\\d{1,6}))?" +
18
- ")?" +
19
- ")?" +
20
- "(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?" +
10
+ `(\\d{1,4})` +
11
+ `(?:` +
12
+ `(?:\\.|:|:)` +
13
+ `(\\d{1,2})` +
14
+ `(?:` +
15
+ `(?::|:)` +
16
+ `(\\d{2})` +
17
+ `(?:\\.(\\d{1,6}))?` +
18
+ `)?` +
19
+ `)?` +
20
+ `(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?` +
21
21
  `${primarySuffix}`,
22
- "i"
22
+ flags
23
23
  );
24
24
  }
25
25
 
@@ -27,16 +27,16 @@ function primaryTimePattern(primaryPrefix: string, primarySuffix: string) {
27
27
  function followingTimePatten(followingPhase: string, followingSuffix: string) {
28
28
  return new RegExp(
29
29
  `^(${followingPhase})` +
30
- "(\\d{1,4})" +
31
- "(?:" +
32
- "(?:\\.|\\:|\\:)" +
33
- "(\\d{1,2})" +
34
- "(?:" +
35
- "(?:\\.|\\:|\\:)" +
36
- "(\\d{1,2})(?:\\.(\\d{1,6}))?" +
37
- ")?" +
38
- ")?" +
39
- "(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?" +
30
+ `(\\d{1,4})` +
31
+ `(?:` +
32
+ `(?:\\.|\\:|\\:)` +
33
+ `(\\d{1,2})` +
34
+ `(?:` +
35
+ `(?:\\.|\\:|\\:)` +
36
+ `(\\d{1,2})(?:\\.(\\d{1,6}))?` +
37
+ `)?` +
38
+ `)?` +
39
+ `(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?` +
40
40
  `${followingSuffix}`,
41
41
  "i"
42
42
  );
@@ -57,12 +57,20 @@ export abstract class AbstractTimeExpressionParser implements Parser {
57
57
  this.strictMode = strictMode;
58
58
  }
59
59
 
60
+ patternFlags(): string {
61
+ return "i";
62
+ }
63
+
64
+ primaryPatternLeftBoundary(): string {
65
+ return `(^|\\s|T|\\b)`;
66
+ }
67
+
60
68
  primarySuffix(): string {
61
- return "(?=\\W|$)";
69
+ return `(?=\\W|$)`;
62
70
  }
63
71
 
64
72
  followingSuffix(): string {
65
- return "(?=\\W|$)";
73
+ return `(?=\\W|$)`;
66
74
  }
67
75
 
68
76
  pattern(context: ParsingContext): RegExp {
@@ -84,6 +92,12 @@ export abstract class AbstractTimeExpressionParser implements Parser {
84
92
  const remainingText = context.text.substring(match.index);
85
93
  const followingPattern = this.getFollowingTimePatternThroughCache();
86
94
  const followingMatch = followingPattern.exec(remainingText);
95
+
96
+ // Pattern "456-12", "2022-12" should not be time without proper context
97
+ if (text.match(/^\d{3,4}/) && followingMatch && followingMatch[0].match(/^\s*([+-])\s*\d{2,4}$/)) {
98
+ return null;
99
+ }
100
+
87
101
  if (
88
102
  !followingMatch ||
89
103
  // Pattern "YY.YY -XXXX" is more like timezone offset
@@ -305,11 +319,16 @@ export abstract class AbstractTimeExpressionParser implements Parser {
305
319
  }
306
320
 
307
321
  private checkAndReturnWithoutFollowingPattern(result) {
308
- // Single digit (e.g "1") should not be counted as time expression
322
+ // Single digit (e.g "1") should not be counted as time expression (without proper context)
309
323
  if (result.text.match(/^\d$/)) {
310
324
  return null;
311
325
  }
312
326
 
327
+ // Three or more digit (e.g. "203", "2014") should not be counted as time expression (without proper context)
328
+ if (result.text.match(/^\d\d\d+$/)) {
329
+ return null;
330
+ }
331
+
313
332
  // Instead of "am/pm", it ends with "a" or "p" (e.g "1a", "123p"), this seems unlikely
314
333
  if (result.text.match(/\d[apAP]$/)) {
315
334
  return null;
@@ -383,7 +402,12 @@ export abstract class AbstractTimeExpressionParser implements Parser {
383
402
  return this.cachedPrimaryTimePattern;
384
403
  }
385
404
 
386
- this.cachedPrimaryTimePattern = primaryTimePattern(primaryPrefix, primarySuffix);
405
+ this.cachedPrimaryTimePattern = primaryTimePattern(
406
+ this.primaryPatternLeftBoundary(),
407
+ primaryPrefix,
408
+ primarySuffix,
409
+ this.patternFlags()
410
+ );
387
411
  this.cachedPrimaryPrefix = primaryPrefix;
388
412
  this.cachedPrimarySuffix = primarySuffix;
389
413
  return this.cachedPrimaryTimePattern;
@@ -221,7 +221,9 @@ export default class ExtractTimezoneAbbrRefiner implements Refiner {
221
221
  }
222
222
 
223
223
  context.debug(() => {
224
- console.log(`Extracting timezone: '${timezoneAbbr}' into : ${extractedTimezoneOffset}`);
224
+ console.log(
225
+ `Extracting timezone: '${timezoneAbbr}' into: ${extractedTimezoneOffset} for: ${result.start}`
226
+ );
225
227
  });
226
228
 
227
229
  const currentTimezoneOffset = result.start.get("timezoneOffset");
@@ -1,7 +1,7 @@
1
1
  import { ParsingContext, Refiner } from "../../chrono";
2
2
  import { ParsingResult } from "../../results";
3
3
 
4
- const TIMEZONE_OFFSET_PATTERN = new RegExp("^\\s*(?:(?:GMT|UTC)\\s?)?([+-])(\\d{1,2})(?::?(\\d{2}))?", "i");
4
+ const TIMEZONE_OFFSET_PATTERN = new RegExp("^\\s*(?:\\(?(?:GMT|UTC)\\s?)?([+-])(\\d{1,2})(?::?(\\d{2}))?\\)?", "i");
5
5
  const TIMEZONE_OFFSET_SIGN_GROUP = 1;
6
6
  const TIMEZONE_OFFSET_HOUR_OFFSET_GROUP = 2;
7
7
  const TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP = 3;
@@ -26,6 +26,10 @@ export default class ExtractTimezoneOffsetRefiner implements Refiner {
26
26
  const hourOffset = parseInt(match[TIMEZONE_OFFSET_HOUR_OFFSET_GROUP]);
27
27
  const minuteOffset = parseInt(match[TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP] || "0");
28
28
  let timezoneOffset = hourOffset * 60 + minuteOffset;
29
+ // No timezones have offsets greater than 14 hours, so disregard this match
30
+ if (timezoneOffset > 14 * 60) {
31
+ return;
32
+ }
29
33
  if (match[TIMEZONE_OFFSET_SIGN_GROUP] === "-") {
30
34
  timezoneOffset = -timezoneOffset;
31
35
  }
package/src/index.ts CHANGED
@@ -106,7 +106,8 @@ import * as ja from "./locales/ja";
106
106
  import * as pt from "./locales/pt";
107
107
  import * as nl from "./locales/nl";
108
108
  import * as zh from "./locales/zh";
109
- export { de, fr, ja, pt, nl, zh };
109
+ import * as ru from "./locales/ru";
110
+ export { de, fr, ja, pt, nl, zh, ru };
110
111
 
111
112
  /**
112
113
  * A shortcut for {@link en | chrono.en.strict}
@@ -1,4 +1,4 @@
1
- import { OpUnitType } from "dayjs";
1
+ import { OpUnitType, QUnitType } from "dayjs";
2
2
  import { matchAnyPattern, repeatedTimeunitPattern } from "../../utils/pattern";
3
3
  import { findMostLikelyADYear } from "../../calculation/years";
4
4
  import { TimeUnits } from "../../utils/timeunits";
@@ -22,9 +22,12 @@ export const WEEKDAY_DICTIONARY: { [word: string]: number } = {
22
22
 
23
23
  export const MONTH_DICTIONARY: { [word: string]: number } = {
24
24
  "januar": 1,
25
+ "jänner": 1,
26
+ "janner": 1,
25
27
  "jan": 1,
26
28
  "jan.": 1,
27
29
  "februar": 2,
30
+ "feber": 2,
28
31
  "feb": 2,
29
32
  "feb.": 2,
30
33
  "märz": 3,
@@ -64,6 +67,10 @@ export const MONTH_DICTIONARY: { [word: string]: number } = {
64
67
 
65
68
  export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
66
69
  "eins": 1,
70
+ "eine": 1,
71
+ "einem": 1,
72
+ "einen": 1,
73
+ "einer": 1,
67
74
  "zwei": 2,
68
75
  "drei": 3,
69
76
  "vier": 4,
@@ -79,29 +86,37 @@ export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
79
86
  "zwoelf": 12,
80
87
  };
81
88
 
82
- export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType } = {
83
- sec: "second",
84
- second: "second",
85
- seconds: "second",
89
+ export const TIME_UNIT_DICTIONARY: { [word: string]: OpUnitType | QUnitType } = {
90
+ sek: "second",
91
+ sekunde: "second",
92
+ sekunden: "second",
86
93
  min: "minute",
87
- mins: "minute",
88
94
  minute: "minute",
89
- minutes: "minute",
95
+ minuten: "minute",
90
96
  h: "hour",
91
- hr: "hour",
92
- hrs: "hour",
93
- hour: "hour",
94
- hours: "hour",
95
- day: "d",
96
- days: "d",
97
- week: "week",
98
- weeks: "week",
99
- month: "month",
100
- months: "month",
101
- y: "year",
102
- yr: "year",
103
- year: "year",
104
- years: "year",
97
+ std: "hour",
98
+ stunde: "hour",
99
+ stunden: "hour",
100
+ tag: "d",
101
+ tage: "d",
102
+ tagen: "d",
103
+ woche: "week",
104
+ wochen: "week",
105
+ monat: "month",
106
+ monate: "month",
107
+ monaten: "month",
108
+ monats: "month",
109
+ quartal: "quarter",
110
+ quartals: "quarter",
111
+ quartale: "quarter",
112
+ quartalen: "quarter",
113
+ a: "year",
114
+ j: "year",
115
+ jr: "year",
116
+ jahr: "year",
117
+ jahre: "year",
118
+ jahren: "year",
119
+ jahres: "year",
105
120
  };
106
121
 
107
122
  //-----------------------------
@@ -131,7 +146,7 @@ export function parseNumberPattern(match: string): number {
131
146
 
132
147
  //-----------------------------
133
148
 
134
- export const YEAR_PATTERN = `(?:[0-9]{1,4}(?:\\s*[vn]\\.?\\s*C(?:hr)?\\.?)?)`;
149
+ export const YEAR_PATTERN = `(?:[0-9]{1,4}(?:\\s*[vn]\\.?\\s*(?:C(?:hr)?|(?:u\\.?|d\\.?(?:\\s*g\\.?)?)?\\s*Z)\\.?|\\s*(?:u\\.?|d\\.?(?:\\s*g\\.)?)\\s*Z\\.?)?)`;
135
150
  export function parseYear(match: string): number {
136
151
  if (/v/i.test(match)) {
137
152
  // v.Chr.
@@ -143,6 +158,11 @@ export function parseYear(match: string): number {
143
158
  return parseInt(match.replace(/[^0-9]+/gi, ""));
144
159
  }
145
160
 
161
+ if (/z/i.test(match)) {
162
+ // n.Chr. as "uZ" or "dgZ"
163
+ return parseInt(match.replace(/[^0-9]+/gi, ""));
164
+ }
165
+
146
166
  const rawYearNumber = parseInt(match);
147
167
  return findMostLikelyADYear(rawYearNumber);
148
168
  }
@@ -5,11 +5,13 @@ import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
5
5
  import ISOFormatParser from "../../common/parsers/ISOFormatParser";
6
6
  import DETimeExpressionParser from "./parsers/DETimeExpressionParser";
7
7
  import DEWeekdayParser from "./parsers/DEWeekdayParser";
8
+ import DESpecificTimeExpressionParser from "./parsers/DESpecificTimeExpressionParser";
8
9
  import DEMergeDateRangeRefiner from "./refiners/DEMergeDateRangeRefiner";
9
10
  import DEMergeDateTimeRefiner from "./refiners/DEMergeDateTimeRefiner";
10
11
  import DECasualDateParser from "./parsers/DECasualDateParser";
11
12
  import DECasualTimeParser from "./parsers/DECasualTimeParser";
12
13
  import DEMonthNameLittleEndianParser from "./parsers/DEMonthNameLittleEndianParser";
14
+ import DETimeUnitRelativeFormatParser from "./parsers/DETimeUnitRelativeFormatParser";
13
15
 
14
16
  // Shortcuts
15
17
  export const casual = new Chrono(createCasualConfiguration());
@@ -27,6 +29,7 @@ export function createCasualConfiguration(littleEndian = true): Configuration {
27
29
  const option = createConfiguration(false, littleEndian);
28
30
  option.parsers.unshift(new DECasualTimeParser());
29
31
  option.parsers.unshift(new DECasualDateParser());
32
+ option.parsers.unshift(new DETimeUnitRelativeFormatParser());
30
33
  return option;
31
34
  }
32
35
 
@@ -37,6 +40,7 @@ export function createConfiguration(strictMode = true, littleEndian = true): Con
37
40
  new ISOFormatParser(),
38
41
  new SlashDateFormatParser(littleEndian),
39
42
  new DETimeExpressionParser(),
43
+ new DESpecificTimeExpressionParser(),
40
44
  new DEMonthNameLittleEndianParser(),
41
45
  new DEWeekdayParser(),
42
46
  ],
@@ -0,0 +1,150 @@
1
+ import { Parser, ParsingContext } from "../../../chrono";
2
+ import { ParsingComponents, ParsingResult } from "../../../results";
3
+ import { Meridiem } from "../../../index";
4
+
5
+ /**
6
+ * 8h10m00s
7
+ * 8h10m00
8
+ * 8h10
9
+ * 8 Uhr
10
+ * 8h10m00s Uhr
11
+ * 8:10 Uhr
12
+ */
13
+ const FIRST_REG_PATTERN = new RegExp(
14
+ "(^|\\s|T)" +
15
+ "(?:(?:um|von)\\s*)?" +
16
+ "(\\d{1,2})(?:h|:)?" +
17
+ "(?:(\\d{1,2})(?:m|:)?)?" +
18
+ "(?:(\\d{1,2})(?:s)?)?" +
19
+ "(?:\\s*Uhr)?" +
20
+ "(?:\\s*(morgens|vormittags|nachmittags|abends|nachts|am\\s+(?:Morgen|Vormittag|Nachmittag|Abend)|in\\s+der\\s+Nacht))?" +
21
+ "(?=\\W|$)",
22
+ "i"
23
+ );
24
+
25
+ const SECOND_REG_PATTERN = new RegExp(
26
+ "^\\s*(\\-|\\–|\\~|\\〜|bis(?:\\s+um)?|\\?)\\s*" +
27
+ "(\\d{1,2})(?:h|:)?" +
28
+ "(?:(\\d{1,2})(?:m|:)?)?" +
29
+ "(?:(\\d{1,2})(?:s)?)?" +
30
+ "(?:\\s*Uhr)?" +
31
+ "(?:\\s*(morgens|vormittags|nachmittags|abends|nachts|am\\s+(?:Morgen|Vormittag|Nachmittag|Abend)|in\\s+der\\s+Nacht))?" +
32
+ "(?=\\W|$)",
33
+ "i"
34
+ );
35
+
36
+ const HOUR_GROUP = 2;
37
+ const MINUTE_GROUP = 3;
38
+ const SECOND_GROUP = 4;
39
+ const AM_PM_HOUR_GROUP = 5;
40
+
41
+ export default class DESpecificTimeExpressionParser implements Parser {
42
+ pattern(context): RegExp {
43
+ return FIRST_REG_PATTERN;
44
+ }
45
+
46
+ extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult | null {
47
+ const result = context.createParsingResult(match.index + match[1].length, match[0].substring(match[1].length));
48
+
49
+ // This looks more like a year e.g. 2020
50
+ if (result.text.match(/^\d{4}$/)) {
51
+ match.index += match[0].length;
52
+ return null;
53
+ }
54
+
55
+ result.start = DESpecificTimeExpressionParser.extractTimeComponent(result.start.clone(), match);
56
+ if (!result.start) {
57
+ match.index += match[0].length;
58
+ return null;
59
+ }
60
+
61
+ const remainingText = context.text.substring(match.index + match[0].length);
62
+ const secondMatch = SECOND_REG_PATTERN.exec(remainingText);
63
+ if (secondMatch) {
64
+ result.end = DESpecificTimeExpressionParser.extractTimeComponent(result.start.clone(), secondMatch);
65
+ if (result.end) {
66
+ result.text += secondMatch[0];
67
+ }
68
+ }
69
+
70
+ return result;
71
+ }
72
+
73
+ private static extractTimeComponent(
74
+ extractingComponents: ParsingComponents,
75
+ match: RegExpMatchArray
76
+ ): ParsingComponents | null {
77
+ let hour = 0;
78
+ let minute = 0;
79
+ let meridiem = null;
80
+
81
+ // ----- Hours
82
+ hour = parseInt(match[HOUR_GROUP]);
83
+
84
+ // ----- Minutes
85
+ if (match[MINUTE_GROUP] != null) {
86
+ minute = parseInt(match[MINUTE_GROUP]);
87
+ }
88
+
89
+ if (minute >= 60 || hour > 24) {
90
+ return null;
91
+ }
92
+
93
+ if (hour >= 12) {
94
+ meridiem = Meridiem.PM;
95
+ }
96
+
97
+ // ----- AM & PM
98
+ if (match[AM_PM_HOUR_GROUP] != null) {
99
+ if (hour > 12) return null;
100
+ const ampm = match[AM_PM_HOUR_GROUP].toLowerCase();
101
+ if (ampm.match(/morgen|vormittag/)) {
102
+ meridiem = Meridiem.AM;
103
+ if (hour == 12) {
104
+ hour = 0;
105
+ }
106
+ }
107
+
108
+ if (ampm.match(/nachmittag|abend/)) {
109
+ meridiem = Meridiem.PM;
110
+ if (hour != 12) {
111
+ hour += 12;
112
+ }
113
+ }
114
+
115
+ if (ampm.match(/nacht/)) {
116
+ if (hour == 12) {
117
+ meridiem = Meridiem.AM;
118
+ hour = 0;
119
+ } else if (hour < 6) {
120
+ meridiem = Meridiem.AM;
121
+ } else {
122
+ meridiem = Meridiem.PM;
123
+ hour += 12;
124
+ }
125
+ }
126
+ }
127
+
128
+ extractingComponents.assign("hour", hour);
129
+ extractingComponents.assign("minute", minute);
130
+ if (meridiem !== null) {
131
+ extractingComponents.assign("meridiem", meridiem);
132
+ } else {
133
+ if (hour < 12) {
134
+ extractingComponents.imply("meridiem", Meridiem.AM);
135
+ } else {
136
+ extractingComponents.imply("meridiem", Meridiem.PM);
137
+ }
138
+ }
139
+
140
+ // ----- Second
141
+ if (match[SECOND_GROUP] != null) {
142
+ const second = parseInt(match[SECOND_GROUP]);
143
+ if (second >= 60) return null;
144
+
145
+ extractingComponents.assign("second", second);
146
+ }
147
+
148
+ return extractingComponents;
149
+ }
150
+ }
@@ -1,7 +1,6 @@
1
1
  import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser";
2
2
  import { ParsingComponents } from "../../../results";
3
3
  import { ParsingContext } from "../../../chrono";
4
- import { Meridiem } from "../../../index";
5
4
 
6
5
  export default class DETimeExpressionParser extends AbstractTimeExpressionParser {
7
6
  primaryPrefix(): string {
@@ -12,30 +11,12 @@ export default class DETimeExpressionParser extends AbstractTimeExpressionParser
12
11
  return "\\s*(?:\\-|\\–|\\~|\\〜|bis)\\s*";
13
12
  }
14
13
 
15
- primarySuffix(): string {
16
- return "(?:\\s*uhr)?(?:\\s*(?:morgens|vormittags|nachmittags|abends|nachts))?(?=\\W|$)";
17
- }
18
-
19
14
  extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | null {
20
- const components = super.extractPrimaryTimeComponents(context, match);
21
- if (components) {
22
- if (match[0].endsWith("morgens") || match[0].endsWith("vormittags")) {
23
- components.assign("meridiem", Meridiem.AM);
24
- const hour = components.get("hour");
25
- if (hour < 12) {
26
- components.assign("hour", components.get("hour"));
27
- }
28
- }
29
-
30
- if (match[0].endsWith("nachmittags") || match[0].endsWith("abends") || match[0].endsWith("nachts")) {
31
- components.assign("meridiem", Meridiem.PM);
32
- const hour = components.get("hour");
33
- if (hour < 12) {
34
- components.assign("hour", components.get("hour") + 12);
35
- }
36
- }
15
+ // This looks more like a year e.g. 2020
16
+ if (match[0].match(/^\s*\d{4}\s*$/)) {
17
+ return null;
37
18
  }
38
19
 
39
- return components;
20
+ return super.extractPrimaryTimeComponents(context, match);
40
21
  }
41
22
  }