chrono-node 2.6.6 → 2.7.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 (130) hide show
  1. package/dist/cjs/calculation/mergingCalculation.js +2 -0
  2. package/dist/cjs/calculation/mergingCalculation.js.map +1 -1
  3. package/dist/cjs/common/casualReferences.js +13 -3
  4. package/dist/cjs/common/casualReferences.js.map +1 -1
  5. package/dist/cjs/common/parsers/AbstractParserWithWordBoundary.d.ts +2 -1
  6. package/dist/cjs/common/parsers/AbstractParserWithWordBoundary.js +9 -5
  7. package/dist/cjs/common/parsers/AbstractParserWithWordBoundary.js.map +1 -1
  8. package/dist/cjs/locales/en/parsers/ENCasualDateParser.js +12 -6
  9. package/dist/cjs/locales/en/parsers/ENCasualDateParser.js.map +1 -1
  10. package/dist/cjs/locales/en/parsers/ENCasualTimeParser.d.ts +1 -1
  11. package/dist/cjs/locales/en/parsers/ENCasualTimeParser.js +15 -6
  12. package/dist/cjs/locales/en/parsers/ENCasualTimeParser.js.map +1 -1
  13. package/dist/cjs/locales/en/parsers/ENTimeExpressionParser.js +23 -22
  14. package/dist/cjs/locales/en/parsers/ENTimeExpressionParser.js.map +1 -1
  15. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -2
  16. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  17. package/dist/cjs/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.d.ts +11 -0
  18. package/dist/cjs/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js +24 -0
  19. package/dist/cjs/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js.map +1 -0
  20. package/dist/cjs/locales/ru/parsers/RUCasualDateParser.d.ts +3 -4
  21. package/dist/cjs/locales/ru/parsers/RUCasualDateParser.js +4 -9
  22. package/dist/cjs/locales/ru/parsers/RUCasualDateParser.js.map +1 -1
  23. package/dist/cjs/locales/ru/parsers/RUCasualTimeParser.d.ts +3 -4
  24. package/dist/cjs/locales/ru/parsers/RUCasualTimeParser.js +4 -10
  25. package/dist/cjs/locales/ru/parsers/RUCasualTimeParser.js.map +1 -1
  26. package/dist/cjs/locales/ru/parsers/RUMonthNameLittleEndianParser.d.ts +3 -4
  27. package/dist/cjs/locales/ru/parsers/RUMonthNameLittleEndianParser.js +14 -19
  28. package/dist/cjs/locales/ru/parsers/RUMonthNameLittleEndianParser.js.map +1 -1
  29. package/dist/cjs/locales/ru/parsers/RUMonthNameParser.d.ts +3 -4
  30. package/dist/cjs/locales/ru/parsers/RUMonthNameParser.js +10 -14
  31. package/dist/cjs/locales/ru/parsers/RUMonthNameParser.js.map +1 -1
  32. package/dist/cjs/locales/ru/parsers/RURelativeDateFormatParser.d.ts +3 -4
  33. package/dist/cjs/locales/ru/parsers/RURelativeDateFormatParser.js +4 -8
  34. package/dist/cjs/locales/ru/parsers/RURelativeDateFormatParser.js.map +1 -1
  35. package/dist/cjs/locales/ru/parsers/RUTimeUnitAgoFormatParser.d.ts +3 -4
  36. package/dist/cjs/locales/ru/parsers/RUTimeUnitAgoFormatParser.js +4 -8
  37. package/dist/cjs/locales/ru/parsers/RUTimeUnitAgoFormatParser.js.map +1 -1
  38. package/dist/cjs/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.d.ts +3 -4
  39. package/dist/cjs/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js +4 -8
  40. package/dist/cjs/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js.map +1 -1
  41. package/dist/cjs/locales/ru/parsers/RUTimeUnitWithinFormatParser.d.ts +3 -0
  42. package/dist/cjs/locales/ru/parsers/RUTimeUnitWithinFormatParser.js +6 -3
  43. package/dist/cjs/locales/ru/parsers/RUTimeUnitWithinFormatParser.js.map +1 -1
  44. package/dist/cjs/locales/ru/parsers/RUWeekdayParser.d.ts +3 -4
  45. package/dist/cjs/locales/ru/parsers/RUWeekdayParser.js +9 -14
  46. package/dist/cjs/locales/ru/parsers/RUWeekdayParser.js.map +1 -1
  47. package/dist/cjs/results.d.ts +5 -0
  48. package/dist/cjs/results.js +30 -2
  49. package/dist/cjs/results.js.map +1 -1
  50. package/dist/cjs/types.d.ts +2 -0
  51. package/dist/cjs/types.js.map +1 -1
  52. package/dist/esm/calculation/mergingCalculation.js +2 -0
  53. package/dist/esm/calculation/mergingCalculation.js.map +1 -1
  54. package/dist/esm/common/casualReferences.js +13 -3
  55. package/dist/esm/common/casualReferences.js.map +1 -1
  56. package/dist/esm/common/parsers/AbstractParserWithWordBoundary.d.ts +2 -1
  57. package/dist/esm/common/parsers/AbstractParserWithWordBoundary.js +9 -5
  58. package/dist/esm/common/parsers/AbstractParserWithWordBoundary.js.map +1 -1
  59. package/dist/esm/locales/en/parsers/ENCasualDateParser.js +12 -6
  60. package/dist/esm/locales/en/parsers/ENCasualDateParser.js.map +1 -1
  61. package/dist/esm/locales/en/parsers/ENCasualTimeParser.d.ts +1 -1
  62. package/dist/esm/locales/en/parsers/ENCasualTimeParser.js +15 -6
  63. package/dist/esm/locales/en/parsers/ENCasualTimeParser.js.map +1 -1
  64. package/dist/esm/locales/en/parsers/ENTimeExpressionParser.js +23 -22
  65. package/dist/esm/locales/en/parsers/ENTimeExpressionParser.js.map +1 -1
  66. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -2
  67. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  68. package/dist/esm/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.d.ts +11 -0
  69. package/dist/esm/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js +19 -0
  70. package/dist/esm/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.js.map +1 -0
  71. package/dist/esm/locales/ru/parsers/RUCasualDateParser.d.ts +3 -4
  72. package/dist/esm/locales/ru/parsers/RUCasualDateParser.js +4 -9
  73. package/dist/esm/locales/ru/parsers/RUCasualDateParser.js.map +1 -1
  74. package/dist/esm/locales/ru/parsers/RUCasualTimeParser.d.ts +3 -4
  75. package/dist/esm/locales/ru/parsers/RUCasualTimeParser.js +4 -10
  76. package/dist/esm/locales/ru/parsers/RUCasualTimeParser.js.map +1 -1
  77. package/dist/esm/locales/ru/parsers/RUMonthNameLittleEndianParser.d.ts +3 -4
  78. package/dist/esm/locales/ru/parsers/RUMonthNameLittleEndianParser.js +15 -20
  79. package/dist/esm/locales/ru/parsers/RUMonthNameLittleEndianParser.js.map +1 -1
  80. package/dist/esm/locales/ru/parsers/RUMonthNameParser.d.ts +3 -4
  81. package/dist/esm/locales/ru/parsers/RUMonthNameParser.js +11 -15
  82. package/dist/esm/locales/ru/parsers/RUMonthNameParser.js.map +1 -1
  83. package/dist/esm/locales/ru/parsers/RURelativeDateFormatParser.d.ts +3 -4
  84. package/dist/esm/locales/ru/parsers/RURelativeDateFormatParser.js +5 -9
  85. package/dist/esm/locales/ru/parsers/RURelativeDateFormatParser.js.map +1 -1
  86. package/dist/esm/locales/ru/parsers/RUTimeUnitAgoFormatParser.d.ts +3 -4
  87. package/dist/esm/locales/ru/parsers/RUTimeUnitAgoFormatParser.js +5 -9
  88. package/dist/esm/locales/ru/parsers/RUTimeUnitAgoFormatParser.js.map +1 -1
  89. package/dist/esm/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.d.ts +3 -4
  90. package/dist/esm/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js +5 -9
  91. package/dist/esm/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.js.map +1 -1
  92. package/dist/esm/locales/ru/parsers/RUTimeUnitWithinFormatParser.d.ts +3 -0
  93. package/dist/esm/locales/ru/parsers/RUTimeUnitWithinFormatParser.js +6 -3
  94. package/dist/esm/locales/ru/parsers/RUTimeUnitWithinFormatParser.js.map +1 -1
  95. package/dist/esm/locales/ru/parsers/RUWeekdayParser.d.ts +3 -4
  96. package/dist/esm/locales/ru/parsers/RUWeekdayParser.js +10 -15
  97. package/dist/esm/locales/ru/parsers/RUWeekdayParser.js.map +1 -1
  98. package/dist/esm/results.d.ts +5 -0
  99. package/dist/esm/results.js +30 -2
  100. package/dist/esm/results.js.map +1 -1
  101. package/dist/esm/types.d.ts +2 -0
  102. package/dist/esm/types.js.map +1 -1
  103. package/package.json +1 -1
  104. package/src/calculation/mergingCalculation.ts +2 -0
  105. package/src/common/casualReferences.ts +13 -3
  106. package/src/common/parsers/AbstractParserWithWordBoundary.ts +17 -9
  107. package/src/locales/en/parsers/ENCasualDateParser.ts +12 -7
  108. package/src/locales/en/parsers/ENCasualTimeParser.ts +15 -6
  109. package/src/locales/en/parsers/ENTimeExpressionParser.ts +24 -22
  110. package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +4 -3
  111. package/src/locales/ru/parsers/AbstractParserWithWordBoundaryChecking.ts +25 -0
  112. package/src/locales/ru/parsers/RUCasualDateParser.ts +4 -14
  113. package/src/locales/ru/parsers/RUCasualTimeParser.ts +4 -14
  114. package/src/locales/ru/parsers/RUMonthNameLittleEndianParser.ts +16 -26
  115. package/src/locales/ru/parsers/RUMonthNameParser.ts +13 -20
  116. package/src/locales/ru/parsers/RURelativeDateFormatParser.ts +6 -14
  117. package/src/locales/ru/parsers/RUTimeUnitAgoFormatParser.ts +5 -11
  118. package/src/locales/ru/parsers/RUTimeUnitCasualRelativeFormatParser.ts +4 -13
  119. package/src/locales/ru/parsers/RUTimeUnitWithinFormatParser.ts +10 -4
  120. package/src/locales/ru/parsers/RUWeekdayParser.ts +12 -20
  121. package/src/results.ts +34 -4
  122. package/src/types.ts +11 -1
  123. package/test/en/en.test.ts +3 -3
  124. package/test/en/en_time_units_within.test.ts +22 -1
  125. package/test/result.test.ts +65 -3
  126. package/test/ru/ru_relative.test.ts +44 -11
  127. package/test/ru/ru_time_units_casual_relative.test.ts +96 -30
  128. package/test/system.test.ts +37 -0
  129. package/test/uk/uk_relative.test.ts +44 -11
  130. package/test/uk/uk_time_units_casual_relative.test.ts +40 -10
@@ -5,25 +5,37 @@ test("Test - 'This' expressions", () => {
5
5
  testSingleCase(chrono.ru, "на этой неделе", new Date(2017, 11 - 1, 19, 12), (result, text) => {
6
6
  expect(result.index).toBe(0);
7
7
  expect(result.text).toBe(text);
8
- expect(result.start).toBeDate(new Date(2017, 11 - 1, 19, 12));
8
+ expect(result.start.get("year")).toBe(2017);
9
+ expect(result.start.get("month")).toBe(11);
10
+ expect(result.start.get("day")).toBe(19);
11
+ expect(result.start.get("hour")).toBe(12);
9
12
  });
10
13
 
11
14
  testSingleCase(chrono.ru, "в этом месяце", new Date(2017, 11 - 1, 19, 12), (result, text) => {
12
15
  expect(result.index).toBe(0);
13
16
  expect(result.text).toBe(text);
14
- expect(result.start).toBeDate(new Date(2017, 11 - 1, 1, 12));
17
+ expect(result.start.get("year")).toBe(2017);
18
+ expect(result.start.get("month")).toBe(11);
19
+ expect(result.start.get("day")).toBe(1);
20
+ expect(result.start.get("hour")).toBe(12);
15
21
  });
16
22
 
17
23
  testSingleCase(chrono.ru, "в этом месяце", new Date(2017, 11 - 1, 1, 12), (result, text) => {
18
24
  expect(result.index).toBe(0);
19
25
  expect(result.text).toBe(text);
20
- expect(result.start).toBeDate(new Date(2017, 11 - 1, 1, 12));
26
+ expect(result.start.get("year")).toBe(2017);
27
+ expect(result.start.get("month")).toBe(11);
28
+ expect(result.start.get("day")).toBe(1);
29
+ expect(result.start.get("hour")).toBe(12);
21
30
  });
22
31
 
23
32
  testSingleCase(chrono.ru, "в этом году", new Date(2017, 11 - 1, 19, 12), (result, text) => {
24
33
  expect(result.index).toBe(0);
25
34
  expect(result.text).toBe(text);
26
- expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
35
+ expect(result.start.get("year")).toBe(2017);
36
+ expect(result.start.get("month")).toBe(1);
37
+ expect(result.start.get("day")).toBe(1);
38
+ expect(result.start.get("hour")).toBe(12);
27
39
  });
28
40
  });
29
41
 
@@ -31,19 +43,28 @@ test("Test - Past relative expressions", () => {
31
43
  testSingleCase(chrono.ru, "на прошлой неделе", new Date(2016, 10 - 1, 1, 12), (result, text) => {
32
44
  expect(result.index).toBe(0);
33
45
  expect(result.text).toBe(text);
34
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 24, 12));
46
+ expect(result.start.get("year")).toBe(2016);
47
+ expect(result.start.get("month")).toBe(9);
48
+ expect(result.start.get("day")).toBe(24);
49
+ expect(result.start.get("hour")).toBe(12);
35
50
  });
36
51
 
37
52
  testSingleCase(chrono.ru, "в прошлом месяце", new Date(2016, 10 - 1, 1, 12), (result, text) => {
38
53
  expect(result.index).toBe(0);
39
54
  expect(result.text).toBe(text);
40
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 1, 12));
55
+ expect(result.start.get("year")).toBe(2016);
56
+ expect(result.start.get("month")).toBe(9);
57
+ expect(result.start.get("day")).toBe(1);
58
+ expect(result.start.get("hour")).toBe(12);
41
59
  });
42
60
 
43
61
  testSingleCase(chrono.ru, "в прошлом году", new Date(2016, 10 - 1, 1, 12), (result, text) => {
44
62
  expect(result.index).toBe(0);
45
63
  expect(result.text).toBe(text);
46
- expect(result.start).toBeDate(new Date(2015, 10 - 1, 1, 12));
64
+ expect(result.start.get("year")).toBe(2015);
65
+ expect(result.start.get("month")).toBe(10);
66
+ expect(result.start.get("day")).toBe(1);
67
+ expect(result.start.get("hour")).toBe(12);
47
68
  });
48
69
  });
49
70
 
@@ -51,24 +72,36 @@ test("Test - Future relative expressions", () => {
51
72
  testSingleCase(chrono.ru, "на следующей неделе", new Date(2016, 10 - 1, 1, 12), (result, text) => {
52
73
  expect(result.index).toBe(0);
53
74
  expect(result.text).toBe(text);
54
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 8, 12));
75
+ expect(result.start.get("year")).toBe(2016);
76
+ expect(result.start.get("month")).toBe(10);
77
+ expect(result.start.get("day")).toBe(8);
78
+ expect(result.start.get("hour")).toBe(12);
55
79
  });
56
80
 
57
81
  testSingleCase(chrono.ru, "в следующем месяце", new Date(2016, 10 - 1, 1, 12), (result, text) => {
58
82
  expect(result.index).toBe(0);
59
83
  expect(result.text).toBe(text);
60
- expect(result.start).toBeDate(new Date(2016, 11 - 1, 1, 12));
84
+ expect(result.start.get("year")).toBe(2016);
85
+ expect(result.start.get("month")).toBe(11);
86
+ expect(result.start.get("day")).toBe(1);
87
+ expect(result.start.get("hour")).toBe(12);
61
88
  });
62
89
 
63
90
  testSingleCase(chrono.ru, "в следующем квартале", new Date(2016, 10 - 1, 1, 12), (result, text) => {
64
91
  expect(result.index).toBe(0);
65
92
  expect(result.text).toBe(text);
66
- expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
93
+ expect(result.start.get("year")).toBe(2017);
94
+ expect(result.start.get("month")).toBe(1);
95
+ expect(result.start.get("day")).toBe(1);
96
+ expect(result.start.get("hour")).toBe(12);
67
97
  });
68
98
 
69
99
  testSingleCase(chrono.ru, "в следующем году", new Date(2016, 10 - 1, 1, 12), (result, text) => {
70
100
  expect(result.index).toBe(0);
71
101
  expect(result.text).toBe(text);
72
- expect(result.start).toBeDate(new Date(2017, 10 - 1, 1, 12));
102
+ expect(result.start.get("year")).toBe(2017);
103
+ expect(result.start.get("month")).toBe(10);
104
+ expect(result.start.get("day")).toBe(1);
105
+ expect(result.start.get("hour")).toBe(12);
73
106
  });
74
107
  });
@@ -5,93 +5,143 @@ test("Test - Positive time units", () => {
5
5
  testSingleCase(chrono.ru, "следующие 2 недели", new Date(2016, 10 - 1, 1, 12), (result, text) => {
6
6
  expect(result.index).toBe(0);
7
7
  expect(result.text).toBe(text);
8
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 15, 12));
8
+ expect(result.start.get("year")).toBe(2016);
9
+ expect(result.start.get("month")).toBe(10);
10
+ expect(result.start.get("day")).toBe(15);
11
+ expect(result.start.get("hour")).toBe(12);
9
12
  });
10
13
 
11
14
  testSingleCase(chrono.ru, "следующие 2 дня", new Date(2016, 10 - 1, 1, 12), (result, text) => {
12
15
  expect(result.index).toBe(0);
13
16
  expect(result.text).toBe(text);
14
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 3, 12));
17
+ expect(result.start.get("year")).toBe(2016);
18
+ expect(result.start.get("month")).toBe(10);
19
+ expect(result.start.get("day")).toBe(3);
20
+ expect(result.start.get("hour")).toBe(12);
15
21
  });
16
22
 
17
23
  testSingleCase(chrono.ru, "следующие два года", new Date(2016, 10 - 1, 1, 12), (result, text) => {
18
24
  expect(result.index).toBe(0);
19
25
  expect(result.text).toBe(text);
20
- expect(result.start).toBeDate(new Date(2018, 10 - 1, 1, 12));
26
+ expect(result.start.get("year")).toBe(2018);
27
+ expect(result.start.get("month")).toBe(10);
28
+ expect(result.start.get("day")).toBe(1);
29
+ expect(result.start.get("hour")).toBe(12);
21
30
  });
22
31
 
23
32
  testSingleCase(chrono.ru, "следующие 2 недели 3 дня", new Date(2016, 10 - 1, 1, 12), (result, text) => {
24
33
  expect(result.index).toBe(0);
25
34
  expect(result.text).toBe(text);
26
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 18, 12));
35
+ expect(result.start.get("year")).toBe(2016);
36
+ expect(result.start.get("month")).toBe(10);
37
+ expect(result.start.get("day")).toBe(18);
38
+ expect(result.start.get("hour")).toBe(12);
27
39
  });
28
40
 
29
41
  testSingleCase(chrono.ru, "через пару минут", new Date(2016, 10 - 1, 1, 12), (result, text) => {
30
42
  expect(result.index).toBe(0);
31
43
  expect(result.text).toBe(text);
32
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 12, 2));
44
+ expect(result.start.get("year")).toBe(2016);
45
+ expect(result.start.get("month")).toBe(10);
46
+ expect(result.start.get("day")).toBe(1);
47
+ expect(result.start.get("hour")).toBe(12);
48
+ expect(result.start.get("minute")).toBe(2);
33
49
  });
34
50
 
35
51
  testSingleCase(chrono.ru, "через полчаса", new Date(2016, 10 - 1, 1, 12), (result, text) => {
36
52
  expect(result.index).toBe(0);
37
53
  expect(result.text).toBe(text);
38
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 12, 30));
54
+ expect(result.start.get("year")).toBe(2016);
55
+ expect(result.start.get("month")).toBe(10);
56
+ expect(result.start.get("day")).toBe(1);
57
+ expect(result.start.get("hour")).toBe(12);
58
+ expect(result.start.get("minute")).toBe(30);
39
59
  });
40
60
 
41
61
  testSingleCase(chrono.ru, "через 2 часа", new Date(2016, 10 - 1, 1, 12), (result, text) => {
42
62
  expect(result.index).toBe(0);
43
63
  expect(result.text).toBe(text);
44
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 14));
64
+ expect(result.start.get("year")).toBe(2016);
65
+ expect(result.start.get("month")).toBe(10);
66
+ expect(result.start.get("day")).toBe(1);
67
+ expect(result.start.get("hour")).toBe(14);
45
68
  });
46
69
 
47
70
  testSingleCase(chrono.ru, "спустя 2 часа", new Date(2016, 10 - 1, 1, 12), (result, text) => {
48
71
  expect(result.index).toBe(0);
49
72
  expect(result.text).toBe(text);
50
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 14));
73
+ expect(result.start.get("year")).toBe(2016);
74
+ expect(result.start.get("month")).toBe(10);
75
+ expect(result.start.get("day")).toBe(1);
76
+ expect(result.start.get("hour")).toBe(14);
51
77
  });
52
78
 
53
79
  testSingleCase(chrono.ru, "через три месяца", new Date(2016, 10 - 1, 1, 12), (result, text) => {
54
80
  expect(result.index).toBe(0);
55
81
  expect(result.text).toBe(text);
56
- expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
82
+ expect(result.start.get("year")).toBe(2017);
83
+ expect(result.start.get("month")).toBe(1);
84
+ expect(result.start.get("day")).toBe(1);
85
+ expect(result.start.get("hour")).toBe(12);
57
86
  });
58
87
 
59
88
  testSingleCase(chrono.ru, "через неделю", new Date(2016, 10 - 1, 1, 12), (result, text) => {
60
89
  expect(result.index).toBe(0);
61
90
  expect(result.text).toBe(text);
62
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 8, 12));
91
+ expect(result.start.get("year")).toBe(2016);
92
+ expect(result.start.get("month")).toBe(10);
93
+ expect(result.start.get("day")).toBe(8);
94
+ expect(result.start.get("hour")).toBe(12);
63
95
  });
64
96
 
65
97
  testSingleCase(chrono.ru, "через месяц", new Date(2016, 10 - 1, 1, 12), (result, text) => {
66
98
  expect(result.index).toBe(0);
67
99
  expect(result.text).toBe(text);
68
- expect(result.start).toBeDate(new Date(2016, 11 - 1, 1, 12));
69
- });
70
-
71
- testSingleCase(chrono.ru, "через год", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
72
- expect(result.index).toBe(0);
73
- expect(result.text).toBe(text);
74
- expect(result.start).toBeDate(new Date(2021, 11 - 1, 22, 12, 11, 32, 6));
75
- });
76
-
77
- testSingleCase(chrono.ru, "спустя год", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
78
- expect(result.index).toBe(0);
79
- expect(result.text).toBe(text);
80
- expect(result.start).toBeDate(new Date(2021, 11 - 1, 22, 12, 11, 32, 6));
81
- });
100
+ expect(result.start.get("year")).toBe(2016);
101
+ expect(result.start.get("month")).toBe(11);
102
+ expect(result.start.get("day")).toBe(1);
103
+ expect(result.start.get("hour")).toBe(12);
104
+ });
105
+
106
+ testSingleCase(
107
+ chrono.ru,
108
+ "через год",
109
+ { instant: new Date("2020-11-22T03:11:02.006"), timezone: "GMT" },
110
+ (result, text) => {
111
+ expect(result.index).toBe(0);
112
+ expect(result.text).toBe(text);
113
+ expect(result.start).toBeDate(new Date("2021-11-22T03:11:02.006"));
114
+ }
115
+ );
116
+ testSingleCase(
117
+ chrono.ru,
118
+ "через год",
119
+ { instant: new Date("2020-11-22T12:11:32.006"), timezone: "GMT" },
120
+ (result, text) => {
121
+ expect(result.index).toBe(0);
122
+ expect(result.text).toBe(text);
123
+ expect(result.start).toBeDate(new Date("2021-11-22T12:11:32.006"));
124
+ }
125
+ );
82
126
  });
83
127
 
84
128
  test("Test - Negative time units", () => {
85
129
  testSingleCase(chrono.ru, "прошлые 2 недели", new Date(2016, 10 - 1, 1, 12), (result, text) => {
86
130
  expect(result.index).toBe(0);
87
131
  expect(result.text).toBe(text);
88
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 17, 12));
132
+ expect(result.start.get("year")).toBe(2016);
133
+ expect(result.start.get("month")).toBe(9);
134
+ expect(result.start.get("day")).toBe(17);
135
+ expect(result.start.get("hour")).toBe(12);
89
136
  });
90
137
 
91
138
  testSingleCase(chrono.ru, "прошлые два дня", new Date(2016, 10 - 1, 1, 12), (result, text) => {
92
139
  expect(result.index).toBe(0);
93
140
  expect(result.text).toBe(text);
94
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 29, 12));
141
+ expect(result.start.get("year")).toBe(2016);
142
+ expect(result.start.get("month")).toBe(9);
143
+ expect(result.start.get("day")).toBe(29);
144
+ expect(result.start.get("hour")).toBe(12);
95
145
  });
96
146
  });
97
147
 
@@ -99,19 +149,31 @@ test("Test - Plus '+' sign", () => {
99
149
  testSingleCase(chrono.ru.casual, "+15 минут", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
100
150
  expect(result.index).toBe(0);
101
151
  expect(result.text).toBe(text);
102
- expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 29));
152
+ expect(result.start.get("year")).toBe(2012);
153
+ expect(result.start.get("month")).toBe(7);
154
+ expect(result.start.get("day")).toBe(10);
155
+ expect(result.start.get("hour")).toBe(12);
156
+ expect(result.start.get("minute")).toBe(29);
103
157
  });
104
158
 
105
159
  testSingleCase(chrono.ru.casual, "+15мин", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
106
160
  expect(result.index).toBe(0);
107
161
  expect(result.text).toBe(text);
108
- expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 29));
162
+ expect(result.start.get("year")).toBe(2012);
163
+ expect(result.start.get("month")).toBe(7);
164
+ expect(result.start.get("day")).toBe(10);
165
+ expect(result.start.get("hour")).toBe(12);
166
+ expect(result.start.get("minute")).toBe(29);
109
167
  });
110
168
 
111
169
  testSingleCase(chrono.ru.casual, "+1 день 2 часа", new Date(2012, 7 - 1, 10, 12, 14), (result, text) => {
112
170
  expect(result.index).toBe(0);
113
171
  expect(result.text).toBe(text);
114
- expect(result.start).toBeDate(new Date(2012, 7 - 1, 11, 14, 14));
172
+ expect(result.start.get("year")).toBe(2012);
173
+ expect(result.start.get("month")).toBe(7);
174
+ expect(result.start.get("day")).toBe(11);
175
+ expect(result.start.get("hour")).toBe(14);
176
+ expect(result.start.get("minute")).toBe(14);
115
177
  });
116
178
  });
117
179
 
@@ -119,6 +181,10 @@ test("Test - Minus '-' sign", () => {
119
181
  testSingleCase(chrono.ru.casual, "-3 года", new Date(2015, 7 - 1, 10, 12, 14), (result, text) => {
120
182
  expect(result.index).toBe(0);
121
183
  expect(result.text).toBe(text);
122
- expect(result.start).toBeDate(new Date(2012, 7 - 1, 10, 12, 14));
184
+ expect(result.start.get("year")).toBe(2012);
185
+ expect(result.start.get("month")).toBe(7);
186
+ expect(result.start.get("day")).toBe(10);
187
+ expect(result.start.get("hour")).toBe(12);
188
+ expect(result.start.get("minute")).toBe(14);
123
189
  });
124
190
  });
@@ -5,6 +5,7 @@ import UnlikelyFormatFilter from "../src/common/refiners/UnlikelyFormatFilter";
5
5
  import SlashDateFormatParser from "../src/common/parsers/SlashDateFormatParser";
6
6
  import ENWeekdayParser from "../src/locales/en/parsers/ENWeekdayParser";
7
7
  import ENTimeUnitCasualRelativeFormatParser from "../src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser";
8
+ import { ParsingComponents } from "../src/";
8
9
 
9
10
  //-------------------------------------
10
11
 
@@ -124,6 +125,42 @@ test("Test - Add custom refiner example", () => {
124
125
  });
125
126
  });
126
127
 
128
+ test("Test - Add custom parser with tags example", () => {
129
+ const custom = chrono.casual.clone();
130
+ custom.parsers.push({
131
+ pattern: () => {
132
+ return /\bChristmas\b/i;
133
+ },
134
+ extract: (context) => {
135
+ return context
136
+ .createParsingComponents({
137
+ day: 25,
138
+ month: 12,
139
+ })
140
+ .addTag("parser/ChristmasDayParser");
141
+ },
142
+ });
143
+
144
+ testSingleCase(custom, "Doing something tomorrow", (result) => {
145
+ expect(result.text).toBe("tomorrow");
146
+ expect(result.tags()).toContain("parser/ENCasualDateParser");
147
+ });
148
+
149
+ testSingleCase(custom, "I'll arrive at 2.30AM on Christmas", (result) => {
150
+ expect(result.text).toBe("at 2.30AM on Christmas");
151
+ expect(result.tags()).toContain("parser/ChristmasDayParser");
152
+ expect(result.tags()).toContain("parser/ENTimeExpressionParser");
153
+ });
154
+
155
+ testSingleCase(custom, "I'll arrive at Christmas night", (result) => {
156
+ expect(result.text).toBe("Christmas night");
157
+ expect(result.tags()).toContain("parser/ChristmasDayParser");
158
+ expect(result.tags()).toContain("parser/ENCasualTimeParser");
159
+ });
160
+
161
+ // TODO: Check if the merge date range combine tags correctly
162
+ });
163
+
127
164
  test("Test - Remove a parser example", () => {
128
165
  const custom = chrono.en.strict.clone();
129
166
  custom.parsers = custom.parsers.filter((r) => !(r instanceof SlashDateFormatParser));
@@ -5,25 +5,37 @@ test("Test - 'This' expressions", () => {
5
5
  testSingleCase(chrono.uk, "на цьому тижні", new Date(2017, 11 - 1, 19, 12), (result, text) => {
6
6
  expect(result.index).toBe(0);
7
7
  expect(result.text).toBe(text);
8
- expect(result.start).toBeDate(new Date(2017, 11 - 1, 19, 12));
8
+ expect(result.start.get("year")).toBe(2017);
9
+ expect(result.start.get("month")).toBe(11);
10
+ expect(result.start.get("day")).toBe(19);
11
+ expect(result.start.get("hour")).toBe(12);
9
12
  });
10
13
 
11
14
  testSingleCase(chrono.uk, "у цьому місяці", new Date(2017, 11 - 1, 19, 12), (result, text) => {
12
15
  expect(result.index).toBe(0);
13
16
  expect(result.text).toBe(text);
14
- expect(result.start).toBeDate(new Date(2017, 11 - 1, 1, 12));
17
+ expect(result.start.get("year")).toBe(2017);
18
+ expect(result.start.get("month")).toBe(11);
19
+ expect(result.start.get("day")).toBe(1);
20
+ expect(result.start.get("hour")).toBe(12);
15
21
  });
16
22
 
17
23
  testSingleCase(chrono.uk, "цього місяця", new Date(2017, 11 - 1, 1, 12), (result, text) => {
18
24
  expect(result.index).toBe(0);
19
25
  expect(result.text).toBe(text);
20
- expect(result.start).toBeDate(new Date(2017, 11 - 1, 1, 12));
26
+ expect(result.start.get("year")).toBe(2017);
27
+ expect(result.start.get("month")).toBe(11);
28
+ expect(result.start.get("day")).toBe(1);
29
+ expect(result.start.get("hour")).toBe(12);
21
30
  });
22
31
 
23
32
  testSingleCase(chrono.uk, "у цьому році", new Date(2017, 11 - 1, 19, 12), (result, text) => {
24
33
  expect(result.index).toBe(0);
25
34
  expect(result.text).toBe(text);
26
- expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
35
+ expect(result.start.get("year")).toBe(2017);
36
+ expect(result.start.get("month")).toBe(1);
37
+ expect(result.start.get("day")).toBe(1);
38
+ expect(result.start.get("hour")).toBe(12);
27
39
  });
28
40
  });
29
41
 
@@ -31,19 +43,28 @@ test("Test - Past relative expressions", () => {
31
43
  testSingleCase(chrono.uk, "на минулому тижні", new Date(2016, 10 - 1, 1, 12), (result, text) => {
32
44
  expect(result.index).toBe(0);
33
45
  expect(result.text).toBe(text);
34
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 24, 12));
46
+ expect(result.start.get("year")).toBe(2016);
47
+ expect(result.start.get("month")).toBe(9);
48
+ expect(result.start.get("day")).toBe(24);
49
+ expect(result.start.get("hour")).toBe(12);
35
50
  });
36
51
 
37
52
  testSingleCase(chrono.uk, "минулого місяця", new Date(2016, 10 - 1, 1, 12), (result, text) => {
38
53
  expect(result.index).toBe(0);
39
54
  expect(result.text).toBe(text);
40
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 1, 12));
55
+ expect(result.start.get("year")).toBe(2016);
56
+ expect(result.start.get("month")).toBe(9);
57
+ expect(result.start.get("day")).toBe(1);
58
+ expect(result.start.get("hour")).toBe(12);
41
59
  });
42
60
 
43
61
  testSingleCase(chrono.uk, "у минулому році", new Date(2016, 10 - 1, 1, 12), (result, text) => {
44
62
  expect(result.index).toBe(0);
45
63
  expect(result.text).toBe(text);
46
- expect(result.start).toBeDate(new Date(2015, 10 - 1, 1, 12));
64
+ expect(result.start.get("year")).toBe(2015);
65
+ expect(result.start.get("month")).toBe(10);
66
+ expect(result.start.get("day")).toBe(1);
67
+ expect(result.start.get("hour")).toBe(12);
47
68
  });
48
69
  });
49
70
 
@@ -51,24 +72,36 @@ test("Test - Future relative expressions", () => {
51
72
  testSingleCase(chrono.uk, "на наступному тижні", new Date(2016, 10 - 1, 1, 12), (result, text) => {
52
73
  expect(result.index).toBe(0);
53
74
  expect(result.text).toBe(text);
54
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 8, 12));
75
+ expect(result.start.get("year")).toBe(2016);
76
+ expect(result.start.get("month")).toBe(10);
77
+ expect(result.start.get("day")).toBe(8);
78
+ expect(result.start.get("hour")).toBe(12);
55
79
  });
56
80
 
57
81
  testSingleCase(chrono.uk, "наступного місяця", new Date(2016, 10 - 1, 1, 12), (result, text) => {
58
82
  expect(result.index).toBe(0);
59
83
  expect(result.text).toBe(text);
60
- expect(result.start).toBeDate(new Date(2016, 11 - 1, 1, 12));
84
+ expect(result.start.get("year")).toBe(2016);
85
+ expect(result.start.get("month")).toBe(11);
86
+ expect(result.start.get("day")).toBe(1);
87
+ expect(result.start.get("hour")).toBe(12);
61
88
  });
62
89
 
63
90
  testSingleCase(chrono.uk, "в наступному кварталі", new Date(2016, 10 - 1, 1, 12), (result, text) => {
64
91
  expect(result.index).toBe(0);
65
92
  expect(result.text).toBe(text);
66
- expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
93
+ expect(result.start.get("year")).toBe(2017);
94
+ expect(result.start.get("month")).toBe(1);
95
+ expect(result.start.get("day")).toBe(1);
96
+ expect(result.start.get("hour")).toBe(12);
67
97
  });
68
98
 
69
99
  testSingleCase(chrono.uk, "наступного року", new Date(2016, 10 - 1, 1, 12), (result, text) => {
70
100
  expect(result.index).toBe(0);
71
101
  expect(result.text).toBe(text);
72
- expect(result.start).toBeDate(new Date(2017, 10 - 1, 1, 12));
102
+ expect(result.start.get("year")).toBe(2017);
103
+ expect(result.start.get("month")).toBe(10);
104
+ expect(result.start.get("day")).toBe(1);
105
+ expect(result.start.get("hour")).toBe(12);
73
106
  });
74
107
  });
@@ -5,25 +5,37 @@ test("Test - Positive time units", () => {
5
5
  testSingleCase(chrono.uk, "наступні 2 тижні", new Date(2016, 10 - 1, 1, 12), (result, text) => {
6
6
  expect(result.index).toBe(0);
7
7
  expect(result.text).toBe(text);
8
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 15, 12));
8
+ expect(result.start.get("year")).toBe(2016);
9
+ expect(result.start.get("month")).toBe(10);
10
+ expect(result.start.get("day")).toBe(15);
11
+ expect(result.start.get("hour")).toBe(12);
9
12
  });
10
13
 
11
14
  testSingleCase(chrono.uk, "наступні 2 дні", new Date(2016, 10 - 1, 1, 12), (result, text) => {
12
15
  expect(result.index).toBe(0);
13
16
  expect(result.text).toBe(text);
14
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 3, 12));
17
+ expect(result.start.get("year")).toBe(2016);
18
+ expect(result.start.get("month")).toBe(10);
19
+ expect(result.start.get("day")).toBe(3);
20
+ expect(result.start.get("hour")).toBe(12);
15
21
  });
16
22
 
17
23
  testSingleCase(chrono.uk, "наступні два роки", new Date(2016, 10 - 1, 1, 12), (result, text) => {
18
24
  expect(result.index).toBe(0);
19
25
  expect(result.text).toBe(text);
20
- expect(result.start).toBeDate(new Date(2018, 10 - 1, 1, 12));
26
+ expect(result.start.get("year")).toBe(2018);
27
+ expect(result.start.get("month")).toBe(10);
28
+ expect(result.start.get("day")).toBe(1);
29
+ expect(result.start.get("hour")).toBe(12);
21
30
  });
22
31
 
23
32
  testSingleCase(chrono.uk, "наступні 2 тижні 3 дні", new Date(2016, 10 - 1, 1, 12), (result, text) => {
24
33
  expect(result.index).toBe(0);
25
34
  expect(result.text).toBe(text);
26
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 18, 12));
35
+ expect(result.start.get("year")).toBe(2016);
36
+ expect(result.start.get("month")).toBe(10);
37
+ expect(result.start.get("day")).toBe(18);
38
+ expect(result.start.get("hour")).toBe(12);
27
39
  });
28
40
 
29
41
  testSingleCase(chrono.uk, "через декілька хвилин", new Date(2016, 10 - 1, 1, 12), (result, text) => {
@@ -41,25 +53,37 @@ test("Test - Positive time units", () => {
41
53
  testSingleCase(chrono.uk, "через 2 години", new Date(2016, 10 - 1, 1, 12), (result, text) => {
42
54
  expect(result.index).toBe(0);
43
55
  expect(result.text).toBe(text);
44
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 1, 14));
56
+ expect(result.start.get("year")).toBe(2016);
57
+ expect(result.start.get("month")).toBe(10);
58
+ expect(result.start.get("day")).toBe(1);
59
+ expect(result.start.get("hour")).toBe(14);
45
60
  });
46
61
 
47
62
  testSingleCase(chrono.uk, "через три місяці", new Date(2016, 10 - 1, 1, 12), (result, text) => {
48
63
  expect(result.index).toBe(0);
49
64
  expect(result.text).toBe(text);
50
- expect(result.start).toBeDate(new Date(2017, 1 - 1, 1, 12));
65
+ expect(result.start.get("year")).toBe(2017);
66
+ expect(result.start.get("month")).toBe(1);
67
+ expect(result.start.get("day")).toBe(1);
68
+ expect(result.start.get("hour")).toBe(12);
51
69
  });
52
70
 
53
71
  testSingleCase(chrono.uk, "через тиждень", new Date(2016, 10 - 1, 1, 12), (result, text) => {
54
72
  expect(result.index).toBe(0);
55
73
  expect(result.text).toBe(text);
56
- expect(result.start).toBeDate(new Date(2016, 10 - 1, 8, 12));
74
+ expect(result.start.get("year")).toBe(2016);
75
+ expect(result.start.get("month")).toBe(10);
76
+ expect(result.start.get("day")).toBe(8);
77
+ expect(result.start.get("hour")).toBe(12);
57
78
  });
58
79
 
59
80
  testSingleCase(chrono.uk, "через місяць", new Date(2016, 10 - 1, 1, 12), (result, text) => {
60
81
  expect(result.index).toBe(0);
61
82
  expect(result.text).toBe(text);
62
- expect(result.start).toBeDate(new Date(2016, 11 - 1, 1, 12));
83
+ expect(result.start.get("year")).toBe(2016);
84
+ expect(result.start.get("month")).toBe(11);
85
+ expect(result.start.get("day")).toBe(1);
86
+ expect(result.start.get("hour")).toBe(12);
63
87
  });
64
88
 
65
89
  testSingleCase(chrono.uk, "через рік", new Date(2020, 11 - 1, 22, 12, 11, 32, 6), (result, text) => {
@@ -73,13 +97,19 @@ test("Test - Negative time units", () => {
73
97
  testSingleCase(chrono.uk, "минулі 2 тижні", new Date(2016, 10 - 1, 1, 12), (result, text) => {
74
98
  expect(result.index).toBe(0);
75
99
  expect(result.text).toBe(text);
76
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 17, 12));
100
+ expect(result.start.get("year")).toBe(2016);
101
+ expect(result.start.get("month")).toBe(9);
102
+ expect(result.start.get("day")).toBe(17);
103
+ expect(result.start.get("hour")).toBe(12);
77
104
  });
78
105
 
79
106
  testSingleCase(chrono.uk, "минулі два дні", new Date(2016, 10 - 1, 1, 12), (result, text) => {
80
107
  expect(result.index).toBe(0);
81
108
  expect(result.text).toBe(text);
82
- expect(result.start).toBeDate(new Date(2016, 9 - 1, 29, 12));
109
+ expect(result.start.get("year")).toBe(2016);
110
+ expect(result.start.get("month")).toBe(9);
111
+ expect(result.start.get("day")).toBe(29);
112
+ expect(result.start.get("hour")).toBe(12);
83
113
  });
84
114
  });
85
115