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.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/parser.ts","../src/lexer.ts","../src/grammar.ts","../src/utils/weekday.ts","../src/utils/constants.ts","../src/converters/date.ts","../src/converters/duration.ts","../src/utils/calendar.ts","../src/converters/fuzzy.ts","../src/index.ts"],"sourcesContent":["import nearley from 'nearley';\nimport grammar from './grammar';\nimport type { ParseResult, ParseOptions } from './index';\nimport { convertDateNode } from './converters/date';\nimport { convertDurationNode } from './converters/duration';\nimport {\n convertFuzzyNode,\n convertFuzzyNodeWithoutModifier,\n} from './converters/fuzzy';\nimport { MS_PER_WEEK } from './utils/constants';\n\nexport interface RequiredParseOptions {\n referenceDate: Date;\n fiscalYearStart: 'january' | 'april' | 'july' | 'october';\n weekStartsOn: 'sunday' | 'monday';\n dateFormat: 'us' | 'intl' | 'auto';\n}\n\nexport interface ASTNode {\n nodeType: string;\n [key: string]: unknown;\n}\n\nfunction getDefaultOptions(options?: ParseOptions): RequiredParseOptions {\n return {\n referenceDate: options?.referenceDate ?? new Date(),\n fiscalYearStart: options?.fiscalYearStart ?? 'january',\n weekStartsOn: options?.weekStartsOn ?? 'sunday',\n dateFormat: options?.dateFormat ?? 'intl',\n };\n}\n\nfunction convertASTToResult(\n ast: ASTNode,\n opts: RequiredParseOptions,\n originalInput?: string\n): ParseResult | null {\n if (!ast || !ast.nodeType) {\n return null;\n }\n\n let title: string | null = null;\n let expression = ast;\n\n if (ast.nodeType === 'titled') {\n if (\n originalInput &&\n ast.titleStart !== undefined &&\n ast.titleEnd !== undefined\n ) {\n title = originalInput\n .slice(ast.titleStart as number, ast.titleEnd as number)\n .trim();\n } else {\n title = ast.title as string;\n }\n expression = ast.expression as ASTNode;\n }\n\n switch (expression.nodeType) {\n case 'date': {\n const date = convertDateNode(expression, opts);\n return { type: 'date', date, title };\n }\n\n case 'duration': {\n const duration = convertDurationNode(expression);\n return { type: 'duration', duration, title };\n }\n\n case 'span': {\n let start: Date;\n const startNode = expression.start as ASTNode;\n\n if (startNode.nodeType === 'date') {\n start = convertDateNode(startNode, opts);\n } else if (startNode.nodeType === 'fuzzy') {\n const fuzzy = convertFuzzyNode(startNode, opts);\n start = fuzzy.start;\n } else {\n start = new Date(opts.referenceDate);\n }\n\n let duration = 0;\n if (expression.duration) {\n duration = convertDurationNode(expression.duration as ASTNode);\n }\n\n const end = new Date(start.getTime() + duration);\n\n return { type: 'span', start, end, duration, title };\n }\n\n case 'range': {\n let start: Date;\n let end: Date;\n const startNode = expression.start as ASTNode;\n const endNode = expression.end as ASTNode;\n\n if (startNode.nodeType === 'date') {\n start = convertDateNode(startNode, opts);\n } else if (startNode.nodeType === 'fuzzy') {\n const fuzzy = convertFuzzyNode(startNode, opts);\n start = fuzzy.start;\n } else {\n start = new Date(opts.referenceDate);\n }\n\n if (endNode.nodeType === 'date') {\n end = convertDateNode(endNode, opts);\n if (endNode.monthOnly) {\n const month =\n typeof endNode.month === 'number' ? endNode.month - 1 : 0;\n const year =\n (endNode.year as number) ?? opts.referenceDate.getUTCFullYear();\n end = new Date(Date.UTC(year, month + 1, 0));\n }\n if (endNode.yearOnly) {\n const year =\n (endNode.year as number) ?? opts.referenceDate.getUTCFullYear();\n end = new Date(Date.UTC(year, 11, 31));\n }\n } else if (endNode.nodeType === 'fuzzy') {\n const fuzzy = convertFuzzyNode(endNode, opts);\n end = fuzzy.end;\n } else {\n end = new Date(opts.referenceDate);\n }\n\n if (end < start) {\n const isWeekdayBased = endNode.weekday !== undefined;\n if (isWeekdayBased) {\n end = new Date(end.getTime() + MS_PER_WEEK);\n } else {\n end = new Date(\n Date.UTC(\n end.getUTCFullYear() + 1,\n end.getUTCMonth(),\n end.getUTCDate(),\n end.getUTCHours(),\n end.getUTCMinutes()\n )\n );\n }\n }\n\n const duration = end.getTime() - start.getTime();\n\n return { type: 'span', start, end, duration, title };\n }\n\n case 'fuzzy': {\n const { start, end } = convertFuzzyNode(expression, opts);\n const mod = expression.modifier as string | undefined;\n const period = expression.period as string;\n\n if (mod === 'start' || mod === 'beginning') {\n const periodDates = convertFuzzyNodeWithoutModifier(expression, opts);\n return { type: 'date', date: periodDates.start, title };\n }\n\n if (mod === 'end') {\n const periodDates = convertFuzzyNodeWithoutModifier(expression, opts);\n return { type: 'date', date: periodDates.end, title };\n }\n\n // Weekend/night/tonight/fortnight/weekNumber/weekOf are spans, not fuzzy periods\n if (period === 'weekend' || period === 'night' || period === 'tonight' || period === 'fortnight' || period === 'weekNumber' || period === 'weekOf') {\n const duration = end.getTime() - start.getTime();\n return { type: 'span', start, end, duration, title };\n }\n\n return { type: 'fuzzy', start, end, approximate: true, title };\n }\n\n case 'relative': {\n const duration = convertDurationNode(expression.duration as ASTNode);\n const ref = opts.referenceDate;\n\n let start: Date;\n let end: Date;\n\n if (expression.direction === 'past') {\n end = new Date(ref);\n start = new Date(ref.getTime() - duration);\n } else {\n start = new Date(ref);\n end = new Date(ref.getTime() + duration);\n }\n\n return { type: 'span', start, end, duration, title };\n }\n\n case 'relativeDate': {\n const durationNode = expression.duration as ASTNode;\n const baseNode = expression.baseDate as ASTNode | undefined;\n const timeSpec = expression.time as\n | { hour: number; minute: number }\n | { special: string }\n | undefined;\n\n let baseDate: Date;\n if (baseNode) {\n baseDate = convertDateNode(baseNode, opts);\n } else {\n baseDate = new Date(opts.referenceDate);\n }\n\n const durationValue = durationNode.value as number;\n const durationUnit = durationNode.unit as string;\n const direction = expression.direction === 'past' ? -1 : 1;\n\n let resultDate: Date;\n\n if (durationUnit === 'month') {\n resultDate = new Date(\n Date.UTC(\n baseDate.getUTCFullYear(),\n baseDate.getUTCMonth() + direction * durationValue,\n baseDate.getUTCDate(),\n baseDate.getUTCHours(),\n baseDate.getUTCMinutes()\n )\n );\n } else if (durationUnit === 'year') {\n resultDate = new Date(\n Date.UTC(\n baseDate.getUTCFullYear() + direction * durationValue,\n baseDate.getUTCMonth(),\n baseDate.getUTCDate(),\n baseDate.getUTCHours(),\n baseDate.getUTCMinutes()\n )\n );\n } else if (durationUnit === 'businessDay' || durationUnit === 'businessday') {\n resultDate = new Date(Date.UTC(baseDate.getUTCFullYear(), baseDate.getUTCMonth(), baseDate.getUTCDate()));\n let daysToAdd = durationValue;\n while (daysToAdd > 0) {\n resultDate.setUTCDate(resultDate.getUTCDate() + direction);\n const dayOfWeek = resultDate.getUTCDay();\n if (dayOfWeek !== 0 && dayOfWeek !== 6) {\n daysToAdd--;\n }\n }\n } else {\n const durationMs = convertDurationNode(durationNode);\n resultDate = new Date(baseDate.getTime() + direction * durationMs);\n }\n\n if (timeSpec) {\n if ('special' in timeSpec) {\n if (timeSpec.special === 'noon') {\n resultDate = new Date(\n Date.UTC(\n resultDate.getUTCFullYear(),\n resultDate.getUTCMonth(),\n resultDate.getUTCDate(),\n 12,\n 0\n )\n );\n } else if (timeSpec.special === 'midnight') {\n resultDate = new Date(\n Date.UTC(\n resultDate.getUTCFullYear(),\n resultDate.getUTCMonth(),\n resultDate.getUTCDate(),\n 0,\n 0\n )\n );\n }\n } else {\n resultDate = new Date(\n Date.UTC(\n resultDate.getUTCFullYear(),\n resultDate.getUTCMonth(),\n resultDate.getUTCDate(),\n timeSpec.hour,\n timeSpec.minute\n )\n );\n }\n }\n\n return { type: 'date', date: resultDate, title };\n }\n\n default:\n return null;\n }\n}\n\ninterface StrippedInput {\n stripped: string;\n originalPreserved: string;\n}\n\nfunction stripUnmatchedPunctuation(input: string): StrippedInput {\n let result = input;\n const originalPreserved = input;\n\n let openParens = (result.match(/\\(/g) || []).length;\n let closeParens = (result.match(/\\)/g) || []).length;\n let openBrackets = (result.match(/\\[/g) || []).length;\n let closeBrackets = (result.match(/]/g) || []).length;\n\n while (closeParens > openParens && result.endsWith(')')) {\n result = result.slice(0, -1).trimEnd();\n closeParens--;\n }\n\n while (closeBrackets > openBrackets && result.endsWith(']')) {\n result = result.slice(0, -1).trimEnd();\n closeBrackets--;\n }\n\n openParens = (result.match(/\\(/g) || []).length;\n closeParens = (result.match(/\\)/g) || []).length;\n while (openParens > closeParens) {\n result = result.replace(/\\(/, '');\n openParens--;\n }\n\n openBrackets = (result.match(/\\[/g) || []).length;\n closeBrackets = (result.match(/]/g) || []).length;\n while (openBrackets > closeBrackets) {\n result = result.replace(/\\[/, '');\n openBrackets--;\n }\n\n return {\n stripped: result.replace(/\\s+/g, ' ').trim(),\n originalPreserved,\n };\n}\n\nexport function parseInternal(\n input: string,\n options?: ParseOptions\n): ParseResult | null {\n if (!input || typeof input !== 'string') {\n return null;\n }\n\n const trimmedInput = input.trim();\n const { stripped, originalPreserved } = stripUnmatchedPunctuation(trimmedInput);\n const normalized = stripped.toLowerCase();\n\n if (!normalized) {\n return null;\n }\n\n const opts = getDefaultOptions(options);\n\n try {\n const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));\n parser.feed(normalized);\n\n if (parser.results.length === 0) {\n return null;\n }\n\n const ast = parser.results[0];\n return convertASTToResult(ast, opts, originalPreserved);\n } catch {\n return null;\n }\n}\n\nexport function extractInternal(\n input: string,\n options?: ParseOptions\n): ParseResult[] {\n if (!input || typeof input !== 'string') {\n return [];\n }\n\n const segments = input\n .split(/[,;\\n]|\\s+and\\s+/)\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n\n const results: ParseResult[] = [];\n\n for (const segment of segments) {\n const result = parseInternal(segment, options);\n if (result) {\n results.push(result);\n }\n }\n\n return results;\n}\n","import moo from 'moo';\n\nconst lexer = moo.compile({\n // Whitespace - capture for potential preservation\n ws: /[ \\t]+/,\n newline: { match: /\\r?\\n/, lineBreaks: true },\n\n // Time patterns (must come before numbers to match correctly)\n time: /(?:0?[0-9]|1[0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?/,\n\n // Compact month-day pattern: \"July10\", \"Jan15\" (month immediately followed by day number)\n monthDayCompact: {\n 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])/,\n value: (s: string) => s.toLowerCase(),\n },\n\n // Quarter notation: Q1, Q2, Q3, Q4 (case insensitive via alternation)\n quarter: { match: /[Qq][1-4]/, value: (s: string) => s.toUpperCase() },\n\n // Half notation: H1, H2 (case insensitive via alternation)\n half: { match: /[Hh][1-2]/, value: (s: string) => s.toUpperCase() },\n\n // Ordinal numbers: 1st, 2nd, 3rd, 4th-31st (case insensitive suffixes)\n ordinal: {\n match: /(?:3[01]|[12]?[0-9])(?:[Ss][Tt]|[Nn][Dd]|[Rr][Dd]|[Tt][Hh])/,\n value: (s: string) => s.toLowerCase(),\n },\n\n // Decimal numbers (must come before integer)\n decimal: /\\d+\\.\\d+/,\n\n // Abbreviated duration units: 1w, 3d, 2h, 30m (minutes), 5s, 1y, 6mo (months)\n // 'm' = minutes, 'mo' = months\n abbreviatedDuration: {\n match: /\\d+(?:mo|w|d|h|m|s|y)\\b/,\n value: (s: string) => s.toLowerCase(),\n },\n\n // Integer numbers\n integer: /\\d+/,\n\n // AM/PM (must come before general keywords)\n ampm: { match: /[Aa][Mm]|[Pp][Mm]/, value: (s: string) => s.toLowerCase() },\n\n // Keywords - match words and normalize to lowercase\n // Using a regex to match any word, then checking against known keywords\n // The transform function in moo.keywords makes matching case-insensitive\n word: {\n match: /[a-zA-Z][a-zA-Z0-9#]*/,\n type: moo.keywords({\n // Time words - each gets its own type for grammar disambiguation\n kw_today: ['today'],\n kw_tomorrow: ['tomorrow'],\n kw_yesterday: ['yesterday'],\n kw_now: ['now'],\n kw_noon: ['noon'],\n kw_midnight: ['midnight'],\n // Relative modifiers - each gets its own type for grammar disambiguation\n kw_next: ['next'],\n kw_last: ['last'],\n kw_this: ['this'],\n kw_previous: ['previous'],\n kw_coming: ['coming'],\n kw_upcoming: ['upcoming'],\n kw_past: ['past'],\n // Period modifiers - each gets its own type for grammar disambiguation\n kw_early: ['early'],\n kw_mid: ['mid'],\n kw_late: ['late'],\n kw_beginning: ['beginning'],\n kw_middle: ['middle'],\n kw_end: ['end'],\n kw_start: ['start'],\n // Periods/units - must come BEFORE ordinalWord so ordinalWord 'second' wins over unit 'second'\n unit: [\n 'day', 'days', 'week', 'weeks', 'month', 'months', 'year', 'years',\n 'quarter', 'quarters', 'hour', 'hours', 'minute', 'minutes', 'second', 'seconds',\n 'hr', 'hrs', 'min', 'mins', 'sec', 'secs', 'wk', 'wks', 'mo', 'mos', 'yr', 'yrs',\n ],\n // Half word\n halfWord: ['half'],\n // Connectors - each gets its own type for grammar disambiguation\n kw_to: ['to'],\n kw_from: ['from'],\n kw_until: ['until', 'til', 'till'],\n kw_through: ['through'],\n kw_between: ['between'],\n kw_and: ['and'],\n kw_for: ['for'],\n kw_in: ['in'],\n kw_on: ['on'],\n kw_at: ['at'],\n kw_of: ['of'],\n kw_the: ['the'],\n kw_within: ['within'],\n kw_over: ['over'],\n kw_during: ['during'],\n kw_starting: ['starting'],\n kw_by: ['by'],\n kw_before: ['before'],\n kw_after: ['after'],\n kw_around: ['around'],\n kw_about: ['about'],\n kw_roughly: ['roughly'],\n kw_approximately: ['approximately'],\n kw_sometime: ['sometime'],\n // Ordinal words - 'second' is handled separately since it's also a unit\n ordinalWord: [\n 'first', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth',\n 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth',\n 'eighteenth', 'nineteenth', 'twentieth', 'twenty-first', 'twenty-second', 'twenty-third',\n 'twenty-fourth', 'twenty-fifth', 'twenty-sixth', 'twenty-seventh', 'twenty-eighth',\n 'twenty-ninth', 'thirtieth', 'thirty-first',\n ],\n // Seasons\n season: ['spring', 'summer', 'fall', 'autumn', 'winter'],\n // Word numbers\n wordNumber: [\n 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten',\n 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty',\n 'a', 'an', 'couple',\n ],\n // Months - full names\n month: [\n 'january', 'february', 'march', 'april', 'may', 'june',\n 'july', 'august', 'september', 'october', 'november', 'december',\n 'jan', 'feb', 'mar', 'apr', 'jun', 'jul', 'aug', 'sep', 'sept', 'oct', 'nov', 'dec',\n ],\n // Weekdays\n weekday: [\n 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday',\n 'mon', 'tue', 'tues', 'wed', 'thu', 'thur', 'thurs', 'fri', 'sat', 'sun',\n ],\n // Ago keyword for relative dates\n kw_ago: ['ago'],\n // Weekend and night keywords\n kw_weekend: ['weekend'],\n kw_tonight: ['tonight'],\n kw_night: ['night'],\n kw_fortnight: ['fortnight', 'fortnights'],\n // Other keywords\n otherKeyword: ['fiscal', 'fy', 'daily', 'weekly', 'monthly', 'yearly', 'annually', 'hence', 'later', 'earlier'],\n // Business keywords\n kw_business: ['business'],\n // EOD/COB keywords\n kw_eod: ['eod'],\n kw_cob: ['cob'],\n kw_close: ['close'],\n }), // Keywords are matched against lowercase input\n },\n\n // Punctuation and separators\n lparen: '(',\n rparen: ')',\n lbracket: '[',\n rbracket: ']',\n colon: ':',\n semicolon: ';',\n comma: ',',\n dash: /[-–—]/, // Regular dash, en-dash, em-dash\n slash: '/',\n\n // Any other single character\n other: /./,\n});\n\nexport { lexer };\n","// @ts-nocheck\n// Generated automatically by nearley, version 2.20.1\n// http://github.com/Hardmath123/nearley\n// Bypasses TS6133. Allow declared but unused functions.\n// @ts-ignore\nfunction id(d: any[]): any { return d[0]; }\ndeclare var dash: any;\ndeclare var colon: any;\ndeclare var lparen: any;\ndeclare var rparen: any;\ndeclare var lbracket: any;\ndeclare var rbracket: any;\ndeclare var word: any;\ndeclare var wordNumber: any;\ndeclare var integer: any;\ndeclare var otherKeyword: any;\ndeclare var decimal: any;\ndeclare var quarter: any;\ndeclare var half: any;\ndeclare var slash: any;\ndeclare var other: any;\ndeclare var monthDayCompact: any;\ndeclare var comma: any;\ndeclare var abbreviatedDuration: any;\ndeclare var unit: any;\ndeclare var time: any;\ndeclare var ampm: any;\ndeclare var ordinal: any;\ndeclare var month: any;\ndeclare var weekday: any;\ndeclare var season: any;\ndeclare var ordinalWord: any;\ndeclare var halfWord: any;\ndeclare var kw_to: any;\ndeclare var kw_from: any;\ndeclare var kw_for: any;\ndeclare var kw_in: any;\ndeclare var kw_on: any;\ndeclare var kw_at: any;\ndeclare var kw_of: any;\ndeclare var kw_the: any;\ndeclare var kw_and: any;\ndeclare var kw_between: any;\ndeclare var kw_through: any;\ndeclare var kw_until: any;\ndeclare var kw_within: any;\ndeclare var kw_over: any;\ndeclare var kw_during: any;\ndeclare var kw_starting: any;\ndeclare var kw_by: any;\ndeclare var kw_around: any;\ndeclare var kw_about: any;\ndeclare var kw_roughly: any;\ndeclare var kw_approximately: any;\ndeclare var kw_sometime: any;\ndeclare var kw_after: any;\ndeclare var kw_before: any;\ndeclare var kw_end: any;\ndeclare var kw_beginning: any;\ndeclare var kw_start: any;\ndeclare var kw_middle: any;\ndeclare var kw_ago: any;\ndeclare var kw_early: any;\ndeclare var kw_mid: any;\ndeclare var kw_late: any;\ndeclare var kw_next: any;\ndeclare var kw_last: any;\ndeclare var kw_this: any;\ndeclare var kw_previous: any;\ndeclare var kw_coming: any;\ndeclare var kw_upcoming: any;\ndeclare var kw_past: any;\ndeclare var kw_today: any;\ndeclare var kw_tomorrow: any;\ndeclare var kw_yesterday: any;\ndeclare var kw_now: any;\ndeclare var kw_noon: any;\ndeclare var kw_midnight: any;\ndeclare var kw_weekend: any;\ndeclare var kw_tonight: any;\ndeclare var kw_night: any;\ndeclare var kw_fortnight: any;\ndeclare var kw_business: any;\ndeclare var kw_eod: any;\ndeclare var kw_cob: any;\ndeclare var kw_close: any;\ndeclare var ws: any;\n\nimport { lexer } from './lexer.js';\n\n// AST Node types\ninterface DateNode {\n nodeType: 'date';\n value: string;\n weekday?: string;\n month?: string;\n day?: number;\n year?: number;\n time?: { hour: number; minute: number };\n relative?: 'next' | 'last' | 'this';\n special?: 'today' | 'tomorrow' | 'yesterday' | 'now' | 'noon' | 'midnight';\n}\n\ninterface DurationNode {\n nodeType: 'duration';\n value: number;\n unit: string;\n combined?: DurationNode[];\n}\n\ninterface SpanNode {\n nodeType: 'span';\n start: DateNode | DurationNode | FuzzyNode;\n duration?: DurationNode;\n end?: DateNode;\n}\n\ninterface RangeNode {\n nodeType: 'range';\n start: DateNode | FuzzyNode;\n end: DateNode | FuzzyNode;\n}\n\ninterface FuzzyNode {\n nodeType: 'fuzzy';\n period: string;\n quarter?: number;\n half?: number;\n year?: number;\n month?: number;\n modifier?: 'early' | 'mid' | 'late' | 'beginning' | 'end' | 'start' | 'middle';\n season?: string;\n relative?: 'next' | 'last' | 'this' | 'tomorrow';\n weekday?: string;\n count?: number;\n}\n\ninterface RelativeNode {\n nodeType: 'relative';\n direction: 'past' | 'future';\n duration: DurationNode;\n}\n\ninterface RelativeDateNode {\n nodeType: 'relativeDate';\n direction: 'past' | 'future';\n duration: DurationNode;\n baseDate?: DateNode;\n time?: { hour: number; minute: number } | { special: string };\n}\n\ninterface TitledNode {\n nodeType: 'titled';\n title: string;\n expression: any;\n}\n\n// Helper functions\nconst first = (d: any[]) => d[0];\nconst nuller = () => null;\n\nconst extractValue = (d: any[]) => d[0]?.value ?? d[0];\n\nconst makeDate = (data: Partial<DateNode>): DateNode => ({\n nodeType: 'date',\n value: '',\n ...data,\n});\n\nconst makeDuration = (value: number, unit: string): DurationNode => ({\n nodeType: 'duration',\n value,\n unit: normalizeUnit(unit),\n});\n\nconst makeSpan = (start: any, duration?: DurationNode, end?: DateNode): SpanNode => ({\n nodeType: 'span',\n start,\n duration,\n end,\n});\n\nconst makeRange = (start: any, end: any): RangeNode => ({\n nodeType: 'range',\n start,\n end,\n});\n\nconst makeFuzzy = (data: Partial<FuzzyNode>): FuzzyNode => ({\n nodeType: 'fuzzy',\n period: '',\n ...data,\n});\n\nconst makeRelative = (direction: 'past' | 'future', duration: DurationNode): RelativeNode => ({\n nodeType: 'relative',\n direction,\n duration,\n});\n\nconst makeRelativeDate = (\n direction: 'past' | 'future',\n duration: DurationNode,\n baseDate?: DateNode,\n time?: { hour: number; minute: number } | { special: string }\n): RelativeDateNode => ({\n nodeType: 'relativeDate',\n direction,\n duration,\n baseDate,\n time,\n});\n\nconst makeTitled = (title: string, expression: any, titleStart?: number, titleEnd?: number): TitledNode => ({\n nodeType: 'titled',\n title: title.trim(),\n titleStart,\n titleEnd,\n expression,\n});\n\n// Unit normalization\nfunction normalizeUnit(unit: string): string {\n const u = unit.toLowerCase();\n if (['day', 'days', 'd'].includes(u)) return 'day';\n if (['week', 'weeks', 'wk', 'wks', 'w'].includes(u)) return 'week';\n if (['month', 'months', 'mo', 'mos'].includes(u)) return 'month';\n if (['year', 'years', 'yr', 'yrs', 'y'].includes(u)) return 'year';\n if (['hour', 'hours', 'hr', 'hrs', 'h'].includes(u)) return 'hour';\n if (['minute', 'minutes', 'min', 'mins'].includes(u)) return 'minute';\n if (['second', 'seconds', 'sec', 'secs', 's'].includes(u)) return 'second';\n if (['quarter', 'quarters'].includes(u)) return 'quarter';\n return u;\n}\n\n// Number parsing\nfunction parseWordNumber(word: string): number {\n const map: Record<string, number> = {\n 'a': 1, 'an': 1, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5,\n 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9, 'ten': 10,\n 'eleven': 11, 'twelve': 12, 'thirteen': 13, 'fourteen': 14, 'fifteen': 15,\n 'sixteen': 16, 'seventeen': 17, 'eighteen': 18, 'nineteen': 19, 'twenty': 20,\n 'couple': 2,\n };\n return map[word.toLowerCase()] ?? 1;\n}\n\nfunction parseOrdinal(ord: string): number {\n const match = ord.match(/^(\\d+)/);\n return match ? parseInt(match[1], 10) : parseOrdinalWord(ord);\n}\n\nfunction parseOrdinalWord(word: string): number {\n const map: Record<string, number> = {\n 'first': 1, 'second': 2, 'third': 3, 'fourth': 4, 'fifth': 5,\n 'sixth': 6, 'seventh': 7, 'eighth': 8, 'ninth': 9, 'tenth': 10,\n 'eleventh': 11, 'twelfth': 12, 'thirteenth': 13, 'fourteenth': 14, 'fifteenth': 15,\n 'sixteenth': 16, 'seventeenth': 17, 'eighteenth': 18, 'nineteenth': 19, 'twentieth': 20,\n 'twenty-first': 21, 'twenty-second': 22, 'twenty-third': 23, 'twenty-fourth': 24,\n 'twenty-fifth': 25, 'twenty-sixth': 26, 'twenty-seventh': 27, 'twenty-eighth': 28,\n 'twenty-ninth': 29, 'thirtieth': 30, 'thirty-first': 31,\n };\n return map[word.toLowerCase()] ?? 1;\n}\n\nfunction parseMonth(month: string): number {\n const map: Record<string, number> = {\n 'january': 1, 'jan': 1, 'february': 2, 'feb': 2, 'march': 3, 'mar': 3,\n 'april': 4, 'apr': 4, 'may': 5, 'june': 6, 'jun': 6,\n 'july': 7, 'jul': 7, 'august': 8, 'aug': 8, 'september': 9, 'sep': 9, 'sept': 9,\n 'october': 10, 'oct': 10, 'november': 11, 'nov': 11, 'december': 12, 'dec': 12,\n };\n return map[month.toLowerCase()] ?? 1;\n}\n\nfunction parseMonthDayCompact(input: string): { month: number; day: number } {\n const lower = input.toLowerCase();\n const monthNames = [\n 'january', 'february', 'march', 'april', 'may', 'june',\n 'july', 'august', 'september', 'october', 'november', 'december',\n 'jan', 'feb', 'mar', 'apr', 'jun', 'jul', 'aug', 'sep', 'sept', 'oct', 'nov', 'dec',\n ];\n for (const name of monthNames) {\n if (lower.startsWith(name)) {\n const dayStr = lower.slice(name.length);\n return { month: parseMonth(name), day: parseInt(dayStr, 10) };\n }\n }\n return { month: 1, day: 1 };\n}\n\nfunction parseQuarter(q: string): number {\n const match = q.match(/[qQ]([1-4])/);\n return match ? parseInt(match[1], 10) : 1;\n}\n\nfunction parseHalf(h: string): number {\n const match = h.match(/[hH]([1-2])/);\n return match ? parseInt(match[1], 10) : 1;\n}\n\ninterface NearleyToken {\n value: any;\n [key: string]: any;\n};\n\ninterface NearleyLexer {\n reset: (chunk: string, info: any) => void;\n next: () => NearleyToken | undefined;\n save: () => any;\n formatError: (token: never) => string;\n has: (tokenType: string) => boolean;\n};\n\ninterface NearleyRule {\n name: string;\n symbols: NearleySymbol[];\n postprocess?: (d: any[], loc?: number, reject?: {}) => any;\n};\n\ntype NearleySymbol = string | { literal: any } | { test: (token: any) => boolean };\n\ninterface Grammar {\n Lexer: NearleyLexer | undefined;\n ParserRules: NearleyRule[];\n ParserStart: string;\n};\n\nconst grammar: Grammar = {\n Lexer: lexer,\n ParserRules: [\n {\"name\": \"main\", \"symbols\": [\"titledExpression\"], \"postprocess\": first},\n {\"name\": \"main\", \"symbols\": [\"expression\"], \"postprocess\": first},\n {\"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)},\n {\"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)},\n {\"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)},\n {\"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)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"onConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"atConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"inConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"forConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"fromConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"duringConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"startingConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"name\": \"titledExpression\", \"symbols\": [\"titleText\", \"_\", \"byConnector\", \"_\", \"expression\"], \"postprocess\": d => makeTitled(d[0].text, d[4], d[0].start, d[0].end)},\n {\"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)},\n {\"name\": \"titledExpression\", \"symbols\": [\"expression\", \"_\", \"postTitle\"], \"postprocess\": d => makeTitled(d[2].text, d[0], d[2].start, d[2].end)},\n {\"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 })},\n {\"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 })},\n {\"name\": \"titleText\", \"symbols\": [\"titleWord\"], \"postprocess\": d => ({ text: d[0].text, start: d[0].start, end: d[0].end })},\n {\"name\": \"titleText\", \"symbols\": [\"versionNumber\"], \"postprocess\": d => d[0]},\n {\"name\": \"titleText\", \"symbols\": [\"hyphenatedWord\"], \"postprocess\": d => d[0]},\n {\"name\": \"titleText\", \"symbols\": [\"titleText\", \"_\", \"titleWord\"], \"postprocess\": d => ({ text: d[0].text + ' ' + d[2].text, start: d[0].start, end: d[2].end })},\n {\"name\": \"titleText\", \"symbols\": [\"titleText\", \"_\", \"versionNumber\"], \"postprocess\": d => ({ text: d[0].text + ' ' + d[2].text, start: d[0].start, end: d[2].end })},\n {\"name\": \"titleText\", \"symbols\": [\"titleText\", \"_\", \"hyphenatedWord\"], \"postprocess\": d => ({ text: d[0].text + ' ' + d[2].text, start: d[0].start, end: d[2].end })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"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 })},\n {\"name\": \"titleWord\", \"symbols\": [(lexer.has(\"slash\") ? {type: \"slash\"} : slash)], \"postprocess\": d => ({ text: '/', start: d[0].offset, end: d[0].offset + 1 })},\n {\"name\": \"titleWord\", \"symbols\": [(lexer.has(\"colon\") ? {type: \"colon\"} : colon)], \"postprocess\": d => ({ text: ':', start: d[0].offset, end: d[0].offset + 1 })},\n {\"name\": \"titleWord\", \"symbols\": [\"hashNumber\"], \"postprocess\": d => d[0]},\n {\"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 })},\n {\"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 })},\n {\"name\": \"hashNumber\", \"symbols\": [(lexer.has(\"other\") ? {type: \"other\"} : other), (lexer.has(\"integer\") ? {type: \"integer\"} : integer)], \"postprocess\": (d, _, reject) => {\n if (d[0].value !== '#') return reject;\n return { text: '#' + d[1].value, start: d[0].offset, end: d[1].offset + d[1].text.length };\n } },\n {\"name\": \"versionNumber\", \"symbols\": [(lexer.has(\"word\") ? {type: \"word\"} : word), (lexer.has(\"other\") ? {type: \"other\"} : other), (lexer.has(\"integer\") ? {type: \"integer\"} : integer)], \"postprocess\": (d, _, reject) => {\n if (d[1].value !== '.') return reject;\n return { text: d[0].value + '.' + d[2].value, start: d[0].offset, end: d[2].offset + d[2].text.length };\n } },\n {\"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) => {\n if (d[1].value !== '.' || d[3].value !== '.') return reject;\n return { text: d[0].value + '.' + d[2].value + '.' + d[4].value, start: d[0].offset, end: d[4].offset + d[4].text.length };\n } },\n {\"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) => {\n if (d[1].value !== '.' || d[3].value !== '.' || d[5].value !== '.') return reject;\n 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 };\n } },\n {\"name\": \"versionNumber\", \"symbols\": [(lexer.has(\"word\") ? {type: \"word\"} : word), (lexer.has(\"other\") ? {type: \"other\"} : other), (lexer.has(\"decimal\") ? {type: \"decimal\"} : decimal)], \"postprocess\": (d, _, reject) => {\n if (d[1].value !== '.') return reject;\n return { text: d[0].value + '.' + d[2].value, start: d[0].offset, end: d[2].offset + d[2].text.length };\n } },\n {\"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 })},\n {\"name\": \"titleTextSimple\", \"symbols\": [\"titleWord\"], \"postprocess\": d => d[0]},\n {\"name\": \"titleTextSimple\", \"symbols\": [\"hyphenatedWord\"], \"postprocess\": d => d[0]},\n {\"name\": \"titleTextSimple\", \"symbols\": [\"versionNumber\"], \"postprocess\": d => d[0]},\n {\"name\": \"titleTextSimple\", \"symbols\": [\"titleTextSimple\", \"_\", \"titleWord\"], \"postprocess\": d => ({ text: d[0].text + ' ' + d[2].text, start: d[0].start, end: d[2].end })},\n {\"name\": \"titleTextSimple\", \"symbols\": [\"titleTextSimple\", \"_\", \"hyphenatedWord\"], \"postprocess\": d => ({ text: d[0].text + ' ' + d[2].text, start: d[0].start, end: d[2].end })},\n {\"name\": \"titleTextSimple\", \"symbols\": [\"titleTextSimple\", \"_\", \"versionNumber\"], \"postprocess\": d => ({ text: d[0].text + ' ' + d[2].text, start: d[0].start, end: d[2].end })},\n {\"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 })},\n {\"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 })},\n {\"name\": \"expression\", \"symbols\": [\"range\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"span\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"relative\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"relativeDate\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"lastDayOfMonthExpr\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"date\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"fuzzy\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"forDuration\"], \"postprocess\": first},\n {\"name\": \"expression\", \"symbols\": [\"duration\"], \"postprocess\": first},\n {\"name\": \"lastDayOfMonthExpr\", \"symbols\": [\"lastRelative\", \"_\", \"dayUnit\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[6], lastDayOfMonth: true })},\n {\"name\": \"lastDayOfMonthExpr\", \"symbols\": [\"lastRelative\", \"_\", \"dayUnit\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"monthUnit\"], \"postprocess\": d => makeDate({ lastDayOfMonth: true, monthFromRef: true })},\n {\"name\": \"forDuration\", \"symbols\": [\"forConnector\", \"_\", \"duration\"], \"postprocess\": d => d[2]},\n {\"name\": \"range\", \"symbols\": [\"date\", \"_\", \"toConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(d[0], d[4])},\n {\"name\": \"range\", \"symbols\": [\"fromConnector\", \"_\", \"date\", \"_\", \"toConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(d[2], d[6])},\n {\"name\": \"range\", \"symbols\": [\"date\", \"_\", (lexer.has(\"dash\") ? {type: \"dash\"} : dash), \"_\", \"date\"], \"postprocess\": d => makeRange(d[0], d[4])},\n {\"name\": \"range\", \"symbols\": [(lexer.has(\"monthDayCompact\") ? {type: \"monthDayCompact\"} : monthDayCompact), (lexer.has(\"dash\") ? {type: \"dash\"} : dash), (lexer.has(\"monthDayCompact\") ? {type: \"monthDayCompact\"} : monthDayCompact)], \"postprocess\": d => {\n const start = parseMonthDayCompact(d[0].value);\n const end = parseMonthDayCompact(d[2].value);\n return makeRange(makeDate({ month: start.month, day: start.day }), makeDate({ month: end.month, day: end.day }));\n } },\n {\"name\": \"range\", \"symbols\": [(lexer.has(\"monthDayCompact\") ? {type: \"monthDayCompact\"} : monthDayCompact), \"_\", (lexer.has(\"dash\") ? {type: \"dash\"} : dash), \"_\", \"date\"], \"postprocess\": d => {\n const start = parseMonthDayCompact(d[0].value);\n return makeRange(makeDate({ month: start.month, day: start.day }), d[4]);\n } },\n {\"name\": \"range\", \"symbols\": [\"date\", \"_\", (lexer.has(\"dash\") ? {type: \"dash\"} : dash), \"_\", (lexer.has(\"monthDayCompact\") ? {type: \"monthDayCompact\"} : monthDayCompact)], \"postprocess\": d => {\n const end = parseMonthDayCompact(d[4].value);\n return makeRange(d[0], makeDate({ month: end.month, day: end.day }));\n } },\n {\"name\": \"range\", \"symbols\": [\"specialDay\", \"_\", \"time\", \"_\", \"toConnector\", \"_\", \"time\"], \"postprocess\": d => makeRange(makeDate({ special: d[0], time: d[2] }), makeDate({ special: d[0], time: d[6] }))},\n {\"name\": \"range\", \"symbols\": [\"monthDay\", \"_\", \"time\", \"_\", \"toConnector\", \"_\", \"time\"], \"postprocess\": d => makeRange({ ...d[0], time: d[2] }, { ...d[0], time: d[6] })},\n {\"name\": \"range\", \"symbols\": [\"weekday\", \"_\", \"time\", \"_\", \"toConnector\", \"_\", \"time\"], \"postprocess\": d => makeRange(makeDate({ weekday: d[0], time: d[2] }), makeDate({ weekday: d[0], time: d[6] }))},\n {\"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] }))},\n {\"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] }))},\n {\"name\": \"range\", \"symbols\": [\"betweenConnector\", \"_\", \"date\", \"_\", \"andConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(d[2], d[6])},\n {\"name\": \"range\", \"symbols\": [\"date\", \"_\", \"throughConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(d[0], d[4])},\n {\"name\": \"range\", \"symbols\": [\"date\", \"_\", \"untilConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(d[0], d[4])},\n {\"name\": \"range\", \"symbols\": [\"untilConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(makeDate({ special: 'today' }), d[2])},\n {\"name\": \"range\", \"symbols\": [\"untilConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => makeRange(makeDate({ special: 'today' }), d[2])},\n {\"name\": \"range\", \"symbols\": [\"fuzzy\", \"_\", \"toConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => makeRange(d[0], d[4])},\n {\"name\": \"range\", \"symbols\": [\"fromConnector\", \"_\", \"fuzzy\", \"_\", \"toConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => makeRange(d[2], d[6])},\n {\"name\": \"range\", \"symbols\": [\"betweenConnector\", \"_\", \"fuzzy\", \"_\", \"andConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => makeRange(d[2], d[6])},\n {\"name\": \"range\", \"symbols\": [\"fromConnector\", \"_\", \"date\", \"_\", \"untilConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(d[2], d[6])},\n {\"name\": \"range\", \"symbols\": [\"fromConnector\", \"_\", \"specialDay\", \"_\", \"untilConnector\", \"_\", \"date\"], \"postprocess\": d => makeRange(makeDate({ special: d[2] }), d[6])},\n {\"name\": \"span\", \"symbols\": [\"date\", \"_\", \"forConnector\", \"_\", \"duration\"], \"postprocess\": d => makeSpan(d[0], d[4])},\n {\"name\": \"span\", \"symbols\": [\"fuzzy\", \"_\", \"forConnector\", \"_\", \"duration\"], \"postprocess\": d => makeSpan(d[0], d[4])},\n {\"name\": \"span\", \"symbols\": [\"inConnector\", \"_\", \"fuzzy\", \"_\", \"forConnector\", \"_\", \"duration\"], \"postprocess\": d => makeSpan(d[2], d[6])},\n {\"name\": \"span\", \"symbols\": [\"inConnector\", \"_\", \"date\", \"_\", \"forConnector\", \"_\", \"duration\"], \"postprocess\": d => makeSpan(d[2], d[6])},\n {\"name\": \"span\", \"symbols\": [\"inConnector\", \"_\", \"monthForSpan\", \"_\", \"forConnector\", \"_\", \"duration\"], \"postprocess\": d => makeSpan(d[2], d[6])},\n {\"name\": \"span\", \"symbols\": [\"startingConnector\", \"_\", \"date\", \"_\", \"forConnector\", \"_\", \"duration\"], \"postprocess\": d => makeSpan(d[2], d[6])},\n {\"name\": \"span\", \"symbols\": [\"beginningConnector\", \"_\", \"date\", \"_\", \"forConnector\", \"_\", \"duration\"], \"postprocess\": d => makeSpan(d[2], d[6])},\n {\"name\": \"span\", \"symbols\": [\"startingConnector\", \"_\", \"date\"], \"postprocess\": d => makeSpan(d[2])},\n {\"name\": \"span\", \"symbols\": [\"date\", \"_\", \"startingConnector\", \"_\", \"date\"], \"postprocess\": d => makeSpan(d[4], d[0])},\n {\"name\": \"span\", \"symbols\": [\"duration\", \"_\", \"startingConnector\", \"_\", \"date\"], \"postprocess\": d => makeSpan(d[4], d[0])},\n {\"name\": \"span\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"date\"], \"postprocess\": d => makeSpan(d[4], d[0])},\n {\"name\": \"span\", \"symbols\": [\"duration\", \"_\", \"inConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => makeSpan(d[4], d[0])},\n {\"name\": \"span\", \"symbols\": [\"duration\", \"_\", \"inConnector\", \"_\", \"theConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => makeSpan(d[6], d[0])},\n {\"name\": \"monthForSpan\", \"symbols\": [\"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[0] })},\n {\"name\": \"relative\", \"symbols\": [\"lastRelative\", \"_\", \"number\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(d[2], d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"pastRelative\", \"_\", \"number\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(d[2], d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"previousRelative\", \"_\", \"number\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(d[2], d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"nextRelative\", \"_\", \"number\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(d[2], d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"comingRelative\", \"_\", \"number\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(d[2], d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"upcomingRelative\", \"_\", \"number\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(d[2], d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"withinConnector\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('future', d[2])},\n {\"name\": \"relative\", \"symbols\": [\"withinConnector\", \"_\", \"theConnector\", \"_\", \"nextRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('future', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"withinConnector\", \"_\", \"theConnector\", \"_\", \"lastRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('past', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"withinConnector\", \"_\", \"theConnector\", \"_\", \"pastRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('past', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"overConnector\", \"_\", \"theConnector\", \"_\", \"nextRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('future', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"overConnector\", \"_\", \"theConnector\", \"_\", \"lastRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('past', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"overConnector\", \"_\", \"theConnector\", \"_\", \"pastRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('past', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"overConnector\", \"_\", \"theConnector\", \"_\", \"comingRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('future', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"inConnector\", \"_\", \"theConnector\", \"_\", \"lastRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('past', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"inConnector\", \"_\", \"theConnector\", \"_\", \"nextRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('future', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"inConnector\", \"_\", \"theConnector\", \"_\", \"pastRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('past', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"inConnector\", \"_\", \"theConnector\", \"_\", \"comingRelative\", \"_\", \"duration\"], \"postprocess\": d => makeRelative('future', d[6])},\n {\"name\": \"relative\", \"symbols\": [\"lastRelative\", \"_\", \"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(parseWordNumber(d[2]), d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"nextRelative\", \"_\", \"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(parseWordNumber(d[2]), d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"pastRelative\", \"_\", \"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(parseWordNumber(d[2]), d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"previousRelative\", \"_\", \"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(parseWordNumber(d[2]), d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"comingRelative\", \"_\", \"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(parseWordNumber(d[2]), d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"upcomingRelative\", \"_\", \"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(parseWordNumber(d[2]), d[4]))},\n {\"name\": \"relative\", \"symbols\": [\"pastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(1, d[2]))},\n {\"name\": \"relative\", \"symbols\": [\"previousRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(1, d[2]))},\n {\"name\": \"relative\", \"symbols\": [\"upcomingRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(1, d[2]))},\n {\"name\": \"relative\", \"symbols\": [\"withinConnector\", \"_\", \"theConnector\", \"_\", \"nextRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(1, d[6]))},\n {\"name\": \"relative\", \"symbols\": [\"withinConnector\", \"_\", \"theConnector\", \"_\", \"pastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(1, d[6]))},\n {\"name\": \"relative\", \"symbols\": [\"overConnector\", \"_\", \"theConnector\", \"_\", \"lastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(1, d[6]))},\n {\"name\": \"relative\", \"symbols\": [\"overConnector\", \"_\", \"theConnector\", \"_\", \"comingRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(1, d[6]))},\n {\"name\": \"relative\", \"symbols\": [\"overConnector\", \"_\", \"theConnector\", \"_\", \"upcomingRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(1, d[6]))},\n {\"name\": \"relative\", \"symbols\": [\"inConnector\", \"_\", \"theConnector\", \"_\", \"pastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('past', makeDuration(1, d[6]))},\n {\"name\": \"relative\", \"symbols\": [\"inConnector\", \"_\", \"theConnector\", \"_\", \"comingRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(1, d[6]))},\n {\"name\": \"relative\", \"symbols\": [\"inConnector\", \"_\", \"theConnector\", \"_\", \"upcomingRelative\", \"_\", \"unit\"], \"postprocess\": d => makeRelative('future', makeDuration(1, d[6]))},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"agoConnector\"], \"postprocess\": d => makeRelativeDate('past', d[0])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"agoConnector\", \"_\", \"atConnector\", \"_\", \"time\"], \"postprocess\": d => makeRelativeDate('past', d[0], undefined, d[6])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"agoConnector\", \"_\", \"atConnector\", \"_\", \"timeWord\"], \"postprocess\": d => makeRelativeDate('past', d[0], undefined, { special: d[6] })},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"duration\"], \"postprocess\": d => makeRelativeDate('future', d[2])},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"duration\", \"_\", \"atConnector\", \"_\", \"time\"], \"postprocess\": d => makeRelativeDate('future', d[2], undefined, d[6])},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"duration\", \"_\", \"atConnector\", \"_\", \"timeWord\"], \"postprocess\": d => makeRelativeDate('future', d[2], undefined, { special: d[6] })},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"now\"], \"postprocess\": d => makeRelativeDate('future', d[0])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"now\", \"_\", \"atConnector\", \"_\", \"time\"], \"postprocess\": d => makeRelativeDate('future', d[0], undefined, d[8])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"now\", \"_\", \"atConnector\", \"_\", \"timeWord\"], \"postprocess\": d => makeRelativeDate('future', d[0], undefined, { special: d[8] })},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"today\"], \"postprocess\": d => makeRelativeDate('future', d[0], makeDate({ special: 'today' }))},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"today\", \"_\", \"atConnector\", \"_\", \"time\"], \"postprocess\": d => makeRelativeDate('future', d[0], makeDate({ special: 'today' }), d[8])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"tomorrow\"], \"postprocess\": d => makeRelativeDate('future', d[0], makeDate({ special: 'tomorrow' }))},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"tomorrow\", \"_\", \"atConnector\", \"_\", \"time\"], \"postprocess\": d => makeRelativeDate('future', d[0], makeDate({ special: 'tomorrow' }), d[8])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"fromConnector\", \"_\", \"yesterday\"], \"postprocess\": d => makeRelativeDate('future', d[0], makeDate({ special: 'yesterday' }))},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"henceConnector\"], \"postprocess\": d => makeRelativeDate('future', d[0])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"laterConnector\"], \"postprocess\": d => makeRelativeDate('future', d[0])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"beforeConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('past', d[0], d[4])},\n {\"name\": \"relativeDate\", \"symbols\": [\"duration\", \"_\", \"afterConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('future', d[0], d[4])},\n {\"name\": \"relativeDate\", \"symbols\": [\"theConnector\", \"_\", \"dayUnit\", \"_\", \"beforeConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(1, 'day'), d[6])},\n {\"name\": \"relativeDate\", \"symbols\": [\"theConnector\", \"_\", \"dayUnit\", \"_\", \"afterConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(1, 'day'), d[6])},\n {\"name\": \"relativeDate\", \"symbols\": [\"dayUnit\", \"_\", \"beforeConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(1, 'day'), d[4])},\n {\"name\": \"relativeDate\", \"symbols\": [\"dayUnit\", \"_\", \"afterConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(1, 'day'), d[4])},\n {\"name\": \"relativeDate\", \"symbols\": [\"wordNumber\", \"_\", \"unit\", \"_\", \"beforeConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(parseWordNumber(d[0]), d[2]), d[6])},\n {\"name\": \"relativeDate\", \"symbols\": [\"wordNumber\", \"_\", \"unit\", \"_\", \"afterConnector\", \"_\", \"date\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(parseWordNumber(d[0]), d[2]), d[6])},\n {\"name\": \"relativeDate\", \"symbols\": [\"nextRelative\", \"_\", \"businessKeyword\", \"_\", \"dayOrDaysUnit\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(1, 'businessDay'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"number\", \"_\", \"businessKeyword\", \"_\", \"dayOrDaysUnit\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(d[2], 'businessDay'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"wordNumber\", \"_\", \"businessKeyword\", \"_\", \"dayOrDaysUnit\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(parseWordNumber(d[2]), 'businessDay'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"number\", \"_\", \"businessKeyword\", \"_\", \"dayOrDaysUnit\", \"_\", \"agoConnector\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(d[0], 'businessDay'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"wordNumber\", \"_\", \"businessKeyword\", \"_\", \"dayOrDaysUnit\", \"_\", \"agoConnector\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(parseWordNumber(d[0]), 'businessDay'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"wordNumber\", \"_\", \"fortnightKeyword\", \"_\", \"fromConnector\", \"_\", \"now\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(parseWordNumber(d[0]) * 2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"number\", \"_\", \"fortnightKeyword\", \"_\", \"fromConnector\", \"_\", \"now\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(d[0] * 2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"fortnightKeyword\", \"_\", \"fromConnector\", \"_\", \"now\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"wordNumber\", \"_\", \"fortnightKeyword\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(parseWordNumber(d[2]) * 2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"number\", \"_\", \"fortnightKeyword\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(d[2] * 2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"inConnector\", \"_\", \"fortnightKeyword\"], \"postprocess\": d => makeRelativeDate('future', makeDuration(2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"wordNumber\", \"_\", \"fortnightKeyword\", \"_\", \"agoConnector\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(parseWordNumber(d[0]) * 2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"number\", \"_\", \"fortnightKeyword\", \"_\", \"agoConnector\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(d[0] * 2, 'week'))},\n {\"name\": \"relativeDate\", \"symbols\": [\"fortnightKeyword\", \"_\", \"agoConnector\"], \"postprocess\": d => makeRelativeDate('past', makeDuration(2, 'week'))},\n {\"name\": \"fuzzy\", \"symbols\": [\"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[0].value) })},\n {\"name\": \"fuzzy\", \"symbols\": [\"quarter\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[0].value), year: d[2] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"half\"], \"postprocess\": d => makeFuzzy({ period: 'half', half: parseHalf(d[0].value) })},\n {\"name\": \"fuzzy\", \"symbols\": [\"half\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'half', half: parseHalf(d[0].value), year: d[2] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[2], modifier: 'early' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[2], modifier: 'mid' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[2], modifier: 'late' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[2].value), modifier: 'early' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[2].value), modifier: 'mid' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[2].value), modifier: 'late' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'year', year: d[2], modifier: 'early' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'year', year: d[2], modifier: 'mid' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'year', year: d[2], modifier: 'late' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"yearUnit\"], \"postprocess\": d => makeFuzzy({ period: 'year', modifier: 'early' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"yearUnit\"], \"postprocess\": d => makeFuzzy({ period: 'year', modifier: 'mid' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"yearUnit\"], \"postprocess\": d => makeFuzzy({ period: 'year', modifier: 'late' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"endConnector\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[4], modifier: 'end' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"endConnector\", \"_\", \"ofConnector\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'year', year: d[4], modifier: 'end' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"endConnector\", \"_\", \"ofConnector\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[4].value), modifier: 'end' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"startConnector\", \"_\", \"ofConnector\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[4].value), modifier: 'start' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"beginningConnector\", \"_\", \"ofConnector\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[4].value), modifier: 'beginning' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"middleConnector\", \"_\", \"ofConnector\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[4].value), modifier: 'middle' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"endConnector\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[6], modifier: 'end' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"endConnector\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[6], modifier: 'end' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"endConnector\", \"_\", \"ofConnector\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'end' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"beginningConnector\", \"_\", \"ofConnector\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'beginning' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"startConnector\", \"_\", \"ofConnector\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'start' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"middleConnector\", \"_\", \"ofConnector\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'middle' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"beginningConnector\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[4], modifier: 'beginning' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"beginningConnector\", \"_\", \"ofConnector\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'year', year: d[4], modifier: 'beginning' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"startConnector\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[4], modifier: 'start' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"startConnector\", \"_\", \"ofConnector\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'year', year: d[4], modifier: 'start' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"middleConnector\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[4], modifier: 'middle' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"middleConnector\", \"_\", \"ofConnector\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'year', year: d[4], modifier: 'middle' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"season\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[0] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"season\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[0], year: d[2] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"season\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[2], modifier: 'early' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"season\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[2], modifier: 'mid' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"season\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[2], modifier: 'late' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"nextRelative\", \"_\", \"season\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[2], relative: 'next' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lastRelative\", \"_\", \"season\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[2], relative: 'last' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"thisRelative\", \"_\", \"season\"], \"postprocess\": d => makeFuzzy({ period: 'season', season: d[2], relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"quarter\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseOrdinalWord(d[0]), year: d[4] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"quarter\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseOrdinalWord(d[0]) })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"half\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'half', half: parseOrdinalWord(d[0]), year: d[4] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"half\"], \"postprocess\": d => makeFuzzy({ period: 'half', half: parseOrdinalWord(d[0]) })},\n {\"name\": \"fuzzy\", \"symbols\": [\"aroundConnector\", \"_\", \"date\"], \"postprocess\": d => makeFuzzy({ ...d[2], period: 'around' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"aboutConnector\", \"_\", \"date\"], \"postprocess\": d => makeFuzzy({ ...d[2], period: 'around' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"roughlyConnector\", \"_\", \"date\"], \"postprocess\": d => makeFuzzy({ ...d[2], period: 'around' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"approximatelyConnector\", \"_\", \"date\"], \"postprocess\": d => makeFuzzy({ ...d[2], period: 'around' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"aroundConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => d[2]},\n {\"name\": \"fuzzy\", \"symbols\": [\"aboutConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => d[2]},\n {\"name\": \"fuzzy\", \"symbols\": [\"roughlyConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => d[2]},\n {\"name\": \"fuzzy\", \"symbols\": [\"approximatelyConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => d[2]},\n {\"name\": \"fuzzy\", \"symbols\": [\"sometimeConnector\", \"_\", \"inConnector\", \"_\", \"fuzzy\"], \"postprocess\": d => d[4]},\n {\"name\": \"fuzzy\", \"symbols\": [\"sometimeConnector\", \"_\", \"inConnector\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[4] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"sometimeConnector\", \"_\", \"nextRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], relative: 'next' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"sometimeConnector\", \"_\", \"lastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], relative: 'last' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"sometimeConnector\", \"_\", \"thisRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"theConnector\", \"_\", \"lastRelative\", \"_\", \"unit\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeFuzzy({ period: 'month', month: d[8], modifier: 'late' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"theConnector\", \"_\", \"ordinalWord\", \"_\", \"unit\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": (d, _, reject) => {\n const ord = d[2].toLowerCase();\n if (ord === 'first') return makeFuzzy({ period: 'month', month: d[8], modifier: 'early' });\n return reject;\n } },\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"quarterUnit\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseOrdinalWord(d[0]) })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinal\", \"_\", \"quarterUnit\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseOrdinal(d[0]) })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"quarterUnit\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseOrdinalWord(d[0]), year: d[4] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"quarterUnit\", \"_\", \"ofConnector\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseOrdinalWord(d[0]), year: d[6] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"quarter\", \"_\", \"ofConnector\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'quarter', quarter: parseQuarter(d[0].value), year: d[4] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"halfWord\", \"_\", \"ofConnector\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'half', half: parseOrdinalWord(d[0]), year: d[6] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"nextRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'early', relative: 'next' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"nextRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'mid', relative: 'next' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"nextRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'late', relative: 'next' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"lastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'early', relative: 'last' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"lastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'mid', relative: 'last' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"lastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'late', relative: 'last' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlyModifier\", \"_\", \"thisRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'early', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"midModifier\", \"_\", \"thisRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'mid', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lateModifier\", \"_\", \"thisRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'late', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"beginningConnector\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[6], modifier: 'beginning' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"middleConnector\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[6], modifier: 'middle' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lastRelative\", \"_\", \"unit\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": (d, _, reject) => {\n // Reject \"last day of month\" - that's a specific date, not fuzzy\n if (d[2].toLowerCase() === 'day' || d[2].toLowerCase() === 'days') return reject;\n return makeFuzzy({ period: 'month', month: d[6], modifier: 'late' });\n } },\n {\"name\": \"fuzzy\", \"symbols\": [\"ordinalWord\", \"_\", \"unit\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": (d, _, reject) => {\n // Reject \"first/second/etc day of month\" - that's a specific date, not fuzzy\n if (d[2].toLowerCase() === 'day' || d[2].toLowerCase() === 'days') return reject;\n return makeFuzzy({ period: 'month', month: d[6], modifier: parseOrdinalWord(d[0]) <= 2 ? 'early' : (parseOrdinalWord(d[0]) >= 4 ? 'late' : 'mid') });\n } },\n {\"name\": \"fuzzy\", \"symbols\": [\"weekendKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'weekend', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"theConnector\", \"_\", \"weekendKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'weekend', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"thisRelative\", \"_\", \"weekendKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'weekend', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"nextRelative\", \"_\", \"weekendKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'weekend', relative: 'next' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lastRelative\", \"_\", \"weekendKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'weekend', relative: 'last' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"tonightKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'tonight' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"nightKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'night' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"lastRelative\", \"_\", \"nightKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'night', relative: 'last' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"tomorrow\", \"_\", \"nightKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'night', relative: 'tomorrow' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"weekday\", \"_\", \"nightKeyword\"], \"postprocess\": d => makeFuzzy({ period: 'night', weekday: d[0] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"laterKeyword\", \"_\", \"today\"], \"postprocess\": d => makeFuzzy({ period: 'day', modifier: 'later' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlierKeyword\", \"_\", \"today\"], \"postprocess\": d => makeFuzzy({ period: 'day', modifier: 'earlier' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"laterKeyword\", \"_\", \"thisRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'later', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"earlierKeyword\", \"_\", \"thisRelative\", \"_\", \"unit\"], \"postprocess\": d => makeFuzzy({ period: d[4], modifier: 'earlier', relative: 'this' })},\n {\"name\": \"fuzzy\", \"symbols\": [\"weekKeyword\", \"_\", \"number\"], \"postprocess\": d => makeFuzzy({ period: 'weekNumber', weekNumber: d[2] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"weekKeyword\", \"_\", \"number\", \"_\", \"year\"], \"postprocess\": d => makeFuzzy({ period: 'weekNumber', weekNumber: d[2], year: d[4] })},\n {\"name\": \"fuzzy\", \"symbols\": [\"theConnector\", \"_\", \"weekKeyword\", \"_\", \"ofConnector\", \"_\", \"date\"], \"postprocess\": d => makeFuzzy({ period: 'weekOf', baseDate: d[6] })},\n {\"name\": \"duration\", \"symbols\": [\"number\", \"_\", \"unit\"], \"postprocess\": d => makeDuration(d[0], d[2])},\n {\"name\": \"duration\", \"symbols\": [\"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => makeDuration(parseWordNumber(d[0]), d[2])},\n {\"name\": \"duration\", \"symbols\": [\"abbreviatedDuration\"], \"postprocess\": d => d[0]},\n {\"name\": \"duration\", \"symbols\": [\"halfWord\", \"_\", \"wordNumber\", \"_\", \"unit\"], \"postprocess\": d => {\n const word = d[2].toLowerCase();\n // \"half a day\" = 0.5 days, \"half two days\" = 2.5 days\n if (word === 'a' || word === 'an') {\n return makeDuration(0.5, d[4]);\n }\n return makeDuration(parseWordNumber(d[2]) + 0.5, d[4]);\n } },\n {\"name\": \"duration\", \"symbols\": [\"number\", \"_\", \"andConnector\", \"_\", \"halfWord\", \"_\", \"unit\"], \"postprocess\": d => makeDuration(d[0] + 0.5, d[6])},\n {\"name\": \"duration\", \"symbols\": [\"wordNumber\", \"_\", \"andConnector\", \"_\", \"halfWord\", \"_\", \"unit\"], \"postprocess\": d => makeDuration(parseWordNumber(d[0]) + 0.5, d[6])},\n {\"name\": \"duration\", \"symbols\": [\"wordNumber\", \"_\", \"andConnector\", \"_\", \"wordNumber\", \"_\", \"halfWord\", \"_\", \"unit\"], \"postprocess\": d => makeDuration(parseWordNumber(d[0]) + 0.5, d[8])},\n {\"name\": \"duration\", \"symbols\": [\"wordNumber\", \"_\", \"unit\", \"_\", \"andConnector\", \"_\", \"wordNumber\", \"_\", \"halfWord\"], \"postprocess\": d => makeDuration(parseWordNumber(d[0]) + 0.5, d[2])},\n {\"name\": \"duration\", \"symbols\": [\"halfWord\", \"_\", \"unit\"], \"postprocess\": d => makeDuration(0.5, d[2])},\n {\"name\": \"duration\", \"symbols\": [\"duration\", \"_\", \"andConnector\", \"_\", \"duration\"], \"postprocess\": d => ({ ...d[0], combined: [d[0], d[4]] })},\n {\"name\": \"duration\", \"symbols\": [\"duration\", \"_\", (lexer.has(\"comma\") ? {type: \"comma\"} : comma), \"_\", \"duration\"], \"postprocess\": d => ({ ...d[0], combined: [d[0], d[4]] })},\n {\"name\": \"duration\", \"symbols\": [\"duration\", \"_\", (lexer.has(\"comma\") ? {type: \"comma\"} : comma), \"_\", \"andConnector\", \"_\", \"duration\"], \"postprocess\": d => ({ ...d[0], combined: [d[0], d[6]] })},\n {\"name\": \"duration\", \"symbols\": [\"duration\", \"_\", \"duration\"], \"postprocess\": d => ({ ...d[0], combined: [d[0], d[2]] })},\n {\"name\": \"abbreviatedDuration\", \"symbols\": [(lexer.has(\"abbreviatedDuration\") ? {type: \"abbreviatedDuration\"} : abbreviatedDuration)], \"postprocess\": d => {\n const match = d[0].value.match(/^(\\d+)(mo|w|d|h|m|s|y)$/);\n if (!match) return null;\n const value = parseInt(match[1], 10);\n // 'm' = minute, 'mo' = month\n const unitMap: Record<string, string> = { w: 'week', d: 'day', h: 'hour', m: 'minute', mo: 'month', s: 'second', y: 'year' };\n return makeDuration(value, unitMap[match[2]]);\n } },\n {\"name\": \"date\", \"symbols\": [\"specialDay\"], \"postprocess\": d => makeDate({ special: d[0] })},\n {\"name\": \"date\", \"symbols\": [\"ordinalWeekdayOfMonth\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"relativeWeekday\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"weekday\"], \"postprocess\": d => makeDate({ weekday: d[0] })},\n {\"name\": \"date\", \"symbols\": [\"monthDayYear\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"monthDay\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"monthDayCompact\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"monthYear\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"dateFormat\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"relativePeriod\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"complexDate\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"dateWithTime\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"relativeMonth\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"monthOnly\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"yearOnly\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"timeOnly\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"dayOnly\"], \"postprocess\": first},\n {\"name\": \"date\", \"symbols\": [\"eodCobDate\"], \"postprocess\": first},\n {\"name\": \"monthDayCompact\", \"symbols\": [(lexer.has(\"monthDayCompact\") ? {type: \"monthDayCompact\"} : monthDayCompact)], \"postprocess\": d => {\n const parsed = parseMonthDayCompact(d[0].value);\n return makeDate({ month: parsed.month, day: parsed.day });\n } },\n {\"name\": \"monthOnly\", \"symbols\": [\"month\"], \"postprocess\": d => makeDate({ month: d[0], day: 1, monthOnly: true })},\n {\"name\": \"relativeMonth\", \"symbols\": [\"nextRelative\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[2], day: 1, monthOnly: true, relativeMonth: 'next' })},\n {\"name\": \"relativeMonth\", \"symbols\": [\"lastRelative\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[2], day: 1, monthOnly: true, relativeMonth: 'last' })},\n {\"name\": \"relativeMonth\", \"symbols\": [\"thisRelative\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[2], day: 1, monthOnly: true, relativeMonth: 'this' })},\n {\"name\": \"monthYear\", \"symbols\": [\"month\", \"_\", \"year\"], \"postprocess\": d => makeDate({ month: d[0], year: d[2], day: 1, monthOnly: true })},\n {\"name\": \"yearOnly\", \"symbols\": [\"year\"], \"postprocess\": (d, _, reject) => {\n const year = d[0];\n // Only accept 4-digit years in reasonable range (1900-2100)\n if (year < 1900 || year > 2100) return reject;\n return makeDate({ year, month: 1, day: 1, yearOnly: true });\n } },\n {\"name\": \"timeOnly\", \"symbols\": [\"time\"], \"postprocess\": d => makeDate({ time: d[0], timeOnly: true })},\n {\"name\": \"timeOnly\", \"symbols\": [\"timeWord\"], \"postprocess\": d => makeDate({ time: { special: d[0] }, timeOnly: true })},\n {\"name\": \"dayOnly\", \"symbols\": [\"theConnector\", \"_\", \"dayNumber\"], \"postprocess\": d => makeDate({ day: d[2], dayOnly: true })},\n {\"name\": \"dayOnly\", \"symbols\": [\"onConnector\", \"_\", \"theConnector\", \"_\", \"dayNumber\"], \"postprocess\": d => makeDate({ day: d[4], dayOnly: true })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"eodKeyword\"], \"postprocess\": d => makeDate({ special: 'today', time: { hour: 23, minute: 59 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"cobKeyword\"], \"postprocess\": d => makeDate({ special: 'today', time: { hour: 17, minute: 0 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"eodKeyword\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[2], time: { hour: 23, minute: 59 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"cobKeyword\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[2], time: { hour: 17, minute: 0 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"eodKeyword\", \"_\", \"specialDay\"], \"postprocess\": d => makeDate({ special: d[2], time: { hour: 23, minute: 59 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"cobKeyword\", \"_\", \"specialDay\"], \"postprocess\": d => makeDate({ special: d[2], time: { hour: 17, minute: 0 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"endConnector\", \"_\", \"ofConnector\", \"_\", \"dayUnit\", \"_\", \"specialDay\"], \"postprocess\": d => makeDate({ special: d[6], time: { hour: 23, minute: 59 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"closeKeyword\", \"_\", \"ofConnector\", \"_\", \"businessKeyword\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[6], time: { hour: 17, minute: 0 } })},\n {\"name\": \"eodCobDate\", \"symbols\": [\"closeKeyword\", \"_\", \"ofConnector\", \"_\", \"businessKeyword\", \"_\", \"specialDay\"], \"postprocess\": d => makeDate({ special: d[6], time: { hour: 17, minute: 0 } })},\n {\"name\": \"specialDay\", \"symbols\": [\"today\"], \"postprocess\": d => 'today'},\n {\"name\": \"specialDay\", \"symbols\": [\"tomorrow\"], \"postprocess\": d => 'tomorrow'},\n {\"name\": \"specialDay\", \"symbols\": [\"yesterday\"], \"postprocess\": d => 'yesterday'},\n {\"name\": \"specialDay\", \"symbols\": [\"now\"], \"postprocess\": d => 'now'},\n {\"name\": \"specialDay\", \"symbols\": [\"theConnector\", \"_\", \"dayUnit\", \"_\", \"afterConnector\", \"_\", \"tomorrow\"], \"postprocess\": d => 'dayAfterTomorrow'},\n {\"name\": \"specialDay\", \"symbols\": [\"dayUnit\", \"_\", \"afterConnector\", \"_\", \"tomorrow\"], \"postprocess\": d => 'dayAfterTomorrow'},\n {\"name\": \"specialDay\", \"symbols\": [\"theConnector\", \"_\", \"dayUnit\", \"_\", \"beforeConnector\", \"_\", \"yesterday\"], \"postprocess\": d => 'dayBeforeYesterday'},\n {\"name\": \"specialDay\", \"symbols\": [\"dayUnit\", \"_\", \"beforeConnector\", \"_\", \"yesterday\"], \"postprocess\": d => 'dayBeforeYesterday'},\n {\"name\": \"dayUnit\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => d[0].value === 'day' ? d[0] : reject},\n {\"name\": \"dayOrDaysUnit\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => (d[0].value === 'day' || d[0].value === 'days') ? d[0] : reject},\n {\"name\": \"relativeWeekday\", \"symbols\": [\"nextRelative\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[2], relative: 'next' })},\n {\"name\": \"relativeWeekday\", \"symbols\": [\"lastRelative\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[2], relative: 'last' })},\n {\"name\": \"relativeWeekday\", \"symbols\": [\"thisRelative\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[2], relative: 'this' })},\n {\"name\": \"relativeWeekday\", \"symbols\": [\"comingRelative\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[2], relative: 'next' })},\n {\"name\": \"relativeWeekday\", \"symbols\": [\"previousRelative\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[2], relative: 'last' })},\n {\"name\": \"relativePeriod\", \"symbols\": [\"nextRelative\", \"_\", \"unit\"], \"postprocess\": d => makeDate({ relative: 'next', period: d[2] })},\n {\"name\": \"relativePeriod\", \"symbols\": [\"lastRelative\", \"_\", \"unit\"], \"postprocess\": d => makeDate({ relative: 'last', period: d[2] })},\n {\"name\": \"relativePeriod\", \"symbols\": [\"thisRelative\", \"_\", \"unit\"], \"postprocess\": d => makeDate({ relative: 'this', period: d[2] })},\n {\"name\": \"monthDay\", \"symbols\": [\"month\", \"_\", \"dayNumber\"], \"postprocess\": d => makeDate({ month: d[0], day: d[2] })},\n {\"name\": \"monthDay\", \"symbols\": [\"dayNumber\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[2], day: d[0] })},\n {\"name\": \"monthDay\", \"symbols\": [\"dayNumber\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[4], day: d[0] })},\n {\"name\": \"monthDay\", \"symbols\": [\"theConnector\", \"_\", \"dayNumber\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[6], day: d[2] })},\n {\"name\": \"monthDay\", \"symbols\": [\"month\", \"_\", \"ordinalWord\"], \"postprocess\": d => makeDate({ month: d[0], day: parseOrdinalWord(d[2]) })},\n {\"name\": \"monthDay\", \"symbols\": [\"month\", \"_\", \"theConnector\", \"_\", \"dayNumber\"], \"postprocess\": d => makeDate({ month: d[0], day: d[4] })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"ordinalWord\", \"_\", \"weekday\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeDate({ ordinalWeekday: parseOrdinalWord(d[0]), weekday: d[2], month: d[6] })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"lastRelative\", \"_\", \"weekday\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeDate({ ordinalWeekday: -1, weekday: d[2], month: d[6] })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"ordinalWord\", \"_\", \"weekday\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"monthUnit\"], \"postprocess\": d => makeDate({ ordinalWeekday: parseOrdinalWord(d[0]), weekday: d[2], monthFromRef: true })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"lastRelative\", \"_\", \"weekday\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"monthUnit\"], \"postprocess\": d => makeDate({ ordinalWeekday: -1, weekday: d[2], monthFromRef: true })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"ordinalWord\", \"_\", \"dayUnit\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[6], day: parseOrdinalWord(d[0]) })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"lastRelative\", \"_\", \"dayUnit\", \"_\", \"ofConnector\", \"_\", \"month\"], \"postprocess\": d => makeDate({ month: d[6], day: -1, lastDayOfMonth: true })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"lastRelative\", \"_\", \"dayUnit\", \"_\", \"ofConnector\", \"_\", \"theConnector\", \"_\", \"monthUnit\"], \"postprocess\": d => makeDate({ lastDayOfMonth: true, monthFromRef: true })},\n {\"name\": \"ordinalWeekdayOfMonth\", \"symbols\": [\"ordinalWord\", \"_\", \"dayUnit\", \"_\", \"ofConnector\", \"_\", \"nextRelative\", \"_\", \"monthUnit\"], \"postprocess\": d => makeDate({ ordinalWeekday: parseOrdinalWord(d[0]), dayOfMonth: true, nextMonth: true })},\n {\"name\": \"monthDayYear\", \"symbols\": [\"monthDay\", \"_\", \"year\"], \"postprocess\": d => ({ ...d[0], year: d[2] })},\n {\"name\": \"monthDayYear\", \"symbols\": [\"monthDay\", (lexer.has(\"comma\") ? {type: \"comma\"} : comma), \"_\", \"year\"], \"postprocess\": d => ({ ...d[0], year: d[3] })},\n {\"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 => {\n const parts = [parseInt(d[0].value, 10), parseInt(d[2].value, 10), parseInt(d[4].value, 10)];\n // ISO format: YYYY-MM-DD\n if (parts[0] > 1000) {\n return makeDate({ year: parts[0], month: parts[1], day: parts[2] });\n }\n // Otherwise, could be MM-DD-YYYY or DD-MM-YYYY - store raw parts\n return makeDate({ formatParts: parts, separator: '-' });\n } },\n {\"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 => {\n const parts = [parseInt(d[0].value, 10), parseInt(d[2].value, 10), parseInt(d[4].value, 10)];\n // ISO-like format: YYYY/MM/DD\n if (parts[0] > 1000) {\n return makeDate({ year: parts[0], month: parts[1], day: parts[2] });\n }\n // Could be MM/DD/YYYY (US) or DD/MM/YYYY (intl) - store raw parts\n return makeDate({ formatParts: parts, separator: '/' });\n } },\n {\"name\": \"dateWithTime\", \"symbols\": [\"date\", \"_\", \"atConnector\", \"_\", \"time\"], \"postprocess\": d => ({ ...d[0], time: d[4] })},\n {\"name\": \"dateWithTime\", \"symbols\": [\"date\", \"_\", \"atConnector\", \"_\", \"timeWord\"], \"postprocess\": d => ({ ...d[0], time: { special: d[4] } })},\n {\"name\": \"dateWithTime\", \"symbols\": [\"time\", \"_\", \"date\"], \"postprocess\": d => ({ ...d[2], time: d[0] })},\n {\"name\": \"dateWithTime\", \"symbols\": [\"timeWord\", \"_\", \"date\"], \"postprocess\": d => ({ ...d[2], time: { special: d[0] } })},\n {\"name\": \"dateWithTime\", \"symbols\": [\"date\", \"_\", \"time\"], \"postprocess\": d => ({ ...d[0], time: d[2] })},\n {\"name\": \"dateWithTime\", \"symbols\": [\"timeWord\", \"_\", \"onConnector\", \"_\", \"date\"], \"postprocess\": d => ({ ...d[4], time: { special: d[0] } })},\n {\"name\": \"dateWithTime\", \"symbols\": [\"timeWord\", \"_\", \"onConnector\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ weekday: d[4], time: { special: d[0] } })},\n {\"name\": \"dateWithTime\", \"symbols\": [\"midnight\", \"_\", \"tonightKeyword\"], \"postprocess\": d => makeDate({ special: 'tonight', time: { special: 'midnight' } })},\n {\"name\": \"complexDate\", \"symbols\": [\"nextRelative\", \"_\", \"unit\", \"_\", \"weekday\", \"_\", \"time\"], \"postprocess\": d => makeDate({ relative: 'next', period: d[2], weekday: d[4], time: d[6] })},\n {\"name\": \"complexDate\", \"symbols\": [\"nextRelative\", \"_\", \"unit\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ relative: 'next', period: d[2], weekday: d[4] })},\n {\"name\": \"complexDate\", \"symbols\": [\"lastRelative\", \"_\", \"unit\", \"_\", \"weekday\", \"_\", \"time\"], \"postprocess\": d => makeDate({ relative: 'last', period: d[2], weekday: d[4], time: d[6] })},\n {\"name\": \"complexDate\", \"symbols\": [\"lastRelative\", \"_\", \"unit\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ relative: 'last', period: d[2], weekday: d[4] })},\n {\"name\": \"complexDate\", \"symbols\": [\"thisRelative\", \"_\", \"unit\", \"_\", \"weekday\", \"_\", \"time\"], \"postprocess\": d => makeDate({ relative: 'this', period: d[2], weekday: d[4], time: d[6] })},\n {\"name\": \"complexDate\", \"symbols\": [\"thisRelative\", \"_\", \"unit\", \"_\", \"weekday\"], \"postprocess\": d => makeDate({ relative: 'this', period: d[2], weekday: d[4] })},\n {\"name\": \"time\", \"symbols\": [(lexer.has(\"time\") ? {type: \"time\"} : time)], \"postprocess\": d => {\n const parts = d[0].value.split(':');\n return { hour: parseInt(parts[0], 10), minute: parseInt(parts[1], 10) };\n } },\n {\"name\": \"time\", \"symbols\": [(lexer.has(\"time\") ? {type: \"time\"} : time), \"_\", (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n const parts = d[0].value.split(':');\n let hour = parseInt(parts[0], 10);\n if (d[2].value === 'pm' && hour !== 12) hour += 12;\n if (d[2].value === 'am' && hour === 12) hour = 0;\n return { hour, minute: parseInt(parts[1], 10) };\n } },\n {\"name\": \"time\", \"symbols\": [(lexer.has(\"time\") ? {type: \"time\"} : time), (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n const parts = d[0].value.split(':');\n let hour = parseInt(parts[0], 10);\n if (d[1].value === 'pm' && hour !== 12) hour += 12;\n if (d[1].value === 'am' && hour === 12) hour = 0;\n return { hour, minute: parseInt(parts[1], 10) };\n } },\n {\"name\": \"time\", \"symbols\": [(lexer.has(\"integer\") ? {type: \"integer\"} : integer), \"_\", (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n let hour = parseInt(d[0].value, 10);\n if (d[2].value === 'pm' && hour !== 12) hour += 12;\n if (d[2].value === 'am' && hour === 12) hour = 0;\n return { hour, minute: 0 };\n } },\n {\"name\": \"time\", \"symbols\": [(lexer.has(\"integer\") ? {type: \"integer\"} : integer), (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n let hour = parseInt(d[0].value, 10);\n if (d[1].value === 'pm' && hour !== 12) hour += 12;\n if (d[1].value === 'am' && hour === 12) hour = 0;\n return { hour, minute: 0 };\n } },\n {\"name\": \"time\", \"symbols\": [\"quarterKeyword\", \"_\", \"pastConnector\", \"_\", \"hourNumber\"], \"postprocess\": d => ({ hour: d[4], minute: 15 })},\n {\"name\": \"time\", \"symbols\": [\"quarterKeyword\", \"_\", \"pastConnector\", \"_\", \"hourNumber\", (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n let hour = d[4];\n if (d[5].value === 'pm' && hour !== 12) hour += 12;\n if (d[5].value === 'am' && hour === 12) hour = 0;\n return { hour, minute: 15 };\n } },\n {\"name\": \"time\", \"symbols\": [\"halfWord\", \"_\", \"pastConnector\", \"_\", \"hourNumber\"], \"postprocess\": d => ({ hour: d[4], minute: 30 })},\n {\"name\": \"time\", \"symbols\": [\"halfWord\", \"_\", \"pastConnector\", \"_\", \"hourNumber\", (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n let hour = d[4];\n if (d[5].value === 'pm' && hour !== 12) hour += 12;\n if (d[5].value === 'am' && hour === 12) hour = 0;\n return { hour, minute: 30 };\n } },\n {\"name\": \"time\", \"symbols\": [\"quarterKeyword\", \"_\", \"toConnector\", \"_\", \"hourNumber\"], \"postprocess\": d => ({ hour: d[4] - 1, minute: 45 })},\n {\"name\": \"time\", \"symbols\": [\"quarterKeyword\", \"_\", \"toConnector\", \"_\", \"hourNumber\", (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n let hour = d[4];\n if (d[5].value === 'pm' && hour !== 12) hour += 12;\n if (d[5].value === 'am' && hour === 12) hour = 0;\n return { hour: hour - 1, minute: 45 };\n } },\n {\"name\": \"time\", \"symbols\": [\"number\", \"_\", \"pastConnector\", \"_\", \"hourNumber\"], \"postprocess\": d => ({ hour: d[4], minute: d[0] })},\n {\"name\": \"time\", \"symbols\": [\"number\", \"_\", \"pastConnector\", \"_\", \"hourNumber\", (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n let hour = d[4];\n if (d[5].value === 'pm' && hour !== 12) hour += 12;\n if (d[5].value === 'am' && hour === 12) hour = 0;\n return { hour, minute: d[0] };\n } },\n {\"name\": \"time\", \"symbols\": [\"number\", \"_\", \"toConnector\", \"_\", \"hourNumber\"], \"postprocess\": d => ({ hour: d[4] - 1, minute: 60 - d[0] })},\n {\"name\": \"time\", \"symbols\": [\"number\", \"_\", \"toConnector\", \"_\", \"hourNumber\", (lexer.has(\"ampm\") ? {type: \"ampm\"} : ampm)], \"postprocess\": d => {\n let hour = d[4];\n if (d[5].value === 'pm' && hour !== 12) hour += 12;\n if (d[5].value === 'am' && hour === 12) hour = 0;\n return { hour: hour - 1, minute: 60 - d[0] };\n } },\n {\"name\": \"time\", \"symbols\": [\"number\", \"_\", \"toConnector\", \"_\", \"noon\"], \"postprocess\": d => ({ hour: 11, minute: 60 - d[0] })},\n {\"name\": \"time\", \"symbols\": [\"number\", \"_\", \"toConnector\", \"_\", \"midnight\"], \"postprocess\": d => ({ hour: 23, minute: 60 - d[0] })},\n {\"name\": \"time\", \"symbols\": [\"quarterKeyword\", \"_\", \"toConnector\", \"_\", \"noon\"], \"postprocess\": d => ({ hour: 11, minute: 45 })},\n {\"name\": \"time\", \"symbols\": [\"quarterKeyword\", \"_\", \"toConnector\", \"_\", \"midnight\"], \"postprocess\": d => ({ hour: 23, minute: 45 })},\n {\"name\": \"timeWord\", \"symbols\": [\"noon\"], \"postprocess\": d => 'noon'},\n {\"name\": \"timeWord\", \"symbols\": [\"midnight\"], \"postprocess\": d => 'midnight'},\n {\"name\": \"number\", \"symbols\": [(lexer.has(\"integer\") ? {type: \"integer\"} : integer)], \"postprocess\": d => parseInt(d[0].value, 10)},\n {\"name\": \"number\", \"symbols\": [(lexer.has(\"decimal\") ? {type: \"decimal\"} : decimal)], \"postprocess\": d => parseFloat(d[0].value)},\n {\"name\": \"year\", \"symbols\": [(lexer.has(\"integer\") ? {type: \"integer\"} : integer)], \"postprocess\": (d, _, reject) => {\n const val = parseInt(d[0].value, 10);\n // Only accept 4-digit years (1900-2100) to avoid ambiguity with day numbers\n if (val >= 1900 && val <= 2100) return val;\n return reject;\n } },\n {\"name\": \"dayNumber\", \"symbols\": [(lexer.has(\"integer\") ? {type: \"integer\"} : integer)], \"postprocess\": (d, _, reject) => {\n const val = parseInt(d[0].value, 10);\n if (val < 1 || val > 31) return reject;\n return val;\n } },\n {\"name\": \"dayNumber\", \"symbols\": [(lexer.has(\"ordinal\") ? {type: \"ordinal\"} : ordinal)], \"postprocess\": d => parseOrdinal(d[0].value)},\n {\"name\": \"month\", \"symbols\": [(lexer.has(\"month\") ? {type: \"month\"} : month)], \"postprocess\": d => parseMonth(d[0].value)},\n {\"name\": \"weekday\", \"symbols\": [(lexer.has(\"weekday\") ? {type: \"weekday\"} : weekday)], \"postprocess\": d => d[0].value},\n {\"name\": \"quarter\", \"symbols\": [(lexer.has(\"quarter\") ? {type: \"quarter\"} : quarter)], \"postprocess\": first},\n {\"name\": \"half\", \"symbols\": [(lexer.has(\"half\") ? {type: \"half\"} : half)], \"postprocess\": first},\n {\"name\": \"season\", \"symbols\": [(lexer.has(\"season\") ? {type: \"season\"} : season)], \"postprocess\": d => d[0].value},\n {\"name\": \"unit\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": d => d[0].value},\n {\"name\": \"quarterUnit\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => {\n const val = d[0].value.toLowerCase();\n if (val === 'quarter' || val === 'quarters') return val;\n return reject;\n } },\n {\"name\": \"halfUnit\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => {\n const val = d[0].value.toLowerCase();\n if (val === 'half') return val;\n return reject;\n } },\n {\"name\": \"yearUnit\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => {\n const val = d[0].value.toLowerCase();\n if (val === 'year' || val === 'years' || val === 'yr' || val === 'yrs') return val;\n return reject;\n } },\n {\"name\": \"monthUnit\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => {\n const val = d[0].value.toLowerCase();\n if (val === 'month' || val === 'months' || val === 'mo' || val === 'mos') return val;\n return reject;\n } },\n {\"name\": \"wordNumber\", \"symbols\": [(lexer.has(\"wordNumber\") ? {type: \"wordNumber\"} : wordNumber)], \"postprocess\": d => d[0].value},\n {\"name\": \"ordinalWord\", \"symbols\": [(lexer.has(\"ordinalWord\") ? {type: \"ordinalWord\"} : ordinalWord)], \"postprocess\": d => d[0].value},\n {\"name\": \"ordinalWord\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => {\n if (d[0].value === 'second') return 'second';\n return reject;\n } },\n {\"name\": \"ordinal\", \"symbols\": [(lexer.has(\"ordinal\") ? {type: \"ordinal\"} : ordinal)], \"postprocess\": d => d[0].value},\n {\"name\": \"halfWord\", \"symbols\": [(lexer.has(\"halfWord\") ? {type: \"halfWord\"} : halfWord)], \"postprocess\": d => d[0].value},\n {\"name\": \"toConnector\", \"symbols\": [(lexer.has(\"kw_to\") ? {type: \"kw_to\"} : kw_to)], \"postprocess\": first},\n {\"name\": \"fromConnector\", \"symbols\": [(lexer.has(\"kw_from\") ? {type: \"kw_from\"} : kw_from)], \"postprocess\": first},\n {\"name\": \"forConnector\", \"symbols\": [(lexer.has(\"kw_for\") ? {type: \"kw_for\"} : kw_for)], \"postprocess\": first},\n {\"name\": \"inConnector\", \"symbols\": [(lexer.has(\"kw_in\") ? {type: \"kw_in\"} : kw_in)], \"postprocess\": first},\n {\"name\": \"onConnector\", \"symbols\": [(lexer.has(\"kw_on\") ? {type: \"kw_on\"} : kw_on)], \"postprocess\": first},\n {\"name\": \"atConnector\", \"symbols\": [(lexer.has(\"kw_at\") ? {type: \"kw_at\"} : kw_at)], \"postprocess\": first},\n {\"name\": \"ofConnector\", \"symbols\": [(lexer.has(\"kw_of\") ? {type: \"kw_of\"} : kw_of)], \"postprocess\": first},\n {\"name\": \"theConnector\", \"symbols\": [(lexer.has(\"kw_the\") ? {type: \"kw_the\"} : kw_the)], \"postprocess\": first},\n {\"name\": \"andConnector\", \"symbols\": [(lexer.has(\"kw_and\") ? {type: \"kw_and\"} : kw_and)], \"postprocess\": first},\n {\"name\": \"betweenConnector\", \"symbols\": [(lexer.has(\"kw_between\") ? {type: \"kw_between\"} : kw_between)], \"postprocess\": first},\n {\"name\": \"throughConnector\", \"symbols\": [(lexer.has(\"kw_through\") ? {type: \"kw_through\"} : kw_through)], \"postprocess\": first},\n {\"name\": \"untilConnector\", \"symbols\": [(lexer.has(\"kw_until\") ? {type: \"kw_until\"} : kw_until)], \"postprocess\": first},\n {\"name\": \"withinConnector\", \"symbols\": [(lexer.has(\"kw_within\") ? {type: \"kw_within\"} : kw_within)], \"postprocess\": first},\n {\"name\": \"overConnector\", \"symbols\": [(lexer.has(\"kw_over\") ? {type: \"kw_over\"} : kw_over)], \"postprocess\": first},\n {\"name\": \"duringConnector\", \"symbols\": [(lexer.has(\"kw_during\") ? {type: \"kw_during\"} : kw_during)], \"postprocess\": first},\n {\"name\": \"startingConnector\", \"symbols\": [(lexer.has(\"kw_starting\") ? {type: \"kw_starting\"} : kw_starting)], \"postprocess\": first},\n {\"name\": \"byConnector\", \"symbols\": [(lexer.has(\"kw_by\") ? {type: \"kw_by\"} : kw_by)], \"postprocess\": first},\n {\"name\": \"aroundConnector\", \"symbols\": [(lexer.has(\"kw_around\") ? {type: \"kw_around\"} : kw_around)], \"postprocess\": first},\n {\"name\": \"aboutConnector\", \"symbols\": [(lexer.has(\"kw_about\") ? {type: \"kw_about\"} : kw_about)], \"postprocess\": first},\n {\"name\": \"roughlyConnector\", \"symbols\": [(lexer.has(\"kw_roughly\") ? {type: \"kw_roughly\"} : kw_roughly)], \"postprocess\": first},\n {\"name\": \"approximatelyConnector\", \"symbols\": [(lexer.has(\"kw_approximately\") ? {type: \"kw_approximately\"} : kw_approximately)], \"postprocess\": first},\n {\"name\": \"sometimeConnector\", \"symbols\": [(lexer.has(\"kw_sometime\") ? {type: \"kw_sometime\"} : kw_sometime)], \"postprocess\": first},\n {\"name\": \"afterConnector\", \"symbols\": [(lexer.has(\"kw_after\") ? {type: \"kw_after\"} : kw_after)], \"postprocess\": first},\n {\"name\": \"beforeConnector\", \"symbols\": [(lexer.has(\"kw_before\") ? {type: \"kw_before\"} : kw_before)], \"postprocess\": first},\n {\"name\": \"endConnector\", \"symbols\": [(lexer.has(\"kw_end\") ? {type: \"kw_end\"} : kw_end)], \"postprocess\": first},\n {\"name\": \"beginningConnector\", \"symbols\": [(lexer.has(\"kw_beginning\") ? {type: \"kw_beginning\"} : kw_beginning)], \"postprocess\": first},\n {\"name\": \"startConnector\", \"symbols\": [(lexer.has(\"kw_start\") ? {type: \"kw_start\"} : kw_start)], \"postprocess\": first},\n {\"name\": \"middleConnector\", \"symbols\": [(lexer.has(\"kw_middle\") ? {type: \"kw_middle\"} : kw_middle)], \"postprocess\": first},\n {\"name\": \"agoConnector\", \"symbols\": [(lexer.has(\"kw_ago\") ? {type: \"kw_ago\"} : kw_ago)], \"postprocess\": first},\n {\"name\": \"henceConnector\", \"symbols\": [(lexer.has(\"otherKeyword\") ? {type: \"otherKeyword\"} : otherKeyword)], \"postprocess\": (d, _, reject) => d[0].value === 'hence' ? d[0] : reject},\n {\"name\": \"laterConnector\", \"symbols\": [(lexer.has(\"otherKeyword\") ? {type: \"otherKeyword\"} : otherKeyword)], \"postprocess\": (d, _, reject) => d[0].value === 'later' ? d[0] : reject},\n {\"name\": \"earlyModifier\", \"symbols\": [(lexer.has(\"kw_early\") ? {type: \"kw_early\"} : kw_early)], \"postprocess\": first},\n {\"name\": \"midModifier\", \"symbols\": [(lexer.has(\"kw_mid\") ? {type: \"kw_mid\"} : kw_mid)], \"postprocess\": first},\n {\"name\": \"lateModifier\", \"symbols\": [(lexer.has(\"kw_late\") ? {type: \"kw_late\"} : kw_late)], \"postprocess\": first},\n {\"name\": \"nextRelative\", \"symbols\": [(lexer.has(\"kw_next\") ? {type: \"kw_next\"} : kw_next)], \"postprocess\": first},\n {\"name\": \"lastRelative\", \"symbols\": [(lexer.has(\"kw_last\") ? {type: \"kw_last\"} : kw_last)], \"postprocess\": first},\n {\"name\": \"thisRelative\", \"symbols\": [(lexer.has(\"kw_this\") ? {type: \"kw_this\"} : kw_this)], \"postprocess\": first},\n {\"name\": \"previousRelative\", \"symbols\": [(lexer.has(\"kw_previous\") ? {type: \"kw_previous\"} : kw_previous)], \"postprocess\": first},\n {\"name\": \"comingRelative\", \"symbols\": [(lexer.has(\"kw_coming\") ? {type: \"kw_coming\"} : kw_coming)], \"postprocess\": first},\n {\"name\": \"upcomingRelative\", \"symbols\": [(lexer.has(\"kw_upcoming\") ? {type: \"kw_upcoming\"} : kw_upcoming)], \"postprocess\": first},\n {\"name\": \"pastRelative\", \"symbols\": [(lexer.has(\"kw_past\") ? {type: \"kw_past\"} : kw_past)], \"postprocess\": first},\n {\"name\": \"today\", \"symbols\": [(lexer.has(\"kw_today\") ? {type: \"kw_today\"} : kw_today)], \"postprocess\": first},\n {\"name\": \"tomorrow\", \"symbols\": [(lexer.has(\"kw_tomorrow\") ? {type: \"kw_tomorrow\"} : kw_tomorrow)], \"postprocess\": first},\n {\"name\": \"yesterday\", \"symbols\": [(lexer.has(\"kw_yesterday\") ? {type: \"kw_yesterday\"} : kw_yesterday)], \"postprocess\": first},\n {\"name\": \"now\", \"symbols\": [(lexer.has(\"kw_now\") ? {type: \"kw_now\"} : kw_now)], \"postprocess\": first},\n {\"name\": \"noon\", \"symbols\": [(lexer.has(\"kw_noon\") ? {type: \"kw_noon\"} : kw_noon)], \"postprocess\": first},\n {\"name\": \"midnight\", \"symbols\": [(lexer.has(\"kw_midnight\") ? {type: \"kw_midnight\"} : kw_midnight)], \"postprocess\": first},\n {\"name\": \"quarterKeyword\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => d[0].value === 'quarter' ? d[0] : reject},\n {\"name\": \"hourNumber\", \"symbols\": [(lexer.has(\"integer\") ? {type: \"integer\"} : integer)], \"postprocess\": (d, _, reject) => {\n const val = parseInt(d[0].value, 10);\n if (val < 1 || val > 12) return reject;\n return val;\n } },\n {\"name\": \"pastConnector\", \"symbols\": [(lexer.has(\"kw_past\") ? {type: \"kw_past\"} : kw_past)], \"postprocess\": first},\n {\"name\": \"weekendKeyword\", \"symbols\": [(lexer.has(\"kw_weekend\") ? {type: \"kw_weekend\"} : kw_weekend)], \"postprocess\": first},\n {\"name\": \"tonightKeyword\", \"symbols\": [(lexer.has(\"kw_tonight\") ? {type: \"kw_tonight\"} : kw_tonight)], \"postprocess\": first},\n {\"name\": \"nightKeyword\", \"symbols\": [(lexer.has(\"kw_night\") ? {type: \"kw_night\"} : kw_night)], \"postprocess\": first},\n {\"name\": \"fortnightKeyword\", \"symbols\": [(lexer.has(\"kw_fortnight\") ? {type: \"kw_fortnight\"} : kw_fortnight)], \"postprocess\": first},\n {\"name\": \"laterKeyword\", \"symbols\": [(lexer.has(\"otherKeyword\") ? {type: \"otherKeyword\"} : otherKeyword)], \"postprocess\": (d, _, reject) => d[0].value === 'later' ? d[0] : reject},\n {\"name\": \"earlierKeyword\", \"symbols\": [(lexer.has(\"otherKeyword\") ? {type: \"otherKeyword\"} : otherKeyword)], \"postprocess\": (d, _, reject) => d[0].value === 'earlier' ? d[0] : reject},\n {\"name\": \"weekKeyword\", \"symbols\": [(lexer.has(\"unit\") ? {type: \"unit\"} : unit)], \"postprocess\": (d, _, reject) => {\n const val = d[0].value.toLowerCase();\n if (val === 'week' || val === 'weeks') return d[0];\n return reject;\n } },\n {\"name\": \"businessKeyword\", \"symbols\": [(lexer.has(\"kw_business\") ? {type: \"kw_business\"} : kw_business)], \"postprocess\": first},\n {\"name\": \"eodKeyword\", \"symbols\": [(lexer.has(\"kw_eod\") ? {type: \"kw_eod\"} : kw_eod)], \"postprocess\": first},\n {\"name\": \"cobKeyword\", \"symbols\": [(lexer.has(\"kw_cob\") ? {type: \"kw_cob\"} : kw_cob)], \"postprocess\": first},\n {\"name\": \"closeKeyword\", \"symbols\": [(lexer.has(\"kw_close\") ? {type: \"kw_close\"} : kw_close)], \"postprocess\": first},\n {\"name\": \"_$ebnf$1\", \"symbols\": []},\n {\"name\": \"_$ebnf$1\", \"symbols\": [\"_$ebnf$1\", (lexer.has(\"ws\") ? {type: \"ws\"} : ws)], \"postprocess\": (d) => d[0].concat([d[1]])},\n {\"name\": \"_\", \"symbols\": [\"_$ebnf$1\"], \"postprocess\": nuller}\n ],\n ParserStart: \"main\",\n};\n\nexport default grammar;\n","export function getNextWeekday(weekday: number, referenceDate: Date): Date {\n const result = new Date(\n Date.UTC(\n referenceDate.getUTCFullYear(),\n referenceDate.getUTCMonth(),\n referenceDate.getUTCDate()\n )\n );\n const currentDay = result.getUTCDay();\n let daysToAdd = weekday - currentDay;\n if (daysToAdd <= 0) {\n daysToAdd += 7;\n }\n result.setUTCDate(result.getUTCDate() + daysToAdd);\n return result;\n}\n\nexport function getLastWeekday(weekday: number, referenceDate: Date): Date {\n const result = new Date(\n Date.UTC(\n referenceDate.getUTCFullYear(),\n referenceDate.getUTCMonth(),\n referenceDate.getUTCDate()\n )\n );\n const currentDay = result.getUTCDay();\n let daysToSubtract = currentDay - weekday;\n if (daysToSubtract <= 0) {\n daysToSubtract += 7;\n }\n result.setUTCDate(result.getUTCDate() - daysToSubtract);\n return result;\n}\n\nexport function getThisWeekday(\n weekday: number,\n referenceDate: Date,\n weekStartsOn: 'sunday' | 'monday'\n): Date {\n const result = new Date(\n Date.UTC(\n referenceDate.getUTCFullYear(),\n referenceDate.getUTCMonth(),\n referenceDate.getUTCDate()\n )\n );\n const currentDay = result.getUTCDay();\n const weekStart = weekStartsOn === 'monday' ? 1 : 0;\n\n let daysSinceWeekStart = currentDay - weekStart;\n if (daysSinceWeekStart < 0) {\n daysSinceWeekStart += 7;\n }\n\n let daysToTarget = weekday - weekStart;\n if (daysToTarget < 0) {\n daysToTarget += 7;\n }\n\n const daysToMove = daysToTarget - daysSinceWeekStart;\n result.setUTCDate(result.getUTCDate() + daysToMove);\n return result;\n}\n","export const MS_PER_SECOND = 1000;\nexport const MS_PER_MINUTE = 60 * MS_PER_SECOND;\nexport const MS_PER_HOUR = 60 * MS_PER_MINUTE;\nexport const MS_PER_DAY = 24 * MS_PER_HOUR;\nexport const MS_PER_WEEK = 7 * MS_PER_DAY;\nexport const MS_PER_MONTH = 30 * MS_PER_DAY;\nexport const MS_PER_YEAR = 365 * MS_PER_DAY;\n\nexport const WEEKDAY_MAP: Record<string, number> = {\n sunday: 0,\n sun: 0,\n monday: 1,\n mon: 1,\n tuesday: 2,\n tue: 2,\n tues: 2,\n wednesday: 3,\n wed: 3,\n thursday: 4,\n thu: 4,\n thur: 4,\n thurs: 4,\n friday: 5,\n fri: 5,\n saturday: 6,\n sat: 6,\n};\n\nexport const FISCAL_START_MONTH: Record<string, number> = {\n january: 0,\n april: 3,\n july: 6,\n october: 9,\n};\n","import {\n getNextWeekday,\n getLastWeekday,\n getThisWeekday,\n} from '../utils/weekday';\nimport { WEEKDAY_MAP } from '../utils/constants';\nimport type { ASTNode, RequiredParseOptions } from '../parser';\n\ninterface TimeInfo {\n hour?: number;\n minute?: number;\n special?: string;\n}\n\nfunction applyTime(date: Date, time: TimeInfo): void {\n if (time.special === 'noon') {\n date.setUTCHours(12, 0, 0, 0);\n } else if (time.special === 'midnight') {\n date.setUTCHours(0, 0, 0, 0);\n } else if (time.hour !== undefined) {\n date.setUTCHours(time.hour, time.minute ?? 0, 0, 0);\n }\n}\n\nfunction convertSpecialDay(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n let date: Date;\n\n switch (node.special) {\n case 'today':\n date = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())\n );\n break;\n case 'tomorrow':\n date = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() + 1)\n );\n break;\n case 'yesterday':\n date = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() - 1)\n );\n break;\n case 'now':\n date = new Date(ref);\n break;\n case 'dayAfterTomorrow':\n date = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() + 2)\n );\n break;\n case 'dayBeforeYesterday':\n date = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() - 2)\n );\n break;\n default:\n date = new Date(ref);\n }\n\n if (node.time) {\n applyTime(date, node.time as TimeInfo);\n }\n\n return date;\n}\n\nfunction convertTimeOnly(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n const date = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())\n );\n\n if (node.time) {\n applyTime(date, node.time as TimeInfo);\n }\n\n return date;\n}\n\nfunction convertWeekday(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n const weekdayNum = WEEKDAY_MAP[(node.weekday as string).toLowerCase()] ?? 0;\n let date: Date;\n\n if (node.period && (node.period as string).toLowerCase() === 'week') {\n let weekRef: Date;\n switch (node.relative) {\n case 'next':\n weekRef = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() + 7)\n );\n break;\n case 'last':\n weekRef = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate() - 7)\n );\n break;\n default:\n weekRef = ref;\n }\n date = getThisWeekday(weekdayNum, weekRef, opts.weekStartsOn);\n } else {\n switch (node.relative) {\n case 'next':\n date = getNextWeekday(weekdayNum, ref);\n break;\n case 'last':\n date = getLastWeekday(weekdayNum, ref);\n break;\n case 'this':\n date = getThisWeekday(weekdayNum, ref, opts.weekStartsOn);\n break;\n default:\n date = getNextWeekday(weekdayNum, ref);\n }\n }\n\n if (node.time) {\n applyTime(date, node.time as TimeInfo);\n }\n\n return date;\n}\n\nfunction convertDateFormat(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n const parts = node.formatParts as number[];\n\n if (\n parts.length < 3 ||\n parts[0] === undefined ||\n parts[1] === undefined ||\n parts[2] === undefined\n ) {\n return ref;\n }\n\n const [p0, p1, p2] = parts;\n let year: number, month: number, day: number;\n\n if (p2 > 1000) {\n if (opts.dateFormat === 'intl') {\n day = p0;\n month = p1;\n year = p2;\n } else {\n if (p0 > 12 && p1 <= 12) {\n day = p0;\n month = p1;\n year = p2;\n } else {\n month = p0;\n day = p1;\n year = p2;\n }\n }\n } else {\n month = p0;\n day = p1;\n year = p2 < 100 ? (p2 > 50 ? 1900 + p2 : 2000 + p2) : p2;\n }\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n\nfunction convertMonthDay(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n let year = (node.year as number) ?? ref.getUTCFullYear();\n const month = typeof node.month === 'number' ? node.month - 1 : 0;\n\n if (node.relativeMonth) {\n const currentMonth = ref.getUTCMonth();\n if (node.relativeMonth === 'last') {\n if (month >= currentMonth) {\n year--;\n }\n } else if (node.relativeMonth === 'next') {\n if (month <= currentMonth) {\n year++;\n }\n }\n } else if (node.year === undefined && month < ref.getUTCMonth()) {\n year++;\n }\n\n const date = new Date(Date.UTC(year, month, node.day as number));\n\n if (date.getUTCMonth() !== month || date.getUTCDate() !== node.day) {\n throw new Error('Invalid date');\n }\n\n if (node.time) {\n applyTime(date, node.time as TimeInfo);\n }\n\n return date;\n}\n\nfunction convertOrdinalWeekdayOfMonth(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n const ordinal = node.ordinalWeekday as number;\n const weekdayName = (node.weekday as string).toLowerCase();\n const weekdayNum = WEEKDAY_MAP[weekdayName] ?? 0;\n\n let month: number;\n let year: number;\n\n if (node.monthFromRef) {\n month = ref.getUTCMonth();\n year = ref.getUTCFullYear();\n } else if (node.nextMonth) {\n month = ref.getUTCMonth() + 1;\n year = ref.getUTCFullYear();\n if (month > 11) {\n month = 0;\n year++;\n }\n } else {\n month = typeof node.month === 'number' ? node.month - 1 : ref.getUTCMonth();\n year = ref.getUTCFullYear();\n // If month is before current month, assume next year\n if (month < ref.getUTCMonth()) {\n year++;\n }\n }\n\n if (ordinal === -1) {\n // Last weekday of month\n const lastDay = new Date(Date.UTC(year, month + 1, 0));\n let day = lastDay.getUTCDate();\n let date = new Date(Date.UTC(year, month, day));\n while (date.getUTCDay() !== weekdayNum) {\n day--;\n date = new Date(Date.UTC(year, month, day));\n }\n return date;\n }\n\n // Find the Nth weekday of the month\n let count = 0;\n for (let day = 1; day <= 31; day++) {\n const date = new Date(Date.UTC(year, month, day));\n if (date.getUTCMonth() !== month) {\n break;\n }\n if (date.getUTCDay() === weekdayNum) {\n count++;\n if (count === ordinal) {\n return date;\n }\n }\n }\n\n // If ordinal too high, return last occurrence\n const lastDay = new Date(Date.UTC(year, month + 1, 0));\n let day = lastDay.getUTCDate();\n let date = new Date(Date.UTC(year, month, day));\n while (date.getUTCDay() !== weekdayNum) {\n day--;\n date = new Date(Date.UTC(year, month, day));\n }\n return date;\n}\n\nfunction convertLastDayOfMonth(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n\n let month: number;\n let year: number;\n\n if (node.monthFromRef) {\n month = ref.getUTCMonth();\n year = ref.getUTCFullYear();\n } else if (node.nextMonth) {\n month = ref.getUTCMonth() + 1;\n year = ref.getUTCFullYear();\n if (month > 11) {\n month = 0;\n year++;\n }\n } else {\n month = typeof node.month === 'number' ? node.month - 1 : ref.getUTCMonth();\n year = ref.getUTCFullYear();\n if (month < ref.getUTCMonth()) {\n year++;\n }\n }\n\n // Last day of month\n return new Date(Date.UTC(year, month + 1, 0));\n}\n\nfunction convertDayOnly(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n const day = node.day as number;\n const refDay = ref.getUTCDate();\n const refMonth = ref.getUTCMonth();\n const refYear = ref.getUTCFullYear();\n\n // Check if the day is valid for this month\n let month = refMonth;\n let year = refYear;\n\n // If the day has passed this month, use next month\n if (day < refDay) {\n month = refMonth + 1;\n if (month > 11) {\n month = 0;\n year++;\n }\n }\n\n // Create the date and check if it's valid for the target month\n let date = new Date(Date.UTC(year, month, day));\n\n // If the day overflowed (e.g., Feb 31 -> Mar 3), find the next valid month\n while (date.getUTCDate() !== day) {\n month++;\n if (month > 11) {\n month = 0;\n year++;\n }\n date = new Date(Date.UTC(year, month, day));\n }\n\n if (node.time) {\n applyTime(date, node.time as TimeInfo);\n }\n\n return date;\n}\n\nfunction convertRelativePeriod(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n const ref = opts.referenceDate;\n const period = (node.period as string).toLowerCase();\n\n switch (period) {\n case 'day': {\n const start = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())\n );\n if (node.relative === 'next') {\n start.setUTCDate(start.getUTCDate() + 1);\n } else if (node.relative === 'last') {\n start.setUTCDate(start.getUTCDate() - 1);\n }\n return start;\n }\n\n case 'week': {\n const start = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())\n );\n const weekStart = opts.weekStartsOn === 'monday' ? 1 : 0;\n const currentDay = start.getUTCDay();\n const daysFromStart = (currentDay - weekStart + 7) % 7;\n start.setUTCDate(start.getUTCDate() - daysFromStart);\n if (node.relative === 'next') {\n start.setUTCDate(start.getUTCDate() + 7);\n } else if (node.relative === 'last') {\n start.setUTCDate(start.getUTCDate() - 7);\n }\n return start;\n }\n\n case 'month':\n if (node.relative === 'next') {\n return new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth() + 1, 1)\n );\n } else if (node.relative === 'last') {\n return new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth() - 1, 1)\n );\n }\n return new Date(Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), 1));\n\n case 'year':\n if (node.relative === 'next') {\n return new Date(Date.UTC(ref.getUTCFullYear() + 1, 0, 1));\n } else if (node.relative === 'last') {\n return new Date(Date.UTC(ref.getUTCFullYear() - 1, 0, 1));\n }\n return new Date(Date.UTC(ref.getUTCFullYear(), 0, 1));\n\n default:\n return new Date(ref);\n }\n}\n\nexport function convertDateNode(\n node: ASTNode,\n opts: RequiredParseOptions\n): Date {\n if (node.special) {\n return convertSpecialDay(node, opts);\n }\n\n if (node.timeOnly && node.time) {\n return convertTimeOnly(node, opts);\n }\n\n // ordinalWeekday check must come before weekday check\n if (node.ordinalWeekday !== undefined && node.weekday !== undefined) {\n return convertOrdinalWeekdayOfMonth(node, opts);\n }\n\n if (node.weekday) {\n return convertWeekday(node, opts);\n }\n\n if (node.formatParts) {\n return convertDateFormat(node, opts);\n }\n\n if (node.month !== undefined && node.day !== undefined) {\n return convertMonthDay(node, opts);\n }\n\n if (node.dayOnly && node.day !== undefined) {\n return convertDayOnly(node, opts);\n }\n\n if (node.lastDayOfMonth) {\n return convertLastDayOfMonth(node, opts);\n }\n\n if (node.dayOfMonth && node.nextMonth) {\n // \"first day of next month\"\n const ref = opts.referenceDate;\n let month = ref.getUTCMonth() + 1;\n let year = ref.getUTCFullYear();\n if (month > 11) {\n month = 0;\n year++;\n }\n const day = node.ordinalWeekday as number || 1;\n return new Date(Date.UTC(year, month, day));\n }\n\n if (node.relative && node.period) {\n return convertRelativePeriod(node, opts);\n }\n\n return new Date(opts.referenceDate);\n}\n","import {\n MS_PER_SECOND,\n MS_PER_MINUTE,\n MS_PER_HOUR,\n MS_PER_DAY,\n MS_PER_WEEK,\n MS_PER_MONTH,\n MS_PER_YEAR,\n} from '../utils/constants';\nimport type { ASTNode } from '../parser';\n\nfunction durationToMs(value: number, unit: string): number {\n switch (unit) {\n case 'second':\n return value * MS_PER_SECOND;\n case 'minute':\n return value * MS_PER_MINUTE;\n case 'hour':\n return value * MS_PER_HOUR;\n case 'day':\n return value * MS_PER_DAY;\n case 'week':\n return value * MS_PER_WEEK;\n case 'month':\n return value * MS_PER_MONTH;\n case 'year':\n return value * MS_PER_YEAR;\n default:\n return 0;\n }\n}\n\nexport function convertDurationNode(\n node: ASTNode,\n parentHasHours = false\n): number {\n if (node.combined && Array.isArray(node.combined)) {\n const hasHours = node.combined.some(\n (d: ASTNode) => d.unit === 'hour'\n );\n return node.combined.reduce(\n (total: number, d: ASTNode) =>\n total + convertDurationNode(d, hasHours),\n 0\n );\n }\n\n let unit = node.unit as string;\n if (parentHasHours && unit === 'month') {\n unit = 'minute';\n }\n\n return durationToMs(node.value as number, unit);\n}\n","import { FISCAL_START_MONTH } from './constants';\n\nexport interface DateRange {\n start: Date;\n end: Date;\n}\n\nexport function getQuarterDates(\n quarter: number,\n year: number,\n fiscalYearStart: string\n): DateRange {\n const fiscalStartMonth = FISCAL_START_MONTH[fiscalYearStart] ?? 0;\n const quarterStartMonth = (fiscalStartMonth + (quarter - 1) * 3) % 12;\n\n let startYear = year;\n if (quarterStartMonth < fiscalStartMonth) {\n startYear++;\n }\n\n const start = new Date(Date.UTC(startYear, quarterStartMonth, 1));\n const endMonth = (quarterStartMonth + 3) % 12;\n\n let endYear = startYear;\n if (endMonth < quarterStartMonth) {\n endYear++;\n }\n\n const end = new Date(Date.UTC(endYear, endMonth, 0));\n\n return { start, end };\n}\n\nexport function getHalfDates(\n half: number,\n year: number,\n fiscalYearStart: string\n): DateRange {\n const fiscalStartMonth = FISCAL_START_MONTH[fiscalYearStart] ?? 0;\n const halfStartMonth = (fiscalStartMonth + (half - 1) * 6) % 12;\n\n let startYear = year;\n if (halfStartMonth < fiscalStartMonth) {\n startYear++;\n }\n\n const start = new Date(Date.UTC(startYear, halfStartMonth, 1));\n const endMonth = (halfStartMonth + 6) % 12;\n\n let endYear = startYear;\n if (endMonth <= halfStartMonth) {\n endYear++;\n }\n\n const end = new Date(Date.UTC(endYear, endMonth, 0));\n\n return { start, end };\n}\n\nexport function getSeasonDates(season: string, year: number): DateRange {\n switch (season) {\n case 'spring':\n return {\n start: new Date(Date.UTC(year, 2, 20)),\n end: new Date(Date.UTC(year, 5, 20)),\n };\n case 'summer':\n return {\n start: new Date(Date.UTC(year, 5, 21)),\n end: new Date(Date.UTC(year, 8, 22)),\n };\n case 'fall':\n case 'autumn':\n return {\n start: new Date(Date.UTC(year, 8, 23)),\n end: new Date(Date.UTC(year, 11, 20)),\n };\n case 'winter':\n return {\n start: new Date(Date.UTC(year, 11, 21)),\n end: new Date(Date.UTC(year + 1, 2, 19)),\n };\n default:\n return {\n start: new Date(Date.UTC(year, 0, 1)),\n end: new Date(Date.UTC(year, 11, 31)),\n };\n }\n}\n\nexport function getModifiedPeriod(\n start: Date,\n end: Date,\n modifier: string\n): DateRange {\n const duration = end.getTime() - start.getTime();\n const third = duration / 3;\n const half = duration / 2;\n\n switch (modifier) {\n case 'early':\n return {\n start,\n end: new Date(start.getTime() + third),\n };\n case 'mid':\n case 'middle':\n return {\n start: new Date(start.getTime() + third),\n end: new Date(start.getTime() + 2 * third),\n };\n case 'late':\n return {\n start: new Date(start.getTime() + 2 * third),\n end,\n };\n case 'first':\n return {\n start,\n end: new Date(start.getTime() + half),\n };\n case 'second':\n return {\n start: new Date(start.getTime() + half),\n end,\n };\n default:\n return { start, end };\n }\n}\n","import { MS_PER_DAY, MS_PER_WEEK, WEEKDAY_MAP } from '../utils/constants';\nimport {\n getQuarterDates,\n getHalfDates,\n getSeasonDates,\n getModifiedPeriod,\n type DateRange,\n} from '../utils/calendar';\nimport type { ASTNode, RequiredParseOptions } from '../parser';\n\nfunction getWeekendDates(ref: Date, relative: string, opts: RequiredParseOptions): DateRange {\n const currentDay = ref.getUTCDay();\n\n // Calculate offset to this coming Saturday\n const saturdayOffset = (6 - currentDay + 7) % 7;\n let saturday = new Date(\n Date.UTC(\n ref.getUTCFullYear(),\n ref.getUTCMonth(),\n ref.getUTCDate() + saturdayOffset\n )\n );\n\n if (relative === 'next') {\n // \"next weekend\" means the weekend after this weekend\n saturday = new Date(saturday.getTime() + MS_PER_WEEK);\n } else if (relative === 'last') {\n // \"last weekend\" means the most recent past weekend\n if (currentDay === 6 || currentDay === 0) {\n // Currently on weekend, go back one more week\n saturday = new Date(saturday.getTime() - MS_PER_WEEK);\n }\n saturday = new Date(saturday.getTime() - MS_PER_WEEK);\n }\n\n const sunday = new Date(saturday.getTime() + MS_PER_DAY);\n const sundayEnd = new Date(\n Date.UTC(\n sunday.getUTCFullYear(),\n sunday.getUTCMonth(),\n sunday.getUTCDate(),\n 23,\n 59\n )\n );\n\n return { start: saturday, end: sundayEnd };\n}\n\nfunction getNightDates(ref: Date, relative: string | undefined, weekday: string | undefined): DateRange {\n let baseDate = new Date(ref);\n\n if (relative === 'last') {\n baseDate = new Date(\n Date.UTC(\n ref.getUTCFullYear(),\n ref.getUTCMonth(),\n ref.getUTCDate() - 1\n )\n );\n } else if (relative === 'tomorrow') {\n baseDate = new Date(\n Date.UTC(\n ref.getUTCFullYear(),\n ref.getUTCMonth(),\n ref.getUTCDate() + 1\n )\n );\n } else if (weekday) {\n const targetDay = WEEKDAY_MAP[weekday.toLowerCase()];\n if (targetDay !== undefined) {\n const currentDay = ref.getUTCDay();\n let daysToAdd = (targetDay - currentDay + 7) % 7;\n if (daysToAdd === 0) {\n daysToAdd = 7;\n }\n baseDate = new Date(\n Date.UTC(\n ref.getUTCFullYear(),\n ref.getUTCMonth(),\n ref.getUTCDate() + daysToAdd\n )\n );\n }\n }\n\n const start = new Date(\n Date.UTC(\n baseDate.getUTCFullYear(),\n baseDate.getUTCMonth(),\n baseDate.getUTCDate(),\n 18,\n 0\n )\n );\n const end = new Date(\n Date.UTC(\n baseDate.getUTCFullYear(),\n baseDate.getUTCMonth(),\n baseDate.getUTCDate(),\n 23,\n 59\n )\n );\n\n return { start, end };\n}\n\nfunction getBasePeriodDates(\n node: ASTNode,\n opts: RequiredParseOptions,\n year: number\n): DateRange {\n const ref = opts.referenceDate;\n\n if (node.period === 'weekend') {\n return getWeekendDates(ref, node.relative as string || 'this', opts);\n }\n\n if (node.period === 'tonight') {\n return getNightDates(ref, undefined, undefined);\n }\n\n if (node.period === 'night') {\n return getNightDates(ref, node.relative as string, node.weekday as string);\n }\n\n if (node.period === 'fortnight') {\n const count = (node.count as number) || 1;\n const relative = node.relative as string;\n const twoWeeks = 14 * MS_PER_DAY;\n\n if (relative === 'last') {\n const end = new Date(ref);\n const start = new Date(ref.getTime() - twoWeeks);\n return { start, end };\n }\n // Default to next/future\n const start = new Date(ref);\n const end = new Date(ref.getTime() + count * twoWeeks);\n return { start, end };\n }\n\n if (node.period === 'quarter' && node.quarter) {\n return getQuarterDates(\n node.quarter as number,\n year,\n opts.fiscalYearStart\n );\n }\n\n if (node.period === 'half' && node.half) {\n return getHalfDates(node.half as number, year, opts.fiscalYearStart);\n }\n\n if (node.period === 'season' && node.season) {\n return getSeasonDates(node.season as string, year);\n }\n\n if (node.period === 'month' && node.month !== undefined) {\n const month = typeof node.month === 'number' ? node.month - 1 : 0;\n const start = new Date(Date.UTC(year, month, 1));\n const end = new Date(Date.UTC(year, month + 1, 0));\n return { start, end };\n }\n\n if (node.period === 'month') {\n const month = ref.getUTCMonth();\n const start = new Date(Date.UTC(year, month, 1));\n const end = new Date(Date.UTC(year, month + 1, 0));\n return { start, end };\n }\n\n if (node.period === 'week') {\n const weekStart = opts.weekStartsOn === 'monday' ? 1 : 0;\n const currentDay = ref.getUTCDay();\n const daysFromStart = (currentDay - weekStart + 7) % 7;\n const start = new Date(\n Date.UTC(\n ref.getUTCFullYear(),\n ref.getUTCMonth(),\n ref.getUTCDate() - daysFromStart\n )\n );\n const end = new Date(start.getTime() + 6 * MS_PER_DAY);\n return { start, end };\n }\n\n if (node.period === 'weekNumber' && node.weekNumber !== undefined) {\n const weekNum = node.weekNumber as number;\n const targetYear = (node.year as number) ?? ref.getUTCFullYear();\n const weekStart = opts.weekStartsOn === 'monday' ? 1 : 0;\n\n // Week 1 starts on the first week containing a Thursday (ISO) or first of year\n const jan1 = new Date(Date.UTC(targetYear, 0, 1));\n const jan1Day = jan1.getUTCDay();\n const daysToFirstWeekStart = (weekStart - jan1Day + 7) % 7;\n const firstWeekStart = new Date(jan1.getTime() + daysToFirstWeekStart * MS_PER_DAY);\n\n const start = new Date(firstWeekStart.getTime() + (weekNum - 1) * MS_PER_WEEK);\n const end = new Date(start.getTime() + 6 * MS_PER_DAY);\n return { start, end };\n }\n\n if (node.period === 'weekOf' && node.baseDate) {\n const baseDate = node.baseDate as ASTNode;\n let targetDate: Date;\n\n if (baseDate.month !== undefined && baseDate.day !== undefined) {\n const month = typeof baseDate.month === 'number' ? baseDate.month - 1 : 0;\n const day = baseDate.day as number;\n const targetYear = (baseDate.year as number) ?? ref.getUTCFullYear();\n targetDate = new Date(Date.UTC(targetYear, month, day));\n } else {\n targetDate = ref;\n }\n\n const weekStart = opts.weekStartsOn === 'monday' ? 1 : 0;\n const currentDay = targetDate.getUTCDay();\n const daysFromStart = (currentDay - weekStart + 7) % 7;\n const start = new Date(\n Date.UTC(\n targetDate.getUTCFullYear(),\n targetDate.getUTCMonth(),\n targetDate.getUTCDate() - daysFromStart\n )\n );\n const end = new Date(start.getTime() + 6 * MS_PER_DAY);\n return { start, end };\n }\n\n if (node.period === 'day') {\n const start = new Date(\n Date.UTC(ref.getUTCFullYear(), ref.getUTCMonth(), ref.getUTCDate())\n );\n const end = new Date(\n Date.UTC(\n ref.getUTCFullYear(),\n ref.getUTCMonth(),\n ref.getUTCDate(),\n 23,\n 59,\n 59,\n 999\n )\n );\n return { start, end };\n }\n\n if (node.period === 'year') {\n const start = new Date(Date.UTC(year, 0, 1));\n const end = new Date(Date.UTC(year, 11, 31));\n return { start, end };\n }\n\n return {\n start: new Date(Date.UTC(year, 0, 1)),\n end: new Date(Date.UTC(year, 11, 31)),\n };\n}\n\nexport function convertFuzzyNodeWithoutModifier(\n node: ASTNode,\n opts: RequiredParseOptions\n): DateRange {\n const ref = opts.referenceDate;\n const year = (node.year as number) ?? ref.getUTCFullYear();\n return getBasePeriodDates(node, opts, year);\n}\n\nexport function convertFuzzyNode(\n node: ASTNode,\n opts: RequiredParseOptions\n): DateRange {\n const ref = opts.referenceDate;\n let year = (node.year as number) ?? ref.getUTCFullYear();\n\n if (node.period === 'quarter' && node.quarter && node.year === undefined) {\n const { end: qEnd } = getQuarterDates(\n node.quarter as number,\n year,\n opts.fiscalYearStart\n );\n if (qEnd < ref) {\n year++;\n }\n }\n\n const { start, end } = getBasePeriodDates(node, opts, year);\n\n if (node.modifier) {\n return getModifiedPeriod(start, end, node.modifier as string);\n }\n\n return { start, end };\n}\n","import { parseInternal, extractInternal } from './parser';\n\nexport interface DateResult {\n type: 'date';\n date: Date;\n title: string | null;\n}\n\nexport interface DurationResult {\n type: 'duration';\n duration: number;\n title: string | null;\n}\n\nexport interface SpanResult {\n type: 'span';\n start: Date;\n end: Date;\n duration: number;\n title: string | null;\n}\n\nexport interface FuzzyResult {\n type: 'fuzzy';\n start: Date;\n end: Date;\n approximate: true;\n title: string | null;\n}\n\nexport type ParseResult = DateResult | DurationResult | SpanResult | FuzzyResult | null;\n\nexport interface ParseOptions {\n referenceDate?: Date;\n fiscalYearStart?: 'january' | 'april' | 'july' | 'october';\n weekStartsOn?: 'sunday' | 'monday';\n dateFormat?: 'us' | 'intl' | 'auto';\n}\n\nexport function parse(input: string, options?: ParseOptions): ParseResult | null {\n return parseInternal(input, options);\n}\n\nexport function parseDate(input: string, options?: ParseOptions): Date | null {\n const result = parse(input, options);\n if (!result) {\n return null;\n }\n\n if (result.type === 'date') {\n return result.date;\n }\n\n if (result.type === 'duration') {\n const ref = options?.referenceDate ?? new Date();\n return new Date(ref.getTime() + result.duration);\n }\n\n if (result.type === 'fuzzy') {\n return result.start;\n }\n\n return null;\n}\n\nexport function parseDuration(input: string, options?: ParseOptions): number | null {\n const result = parse(input, options);\n if (result && result.type === 'duration') {\n return result.duration;\n }\n return null;\n}\n\nexport function parseSpan(\n input: string,\n options?: ParseOptions\n): { start: Date; end: Date; duration: number } | null {\n const result = parse(input, options);\n if (result && (result.type === 'span' || result.type === 'fuzzy')) {\n return {\n start: result.start,\n end: result.end,\n duration:\n result.type === 'span'\n ? result.duration\n : result.end.getTime() - result.start.getTime(),\n };\n }\n return null;\n}\n\nexport function extract(input: string, options?: ParseOptions): ParseResult[] {\n return extractInternal(input, options);\n}\n"],"mappings":"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","names":["unit","time","word","month","word","weekday","time","month","ordinal","lastDay","day","date","unit","quarter","half","season","weekday","end","start","month","month"]}