chrono-node 2.7.6 → 2.7.7

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 (88) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/common/parsers/ISOFormatParser.d.ts +1 -12
  3. package/dist/cjs/common/parsers/ISOFormatParser.js +30 -28
  4. package/dist/cjs/common/parsers/ISOFormatParser.js.map +1 -1
  5. package/dist/cjs/common/parsers/SlashDateFormatParser.js +13 -6
  6. package/dist/cjs/common/parsers/SlashDateFormatParser.js.map +1 -1
  7. package/dist/cjs/common/refiners/ForwardDateRefiner.js +8 -5
  8. package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
  9. package/dist/cjs/locales/en/configuration.js +4 -2
  10. package/dist/cjs/locales/en/configuration.js.map +1 -1
  11. package/dist/cjs/locales/en/constants.d.ts +1 -1
  12. package/dist/cjs/locales/en/constants.js +6 -0
  13. package/dist/cjs/locales/en/constants.js.map +1 -1
  14. package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -0
  15. package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
  16. package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +3 -0
  17. package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
  18. package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js +5 -2
  19. package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
  20. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -0
  21. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  22. package/dist/cjs/locales/en/parsers/{ENCasualYearMonthDayParser.d.ts → ENYearMonthDayParser.d.ts} +3 -1
  23. package/dist/cjs/locales/en/parsers/{ENCasualYearMonthDayParser.js → ENYearMonthDayParser.js} +20 -8
  24. package/dist/cjs/locales/en/parsers/ENYearMonthDayParser.js.map +1 -0
  25. package/dist/cjs/locales/en/refiners/ENExtractYearSuffixRefiner.d.ts +5 -0
  26. package/dist/cjs/locales/en/refiners/ENExtractYearSuffixRefiner.js +31 -0
  27. package/dist/cjs/locales/en/refiners/ENExtractYearSuffixRefiner.js.map +1 -0
  28. package/dist/cjs/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -1
  29. package/dist/cjs/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -1
  30. package/dist/cjs/results.js +7 -4
  31. package/dist/cjs/results.js.map +1 -1
  32. package/dist/esm/common/parsers/ISOFormatParser.d.ts +1 -12
  33. package/dist/esm/common/parsers/ISOFormatParser.js +30 -28
  34. package/dist/esm/common/parsers/ISOFormatParser.js.map +1 -1
  35. package/dist/esm/common/parsers/SlashDateFormatParser.js +13 -6
  36. package/dist/esm/common/parsers/SlashDateFormatParser.js.map +1 -1
  37. package/dist/esm/common/refiners/ForwardDateRefiner.js +8 -5
  38. package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
  39. package/dist/esm/locales/en/configuration.js +4 -2
  40. package/dist/esm/locales/en/configuration.js.map +1 -1
  41. package/dist/esm/locales/en/constants.d.ts +1 -1
  42. package/dist/esm/locales/en/constants.js +6 -0
  43. package/dist/esm/locales/en/constants.js.map +1 -1
  44. package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -0
  45. package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
  46. package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +3 -0
  47. package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
  48. package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js +5 -2
  49. package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
  50. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -0
  51. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  52. package/dist/esm/locales/en/parsers/{ENCasualYearMonthDayParser.d.ts → ENYearMonthDayParser.d.ts} +3 -1
  53. package/dist/esm/locales/en/parsers/{ENCasualYearMonthDayParser.js → ENYearMonthDayParser.js} +19 -7
  54. package/dist/esm/locales/en/parsers/ENYearMonthDayParser.js.map +1 -0
  55. package/dist/esm/locales/en/refiners/ENExtractYearSuffixRefiner.d.ts +5 -0
  56. package/dist/esm/locales/en/refiners/ENExtractYearSuffixRefiner.js +28 -0
  57. package/dist/esm/locales/en/refiners/ENExtractYearSuffixRefiner.js.map +1 -0
  58. package/dist/esm/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -1
  59. package/dist/esm/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -1
  60. package/dist/esm/results.js +7 -4
  61. package/dist/esm/results.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/common/parsers/ISOFormatParser.ts +30 -32
  64. package/src/common/parsers/SlashDateFormatParser.ts +13 -10
  65. package/src/common/refiners/ForwardDateRefiner.ts +8 -5
  66. package/src/locales/en/configuration.ts +8 -2
  67. package/src/locales/en/constants.ts +7 -1
  68. package/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +3 -1
  69. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +4 -2
  70. package/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +5 -2
  71. package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +4 -2
  72. package/src/locales/en/parsers/{ENCasualYearMonthDayParser.ts → ENYearMonthDayParser.ts} +18 -7
  73. package/src/locales/en/refiners/ENExtractYearSuffixRefiner.ts +34 -0
  74. package/src/locales/en/refiners/ENMergeDateTimeRefiner.ts +1 -1
  75. package/src/results.ts +8 -5
  76. package/test/en/en_inter_std.test.ts +30 -28
  77. package/test/en/en_merging_relative_dates.test.ts +3 -4
  78. package/test/en/en_slash.test.ts +47 -42
  79. package/test/en/en_time_exp.test.ts +58 -0
  80. package/test/en/en_time_units_ago.test.ts +34 -0
  81. package/test/en/en_time_units_casual_relative.test.ts +3 -0
  82. package/test/en/en_time_units_later.test.ts +4 -0
  83. package/test/en/en_time_units_within.test.ts +5 -0
  84. package/test/en/en_year.test.ts +26 -1
  85. package/test/en/{en_casual_year_month_day.test.ts → en_year_month_day.test.ts} +25 -4
  86. package/test/system.test.ts +2 -0
  87. package/dist/cjs/locales/en/parsers/ENCasualYearMonthDayParser.js.map +0 -1
  88. package/dist/esm/locales/en/parsers/ENCasualYearMonthDayParser.js.map +0 -1
@@ -8,31 +8,7 @@ test("Test - Parsing Offset Expression", function () {
8
8
  });
9
9
  });
10
10
 
11
- test("Test - Single Expression", function () {
12
- testSingleCase(chrono, "The event is going ahead (04/2016)", new Date(2012, 7, 10), (result) => {
13
- expect(result.start).not.toBeNull();
14
- expect(result.start.get("year")).toBe(2016);
15
- expect(result.start.get("month")).toBe(4);
16
- expect(result.start.get("day")).toBe(1);
17
-
18
- expect(result.index).toBe(26);
19
- expect(result.text).toBe("04/2016");
20
-
21
- expect(result.start).toBeDate(new Date(2016, 4 - 1, 1, 12));
22
- });
23
-
24
- testSingleCase(chrono, "Published: 06/2004", new Date(2012, 7, 10), (result) => {
25
- expect(result.start).not.toBeNull();
26
- expect(result.start.get("year")).toBe(2004);
27
- expect(result.start.get("month")).toBe(6);
28
- expect(result.start.get("day")).toBe(1);
29
-
30
- expect(result.index).toBe(11);
31
- expect(result.text).toBe("06/2004");
32
-
33
- expect(result.start).toBeDate(new Date(2004, 6 - 1, 1, 12));
34
- });
35
-
11
+ test("Test - Single Expression (MM/dd/yyyy)", function () {
36
12
  testSingleCase(chrono, "8/10/2012", new Date(2012, 7, 10), (result) => {
37
13
  expect(result.start).not.toBeNull();
38
14
  expect(result.start.get("year")).toBe(2012);
@@ -61,22 +37,6 @@ test("Test - Single Expression", function () {
61
37
  expect(result.start).toBeDate(new Date(2012, 8 - 1, 1, 12));
62
38
  });
63
39
 
64
- testSingleCase(chrono, "8/10", new Date(2012, 7, 10), (result) => {
65
- expect(result.start).not.toBeNull();
66
- expect(result.start.get("year")).toBe(2012);
67
- expect(result.start.get("month")).toBe(8);
68
- expect(result.start.get("day")).toBe(10);
69
-
70
- expect(result.index).toBe(0);
71
- expect(result.text).toBe("8/10");
72
-
73
- expect(result.start.isCertain("day")).toBe(true);
74
- expect(result.start.isCertain("month")).toBe(true);
75
- expect(result.start.isCertain("year")).toBe(false);
76
-
77
- expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
78
- });
79
-
80
40
  testSingleCase(chrono, "The Deadline is 8/10/2012", new Date(2012, 7, 10), (result) => {
81
41
  expect(result.index).toBe(16);
82
42
  expect(result.text).toBe("8/10/2012");
@@ -103,7 +63,7 @@ test("Test - Single Expression", function () {
103
63
  });
104
64
  });
105
65
 
106
- test("Test - Single Expression Little-Endian", function () {
66
+ test("Test - Single Expression Little-Endian (dd/MM/yyyy)", function () {
107
67
  testSingleCase(chrono.en.GB, "8/10/2012", new Date(2012, 7, 10), (result) => {
108
68
  expect(result.start).not.toBeNull();
109
69
  expect(result.start.get("year")).toBe(2012);
@@ -153,6 +113,50 @@ test("Test - Single Expression Little-Endian with Month name", function () {
153
113
  });
154
114
  });
155
115
 
116
+ test("Test - Single Expression Shorten (mm/yyyy)", () => {
117
+ testSingleCase(chrono, "The event is going ahead (04/2016)", new Date(2012, 7, 10), (result) => {
118
+ expect(result.start).not.toBeNull();
119
+ expect(result.start.get("year")).toBe(2016);
120
+ expect(result.start.get("month")).toBe(4);
121
+ expect(result.start.get("day")).toBe(1);
122
+
123
+ expect(result.index).toBe(26);
124
+ expect(result.text).toBe("04/2016");
125
+
126
+ expect(result.start).toBeDate(new Date(2016, 4 - 1, 1, 12));
127
+ });
128
+
129
+ testSingleCase(chrono, "Published: 06/2004", new Date(2012, 7, 10), (result) => {
130
+ expect(result.start).not.toBeNull();
131
+ expect(result.start.get("year")).toBe(2004);
132
+ expect(result.start.get("month")).toBe(6);
133
+ expect(result.start.get("day")).toBe(1);
134
+
135
+ expect(result.index).toBe(11);
136
+ expect(result.text).toBe("06/2004");
137
+
138
+ expect(result.start).toBeDate(new Date(2004, 6 - 1, 1, 12));
139
+ });
140
+ });
141
+
142
+ test("Test - Single Expression Shorten (dd/mm)", () => {
143
+ testSingleCase(chrono, "8/10", new Date(2012, 7, 10), (result) => {
144
+ expect(result.start).not.toBeNull();
145
+ expect(result.start.get("year")).toBe(2012);
146
+ expect(result.start.get("month")).toBe(8);
147
+ expect(result.start.get("day")).toBe(10);
148
+
149
+ expect(result.index).toBe(0);
150
+ expect(result.text).toBe("8/10");
151
+
152
+ expect(result.start.isCertain("day")).toBe(true);
153
+ expect(result.start.isCertain("month")).toBe(true);
154
+ expect(result.start.isCertain("year")).toBe(false);
155
+
156
+ expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
157
+ });
158
+ });
159
+
156
160
  test("Test - Range Expression", function () {
157
161
  testSingleCase(chrono.en, "8/10/2012 - 8/15/2012", new Date(2012, 7, 10), (result) => {
158
162
  expect(result.index).toBe(0);
@@ -235,6 +239,7 @@ test("Test - Impossible Dates and Unexpected Results", function () {
235
239
  testUnexpectedResult(chrono, "06/-31/2022");
236
240
  testUnexpectedResult(chrono, "18/13/2022");
237
241
  testUnexpectedResult(chrono, "15/28/2022");
242
+ testUnexpectedResult(chrono, "4/13/1");
238
243
  });
239
244
 
240
245
  test("Test - forward dates only option", function () {
@@ -27,6 +27,11 @@ test("Test - Time expression", function () {
27
27
  test("Test - Time expression after date", function () {
28
28
  testSingleCase(chrono, "05/31/2024 14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
29
29
  expect(result.text).toBe(text);
30
+
31
+ expect(result.start.get("year")).toBe(2024);
32
+ expect(result.start.get("month")).toBe(5);
33
+ expect(result.start.get("day")).toBe(31);
34
+
30
35
  expect(result.start.get("hour")).toBe(14);
31
36
  expect(result.start.get("minute")).toBe(15);
32
37
  expect(result.start.get("meridiem")).toBe(Meridiem.PM);
@@ -34,6 +39,11 @@ test("Test - Time expression after date", function () {
34
39
 
35
40
  testSingleCase(chrono, "05/31/2024.14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
36
41
  expect(result.text).toBe(text);
42
+
43
+ expect(result.start.get("year")).toBe(2024);
44
+ expect(result.start.get("month")).toBe(5);
45
+ expect(result.start.get("day")).toBe(31);
46
+
37
47
  expect(result.start.get("hour")).toBe(14);
38
48
  expect(result.start.get("minute")).toBe(15);
39
49
  expect(result.start.get("meridiem")).toBe(Meridiem.PM);
@@ -41,6 +51,11 @@ test("Test - Time expression after date", function () {
41
51
 
42
52
  testSingleCase(chrono, "05/31/2024:14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
43
53
  expect(result.text).toBe(text);
54
+
55
+ expect(result.start.get("year")).toBe(2024);
56
+ expect(result.start.get("month")).toBe(5);
57
+ expect(result.start.get("day")).toBe(31);
58
+
44
59
  expect(result.start.get("hour")).toBe(14);
45
60
  expect(result.start.get("minute")).toBe(15);
46
61
  expect(result.start.get("meridiem")).toBe(Meridiem.PM);
@@ -48,10 +63,53 @@ test("Test - Time expression after date", function () {
48
63
 
49
64
  testSingleCase(chrono, "05/31/2024-14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
50
65
  expect(result.text).toBe(text);
66
+
67
+ expect(result.start.get("year")).toBe(2024);
68
+ expect(result.start.get("month")).toBe(5);
69
+ expect(result.start.get("day")).toBe(31);
70
+
71
+ expect(result.start.get("hour")).toBe(14);
72
+ expect(result.start.get("minute")).toBe(15);
73
+ expect(result.start.get("meridiem")).toBe(Meridiem.PM);
74
+ });
75
+ });
76
+
77
+ test("Test - Time expression before date", () => {
78
+ testSingleCase(chrono, "14:15 05/31/2024", new Date(2016, 10 - 1, 1, 8), (result, text) => {
79
+ expect(result.text).toBe(text);
80
+
81
+ expect(result.start.get("year")).toBe(2024);
82
+ expect(result.start.get("month")).toBe(5);
83
+ expect(result.start.get("day")).toBe(31);
84
+
51
85
  expect(result.start.get("hour")).toBe(14);
52
86
  expect(result.start.get("minute")).toBe(15);
53
87
  expect(result.start.get("meridiem")).toBe(Meridiem.PM);
54
88
  });
89
+
90
+ testSingleCase(chrono, "8:23 AM, Jul 9", new Date(2016, 10 - 1, 1, 8), (result, text) => {
91
+ expect(result.text).toBe(text);
92
+
93
+ expect(result.start.get("year")).toBe(2016);
94
+ expect(result.start.get("month")).toBe(7);
95
+ expect(result.start.get("day")).toBe(9);
96
+
97
+ expect(result.start.get("hour")).toBe(8);
98
+ expect(result.start.get("minute")).toBe(23);
99
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
100
+ });
101
+
102
+ testSingleCase(chrono, "8:23 AM ∙ Jul 9", new Date(2016, 10 - 1, 1, 8), (result, text) => {
103
+ expect(result.text).toBe(text);
104
+
105
+ expect(result.start.get("year")).toBe(2016);
106
+ expect(result.start.get("month")).toBe(7);
107
+ expect(result.start.get("day")).toBe(9);
108
+
109
+ expect(result.start.get("hour")).toBe(8);
110
+ expect(result.start.get("minute")).toBe(23);
111
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
112
+ });
55
113
  });
56
114
 
57
115
  test("Test - Time range expression", function () {
@@ -312,8 +312,42 @@ test("Test - Strict mode", function () {
312
312
  testUnexpectedResult(chrono.strict, "5 h ago", new Date(2012, 7, 10, 12, 14));
313
313
  });
314
314
 
315
+ test("Test - Forward date", () => {
316
+ // Note that it is actually impossible for X ago to be "forward dates".
317
+ // In such situation, we still return the correct actual extracted dates and make sure the option doesn't affect the results.
318
+ const reference = new Date("2024-09-10T12:00:00");
319
+ const options = { forwardDate: true };
320
+
321
+ testSingleCase(chrono, "2 days ago", reference, options, (result, text) => {
322
+ expect(result.start.get("year")).toBe(2024);
323
+ expect(result.start.get("month")).toBe(9);
324
+ expect(result.start.get("day")).toBe(8);
325
+ });
326
+
327
+ testSingleCase(chrono, "2 weeks ago", reference, options, (result, text) => {
328
+ expect(result.start.get("year")).toBe(2024);
329
+ expect(result.start.get("month")).toBe(8);
330
+ expect(result.start.get("day")).toBe(27);
331
+ });
332
+
333
+ testSingleCase(chrono, "2 months ago", reference, options, (result, text) => {
334
+ expect(result.start.get("year")).toBe(2024);
335
+ expect(result.start.get("month")).toBe(7);
336
+ expect(result.start.get("day")).toBe(10);
337
+ });
338
+
339
+ testSingleCase(chrono, "2 years ago", reference, options, (result, text) => {
340
+ expect(result.start.get("year")).toBe(2022);
341
+ expect(result.start.get("month")).toBe(9);
342
+ expect(result.start.get("day")).toBe(10);
343
+ });
344
+ });
345
+
315
346
  test("Test - Negative cases", function () {
316
347
  testUnexpectedResult(chrono, "15 hours 29 min");
317
348
  testUnexpectedResult(chrono, "a few hour");
318
349
  testUnexpectedResult(chrono, "5 days");
350
+
351
+ testUnexpectedResult(chrono, "am ago");
352
+ testUnexpectedResult(chrono, "them ago");
319
353
  });
@@ -164,4 +164,7 @@ test("Test - Negative cases", () => {
164
164
  testUnexpectedResult(chrono.casual, "1 m", new Date(2015, 7 - 1, 10, 12, 14));
165
165
  testUnexpectedResult(chrono.casual, "the day", new Date(2015, 7 - 1, 10, 12, 14));
166
166
  testUnexpectedResult(chrono.casual, "a day", new Date(2015, 7 - 1, 10, 12, 14));
167
+
168
+ testUnexpectedResult(chrono, "+am");
169
+ testUnexpectedResult(chrono, "+them");
167
170
  });
@@ -354,3 +354,7 @@ test("Test - Plus after reference", () => {
354
354
  expect(result.start.get("minute")).toBe(10);
355
355
  });
356
356
  });
357
+
358
+ test("Test - Negative cases", () => {
359
+ testUnexpectedResult(chrono, "tell them later");
360
+ });
@@ -408,3 +408,8 @@ test("Test - Forward date option", () => {
408
408
  expect(result.start.get("day")).toBe(1);
409
409
  });
410
410
  });
411
+
412
+ test("Test - Negative cases", () => {
413
+ testUnexpectedResult(chrono, "in am");
414
+ testUnexpectedResult(chrono, "in them");
415
+ });
@@ -1,6 +1,6 @@
1
1
  import * as chrono from "../../src";
2
2
  import { testSingleCase, testUnexpectedResult } from "../test_util";
3
- import ENTimeExpressionParser from "../../src/locales/en/parsers/ENTimeExpressionParser";
3
+ import { Meridiem } from "../../src";
4
4
 
5
5
  test("Test - Year numbers with BCE/CE Era label", () => {
6
6
  testSingleCase(chrono, "10 August 234 BCE", new Date(2012, 7, 10), (result) => {
@@ -73,3 +73,28 @@ test("Test - Year numbers with Buddhist Era label", () => {
73
73
  expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
74
74
  });
75
75
  });
76
+
77
+ test("Test - Year number after date/time expression", () => {
78
+ testSingleCase(chrono, "Thu Oct 26 11:00:09 2023", new Date(2016, 10 - 1, 1, 8), (result, text) => {
79
+ expect(result.start.get("year")).toBe(2023);
80
+ expect(result.start.get("month")).toBe(10);
81
+ expect(result.start.get("day")).toBe(26);
82
+
83
+ expect(result.start.get("hour")).toBe(11);
84
+ expect(result.start.get("minute")).toBe(0);
85
+ expect(result.start.get("second")).toBe(9);
86
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
87
+ });
88
+
89
+ testSingleCase(chrono, "Thu Oct 26 11:00:09 EDT 2023", new Date(2016, 10 - 1, 1, 8), (result, text) => {
90
+ expect(result.start.get("year")).toBe(2023);
91
+ expect(result.start.get("month")).toBe(10);
92
+ expect(result.start.get("day")).toBe(26);
93
+
94
+ expect(result.start.get("hour")).toBe(11);
95
+ expect(result.start.get("minute")).toBe(0);
96
+ expect(result.start.get("second")).toBe(9);
97
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
98
+ expect(result.start.get("timezoneOffset")).toBe(-240);
99
+ });
100
+ });
@@ -1,7 +1,7 @@
1
1
  import { testSingleCase, testUnexpectedResult } from "../test_util";
2
2
  import * as chrono from "../../src";
3
3
 
4
- test("Test - Single Expression Start with Year", function () {
4
+ test("Test - Single Expression (yyyy/MM/dd)", function () {
5
5
  testSingleCase(chrono, "2012/8/10", new Date(2012, 7, 10), (result) => {
6
6
  expect(result.start).not.toBeNull();
7
7
  expect(result.start.get("year")).toBe(2012);
@@ -41,7 +41,7 @@ test("Test - Single Expression Start with Year", function () {
41
41
  });
42
42
  });
43
43
 
44
- test("Test - Single Expression Start with Year and Month Name", function () {
44
+ test("Test - Single Expression with month name (yyyy/MMM/dd)", function () {
45
45
  testSingleCase(chrono, "2012/Aug/10", new Date(2012, 7, 10), (result) => {
46
46
  expect(result.start).not.toBeNull();
47
47
  expect(result.start.get("year")).toBe(2012);
@@ -73,8 +73,29 @@ test("Test - Single Expression Start with Year and Month Name", function () {
73
73
  });
74
74
  });
75
75
 
76
- test("Test - Negative year-month-day like pattern", function () {
77
- testUnexpectedResult(chrono, "2012-80-10", new Date(2012, 7, 10));
76
+ test("Test - Allow swap date/month order in casual mode", () => {
77
+ testUnexpectedResult(chrono.strict, "2024/13/1");
78
+ testUnexpectedResult(chrono.strict, "2024-13-01");
78
79
 
80
+ testSingleCase(chrono.casual, "2024/13/1", new Date(2012, 7, 10), (result) => {
81
+ expect(result.start.get("year")).toBe(2024);
82
+ expect(result.start.get("month")).toBe(1);
83
+ expect(result.start.get("day")).toBe(13);
84
+ });
85
+
86
+ testSingleCase(chrono.casual, "2024-13-01", new Date(2012, 7, 10), (result) => {
87
+ expect(result.start.get("year")).toBe(2024);
88
+ expect(result.start.get("month")).toBe(1);
89
+ expect(result.start.get("day")).toBe(13);
90
+ });
91
+ });
92
+
93
+ test("Test - Not parse unlikely xxxx-xx-xx pattern", function () {
94
+ testUnexpectedResult(chrono, "2012/80/10", new Date(2012, 7, 10));
79
95
  testUnexpectedResult(chrono, "2012 80 10", new Date(2012, 7, 10));
80
96
  });
97
+
98
+ test("Test - Not parse impossible dates", function () {
99
+ testUnexpectedResult(chrono, "2014-08-32");
100
+ testUnexpectedResult(chrono, "2014-02-30");
101
+ });
@@ -241,4 +241,6 @@ test("Test - Compare with native js", () => {
241
241
  testByCompareWithNative("Fri, 31 Mar 2000 07:00:00 UTC");
242
242
 
243
243
  testByCompareWithNative("2014-12-14T18:22:14.759Z");
244
+
245
+ testByCompareWithNative("2024-01-01T00:00");
244
246
  });
@@ -1 +0,0 @@
1
- {"version":3,"file":"ENCasualYearMonthDayParser.js","sourceRoot":"","sources":["../../../../../src/locales/en/parsers/ENCasualYearMonthDayParser.ts"],"names":[],"mappings":";;AACA,4CAAgD;AAChD,oDAAyD;AACzD,2GAAgH;AAShH,MAAM,OAAO,GAAG,IAAI,MAAM,CACtB,uBAAuB;IACnB,OAAO,yBAAe,CAAC,4BAAgB,CAAC,4BAA4B;IACpE,cAAc;IACd,WAAW,EACf,GAAG,CACN,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAqB,0BAA2B,SAAQ,uEAAsC;IAC1F,YAAY;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;YACnC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrC,CAAC,CAAC,4BAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAE9D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC;SACf;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAE/C,OAAO;YACH,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;SACb,CAAC;IACN,CAAC;CACJ;AAvBD,6CAuBC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ENCasualYearMonthDayParser.js","sourceRoot":"","sources":["../../../../../src/locales/en/parsers/ENCasualYearMonthDayParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAShH,MAAM,OAAO,GAAG,IAAI,MAAM,CACtB,uBAAuB;IACnB,OAAO,eAAe,CAAC,gBAAgB,CAAC,4BAA4B;IACpE,cAAc;IACd,WAAW,EACf,GAAG,CACN,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,sCAAsC;IAC1F,YAAY;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;YACnC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAE9D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC;SACf;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAE/C,OAAO;YACH,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;SACb,CAAC;IACN,CAAC;CACJ"}