{
  "version": 3,
  "sources": ["../src/index.js", "../src/config/default-options.js", "../src/config/options.js", "../src/normalizer.js", "../src/locales/registry.js", "../src/locales/en.js", "../src/locales/index.js", "../src/tokenizer.js", "../src/classifier.js", "../src/utils/date-utils.js", "../src/utils/result-utils.js", "../src/parsers/exact.js", "../src/parsers/partial.js", "../src/parsers/range.js", "../src/formatter.js"],
  "sourcesContent": ["import { resolveOptions, mergeOptions } from './config/options.js';\nimport { normalizeInput } from './normalizer.js';\nimport { tokenizeInput } from './tokenizer.js';\nimport { ensureLocale, registerLocale, listLocales, englishLocale, getLocale } from './locales/index.js';\nimport { classifyTokens } from './classifier.js';\nimport { parseExact } from './parsers/exact.js';\nimport { parsePartial } from './parsers/partial.js';\nimport { parseRange } from './parsers/range.js';\nimport { mergeIssues, toIsoString, resolveAmbiguity } from './utils/result-utils.js';\nimport { applyFormatting, formatResult, formatValueForOptions } from './formatter.js';\n\nconst defaultParser = createDateParser();\n\nexport function createDateParser(defaultOptions) {\n  const baseOptions = resolveOptions(defaultOptions);\n  // ensure locale is registered\n  const baseLocale = ensureLocale(baseOptions.locale, baseOptions.fallbackLocales);\n\n  function parse(input, overrides) {\n    const options = overrides\n      ? mergeOptions(baseOptions, overrides)\n      : baseOptions;\n    const locale = options === baseOptions\n      ? baseLocale\n      : ensureLocale(options.locale, options.fallbackLocales);\n\n  const normalization = normalizeInput(input);\n  const tokenization = tokenizeInput(normalization.normalized, options, normalization, locale);\n    const classification = classifyTokens(tokenization.tokens, options);\n\n    if (tokenization.normalization.isEmpty) {\n      const result = {\n        kind: 'invalid',\n        original: normalization.original,\n        normalized: normalization.normalized,\n        precision: 'unknown',\n        sortable: false,\n        value: null,\n        tokens: tokenization.tokens,\n        classification,\n        issues: ['input-empty']\n      };\n      applyFormatting(result, options, locale);\n      return result;\n    }\n\n    if (classification.kind === 'exact') {\n      const exactResult = parseExact(tokenization.tokens, normalization, options, classification);\n      if (exactResult.candidates.length === 0) {\n        const result = {\n          kind: 'invalid',\n          original: normalization.original,\n          normalized: normalization.normalized,\n          precision: 'unknown',\n          sortable: false,\n          value: null,\n          tokens: tokenization.tokens,\n          classification,\n          issues: mergeIssues(tokenization.issues, exactResult.issues, ['parser-not-implemented'])\n        };\n        applyFormatting(result, options, locale);\n        return result;\n      }\n\n      const resolution = resolveAmbiguity(exactResult.candidates, options, {\n        localeOrders: locale?.dayMonthOrder\n      });\n\n      if (resolution.type === 'ambiguous') {\n        const result = {\n          kind: 'ambiguous',\n          original: normalization.original,\n          normalized: null,\n          precision: 'day',\n          sortable: false,\n          value: null,\n          tokens: tokenization.tokens,\n          classification,\n          candidates: resolution.candidates.map((candidate) => ({\n            year: candidate.year,\n            month: candidate.month,\n            day: candidate.day,\n            normalized: candidate.normalized ?? toIsoString(candidate.year, candidate.month, candidate.day),\n            sortKey: candidate.sortKey,\n            issues: candidate.issues || [],\n            meta: candidate.meta || {}\n          })),\n          issues: mergeIssues(tokenization.issues, resolution.issues)\n        };\n        applyFormatting(result, options, locale);\n        return result;\n      }\n\n      if (resolution.type === 'single' && resolution.candidate) {\n        const candidate = resolution.candidate;\n        const alternatives = resolution.alternateCandidates || null;\n        const result = {\n          kind: 'exact',\n          original: normalization.original,\n          normalized: candidate.normalized ?? toIsoString(candidate.year, candidate.month, candidate.day),\n          precision: 'day',\n          sortable: candidate.sortKey != null,\n          sortKey: candidate.sortKey ?? null,\n          value: {\n            year: candidate.year,\n            month: candidate.month,\n            day: candidate.day\n          },\n          tokens: tokenization.tokens,\n          classification,\n          issues: mergeIssues(tokenization.issues, resolution.issues),\n          alternatives: alternatives && alternatives.length > 1 ? alternatives : undefined\n        };\n        applyFormatting(result, options, locale);\n        return result;\n      }\n    }\n\n    if (classification.kind === 'partial') {\n      const partialResult = parsePartial(tokenization.tokens, normalization, options, classification);\n      if (!partialResult.success) {\n        const result = {\n          kind: 'invalid',\n          original: normalization.original,\n          normalized: normalization.normalized,\n          precision: 'unknown',\n          sortable: false,\n          value: null,\n          tokens: tokenization.tokens,\n          classification,\n          issues: mergeIssues(tokenization.issues, partialResult.issues, ['parser-not-implemented'])\n        };\n        applyFormatting(result, options, locale);\n        return result;\n      }\n\n      const result = {\n        kind: 'partial',\n        original: normalization.original,\n        normalized: partialResult.normalized,\n        precision: partialResult.precision,\n        qualifiers: partialResult.qualifiers,\n        sortable: partialResult.sortKey != null,\n        sortKey: partialResult.sortKey ?? null,\n        value: partialResult.value,\n        tokens: tokenization.tokens,\n        classification,\n        issues: mergeIssues(tokenization.issues, partialResult.issues)\n      };\n      applyFormatting(result, options, locale);\n      return result;\n    }\n\n    if (classification.kind === 'range') {\n      const rangeResult = parseRange(tokenization.tokens, normalization, options, classification, {\n        locale\n      });\n      if (!rangeResult.success) {\n        const result = {\n          kind: 'invalid',\n          original: normalization.original,\n          normalized: normalization.normalized,\n          precision: 'unknown',\n          sortable: false,\n          value: null,\n          tokens: tokenization.tokens,\n          classification,\n          issues: mergeIssues(tokenization.issues, rangeResult.issues || ['parser-not-implemented'])\n        };\n        applyFormatting(result, options, locale);\n        return result;\n      }\n\n      const result = {\n        kind: 'range',\n        original: normalization.original,\n        normalized: rangeResult.normalized ?? normalization.normalized,\n        precision: 'range',\n        sortable: rangeResult.sortKey != null,\n        sortKey: rangeResult.sortKey ?? null,\n        value: rangeResult.value,\n        tokens: tokenization.tokens,\n        classification,\n        issues: mergeIssues(tokenization.issues, rangeResult.issues)\n      };\n\n      const hasCandidates = rangeResult.candidates && (rangeResult.candidates.start || rangeResult.candidates.end);\n      if (hasCandidates) {\n        result.candidates = rangeResult.candidates;\n        result.issues = mergeIssues(result.issues, ['range-bound-ambiguous']);\n      }\n\n      applyFormatting(result, options, locale);\n      return result;\n    }\n\n    const result = {\n      kind: classification.kind,\n      original: normalization.original,\n      normalized: normalization.normalized,\n      precision: classification.precisionHint || 'unknown',\n      sortable: false,\n      value: null,\n      tokens: tokenization.tokens,\n      classification,\n      issues: tokenization.issues.concat('parser-not-implemented')\n    };\n    applyFormatting(result, options, locale);\n    return result;\n  }\n\n  return {\n    parse,\n    options: () => baseOptions\n  };\n}\n\nexport function parseDate(input, overrides) {\n  return defaultParser.parse(input, overrides);\n}\n\nexport { normalizeInput };\nexport { tokenizeInput };\nexport { classifyTokens };\nexport { parseExact };\nexport { parsePartial };\nexport { parseRange };\nexport { registerLocale, listLocales, englishLocale, ensureLocale, getLocale };\nexport { applyFormatting, formatResult, formatValueForOptions } from './formatter.js';\n\nexport default {\n  parseDate,\n  createDateParser,\n  normalizeInput,\n  tokenizeInput,\n  classifyTokens,\n  parseExact,\n  parsePartial,\n  parseRange,\n  registerLocale,\n  listLocales,\n  ensureLocale,\n  getLocale,\n  applyFormatting,\n  formatResult,\n  formatValueForOptions\n};\n", "export const DEFAULT_OPTIONS = {\n  locale: 'en',\n  fallbackLocales: ['en'],\n  normalizedFormat: {\n    style: 'iso',\n    formatter: null,\n    options: {\n      dayFirst: false,\n      monthName: 'short',\n      includeQualifiers: true\n    }\n  },\n  ambiguity: {\n    strategy: 'all',\n    preferredOrders: ['DMY', 'MDY'],\n    preferLocaleOrder: true\n  },\n  partial: {\n    inferMissingDay: false,\n    inferMissingMonth: false,\n    allowTwoDigitYears: false\n  },\n  ranges: {\n    openRangeStrategy: 'allow',\n    defaultInclusivity: { start: true, end: true }\n  },\n  issues: {\n    suppress: [],\n    escalate: []\n  }\n};\n", "import { DEFAULT_OPTIONS } from './default-options.js';\n\nfunction isPlainObject(value) {\n  return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction mergeDeep(target, source) {\n  const output = { ...target };\n  for (const [key, value] of Object.entries(source || {})) {\n    if (isPlainObject(value) && isPlainObject(output[key])) {\n      output[key] = mergeDeep(output[key], value);\n    } else if (Array.isArray(value)) {\n      output[key] = value.slice();\n    } else if (value !== undefined) {\n      output[key] = value;\n    }\n  }\n  return output;\n}\n\nexport function mergeOptions(base, overrides) {\n  if (!isPlainObject(overrides)) {\n    return deepClone(base);\n  }\n  return mergeDeep(deepClone(base), overrides);\n}\n\nfunction deepClone(value) {\n  if (Array.isArray(value)) {\n    return value.map(deepClone);\n  }\n  if (isPlainObject(value)) {\n    const copy = {};\n    for (const [key, inner] of Object.entries(value)) {\n      copy[key] = deepClone(inner);\n    }\n    return copy;\n  }\n  return value;\n}\n\nexport function resolveOptions(userOptions = {}) {\n  const base = deepClone(DEFAULT_OPTIONS);\n  if (!isPlainObject(userOptions)) {\n    return Object.freeze(base);\n  }\n\n  const merged = mergeDeep(base, userOptions);\n  return Object.freeze(merged);\n}\n\nexport function cloneOptions(options) {\n  if (!isPlainObject(options)) {\n    return resolveOptions();\n  }\n  return resolveOptions(options);\n}\n", "const SPACE_REGEX = /\\s+/g;\nconst DASH_REGEX = /[\\u2012-\\u2015\\u2212]/g; // various dashes\nconst DOT_REGEX = /[\\u2024\\u2027]/g; // dot-like characters\nconst COMMA_REGEX = /[\\u201a\\u201e]/g;\nconst NBSP_REGEX = /\\u00a0/g;\nconst MULTISPACE_REGEX = /\\s{2,}/g;\n\nexport function normalizeInput(input) {\n  const original = typeof input === 'string' ? input : '';\n  let normalized = original\n    .replace(NBSP_REGEX, ' ')\n    .replace(DASH_REGEX, '-')\n    .replace(DOT_REGEX, '.')\n    .replace(COMMA_REGEX, ',');\n\n  normalized = normalized.replace(SPACE_REGEX, ' ');\n  normalized = normalized.trim();\n  normalized = normalized.replace(MULTISPACE_REGEX, ' ');\n\n  const lowered = normalized.toLowerCase();\n\n  return {\n    original,\n    normalized,\n    lowered,\n    isEmpty: normalized.length === 0\n  };\n}\n", "const localeRegistry = new Map();\n\nconst DEFAULT_DAY_MONTH_ORDER = ['DMY', 'MDY'];\nconst DEFAULT_RANGE_SEPARATOR = ' \u2013 ';\n\nfunction normalizeToken(token) {\n  return token.trim().toLowerCase();\n}\n\nfunction clonePreparedLocale(prepared, idOverride) {\n  if (!prepared) {\n    return {\n      id: idOverride,\n      monthTokens: new Map(),\n      qualifierTokens: new Map(),\n      rangeMarkerTokens: new Map(),\n      noiseTokens: new Set(),\n      aliases: new Map(),\n      ordinalSuffixes: [],\n      dayMonthOrder: DEFAULT_DAY_MONTH_ORDER.slice(),\n      monthNames: { long: [], short: [], numeric: [] },\n      qualifierDisplay: {},\n      rangeSeparator: DEFAULT_RANGE_SEPARATOR\n    };\n  }\n\n  return {\n    id: idOverride ?? prepared.id,\n    monthTokens: new Map(prepared.monthTokens),\n    qualifierTokens: new Map(prepared.qualifierTokens),\n    rangeMarkerTokens: new Map(prepared.rangeMarkerTokens),\n    noiseTokens: new Set(prepared.noiseTokens),\n    aliases: new Map(prepared.aliases),\n    ordinalSuffixes: prepared.ordinalSuffixes.slice(),\n    dayMonthOrder: prepared.dayMonthOrder.slice(),\n    monthNames: {\n      long: prepared.monthNames.long.slice(),\n      short: prepared.monthNames.short.slice(),\n      numeric: prepared.monthNames.numeric.slice()\n    },\n    qualifierDisplay: { ...prepared.qualifierDisplay },\n    rangeSeparator: prepared.rangeSeparator\n  };\n}\n\nfunction applyPackToPrepared(base, localePack) {\n  for (const [token, value] of Object.entries(localePack.monthLookup || {})) {\n    base.monthTokens.set(normalizeToken(token), value);\n  }\n\n  for (const [name, tokens] of Object.entries(localePack.qualifiers || {})) {\n    for (const token of tokens) {\n      const normalized = normalizeToken(token);\n      base.qualifierTokens.set(normalized, { name, token: normalized });\n    }\n  }\n\n  for (const [role, tokens] of Object.entries(localePack.rangeMarkers || {})) {\n    for (const token of tokens) {\n      const normalized = normalizeToken(token);\n      base.rangeMarkerTokens.set(normalized, { role, token: normalized });\n    }\n  }\n\n  for (const token of localePack.noiseTokens || []) {\n    base.noiseTokens.add(normalizeToken(token));\n  }\n\n  for (const [alias, canonical] of Object.entries(localePack.aliases || {})) {\n    base.aliases.set(normalizeToken(alias), normalizeToken(canonical));\n  }\n\n  if (Array.isArray(localePack.ordinalSuffixes)) {\n    base.ordinalSuffixes = localePack.ordinalSuffixes.map(normalizeToken);\n  }\n\n  if (Array.isArray(localePack.dayMonthOrder) && localePack.dayMonthOrder.length > 0) {\n    base.dayMonthOrder = localePack.dayMonthOrder.slice();\n  }\n\n  if (localePack.monthNames) {\n    if (Array.isArray(localePack.monthNames.long)) {\n      base.monthNames.long = localePack.monthNames.long.slice();\n    }\n    if (Array.isArray(localePack.monthNames.short)) {\n      base.monthNames.short = localePack.monthNames.short.slice();\n    }\n    if (Array.isArray(localePack.monthNames.numeric)) {\n      base.monthNames.numeric = localePack.monthNames.numeric.slice();\n    }\n  }\n\n  if (localePack.qualifierDisplay) {\n    for (const [name, display] of Object.entries(localePack.qualifierDisplay)) {\n      base.qualifierDisplay[name] = display;\n    }\n  }\n\n  if (typeof localePack.rangeSeparator === 'string') {\n    base.rangeSeparator = localePack.rangeSeparator;\n  }\n\n  return base;\n}\n\nfunction prepareLocalePack(localePack, existing) {\n  if (!localePack || typeof localePack.id !== 'string') {\n    throw new Error('Locale pack requires an id.');\n  }\n\n  const id = localePack.id.trim().toLowerCase();\n  const base = clonePreparedLocale(existing, id);\n  base.id = id;\n  return applyPackToPrepared(base, localePack);\n}\n\nexport function registerLocale(localePack) {\n  const existing = localeRegistry.get((localePack?.id || '').trim().toLowerCase());\n  const prepared = prepareLocalePack(localePack, existing);\n  localeRegistry.set(prepared.id, prepared);\n  return prepared;\n}\n\nexport function getLocale(id) {\n  const key = (id || '').toLowerCase();\n  if (localeRegistry.has(key)) {\n    return localeRegistry.get(key);\n  }\n  throw new Error(`Locale '${id}' is not registered.`);\n}\n\nexport function ensureLocale(id, fallbackIds = []) {\n  const attempts = [id, ...fallbackIds];\n  for (const candidate of attempts) {\n    const key = (candidate || '').toLowerCase();\n    if (localeRegistry.has(key)) {\n      return localeRegistry.get(key);\n    }\n  }\n  throw new Error(`Unable to resolve locale from [${attempts.filter(Boolean).join(', ')}].`);\n}\n\nexport function listLocales() {\n  return Array.from(localeRegistry.keys());\n}\n", "const monthEntries = {\n  january: 1,\n  jan: 1,\n  'jan.': 1,\n  february: 2,\n  feb: 2,\n  'feb.': 2,\n  march: 3,\n  mar: 3,\n  'mar.': 3,\n  april: 4,\n  apr: 4,\n  'apr.': 4,\n  may: 5,\n  june: 6,\n  jun: 6,\n  'jun.': 6,\n  july: 7,\n  jul: 7,\n  'jul.': 7,\n  august: 8,\n  aug: 8,\n  'aug.': 8,\n  september: 9,\n  sept: 9,\n  sep: 9,\n  'sep.': 9,\n  'sept.': 9,\n  october: 10,\n  oct: 10,\n  'oct.': 10,\n  november: 11,\n  nov: 11,\n  'nov.': 11,\n  december: 12,\n  dec: 12,\n  'dec.': 12\n};\n\nconst qualifiers = {\n  approximate: ['ca', 'circa', 'abt', 'about', '~', 'c.'],\n  before: ['before', 'bef', 'prior'],\n  after: ['after', 'aft', 'post'],\n  calculated: ['calc', 'calculated'],\n  estimated: ['est', 'estimated']\n};\n\nconst rangeMarkers = {\n  boundedStart: ['between', 'from'],\n  boundedJoin: ['and', 'to', 'through', 'thru'],\n  boundedEnd: ['and', 'to', 'through', 'thru'],\n  openStart: ['after', 'since'],\n  openEnd: ['before', 'until', 'till']\n};\n\nconst monthNames = {\n  long: [\n    'January',\n    'February',\n    'March',\n    'April',\n    'May',\n    'June',\n    'July',\n    'August',\n    'September',\n    'October',\n    'November',\n    'December'\n  ],\n  short: [\n    'Jan',\n    'Feb',\n    'Mar',\n    'Apr',\n    'May',\n    'Jun',\n    'Jul',\n    'Aug',\n    'Sep',\n    'Oct',\n    'Nov',\n    'Dec'\n  ],\n  numeric: [\n    '01',\n    '02',\n    '03',\n    '04',\n    '05',\n    '06',\n    '07',\n    '08',\n    '09',\n    '10',\n    '11',\n    '12'\n  ]\n};\n\nconst qualifierDisplay = {\n  approximate: 'ca',\n  before: 'before',\n  after: 'after',\n  calculated: 'calc',\n  estimated: 'est'\n};\n\nexport const englishLocale = {\n  id: 'en',\n  monthLookup: monthEntries,\n  qualifiers,\n  rangeMarkers,\n  noiseTokens: [','],\n  ordinalSuffixes: ['st', 'nd', 'rd', 'th'],\n  dayMonthOrder: ['DMY', 'MDY'],\n  aliases: {\n    circa: 'ca',\n    approx: 'ca'\n  },\n  monthNames,\n  qualifierDisplay,\n  rangeSeparator: ' \u2013 '\n};\n\nexport default englishLocale;\n", "import { registerLocale, ensureLocale, getLocale, listLocales } from './registry.js';\nimport { englishLocale } from './en.js';\n\nconst DEFAULT_LOCALE_ID = 'en';\n\nif (!listLocales().includes(DEFAULT_LOCALE_ID)) {\n  registerLocale(englishLocale);\n}\n\nexport { registerLocale, ensureLocale, getLocale, listLocales };\nexport { englishLocale };\nexport { DEFAULT_LOCALE_ID };\n", "import { normalizeInput } from './normalizer.js';\nimport { ensureLocale } from './locales/index.js';\n\nconst TOKEN_PATTERN = /[0-9]+(?:[A-Za-z]{2})?|[A-Za-z]+\\.?|[^\\sA-Za-z0-9]+/g;\n\nfunction parseOrdinal(token, ordinalSuffixes) {\n  for (const suffix of ordinalSuffixes) {\n    if (token.length > suffix.length && token.endsWith(suffix)) {\n      const numeric = token.slice(0, -suffix.length);\n      if (/^\\d+$/.test(numeric)) {\n        return Number.parseInt(numeric, 10);\n      }\n    }\n  }\n  return null;\n}\n\nfunction normalizeWordToken(token) {\n  return token.replace(/\\.$/, '');\n}\n\nfunction classifyToken(rawToken, locale, position) {\n  const raw = rawToken;\n  const trimmed = raw.trim();\n  if (!trimmed) {\n    return null;\n  }\n\n  const lowerCandidate = trimmed.toLowerCase();\n  const canonicalCandidate = locale.aliases.get(lowerCandidate) || lowerCandidate;\n\n  let type = 'word';\n  let subtype = null;\n  let value = null;\n  let normalized = canonicalCandidate;\n\n  if (/^\\d+$/.test(trimmed)) {\n    type = 'number';\n    value = Number.parseInt(trimmed, 10);\n    normalized = trimmed;\n  } else if (locale.monthTokens.has(canonicalCandidate)) {\n    type = 'month';\n    value = locale.monthTokens.get(canonicalCandidate);\n  } else if (locale.qualifierTokens.has(canonicalCandidate)) {\n    type = 'qualifier';\n    subtype = locale.qualifierTokens.get(canonicalCandidate).name;\n  } else if (locale.rangeMarkerTokens.has(canonicalCandidate)) {\n    type = 'range-marker';\n    subtype = locale.rangeMarkerTokens.get(canonicalCandidate).role;\n  } else if (locale.noiseTokens.has(canonicalCandidate)) {\n    type = 'noise';\n  } else if (/^[^A-Za-z0-9]+$/.test(trimmed)) {\n    type = 'symbol';\n    normalized = trimmed;\n  } else {\n    const ordinal = parseOrdinal(canonicalCandidate, locale.ordinalSuffixes);\n    if (ordinal !== null) {\n      type = 'number';\n      subtype = 'ordinal';\n      value = ordinal;\n      normalized = String(ordinal);\n    } else {\n      const normalizedWord = normalizeWordToken(canonicalCandidate);\n      if (locale.monthTokens.has(normalizedWord)) {\n        type = 'month';\n        value = locale.monthTokens.get(normalizedWord);\n        normalized = normalizedWord;\n      } else if (locale.qualifierTokens.has(normalizedWord)) {\n        type = 'qualifier';\n        subtype = locale.qualifierTokens.get(normalizedWord).name;\n        normalized = normalizedWord;\n      } else if (locale.rangeMarkerTokens.has(normalizedWord)) {\n        type = 'range-marker';\n        subtype = locale.rangeMarkerTokens.get(normalizedWord).role;\n        normalized = normalizedWord;\n      } else if (locale.noiseTokens.has(normalizedWord)) {\n        type = 'noise';\n        normalized = normalizedWord;\n      } else {\n        normalized = normalizedWord;\n      }\n    }\n  }\n\n  return {\n    raw,\n    normalized,\n    lower: canonicalCandidate,\n    type,\n    subtype,\n    value,\n    index: position.index,\n    start: position.offset,\n    end: position.offset + raw.length\n  };\n}\n\nexport function tokenizeInput(input, options, normalizationOverride, localeOverride) {\n  const normalization = normalizationOverride || normalizeInput(input);\n  const locale = localeOverride || ensureLocale(options.locale, options.fallbackLocales);\n\n  if (normalization.isEmpty) {\n    return {\n      tokens: [],\n      issues: ['input-empty'],\n      normalization\n    };\n  }\n\n  const tokens = [];\n  const issues = [];\n  let match;\n  let index = 0;\n\n  TOKEN_PATTERN.lastIndex = 0;\n  while ((match = TOKEN_PATTERN.exec(normalization.normalized)) !== null) {\n    const token = match[0];\n    const classified = classifyToken(token, locale, { index, offset: match.index });\n    if (classified) {\n      tokens.push(classified);\n      index += 1;\n    }\n  }\n\n  return {\n    tokens,\n    issues,\n    normalization\n  };\n}\n", "const RANGE_QUALIFIERS = new Set(['before', 'after']);\n\nfunction isYearCandidate(value, options) {\n  const absolute = Math.abs(value);\n  if (absolute >= 32) {\n    return true;\n  }\n  if (absolute === 0 && options?.partial?.allowTwoDigitYears) {\n    return true;\n  }\n  if (absolute <= 31 && options?.partial?.allowTwoDigitYears) {\n    return true;\n  }\n  return false;\n}\n\nfunction collectSignals(tokens) {\n  const signals = {\n    tokenCount: tokens.length,\n    numbers: [],\n    months: [],\n    qualifiers: [],\n    rangeMarkers: [],\n    symbols: [],\n    words: [],\n    hasHyphenBetweenNumbers: false,\n    hasRangeQualifier: false,\n    hasRangeMarker: false\n  };\n\n  for (let i = 0; i < tokens.length; i += 1) {\n    const token = tokens[i];\n    switch (token.type) {\n      case 'number':\n        signals.numbers.push(token);\n        break;\n      case 'month':\n        signals.months.push(token);\n        break;\n      case 'qualifier':\n        signals.qualifiers.push(token);\n        if (RANGE_QUALIFIERS.has(token.subtype)) {\n          signals.hasRangeQualifier = true;\n        }\n        break;\n      case 'range-marker':\n        signals.rangeMarkers.push(token);\n        signals.hasRangeMarker = true;\n        break;\n      case 'symbol':\n        signals.symbols.push(token);\n        break;\n      default:\n        signals.words.push(token);\n        break;\n    }\n\n    if (token.type === 'symbol' && token.normalized.includes('-')) {\n      const prev = tokens[i - 1];\n      const next = tokens[i + 1];\n      if (prev && next && prev.type === 'number' && next.type === 'number') {\n        signals.hasHyphenBetweenNumbers = true;\n      }\n    }\n  }\n\n  return signals;\n}\n\nfunction hasPossibleRange(signals, options) {\n  if (signals.hasRangeMarker || signals.hasRangeQualifier) {\n    return true;\n  }\n\n  if (signals.hasHyphenBetweenNumbers) {\n    const numberCount = signals.numbers.length;\n    const hasMonth = signals.months.length > 0;\n    if (!hasMonth && numberCount <= 2) {\n      return true;\n    }\n    if (!hasMonth && numberCount === 3) {\n      // Distinguish numeric dates (e.g., 1978-09-21) from ranges (1980-1981).\n      // Require at least two year-like values to classify as range.\n      const yearish = signals.numbers.filter((token) => isYearCandidate(token.value, options));\n      if (yearish.length >= 2) {\n        return true;\n      }\n      return false;\n    }\n  }\n\n  return false;\n}\n\nfunction classifyExactOrPartial(signals, options) {\n  const hasMonth = signals.months.length > 0;\n  const numberCount = signals.numbers.length;\n  const yearCandidates = signals.numbers.filter((token) => isYearCandidate(token.value, options));\n  const dayCandidates = signals.numbers.filter((token) => token.value >= 1 && token.value <= 31);\n\n  const hasApproxQualifier = signals.qualifiers.some((token) => token.subtype === 'approximate');\n  const hasCalculatedQualifier = signals.qualifiers.some((token) => token.subtype === 'calculated' || token.subtype === 'estimated');\n\n  if (hasMonth && yearCandidates.length > 0 && dayCandidates.length > 0) {\n    return {\n      kind: 'exact',\n      confidence: 'high',\n      precisionHint: 'day',\n      reasons: ['month-with-day-and-year']\n    };\n  }\n\n  if (hasMonth && numberCount >= 2 && yearCandidates.length > 0) {\n    return {\n      kind: 'exact',\n      confidence: 'medium',\n      precisionHint: 'day',\n      reasons: ['month-with-numeric-pattern']\n    };\n  }\n\n  if (hasMonth && yearCandidates.length > 0) {\n    return {\n      kind: 'partial',\n      confidence: 'medium',\n      precisionHint: 'month',\n      reasons: ['month-with-year']\n    };\n  }\n\n  if (hasMonth && dayCandidates.length > 0) {\n    return {\n      kind: 'partial',\n      confidence: 'medium',\n      precisionHint: 'day',\n      reasons: ['month-with-day']\n    };\n  }\n\n  if (hasApproxQualifier || hasCalculatedQualifier) {\n    return {\n      kind: 'partial',\n      confidence: 'medium',\n      precisionHint: yearCandidates.length ? 'year' : 'unknown',\n      reasons: ['approximate-qualifier']\n    };\n  }\n\n  if (signals.tokenCount === 1 && yearCandidates.length === 1) {\n    return {\n      kind: 'partial',\n      confidence: 'medium',\n      precisionHint: 'year',\n      reasons: ['single-year']\n    };\n  }\n\n  if (numberCount >= 3 && yearCandidates.length > 0) {\n    return {\n      kind: 'exact',\n      confidence: 'low',\n      precisionHint: 'day',\n      reasons: ['numeric-triplet']\n    };\n  }\n\n  if (yearCandidates.length > 0 || hasMonth) {\n    return {\n      kind: 'partial',\n      confidence: 'low',\n      precisionHint: hasMonth ? 'month' : 'year',\n      reasons: ['insufficient-components']\n    };\n  }\n\n  return {\n    kind: 'invalid',\n    confidence: 'low',\n    precisionHint: 'unknown',\n    reasons: ['no-recognized-components']\n  };\n}\n\nexport function classifyTokens(tokens, options = {}) {\n  if (!Array.isArray(tokens) || tokens.length === 0) {\n    return {\n      kind: 'invalid',\n      confidence: 'low',\n      precisionHint: 'unknown',\n      reasons: ['no-tokens'],\n      signals: {\n        tokenCount: 0,\n        numbers: [],\n        months: [],\n        qualifiers: [],\n        rangeMarkers: [],\n        symbols: [],\n        words: [],\n        hasHyphenBetweenNumbers: false,\n        hasRangeQualifier: false,\n        hasRangeMarker: false\n      }\n    };\n  }\n\n  const signals = collectSignals(tokens);\n\n  if (hasPossibleRange(signals, options)) {\n    return {\n      kind: 'range',\n      confidence: 'medium',\n      precisionHint: 'range',\n      reasons: ['range-signals'],\n      signals\n    };\n  }\n\n  const result = classifyExactOrPartial(signals, options);\n  return {\n    ...result,\n    signals\n  };\n}\n\nexport default classifyTokens;\n", "const DAYS_PER_MONTH_COMMON = [\n  31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31\n];\n\nconst YEAR_DAY_THRESHOLD = 32;\n\nfunction allowsSmallYears(options) {\n  return options?.partial?.allowTwoDigitYears === true;\n}\n\nexport function isLeapYear(year) {\n  if (year % 400 === 0) return true;\n  if (year % 100 === 0) return false;\n  return year % 4 === 0;\n}\n\nexport function daysInMonth(year, month) {\n  if (month === 2 && isLeapYear(year)) {\n    return 29;\n  }\n  return DAYS_PER_MONTH_COMMON[month - 1] || 31;\n}\n\nexport function isValidYear(value, options = {}) {\n  if (!Number.isInteger(value)) {\n    return false;\n  }\n  const absolute = Math.abs(value);\n  if (absolute >= YEAR_DAY_THRESHOLD) {\n    return true;\n  }\n  if (absolute === 0 && allowsSmallYears(options)) {\n    return true;\n  }\n  if (absolute <= 31 && allowsSmallYears(options)) {\n    return true;\n  }\n  return false;\n}\n\nexport function normalizeYear(value, options = {}, issues) {\n  if (!Number.isInteger(value)) {\n    return null;\n  }\n  const absolute = Math.abs(value);\n  if (absolute >= YEAR_DAY_THRESHOLD) {\n    return value;\n  }\n  if (absolute === 0 && allowsSmallYears(options)) {\n    if (issues) {\n      issues.push('two-digit-year');\n    }\n    return value;\n  }\n  if (absolute <= 31 && allowsSmallYears(options)) {\n    if (issues) {\n      issues.push('two-digit-year');\n    }\n    return value;\n  }\n  return null;\n}\n\nexport function isValidMonth(value) {\n  return value >= 1 && value <= 12;\n}\n\nexport function isValidDay(year, month, day) {\n  if (day < 1 || day > 31) {\n    return false;\n  }\n  if (!month || month < 1 || month > 12) {\n    return true; // assume upper validation handles month\n  }\n  return day <= daysInMonth(year ?? 2000, month);\n}\n\nexport function makeSortKey(year, month, day) {\n  if (!isValidYear(year, { partial: { allowTwoDigitYears: true } })) {\n    return null;\n  }\n  if (!isValidMonth(month) || day < 1 || day > 31) {\n    return null;\n  }\n  return year * 10000 + month * 100 + day;\n}\n\nexport function dedupeCandidates(candidates) {\n  const seen = new Set();\n  const result = [];\n  for (const candidate of candidates) {\n    const key = `${candidate.year}-${candidate.month}-${candidate.day}`;\n    if (!seen.has(key)) {\n      seen.add(key);\n      result.push(candidate);\n    }\n  }\n  return result;\n}\n", "import { ensureLocale } from '../locales/index.js';\n\nexport function toIsoString(year, month, day) {\n  if (year == null) {\n    return null;\n  }\n  const y = String(year).padStart(4, '0');\n  if (month == null) {\n    return y;\n  }\n  const m = String(month).padStart(2, '0');\n  if (day == null) {\n    return `${y}-${m}`;\n  }\n  const d = String(day).padStart(2, '0');\n  return `${y}-${m}-${d}`;\n}\n\nexport function mergeIssues(...lists) {\n  const seen = new Set();\n  const merged = [];\n  for (const list of lists) {\n    if (!Array.isArray(list)) continue;\n    for (const issue of list) {\n      if (issue && !seen.has(issue)) {\n        seen.add(issue);\n        merged.push(issue);\n      }\n    }\n  }\n  return merged;\n}\n\nfunction collectLocaleOrders(options) {\n  try {\n    const locale = ensureLocale(options.locale, options.fallbackLocales);\n    return locale?.dayMonthOrder || [];\n  } catch (error) {\n    return [];\n  }\n}\n\nfunction buildOrderPreference(options, context) {\n  const preferences = [];\n  const optOrders = options?.ambiguity?.preferredOrders || [];\n  for (const order of optOrders) {\n    if (!preferences.includes(order)) {\n      preferences.push(order);\n    }\n  }\n\n  if (options?.ambiguity?.preferLocaleOrder !== false) {\n    const localeOrders = context?.localeOrders || collectLocaleOrders(options);\n    for (const order of localeOrders) {\n      if (!preferences.includes(order)) {\n        preferences.push(order);\n      }\n    }\n  }\n\n  for (const fallback of ['DMY', 'MDY', 'YMD']) {\n    if (!preferences.includes(fallback)) {\n      preferences.push(fallback);\n    }\n  }\n\n  return preferences;\n}\n\nexport function resolveAmbiguity(candidates, options, context = {}) {\n  const entries = Array.isArray(candidates) ? candidates.filter(Boolean) : [];\n  if (entries.length === 0) {\n    return {\n      type: 'none',\n      issues: ['ambiguity-no-candidates']\n    };\n  }\n\n  if (entries.length === 1) {\n    return {\n      type: 'single',\n      candidate: entries[0],\n      issues: entries[0].issues || []\n    };\n  }\n\n  const strategy = options?.ambiguity?.strategy || 'all';\n  const combinedIssues = mergeIssues(entries.flatMap((entry) => entry.issues || []));\n\n  if (strategy === 'all') {\n    return {\n      type: 'ambiguous',\n      candidates: entries,\n      issues: mergeIssues(combinedIssues, ['ambiguous-order'])\n    };\n  }\n\n  let chosen = null;\n  if (strategy === 'prefer-order') {\n    const preferences = buildOrderPreference(options, context);\n    chosen = entries.find((entry) => {\n      const order = entry.meta?.order;\n      return order && preferences.includes(order);\n    });\n  }\n\n  if (!chosen) {\n    chosen = entries[0];\n  }\n\n  const extraIssues = strategy === 'prefer-order'\n    ? ['ambiguity-auto-resolved']\n    : [];\n\n  return {\n    type: 'single',\n    candidate: chosen,\n    alternateCandidates: entries,\n    issues: mergeIssues(combinedIssues, extraIssues)\n  };\n}\n", "import { dedupeCandidates, isValidDay, isValidMonth, normalizeYear, makeSortKey } from '../utils/date-utils.js';\nimport { toIsoString } from '../utils/result-utils.js';\n\nconst NUMERIC_ORDER_FALLBACK = ['DMY', 'MDY', 'YMD'];\n\nfunction extractMonth(tokens) {\n  const months = tokens.filter((token) => token.type === 'month');\n  if (months.length !== 1) {\n    return null;\n  }\n  return {\n    month: months[0].value,\n    index: tokens.indexOf(months[0])\n  };\n}\n\nfunction findNearestDay(tokens, monthIndex) {\n  // Look left then right for day candidates between 1 and 31\n  for (let i = monthIndex - 1; i >= 0; i -= 1) {\n    const token = tokens[i];\n    if (token.type === 'number' && token.value >= 1 && token.value <= 31) {\n      return { day: token.value, token };\n    }\n    if (token.type !== 'number' && token.type !== 'symbol') {\n      break;\n    }\n  }\n\n  for (let i = monthIndex + 1; i < tokens.length; i += 1) {\n    const token = tokens[i];\n    if (token.type === 'number' && token.value >= 1 && token.value <= 31) {\n      return { day: token.value, token };\n    }\n    if (token.type !== 'number' && token.type !== 'symbol') {\n      break;\n    }\n  }\n\n  return null;\n}\n\nfunction findYear(tokens, monthIndex, options, issues) {\n  // Prefer numbers after the month, fallback to before\n  let sawLargeCandidate = false;\n  let sawValidLargeCandidate = false;\n\n  const considerToken = (token) => {\n    if (token.type !== 'number') {\n      return null;\n    }\n\n    const value = token.value;\n    const normalized = normalizeYear(value, options, issues);\n\n    if (value >= 100) {\n      sawLargeCandidate = true;\n      if (normalized !== null) {\n        sawValidLargeCandidate = true;\n        return { year: normalized, token };\n      }\n      return null;\n    }\n\n    if (normalized !== null) {\n      if (sawLargeCandidate && !sawValidLargeCandidate) {\n        return null;\n      }\n      return { year: normalized, token };\n    }\n\n    return null;\n  };\n\n  for (let i = monthIndex + 1; i < tokens.length; i += 1) {\n    const token = tokens[i];\n    const candidate = considerToken(token);\n    if (candidate) {\n      return candidate;\n    }\n    if (token.type !== 'number' && token.type !== 'symbol') {\n      break;\n    }\n  }\n\n  for (let i = monthIndex - 1; i >= 0; i -= 1) {\n    const token = tokens[i];\n    const candidate = considerToken(token);\n    if (candidate) {\n      return candidate;\n    }\n    if (token.type !== 'number' && token.type !== 'symbol') {\n      break;\n    }\n  }\n\n  if (sawLargeCandidate && !sawValidLargeCandidate) {\n    issues.push('invalid-year');\n  }\n\n  return null;\n}\n\nfunction validateCandidate(candidate, issues) {\n  const localIssues = [];\n  if (!isValidMonth(candidate.month)) {\n    localIssues.push('invalid-month');\n  }\n  if (!isValidDay(candidate.year, candidate.month, candidate.day)) {\n    localIssues.push('invalid-day');\n  }\n  if (candidate.year === null || candidate.year === undefined) {\n    localIssues.push('invalid-year');\n  }\n\n  if (localIssues.length > 0) {\n    issues.push(...localIssues);\n    return false;\n  }\n  return true;\n}\n\nfunction buildCandidate(year, month, day, baseIssues = [], meta = {}) {\n  const issues = [...baseIssues];\n  const valid = validateCandidate({ year, month, day }, issues);\n  if (!valid) {\n    return null;\n  }\n\n  return {\n    kind: 'exact',\n    year,\n    month,\n    day,\n    precision: 'day',\n    sortKey: makeSortKey(year, month, day),\n    normalized: toIsoString(year, month, day),\n    issues,\n    meta\n  };\n}\n\nfunction parseWithMonth(tokens, options) {\n  const monthInfo = extractMonth(tokens);\n  if (!monthInfo) {\n    return [];\n  }\n  const issues = [];\n  const dayInfo = findNearestDay(tokens, monthInfo.index);\n  const yearInfo = findYear(tokens, monthInfo.index, options, issues);\n  if (!dayInfo || !yearInfo) {\n    issues.push('missing-day-or-year');\n    return [];\n  }\n\n  const candidate = buildCandidate(yearInfo.year, monthInfo.month, dayInfo.day, issues, {\n    source: 'month-name'\n  });\n  return candidate ? [candidate] : [];\n}\n\nfunction extractNumbers(tokens) {\n  return tokens.filter((token) => token.type === 'number');\n}\n\nfunction mapOrder(order, numbers) {\n  const [a, b, c] = numbers;\n  switch (order) {\n    case 'DMY':\n      return { day: a.value, month: b.value, yearValue: c.value };\n    case 'MDY':\n      return { day: b.value, month: a.value, yearValue: c.value };\n    case 'YMD':\n      return { day: c.value, month: b.value, yearValue: a.value };\n    case 'YDM':\n      return { day: b.value, month: c.value, yearValue: a.value };\n    default:\n      return null;\n  }\n}\n\nfunction parseNumeric(tokens, options) {\n  const numbers = extractNumbers(tokens);\n  if (numbers.length !== 3) {\n    return [];\n  }\n\n  const orders = options.ambiguity?.preferredOrders?.length\n    ? [...options.ambiguity.preferredOrders]\n    : [];\n\n  for (const fallback of NUMERIC_ORDER_FALLBACK) {\n    if (!orders.includes(fallback)) {\n      orders.push(fallback);\n    }\n  }\n\n  const candidates = [];\n\n  for (const order of orders) {\n    const mapped = mapOrder(order, numbers);\n    if (!mapped) {\n      continue;\n    }\n\n    const issues = [];\n    const year = normalizeYear(mapped.yearValue, options, issues);\n    const month = mapped.month;\n    const day = mapped.day;\n\n    if (year === null) {\n      issues.push('invalid-year');\n    }\n\n    const candidate = buildCandidate(year, month, day, issues, { order, source: 'numeric' });\n    if (candidate) {\n      candidates.push({ candidate, order });\n    }\n  }\n\n  if (candidates.length === 0) {\n    return [];\n  }\n\n  const deduped = dedupeCandidates(candidates.map((entry) => entry.candidate));\n  if (deduped.length > 1) {\n    for (const candidate of deduped) {\n      if (!candidate.issues.includes('ambiguous-order')) {\n        candidate.issues.push('ambiguous-order');\n      }\n    }\n  }\n\n  return deduped;\n}\n\nexport function parseExact(tokens, normalization, options, classification = null) {\n  const withMonth = parseWithMonth(tokens, options);\n  if (withMonth.length > 0) {\n    const issues = new Set();\n    for (const candidate of withMonth) {\n      for (const issue of candidate.issues || []) {\n        issues.add(issue);\n      }\n    }\n    return {\n      candidates: withMonth,\n      issues: Array.from(issues)\n    };\n  }\n\n  const numeric = parseNumeric(tokens, options);\n  if (numeric.length > 0) {\n    const seen = new Set();\n    const allIssues = [];\n    for (const candidate of numeric) {\n      for (const issue of candidate.issues || []) {\n        if (!seen.has(issue)) {\n          seen.add(issue);\n          allIssues.push(issue);\n        }\n      }\n    }\n    return {\n      candidates: numeric,\n      issues: allIssues\n    };\n  }\n\n  return {\n    candidates: [],\n    issues: ['exact-no-match']\n  };\n}\n\nexport default parseExact;\n", "import { normalizeYear, isValidMonth, isValidDay, makeSortKey } from '../utils/date-utils.js';\n\nfunction unique(list) {\n  const seen = new Set();\n  const out = [];\n  for (const item of list) {\n    if (item != null && !seen.has(item)) {\n      seen.add(item);\n      out.push(item);\n    }\n  }\n  return out;\n}\n\nfunction gather(tokens) {\n  const data = {\n    years: [],\n    months: [],\n    days: [],\n    qualifiers: [],\n    numbers: []\n  };\n\n  for (const token of tokens) {\n    if (token.type === 'month') {\n      data.months.push(token);\n    } else if (token.type === 'qualifier') {\n      data.qualifiers.push(token);\n    } else if (token.type === 'number') {\n      data.numbers.push(token);\n      if (token.value >= 1 && token.value <= 31) {\n        data.days.push(token);\n      }\n      if (token.value >= 1000) {\n        data.years.push(token);\n      }\n    }\n  }\n\n  return data;\n}\n\nfunction resolveYear(numbers, options, issues, context) {\n  const hasMonth = context.hasMonth;\n  const allowSmallYear = !hasMonth || numbers.length > 1;\n\n  const large = [];\n  const medium = [];\n  const small = [];\n\n  for (const token of numbers) {\n    if (token.value >= 1000) {\n      large.push(token);\n    } else if (token.value >= 100 || token.value > 31) {\n      medium.push(token);\n    } else {\n      small.push(token);\n    }\n  }\n\n  const ordered = [...large, ...medium];\n  if (allowSmallYear) {\n    ordered.push(...small);\n  }\n\n  for (const token of ordered) {\n    const normalized = normalizeYear(token.value, options, issues);\n    if (normalized !== null) {\n      return { year: normalized, token };\n    }\n  }\n  return { year: null, token: null };\n}\n\nfunction resolveDay(dayTokens, excludeToken) {\n  for (const token of dayTokens) {\n    if (excludeToken && token === excludeToken) {\n      continue;\n    }\n    return { day: token.value, token };\n  }\n  return { day: null, token: null };\n}\n\nfunction primaryMonth(months) {\n  if (months.length === 0) {\n    return { month: null, token: null };\n  }\n  return { month: months[0].value, token: months[0] };\n}\n\nfunction isoForPartial(year, month, day) {\n  if (year != null && month != null && day != null) {\n    const y = String(year).padStart(4, '0');\n    const m = String(month).padStart(2, '0');\n    const d = String(day).padStart(2, '0');\n    return `${y}-${m}-${d}`;\n  }\n  if (year != null && month != null) {\n    const y = String(year).padStart(4, '0');\n    const m = String(month).padStart(2, '0');\n    return `${y}-${m}`;\n  }\n  if (year != null) {\n    return String(year).padStart(4, '0');\n  }\n  return null;\n}\n\nfunction determinePrecision(year, month, day, issues) {\n  if (year != null && month != null && day != null) {\n    return 'day';\n  }\n  if (year != null && month != null) {\n    if (!issues.includes('missing-day')) issues.push('missing-day');\n    return 'month';\n  }\n  if (year != null) {\n    return 'year';\n  }\n  if (month != null && day != null) {\n    if (!issues.includes('missing-year')) issues.push('missing-year');\n    return 'day';\n  }\n  if (month != null) {\n    if (!issues.includes('missing-year')) issues.push('missing-year');\n    if (!issues.includes('missing-day')) issues.push('missing-day');\n    return 'month';\n  }\n  if (day != null) {\n    if (!issues.includes('missing-month')) issues.push('missing-month');\n    if (!issues.includes('missing-year')) issues.push('missing-year');\n    return 'day';\n  }\n  return 'unknown';\n}\n\nexport function parsePartial(tokens, normalization, options, classification = null) {\n  const gathered = gather(tokens);\n  const issues = [];\n  const qualifierNames = unique(gathered.qualifiers.map((token) => token.subtype || token.normalized));\n\n  let { year, token: yearToken } = resolveYear(gathered.numbers, options, issues, {\n    hasMonth: gathered.months.length > 0\n  });\n  if (year === null && gathered.years.length > 0) {\n    issues.push('invalid-year');\n  }\n\n  const { month } = primaryMonth(gathered.months);\n\n  const { day } = resolveDay(gathered.days, yearToken);\n  if (day !== null && month === null) {\n    issues.push('missing-month');\n  }\n\n  if (month !== null && !isValidMonth(month)) {\n    issues.push('invalid-month');\n  }\n  if (day !== null && !isValidDay(year, month || 1, day)) {\n    issues.push('invalid-day');\n  }\n\n  const precision = determinePrecision(year, month, day, issues);\n\n  if (precision === 'unknown' && qualifierNames.length === 0) {\n    return {\n      success: false,\n      issues: unique(issues.concat('partial-no-match'))\n    };\n  }\n\n  let sortKey = null;\n  if (year != null && month != null && day != null) {\n    sortKey = makeSortKey(year, month, day);\n  } else if (year != null && month != null && options.partial?.inferMissingDay) {\n    const inferredDay = 1;\n    sortKey = makeSortKey(year, month, inferredDay);\n    issues.push('inferred-day');\n  } else if (year != null && day == null && month == null && options.partial?.inferMissingMonth) {\n    const inferredMonth = 1;\n    const inferredDay = options.partial?.inferMissingDay ? 1 : null;\n    if (inferredDay != null) {\n      sortKey = makeSortKey(year, inferredMonth, inferredDay);\n      issues.push('inferred-month');\n      issues.push('inferred-day');\n    }\n  }\n\n  const normalized = isoForPartial(year, month, day);\n\n  return {\n    success: true,\n    value: {\n      year,\n      month,\n      day\n    },\n    qualifiers: qualifierNames,\n    precision,\n    normalized,\n    sortKey,\n    issues: unique(issues)\n  };\n}\n\nexport default parsePartial;\n", "import { parseExact } from './exact.js';\nimport { parsePartial } from './partial.js';\nimport { toIsoString, mergeIssues, resolveAmbiguity } from '../utils/result-utils.js';\n\nfunction isNoise(token) {\n  return token.type === 'noise';\n}\n\nfunction isRangeMarker(token, subtype) {\n  return token && token.type === 'range-marker' && (!subtype || token.subtype === subtype);\n}\n\nfunction isHyphenSymbol(token) {\n  return token && token.type === 'symbol' && token.normalized.includes('-');\n}\n\nconst OPEN_START_QUALIFIERS = new Set(['after']);\nconst OPEN_END_QUALIFIERS = new Set(['before']);\nconst INCLUSIVE_START_WORDS = new Set(['since']);\nconst EXCLUSIVE_START_WORDS = new Set(['after']);\nconst EXCLUSIVE_END_WORDS = new Set(['before']);\nconst INCLUSIVE_END_WORDS = new Set([]);\n\nfunction isOpenStartToken(token) {\n  if (!token) return false;\n  if (isRangeMarker(token, 'openStart')) return true;\n  if (token.type === 'qualifier' && OPEN_START_QUALIFIERS.has(token.subtype)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isOpenEndToken(token) {\n  if (!token) return false;\n  if (isRangeMarker(token, 'openEnd')) return true;\n  if (token.type === 'qualifier' && OPEN_END_QUALIFIERS.has(token.subtype)) {\n    return true;\n  }\n  return false;\n}\n\nfunction dropLeading(tokens, predicate) {\n  let start = 0;\n  while (start < tokens.length && predicate(tokens[start])) {\n    start += 1;\n  }\n  return tokens.slice(start);\n}\n\nfunction dropTrailing(tokens, predicate) {\n  let end = tokens.length;\n  while (end > 0 && predicate(tokens[end - 1])) {\n    end -= 1;\n  }\n  return tokens.slice(0, end);\n}\n\nfunction cleanupBoundary(tokens) {\n  const cleaned = [];\n  for (const token of tokens) {\n    if (token.type === 'range-marker') {\n      continue;\n    }\n    if (token.type === 'symbol' && token.normalized.includes('-')) {\n      continue;\n    }\n    if (isNoise(token)) {\n      continue;\n    }\n    cleaned.push(token);\n  }\n  return cleaned;\n}\n\nfunction isJoinToken(token) {\n  return (\n    token &&\n    token.type === 'range-marker' &&\n    (token.subtype === 'boundedJoin' || token.subtype === 'boundedEnd')\n  );\n}\n\nfunction segmentRange(tokens, options) {\n  const defaultInclusivity = options?.ranges?.defaultInclusivity || { start: true, end: true };\n  const relevant = tokens.filter((token) => !isNoise(token));\n  if (relevant.length === 0) {\n    return null;\n  }\n\n  const first = relevant[0];\n\n  if (isOpenStartToken(first)) {\n    const remaining = cleanupBoundary(relevant.slice(1));\n    const inclusiveStart = !EXCLUSIVE_START_WORDS.has(first.lower) && !EXCLUSIVE_START_WORDS.has(first.normalized);\n    const inclusive = {\n      start: inclusiveStart || INCLUSIVE_START_WORDS.has(first.lower) || INCLUSIVE_START_WORDS.has(first.normalized),\n      end: defaultInclusivity.end\n    };\n    return {\n      kind: 'open-start',\n      startTokens: remaining,\n      endTokens: [],\n      inclusiveStart: inclusive.start,\n      inclusiveEnd: inclusive.end\n    };\n  }\n\n  if (isOpenEndToken(first)) {\n    const remaining = cleanupBoundary(relevant.slice(1));\n    const inclusiveEnd = INCLUSIVE_END_WORDS.has(first.lower) || INCLUSIVE_END_WORDS.has(first.normalized);\n    const exclusiveEnd = EXCLUSIVE_END_WORDS.has(first.lower) || EXCLUSIVE_END_WORDS.has(first.normalized);\n    const inclusive = {\n      start: defaultInclusivity.start,\n      end: exclusiveEnd ? false : inclusiveEnd || defaultInclusivity.end\n    };\n    return {\n      kind: 'open-end',\n      startTokens: [],\n      endTokens: remaining,\n      inclusiveStart: inclusive.start,\n      inclusiveEnd: inclusive.end\n    };\n  }\n\n  const joinIndex = relevant.findIndex((token) => isJoinToken(token));\n  if (joinIndex >= 0) {\n    const startTokens = cleanupBoundary(\n      dropTrailing(relevant.slice(0, joinIndex), (token) => isRangeMarker(token))\n    );\n    const endTokens = cleanupBoundary(dropLeading(relevant.slice(joinIndex + 1), (token) => isRangeMarker(token)));\n    return {\n      kind: 'bounded',\n      startTokens,\n      endTokens,\n      inclusiveStart: defaultInclusivity.start,\n      inclusiveEnd: defaultInclusivity.end\n    };\n  }\n\n  const hyphenIndex = relevant.findIndex((token) => isHyphenSymbol(token));\n  if (hyphenIndex >= 0) {\n    const startTokens = cleanupBoundary(relevant.slice(0, hyphenIndex));\n    const endTokens = cleanupBoundary(relevant.slice(hyphenIndex + 1));\n    return {\n      kind: 'bounded',\n      startTokens,\n      endTokens,\n      inclusiveStart: defaultInclusivity.start,\n      inclusiveEnd: defaultInclusivity.end\n    };\n  }\n\n  return null;\n}\n\nfunction parseBoundaryTokens(tokens, normalization, options) {\n  if (!tokens || tokens.length === 0) {\n    return {\n      type: 'none',\n      issues: [],\n      normalized: null,\n      sortKey: null\n    };\n  }\n\n  const exact = parseExact(tokens, normalization, options);\n  if (exact.candidates.length === 1) {\n    const candidate = exact.candidates[0];\n    return {\n      type: 'exact',\n      value: {\n        kind: 'exact',\n        year: candidate.year,\n        month: candidate.month,\n        day: candidate.day,\n        normalized: toIsoString(candidate.year, candidate.month, candidate.day),\n        precision: 'day',\n        qualifiers: []\n      },\n      sortKey: candidate.sortKey,\n  issues: mergeIssues(exact.issues, candidate.issues)\n    };\n  }\n\n  if (exact.candidates.length > 1) {\n    const candidates = exact.candidates.map((candidate) => ({\n      kind: 'exact',\n      year: candidate.year,\n      month: candidate.month,\n      day: candidate.day,\n      normalized: toIsoString(candidate.year, candidate.month, candidate.day),\n      precision: 'day',\n      qualifiers: [],\n      sortKey: candidate.sortKey,\n      issues: candidate.issues\n    }));\n    return {\n      type: 'ambiguous',\n      candidates,\n      issues: mergeIssues(exact.issues, ['range-bound-ambiguous'])\n    };\n  }\n\n  const partial = parsePartial(tokens, normalization, options);\n  if (partial.success) {\n    return {\n      type: 'partial',\n      value: {\n        kind: 'partial',\n        year: partial.value.year,\n        month: partial.value.month,\n        day: partial.value.day,\n        normalized: partial.normalized,\n        precision: partial.precision,\n        qualifiers: partial.qualifiers\n      },\n      sortKey: partial.sortKey,\n  issues: mergeIssues(partial.issues)\n    };\n  }\n\n  return {\n    type: 'invalid',\n    issues: mergeIssues(partial.issues, ['range-bound-invalid'])\n  };\n}\n\nfunction rangeNormalized(startValue, endValue) {\n  const startNorm = startValue?.normalized || null;\n  const endNorm = endValue?.normalized || null;\n  if (startNorm && endNorm) {\n    return `${startNorm}..${endNorm}`;\n  }\n  if (startNorm) {\n    return `${startNorm}..`;\n  }\n  if (endNorm) {\n    return `..${endNorm}`;\n  }\n  return null;\n}\n\nfunction applyBoundaryStrategy(boundary, options, localeOrders) {\n  if (boundary.type !== 'ambiguous') {\n    return boundary;\n  }\n\n  const resolution = resolveAmbiguity(boundary.candidates, options, { localeOrders });\n\n  if (resolution.type === 'ambiguous') {\n    return {\n      ...boundary,\n      issues: mergeIssues(boundary.issues, resolution.issues),\n      candidates: resolution.candidates\n    };\n  }\n\n  if (resolution.type === 'single' && resolution.candidate) {\n    const candidate = resolution.candidate;\n    return {\n      type: 'exact',\n      value: {\n        kind: 'exact',\n        year: candidate.year,\n        month: candidate.month,\n        day: candidate.day,\n        normalized: candidate.normalized ?? toIsoString(candidate.year, candidate.month, candidate.day),\n        precision: 'day',\n        qualifiers: []\n      },\n      sortKey: candidate.sortKey,\n      issues: mergeIssues(boundary.issues, resolution.issues),\n      meta: candidate.meta || {},\n      alternatives: resolution.alternateCandidates || null\n    };\n  }\n\n  return boundary;\n}\n\nexport function parseRange(tokens, normalization, options, classification = null, context = {}) {\n  const segments = segmentRange(tokens, options);\n  if (!segments) {\n    return {\n      success: false,\n      issues: ['range-no-match']\n    };\n  }\n\n  const localeOrders = context?.locale?.dayMonthOrder;\n\n  const startBoundaryRaw = parseBoundaryTokens(segments.startTokens, normalization, options);\n  const endBoundaryRaw = parseBoundaryTokens(segments.endTokens, normalization, options);\n\n  const startBoundary = applyBoundaryStrategy(startBoundaryRaw, options, localeOrders);\n  const endBoundary = applyBoundaryStrategy(endBoundaryRaw, options, localeOrders);\n\n  const issues = mergeIssues(\n    startBoundary.issues,\n    endBoundary.issues,\n    segments.kind === 'bounded' && (!segments.startTokens.length || !segments.endTokens.length)\n      ? ['range-bound-missing']\n      : []\n  );\n\n  if (startBoundary.type === 'invalid' || endBoundary.type === 'invalid') {\n    return {\n      success: false,\n      issues: issues.length ? issues : ['range-bound-invalid']\n    };\n  }\n\n  const value = {\n    start: startBoundary.value || null,\n    end: endBoundary.value || null,\n    inclusiveStart: segments.inclusiveStart,\n    inclusiveEnd: segments.inclusiveEnd\n  };\n\n  const normalizedRange = rangeNormalized(value.start, value.end);\n  const sortKey = startBoundary.sortKey ?? null;\n\n  const candidates = {};\n  if (startBoundary.type === 'ambiguous') {\n    candidates.start = startBoundary.candidates;\n  } else if (startBoundary.alternatives) {\n    candidates.start = startBoundary.alternatives;\n  }\n  if (endBoundary.type === 'ambiguous') {\n    candidates.end = endBoundary.candidates;\n  } else if (endBoundary.alternatives) {\n    candidates.end = endBoundary.alternatives;\n  }\n\n  return {\n    success: true,\n    value,\n    normalized: normalizedRange,\n    sortKey,\n    issues,\n    candidates,\n    startBoundary,\n    endBoundary\n  };\n}\n\nexport default parseRange;\n", "import { toIsoString } from './utils/result-utils.js';\n\nconst DEFAULT_RANGE_SEPARATOR = ' - ';\n\nfunction isCustomFormatter(options) {\n  const normalized = options?.normalizedFormat;\n  return normalized && normalized.style === 'custom' && typeof normalized.formatter === 'function';\n}\n\nfunction tryCustomFormatter(target, options, locale, context) {\n  if (!isCustomFormatter(options)) {\n    return null;\n  }\n  try {\n    const { normalizedFormat } = options;\n    return normalizedFormat.formatter(target, { locale, options, context }) ?? null;\n  } catch (error) {\n    return null;\n  }\n}\n\nfunction qualifierPrefix(qualifiers, options, locale) {\n  if (!Array.isArray(qualifiers) || qualifiers.length === 0) {\n    return '';\n  }\n  const include = options?.normalizedFormat?.options?.includeQualifiers;\n  if (include === false) {\n    return '';\n  }\n  const displayMap = locale?.qualifierDisplay || {};\n  const rendered = qualifiers\n    .map((qualifier) => displayMap[qualifier] || qualifier)\n    .filter((value) => typeof value === 'string' && value.trim().length > 0);\n  if (rendered.length === 0) {\n    return '';\n  }\n  return `${rendered.join(' ')} `;\n}\n\nfunction formatIsoValue(value) {\n  if (!value) {\n    return '';\n  }\n  if (typeof value.normalized === 'string' && value.normalized.length > 0) {\n    return value.normalized;\n  }\n  const { year, month, day } = value;\n  if (year != null && month != null && day != null) {\n    return toIsoString(year, month, day);\n  }\n  if (year != null && month != null) {\n    return `${String(year).padStart(4, '0')}-${String(month).padStart(2, '0')}`;\n  }\n  if (year != null) {\n    return String(year).padStart(4, '0');\n  }\n  if (month != null && day != null) {\n    return `--${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n  }\n  if (month != null) {\n    return `--${String(month).padStart(2, '0')}`;\n  }\n  if (day != null) {\n    return String(day).padStart(2, '0');\n  }\n  return '';\n}\n\nfunction getMonthName(locale, month, style) {\n  if (!locale || !locale.monthNames || month == null) {\n    return null;\n  }\n  const store = locale.monthNames;\n  const key = store[style] ? style : 'short';\n  const names = store[key];\n  if (!Array.isArray(names) || names.length < month) {\n    return null;\n  }\n  return names[month - 1];\n}\n\nfunction formatLocaleValue(value, options, locale) {\n  if (!value) {\n    return '';\n  }\n  const { year, month, day } = value;\n  const formatOptions = options?.normalizedFormat?.options || {};\n  const monthStyle = formatOptions.monthName || 'short';\n  const dayFirst = formatOptions.dayFirst === true;\n  const monthName = month != null ? getMonthName(locale, month, monthStyle) : null;\n  const monthText = monthName ?? (month != null ? String(month).padStart(2, '0') : '');\n  const dayText = day != null ? String(day).padStart(2, '0') : '';\n\n  if (year != null && month != null && day != null) {\n    if (dayFirst) {\n      return `${dayText} ${monthText} ${year}`.trim();\n    }\n    return `${monthText} ${dayText} ${year}`.trim();\n  }\n  if (year != null && month != null) {\n    return `${monthText} ${year}`.trim();\n  }\n  if (year != null) {\n    return String(year);\n  }\n  if (month != null && day != null) {\n    if (dayFirst) {\n      return `${dayText} ${monthText}`.trim();\n    }\n    return `${monthText} ${dayText}`.trim();\n  }\n  if (month != null) {\n    return monthText;\n  }\n  if (day != null) {\n    return dayText;\n  }\n  return '';\n}\n\nfunction formatValueCore(value, options, locale) {\n  if (!value) {\n    return '';\n  }\n  const custom = tryCustomFormatter({ type: 'value', value }, options, locale, 'value');\n  if (typeof custom === 'string') {\n    return custom;\n  }\n\n  const style = options?.normalizedFormat?.style || 'iso';\n  if (style === 'locale') {\n    return formatLocaleValue(value, options, locale);\n  }\n  return formatIsoValue(value);\n}\n\nfunction formatValueWithQualifiers(value, qualifiers, options, locale) {\n  const core = formatValueCore(value, options, locale);\n  if (!core) {\n    return core;\n  }\n  const prefix = qualifierPrefix(qualifiers || value?.qualifiers, options, locale);\n  return `${prefix}${core}`.trim();\n}\n\nfunction resolveRangeSeparator(options, locale) {\n  const custom = options?.normalizedFormat?.options?.rangeSeparator;\n  if (typeof custom === 'string' && custom.length > 0) {\n    return custom;\n  }\n  if (typeof locale?.rangeSeparator === 'string' && locale.rangeSeparator.length > 0) {\n    return locale.rangeSeparator;\n  }\n  return DEFAULT_RANGE_SEPARATOR;\n}\n\nfunction formatRangeValue(range, options, locale) {\n  if (!range) {\n    return '';\n  }\n  const custom = tryCustomFormatter({ type: 'range', value: range }, options, locale, 'range');\n  if (typeof custom === 'string') {\n    return custom;\n  }\n\n  const startText = range.start ? formatValueWithQualifiers(range.start, range.start?.qualifiers, options, locale) : '';\n  const endText = range.end ? formatValueWithQualifiers(range.end, range.end?.qualifiers, options, locale) : '';\n\n  if (startText && endText) {\n    return `${startText}${resolveRangeSeparator(options, locale)}${endText}`;\n  }\n  if (startText) {\n    return range.inclusiveStart === false ? `after ${startText}` : `since ${startText}`;\n  }\n  if (endText) {\n    return range.inclusiveEnd === false ? `before ${endText}` : `until ${endText}`;\n  }\n  return '';\n}\n\nfunction formatResultCore(result, options, locale) {\n  if (!result) {\n    return '';\n  }\n  const custom = tryCustomFormatter(result, options, locale, 'result');\n  if (typeof custom === 'string') {\n    return custom;\n  }\n\n  switch (result.kind) {\n    case 'exact':\n    case 'partial':\n      return formatValueWithQualifiers(result.value, result.qualifiers, options, locale);\n    case 'range':\n      return formatRangeValue(result.value, options, locale);\n    case 'ambiguous':\n      return '';\n    default:\n      return '';\n  }\n}\n\nfunction assignDisplayToCandidates(candidates, options, locale) {\n  if (!Array.isArray(candidates) || candidates.length === 0) {\n    return candidates;\n  }\n  return candidates.map((candidate) => ({\n    ...candidate,\n    display: formatValueWithQualifiers(candidate, candidate?.qualifiers, options, locale),\n    iso: isoStringForValue(candidate)\n  }));\n}\n\nfunction isoStringForValue(value) {\n  if (!value) {\n    return null;\n  }\n  const iso = formatIsoValue(value);\n  return iso && iso.length > 0 ? iso : null;\n}\n\nfunction isoStringForRange(range) {\n  if (!range) {\n    return null;\n  }\n  const startIso = isoStringForValue(range.start);\n  const endIso = isoStringForValue(range.end);\n  if (!startIso && !endIso) {\n    return null;\n  }\n  if (startIso && endIso) {\n    return `${startIso}/${endIso}`;\n  }\n  if (startIso) {\n    return `${startIso}/`;\n  }\n  return `/${endIso}`;\n}\n\nfunction isoStringForResult(result) {\n  if (!result) {\n    return null;\n  }\n  switch (result.kind) {\n    case 'exact':\n    case 'partial':\n      return isoStringForValue(result.value);\n    case 'range':\n      return isoStringForRange(result.value);\n    default:\n      return null;\n  }\n}\n\nexport function applyFormatting(result, options, locale) {\n  if (!result) {\n    return result;\n  }\n\n  const display = formatResultCore(result, options, locale);\n  if (display) {\n    result.display = display;\n  }\n\n  result.iso = isoStringForResult(result);\n\n  if ((result.kind === 'exact' || result.kind === 'partial') && result.value) {\n    result.value.display = formatValueWithQualifiers(result.value, result.qualifiers, options, locale);\n    result.value.iso = isoStringForValue(result.value);\n  }\n\n  if (result.kind === 'range' && result.value) {\n    if (result.value.start) {\n      result.value.start.display = formatValueWithQualifiers(result.value.start, result.value.start?.qualifiers, options, locale);\n      result.value.start.iso = isoStringForValue(result.value.start);\n    }\n    if (result.value.end) {\n      result.value.end.display = formatValueWithQualifiers(result.value.end, result.value.end?.qualifiers, options, locale);\n      result.value.end.iso = isoStringForValue(result.value.end);\n    }\n  }\n\n  if (result.kind === 'ambiguous' && Array.isArray(result.candidates)) {\n    result.candidates = assignDisplayToCandidates(result.candidates, options, locale);\n  }\n\n  if (Array.isArray(result.alternatives)) {\n    result.alternatives = assignDisplayToCandidates(result.alternatives, options, locale);\n  }\n\n  if (result.value?.start && Array.isArray(result.value.start.alternatives)) {\n    result.value.start.alternatives = assignDisplayToCandidates(result.value.start.alternatives, options, locale);\n  }\n  if (result.value?.end && Array.isArray(result.value.end.alternatives)) {\n    result.value.end.alternatives = assignDisplayToCandidates(result.value.end.alternatives, options, locale);\n  }\n\n  if (result.candidates?.start) {\n    result.candidates.start = assignDisplayToCandidates(result.candidates.start, options, locale);\n  }\n  if (result.candidates?.end) {\n    result.candidates.end = assignDisplayToCandidates(result.candidates.end, options, locale);\n  }\n\n  return result;\n}\n\nexport function formatResult(result, options, locale) {\n  return formatResultCore(result, options, locale);\n}\n\nexport function formatValueForOptions(value, options, locale) {\n  return formatValueWithQualifiers(value, value?.qualifiers, options, locale);\n}\n"],
  "mappings": "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",
  "names": ["DEFAULT_RANGE_SEPARATOR", "qualifiers", "result"]
}
