timelang 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2268 +1 @@
1
- // src/parser.ts
2
- import nearley from "nearley";
3
-
4
- // src/lexer.ts
5
- import moo from "moo";
6
- var lexer = moo.compile({
7
- // Whitespace - capture for potential preservation
8
- ws: /[ \t]+/,
9
- newline: { match: /\r?\n/, lineBreaks: true },
10
- // Time patterns (must come before numbers to match correctly)
11
- time: /(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?/,
12
- // Compact month-day pattern: "July10", "Jan15" (month immediately followed by day number)
13
- monthDayCompact: {
14
- match: /(?:[Jj]anuary|[Ff]ebruary|[Mm]arch|[Aa]pril|[Mm]ay|[Jj]une|[Jj]uly|[Aa]ugust|[Ss]eptember|[Oo]ctober|[Nn]ovember|[Dd]ecember|[Jj]an|[Ff]eb|[Mm]ar|[Aa]pr|[Jj]un|[Jj]ul|[Aa]ug|[Ss]ep|[Ss]ept|[Oo]ct|[Nn]ov|[Dd]ec)(?:3[01]|[12]?[0-9])/,
15
- value: (s) => s.toLowerCase()
16
- },
17
- // Quarter notation: Q1, Q2, Q3, Q4 (case insensitive via alternation)
18
- quarter: { match: /[Qq][1-4]/, value: (s) => s.toUpperCase() },
19
- // Half notation: H1, H2 (case insensitive via alternation)
20
- half: { match: /[Hh][1-2]/, value: (s) => s.toUpperCase() },
21
- // Ordinal numbers: 1st, 2nd, 3rd, 4th-31st (case insensitive suffixes)
22
- ordinal: {
23
- match: /(?:3[01]|[12]?[0-9])(?:[Ss][Tt]|[Nn][Dd]|[Rr][Dd]|[Tt][Hh])/,
24
- value: (s) => s.toLowerCase()
25
- },
26
- // Decimal numbers (must come before integer)
27
- decimal: /\d+\.\d+/,
28
- // Abbreviated duration units: 1w, 3d, 2h, 30m (minutes), 5s, 1y, 6mo (months)
29
- // 'm' = minutes, 'mo' = months
30
- abbreviatedDuration: {
31
- match: /\d+(?:mo|w|d|h|m|s|y)\b/,
32
- value: (s) => s.toLowerCase()
33
- },
34
- // Integer numbers
35
- integer: /\d+/,
36
- // AM/PM (must come before general keywords)
37
- ampm: { match: /[Aa][Mm]|[Pp][Mm]/, value: (s) => s.toLowerCase() },
38
- // Keywords - match words and normalize to lowercase
39
- // Using a regex to match any word, then checking against known keywords
40
- // The transform function in moo.keywords makes matching case-insensitive
41
- word: {
42
- match: /[a-zA-Z][a-zA-Z0-9#]*/,
43
- type: moo.keywords({
44
- // Time words - each gets its own type for grammar disambiguation
45
- kw_today: ["today"],
46
- kw_tomorrow: ["tomorrow"],
47
- kw_yesterday: ["yesterday"],
48
- kw_now: ["now"],
49
- kw_noon: ["noon"],
50
- kw_midnight: ["midnight"],
51
- // Relative modifiers - each gets its own type for grammar disambiguation
52
- kw_next: ["next"],
53
- kw_last: ["last"],
54
- kw_this: ["this"],
55
- kw_previous: ["previous"],
56
- kw_coming: ["coming"],
57
- kw_upcoming: ["upcoming"],
58
- kw_past: ["past"],
59
- // Period modifiers - each gets its own type for grammar disambiguation
60
- kw_early: ["early"],
61
- kw_mid: ["mid"],
62
- kw_late: ["late"],
63
- kw_beginning: ["beginning"],
64
- kw_middle: ["middle"],
65
- kw_end: ["end"],
66
- kw_start: ["start"],
67
- // Periods/units - must come BEFORE ordinalWord so ordinalWord 'second' wins over unit 'second'
68
- unit: [
69
- "day",
70
- "days",
71
- "week",
72
- "weeks",
73
- "month",
74
- "months",
75
- "year",
76
- "years",
77
- "quarter",
78
- "quarters",
79
- "hour",
80
- "hours",
81
- "minute",
82
- "minutes",
83
- "second",
84
- "seconds",
85
- "hr",
86
- "hrs",
87
- "min",
88
- "mins",
89
- "sec",
90
- "secs",
91
- "wk",
92
- "wks",
93
- "mo",
94
- "mos",
95
- "yr",
96
- "yrs"
97
- ],
98
- // Half word
99
- halfWord: ["half"],
100
- // Connectors - each gets its own type for grammar disambiguation
101
- kw_to: ["to"],
102
- kw_from: ["from"],
103
- kw_until: ["until", "til", "till"],
104
- kw_through: ["through"],
105
- kw_between: ["between"],
106
- kw_and: ["and"],
107
- kw_for: ["for"],
108
- kw_in: ["in"],
109
- kw_on: ["on"],
110
- kw_at: ["at"],
111
- kw_of: ["of"],
112
- kw_the: ["the"],
113
- kw_within: ["within"],
114
- kw_over: ["over"],
115
- kw_during: ["during"],
116
- kw_starting: ["starting"],
117
- kw_by: ["by"],
118
- kw_before: ["before"],
119
- kw_after: ["after"],
120
- kw_around: ["around"],
121
- kw_about: ["about"],
122
- kw_roughly: ["roughly"],
123
- kw_approximately: ["approximately"],
124
- kw_sometime: ["sometime"],
125
- // Ordinal words - 'second' is handled separately since it's also a unit
126
- ordinalWord: [
127
- "first",
128
- "third",
129
- "fourth",
130
- "fifth",
131
- "sixth",
132
- "seventh",
133
- "eighth",
134
- "ninth",
135
- "tenth",
136
- "eleventh",
137
- "twelfth",
138
- "thirteenth",
139
- "fourteenth",
140
- "fifteenth",
141
- "sixteenth",
142
- "seventeenth",
143
- "eighteenth",
144
- "nineteenth",
145
- "twentieth",
146
- "twenty-first",
147
- "twenty-second",
148
- "twenty-third",
149
- "twenty-fourth",
150
- "twenty-fifth",
151
- "twenty-sixth",
152
- "twenty-seventh",
153
- "twenty-eighth",
154
- "twenty-ninth",
155
- "thirtieth",
156
- "thirty-first"
157
- ],
158
- // Seasons
159
- season: ["spring", "summer", "fall", "autumn", "winter"],
160
- // Word numbers
161
- wordNumber: [
162
- "one",
163
- "two",
164
- "three",
165
- "four",
166
- "five",
167
- "six",
168
- "seven",
169
- "eight",
170
- "nine",
171
- "ten",
172
- "eleven",
173
- "twelve",
174
- "thirteen",
175
- "fourteen",
176
- "fifteen",
177
- "sixteen",
178
- "seventeen",
179
- "eighteen",
180
- "nineteen",
181
- "twenty",
182
- "a",
183
- "an",
184
- "couple"
185
- ],
186
- // Months - full names
187
- month: [
188
- "january",
189
- "february",
190
- "march",
191
- "april",
192
- "may",
193
- "june",
194
- "july",
195
- "august",
196
- "september",
197
- "october",
198
- "november",
199
- "december",
200
- "jan",
201
- "feb",
202
- "mar",
203
- "apr",
204
- "jun",
205
- "jul",
206
- "aug",
207
- "sep",
208
- "sept",
209
- "oct",
210
- "nov",
211
- "dec"
212
- ],
213
- // Weekdays
214
- weekday: [
215
- "monday",
216
- "tuesday",
217
- "wednesday",
218
- "thursday",
219
- "friday",
220
- "saturday",
221
- "sunday",
222
- "mon",
223
- "tue",
224
- "tues",
225
- "wed",
226
- "thu",
227
- "thur",
228
- "thurs",
229
- "fri",
230
- "sat",
231
- "sun"
232
- ],
233
- // Ago keyword for relative dates
234
- kw_ago: ["ago"],
235
- // Weekend and night keywords
236
- kw_weekend: ["weekend"],
237
- kw_tonight: ["tonight"],
238
- kw_night: ["night"],
239
- kw_fortnight: ["fortnight", "fortnights"],
240
- // Other keywords
241
- otherKeyword: ["fiscal", "fy", "daily", "weekly", "monthly", "yearly", "annually", "hence", "later", "earlier"],
242
- // Business keywords
243
- kw_business: ["business"],
244
- // EOD/COB keywords
245
- kw_eod: ["eod"],
246
- kw_cob: ["cob"],
247
- kw_close: ["close"]
248
- })
249
- // Keywords are matched against lowercase input
250
- },
251
- // Punctuation and separators
252
- lparen: "(",
253
- rparen: ")",
254
- lbracket: "[",
255
- rbracket: "]",
256
- colon: ":",
257
- semicolon: ";",
258
- comma: ",",
259
- dash: /[-–—]/,
260
- // Regular dash, en-dash, em-dash
261
- slash: "/",
262
- // Any other single character
263
- other: /./
264
- });
265
-
266
- // src/grammar.ts
267
- var first = (d) => d[0];
268
- var nuller = () => null;
269
- var makeDate = (data) => ({
270
- nodeType: "date",
271
- value: "",
272
- ...data
273
- });
274
- var makeDuration = (value, unit2) => ({
275
- nodeType: "duration",
276
- value,
277
- unit: normalizeUnit(unit2)
278
- });
279
- var makeSpan = (start, duration, end) => ({
280
- nodeType: "span",
281
- start,
282
- duration,
283
- end
284
- });
285
- var makeRange = (start, end) => ({
286
- nodeType: "range",
287
- start,
288
- end
289
- });
290
- var makeFuzzy = (data) => ({
291
- nodeType: "fuzzy",
292
- period: "",
293
- ...data
294
- });
295
- var makeRelative = (direction, duration) => ({
296
- nodeType: "relative",
297
- direction,
298
- duration
299
- });
300
- var makeRelativeDate = (direction, duration, baseDate, time2) => ({
301
- nodeType: "relativeDate",
302
- direction,
303
- duration,
304
- baseDate,
305
- time: time2
306
- });
307
- var makeTitled = (title, expression, titleStart, titleEnd) => ({
308
- nodeType: "titled",
309
- title: title.trim(),
310
- titleStart,
311
- titleEnd,
312
- expression
313
- });
314
- function normalizeUnit(unit2) {
315
- const u = unit2.toLowerCase();
316
- if (["day", "days", "d"].includes(u)) return "day";
317
- if (["week", "weeks", "wk", "wks", "w"].includes(u)) return "week";
318
- if (["month", "months", "mo", "mos"].includes(u)) return "month";
319
- if (["year", "years", "yr", "yrs", "y"].includes(u)) return "year";
320
- if (["hour", "hours", "hr", "hrs", "h"].includes(u)) return "hour";
321
- if (["minute", "minutes", "min", "mins"].includes(u)) return "minute";
322
- if (["second", "seconds", "sec", "secs", "s"].includes(u)) return "second";
323
- if (["quarter", "quarters"].includes(u)) return "quarter";
324
- return u;
325
- }
326
- function parseWordNumber(word2) {
327
- const map = {
328
- "a": 1,
329
- "an": 1,
330
- "one": 1,
331
- "two": 2,
332
- "three": 3,
333
- "four": 4,
334
- "five": 5,
335
- "six": 6,
336
- "seven": 7,
337
- "eight": 8,
338
- "nine": 9,
339
- "ten": 10,
340
- "eleven": 11,
341
- "twelve": 12,
342
- "thirteen": 13,
343
- "fourteen": 14,
344
- "fifteen": 15,
345
- "sixteen": 16,
346
- "seventeen": 17,
347
- "eighteen": 18,
348
- "nineteen": 19,
349
- "twenty": 20,
350
- "couple": 2
351
- };
352
- return map[word2.toLowerCase()] ?? 1;
353
- }
354
- function parseOrdinal(ord) {
355
- const match = ord.match(/^(\d+)/);
356
- return match ? parseInt(match[1], 10) : parseOrdinalWord(ord);
357
- }
358
- function parseOrdinalWord(word2) {
359
- const map = {
360
- "first": 1,
361
- "second": 2,
362
- "third": 3,
363
- "fourth": 4,
364
- "fifth": 5,
365
- "sixth": 6,
366
- "seventh": 7,
367
- "eighth": 8,
368
- "ninth": 9,
369
- "tenth": 10,
370
- "eleventh": 11,
371
- "twelfth": 12,
372
- "thirteenth": 13,
373
- "fourteenth": 14,
374
- "fifteenth": 15,
375
- "sixteenth": 16,
376
- "seventeenth": 17,
377
- "eighteenth": 18,
378
- "nineteenth": 19,
379
- "twentieth": 20,
380
- "twenty-first": 21,
381
- "twenty-second": 22,
382
- "twenty-third": 23,
383
- "twenty-fourth": 24,
384
- "twenty-fifth": 25,
385
- "twenty-sixth": 26,
386
- "twenty-seventh": 27,
387
- "twenty-eighth": 28,
388
- "twenty-ninth": 29,
389
- "thirtieth": 30,
390
- "thirty-first": 31
391
- };
392
- return map[word2.toLowerCase()] ?? 1;
393
- }
394
- function parseMonth(month2) {
395
- const map = {
396
- "january": 1,
397
- "jan": 1,
398
- "february": 2,
399
- "feb": 2,
400
- "march": 3,
401
- "mar": 3,
402
- "april": 4,
403
- "apr": 4,
404
- "may": 5,
405
- "june": 6,
406
- "jun": 6,
407
- "july": 7,
408
- "jul": 7,
409
- "august": 8,
410
- "aug": 8,
411
- "september": 9,
412
- "sep": 9,
413
- "sept": 9,
414
- "october": 10,
415
- "oct": 10,
416
- "november": 11,
417
- "nov": 11,
418
- "december": 12,
419
- "dec": 12
420
- };
421
- return map[month2.toLowerCase()] ?? 1;
422
- }
423
- function parseMonthDayCompact(input) {
424
- const lower = input.toLowerCase();
425
- const monthNames = [
426
- "january",
427
- "february",
428
- "march",
429
- "april",
430
- "may",
431
- "june",
432
- "july",
433
- "august",
434
- "september",
435
- "october",
436
- "november",
437
- "december",
438
- "jan",
439
- "feb",
440
- "mar",
441
- "apr",
442
- "jun",
443
- "jul",
444
- "aug",
445
- "sep",
446
- "sept",
447
- "oct",
448
- "nov",
449
- "dec"
450
- ];
451
- for (const name of monthNames) {
452
- if (lower.startsWith(name)) {
453
- const dayStr = lower.slice(name.length);
454
- return { month: parseMonth(name), day: parseInt(dayStr, 10) };
455
- }
456
- }
457
- return { month: 1, day: 1 };
458
- }
459
- function parseQuarter(q) {
460
- const match = q.match(/[qQ]([1-4])/);
461
- return match ? parseInt(match[1], 10) : 1;
462
- }
463
- function parseHalf(h) {
464
- const match = h.match(/[hH]([1-2])/);
465
- return match ? parseInt(match[1], 10) : 1;
466
- }
467
- var grammar = {
468
- Lexer: lexer,
469
- ParserRules: [
470
- { "name": "main", "symbols": ["titledExpression"], "postprocess": first },
471
- { "name": "main", "symbols": ["expression"], "postprocess": first },
472
- { "name": "titledExpression", "symbols": ["titleTextSimple", "_", lexer.has("dash") ? { type: "dash" } : dash, "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
473
- { "name": "titledExpression", "symbols": ["titleText", lexer.has("colon") ? { type: "colon" } : colon, "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[3], d[0].start, d[0].end) },
474
- { "name": "titledExpression", "symbols": ["titleText", "_", lexer.has("lparen") ? { type: "lparen" } : lparen, "expression", lexer.has("rparen") ? { type: "rparen" } : rparen], "postprocess": (d) => makeTitled(d[0].text, d[3], d[0].start, d[0].end) },
475
- { "name": "titledExpression", "symbols": ["titleText", "_", lexer.has("lbracket") ? { type: "lbracket" } : lbracket, "expression", lexer.has("rbracket") ? { type: "rbracket" } : rbracket], "postprocess": (d) => makeTitled(d[0].text, d[3], d[0].start, d[0].end) },
476
- { "name": "titledExpression", "symbols": ["titleText", "_", "onConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
477
- { "name": "titledExpression", "symbols": ["titleText", "_", "atConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
478
- { "name": "titledExpression", "symbols": ["titleText", "_", "inConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
479
- { "name": "titledExpression", "symbols": ["titleText", "_", "forConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
480
- { "name": "titledExpression", "symbols": ["titleText", "_", "fromConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
481
- { "name": "titledExpression", "symbols": ["titleText", "_", "duringConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
482
- { "name": "titledExpression", "symbols": ["titleText", "_", "startingConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
483
- { "name": "titledExpression", "symbols": ["titleText", "_", "byConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[4], d[0].start, d[0].end) },
484
- { "name": "titledExpression", "symbols": ["titleText", "_", lexer.has("dash") ? { type: "dash" } : dash, "_", "byConnector", "_", "expression"], "postprocess": (d) => makeTitled(d[0].text, d[6], d[0].start, d[0].end) },
485
- { "name": "titledExpression", "symbols": ["expression", "_", "postTitle"], "postprocess": (d) => makeTitled(d[2].text, d[0], d[2].start, d[2].end) },
486
- { "name": "postTitle", "symbols": [lexer.has("word") ? { type: "word" } : word], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
487
- { "name": "postTitle", "symbols": ["postTitle", "_", lexer.has("word") ? { type: "word" } : word], "postprocess": (d) => ({ text: d[0].text + " " + d[2].value, start: d[0].start, end: d[2].offset + d[2].text.length }) },
488
- { "name": "titleText", "symbols": ["titleWord"], "postprocess": (d) => ({ text: d[0].text, start: d[0].start, end: d[0].end }) },
489
- { "name": "titleText", "symbols": ["versionNumber"], "postprocess": (d) => d[0] },
490
- { "name": "titleText", "symbols": ["hyphenatedWord"], "postprocess": (d) => d[0] },
491
- { "name": "titleText", "symbols": ["titleText", "_", "titleWord"], "postprocess": (d) => ({ text: d[0].text + " " + d[2].text, start: d[0].start, end: d[2].end }) },
492
- { "name": "titleText", "symbols": ["titleText", "_", "versionNumber"], "postprocess": (d) => ({ text: d[0].text + " " + d[2].text, start: d[0].start, end: d[2].end }) },
493
- { "name": "titleText", "symbols": ["titleText", "_", "hyphenatedWord"], "postprocess": (d) => ({ text: d[0].text + " " + d[2].text, start: d[0].start, end: d[2].end }) },
494
- { "name": "titleText", "symbols": ["titleText", "_", lexer.has("dash") ? { type: "dash" } : dash, "_", "titleWord"], "postprocess": (d) => ({ text: d[0].text + " - " + d[4].text, start: d[0].start, end: d[4].end }) },
495
- { "name": "titleText", "symbols": ["titleText", "_", lexer.has("dash") ? { type: "dash" } : dash, "_", "versionNumber"], "postprocess": (d) => ({ text: d[0].text + " - " + d[4].text, start: d[0].start, end: d[4].end }) },
496
- { "name": "titleWord", "symbols": [lexer.has("word") ? { type: "word" } : word], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
497
- { "name": "titleWord", "symbols": [lexer.has("wordNumber") ? { type: "wordNumber" } : wordNumber], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
498
- { "name": "titleWord", "symbols": [lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
499
- { "name": "titleWord", "symbols": [lexer.has("otherKeyword") ? { type: "otherKeyword" } : otherKeyword], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
500
- { "name": "titleWord", "symbols": [lexer.has("decimal") ? { type: "decimal" } : decimal], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
501
- { "name": "titleWord", "symbols": [lexer.has("quarter") ? { type: "quarter" } : quarter], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
502
- { "name": "titleWord", "symbols": [lexer.has("half") ? { type: "half" } : half], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
503
- { "name": "titleWord", "symbols": [lexer.has("lparen") ? { type: "lparen" } : lparen, "titleText", lexer.has("rparen") ? { type: "rparen" } : rparen], "postprocess": (d) => ({ text: "(" + d[1].text + ")", start: d[0].offset, end: d[2].offset + 1 }) },
504
- { "name": "titleWord", "symbols": [lexer.has("lbracket") ? { type: "lbracket" } : lbracket, "titleText", lexer.has("rbracket") ? { type: "rbracket" } : rbracket], "postprocess": (d) => ({ text: "[" + d[1].text + "]", start: d[0].offset, end: d[2].offset + 1 }) },
505
- { "name": "titleWord", "symbols": [lexer.has("slash") ? { type: "slash" } : slash], "postprocess": (d) => ({ text: "/", start: d[0].offset, end: d[0].offset + 1 }) },
506
- { "name": "titleWord", "symbols": [lexer.has("colon") ? { type: "colon" } : colon], "postprocess": (d) => ({ text: ":", start: d[0].offset, end: d[0].offset + 1 }) },
507
- { "name": "titleWord", "symbols": ["hashNumber"], "postprocess": (d) => d[0] },
508
- { "name": "hyphenatedWord", "symbols": [lexer.has("word") ? { type: "word" } : word, lexer.has("dash") ? { type: "dash" } : dash, lexer.has("word") ? { type: "word" } : word], "postprocess": (d) => ({ text: d[0].value + "-" + d[2].value, start: d[0].offset, end: d[2].offset + d[2].text.length }) },
509
- { "name": "hyphenatedWord", "symbols": [lexer.has("word") ? { type: "word" } : word, lexer.has("dash") ? { type: "dash" } : dash, lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d) => ({ text: d[0].value + "-" + d[2].value, start: d[0].offset, end: d[2].offset + d[2].text.length }) },
510
- { "name": "hashNumber", "symbols": [lexer.has("other") ? { type: "other" } : other, lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d, _, reject) => {
511
- if (d[0].value !== "#") return reject;
512
- return { text: "#" + d[1].value, start: d[0].offset, end: d[1].offset + d[1].text.length };
513
- } },
514
- { "name": "versionNumber", "symbols": [lexer.has("word") ? { type: "word" } : word, lexer.has("other") ? { type: "other" } : other, lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d, _, reject) => {
515
- if (d[1].value !== ".") return reject;
516
- return { text: d[0].value + "." + d[2].value, start: d[0].offset, end: d[2].offset + d[2].text.length };
517
- } },
518
- { "name": "versionNumber", "symbols": [lexer.has("word") ? { type: "word" } : word, lexer.has("other") ? { type: "other" } : other, lexer.has("integer") ? { type: "integer" } : integer, lexer.has("other") ? { type: "other" } : other, lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d, _, reject) => {
519
- if (d[1].value !== "." || d[3].value !== ".") return reject;
520
- return { text: d[0].value + "." + d[2].value + "." + d[4].value, start: d[0].offset, end: d[4].offset + d[4].text.length };
521
- } },
522
- { "name": "versionNumber", "symbols": [lexer.has("word") ? { type: "word" } : word, lexer.has("other") ? { type: "other" } : other, lexer.has("integer") ? { type: "integer" } : integer, lexer.has("other") ? { type: "other" } : other, lexer.has("integer") ? { type: "integer" } : integer, lexer.has("other") ? { type: "other" } : other, lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d, _, reject) => {
523
- if (d[1].value !== "." || d[3].value !== "." || d[5].value !== ".") return reject;
524
- return { text: d[0].value + "." + d[2].value + "." + d[4].value + "." + d[6].value, start: d[0].offset, end: d[6].offset + d[6].text.length };
525
- } },
526
- { "name": "versionNumber", "symbols": [lexer.has("word") ? { type: "word" } : word, lexer.has("other") ? { type: "other" } : other, lexer.has("decimal") ? { type: "decimal" } : decimal], "postprocess": (d, _, reject) => {
527
- if (d[1].value !== ".") return reject;
528
- return { text: d[0].value + "." + d[2].value, start: d[0].offset, end: d[2].offset + d[2].text.length };
529
- } },
530
- { "name": "versionNumber", "symbols": [lexer.has("decimal") ? { type: "decimal" } : decimal], "postprocess": (d) => ({ text: d[0].value, start: d[0].offset, end: d[0].offset + d[0].text.length }) },
531
- { "name": "titleTextSimple", "symbols": ["titleWord"], "postprocess": (d) => d[0] },
532
- { "name": "titleTextSimple", "symbols": ["hyphenatedWord"], "postprocess": (d) => d[0] },
533
- { "name": "titleTextSimple", "symbols": ["versionNumber"], "postprocess": (d) => d[0] },
534
- { "name": "titleTextSimple", "symbols": ["titleTextSimple", "_", "titleWord"], "postprocess": (d) => ({ text: d[0].text + " " + d[2].text, start: d[0].start, end: d[2].end }) },
535
- { "name": "titleTextSimple", "symbols": ["titleTextSimple", "_", "hyphenatedWord"], "postprocess": (d) => ({ text: d[0].text + " " + d[2].text, start: d[0].start, end: d[2].end }) },
536
- { "name": "titleTextSimple", "symbols": ["titleTextSimple", "_", "versionNumber"], "postprocess": (d) => ({ text: d[0].text + " " + d[2].text, start: d[0].start, end: d[2].end }) },
537
- { "name": "titleTextSimple", "symbols": ["titleTextSimple", lexer.has("slash") ? { type: "slash" } : slash, "titleWord"], "postprocess": (d) => ({ text: d[0].text + "/" + d[2].text, start: d[0].start, end: d[2].end }) },
538
- { "name": "titleTextSimple", "symbols": ["titleTextSimple", lexer.has("colon") ? { type: "colon" } : colon, "_", "titleWord"], "postprocess": (d) => ({ text: d[0].text + ": " + d[3].text, start: d[0].start, end: d[3].end }) },
539
- { "name": "expression", "symbols": ["range"], "postprocess": first },
540
- { "name": "expression", "symbols": ["span"], "postprocess": first },
541
- { "name": "expression", "symbols": ["relative"], "postprocess": first },
542
- { "name": "expression", "symbols": ["relativeDate"], "postprocess": first },
543
- { "name": "expression", "symbols": ["lastDayOfMonthExpr"], "postprocess": first },
544
- { "name": "expression", "symbols": ["date"], "postprocess": first },
545
- { "name": "expression", "symbols": ["fuzzy"], "postprocess": first },
546
- { "name": "expression", "symbols": ["forDuration"], "postprocess": first },
547
- { "name": "expression", "symbols": ["duration"], "postprocess": first },
548
- { "name": "lastDayOfMonthExpr", "symbols": ["lastRelative", "_", "dayUnit", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeDate({ month: d[6], lastDayOfMonth: true }) },
549
- { "name": "lastDayOfMonthExpr", "symbols": ["lastRelative", "_", "dayUnit", "_", "ofConnector", "_", "theConnector", "_", "monthUnit"], "postprocess": (d) => makeDate({ lastDayOfMonth: true, monthFromRef: true }) },
550
- { "name": "forDuration", "symbols": ["forConnector", "_", "duration"], "postprocess": (d) => d[2] },
551
- { "name": "range", "symbols": ["date", "_", "toConnector", "_", "date"], "postprocess": (d) => makeRange(d[0], d[4]) },
552
- { "name": "range", "symbols": ["fromConnector", "_", "date", "_", "toConnector", "_", "date"], "postprocess": (d) => makeRange(d[2], d[6]) },
553
- { "name": "range", "symbols": ["date", "_", lexer.has("dash") ? { type: "dash" } : dash, "_", "date"], "postprocess": (d) => makeRange(d[0], d[4]) },
554
- { "name": "range", "symbols": [lexer.has("monthDayCompact") ? { type: "monthDayCompact" } : monthDayCompact, lexer.has("dash") ? { type: "dash" } : dash, lexer.has("monthDayCompact") ? { type: "monthDayCompact" } : monthDayCompact], "postprocess": (d) => {
555
- const start = parseMonthDayCompact(d[0].value);
556
- const end = parseMonthDayCompact(d[2].value);
557
- return makeRange(makeDate({ month: start.month, day: start.day }), makeDate({ month: end.month, day: end.day }));
558
- } },
559
- { "name": "range", "symbols": [lexer.has("monthDayCompact") ? { type: "monthDayCompact" } : monthDayCompact, "_", lexer.has("dash") ? { type: "dash" } : dash, "_", "date"], "postprocess": (d) => {
560
- const start = parseMonthDayCompact(d[0].value);
561
- return makeRange(makeDate({ month: start.month, day: start.day }), d[4]);
562
- } },
563
- { "name": "range", "symbols": ["date", "_", lexer.has("dash") ? { type: "dash" } : dash, "_", lexer.has("monthDayCompact") ? { type: "monthDayCompact" } : monthDayCompact], "postprocess": (d) => {
564
- const end = parseMonthDayCompact(d[4].value);
565
- return makeRange(d[0], makeDate({ month: end.month, day: end.day }));
566
- } },
567
- { "name": "range", "symbols": ["specialDay", "_", "time", "_", "toConnector", "_", "time"], "postprocess": (d) => makeRange(makeDate({ special: d[0], time: d[2] }), makeDate({ special: d[0], time: d[6] })) },
568
- { "name": "range", "symbols": ["monthDay", "_", "time", "_", "toConnector", "_", "time"], "postprocess": (d) => makeRange({ ...d[0], time: d[2] }, { ...d[0], time: d[6] }) },
569
- { "name": "range", "symbols": ["weekday", "_", "time", "_", "toConnector", "_", "time"], "postprocess": (d) => makeRange(makeDate({ weekday: d[0], time: d[2] }), makeDate({ weekday: d[0], time: d[6] })) },
570
- { "name": "range", "symbols": ["month", "_", "dayNumber", lexer.has("dash") ? { type: "dash" } : dash, "dayNumber"], "postprocess": (d) => makeRange(makeDate({ month: d[0], day: d[2] }), makeDate({ month: d[0], day: d[4] })) },
571
- { "name": "range", "symbols": ["dayNumber", lexer.has("dash") ? { type: "dash" } : dash, "dayNumber", "_", "month"], "postprocess": (d) => makeRange(makeDate({ month: d[4], day: d[0] }), makeDate({ month: d[4], day: d[2] })) },
572
- { "name": "range", "symbols": ["betweenConnector", "_", "date", "_", "andConnector", "_", "date"], "postprocess": (d) => makeRange(d[2], d[6]) },
573
- { "name": "range", "symbols": ["date", "_", "throughConnector", "_", "date"], "postprocess": (d) => makeRange(d[0], d[4]) },
574
- { "name": "range", "symbols": ["date", "_", "untilConnector", "_", "date"], "postprocess": (d) => makeRange(d[0], d[4]) },
575
- { "name": "range", "symbols": ["untilConnector", "_", "date"], "postprocess": (d) => makeRange(makeDate({ special: "today" }), d[2]) },
576
- { "name": "range", "symbols": ["untilConnector", "_", "fuzzy"], "postprocess": (d) => makeRange(makeDate({ special: "today" }), d[2]) },
577
- { "name": "range", "symbols": ["fuzzy", "_", "toConnector", "_", "fuzzy"], "postprocess": (d) => makeRange(d[0], d[4]) },
578
- { "name": "range", "symbols": ["fromConnector", "_", "fuzzy", "_", "toConnector", "_", "fuzzy"], "postprocess": (d) => makeRange(d[2], d[6]) },
579
- { "name": "range", "symbols": ["betweenConnector", "_", "fuzzy", "_", "andConnector", "_", "fuzzy"], "postprocess": (d) => makeRange(d[2], d[6]) },
580
- { "name": "range", "symbols": ["fromConnector", "_", "date", "_", "untilConnector", "_", "date"], "postprocess": (d) => makeRange(d[2], d[6]) },
581
- { "name": "range", "symbols": ["fromConnector", "_", "specialDay", "_", "untilConnector", "_", "date"], "postprocess": (d) => makeRange(makeDate({ special: d[2] }), d[6]) },
582
- { "name": "span", "symbols": ["date", "_", "forConnector", "_", "duration"], "postprocess": (d) => makeSpan(d[0], d[4]) },
583
- { "name": "span", "symbols": ["fuzzy", "_", "forConnector", "_", "duration"], "postprocess": (d) => makeSpan(d[0], d[4]) },
584
- { "name": "span", "symbols": ["inConnector", "_", "fuzzy", "_", "forConnector", "_", "duration"], "postprocess": (d) => makeSpan(d[2], d[6]) },
585
- { "name": "span", "symbols": ["inConnector", "_", "date", "_", "forConnector", "_", "duration"], "postprocess": (d) => makeSpan(d[2], d[6]) },
586
- { "name": "span", "symbols": ["inConnector", "_", "monthForSpan", "_", "forConnector", "_", "duration"], "postprocess": (d) => makeSpan(d[2], d[6]) },
587
- { "name": "span", "symbols": ["startingConnector", "_", "date", "_", "forConnector", "_", "duration"], "postprocess": (d) => makeSpan(d[2], d[6]) },
588
- { "name": "span", "symbols": ["beginningConnector", "_", "date", "_", "forConnector", "_", "duration"], "postprocess": (d) => makeSpan(d[2], d[6]) },
589
- { "name": "span", "symbols": ["startingConnector", "_", "date"], "postprocess": (d) => makeSpan(d[2]) },
590
- { "name": "span", "symbols": ["date", "_", "startingConnector", "_", "date"], "postprocess": (d) => makeSpan(d[4], d[0]) },
591
- { "name": "span", "symbols": ["duration", "_", "startingConnector", "_", "date"], "postprocess": (d) => makeSpan(d[4], d[0]) },
592
- { "name": "span", "symbols": ["duration", "_", "fromConnector", "_", "date"], "postprocess": (d) => makeSpan(d[4], d[0]) },
593
- { "name": "span", "symbols": ["duration", "_", "inConnector", "_", "fuzzy"], "postprocess": (d) => makeSpan(d[4], d[0]) },
594
- { "name": "span", "symbols": ["duration", "_", "inConnector", "_", "theConnector", "_", "fuzzy"], "postprocess": (d) => makeSpan(d[6], d[0]) },
595
- { "name": "monthForSpan", "symbols": ["month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[0] }) },
596
- { "name": "relative", "symbols": ["lastRelative", "_", "number", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(d[2], d[4])) },
597
- { "name": "relative", "symbols": ["pastRelative", "_", "number", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(d[2], d[4])) },
598
- { "name": "relative", "symbols": ["previousRelative", "_", "number", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(d[2], d[4])) },
599
- { "name": "relative", "symbols": ["nextRelative", "_", "number", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(d[2], d[4])) },
600
- { "name": "relative", "symbols": ["comingRelative", "_", "number", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(d[2], d[4])) },
601
- { "name": "relative", "symbols": ["upcomingRelative", "_", "number", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(d[2], d[4])) },
602
- { "name": "relative", "symbols": ["withinConnector", "_", "duration"], "postprocess": (d) => makeRelative("future", d[2]) },
603
- { "name": "relative", "symbols": ["withinConnector", "_", "theConnector", "_", "nextRelative", "_", "duration"], "postprocess": (d) => makeRelative("future", d[6]) },
604
- { "name": "relative", "symbols": ["withinConnector", "_", "theConnector", "_", "lastRelative", "_", "duration"], "postprocess": (d) => makeRelative("past", d[6]) },
605
- { "name": "relative", "symbols": ["withinConnector", "_", "theConnector", "_", "pastRelative", "_", "duration"], "postprocess": (d) => makeRelative("past", d[6]) },
606
- { "name": "relative", "symbols": ["overConnector", "_", "theConnector", "_", "nextRelative", "_", "duration"], "postprocess": (d) => makeRelative("future", d[6]) },
607
- { "name": "relative", "symbols": ["overConnector", "_", "theConnector", "_", "lastRelative", "_", "duration"], "postprocess": (d) => makeRelative("past", d[6]) },
608
- { "name": "relative", "symbols": ["overConnector", "_", "theConnector", "_", "pastRelative", "_", "duration"], "postprocess": (d) => makeRelative("past", d[6]) },
609
- { "name": "relative", "symbols": ["overConnector", "_", "theConnector", "_", "comingRelative", "_", "duration"], "postprocess": (d) => makeRelative("future", d[6]) },
610
- { "name": "relative", "symbols": ["inConnector", "_", "theConnector", "_", "lastRelative", "_", "duration"], "postprocess": (d) => makeRelative("past", d[6]) },
611
- { "name": "relative", "symbols": ["inConnector", "_", "theConnector", "_", "nextRelative", "_", "duration"], "postprocess": (d) => makeRelative("future", d[6]) },
612
- { "name": "relative", "symbols": ["inConnector", "_", "theConnector", "_", "pastRelative", "_", "duration"], "postprocess": (d) => makeRelative("past", d[6]) },
613
- { "name": "relative", "symbols": ["inConnector", "_", "theConnector", "_", "comingRelative", "_", "duration"], "postprocess": (d) => makeRelative("future", d[6]) },
614
- { "name": "relative", "symbols": ["lastRelative", "_", "wordNumber", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(parseWordNumber(d[2]), d[4])) },
615
- { "name": "relative", "symbols": ["nextRelative", "_", "wordNumber", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(parseWordNumber(d[2]), d[4])) },
616
- { "name": "relative", "symbols": ["pastRelative", "_", "wordNumber", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(parseWordNumber(d[2]), d[4])) },
617
- { "name": "relative", "symbols": ["previousRelative", "_", "wordNumber", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(parseWordNumber(d[2]), d[4])) },
618
- { "name": "relative", "symbols": ["comingRelative", "_", "wordNumber", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(parseWordNumber(d[2]), d[4])) },
619
- { "name": "relative", "symbols": ["upcomingRelative", "_", "wordNumber", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(parseWordNumber(d[2]), d[4])) },
620
- { "name": "relative", "symbols": ["pastRelative", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(1, d[2])) },
621
- { "name": "relative", "symbols": ["previousRelative", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(1, d[2])) },
622
- { "name": "relative", "symbols": ["upcomingRelative", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(1, d[2])) },
623
- { "name": "relative", "symbols": ["withinConnector", "_", "theConnector", "_", "nextRelative", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(1, d[6])) },
624
- { "name": "relative", "symbols": ["withinConnector", "_", "theConnector", "_", "pastRelative", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(1, d[6])) },
625
- { "name": "relative", "symbols": ["overConnector", "_", "theConnector", "_", "lastRelative", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(1, d[6])) },
626
- { "name": "relative", "symbols": ["overConnector", "_", "theConnector", "_", "comingRelative", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(1, d[6])) },
627
- { "name": "relative", "symbols": ["overConnector", "_", "theConnector", "_", "upcomingRelative", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(1, d[6])) },
628
- { "name": "relative", "symbols": ["inConnector", "_", "theConnector", "_", "pastRelative", "_", "unit"], "postprocess": (d) => makeRelative("past", makeDuration(1, d[6])) },
629
- { "name": "relative", "symbols": ["inConnector", "_", "theConnector", "_", "comingRelative", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(1, d[6])) },
630
- { "name": "relative", "symbols": ["inConnector", "_", "theConnector", "_", "upcomingRelative", "_", "unit"], "postprocess": (d) => makeRelative("future", makeDuration(1, d[6])) },
631
- { "name": "relativeDate", "symbols": ["duration", "_", "agoConnector"], "postprocess": (d) => makeRelativeDate("past", d[0]) },
632
- { "name": "relativeDate", "symbols": ["duration", "_", "agoConnector", "_", "atConnector", "_", "time"], "postprocess": (d) => makeRelativeDate("past", d[0], void 0, d[6]) },
633
- { "name": "relativeDate", "symbols": ["duration", "_", "agoConnector", "_", "atConnector", "_", "timeWord"], "postprocess": (d) => makeRelativeDate("past", d[0], void 0, { special: d[6] }) },
634
- { "name": "relativeDate", "symbols": ["inConnector", "_", "duration"], "postprocess": (d) => makeRelativeDate("future", d[2]) },
635
- { "name": "relativeDate", "symbols": ["inConnector", "_", "duration", "_", "atConnector", "_", "time"], "postprocess": (d) => makeRelativeDate("future", d[2], void 0, d[6]) },
636
- { "name": "relativeDate", "symbols": ["inConnector", "_", "duration", "_", "atConnector", "_", "timeWord"], "postprocess": (d) => makeRelativeDate("future", d[2], void 0, { special: d[6] }) },
637
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "now"], "postprocess": (d) => makeRelativeDate("future", d[0]) },
638
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "now", "_", "atConnector", "_", "time"], "postprocess": (d) => makeRelativeDate("future", d[0], void 0, d[8]) },
639
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "now", "_", "atConnector", "_", "timeWord"], "postprocess": (d) => makeRelativeDate("future", d[0], void 0, { special: d[8] }) },
640
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "today"], "postprocess": (d) => makeRelativeDate("future", d[0], makeDate({ special: "today" })) },
641
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "today", "_", "atConnector", "_", "time"], "postprocess": (d) => makeRelativeDate("future", d[0], makeDate({ special: "today" }), d[8]) },
642
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "tomorrow"], "postprocess": (d) => makeRelativeDate("future", d[0], makeDate({ special: "tomorrow" })) },
643
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "tomorrow", "_", "atConnector", "_", "time"], "postprocess": (d) => makeRelativeDate("future", d[0], makeDate({ special: "tomorrow" }), d[8]) },
644
- { "name": "relativeDate", "symbols": ["duration", "_", "fromConnector", "_", "yesterday"], "postprocess": (d) => makeRelativeDate("future", d[0], makeDate({ special: "yesterday" })) },
645
- { "name": "relativeDate", "symbols": ["duration", "_", "henceConnector"], "postprocess": (d) => makeRelativeDate("future", d[0]) },
646
- { "name": "relativeDate", "symbols": ["duration", "_", "laterConnector"], "postprocess": (d) => makeRelativeDate("future", d[0]) },
647
- { "name": "relativeDate", "symbols": ["duration", "_", "beforeConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("past", d[0], d[4]) },
648
- { "name": "relativeDate", "symbols": ["duration", "_", "afterConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("future", d[0], d[4]) },
649
- { "name": "relativeDate", "symbols": ["theConnector", "_", "dayUnit", "_", "beforeConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("past", makeDuration(1, "day"), d[6]) },
650
- { "name": "relativeDate", "symbols": ["theConnector", "_", "dayUnit", "_", "afterConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("future", makeDuration(1, "day"), d[6]) },
651
- { "name": "relativeDate", "symbols": ["dayUnit", "_", "beforeConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("past", makeDuration(1, "day"), d[4]) },
652
- { "name": "relativeDate", "symbols": ["dayUnit", "_", "afterConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("future", makeDuration(1, "day"), d[4]) },
653
- { "name": "relativeDate", "symbols": ["wordNumber", "_", "unit", "_", "beforeConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("past", makeDuration(parseWordNumber(d[0]), d[2]), d[6]) },
654
- { "name": "relativeDate", "symbols": ["wordNumber", "_", "unit", "_", "afterConnector", "_", "date"], "postprocess": (d) => makeRelativeDate("future", makeDuration(parseWordNumber(d[0]), d[2]), d[6]) },
655
- { "name": "relativeDate", "symbols": ["nextRelative", "_", "businessKeyword", "_", "dayOrDaysUnit"], "postprocess": (d) => makeRelativeDate("future", makeDuration(1, "businessDay")) },
656
- { "name": "relativeDate", "symbols": ["inConnector", "_", "number", "_", "businessKeyword", "_", "dayOrDaysUnit"], "postprocess": (d) => makeRelativeDate("future", makeDuration(d[2], "businessDay")) },
657
- { "name": "relativeDate", "symbols": ["inConnector", "_", "wordNumber", "_", "businessKeyword", "_", "dayOrDaysUnit"], "postprocess": (d) => makeRelativeDate("future", makeDuration(parseWordNumber(d[2]), "businessDay")) },
658
- { "name": "relativeDate", "symbols": ["number", "_", "businessKeyword", "_", "dayOrDaysUnit", "_", "agoConnector"], "postprocess": (d) => makeRelativeDate("past", makeDuration(d[0], "businessDay")) },
659
- { "name": "relativeDate", "symbols": ["wordNumber", "_", "businessKeyword", "_", "dayOrDaysUnit", "_", "agoConnector"], "postprocess": (d) => makeRelativeDate("past", makeDuration(parseWordNumber(d[0]), "businessDay")) },
660
- { "name": "relativeDate", "symbols": ["wordNumber", "_", "fortnightKeyword", "_", "fromConnector", "_", "now"], "postprocess": (d) => makeRelativeDate("future", makeDuration(parseWordNumber(d[0]) * 2, "week")) },
661
- { "name": "relativeDate", "symbols": ["number", "_", "fortnightKeyword", "_", "fromConnector", "_", "now"], "postprocess": (d) => makeRelativeDate("future", makeDuration(d[0] * 2, "week")) },
662
- { "name": "relativeDate", "symbols": ["fortnightKeyword", "_", "fromConnector", "_", "now"], "postprocess": (d) => makeRelativeDate("future", makeDuration(2, "week")) },
663
- { "name": "relativeDate", "symbols": ["inConnector", "_", "wordNumber", "_", "fortnightKeyword"], "postprocess": (d) => makeRelativeDate("future", makeDuration(parseWordNumber(d[2]) * 2, "week")) },
664
- { "name": "relativeDate", "symbols": ["inConnector", "_", "number", "_", "fortnightKeyword"], "postprocess": (d) => makeRelativeDate("future", makeDuration(d[2] * 2, "week")) },
665
- { "name": "relativeDate", "symbols": ["inConnector", "_", "fortnightKeyword"], "postprocess": (d) => makeRelativeDate("future", makeDuration(2, "week")) },
666
- { "name": "relativeDate", "symbols": ["wordNumber", "_", "fortnightKeyword", "_", "agoConnector"], "postprocess": (d) => makeRelativeDate("past", makeDuration(parseWordNumber(d[0]) * 2, "week")) },
667
- { "name": "relativeDate", "symbols": ["number", "_", "fortnightKeyword", "_", "agoConnector"], "postprocess": (d) => makeRelativeDate("past", makeDuration(d[0] * 2, "week")) },
668
- { "name": "relativeDate", "symbols": ["fortnightKeyword", "_", "agoConnector"], "postprocess": (d) => makeRelativeDate("past", makeDuration(2, "week")) },
669
- { "name": "fuzzy", "symbols": ["quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[0].value) }) },
670
- { "name": "fuzzy", "symbols": ["quarter", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[0].value), year: d[2] }) },
671
- { "name": "fuzzy", "symbols": ["half"], "postprocess": (d) => makeFuzzy({ period: "half", half: parseHalf(d[0].value) }) },
672
- { "name": "fuzzy", "symbols": ["half", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "half", half: parseHalf(d[0].value), year: d[2] }) },
673
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[2], modifier: "early" }) },
674
- { "name": "fuzzy", "symbols": ["midModifier", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[2], modifier: "mid" }) },
675
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[2], modifier: "late" }) },
676
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[2].value), modifier: "early" }) },
677
- { "name": "fuzzy", "symbols": ["midModifier", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[2].value), modifier: "mid" }) },
678
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[2].value), modifier: "late" }) },
679
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "year", year: d[2], modifier: "early" }) },
680
- { "name": "fuzzy", "symbols": ["midModifier", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "year", year: d[2], modifier: "mid" }) },
681
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "year", year: d[2], modifier: "late" }) },
682
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "yearUnit"], "postprocess": (d) => makeFuzzy({ period: "year", modifier: "early" }) },
683
- { "name": "fuzzy", "symbols": ["midModifier", "_", "yearUnit"], "postprocess": (d) => makeFuzzy({ period: "year", modifier: "mid" }) },
684
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "yearUnit"], "postprocess": (d) => makeFuzzy({ period: "year", modifier: "late" }) },
685
- { "name": "fuzzy", "symbols": ["endConnector", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[4], modifier: "end" }) },
686
- { "name": "fuzzy", "symbols": ["endConnector", "_", "ofConnector", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "year", year: d[4], modifier: "end" }) },
687
- { "name": "fuzzy", "symbols": ["endConnector", "_", "ofConnector", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[4].value), modifier: "end" }) },
688
- { "name": "fuzzy", "symbols": ["startConnector", "_", "ofConnector", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[4].value), modifier: "start" }) },
689
- { "name": "fuzzy", "symbols": ["beginningConnector", "_", "ofConnector", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[4].value), modifier: "beginning" }) },
690
- { "name": "fuzzy", "symbols": ["middleConnector", "_", "ofConnector", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[4].value), modifier: "middle" }) },
691
- { "name": "fuzzy", "symbols": ["endConnector", "_", "ofConnector", "_", "theConnector", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[6], modifier: "end" }) },
692
- { "name": "fuzzy", "symbols": ["endConnector", "_", "ofConnector", "_", "theConnector", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[6], modifier: "end" }) },
693
- { "name": "fuzzy", "symbols": ["endConnector", "_", "ofConnector", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "end" }) },
694
- { "name": "fuzzy", "symbols": ["beginningConnector", "_", "ofConnector", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "beginning" }) },
695
- { "name": "fuzzy", "symbols": ["startConnector", "_", "ofConnector", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "start" }) },
696
- { "name": "fuzzy", "symbols": ["middleConnector", "_", "ofConnector", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "middle" }) },
697
- { "name": "fuzzy", "symbols": ["beginningConnector", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[4], modifier: "beginning" }) },
698
- { "name": "fuzzy", "symbols": ["beginningConnector", "_", "ofConnector", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "year", year: d[4], modifier: "beginning" }) },
699
- { "name": "fuzzy", "symbols": ["startConnector", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[4], modifier: "start" }) },
700
- { "name": "fuzzy", "symbols": ["startConnector", "_", "ofConnector", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "year", year: d[4], modifier: "start" }) },
701
- { "name": "fuzzy", "symbols": ["middleConnector", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[4], modifier: "middle" }) },
702
- { "name": "fuzzy", "symbols": ["middleConnector", "_", "ofConnector", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "year", year: d[4], modifier: "middle" }) },
703
- { "name": "fuzzy", "symbols": ["season"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[0] }) },
704
- { "name": "fuzzy", "symbols": ["season", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[0], year: d[2] }) },
705
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "season"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[2], modifier: "early" }) },
706
- { "name": "fuzzy", "symbols": ["midModifier", "_", "season"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[2], modifier: "mid" }) },
707
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "season"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[2], modifier: "late" }) },
708
- { "name": "fuzzy", "symbols": ["nextRelative", "_", "season"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[2], relative: "next" }) },
709
- { "name": "fuzzy", "symbols": ["lastRelative", "_", "season"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[2], relative: "last" }) },
710
- { "name": "fuzzy", "symbols": ["thisRelative", "_", "season"], "postprocess": (d) => makeFuzzy({ period: "season", season: d[2], relative: "this" }) },
711
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "quarter", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseOrdinalWord(d[0]), year: d[4] }) },
712
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "quarter"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseOrdinalWord(d[0]) }) },
713
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "half", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "half", half: parseOrdinalWord(d[0]), year: d[4] }) },
714
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "half"], "postprocess": (d) => makeFuzzy({ period: "half", half: parseOrdinalWord(d[0]) }) },
715
- { "name": "fuzzy", "symbols": ["aroundConnector", "_", "date"], "postprocess": (d) => makeFuzzy({ ...d[2], period: "around" }) },
716
- { "name": "fuzzy", "symbols": ["aboutConnector", "_", "date"], "postprocess": (d) => makeFuzzy({ ...d[2], period: "around" }) },
717
- { "name": "fuzzy", "symbols": ["roughlyConnector", "_", "date"], "postprocess": (d) => makeFuzzy({ ...d[2], period: "around" }) },
718
- { "name": "fuzzy", "symbols": ["approximatelyConnector", "_", "date"], "postprocess": (d) => makeFuzzy({ ...d[2], period: "around" }) },
719
- { "name": "fuzzy", "symbols": ["aroundConnector", "_", "fuzzy"], "postprocess": (d) => d[2] },
720
- { "name": "fuzzy", "symbols": ["aboutConnector", "_", "fuzzy"], "postprocess": (d) => d[2] },
721
- { "name": "fuzzy", "symbols": ["roughlyConnector", "_", "fuzzy"], "postprocess": (d) => d[2] },
722
- { "name": "fuzzy", "symbols": ["approximatelyConnector", "_", "fuzzy"], "postprocess": (d) => d[2] },
723
- { "name": "fuzzy", "symbols": ["sometimeConnector", "_", "inConnector", "_", "fuzzy"], "postprocess": (d) => d[4] },
724
- { "name": "fuzzy", "symbols": ["sometimeConnector", "_", "inConnector", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[4] }) },
725
- { "name": "fuzzy", "symbols": ["sometimeConnector", "_", "nextRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], relative: "next" }) },
726
- { "name": "fuzzy", "symbols": ["sometimeConnector", "_", "lastRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], relative: "last" }) },
727
- { "name": "fuzzy", "symbols": ["sometimeConnector", "_", "thisRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], relative: "this" }) },
728
- { "name": "fuzzy", "symbols": ["theConnector", "_", "lastRelative", "_", "unit", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeFuzzy({ period: "month", month: d[8], modifier: "late" }) },
729
- { "name": "fuzzy", "symbols": ["theConnector", "_", "ordinalWord", "_", "unit", "_", "ofConnector", "_", "month"], "postprocess": (d, _, reject) => {
730
- const ord = d[2].toLowerCase();
731
- if (ord === "first") return makeFuzzy({ period: "month", month: d[8], modifier: "early" });
732
- return reject;
733
- } },
734
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "quarterUnit"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseOrdinalWord(d[0]) }) },
735
- { "name": "fuzzy", "symbols": ["ordinal", "_", "quarterUnit"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseOrdinal(d[0]) }) },
736
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "quarterUnit", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseOrdinalWord(d[0]), year: d[4] }) },
737
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "quarterUnit", "_", "ofConnector", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseOrdinalWord(d[0]), year: d[6] }) },
738
- { "name": "fuzzy", "symbols": ["quarter", "_", "ofConnector", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "quarter", quarter: parseQuarter(d[0].value), year: d[4] }) },
739
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "halfWord", "_", "ofConnector", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "half", half: parseOrdinalWord(d[0]), year: d[6] }) },
740
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "nextRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "early", relative: "next" }) },
741
- { "name": "fuzzy", "symbols": ["midModifier", "_", "nextRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "mid", relative: "next" }) },
742
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "nextRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "late", relative: "next" }) },
743
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "lastRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "early", relative: "last" }) },
744
- { "name": "fuzzy", "symbols": ["midModifier", "_", "lastRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "mid", relative: "last" }) },
745
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "lastRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "late", relative: "last" }) },
746
- { "name": "fuzzy", "symbols": ["earlyModifier", "_", "thisRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "early", relative: "this" }) },
747
- { "name": "fuzzy", "symbols": ["midModifier", "_", "thisRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "mid", relative: "this" }) },
748
- { "name": "fuzzy", "symbols": ["lateModifier", "_", "thisRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "late", relative: "this" }) },
749
- { "name": "fuzzy", "symbols": ["beginningConnector", "_", "ofConnector", "_", "theConnector", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[6], modifier: "beginning" }) },
750
- { "name": "fuzzy", "symbols": ["middleConnector", "_", "ofConnector", "_", "theConnector", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[6], modifier: "middle" }) },
751
- { "name": "fuzzy", "symbols": ["lastRelative", "_", "unit", "_", "ofConnector", "_", "month"], "postprocess": (d, _, reject) => {
752
- if (d[2].toLowerCase() === "day" || d[2].toLowerCase() === "days") return reject;
753
- return makeFuzzy({ period: "month", month: d[6], modifier: "late" });
754
- } },
755
- { "name": "fuzzy", "symbols": ["ordinalWord", "_", "unit", "_", "ofConnector", "_", "month"], "postprocess": (d, _, reject) => {
756
- if (d[2].toLowerCase() === "day" || d[2].toLowerCase() === "days") return reject;
757
- return makeFuzzy({ period: "month", month: d[6], modifier: parseOrdinalWord(d[0]) <= 2 ? "early" : parseOrdinalWord(d[0]) >= 4 ? "late" : "mid" });
758
- } },
759
- { "name": "fuzzy", "symbols": ["weekendKeyword"], "postprocess": (d) => makeFuzzy({ period: "weekend", relative: "this" }) },
760
- { "name": "fuzzy", "symbols": ["theConnector", "_", "weekendKeyword"], "postprocess": (d) => makeFuzzy({ period: "weekend", relative: "this" }) },
761
- { "name": "fuzzy", "symbols": ["thisRelative", "_", "weekendKeyword"], "postprocess": (d) => makeFuzzy({ period: "weekend", relative: "this" }) },
762
- { "name": "fuzzy", "symbols": ["nextRelative", "_", "weekendKeyword"], "postprocess": (d) => makeFuzzy({ period: "weekend", relative: "next" }) },
763
- { "name": "fuzzy", "symbols": ["lastRelative", "_", "weekendKeyword"], "postprocess": (d) => makeFuzzy({ period: "weekend", relative: "last" }) },
764
- { "name": "fuzzy", "symbols": ["tonightKeyword"], "postprocess": (d) => makeFuzzy({ period: "tonight" }) },
765
- { "name": "fuzzy", "symbols": ["nightKeyword"], "postprocess": (d) => makeFuzzy({ period: "night" }) },
766
- { "name": "fuzzy", "symbols": ["lastRelative", "_", "nightKeyword"], "postprocess": (d) => makeFuzzy({ period: "night", relative: "last" }) },
767
- { "name": "fuzzy", "symbols": ["tomorrow", "_", "nightKeyword"], "postprocess": (d) => makeFuzzy({ period: "night", relative: "tomorrow" }) },
768
- { "name": "fuzzy", "symbols": ["weekday", "_", "nightKeyword"], "postprocess": (d) => makeFuzzy({ period: "night", weekday: d[0] }) },
769
- { "name": "fuzzy", "symbols": ["laterKeyword", "_", "today"], "postprocess": (d) => makeFuzzy({ period: "day", modifier: "later" }) },
770
- { "name": "fuzzy", "symbols": ["earlierKeyword", "_", "today"], "postprocess": (d) => makeFuzzy({ period: "day", modifier: "earlier" }) },
771
- { "name": "fuzzy", "symbols": ["laterKeyword", "_", "thisRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "later", relative: "this" }) },
772
- { "name": "fuzzy", "symbols": ["earlierKeyword", "_", "thisRelative", "_", "unit"], "postprocess": (d) => makeFuzzy({ period: d[4], modifier: "earlier", relative: "this" }) },
773
- { "name": "fuzzy", "symbols": ["weekKeyword", "_", "number"], "postprocess": (d) => makeFuzzy({ period: "weekNumber", weekNumber: d[2] }) },
774
- { "name": "fuzzy", "symbols": ["weekKeyword", "_", "number", "_", "year"], "postprocess": (d) => makeFuzzy({ period: "weekNumber", weekNumber: d[2], year: d[4] }) },
775
- { "name": "fuzzy", "symbols": ["theConnector", "_", "weekKeyword", "_", "ofConnector", "_", "date"], "postprocess": (d) => makeFuzzy({ period: "weekOf", baseDate: d[6] }) },
776
- { "name": "duration", "symbols": ["number", "_", "unit"], "postprocess": (d) => makeDuration(d[0], d[2]) },
777
- { "name": "duration", "symbols": ["wordNumber", "_", "unit"], "postprocess": (d) => makeDuration(parseWordNumber(d[0]), d[2]) },
778
- { "name": "duration", "symbols": ["abbreviatedDuration"], "postprocess": (d) => d[0] },
779
- { "name": "duration", "symbols": ["halfWord", "_", "wordNumber", "_", "unit"], "postprocess": (d) => {
780
- const word2 = d[2].toLowerCase();
781
- if (word2 === "a" || word2 === "an") {
782
- return makeDuration(0.5, d[4]);
783
- }
784
- return makeDuration(parseWordNumber(d[2]) + 0.5, d[4]);
785
- } },
786
- { "name": "duration", "symbols": ["number", "_", "andConnector", "_", "halfWord", "_", "unit"], "postprocess": (d) => makeDuration(d[0] + 0.5, d[6]) },
787
- { "name": "duration", "symbols": ["wordNumber", "_", "andConnector", "_", "halfWord", "_", "unit"], "postprocess": (d) => makeDuration(parseWordNumber(d[0]) + 0.5, d[6]) },
788
- { "name": "duration", "symbols": ["wordNumber", "_", "andConnector", "_", "wordNumber", "_", "halfWord", "_", "unit"], "postprocess": (d) => makeDuration(parseWordNumber(d[0]) + 0.5, d[8]) },
789
- { "name": "duration", "symbols": ["wordNumber", "_", "unit", "_", "andConnector", "_", "wordNumber", "_", "halfWord"], "postprocess": (d) => makeDuration(parseWordNumber(d[0]) + 0.5, d[2]) },
790
- { "name": "duration", "symbols": ["halfWord", "_", "unit"], "postprocess": (d) => makeDuration(0.5, d[2]) },
791
- { "name": "duration", "symbols": ["duration", "_", "andConnector", "_", "duration"], "postprocess": (d) => ({ ...d[0], combined: [d[0], d[4]] }) },
792
- { "name": "duration", "symbols": ["duration", "_", lexer.has("comma") ? { type: "comma" } : comma, "_", "duration"], "postprocess": (d) => ({ ...d[0], combined: [d[0], d[4]] }) },
793
- { "name": "duration", "symbols": ["duration", "_", lexer.has("comma") ? { type: "comma" } : comma, "_", "andConnector", "_", "duration"], "postprocess": (d) => ({ ...d[0], combined: [d[0], d[6]] }) },
794
- { "name": "duration", "symbols": ["duration", "_", "duration"], "postprocess": (d) => ({ ...d[0], combined: [d[0], d[2]] }) },
795
- { "name": "abbreviatedDuration", "symbols": [lexer.has("abbreviatedDuration") ? { type: "abbreviatedDuration" } : abbreviatedDuration], "postprocess": (d) => {
796
- const match = d[0].value.match(/^(\d+)(mo|w|d|h|m|s|y)$/);
797
- if (!match) return null;
798
- const value = parseInt(match[1], 10);
799
- const unitMap = { w: "week", d: "day", h: "hour", m: "minute", mo: "month", s: "second", y: "year" };
800
- return makeDuration(value, unitMap[match[2]]);
801
- } },
802
- { "name": "date", "symbols": ["specialDay"], "postprocess": (d) => makeDate({ special: d[0] }) },
803
- { "name": "date", "symbols": ["ordinalWeekdayOfMonth"], "postprocess": first },
804
- { "name": "date", "symbols": ["relativeWeekday"], "postprocess": first },
805
- { "name": "date", "symbols": ["weekday"], "postprocess": (d) => makeDate({ weekday: d[0] }) },
806
- { "name": "date", "symbols": ["monthDayYear"], "postprocess": first },
807
- { "name": "date", "symbols": ["monthDay"], "postprocess": first },
808
- { "name": "date", "symbols": ["monthDayCompact"], "postprocess": first },
809
- { "name": "date", "symbols": ["monthYear"], "postprocess": first },
810
- { "name": "date", "symbols": ["dateFormat"], "postprocess": first },
811
- { "name": "date", "symbols": ["relativePeriod"], "postprocess": first },
812
- { "name": "date", "symbols": ["complexDate"], "postprocess": first },
813
- { "name": "date", "symbols": ["dateWithTime"], "postprocess": first },
814
- { "name": "date", "symbols": ["relativeMonth"], "postprocess": first },
815
- { "name": "date", "symbols": ["monthOnly"], "postprocess": first },
816
- { "name": "date", "symbols": ["yearOnly"], "postprocess": first },
817
- { "name": "date", "symbols": ["timeOnly"], "postprocess": first },
818
- { "name": "date", "symbols": ["dayOnly"], "postprocess": first },
819
- { "name": "date", "symbols": ["eodCobDate"], "postprocess": first },
820
- { "name": "monthDayCompact", "symbols": [lexer.has("monthDayCompact") ? { type: "monthDayCompact" } : monthDayCompact], "postprocess": (d) => {
821
- const parsed = parseMonthDayCompact(d[0].value);
822
- return makeDate({ month: parsed.month, day: parsed.day });
823
- } },
824
- { "name": "monthOnly", "symbols": ["month"], "postprocess": (d) => makeDate({ month: d[0], day: 1, monthOnly: true }) },
825
- { "name": "relativeMonth", "symbols": ["nextRelative", "_", "month"], "postprocess": (d) => makeDate({ month: d[2], day: 1, monthOnly: true, relativeMonth: "next" }) },
826
- { "name": "relativeMonth", "symbols": ["lastRelative", "_", "month"], "postprocess": (d) => makeDate({ month: d[2], day: 1, monthOnly: true, relativeMonth: "last" }) },
827
- { "name": "relativeMonth", "symbols": ["thisRelative", "_", "month"], "postprocess": (d) => makeDate({ month: d[2], day: 1, monthOnly: true, relativeMonth: "this" }) },
828
- { "name": "monthYear", "symbols": ["month", "_", "year"], "postprocess": (d) => makeDate({ month: d[0], year: d[2], day: 1, monthOnly: true }) },
829
- { "name": "yearOnly", "symbols": ["year"], "postprocess": (d, _, reject) => {
830
- const year = d[0];
831
- if (year < 1900 || year > 2100) return reject;
832
- return makeDate({ year, month: 1, day: 1, yearOnly: true });
833
- } },
834
- { "name": "timeOnly", "symbols": ["time"], "postprocess": (d) => makeDate({ time: d[0], timeOnly: true }) },
835
- { "name": "timeOnly", "symbols": ["timeWord"], "postprocess": (d) => makeDate({ time: { special: d[0] }, timeOnly: true }) },
836
- { "name": "dayOnly", "symbols": ["theConnector", "_", "dayNumber"], "postprocess": (d) => makeDate({ day: d[2], dayOnly: true }) },
837
- { "name": "dayOnly", "symbols": ["onConnector", "_", "theConnector", "_", "dayNumber"], "postprocess": (d) => makeDate({ day: d[4], dayOnly: true }) },
838
- { "name": "eodCobDate", "symbols": ["eodKeyword"], "postprocess": (d) => makeDate({ special: "today", time: { hour: 23, minute: 59 } }) },
839
- { "name": "eodCobDate", "symbols": ["cobKeyword"], "postprocess": (d) => makeDate({ special: "today", time: { hour: 17, minute: 0 } }) },
840
- { "name": "eodCobDate", "symbols": ["eodKeyword", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[2], time: { hour: 23, minute: 59 } }) },
841
- { "name": "eodCobDate", "symbols": ["cobKeyword", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[2], time: { hour: 17, minute: 0 } }) },
842
- { "name": "eodCobDate", "symbols": ["eodKeyword", "_", "specialDay"], "postprocess": (d) => makeDate({ special: d[2], time: { hour: 23, minute: 59 } }) },
843
- { "name": "eodCobDate", "symbols": ["cobKeyword", "_", "specialDay"], "postprocess": (d) => makeDate({ special: d[2], time: { hour: 17, minute: 0 } }) },
844
- { "name": "eodCobDate", "symbols": ["endConnector", "_", "ofConnector", "_", "dayUnit", "_", "specialDay"], "postprocess": (d) => makeDate({ special: d[6], time: { hour: 23, minute: 59 } }) },
845
- { "name": "eodCobDate", "symbols": ["closeKeyword", "_", "ofConnector", "_", "businessKeyword", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[6], time: { hour: 17, minute: 0 } }) },
846
- { "name": "eodCobDate", "symbols": ["closeKeyword", "_", "ofConnector", "_", "businessKeyword", "_", "specialDay"], "postprocess": (d) => makeDate({ special: d[6], time: { hour: 17, minute: 0 } }) },
847
- { "name": "specialDay", "symbols": ["today"], "postprocess": (d) => "today" },
848
- { "name": "specialDay", "symbols": ["tomorrow"], "postprocess": (d) => "tomorrow" },
849
- { "name": "specialDay", "symbols": ["yesterday"], "postprocess": (d) => "yesterday" },
850
- { "name": "specialDay", "symbols": ["now"], "postprocess": (d) => "now" },
851
- { "name": "specialDay", "symbols": ["theConnector", "_", "dayUnit", "_", "afterConnector", "_", "tomorrow"], "postprocess": (d) => "dayAfterTomorrow" },
852
- { "name": "specialDay", "symbols": ["dayUnit", "_", "afterConnector", "_", "tomorrow"], "postprocess": (d) => "dayAfterTomorrow" },
853
- { "name": "specialDay", "symbols": ["theConnector", "_", "dayUnit", "_", "beforeConnector", "_", "yesterday"], "postprocess": (d) => "dayBeforeYesterday" },
854
- { "name": "specialDay", "symbols": ["dayUnit", "_", "beforeConnector", "_", "yesterday"], "postprocess": (d) => "dayBeforeYesterday" },
855
- { "name": "dayUnit", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => d[0].value === "day" ? d[0] : reject },
856
- { "name": "dayOrDaysUnit", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => d[0].value === "day" || d[0].value === "days" ? d[0] : reject },
857
- { "name": "relativeWeekday", "symbols": ["nextRelative", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[2], relative: "next" }) },
858
- { "name": "relativeWeekday", "symbols": ["lastRelative", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[2], relative: "last" }) },
859
- { "name": "relativeWeekday", "symbols": ["thisRelative", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[2], relative: "this" }) },
860
- { "name": "relativeWeekday", "symbols": ["comingRelative", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[2], relative: "next" }) },
861
- { "name": "relativeWeekday", "symbols": ["previousRelative", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[2], relative: "last" }) },
862
- { "name": "relativePeriod", "symbols": ["nextRelative", "_", "unit"], "postprocess": (d) => makeDate({ relative: "next", period: d[2] }) },
863
- { "name": "relativePeriod", "symbols": ["lastRelative", "_", "unit"], "postprocess": (d) => makeDate({ relative: "last", period: d[2] }) },
864
- { "name": "relativePeriod", "symbols": ["thisRelative", "_", "unit"], "postprocess": (d) => makeDate({ relative: "this", period: d[2] }) },
865
- { "name": "monthDay", "symbols": ["month", "_", "dayNumber"], "postprocess": (d) => makeDate({ month: d[0], day: d[2] }) },
866
- { "name": "monthDay", "symbols": ["dayNumber", "_", "month"], "postprocess": (d) => makeDate({ month: d[2], day: d[0] }) },
867
- { "name": "monthDay", "symbols": ["dayNumber", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeDate({ month: d[4], day: d[0] }) },
868
- { "name": "monthDay", "symbols": ["theConnector", "_", "dayNumber", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeDate({ month: d[6], day: d[2] }) },
869
- { "name": "monthDay", "symbols": ["month", "_", "ordinalWord"], "postprocess": (d) => makeDate({ month: d[0], day: parseOrdinalWord(d[2]) }) },
870
- { "name": "monthDay", "symbols": ["month", "_", "theConnector", "_", "dayNumber"], "postprocess": (d) => makeDate({ month: d[0], day: d[4] }) },
871
- { "name": "ordinalWeekdayOfMonth", "symbols": ["ordinalWord", "_", "weekday", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeDate({ ordinalWeekday: parseOrdinalWord(d[0]), weekday: d[2], month: d[6] }) },
872
- { "name": "ordinalWeekdayOfMonth", "symbols": ["lastRelative", "_", "weekday", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeDate({ ordinalWeekday: -1, weekday: d[2], month: d[6] }) },
873
- { "name": "ordinalWeekdayOfMonth", "symbols": ["ordinalWord", "_", "weekday", "_", "ofConnector", "_", "theConnector", "_", "monthUnit"], "postprocess": (d) => makeDate({ ordinalWeekday: parseOrdinalWord(d[0]), weekday: d[2], monthFromRef: true }) },
874
- { "name": "ordinalWeekdayOfMonth", "symbols": ["lastRelative", "_", "weekday", "_", "ofConnector", "_", "theConnector", "_", "monthUnit"], "postprocess": (d) => makeDate({ ordinalWeekday: -1, weekday: d[2], monthFromRef: true }) },
875
- { "name": "ordinalWeekdayOfMonth", "symbols": ["ordinalWord", "_", "dayUnit", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeDate({ month: d[6], day: parseOrdinalWord(d[0]) }) },
876
- { "name": "ordinalWeekdayOfMonth", "symbols": ["lastRelative", "_", "dayUnit", "_", "ofConnector", "_", "month"], "postprocess": (d) => makeDate({ month: d[6], day: -1, lastDayOfMonth: true }) },
877
- { "name": "ordinalWeekdayOfMonth", "symbols": ["lastRelative", "_", "dayUnit", "_", "ofConnector", "_", "theConnector", "_", "monthUnit"], "postprocess": (d) => makeDate({ lastDayOfMonth: true, monthFromRef: true }) },
878
- { "name": "ordinalWeekdayOfMonth", "symbols": ["ordinalWord", "_", "dayUnit", "_", "ofConnector", "_", "nextRelative", "_", "monthUnit"], "postprocess": (d) => makeDate({ ordinalWeekday: parseOrdinalWord(d[0]), dayOfMonth: true, nextMonth: true }) },
879
- { "name": "monthDayYear", "symbols": ["monthDay", "_", "year"], "postprocess": (d) => ({ ...d[0], year: d[2] }) },
880
- { "name": "monthDayYear", "symbols": ["monthDay", lexer.has("comma") ? { type: "comma" } : comma, "_", "year"], "postprocess": (d) => ({ ...d[0], year: d[3] }) },
881
- { "name": "dateFormat", "symbols": [lexer.has("integer") ? { type: "integer" } : integer, lexer.has("dash") ? { type: "dash" } : dash, lexer.has("integer") ? { type: "integer" } : integer, lexer.has("dash") ? { type: "dash" } : dash, lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d) => {
882
- const parts = [parseInt(d[0].value, 10), parseInt(d[2].value, 10), parseInt(d[4].value, 10)];
883
- if (parts[0] > 1e3) {
884
- return makeDate({ year: parts[0], month: parts[1], day: parts[2] });
885
- }
886
- return makeDate({ formatParts: parts, separator: "-" });
887
- } },
888
- { "name": "dateFormat", "symbols": [lexer.has("integer") ? { type: "integer" } : integer, lexer.has("slash") ? { type: "slash" } : slash, lexer.has("integer") ? { type: "integer" } : integer, lexer.has("slash") ? { type: "slash" } : slash, lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d) => {
889
- const parts = [parseInt(d[0].value, 10), parseInt(d[2].value, 10), parseInt(d[4].value, 10)];
890
- if (parts[0] > 1e3) {
891
- return makeDate({ year: parts[0], month: parts[1], day: parts[2] });
892
- }
893
- return makeDate({ formatParts: parts, separator: "/" });
894
- } },
895
- { "name": "dateWithTime", "symbols": ["date", "_", "atConnector", "_", "time"], "postprocess": (d) => ({ ...d[0], time: d[4] }) },
896
- { "name": "dateWithTime", "symbols": ["date", "_", "atConnector", "_", "timeWord"], "postprocess": (d) => ({ ...d[0], time: { special: d[4] } }) },
897
- { "name": "dateWithTime", "symbols": ["time", "_", "date"], "postprocess": (d) => ({ ...d[2], time: d[0] }) },
898
- { "name": "dateWithTime", "symbols": ["timeWord", "_", "date"], "postprocess": (d) => ({ ...d[2], time: { special: d[0] } }) },
899
- { "name": "dateWithTime", "symbols": ["date", "_", "time"], "postprocess": (d) => ({ ...d[0], time: d[2] }) },
900
- { "name": "dateWithTime", "symbols": ["timeWord", "_", "onConnector", "_", "date"], "postprocess": (d) => ({ ...d[4], time: { special: d[0] } }) },
901
- { "name": "dateWithTime", "symbols": ["timeWord", "_", "onConnector", "_", "weekday"], "postprocess": (d) => makeDate({ weekday: d[4], time: { special: d[0] } }) },
902
- { "name": "dateWithTime", "symbols": ["midnight", "_", "tonightKeyword"], "postprocess": (d) => makeDate({ special: "tonight", time: { special: "midnight" } }) },
903
- { "name": "complexDate", "symbols": ["nextRelative", "_", "unit", "_", "weekday", "_", "time"], "postprocess": (d) => makeDate({ relative: "next", period: d[2], weekday: d[4], time: d[6] }) },
904
- { "name": "complexDate", "symbols": ["nextRelative", "_", "unit", "_", "weekday"], "postprocess": (d) => makeDate({ relative: "next", period: d[2], weekday: d[4] }) },
905
- { "name": "complexDate", "symbols": ["lastRelative", "_", "unit", "_", "weekday", "_", "time"], "postprocess": (d) => makeDate({ relative: "last", period: d[2], weekday: d[4], time: d[6] }) },
906
- { "name": "complexDate", "symbols": ["lastRelative", "_", "unit", "_", "weekday"], "postprocess": (d) => makeDate({ relative: "last", period: d[2], weekday: d[4] }) },
907
- { "name": "complexDate", "symbols": ["thisRelative", "_", "unit", "_", "weekday", "_", "time"], "postprocess": (d) => makeDate({ relative: "this", period: d[2], weekday: d[4], time: d[6] }) },
908
- { "name": "complexDate", "symbols": ["thisRelative", "_", "unit", "_", "weekday"], "postprocess": (d) => makeDate({ relative: "this", period: d[2], weekday: d[4] }) },
909
- { "name": "time", "symbols": [lexer.has("time") ? { type: "time" } : time], "postprocess": (d) => {
910
- const parts = d[0].value.split(":");
911
- return { hour: parseInt(parts[0], 10), minute: parseInt(parts[1], 10) };
912
- } },
913
- { "name": "time", "symbols": [lexer.has("time") ? { type: "time" } : time, "_", lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
914
- const parts = d[0].value.split(":");
915
- let hour = parseInt(parts[0], 10);
916
- if (d[2].value === "pm" && hour !== 12) hour += 12;
917
- if (d[2].value === "am" && hour === 12) hour = 0;
918
- return { hour, minute: parseInt(parts[1], 10) };
919
- } },
920
- { "name": "time", "symbols": [lexer.has("time") ? { type: "time" } : time, lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
921
- const parts = d[0].value.split(":");
922
- let hour = parseInt(parts[0], 10);
923
- if (d[1].value === "pm" && hour !== 12) hour += 12;
924
- if (d[1].value === "am" && hour === 12) hour = 0;
925
- return { hour, minute: parseInt(parts[1], 10) };
926
- } },
927
- { "name": "time", "symbols": [lexer.has("integer") ? { type: "integer" } : integer, "_", lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
928
- let hour = parseInt(d[0].value, 10);
929
- if (d[2].value === "pm" && hour !== 12) hour += 12;
930
- if (d[2].value === "am" && hour === 12) hour = 0;
931
- return { hour, minute: 0 };
932
- } },
933
- { "name": "time", "symbols": [lexer.has("integer") ? { type: "integer" } : integer, lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
934
- let hour = parseInt(d[0].value, 10);
935
- if (d[1].value === "pm" && hour !== 12) hour += 12;
936
- if (d[1].value === "am" && hour === 12) hour = 0;
937
- return { hour, minute: 0 };
938
- } },
939
- { "name": "time", "symbols": ["quarterKeyword", "_", "pastConnector", "_", "hourNumber"], "postprocess": (d) => ({ hour: d[4], minute: 15 }) },
940
- { "name": "time", "symbols": ["quarterKeyword", "_", "pastConnector", "_", "hourNumber", lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
941
- let hour = d[4];
942
- if (d[5].value === "pm" && hour !== 12) hour += 12;
943
- if (d[5].value === "am" && hour === 12) hour = 0;
944
- return { hour, minute: 15 };
945
- } },
946
- { "name": "time", "symbols": ["halfWord", "_", "pastConnector", "_", "hourNumber"], "postprocess": (d) => ({ hour: d[4], minute: 30 }) },
947
- { "name": "time", "symbols": ["halfWord", "_", "pastConnector", "_", "hourNumber", lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
948
- let hour = d[4];
949
- if (d[5].value === "pm" && hour !== 12) hour += 12;
950
- if (d[5].value === "am" && hour === 12) hour = 0;
951
- return { hour, minute: 30 };
952
- } },
953
- { "name": "time", "symbols": ["quarterKeyword", "_", "toConnector", "_", "hourNumber"], "postprocess": (d) => ({ hour: d[4] - 1, minute: 45 }) },
954
- { "name": "time", "symbols": ["quarterKeyword", "_", "toConnector", "_", "hourNumber", lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
955
- let hour = d[4];
956
- if (d[5].value === "pm" && hour !== 12) hour += 12;
957
- if (d[5].value === "am" && hour === 12) hour = 0;
958
- return { hour: hour - 1, minute: 45 };
959
- } },
960
- { "name": "time", "symbols": ["number", "_", "pastConnector", "_", "hourNumber"], "postprocess": (d) => ({ hour: d[4], minute: d[0] }) },
961
- { "name": "time", "symbols": ["number", "_", "pastConnector", "_", "hourNumber", lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
962
- let hour = d[4];
963
- if (d[5].value === "pm" && hour !== 12) hour += 12;
964
- if (d[5].value === "am" && hour === 12) hour = 0;
965
- return { hour, minute: d[0] };
966
- } },
967
- { "name": "time", "symbols": ["number", "_", "toConnector", "_", "hourNumber"], "postprocess": (d) => ({ hour: d[4] - 1, minute: 60 - d[0] }) },
968
- { "name": "time", "symbols": ["number", "_", "toConnector", "_", "hourNumber", lexer.has("ampm") ? { type: "ampm" } : ampm], "postprocess": (d) => {
969
- let hour = d[4];
970
- if (d[5].value === "pm" && hour !== 12) hour += 12;
971
- if (d[5].value === "am" && hour === 12) hour = 0;
972
- return { hour: hour - 1, minute: 60 - d[0] };
973
- } },
974
- { "name": "time", "symbols": ["number", "_", "toConnector", "_", "noon"], "postprocess": (d) => ({ hour: 11, minute: 60 - d[0] }) },
975
- { "name": "time", "symbols": ["number", "_", "toConnector", "_", "midnight"], "postprocess": (d) => ({ hour: 23, minute: 60 - d[0] }) },
976
- { "name": "time", "symbols": ["quarterKeyword", "_", "toConnector", "_", "noon"], "postprocess": (d) => ({ hour: 11, minute: 45 }) },
977
- { "name": "time", "symbols": ["quarterKeyword", "_", "toConnector", "_", "midnight"], "postprocess": (d) => ({ hour: 23, minute: 45 }) },
978
- { "name": "timeWord", "symbols": ["noon"], "postprocess": (d) => "noon" },
979
- { "name": "timeWord", "symbols": ["midnight"], "postprocess": (d) => "midnight" },
980
- { "name": "number", "symbols": [lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d) => parseInt(d[0].value, 10) },
981
- { "name": "number", "symbols": [lexer.has("decimal") ? { type: "decimal" } : decimal], "postprocess": (d) => parseFloat(d[0].value) },
982
- { "name": "year", "symbols": [lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d, _, reject) => {
983
- const val = parseInt(d[0].value, 10);
984
- if (val >= 1900 && val <= 2100) return val;
985
- return reject;
986
- } },
987
- { "name": "dayNumber", "symbols": [lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d, _, reject) => {
988
- const val = parseInt(d[0].value, 10);
989
- if (val < 1 || val > 31) return reject;
990
- return val;
991
- } },
992
- { "name": "dayNumber", "symbols": [lexer.has("ordinal") ? { type: "ordinal" } : ordinal], "postprocess": (d) => parseOrdinal(d[0].value) },
993
- { "name": "month", "symbols": [lexer.has("month") ? { type: "month" } : month], "postprocess": (d) => parseMonth(d[0].value) },
994
- { "name": "weekday", "symbols": [lexer.has("weekday") ? { type: "weekday" } : weekday], "postprocess": (d) => d[0].value },
995
- { "name": "quarter", "symbols": [lexer.has("quarter") ? { type: "quarter" } : quarter], "postprocess": first },
996
- { "name": "half", "symbols": [lexer.has("half") ? { type: "half" } : half], "postprocess": first },
997
- { "name": "season", "symbols": [lexer.has("season") ? { type: "season" } : season], "postprocess": (d) => d[0].value },
998
- { "name": "unit", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d) => d[0].value },
999
- { "name": "quarterUnit", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => {
1000
- const val = d[0].value.toLowerCase();
1001
- if (val === "quarter" || val === "quarters") return val;
1002
- return reject;
1003
- } },
1004
- { "name": "halfUnit", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => {
1005
- const val = d[0].value.toLowerCase();
1006
- if (val === "half") return val;
1007
- return reject;
1008
- } },
1009
- { "name": "yearUnit", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => {
1010
- const val = d[0].value.toLowerCase();
1011
- if (val === "year" || val === "years" || val === "yr" || val === "yrs") return val;
1012
- return reject;
1013
- } },
1014
- { "name": "monthUnit", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => {
1015
- const val = d[0].value.toLowerCase();
1016
- if (val === "month" || val === "months" || val === "mo" || val === "mos") return val;
1017
- return reject;
1018
- } },
1019
- { "name": "wordNumber", "symbols": [lexer.has("wordNumber") ? { type: "wordNumber" } : wordNumber], "postprocess": (d) => d[0].value },
1020
- { "name": "ordinalWord", "symbols": [lexer.has("ordinalWord") ? { type: "ordinalWord" } : ordinalWord], "postprocess": (d) => d[0].value },
1021
- { "name": "ordinalWord", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => {
1022
- if (d[0].value === "second") return "second";
1023
- return reject;
1024
- } },
1025
- { "name": "ordinal", "symbols": [lexer.has("ordinal") ? { type: "ordinal" } : ordinal], "postprocess": (d) => d[0].value },
1026
- { "name": "halfWord", "symbols": [lexer.has("halfWord") ? { type: "halfWord" } : halfWord], "postprocess": (d) => d[0].value },
1027
- { "name": "toConnector", "symbols": [lexer.has("kw_to") ? { type: "kw_to" } : kw_to], "postprocess": first },
1028
- { "name": "fromConnector", "symbols": [lexer.has("kw_from") ? { type: "kw_from" } : kw_from], "postprocess": first },
1029
- { "name": "forConnector", "symbols": [lexer.has("kw_for") ? { type: "kw_for" } : kw_for], "postprocess": first },
1030
- { "name": "inConnector", "symbols": [lexer.has("kw_in") ? { type: "kw_in" } : kw_in], "postprocess": first },
1031
- { "name": "onConnector", "symbols": [lexer.has("kw_on") ? { type: "kw_on" } : kw_on], "postprocess": first },
1032
- { "name": "atConnector", "symbols": [lexer.has("kw_at") ? { type: "kw_at" } : kw_at], "postprocess": first },
1033
- { "name": "ofConnector", "symbols": [lexer.has("kw_of") ? { type: "kw_of" } : kw_of], "postprocess": first },
1034
- { "name": "theConnector", "symbols": [lexer.has("kw_the") ? { type: "kw_the" } : kw_the], "postprocess": first },
1035
- { "name": "andConnector", "symbols": [lexer.has("kw_and") ? { type: "kw_and" } : kw_and], "postprocess": first },
1036
- { "name": "betweenConnector", "symbols": [lexer.has("kw_between") ? { type: "kw_between" } : kw_between], "postprocess": first },
1037
- { "name": "throughConnector", "symbols": [lexer.has("kw_through") ? { type: "kw_through" } : kw_through], "postprocess": first },
1038
- { "name": "untilConnector", "symbols": [lexer.has("kw_until") ? { type: "kw_until" } : kw_until], "postprocess": first },
1039
- { "name": "withinConnector", "symbols": [lexer.has("kw_within") ? { type: "kw_within" } : kw_within], "postprocess": first },
1040
- { "name": "overConnector", "symbols": [lexer.has("kw_over") ? { type: "kw_over" } : kw_over], "postprocess": first },
1041
- { "name": "duringConnector", "symbols": [lexer.has("kw_during") ? { type: "kw_during" } : kw_during], "postprocess": first },
1042
- { "name": "startingConnector", "symbols": [lexer.has("kw_starting") ? { type: "kw_starting" } : kw_starting], "postprocess": first },
1043
- { "name": "byConnector", "symbols": [lexer.has("kw_by") ? { type: "kw_by" } : kw_by], "postprocess": first },
1044
- { "name": "aroundConnector", "symbols": [lexer.has("kw_around") ? { type: "kw_around" } : kw_around], "postprocess": first },
1045
- { "name": "aboutConnector", "symbols": [lexer.has("kw_about") ? { type: "kw_about" } : kw_about], "postprocess": first },
1046
- { "name": "roughlyConnector", "symbols": [lexer.has("kw_roughly") ? { type: "kw_roughly" } : kw_roughly], "postprocess": first },
1047
- { "name": "approximatelyConnector", "symbols": [lexer.has("kw_approximately") ? { type: "kw_approximately" } : kw_approximately], "postprocess": first },
1048
- { "name": "sometimeConnector", "symbols": [lexer.has("kw_sometime") ? { type: "kw_sometime" } : kw_sometime], "postprocess": first },
1049
- { "name": "afterConnector", "symbols": [lexer.has("kw_after") ? { type: "kw_after" } : kw_after], "postprocess": first },
1050
- { "name": "beforeConnector", "symbols": [lexer.has("kw_before") ? { type: "kw_before" } : kw_before], "postprocess": first },
1051
- { "name": "endConnector", "symbols": [lexer.has("kw_end") ? { type: "kw_end" } : kw_end], "postprocess": first },
1052
- { "name": "beginningConnector", "symbols": [lexer.has("kw_beginning") ? { type: "kw_beginning" } : kw_beginning], "postprocess": first },
1053
- { "name": "startConnector", "symbols": [lexer.has("kw_start") ? { type: "kw_start" } : kw_start], "postprocess": first },
1054
- { "name": "middleConnector", "symbols": [lexer.has("kw_middle") ? { type: "kw_middle" } : kw_middle], "postprocess": first },
1055
- { "name": "agoConnector", "symbols": [lexer.has("kw_ago") ? { type: "kw_ago" } : kw_ago], "postprocess": first },
1056
- { "name": "henceConnector", "symbols": [lexer.has("otherKeyword") ? { type: "otherKeyword" } : otherKeyword], "postprocess": (d, _, reject) => d[0].value === "hence" ? d[0] : reject },
1057
- { "name": "laterConnector", "symbols": [lexer.has("otherKeyword") ? { type: "otherKeyword" } : otherKeyword], "postprocess": (d, _, reject) => d[0].value === "later" ? d[0] : reject },
1058
- { "name": "earlyModifier", "symbols": [lexer.has("kw_early") ? { type: "kw_early" } : kw_early], "postprocess": first },
1059
- { "name": "midModifier", "symbols": [lexer.has("kw_mid") ? { type: "kw_mid" } : kw_mid], "postprocess": first },
1060
- { "name": "lateModifier", "symbols": [lexer.has("kw_late") ? { type: "kw_late" } : kw_late], "postprocess": first },
1061
- { "name": "nextRelative", "symbols": [lexer.has("kw_next") ? { type: "kw_next" } : kw_next], "postprocess": first },
1062
- { "name": "lastRelative", "symbols": [lexer.has("kw_last") ? { type: "kw_last" } : kw_last], "postprocess": first },
1063
- { "name": "thisRelative", "symbols": [lexer.has("kw_this") ? { type: "kw_this" } : kw_this], "postprocess": first },
1064
- { "name": "previousRelative", "symbols": [lexer.has("kw_previous") ? { type: "kw_previous" } : kw_previous], "postprocess": first },
1065
- { "name": "comingRelative", "symbols": [lexer.has("kw_coming") ? { type: "kw_coming" } : kw_coming], "postprocess": first },
1066
- { "name": "upcomingRelative", "symbols": [lexer.has("kw_upcoming") ? { type: "kw_upcoming" } : kw_upcoming], "postprocess": first },
1067
- { "name": "pastRelative", "symbols": [lexer.has("kw_past") ? { type: "kw_past" } : kw_past], "postprocess": first },
1068
- { "name": "today", "symbols": [lexer.has("kw_today") ? { type: "kw_today" } : kw_today], "postprocess": first },
1069
- { "name": "tomorrow", "symbols": [lexer.has("kw_tomorrow") ? { type: "kw_tomorrow" } : kw_tomorrow], "postprocess": first },
1070
- { "name": "yesterday", "symbols": [lexer.has("kw_yesterday") ? { type: "kw_yesterday" } : kw_yesterday], "postprocess": first },
1071
- { "name": "now", "symbols": [lexer.has("kw_now") ? { type: "kw_now" } : kw_now], "postprocess": first },
1072
- { "name": "noon", "symbols": [lexer.has("kw_noon") ? { type: "kw_noon" } : kw_noon], "postprocess": first },
1073
- { "name": "midnight", "symbols": [lexer.has("kw_midnight") ? { type: "kw_midnight" } : kw_midnight], "postprocess": first },
1074
- { "name": "quarterKeyword", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => d[0].value === "quarter" ? d[0] : reject },
1075
- { "name": "hourNumber", "symbols": [lexer.has("integer") ? { type: "integer" } : integer], "postprocess": (d, _, reject) => {
1076
- const val = parseInt(d[0].value, 10);
1077
- if (val < 1 || val > 12) return reject;
1078
- return val;
1079
- } },
1080
- { "name": "pastConnector", "symbols": [lexer.has("kw_past") ? { type: "kw_past" } : kw_past], "postprocess": first },
1081
- { "name": "weekendKeyword", "symbols": [lexer.has("kw_weekend") ? { type: "kw_weekend" } : kw_weekend], "postprocess": first },
1082
- { "name": "tonightKeyword", "symbols": [lexer.has("kw_tonight") ? { type: "kw_tonight" } : kw_tonight], "postprocess": first },
1083
- { "name": "nightKeyword", "symbols": [lexer.has("kw_night") ? { type: "kw_night" } : kw_night], "postprocess": first },
1084
- { "name": "fortnightKeyword", "symbols": [lexer.has("kw_fortnight") ? { type: "kw_fortnight" } : kw_fortnight], "postprocess": first },
1085
- { "name": "laterKeyword", "symbols": [lexer.has("otherKeyword") ? { type: "otherKeyword" } : otherKeyword], "postprocess": (d, _, reject) => d[0].value === "later" ? d[0] : reject },
1086
- { "name": "earlierKeyword", "symbols": [lexer.has("otherKeyword") ? { type: "otherKeyword" } : otherKeyword], "postprocess": (d, _, reject) => d[0].value === "earlier" ? d[0] : reject },
1087
- { "name": "weekKeyword", "symbols": [lexer.has("unit") ? { type: "unit" } : unit], "postprocess": (d, _, reject) => {
1088
- const val = d[0].value.toLowerCase();
1089
- if (val === "week" || val === "weeks") return d[0];
1090
- return reject;
1091
- } },
1092
- { "name": "businessKeyword", "symbols": [lexer.has("kw_business") ? { type: "kw_business" } : kw_business], "postprocess": first },
1093
- { "name": "eodKeyword", "symbols": [lexer.has("kw_eod") ? { type: "kw_eod" } : kw_eod], "postprocess": first },
1094
- { "name": "cobKeyword", "symbols": [lexer.has("kw_cob") ? { type: "kw_cob" } : kw_cob], "postprocess": first },
1095
- { "name": "closeKeyword", "symbols": [lexer.has("kw_close") ? { type: "kw_close" } : kw_close], "postprocess": first },
1096
- { "name": "_$ebnf$1", "symbols": [] },
1097
- { "name": "_$ebnf$1", "symbols": ["_$ebnf$1", lexer.has("ws") ? { type: "ws" } : ws], "postprocess": (d) => d[0].concat([d[1]]) },
1098
- { "name": "_", "symbols": ["_$ebnf$1"], "postprocess": nuller }
1099
- ],
1100
- ParserStart: "main"
1101
- };
1102
- var grammar_default = grammar;
1103
-
1104
- // src/utils/weekday.ts
1105
- function getNextWeekday(weekday2, referenceDate) {
1106
- const result = new Date(
1107
- Date.UTC(
1108
- referenceDate.getUTCFullYear(),
1109
- referenceDate.getUTCMonth(),
1110
- referenceDate.getUTCDate()
1111
- )
1112
- );
1113
- const currentDay = result.getUTCDay();
1114
- let daysToAdd = weekday2 - currentDay;
1115
- if (daysToAdd <= 0) {
1116
- daysToAdd += 7;
1117
- }
1118
- result.setUTCDate(result.getUTCDate() + daysToAdd);
1119
- return result;
1120
- }
1121
- function getLastWeekday(weekday2, referenceDate) {
1122
- const result = new Date(
1123
- Date.UTC(
1124
- referenceDate.getUTCFullYear(),
1125
- referenceDate.getUTCMonth(),
1126
- referenceDate.getUTCDate()
1127
- )
1128
- );
1129
- const currentDay = result.getUTCDay();
1130
- let daysToSubtract = currentDay - weekday2;
1131
- if (daysToSubtract <= 0) {
1132
- daysToSubtract += 7;
1133
- }
1134
- result.setUTCDate(result.getUTCDate() - daysToSubtract);
1135
- return result;
1136
- }
1137
- function getThisWeekday(weekday2, referenceDate, weekStartsOn) {
1138
- const result = new Date(
1139
- Date.UTC(
1140
- referenceDate.getUTCFullYear(),
1141
- referenceDate.getUTCMonth(),
1142
- referenceDate.getUTCDate()
1143
- )
1144
- );
1145
- const currentDay = result.getUTCDay();
1146
- const weekStart = weekStartsOn === "monday" ? 1 : 0;
1147
- let daysSinceWeekStart = currentDay - weekStart;
1148
- if (daysSinceWeekStart < 0) {
1149
- daysSinceWeekStart += 7;
1150
- }
1151
- let daysToTarget = weekday2 - weekStart;
1152
- if (daysToTarget < 0) {
1153
- daysToTarget += 7;
1154
- }
1155
- const daysToMove = daysToTarget - daysSinceWeekStart;
1156
- result.setUTCDate(result.getUTCDate() + daysToMove);
1157
- return result;
1158
- }
1159
-
1160
- // src/utils/constants.ts
1161
- var MS_PER_SECOND = 1e3;
1162
- var MS_PER_MINUTE = 60 * MS_PER_SECOND;
1163
- var MS_PER_HOUR = 60 * MS_PER_MINUTE;
1164
- var MS_PER_DAY = 24 * MS_PER_HOUR;
1165
- var MS_PER_WEEK = 7 * MS_PER_DAY;
1166
- var MS_PER_MONTH = 30 * MS_PER_DAY;
1167
- var MS_PER_YEAR = 365 * MS_PER_DAY;
1168
- var WEEKDAY_MAP = {
1169
- sunday: 0,
1170
- sun: 0,
1171
- monday: 1,
1172
- mon: 1,
1173
- tuesday: 2,
1174
- tue: 2,
1175
- tues: 2,
1176
- wednesday: 3,
1177
- wed: 3,
1178
- thursday: 4,
1179
- thu: 4,
1180
- thur: 4,
1181
- thurs: 4,
1182
- friday: 5,
1183
- fri: 5,
1184
- saturday: 6,
1185
- sat: 6
1186
- };
1187
- var FISCAL_START_MONTH = {
1188
- january: 0,
1189
- april: 3,
1190
- july: 6,
1191
- october: 9
1192
- };
1193
-
1194
- // src/converters/date.ts
1195
- function applyTime(date, time2) {
1196
- if (time2.special === "noon") {
1197
- date.setUTCHours(12, 0, 0, 0);
1198
- } else if (time2.special === "midnight") {
1199
- date.setUTCHours(0, 0, 0, 0);
1200
- } else if (time2.hour !== void 0) {
1201
- date.setUTCHours(time2.hour, time2.minute ?? 0, 0, 0);
1202
- }
1203
- }
1204
- function convertSpecialDay(node, opts) {
1205
- const ref = opts.referenceDate;
1206
- let date;
1207
- switch (node.special) {
1208
- case "today":
1209
- date = new Date(
1210
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())
1211
- );
1212
- break;
1213
- case "tomorrow":
1214
- date = new Date(
1215
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() + 1)
1216
- );
1217
- break;
1218
- case "yesterday":
1219
- date = new Date(
1220
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() - 1)
1221
- );
1222
- break;
1223
- case "now":
1224
- date = new Date(ref);
1225
- break;
1226
- case "dayAfterTomorrow":
1227
- date = new Date(
1228
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() + 2)
1229
- );
1230
- break;
1231
- case "dayBeforeYesterday":
1232
- date = new Date(
1233
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() - 2)
1234
- );
1235
- break;
1236
- default:
1237
- date = new Date(ref);
1238
- }
1239
- if (node.time) {
1240
- applyTime(date, node.time);
1241
- }
1242
- return date;
1243
- }
1244
- function convertTimeOnly(node, opts) {
1245
- const ref = opts.referenceDate;
1246
- const date = new Date(
1247
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())
1248
- );
1249
- if (node.time) {
1250
- applyTime(date, node.time);
1251
- }
1252
- return date;
1253
- }
1254
- function convertWeekday(node, opts) {
1255
- const ref = opts.referenceDate;
1256
- const weekdayNum = WEEKDAY_MAP[node.weekday.toLowerCase()] ?? 0;
1257
- let date;
1258
- if (node.period && node.period.toLowerCase() === "week") {
1259
- let weekRef;
1260
- switch (node.relative) {
1261
- case "next":
1262
- weekRef = new Date(
1263
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() + 7)
1264
- );
1265
- break;
1266
- case "last":
1267
- weekRef = new Date(
1268
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() - 7)
1269
- );
1270
- break;
1271
- default:
1272
- weekRef = ref;
1273
- }
1274
- date = getThisWeekday(weekdayNum, weekRef, opts.weekStartsOn);
1275
- } else {
1276
- switch (node.relative) {
1277
- case "next":
1278
- date = getNextWeekday(weekdayNum, ref);
1279
- break;
1280
- case "last":
1281
- date = getLastWeekday(weekdayNum, ref);
1282
- break;
1283
- case "this":
1284
- date = getThisWeekday(weekdayNum, ref, opts.weekStartsOn);
1285
- break;
1286
- default:
1287
- date = getNextWeekday(weekdayNum, ref);
1288
- }
1289
- }
1290
- if (node.time) {
1291
- applyTime(date, node.time);
1292
- }
1293
- return date;
1294
- }
1295
- function convertDateFormat(node, opts) {
1296
- const ref = opts.referenceDate;
1297
- const parts = node.formatParts;
1298
- if (parts.length < 3 || parts[0] === void 0 || parts[1] === void 0 || parts[2] === void 0) {
1299
- return ref;
1300
- }
1301
- const [p0, p1, p2] = parts;
1302
- let year, month2, day;
1303
- if (p2 > 1e3) {
1304
- if (opts.dateFormat === "intl") {
1305
- day = p0;
1306
- month2 = p1;
1307
- year = p2;
1308
- } else {
1309
- if (p0 > 12 && p1 <= 12) {
1310
- day = p0;
1311
- month2 = p1;
1312
- year = p2;
1313
- } else {
1314
- month2 = p0;
1315
- day = p1;
1316
- year = p2;
1317
- }
1318
- }
1319
- } else {
1320
- month2 = p0;
1321
- day = p1;
1322
- year = p2 < 100 ? p2 > 50 ? 1900 + p2 : 2e3 + p2 : p2;
1323
- }
1324
- return new Date(Date.UTC(year, month2 - 1, day));
1325
- }
1326
- function convertMonthDay(node, opts) {
1327
- const ref = opts.referenceDate;
1328
- let year = node.year ?? ref.getUTCFullYear();
1329
- const month2 = typeof node.month === "number" ? node.month - 1 : 0;
1330
- if (node.relativeMonth) {
1331
- const currentMonth = ref.getUTCMonth();
1332
- if (node.relativeMonth === "last") {
1333
- if (month2 >= currentMonth) {
1334
- year--;
1335
- }
1336
- } else if (node.relativeMonth === "next") {
1337
- if (month2 <= currentMonth) {
1338
- year++;
1339
- }
1340
- }
1341
- } else if (node.year === void 0 && month2 < ref.getUTCMonth()) {
1342
- year++;
1343
- }
1344
- const date = new Date(Date.UTC(year, month2, node.day));
1345
- if (date.getUTCMonth() !== month2 || date.getUTCDate() !== node.day) {
1346
- throw new Error("Invalid date");
1347
- }
1348
- if (node.time) {
1349
- applyTime(date, node.time);
1350
- }
1351
- return date;
1352
- }
1353
- function convertOrdinalWeekdayOfMonth(node, opts) {
1354
- const ref = opts.referenceDate;
1355
- const ordinal2 = node.ordinalWeekday;
1356
- const weekdayName = node.weekday.toLowerCase();
1357
- const weekdayNum = WEEKDAY_MAP[weekdayName] ?? 0;
1358
- let month2;
1359
- let year;
1360
- if (node.monthFromRef) {
1361
- month2 = ref.getUTCMonth();
1362
- year = ref.getUTCFullYear();
1363
- } else if (node.nextMonth) {
1364
- month2 = ref.getUTCMonth() + 1;
1365
- year = ref.getUTCFullYear();
1366
- if (month2 > 11) {
1367
- month2 = 0;
1368
- year++;
1369
- }
1370
- } else {
1371
- month2 = typeof node.month === "number" ? node.month - 1 : ref.getUTCMonth();
1372
- year = ref.getUTCFullYear();
1373
- if (month2 < ref.getUTCMonth()) {
1374
- year++;
1375
- }
1376
- }
1377
- if (ordinal2 === -1) {
1378
- const lastDay2 = new Date(Date.UTC(year, month2 + 1, 0));
1379
- let day2 = lastDay2.getUTCDate();
1380
- let date2 = new Date(Date.UTC(year, month2, day2));
1381
- while (date2.getUTCDay() !== weekdayNum) {
1382
- day2--;
1383
- date2 = new Date(Date.UTC(year, month2, day2));
1384
- }
1385
- return date2;
1386
- }
1387
- let count = 0;
1388
- for (let day2 = 1; day2 <= 31; day2++) {
1389
- const date2 = new Date(Date.UTC(year, month2, day2));
1390
- if (date2.getUTCMonth() !== month2) {
1391
- break;
1392
- }
1393
- if (date2.getUTCDay() === weekdayNum) {
1394
- count++;
1395
- if (count === ordinal2) {
1396
- return date2;
1397
- }
1398
- }
1399
- }
1400
- const lastDay = new Date(Date.UTC(year, month2 + 1, 0));
1401
- let day = lastDay.getUTCDate();
1402
- let date = new Date(Date.UTC(year, month2, day));
1403
- while (date.getUTCDay() !== weekdayNum) {
1404
- day--;
1405
- date = new Date(Date.UTC(year, month2, day));
1406
- }
1407
- return date;
1408
- }
1409
- function convertLastDayOfMonth(node, opts) {
1410
- const ref = opts.referenceDate;
1411
- let month2;
1412
- let year;
1413
- if (node.monthFromRef) {
1414
- month2 = ref.getUTCMonth();
1415
- year = ref.getUTCFullYear();
1416
- } else if (node.nextMonth) {
1417
- month2 = ref.getUTCMonth() + 1;
1418
- year = ref.getUTCFullYear();
1419
- if (month2 > 11) {
1420
- month2 = 0;
1421
- year++;
1422
- }
1423
- } else {
1424
- month2 = typeof node.month === "number" ? node.month - 1 : ref.getUTCMonth();
1425
- year = ref.getUTCFullYear();
1426
- if (month2 < ref.getUTCMonth()) {
1427
- year++;
1428
- }
1429
- }
1430
- return new Date(Date.UTC(year, month2 + 1, 0));
1431
- }
1432
- function convertDayOnly(node, opts) {
1433
- const ref = opts.referenceDate;
1434
- const day = node.day;
1435
- const refDay = ref.getUTCDate();
1436
- const refMonth = ref.getUTCMonth();
1437
- const refYear = ref.getUTCFullYear();
1438
- let month2 = refMonth;
1439
- let year = refYear;
1440
- if (day < refDay) {
1441
- month2 = refMonth + 1;
1442
- if (month2 > 11) {
1443
- month2 = 0;
1444
- year++;
1445
- }
1446
- }
1447
- let date = new Date(Date.UTC(year, month2, day));
1448
- while (date.getUTCDate() !== day) {
1449
- month2++;
1450
- if (month2 > 11) {
1451
- month2 = 0;
1452
- year++;
1453
- }
1454
- date = new Date(Date.UTC(year, month2, day));
1455
- }
1456
- if (node.time) {
1457
- applyTime(date, node.time);
1458
- }
1459
- return date;
1460
- }
1461
- function convertRelativePeriod(node, opts) {
1462
- const ref = opts.referenceDate;
1463
- const period = node.period.toLowerCase();
1464
- switch (period) {
1465
- case "day": {
1466
- const start = new Date(
1467
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())
1468
- );
1469
- if (node.relative === "next") {
1470
- start.setUTCDate(start.getUTCDate() + 1);
1471
- } else if (node.relative === "last") {
1472
- start.setUTCDate(start.getUTCDate() - 1);
1473
- }
1474
- return start;
1475
- }
1476
- case "week": {
1477
- const start = new Date(
1478
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())
1479
- );
1480
- const weekStart = opts.weekStartsOn === "monday" ? 1 : 0;
1481
- const currentDay = start.getUTCDay();
1482
- const daysFromStart = (currentDay - weekStart + 7) % 7;
1483
- start.setUTCDate(start.getUTCDate() - daysFromStart);
1484
- if (node.relative === "next") {
1485
- start.setUTCDate(start.getUTCDate() + 7);
1486
- } else if (node.relative === "last") {
1487
- start.setUTCDate(start.getUTCDate() - 7);
1488
- }
1489
- return start;
1490
- }
1491
- case "month":
1492
- if (node.relative === "next") {
1493
- return new Date(
1494
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth() + 1, 1)
1495
- );
1496
- } else if (node.relative === "last") {
1497
- return new Date(
1498
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth() - 1, 1)
1499
- );
1500
- }
1501
- return new Date(Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), 1));
1502
- case "year":
1503
- if (node.relative === "next") {
1504
- return new Date(Date.UTC(ref.getUTCFullYear() + 1, 0, 1));
1505
- } else if (node.relative === "last") {
1506
- return new Date(Date.UTC(ref.getUTCFullYear() - 1, 0, 1));
1507
- }
1508
- return new Date(Date.UTC(ref.getUTCFullYear(), 0, 1));
1509
- default:
1510
- return new Date(ref);
1511
- }
1512
- }
1513
- function convertDateNode(node, opts) {
1514
- if (node.special) {
1515
- return convertSpecialDay(node, opts);
1516
- }
1517
- if (node.timeOnly && node.time) {
1518
- return convertTimeOnly(node, opts);
1519
- }
1520
- if (node.ordinalWeekday !== void 0 && node.weekday !== void 0) {
1521
- return convertOrdinalWeekdayOfMonth(node, opts);
1522
- }
1523
- if (node.weekday) {
1524
- return convertWeekday(node, opts);
1525
- }
1526
- if (node.formatParts) {
1527
- return convertDateFormat(node, opts);
1528
- }
1529
- if (node.month !== void 0 && node.day !== void 0) {
1530
- return convertMonthDay(node, opts);
1531
- }
1532
- if (node.dayOnly && node.day !== void 0) {
1533
- return convertDayOnly(node, opts);
1534
- }
1535
- if (node.lastDayOfMonth) {
1536
- return convertLastDayOfMonth(node, opts);
1537
- }
1538
- if (node.dayOfMonth && node.nextMonth) {
1539
- const ref = opts.referenceDate;
1540
- let month2 = ref.getUTCMonth() + 1;
1541
- let year = ref.getUTCFullYear();
1542
- if (month2 > 11) {
1543
- month2 = 0;
1544
- year++;
1545
- }
1546
- const day = node.ordinalWeekday || 1;
1547
- return new Date(Date.UTC(year, month2, day));
1548
- }
1549
- if (node.relative && node.period) {
1550
- return convertRelativePeriod(node, opts);
1551
- }
1552
- return new Date(opts.referenceDate);
1553
- }
1554
-
1555
- // src/converters/duration.ts
1556
- function durationToMs(value, unit2) {
1557
- switch (unit2) {
1558
- case "second":
1559
- return value * MS_PER_SECOND;
1560
- case "minute":
1561
- return value * MS_PER_MINUTE;
1562
- case "hour":
1563
- return value * MS_PER_HOUR;
1564
- case "day":
1565
- return value * MS_PER_DAY;
1566
- case "week":
1567
- return value * MS_PER_WEEK;
1568
- case "month":
1569
- return value * MS_PER_MONTH;
1570
- case "year":
1571
- return value * MS_PER_YEAR;
1572
- default:
1573
- return 0;
1574
- }
1575
- }
1576
- function convertDurationNode(node, parentHasHours = false) {
1577
- if (node.combined && Array.isArray(node.combined)) {
1578
- const hasHours = node.combined.some(
1579
- (d) => d.unit === "hour"
1580
- );
1581
- return node.combined.reduce(
1582
- (total, d) => total + convertDurationNode(d, hasHours),
1583
- 0
1584
- );
1585
- }
1586
- let unit2 = node.unit;
1587
- if (parentHasHours && unit2 === "month") {
1588
- unit2 = "minute";
1589
- }
1590
- return durationToMs(node.value, unit2);
1591
- }
1592
-
1593
- // src/utils/calendar.ts
1594
- function getQuarterDates(quarter2, year, fiscalYearStart) {
1595
- const fiscalStartMonth = FISCAL_START_MONTH[fiscalYearStart] ?? 0;
1596
- const quarterStartMonth = (fiscalStartMonth + (quarter2 - 1) * 3) % 12;
1597
- let startYear = year;
1598
- if (quarterStartMonth < fiscalStartMonth) {
1599
- startYear++;
1600
- }
1601
- const start = new Date(Date.UTC(startYear, quarterStartMonth, 1));
1602
- const endMonth = (quarterStartMonth + 3) % 12;
1603
- let endYear = startYear;
1604
- if (endMonth < quarterStartMonth) {
1605
- endYear++;
1606
- }
1607
- const end = new Date(Date.UTC(endYear, endMonth, 0));
1608
- return { start, end };
1609
- }
1610
- function getHalfDates(half2, year, fiscalYearStart) {
1611
- const fiscalStartMonth = FISCAL_START_MONTH[fiscalYearStart] ?? 0;
1612
- const halfStartMonth = (fiscalStartMonth + (half2 - 1) * 6) % 12;
1613
- let startYear = year;
1614
- if (halfStartMonth < fiscalStartMonth) {
1615
- startYear++;
1616
- }
1617
- const start = new Date(Date.UTC(startYear, halfStartMonth, 1));
1618
- const endMonth = (halfStartMonth + 6) % 12;
1619
- let endYear = startYear;
1620
- if (endMonth <= halfStartMonth) {
1621
- endYear++;
1622
- }
1623
- const end = new Date(Date.UTC(endYear, endMonth, 0));
1624
- return { start, end };
1625
- }
1626
- function getSeasonDates(season2, year) {
1627
- switch (season2) {
1628
- case "spring":
1629
- return {
1630
- start: new Date(Date.UTC(year, 2, 20)),
1631
- end: new Date(Date.UTC(year, 5, 20))
1632
- };
1633
- case "summer":
1634
- return {
1635
- start: new Date(Date.UTC(year, 5, 21)),
1636
- end: new Date(Date.UTC(year, 8, 22))
1637
- };
1638
- case "fall":
1639
- case "autumn":
1640
- return {
1641
- start: new Date(Date.UTC(year, 8, 23)),
1642
- end: new Date(Date.UTC(year, 11, 20))
1643
- };
1644
- case "winter":
1645
- return {
1646
- start: new Date(Date.UTC(year, 11, 21)),
1647
- end: new Date(Date.UTC(year + 1, 2, 19))
1648
- };
1649
- default:
1650
- return {
1651
- start: new Date(Date.UTC(year, 0, 1)),
1652
- end: new Date(Date.UTC(year, 11, 31))
1653
- };
1654
- }
1655
- }
1656
- function getModifiedPeriod(start, end, modifier) {
1657
- const duration = end.getTime() - start.getTime();
1658
- const third = duration / 3;
1659
- const half2 = duration / 2;
1660
- switch (modifier) {
1661
- case "early":
1662
- return {
1663
- start,
1664
- end: new Date(start.getTime() + third)
1665
- };
1666
- case "mid":
1667
- case "middle":
1668
- return {
1669
- start: new Date(start.getTime() + third),
1670
- end: new Date(start.getTime() + 2 * third)
1671
- };
1672
- case "late":
1673
- return {
1674
- start: new Date(start.getTime() + 2 * third),
1675
- end
1676
- };
1677
- case "first":
1678
- return {
1679
- start,
1680
- end: new Date(start.getTime() + half2)
1681
- };
1682
- case "second":
1683
- return {
1684
- start: new Date(start.getTime() + half2),
1685
- end
1686
- };
1687
- default:
1688
- return { start, end };
1689
- }
1690
- }
1691
-
1692
- // src/converters/fuzzy.ts
1693
- function getWeekendDates(ref, relative, opts) {
1694
- const currentDay = ref.getUTCDay();
1695
- const saturdayOffset = (6 - currentDay + 7) % 7;
1696
- let saturday = new Date(
1697
- Date.UTC(
1698
- ref.getUTCFullYear(),
1699
- ref.getUTCMonth(),
1700
- ref.getUTCDate() + saturdayOffset
1701
- )
1702
- );
1703
- if (relative === "next") {
1704
- saturday = new Date(saturday.getTime() + MS_PER_WEEK);
1705
- } else if (relative === "last") {
1706
- if (currentDay === 6 || currentDay === 0) {
1707
- saturday = new Date(saturday.getTime() - MS_PER_WEEK);
1708
- }
1709
- saturday = new Date(saturday.getTime() - MS_PER_WEEK);
1710
- }
1711
- const sunday = new Date(saturday.getTime() + MS_PER_DAY);
1712
- const sundayEnd = new Date(
1713
- Date.UTC(
1714
- sunday.getUTCFullYear(),
1715
- sunday.getUTCMonth(),
1716
- sunday.getUTCDate(),
1717
- 23,
1718
- 59
1719
- )
1720
- );
1721
- return { start: saturday, end: sundayEnd };
1722
- }
1723
- function getNightDates(ref, relative, weekday2) {
1724
- let baseDate = new Date(ref);
1725
- if (relative === "last") {
1726
- baseDate = new Date(
1727
- Date.UTC(
1728
- ref.getUTCFullYear(),
1729
- ref.getUTCMonth(),
1730
- ref.getUTCDate() - 1
1731
- )
1732
- );
1733
- } else if (relative === "tomorrow") {
1734
- baseDate = new Date(
1735
- Date.UTC(
1736
- ref.getUTCFullYear(),
1737
- ref.getUTCMonth(),
1738
- ref.getUTCDate() + 1
1739
- )
1740
- );
1741
- } else if (weekday2) {
1742
- const targetDay = WEEKDAY_MAP[weekday2.toLowerCase()];
1743
- if (targetDay !== void 0) {
1744
- const currentDay = ref.getUTCDay();
1745
- let daysToAdd = (targetDay - currentDay + 7) % 7;
1746
- if (daysToAdd === 0) {
1747
- daysToAdd = 7;
1748
- }
1749
- baseDate = new Date(
1750
- Date.UTC(
1751
- ref.getUTCFullYear(),
1752
- ref.getUTCMonth(),
1753
- ref.getUTCDate() + daysToAdd
1754
- )
1755
- );
1756
- }
1757
- }
1758
- const start = new Date(
1759
- Date.UTC(
1760
- baseDate.getUTCFullYear(),
1761
- baseDate.getUTCMonth(),
1762
- baseDate.getUTCDate(),
1763
- 18,
1764
- 0
1765
- )
1766
- );
1767
- const end = new Date(
1768
- Date.UTC(
1769
- baseDate.getUTCFullYear(),
1770
- baseDate.getUTCMonth(),
1771
- baseDate.getUTCDate(),
1772
- 23,
1773
- 59
1774
- )
1775
- );
1776
- return { start, end };
1777
- }
1778
- function getBasePeriodDates(node, opts, year) {
1779
- const ref = opts.referenceDate;
1780
- if (node.period === "weekend") {
1781
- return getWeekendDates(ref, node.relative || "this", opts);
1782
- }
1783
- if (node.period === "tonight") {
1784
- return getNightDates(ref, void 0, void 0);
1785
- }
1786
- if (node.period === "night") {
1787
- return getNightDates(ref, node.relative, node.weekday);
1788
- }
1789
- if (node.period === "fortnight") {
1790
- const count = node.count || 1;
1791
- const relative = node.relative;
1792
- const twoWeeks = 14 * MS_PER_DAY;
1793
- if (relative === "last") {
1794
- const end2 = new Date(ref);
1795
- const start2 = new Date(ref.getTime() - twoWeeks);
1796
- return { start: start2, end: end2 };
1797
- }
1798
- const start = new Date(ref);
1799
- const end = new Date(ref.getTime() + count * twoWeeks);
1800
- return { start, end };
1801
- }
1802
- if (node.period === "quarter" && node.quarter) {
1803
- return getQuarterDates(
1804
- node.quarter,
1805
- year,
1806
- opts.fiscalYearStart
1807
- );
1808
- }
1809
- if (node.period === "half" && node.half) {
1810
- return getHalfDates(node.half, year, opts.fiscalYearStart);
1811
- }
1812
- if (node.period === "season" && node.season) {
1813
- return getSeasonDates(node.season, year);
1814
- }
1815
- if (node.period === "month" && node.month !== void 0) {
1816
- const month2 = typeof node.month === "number" ? node.month - 1 : 0;
1817
- const start = new Date(Date.UTC(year, month2, 1));
1818
- const end = new Date(Date.UTC(year, month2 + 1, 0));
1819
- return { start, end };
1820
- }
1821
- if (node.period === "month") {
1822
- const month2 = ref.getUTCMonth();
1823
- const start = new Date(Date.UTC(year, month2, 1));
1824
- const end = new Date(Date.UTC(year, month2 + 1, 0));
1825
- return { start, end };
1826
- }
1827
- if (node.period === "week") {
1828
- const weekStart = opts.weekStartsOn === "monday" ? 1 : 0;
1829
- const currentDay = ref.getUTCDay();
1830
- const daysFromStart = (currentDay - weekStart + 7) % 7;
1831
- const start = new Date(
1832
- Date.UTC(
1833
- ref.getUTCFullYear(),
1834
- ref.getUTCMonth(),
1835
- ref.getUTCDate() - daysFromStart
1836
- )
1837
- );
1838
- const end = new Date(start.getTime() + 6 * MS_PER_DAY);
1839
- return { start, end };
1840
- }
1841
- if (node.period === "weekNumber" && node.weekNumber !== void 0) {
1842
- const weekNum = node.weekNumber;
1843
- const targetYear = node.year ?? ref.getUTCFullYear();
1844
- const weekStart = opts.weekStartsOn === "monday" ? 1 : 0;
1845
- const jan1 = new Date(Date.UTC(targetYear, 0, 1));
1846
- const jan1Day = jan1.getUTCDay();
1847
- const daysToFirstWeekStart = (weekStart - jan1Day + 7) % 7;
1848
- const firstWeekStart = new Date(jan1.getTime() + daysToFirstWeekStart * MS_PER_DAY);
1849
- const start = new Date(firstWeekStart.getTime() + (weekNum - 1) * MS_PER_WEEK);
1850
- const end = new Date(start.getTime() + 6 * MS_PER_DAY);
1851
- return { start, end };
1852
- }
1853
- if (node.period === "weekOf" && node.baseDate) {
1854
- const baseDate = node.baseDate;
1855
- let targetDate;
1856
- if (baseDate.month !== void 0 && baseDate.day !== void 0) {
1857
- const month2 = typeof baseDate.month === "number" ? baseDate.month - 1 : 0;
1858
- const day = baseDate.day;
1859
- const targetYear = baseDate.year ?? ref.getUTCFullYear();
1860
- targetDate = new Date(Date.UTC(targetYear, month2, day));
1861
- } else {
1862
- targetDate = ref;
1863
- }
1864
- const weekStart = opts.weekStartsOn === "monday" ? 1 : 0;
1865
- const currentDay = targetDate.getUTCDay();
1866
- const daysFromStart = (currentDay - weekStart + 7) % 7;
1867
- const start = new Date(
1868
- Date.UTC(
1869
- targetDate.getUTCFullYear(),
1870
- targetDate.getUTCMonth(),
1871
- targetDate.getUTCDate() - daysFromStart
1872
- )
1873
- );
1874
- const end = new Date(start.getTime() + 6 * MS_PER_DAY);
1875
- return { start, end };
1876
- }
1877
- if (node.period === "day") {
1878
- const start = new Date(
1879
- Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())
1880
- );
1881
- const end = new Date(
1882
- Date.UTC(
1883
- ref.getUTCFullYear(),
1884
- ref.getUTCMonth(),
1885
- ref.getUTCDate(),
1886
- 23,
1887
- 59,
1888
- 59,
1889
- 999
1890
- )
1891
- );
1892
- return { start, end };
1893
- }
1894
- if (node.period === "year") {
1895
- const start = new Date(Date.UTC(year, 0, 1));
1896
- const end = new Date(Date.UTC(year, 11, 31));
1897
- return { start, end };
1898
- }
1899
- return {
1900
- start: new Date(Date.UTC(year, 0, 1)),
1901
- end: new Date(Date.UTC(year, 11, 31))
1902
- };
1903
- }
1904
- function convertFuzzyNodeWithoutModifier(node, opts) {
1905
- const ref = opts.referenceDate;
1906
- const year = node.year ?? ref.getUTCFullYear();
1907
- return getBasePeriodDates(node, opts, year);
1908
- }
1909
- function convertFuzzyNode(node, opts) {
1910
- const ref = opts.referenceDate;
1911
- let year = node.year ?? ref.getUTCFullYear();
1912
- if (node.period === "quarter" && node.quarter && node.year === void 0) {
1913
- const { end: qEnd } = getQuarterDates(
1914
- node.quarter,
1915
- year,
1916
- opts.fiscalYearStart
1917
- );
1918
- if (qEnd < ref) {
1919
- year++;
1920
- }
1921
- }
1922
- const { start, end } = getBasePeriodDates(node, opts, year);
1923
- if (node.modifier) {
1924
- return getModifiedPeriod(start, end, node.modifier);
1925
- }
1926
- return { start, end };
1927
- }
1928
-
1929
- // src/parser.ts
1930
- function getDefaultOptions(options) {
1931
- return {
1932
- referenceDate: options?.referenceDate ?? /* @__PURE__ */ new Date(),
1933
- fiscalYearStart: options?.fiscalYearStart ?? "january",
1934
- weekStartsOn: options?.weekStartsOn ?? "sunday",
1935
- dateFormat: options?.dateFormat ?? "intl"
1936
- };
1937
- }
1938
- function convertASTToResult(ast, opts, originalInput) {
1939
- if (!ast || !ast.nodeType) {
1940
- return null;
1941
- }
1942
- let title = null;
1943
- let expression = ast;
1944
- if (ast.nodeType === "titled") {
1945
- if (originalInput && ast.titleStart !== void 0 && ast.titleEnd !== void 0) {
1946
- title = originalInput.slice(ast.titleStart, ast.titleEnd).trim();
1947
- } else {
1948
- title = ast.title;
1949
- }
1950
- expression = ast.expression;
1951
- }
1952
- switch (expression.nodeType) {
1953
- case "date": {
1954
- const date = convertDateNode(expression, opts);
1955
- return { type: "date", date, title };
1956
- }
1957
- case "duration": {
1958
- const duration = convertDurationNode(expression);
1959
- return { type: "duration", duration, title };
1960
- }
1961
- case "span": {
1962
- let start;
1963
- const startNode = expression.start;
1964
- if (startNode.nodeType === "date") {
1965
- start = convertDateNode(startNode, opts);
1966
- } else if (startNode.nodeType === "fuzzy") {
1967
- const fuzzy = convertFuzzyNode(startNode, opts);
1968
- start = fuzzy.start;
1969
- } else {
1970
- start = new Date(opts.referenceDate);
1971
- }
1972
- let duration = 0;
1973
- if (expression.duration) {
1974
- duration = convertDurationNode(expression.duration);
1975
- }
1976
- const end = new Date(start.getTime() + duration);
1977
- return { type: "span", start, end, duration, title };
1978
- }
1979
- case "range": {
1980
- let start;
1981
- let end;
1982
- const startNode = expression.start;
1983
- const endNode = expression.end;
1984
- if (startNode.nodeType === "date") {
1985
- start = convertDateNode(startNode, opts);
1986
- } else if (startNode.nodeType === "fuzzy") {
1987
- const fuzzy = convertFuzzyNode(startNode, opts);
1988
- start = fuzzy.start;
1989
- } else {
1990
- start = new Date(opts.referenceDate);
1991
- }
1992
- if (endNode.nodeType === "date") {
1993
- end = convertDateNode(endNode, opts);
1994
- if (endNode.monthOnly) {
1995
- const month2 = typeof endNode.month === "number" ? endNode.month - 1 : 0;
1996
- const year = endNode.year ?? opts.referenceDate.getUTCFullYear();
1997
- end = new Date(Date.UTC(year, month2 + 1, 0));
1998
- }
1999
- if (endNode.yearOnly) {
2000
- const year = endNode.year ?? opts.referenceDate.getUTCFullYear();
2001
- end = new Date(Date.UTC(year, 11, 31));
2002
- }
2003
- } else if (endNode.nodeType === "fuzzy") {
2004
- const fuzzy = convertFuzzyNode(endNode, opts);
2005
- end = fuzzy.end;
2006
- } else {
2007
- end = new Date(opts.referenceDate);
2008
- }
2009
- if (end < start) {
2010
- const isWeekdayBased = endNode.weekday !== void 0;
2011
- if (isWeekdayBased) {
2012
- end = new Date(end.getTime() + MS_PER_WEEK);
2013
- } else {
2014
- end = new Date(
2015
- Date.UTC(
2016
- end.getUTCFullYear() + 1,
2017
- end.getUTCMonth(),
2018
- end.getUTCDate(),
2019
- end.getUTCHours(),
2020
- end.getUTCMinutes()
2021
- )
2022
- );
2023
- }
2024
- }
2025
- const duration = end.getTime() - start.getTime();
2026
- return { type: "span", start, end, duration, title };
2027
- }
2028
- case "fuzzy": {
2029
- const { start, end } = convertFuzzyNode(expression, opts);
2030
- const mod = expression.modifier;
2031
- const period = expression.period;
2032
- if (mod === "start" || mod === "beginning") {
2033
- const periodDates = convertFuzzyNodeWithoutModifier(expression, opts);
2034
- return { type: "date", date: periodDates.start, title };
2035
- }
2036
- if (mod === "end") {
2037
- const periodDates = convertFuzzyNodeWithoutModifier(expression, opts);
2038
- return { type: "date", date: periodDates.end, title };
2039
- }
2040
- if (period === "weekend" || period === "night" || period === "tonight" || period === "fortnight" || period === "weekNumber" || period === "weekOf") {
2041
- const duration = end.getTime() - start.getTime();
2042
- return { type: "span", start, end, duration, title };
2043
- }
2044
- return { type: "fuzzy", start, end, approximate: true, title };
2045
- }
2046
- case "relative": {
2047
- const duration = convertDurationNode(expression.duration);
2048
- const ref = opts.referenceDate;
2049
- let start;
2050
- let end;
2051
- if (expression.direction === "past") {
2052
- end = new Date(ref);
2053
- start = new Date(ref.getTime() - duration);
2054
- } else {
2055
- start = new Date(ref);
2056
- end = new Date(ref.getTime() + duration);
2057
- }
2058
- return { type: "span", start, end, duration, title };
2059
- }
2060
- case "relativeDate": {
2061
- const durationNode = expression.duration;
2062
- const baseNode = expression.baseDate;
2063
- const timeSpec = expression.time;
2064
- let baseDate;
2065
- if (baseNode) {
2066
- baseDate = convertDateNode(baseNode, opts);
2067
- } else {
2068
- baseDate = new Date(opts.referenceDate);
2069
- }
2070
- const durationValue = durationNode.value;
2071
- const durationUnit = durationNode.unit;
2072
- const direction = expression.direction === "past" ? -1 : 1;
2073
- let resultDate;
2074
- if (durationUnit === "month") {
2075
- resultDate = new Date(
2076
- Date.UTC(
2077
- baseDate.getUTCFullYear(),
2078
- baseDate.getUTCMonth() + direction * durationValue,
2079
- baseDate.getUTCDate(),
2080
- baseDate.getUTCHours(),
2081
- baseDate.getUTCMinutes()
2082
- )
2083
- );
2084
- } else if (durationUnit === "year") {
2085
- resultDate = new Date(
2086
- Date.UTC(
2087
- baseDate.getUTCFullYear() + direction * durationValue,
2088
- baseDate.getUTCMonth(),
2089
- baseDate.getUTCDate(),
2090
- baseDate.getUTCHours(),
2091
- baseDate.getUTCMinutes()
2092
- )
2093
- );
2094
- } else if (durationUnit === "businessDay" || durationUnit === "businessday") {
2095
- resultDate = new Date(Date.UTC(baseDate.getUTCFullYear(), baseDate.getUTCMonth(), baseDate.getUTCDate()));
2096
- let daysToAdd = durationValue;
2097
- while (daysToAdd > 0) {
2098
- resultDate.setUTCDate(resultDate.getUTCDate() + direction);
2099
- const dayOfWeek = resultDate.getUTCDay();
2100
- if (dayOfWeek !== 0 && dayOfWeek !== 6) {
2101
- daysToAdd--;
2102
- }
2103
- }
2104
- } else {
2105
- const durationMs = convertDurationNode(durationNode);
2106
- resultDate = new Date(baseDate.getTime() + direction * durationMs);
2107
- }
2108
- if (timeSpec) {
2109
- if ("special" in timeSpec) {
2110
- if (timeSpec.special === "noon") {
2111
- resultDate = new Date(
2112
- Date.UTC(
2113
- resultDate.getUTCFullYear(),
2114
- resultDate.getUTCMonth(),
2115
- resultDate.getUTCDate(),
2116
- 12,
2117
- 0
2118
- )
2119
- );
2120
- } else if (timeSpec.special === "midnight") {
2121
- resultDate = new Date(
2122
- Date.UTC(
2123
- resultDate.getUTCFullYear(),
2124
- resultDate.getUTCMonth(),
2125
- resultDate.getUTCDate(),
2126
- 0,
2127
- 0
2128
- )
2129
- );
2130
- }
2131
- } else {
2132
- resultDate = new Date(
2133
- Date.UTC(
2134
- resultDate.getUTCFullYear(),
2135
- resultDate.getUTCMonth(),
2136
- resultDate.getUTCDate(),
2137
- timeSpec.hour,
2138
- timeSpec.minute
2139
- )
2140
- );
2141
- }
2142
- }
2143
- return { type: "date", date: resultDate, title };
2144
- }
2145
- default:
2146
- return null;
2147
- }
2148
- }
2149
- function stripUnmatchedPunctuation(input) {
2150
- let result = input;
2151
- const originalPreserved = input;
2152
- let openParens = (result.match(/\(/g) || []).length;
2153
- let closeParens = (result.match(/\)/g) || []).length;
2154
- let openBrackets = (result.match(/\[/g) || []).length;
2155
- let closeBrackets = (result.match(/]/g) || []).length;
2156
- while (closeParens > openParens && result.endsWith(")")) {
2157
- result = result.slice(0, -1).trimEnd();
2158
- closeParens--;
2159
- }
2160
- while (closeBrackets > openBrackets && result.endsWith("]")) {
2161
- result = result.slice(0, -1).trimEnd();
2162
- closeBrackets--;
2163
- }
2164
- openParens = (result.match(/\(/g) || []).length;
2165
- closeParens = (result.match(/\)/g) || []).length;
2166
- while (openParens > closeParens) {
2167
- result = result.replace(/\(/, "");
2168
- openParens--;
2169
- }
2170
- openBrackets = (result.match(/\[/g) || []).length;
2171
- closeBrackets = (result.match(/]/g) || []).length;
2172
- while (openBrackets > closeBrackets) {
2173
- result = result.replace(/\[/, "");
2174
- openBrackets--;
2175
- }
2176
- return {
2177
- stripped: result.replace(/\s+/g, " ").trim(),
2178
- originalPreserved
2179
- };
2180
- }
2181
- function parseInternal(input, options) {
2182
- if (!input || typeof input !== "string") {
2183
- return null;
2184
- }
2185
- const trimmedInput = input.trim();
2186
- const { stripped, originalPreserved } = stripUnmatchedPunctuation(trimmedInput);
2187
- const normalized = stripped.toLowerCase();
2188
- if (!normalized) {
2189
- return null;
2190
- }
2191
- const opts = getDefaultOptions(options);
2192
- try {
2193
- const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar_default));
2194
- parser.feed(normalized);
2195
- if (parser.results.length === 0) {
2196
- return null;
2197
- }
2198
- const ast = parser.results[0];
2199
- return convertASTToResult(ast, opts, originalPreserved);
2200
- } catch {
2201
- return null;
2202
- }
2203
- }
2204
- function extractInternal(input, options) {
2205
- if (!input || typeof input !== "string") {
2206
- return [];
2207
- }
2208
- const segments = input.split(/[,;\n]|\s+and\s+/).map((s) => s.trim()).filter((s) => s.length > 0);
2209
- const results = [];
2210
- for (const segment of segments) {
2211
- const result = parseInternal(segment, options);
2212
- if (result) {
2213
- results.push(result);
2214
- }
2215
- }
2216
- return results;
2217
- }
2218
-
2219
- // src/index.ts
2220
- function parse(input, options) {
2221
- return parseInternal(input, options);
2222
- }
2223
- function parseDate(input, options) {
2224
- const result = parse(input, options);
2225
- if (!result) {
2226
- return null;
2227
- }
2228
- if (result.type === "date") {
2229
- return result.date;
2230
- }
2231
- if (result.type === "duration") {
2232
- const ref = options?.referenceDate ?? /* @__PURE__ */ new Date();
2233
- return new Date(ref.getTime() + result.duration);
2234
- }
2235
- if (result.type === "fuzzy") {
2236
- return result.start;
2237
- }
2238
- return null;
2239
- }
2240
- function parseDuration(input, options) {
2241
- const result = parse(input, options);
2242
- if (result && result.type === "duration") {
2243
- return result.duration;
2244
- }
2245
- return null;
2246
- }
2247
- function parseSpan(input, options) {
2248
- const result = parse(input, options);
2249
- if (result && (result.type === "span" || result.type === "fuzzy")) {
2250
- return {
2251
- start: result.start,
2252
- end: result.end,
2253
- duration: result.type === "span" ? result.duration : result.end.getTime() - result.start.getTime()
2254
- };
2255
- }
2256
- return null;
2257
- }
2258
- function extract(input, options) {
2259
- return extractInternal(input, options);
2260
- }
2261
- export {
2262
- extract,
2263
- parse,
2264
- parseDate,
2265
- parseDuration,
2266
- parseSpan
2267
- };
2268
- //# sourceMappingURL=index.js.map
1
+ import te from"nearley";import j from"moo";var r=j.compile({ws:/[ \t]+/,newline:{match:/\r?\n/,lineBreaks:!0},time:/(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?/,monthDayCompact:{match:/(?:[Jj]anuary|[Ff]ebruary|[Mm]arch|[Aa]pril|[Mm]ay|[Jj]une|[Jj]uly|[Aa]ugust|[Ss]eptember|[Oo]ctober|[Nn]ovember|[Dd]ecember|[Jj]an|[Ff]eb|[Mm]ar|[Aa]pr|[Jj]un|[Jj]ul|[Aa]ug|[Ss]ep|[Ss]ept|[Oo]ct|[Nn]ov|[Dd]ec)(?:3[01]|[12]?[0-9])/,value:e=>e.toLowerCase()},quarter:{match:/[Qq][1-4]/,value:e=>e.toUpperCase()},half:{match:/[Hh][1-2]/,value:e=>e.toUpperCase()},ordinal:{match:/(?:3[01]|[12]?[0-9])(?:[Ss][Tt]|[Nn][Dd]|[Rr][Dd]|[Tt][Hh])/,value:e=>e.toLowerCase()},decimal:/\d+\.\d+/,abbreviatedDuration:{match:/\d+(?:mo|w|d|h|m|s|y)\b/,value:e=>e.toLowerCase()},integer:/\d+/,ampm:{match:/[Aa][Mm]|[Pp][Mm]/,value:e=>e.toLowerCase()},word:{match:/[a-zA-Z][a-zA-Z0-9#]*/,type:j.keywords({kw_today:["today"],kw_tomorrow:["tomorrow"],kw_yesterday:["yesterday"],kw_now:["now"],kw_noon:["noon"],kw_midnight:["midnight"],kw_next:["next"],kw_last:["last"],kw_this:["this"],kw_previous:["previous"],kw_coming:["coming"],kw_upcoming:["upcoming"],kw_past:["past"],kw_early:["early"],kw_mid:["mid"],kw_late:["late"],kw_beginning:["beginning"],kw_middle:["middle"],kw_end:["end"],kw_start:["start"],unit:["day","days","week","weeks","month","months","year","years","quarter","quarters","hour","hours","minute","minutes","second","seconds","hr","hrs","min","mins","sec","secs","wk","wks","mo","mos","yr","yrs"],halfWord:["half"],kw_to:["to"],kw_from:["from"],kw_until:["until","til","till"],kw_through:["through"],kw_between:["between"],kw_and:["and"],kw_for:["for"],kw_in:["in"],kw_on:["on"],kw_at:["at"],kw_of:["of"],kw_the:["the"],kw_within:["within"],kw_over:["over"],kw_during:["during"],kw_starting:["starting"],kw_by:["by"],kw_before:["before"],kw_after:["after"],kw_around:["around"],kw_about:["about"],kw_roughly:["roughly"],kw_approximately:["approximately"],kw_sometime:["sometime"],ordinalWord:["first","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth","thirteenth","fourteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","twentieth","twenty-first","twenty-second","twenty-third","twenty-fourth","twenty-fifth","twenty-sixth","twenty-seventh","twenty-eighth","twenty-ninth","thirtieth","thirty-first"],season:["spring","summer","fall","autumn","winter"],wordNumber:["one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen","twenty","a","an","couple"],month:["january","february","march","april","may","june","july","august","september","october","november","december","jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"],weekday:["monday","tuesday","wednesday","thursday","friday","saturday","sunday","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","sundays","mon","tue","tues","wed","thu","thur","thurs","fri","sat","sun"],kw_ago:["ago"],kw_weekend:["weekend"],kw_tonight:["tonight"],kw_night:["night"],kw_fortnight:["fortnight","fortnights"],otherKeyword:["fiscal","fy","daily","weekly","monthly","yearly","annually","hence","later","earlier"],kw_business:["business"],kw_eod:["eod"],kw_cob:["cob"],kw_close:["close"],kw_ytd:["ytd"]})},lparen:"(",rparen:")",lbracket:"[",rbracket:"]",colon:":",semicolon:";",comma:",",dash:/[-–—]/,slash:"/",other:/./});var p=e=>e[0],se=()=>null;var u=e=>({nodeType:"date",value:"",...e}),c=(e,t)=>({nodeType:"duration",value:e,unit:re(t)}),T=(e,t,o)=>({nodeType:"span",start:e,duration:t,end:o}),w=(e,t)=>({nodeType:"range",start:e,end:t}),m=e=>({nodeType:"fuzzy",period:"",...e}),_=(e,t)=>({nodeType:"relative",direction:e,duration:t}),d=(e,t,o,s)=>({nodeType:"relativeDate",direction:e,duration:t,baseDate:o,time:s}),k=(e,t,o,s)=>({nodeType:"titled",title:e.trim(),titleStart:o,titleEnd:s,expression:t});function re(e){let t=e.toLowerCase();return["day","days","d"].includes(t)?"day":["week","weeks","wk","wks","w"].includes(t)?"week":["month","months","mo","mos"].includes(t)?"month":["year","years","yr","yrs","y"].includes(t)?"year":["hour","hours","hr","hrs","h"].includes(t)?"hour":["minute","minutes","min","mins"].includes(t)?"minute":["second","seconds","sec","secs","s"].includes(t)?"second":["quarter","quarters"].includes(t)?"quarter":t}function g(e){return{a:1,an:1,one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19,twenty:20,couple:2}[e.toLowerCase()]??1}function H(e){let t=e.match(/^(\d+)/);return t?parseInt(t[1],10):v(e)}function v(e){return{first:1,second:2,third:3,fourth:4,fifth:5,sixth:6,seventh:7,eighth:8,ninth:9,tenth:10,eleventh:11,twelfth:12,thirteenth:13,fourteenth:14,fifteenth:15,sixteenth:16,seventeenth:17,eighteenth:18,nineteenth:19,twentieth:20,"twenty-first":21,"twenty-second":22,"twenty-third":23,"twenty-fourth":24,"twenty-fifth":25,"twenty-sixth":26,"twenty-seventh":27,"twenty-eighth":28,"twenty-ninth":29,thirtieth:30,"thirty-first":31}[e.toLowerCase()]??1}function B(e){return{january:1,jan:1,february:2,feb:2,march:3,mar:3,april:4,apr:4,may:5,june:6,jun:6,july:7,jul:7,august:8,aug:8,september:9,sep:9,sept:9,october:10,oct:10,november:11,nov:11,december:12,dec:12}[e.toLowerCase()]??1}function S(e){let t=e.toLowerCase(),o=["january","february","march","april","may","june","july","august","september","october","november","december","jan","feb","mar","apr","jun","jul","aug","sep","sept","oct","nov","dec"];for(let s of o)if(t.startsWith(s)){let a=t.slice(s.length);return{month:B(s),day:parseInt(a,10)}}return{month:1,day:1}}function x(e){let t=e.match(/[qQ]([1-4])/);return t?parseInt(t[1],10):1}function $(e){let t=e.match(/[hH]([1-2])/);return t?parseInt(t[1],10):1}var ae={Lexer:r,ParserRules:[{name:"main",symbols:["titledExpression"],postprocess:p},{name:"main",symbols:["expression"],postprocess:p},{name:"titledExpression",symbols:["titleTextSimple","_",r.has("dash")?{type:"dash"}:dash,"_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText",r.has("colon")?{type:"colon"}:colon,"_","expression"],postprocess:e=>k(e[0].text,e[3],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_",r.has("lparen")?{type:"lparen"}:lparen,"expression",r.has("rparen")?{type:"rparen"}:rparen],postprocess:e=>k(e[0].text,e[3],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_",r.has("lbracket")?{type:"lbracket"}:lbracket,"expression",r.has("rbracket")?{type:"rbracket"}:rbracket],postprocess:e=>k(e[0].text,e[3],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","onConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","atConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","inConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","forConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","fromConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","duringConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","startingConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_","byConnector","_","expression"],postprocess:e=>k(e[0].text,e[4],e[0].start,e[0].end)},{name:"titledExpression",symbols:["titleText","_",r.has("dash")?{type:"dash"}:dash,"_","byConnector","_","expression"],postprocess:e=>k(e[0].text,e[6],e[0].start,e[0].end)},{name:"titledExpression",symbols:["expression","_","postTitle"],postprocess:e=>k(e[2].text,e[0],e[2].start,e[2].end)},{name:"postTitle",symbols:[r.has("word")?{type:"word"}:word],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"postTitle",symbols:["postTitle","_",r.has("word")?{type:"word"}:word],postprocess:e=>({text:e[0].text+" "+e[2].value,start:e[0].start,end:e[2].offset+e[2].text.length})},{name:"titleText",symbols:["titleWord"],postprocess:e=>({text:e[0].text,start:e[0].start,end:e[0].end})},{name:"titleText",symbols:["versionNumber"],postprocess:e=>e[0]},{name:"titleText",symbols:["hyphenatedWord"],postprocess:e=>e[0]},{name:"titleText",symbols:["titleText","_","titleWord"],postprocess:e=>({text:e[0].text+" "+e[2].text,start:e[0].start,end:e[2].end})},{name:"titleText",symbols:["titleText","_","versionNumber"],postprocess:e=>({text:e[0].text+" "+e[2].text,start:e[0].start,end:e[2].end})},{name:"titleText",symbols:["titleText","_","hyphenatedWord"],postprocess:e=>({text:e[0].text+" "+e[2].text,start:e[0].start,end:e[2].end})},{name:"titleText",symbols:["titleText","_",r.has("dash")?{type:"dash"}:dash,"_","titleWord"],postprocess:e=>({text:e[0].text+" - "+e[4].text,start:e[0].start,end:e[4].end})},{name:"titleText",symbols:["titleText","_",r.has("dash")?{type:"dash"}:dash,"_","versionNumber"],postprocess:e=>({text:e[0].text+" - "+e[4].text,start:e[0].start,end:e[4].end})},{name:"titleWord",symbols:[r.has("word")?{type:"word"}:word],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleWord",symbols:[r.has("wordNumber")?{type:"wordNumber"}:wordNumber],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleWord",symbols:[r.has("integer")?{type:"integer"}:integer],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleWord",symbols:[r.has("otherKeyword")?{type:"otherKeyword"}:otherKeyword],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleWord",symbols:[r.has("decimal")?{type:"decimal"}:decimal],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleWord",symbols:[r.has("quarter")?{type:"quarter"}:quarter],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleWord",symbols:[r.has("half")?{type:"half"}:half],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleWord",symbols:[r.has("lparen")?{type:"lparen"}:lparen,"titleText",r.has("rparen")?{type:"rparen"}:rparen],postprocess:e=>({text:"("+e[1].text+")",start:e[0].offset,end:e[2].offset+1})},{name:"titleWord",symbols:[r.has("lbracket")?{type:"lbracket"}:lbracket,"titleText",r.has("rbracket")?{type:"rbracket"}:rbracket],postprocess:e=>({text:"["+e[1].text+"]",start:e[0].offset,end:e[2].offset+1})},{name:"titleWord",symbols:[r.has("slash")?{type:"slash"}:slash],postprocess:e=>({text:"/",start:e[0].offset,end:e[0].offset+1})},{name:"titleWord",symbols:[r.has("colon")?{type:"colon"}:colon],postprocess:e=>({text:":",start:e[0].offset,end:e[0].offset+1})},{name:"titleWord",symbols:["hashNumber"],postprocess:e=>e[0]},{name:"hyphenatedWord",symbols:[r.has("word")?{type:"word"}:word,r.has("dash")?{type:"dash"}:dash,r.has("word")?{type:"word"}:word],postprocess:e=>({text:e[0].value+"-"+e[2].value,start:e[0].offset,end:e[2].offset+e[2].text.length})},{name:"hyphenatedWord",symbols:[r.has("word")?{type:"word"}:word,r.has("dash")?{type:"dash"}:dash,r.has("integer")?{type:"integer"}:integer],postprocess:e=>({text:e[0].value+"-"+e[2].value,start:e[0].offset,end:e[2].offset+e[2].text.length})},{name:"hashNumber",symbols:[r.has("other")?{type:"other"}:other,r.has("integer")?{type:"integer"}:integer],postprocess:(e,t,o)=>e[0].value!=="#"?o:{text:"#"+e[1].value,start:e[0].offset,end:e[1].offset+e[1].text.length}},{name:"versionNumber",symbols:[r.has("word")?{type:"word"}:word,r.has("other")?{type:"other"}:other,r.has("integer")?{type:"integer"}:integer],postprocess:(e,t,o)=>e[1].value!=="."?o:{text:e[0].value+"."+e[2].value,start:e[0].offset,end:e[2].offset+e[2].text.length}},{name:"versionNumber",symbols:[r.has("word")?{type:"word"}:word,r.has("other")?{type:"other"}:other,r.has("integer")?{type:"integer"}:integer,r.has("other")?{type:"other"}:other,r.has("integer")?{type:"integer"}:integer],postprocess:(e,t,o)=>e[1].value!=="."||e[3].value!=="."?o:{text:e[0].value+"."+e[2].value+"."+e[4].value,start:e[0].offset,end:e[4].offset+e[4].text.length}},{name:"versionNumber",symbols:[r.has("word")?{type:"word"}:word,r.has("other")?{type:"other"}:other,r.has("integer")?{type:"integer"}:integer,r.has("other")?{type:"other"}:other,r.has("integer")?{type:"integer"}:integer,r.has("other")?{type:"other"}:other,r.has("integer")?{type:"integer"}:integer],postprocess:(e,t,o)=>e[1].value!=="."||e[3].value!=="."||e[5].value!=="."?o:{text:e[0].value+"."+e[2].value+"."+e[4].value+"."+e[6].value,start:e[0].offset,end:e[6].offset+e[6].text.length}},{name:"versionNumber",symbols:[r.has("word")?{type:"word"}:word,r.has("other")?{type:"other"}:other,r.has("decimal")?{type:"decimal"}:decimal],postprocess:(e,t,o)=>e[1].value!=="."?o:{text:e[0].value+"."+e[2].value,start:e[0].offset,end:e[2].offset+e[2].text.length}},{name:"versionNumber",symbols:[r.has("decimal")?{type:"decimal"}:decimal],postprocess:e=>({text:e[0].value,start:e[0].offset,end:e[0].offset+e[0].text.length})},{name:"titleTextSimple",symbols:["titleWord"],postprocess:e=>e[0]},{name:"titleTextSimple",symbols:["hyphenatedWord"],postprocess:e=>e[0]},{name:"titleTextSimple",symbols:["versionNumber"],postprocess:e=>e[0]},{name:"titleTextSimple",symbols:["titleTextSimple","_","titleWord"],postprocess:e=>({text:e[0].text+" "+e[2].text,start:e[0].start,end:e[2].end})},{name:"titleTextSimple",symbols:["titleTextSimple","_","hyphenatedWord"],postprocess:e=>({text:e[0].text+" "+e[2].text,start:e[0].start,end:e[2].end})},{name:"titleTextSimple",symbols:["titleTextSimple","_","versionNumber"],postprocess:e=>({text:e[0].text+" "+e[2].text,start:e[0].start,end:e[2].end})},{name:"titleTextSimple",symbols:["titleTextSimple",r.has("slash")?{type:"slash"}:slash,"titleWord"],postprocess:e=>({text:e[0].text+"/"+e[2].text,start:e[0].start,end:e[2].end})},{name:"titleTextSimple",symbols:["titleTextSimple",r.has("colon")?{type:"colon"}:colon,"_","titleWord"],postprocess:e=>({text:e[0].text+": "+e[3].text,start:e[0].start,end:e[3].end})},{name:"expression",symbols:["range"],postprocess:p},{name:"expression",symbols:["span"],postprocess:p},{name:"expression",symbols:["relative"],postprocess:p},{name:"expression",symbols:["relativeDate"],postprocess:p},{name:"expression",symbols:["lastDayOfMonthExpr"],postprocess:p},{name:"expression",symbols:["date"],postprocess:p},{name:"expression",symbols:["fuzzy"],postprocess:p},{name:"expression",symbols:["forDuration"],postprocess:p},{name:"expression",symbols:["duration"],postprocess:p},{name:"lastDayOfMonthExpr",symbols:["lastRelative","_","dayUnit","_","ofConnector","_","month"],postprocess:e=>u({month:e[6],lastDayOfMonth:!0})},{name:"lastDayOfMonthExpr",symbols:["lastRelative","_","dayUnit","_","ofConnector","_","theConnector","_","monthUnit"],postprocess:e=>u({lastDayOfMonth:!0,monthFromRef:!0})},{name:"forDuration",symbols:["forConnector","_","duration"],postprocess:e=>e[2]},{name:"range",symbols:["date","_","toConnector","_","date"],postprocess:e=>w(e[0],e[4])},{name:"range",symbols:["fromConnector","_","date","_","toConnector","_","date"],postprocess:e=>w(e[2],e[6])},{name:"range",symbols:["date","_",r.has("dash")?{type:"dash"}:dash,"_","date"],postprocess:e=>w(e[0],e[4])},{name:"range",symbols:[r.has("monthDayCompact")?{type:"monthDayCompact"}:monthDayCompact,r.has("dash")?{type:"dash"}:dash,r.has("monthDayCompact")?{type:"monthDayCompact"}:monthDayCompact],postprocess:e=>{let t=S(e[0].value),o=S(e[2].value);return w(u({month:t.month,day:t.day}),u({month:o.month,day:o.day}))}},{name:"range",symbols:[r.has("monthDayCompact")?{type:"monthDayCompact"}:monthDayCompact,"_",r.has("dash")?{type:"dash"}:dash,"_","date"],postprocess:e=>{let t=S(e[0].value);return w(u({month:t.month,day:t.day}),e[4])}},{name:"range",symbols:["date","_",r.has("dash")?{type:"dash"}:dash,"_",r.has("monthDayCompact")?{type:"monthDayCompact"}:monthDayCompact],postprocess:e=>{let t=S(e[4].value);return w(e[0],u({month:t.month,day:t.day}))}},{name:"range",symbols:["specialDay","_","time","_","toConnector","_","time"],postprocess:e=>w(u({special:e[0],time:e[2]}),u({special:e[0],time:e[6]}))},{name:"range",symbols:["monthDay","_","time","_","toConnector","_","time"],postprocess:e=>w({...e[0],time:e[2]},{...e[0],time:e[6]})},{name:"range",symbols:["weekday","_","time","_","toConnector","_","time"],postprocess:e=>w(u({weekday:e[0],time:e[2]}),u({weekday:e[0],time:e[6]}))},{name:"range",symbols:["month","_","dayNumber",r.has("dash")?{type:"dash"}:dash,"dayNumber"],postprocess:e=>w(u({month:e[0],day:e[2]}),u({month:e[0],day:e[4]}))},{name:"range",symbols:["dayNumber",r.has("dash")?{type:"dash"}:dash,"dayNumber","_","month"],postprocess:e=>w(u({month:e[4],day:e[0]}),u({month:e[4],day:e[2]}))},{name:"range",symbols:["betweenConnector","_","date","_","andConnector","_","date"],postprocess:e=>w(e[2],e[6])},{name:"range",symbols:["date","_","throughConnector","_","date"],postprocess:e=>w(e[0],e[4])},{name:"range",symbols:["date","_","untilConnector","_","date"],postprocess:e=>w(e[0],e[4])},{name:"range",symbols:["untilConnector","_","date"],postprocess:e=>w(u({special:"today"}),e[2])},{name:"range",symbols:["untilConnector","_","fuzzy"],postprocess:e=>w(u({special:"today"}),e[2])},{name:"range",symbols:["fuzzy","_","toConnector","_","fuzzy"],postprocess:e=>w(e[0],e[4])},{name:"range",symbols:["fromConnector","_","fuzzy","_","toConnector","_","fuzzy"],postprocess:e=>w(e[2],e[6])},{name:"range",symbols:["betweenConnector","_","fuzzy","_","andConnector","_","fuzzy"],postprocess:e=>w(e[2],e[6])},{name:"range",symbols:["fromConnector","_","date","_","untilConnector","_","date"],postprocess:e=>w(e[2],e[6])},{name:"range",symbols:["fromConnector","_","specialDay","_","untilConnector","_","date"],postprocess:e=>w(u({special:e[2]}),e[6])},{name:"span",symbols:["date","_","forConnector","_","duration"],postprocess:e=>T(e[0],e[4])},{name:"span",symbols:["fuzzy","_","forConnector","_","duration"],postprocess:e=>T(e[0],e[4])},{name:"span",symbols:["inConnector","_","fuzzy","_","forConnector","_","duration"],postprocess:e=>T(e[2],e[6])},{name:"span",symbols:["inConnector","_","date","_","forConnector","_","duration"],postprocess:e=>T(e[2],e[6])},{name:"span",symbols:["inConnector","_","monthForSpan","_","forConnector","_","duration"],postprocess:e=>T(e[2],e[6])},{name:"span",symbols:["startingConnector","_","date","_","forConnector","_","duration"],postprocess:e=>T(e[2],e[6])},{name:"span",symbols:["beginningConnector","_","date","_","forConnector","_","duration"],postprocess:e=>T(e[2],e[6])},{name:"span",symbols:["startingConnector","_","date"],postprocess:e=>T(e[2])},{name:"span",symbols:["date","_","startingConnector","_","date"],postprocess:e=>T(e[4],e[0])},{name:"span",symbols:["duration","_","startingConnector","_","date"],postprocess:e=>T(e[4],e[0])},{name:"span",symbols:["duration","_","fromConnector","_","date"],postprocess:e=>T(e[4],e[0])},{name:"span",symbols:["duration","_","inConnector","_","fuzzy"],postprocess:e=>T(e[4],e[0])},{name:"span",symbols:["duration","_","inConnector","_","theConnector","_","fuzzy"],postprocess:e=>T(e[6],e[0])},{name:"monthForSpan",symbols:["month"],postprocess:e=>m({period:"month",month:e[0]})},{name:"relative",symbols:["lastRelative","_","number","_","unit"],postprocess:e=>_("past",c(e[2],e[4]))},{name:"relative",symbols:["pastRelative","_","number","_","unit"],postprocess:e=>_("past",c(e[2],e[4]))},{name:"relative",symbols:["previousRelative","_","number","_","unit"],postprocess:e=>_("past",c(e[2],e[4]))},{name:"relative",symbols:["nextRelative","_","number","_","unit"],postprocess:e=>_("future",c(e[2],e[4]))},{name:"relative",symbols:["comingRelative","_","number","_","unit"],postprocess:e=>_("future",c(e[2],e[4]))},{name:"relative",symbols:["upcomingRelative","_","number","_","unit"],postprocess:e=>_("future",c(e[2],e[4]))},{name:"relative",symbols:["withinConnector","_","duration"],postprocess:e=>_("future",e[2])},{name:"relative",symbols:["withinConnector","_","theConnector","_","nextRelative","_","duration"],postprocess:e=>_("future",e[6])},{name:"relative",symbols:["withinConnector","_","theConnector","_","lastRelative","_","duration"],postprocess:e=>_("past",e[6])},{name:"relative",symbols:["withinConnector","_","theConnector","_","pastRelative","_","duration"],postprocess:e=>_("past",e[6])},{name:"relative",symbols:["overConnector","_","theConnector","_","nextRelative","_","duration"],postprocess:e=>_("future",e[6])},{name:"relative",symbols:["overConnector","_","theConnector","_","lastRelative","_","duration"],postprocess:e=>_("past",e[6])},{name:"relative",symbols:["overConnector","_","theConnector","_","pastRelative","_","duration"],postprocess:e=>_("past",e[6])},{name:"relative",symbols:["overConnector","_","theConnector","_","comingRelative","_","duration"],postprocess:e=>_("future",e[6])},{name:"relative",symbols:["inConnector","_","theConnector","_","lastRelative","_","duration"],postprocess:e=>_("past",e[6])},{name:"relative",symbols:["inConnector","_","theConnector","_","nextRelative","_","duration"],postprocess:e=>_("future",e[6])},{name:"relative",symbols:["inConnector","_","theConnector","_","pastRelative","_","duration"],postprocess:e=>_("past",e[6])},{name:"relative",symbols:["inConnector","_","theConnector","_","comingRelative","_","duration"],postprocess:e=>_("future",e[6])},{name:"relative",symbols:["lastRelative","_","wordNumber","_","unit"],postprocess:e=>_("past",c(g(e[2]),e[4]))},{name:"relative",symbols:["nextRelative","_","wordNumber","_","unit"],postprocess:e=>_("future",c(g(e[2]),e[4]))},{name:"relative",symbols:["pastRelative","_","wordNumber","_","unit"],postprocess:e=>_("past",c(g(e[2]),e[4]))},{name:"relative",symbols:["previousRelative","_","wordNumber","_","unit"],postprocess:e=>_("past",c(g(e[2]),e[4]))},{name:"relative",symbols:["comingRelative","_","wordNumber","_","unit"],postprocess:e=>_("future",c(g(e[2]),e[4]))},{name:"relative",symbols:["upcomingRelative","_","wordNumber","_","unit"],postprocess:e=>_("future",c(g(e[2]),e[4]))},{name:"relative",symbols:["pastRelative","_","unit"],postprocess:e=>_("past",c(1,e[2]))},{name:"relative",symbols:["previousRelative","_","unit"],postprocess:e=>_("past",c(1,e[2]))},{name:"relative",symbols:["upcomingRelative","_","unit"],postprocess:e=>_("future",c(1,e[2]))},{name:"relative",symbols:["withinConnector","_","theConnector","_","nextRelative","_","unit"],postprocess:e=>_("future",c(1,e[6]))},{name:"relative",symbols:["withinConnector","_","theConnector","_","pastRelative","_","unit"],postprocess:e=>_("past",c(1,e[6]))},{name:"relative",symbols:["overConnector","_","theConnector","_","lastRelative","_","unit"],postprocess:e=>_("past",c(1,e[6]))},{name:"relative",symbols:["overConnector","_","theConnector","_","comingRelative","_","unit"],postprocess:e=>_("future",c(1,e[6]))},{name:"relative",symbols:["overConnector","_","theConnector","_","upcomingRelative","_","unit"],postprocess:e=>_("future",c(1,e[6]))},{name:"relative",symbols:["inConnector","_","theConnector","_","pastRelative","_","unit"],postprocess:e=>_("past",c(1,e[6]))},{name:"relative",symbols:["inConnector","_","theConnector","_","comingRelative","_","unit"],postprocess:e=>_("future",c(1,e[6]))},{name:"relative",symbols:["inConnector","_","theConnector","_","upcomingRelative","_","unit"],postprocess:e=>_("future",c(1,e[6]))},{name:"relativeDate",symbols:["duration","_","agoConnector"],postprocess:e=>d("past",e[0])},{name:"relativeDate",symbols:["duration","_","agoConnector","_","atConnector","_","time"],postprocess:e=>d("past",e[0],void 0,e[6])},{name:"relativeDate",symbols:["duration","_","agoConnector","_","atConnector","_","timeWord"],postprocess:e=>d("past",e[0],void 0,{special:e[6]})},{name:"relativeDate",symbols:["inConnector","_","duration"],postprocess:e=>d("future",e[2])},{name:"relativeDate",symbols:["inConnector","_","duration","_","atConnector","_","time"],postprocess:e=>d("future",e[2],void 0,e[6])},{name:"relativeDate",symbols:["inConnector","_","duration","_","atConnector","_","timeWord"],postprocess:e=>d("future",e[2],void 0,{special:e[6]})},{name:"relativeDate",symbols:["duration","_","fromConnector","_","now"],postprocess:e=>d("future",e[0])},{name:"relativeDate",symbols:["duration","_","fromConnector","_","now","_","atConnector","_","time"],postprocess:e=>d("future",e[0],void 0,e[8])},{name:"relativeDate",symbols:["duration","_","fromConnector","_","now","_","atConnector","_","timeWord"],postprocess:e=>d("future",e[0],void 0,{special:e[8]})},{name:"relativeDate",symbols:["duration","_","fromConnector","_","today"],postprocess:e=>d("future",e[0],u({special:"today"}))},{name:"relativeDate",symbols:["duration","_","fromConnector","_","today","_","atConnector","_","time"],postprocess:e=>d("future",e[0],u({special:"today"}),e[8])},{name:"relativeDate",symbols:["duration","_","fromConnector","_","tomorrow"],postprocess:e=>d("future",e[0],u({special:"tomorrow"}))},{name:"relativeDate",symbols:["duration","_","fromConnector","_","tomorrow","_","atConnector","_","time"],postprocess:e=>d("future",e[0],u({special:"tomorrow"}),e[8])},{name:"relativeDate",symbols:["duration","_","fromConnector","_","yesterday"],postprocess:e=>d("future",e[0],u({special:"yesterday"}))},{name:"relativeDate",symbols:["duration","_","henceConnector"],postprocess:e=>d("future",e[0])},{name:"relativeDate",symbols:["duration","_","laterConnector"],postprocess:e=>d("future",e[0])},{name:"relativeDate",symbols:["duration","_","beforeConnector","_","date"],postprocess:e=>d("past",e[0],e[4])},{name:"relativeDate",symbols:["duration","_","afterConnector","_","date"],postprocess:e=>d("future",e[0],e[4])},{name:"relativeDate",symbols:["theConnector","_","dayUnit","_","beforeConnector","_","date"],postprocess:e=>d("past",c(1,"day"),e[6])},{name:"relativeDate",symbols:["theConnector","_","dayUnit","_","afterConnector","_","date"],postprocess:e=>d("future",c(1,"day"),e[6])},{name:"relativeDate",symbols:["dayUnit","_","beforeConnector","_","date"],postprocess:e=>d("past",c(1,"day"),e[4])},{name:"relativeDate",symbols:["dayUnit","_","afterConnector","_","date"],postprocess:e=>d("future",c(1,"day"),e[4])},{name:"relativeDate",symbols:["wordNumber","_","unit","_","beforeConnector","_","date"],postprocess:e=>d("past",c(g(e[0]),e[2]),e[6])},{name:"relativeDate",symbols:["wordNumber","_","unit","_","afterConnector","_","date"],postprocess:e=>d("future",c(g(e[0]),e[2]),e[6])},{name:"relativeDate",symbols:["nextRelative","_","businessKeyword","_","dayOrDaysUnit"],postprocess:e=>d("future",c(1,"businessDay"))},{name:"relativeDate",symbols:["inConnector","_","number","_","businessKeyword","_","dayOrDaysUnit"],postprocess:e=>d("future",c(e[2],"businessDay"))},{name:"relativeDate",symbols:["inConnector","_","wordNumber","_","businessKeyword","_","dayOrDaysUnit"],postprocess:e=>d("future",c(g(e[2]),"businessDay"))},{name:"relativeDate",symbols:["number","_","businessKeyword","_","dayOrDaysUnit","_","agoConnector"],postprocess:e=>d("past",c(e[0],"businessDay"))},{name:"relativeDate",symbols:["wordNumber","_","businessKeyword","_","dayOrDaysUnit","_","agoConnector"],postprocess:e=>d("past",c(g(e[0]),"businessDay"))},{name:"relativeDate",symbols:["wordNumber","_","fortnightKeyword","_","fromConnector","_","now"],postprocess:e=>d("future",c(g(e[0])*2,"week"))},{name:"relativeDate",symbols:["number","_","fortnightKeyword","_","fromConnector","_","now"],postprocess:e=>d("future",c(e[0]*2,"week"))},{name:"relativeDate",symbols:["fortnightKeyword","_","fromConnector","_","now"],postprocess:e=>d("future",c(2,"week"))},{name:"relativeDate",symbols:["inConnector","_","wordNumber","_","fortnightKeyword"],postprocess:e=>d("future",c(g(e[2])*2,"week"))},{name:"relativeDate",symbols:["inConnector","_","number","_","fortnightKeyword"],postprocess:e=>d("future",c(e[2]*2,"week"))},{name:"relativeDate",symbols:["inConnector","_","fortnightKeyword"],postprocess:e=>d("future",c(2,"week"))},{name:"relativeDate",symbols:["wordNumber","_","fortnightKeyword","_","agoConnector"],postprocess:e=>d("past",c(g(e[0])*2,"week"))},{name:"relativeDate",symbols:["number","_","fortnightKeyword","_","agoConnector"],postprocess:e=>d("past",c(e[0]*2,"week"))},{name:"relativeDate",symbols:["fortnightKeyword","_","agoConnector"],postprocess:e=>d("past",c(2,"week"))},{name:"relativeDate",symbols:["number","_","weekday","_","fromConnector","_","now"],postprocess:e=>({...d("future",c(e[0],"weekdayOccurrence")),weekday:e[2]})},{name:"relativeDate",symbols:["wordNumber","_","weekday","_","fromConnector","_","now"],postprocess:e=>({...d("future",c(g(e[0]),"weekdayOccurrence")),weekday:e[2]})},{name:"relativeDate",symbols:["number","_","weekday","_","agoConnector"],postprocess:e=>({...d("past",c(e[0],"weekdayOccurrence")),weekday:e[2]})},{name:"relativeDate",symbols:["wordNumber","_","weekday","_","agoConnector"],postprocess:e=>({...d("past",c(g(e[0]),"weekdayOccurrence")),weekday:e[2]})},{name:"fuzzy",symbols:["quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[0].value)})},{name:"fuzzy",symbols:["quarter","_","year"],postprocess:e=>m({period:"quarter",quarter:x(e[0].value),year:e[2]})},{name:"fuzzy",symbols:["half"],postprocess:e=>m({period:"half",half:$(e[0].value)})},{name:"fuzzy",symbols:["half","_","year"],postprocess:e=>m({period:"half",half:$(e[0].value),year:e[2]})},{name:"fuzzy",symbols:["earlyModifier","_","month"],postprocess:e=>m({period:"month",month:e[2],modifier:"early"})},{name:"fuzzy",symbols:["midModifier","_","month"],postprocess:e=>m({period:"month",month:e[2],modifier:"mid"})},{name:"fuzzy",symbols:["lateModifier","_","month"],postprocess:e=>m({period:"month",month:e[2],modifier:"late"})},{name:"fuzzy",symbols:["earlyModifier","_","quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[2].value),modifier:"early"})},{name:"fuzzy",symbols:["midModifier","_","quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[2].value),modifier:"mid"})},{name:"fuzzy",symbols:["lateModifier","_","quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[2].value),modifier:"late"})},{name:"fuzzy",symbols:["earlyModifier","_","year"],postprocess:e=>m({period:"year",year:e[2],modifier:"early"})},{name:"fuzzy",symbols:["midModifier","_","year"],postprocess:e=>m({period:"year",year:e[2],modifier:"mid"})},{name:"fuzzy",symbols:["lateModifier","_","year"],postprocess:e=>m({period:"year",year:e[2],modifier:"late"})},{name:"fuzzy",symbols:["earlyModifier","_","yearUnit"],postprocess:e=>m({period:"year",modifier:"early"})},{name:"fuzzy",symbols:["midModifier","_","yearUnit"],postprocess:e=>m({period:"year",modifier:"mid"})},{name:"fuzzy",symbols:["lateModifier","_","yearUnit"],postprocess:e=>m({period:"year",modifier:"late"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","month"],postprocess:e=>m({period:"month",month:e[4],modifier:"end"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","year"],postprocess:e=>m({period:"year",year:e[4],modifier:"end"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[4].value),modifier:"end"})},{name:"fuzzy",symbols:["startConnector","_","ofConnector","_","quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[4].value),modifier:"start"})},{name:"fuzzy",symbols:["beginningConnector","_","ofConnector","_","quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[4].value),modifier:"beginning"})},{name:"fuzzy",symbols:["middleConnector","_","ofConnector","_","quarter"],postprocess:e=>m({period:"quarter",quarter:x(e[4].value),modifier:"middle"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","theConnector","_","month"],postprocess:e=>m({period:"month",month:e[6],modifier:"end"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","theConnector","_","unit"],postprocess:e=>m({period:e[6],modifier:"end"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","unit"],postprocess:e=>m({period:e[4],modifier:"end"})},{name:"fuzzy",symbols:["beginningConnector","_","ofConnector","_","unit"],postprocess:e=>m({period:e[4],modifier:"beginning"})},{name:"fuzzy",symbols:["startConnector","_","ofConnector","_","unit"],postprocess:e=>m({period:e[4],modifier:"start"})},{name:"fuzzy",symbols:["middleConnector","_","ofConnector","_","unit"],postprocess:e=>m({period:e[4],modifier:"middle"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","nextRelative","_","unit"],postprocess:e=>m({period:e[6],modifier:"end",relative:"next"})},{name:"fuzzy",symbols:["endConnector","_","ofConnector","_","lastRelative","_","unit"],postprocess:e=>m({period:e[6],modifier:"end",relative:"last"})},{name:"fuzzy",symbols:["startConnector","_","ofConnector","_","nextRelative","_","unit"],postprocess:e=>m({period:e[6],modifier:"start",relative:"next"})},{name:"fuzzy",symbols:["startConnector","_","ofConnector","_","lastRelative","_","unit"],postprocess:e=>m({period:e[6],modifier:"start",relative:"last"})},{name:"fuzzy",symbols:["beginningConnector","_","ofConnector","_","nextRelative","_","unit"],postprocess:e=>m({period:e[6],modifier:"beginning",relative:"next"})},{name:"fuzzy",symbols:["beginningConnector","_","ofConnector","_","lastRelative","_","unit"],postprocess:e=>m({period:e[6],modifier:"beginning",relative:"last"})},{name:"fuzzy",symbols:["beginningConnector","_","ofConnector","_","month"],postprocess:e=>m({period:"month",month:e[4],modifier:"beginning"})},{name:"fuzzy",symbols:["beginningConnector","_","ofConnector","_","year"],postprocess:e=>m({period:"year",year:e[4],modifier:"beginning"})},{name:"fuzzy",symbols:["startConnector","_","ofConnector","_","month"],postprocess:e=>m({period:"month",month:e[4],modifier:"start"})},{name:"fuzzy",symbols:["startConnector","_","ofConnector","_","year"],postprocess:e=>m({period:"year",year:e[4],modifier:"start"})},{name:"fuzzy",symbols:["middleConnector","_","ofConnector","_","month"],postprocess:e=>m({period:"month",month:e[4],modifier:"middle"})},{name:"fuzzy",symbols:["middleConnector","_","ofConnector","_","year"],postprocess:e=>m({period:"year",year:e[4],modifier:"middle"})},{name:"fuzzy",symbols:["season"],postprocess:e=>m({period:"season",season:e[0]})},{name:"fuzzy",symbols:["season","_","year"],postprocess:e=>m({period:"season",season:e[0],year:e[2]})},{name:"fuzzy",symbols:["earlyModifier","_","season"],postprocess:e=>m({period:"season",season:e[2],modifier:"early"})},{name:"fuzzy",symbols:["midModifier","_","season"],postprocess:e=>m({period:"season",season:e[2],modifier:"mid"})},{name:"fuzzy",symbols:["lateModifier","_","season"],postprocess:e=>m({period:"season",season:e[2],modifier:"late"})},{name:"fuzzy",symbols:["nextRelative","_","season"],postprocess:e=>m({period:"season",season:e[2],relative:"next"})},{name:"fuzzy",symbols:["lastRelative","_","season"],postprocess:e=>m({period:"season",season:e[2],relative:"last"})},{name:"fuzzy",symbols:["thisRelative","_","season"],postprocess:e=>m({period:"season",season:e[2],relative:"this"})},{name:"fuzzy",symbols:["ordinalWord","_","quarter","_","year"],postprocess:e=>m({period:"quarter",quarter:v(e[0]),year:e[4]})},{name:"fuzzy",symbols:["ordinalWord","_","quarter"],postprocess:e=>m({period:"quarter",quarter:v(e[0])})},{name:"fuzzy",symbols:["ordinalWord","_","half","_","year"],postprocess:e=>m({period:"half",half:v(e[0]),year:e[4]})},{name:"fuzzy",symbols:["ordinalWord","_","half"],postprocess:e=>m({period:"half",half:v(e[0])})},{name:"fuzzy",symbols:["aroundConnector","_","date"],postprocess:e=>m({...e[2],period:"around"})},{name:"fuzzy",symbols:["aboutConnector","_","date"],postprocess:e=>m({...e[2],period:"around"})},{name:"fuzzy",symbols:["roughlyConnector","_","date"],postprocess:e=>m({...e[2],period:"around"})},{name:"fuzzy",symbols:["approximatelyConnector","_","date"],postprocess:e=>m({...e[2],period:"around"})},{name:"fuzzy",symbols:["aroundConnector","_","fuzzy"],postprocess:e=>e[2]},{name:"fuzzy",symbols:["aboutConnector","_","fuzzy"],postprocess:e=>e[2]},{name:"fuzzy",symbols:["roughlyConnector","_","fuzzy"],postprocess:e=>e[2]},{name:"fuzzy",symbols:["approximatelyConnector","_","fuzzy"],postprocess:e=>e[2]},{name:"fuzzy",symbols:["sometimeConnector","_","inConnector","_","fuzzy"],postprocess:e=>e[4]},{name:"fuzzy",symbols:["sometimeConnector","_","inConnector","_","month"],postprocess:e=>m({period:"month",month:e[4]})},{name:"fuzzy",symbols:["sometimeConnector","_","nextRelative","_","unit"],postprocess:e=>m({period:e[4],relative:"next"})},{name:"fuzzy",symbols:["sometimeConnector","_","lastRelative","_","unit"],postprocess:e=>m({period:e[4],relative:"last"})},{name:"fuzzy",symbols:["sometimeConnector","_","thisRelative","_","unit"],postprocess:e=>m({period:e[4],relative:"this"})},{name:"fuzzy",symbols:["theConnector","_","lastRelative","_","unit","_","ofConnector","_","month"],postprocess:e=>m({period:"month",month:e[8],modifier:"late"})},{name:"fuzzy",symbols:["theConnector","_","ordinalWord","_","unit","_","ofConnector","_","month"],postprocess:(e,t,o)=>e[2].toLowerCase()==="first"?m({period:"month",month:e[8],modifier:"early"}):o},{name:"fuzzy",symbols:["ordinalWord","_","quarterUnit"],postprocess:e=>m({period:"quarter",quarter:v(e[0])})},{name:"fuzzy",symbols:["ordinal","_","quarterUnit"],postprocess:e=>m({period:"quarter",quarter:H(e[0])})},{name:"fuzzy",symbols:["ordinalWord","_","quarterUnit","_","year"],postprocess:e=>m({period:"quarter",quarter:v(e[0]),year:e[4]})},{name:"fuzzy",symbols:["ordinalWord","_","quarterUnit","_","ofConnector","_","year"],postprocess:e=>m({period:"quarter",quarter:v(e[0]),year:e[6]})},{name:"fuzzy",symbols:["quarter","_","ofConnector","_","year"],postprocess:e=>m({period:"quarter",quarter:x(e[0].value),year:e[4]})},{name:"fuzzy",symbols:["ordinalWord","_","halfWord","_","ofConnector","_","year"],postprocess:e=>m({period:"half",half:v(e[0]),year:e[6]})},{name:"fuzzy",symbols:["earlyModifier","_","nextRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"early",relative:"next"})},{name:"fuzzy",symbols:["midModifier","_","nextRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"mid",relative:"next"})},{name:"fuzzy",symbols:["lateModifier","_","nextRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"late",relative:"next"})},{name:"fuzzy",symbols:["earlyModifier","_","lastRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"early",relative:"last"})},{name:"fuzzy",symbols:["midModifier","_","lastRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"mid",relative:"last"})},{name:"fuzzy",symbols:["lateModifier","_","lastRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"late",relative:"last"})},{name:"fuzzy",symbols:["earlyModifier","_","thisRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"early",relative:"this"})},{name:"fuzzy",symbols:["midModifier","_","thisRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"mid",relative:"this"})},{name:"fuzzy",symbols:["lateModifier","_","thisRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"late",relative:"this"})},{name:"fuzzy",symbols:["beginningConnector","_","ofConnector","_","theConnector","_","unit"],postprocess:e=>m({period:e[6],modifier:"beginning"})},{name:"fuzzy",symbols:["middleConnector","_","ofConnector","_","theConnector","_","unit"],postprocess:e=>m({period:e[6],modifier:"middle"})},{name:"fuzzy",symbols:["lastRelative","_","unit","_","ofConnector","_","month"],postprocess:(e,t,o)=>e[2].toLowerCase()==="day"||e[2].toLowerCase()==="days"?o:m({period:"month",month:e[6],modifier:"late"})},{name:"fuzzy",symbols:["ordinalWord","_","unit","_","ofConnector","_","month"],postprocess:(e,t,o)=>e[2].toLowerCase()==="day"||e[2].toLowerCase()==="days"?o:m({period:"month",month:e[6],modifier:v(e[0])<=2?"early":v(e[0])>=4?"late":"mid"})},{name:"fuzzy",symbols:["weekendKeyword"],postprocess:e=>m({period:"weekend",relative:"this"})},{name:"fuzzy",symbols:["theConnector","_","weekendKeyword"],postprocess:e=>m({period:"weekend",relative:"this"})},{name:"fuzzy",symbols:["thisRelative","_","weekendKeyword"],postprocess:e=>m({period:"weekend",relative:"this"})},{name:"fuzzy",symbols:["nextRelative","_","weekendKeyword"],postprocess:e=>m({period:"weekend",relative:"next"})},{name:"fuzzy",symbols:["lastRelative","_","weekendKeyword"],postprocess:e=>m({period:"weekend",relative:"last"})},{name:"fuzzy",symbols:["tonightKeyword"],postprocess:e=>m({period:"tonight"})},{name:"fuzzy",symbols:["nightKeyword"],postprocess:e=>m({period:"night"})},{name:"fuzzy",symbols:["lastRelative","_","nightKeyword"],postprocess:e=>m({period:"night",relative:"last"})},{name:"fuzzy",symbols:["tomorrow","_","nightKeyword"],postprocess:e=>m({period:"night",relative:"tomorrow"})},{name:"fuzzy",symbols:["weekday","_","nightKeyword"],postprocess:e=>m({period:"night",weekday:e[0]})},{name:"fuzzy",symbols:["laterKeyword","_","today"],postprocess:e=>m({period:"day",modifier:"later"})},{name:"fuzzy",symbols:["earlierKeyword","_","today"],postprocess:e=>m({period:"day",modifier:"earlier"})},{name:"fuzzy",symbols:["laterKeyword","_","thisRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"later",relative:"this"})},{name:"fuzzy",symbols:["earlierKeyword","_","thisRelative","_","unit"],postprocess:e=>m({period:e[4],modifier:"earlier",relative:"this"})},{name:"fuzzy",symbols:["weekKeyword","_","number"],postprocess:e=>m({period:"weekNumber",weekNumber:e[2]})},{name:"fuzzy",symbols:["weekKeyword","_","number","_","year"],postprocess:e=>m({period:"weekNumber",weekNumber:e[2],year:e[4]})},{name:"fuzzy",symbols:["theConnector","_","weekKeyword","_","ofConnector","_","date"],postprocess:e=>m({period:"weekOf",baseDate:e[6]})},{name:"fuzzy",symbols:["ordinalWord","_","weekKeyword","_","ofConnector","_","month"],postprocess:e=>m({period:"weekOfMonth",week:v(e[0]),month:e[6]})},{name:"fuzzy",symbols:[r.has("kw_ytd")?{type:"kw_ytd"}:kw_ytd],postprocess:e=>m({period:"ytd"})},{name:"duration",symbols:["number","_","unit"],postprocess:e=>c(e[0],e[2])},{name:"duration",symbols:["wordNumber","_","unit"],postprocess:e=>c(g(e[0]),e[2])},{name:"duration",symbols:["abbreviatedDuration"],postprocess:e=>e[0]},{name:"duration",symbols:["halfWord","_","wordNumber","_","unit"],postprocess:e=>{let t=e[2].toLowerCase();return c(t==="a"||t==="an"?.5:g(e[2])+.5,e[4])}},{name:"duration",symbols:["number","_","andConnector","_","halfWord","_","unit"],postprocess:e=>c(e[0]+.5,e[6])},{name:"duration",symbols:["wordNumber","_","andConnector","_","halfWord","_","unit"],postprocess:e=>c(g(e[0])+.5,e[6])},{name:"duration",symbols:["wordNumber","_","andConnector","_","wordNumber","_","halfWord","_","unit"],postprocess:e=>c(g(e[0])+.5,e[8])},{name:"duration",symbols:["wordNumber","_","unit","_","andConnector","_","wordNumber","_","halfWord"],postprocess:e=>c(g(e[0])+.5,e[2])},{name:"duration",symbols:["halfWord","_","unit"],postprocess:e=>c(.5,e[2])},{name:"duration",symbols:["duration","_","andConnector","_","duration"],postprocess:e=>({...e[0],combined:[e[0],e[4]]})},{name:"duration",symbols:["duration","_",r.has("comma")?{type:"comma"}:comma,"_","duration"],postprocess:e=>({...e[0],combined:[e[0],e[4]]})},{name:"duration",symbols:["duration","_",r.has("comma")?{type:"comma"}:comma,"_","andConnector","_","duration"],postprocess:e=>({...e[0],combined:[e[0],e[6]]})},{name:"duration",symbols:["duration","_","duration"],postprocess:e=>({...e[0],combined:[e[0],e[2]]})},{name:"duration",symbols:["aroundConnector","_","duration"],postprocess:e=>({...e[2],approximate:!0})},{name:"duration",symbols:["aboutConnector","_","duration"],postprocess:e=>({...e[2],approximate:!0})},{name:"abbreviatedDuration",symbols:[r.has("abbreviatedDuration")?{type:"abbreviatedDuration"}:abbreviatedDuration],postprocess:e=>{let t=e[0].value.match(/^(\d+)(mo|w|d|h|m|s|y)$/);if(!t)return null;let o=parseInt(t[1],10);return c(o,{w:"week",d:"day",h:"hour",m:"minute",mo:"month",s:"second",y:"year"}[t[2]])}},{name:"date",symbols:["specialDay"],postprocess:e=>u({special:e[0]})},{name:"date",symbols:["ordinalWeekdayOfMonth"],postprocess:p},{name:"date",symbols:["relativeWeekday"],postprocess:p},{name:"date",symbols:["weekday"],postprocess:e=>u({weekday:e[0]})},{name:"date",symbols:["monthDayYear"],postprocess:p},{name:"date",symbols:["monthDay"],postprocess:p},{name:"date",symbols:["monthDayCompact"],postprocess:p},{name:"date",symbols:["monthYear"],postprocess:p},{name:"date",symbols:["dateFormat"],postprocess:p},{name:"date",symbols:["relativePeriod"],postprocess:p},{name:"date",symbols:["complexDate"],postprocess:p},{name:"date",symbols:["dateWithTime"],postprocess:p},{name:"date",symbols:["relativeMonth"],postprocess:p},{name:"date",symbols:["monthOnly"],postprocess:p},{name:"date",symbols:["yearOnly"],postprocess:p},{name:"date",symbols:["timeOnly"],postprocess:p},{name:"date",symbols:["dayOnly"],postprocess:p},{name:"date",symbols:["eodCobDate"],postprocess:p},{name:"monthDayCompact",symbols:[r.has("monthDayCompact")?{type:"monthDayCompact"}:monthDayCompact],postprocess:e=>{let t=S(e[0].value);return u({month:t.month,day:t.day})}},{name:"monthOnly",symbols:["month"],postprocess:e=>u({month:e[0],day:1,monthOnly:!0})},{name:"relativeMonth",symbols:["nextRelative","_","month"],postprocess:e=>u({month:e[2],day:1,monthOnly:!0,relativeMonth:"next"})},{name:"relativeMonth",symbols:["lastRelative","_","month"],postprocess:e=>u({month:e[2],day:1,monthOnly:!0,relativeMonth:"last"})},{name:"relativeMonth",symbols:["thisRelative","_","month"],postprocess:e=>u({month:e[2],day:1,monthOnly:!0,relativeMonth:"this"})},{name:"monthYear",symbols:["month","_","year"],postprocess:e=>u({month:e[0],year:e[2],day:1,monthOnly:!0})},{name:"yearOnly",symbols:["year"],postprocess:(e,t,o)=>{let s=e[0];return s<1900||s>2100?o:u({year:s,month:1,day:1,yearOnly:!0})}},{name:"timeOnly",symbols:["time"],postprocess:e=>u({time:e[0],timeOnly:!0})},{name:"timeOnly",symbols:["timeWord"],postprocess:e=>u({time:{special:e[0]},timeOnly:!0})},{name:"dayOnly",symbols:["theConnector","_","dayNumber"],postprocess:e=>u({day:e[2],dayOnly:!0})},{name:"dayOnly",symbols:["onConnector","_","theConnector","_","dayNumber"],postprocess:e=>u({day:e[4],dayOnly:!0})},{name:"eodCobDate",symbols:["eodKeyword"],postprocess:e=>u({special:"today",time:{hour:23,minute:59}})},{name:"eodCobDate",symbols:["cobKeyword"],postprocess:e=>u({special:"today",time:{hour:17,minute:0}})},{name:"eodCobDate",symbols:["eodKeyword","_","weekday"],postprocess:e=>u({weekday:e[2],time:{hour:23,minute:59}})},{name:"eodCobDate",symbols:["cobKeyword","_","weekday"],postprocess:e=>u({weekday:e[2],time:{hour:17,minute:0}})},{name:"eodCobDate",symbols:["eodKeyword","_","specialDay"],postprocess:e=>u({special:e[2],time:{hour:23,minute:59}})},{name:"eodCobDate",symbols:["cobKeyword","_","specialDay"],postprocess:e=>u({special:e[2],time:{hour:17,minute:0}})},{name:"eodCobDate",symbols:["endConnector","_","ofConnector","_","dayUnit","_","specialDay"],postprocess:e=>u({special:e[6],time:{hour:23,minute:59}})},{name:"eodCobDate",symbols:["closeKeyword","_","ofConnector","_","businessKeyword","_","weekday"],postprocess:e=>u({weekday:e[6],time:{hour:17,minute:0}})},{name:"eodCobDate",symbols:["closeKeyword","_","ofConnector","_","businessKeyword","_","specialDay"],postprocess:e=>u({special:e[6],time:{hour:17,minute:0}})},{name:"specialDay",symbols:["today"],postprocess:e=>"today"},{name:"specialDay",symbols:["tomorrow"],postprocess:e=>"tomorrow"},{name:"specialDay",symbols:["yesterday"],postprocess:e=>"yesterday"},{name:"specialDay",symbols:["now"],postprocess:e=>"now"},{name:"specialDay",symbols:["theConnector","_","dayUnit","_","afterConnector","_","tomorrow"],postprocess:e=>"dayAfterTomorrow"},{name:"specialDay",symbols:["dayUnit","_","afterConnector","_","tomorrow"],postprocess:e=>"dayAfterTomorrow"},{name:"specialDay",symbols:["theConnector","_","dayUnit","_","beforeConnector","_","yesterday"],postprocess:e=>"dayBeforeYesterday"},{name:"specialDay",symbols:["dayUnit","_","beforeConnector","_","yesterday"],postprocess:e=>"dayBeforeYesterday"},{name:"dayUnit",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>e[0].value==="day"?e[0]:o},{name:"dayOrDaysUnit",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>e[0].value==="day"||e[0].value==="days"?e[0]:o},{name:"relativeWeekday",symbols:["nextRelative","_","weekday"],postprocess:e=>u({weekday:e[2],relative:"next"})},{name:"relativeWeekday",symbols:["lastRelative","_","weekday"],postprocess:e=>u({weekday:e[2],relative:"last"})},{name:"relativeWeekday",symbols:["thisRelative","_","weekday"],postprocess:e=>u({weekday:e[2],relative:"this"})},{name:"relativeWeekday",symbols:["comingRelative","_","weekday"],postprocess:e=>u({weekday:e[2],relative:"next"})},{name:"relativeWeekday",symbols:["previousRelative","_","weekday"],postprocess:e=>u({weekday:e[2],relative:"last"})},{name:"relativePeriod",symbols:["nextRelative","_","unit"],postprocess:e=>u({relative:"next",period:e[2]})},{name:"relativePeriod",symbols:["lastRelative","_","unit"],postprocess:e=>u({relative:"last",period:e[2]})},{name:"relativePeriod",symbols:["thisRelative","_","unit"],postprocess:e=>u({relative:"this",period:e[2]})},{name:"monthDay",symbols:["month","_","dayNumber"],postprocess:e=>u({month:e[0],day:e[2]})},{name:"monthDay",symbols:["dayNumber","_","month"],postprocess:e=>u({month:e[2],day:e[0]})},{name:"monthDay",symbols:["dayNumber","_","ofConnector","_","month"],postprocess:e=>u({month:e[4],day:e[0]})},{name:"monthDay",symbols:["theConnector","_","dayNumber","_","ofConnector","_","month"],postprocess:e=>u({month:e[6],day:e[2]})},{name:"monthDay",symbols:["month","_","ordinalWord"],postprocess:e=>u({month:e[0],day:v(e[2])})},{name:"monthDay",symbols:["month","_","theConnector","_","dayNumber"],postprocess:e=>u({month:e[0],day:e[4]})},{name:"ordinalWeekdayOfMonth",symbols:["ordinalWord","_","weekday","_","ofConnector","_","month"],postprocess:e=>u({ordinalWeekday:v(e[0]),weekday:e[2],month:e[6]})},{name:"ordinalWeekdayOfMonth",symbols:["lastRelative","_","weekday","_","ofConnector","_","month"],postprocess:e=>u({ordinalWeekday:-1,weekday:e[2],month:e[6]})},{name:"ordinalWeekdayOfMonth",symbols:["ordinalWord","_","weekday","_","ofConnector","_","theConnector","_","monthUnit"],postprocess:e=>u({ordinalWeekday:v(e[0]),weekday:e[2],monthFromRef:!0})},{name:"ordinalWeekdayOfMonth",symbols:["lastRelative","_","weekday","_","ofConnector","_","theConnector","_","monthUnit"],postprocess:e=>u({ordinalWeekday:-1,weekday:e[2],monthFromRef:!0})},{name:"ordinalWeekdayOfMonth",symbols:["ordinalWord","_","dayUnit","_","ofConnector","_","month"],postprocess:e=>u({month:e[6],day:v(e[0])})},{name:"ordinalWeekdayOfMonth",symbols:["lastRelative","_","dayUnit","_","ofConnector","_","month"],postprocess:e=>u({month:e[6],day:-1,lastDayOfMonth:!0})},{name:"ordinalWeekdayOfMonth",symbols:["lastRelative","_","dayUnit","_","ofConnector","_","theConnector","_","monthUnit"],postprocess:e=>u({lastDayOfMonth:!0,monthFromRef:!0})},{name:"ordinalWeekdayOfMonth",symbols:["ordinalWord","_","dayUnit","_","ofConnector","_","nextRelative","_","monthUnit"],postprocess:e=>u({ordinalWeekday:v(e[0]),dayOfMonth:!0,nextMonth:!0})},{name:"monthDayYear",symbols:["monthDay","_","year"],postprocess:e=>({...e[0],year:e[2]})},{name:"monthDayYear",symbols:["monthDay",r.has("comma")?{type:"comma"}:comma,"_","year"],postprocess:e=>({...e[0],year:e[3]})},{name:"dateFormat",symbols:[r.has("integer")?{type:"integer"}:integer,r.has("dash")?{type:"dash"}:dash,r.has("integer")?{type:"integer"}:integer,r.has("dash")?{type:"dash"}:dash,r.has("integer")?{type:"integer"}:integer],postprocess:e=>{let t=[parseInt(e[0].value,10),parseInt(e[2].value,10),parseInt(e[4].value,10)];return t[0]>1e3?u({year:t[0],month:t[1],day:t[2]}):u({formatParts:t,separator:"-"})}},{name:"dateFormat",symbols:[r.has("integer")?{type:"integer"}:integer,r.has("slash")?{type:"slash"}:slash,r.has("integer")?{type:"integer"}:integer,r.has("slash")?{type:"slash"}:slash,r.has("integer")?{type:"integer"}:integer],postprocess:e=>{let t=[parseInt(e[0].value,10),parseInt(e[2].value,10),parseInt(e[4].value,10)];return t[0]>1e3?u({year:t[0],month:t[1],day:t[2]}):u({formatParts:t,separator:"/"})}},{name:"dateWithTime",symbols:["date","_","atConnector","_","time"],postprocess:e=>({...e[0],time:e[4]})},{name:"dateWithTime",symbols:["date","_","atConnector","_","timeWord"],postprocess:e=>({...e[0],time:{special:e[4]}})},{name:"dateWithTime",symbols:["time","_","date"],postprocess:e=>({...e[2],time:e[0]})},{name:"dateWithTime",symbols:["timeWord","_","date"],postprocess:e=>({...e[2],time:{special:e[0]}})},{name:"dateWithTime",symbols:["date","_","time"],postprocess:e=>({...e[0],time:e[2]})},{name:"dateWithTime",symbols:["date","_","timeWord"],postprocess:e=>({...e[0],time:{special:e[2]}})},{name:"dateWithTime",symbols:["timeWord","_","onConnector","_","date"],postprocess:e=>({...e[4],time:{special:e[0]}})},{name:"dateWithTime",symbols:["timeWord","_","onConnector","_","weekday"],postprocess:e=>u({weekday:e[4],time:{special:e[0]}})},{name:"dateWithTime",symbols:["midnight","_","tonightKeyword"],postprocess:e=>u({special:"tonight",time:{special:"midnight"}})},{name:"complexDate",symbols:["nextRelative","_","unit","_","weekday","_","time"],postprocess:e=>u({relative:"next",period:e[2],weekday:e[4],time:e[6]})},{name:"complexDate",symbols:["nextRelative","_","unit","_","weekday"],postprocess:e=>u({relative:"next",period:e[2],weekday:e[4]})},{name:"complexDate",symbols:["lastRelative","_","unit","_","weekday","_","time"],postprocess:e=>u({relative:"last",period:e[2],weekday:e[4],time:e[6]})},{name:"complexDate",symbols:["lastRelative","_","unit","_","weekday"],postprocess:e=>u({relative:"last",period:e[2],weekday:e[4]})},{name:"complexDate",symbols:["thisRelative","_","unit","_","weekday","_","time"],postprocess:e=>u({relative:"this",period:e[2],weekday:e[4],time:e[6]})},{name:"complexDate",symbols:["thisRelative","_","unit","_","weekday"],postprocess:e=>u({relative:"this",period:e[2],weekday:e[4]})},{name:"time",symbols:[r.has("time")?{type:"time"}:time],postprocess:e=>{let t=e[0].value.split(":");return{hour:parseInt(t[0],10),minute:parseInt(t[1],10)}}},{name:"time",symbols:[r.has("time")?{type:"time"}:time,"_",r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=e[0].value.split(":"),o=parseInt(t[0],10);return e[2].value==="pm"&&o!==12&&(o+=12),e[2].value==="am"&&o===12&&(o=0),{hour:o,minute:parseInt(t[1],10)}}},{name:"time",symbols:[r.has("time")?{type:"time"}:time,r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=e[0].value.split(":"),o=parseInt(t[0],10);return e[1].value==="pm"&&o!==12&&(o+=12),e[1].value==="am"&&o===12&&(o=0),{hour:o,minute:parseInt(t[1],10)}}},{name:"time",symbols:[r.has("integer")?{type:"integer"}:integer,"_",r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=parseInt(e[0].value,10);return e[2].value==="pm"&&t!==12&&(t+=12),e[2].value==="am"&&t===12&&(t=0),{hour:t,minute:0}}},{name:"time",symbols:[r.has("integer")?{type:"integer"}:integer,r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=parseInt(e[0].value,10);return e[1].value==="pm"&&t!==12&&(t+=12),e[1].value==="am"&&t===12&&(t=0),{hour:t,minute:0}}},{name:"time",symbols:["quarterKeyword","_","pastConnector","_","hourNumber"],postprocess:e=>({hour:e[4],minute:15})},{name:"time",symbols:["quarterKeyword","_","pastConnector","_","hourNumber",r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=e[4];return e[5].value==="pm"&&t!==12&&(t+=12),e[5].value==="am"&&t===12&&(t=0),{hour:t,minute:15}}},{name:"time",symbols:["halfWord","_","pastConnector","_","hourNumber"],postprocess:e=>({hour:e[4],minute:30})},{name:"time",symbols:["halfWord","_","pastConnector","_","hourNumber",r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=e[4];return e[5].value==="pm"&&t!==12&&(t+=12),e[5].value==="am"&&t===12&&(t=0),{hour:t,minute:30}}},{name:"time",symbols:["quarterKeyword","_","toConnector","_","hourNumber"],postprocess:e=>({hour:e[4]-1,minute:45})},{name:"time",symbols:["quarterKeyword","_","toConnector","_","hourNumber",r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=e[4];return e[5].value==="pm"&&t!==12&&(t+=12),e[5].value==="am"&&t===12&&(t=0),{hour:t-1,minute:45}}},{name:"time",symbols:["number","_","pastConnector","_","hourNumber"],postprocess:e=>({hour:e[4],minute:e[0]})},{name:"time",symbols:["number","_","pastConnector","_","hourNumber",r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=e[4];return e[5].value==="pm"&&t!==12&&(t+=12),e[5].value==="am"&&t===12&&(t=0),{hour:t,minute:e[0]}}},{name:"time",symbols:["number","_","toConnector","_","hourNumber"],postprocess:e=>({hour:e[4]-1,minute:60-e[0]})},{name:"time",symbols:["number","_","toConnector","_","hourNumber",r.has("ampm")?{type:"ampm"}:ampm],postprocess:e=>{let t=e[4];return e[5].value==="pm"&&t!==12&&(t+=12),e[5].value==="am"&&t===12&&(t=0),{hour:t-1,minute:60-e[0]}}},{name:"time",symbols:["number","_","toConnector","_","noon"],postprocess:e=>({hour:11,minute:60-e[0]})},{name:"time",symbols:["number","_","toConnector","_","midnight"],postprocess:e=>({hour:23,minute:60-e[0]})},{name:"time",symbols:["quarterKeyword","_","toConnector","_","noon"],postprocess:e=>({hour:11,minute:45})},{name:"time",symbols:["quarterKeyword","_","toConnector","_","midnight"],postprocess:e=>({hour:23,minute:45})},{name:"timeWord",symbols:["noon"],postprocess:e=>"noon"},{name:"timeWord",symbols:["midnight"],postprocess:e=>"midnight"},{name:"number",symbols:[r.has("integer")?{type:"integer"}:integer],postprocess:e=>parseInt(e[0].value,10)},{name:"number",symbols:[r.has("decimal")?{type:"decimal"}:decimal],postprocess:e=>parseFloat(e[0].value)},{name:"year",symbols:[r.has("integer")?{type:"integer"}:integer],postprocess:(e,t,o)=>{let s=parseInt(e[0].value,10);return s>=1900&&s<=2100?s:o}},{name:"dayNumber",symbols:[r.has("integer")?{type:"integer"}:integer],postprocess:(e,t,o)=>{let s=parseInt(e[0].value,10);return s<1||s>31?o:s}},{name:"dayNumber",symbols:[r.has("ordinal")?{type:"ordinal"}:ordinal],postprocess:e=>H(e[0].value)},{name:"month",symbols:[r.has("month")?{type:"month"}:month],postprocess:e=>B(e[0].value)},{name:"weekday",symbols:[r.has("weekday")?{type:"weekday"}:weekday],postprocess:e=>e[0].value},{name:"quarter",symbols:[r.has("quarter")?{type:"quarter"}:quarter],postprocess:p},{name:"half",symbols:[r.has("half")?{type:"half"}:half],postprocess:p},{name:"season",symbols:[r.has("season")?{type:"season"}:season],postprocess:e=>e[0].value},{name:"unit",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:e=>e[0].value},{name:"quarterUnit",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>{let s=e[0].value.toLowerCase();return s==="quarter"||s==="quarters"?s:o}},{name:"halfUnit",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>{let s=e[0].value.toLowerCase();return s==="half"?s:o}},{name:"yearUnit",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>{let s=e[0].value.toLowerCase();return s==="year"||s==="years"||s==="yr"||s==="yrs"?s:o}},{name:"monthUnit",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>{let s=e[0].value.toLowerCase();return s==="month"||s==="months"||s==="mo"||s==="mos"?s:o}},{name:"wordNumber",symbols:[r.has("wordNumber")?{type:"wordNumber"}:wordNumber],postprocess:e=>e[0].value},{name:"ordinalWord",symbols:[r.has("ordinalWord")?{type:"ordinalWord"}:ordinalWord],postprocess:e=>e[0].value},{name:"ordinalWord",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>e[0].value==="second"?"second":o},{name:"ordinal",symbols:[r.has("ordinal")?{type:"ordinal"}:ordinal],postprocess:e=>e[0].value},{name:"halfWord",symbols:[r.has("halfWord")?{type:"halfWord"}:halfWord],postprocess:e=>e[0].value},{name:"toConnector",symbols:[r.has("kw_to")?{type:"kw_to"}:kw_to],postprocess:p},{name:"fromConnector",symbols:[r.has("kw_from")?{type:"kw_from"}:kw_from],postprocess:p},{name:"forConnector",symbols:[r.has("kw_for")?{type:"kw_for"}:kw_for],postprocess:p},{name:"inConnector",symbols:[r.has("kw_in")?{type:"kw_in"}:kw_in],postprocess:p},{name:"onConnector",symbols:[r.has("kw_on")?{type:"kw_on"}:kw_on],postprocess:p},{name:"atConnector",symbols:[r.has("kw_at")?{type:"kw_at"}:kw_at],postprocess:p},{name:"ofConnector",symbols:[r.has("kw_of")?{type:"kw_of"}:kw_of],postprocess:p},{name:"theConnector",symbols:[r.has("kw_the")?{type:"kw_the"}:kw_the],postprocess:p},{name:"andConnector",symbols:[r.has("kw_and")?{type:"kw_and"}:kw_and],postprocess:p},{name:"betweenConnector",symbols:[r.has("kw_between")?{type:"kw_between"}:kw_between],postprocess:p},{name:"throughConnector",symbols:[r.has("kw_through")?{type:"kw_through"}:kw_through],postprocess:p},{name:"untilConnector",symbols:[r.has("kw_until")?{type:"kw_until"}:kw_until],postprocess:p},{name:"withinConnector",symbols:[r.has("kw_within")?{type:"kw_within"}:kw_within],postprocess:p},{name:"overConnector",symbols:[r.has("kw_over")?{type:"kw_over"}:kw_over],postprocess:p},{name:"duringConnector",symbols:[r.has("kw_during")?{type:"kw_during"}:kw_during],postprocess:p},{name:"startingConnector",symbols:[r.has("kw_starting")?{type:"kw_starting"}:kw_starting],postprocess:p},{name:"byConnector",symbols:[r.has("kw_by")?{type:"kw_by"}:kw_by],postprocess:p},{name:"aroundConnector",symbols:[r.has("kw_around")?{type:"kw_around"}:kw_around],postprocess:p},{name:"aboutConnector",symbols:[r.has("kw_about")?{type:"kw_about"}:kw_about],postprocess:p},{name:"roughlyConnector",symbols:[r.has("kw_roughly")?{type:"kw_roughly"}:kw_roughly],postprocess:p},{name:"approximatelyConnector",symbols:[r.has("kw_approximately")?{type:"kw_approximately"}:kw_approximately],postprocess:p},{name:"sometimeConnector",symbols:[r.has("kw_sometime")?{type:"kw_sometime"}:kw_sometime],postprocess:p},{name:"afterConnector",symbols:[r.has("kw_after")?{type:"kw_after"}:kw_after],postprocess:p},{name:"beforeConnector",symbols:[r.has("kw_before")?{type:"kw_before"}:kw_before],postprocess:p},{name:"endConnector",symbols:[r.has("kw_end")?{type:"kw_end"}:kw_end],postprocess:p},{name:"beginningConnector",symbols:[r.has("kw_beginning")?{type:"kw_beginning"}:kw_beginning],postprocess:p},{name:"startConnector",symbols:[r.has("kw_start")?{type:"kw_start"}:kw_start],postprocess:p},{name:"middleConnector",symbols:[r.has("kw_middle")?{type:"kw_middle"}:kw_middle],postprocess:p},{name:"agoConnector",symbols:[r.has("kw_ago")?{type:"kw_ago"}:kw_ago],postprocess:p},{name:"henceConnector",symbols:[r.has("otherKeyword")?{type:"otherKeyword"}:otherKeyword],postprocess:(e,t,o)=>e[0].value==="hence"?e[0]:o},{name:"laterConnector",symbols:[r.has("otherKeyword")?{type:"otherKeyword"}:otherKeyword],postprocess:(e,t,o)=>e[0].value==="later"?e[0]:o},{name:"earlyModifier",symbols:[r.has("kw_early")?{type:"kw_early"}:kw_early],postprocess:p},{name:"midModifier",symbols:[r.has("kw_mid")?{type:"kw_mid"}:kw_mid],postprocess:p},{name:"lateModifier",symbols:[r.has("kw_late")?{type:"kw_late"}:kw_late],postprocess:p},{name:"nextRelative",symbols:[r.has("kw_next")?{type:"kw_next"}:kw_next],postprocess:p},{name:"lastRelative",symbols:[r.has("kw_last")?{type:"kw_last"}:kw_last],postprocess:p},{name:"thisRelative",symbols:[r.has("kw_this")?{type:"kw_this"}:kw_this],postprocess:p},{name:"previousRelative",symbols:[r.has("kw_previous")?{type:"kw_previous"}:kw_previous],postprocess:p},{name:"comingRelative",symbols:[r.has("kw_coming")?{type:"kw_coming"}:kw_coming],postprocess:p},{name:"upcomingRelative",symbols:[r.has("kw_upcoming")?{type:"kw_upcoming"}:kw_upcoming],postprocess:p},{name:"pastRelative",symbols:[r.has("kw_past")?{type:"kw_past"}:kw_past],postprocess:p},{name:"today",symbols:[r.has("kw_today")?{type:"kw_today"}:kw_today],postprocess:p},{name:"tomorrow",symbols:[r.has("kw_tomorrow")?{type:"kw_tomorrow"}:kw_tomorrow],postprocess:p},{name:"yesterday",symbols:[r.has("kw_yesterday")?{type:"kw_yesterday"}:kw_yesterday],postprocess:p},{name:"now",symbols:[r.has("kw_now")?{type:"kw_now"}:kw_now],postprocess:p},{name:"noon",symbols:[r.has("kw_noon")?{type:"kw_noon"}:kw_noon],postprocess:p},{name:"midnight",symbols:[r.has("kw_midnight")?{type:"kw_midnight"}:kw_midnight],postprocess:p},{name:"quarterKeyword",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>e[0].value==="quarter"?e[0]:o},{name:"hourNumber",symbols:[r.has("integer")?{type:"integer"}:integer],postprocess:(e,t,o)=>{let s=parseInt(e[0].value,10);return s<1||s>12?o:s}},{name:"pastConnector",symbols:[r.has("kw_past")?{type:"kw_past"}:kw_past],postprocess:p},{name:"weekendKeyword",symbols:[r.has("kw_weekend")?{type:"kw_weekend"}:kw_weekend],postprocess:p},{name:"tonightKeyword",symbols:[r.has("kw_tonight")?{type:"kw_tonight"}:kw_tonight],postprocess:p},{name:"nightKeyword",symbols:[r.has("kw_night")?{type:"kw_night"}:kw_night],postprocess:p},{name:"fortnightKeyword",symbols:[r.has("kw_fortnight")?{type:"kw_fortnight"}:kw_fortnight],postprocess:p},{name:"laterKeyword",symbols:[r.has("otherKeyword")?{type:"otherKeyword"}:otherKeyword],postprocess:(e,t,o)=>e[0].value==="later"?e[0]:o},{name:"earlierKeyword",symbols:[r.has("otherKeyword")?{type:"otherKeyword"}:otherKeyword],postprocess:(e,t,o)=>e[0].value==="earlier"?e[0]:o},{name:"weekKeyword",symbols:[r.has("unit")?{type:"unit"}:unit],postprocess:(e,t,o)=>{let s=e[0].value.toLowerCase();return s==="week"||s==="weeks"?e[0]:o}},{name:"businessKeyword",symbols:[r.has("kw_business")?{type:"kw_business"}:kw_business],postprocess:p},{name:"eodKeyword",symbols:[r.has("kw_eod")?{type:"kw_eod"}:kw_eod],postprocess:p},{name:"cobKeyword",symbols:[r.has("kw_cob")?{type:"kw_cob"}:kw_cob],postprocess:p},{name:"closeKeyword",symbols:[r.has("kw_close")?{type:"kw_close"}:kw_close],postprocess:p},{name:"_$ebnf$1",symbols:[]},{name:"_$ebnf$1",symbols:["_$ebnf$1",r.has("ws")?{type:"ws"}:ws],postprocess:e=>e[0].concat([e[1]])},{name:"_",symbols:["_$ebnf$1"],postprocess:se}],ParserStart:"main"},J=ae;function F(e,t){let o=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),s=o.getUTCDay(),a=e-s;return a<=0&&(a+=7),o.setUTCDate(o.getUTCDate()+a),o}function Q(e,t){let o=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),a=o.getUTCDay()-e;return a<=0&&(a+=7),o.setUTCDate(o.getUTCDate()-a),o}function P(e,t,o){let s=new Date(Date.UTC(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate())),a=s.getUTCDay(),n=o==="monday"?1:0,i=a-n;i<0&&(i+=7);let l=e-n;l<0&&(l+=7);let y=l-i;return s.setUTCDate(s.getUTCDate()+y),s}var W={sunday:0,sun:0,monday:1,mon:1,tuesday:2,tue:2,tues:2,wednesday:3,wed:3,thursday:4,thu:4,thur:4,thurs:4,friday:5,fri:5,saturday:6,sat:6},Y={january:0,april:3,july:6,october:9};function O(e,t){t.special==="noon"?e.setUTCHours(12,0,0,0):t.special==="midnight"?e.setUTCHours(0,0,0,0):t.hour!==void 0&&e.setUTCHours(t.hour,t.minute??0,0,0)}function ne(e,t){let o=t.referenceDate,s;switch(e.special){case"today":s=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()));break;case"tomorrow":s=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()+1));break;case"yesterday":s=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()-1));break;case"now":s=new Date(o);break;case"dayAfterTomorrow":s=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()+2));break;case"dayBeforeYesterday":s=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()-2));break;default:s=new Date(o)}return e.time&&O(s,e.time),s}function ie(e,t){let o=t.referenceDate,s=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()));return e.time&&O(s,e.time),s}function me(e,t){let o=t.referenceDate,s=W[e.weekday.toLowerCase()]??0,a;if(e.period&&e.period.toLowerCase()==="week"){let n;switch(e.relative){case"next":n=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()+7));break;case"last":n=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()-7));break;default:n=o}a=P(s,n,t.weekStartsOn)}else switch(e.relative){case"next":a=F(s,o);break;case"last":a=Q(s,o);break;case"this":a=P(s,o,t.weekStartsOn);break;default:a=F(s,o)}return e.time&&O(a,e.time),a}function le(e,t){let o=t.referenceDate,s=e.formatParts;if(s.length<3||s[0]===void 0||s[1]===void 0||s[2]===void 0)return o;let[a,n,i]=s,l,y,h;return i>1e3?t.dateFormat==="intl"||a>12&&n<=12?(h=a,y=n,l=i):(y=a,h=n,l=i):(y=a,h=n,l=i<100?i>50?1900+i:2e3+i:i),new Date(Date.UTC(l,y-1,h))}function pe(e,t){let o=t.referenceDate,s=e.year??o.getUTCFullYear(),a=typeof e.month=="number"?e.month-1:0;if(e.relativeMonth){let i=o.getUTCMonth();e.relativeMonth==="last"?a>=i&&s--:e.relativeMonth==="next"&&a<=i&&s++}else e.year===void 0&&a<o.getUTCMonth()&&s++;let n=new Date(Date.UTC(s,a,e.day));if(n.getUTCMonth()!==a||n.getUTCDate()!==e.day)throw new Error("Invalid date");return e.time&&O(n,e.time),n}function ye(e,t){let o=t.referenceDate,s=e.ordinalWeekday,a=e.weekday.toLowerCase(),n=W[a]??0,i,l;if(e.monthFromRef?(i=o.getUTCMonth(),l=o.getUTCFullYear()):e.nextMonth?(i=o.getUTCMonth()+1,l=o.getUTCFullYear(),i>11&&(i=0,l++)):(i=typeof e.month=="number"?e.month-1:o.getUTCMonth(),l=o.getUTCFullYear(),i<o.getUTCMonth()&&l++),s===-1){let D=new Date(Date.UTC(l,i+1,0)).getUTCDate(),R=new Date(Date.UTC(l,i,D));for(;R.getUTCDay()!==n;)D--,R=new Date(Date.UTC(l,i,D));return R}let y=0;for(let f=1;f<=31;f++){let D=new Date(Date.UTC(l,i,f));if(D.getUTCMonth()!==i)break;if(D.getUTCDay()===n&&(y++,y===s))return D}let b=new Date(Date.UTC(l,i+1,0)).getUTCDate(),C=new Date(Date.UTC(l,i,b));for(;C.getUTCDay()!==n;)b--,C=new Date(Date.UTC(l,i,b));return C}function ue(e,t){let o=t.referenceDate,s,a;return e.monthFromRef?(s=o.getUTCMonth(),a=o.getUTCFullYear()):e.nextMonth?(s=o.getUTCMonth()+1,a=o.getUTCFullYear(),s>11&&(s=0,a++)):(s=typeof e.month=="number"?e.month-1:o.getUTCMonth(),a=o.getUTCFullYear(),s<o.getUTCMonth()&&a++),new Date(Date.UTC(a,s+1,0))}function ce(e,t){let o=t.referenceDate,s=e.day,a=o.getUTCDate(),n=o.getUTCMonth(),i=o.getUTCFullYear(),l=n,y=i;s<a&&(l=n+1,l>11&&(l=0,y++));let h=new Date(Date.UTC(y,l,s));for(;h.getUTCDate()!==s;)l++,l>11&&(l=0,y++),h=new Date(Date.UTC(y,l,s));return e.time&&O(h,e.time),h}function de(e,t){let o=t.referenceDate;switch(e.period.toLowerCase()){case"day":{let a=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate()));return e.relative==="next"?a.setUTCDate(a.getUTCDate()+1):e.relative==="last"&&a.setUTCDate(a.getUTCDate()-1),a}case"week":{let a=new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),o.getUTCDate())),n=t.weekStartsOn==="monday"?1:0,l=(a.getUTCDay()-n+7)%7;return a.setUTCDate(a.getUTCDate()-l),e.relative==="next"?a.setUTCDate(a.getUTCDate()+7):e.relative==="last"&&a.setUTCDate(a.getUTCDate()-7),a}case"month":return e.relative==="next"?new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth()+1,1)):e.relative==="last"?new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth()-1,1)):new Date(Date.UTC(o.getUTCFullYear(),o.getUTCMonth(),1));case"year":return e.relative==="next"?new Date(Date.UTC(o.getUTCFullYear()+1,0,1)):e.relative==="last"?new Date(Date.UTC(o.getUTCFullYear()-1,0,1)):new Date(Date.UTC(o.getUTCFullYear(),0,1));default:return new Date(o)}}function N(e,t){if(e.special)return ne(e,t);if(e.timeOnly&&e.time)return ie(e,t);if(e.ordinalWeekday!==void 0&&e.weekday!==void 0)return ye(e,t);if(e.weekday)return me(e,t);if(e.formatParts)return le(e,t);if(e.month!==void 0&&e.day!==void 0)return pe(e,t);if(e.dayOnly&&e.day!==void 0)return ce(e,t);if(e.lastDayOfMonth)return ue(e,t);if(e.dayOfMonth&&e.nextMonth){let o=t.referenceDate,s=o.getUTCMonth()+1,a=o.getUTCFullYear();s>11&&(s=0,a++);let n=e.ordinalWeekday||1;return new Date(Date.UTC(a,s,n))}return e.relative&&e.period?de(e,t):new Date(t.referenceDate)}function ge(e,t){switch(t){case"second":return e*1e3;case"minute":return e*6e4;case"hour":return e*36e5;case"day":return e*864e5;case"week":return e*6048e5;case"month":return e*2592e6;case"year":return e*31536e6;default:return 0}}function M(e,t=!1){if(e.combined&&Array.isArray(e.combined)){let s=e.combined.some(a=>a.unit==="hour");return e.combined.reduce((a,n)=>a+M(n,s),0)}let o=e.unit;return t&&o==="month"&&(o="minute"),ge(e.value,o)}function K(e,t,o){let s=Y[o]??0,a=(s+(e-1)*3)%12,n=t;a<s&&n++;let i=new Date(Date.UTC(n,a,1)),l=(a+3)%12,y=n;l<a&&y++;let h=new Date(Date.UTC(y,l,0));return{start:i,end:h}}function G(e,t,o){let s=Y[o]??0,a=(s+(e-1)*6)%12,n=t;a<s&&n++;let i=new Date(Date.UTC(n,a,1)),l=(a+6)%12,y=n;l<=a&&y++;let h=new Date(Date.UTC(y,l,0));return{start:i,end:h}}function V(e,t){switch(e){case"spring":return{start:new Date(Date.UTC(t,2,20)),end:new Date(Date.UTC(t,5,20))};case"summer":return{start:new Date(Date.UTC(t,5,21)),end:new Date(Date.UTC(t,8,22))};case"fall":case"autumn":return{start:new Date(Date.UTC(t,8,23)),end:new Date(Date.UTC(t,11,20))};case"winter":return{start:new Date(Date.UTC(t,11,21)),end:new Date(Date.UTC(t+1,2,19))};default:return{start:new Date(Date.UTC(t,0,1)),end:new Date(Date.UTC(t,11,31))}}}function Z(e,t,o){let s=t.getTime()-e.getTime(),a=s/3,n=s/2;switch(o){case"early":return{start:e,end:new Date(e.getTime()+a)};case"mid":case"middle":return{start:new Date(e.getTime()+a),end:new Date(e.getTime()+2*a)};case"late":return{start:new Date(e.getTime()+2*a),end:t};case"first":return{start:e,end:new Date(e.getTime()+n)};case"second":return{start:new Date(e.getTime()+n),end:t};default:return{start:e,end:t}}}function Ce(e,t,o){let s=e.getUTCDay(),a=(6-s+7)%7,n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+a));t==="next"?n=new Date(n.getTime()+6048e5):t==="last"&&((s===6||s===0)&&(n=new Date(n.getTime()-6048e5)),n=new Date(n.getTime()-6048e5));let i=new Date(n.getTime()+864e5),l=new Date(Date.UTC(i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate(),23,59));return{start:n,end:l}}function X(e,t,o){let s=new Date(e);if(t==="last")s=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()-1));else if(t==="tomorrow")s=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+1));else if(o){let i=W[o.toLowerCase()];if(i!==void 0){let l=e.getUTCDay(),y=(i-l+7)%7;y===0&&(y=7),s=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()+y))}}let a=new Date(Date.UTC(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate(),18,0)),n=new Date(Date.UTC(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate(),23,59));return{start:a,end:n}}function ee(e,t,o){let s=t.referenceDate;if(e.period==="weekend")return Ce(s,e.relative||"this",t);if(e.period==="tonight")return X(s,void 0,void 0);if(e.period==="night")return X(s,e.relative,e.weekday);if(e.period==="fortnight"){let a=e.count||1,n=e.relative,i=14*864e5;if(n==="last"){let h=new Date(s);return{start:new Date(s.getTime()-i),end:h}}let l=new Date(s),y=new Date(s.getTime()+a*i);return{start:l,end:y}}if(e.period==="quarter"&&e.quarter)return K(e.quarter,o,t.fiscalYearStart);if(e.period==="half"&&e.half)return G(e.half,o,t.fiscalYearStart);if(e.period==="season"&&e.season)return V(e.season,o);if(e.period==="month"&&e.month!==void 0){let a=typeof e.month=="number"?e.month-1:0,n=new Date(Date.UTC(o,a,1)),i=new Date(Date.UTC(o,a+1,0));return{start:n,end:i}}if(e.period==="month"){let a=s.getUTCMonth(),n=new Date(Date.UTC(o,a,1)),i=new Date(Date.UTC(o,a+1,0));return{start:n,end:i}}if(e.period==="week"){let a=t.weekStartsOn==="monday"?1:0,i=(s.getUTCDay()-a+7)%7,l=new Date(Date.UTC(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate()-i)),y=new Date(l.getTime()+6*864e5);return{start:l,end:y}}if(e.period==="weekNumber"&&e.weekNumber!==void 0){let a=e.weekNumber,n=e.year??s.getUTCFullYear(),i=t.weekStartsOn==="monday"?1:0,l=new Date(Date.UTC(n,0,1)),y=l.getUTCDay(),h=(i-y+7)%7,b=new Date(l.getTime()+h*864e5),C=new Date(b.getTime()+(a-1)*6048e5),f=new Date(C.getTime()+6*864e5);return{start:C,end:f}}if(e.period==="weekOf"&&e.baseDate){let a=e.baseDate,n;if(a.month!==void 0&&a.day!==void 0){let C=typeof a.month=="number"?a.month-1:0,f=a.day,D=a.year??s.getUTCFullYear();n=new Date(Date.UTC(D,C,f))}else n=s;let i=t.weekStartsOn==="monday"?1:0,y=(n.getUTCDay()-i+7)%7,h=new Date(Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()-y)),b=new Date(h.getTime()+6*864e5);return{start:h,end:b}}if(e.period==="day"){let a=new Date(Date.UTC(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate())),n=new Date(Date.UTC(s.getUTCFullYear(),s.getUTCMonth(),s.getUTCDate(),23,59,59,999));return{start:a,end:n}}if(e.period==="year"){let a=new Date(Date.UTC(o,0,1)),n=new Date(Date.UTC(o,11,31));return{start:a,end:n}}if(e.period==="ytd"){let a=new Date(Date.UTC(s.getUTCFullYear(),0,1)),n=new Date(s);return{start:a,end:n}}if(e.period==="weekOfMonth"&&e.week!==void 0&&e.month!==void 0){let a=e.month-1,n=e.week,i=e.year??s.getUTCFullYear(),l=new Date(Date.UTC(i,a,1)),y=t.weekStartsOn==="monday"?1:0,h=l.getUTCDay(),b=(y-h+7)%7,C=new Date(l.getTime()+b*864e5),f=new Date(C.getTime()+(n-1)*6048e5),D=new Date(f.getTime()+6*864e5);return{start:f,end:D}}return{start:new Date(Date.UTC(o,0,1)),end:new Date(Date.UTC(o,11,31))}}function E(e,t){let o=t.referenceDate,s=e.year??o.getUTCFullYear();return ee(e,t,s)}function q(e,t){let o=t.referenceDate,s=e.year??o.getUTCFullYear();if(e.period==="quarter"&&e.quarter&&e.year===void 0){let{end:i}=K(e.quarter,s,t.fiscalYearStart);i<o&&s++}let{start:a,end:n}=ee(e,t,s);return e.modifier?Z(a,n,e.modifier):{start:a,end:n}}function De(e){return{referenceDate:e?.referenceDate??new Date,fiscalYearStart:e?.fiscalYearStart??"january",weekStartsOn:e?.weekStartsOn??"sunday",dateFormat:e?.dateFormat??"intl"}}function ve(e){return{sunday:0,sun:0,monday:1,mon:1,tuesday:2,tue:2,tues:2,wednesday:3,wed:3,thursday:4,thu:4,thur:4,thurs:4,friday:5,fri:5,saturday:6,sat:6}[e]??0}function ke(e,t,o){if(!e||!e.nodeType)return null;let s=null,a=e;switch(e.nodeType==="titled"&&(o&&e.titleStart!==void 0&&e.titleEnd!==void 0?s=o.slice(e.titleStart,e.titleEnd).trim():s=e.title,a=e.expression),a.nodeType){case"date":return{type:"date",date:N(a,t),title:s};case"duration":{let n=M(a),i=a.approximate===!0;return{type:"duration",duration:n,title:s,approximate:i}}case"span":{let n,i=a.start;i.nodeType==="date"?n=N(i,t):i.nodeType==="fuzzy"?n=q(i,t).start:n=new Date(t.referenceDate);let l=0;a.duration&&(l=M(a.duration));let y=new Date(n.getTime()+l);return{type:"span",start:n,end:y,duration:l,title:s}}case"range":{let n,i,l=a.start,y=a.end;if(l.nodeType==="date"?n=N(l,t):l.nodeType==="fuzzy"?n=q(l,t).start:n=new Date(t.referenceDate),y.nodeType==="date"){if(i=N(y,t),y.monthOnly){let b=typeof y.month=="number"?y.month-1:0,C=y.year??t.referenceDate.getUTCFullYear();i=new Date(Date.UTC(C,b+1,0))}if(y.yearOnly){let b=y.year??t.referenceDate.getUTCFullYear();i=new Date(Date.UTC(b,11,31))}}else y.nodeType==="fuzzy"?i=q(y,t).end:i=new Date(t.referenceDate);i<n&&(y.weekday!==void 0?i=new Date(i.getTime()+6048e5):i=new Date(Date.UTC(i.getUTCFullYear()+1,i.getUTCMonth(),i.getUTCDate(),i.getUTCHours(),i.getUTCMinutes())));let h=i.getTime()-n.getTime();return{type:"span",start:n,end:i,duration:h,title:s}}case"fuzzy":{let{start:n,end:i}=q(a,t),l=a.modifier,y=a.period;if(l==="start"||l==="beginning")return{type:"date",date:E(a,t).start,title:s};if(l==="end")return{type:"date",date:E(a,t).end,title:s};if(y==="weekend"||y==="night"||y==="tonight"||y==="fortnight"||y==="weekNumber"||y==="weekOf"){let h=i.getTime()-n.getTime();return{type:"span",start:n,end:i,duration:h,title:s}}return{type:"fuzzy",start:n,end:i,approximate:!0,title:s}}case"relative":{let n=M(a.duration),i=t.referenceDate,l,y;return a.direction==="past"?(y=new Date(i),l=new Date(i.getTime()-n)):(l=new Date(i),y=new Date(i.getTime()+n)),{type:"span",start:l,end:y,duration:n,title:s}}case"relativeDate":{let n=a.duration,i=a.baseDate,l=a.time,y;i?y=N(i,t):y=new Date(t.referenceDate);let h=n.value,b=n.unit,C=a.direction==="past"?-1:1,f;if(b==="month")f=new Date(Date.UTC(y.getUTCFullYear(),y.getUTCMonth()+C*h,y.getUTCDate(),y.getUTCHours(),y.getUTCMinutes()));else if(b==="year")f=new Date(Date.UTC(y.getUTCFullYear()+C*h,y.getUTCMonth(),y.getUTCDate(),y.getUTCHours(),y.getUTCMinutes()));else if(b==="businessDay"||b==="businessday"){f=new Date(Date.UTC(y.getUTCFullYear(),y.getUTCMonth(),y.getUTCDate()));let D=h;for(;D>0;){f.setUTCDate(f.getUTCDate()+C);let R=f.getUTCDay();R!==0&&R!==6&&D--}}else if(b==="weekdayoccurrence"){let D=a.weekday.toLowerCase().replace(/s$/,""),R=ve(D);f=new Date(Date.UTC(y.getUTCFullYear(),y.getUTCMonth(),y.getUTCDate()));let L=h;for(;L>0;)f.setUTCDate(f.getUTCDate()+C),f.getUTCDay()===R&&L--}else{let D=M(n);f=new Date(y.getTime()+C*D)}return l&&("special"in l?l.special==="noon"?f=new Date(Date.UTC(f.getUTCFullYear(),f.getUTCMonth(),f.getUTCDate(),12,0)):l.special==="midnight"&&(f=new Date(Date.UTC(f.getUTCFullYear(),f.getUTCMonth(),f.getUTCDate(),0,0))):f=new Date(Date.UTC(f.getUTCFullYear(),f.getUTCMonth(),f.getUTCDate(),l.hour,l.minute))),{type:"date",date:f,title:s}}default:return null}}function Te(e){let t=e,o=e,s=(t.match(/\(/g)||[]).length,a=(t.match(/\)/g)||[]).length,n=(t.match(/\[/g)||[]).length,i=(t.match(/]/g)||[]).length;for(;a>s&&t.endsWith(")");)t=t.slice(0,-1).trimEnd(),a--;for(;i>n&&t.endsWith("]");)t=t.slice(0,-1).trimEnd(),i--;for(s=(t.match(/\(/g)||[]).length,a=(t.match(/\)/g)||[]).length;s>a;)t=t.replace(/\(/,""),s--;for(n=(t.match(/\[/g)||[]).length,i=(t.match(/]/g)||[]).length;n>i;)t=t.replace(/\[/,""),n--;return{stripped:t.replace(/\s+/g," ").trim(),originalPreserved:o}}function A(e,t){if(!e||typeof e!="string")return null;let o=e.trim(),{stripped:s,originalPreserved:a}=Te(o),n=s.toLowerCase();if(!n)return null;let i=De(t);try{let l=new te.Parser(te.Grammar.fromCompiled(J));if(l.feed(n),l.results.length===0)return null;let y=l.results[0];return ke(y,i,a)}catch{return null}}function oe(e,t){if(!e||typeof e!="string")return[];let o=e.split(/[,;\n]|\s+and\s+/).map(a=>a.trim()).filter(a=>a.length>0),s=[];for(let a of o){let n=A(a,t);n&&s.push(n)}return s}function I(e,t){return A(e,t)}function Ge(e,t){let o=I(e,t);if(!o)return null;if(o.type==="date")return o.date;if(o.type==="duration"){let s=t?.referenceDate??new Date;return new Date(s.getTime()+o.duration)}return o.type==="fuzzy"?o.start:null}function Ve(e,t){let o=I(e,t);return o&&o.type==="duration"?o.duration:null}function Ze(e,t){let o=I(e,t);return o&&(o.type==="span"||o.type==="fuzzy")?{start:o.start,end:o.end,duration:o.type==="span"?o.duration:o.end.getTime()-o.start.getTime()}:null}function Xe(e,t){return oe(e,t)}export{Xe as extract,I as parse,Ge as parseDate,Ve as parseDuration,Ze as parseSpan};