@fhss-web-team/fuzzy-dates 1.2.2 → 2.0.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 (48) hide show
  1. package/README.md +99 -36
  2. package/dist/index.d.ts +1 -3
  3. package/dist/index.js +1 -2
  4. package/dist/src/collation/collationKey.d.ts +2 -0
  5. package/dist/src/collation/collationKey.js +44 -0
  6. package/dist/{fuzzyDate → src}/fuzzyDate.d.ts +85 -69
  7. package/dist/src/fuzzyDate.js +238 -0
  8. package/dist/src/gedcomX/toGedcomX.js +28 -0
  9. package/dist/src/helpers/constants.d.ts +2 -0
  10. package/dist/src/helpers/constants.js +2 -0
  11. package/dist/src/helpers/types.d.ts +12 -0
  12. package/dist/src/helpers/types.js +3 -0
  13. package/dist/src/normalize/normalize.js +51 -0
  14. package/dist/src/parse/index.d.ts +47 -0
  15. package/dist/src/parse/index.js +41 -0
  16. package/dist/src/parse/modifiers.d.ts +182 -0
  17. package/dist/src/parse/modifiers.js +62 -0
  18. package/dist/{fuzzyDate/parse/inputDateFormats.d.ts → src/parse/simpleDate/formats.d.ts} +33 -50
  19. package/dist/{fuzzyDate/parse/inputDateFormats.js → src/parse/simpleDate/formats.js} +69 -88
  20. package/dist/src/parse/simpleDate/helpers.d.ts +21 -0
  21. package/dist/src/parse/simpleDate/helpers.js +58 -0
  22. package/dist/src/parse/simpleDate/parse.d.ts +31 -0
  23. package/dist/{fuzzyDate/parse/stringToDate.js → src/parse/simpleDate/parse.js} +4 -5
  24. package/package.json +1 -11
  25. package/dist/fuzzyDate/collate/collate.d.ts +0 -2
  26. package/dist/fuzzyDate/collate/collate.js +0 -15
  27. package/dist/fuzzyDate/fuzzyDate.js +0 -246
  28. package/dist/fuzzyDate/fuzzyDate.spec.d.ts +0 -1
  29. package/dist/fuzzyDate/fuzzyDate.spec.js +0 -158
  30. package/dist/fuzzyDate/gedcomX/toGedcomX.js +0 -31
  31. package/dist/fuzzyDate/helpers/constants.d.ts +0 -4
  32. package/dist/fuzzyDate/helpers/constants.js +0 -20
  33. package/dist/fuzzyDate/helpers/schemas.d.ts +0 -36
  34. package/dist/fuzzyDate/helpers/schemas.js +0 -12
  35. package/dist/fuzzyDate/helpers/types.d.ts +0 -16
  36. package/dist/fuzzyDate/helpers/types.js +0 -1
  37. package/dist/fuzzyDate/normalize/normalize.js +0 -47
  38. package/dist/fuzzyDate/parse/index.d.ts +0 -178
  39. package/dist/fuzzyDate/parse/index.js +0 -92
  40. package/dist/fuzzyDate/parse/modifiers.d.ts +0 -231
  41. package/dist/fuzzyDate/parse/modifiers.js +0 -185
  42. package/dist/fuzzyDate/parse/stringToDate.d.ts +0 -38
  43. /package/dist/{fuzzyDate → src}/gedcomX/toGedcomX.d.ts +0 -0
  44. /package/dist/{fuzzyDate → src}/helpers/result.d.ts +0 -0
  45. /package/dist/{fuzzyDate → src}/helpers/result.js +0 -0
  46. /package/dist/{fuzzyDate → src}/normalize/normalize.d.ts +0 -0
  47. /package/dist/{fuzzyDate/helpers → src/parse/simpleDate}/maps.d.ts +0 -0
  48. /package/dist/{fuzzyDate/helpers → src/parse/simpleDate}/maps.js +0 -0
@@ -1,178 +0,0 @@
1
- import { FuzzyDateFormat, FuzzyDateValue } from '../helpers/types';
2
- export declare function parse(input: string): {
3
- ok: false;
4
- error: "Year is required.";
5
- } | {
6
- ok: false;
7
- error: "Unknown month.";
8
- } | {
9
- ok: false;
10
- error: "Unknown date format.";
11
- } | {
12
- ok: true;
13
- value: {
14
- readonly modifier: "NONE";
15
- readonly start: {
16
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
17
- readonly minDate: Date;
18
- readonly maxDate: Date;
19
- };
20
- readonly end: {
21
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
22
- readonly minDate: Date;
23
- readonly maxDate: Date;
24
- };
25
- };
26
- } | {
27
- ok: true;
28
- value: {
29
- readonly modifier: "BEFORE";
30
- readonly start: {
31
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
32
- readonly minDate: Date;
33
- readonly maxDate: Date;
34
- };
35
- readonly end: {
36
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
37
- readonly minDate: Date;
38
- readonly maxDate: Date;
39
- };
40
- };
41
- } | {
42
- ok: true;
43
- value: {
44
- readonly modifier: "AFTER";
45
- readonly start: {
46
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
47
- readonly minDate: Date;
48
- readonly maxDate: Date;
49
- };
50
- readonly end: {
51
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
52
- readonly minDate: Date;
53
- readonly maxDate: Date;
54
- };
55
- };
56
- } | {
57
- ok: true;
58
- value: {
59
- readonly modifier: "ABOUT";
60
- readonly start: {
61
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
62
- readonly minDate: Date;
63
- readonly maxDate: Date;
64
- };
65
- readonly end: {
66
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
67
- readonly minDate: Date;
68
- readonly maxDate: Date;
69
- };
70
- };
71
- } | {
72
- ok: false;
73
- error: "Invalid \"BETWEEN\" modifier.";
74
- } | {
75
- ok: true;
76
- value: {
77
- readonly modifier: "BETWEEN";
78
- readonly start: {
79
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
80
- readonly minDate: Date;
81
- readonly maxDate: Date;
82
- };
83
- readonly end: {
84
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
85
- readonly minDate: Date;
86
- readonly maxDate: Date;
87
- };
88
- };
89
- } | {
90
- ok: false;
91
- error: "Invalid \"FROM\" modifier.";
92
- } | {
93
- ok: true;
94
- value: {
95
- readonly modifier: "FROM";
96
- readonly start: {
97
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
98
- readonly minDate: Date;
99
- readonly maxDate: Date;
100
- };
101
- readonly end: {
102
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
103
- readonly minDate: Date;
104
- readonly maxDate: Date;
105
- };
106
- };
107
- } | {
108
- ok: true;
109
- value: {
110
- readonly modifier: "EARLY";
111
- readonly start: {
112
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
113
- readonly minDate: Date;
114
- readonly maxDate: Date;
115
- };
116
- readonly end: {
117
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
118
- readonly minDate: Date;
119
- readonly maxDate: Date;
120
- };
121
- };
122
- } | {
123
- ok: true;
124
- value: {
125
- readonly modifier: "MID";
126
- readonly start: {
127
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
128
- readonly minDate: Date;
129
- readonly maxDate: Date;
130
- };
131
- readonly end: {
132
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
133
- readonly minDate: Date;
134
- readonly maxDate: Date;
135
- };
136
- };
137
- } | {
138
- ok: true;
139
- value: {
140
- readonly modifier: "LATE";
141
- readonly start: {
142
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
143
- readonly minDate: Date;
144
- readonly maxDate: Date;
145
- };
146
- readonly end: {
147
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
148
- readonly minDate: Date;
149
- readonly maxDate: Date;
150
- };
151
- };
152
- };
153
- export declare function getTimes(date: FuzzyDateValue): {
154
- start: number;
155
- end: number;
156
- half: number;
157
- };
158
- export declare function calculateMaxDate(start: Date, format: FuzzyDateFormat): Date;
159
- export declare function parseDateGroups(groups: {
160
- day?: string;
161
- month?: string;
162
- year?: string;
163
- decade?: string;
164
- }): {
165
- ok: false;
166
- error: "Year is required.";
167
- } | {
168
- ok: false;
169
- error: "Unknown month.";
170
- } | {
171
- ok: false;
172
- error: "Unknown date format.";
173
- } | {
174
- ok: true;
175
- value: {
176
- date: Date;
177
- };
178
- };
@@ -1,92 +0,0 @@
1
- import { about, after, before, between, early, from, late, mid, none, } from './modifiers';
2
- import { err, ok } from '../helpers/result';
3
- import { isMonth, isSeason, MONTH_NAME_MAP, MONTH_SEASON_MAP, } from '../helpers/maps';
4
- // Main Parse Function
5
- export function parse(input) {
6
- const cleanedInput = input
7
- .toLowerCase() // lowercases
8
- .replace(/(\d+)\s*(st|nd|rd|th|of)\b(\s*of)?/gi, '$1') // removes ordinal suffixes and 'of'
9
- .replace(/[.,/\-_]+/g, ' ') // replaces separators with spaces
10
- .replace(/\s+/g, ' ') // collapses multiple spaces to a single space
11
- .trim(); // Removes trailing and leading spaces
12
- if (cleanedInput.startsWith('before '))
13
- return before(cleanedInput);
14
- if (cleanedInput.startsWith('after '))
15
- return after(cleanedInput);
16
- if (cleanedInput.startsWith('about '))
17
- return about(cleanedInput);
18
- if (cleanedInput.startsWith('between '))
19
- return between(cleanedInput);
20
- if (cleanedInput.startsWith('from '))
21
- return from(cleanedInput);
22
- if (cleanedInput.startsWith('early '))
23
- return early(cleanedInput);
24
- if (cleanedInput.startsWith('mid '))
25
- return mid(cleanedInput);
26
- if (cleanedInput.startsWith('late '))
27
- return late(cleanedInput);
28
- return none(cleanedInput);
29
- }
30
- // Helpers
31
- export function getTimes(date) {
32
- const start = date.minDate.getTime();
33
- const end = date.maxDate.getTime() + 1; //Adds a milisecond for accurate date calculations
34
- const half = (end - start) / 2;
35
- return { start, end, half };
36
- }
37
- export function calculateMaxDate(start, format) {
38
- const endDate = new Date(start);
39
- if (format === 'MMMM_YYYY') {
40
- endDate.setUTCMonth(endDate.getUTCMonth() + 1);
41
- endDate.setMilliseconds(-1);
42
- }
43
- if (format === 'SEASON_YYYY') {
44
- endDate.setUTCMonth(endDate.getUTCMonth() + 3);
45
- endDate.setMilliseconds(-1);
46
- }
47
- if (format === 'YYYY') {
48
- endDate.setUTCFullYear(endDate.getUTCFullYear() + 1);
49
- endDate.setUTCMilliseconds(-1);
50
- }
51
- if (format === 'YYYYs') {
52
- endDate.setUTCFullYear(endDate.getUTCFullYear() + 10);
53
- endDate.setUTCMilliseconds(-1);
54
- }
55
- if (format === 'D_MMMM_YYYY') {
56
- endDate.setUTCDate(endDate.getUTCDate() + 1);
57
- endDate.setUTCMilliseconds(-1);
58
- }
59
- return endDate;
60
- }
61
- export function parseDateGroups(groups) {
62
- if (!groups.year && !groups.decade)
63
- return err('Year is required.');
64
- const year = groups.decade
65
- ? Number(groups.decade.replace(/(\d+)s$/, '$1')) // 'YYYYs' -> 'YYYY'
66
- : Number(groups.year);
67
- let month = 0; //default to January
68
- if (groups.month) {
69
- const result = resolveMonth(groups.month.toLowerCase());
70
- if (!result.ok)
71
- return result;
72
- month = result.value.monthNumber;
73
- }
74
- let day = 1; //default to 1st day
75
- if (groups.day) {
76
- const dayToken = /^(?:0?[1-9]|[12][0-9]|3[01])$/.exec(groups.day)?.[0];
77
- if (!dayToken)
78
- return err('Unknown date format.');
79
- day = Number(dayToken);
80
- }
81
- return ok({ date: new Date(Date.UTC(year, month, day)) });
82
- }
83
- function resolveMonth(rawMonth) {
84
- const monthToken = /^(?:0?[1-9]|1[0-2])$/.exec(rawMonth)?.[0]; //Matches 01-09 or 1-9 or 10-12
85
- if (monthToken)
86
- return ok({ monthNumber: Number(monthToken) - 1 }); //months are zero-based
87
- if (isMonth(rawMonth))
88
- return ok({ monthNumber: MONTH_NAME_MAP[rawMonth] - 1 });
89
- if (isSeason(rawMonth))
90
- return ok({ monthNumber: MONTH_SEASON_MAP[rawMonth] - 1 });
91
- return err('Unknown month.');
92
- }
@@ -1,231 +0,0 @@
1
- export declare const none: (cleanedInput: string) => {
2
- ok: false;
3
- error: "Year is required.";
4
- } | {
5
- ok: false;
6
- error: "Unknown month.";
7
- } | {
8
- ok: false;
9
- error: "Unknown date format.";
10
- } | {
11
- ok: true;
12
- value: {
13
- readonly modifier: "NONE";
14
- readonly start: {
15
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
16
- readonly minDate: Date;
17
- readonly maxDate: Date;
18
- };
19
- readonly end: {
20
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
21
- readonly minDate: Date;
22
- readonly maxDate: Date;
23
- };
24
- };
25
- };
26
- export declare const before: (cleanedInput: string) => {
27
- ok: false;
28
- error: "Year is required.";
29
- } | {
30
- ok: false;
31
- error: "Unknown month.";
32
- } | {
33
- ok: false;
34
- error: "Unknown date format.";
35
- } | {
36
- ok: true;
37
- value: {
38
- readonly modifier: "BEFORE";
39
- readonly start: {
40
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
41
- readonly minDate: Date;
42
- readonly maxDate: Date;
43
- };
44
- readonly end: {
45
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
46
- readonly minDate: Date;
47
- readonly maxDate: Date;
48
- };
49
- };
50
- };
51
- export declare const after: (cleanedInput: string) => {
52
- ok: false;
53
- error: "Year is required.";
54
- } | {
55
- ok: false;
56
- error: "Unknown month.";
57
- } | {
58
- ok: false;
59
- error: "Unknown date format.";
60
- } | {
61
- ok: true;
62
- value: {
63
- readonly modifier: "AFTER";
64
- readonly start: {
65
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
66
- readonly minDate: Date;
67
- readonly maxDate: Date;
68
- };
69
- readonly end: {
70
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
71
- readonly minDate: Date;
72
- readonly maxDate: Date;
73
- };
74
- };
75
- };
76
- export declare const about: (cleanedInput: string) => {
77
- ok: false;
78
- error: "Year is required.";
79
- } | {
80
- ok: false;
81
- error: "Unknown month.";
82
- } | {
83
- ok: false;
84
- error: "Unknown date format.";
85
- } | {
86
- ok: true;
87
- value: {
88
- readonly modifier: "ABOUT";
89
- readonly start: {
90
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
91
- readonly minDate: Date;
92
- readonly maxDate: Date;
93
- };
94
- readonly end: {
95
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
96
- readonly minDate: Date;
97
- readonly maxDate: Date;
98
- };
99
- };
100
- };
101
- export declare const between: (cleanedInput: string) => {
102
- ok: false;
103
- error: "Year is required.";
104
- } | {
105
- ok: false;
106
- error: "Unknown month.";
107
- } | {
108
- ok: false;
109
- error: "Unknown date format.";
110
- } | {
111
- ok: false;
112
- error: "Invalid \"BETWEEN\" modifier.";
113
- } | {
114
- ok: true;
115
- value: {
116
- readonly modifier: "BETWEEN";
117
- readonly start: {
118
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
119
- readonly minDate: Date;
120
- readonly maxDate: Date;
121
- };
122
- readonly end: {
123
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
124
- readonly minDate: Date;
125
- readonly maxDate: Date;
126
- };
127
- };
128
- };
129
- export declare const from: (cleanedInput: string) => {
130
- ok: false;
131
- error: "Year is required.";
132
- } | {
133
- ok: false;
134
- error: "Unknown month.";
135
- } | {
136
- ok: false;
137
- error: "Unknown date format.";
138
- } | {
139
- ok: false;
140
- error: "Invalid \"FROM\" modifier.";
141
- } | {
142
- ok: true;
143
- value: {
144
- readonly modifier: "FROM";
145
- readonly start: {
146
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
147
- readonly minDate: Date;
148
- readonly maxDate: Date;
149
- };
150
- readonly end: {
151
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
152
- readonly minDate: Date;
153
- readonly maxDate: Date;
154
- };
155
- };
156
- };
157
- export declare const early: (cleanedInput: string) => {
158
- ok: false;
159
- error: "Year is required.";
160
- } | {
161
- ok: false;
162
- error: "Unknown month.";
163
- } | {
164
- ok: false;
165
- error: "Unknown date format.";
166
- } | {
167
- ok: true;
168
- value: {
169
- readonly modifier: "EARLY";
170
- readonly start: {
171
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
172
- readonly minDate: Date;
173
- readonly maxDate: Date;
174
- };
175
- readonly end: {
176
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
177
- readonly minDate: Date;
178
- readonly maxDate: Date;
179
- };
180
- };
181
- };
182
- export declare const mid: (cleanedInput: string) => {
183
- ok: false;
184
- error: "Year is required.";
185
- } | {
186
- ok: false;
187
- error: "Unknown month.";
188
- } | {
189
- ok: false;
190
- error: "Unknown date format.";
191
- } | {
192
- ok: true;
193
- value: {
194
- readonly modifier: "MID";
195
- readonly start: {
196
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
197
- readonly minDate: Date;
198
- readonly maxDate: Date;
199
- };
200
- readonly end: {
201
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
202
- readonly minDate: Date;
203
- readonly maxDate: Date;
204
- };
205
- };
206
- };
207
- export declare const late: (cleanedInput: string) => {
208
- ok: false;
209
- error: "Year is required.";
210
- } | {
211
- ok: false;
212
- error: "Unknown month.";
213
- } | {
214
- ok: false;
215
- error: "Unknown date format.";
216
- } | {
217
- ok: true;
218
- value: {
219
- readonly modifier: "LATE";
220
- readonly start: {
221
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
222
- readonly minDate: Date;
223
- readonly maxDate: Date;
224
- };
225
- readonly end: {
226
- readonly format: "YYYYs" | "YYYY" | "SEASON_YYYY" | "MMMM_YYYY" | "D_MMMM_YYYY";
227
- readonly minDate: Date;
228
- readonly maxDate: Date;
229
- };
230
- };
231
- };
@@ -1,185 +0,0 @@
1
- import { getTimes } from '.';
2
- import { DATE_NEG_INFINITY, DATE_POS_INFINITY } from '../helpers/constants';
3
- import { err, ok } from '../helpers/result';
4
- import { stringToDate } from './stringToDate';
5
- export const none = (cleanedInput) => {
6
- const result = stringToDate(cleanedInput);
7
- if (!result.ok)
8
- return result;
9
- const date = result.value;
10
- return ok({
11
- modifier: 'NONE',
12
- start: {
13
- format: date.format,
14
- minDate: date.minDate,
15
- maxDate: date.maxDate,
16
- },
17
- end: {
18
- format: date.format,
19
- minDate: date.minDate,
20
- maxDate: date.maxDate,
21
- },
22
- });
23
- };
24
- export const before = (cleanedInput) => {
25
- const result = stringToDate(cleanedInput.slice('before '.length));
26
- if (!result.ok)
27
- return result;
28
- const date = result.value;
29
- return ok({
30
- modifier: 'BEFORE',
31
- start: {
32
- format: date.format,
33
- minDate: DATE_NEG_INFINITY,
34
- maxDate: date.minDate,
35
- },
36
- end: {
37
- format: date.format,
38
- minDate: date.minDate,
39
- maxDate: date.maxDate,
40
- },
41
- });
42
- };
43
- export const after = (cleanedInput) => {
44
- const result = stringToDate(cleanedInput.slice('after '.length));
45
- if (!result.ok)
46
- return result;
47
- const date = result.value;
48
- return ok({
49
- modifier: 'AFTER',
50
- start: {
51
- format: date.format,
52
- minDate: date.minDate,
53
- maxDate: date.maxDate,
54
- },
55
- end: {
56
- format: date.format,
57
- minDate: date.maxDate,
58
- maxDate: DATE_POS_INFINITY,
59
- },
60
- });
61
- };
62
- export const about = (cleanedInput) => {
63
- const result = stringToDate(cleanedInput.slice('about '.length));
64
- if (!result.ok)
65
- return result;
66
- const date = result.value;
67
- return ok({
68
- modifier: 'ABOUT',
69
- start: {
70
- format: date.format,
71
- minDate: date.minDate,
72
- maxDate: date.maxDate,
73
- },
74
- end: {
75
- format: date.format,
76
- minDate: date.minDate,
77
- maxDate: date.maxDate,
78
- },
79
- });
80
- };
81
- export const between = (cleanedInput) => {
82
- const dates = cleanedInput.slice('between '.length).split(' and ');
83
- if (dates.length !== 2)
84
- return err('Invalid "BETWEEN" modifier.');
85
- const startResult = stringToDate(dates[0]);
86
- const endDateResult = stringToDate(dates[1]);
87
- if (!startResult.ok)
88
- return startResult;
89
- if (!endDateResult.ok)
90
- return endDateResult;
91
- const start = startResult.value;
92
- const end = endDateResult.value;
93
- return ok({
94
- modifier: 'BETWEEN',
95
- start: {
96
- format: start.format,
97
- minDate: start.minDate,
98
- maxDate: start.maxDate,
99
- },
100
- end: { format: end.format, minDate: end.minDate, maxDate: end.maxDate },
101
- });
102
- };
103
- export const from = (cleanedInput) => {
104
- const dates = cleanedInput.slice('from '.length).split(' to ');
105
- if (dates.length !== 2)
106
- return err('Invalid "FROM" modifier.');
107
- const startResult = stringToDate(dates[0]);
108
- const endDateResult = stringToDate(dates[1]);
109
- if (!startResult.ok)
110
- return startResult;
111
- if (!endDateResult.ok)
112
- return endDateResult;
113
- const start = startResult.value;
114
- const end = endDateResult.value;
115
- return ok({
116
- modifier: 'FROM',
117
- start: {
118
- format: start.format,
119
- minDate: start.minDate,
120
- maxDate: start.maxDate,
121
- },
122
- end: { format: end.format, minDate: end.minDate, maxDate: end.maxDate },
123
- });
124
- };
125
- export const early = (cleanedInput) => {
126
- const result = stringToDate(cleanedInput.slice('early '.length));
127
- if (!result.ok)
128
- return result;
129
- const date = result.value;
130
- const { start, half } = getTimes(date);
131
- return ok({
132
- modifier: 'EARLY',
133
- start: {
134
- format: date.format,
135
- minDate: new Date(start),
136
- maxDate: new Date(start + half),
137
- },
138
- end: {
139
- format: date.format,
140
- minDate: new Date(start),
141
- maxDate: new Date(start + half),
142
- },
143
- });
144
- };
145
- export const mid = (cleanedInput) => {
146
- const result = stringToDate(cleanedInput.slice('mid '.length));
147
- if (!result.ok)
148
- return result;
149
- const date = result.value;
150
- console.log(date);
151
- const { start, half } = getTimes(date);
152
- return ok({
153
- modifier: 'MID',
154
- start: {
155
- format: date.format,
156
- minDate: new Date(start + half / 2),
157
- maxDate: new Date(start + half),
158
- },
159
- end: {
160
- format: date.format,
161
- minDate: new Date(start + half / 2),
162
- maxDate: new Date(start + half),
163
- },
164
- });
165
- };
166
- export const late = (cleanedInput) => {
167
- const result = stringToDate(cleanedInput.slice('late '.length));
168
- if (!result.ok)
169
- return result;
170
- const date = result.value;
171
- const { start, half } = getTimes(date);
172
- return ok({
173
- modifier: 'LATE',
174
- start: {
175
- format: date.format,
176
- minDate: new Date(start + half),
177
- maxDate: date.maxDate,
178
- },
179
- end: {
180
- format: date.format,
181
- minDate: new Date(start + half),
182
- maxDate: date.maxDate,
183
- },
184
- });
185
- };