{"version":3,"sources":["../../src/i18n/server.ts","../../src/i18n/bridge.ts","../../src/i18n/runtime.ts","../../src/i18n/catalog.ts","../../src/i18n/config.ts","../../src/base-path.ts","../../src/i18n/routing.ts","../../src/i18n/resolver.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { FarmLocaleResolution } from \"./resolver\";\nimport { _setFarmI18nSnapshotResolver } from \"./bridge\";\nimport { FarmI18nRuntime, createFarmI18nRuntime } from \"./runtime\";\nimport type {\n  FarmI18nClientSnapshot,\n  FarmI18nLocale,\n  FarmI18nLocaleSource,\n  FarmI18nMessageArgs,\n  FarmI18nMessageKey,\n  FarmTranslator,\n} from \"./types\";\n\ninterface FarmI18nRequestState {\n  runtime: FarmI18nRuntime;\n  resolution: FarmLocaleResolution;\n  snapshot: FarmI18nClientSnapshot;\n}\n\ninterface FarmListFormatOptions {\n  localeMatcher?: \"lookup\" | \"best fit\";\n  type?: \"conjunction\" | \"disjunction\" | \"unit\";\n  style?: \"long\" | \"short\" | \"narrow\";\n}\n\nconst FARM_I18N_REQUEST_STORE = Symbol.for(\"farm.i18n.requestStore\");\nconst FARM_I18N_DEFAULT_RUNTIME = Symbol.for(\"farm.i18n.defaultRuntime\");\n\ntype GlobalFarmI18nState = typeof globalThis & {\n  [FARM_I18N_REQUEST_STORE]?: AsyncLocalStorage<FarmI18nRequestState>;\n  [FARM_I18N_DEFAULT_RUNTIME]?: FarmI18nRuntime;\n};\n\nfunction getRequestStore(): AsyncLocalStorage<FarmI18nRequestState> {\n  const state = globalThis as GlobalFarmI18nState;\n  return (state[FARM_I18N_REQUEST_STORE] ??= new AsyncLocalStorage<FarmI18nRequestState>());\n}\n\nfunction getState(): FarmI18nRequestState {\n  const state = getRequestStore().getStore();\n  if (!state) {\n    throw new Error(\n      \"No Farm i18n request context is active. Use this API while rendering, inside an API route, or use createTranslator(locale).\",\n    );\n  }\n  return state;\n}\n\nexport function _setDefaultFarmI18nRuntime(runtime: FarmI18nRuntime | undefined): void {\n  (globalThis as GlobalFarmI18nState)[FARM_I18N_DEFAULT_RUNTIME] = runtime;\n}\n\nexport async function _runWithFarmI18nRequest<T>(\n  runtime: FarmI18nRuntime,\n  request: Request,\n  fn: (resolution: FarmLocaleResolution) => T | Promise<T>,\n  options: { redirect?: boolean } = {},\n): Promise<T> {\n  const resolution = runtime.resolveRequest(request, options);\n  const state: FarmI18nRequestState = {\n    runtime,\n    resolution,\n    snapshot: runtime.getClientSnapshot(resolution),\n  };\n  return getRequestStore().run(state, () => fn(resolution));\n}\n\nexport async function runWithLocale<T>(\n  locale: FarmI18nLocale,\n  fn: () => T | Promise<T>,\n): Promise<T> {\n  const runtime = getDefaultRuntime();\n  assertLocale(runtime, locale);\n  const resolution: FarmLocaleResolution = {\n    locale,\n    source: \"explicit\",\n    pathname: \"/\",\n    persist: false,\n  };\n  const state: FarmI18nRequestState = {\n    runtime,\n    resolution,\n    snapshot: runtime.getClientSnapshot(resolution),\n  };\n  return getRequestStore().run(state, fn);\n}\n\nexport function getLocale(): FarmI18nLocale {\n  return getState().resolution.locale as FarmI18nLocale;\n}\n\nexport function getLocaleSource(): FarmI18nLocaleSource {\n  return getState().resolution.source;\n}\n\nexport const t = createTranslatorFromState(() => getState());\n\nexport function createTranslator(locale: FarmI18nLocale): FarmTranslator {\n  const runtime = getDefaultRuntime();\n  assertLocale(runtime, locale);\n  return createTranslatorFromState(() => ({\n    runtime,\n    resolution: {\n      locale,\n      source: \"explicit\",\n      pathname: \"/\",\n      persist: false,\n    },\n    snapshot: runtime.getClientSnapshot({\n      locale,\n      source: \"explicit\",\n      pathname: \"/\",\n      persist: false,\n    }),\n  }));\n}\n\nexport function getFarmI18nClientSnapshot(): FarmI18nClientSnapshot | undefined {\n  return getRequestStore().getStore()?.snapshot;\n}\n\nexport const format = {\n  number(value: number, options?: Intl.NumberFormatOptions): string {\n    return new Intl.NumberFormat(getLocale(), options).format(value);\n  },\n  currency(\n    value: number,\n    currency: string,\n    options: Omit<Intl.NumberFormatOptions, \"style\" | \"currency\"> = {},\n  ): string {\n    return new Intl.NumberFormat(getLocale(), {\n      ...options,\n      style: \"currency\",\n      currency,\n    }).format(value);\n  },\n  date(value: Date | number, options?: Intl.DateTimeFormatOptions): string {\n    return new Intl.DateTimeFormat(getLocale(), options).format(value);\n  },\n  relativeTime(\n    value: number,\n    unit: Intl.RelativeTimeFormatUnit,\n    options?: Intl.RelativeTimeFormatOptions,\n  ): string {\n    return new Intl.RelativeTimeFormat(getLocale(), options).format(value, unit);\n  },\n  list(values: Iterable<string>, options?: FarmListFormatOptions): string {\n    const ListFormat = (Intl as any).ListFormat;\n    return new ListFormat(getLocale(), options).format(Array.from(values));\n  },\n};\n\nfunction getDefaultRuntime(): FarmI18nRuntime {\n  const runtime = (globalThis as GlobalFarmI18nState)[FARM_I18N_DEFAULT_RUNTIME];\n  if (!runtime?.config.enabled) {\n    throw new Error(\"Farm i18n is not configured for this application.\");\n  }\n  return runtime;\n}\n\nfunction assertLocale(runtime: FarmI18nRuntime, locale: string): void {\n  if (!runtime.config.locales.includes(locale)) {\n    throw new Error(`Unsupported Farm i18n locale \"${locale}\".`);\n  }\n}\n\nfunction createTranslatorFromState(resolveState: () => FarmI18nRequestState): FarmTranslator {\n  const translator = ((key: string, values?: Record<string, unknown>) => {\n    const state = resolveState();\n    return state.runtime.translate(state.resolution.locale, key, values);\n  }) as FarmTranslator;\n  translator.rich = (key: string, values?: Record<string, unknown>) => {\n    const state = resolveState();\n    return state.runtime.translateRich(state.resolution.locale, key, values);\n  };\n  translator.raw = (key: string) => {\n    const state = resolveState();\n    return state.runtime.getRawMessage(state.resolution.locale, key);\n  };\n  translator.has = (key: string) => {\n    const state = resolveState();\n    return state.runtime.hasMessage(state.resolution.locale, key);\n  };\n  return translator;\n}\n\n_setFarmI18nSnapshotResolver(() => getFarmI18nClientSnapshot());\n\nexport { FarmI18nRuntime, createFarmI18nRuntime };\nexport type { FarmI18nClientSnapshot, FarmI18nLocale, FarmI18nMessageArgs, FarmI18nMessageKey };\n","import type { FarmI18nClientSnapshot } from \"./types\";\n\ntype SnapshotResolver = () => FarmI18nClientSnapshot | undefined;\n\nconst FARM_I18N_SNAPSHOT_RESOLVER = Symbol.for(\"farm.i18n.snapshotResolver\");\ntype GlobalWithI18nResolver = typeof globalThis & {\n  [FARM_I18N_SNAPSHOT_RESOLVER]?: SnapshotResolver;\n};\n\nexport function _setFarmI18nSnapshotResolver(resolver: SnapshotResolver | undefined): void {\n  (globalThis as GlobalWithI18nResolver)[FARM_I18N_SNAPSHOT_RESOLVER] = resolver;\n}\n\nexport function getActiveFarmI18nSnapshot(): FarmI18nClientSnapshot | undefined {\n  if (typeof window !== \"undefined\" && window.__FARM_I18N__) {\n    return window.__FARM_I18N__;\n  }\n  return (globalThis as GlobalWithI18nResolver)[FARM_I18N_SNAPSHOT_RESOLVER]?.();\n}\n","import IntlMessageFormat from \"intl-messageformat\";\nimport { readFarmI18nCatalogs } from \"./catalog\";\nimport { getFarmLocaleDirection } from \"./routing\";\nimport { resolveFarmLocaleRequest, type FarmLocaleResolution } from \"./resolver\";\nimport type { FarmI18nCatalogs, FarmI18nClientSnapshot, ResolvedFarmI18nConfig } from \"./types\";\n\nexport class FarmI18nRuntime {\n  readonly config: ResolvedFarmI18nConfig;\n  private catalogs: FarmI18nCatalogs;\n  private compiled = new Map<string, IntlMessageFormat>();\n  private warnedMissing = new Set<string>();\n\n  constructor(config: ResolvedFarmI18nConfig, catalogs: FarmI18nCatalogs = {}) {\n    this.config = config;\n    this.catalogs = catalogs;\n  }\n\n  async initialize(): Promise<void> {\n    if (!this.config.enabled) return;\n    const bundle = await readFarmI18nCatalogs(this.config);\n    this.replaceCatalogs(bundle.catalogs);\n  }\n\n  async reload(): Promise<void> {\n    await this.initialize();\n  }\n\n  replaceCatalogs(catalogs: FarmI18nCatalogs): void {\n    this.catalogs = catalogs;\n    this.compiled.clear();\n    this.warnedMissing.clear();\n  }\n\n  getCatalogs(): FarmI18nCatalogs {\n    return Object.fromEntries(\n      Object.entries(this.catalogs).map(([locale, catalog]) => [locale, { ...catalog }]),\n    );\n  }\n\n  resolveRequest(request: Request, options: { redirect?: boolean } = {}): FarmLocaleResolution {\n    return resolveFarmLocaleRequest(request, this.config, options);\n  }\n\n  translate(locale: string, key: string, values?: Record<string, unknown>): string {\n    const result = this.formatMessage(locale, key, values);\n    if (Array.isArray(result) && result.some((part) => typeof part !== \"string\")) {\n      throw new Error(`Farm i18n message \"${key}\" contains rich content. Render it with t.rich().`);\n    }\n    return Array.isArray(result) ? result.join(\"\") : String(result);\n  }\n\n  translateRich(locale: string, key: string, values?: Record<string, unknown>): unknown {\n    const result = this.formatMessage(locale, key, values);\n    return Array.isArray(result) && result.length === 1 ? result[0] : result;\n  }\n\n  getRawMessage(locale: string, key: string): string {\n    return this.resolveMessage(locale, key);\n  }\n\n  hasMessage(locale: string, key: string): boolean {\n    return this.readOwnMessage(locale, key) !== undefined;\n  }\n\n  getClientSnapshot(resolution: FarmLocaleResolution): FarmI18nClientSnapshot {\n    return {\n      locale: resolution.locale,\n      source: resolution.source,\n      locales: this.config.locales,\n      defaultLocale: this.config.defaultLocale,\n      routing: this.config.routing,\n      basePath: this.config.basePath,\n      cookie: this.config.cookie,\n      direction: getFarmLocaleDirection(resolution.locale, this.config.direction),\n      messages: {\n        ...this.catalogs[this.config.fallbackLocale],\n        ...this.catalogs[resolution.locale],\n      },\n    };\n  }\n\n  private formatMessage(locale: string, key: string, values?: Record<string, unknown>): unknown {\n    const message = this.resolveMessage(locale, key);\n    const cacheKey = `${locale}\\u0000${key}\\u0000${message}`;\n    let formatter = this.compiled.get(cacheKey);\n    if (!formatter) {\n      formatter = new IntlMessageFormat(message, locale);\n      this.compiled.set(cacheKey, formatter);\n    }\n    return formatter.format(values as any);\n  }\n\n  // Look up a message by own-property only. A key named after an\n  // Object.prototype member (toString, valueOf, constructor, ...) must resolve\n  // to a real catalog entry or undefined, never the inherited prototype value\n  // (mirrors the own-property handling added to catalog.ts in #454).\n  private readOwnMessage(locale: string, key: string): string | undefined {\n    const direct = this.catalogs[locale];\n    if (direct && Object.prototype.hasOwnProperty.call(direct, key)) return direct[key];\n    const fallback = this.catalogs[this.config.fallbackLocale];\n    if (fallback && Object.prototype.hasOwnProperty.call(fallback, key)) return fallback[key];\n    return undefined;\n  }\n\n  private resolveMessage(locale: string, key: string): string {\n    const message = this.readOwnMessage(locale, key);\n    if (message !== undefined) return message;\n    if (this.config.strict) {\n      throw new Error(`Missing Farm i18n message \"${key}\" for locale \"${locale}\".`);\n    }\n    const warningKey = `${locale}:${key}`;\n    if (!this.warnedMissing.has(warningKey)) {\n      this.warnedMissing.add(warningKey);\n      console.warn(`[Farm.js] Missing i18n message \"${key}\" for locale \"${locale}\".`);\n    }\n    return key;\n  }\n}\n\nexport function createFarmI18nRuntime(\n  config: ResolvedFarmI18nConfig,\n  catalogs?: FarmI18nCatalogs,\n): FarmI18nRuntime {\n  return new FarmI18nRuntime(config, catalogs);\n}\n","import { readFile } from \"node:fs/promises\";\nimport { TYPE, parse, type MessageFormatElement } from \"@formatjs/icu-messageformat-parser\";\nimport { resolveFarmI18nMessagePath } from \"./config\";\nimport type { FarmI18nCatalog, FarmI18nCatalogs, ResolvedFarmI18nConfig } from \"./types\";\n\nexport type FarmI18nArgumentKind = \"string\" | \"number\" | \"date\" | \"select\" | \"rich\";\nexport type FarmI18nMessageSignature = Record<string, FarmI18nArgumentKind>;\n\nexport interface FarmI18nCatalogBundle {\n  catalogs: FarmI18nCatalogs;\n  signatures: Record<string, FarmI18nMessageSignature>;\n}\n\nexport async function readFarmI18nCatalogs(\n  config: ResolvedFarmI18nConfig,\n): Promise<FarmI18nCatalogBundle> {\n  if (!config.enabled) {\n    return { catalogs: {}, signatures: {} };\n  }\n\n  const catalogs: FarmI18nCatalogs = {};\n  for (const locale of config.locales) {\n    const filePath = resolveFarmI18nMessagePath(config, locale);\n    let source: string;\n    try {\n      source = await readFile(filePath, \"utf8\");\n    } catch (error) {\n      throw new Error(\n        `Unable to read Farm i18n catalog for \"${locale}\" at ${filePath}: ${messageOf(error)}`,\n      );\n    }\n\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(source);\n    } catch (error) {\n      throw new Error(`Invalid JSON in Farm i18n catalog ${filePath}: ${messageOf(error)}`);\n    }\n    catalogs[locale] = flattenFarmI18nCatalog(parsed, filePath);\n  }\n\n  const reference = catalogs[config.defaultLocale] || {};\n  const signatures: Record<string, FarmI18nMessageSignature> = {};\n  for (const [key, message] of Object.entries(reference)) {\n    signatures[key] = analyzeFarmI18nMessage(message, `${config.defaultLocale}:${key}`);\n  }\n\n  validateFarmI18nCatalogs(config, catalogs, signatures);\n  return { catalogs, signatures };\n}\n\nexport function flattenFarmI18nCatalog(input: unknown, source = \"i18n catalog\"): FarmI18nCatalog {\n  if (!isPlainObject(input)) {\n    throw new Error(`${source} must contain a JSON object at its root.`);\n  }\n\n  const output: FarmI18nCatalog = {};\n  const visit = (value: unknown, segments: string[]) => {\n    if (typeof value === \"string\") {\n      const key = segments.join(\".\");\n      if (!key) throw new Error(`${source} contains an empty message key.`);\n      // Own-property check: `in` would see Object.prototype members, falsely\n      // rejecting legitimate keys like \"toString\" as duplicates.\n      if (Object.prototype.hasOwnProperty.call(output, key)) {\n        throw new Error(`${source} contains duplicate message key \"${key}\".`);\n      }\n      output[key] = value;\n      return;\n    }\n\n    if (!isPlainObject(value)) {\n      const key = segments.join(\".\") || \"<root>\";\n      throw new Error(`${source} message \"${key}\" must be a string or nested object.`);\n    }\n\n    for (const [key, nested] of Object.entries(value)) {\n      if (!key.trim()) throw new Error(`${source} contains an empty message key.`);\n      visit(nested, [...segments, key]);\n    }\n  };\n\n  visit(input, []);\n  return output;\n}\n\nexport function analyzeFarmI18nMessage(\n  message: string,\n  label = \"message\",\n): FarmI18nMessageSignature {\n  let ast: MessageFormatElement[];\n  try {\n    ast = parse(message, { captureLocation: false });\n  } catch (error) {\n    throw new Error(`Invalid ICU syntax in ${label}: ${messageOf(error)}`);\n  }\n\n  const signature: FarmI18nMessageSignature = {};\n  collectArguments(ast, signature, label);\n  return signature;\n}\n\nfunction validateFarmI18nCatalogs(\n  config: ResolvedFarmI18nConfig,\n  catalogs: FarmI18nCatalogs,\n  signatures: Record<string, FarmI18nMessageSignature>,\n): void {\n  const referenceKeys = Object.keys(catalogs[config.defaultLocale] || {}).sort();\n\n  for (const locale of config.locales) {\n    const catalog = catalogs[locale] || {};\n    const localeKeys = Object.keys(catalog).sort();\n    const missing = referenceKeys.filter(\n      (key) => !Object.prototype.hasOwnProperty.call(catalog, key),\n    );\n    const extra = localeKeys.filter(\n      (key) => !Object.prototype.hasOwnProperty.call(signatures, key),\n    );\n\n    if (config.strict && (missing.length > 0 || extra.length > 0)) {\n      const details = [\n        missing.length ? `missing: ${missing.join(\", \")}` : \"\",\n        extra.length ? `extra: ${extra.join(\", \")}` : \"\",\n      ]\n        .filter(Boolean)\n        .join(\"; \");\n      throw new Error(\n        `Farm i18n catalog \"${locale}\" does not match the default catalog (${details}).`,\n      );\n    }\n\n    for (const [key, message] of Object.entries(catalog)) {\n      const actual = analyzeFarmI18nMessage(message, `${locale}:${key}`);\n      const expected = signatures[key];\n      if (!expected || sameSignature(expected, actual)) continue;\n      throw new Error(\n        `Farm i18n message \"${key}\" in \"${locale}\" uses different variables than \"${config.defaultLocale}\".`,\n      );\n    }\n  }\n}\n\nfunction collectArguments(\n  elements: MessageFormatElement[],\n  signature: FarmI18nMessageSignature,\n  label: string,\n): void {\n  for (const element of elements) {\n    switch (element.type) {\n      case TYPE.argument:\n        addArgument(signature, element.value, \"string\", label);\n        break;\n      case TYPE.number:\n      case TYPE.plural:\n        addArgument(signature, element.value, \"number\", label);\n        break;\n      case TYPE.date:\n      case TYPE.time:\n        addArgument(signature, element.value, \"date\", label);\n        break;\n      case TYPE.select:\n        addArgument(signature, element.value, \"select\", label);\n        break;\n      case TYPE.tag:\n        addArgument(signature, element.value, \"rich\", label);\n        collectArguments(element.children, signature, label);\n        break;\n    }\n\n    if (element.type === TYPE.plural || element.type === TYPE.select) {\n      for (const option of Object.values(element.options)) {\n        collectArguments(option.value, signature, label);\n      }\n    }\n  }\n}\n\nfunction addArgument(\n  signature: FarmI18nMessageSignature,\n  name: string,\n  kind: FarmI18nArgumentKind,\n  label: string,\n): void {\n  const existing = signature[name];\n  if (existing && existing !== kind) {\n    throw new Error(`Farm i18n ${label} uses variable \"${name}\" as both ${existing} and ${kind}.`);\n  }\n  signature[name] = kind;\n}\n\nfunction sameSignature(\n  expected: FarmI18nMessageSignature,\n  actual: FarmI18nMessageSignature,\n): boolean {\n  const expectedEntries = Object.entries(expected).sort(([a], [b]) => a.localeCompare(b));\n  const actualEntries = Object.entries(actual).sort(([a], [b]) => a.localeCompare(b));\n  return JSON.stringify(expectedEntries) === JSON.stringify(actualEntries);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction messageOf(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n","import path from \"node:path\";\nimport type {\n  FarmI18nDetectionSignal,\n  FarmI18nDirection,\n  FarmI18nUserConfig,\n  ResolvedFarmI18nConfig,\n} from \"./types\";\n\nexport const DEFAULT_FARM_I18N_COOKIE = \"farm_locale\";\nexport const DEFAULT_FARM_I18N_COOKIE_MAX_AGE = 60 * 60 * 24 * 365;\n\nconst DEFAULT_DETECTION: readonly FarmI18nDetectionSignal[] = [\"url\", \"cookie\", \"accept-language\"];\n\nexport function resolveFarmI18nConfig(\n  input: FarmI18nUserConfig | false | undefined,\n  options: { root?: string; mode?: \"development\" | \"production\"; basePath?: string } = {},\n): ResolvedFarmI18nConfig {\n  const root = options.root || process.cwd();\n  const basePath = options.basePath || \"/\";\n  const strictByDefault = options.mode === \"production\";\n\n  if (!input) {\n    return {\n      enabled: false,\n      basePath,\n      locales: [\"en\"],\n      defaultLocale: \"en\",\n      messages: path.join(root, \"src/messages\"),\n      routing: \"none\",\n      detection: [],\n      fallbackLocale: \"en\",\n      strict: strictByDefault,\n      cookie: {\n        name: DEFAULT_FARM_I18N_COOKIE,\n        maxAge: DEFAULT_FARM_I18N_COOKIE_MAX_AGE,\n        path: \"/\",\n        sameSite: \"lax\",\n        secure: options.mode === \"production\",\n      },\n      direction: {},\n    };\n  }\n\n  if (!Array.isArray(input.locales) || input.locales.length === 0) {\n    throw new Error(\"i18n.locales must contain at least one locale.\");\n  }\n\n  const locales = input.locales.map(canonicalizeLocale);\n  if (new Set(locales).size !== locales.length) {\n    throw new Error(\"i18n.locales must not contain duplicate locales.\");\n  }\n\n  const defaultLocale = canonicalizeLocale(input.defaultLocale);\n  if (!locales.includes(defaultLocale)) {\n    throw new Error(`i18n.defaultLocale \"${defaultLocale}\" must be included in i18n.locales.`);\n  }\n\n  const fallbackLocale = canonicalizeLocale(input.fallbackLocale || defaultLocale);\n  if (!locales.includes(fallbackLocale)) {\n    throw new Error(`i18n.fallbackLocale \"${fallbackLocale}\" must be included in i18n.locales.`);\n  }\n\n  const detection = resolveDetection(input);\n  const sameSite = input.cookie?.sameSite ?? \"lax\";\n  if (sameSite !== \"lax\" && sameSite !== \"strict\" && sameSite !== \"none\") {\n    throw new Error('i18n.cookie.sameSite must be \"lax\", \"strict\", or \"none\".');\n  }\n  const direction: Record<string, FarmI18nDirection> = {};\n  for (const [rawLocale, value] of Object.entries(input.direction || {})) {\n    const locale = canonicalizeLocale(rawLocale);\n    if (!locales.includes(locale)) {\n      throw new Error(`i18n.direction contains unknown locale \"${rawLocale}\".`);\n    }\n    if (value !== \"ltr\" && value !== \"rtl\") {\n      throw new Error(`i18n.direction.${rawLocale} must be \"ltr\" or \"rtl\".`);\n    }\n    direction[locale] = value;\n  }\n\n  return {\n    enabled: true,\n    basePath,\n    locales,\n    defaultLocale,\n    messages: path.resolve(root, input.messages || \"src/messages\"),\n    routing: input.routing || \"prefix-except-default\",\n    detection,\n    fallbackLocale,\n    strict: input.strict ?? strictByDefault,\n    cookie: {\n      name: input.cookie?.name?.trim() || DEFAULT_FARM_I18N_COOKIE,\n      maxAge: normalizePositiveInteger(\n        input.cookie?.maxAge,\n        DEFAULT_FARM_I18N_COOKIE_MAX_AGE,\n        \"i18n.cookie.maxAge\",\n      ),\n      path: normalizeCookiePath(input.cookie?.path),\n      sameSite,\n      secure: input.cookie?.secure ?? options.mode === \"production\",\n    },\n    direction,\n  };\n}\n\nexport function resolveFarmI18nMessagePath(\n  config: Pick<ResolvedFarmI18nConfig, \"messages\">,\n  locale: string,\n): string {\n  return config.messages.includes(\"{locale}\")\n    ? config.messages.split(\"{locale}\").join(locale)\n    : path.join(config.messages, `${locale}.json`);\n}\n\nexport function isFarmI18nCatalogFile(\n  config: Pick<ResolvedFarmI18nConfig, \"enabled\" | \"messages\" | \"locales\">,\n  file: string,\n): boolean {\n  if (!config.enabled) return false;\n  const normalizedFile = file.replace(/\\\\/g, \"/\");\n  return config.locales.some(\n    (locale) => resolveFarmI18nMessagePath(config, locale).replace(/\\\\/g, \"/\") === normalizedFile,\n  );\n}\n\nexport function canonicalizeLocale(locale: string): string {\n  if (!locale || typeof locale !== \"string\") {\n    throw new Error(\"Farm i18n locales must be non-empty strings.\");\n  }\n\n  try {\n    return Intl.getCanonicalLocales(locale)[0]!;\n  } catch {\n    throw new Error(`Invalid i18n locale \"${locale}\".`);\n  }\n}\n\nfunction resolveDetection(input: FarmI18nUserConfig): readonly FarmI18nDetectionSignal[] {\n  if (input.detection === false || input.localeDetection === false) {\n    return [\"url\"];\n  }\n\n  const detection = input.detection || DEFAULT_DETECTION;\n  const allowed = new Set<FarmI18nDetectionSignal>([\"url\", \"cookie\", \"accept-language\"]);\n  const unique: FarmI18nDetectionSignal[] = [];\n\n  for (const signal of detection) {\n    if (!allowed.has(signal)) {\n      throw new Error(`Unsupported i18n detection signal \"${signal}\".`);\n    }\n    if (!unique.includes(signal)) unique.push(signal);\n  }\n\n  return unique;\n}\n\nfunction normalizePositiveInteger(\n  value: number | undefined,\n  fallback: number,\n  name: string,\n): number {\n  if (value === undefined) return fallback;\n  if (!Number.isInteger(value) || value < 0) {\n    throw new Error(`${name} must be a positive integer.`);\n  }\n  return value;\n}\n\nfunction normalizeCookiePath(value: string | undefined): string {\n  if (value === undefined) return \"/\";\n  if (typeof value !== \"string\") {\n    throw new Error(\"i18n.cookie.path must be a root-relative pathname.\");\n  }\n\n  const hasUnstableCharacters = (candidate: string) =>\n    candidate.includes(\"\\\\\") ||\n    Array.from(candidate).some((character) => {\n      const code = character.charCodeAt(0);\n      return code <= 31 || (code >= 127 && code <= 159);\n    });\n\n  if (hasUnstableCharacters(value)) {\n    throw new Error(\"i18n.cookie.path cannot contain backslashes or control characters.\");\n  }\n\n  const pathname = value.trim();\n  if (\n    !pathname ||\n    !pathname.startsWith(\"/\") ||\n    pathname.startsWith(\"//\") ||\n    pathname.includes(\";\") ||\n    pathname.includes(\"?\") ||\n    pathname.includes(\"#\")\n  ) {\n    throw new Error(\n      \"i18n.cookie.path must be a root-relative pathname without attributes, a query, or a hash.\",\n    );\n  }\n\n  for (const segment of pathname.split(\"/\")) {\n    let decoded = segment;\n    try {\n      decoded = decodeURIComponent(segment);\n    } catch {\n      // Malformed escapes remain literal and cannot conceal a separator or dot segment.\n    }\n    if (hasUnstableCharacters(decoded)) {\n      throw new Error(\"i18n.cookie.path cannot contain backslashes or control characters.\");\n    }\n    if (decoded.includes(\"/\")) {\n      throw new Error(\"i18n.cookie.path cannot contain percent-encoded path separators.\");\n    }\n    if (decoded === \".\" || decoded === \"..\") {\n      throw new Error('i18n.cookie.path cannot contain \".\" or \"..\" path segments.');\n    }\n  }\n\n  return pathname;\n}\n","const FARM_BASE_PATH = Symbol.for(\"farm.basePath\");\n\nfunction getFarmGlobalState(): Record<PropertyKey, unknown> {\n  return globalThis as unknown as Record<PropertyKey, unknown>;\n}\n\n/** @internal Configure the app-wide base path for framework link rendering. */\nexport function setFarmBasePath(basePath: string | undefined): void {\n  getFarmGlobalState()[FARM_BASE_PATH] = normalizeFarmBasePath(basePath);\n}\n\n/** @internal Read the app-wide base path used by framework links. */\nexport function getFarmBasePath(): string {\n  return (getFarmGlobalState()[FARM_BASE_PATH] as string | undefined) ?? \"\";\n}\n\nexport function applyFarmBasePath(href: string, basePath = getFarmBasePath()): string {\n  const normalizedBasePath = normalizeFarmBasePath(basePath);\n  if (!normalizedBasePath || !href.startsWith(\"/\") || href.startsWith(\"//\")) return href;\n  const canonicalHref = canonicalizeAppRelativeHref(href);\n  if (\n    canonicalHref === normalizedBasePath ||\n    canonicalHref.startsWith(`${normalizedBasePath}/`) ||\n    canonicalHref.startsWith(`${normalizedBasePath}?`) ||\n    canonicalHref.startsWith(`${normalizedBasePath}#`)\n  ) {\n    return canonicalHref;\n  }\n  return `${normalizedBasePath}${canonicalHref}`;\n}\n\nfunction canonicalizeAppRelativeHref(href: string): string {\n  const origin = \"http://farm.local\";\n  const resolved = new URL(href, origin);\n  if (resolved.origin !== origin) {\n    throw new Error(\"Farm app-relative href cannot change the URL origin.\");\n  }\n  return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nexport function stripFarmBasePath(pathname: string, basePath = getFarmBasePath()): string {\n  const normalizedBasePath = normalizeFarmBasePath(basePath);\n  if (!normalizedBasePath) return pathname || \"/\";\n  if (pathname === normalizedBasePath) return \"/\";\n  if (!pathname.startsWith(`${normalizedBasePath}/`)) return pathname || \"/\";\n  return pathname.slice(normalizedBasePath.length) || \"/\";\n}\n\nexport function normalizeFarmBasePath(basePath: string | undefined): string {\n  if (!basePath || basePath === \"/\") return \"\";\n\n  const hasUnstableCharacters = (candidate: string) =>\n    candidate.includes(\"\\\\\") ||\n    Array.from(candidate).some((character) => {\n      const code = character.charCodeAt(0);\n      return code <= 31 || (code >= 127 && code <= 159);\n    });\n\n  if (hasUnstableCharacters(basePath)) {\n    throw new Error(\"Farm basePath cannot contain backslashes or control characters.\");\n  }\n\n  const pathname = basePath.trim();\n  if (!pathname || pathname === \"/\") return \"\";\n  if (pathname.includes(\"?\") || pathname.includes(\"#\")) {\n    throw new Error(\"Farm basePath cannot contain a query string or hash.\");\n  }\n  if (pathname.startsWith(\"//\") || /^[a-z][a-z\\d+.-]*:\\/\\//i.test(pathname)) {\n    throw new Error('Farm basePath must be a pathname such as \"/docs\", not a URL.');\n  }\n\n  for (const segment of pathname.split(\"/\")) {\n    let decoded = segment;\n    try {\n      decoded = decodeURIComponent(segment);\n    } catch {\n      // Malformed escapes remain literal in URL pathnames and cannot be dot segments.\n    }\n    if (hasUnstableCharacters(decoded)) {\n      throw new Error(\"Farm basePath cannot contain backslashes or control characters.\");\n    }\n    if (decoded.includes(\"/\")) {\n      throw new Error(\"Farm basePath cannot contain percent-encoded path separators.\");\n    }\n    if (decoded === \".\" || decoded === \"..\") {\n      throw new Error('Farm basePath cannot contain \".\" or \"..\" path segments.');\n    }\n  }\n\n  return `/${pathname}`.replace(/\\/{2,}/g, \"/\").replace(/\\/+$/, \"\");\n}\n\n/** Normalize a configured application base path while preserving `/` for root. */\nexport function normalizeFarmConfigBasePath(basePath: string | undefined): string {\n  return normalizeFarmBasePath(basePath) || \"/\";\n}\n","import { applyFarmBasePath, stripFarmBasePath } from \"../base-path\";\nimport type { FarmI18nDirection, FarmI18nRouting, ResolvedFarmI18nConfig } from \"./types\";\n\nexport interface FarmLocalePathConfig {\n  locales: readonly string[];\n  defaultLocale: string;\n  routing: FarmI18nRouting;\n  basePath?: string;\n}\n\nexport interface FarmLocalePathMatch {\n  locale?: string;\n  pathname: string;\n  explicit: boolean;\n}\n\nconst RTL_LANGUAGES = new Set([\n  \"ar\",\n  \"arc\",\n  \"ckb\",\n  \"dv\",\n  \"fa\",\n  \"he\",\n  \"ku\",\n  \"nqo\",\n  \"ps\",\n  \"sd\",\n  \"syr\",\n  \"ug\",\n  \"ur\",\n  \"yi\",\n]);\n\nexport function resolveFarmLocalePath(\n  pathname: string,\n  config: FarmLocalePathConfig,\n): FarmLocalePathMatch {\n  const normalized = normalizePathname(stripFarmBasePath(pathname, config.basePath));\n  if (config.routing === \"none\") {\n    return { pathname: normalized, explicit: false };\n  }\n\n  const segments = normalized.split(\"/\").filter(Boolean);\n  const firstSegment = segments[0];\n  const locale = config.locales.find(\n    (candidate) => candidate.toLowerCase() === firstSegment?.toLowerCase(),\n  );\n  if (!locale) {\n    return { pathname: normalized, explicit: false };\n  }\n\n  const remaining = segments.slice(1);\n  return {\n    locale,\n    pathname: remaining.length > 0 ? `/${remaining.join(\"/\")}` : \"/\",\n    explicit: true,\n  };\n}\n\nexport function stripFarmLocaleFromPathname(\n  pathname: string,\n  config: FarmLocalePathConfig,\n): string {\n  return resolveFarmLocalePath(pathname, config).pathname;\n}\n\nexport function localizeFarmPathname(\n  pathname: string,\n  locale: string,\n  config: FarmLocalePathConfig,\n): string {\n  const internalPathname = resolveFarmLocalePath(pathname, config).pathname;\n  let localizedPathname = internalPathname;\n  if (config.routing === \"none\") {\n    return applyFarmBasePath(localizedPathname, config.basePath);\n  }\n  if (config.routing === \"prefix-except-default\" && locale === config.defaultLocale) {\n    return applyFarmBasePath(localizedPathname, config.basePath);\n  }\n  localizedPathname = internalPathname === \"/\" ? `/${locale}` : `/${locale}${internalPathname}`;\n  return applyFarmBasePath(localizedPathname, config.basePath);\n}\n\nexport function localizeFarmHref(\n  href: string,\n  locale: string,\n  config: FarmLocalePathConfig,\n): string {\n  if (!href.startsWith(\"/\") || href.startsWith(\"//\")) return href;\n  const url = new URL(href, \"http://farm.local\");\n  url.pathname = localizeFarmPathname(url.pathname, locale, config);\n  return `${url.pathname}${url.search}${url.hash}`;\n}\n\nexport function getFarmLocaleDirection(\n  locale: string,\n  direction: ResolvedFarmI18nConfig[\"direction\"] | undefined,\n): FarmI18nDirection {\n  const configured = direction?.[locale];\n  if (configured) return configured;\n  const language = locale.split(\"-\")[0]?.toLowerCase() || locale.toLowerCase();\n  return RTL_LANGUAGES.has(language) ? \"rtl\" : \"ltr\";\n}\n\nfunction normalizePathname(pathname: string): string {\n  const withLeadingSlash = pathname.startsWith(\"/\") ? pathname : `/${pathname}`;\n  if (withLeadingSlash === \"/\") return \"/\";\n  return withLeadingSlash.replace(/\\/{2,}/g, \"/\").replace(/\\/$/, \"\") || \"/\";\n}\n","import { localizeFarmPathname, resolveFarmLocalePath } from \"./routing\";\nimport { stripFarmBasePath } from \"../base-path\";\nimport type { FarmI18nLocaleSource, ResolvedFarmI18nConfig } from \"./types\";\n\nexport interface FarmLocaleResolution {\n  locale: string;\n  source: FarmI18nLocaleSource;\n  pathname: string;\n  redirect?: string;\n  persist: boolean;\n}\n\nexport function getFarmLocaleVaryHeaders(\n  config: ResolvedFarmI18nConfig,\n  resolution: FarmLocaleResolution,\n): string[] {\n  if (!config.enabled || resolution.source === \"url\") return [];\n\n  const headers: string[] = [];\n  if (config.detection.includes(\"cookie\")) headers.push(\"Cookie\");\n  if (config.detection.includes(\"accept-language\")) headers.push(\"Accept-Language\");\n  return headers;\n}\n\nexport function resolveFarmLocaleRequest(\n  request: Request,\n  config: ResolvedFarmI18nConfig,\n  options: { redirect?: boolean } = {},\n): FarmLocaleResolution {\n  const url = new URL(request.url);\n  if (!config.enabled) {\n    return {\n      locale: config.defaultLocale,\n      source: \"default\",\n      pathname: url.pathname,\n      persist: false,\n    };\n  }\n\n  const pathMatch = resolveFarmLocalePath(url.pathname, config);\n  if (pathMatch.explicit && pathMatch.locale) {\n    const canonicalPath = localizeFarmPathname(pathMatch.pathname, pathMatch.locale, config);\n    // The locale canonical is always trailing-slash-free, but the app's dedicated\n    // trailing-slash redirect owns that normalization. When the only difference is\n    // a trailing slash, defer to it: otherwise, under trailingSlash: true, the i18n\n    // redirect (strip) and the trailing-slash redirect (add) bounce a locale URL\n    // between 307 and 308 forever and every locale page becomes unreachable.\n    const differsOnlyByTrailingSlash =\n      canonicalPath !== url.pathname &&\n      (url.pathname.length > 1 ? url.pathname.replace(/\\/+$/, \"\") : url.pathname) === canonicalPath;\n    const redirect =\n      options.redirect !== false && canonicalPath !== url.pathname && !differsOnlyByTrailingSlash\n        ? `${canonicalPath}${url.search}${url.hash}`\n        : undefined;\n    return {\n      locale: pathMatch.locale,\n      source: \"url\",\n      pathname: pathMatch.pathname,\n      redirect,\n      // Locale-prefixed pages are canonical and can be cached publicly. Locale\n      // switchers persist the same choice before navigating in the browser.\n      persist: false,\n    };\n  }\n\n  const detected = detectLocale(request, config);\n  const shouldRedirect =\n    options.redirect !== false &&\n    !isInternalOrApiPath(stripFarmBasePath(url.pathname, config.basePath)) &&\n    config.routing !== \"none\" &&\n    (config.routing === \"prefix-always\" || detected.locale !== config.defaultLocale);\n\n  return {\n    locale: detected.locale,\n    source: detected.source,\n    pathname: pathMatch.pathname,\n    redirect: shouldRedirect\n      ? `${localizeFarmPathname(pathMatch.pathname, detected.locale, config)}${url.search}${url.hash}`\n      : undefined,\n    persist: detected.source !== \"default\",\n  };\n}\n\nexport function createFarmLocaleCookie(\n  locale: string,\n  config: Pick<ResolvedFarmI18nConfig, \"cookie\">,\n): string {\n  const cookie = config.cookie;\n  let value = `${encodeURIComponent(cookie.name)}=${encodeURIComponent(locale)}`;\n  value += `; Max-Age=${cookie.maxAge}`;\n  value += `; Path=${cookie.path}`;\n  value += `; SameSite=${capitalize(cookie.sameSite)}`;\n  if (cookie.secure) value += \"; Secure\";\n  return value;\n}\n\nexport function matchFarmLocale(\n  requested: string | null | undefined,\n  locales: readonly string[],\n): string | undefined {\n  if (!requested) return undefined;\n  let canonical: string;\n  try {\n    canonical = Intl.getCanonicalLocales(requested)[0]!;\n  } catch {\n    return undefined;\n  }\n\n  const exact = locales.find((locale) => locale.toLowerCase() === canonical.toLowerCase());\n  if (exact) return exact;\n\n  const language = canonical.split(\"-\")[0]?.toLowerCase();\n  const base = locales.find((locale) => locale.toLowerCase() === language);\n  if (base) return base;\n  return locales.find((locale) => locale.split(\"-\")[0]?.toLowerCase() === language);\n}\n\nfunction detectLocale(\n  request: Request,\n  config: ResolvedFarmI18nConfig,\n): { locale: string; source: FarmI18nLocaleSource } {\n  for (const signal of config.detection) {\n    if (signal === \"url\") continue;\n\n    if (signal === \"cookie\") {\n      const locale = matchFarmLocale(\n        readCookie(request.headers.get(\"cookie\"), config.cookie.name),\n        config.locales,\n      );\n      if (locale) return { locale, source: \"cookie\" };\n    }\n\n    if (signal === \"accept-language\") {\n      const locale = resolveAcceptLanguage(request.headers.get(\"accept-language\"), config.locales);\n      if (locale) return { locale, source: \"accept-language\" };\n    }\n  }\n\n  return { locale: config.defaultLocale, source: \"default\" };\n}\n\nfunction resolveAcceptLanguage(\n  header: string | null,\n  locales: readonly string[],\n): string | undefined {\n  if (!header) return undefined;\n\n  const byRange = new Map<string, { locale: string; quality: number; index: number }>();\n  for (const [index, entry] of header.split(\",\").entries()) {\n    const [rawLocale = \"\", ...parameters] = entry.trim().split(\";\");\n    const locale = rawLocale.trim();\n    if (!locale) continue;\n\n    let quality = 1;\n    for (const parameter of parameters) {\n      const [rawName, rawValue] = parameter.trim().split(\"=\", 2);\n      if (rawName?.trim().toLowerCase() !== \"q\") continue;\n      const value = rawValue?.trim() ?? \"\";\n      quality = /^(?:0(?:\\.\\d{0,3})?|1(?:\\.0{0,3})?)$/.test(value) ? Number(value) : 0;\n    }\n\n    const key = locale.toLowerCase();\n    const previous = byRange.get(key);\n    if (!previous || quality > previous.quality) {\n      byRange.set(key, { locale, quality, index: previous?.index ?? index });\n    }\n  }\n\n  const candidates = [...byRange.values()]\n    .filter((candidate) => candidate.quality > 0)\n    .sort((a, b) => b.quality - a.quality || a.index - b.index);\n  const explicitRanges = [...byRange.values()].filter(({ locale }) => locale !== \"*\");\n\n  for (const candidate of candidates) {\n    if (candidate.locale === \"*\") {\n      const wildcardMatch = locales.find(\n        (locale) =>\n          !explicitRanges.some((range) => matchFarmLocale(range.locale, [locale]) !== undefined),\n      );\n      if (wildcardMatch) return wildcardMatch;\n      continue;\n    }\n\n    const locale = matchFarmLocale(candidate.locale, locales);\n    if (locale) return locale;\n  }\n  return undefined;\n}\n\nfunction readCookie(header: string | null, name: string): string | undefined {\n  if (!header) return undefined;\n  for (const part of header.split(\";\")) {\n    const separator = part.indexOf(\"=\");\n    if (separator < 0) continue;\n    let key: string;\n    try {\n      key = decodeURIComponent(part.slice(0, separator).trim());\n    } catch {\n      continue;\n    }\n    if (key !== name) continue;\n    try {\n      return decodeURIComponent(part.slice(separator + 1).trim());\n    } catch {\n      return part.slice(separator + 1).trim();\n    }\n  }\n  return undefined;\n}\n\nfunction isInternalOrApiPath(pathname: string): boolean {\n  return (\n    pathname === \"/api\" ||\n    pathname.startsWith(\"/api/\") ||\n    pathname.startsWith(\"/__farm/\") ||\n    pathname.startsWith(\"/_farm/\")\n  );\n}\n\nfunction capitalize(value: string): string {\n  return value.charAt(0).toUpperCase() + value.slice(1);\n}\n"],"mappings":"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","names":["path","locale","IntlMessageFormat"]}