chrono-node 2.8.5 → 2.9.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 (314) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/calculation/mergingCalculation.js +4 -1
  3. package/dist/cjs/calculation/mergingCalculation.js.map +1 -1
  4. package/dist/cjs/common/casualReferences.d.ts +1 -1
  5. package/dist/cjs/common/casualReferences.js +4 -4
  6. package/dist/cjs/common/casualReferences.js.map +1 -1
  7. package/dist/cjs/common/refiners/ForwardDateRefiner.js +8 -13
  8. package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
  9. package/dist/cjs/index.d.ts +3 -1
  10. package/dist/cjs/index.js +5 -1
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/locales/de/parsers/DETimeUnitRelativeFormatParser.js +1 -1
  13. package/dist/cjs/locales/de/parsers/DETimeUnitRelativeFormatParser.js.map +1 -1
  14. package/dist/cjs/locales/en/constants.d.ts +1 -1
  15. package/dist/cjs/locales/en/constants.js +1 -1
  16. package/dist/cjs/locales/en/parsers/ENWeekdayParser.js +1 -1
  17. package/dist/cjs/locales/en/parsers/ENWeekdayParser.js.map +1 -1
  18. package/dist/cjs/locales/es/parsers/ESCasualTimeParser.js +5 -0
  19. package/dist/cjs/locales/es/parsers/ESCasualTimeParser.js.map +1 -1
  20. package/dist/cjs/locales/fi/constants.d.ts +24 -0
  21. package/dist/cjs/locales/fi/constants.js +197 -0
  22. package/dist/cjs/locales/fi/constants.js.map +1 -0
  23. package/dist/cjs/locales/fi/index.d.ts +11 -0
  24. package/dist/cjs/locales/fi/index.js +62 -0
  25. package/dist/cjs/locales/fi/index.js.map +1 -0
  26. package/dist/cjs/locales/fi/parsers/FICasualDateParser.d.ts +7 -0
  27. package/dist/cjs/locales/fi/parsers/FICasualDateParser.js +102 -0
  28. package/dist/cjs/locales/fi/parsers/FICasualDateParser.js.map +1 -0
  29. package/dist/cjs/locales/fi/parsers/FICasualTimeParser.d.ts +8 -0
  30. package/dist/cjs/locales/fi/parsers/FICasualTimeParser.js +70 -0
  31. package/dist/cjs/locales/fi/parsers/FICasualTimeParser.js.map +1 -0
  32. package/dist/cjs/locales/fi/parsers/FIMonthNameLittleEndianParser.d.ts +7 -0
  33. package/dist/cjs/locales/fi/parsers/FIMonthNameLittleEndianParser.js +48 -0
  34. package/dist/cjs/locales/fi/parsers/FIMonthNameLittleEndianParser.js.map +1 -0
  35. package/dist/cjs/locales/fi/parsers/FITimeExpressionParser.d.ts +8 -0
  36. package/dist/cjs/locales/fi/parsers/FITimeExpressionParser.js +19 -0
  37. package/dist/cjs/locales/fi/parsers/FITimeExpressionParser.js.map +1 -0
  38. package/dist/cjs/locales/fi/parsers/FITimeUnitAgoFormatParser.d.ts +7 -0
  39. package/dist/cjs/locales/fi/parsers/FITimeUnitAgoFormatParser.js +18 -0
  40. package/dist/cjs/locales/fi/parsers/FITimeUnitAgoFormatParser.js.map +1 -0
  41. package/dist/cjs/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.d.ts +9 -0
  42. package/dist/cjs/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js +39 -0
  43. package/dist/cjs/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js.map +1 -0
  44. package/dist/cjs/locales/fi/parsers/FITimeUnitWithinFormatParser.d.ts +7 -0
  45. package/dist/cjs/locales/fi/parsers/FITimeUnitWithinFormatParser.js +16 -0
  46. package/dist/cjs/locales/fi/parsers/FITimeUnitWithinFormatParser.js.map +1 -0
  47. package/dist/cjs/locales/fi/parsers/FIWeekdayParser.d.ts +7 -0
  48. package/dist/cjs/locales/fi/parsers/FIWeekdayParser.js +39 -0
  49. package/dist/cjs/locales/fi/parsers/FIWeekdayParser.js.map +1 -0
  50. package/dist/cjs/locales/fi/refiners/FIMergeDateRangeRefiner.d.ts +4 -0
  51. package/dist/cjs/locales/fi/refiners/FIMergeDateRangeRefiner.js +13 -0
  52. package/dist/cjs/locales/fi/refiners/FIMergeDateRangeRefiner.js.map +1 -0
  53. package/dist/cjs/locales/fi/refiners/FIMergeDateTimeRefiner.d.ts +4 -0
  54. package/dist/cjs/locales/fi/refiners/FIMergeDateTimeRefiner.js +13 -0
  55. package/dist/cjs/locales/fi/refiners/FIMergeDateTimeRefiner.js.map +1 -0
  56. package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js +1 -1
  57. package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js.map +1 -1
  58. package/dist/cjs/locales/nl/parsers/NLCasualTimeParser.js +5 -0
  59. package/dist/cjs/locales/nl/parsers/NLCasualTimeParser.js.map +1 -1
  60. package/dist/cjs/locales/pt/parsers/PTCasualTimeParser.js +5 -0
  61. package/dist/cjs/locales/pt/parsers/PTCasualTimeParser.js.map +1 -1
  62. package/dist/cjs/locales/vi/constants.d.ts +20 -0
  63. package/dist/cjs/locales/vi/constants.js +107 -0
  64. package/dist/cjs/locales/vi/constants.js.map +1 -0
  65. package/dist/cjs/locales/vi/index.d.ts +11 -0
  66. package/dist/cjs/locales/vi/index.js +73 -0
  67. package/dist/cjs/locales/vi/index.js.map +1 -0
  68. package/dist/cjs/locales/vi/parsers/VICasualDateParser.d.ts +7 -0
  69. package/dist/cjs/locales/vi/parsers/VICasualDateParser.js +63 -0
  70. package/dist/cjs/locales/vi/parsers/VICasualDateParser.js.map +1 -0
  71. package/dist/cjs/locales/vi/parsers/VICasualTimeParser.d.ts +8 -0
  72. package/dist/cjs/locales/vi/parsers/VICasualTimeParser.js +59 -0
  73. package/dist/cjs/locales/vi/parsers/VICasualTimeParser.js.map +1 -0
  74. package/dist/cjs/locales/vi/parsers/VIMonthYearParser.d.ts +7 -0
  75. package/dist/cjs/locales/vi/parsers/VIMonthYearParser.js +30 -0
  76. package/dist/cjs/locales/vi/parsers/VIMonthYearParser.js.map +1 -0
  77. package/dist/cjs/locales/vi/parsers/VIStandardParser.d.ts +7 -0
  78. package/dist/cjs/locales/vi/parsers/VIStandardParser.js +39 -0
  79. package/dist/cjs/locales/vi/parsers/VIStandardParser.js.map +1 -0
  80. package/dist/cjs/locales/vi/parsers/VITimeExpressionParser.d.ts +7 -0
  81. package/dist/cjs/locales/vi/parsers/VITimeExpressionParser.js +60 -0
  82. package/dist/cjs/locales/vi/parsers/VITimeExpressionParser.js.map +1 -0
  83. package/dist/cjs/locales/vi/parsers/VITimeUnitAgoFormatParser.d.ts +9 -0
  84. package/dist/cjs/locales/vi/parsers/VITimeUnitAgoFormatParser.js +24 -0
  85. package/dist/cjs/locales/vi/parsers/VITimeUnitAgoFormatParser.js.map +1 -0
  86. package/dist/cjs/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.d.ts +7 -0
  87. package/dist/cjs/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js +37 -0
  88. package/dist/cjs/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js.map +1 -0
  89. package/dist/cjs/locales/vi/parsers/VITimeUnitLaterFormatParser.d.ts +9 -0
  90. package/dist/cjs/locales/vi/parsers/VITimeUnitLaterFormatParser.js +23 -0
  91. package/dist/cjs/locales/vi/parsers/VITimeUnitLaterFormatParser.js.map +1 -0
  92. package/dist/cjs/locales/vi/parsers/VITimeUnitWithinFormatParser.d.ts +9 -0
  93. package/dist/cjs/locales/vi/parsers/VITimeUnitWithinFormatParser.js +23 -0
  94. package/dist/cjs/locales/vi/parsers/VITimeUnitWithinFormatParser.js.map +1 -0
  95. package/dist/cjs/locales/vi/parsers/VIWeekdayParser.d.ts +7 -0
  96. package/dist/cjs/locales/vi/parsers/VIWeekdayParser.js +36 -0
  97. package/dist/cjs/locales/vi/parsers/VIWeekdayParser.js.map +1 -0
  98. package/dist/cjs/locales/vi/parsers/VIYearParser.d.ts +7 -0
  99. package/dist/cjs/locales/vi/parsers/VIYearParser.js +29 -0
  100. package/dist/cjs/locales/vi/parsers/VIYearParser.js.map +1 -0
  101. package/dist/cjs/locales/vi/refiners/VIMergeDateRangeRefiner.d.ts +4 -0
  102. package/dist/cjs/locales/vi/refiners/VIMergeDateRangeRefiner.js +13 -0
  103. package/dist/cjs/locales/vi/refiners/VIMergeDateRangeRefiner.js.map +1 -0
  104. package/dist/cjs/locales/vi/refiners/VIMergeDateTimeRefiner.d.ts +4 -0
  105. package/dist/cjs/locales/vi/refiners/VIMergeDateTimeRefiner.js +13 -0
  106. package/dist/cjs/locales/vi/refiners/VIMergeDateTimeRefiner.js.map +1 -0
  107. package/dist/cjs/locales/vi/refiners/VIMergeWeekdayComponentRefiner.d.ts +3 -0
  108. package/dist/cjs/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js +10 -0
  109. package/dist/cjs/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js.map +1 -0
  110. package/dist/cjs/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +1 -0
  111. package/dist/cjs/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +10 -4
  112. package/dist/cjs/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js.map +1 -1
  113. package/dist/cjs/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +1 -0
  114. package/dist/cjs/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +8 -2
  115. package/dist/cjs/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js.map +1 -1
  116. package/dist/cjs/results.d.ts +0 -2
  117. package/dist/cjs/results.js +1 -10
  118. package/dist/cjs/results.js.map +1 -1
  119. package/dist/esm/calculation/mergingCalculation.js +4 -1
  120. package/dist/esm/calculation/mergingCalculation.js.map +1 -1
  121. package/dist/esm/common/casualReferences.d.ts +1 -1
  122. package/dist/esm/common/casualReferences.js +3 -3
  123. package/dist/esm/common/casualReferences.js.map +1 -1
  124. package/dist/esm/common/refiners/ForwardDateRefiner.js +8 -13
  125. package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
  126. package/dist/esm/index.d.ts +3 -1
  127. package/dist/esm/index.js +3 -1
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/locales/de/parsers/DETimeUnitRelativeFormatParser.js +1 -1
  130. package/dist/esm/locales/de/parsers/DETimeUnitRelativeFormatParser.js.map +1 -1
  131. package/dist/esm/locales/en/constants.d.ts +1 -1
  132. package/dist/esm/locales/en/constants.js +1 -1
  133. package/dist/esm/locales/en/parsers/ENWeekdayParser.js +1 -1
  134. package/dist/esm/locales/en/parsers/ENWeekdayParser.js.map +1 -1
  135. package/dist/esm/locales/es/parsers/ESCasualTimeParser.js +5 -0
  136. package/dist/esm/locales/es/parsers/ESCasualTimeParser.js.map +1 -1
  137. package/dist/esm/locales/fi/constants.d.ts +24 -0
  138. package/dist/esm/locales/fi/constants.js +191 -0
  139. package/dist/esm/locales/fi/constants.js.map +1 -0
  140. package/dist/esm/locales/fi/index.d.ts +11 -0
  141. package/dist/esm/locales/fi/index.js +48 -0
  142. package/dist/esm/locales/fi/index.js.map +1 -0
  143. package/dist/esm/locales/fi/parsers/FICasualDateParser.d.ts +7 -0
  144. package/dist/esm/locales/fi/parsers/FICasualDateParser.js +63 -0
  145. package/dist/esm/locales/fi/parsers/FICasualDateParser.js.map +1 -0
  146. package/dist/esm/locales/fi/parsers/FICasualTimeParser.d.ts +8 -0
  147. package/dist/esm/locales/fi/parsers/FICasualTimeParser.js +67 -0
  148. package/dist/esm/locales/fi/parsers/FICasualTimeParser.js.map +1 -0
  149. package/dist/esm/locales/fi/parsers/FIMonthNameLittleEndianParser.d.ts +7 -0
  150. package/dist/esm/locales/fi/parsers/FIMonthNameLittleEndianParser.js +45 -0
  151. package/dist/esm/locales/fi/parsers/FIMonthNameLittleEndianParser.js.map +1 -0
  152. package/dist/esm/locales/fi/parsers/FITimeExpressionParser.d.ts +8 -0
  153. package/dist/esm/locales/fi/parsers/FITimeExpressionParser.js +16 -0
  154. package/dist/esm/locales/fi/parsers/FITimeExpressionParser.js.map +1 -0
  155. package/dist/esm/locales/fi/parsers/FITimeUnitAgoFormatParser.d.ts +7 -0
  156. package/dist/esm/locales/fi/parsers/FITimeUnitAgoFormatParser.js +15 -0
  157. package/dist/esm/locales/fi/parsers/FITimeUnitAgoFormatParser.js.map +1 -0
  158. package/dist/esm/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.d.ts +9 -0
  159. package/dist/esm/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js +37 -0
  160. package/dist/esm/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.js.map +1 -0
  161. package/dist/esm/locales/fi/parsers/FITimeUnitWithinFormatParser.d.ts +7 -0
  162. package/dist/esm/locales/fi/parsers/FITimeUnitWithinFormatParser.js +13 -0
  163. package/dist/esm/locales/fi/parsers/FITimeUnitWithinFormatParser.js.map +1 -0
  164. package/dist/esm/locales/fi/parsers/FIWeekdayParser.d.ts +7 -0
  165. package/dist/esm/locales/fi/parsers/FIWeekdayParser.js +36 -0
  166. package/dist/esm/locales/fi/parsers/FIWeekdayParser.js.map +1 -0
  167. package/dist/esm/locales/fi/refiners/FIMergeDateRangeRefiner.d.ts +4 -0
  168. package/dist/esm/locales/fi/refiners/FIMergeDateRangeRefiner.js +7 -0
  169. package/dist/esm/locales/fi/refiners/FIMergeDateRangeRefiner.js.map +1 -0
  170. package/dist/esm/locales/fi/refiners/FIMergeDateTimeRefiner.d.ts +4 -0
  171. package/dist/esm/locales/fi/refiners/FIMergeDateTimeRefiner.js +7 -0
  172. package/dist/esm/locales/fi/refiners/FIMergeDateTimeRefiner.js.map +1 -0
  173. package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js +1 -1
  174. package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js.map +1 -1
  175. package/dist/esm/locales/nl/parsers/NLCasualTimeParser.js +5 -0
  176. package/dist/esm/locales/nl/parsers/NLCasualTimeParser.js.map +1 -1
  177. package/dist/esm/locales/pt/parsers/PTCasualTimeParser.js +5 -0
  178. package/dist/esm/locales/pt/parsers/PTCasualTimeParser.js.map +1 -1
  179. package/dist/esm/locales/vi/constants.d.ts +20 -0
  180. package/dist/esm/locales/vi/constants.js +101 -0
  181. package/dist/esm/locales/vi/constants.js.map +1 -0
  182. package/dist/esm/locales/vi/index.d.ts +11 -0
  183. package/dist/esm/locales/vi/index.js +59 -0
  184. package/dist/esm/locales/vi/index.js.map +1 -0
  185. package/dist/esm/locales/vi/parsers/VICasualDateParser.d.ts +7 -0
  186. package/dist/esm/locales/vi/parsers/VICasualDateParser.js +27 -0
  187. package/dist/esm/locales/vi/parsers/VICasualDateParser.js.map +1 -0
  188. package/dist/esm/locales/vi/parsers/VICasualTimeParser.d.ts +8 -0
  189. package/dist/esm/locales/vi/parsers/VICasualTimeParser.js +56 -0
  190. package/dist/esm/locales/vi/parsers/VICasualTimeParser.js.map +1 -0
  191. package/dist/esm/locales/vi/parsers/VIMonthYearParser.d.ts +7 -0
  192. package/dist/esm/locales/vi/parsers/VIMonthYearParser.js +27 -0
  193. package/dist/esm/locales/vi/parsers/VIMonthYearParser.js.map +1 -0
  194. package/dist/esm/locales/vi/parsers/VIStandardParser.d.ts +7 -0
  195. package/dist/esm/locales/vi/parsers/VIStandardParser.js +36 -0
  196. package/dist/esm/locales/vi/parsers/VIStandardParser.js.map +1 -0
  197. package/dist/esm/locales/vi/parsers/VITimeExpressionParser.d.ts +7 -0
  198. package/dist/esm/locales/vi/parsers/VITimeExpressionParser.js +56 -0
  199. package/dist/esm/locales/vi/parsers/VITimeExpressionParser.js.map +1 -0
  200. package/dist/esm/locales/vi/parsers/VITimeUnitAgoFormatParser.d.ts +9 -0
  201. package/dist/esm/locales/vi/parsers/VITimeUnitAgoFormatParser.js +22 -0
  202. package/dist/esm/locales/vi/parsers/VITimeUnitAgoFormatParser.js.map +1 -0
  203. package/dist/esm/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.d.ts +7 -0
  204. package/dist/esm/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js +34 -0
  205. package/dist/esm/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.js.map +1 -0
  206. package/dist/esm/locales/vi/parsers/VITimeUnitLaterFormatParser.d.ts +9 -0
  207. package/dist/esm/locales/vi/parsers/VITimeUnitLaterFormatParser.js +21 -0
  208. package/dist/esm/locales/vi/parsers/VITimeUnitLaterFormatParser.js.map +1 -0
  209. package/dist/esm/locales/vi/parsers/VITimeUnitWithinFormatParser.d.ts +9 -0
  210. package/dist/esm/locales/vi/parsers/VITimeUnitWithinFormatParser.js +21 -0
  211. package/dist/esm/locales/vi/parsers/VITimeUnitWithinFormatParser.js.map +1 -0
  212. package/dist/esm/locales/vi/parsers/VIWeekdayParser.d.ts +7 -0
  213. package/dist/esm/locales/vi/parsers/VIWeekdayParser.js +33 -0
  214. package/dist/esm/locales/vi/parsers/VIWeekdayParser.js.map +1 -0
  215. package/dist/esm/locales/vi/parsers/VIYearParser.d.ts +7 -0
  216. package/dist/esm/locales/vi/parsers/VIYearParser.js +26 -0
  217. package/dist/esm/locales/vi/parsers/VIYearParser.js.map +1 -0
  218. package/dist/esm/locales/vi/refiners/VIMergeDateRangeRefiner.d.ts +4 -0
  219. package/dist/esm/locales/vi/refiners/VIMergeDateRangeRefiner.js +7 -0
  220. package/dist/esm/locales/vi/refiners/VIMergeDateRangeRefiner.js.map +1 -0
  221. package/dist/esm/locales/vi/refiners/VIMergeDateTimeRefiner.d.ts +4 -0
  222. package/dist/esm/locales/vi/refiners/VIMergeDateTimeRefiner.js +7 -0
  223. package/dist/esm/locales/vi/refiners/VIMergeDateTimeRefiner.js.map +1 -0
  224. package/dist/esm/locales/vi/refiners/VIMergeWeekdayComponentRefiner.d.ts +3 -0
  225. package/dist/esm/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js +4 -0
  226. package/dist/esm/locales/vi/refiners/VIMergeWeekdayComponentRefiner.js.map +1 -0
  227. package/dist/esm/locales/zh/hans/parsers/ZHHansTimeExpressionParser.d.ts +1 -0
  228. package/dist/esm/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js +10 -4
  229. package/dist/esm/locales/zh/hans/parsers/ZHHansTimeExpressionParser.js.map +1 -1
  230. package/dist/esm/locales/zh/hant/parsers/ZHHantTimeExpressionParser.d.ts +1 -0
  231. package/dist/esm/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js +8 -2
  232. package/dist/esm/locales/zh/hant/parsers/ZHHantTimeExpressionParser.js.map +1 -1
  233. package/dist/esm/results.d.ts +0 -2
  234. package/dist/esm/results.js +1 -7
  235. package/dist/esm/results.js.map +1 -1
  236. package/package.json +3 -5
  237. package/src/calculation/mergingCalculation.ts +7 -1
  238. package/src/common/casualReferences.ts +4 -10
  239. package/src/common/refiners/ForwardDateRefiner.ts +8 -14
  240. package/src/index.ts +3 -1
  241. package/src/locales/de/parsers/DETimeUnitRelativeFormatParser.ts +1 -1
  242. package/src/locales/en/constants.ts +1 -1
  243. package/src/locales/en/parsers/ENWeekdayParser.ts +1 -1
  244. package/src/locales/es/parsers/ESCasualTimeParser.ts +5 -0
  245. package/src/locales/fi/constants.ts +209 -0
  246. package/src/locales/fi/index.ts +57 -0
  247. package/src/locales/fi/parsers/FICasualDateParser.ts +82 -0
  248. package/src/locales/fi/parsers/FICasualTimeParser.ts +78 -0
  249. package/src/locales/fi/parsers/FIMonthNameLittleEndianParser.ts +57 -0
  250. package/src/locales/fi/parsers/FITimeExpressionParser.ts +22 -0
  251. package/src/locales/fi/parsers/FITimeUnitAgoFormatParser.ts +18 -0
  252. package/src/locales/fi/parsers/FITimeUnitCasualRelativeFormatParser.ts +47 -0
  253. package/src/locales/fi/parsers/FITimeUnitWithinFormatParser.ts +15 -0
  254. package/src/locales/fi/parsers/FIWeekdayParser.ts +46 -0
  255. package/src/locales/fi/refiners/FIMergeDateRangeRefiner.ts +7 -0
  256. package/src/locales/fi/refiners/FIMergeDateTimeRefiner.ts +7 -0
  257. package/src/locales/it/parsers/ITTimeExpressionParser.ts +1 -1
  258. package/src/locales/nl/parsers/NLCasualTimeParser.ts +5 -0
  259. package/src/locales/pt/parsers/PTCasualTimeParser.ts +5 -0
  260. package/src/locales/vi/constants.ts +113 -0
  261. package/src/locales/vi/index.ts +73 -0
  262. package/src/locales/vi/parsers/VICasualDateParser.ts +31 -0
  263. package/src/locales/vi/parsers/VICasualTimeParser.ts +62 -0
  264. package/src/locales/vi/parsers/VIMonthYearParser.ts +35 -0
  265. package/src/locales/vi/parsers/VIStandardParser.ts +45 -0
  266. package/src/locales/vi/parsers/VITimeExpressionParser.ts +66 -0
  267. package/src/locales/vi/parsers/VITimeUnitAgoFormatParser.ts +23 -0
  268. package/src/locales/vi/parsers/VITimeUnitCasualRelativeFormatParser.ts +46 -0
  269. package/src/locales/vi/parsers/VITimeUnitLaterFormatParser.ts +25 -0
  270. package/src/locales/vi/parsers/VITimeUnitWithinFormatParser.ts +22 -0
  271. package/src/locales/vi/parsers/VIWeekdayParser.ts +41 -0
  272. package/src/locales/vi/parsers/VIYearParser.ts +31 -0
  273. package/src/locales/vi/refiners/VIMergeDateRangeRefiner.ts +7 -0
  274. package/src/locales/vi/refiners/VIMergeDateTimeRefiner.ts +7 -0
  275. package/src/locales/vi/refiners/VIMergeWeekdayComponentRefiner.ts +7 -0
  276. package/src/locales/zh/hans/parsers/ZHHansTimeExpressionParser.ts +15 -4
  277. package/src/locales/zh/hant/parsers/ZHHantTimeExpressionParser.ts +14 -2
  278. package/src/results.ts +1 -10
  279. package/test/de/de_time_units_casual_relative.test.ts +12 -0
  280. package/test/en/en_month_name_little_endian.test.ts +30 -0
  281. package/test/en/en_time_units_casual_relative.test.ts +11 -0
  282. package/test/en/en_weekday.test.ts +123 -0
  283. package/test/fi/fi_casual.test.ts +85 -0
  284. package/test/fi/fi_casual_time.test.ts +56 -0
  285. package/test/fi/fi_month_name_little_endian.test.ts +50 -0
  286. package/test/fi/fi_time_exp.test.ts +39 -0
  287. package/test/fi/fi_time_units_ago.test.ts +93 -0
  288. package/test/fi/fi_time_units_casual_relative.test.ts +117 -0
  289. package/test/fi/fi_time_units_within.test.ts +74 -0
  290. package/test/fi/fi_weekday.test.ts +90 -0
  291. package/test/it/it_month_name_middle_endian.test.ts +39 -0
  292. package/test/it/it_time_exp.test.ts +84 -0
  293. package/test/it/it_year_month_day.test.ts +41 -0
  294. package/test/result.test.ts +8 -0
  295. package/test/system.test.ts +4 -3
  296. package/test/system_timezone.test.ts +99 -0
  297. package/test/vi/vi_casual.test.ts +84 -0
  298. package/test/vi/vi_casual_time.test.ts +77 -0
  299. package/test/vi/vi_date_range.test.ts +61 -0
  300. package/test/vi/vi_forward_date.test.ts +45 -0
  301. package/test/vi/vi_month_year.test.ts +40 -0
  302. package/test/vi/vi_negative_cases.test.ts +60 -0
  303. package/test/vi/vi_slash.test.ts +36 -0
  304. package/test/vi/vi_standard.test.ts +86 -0
  305. package/test/vi/vi_strict.test.ts +67 -0
  306. package/test/vi/vi_time_exp.test.ts +99 -0
  307. package/test/vi/vi_time_units_ago.test.ts +56 -0
  308. package/test/vi/vi_time_units_casual_relative.test.ts +56 -0
  309. package/test/vi/vi_time_units_later.test.ts +43 -0
  310. package/test/vi/vi_time_units_within.test.ts +24 -0
  311. package/test/vi/vi_weekday.test.ts +77 -0
  312. package/test/vi/vi_year.test.ts +42 -0
  313. package/test/zh/hans/zh_hans_time_exp.test.ts +252 -6
  314. package/test/zh/hant/zh_hant_time_exp.test.ts +30 -0
@@ -0,0 +1,82 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingComponents, ParsingResult } from "../../../results";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
4
+ import { assignSimilarDate, implySimilarTime } from "../../../utils/dates";
5
+ import FICasualTimeParser from "./FICasualTimeParser";
6
+ import * as references from "../../../common/casualReferences";
7
+ import { addDuration } from "../../../calculation/duration";
8
+
9
+ const PATTERN = new RegExp(
10
+ `(nyt|tänään|huomenna|ylihuomenna|eilen|toissapäivänä|viime\\s*yönä)` +
11
+ `(?:\\s*(aamulla|aamuna|aamupäivällä|päivällä|iltapäivällä|illalla|yöllä|keskiyöllä))?` +
12
+ `(?=\\W|$)`,
13
+ "i"
14
+ );
15
+
16
+ const DATE_GROUP = 1;
17
+ const TIME_GROUP = 2;
18
+
19
+ export default class FICasualDateParser extends AbstractParserWithWordBoundaryChecking {
20
+ innerPattern(context: ParsingContext): RegExp {
21
+ return PATTERN;
22
+ }
23
+
24
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult {
25
+ let targetDate = context.reference.getDateWithAdjustedTimezone();
26
+ const dateKeyword = (match[DATE_GROUP] || "").toLowerCase();
27
+ const timeKeyword = (match[TIME_GROUP] || "").toLowerCase();
28
+
29
+ let component = context.createParsingComponents();
30
+ switch (dateKeyword) {
31
+ case "nyt":
32
+ component = references.now(context.reference);
33
+ break;
34
+
35
+ case "tänään":
36
+ component = references.today(context.reference);
37
+ break;
38
+
39
+ case "huomenna":
40
+ targetDate = addDuration(targetDate, { day: 1 });
41
+ assignSimilarDate(component, targetDate);
42
+ implySimilarTime(component, targetDate);
43
+ break;
44
+
45
+ case "ylihuomenna":
46
+ targetDate = addDuration(targetDate, { day: 2 });
47
+ assignSimilarDate(component, targetDate);
48
+ implySimilarTime(component, targetDate);
49
+ break;
50
+
51
+ case "eilen":
52
+ targetDate = addDuration(targetDate, { day: -1 });
53
+ assignSimilarDate(component, targetDate);
54
+ implySimilarTime(component, targetDate);
55
+ break;
56
+
57
+ case "toissapäivänä":
58
+ targetDate = addDuration(targetDate, { day: -2 });
59
+ assignSimilarDate(component, targetDate);
60
+ implySimilarTime(component, targetDate);
61
+ break;
62
+
63
+ default:
64
+ if (dateKeyword.match(/viime\s*yönä/)) {
65
+ if (targetDate.getHours() > 6) {
66
+ targetDate = addDuration(targetDate, { day: -1 });
67
+ }
68
+
69
+ assignSimilarDate(component, targetDate);
70
+ component.imply("hour", 0);
71
+ }
72
+
73
+ break;
74
+ }
75
+
76
+ if (timeKeyword) {
77
+ component = FICasualTimeParser.extractTimeComponents(component, timeKeyword);
78
+ }
79
+
80
+ return component;
81
+ }
82
+ }
@@ -0,0 +1,78 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingComponents, ParsingResult } from "../../../results";
3
+ import { Meridiem } from "../../../types";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
5
+ import { implySimilarTime } from "../../../utils/dates";
6
+
7
+ export default class FICasualTimeParser extends AbstractParserWithWordBoundaryChecking {
8
+ innerPattern(context: ParsingContext): RegExp {
9
+ return /(tänä\s*)?(aamulla|aamuna|aamupäivällä|päivällä|iltapäivällä|illalla|yöllä|keskiyöllä)(?=\W|$)/i;
10
+ }
11
+
12
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | ParsingResult {
13
+ const targetDate = context.refDate;
14
+ const timeKeywordPattern = match[2].toLowerCase();
15
+ const component = context.createParsingComponents();
16
+ implySimilarTime(component, targetDate);
17
+ return FICasualTimeParser.extractTimeComponents(component, timeKeywordPattern);
18
+ }
19
+
20
+ static extractTimeComponents(component: ParsingComponents, timeKeywordPattern: string): ParsingComponents {
21
+ switch (timeKeywordPattern) {
22
+ case "aamulla":
23
+ case "aamuna":
24
+ component.imply("hour", 6);
25
+ component.imply("minute", 0);
26
+ component.imply("second", 0);
27
+ component.imply("meridiem", Meridiem.AM);
28
+ break;
29
+
30
+ case "aamupäivällä":
31
+ component.imply("hour", 9);
32
+ component.imply("minute", 0);
33
+ component.imply("second", 0);
34
+ component.imply("meridiem", Meridiem.AM);
35
+ break;
36
+
37
+ case "päivällä":
38
+ component.imply("hour", 12);
39
+ component.imply("minute", 0);
40
+ component.imply("second", 0);
41
+ component.imply("meridiem", Meridiem.AM);
42
+ break;
43
+
44
+ case "iltapäivällä":
45
+ component.imply("hour", 15);
46
+ component.imply("minute", 0);
47
+ component.imply("second", 0);
48
+ component.imply("meridiem", Meridiem.PM);
49
+ break;
50
+
51
+ case "illalla":
52
+ component.imply("hour", 18);
53
+ component.imply("minute", 0);
54
+ component.imply("second", 0);
55
+ component.imply("meridiem", Meridiem.PM);
56
+ break;
57
+
58
+ case "yöllä":
59
+ component.imply("hour", 22);
60
+ component.imply("minute", 0);
61
+ component.imply("second", 0);
62
+ component.imply("meridiem", Meridiem.PM);
63
+ break;
64
+
65
+ case "keskiyöllä":
66
+ if (component.get("hour") > 1) {
67
+ component.addDurationAsImplied({ "day": 1 });
68
+ }
69
+
70
+ component.imply("hour", 0);
71
+ component.imply("minute", 0);
72
+ component.imply("second", 0);
73
+ component.imply("meridiem", Meridiem.AM);
74
+ break;
75
+ }
76
+ return component;
77
+ }
78
+ }
@@ -0,0 +1,57 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingResult } from "../../../results";
3
+ import { findYearClosestToRef } from "../../../calculation/years";
4
+ import { MONTH_DICTIONARY } from "../constants";
5
+ import { parseYear } from "../constants";
6
+ import { matchAnyPattern } from "../../../utils/pattern";
7
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
8
+
9
+ const PATTERN = new RegExp(
10
+ `([0-9]{1,2})\\.?` +
11
+ `(?:\\s*(?:\\-|\\–|\\s)\\s*([0-9]{1,2})\\.?)?\\s*` +
12
+ `(${matchAnyPattern(MONTH_DICTIONARY)})` +
13
+ `(?:(?:-|/|,?\\s*)([0-9]{4}(?![^\\s]\\d)))?` +
14
+ `(?=\\W|$)`,
15
+ "i"
16
+ );
17
+
18
+ const DATE_GROUP = 1;
19
+ const DATE_TO_GROUP = 2;
20
+ const MONTH_NAME_GROUP = 3;
21
+ const YEAR_GROUP = 4;
22
+
23
+ export default class FIMonthNameLittleEndianParser extends AbstractParserWithWordBoundaryChecking {
24
+ innerPattern(): RegExp {
25
+ return PATTERN;
26
+ }
27
+
28
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {
29
+ const result = context.createParsingResult(match.index, match[0]);
30
+
31
+ const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];
32
+ const day = parseInt(match[DATE_GROUP]);
33
+ if (day > 31) {
34
+ match.index = match.index + match[DATE_GROUP].length;
35
+ return null;
36
+ }
37
+
38
+ result.start.assign("month", month);
39
+ result.start.assign("day", day);
40
+
41
+ if (match[YEAR_GROUP]) {
42
+ const yearNumber = parseYear(match[YEAR_GROUP]);
43
+ result.start.assign("year", yearNumber);
44
+ } else {
45
+ const year = findYearClosestToRef(context.refDate, day, month);
46
+ result.start.imply("year", year);
47
+ }
48
+
49
+ if (match[DATE_TO_GROUP]) {
50
+ const endDate = parseInt(match[DATE_TO_GROUP]);
51
+ result.end = result.start.clone();
52
+ result.end.assign("day", endDate);
53
+ }
54
+
55
+ return result;
56
+ }
57
+ }
@@ -0,0 +1,22 @@
1
+ import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser";
2
+ import { ParsingComponents } from "../../../results";
3
+ import { ParsingContext } from "../../../chrono";
4
+
5
+ export default class FITimeExpressionParser extends AbstractTimeExpressionParser {
6
+ primaryPrefix(): string {
7
+ return "(?:(?:klo|kello)\\s*)?";
8
+ }
9
+
10
+ followingPhase(): string {
11
+ return "\\s*(?:\\-|\\–|\\~|\\〜)\\s*";
12
+ }
13
+
14
+ extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): ParsingComponents | null {
15
+ // This looks more like a year e.g. 2020
16
+ if (match[0].match(/^\s*\d{4}\s*$/)) {
17
+ return null;
18
+ }
19
+
20
+ return super.extractPrimaryTimeComponents(context, match);
21
+ }
22
+ }
@@ -0,0 +1,18 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { parseDuration, TIME_UNITS_PATTERN } from "../constants";
3
+ import { ParsingComponents } from "../../../results";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
5
+ import { reverseDuration } from "../../../calculation/duration";
6
+
7
+ export default class FITimeUnitAgoFormatParser extends AbstractParserWithWordBoundaryChecking {
8
+ innerPattern(): RegExp {
9
+ return new RegExp(`(${TIME_UNITS_PATTERN})\\s*sitten(?=\\W|$)`, "i");
10
+ }
11
+
12
+ innerExtract(context: ParsingContext, match: RegExpMatchArray) {
13
+ const timeUnits = parseDuration(match[1]);
14
+ const outputTimeUnits = reverseDuration(timeUnits);
15
+
16
+ return ParsingComponents.createRelativeFromReference(context.reference, outputTimeUnits);
17
+ }
18
+ }
@@ -0,0 +1,47 @@
1
+ import { TIME_UNITS_PATTERN, parseDuration, TIME_UNITS_NO_ABBR_PATTERN } from "../constants";
2
+ import { ParsingContext } from "../../../chrono";
3
+ import { ParsingComponents } from "../../../results";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
5
+ import { reverseDuration } from "../../../calculation/duration";
6
+
7
+ const PATTERN = new RegExp(
8
+ `(seuraava|seuraavat|seuraavien|edellinen|edelliset|edellisten|viimeiset|viimeisten|kuluneet|kuluneiden|\\+|-)\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`,
9
+ "i"
10
+ );
11
+ const PATTERN_NO_ABBR = new RegExp(
12
+ `(seuraava|seuraavat|seuraavien|edellinen|edelliset|edellisten|viimeiset|viimeisten|kuluneet|kuluneiden|\\+|-)\\s*(${TIME_UNITS_NO_ABBR_PATTERN})(?=\\W|$)`,
13
+ "i"
14
+ );
15
+
16
+ export default class FITimeUnitCasualRelativeFormatParser extends AbstractParserWithWordBoundaryChecking {
17
+ constructor(private allowAbbreviations: boolean = true) {
18
+ super();
19
+ }
20
+
21
+ innerPattern(): RegExp {
22
+ return this.allowAbbreviations ? PATTERN : PATTERN_NO_ABBR;
23
+ }
24
+
25
+ innerExtract(context: ParsingContext, match: RegExpMatchArray) {
26
+ const prefix = match[1].toLowerCase();
27
+ let duration = parseDuration(match[2]);
28
+ if (!duration) {
29
+ return null;
30
+ }
31
+
32
+ switch (prefix) {
33
+ case "edellinen":
34
+ case "edelliset":
35
+ case "edellisten":
36
+ case "viimeiset":
37
+ case "viimeisten":
38
+ case "kuluneet":
39
+ case "kuluneiden":
40
+ case "-":
41
+ duration = reverseDuration(duration);
42
+ break;
43
+ }
44
+
45
+ return ParsingComponents.createRelativeFromReference(context.reference, duration);
46
+ }
47
+ }
@@ -0,0 +1,15 @@
1
+ import { TIME_UNITS_PATTERN, parseDuration } from "../constants";
2
+ import { ParsingContext } from "../../../chrono";
3
+ import { ParsingComponents } from "../../../results";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
5
+
6
+ export default class FITimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
7
+ innerPattern(): RegExp {
8
+ return new RegExp(`(${TIME_UNITS_PATTERN})\\s*(?:sisällä|kuluessa|päästä)(?=\\W|$)`, "i");
9
+ }
10
+
11
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
12
+ const timeUnits = parseDuration(match[1]);
13
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
14
+ }
15
+ }
@@ -0,0 +1,46 @@
1
+ import { ParsingContext } from "../../../chrono";
2
+ import { ParsingComponents } from "../../../results";
3
+ import { WEEKDAY_DICTIONARY } from "../constants";
4
+ import { matchAnyPattern } from "../../../utils/pattern";
5
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
6
+ import { createParsingComponentsAtWeekday } from "../../../calculation/weekdays";
7
+
8
+ const PATTERN = new RegExp(
9
+ "(?:(?:\\,|\\(|\\()\\s*)?" +
10
+ "(?:(viime|edellinen|edellisenä|ensi|seuraava|seuraavana|tämä|tänä)\\s*)?" +
11
+ `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
12
+ "(?:\\s*(?:\\,|\\)|\\)))?" +
13
+ "(?:\\s*(viime|ensi|seuraava)\\s*viikolla)?" +
14
+ "(?=\\W|$)",
15
+ "i"
16
+ );
17
+
18
+ const PREFIX_GROUP = 1;
19
+ const WEEKDAY_GROUP = 2;
20
+ const SUFFIX_GROUP = 3;
21
+
22
+ export default class FIWeekdayParser extends AbstractParserWithWordBoundaryChecking {
23
+ innerPattern(): RegExp {
24
+ return PATTERN;
25
+ }
26
+
27
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents {
28
+ const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();
29
+ const offset = WEEKDAY_DICTIONARY[dayOfWeek];
30
+ const prefix = match[PREFIX_GROUP];
31
+ const postfix = match[SUFFIX_GROUP];
32
+
33
+ let modifierWord = prefix || postfix;
34
+ modifierWord = modifierWord || "";
35
+ modifierWord = modifierWord.toLowerCase();
36
+
37
+ let modifier = null;
38
+ if (modifierWord.match(/viime|edellinen|edellisenä/)) {
39
+ modifier = "last";
40
+ } else if (modifierWord.match(/ensi|seuraava|seuraavana/)) {
41
+ modifier = "next";
42
+ }
43
+
44
+ return createParsingComponentsAtWeekday(context.reference, offset, modifier);
45
+ }
46
+ }
@@ -0,0 +1,7 @@
1
+ import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMergeDateRangeRefiner";
2
+
3
+ export default class FIMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {
4
+ patternBetween(): RegExp {
5
+ return /^\s*(-|–)\s*$/i;
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ import AbstractMergeDateTimeRefiner from "../../../common/refiners/AbstractMergeDateTimeRefiner";
2
+
3
+ export default class FIMergeDateTimeRefiner extends AbstractMergeDateTimeRefiner {
4
+ patternBetween(): RegExp {
5
+ return new RegExp("^\\s*(T|klo|kello|,|-)?\\s*$");
6
+ }
7
+ }
@@ -17,7 +17,7 @@ export default class ENTimeExpressionParser extends AbstractTimeExpressionParser
17
17
  }
18
18
 
19
19
  primarySuffix(): string {
20
- return "(?:\\s*(?:o\\W*in punto|alle\\s*sera|in\\s*del\\s*(?:mattina|pomeriggio)))?(?!/)(?=\\W|$)";
20
+ return "(?:\\s*(?:in punto|o\\W*in punto|(?:di|del|della|in|al|alla|alle)\\s*(?:mattina|pomeriggio|sera)))?(?!/)(?=\\W|$)";
21
21
  }
22
22
 
23
23
  extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): null | ParsingComponents {
@@ -26,12 +26,14 @@ export default class NLCasualTimeParser extends AbstractParserWithWordBoundaryCh
26
26
  case "'s namiddags":
27
27
  component.imply("meridiem", Meridiem.PM);
28
28
  component.imply("hour", 15);
29
+ component.addTag("casualReference/afternoon");
29
30
  break;
30
31
 
31
32
  case "avond":
32
33
  case "'s avonds'":
33
34
  component.imply("meridiem", Meridiem.PM);
34
35
  component.imply("hour", 20);
36
+ component.addTag("casualReference/evening");
35
37
  break;
36
38
 
37
39
  case "middernacht":
@@ -42,18 +44,21 @@ export default class NLCasualTimeParser extends AbstractParserWithWordBoundaryCh
42
44
  component.imply("hour", 0);
43
45
  component.imply("minute", 0);
44
46
  component.imply("second", 0);
47
+ component.addTag("casualReference/midnight");
45
48
  break;
46
49
 
47
50
  case "ochtend":
48
51
  case "'s ochtends":
49
52
  component.imply("meridiem", Meridiem.AM);
50
53
  component.imply("hour", 6);
54
+ component.addTag("casualReference/morning");
51
55
  break;
52
56
 
53
57
  case "middag":
54
58
  case "'s middags":
55
59
  component.imply("meridiem", Meridiem.AM);
56
60
  component.imply("hour", 12);
61
+ component.addTag("casualReference/noon");
57
62
  break;
58
63
  }
59
64
 
@@ -15,17 +15,20 @@ export default class PTCasualTimeParser extends AbstractParserWithWordBoundaryCh
15
15
  case "tarde":
16
16
  component.imply("meridiem", Meridiem.PM);
17
17
  component.imply("hour", 15);
18
+ component.addTag("casualReference/afternoon");
18
19
  break;
19
20
 
20
21
  case "noite":
21
22
  component.imply("meridiem", Meridiem.PM);
22
23
  component.imply("hour", 22);
24
+ component.addTag("casualReference/evening");
23
25
  break;
24
26
 
25
27
  case "manha":
26
28
  case "manhã":
27
29
  component.imply("meridiem", Meridiem.AM);
28
30
  component.imply("hour", 6);
31
+ component.addTag("casualReference/morning");
29
32
  break;
30
33
 
31
34
  case "meia-noite":
@@ -36,11 +39,13 @@ export default class PTCasualTimeParser extends AbstractParserWithWordBoundaryCh
36
39
  component.imply("hour", 0);
37
40
  component.imply("minute", 0);
38
41
  component.imply("second", 0);
42
+ component.addTag("casualReference/midnight");
39
43
  break;
40
44
 
41
45
  case "meio-dia":
42
46
  component.imply("meridiem", Meridiem.AM);
43
47
  component.imply("hour", 12);
48
+ component.addTag("casualReference/noon");
44
49
  break;
45
50
  }
46
51
 
@@ -0,0 +1,113 @@
1
+ import { matchAnyPattern, repeatedTimeunitPattern } from "../../utils/pattern";
2
+ import { findMostLikelyADYear } from "../../calculation/years";
3
+ import { Duration } from "../../calculation/duration";
4
+ import { Timeunit } from "../../types";
5
+
6
+ export const WEEKDAY_DICTIONARY: { [word: string]: number } = {
7
+ "ch\u1ee7 nh\u1eadt": 0,
8
+ "cn": 0,
9
+ "th\u1ee9 hai": 1,
10
+ "t2": 1,
11
+ "th\u1ee9 ba": 2,
12
+ "t3": 2,
13
+ "th\u1ee9 t\u01b0": 3,
14
+ "t4": 3,
15
+ "th\u1ee9 n\u0103m": 4,
16
+ "t5": 4,
17
+ "th\u1ee9 s\u00e1u": 5,
18
+ "t6": 5,
19
+ "th\u1ee9 b\u1ea3y": 6,
20
+ "t7": 6,
21
+ };
22
+
23
+ export const MONTH_DICTIONARY: { [word: string]: number } = {
24
+ "th\u00e1ng 1": 1,
25
+ "th\u00e1ng m\u1ed9t": 1,
26
+ "th\u00e1ng gi\u00eang": 1,
27
+ "th\u00e1ng 2": 2,
28
+ "th\u00e1ng hai": 2,
29
+ "th\u00e1ng 3": 3,
30
+ "th\u00e1ng ba": 3,
31
+ "th\u00e1ng 4": 4,
32
+ "th\u00e1ng t\u01b0": 4,
33
+ "th\u00e1ng 5": 5,
34
+ "th\u00e1ng n\u0103m": 5,
35
+ "th\u00e1ng 6": 6,
36
+ "th\u00e1ng s\u00e1u": 6,
37
+ "th\u00e1ng 7": 7,
38
+ "th\u00e1ng b\u1ea3y": 7,
39
+ "th\u00e1ng 8": 8,
40
+ "th\u00e1ng t\u00e1m": 8,
41
+ "th\u00e1ng 9": 9,
42
+ "th\u00e1ng ch\u00edn": 9,
43
+ "th\u00e1ng 10": 10,
44
+ "th\u00e1ng m\u01b0\u1eddi": 10,
45
+ "th\u00e1ng 11": 11,
46
+ "th\u00e1ng m\u01b0\u1eddi m\u1ed9t": 11,
47
+ "th\u00e1ng 12": 12,
48
+ "th\u00e1ng m\u01b0\u1eddi hai": 12,
49
+ "th\u00e1ng ch\u1ea1p": 12,
50
+ };
51
+
52
+ export const INTEGER_WORD_DICTIONARY: { [word: string]: number } = {
53
+ "m\u1ed9t": 1,
54
+ "hai": 2,
55
+ "ba": 3,
56
+ "b\u1ed1n": 4,
57
+ "n\u0103m": 5,
58
+ "s\u00e1u": 6,
59
+ "b\u1ea3y": 7,
60
+ "t\u00e1m": 8,
61
+ "ch\u00edn": 9,
62
+ "m\u01b0\u1eddi": 10,
63
+ "m\u01b0\u1eddi m\u1ed9t": 11,
64
+ "m\u01b0\u1eddi hai": 12,
65
+ };
66
+
67
+ export const TIME_UNIT_DICTIONARY: { [word: string]: Timeunit } = {
68
+ "gi\u00e2y": "second",
69
+ "ph\u00fat": "minute",
70
+ "gi\u1edd": "hour",
71
+ "ng\u00e0y": "day",
72
+ "tu\u1ea7n": "week",
73
+ "th\u00e1ng": "month",
74
+ "n\u0103m": "year",
75
+ };
76
+
77
+ export const NUMBER_PATTERN = "(?:" + matchAnyPattern(INTEGER_WORD_DICTIONARY) + "|[0-9]+|[0-9]+\\.[0-9]+)";
78
+
79
+ export function parseNumberPattern(match: string): number {
80
+ const num = match.toLowerCase();
81
+ if (INTEGER_WORD_DICTIONARY[num] !== undefined) return INTEGER_WORD_DICTIONARY[num];
82
+ return parseFloat(num);
83
+ }
84
+
85
+ // YYYY, YYYY TCN (Tr\u01b0\u1edbc C\u00f4ng nguy\u00ean = BC)
86
+ export const YEAR_PATTERN = "(?:[0-9]{1,4}(?:\\s*TCN)?)";
87
+
88
+ export function parseYear(match: string): number {
89
+ const upper = match.toUpperCase();
90
+ const num = parseInt(match.replace(/[^0-9]+/g, ""));
91
+ if (/TCN/.test(upper)) return -num;
92
+ return findMostLikelyADYear(num);
93
+ }
94
+
95
+ const SINGLE_TIME_UNIT_PATTERN =
96
+ "(" + NUMBER_PATTERN + ")\\s{0,5}(" + matchAnyPattern(TIME_UNIT_DICTIONARY) + ")\\s{0,5}";
97
+ const SINGLE_TIME_UNIT_REGEX = new RegExp(SINGLE_TIME_UNIT_PATTERN, "i");
98
+
99
+ export const TIME_UNITS_PATTERN = repeatedTimeunitPattern("", SINGLE_TIME_UNIT_PATTERN);
100
+
101
+ export function parseDuration(timeunitText: string): Duration {
102
+ const fragments: { [key: string]: number } = {};
103
+ let remainingText = timeunitText;
104
+ let match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
105
+ while (match) {
106
+ const num = parseNumberPattern(match[1]);
107
+ const unit = TIME_UNIT_DICTIONARY[match[2].toLowerCase()];
108
+ fragments[unit] = num;
109
+ remainingText = remainingText.substring(match[0].length);
110
+ match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
111
+ }
112
+ return fragments as Duration;
113
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Chrono components for Vietnamese support (*parsers*, *refiners*, and *configuration*)
3
+ *
4
+ * @module
5
+ */
6
+ import { includeCommonConfiguration } from "../../configurations";
7
+ import { Chrono, Configuration, Parser, Refiner } from "../../chrono";
8
+ import { ParsingResult, ParsingComponents, ReferenceWithTimezone } from "../../results";
9
+ import { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday } from "../../types";
10
+ import ISOFormatParser from "../../common/parsers/ISOFormatParser";
11
+ import SlashDateFormatParser from "../../common/parsers/SlashDateFormatParser";
12
+ import VIStandardParser from "./parsers/VIStandardParser";
13
+ import VIMonthYearParser from "./parsers/VIMonthYearParser";
14
+ import VIYearParser from "./parsers/VIYearParser";
15
+ import VICasualDateParser from "./parsers/VICasualDateParser";
16
+ import VICasualTimeParser from "./parsers/VICasualTimeParser";
17
+ import VIWeekdayParser from "./parsers/VIWeekdayParser";
18
+ import VITimeExpressionParser from "./parsers/VITimeExpressionParser";
19
+ import VITimeUnitAgoFormatParser from "./parsers/VITimeUnitAgoFormatParser";
20
+ import VITimeUnitLaterFormatParser from "./parsers/VITimeUnitLaterFormatParser";
21
+ import VITimeUnitWithinFormatParser from "./parsers/VITimeUnitWithinFormatParser";
22
+ import VITimeUnitCasualRelativeFormatParser from "./parsers/VITimeUnitCasualRelativeFormatParser";
23
+ import VIMergeDateRangeRefiner from "./refiners/VIMergeDateRangeRefiner";
24
+ import VIMergeDateTimeRefiner from "./refiners/VIMergeDateTimeRefiner";
25
+ import VIMergeWeekdayComponentRefiner from "./refiners/VIMergeWeekdayComponentRefiner";
26
+
27
+ export { Chrono, Parser, Refiner, ParsingResult, ParsingComponents, ReferenceWithTimezone };
28
+ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday };
29
+
30
+ // Shortcuts
31
+ export const casual = new Chrono(createCasualConfiguration());
32
+ export const strict = new Chrono(createConfiguration(true));
33
+
34
+ export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
35
+ return casual.parse(text, ref, option);
36
+ }
37
+
38
+ export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
39
+ return casual.parseDate(text, ref, option);
40
+ }
41
+
42
+ export function createCasualConfiguration(littleEndian = true): Configuration {
43
+ const option = createConfiguration(false, littleEndian);
44
+ option.parsers.unshift(new VICasualTimeParser());
45
+ option.parsers.unshift(new VICasualDateParser());
46
+ option.parsers.unshift(new VITimeUnitCasualRelativeFormatParser());
47
+ return option;
48
+ }
49
+
50
+ export function createConfiguration(strictMode = true, littleEndian = true): Configuration {
51
+ return includeCommonConfiguration(
52
+ {
53
+ parsers: [
54
+ new ISOFormatParser(),
55
+ new SlashDateFormatParser(littleEndian),
56
+ new VIStandardParser(),
57
+ new VIMonthYearParser(),
58
+ new VIYearParser(),
59
+ new VIWeekdayParser(),
60
+ new VITimeExpressionParser(),
61
+ new VITimeUnitAgoFormatParser(strictMode),
62
+ new VITimeUnitLaterFormatParser(strictMode),
63
+ new VITimeUnitWithinFormatParser(strictMode),
64
+ ],
65
+ refiners: [
66
+ new VIMergeWeekdayComponentRefiner(),
67
+ new VIMergeDateRangeRefiner(),
68
+ new VIMergeDateTimeRefiner(),
69
+ ],
70
+ },
71
+ strictMode
72
+ );
73
+ }