@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.
- package/README.md +99 -36
- package/dist/index.d.ts +1 -3
- package/dist/index.js +1 -2
- package/dist/src/collation/collationKey.d.ts +2 -0
- package/dist/src/collation/collationKey.js +44 -0
- package/dist/{fuzzyDate → src}/fuzzyDate.d.ts +85 -69
- package/dist/src/fuzzyDate.js +238 -0
- package/dist/src/gedcomX/toGedcomX.js +28 -0
- package/dist/src/helpers/constants.d.ts +2 -0
- package/dist/src/helpers/constants.js +2 -0
- package/dist/src/helpers/types.d.ts +12 -0
- package/dist/src/helpers/types.js +3 -0
- package/dist/src/normalize/normalize.js +51 -0
- package/dist/src/parse/index.d.ts +47 -0
- package/dist/src/parse/index.js +41 -0
- package/dist/src/parse/modifiers.d.ts +182 -0
- package/dist/src/parse/modifiers.js +62 -0
- package/dist/{fuzzyDate/parse/inputDateFormats.d.ts → src/parse/simpleDate/formats.d.ts} +33 -50
- package/dist/{fuzzyDate/parse/inputDateFormats.js → src/parse/simpleDate/formats.js} +69 -88
- package/dist/src/parse/simpleDate/helpers.d.ts +21 -0
- package/dist/src/parse/simpleDate/helpers.js +58 -0
- package/dist/src/parse/simpleDate/parse.d.ts +31 -0
- package/dist/{fuzzyDate/parse/stringToDate.js → src/parse/simpleDate/parse.js} +4 -5
- package/package.json +1 -11
- package/dist/fuzzyDate/collate/collate.d.ts +0 -2
- package/dist/fuzzyDate/collate/collate.js +0 -15
- package/dist/fuzzyDate/fuzzyDate.js +0 -246
- package/dist/fuzzyDate/fuzzyDate.spec.d.ts +0 -1
- package/dist/fuzzyDate/fuzzyDate.spec.js +0 -158
- package/dist/fuzzyDate/gedcomX/toGedcomX.js +0 -31
- package/dist/fuzzyDate/helpers/constants.d.ts +0 -4
- package/dist/fuzzyDate/helpers/constants.js +0 -20
- package/dist/fuzzyDate/helpers/schemas.d.ts +0 -36
- package/dist/fuzzyDate/helpers/schemas.js +0 -12
- package/dist/fuzzyDate/helpers/types.d.ts +0 -16
- package/dist/fuzzyDate/helpers/types.js +0 -1
- package/dist/fuzzyDate/normalize/normalize.js +0 -47
- package/dist/fuzzyDate/parse/index.d.ts +0 -178
- package/dist/fuzzyDate/parse/index.js +0 -92
- package/dist/fuzzyDate/parse/modifiers.d.ts +0 -231
- package/dist/fuzzyDate/parse/modifiers.js +0 -185
- package/dist/fuzzyDate/parse/stringToDate.d.ts +0 -38
- /package/dist/{fuzzyDate → src}/gedcomX/toGedcomX.d.ts +0 -0
- /package/dist/{fuzzyDate → src}/helpers/result.d.ts +0 -0
- /package/dist/{fuzzyDate → src}/helpers/result.js +0 -0
- /package/dist/{fuzzyDate → src}/normalize/normalize.d.ts +0 -0
- /package/dist/{fuzzyDate/helpers → src/parse/simpleDate}/maps.d.ts +0 -0
- /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
|
-
};
|