chrono-node 2.7.8 → 2.8.0

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 (182) hide show
  1. package/dist/cjs/common/casualReferences.js +8 -10
  2. package/dist/cjs/common/casualReferences.js.map +1 -1
  3. package/dist/cjs/common/refiners/ForwardDateRefiner.js +33 -12
  4. package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
  5. package/dist/cjs/locales/en/parsers/ENCasualDateParser.js +4 -1
  6. package/dist/cjs/locales/en/parsers/ENCasualDateParser.js.map +1 -1
  7. package/dist/cjs/locales/it/constants.d.ts +28 -0
  8. package/dist/cjs/locales/it/constants.js +165 -0
  9. package/dist/cjs/locales/it/constants.js.map +1 -0
  10. package/dist/cjs/locales/it/index.d.ts +9 -0
  11. package/dist/cjs/locales/it/index.js +66 -0
  12. package/dist/cjs/locales/it/index.js.map +1 -0
  13. package/dist/cjs/locales/it/parsers/ITCasualDateParser.d.ts +7 -0
  14. package/dist/cjs/locales/it/parsers/ITCasualDateParser.js +65 -0
  15. package/dist/cjs/locales/it/parsers/ITCasualDateParser.js.map +1 -0
  16. package/dist/cjs/locales/it/parsers/ITCasualTimeParser.d.ts +6 -0
  17. package/dist/cjs/locales/it/parsers/ITCasualTimeParser.js +47 -0
  18. package/dist/cjs/locales/it/parsers/ITCasualTimeParser.js.map +1 -0
  19. package/dist/cjs/locales/it/parsers/ITCasualYearMonthDayParser.d.ts +10 -0
  20. package/dist/cjs/locales/it/parsers/ITCasualYearMonthDayParser.js +35 -0
  21. package/dist/cjs/locales/it/parsers/ITCasualYearMonthDayParser.js.map +1 -0
  22. package/dist/cjs/locales/it/parsers/ITMonthNameLittleEndianParser.d.ts +7 -0
  23. package/dist/cjs/locales/it/parsers/ITMonthNameLittleEndianParser.js +57 -0
  24. package/dist/cjs/locales/it/parsers/ITMonthNameLittleEndianParser.js.map +1 -0
  25. package/dist/cjs/locales/it/parsers/ITMonthNameMiddleEndianParser.d.ts +6 -0
  26. package/dist/cjs/locales/it/parsers/ITMonthNameMiddleEndianParser.js +59 -0
  27. package/dist/cjs/locales/it/parsers/ITMonthNameMiddleEndianParser.js.map +1 -0
  28. package/dist/cjs/locales/it/parsers/ITMonthNameParser.d.ts +6 -0
  29. package/dist/cjs/locales/it/parsers/ITMonthNameParser.js +43 -0
  30. package/dist/cjs/locales/it/parsers/ITMonthNameParser.js.map +1 -0
  31. package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.d.ts +7 -0
  32. package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.js +57 -0
  33. package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.js.map +1 -0
  34. package/dist/cjs/locales/it/parsers/ITSlashMonthFormatParser.d.ts +7 -0
  35. package/dist/cjs/locales/it/parsers/ITSlashMonthFormatParser.js +18 -0
  36. package/dist/cjs/locales/it/parsers/ITSlashMonthFormatParser.js.map +1 -0
  37. package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.d.ts +10 -0
  38. package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js +50 -0
  39. package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js.map +1 -0
  40. package/dist/cjs/locales/it/parsers/ITTimeUnitAgoFormatParser.d.ts +9 -0
  41. package/dist/cjs/locales/it/parsers/ITTimeUnitAgoFormatParser.js +24 -0
  42. package/dist/cjs/locales/it/parsers/ITTimeUnitAgoFormatParser.js.map +1 -0
  43. package/dist/cjs/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.d.ts +7 -0
  44. package/dist/cjs/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js +26 -0
  45. package/dist/cjs/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js.map +1 -0
  46. package/dist/cjs/locales/it/parsers/ITTimeUnitLaterFormatParser.d.ts +9 -0
  47. package/dist/cjs/locales/it/parsers/ITTimeUnitLaterFormatParser.js +23 -0
  48. package/dist/cjs/locales/it/parsers/ITTimeUnitLaterFormatParser.js.map +1 -0
  49. package/dist/cjs/locales/it/parsers/ITTimeUnitWithinFormatParser.d.ts +7 -0
  50. package/dist/cjs/locales/it/parsers/ITTimeUnitWithinFormatParser.js +19 -0
  51. package/dist/cjs/locales/it/parsers/ITTimeUnitWithinFormatParser.js.map +1 -0
  52. package/dist/cjs/locales/it/parsers/ITWeekdayParser.d.ts +7 -0
  53. package/dist/cjs/locales/it/parsers/ITWeekdayParser.js +43 -0
  54. package/dist/cjs/locales/it/parsers/ITWeekdayParser.js.map +1 -0
  55. package/dist/cjs/locales/it/refiners/ITMergeDateRangeRefiner.d.ts +4 -0
  56. package/dist/cjs/locales/it/refiners/ITMergeDateRangeRefiner.js +13 -0
  57. package/dist/cjs/locales/it/refiners/ITMergeDateRangeRefiner.js.map +1 -0
  58. package/dist/cjs/locales/it/refiners/ITMergeDateTimeRefiner.d.ts +4 -0
  59. package/dist/cjs/locales/it/refiners/ITMergeDateTimeRefiner.js +13 -0
  60. package/dist/cjs/locales/it/refiners/ITMergeDateTimeRefiner.js.map +1 -0
  61. package/dist/cjs/locales/it/refiners/ITMergeRelativeDateRefiner.d.ts +7 -0
  62. package/dist/cjs/locales/it/refiners/ITMergeRelativeDateRefiner.js +36 -0
  63. package/dist/cjs/locales/it/refiners/ITMergeRelativeDateRefiner.js.map +1 -0
  64. package/dist/cjs/locales/ja/parsers/JPCasualDateParser.js +4 -4
  65. package/dist/cjs/locales/ja/refiners/JPMergeDateRangeRefiner.js +1 -1
  66. package/dist/cjs/locales/ja/refiners/JPMergeDateRangeRefiner.js.map +1 -1
  67. package/dist/cjs/results.d.ts +1 -0
  68. package/dist/cjs/results.js +18 -13
  69. package/dist/cjs/results.js.map +1 -1
  70. package/dist/cjs/utils/dates.d.ts +3 -0
  71. package/dist/cjs/utils/dates.js +17 -0
  72. package/dist/cjs/utils/dates.js.map +1 -0
  73. package/dist/cjs/utils/dayjs.js.map +1 -1
  74. package/dist/esm/common/casualReferences.js +8 -10
  75. package/dist/esm/common/casualReferences.js.map +1 -1
  76. package/dist/esm/common/refiners/ForwardDateRefiner.js +14 -12
  77. package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
  78. package/dist/esm/locales/en/parsers/ENCasualDateParser.js +4 -1
  79. package/dist/esm/locales/en/parsers/ENCasualDateParser.js.map +1 -1
  80. package/dist/esm/locales/it/constants.d.ts +28 -0
  81. package/dist/esm/locales/it/constants.js +200 -0
  82. package/dist/esm/locales/it/constants.js.map +1 -0
  83. package/dist/esm/locales/it/index.d.ts +9 -0
  84. package/dist/esm/locales/it/index.js +56 -0
  85. package/dist/esm/locales/it/index.js.map +1 -0
  86. package/dist/esm/locales/it/parsers/ITCasualDateParser.d.ts +7 -0
  87. package/dist/esm/locales/it/parsers/ITCasualDateParser.js +40 -0
  88. package/dist/esm/locales/it/parsers/ITCasualDateParser.js.map +1 -0
  89. package/dist/esm/locales/it/parsers/ITCasualTimeParser.d.ts +6 -0
  90. package/dist/esm/locales/it/parsers/ITCasualTimeParser.js +41 -0
  91. package/dist/esm/locales/it/parsers/ITCasualTimeParser.js.map +1 -0
  92. package/dist/esm/locales/it/parsers/ITCasualYearMonthDayParser.d.ts +10 -0
  93. package/dist/esm/locales/it/parsers/ITCasualYearMonthDayParser.js +32 -0
  94. package/dist/esm/locales/it/parsers/ITCasualYearMonthDayParser.js.map +1 -0
  95. package/dist/esm/locales/it/parsers/ITMonthNameLittleEndianParser.d.ts +7 -0
  96. package/dist/esm/locales/it/parsers/ITMonthNameLittleEndianParser.js +54 -0
  97. package/dist/esm/locales/it/parsers/ITMonthNameLittleEndianParser.js.map +1 -0
  98. package/dist/esm/locales/it/parsers/ITMonthNameMiddleEndianParser.d.ts +6 -0
  99. package/dist/esm/locales/it/parsers/ITMonthNameMiddleEndianParser.js +56 -0
  100. package/dist/esm/locales/it/parsers/ITMonthNameMiddleEndianParser.js.map +1 -0
  101. package/dist/esm/locales/it/parsers/ITMonthNameParser.d.ts +6 -0
  102. package/dist/esm/locales/it/parsers/ITMonthNameParser.js +40 -0
  103. package/dist/esm/locales/it/parsers/ITMonthNameParser.js.map +1 -0
  104. package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.d.ts +7 -0
  105. package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.js +51 -0
  106. package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.js.map +1 -0
  107. package/dist/esm/locales/it/parsers/ITSlashMonthFormatParser.d.ts +7 -0
  108. package/dist/esm/locales/it/parsers/ITSlashMonthFormatParser.js +15 -0
  109. package/dist/esm/locales/it/parsers/ITSlashMonthFormatParser.js.map +1 -0
  110. package/dist/esm/locales/it/parsers/ITTimeExpressionParser.d.ts +10 -0
  111. package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js +47 -0
  112. package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js.map +1 -0
  113. package/dist/esm/locales/it/parsers/ITTimeUnitAgoFormatParser.d.ts +9 -0
  114. package/dist/esm/locales/it/parsers/ITTimeUnitAgoFormatParser.js +21 -0
  115. package/dist/esm/locales/it/parsers/ITTimeUnitAgoFormatParser.js.map +1 -0
  116. package/dist/esm/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.d.ts +7 -0
  117. package/dist/esm/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js +23 -0
  118. package/dist/esm/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js.map +1 -0
  119. package/dist/esm/locales/it/parsers/ITTimeUnitLaterFormatParser.d.ts +9 -0
  120. package/dist/esm/locales/it/parsers/ITTimeUnitLaterFormatParser.js +20 -0
  121. package/dist/esm/locales/it/parsers/ITTimeUnitLaterFormatParser.js.map +1 -0
  122. package/dist/esm/locales/it/parsers/ITTimeUnitWithinFormatParser.d.ts +7 -0
  123. package/dist/esm/locales/it/parsers/ITTimeUnitWithinFormatParser.js +16 -0
  124. package/dist/esm/locales/it/parsers/ITTimeUnitWithinFormatParser.js.map +1 -0
  125. package/dist/esm/locales/it/parsers/ITWeekdayParser.d.ts +7 -0
  126. package/dist/esm/locales/it/parsers/ITWeekdayParser.js +40 -0
  127. package/dist/esm/locales/it/parsers/ITWeekdayParser.js.map +1 -0
  128. package/dist/esm/locales/it/refiners/ITMergeDateRangeRefiner.d.ts +4 -0
  129. package/dist/esm/locales/it/refiners/ITMergeDateRangeRefiner.js +7 -0
  130. package/dist/esm/locales/it/refiners/ITMergeDateRangeRefiner.js.map +1 -0
  131. package/dist/esm/locales/it/refiners/ITMergeDateTimeRefiner.d.ts +4 -0
  132. package/dist/esm/locales/it/refiners/ITMergeDateTimeRefiner.js +7 -0
  133. package/dist/esm/locales/it/refiners/ITMergeDateTimeRefiner.js.map +1 -0
  134. package/dist/esm/locales/it/refiners/ITMergeRelativeDateRefiner.d.ts +7 -0
  135. package/dist/esm/locales/it/refiners/ITMergeRelativeDateRefiner.js +33 -0
  136. package/dist/esm/locales/it/refiners/ITMergeRelativeDateRefiner.js.map +1 -0
  137. package/dist/esm/locales/ja/parsers/JPCasualDateParser.js +4 -4
  138. package/dist/esm/locales/ja/refiners/JPMergeDateRangeRefiner.js +1 -1
  139. package/dist/esm/locales/ja/refiners/JPMergeDateRangeRefiner.js.map +1 -1
  140. package/dist/esm/results.d.ts +1 -0
  141. package/dist/esm/results.js +17 -13
  142. package/dist/esm/results.js.map +1 -1
  143. package/dist/esm/utils/dates.d.ts +3 -0
  144. package/dist/esm/utils/dates.js +12 -0
  145. package/dist/esm/utils/dates.js.map +1 -0
  146. package/dist/esm/utils/dayjs.js.map +1 -1
  147. package/package.json +1 -1
  148. package/src/common/casualReferences.ts +8 -10
  149. package/src/common/refiners/ForwardDateRefiner.ts +17 -11
  150. package/src/locales/en/parsers/ENCasualDateParser.ts +5 -1
  151. package/src/locales/it/constants.ts +230 -0
  152. package/src/locales/it/index.ts +99 -0
  153. package/src/locales/it/parsers/ITCasualDateParser.ts +53 -0
  154. package/src/locales/it/parsers/ITCasualTimeParser.ts +50 -0
  155. package/src/locales/it/parsers/ITCasualYearMonthDayParser.ts +49 -0
  156. package/src/locales/it/parsers/ITMonthNameLittleEndianParser.ts +69 -0
  157. package/src/locales/it/parsers/ITMonthNameMiddleEndianParser.ts +78 -0
  158. package/src/locales/it/parsers/ITMonthNameParser.ts +62 -0
  159. package/src/locales/it/parsers/ITRelativeDateFormatParser.ts +71 -0
  160. package/src/locales/it/parsers/ITSlashMonthFormatParser.ts +26 -0
  161. package/src/locales/it/parsers/ITTimeExpressionParser.ts +55 -0
  162. package/src/locales/it/parsers/ITTimeUnitAgoFormatParser.ts +25 -0
  163. package/src/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.ts +30 -0
  164. package/src/locales/it/parsers/ITTimeUnitLaterFormatParser.ts +27 -0
  165. package/src/locales/it/parsers/ITTimeUnitWithinFormatParser.ts +26 -0
  166. package/src/locales/it/parsers/ITWeekdayParser.ts +47 -0
  167. package/src/locales/it/refiners/ITMergeDateRangeRefiner.ts +17 -0
  168. package/src/locales/it/refiners/ITMergeDateTimeRefiner.ts +13 -0
  169. package/src/locales/it/refiners/ITMergeRelativeDateRefiner.ts +58 -0
  170. package/src/locales/ja/parsers/JPCasualDateParser.ts +4 -4
  171. package/src/locales/ja/refiners/JPMergeDateRangeRefiner.ts +1 -1
  172. package/src/results.ts +18 -13
  173. package/src/utils/dates.ts +24 -0
  174. package/src/utils/dayjs.ts +6 -0
  175. package/test/en/en_casual.test.ts +4 -1
  176. package/test/en/en_relative.test.ts +126 -39
  177. package/test/en/en_time_exp.test.ts +27 -18
  178. package/test/ja/ja_casual.test.ts +8 -0
  179. package/test/ja/ja_standard.test.ts +19 -0
  180. package/test/nl/nl_relative.test.ts +33 -17
  181. package/test/result.test.ts +24 -0
  182. package/test/system_timezone.test.ts +20 -4
@@ -0,0 +1,7 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ export default class ENRelativeDateFormatParser extends AbstractParserWithWordBoundaryChecking {
5
+ innerPattern(): RegExp;
6
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
7
+ }
@@ -0,0 +1,51 @@
1
+ import { TIME_UNIT_DICTIONARY } from "../constants.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import dayjs from "dayjs";
4
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
5
+ import { matchAnyPattern } from "../../../utils/pattern.js";
6
+ const PATTERN = new RegExp(`(questo|ultimo|scorso|prossimo|dopo\\s*questo|questa|ultima|scorsa|prossima\\s*questa)\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})(?=\\s*)` + "(?=\\W|$)", "i");
7
+ const MODIFIER_WORD_GROUP = 1;
8
+ const RELATIVE_WORD_GROUP = 2;
9
+ export default class ENRelativeDateFormatParser extends AbstractParserWithWordBoundaryChecking {
10
+ innerPattern() {
11
+ return PATTERN;
12
+ }
13
+ innerExtract(context, match) {
14
+ const modifier = match[MODIFIER_WORD_GROUP].toLowerCase();
15
+ const unitWord = match[RELATIVE_WORD_GROUP].toLowerCase();
16
+ const timeunit = TIME_UNIT_DICTIONARY[unitWord];
17
+ if (modifier == "prossimo" || modifier.startsWith("dopo")) {
18
+ const timeUnits = {};
19
+ timeUnits[timeunit] = 1;
20
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
21
+ }
22
+ if (modifier == "prima" || modifier == "precedente") {
23
+ const timeUnits = {};
24
+ timeUnits[timeunit] = -1;
25
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
26
+ }
27
+ const components = context.createParsingComponents();
28
+ let date = dayjs(context.reference.instant);
29
+ if (unitWord.match(/settimana/i)) {
30
+ date = date.add(-date.get("d"), "d");
31
+ components.imply("day", date.date());
32
+ components.imply("month", date.month() + 1);
33
+ components.imply("year", date.year());
34
+ }
35
+ else if (unitWord.match(/mese/i)) {
36
+ date = date.add(-date.date() + 1, "d");
37
+ components.imply("day", date.date());
38
+ components.assign("year", date.year());
39
+ components.assign("month", date.month() + 1);
40
+ }
41
+ else if (unitWord.match(/anno/i)) {
42
+ date = date.add(-date.date() + 1, "d");
43
+ date = date.add(-date.month(), "month");
44
+ components.imply("day", date.date());
45
+ components.imply("month", date.month() + 1);
46
+ components.assign("year", date.year());
47
+ }
48
+ return components;
49
+ }
50
+ }
51
+ //# sourceMappingURL=ITRelativeDateFormatParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITRelativeDateFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITRelativeDateFormatParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ export default class ENSlashMonthFormatParser extends AbstractParserWithWordBoundaryChecking {
5
+ innerPattern(): RegExp;
6
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
7
+ }
@@ -0,0 +1,15 @@
1
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
2
+ const PATTERN = new RegExp("([0-9]|0[1-9]|1[012])/([0-9]{4})" + "", "i");
3
+ const MONTH_GROUP = 1;
4
+ const YEAR_GROUP = 2;
5
+ export default class ENSlashMonthFormatParser extends AbstractParserWithWordBoundaryChecking {
6
+ innerPattern() {
7
+ return PATTERN;
8
+ }
9
+ innerExtract(context, match) {
10
+ const year = parseInt(match[YEAR_GROUP]);
11
+ const month = parseInt(match[MONTH_GROUP]);
12
+ return context.createParsingComponents().imply("day", 1).assign("month", month).assign("year", year);
13
+ }
14
+ }
15
+ //# sourceMappingURL=ITSlashMonthFormatParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITSlashMonthFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITSlashMonthFormatParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAEhH,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,kCAAkC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;AAEzE,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,UAAU,GAAG,CAAC,CAAC;AAOrB,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,sCAAsC;IACxF,YAAY;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAE3C,OAAO,OAAO,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzG,CAAC;CACJ"}
@@ -0,0 +1,10 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser.js";
4
+ export default class ENTimeExpressionParser extends AbstractTimeExpressionParser {
5
+ constructor(strictMode: any);
6
+ followingPhase(): string;
7
+ primaryPrefix(): string;
8
+ primarySuffix(): string;
9
+ extractPrimaryTimeComponents(context: ParsingContext, match: RegExpMatchArray): null | ParsingComponents;
10
+ }
@@ -0,0 +1,47 @@
1
+ import { Meridiem } from "../../../index.js";
2
+ import { AbstractTimeExpressionParser } from "../../../common/parsers/AbstractTimeExpressionParser.js";
3
+ export default class ENTimeExpressionParser extends AbstractTimeExpressionParser {
4
+ constructor(strictMode) {
5
+ super(strictMode);
6
+ }
7
+ followingPhase() {
8
+ return "\\s*(?:\\-|\\–|\\~|\\〜|to|\\?)\\s*";
9
+ }
10
+ primaryPrefix() {
11
+ return "(?:(?:alle|dalle)\\s*)??";
12
+ }
13
+ primarySuffix() {
14
+ return "(?:\\s*(?:o\\W*in punto|alle\\s*sera|in\\s*del\\s*(?:mattina|pomeriggio)))?(?!/)(?=\\W|$)";
15
+ }
16
+ extractPrimaryTimeComponents(context, match) {
17
+ const components = super.extractPrimaryTimeComponents(context, match);
18
+ if (components) {
19
+ if (match[0].endsWith("sera")) {
20
+ const hour = components.get("hour");
21
+ if (hour >= 6 && hour < 12) {
22
+ components.assign("hour", components.get("hour") + 12);
23
+ components.assign("meridiem", Meridiem.PM);
24
+ }
25
+ else if (hour < 6) {
26
+ components.assign("meridiem", Meridiem.AM);
27
+ }
28
+ }
29
+ if (match[0].endsWith("pomeriggio")) {
30
+ components.assign("meridiem", Meridiem.PM);
31
+ const hour = components.get("hour");
32
+ if (hour >= 0 && hour <= 6) {
33
+ components.assign("hour", components.get("hour") + 12);
34
+ }
35
+ }
36
+ if (match[0].endsWith("mattina")) {
37
+ components.assign("meridiem", Meridiem.AM);
38
+ const hour = components.get("hour");
39
+ if (hour < 12) {
40
+ components.assign("hour", components.get("hour"));
41
+ }
42
+ }
43
+ }
44
+ return components;
45
+ }
46
+ }
47
+ //# sourceMappingURL=ITTimeExpressionParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITTimeExpressionParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITTimeExpressionParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,sDAAsD,CAAC;AAEpG,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,4BAA4B;IAC5E,YAAY,UAAU;QAClB,KAAK,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;IAED,cAAc;QACV,OAAO,oCAAoC,CAAC;IAChD,CAAC;IAED,aAAa;QACT,OAAO,0BAA0B,CAAC;IACtC,CAAC;IAED,aAAa;QACT,OAAO,2FAA2F,CAAC;IACvG,CAAC;IAED,4BAA4B,CAAC,OAAuB,EAAE,KAAuB;QACzE,MAAM,UAAU,GAAG,KAAK,CAAC,4BAA4B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACtE,IAAI,UAAU,EAAE;YACZ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE;oBACxB,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBACvD,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;iBAC9C;qBAAM,IAAI,IAAI,GAAG,CAAC,EAAE;oBACjB,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;iBAC9C;aACJ;YAED,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;gBACjC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;oBACxB,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;iBAC1D;aACJ;YAED,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBAC9B,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,IAAI,GAAG,EAAE,EAAE;oBACX,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;iBACrD;aACJ;SACJ;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ"}
@@ -0,0 +1,9 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ export default class ENTimeUnitAgoFormatParser extends AbstractParserWithWordBoundaryChecking {
5
+ private strictMode;
6
+ constructor(strictMode: boolean);
7
+ innerPattern(): RegExp;
8
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
9
+ }
@@ -0,0 +1,21 @@
1
+ import { parseTimeUnits, TIME_UNITS_PATTERN } from "../constants.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ import { reverseTimeUnits } from "../../../utils/timeunits.js";
5
+ const PATTERN = new RegExp(`(${TIME_UNITS_PATTERN})\\s{0,5}(?:fa|prima|precedente)(?=(?:\\W|$))`, "i");
6
+ const STRICT_PATTERN = new RegExp(`(${TIME_UNITS_PATTERN})\\s{0,5}fa(?=(?:\\W|$))`, "i");
7
+ export default class ENTimeUnitAgoFormatParser extends AbstractParserWithWordBoundaryChecking {
8
+ constructor(strictMode) {
9
+ super();
10
+ this.strictMode = strictMode;
11
+ }
12
+ innerPattern() {
13
+ return this.strictMode ? STRICT_PATTERN : PATTERN;
14
+ }
15
+ innerExtract(context, match) {
16
+ const timeUnits = parseTimeUnits(match[1]);
17
+ const outputTimeUnits = reverseTimeUnits(timeUnits);
18
+ return ParsingComponents.createRelativeFromReference(context.reference, outputTimeUnits);
19
+ }
20
+ }
21
+ //# sourceMappingURL=ITTimeUnitAgoFormatParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITTimeUnitAgoFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITTimeUnitAgoFormatParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,kBAAkB,+CAA+C,EAAE,GAAG,CAAC,CAAC;AACvG,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,kBAAkB,0BAA0B,EAAE,GAAG,CAAC,CAAC;AAEzF,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,sCAAsC;IACzF,YAAoB,UAAmB;QACnC,KAAK,EAAE,CAAC;QADQ,eAAU,GAAV,UAAU,CAAS;IAEvC,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACtD,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAEpD,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC7F,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ export default class ENTimeUnitCasualRelativeFormatParser extends AbstractParserWithWordBoundaryChecking {
5
+ innerPattern(): RegExp;
6
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
7
+ }
@@ -0,0 +1,23 @@
1
+ import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ import { reverseTimeUnits } from "../../../utils/timeunits.js";
5
+ const PATTERN = new RegExp(`(questo|ultimo|passato|prossimo|dopo|questa|ultima|passata|prossima|\\+|-)\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
6
+ export default class ENTimeUnitCasualRelativeFormatParser extends AbstractParserWithWordBoundaryChecking {
7
+ innerPattern() {
8
+ return PATTERN;
9
+ }
10
+ innerExtract(context, match) {
11
+ const prefix = match[1].toLowerCase();
12
+ let timeUnits = parseTimeUnits(match[2]);
13
+ switch (prefix) {
14
+ case "last":
15
+ case "past":
16
+ case "-":
17
+ timeUnits = reverseTimeUnits(timeUnits);
18
+ break;
19
+ }
20
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
21
+ }
22
+ }
23
+ //# sourceMappingURL=ITTimeUnitCasualRelativeFormatParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITTimeUnitCasualRelativeFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,GAAG,IAAI,MAAM,CACtB,kFAAkF,kBAAkB,YAAY,EAChH,GAAG,CACN,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,oCAAqC,SAAQ,sCAAsC;IACpG,YAAY;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,QAAQ,MAAM,EAAE;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM,CAAC;YACZ,KAAK,GAAG;gBACJ,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACxC,MAAM;SACb;QAED,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;CACJ"}
@@ -0,0 +1,9 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ export default class ENTimeUnitLaterFormatParser extends AbstractParserWithWordBoundaryChecking {
5
+ private strictMode;
6
+ constructor(strictMode: boolean);
7
+ innerPattern(): RegExp;
8
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
9
+ }
@@ -0,0 +1,20 @@
1
+ import { parseTimeUnits, TIME_UNITS_PATTERN } from "../constants.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ const PATTERN = new RegExp(`(${TIME_UNITS_PATTERN})\\s{0,5}(?:dopo|più tardi|da adesso|avanti|oltre|a seguire)` + "(?=(?:\\W|$))", "i");
5
+ const STRICT_PATTERN = new RegExp("" + "(" + TIME_UNITS_PATTERN + ")" + "(dopo|più tardi)" + "(?=(?:\\W|$))", "i");
6
+ const GROUP_NUM_TIMEUNITS = 1;
7
+ export default class ENTimeUnitLaterFormatParser extends AbstractParserWithWordBoundaryChecking {
8
+ constructor(strictMode) {
9
+ super();
10
+ this.strictMode = strictMode;
11
+ }
12
+ innerPattern() {
13
+ return this.strictMode ? STRICT_PATTERN : PATTERN;
14
+ }
15
+ innerExtract(context, match) {
16
+ const fragments = parseTimeUnits(match[GROUP_NUM_TIMEUNITS]);
17
+ return ParsingComponents.createRelativeFromReference(context.reference, fragments);
18
+ }
19
+ }
20
+ //# sourceMappingURL=ITTimeUnitLaterFormatParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITTimeUnitLaterFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITTimeUnitLaterFormatParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAEhH,MAAM,OAAO,GAAG,IAAI,MAAM,CACtB,IAAI,kBAAkB,8DAA8D,GAAG,eAAe,EACtG,GAAG,CACN,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,kBAAkB,GAAG,GAAG,GAAG,kBAAkB,GAAG,eAAe,EAAE,GAAG,CAAC,CAAC;AACnH,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,sCAAsC;IAC3F,YAAoB,UAAmB;QACnC,KAAK,EAAE,CAAC;QADQ,eAAU,GAAV,UAAU,CAAS;IAEvC,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACtD,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7D,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ export default class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
5
+ innerPattern(context: ParsingContext): RegExp;
6
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
7
+ }
@@ -0,0 +1,16 @@
1
+ import { TIME_UNITS_PATTERN, parseTimeUnits } from "../constants.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ const PATTERN_WITH_PREFIX = new RegExp(`(?:within|in|for)\\s*` +
5
+ `(?:(?:più o meno|intorno|approssimativamente|verso|verso le)\\s*(?:~\\s*)?)?(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
6
+ const PATTERN_WITHOUT_PREFIX = new RegExp(`(?:(?:più o meno|intorno|approssimativamente|verso|verso le)\\s*(?:~\\s*)?)?(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
7
+ export default class ENTimeUnitWithinFormatParser extends AbstractParserWithWordBoundaryChecking {
8
+ innerPattern(context) {
9
+ return context.option.forwardDate ? PATTERN_WITHOUT_PREFIX : PATTERN_WITH_PREFIX;
10
+ }
11
+ innerExtract(context, match) {
12
+ const timeUnits = parseTimeUnits(match[1]);
13
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
14
+ }
15
+ }
16
+ //# sourceMappingURL=ITTimeUnitWithinFormatParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITTimeUnitWithinFormatParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITTimeUnitWithinFormatParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAElE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAEhH,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAClC,uBAAuB;IACnB,gFAAgF,kBAAkB,YAAY,EAClH,GAAG,CACN,CAAC;AAEF,MAAM,sBAAsB,GAAG,IAAI,MAAM,CACrC,gFAAgF,kBAAkB,YAAY,EAC9G,GAAG,CACN,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,4BAA6B,SAAQ,sCAAsC;IAC5F,YAAY,CAAC,OAAuB;QAChC,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACrF,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,iBAAiB,CAAC,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvF,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { ParsingContext } from "../../../chrono.js";
2
+ import { ParsingComponents } from "../../../results.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ export default class ITWeekdayParser extends AbstractParserWithWordBoundaryChecking {
5
+ innerPattern(): RegExp;
6
+ innerExtract(context: ParsingContext, match: RegExpMatchArray): ParsingComponents;
7
+ }
@@ -0,0 +1,40 @@
1
+ import { WEEKDAY_DICTIONARY } from "../constants.js";
2
+ import { matchAnyPattern } from "../../../utils/pattern.js";
3
+ import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary.js";
4
+ import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays.js";
5
+ const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" +
6
+ "(?:il\\s*?)?" +
7
+ "(?:(questa|l'ultima|scorsa|prossima)\\s*)?" +
8
+ `(${matchAnyPattern(WEEKDAY_DICTIONARY)})` +
9
+ "(?:\\s*(?:\\,|\\)|\\)))?" +
10
+ "(?:\\s*(questa|l'ultima|scorsa|prossima)\\s*settimana)?" +
11
+ "(?=\\W|$)", "i");
12
+ const PREFIX_GROUP = 1;
13
+ const WEEKDAY_GROUP = 2;
14
+ const POSTFIX_GROUP = 3;
15
+ export default class ITWeekdayParser extends AbstractParserWithWordBoundaryChecking {
16
+ innerPattern() {
17
+ return PATTERN;
18
+ }
19
+ innerExtract(context, match) {
20
+ const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase();
21
+ const weekday = WEEKDAY_DICTIONARY[dayOfWeek];
22
+ const prefix = match[PREFIX_GROUP];
23
+ const postfix = match[POSTFIX_GROUP];
24
+ let modifierWord = prefix || postfix;
25
+ modifierWord = modifierWord || "";
26
+ modifierWord = modifierWord.toLowerCase();
27
+ let modifier = null;
28
+ if (modifierWord == "ultima" || modifierWord == "scorsa") {
29
+ modifier = "ultima";
30
+ }
31
+ else if (modifierWord == "prossima") {
32
+ modifier = "prossima";
33
+ }
34
+ else if (modifierWord == "questa") {
35
+ modifier = "questa";
36
+ }
37
+ return createParsingComponentsAtWeekday(context.reference, weekday, modifier);
38
+ }
39
+ }
40
+ //# sourceMappingURL=ITWeekdayParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITWeekdayParser.js","sourceRoot":"","sources":["../../../../../src/locales/it/parsers/ITWeekdayParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAChH,OAAO,EAAE,gCAAgC,EAAE,MAAM,sCAAsC,CAAC;AAExF,MAAM,OAAO,GAAG,IAAI,MAAM,CACtB,0BAA0B;IACtB,cAAc;IACd,4CAA4C;IAC5C,IAAI,eAAe,CAAC,kBAAkB,CAAC,GAAG;IAC1C,0BAA0B;IAC1B,yDAAyD;IACzD,WAAW,EACf,GAAG,CACN,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,sCAAsC;IAC/E,YAAY;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QACrC,IAAI,YAAY,GAAG,MAAM,IAAI,OAAO,CAAC;QACrC,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;QAClC,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAE1C,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,YAAY,IAAI,QAAQ,IAAI,YAAY,IAAI,QAAQ,EAAE;YACtD,QAAQ,GAAG,QAAQ,CAAC;SACvB;aAAM,IAAI,YAAY,IAAI,UAAU,EAAE;YACnC,QAAQ,GAAG,UAAU,CAAC;SACzB;aAAM,IAAI,YAAY,IAAI,QAAQ,EAAE;YACjC,QAAQ,GAAG,QAAQ,CAAC;SACvB;QACD,OAAO,gCAAgC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClF,CAAC;CACJ"}
@@ -0,0 +1,4 @@
1
+ import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMergeDateRangeRefiner.js";
2
+ export default class ENMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {
3
+ patternBetween(): RegExp;
4
+ }
@@ -0,0 +1,7 @@
1
+ import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMergeDateRangeRefiner.js";
2
+ export default class ENMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {
3
+ patternBetween() {
4
+ return /^\s*(to|-)\s*$/i;
5
+ }
6
+ }
7
+ //# sourceMappingURL=ITMergeDateRangeRefiner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITMergeDateRangeRefiner.js","sourceRoot":"","sources":["../../../../../src/locales/it/refiners/ITMergeDateRangeRefiner.ts"],"names":[],"mappings":"AAIA,OAAO,6BAA6B,MAAM,wDAAwD,CAAC;AAQnG,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,6BAA6B;IAC9E,cAAc;QACV,OAAO,iBAAiB,CAAC;IAC7B,CAAC;CACJ"}
@@ -0,0 +1,4 @@
1
+ import AbstractMergeDateTimeRefiner from "../../../common/refiners/AbstractMergeDateTimeRefiner.js";
2
+ export default class ENMergeDateTimeRefiner extends AbstractMergeDateTimeRefiner {
3
+ patternBetween(): RegExp;
4
+ }
@@ -0,0 +1,7 @@
1
+ import AbstractMergeDateTimeRefiner from "../../../common/refiners/AbstractMergeDateTimeRefiner.js";
2
+ export default class ENMergeDateTimeRefiner extends AbstractMergeDateTimeRefiner {
3
+ patternBetween() {
4
+ return new RegExp("^\\s*(T|alle|dopo|prima|il|di|del|delle|,|-)?\\s*$");
5
+ }
6
+ }
7
+ //# sourceMappingURL=ITMergeDateTimeRefiner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITMergeDateTimeRefiner.js","sourceRoot":"","sources":["../../../../../src/locales/it/refiners/ITMergeDateTimeRefiner.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,MAAM,uDAAuD,CAAC;AAQjG,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,4BAA4B;IAC5E,cAAc;QACV,OAAO,IAAI,MAAM,CAAC,oDAAoD,CAAC,CAAC;IAC5E,CAAC;CACJ"}
@@ -0,0 +1,7 @@
1
+ import { MergingRefiner } from "../../../common/abstractRefiners.js";
2
+ import { ParsingResult } from "../../../results.js";
3
+ export default class ENMergeRelativeDateRefiner extends MergingRefiner {
4
+ patternBetween(): RegExp;
5
+ shouldMergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): boolean;
6
+ mergeResults(textBetween: string, currentResult: ParsingResult, nextResult: ParsingResult): ParsingResult;
7
+ }
@@ -0,0 +1,33 @@
1
+ import { MergingRefiner } from "../../../common/abstractRefiners.js";
2
+ import { ParsingComponents, ParsingResult, ReferenceWithTimezone } from "../../../results.js";
3
+ import { parseTimeUnits } from "../constants.js";
4
+ import { reverseTimeUnits } from "../../../utils/timeunits.js";
5
+ function hasImpliedEarlierReferenceDate(result) {
6
+ return result.text.match(/\s+(prima|dal)$/i) != null;
7
+ }
8
+ function hasImpliedLaterReferenceDate(result) {
9
+ return result.text.match(/\s+(dopo|dal|fino)$/i) != null;
10
+ }
11
+ export default class ENMergeRelativeDateRefiner extends MergingRefiner {
12
+ patternBetween() {
13
+ return /^\s*$/i;
14
+ }
15
+ shouldMergeResults(textBetween, currentResult, nextResult) {
16
+ if (!textBetween.match(this.patternBetween())) {
17
+ return false;
18
+ }
19
+ if (!hasImpliedEarlierReferenceDate(currentResult) && !hasImpliedLaterReferenceDate(currentResult)) {
20
+ return false;
21
+ }
22
+ return !!nextResult.start.get("day") && !!nextResult.start.get("month") && !!nextResult.start.get("year");
23
+ }
24
+ mergeResults(textBetween, currentResult, nextResult) {
25
+ let timeUnits = parseTimeUnits(currentResult.text);
26
+ if (hasImpliedEarlierReferenceDate(currentResult)) {
27
+ timeUnits = reverseTimeUnits(timeUnits);
28
+ }
29
+ const components = ParsingComponents.createRelativeFromReference(new ReferenceWithTimezone(nextResult.start.date()), timeUnits);
30
+ return new ParsingResult(nextResult.reference, currentResult.index, `${currentResult.text}${textBetween}${nextResult.text}`, components);
31
+ }
32
+ }
33
+ //# sourceMappingURL=ITMergeRelativeDateRefiner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITMergeRelativeDateRefiner.js","sourceRoot":"","sources":["../../../../../src/locales/it/refiners/ITMergeRelativeDateRefiner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,SAAS,8BAA8B,CAAC,MAAqB;IACzD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,4BAA4B,CAAC,MAAqB;IACvD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;AAC7D,CAAC;AAOD,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,cAAc;IAClE,cAAc;QACV,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,kBAAkB,CAAC,WAAmB,EAAE,aAA4B,EAAE,UAAyB;QAE3F,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE;YAC3C,OAAO,KAAK,CAAC;SAChB;QAID,IAAI,CAAC,8BAA8B,CAAC,aAAa,CAAC,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE;YAChG,OAAO,KAAK,CAAC;SAChB;QAGD,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9G,CAAC;IAED,YAAY,CAAC,WAAmB,EAAE,aAA4B,EAAE,UAAyB;QACrF,IAAI,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,8BAA8B,CAAC,aAAa,CAAC,EAAE;YAC/C,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;SAC3C;QAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,2BAA2B,CAC5D,IAAI,qBAAqB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAClD,SAAS,CACZ,CAAC;QAEF,OAAO,IAAI,aAAa,CACpB,UAAU,CAAC,SAAS,EACpB,aAAa,CAAC,KAAK,EACnB,GAAG,aAAa,CAAC,IAAI,GAAG,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,EACvD,UAAU,CACb,CAAC;IACN,CAAC;CACJ"}
@@ -1,13 +1,13 @@
1
1
  import dayjs from "dayjs";
2
2
  import { Meridiem } from "../../../types.js";
3
3
  import * as references from "../../../common/casualReferences.js";
4
- const PATTERN = /今日|きょう|当日|とうじつ|昨日|きのう|明日|あした|今夜|こんや|今夕|こんゆう|今晩|こんばん|今朝|けさ/i;
4
+ const PATTERN = /今日|きょう|本日|ほんじつ|昨日|きのう|明日|あした|今夜|こんや|今夕|こんゆう|今晩|こんばん|今朝|けさ/i;
5
5
  function normalizeTextToKanji(text) {
6
6
  switch (text) {
7
7
  case "きょう":
8
8
  return "今日";
9
- case "とうじつ":
10
- return "当日";
9
+ case "ほんじつ":
10
+ return "本日";
11
11
  case "きのう":
12
12
  return "昨日";
13
13
  case "あした":
@@ -37,8 +37,8 @@ export default class JPCasualDateParser {
37
37
  return references.yesterday(context.reference);
38
38
  case "明日":
39
39
  return references.tomorrow(context.reference);
40
+ case "本日":
40
41
  case "今日":
41
- case "当日":
42
42
  return references.today(context.reference);
43
43
  }
44
44
  if (text == "今夜" || text == "今夕" || text == "今晩") {
@@ -1,7 +1,7 @@
1
1
  import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMergeDateRangeRefiner.js";
2
2
  export default class JPMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {
3
3
  patternBetween() {
4
- return /^\s*(から|ー|-)\s*$/i;
4
+ return /^\s*(から|ー|-|~|~)\s*$/i;
5
5
  }
6
6
  }
7
7
  //# sourceMappingURL=JPMergeDateRangeRefiner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JPMergeDateRangeRefiner.js","sourceRoot":"","sources":["../../../../../src/locales/ja/refiners/JPMergeDateRangeRefiner.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,MAAM,wDAAwD,CAAC;AAQnG,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,6BAA6B;IAC9E,cAAc;QACV,OAAO,mBAAmB,CAAC;IAC/B,CAAC;CACJ"}
1
+ {"version":3,"file":"JPMergeDateRangeRefiner.js","sourceRoot":"","sources":["../../../../../src/locales/ja/refiners/JPMergeDateRangeRefiner.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,MAAM,wDAAwD,CAAC;AAQnG,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,6BAA6B;IAC9E,cAAc;QACV,OAAO,uBAAuB,CAAC;IACnC,CAAC;CACJ"}
@@ -6,6 +6,7 @@ export declare class ReferenceWithTimezone {
6
6
  constructor(input?: ParsingReference | Date);
7
7
  getDateWithAdjustedTimezone(): Date;
8
8
  getSystemTimezoneAdjustmentMinute(date?: Date, overrideTimezoneOffset?: number): number;
9
+ getTimezoneOffset(): number;
9
10
  }
10
11
  export declare class ParsingComponents implements ParsedComponents {
11
12
  private knownValues;
@@ -8,6 +8,7 @@ export class ReferenceWithTimezone {
8
8
  input = input ?? new Date();
9
9
  if (input instanceof Date) {
10
10
  this.instant = input;
11
+ this.timezoneOffset = null;
11
12
  }
12
13
  else {
13
14
  this.instant = input.instant ?? new Date();
@@ -15,7 +16,11 @@ export class ReferenceWithTimezone {
15
16
  }
16
17
  }
17
18
  getDateWithAdjustedTimezone() {
18
- return new Date(this.instant.getTime() + this.getSystemTimezoneAdjustmentMinute(this.instant) * 60000);
19
+ const date = new Date(this.instant);
20
+ if (this.timezoneOffset !== null) {
21
+ date.setMinutes(date.getMinutes() - this.getSystemTimezoneAdjustmentMinute(this.instant));
22
+ }
23
+ return date;
19
24
  }
20
25
  getSystemTimezoneAdjustmentMinute(date, overrideTimezoneOffset) {
21
26
  if (!date || date.getTime() < 0) {
@@ -25,6 +30,9 @@ export class ReferenceWithTimezone {
25
30
  const targetTimezoneOffset = overrideTimezoneOffset ?? this.timezoneOffset ?? currentTimezoneOffset;
26
31
  return currentTimezoneOffset - targetTimezoneOffset;
27
32
  }
33
+ getTimezoneOffset() {
34
+ return this.timezoneOffset ?? -this.instant.getTimezoneOffset();
35
+ }
28
36
  }
29
37
  export class ParsingComponents {
30
38
  constructor(reference, knownComponents) {
@@ -37,10 +45,10 @@ export class ParsingComponents {
37
45
  this.knownValues[key] = knownComponents[key];
38
46
  }
39
47
  }
40
- const refDayJs = dayjs(reference.instant);
41
- this.imply("day", refDayJs.date());
42
- this.imply("month", refDayJs.month() + 1);
43
- this.imply("year", refDayJs.year());
48
+ const refDayJs = reference.getDateWithAdjustedTimezone();
49
+ this.imply("day", refDayJs.getDate());
50
+ this.imply("month", refDayJs.getMonth() + 1);
51
+ this.imply("year", refDayJs.getFullYear());
44
52
  this.imply("hour", 12);
45
53
  this.imply("minute", 0);
46
54
  this.imply("second", 0);
@@ -123,7 +131,7 @@ export class ParsingComponents {
123
131
  reference: ${JSON.stringify(this.reference)}]`;
124
132
  }
125
133
  dayjs() {
126
- return dayjs(this.date());
134
+ return dayjs(this.dateWithoutTimezoneAdjustment());
127
135
  }
128
136
  date() {
129
137
  const date = this.dateWithoutTimezoneAdjustment();
@@ -149,7 +157,7 @@ export class ParsingComponents {
149
157
  return date;
150
158
  }
151
159
  static createRelativeFromReference(reference, fragments) {
152
- let date = dayjs(reference.instant);
160
+ let date = dayjs(reference.getDateWithAdjustedTimezone());
153
161
  for (const key in fragments) {
154
162
  date = date.add(fragments[key], key);
155
163
  }
@@ -159,15 +167,11 @@ export class ParsingComponents {
159
167
  components.addTag("result/relativeDateAndTime");
160
168
  assignSimilarTime(components, date);
161
169
  assignSimilarDate(components, date);
162
- if (reference.timezoneOffset !== null) {
163
- components.assign("timezoneOffset", -reference.instant.getTimezoneOffset());
164
- }
170
+ components.assign("timezoneOffset", reference.getTimezoneOffset());
165
171
  }
166
172
  else {
167
173
  implySimilarTime(components, date);
168
- if (reference.timezoneOffset !== null) {
169
- components.imply("timezoneOffset", -reference.instant.getTimezoneOffset());
170
- }
174
+ components.imply("timezoneOffset", reference.getTimezoneOffset());
171
175
  if (fragments["d"]) {
172
176
  components.assign("day", date.date());
173
177
  components.assign("month", date.month() + 1);