@louis.jln/extract-date 4.0.2 → 4.0.3

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 (58) hide show
  1. package/{src/calculateSpecificity.js → calculateSpecificity.js} +4 -1
  2. package/calculateSpecificity.js.map +1 -0
  3. package/{src/createFormats.js → createFormats.js} +19 -13
  4. package/createFormats.js.map +1 -0
  5. package/{src/createMovingChunks.js → createMovingChunks.js} +4 -1
  6. package/createMovingChunks.js.map +1 -0
  7. package/{src/extractDate.js → extractDate.js} +41 -35
  8. package/extractDate.js.map +1 -0
  9. package/extractRelativeDate.js +29 -0
  10. package/extractRelativeDate.js.map +1 -0
  11. package/index.js +8 -0
  12. package/index.js.map +1 -0
  13. package/{src/normalizeInput.js → normalizeInput.js} +4 -1
  14. package/normalizeInput.js.map +1 -0
  15. package/package.json +2 -3
  16. package/{src/resolveLocalizedNames.js → resolveLocalizedNames.js} +17 -8
  17. package/resolveLocalizedNames.js.map +1 -0
  18. package/types.js +3 -0
  19. package/types.js.map +1 -0
  20. package/src/extractRelativeDate.js +0 -23
  21. package/src/index.js +0 -2
  22. package/src/types.js +0 -1
  23. package/test/extract-date/calculateSpecificity.test.d.ts +0 -1
  24. package/test/extract-date/calculateSpecificity.test.js +0 -39
  25. package/test/extract-date/createMovingChunks.test.d.ts +0 -1
  26. package/test/extract-date/createMovingChunks.test.js +0 -28
  27. package/test/extract-date/extractDate/configuration.test.d.ts +0 -1
  28. package/test/extract-date/extractDate/configuration.test.js +0 -36
  29. package/test/extract-date/extractDate/edge-cases.test.d.ts +0 -1
  30. package/test/extract-date/extractDate/edge-cases.test.js +0 -23
  31. package/test/extract-date/extractDate/fixtures.test.d.ts +0 -1
  32. package/test/extract-date/extractDate/fixtures.test.js +0 -42
  33. package/test/extract-date/extractDate/general-formats.test.d.ts +0 -1
  34. package/test/extract-date/extractDate/general-formats.test.js +0 -45
  35. package/test/extract-date/extractDate/implied-year.test.d.ts +0 -1
  36. package/test/extract-date/extractDate/implied-year.test.js +0 -105
  37. package/test/extract-date/extractDate/localised.test.d.ts +0 -1
  38. package/test/extract-date/extractDate/localised.test.js +0 -75
  39. package/test/extract-date/extractDate/multiple-dates.test.d.ts +0 -1
  40. package/test/extract-date/extractDate/multiple-dates.test.js +0 -24
  41. package/test/extract-date/extractDate/relative-dates.test.d.ts +0 -1
  42. package/test/extract-date/extractDate/relative-dates.test.js +0 -47
  43. package/test/extract-date/extractRelativeDate.test.d.ts +0 -1
  44. package/test/extract-date/extractRelativeDate.test.js +0 -29
  45. package/test/extract-date/normalizeInput.test.d.ts +0 -1
  46. package/test/extract-date/normalizeInput.test.js +0 -14
  47. package/test/fixtures/dates.json +0 -22574
  48. /package/{src/calculateSpecificity.d.ts → calculateSpecificity.d.ts} +0 -0
  49. /package/{src/createFormats.d.ts → createFormats.d.ts} +0 -0
  50. /package/{src/createMovingChunks.d.ts → createMovingChunks.d.ts} +0 -0
  51. /package/{src/days.json → days.json} +0 -0
  52. /package/{src/extractDate.d.ts → extractDate.d.ts} +0 -0
  53. /package/{src/extractRelativeDate.d.ts → extractRelativeDate.d.ts} +0 -0
  54. /package/{src/index.d.ts → index.d.ts} +0 -0
  55. /package/{src/months.json → months.json} +0 -0
  56. /package/{src/normalizeInput.d.ts → normalizeInput.d.ts} +0 -0
  57. /package/{src/resolveLocalizedNames.d.ts → resolveLocalizedNames.d.ts} +0 -0
  58. /package/{src/types.d.ts → types.d.ts} +0 -0
@@ -1,36 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import extractDate from '@/extractDate';
3
- beforeEach(() => {
4
- vi.useFakeTimers();
5
- });
6
- afterEach(() => {
7
- vi.useRealTimers();
8
- });
9
- it('throws an error if invalid `locale` is provided', () => {
10
- expect(() => {
11
- extractDate('foo', {
12
- locale: 'bar',
13
- });
14
- }).toThrow('No translation available for the target locale.');
15
- });
16
- it('throws an error if invalid `timezone` is provided', () => {
17
- expect(() => {
18
- extractDate('foo', {
19
- timezone: 'bar',
20
- });
21
- }).toThrow('Unrecognized timezone.');
22
- });
23
- it('throws an error if invalid `maximumAge` is a negative value', () => {
24
- expect(() => {
25
- extractDate('foo', {
26
- maximumAge: -1,
27
- });
28
- }).toThrow('`maximumAge` must be a positive number.');
29
- });
30
- it('throws an error if invalid `minimumAge` is a negative value', () => {
31
- expect(() => {
32
- extractDate('foo', {
33
- minimumAge: -1,
34
- });
35
- }).toThrow('`minimumAge` must be a positive number.');
36
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,23 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { parse as parseDate, } from 'date-fns';
3
- import extractDate from '@/extractDate';
4
- beforeEach(() => {
5
- vi.useFakeTimers();
6
- });
7
- afterEach(() => {
8
- vi.useRealTimers();
9
- });
10
- it('parses ISO 8601 date-time format', () => {
11
- vi.setSystemTime(parseDate('2000-01-02', 'yyyy-MM-dd', new Date()).getTime());
12
- expect(extractDate('2000-01-02T00:00')).toEqual([{ date: '2000-01-02', originalText: '2000-01-02' }]);
13
- });
14
- it('extracts date matching multiple formats once', () => {
15
- vi.setSystemTime(parseDate('2000-01-02', 'yyyy-MM-dd', new Date()).getTime());
16
- // 'foo bar' prefix is required to ensure that substring matching is correctly advancing.
17
- expect(extractDate('foo bar 02/01/2000', { direction: 'DMY' })).toEqual([{ date: '2000-01-02', originalText: '02/01/2000' }]);
18
- });
19
- it('full-year formats are used regardless of whether direction defines Y', () => {
20
- vi.setSystemTime(parseDate('2000-01-02', 'yyyy-MM-dd', new Date()).getTime());
21
- expect(extractDate('02/01/2020', { direction: 'DM' })).toEqual([{ date: '2020-01-02', originalText: '02/01/2020' }]);
22
- });
23
- it.todo('interprets 24:00 time as the next date');
@@ -1 +0,0 @@
1
- export {};
@@ -1,42 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { parse as parseDate, } from 'date-fns';
3
- import fixtureDates from '@test/fixtures/dates.json';
4
- import extractDate from '@/extractDate';
5
- beforeEach(() => {
6
- vi.useFakeTimers();
7
- });
8
- afterEach(() => {
9
- vi.useRealTimers();
10
- });
11
- const normalizedFixtureDates = fixtureDates
12
- .map((fixture) => {
13
- return {
14
- ...fixture,
15
- subject: fixture.subject.trim(),
16
- };
17
- })
18
- .map((fixture) => {
19
- return JSON.stringify(fixture);
20
- })
21
- .filter((fixture, index, self) => {
22
- return self.indexOf(fixture) === index;
23
- })
24
- .map((fixture) => {
25
- return JSON.parse(fixture);
26
- })
27
- .map((fixture) => {
28
- return {
29
- ...fixture,
30
- configuration: {
31
- ...fixture.configuration,
32
- maximumAge: Infinity,
33
- minimumAge: Infinity,
34
- },
35
- };
36
- });
37
- for (const fixtureDate of normalizedFixtureDates) {
38
- it('extracts dates from "' + fixtureDate.subject + '" fixture using ' + JSON.stringify(fixtureDate.configuration) + ' configuration on ' + fixtureDate.date + ' date', () => {
39
- vi.setSystemTime(parseDate(fixtureDate.date, 'yyyy-MM-dd', new Date()).getTime());
40
- expect(extractDate(fixtureDate.subject, fixtureDate.configuration)).toEqual(fixtureDate.matches);
41
- });
42
- }
@@ -1,45 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { format as formatDate, parse as parseDate, } from 'date-fns';
3
- import extractDate from '@/extractDate';
4
- import createFormats from '@/createFormats';
5
- // https://en.wikipedia.org/wiki/Date_format_by_country
6
- // %w arbitrary white-space separated text
7
- const describeConfiguration = (userConfiguration) => {
8
- const configuration = {};
9
- if (userConfiguration.direction) {
10
- configuration.direction = userConfiguration.direction;
11
- }
12
- return JSON.stringify(configuration);
13
- };
14
- const formats = createFormats();
15
- vi.useFakeTimers();
16
- vi.setSystemTime(parseDate('2000-06-01', 'yyyy-MM-dd', new Date()).getTime());
17
- const subjects = formats
18
- .filter((format) => {
19
- return format.test !== false;
20
- })
21
- .map((format) => {
22
- const currentDate = new Date();
23
- return {
24
- date: formatDate(currentDate, 'yyyy-MM-dd'),
25
- dateFnsFormat: format.dateFnsFormat,
26
- direction: format.direction,
27
- input: formatDate(currentDate, format.dateFnsFormat),
28
- };
29
- });
30
- vi.useRealTimers();
31
- beforeEach(() => {
32
- vi.useFakeTimers();
33
- });
34
- afterEach(() => {
35
- vi.useRealTimers();
36
- });
37
- for (const subject of subjects) {
38
- it('extracts ' + subject.dateFnsFormat + ' from "' + subject.input + '" input using ' + describeConfiguration(subject) + ' configuration', () => {
39
- vi.setSystemTime(parseDate('2000-06-01', 'yyyy-MM-dd', new Date()).getTime());
40
- const actual = extractDate(subject.input, subject);
41
- const expected = subject.date;
42
- expect(actual.length).toBe(1);
43
- expect(actual[0].date).toBe(expected);
44
- });
45
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,105 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import moment from 'moment';
3
- import extractDate from '@/extractDate';
4
- beforeEach(() => {
5
- vi.useFakeTimers();
6
- });
7
- afterEach(() => {
8
- vi.useRealTimers();
9
- });
10
- it('assumes last year if month difference is greater or equal to `maximumAge`', () => {
11
- vi.setSystemTime(moment('2000-01-01').valueOf());
12
- const configuration = {
13
- direction: 'MD',
14
- maximumAge: 10,
15
- };
16
- expect(extractDate('01-01', configuration)).toEqual([{ date: '2000-01-01', originalText: '01-01' }]);
17
- expect(extractDate('02-01', configuration)).toEqual([{ date: '2000-02-01', originalText: '02-01' }]);
18
- expect(extractDate('03-01', configuration)).toEqual([{ date: '2000-03-01', originalText: '03-01' }]);
19
- expect(extractDate('04-01', configuration)).toEqual([{ date: '2000-04-01', originalText: '04-01' }]);
20
- expect(extractDate('05-01', configuration)).toEqual([{ date: '2000-05-01', originalText: '05-01' }]);
21
- expect(extractDate('06-01', configuration)).toEqual([{ date: '2000-06-01', originalText: '06-01' }]);
22
- expect(extractDate('07-01', configuration)).toEqual([{ date: '2000-07-01', originalText: '07-01' }]);
23
- expect(extractDate('08-01', configuration)).toEqual([{ date: '2000-08-01', originalText: '08-01' }]);
24
- expect(extractDate('09-01', configuration)).toEqual([{ date: '2000-09-01', originalText: '09-01' }]);
25
- expect(extractDate('10-01', configuration)).toEqual([{ date: '2000-10-01', originalText: '10-01' }]);
26
- expect(extractDate('11-01', configuration)).toEqual([{ date: '1999-11-01', originalText: '11-01' }]);
27
- expect(extractDate('12-01', configuration)).toEqual([{ date: '1999-12-01', originalText: '12-01' }]);
28
- });
29
- it('does not assume last year when `maximumAge` is `Infinity`', () => {
30
- vi.setSystemTime(moment('2000-01-01').valueOf());
31
- const configuration = {
32
- direction: 'MD',
33
- maximumAge: Infinity,
34
- };
35
- expect(extractDate('01-01', configuration)).toEqual([{ date: '2000-01-01', originalText: '01-01' }]);
36
- expect(extractDate('02-01', configuration)).toEqual([{ date: '2000-02-01', originalText: '02-01' }]);
37
- expect(extractDate('03-01', configuration)).toEqual([{ date: '2000-03-01', originalText: '03-01' }]);
38
- expect(extractDate('04-01', configuration)).toEqual([{ date: '2000-04-01', originalText: '04-01' }]);
39
- expect(extractDate('05-01', configuration)).toEqual([{ date: '2000-05-01', originalText: '05-01' }]);
40
- expect(extractDate('06-01', configuration)).toEqual([{ date: '2000-06-01', originalText: '06-01' }]);
41
- expect(extractDate('07-01', configuration)).toEqual([{ date: '2000-07-01', originalText: '07-01' }]);
42
- expect(extractDate('08-01', configuration)).toEqual([{ date: '2000-08-01', originalText: '08-01' }]);
43
- expect(extractDate('09-01', configuration)).toEqual([{ date: '2000-09-01', originalText: '09-01' }]);
44
- expect(extractDate('10-01', configuration)).toEqual([{ date: '2000-10-01', originalText: '10-01' }]);
45
- expect(extractDate('11-01', configuration)).toEqual([{ date: '2000-11-01', originalText: '11-01' }]);
46
- expect(extractDate('12-01', configuration)).toEqual([{ date: '2000-12-01', originalText: '12-01' }]);
47
- });
48
- it('increments year value if month difference is greater or equal to `minimumAge`', () => {
49
- vi.setSystemTime(moment('2000-12-01').valueOf());
50
- const configuration = {
51
- direction: 'MD',
52
- minimumAge: 2,
53
- };
54
- expect(extractDate('01-01', configuration)).toEqual([{ date: '2001-01-01', originalText: '01-01' }]);
55
- expect(extractDate('02-01', configuration)).toEqual([{ date: '2001-02-01', originalText: '02-01' }]);
56
- expect(extractDate('03-01', configuration)).toEqual([{ date: '2001-03-01', originalText: '03-01' }]);
57
- expect(extractDate('04-01', configuration)).toEqual([{ date: '2001-04-01', originalText: '04-01' }]);
58
- expect(extractDate('05-01', configuration)).toEqual([{ date: '2001-05-01', originalText: '05-01' }]);
59
- expect(extractDate('06-01', configuration)).toEqual([{ date: '2001-06-01', originalText: '06-01' }]);
60
- expect(extractDate('07-01', configuration)).toEqual([{ date: '2001-07-01', originalText: '07-01' }]);
61
- expect(extractDate('08-01', configuration)).toEqual([{ date: '2001-08-01', originalText: '08-01' }]);
62
- expect(extractDate('09-01', configuration)).toEqual([{ date: '2001-09-01', originalText: '09-01' }]);
63
- expect(extractDate('10-01', configuration)).toEqual([{ date: '2001-10-01', originalText: '10-01' }]);
64
- expect(extractDate('11-01', configuration)).toEqual([{ date: '2000-11-01', originalText: '11-01' }]);
65
- expect(extractDate('12-01', configuration)).toEqual([{ date: '2000-12-01', originalText: '12-01' }]);
66
- });
67
- it('does not increment year value if `minimumAge` is `Infinity`', () => {
68
- vi.setSystemTime(moment('2000-12-01').valueOf());
69
- const configuration = {
70
- direction: 'MD',
71
- minimumAge: Infinity,
72
- };
73
- expect(extractDate('01-01', configuration)).toEqual([{ date: '2000-01-01', originalText: '01-01' }]);
74
- expect(extractDate('02-01', configuration)).toEqual([{ date: '2000-02-01', originalText: '02-01' }]);
75
- expect(extractDate('03-01', configuration)).toEqual([{ date: '2000-03-01', originalText: '03-01' }]);
76
- expect(extractDate('04-01', configuration)).toEqual([{ date: '2000-04-01', originalText: '04-01' }]);
77
- expect(extractDate('05-01', configuration)).toEqual([{ date: '2000-05-01', originalText: '05-01' }]);
78
- expect(extractDate('06-01', configuration)).toEqual([{ date: '2000-06-01', originalText: '06-01' }]);
79
- expect(extractDate('07-01', configuration)).toEqual([{ date: '2000-07-01', originalText: '07-01' }]);
80
- expect(extractDate('08-01', configuration)).toEqual([{ date: '2000-08-01', originalText: '08-01' }]);
81
- expect(extractDate('09-01', configuration)).toEqual([{ date: '2000-09-01', originalText: '09-01' }]);
82
- expect(extractDate('10-01', configuration)).toEqual([{ date: '2000-10-01', originalText: '10-01' }]);
83
- expect(extractDate('11-01', configuration)).toEqual([{ date: '2000-11-01', originalText: '11-01' }]);
84
- expect(extractDate('12-01', configuration)).toEqual([{ date: '2000-12-01', originalText: '12-01' }]);
85
- });
86
- it('`maximumAge` and `minimumAge` can be combined', () => {
87
- vi.setSystemTime(moment('2000-06-01').valueOf());
88
- const configuration = {
89
- direction: 'MD',
90
- maximumAge: 2,
91
- minimumAge: 2,
92
- };
93
- expect(extractDate('01-01', configuration)).toEqual([{ date: '2001-01-01', originalText: '01-01' }]);
94
- expect(extractDate('02-01', configuration)).toEqual([{ date: '2001-02-01', originalText: '02-01' }]);
95
- expect(extractDate('03-01', configuration)).toEqual([{ date: '2001-03-01', originalText: '03-01' }]);
96
- expect(extractDate('04-01', configuration)).toEqual([{ date: '2001-04-01', originalText: '04-01' }]);
97
- expect(extractDate('05-01', configuration)).toEqual([{ date: '2000-05-01', originalText: '05-01' }]);
98
- expect(extractDate('06-01', configuration)).toEqual([{ date: '2000-06-01', originalText: '06-01' }]);
99
- expect(extractDate('07-01', configuration)).toEqual([{ date: '2000-07-01', originalText: '07-01' }]);
100
- expect(extractDate('08-01', configuration)).toEqual([{ date: '1999-08-01', originalText: '08-01' }]);
101
- expect(extractDate('09-01', configuration)).toEqual([{ date: '1999-09-01', originalText: '09-01' }]);
102
- expect(extractDate('10-01', configuration)).toEqual([{ date: '1999-10-01', originalText: '10-01' }]);
103
- expect(extractDate('11-01', configuration)).toEqual([{ date: '1999-11-01', originalText: '11-01' }]);
104
- expect(extractDate('12-01', configuration)).toEqual([{ date: '1999-12-01', originalText: '12-01' }]);
105
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,75 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { parse as parseDate, } from 'date-fns';
3
- import extractDate from '@/extractDate';
4
- beforeEach(() => {
5
- vi.useFakeTimers();
6
- });
7
- afterEach(() => {
8
- vi.useRealTimers();
9
- });
10
- it('extracts a localised date (English)', () => {
11
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
12
- const configuration = {
13
- locale: 'en',
14
- };
15
- expect(extractDate('May 1, 2017', configuration)).toEqual([{ date: '2017-05-01', originalText: 'May 1, 2017' }]);
16
- });
17
- it('extracts a localised date (French)', () => {
18
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
19
- const configuration = {
20
- locale: 'fr',
21
- };
22
- expect(extractDate('Mai 1, 2017', configuration)).toEqual([{ date: '2017-05-01', originalText: 'Mai 1, 2017' }]);
23
- });
24
- it('extracts a localised date with accentless mode (French)', () => {
25
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
26
- const configuration = {
27
- translateAccentless: true,
28
- locale: 'fr',
29
- };
30
- expect(extractDate('fevrier 1, 2017', configuration)).toEqual([{ date: '2017-02-01', originalText: 'fevrier 1, 2017' }]);
31
- });
32
- it('extracts a localised date for a non-date-fns locale (Afrikaans)', () => {
33
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
34
- const configuration = {
35
- locale: 'af',
36
- };
37
- expect(extractDate('Januarie 1, 2017', configuration)).toEqual([{ date: '2017-01-01', originalText: 'Januarie 1, 2017' }]);
38
- });
39
- it('Translation works', () => {
40
- vi.setSystemTime(parseDate('2018-01-01', 'yyyy-MM-dd', new Date()).getTime());
41
- expect(extractDate('Va bene domani', {
42
- translateAccentless: true,
43
- locale: 'it',
44
- })).toEqual([{ date: '2018-01-02', originalText: 'domani' }]);
45
- expect(extractDate('Va bene domani', {
46
- translateAccentless: true,
47
- locale: 'fr',
48
- })).toEqual([]);
49
- expect(extractDate('Va bene domani', {
50
- translateAccentless: true,
51
- locale: 'en',
52
- })).toEqual([]);
53
- });
54
- // Italian day names carry a grave accent (lunedì, martedì, venerdì…).
55
- // accentless:true lets callers omit the accent and still get a match.
56
- // 2018-02-05 is a Monday, so "lunedi 5 febbraio" unambiguously maps to that date.
57
- it('extracts Italian date with accentless day name', () => {
58
- vi.setSystemTime(parseDate('2018-01-01', 'yyyy-MM-dd', new Date()).getTime());
59
- expect(extractDate('lunedi 5 febbraio', {
60
- translateAccentless: true,
61
- locale: 'it',
62
- })).toEqual([{ date: '2018-02-05', originalText: 'lunedi 5 febbraio' }]);
63
- expect(extractDate('lunedi 5 febbraio', {
64
- translateAccentless: false,
65
- locale: 'it',
66
- })).toEqual([{ date: '2018-02-05', originalText: '5 febbraio' }]);
67
- expect(extractDate('lunedì 5 febbraio', {
68
- translateAccentless: true,
69
- locale: 'it',
70
- })).toEqual([{ date: '2018-02-05', originalText: 'lunedi 5 febbraio' }]);
71
- expect(extractDate('lunedì 5 febbraio', {
72
- translateAccentless: false,
73
- locale: 'it',
74
- })).toEqual([{ date: '2018-02-05', originalText: 'lunedi 5 febbraio' }]);
75
- });
@@ -1,24 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { addDays, format as formatDate, parse as parseDate, } from 'date-fns';
3
- import extractDate from '@/extractDate';
4
- beforeEach(() => {
5
- vi.useFakeTimers();
6
- });
7
- afterEach(() => {
8
- vi.useRealTimers();
9
- });
10
- it('extracts multiple dates', () => {
11
- vi.setSystemTime(parseDate('2000-06-01', 'yyyy-MM-dd', new Date()).valueOf());
12
- const actual = extractDate(formatDate(new Date(), 'yyyy-MM-dd') + ' ' + formatDate(addDays(new Date(), 1), 'yyyy-MM-dd'));
13
- const expected = [
14
- {
15
- date: formatDate(new Date(), 'yyyy-MM-dd'),
16
- originalText: formatDate(new Date(), 'yyyy-MM-dd'),
17
- },
18
- {
19
- date: formatDate(addDays(new Date(), 1), 'yyyy-MM-dd'),
20
- originalText: formatDate(addDays(new Date(), 1), 'yyyy-MM-dd'),
21
- },
22
- ];
23
- expect(actual).toEqual(expected);
24
- });
@@ -1,47 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import { parse as parseDate, } from 'date-fns';
3
- import extractDate from '@/extractDate';
4
- beforeEach(() => {
5
- vi.useFakeTimers();
6
- });
7
- afterEach(() => {
8
- vi.useRealTimers();
9
- });
10
- it('does not extract relative dates when locale is undefined', () => {
11
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
12
- const configuration = {
13
- timezone: 'Europe/London',
14
- };
15
- expect(extractDate('today', configuration)).toEqual([]);
16
- });
17
- it('extracts relative dates when timezone is undefined (uses local time)', () => {
18
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
19
- const configuration = {
20
- locale: 'en',
21
- };
22
- expect(extractDate('today', configuration)).toEqual([{ date: '2000-01-01', originalText: 'today' }]);
23
- });
24
- it('extracts relative date (yesterday)', () => {
25
- vi.setSystemTime(parseDate('2000-01-02', 'yyyy-MM-dd', new Date()).getTime());
26
- const configuration = {
27
- locale: 'en',
28
- timezone: 'Europe/London',
29
- };
30
- expect(extractDate('yesterday', configuration)).toEqual([{ date: '2000-01-01', originalText: 'yesterday' }]);
31
- });
32
- it('extracts relative date (today)', () => {
33
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
34
- const configuration = {
35
- locale: 'en',
36
- timezone: 'Europe/London',
37
- };
38
- expect(extractDate('today', configuration)).toEqual([{ date: '2000-01-01', originalText: 'today' }]);
39
- });
40
- it('extracts relative date (tomorrow)', () => {
41
- vi.setSystemTime(parseDate('2000-01-01', 'yyyy-MM-dd', new Date()).getTime());
42
- const configuration = {
43
- locale: 'en',
44
- timezone: 'Europe/London',
45
- };
46
- expect(extractDate('tomorrow', configuration)).toEqual([{ date: '2000-01-02', originalText: 'tomorrow' }]);
47
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,29 +0,0 @@
1
- import { it, expect, beforeEach, afterEach, vi } from 'vitest';
2
- import moment from 'moment';
3
- import extractRelativeDate from '@/extractRelativeDate';
4
- beforeEach(() => {
5
- vi.useFakeTimers();
6
- });
7
- afterEach(() => {
8
- vi.useRealTimers();
9
- });
10
- it('extracts relative date (yesterday)', () => {
11
- vi.setSystemTime(moment('2018-07-08').valueOf());
12
- expect(extractRelativeDate('yesterday', 'en', 'Europe/London')).toBe('2018-07-07');
13
- });
14
- it('extracts relative date (today)', () => {
15
- vi.setSystemTime(moment('2018-07-08').valueOf());
16
- expect(extractRelativeDate('today', 'en', 'Europe/London')).toBe('2018-07-08');
17
- });
18
- it('extracts relative date (tomorrow)', () => {
19
- vi.setSystemTime(moment('2018-07-08').valueOf());
20
- expect(extractRelativeDate('tomorrow', 'en', 'Europe/London')).toBe('2018-07-09');
21
- });
22
- it('supports different locales', () => {
23
- vi.setSystemTime(moment('2018-07-08').valueOf());
24
- expect(extractRelativeDate('rytoj', 'lt', 'Europe/London')).toBe('2018-07-09');
25
- });
26
- it('returns null when date cannot be recognized', () => {
27
- vi.setSystemTime(moment('2018-07-08').valueOf());
28
- expect(extractRelativeDate('foo', 'en', 'Europe/London')).toBe(null);
29
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,14 +0,0 @@
1
- import { it, expect } from 'vitest';
2
- import normalizeInput from '@/normalizeInput';
3
- it('splits yyyy-MM-ddTHH:mm', () => {
4
- expect(normalizeInput('2018-01-01T14:00 2018-01-02T15:00')).toBe('2018-01-01 14:00 2018-01-02 15:00');
5
- });
6
- it('removes spaces between date-like fragments separated by /', () => {
7
- expect(normalizeInput('10 / 20 / 30')).toBe('10/20/30');
8
- });
9
- it('removes repeating white space', () => {
10
- expect(normalizeInput('foo bar baz')).toBe('foo bar baz');
11
- });
12
- it('trims white space', () => {
13
- expect(normalizeInput(' foo ')).toBe('foo');
14
- });