{"version":3,"sources":["../src/renderer.ts","../src/routing/specificity.ts","../src/search-params.ts","../src/utils/decode.ts","../src/utils.ts","../src/storage/index.ts","../src/schema.ts","../src/base-path.ts","../src/i18n/routing.ts","../src/plugins/route-pattern.ts","../src/request-origin.ts","../src/integration-request-security.ts","../src/integration-api.ts","../src/plugin-integration-context.ts","../src/request-context.ts","../src/server/response.ts","../src/server-http.ts","../src/integration-orm.ts","../src/integrations.ts","../src/app-markdown-config.ts","../src/markdown.ts","../src/secret-compare.ts","../src/utils/runtime-env.ts","../src/workflows.ts","../src/cron.ts","../src/tracing.ts","../src/observability.ts","../src/navigation-errors.ts","../src/route-runtime.ts","../src/route-rules.ts","../src/cache-invalidation.ts","../src/server-fn-error.ts","../src/server-action-security.ts","../src/image-config.ts","../src/layers.ts","../src/ssg.ts","../src/route-call-scanner.ts","../src/routes-shared.ts","../src/i18n/bridge.ts","../src/cache.ts","../src/route-context.ts","../src/routes.ts","../src/routes.server.ts","../src/app-markdown.ts","../src/island.ts","../src/utils/client-component.ts","../src/navigation/render-plan.ts","../src/static-metadata-image.ts","../src/redirect-query.ts","../src/routing/route-slots.ts","../src/routing/route-manager.ts","../src/server/dev-styles.ts","../src/server/full-document.ts","../src/middleware/server.ts","../src/server/request-bridge.ts","../src/server/request.ts","../src/not-found.ts","../src/agent-config.ts","../src/metadata.ts","../src/deferred.ts","../src/deployment.ts","../src/i18n/config.ts","../src/i18n/catalog.ts","../src/i18n/resolver.ts","../src/i18n/runtime.ts","../src/i18n/server.ts","../src/font-vite.ts","../src/response-body.ts","../src/metadata-image.ts","../src/metadata-route.ts","../src/trailing-slash.ts","../src/components/not-found-styles.ts","../src/components/error-styles.ts","../src/components/error-page.ts","../src/theme/config.ts","../src/theme/server-runtime.ts","../src/theme/bridge.ts","../src/theme/server.ts","../package.json","../src/version.ts","../src/server/error-diagnostics.ts","../src/client/isolated-boundary.ts","../src/renderer/react/server.ts","../src/server/renderer.ts","../src/devtools-config.ts","../src/dev-indicators.ts","../src/auth-config.ts","../src/preload.ts","../src/security.ts","../src/api/config.ts","../src/app.ts","../src/env.ts","../src/default-styles.ts","../src/client-plugin-build.ts","../src/client-cache-persistence-build.ts","../src/api/transport.ts","../src/api/endpoint.ts","../src/api/route.ts","../src/api/route-shape.ts","../src/api/plugin-route-runtime.ts","../src/api/server-path.ts","../src/api/route-schema.ts","../src/api/route-pattern.ts","../src/api/runtime.ts","../src/api/route-files.ts","../src/api/route-manager.ts","../src/middleware/cookie-header.ts","../src/middleware/context.ts","../src/middleware/module.ts","../src/cli-colors.ts","../src/middleware/path.ts","../src/middleware/manager.ts","../src/write-file-if-changed.ts","../src/type-generator.ts","../src/routing/generate-route-types.ts","../src/env-types.ts","../src/image-types.ts","../src/content-types.ts","../src/i18n/type-generator.ts","../src/type-artifacts.ts","../src/environment-vite.ts","../src/after.ts","../src/api/server-client-bridge.ts","../src/api/server-context.ts","../src/dev-static.ts","../src/server-query-boundary.ts","../src/client-boundary-env.ts","../src/image-vite.ts","../src/font.ts","../src/image-server.ts","../src/server/vite-config.ts","../src/docs/fonts.ts","../src/theme/vite.ts","../src/integration-provider-build.ts","../src/navigation/page-data-error.ts","../src/plugins/rewrites.ts","../src/openapi/dev-status.ts","../src/client/document-head.ts","../src/docs/last-modified.ts","../src/docs/search-client.ts","../src/docs/social-image.ts","../src/docs/handler.ts","../src/docs/adapter.ts","../src/docs/framework-detect.ts","../src/config-entry.ts","../src/config.ts","../src/docs/api.ts","../src/docs/index.ts","../src/openapi/generator.ts","../src/openapi/manager.ts","../src/devtools.ts","../src/devtools-ui.ts","../src/devtools-client.ts","../src/image-sharp.ts","../src/vite.ts","../src/plugin.ts","../src/nitro/index.ts","../src/index.ts","../src/schema-sql.ts","../src/schema-migrate.ts","../src/schema-tables.ts","../src/provider.tsx","../src/hmr.ts","../src/plugins/redirects.ts","../src/plugins/headers.ts","../src/plugins/index.ts","../src/plugins/env.ts","../src/plugins/compression.ts","../src/plugins/logger.ts","../src/api/index.ts","../src/integration-client.ts","../src/client-headers.ts","../src/client-cancellation.ts","../src/client-observers.ts","../src/client-cache.ts","../src/api/client.ts","../src/api/client-routes.ts","../src/api/vite-plugin.ts","../src/openapi/index.ts","../src/openapi/scalar-component.tsx","../src/openapi/docs-route.tsx","../src/query/parsers.ts","../src/query/params.ts","../src/middleware/chain.ts","../src/middleware/index.ts","../src/middleware/helpers.ts","../src/middleware/production-runtime.ts","../src/middleware/vite-plugin.ts","../src/router.ts","../src/theme/index.ts","../src/environment.ts","../src/server-fn.ts","../src/server-fn-client.ts","../src/mutation-retry.ts","../src/server-query.ts","../src/server-query-protocol.ts","../src/server-query-client.ts","../src/client-revalidation.ts","../src/server-query-runtime.ts","../src/build/index.ts","../src/nitro/universal-build.ts","../src/nitro/client-css-href.ts","../src/route-runtime-manifest.ts","../src/nitro/vercel-route-runtime.ts","../src/nitro/vercel-assets.ts","../src/nitro/node-server-entry.ts","../src/build/production-vite.ts","../src/build/vite-plugin-compat.ts","../src/instrumentation.ts","../src/build/production-node-env.ts","../src/mutation-client.ts","../src/client-network-status.ts","../src/fetcher-client.tsx","../src/cache-invalidation-broadcast.ts","../src/client-cache-persistence.ts","../src/client.ts","../src/store.ts","../src/theme/client.tsx","../src/theme/runtime.ts","../src/client/link.tsx","../src/client/navigation-url.ts","../src/i18n/client-runtime.ts","../src/client/router.ts","../src/client/spa-router.ts","../src/client/history-sync.ts","../src/client/hash-target.ts","../src/client/metadata-reconciler.ts","../src/client/chunk-recovery.ts","../src/client/runtime-error-overlay.ts","../src/client/plugin.ts","../src/navigation.ts","../src/headers.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\n/**\n * A rendering-library integration used by Farm's compiler, server renderer,\n * and browser hydration runtime.\n *\n * Renderer descriptors intentionally contain module identifiers instead of\n * implementation functions. This keeps farm.config.ts serializable and lets\n * every module resolve from the application that selected the renderer.\n */\nexport interface FarmRenderer {\n  /** Stable public identifier used in diagnostics and generated manifests. */\n  name: string;\n  /** Module exporting the renderer's Vite plugin factory. */\n  vite: string;\n  /** Module exporting Farm's server-renderer compatibility contract. */\n  server: string;\n  /** Module exporting Farm's browser-renderer compatibility contract. */\n  client: string;\n  /** JSX import source written to generated TypeScript configuration. */\n  jsxImportSource?: string;\n  /** Additional file extensions used for renderer-owned route components. */\n  componentExtensions?: readonly string[];\n  /** Packages that must share one module instance in a Farm application. */\n  dedupe?: readonly string[];\n  /** Renderer packages seeded into Vite's dependency optimizer. */\n  optimizeDeps?: readonly string[];\n  /**\n   * Scheduling policy for the production client and SSR graphs.\n   *\n   * Most renderer plugins are safe to run in parallel. Renderers whose\n   * compiler plugins keep process-global mutable state can opt into serial\n   * builds so one graph cannot invalidate the other's transforms.\n   */\n  buildConcurrency?: \"parallel\" | \"serial\";\n  /** Runtime features this renderer intentionally supports. */\n  capabilities?: FarmRendererCapabilitiesInput;\n  /**\n   * Serializable options consumed by the renderer's Vite integration.\n   *\n   * Keeping renderer-owned configuration on the descriptor lets one rendering\n   * library expose multiple compiler modes without teaching Farm's core about\n   * each option.\n   */\n  options?: Readonly<Record<string, unknown>>;\n}\n\nexport interface FarmRendererStreamingCapabilities {\n  /** Supports Node.js writable streams through renderToPipeableStream(). */\n  node: boolean;\n  /** Supports WHATWG ReadableStream output through renderToReadableStream(). */\n  web: boolean;\n}\n\nexport interface FarmRendererCapabilities {\n  streaming: FarmRendererStreamingCapabilities;\n  /**\n   * Whether re-rendering an existing root diffs the new tree against the live\n   * DOM instead of rebuilding it.\n   *\n   * Virtual-DOM renderers (React, Preact, Vue) compare the incoming tree with\n   * what is mounted, so a client navigation that re-renders a shared layout\n   * keeps the matching DOM nodes, their focus, and their component state.\n   *\n   * Compile-time fine-grained renderers (Solid, Svelte) have no virtual DOM to\n   * diff against. Their updates flow through bindings created when elements\n   * were constructed, so handing them a freshly materialized tree replaces the\n   * nodes. That is a property of those runtimes, not a gap in their adapters,\n   * and callers that need state to survive a re-render must keep it in a root\n   * they do not re-render rather than expect reconciliation here.\n   */\n  reconcilesRerenders: boolean;\n}\n\nexport interface FarmRendererCapabilitiesInput {\n  streaming?: Partial<FarmRendererStreamingCapabilities>;\n  reconcilesRerenders?: boolean;\n}\n\nconst DEFAULT_RENDERER_CAPABILITIES: Readonly<FarmRendererCapabilities> = Object.freeze({\n  streaming: Object.freeze({ node: false, web: false }),\n  // Conservative default: assume a re-render rebuilds until a renderer states\n  // otherwise, so callers do not silently rely on reconciliation.\n  reconcilesRerenders: false,\n});\n\nexport function getFarmRendererCapabilities(\n  renderer?: Pick<FarmRenderer, \"capabilities\">,\n): FarmRendererCapabilities {\n  return {\n    streaming: {\n      node: renderer?.capabilities?.streaming?.node ?? DEFAULT_RENDERER_CAPABILITIES.streaming.node,\n      web: renderer?.capabilities?.streaming?.web ?? DEFAULT_RENDERER_CAPABILITIES.streaming.web,\n    },\n    reconcilesRerenders:\n      renderer?.capabilities?.reconcilesRerenders ??\n      DEFAULT_RENDERER_CAPABILITIES.reconcilesRerenders,\n  };\n}\n\nexport const FARM_COMPONENT_EXTENSIONS = [\".ts\", \".tsx\", \".js\", \".jsx\"] as const;\n\nexport function resolveFarmComponentExtensions(extensions: readonly string[] = []): string[] {\n  return Array.from(\n    new Set(\n      [...FARM_COMPONENT_EXTENSIONS, ...extensions].map((extension) => {\n        const normalized = extension.trim().toLowerCase();\n        return normalized.startsWith(\".\") ? normalized : `.${normalized}`;\n      }),\n    ),\n  ).filter((extension) => extension.length > 1);\n}\n\nexport function getFarmRendererComponentExtensions(\n  renderer?: Pick<FarmRenderer, \"componentExtensions\">,\n): string[] {\n  return resolveFarmComponentExtensions(renderer?.componentExtensions);\n}\n\nexport interface FarmRendererViteModule {\n  createFarmRendererPlugin(options?: {\n    ssr?: boolean;\n    rendererOptions?: Readonly<Record<string, unknown>>;\n  }): unknown | readonly unknown[] | Promise<unknown | readonly unknown[]>;\n}\n\nexport interface FarmServerRendererRuntime {\n  readonly name: string;\n  readonly Fragment: unknown;\n  readonly Suspense: unknown;\n  createElement(type: unknown, props?: unknown, ...children: unknown[]): unknown;\n  isValidElement(value: unknown): boolean;\n  /** Wraps a route-owned client tree so compiled leaf boundaries stay inside that React root. */\n  wrapClientGraph?(element: unknown): unknown;\n  /**\n   * Optional: locate where a streamed chunk stops being the static shell.\n   *\n   * Partial prerendering caches everything before the first dynamic boundary\n   * and refreshes the rest on the client, so it has to know where that\n   * boundary is. The markers are renderer-specific (React streams Fizz\n   * boundary ids and `$RC`/`$RS` reveal calls, Solid streams `<template\n   * id=\"pl-N\">` with `$df(N)`), so the renderer that emits them owns finding\n   * them. Returns the index to cut at, or -1 when the chunk is entirely\n   * static.\n   *\n   * A renderer that does not implement this gets no static shell at all:\n   * guessing would mean caching a per-request response as if it were shared.\n   */\n  findStaticShellBoundary?(chunk: string): number;\n  renderToString(element: unknown): string | Promise<string>;\n  /**\n   * Optional variant for renderers whose components emit document-head markup\n   * during render (e.g. <svelte:head>). `html` is the body markup exactly as\n   * renderToString would produce it; `head` is injected into the assembled\n   * document's <head>.\n   */\n  renderToStringWithHead?(\n    element: unknown,\n  ): { html: string; head: string } | Promise<{ html: string; head: string }>;\n  /** Optional runtime copy of the descriptor capabilities for diagnostics. */\n  readonly capabilities?: FarmRendererCapabilities;\n  /** Optional bootstrap required before this renderer hydrates server markup. */\n  generateHydrationScript?: () => string;\n  /** Optional component used to render route-level failures. */\n  ErrorBoundary?: unknown;\n  /** Optional streaming primitive. Renderers without one use buffered SSR. */\n  renderToPipeableStream?: (\n    element: unknown,\n    callbacks: {\n      onShellReady(): void;\n      onShellError(error: unknown): void;\n      onError(error: unknown): void;\n    },\n  ) => { pipe(destination: NodeJS.WritableStream): void };\n  /** WHATWG streaming primitive used by Web-stream-capable renderers. */\n  renderToReadableStream?: (\n    element: unknown,\n  ) => ReadableStream<Uint8Array | string> | Promise<ReadableStream<Uint8Array | string>>;\n}\n\nexport const REACT_RENDERER: Readonly<FarmRenderer> = Object.freeze({\n  name: \"react\",\n  vite: \"@farm.js/core/renderer/react/vite\",\n  server: \"@farm.js/core/renderer/react/server\",\n  client: \"@farm.js/core/renderer/react/client\",\n  jsxImportSource: \"react\",\n  dedupe: [\"react\", \"react-dom\", \"react/jsx-runtime\", \"react/jsx-dev-runtime\"],\n  optimizeDeps: [\n    \"react\",\n    \"react-dom\",\n    \"react-dom/client\",\n    \"react/jsx-runtime\",\n    \"react/jsx-dev-runtime\",\n  ],\n  capabilities: {\n    streaming: { node: true, web: false },\n    reconcilesRerenders: true,\n  },\n});\n\nexport function defineRenderer<const TRenderer extends FarmRenderer>(\n  renderer: TRenderer,\n): TRenderer {\n  return renderer;\n}\n\nexport function resolveFarmRenderer(renderer?: FarmRenderer): FarmRenderer {\n  const resolved = renderer || REACT_RENDERER;\n  const fields = [\"name\", \"vite\", \"server\", \"client\"] as const;\n\n  for (const field of fields) {\n    if (typeof resolved[field] !== \"string\" || resolved[field].trim().length === 0) {\n      throw new TypeError(`Farm renderer \\`${field}\\` must be a non-empty string.`);\n    }\n  }\n\n  return {\n    ...resolved,\n    componentExtensions: [...(resolved.componentExtensions || [])],\n    dedupe: [...(resolved.dedupe || [])],\n    optimizeDeps: [...(resolved.optimizeDeps || [])],\n    buildConcurrency: resolved.buildConcurrency || \"parallel\",\n    capabilities: getFarmRendererCapabilities(resolved),\n    options: resolved.options ? { ...resolved.options } : undefined,\n  };\n}\n\nexport async function readFarmRendererWebStream(\n  stream: ReadableStream<Uint8Array | string>,\n): Promise<string> {\n  const reader = stream.getReader();\n  const decoder = new TextDecoder();\n  let html = \"\";\n\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) break;\n    html += typeof value === \"string\" ? value : decoder.decode(value, { stream: true });\n  }\n\n  return html + decoder.decode();\n}\n\nexport function isReactRenderer(renderer: Pick<FarmRenderer, \"name\"> | undefined): boolean {\n  return !renderer || renderer.name === \"react\";\n}\n\n/** Resolve an optional renderer module from the application's dependency graph. */\nexport function resolveFarmRendererModule(root: string, specifier: string): string {\n  const requireFromApp = createRequire(path.join(path.resolve(root), \"package.json\"));\n  return requireFromApp.resolve(specifier);\n}\n\nexport async function loadFarmRendererVitePlugins(\n  renderer: FarmRenderer,\n  root: string,\n  options: { ssr?: boolean } = {},\n): Promise<unknown[]> {\n  // React uses Vite's default automatic JSX transform today. Keep the legacy\n  // path dependency-free and avoid resolving Farm's own built package while\n  // running directly from source in the monorepo.\n  if (renderer.vite === REACT_RENDERER.vite) return [];\n\n  const modulePath = resolveFarmRendererModule(root, renderer.vite);\n  const rendererModule = (await import(pathToFileURL(modulePath).href)) as FarmRendererViteModule;\n\n  if (typeof rendererModule.createFarmRendererPlugin !== \"function\") {\n    throw new Error(\n      `Renderer \\`${renderer.name}\\` module ${renderer.vite} must export createFarmRendererPlugin().`,\n    );\n  }\n\n  const created = await rendererModule.createFarmRendererPlugin({\n    ...options,\n    rendererOptions: renderer.options,\n  });\n  if (!created) return [];\n  return Array.isArray(created) ? [...created] : [created];\n}\n","export type RouteSegmentSpecificity = \"static\" | \"dynamic\" | \"catch-all\" | \"optional-catch-all\";\n\nexport class AmbiguousRouteError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AmbiguousRouteError\";\n  }\n}\n\nexport class NonTerminalCatchAllRouteError extends TypeError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"NonTerminalCatchAllRouteError\";\n  }\n}\n\nexport class DuplicateRouteParameterError extends AmbiguousRouteError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"DuplicateRouteParameterError\";\n  }\n}\n\nexport class ReservedRouteParameterError extends AmbiguousRouteError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"ReservedRouteParameterError\";\n  }\n}\n\nexport class BrowserUnstableRouteError extends TypeError {\n  constructor(message: string) {\n    super(message);\n    this.name = \"BrowserUnstableRouteError\";\n  }\n}\n\nconst SEGMENT_RANK: Record<RouteSegmentSpecificity, number> = {\n  static: 4,\n  dynamic: 3,\n  \"catch-all\": 1,\n  \"optional-catch-all\": 0,\n};\n\n// Ending a route is more specific than consuming the same path through a\n// catch-all, while a following static or dynamic segment remains more specific.\nconst ROUTE_END_RANK = 2;\n\n/** Sort route patterns from the most specific segment sequence to the least specific. */\nexport function compareRouteSpecificity(\n  left: readonly RouteSegmentSpecificity[],\n  right: readonly RouteSegmentSpecificity[],\n): number {\n  const length = Math.max(left.length, right.length);\n\n  for (let index = 0; index < length; index++) {\n    const leftRank = index < left.length ? SEGMENT_RANK[left[index]!] : ROUTE_END_RANK;\n    const rightRank = index < right.length ? SEGMENT_RANK[right[index]!] : ROUTE_END_RANK;\n    if (leftRank !== rightRank) return rightRank - leftRank;\n  }\n\n  return 0;\n}\n\nexport type RoutePatternSyntax = \"page\" | \"router\" | \"api\";\n\nconst ROUTER_PARAMETER_NAME = \"[A-Za-z0-9_$-]+\";\nconst PAGE_PARAMETER_PATTERN = /^(?:\\[\\[\\.\\.\\.(.+)\\]\\]|\\[\\.\\.\\.(.+)\\]|\\[(.+)\\])$/;\nconst ROUTER_PARAMETER_PATTERN =\n  /^(?:\\[\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]\\]|\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]|\\[([A-Za-z0-9_$-]+)\\]|:([A-Za-z0-9_$-]+)|\\*([A-Za-z0-9_$-]+)\\??)$/;\nconst RESERVED_PARAMETER_NAMES = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function assertBrowserStableRoutePath(pattern: string): void {\n  if (pattern.includes(\"\\\\\") || hasControlCharacter(pattern)) {\n    throw new BrowserUnstableRouteError(\n      `Route path \"${pattern}\" cannot contain backslashes or control characters.`,\n    );\n  }\n\n  for (const segment of pattern.split(\"/\").filter(Boolean)) {\n    if (\n      (segment.startsWith(\"(\") && segment.endsWith(\")\")) ||\n      (segment.startsWith(\"[\") && segment.endsWith(\"]\"))\n    ) {\n      continue;\n    }\n\n    let decoded = segment;\n    try {\n      decoded = decodeURIComponent(segment);\n    } catch {\n      // Malformed escapes stay literal in browser pathnames.\n    }\n    if (\n      decoded === \".\" ||\n      decoded === \"..\" ||\n      decoded.includes(\"/\") ||\n      decoded.includes(\"\\\\\") ||\n      hasControlCharacter(decoded)\n    ) {\n      throw new BrowserUnstableRouteError(\n        `Route path \"${pattern}\" contains browser-unstable segment \"${segment}\".`,\n      );\n    }\n  }\n}\n\nfunction hasControlCharacter(value: string): boolean {\n  return Array.from(value).some((character) => {\n    const code = character.charCodeAt(0);\n    return code <= 31 || (code >= 127 && code <= 159);\n  });\n}\n\nexport function assertUniqueRouteParameters(\n  pattern: string,\n  syntax: RoutePatternSyntax = \"page\",\n): void {\n  const parameterPattern = syntax === \"router\" ? ROUTER_PARAMETER_PATTERN : PAGE_PARAMETER_PATTERN;\n  const names = new Set<string>();\n\n  for (const segment of splitRoutePattern(pattern, syntax)) {\n    const match = parameterPattern.exec(segment);\n    const name = match?.slice(1).find(Boolean);\n    if (!name) continue;\n    if (RESERVED_PARAMETER_NAMES.has(name)) {\n      throw new ReservedRouteParameterError(\n        `Route parameter \"${name}\" in route \"${pattern}\" is reserved. Use a different parameter name.`,\n      );\n    }\n    if (names.has(name)) {\n      throw new DuplicateRouteParameterError(\n        `Duplicate route parameter \"${name}\" in route \"${pattern}\". Each dynamic segment must use a unique name.`,\n      );\n    }\n    names.add(name);\n  }\n}\n\nfunction splitRoutePattern(pattern: string, syntax: RoutePatternSyntax): string[] {\n  return pattern\n    .replace(/\\\\/g, \"/\")\n    .split(\"/\")\n    .filter(Boolean)\n    .filter((segment) =>\n      syntax === \"api\" ? true : !(segment.startsWith(\"(\") && segment.endsWith(\")\")),\n    );\n}\n\nexport function assertTerminalCatchAll(pattern: string, syntax: RoutePatternSyntax = \"page\"): void {\n  const segments = splitRoutePattern(pattern, syntax);\n  const parameterName = syntax === \"router\" ? ROUTER_PARAMETER_NAME : \".+\";\n  const catchAllPattern = new RegExp(\n    syntax === \"router\"\n      ? `^(?:\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]|\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]|\\\\*${parameterName}\\\\??)$`\n      : `^(?:\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]|\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\])$`,\n  );\n  const catchAllIndex = segments.findIndex((segment) => catchAllPattern.test(segment));\n  if (catchAllIndex >= 0 && catchAllIndex !== segments.length - 1) {\n    throw new NonTerminalCatchAllRouteError(\n      `Catch-all segment \"${segments[catchAllIndex]}\" must be the final segment in route \"${pattern}\".`,\n    );\n  }\n}\n\n/** Return the URL-matching shape of a route without its parameter names. */\nexport function getRoutePatternShape(pattern: string, syntax: RoutePatternSyntax = \"page\"): string {\n  assertTerminalCatchAll(pattern, syntax);\n  const segments = splitRoutePattern(pattern, syntax).map((segment) => {\n    const specificity = getPatternSegmentSpecificity(segment, syntax);\n    if (specificity !== \"static\") return specificity;\n\n    try {\n      return `static:${decodeURIComponent(segment)}`;\n    } catch {\n      return `static:${segment}`;\n    }\n  });\n\n  return segments.length === 0 ? \"/\" : JSON.stringify(segments);\n}\n\n/** Return the specificity of every URL-consuming segment in a route pattern. */\nexport function getRoutePatternSpecificity(\n  pattern: string,\n  syntax: RoutePatternSyntax = \"page\",\n): RouteSegmentSpecificity[] {\n  assertTerminalCatchAll(pattern, syntax);\n  return splitRoutePattern(pattern, syntax).map((segment) =>\n    getPatternSegmentSpecificity(segment, syntax),\n  );\n}\n\nfunction getPatternSegmentSpecificity(\n  segment: string,\n  syntax: RoutePatternSyntax,\n): RouteSegmentSpecificity {\n  const parameterName = syntax === \"router\" ? ROUTER_PARAMETER_NAME : \".+\";\n  const supportsColonAndStar = syntax === \"router\";\n  if (\n    new RegExp(`^\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]$`).test(segment) ||\n    (supportsColonAndStar && new RegExp(`^\\\\*${parameterName}\\\\?$`).test(segment))\n  ) {\n    return \"optional-catch-all\";\n  }\n  if (\n    new RegExp(`^\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]$`).test(segment) ||\n    (supportsColonAndStar && new RegExp(`^\\\\*${parameterName}$`).test(segment))\n  ) {\n    return \"catch-all\";\n  }\n  if (\n    new RegExp(`^\\\\[${parameterName}\\\\]$`).test(segment) ||\n    (supportsColonAndStar && new RegExp(`^:${parameterName}$`).test(segment))\n  ) {\n    return \"dynamic\";\n  }\n\n  return \"static\";\n}\n","/**\n * Convert URLSearchParams into the object handed to routes as `search` /\n * `searchParams`: single keys stay strings and repeated keys collect into\n * arrays, in order. The dev renderer, the production SSR entry, the SPA\n * page-data endpoint, and the generated client hydration runtime all share\n * this helper so every environment agrees on one representation.\n */\nexport function searchParamsToObject(\n  searchParams: URLSearchParams,\n): Record<string, string | string[] | undefined> {\n  const output: Record<string, string | string[] | undefined> = {};\n\n  searchParams.forEach((value, key) => {\n    // Keys come from the request URL. Writing \"__proto__\" onto a plain object\n    // replaces its prototype instead of adding an entry, so a crafted query\n    // string could reshape the object handed to pages and workflow handlers.\n    // The API route helper (entriesToObject in api/runtime.ts) already skips\n    // these names; keep both representations consistent.\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") return;\n    const existing = Object.prototype.hasOwnProperty.call(output, key) ? output[key] : undefined;\n    if (existing !== undefined) {\n      if (Array.isArray(existing)) {\n        existing.push(value);\n      } else {\n        output[key] = [existing, value];\n      }\n    } else {\n      output[key] = value;\n    }\n  });\n\n  return output;\n}\n","/**\n * Decode a percent-encoded path segment, falling back to the raw value.\n *\n * Request paths are not guaranteed to be validly percent-encoded, so\n * `decodeURIComponent` can throw on input that is still a legal URL: a\n * latin-1 escape such as `caf%E9` from an old link, or a truncated `%ZZ`\n * from a crawler. A malformed segment simply will not match a known route,\n * which is a 404, so it must not throw out of route matching.\n */\nexport function decodeRouteSegment(segment: string): string {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n","import type { RouteSegment, ParsedRoute } from \"./types\";\nimport path from \"path\";\nimport {\n  assertBrowserStableRoutePath,\n  assertTerminalCatchAll,\n  assertUniqueRouteParameters,\n} from \"./routing/specificity\";\nimport { searchParamsToObject } from \"./search-params\";\nimport { decodeRouteSegment } from \"./utils/decode\";\n\nexport function parseRoutePath(filePath: string): ParsedRoute {\n  const segments: RouteSegment[] = [];\n  const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n  const pathParts = normalizedPath.split(\"/\").filter(Boolean);\n\n  const fileName = pathParts.pop() || \"\";\n  const fileType = getRouteType(fileName);\n  const routePath = `/${pathParts.join(\"/\")}`;\n  assertBrowserStableRoutePath(routePath);\n  assertTerminalCatchAll(routePath);\n  assertUniqueRouteParameters(routePath);\n\n  for (const part of pathParts) {\n    // Route groups like `(marketing)` organize files without adding URL\n    // segments. Mirrors isRouteGroup in router.ts for programmatic routes.\n    if (part.startsWith(\"(\") && part.endsWith(\")\")) continue;\n    if (part.startsWith(\"[\") && part.endsWith(\"]\")) {\n      let segment = part.slice(1, -1);\n      const isDynamic = true;\n      let isOptional = false;\n      let isCatchAll = false;\n\n      if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n        isOptional = true;\n        segment = segment.slice(1, -1);\n        if (segment.startsWith(\"...\")) {\n          segment = segment.slice(3);\n          isCatchAll = true;\n        }\n      } else if (segment.startsWith(\"...\")) {\n        segment = segment.slice(3);\n        isCatchAll = true;\n      }\n\n      segments.push({ segment, isDynamic, isOptional, isCatchAll });\n    } else {\n      segments.push({\n        segment: part,\n        isDynamic: false,\n        isOptional: false,\n        isCatchAll: false,\n      });\n    }\n  }\n\n  return {\n    segments,\n    filePath: normalizedPath,\n    type: fileType,\n  };\n}\n\nfunction getRouteType(fileName: string): ParsedRoute[\"type\"] {\n  const baseName = fileName.replace(/\\.(tsx?|jsx?|vue|svelte|mdx?|markdown)$/, \"\");\n\n  switch (baseName) {\n    case \"page\":\n      return \"page\";\n    case \"layout\":\n      return \"layout\";\n    case \"loading\":\n      return \"loading\";\n    case \"error\":\n      return \"error\";\n    case \"not-found\":\n      return \"not-found\";\n    default:\n      return \"page\";\n  }\n}\n\nexport function segmentsToPattern(segments: RouteSegment[]): string {\n  if (segments.length === 0) return \"/\";\n\n  return (\n    \"/\" +\n    segments\n      .map((segment) => {\n        if (!segment.isDynamic) return segment.segment;\n\n        if (segment.isCatchAll) {\n          return segment.isOptional ? `*${segment.segment}?` : `*${segment.segment}`;\n        }\n\n        return `:${segment.segment}`;\n      })\n      .join(\"/\")\n  );\n}\n\nexport function matchRoute(\n  url: string,\n  segments: RouteSegment[],\n): { params: Record<string, string>; matches: boolean } {\n  const urlParts = url.split(\"/\").filter(Boolean).map(decodeRouteSegment);\n  const params: Record<string, string> = {};\n  if (segments.length === 0) {\n    return { params, matches: urlParts.length === 0 };\n  }\n\n  let urlIndex = 0;\n  let segmentIndex = 0;\n\n  while (segmentIndex < segments.length && urlIndex <= urlParts.length) {\n    const segment = segments[segmentIndex];\n\n    if (!segment.isDynamic) {\n      if (urlParts[urlIndex] !== segment.segment) {\n        return { params: {}, matches: false };\n      }\n      urlIndex++;\n      segmentIndex++;\n    } else if (segment.isCatchAll) {\n      const remainingParts = urlParts.slice(urlIndex);\n\n      if (remainingParts.length === 0 && !segment.isOptional) {\n        return { params: {}, matches: false };\n      }\n\n      params[segment.segment] = remainingParts.join(\"/\");\n      urlIndex = urlParts.length;\n      segmentIndex++;\n    } else {\n      if (urlIndex >= urlParts.length) {\n        return { params: {}, matches: false };\n      }\n\n      params[segment.segment] = urlParts[urlIndex];\n      urlIndex++;\n      segmentIndex++;\n    }\n  }\n\n  const matches = segmentIndex === segments.length && urlIndex === urlParts.length;\n\n  return { params, matches };\n}\n\n/** Match a route segment chain as an owner of the pathname or one of its descendants. */\nexport function matchRoutePrefix(url: string, segments: RouteSegment[]): boolean {\n  const urlParts = url.split(\"/\").filter(Boolean).map(decodeRouteSegment);\n  let urlIndex = 0;\n\n  for (const segment of segments) {\n    if (segment.isCatchAll) {\n      return segment.isOptional || urlIndex < urlParts.length;\n    }\n\n    const urlPart = urlParts[urlIndex];\n    if (urlPart === undefined) return false;\n    if (!segment.isDynamic && segment.segment !== urlPart) return false;\n    urlIndex++;\n  }\n\n  return true;\n}\n\nexport function resolveAppPath(root: string, ...paths: string[]): string {\n  return path.resolve(root, ...paths);\n}\n\n/**\n * Convert an absolute module path inside the project root to a root-relative\n * URL path with forward slashes (e.g. `/src/app/page.tsx`), for values the\n * client passes to dynamic `import()`. On Windows the naive root-prefix slice\n * yields `\\src\\app\\page.tsx`, which is not a valid module specifier. Returns\n * undefined for paths outside the root so callers keep their own fallbacks.\n */\nexport function toRootRelativeUrlPath(\n  absolutePath: string,\n  projectRoot: string,\n): string | undefined {\n  if (absolutePath === projectRoot) return \"\";\n  if (absolutePath.startsWith(`${projectRoot}/`) || absolutePath.startsWith(`${projectRoot}\\\\`)) {\n    return absolutePath.slice(projectRoot.length).replace(/\\\\/g, \"/\");\n  }\n  return undefined;\n}\n\n/**\n * Normalize a filesystem path to forward slashes. Node's fs accepts these on\n * every platform, and module ids handed to bundlers (e.g. Nitro handler and\n * task entries) must not contain backslashes.\n */\nexport function toPosixPath(filePath: string): string {\n  return filePath.replace(/\\\\/g, \"/\");\n}\n\nexport function toViteModuleId(filePath: string, root: string): string {\n  if (!path.isAbsolute(filePath)) return filePath;\n\n  const relativePath = path.relative(root, filePath);\n  if (relativePath && !relativePath.startsWith(\"..\") && !path.isAbsolute(relativePath)) {\n    return `/${relativePath.split(path.sep).join(\"/\")}`;\n  }\n\n  const normalizedPath = filePath.replace(/\\\\/g, \"/\");\n  return normalizedPath.startsWith(\"/\") ? `/@fs${normalizedPath}` : `/@fs/${normalizedPath}`;\n}\n\nexport async function fileExists(filePath: string): Promise<boolean> {\n  try {\n    const fs = await import(\"fs/promises\");\n    await fs.access(filePath);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport async function globFiles(pattern: string, cwd: string): Promise<string[]> {\n  const glob = await import(\"fast-glob\");\n  return glob.default(pattern, { cwd, absolute: false });\n}\n\nexport function parseSearchParams(\n  searchParams: URLSearchParams,\n): Record<string, string | string[]> {\n  return searchParamsToObject(searchParams) as Record<string, string | string[]>;\n}\n\nexport const logger = {\n  info: (message: string) => console.log(`[info] ${message}`),\n  success: (message: string) => console.log(`[success] ${message}`),\n  warn: (message: string) => console.warn(`⚠️  ${message}`),\n  error: (message: string) => console.error(`❌ ${message}`),\n  ready: (message: string) => console.log(`${message}`),\n  event: (message: string) => console.log(`  ${message}`),\n};\n","import { createStorage, prefixStorage, builtinDrivers, type BuiltinDriverName } from \"unstorage\";\nimport type { Driver, Storage, TransactionOptions } from \"unstorage\";\nimport type { Database } from \"db0\";\nimport memoryDriver from \"unstorage/drivers/memory\";\nimport type {\n  FarmStorageClient,\n  FarmStorageClientConfig,\n  FarmStorageConfigObject,\n  FarmStorageLocalDriverConfig,\n  FarmStorageDatabaseConfig,\n  FarmStorageDatabaseDriverMap,\n  FarmStorageDatabaseDriverName,\n  FarmStorageRuntimeClient,\n  FarmStorageMountConfig,\n  FarmStorageMounts,\n  FarmStorageUserConfig,\n} from \"./types\";\n\nexport type {\n  FarmStorageBuiltinDriverConfig,\n  FarmStorageClient,\n  FarmStorageClientConfig,\n  FarmStorageConfigObject,\n  FarmStorageCustomDriverConfig,\n  FarmStorageDatabaseConfig,\n  FarmStorageDatabaseDriverName,\n  FarmStorageLocalDriverConfig,\n  FarmStorageRuntimeClient,\n  FarmStorageMountConfig,\n  FarmStorageMounts,\n  FarmStorageUserConfig,\n} from \"./types\";\nexport type {\n  BuiltinDriverName,\n  BuiltinDriverOptions,\n  Driver,\n  Storage,\n  StorageMeta,\n  StorageValue,\n  TransactionOptions,\n} from \"unstorage\";\nexport type { ConnectorName, ConnectorOptions, Database } from \"db0\";\n\ntype DriverFactoryModule = {\n  default: (options?: Record<string, any>) => Driver;\n};\n\ntype DriverResolver = () => Driver | Promise<Driver>;\ntype ModuleLoader = <T = any>(specifier: string) => Promise<T>;\n\nconst loadModule: ModuleLoader = (specifier) => import(/* @vite-ignore */ specifier);\n\nconst DATABASE_CONNECTORS: {\n  [K in FarmStorageDatabaseDriverName]: {\n    connector: FarmStorageDatabaseDriverMap[K];\n    load: () => Promise<{ default: (options?: any) => any }>;\n  };\n} = {\n  sqlite: {\n    connector: \"node-sqlite\",\n    load: () => loadModule(\"db0/connectors/node-sqlite\"),\n  },\n  \"node-sqlite\": {\n    connector: \"node-sqlite\",\n    load: () => loadModule(\"db0/connectors/node-sqlite\"),\n  },\n  sqlite3: {\n    connector: \"sqlite3\",\n    load: () => loadModule(\"db0/connectors/sqlite3\"),\n  },\n  \"better-sqlite3\": {\n    connector: \"better-sqlite3\",\n    load: () => loadModule(\"db0/connectors/better-sqlite3\"),\n  },\n  postgres: {\n    connector: \"postgresql\",\n    load: () => loadModule(\"db0/connectors/postgresql\"),\n  },\n  postgresql: {\n    connector: \"postgresql\",\n    load: () => loadModule(\"db0/connectors/postgresql\"),\n  },\n  pg: {\n    connector: \"postgresql\",\n    load: () => loadModule(\"db0/connectors/postgresql\"),\n  },\n  mysql: {\n    connector: \"mysql2\",\n    load: () => loadModule(\"db0/connectors/mysql2\"),\n  },\n  mysql2: {\n    connector: \"mysql2\",\n    load: () => loadModule(\"db0/connectors/mysql2\"),\n  },\n  pglite: {\n    connector: \"pglite\",\n    load: () => loadModule(\"db0/connectors/pglite\"),\n  },\n  planetscale: {\n    connector: \"planetscale\",\n    load: () => loadModule(\"db0/connectors/planetscale\"),\n  },\n  libsql: {\n    connector: \"libsql\",\n    load: () => loadModule(\"db0/connectors/libsql/node\"),\n  },\n  \"libsql-node\": {\n    connector: \"libsql-node\",\n    load: () => loadModule(\"db0/connectors/libsql/node\"),\n  },\n  \"libsql-http\": {\n    connector: \"libsql-http\",\n    load: () => loadModule(\"db0/connectors/libsql/http\"),\n  },\n};\n\nfunction createMemoryStorage(): Storage {\n  return createStorage({\n    driver: memoryDriver(),\n  });\n}\n\nconst GLOBAL_STORAGE_KEY = Symbol.for(\"farmjs.storage.global\");\n\nfunction readGlobalStorage(): Storage | undefined {\n  return (globalThis as unknown as Record<PropertyKey, Storage | undefined>)[GLOBAL_STORAGE_KEY];\n}\n\nfunction writeGlobalStorage(storage: Storage): Storage {\n  (globalThis as unknown as Record<PropertyKey, Storage | undefined>)[GLOBAL_STORAGE_KEY] = storage;\n  return storage;\n}\n\nfunction getActiveGlobalStorage(): Storage {\n  const existing = readGlobalStorage();\n  if (existing) {\n    return existing;\n  }\n  return writeGlobalStorage(createMemoryStorage());\n}\n\nlet globalStorage = getActiveGlobalStorage();\n\nfunction normalizeMountKey(base?: string): string {\n  return (base || \"\")\n    .trim()\n    .replace(/^[:/\\\\]+|[:/\\\\]+$/g, \"\")\n    .replace(/[\\\\/]+/g, \":\");\n}\n\nfunction isDriverInstance(value: unknown): value is Driver {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as Driver).getItem === \"function\" &&\n    typeof (value as Driver).getKeys === \"function\"\n  );\n}\n\nfunction isStorageInstance(value: unknown): value is Storage {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as Storage).mount === \"function\" &&\n    typeof (value as Storage).getMount === \"function\"\n  );\n}\n\nfunction isStorageClient(value: unknown): value is FarmStorageClient {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (value as FarmStorageClient).kind === \"farm-storage-client\" &&\n    typeof (value as FarmStorageClient).resolveDriver === \"function\" &&\n    typeof (value as FarmStorageClient).createStorage === \"function\"\n  );\n}\n\nfunction isDatabaseDriverName(name: string): name is FarmStorageDatabaseDriverName {\n  return name in DATABASE_CONNECTORS;\n}\n\nfunction extractDriverOptions(config: FarmStorageClientConfig): Record<string, any> | undefined {\n  const source = config as Record<string, any>;\n  const {\n    client: _client,\n    driver: _driver,\n    mounts: _mounts,\n    options,\n    tableName: _tableName,\n    ...inlineOptions\n  } = source;\n  const hasInlineOptions = Object.keys(inlineOptions).length > 0;\n\n  if (options && typeof options === \"object\" && !Array.isArray(options)) {\n    return hasInlineOptions ? { ...inlineOptions, ...options } : options;\n  }\n\n  if (hasInlineOptions) {\n    return inlineOptions;\n  }\n\n  return options;\n}\n\nasync function loadBuiltinDriver(\n  name: BuiltinDriverName,\n  options?: Record<string, any>,\n): Promise<Driver> {\n  const modulePath = builtinDrivers[name];\n\n  if (!modulePath) {\n    throw new Error(`Unsupported storage driver \"${name}\".`);\n  }\n\n  const module = (await loadModule(modulePath)) as DriverFactoryModule;\n  return module.default(options);\n}\n\nasync function loadDatabaseDriver(config: FarmStorageDatabaseConfig): Promise<Driver> {\n  const connectorEntry = DATABASE_CONNECTORS[config.driver as FarmStorageDatabaseDriverName];\n  const [{ createDatabase }, connectorModule, db0DriverModule] = await Promise.all([\n    loadModule<typeof import(\"db0\")>(\"db0\"),\n    connectorEntry.load(),\n    loadModule<typeof import(\"unstorage/drivers/db0\")>(\"unstorage/drivers/db0\"),\n  ]);\n\n  const database = createDatabase(connectorModule.default(extractDriverOptions(config) || {}));\n  const driver = db0DriverModule.default({\n    database,\n    tableName: config.tableName,\n  });\n\n  // The db0 driver has no dispose, so this connection is Farm's to close. Databases\n  // handed to `databaseStorage` stay owned by the caller and are left open.\n  return {\n    ...driver,\n    async dispose() {\n      await driver.dispose?.();\n      await database.dispose();\n    },\n  };\n}\n\nasync function resolveDriver(config?: FarmStorageMountConfig): Promise<Driver> {\n  if (config && isStorageClient(config)) {\n    return config.resolveDriver();\n  }\n\n  const driverInput = config?.driver ?? \"memory\";\n\n  if (typeof driverInput === \"function\") {\n    return await driverInput();\n  }\n\n  if (isDriverInstance(driverInput)) {\n    return driverInput;\n  }\n\n  if (isDatabaseDriverName(driverInput)) {\n    return loadDatabaseDriver(config as FarmStorageDatabaseConfig);\n  }\n\n  if (driverInput === \"local\") {\n    return loadBuiltinDriver(\"fs-lite\", extractDriverOptions(config as FarmStorageMountConfig));\n  }\n\n  return loadBuiltinDriver(\n    driverInput as BuiltinDriverName,\n    extractDriverOptions(config as FarmStorageClientConfig),\n  );\n}\n\nfunction createStorageClientFromResolver(resolveDriver: DriverResolver): FarmStorageClient {\n  let driverPromise: Promise<Driver> | undefined;\n  let storagePromise: Promise<Storage> | undefined;\n\n  const ensureDriver = () => {\n    if (driverPromise) return driverPromise;\n\n    const pending = Promise.resolve().then(resolveDriver);\n    driverPromise = pending;\n    void pending.catch(() => {\n      if (driverPromise === pending) {\n        driverPromise = undefined;\n        storagePromise = undefined;\n      }\n    });\n    return pending;\n  };\n\n  const ensureStorage = () => {\n    if (storagePromise) return storagePromise;\n\n    const pending = ensureDriver().then((driver) =>\n      createStorage({\n        driver,\n      }),\n    );\n    storagePromise = pending;\n    void pending.catch(() => {\n      if (storagePromise === pending) storagePromise = undefined;\n    });\n    return pending;\n  };\n\n  const target = {\n    kind: \"farm-storage-client\" as const,\n    ready: ensureStorage,\n    createStorage: ensureStorage,\n    resolveDriver: ensureDriver,\n  };\n\n  return new Proxy(target as FarmStorageClient, {\n    get(currentTarget, prop, receiver) {\n      if (prop === \"then\") {\n        return undefined;\n      }\n\n      if (Reflect.has(currentTarget, prop)) {\n        return Reflect.get(currentTarget, prop, receiver);\n      }\n\n      return (...args: any[]) =>\n        ensureStorage().then(async (storage) => {\n          const member = Reflect.get(storage as object, prop);\n\n          if (typeof member !== \"function\") {\n            return member;\n          }\n\n          const result = Reflect.apply(member, storage, args);\n\n          if (prop === \"dispose\") {\n            return Promise.resolve(result).finally(() => {\n              // Disposing the storage also disposed the driver, so drop both\n              // cached promises: a later call must re-run the driver factory\n              // instead of rebuilding storage over the dead driver.\n              storagePromise = undefined;\n              driverPromise = undefined;\n            });\n          }\n\n          return result;\n        });\n    },\n  });\n}\n\nexport function defineStorageClient(resolveDriver: DriverResolver): FarmStorageClient {\n  return createStorageClientFromResolver(resolveDriver);\n}\n\nexport function createStorageClient(config: FarmStorageClientConfig): FarmStorageClient {\n  return defineStorageClient(() => resolveDriver(config));\n}\n\nexport function driverStorage(\n  driver: Driver | (() => Driver | Promise<Driver>),\n): FarmStorageClient {\n  return defineStorageClient(() => (typeof driver === \"function\" ? driver() : driver));\n}\n\nexport function databaseStorage(\n  database: Database,\n  options: { tableName?: string } = {},\n): FarmStorageClient {\n  return defineStorageClient(async () => {\n    const db0DriverModule =\n      await loadModule<typeof import(\"unstorage/drivers/db0\")>(\"unstorage/drivers/db0\");\n    return db0DriverModule.default({\n      database,\n      tableName: options.tableName,\n    });\n  });\n}\n\nexport function memoryStorage(): FarmStorageClient {\n  return createStorageClient({ driver: \"memory\" });\n}\n\nexport function localStorage(options: Omit<FarmStorageLocalDriverConfig, \"driver\"> = {}) {\n  return createStorageClient({\n    driver: \"local\",\n    ...options,\n  });\n}\n\nexport function sqliteStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"sqlite\",\n    ...options,\n  });\n}\n\nexport function mysqlStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"mysql\",\n    ...options,\n  });\n}\n\nexport function mysql2Storage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return mysqlStorage(options);\n}\n\nexport function postgresStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"postgres\",\n    ...options,\n  });\n}\n\nexport function pgStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return postgresStorage(options);\n}\n\nexport function pgliteStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"pglite\",\n    ...options,\n  });\n}\n\nexport function planetscaleStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"planetscale\",\n    ...options,\n  });\n}\n\nexport function libsqlStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n  return createStorageClient({\n    driver: \"libsql\",\n    ...options,\n  });\n}\n\nexport function redisStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"redis\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"redis\",\n    ...options,\n  });\n}\n\nexport function s3Storage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"s3\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"s3\",\n    ...options,\n  });\n}\n\nexport function mongodbStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"mongodb\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"mongodb\",\n    ...options,\n  });\n}\n\nexport function upstashStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"upstash\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"upstash\",\n    ...options,\n  });\n}\n\nexport function netlifyBlobsStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"netlify-blobs\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"netlify-blobs\",\n    ...options,\n  });\n}\n\nexport function vercelKVStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"vercel-kv\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"vercel-kv\",\n    ...options,\n  });\n}\n\nexport function vercelBlobStorage(\n  options: Omit<Extract<FarmStorageClientConfig, { driver: \"vercel-blob\" }>, \"driver\">,\n) {\n  return createStorageClient({\n    driver: \"vercel-blob\",\n    ...options,\n  });\n}\n\nasync function mountNamespaces(storage: Storage, mounts?: FarmStorageMounts): Promise<void> {\n  if (!mounts) {\n    return;\n  }\n\n  for (const [base, config] of Object.entries(mounts)) {\n    storage.mount(normalizeMountKey(base), await resolveDriver(config));\n  }\n}\n\nexport async function createFarmStorage(config: FarmStorageUserConfig = {}): Promise<Storage> {\n  if (isStorageInstance(config)) {\n    return config;\n  }\n\n  if (isStorageClient(config)) {\n    return config.createStorage();\n  }\n\n  const rootConfig = isStorageClient(config.client) ? config.client : config;\n  const storage = createStorage({\n    driver: await resolveDriver(rootConfig),\n  });\n\n  try {\n    await mountNamespaces(storage, config.mounts);\n  } catch (error) {\n    await storage.dispose().catch(() => {});\n    throw error;\n  }\n  return storage;\n}\n\nexport async function resolveStorageRuntimeClient(\n  config: FarmStorageUserConfig | undefined,\n): Promise<unknown | undefined> {\n  if (!config || isStorageInstance(config) || isStorageClient(config)) {\n    return undefined;\n  }\n\n  const client = config.client;\n  if (!client || isStorageInstance(client) || isStorageClient(client)) {\n    return undefined;\n  }\n\n  return typeof client === \"function\" ? await client() : client;\n}\n\nexport async function initStorage(config: FarmStorageUserConfig = {}): Promise<Storage> {\n  globalStorage = getActiveGlobalStorage();\n  const nextStorage = await createFarmStorage(config);\n  const previousStorage = globalStorage;\n  globalStorage = writeGlobalStorage(nextStorage);\n\n  if (previousStorage !== nextStorage) {\n    await previousStorage.dispose().catch(() => {});\n  }\n\n  return globalStorage;\n}\n\nexport function getStorage(namespace?: string): Storage {\n  globalStorage = getActiveGlobalStorage();\n  const base = normalizeMountKey(namespace);\n  if (!base) {\n    return globalStorage;\n  }\n\n  const namespaced = prefixStorage(globalStorage, base);\n  // prefixStorage re-prefixes the key methods, but copies dispose/watch/getMount(s)\n  // straight from the parent, so on a namespaced view they operate on the whole\n  // global store: dispose() tears down every namespace, watch() sees (and leaks\n  // the raw keys of) every other namespace's writes, getMounts() lists them all.\n  // Scope those too, so a handle handed out as \"namespace X\" stays confined to X.\n  const store = globalStorage;\n  const prefix = `${base}:`;\n  const stripPrefix = (key: string) => (key.startsWith(prefix) ? key.slice(prefix.length) : key);\n  const viewUnwatchers = new Set<Awaited<ReturnType<Storage[\"watch\"]>>>();\n  const releaseViewWatchers = async () => {\n    const current = [...viewUnwatchers];\n    viewUnwatchers.clear();\n    await Promise.all(current.map((unwatch) => unwatch()));\n  };\n\n  return {\n    ...namespaced,\n    // Scope the wipe to the namespace instead of the whole storage, and keep\n    // the caller's base so `clear(\"sessions\")` cannot take unrelated keys with\n    // it. Dropping the argument silently widens a targeted clear into a\n    // namespace-wide delete.\n    async clear(base?: string, opts?: TransactionOptions) {\n      const keys = await namespaced.getKeys(base);\n      await Promise.all(keys.map((key) => namespaced.removeItem(key, opts)));\n    },\n    async watch(callback) {\n      const unwatch = await store.watch((event, key) => {\n        if (key.startsWith(prefix)) callback(event, stripPrefix(key));\n      });\n      viewUnwatchers.add(unwatch);\n      return async () => {\n        viewUnwatchers.delete(unwatch);\n        await unwatch();\n      };\n    },\n    async unwatch() {\n      await releaseViewWatchers();\n    },\n    async dispose() {\n      // A namespaced view shares the global store's lifecycle and owns no\n      // drivers, so disposing it must not tear down the global store (that is\n      // what disposeStorage is for). Release only this view's watchers.\n      await releaseViewWatchers();\n    },\n    getMount(key = \"\") {\n      return store.getMount(prefix + key);\n    },\n    getMounts(base = \"\", options) {\n      return store\n        .getMounts(prefix + base, options)\n        .map((mount) => ({ ...mount, base: stripPrefix(mount.base) }));\n    },\n  } as Storage;\n}\n\nexport async function disposeStorage(): Promise<void> {\n  globalStorage = getActiveGlobalStorage();\n  const previousStorage = globalStorage;\n  globalStorage = writeGlobalStorage(createMemoryStorage());\n  await previousStorage.dispose().catch(() => {});\n}\n","/**\n * Farm's declarative data schema: a serializable description of models and\n * fields shared by integrations, applications, ORM generation, and any feature\n * that needs one schema story across storage targets.\n *\n * The shape is plain data, not code, so it can be inspected at build time,\n * mapped onto an ORM schema, and serialized to other tooling.\n */\n\nexport type FarmSchemaFieldType =\n  | \"id\"\n  | \"uuid\"\n  | \"string\"\n  | \"text\"\n  | \"boolean\"\n  | \"integer\"\n  | \"number\"\n  | \"datetime\"\n  | \"json\"\n  | \"enum\";\n\nexport interface FarmSchemaReference {\n  model: string;\n  field: string;\n  relation?: \"belongsTo\" | \"hasOne\" | \"hasMany\";\n  onDelete?: \"cascade\" | \"restrict\" | \"setNull\" | \"noAction\";\n  enforced?: \"db\" | \"app\" | \"none\";\n}\n\nexport interface FarmSchemaField {\n  type: FarmSchemaFieldType;\n  name?: string;\n  description?: string;\n  required?: boolean;\n  nullable?: boolean;\n  primaryKey?: boolean;\n  unique?: boolean;\n  index?: boolean;\n  list?: boolean;\n  default?: unknown;\n  values?: readonly string[];\n  reference?: FarmSchemaReference;\n  meta?: Record<string, unknown>;\n}\n\nexport interface FarmSchemaConstraint {\n  type: \"unique\" | \"index\";\n  fields: readonly string[];\n  name?: string;\n  meta?: Record<string, unknown>;\n}\n\nexport interface FarmSchemaModel {\n  name?: string;\n  description?: string;\n  fields: Record<string, FarmSchemaField>;\n  constraints?: readonly FarmSchemaConstraint[];\n  meta?: Record<string, unknown>;\n}\n\nexport interface FarmSchemaModelExtension {\n  name?: string;\n  description?: string;\n  fields?: Record<string, FarmSchemaField>;\n  constraints?: readonly FarmSchemaConstraint[];\n  meta?: Record<string, unknown>;\n}\n\nexport interface FarmSchemaModelOverride {\n  name?: string;\n  description?: string;\n  fields?: Record<string, Partial<FarmSchemaField>>;\n  constraints?: readonly FarmSchemaConstraint[];\n  meta?: Record<string, unknown>;\n}\n\nexport interface FarmSchema {\n  models: Record<string, FarmSchemaModel>;\n  meta?: Record<string, unknown>;\n  extend?: Record<string, FarmSchemaModelExtension>;\n  override?: Record<string, FarmSchemaModelOverride>;\n}\n\n/**\n * Declare a data schema with full type inference preserved.\n *\n * ```ts\n * export const schema = defineSchema({\n *   models: {\n *     tasks: {\n *       fields: {\n *         id: { type: \"uuid\", primaryKey: true },\n *         title: { type: \"string\", required: true },\n *       },\n *     },\n *   },\n * });\n * ```\n */\nexport function defineSchema<TSchema extends FarmSchema>(schema: TSchema): TSchema {\n  return schema;\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 { localizeFarmHref, resolveFarmLocalePath } from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { assertBrowserStableRoutePath } from \"../routing/specificity\";\n\ntype ConfigRoutePatternToken =\n  | { kind: \"param\"; name: string; captureIndex: number; catchAll: boolean }\n  | { kind: \"wildcard\"; captureIndex: number };\n\nexport interface CompiledConfigRoutePattern {\n  regex: RegExp;\n  tokens: ConfigRoutePatternToken[];\n}\n\nexport function validateConfigRouteSource(source: string, field = \"Config route source\"): string {\n  if (typeof source !== \"string\" || source.length === 0) {\n    throw new TypeError(`${field} must be a non-empty pathname pattern.`);\n  }\n  if (source.trim() !== source) {\n    throw new Error(`${field} cannot contain leading or trailing whitespace.`);\n  }\n  if (!source.startsWith(\"/\")) {\n    throw new Error(`${field} must start with \"/\".`);\n  }\n  if (source.includes(\"?\") || source.includes(\"#\")) {\n    throw new Error(`${field} must be a pathname without a query string or hash.`);\n  }\n  if (\n    source.includes(\"\\\\\") ||\n    Array.from(source).some((character) => {\n      const code = character.charCodeAt(0);\n      return code <= 31 || (code >= 127 && code <= 159);\n    })\n  ) {\n    throw new Error(`${field} cannot contain backslashes or control characters.`);\n  }\n  assertBrowserStableRoutePath(source);\n  return source;\n}\n\nexport function resolveConfigRoutePathname(\n  pathname: string,\n  i18n?: ResolvedFarmI18nConfig,\n): { pathname: string; locale?: string } {\n  if (!i18n?.enabled) return { pathname: normalizeConfigRoutePathname(pathname) };\n  const match = resolveFarmLocalePath(pathname, i18n);\n  return { pathname: normalizeConfigRoutePathname(match.pathname), locale: match.locale };\n}\n\n/**\n * Drop a trailing slash before matching, mirroring `normalizeRuntimePath` in\n * the generated production matcher. Without this a request for `/old/` misses\n * a `/old` rule in dev while matching it in a built app.\n */\nfunction normalizeConfigRoutePathname(pathname: string): string {\n  if (!pathname || pathname === \"/\") return \"/\";\n  return pathname.endsWith(\"/\") ? pathname.replace(/\\/+$/, \"\") || \"/\" : pathname;\n}\n\nexport function localizeConfigRouteDestination(\n  destination: string,\n  locale: string | undefined,\n  i18n?: ResolvedFarmI18nConfig,\n): string {\n  return locale && i18n?.enabled ? localizeFarmHref(destination, locale, i18n) : destination;\n}\n\n/**\n * Append a catch-all capture, absorbing the separator that precedes it.\n *\n * The production matcher works on split segments and lets a non-terminal\n * catch-all consume zero of them (`minConsume = 0`), so `/x/*` + `/y` matches\n * `/x/y` and `/files/:path*` matches `/files`. Emitting a bare `(.*)` after a\n * literal `/` instead demands at least that separator, so the same rule was\n * inert in dev. Folding the slash into the optional group is how path-to-regexp\n * expresses the same thing, and it keeps one capture group so capture indexes\n * are unchanged (a non-participating group reads back as \"\").\n */\nfunction appendCatchAll(pattern: string): string {\n  return pattern.endsWith(\"/\") ? `${pattern.slice(0, -1)}(?:/(.*))?` : `${pattern}(.*)`;\n}\n\nfunction escapeRegexCharacter(character: string): string {\n  return /[\\\\^$.*+?()[\\]{}|]/.test(character) ? `\\\\${character}` : character;\n}\n\nexport function compileConfigRoutePattern(source: string): CompiledConfigRoutePattern {\n  validateConfigRouteSource(source);\n  const tokens: ConfigRoutePatternToken[] = [];\n  let pattern = \"\";\n  let captureIndex = 1;\n\n  for (let index = 0; index < source.length; ) {\n    const rest = source.slice(index);\n    const parameter = rest.match(/^:([A-Za-z0-9_]+)(\\*)?/);\n    if (parameter) {\n      tokens.push({\n        kind: \"param\",\n        name: parameter[1],\n        captureIndex,\n        catchAll: parameter[2] === \"*\",\n      });\n      pattern = parameter[2] ? appendCatchAll(pattern) : `${pattern}([^/]+)`;\n      captureIndex += 1;\n      index += parameter[0].length;\n      continue;\n    }\n\n    if (source[index] === \"*\") {\n      tokens.push({ kind: \"wildcard\", captureIndex });\n      pattern = appendCatchAll(pattern);\n      captureIndex += 1;\n      index += 1;\n      continue;\n    }\n\n    pattern += escapeRegexCharacter(source[index]);\n    index += 1;\n  }\n\n  return { regex: new RegExp(`^${pattern}$`), tokens };\n}\n\nexport function interpolateConfigRouteDestination(\n  destination: string,\n  match: RegExpMatchArray,\n  tokens: readonly ConfigRoutePatternToken[],\n): string {\n  const namedCaptures = new Map<string, string>();\n  const wildcardCaptures: string[] = [];\n  const captures = new Map<number, string>();\n\n  for (const token of tokens) {\n    const value = normalizeConfigRouteCapture(\n      match[token.captureIndex] || \"\",\n      token.kind === \"wildcard\" || token.catchAll,\n    );\n    captures.set(token.captureIndex, value);\n    if (token.kind === \"param\") {\n      namedCaptures.set(token.name, value);\n    } else {\n      wildcardCaptures.push(value);\n    }\n  }\n\n  let result = \"\";\n  let wildcardIndex = 0;\n  for (let index = 0; index < destination.length; ) {\n    const rest = destination.slice(index);\n    const parameter = rest.match(/^:([A-Za-z0-9_]+)(\\*)?/);\n    if (parameter) {\n      const value = namedCaptures.get(parameter[1]);\n      result += value === undefined ? parameter[0] : value;\n      index += parameter[0].length;\n      continue;\n    }\n\n    const capture = rest.match(/^\\$(\\d+)/);\n    if (capture) {\n      result += captures.get(Number(capture[1])) ?? \"\";\n      index += capture[0].length;\n      continue;\n    }\n\n    if (destination[index] === \"*\") {\n      result += wildcardCaptures[wildcardIndex] || \"\";\n      wildcardIndex += 1;\n      index += 1;\n      continue;\n    }\n\n    result += destination[index];\n    index += 1;\n  }\n\n  return result;\n}\n\nfunction normalizeConfigRouteCapture(value: string, catchAll: boolean): string {\n  const segments = catchAll ? value.split(\"/\").filter(Boolean) : [value];\n  return segments\n    .map((segment) => encodeConfigRouteSegment(decodeConfigRouteSegment(segment)))\n    .join(\"/\");\n}\n\nfunction decodeConfigRouteSegment(segment: string): string {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n\nfunction encodeConfigRouteSegment(segment: string): string {\n  return encodeURIComponent(segment).replace(\n    /[!'()*]/g,\n    (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,\n  );\n}\n","/**\n * Shared request-origin primitives.\n *\n * Server actions and integration auth routes both need to decide whether a\n * state-changing request actually came from the app's own origin. The matching\n * rules (Origin/Referer resolution, Host fallback, wildcard subdomain patterns)\n * are security-sensitive and must not drift between the two, so they live here\n * and are consumed by both rather than reimplemented.\n *\n * These helpers never throw for untrusted input: callers map the failure\n * reasons onto their own error shapes.\n */\n\nexport type RequestOriginFailureReason = \"opaque-origin\" | \"invalid-origin\";\n\nexport type RequestSourceOriginResult =\n  /** `origin` is null when the request carried no Origin or Referer header. */\n  { ok: true; origin: string | null } | { ok: false; reason: RequestOriginFailureReason };\n\n/** Resolve the origin a request claims to come from, preferring Origin over Referer. */\nexport function getRequestSourceOrigin(request: Request): RequestSourceOriginResult {\n  const origin = request.headers.get(\"origin\")?.trim();\n  if (origin) {\n    return parseSourceOrigin(origin);\n  }\n\n  const referer = request.headers.get(\"referer\")?.trim();\n  if (referer) {\n    return parseSourceOrigin(referer);\n  }\n\n  return { ok: true, origin: null };\n}\n\nfunction parseSourceOrigin(value: string): RequestSourceOriginResult {\n  if (value === \"null\") {\n    return { ok: false, reason: \"opaque-origin\" };\n  }\n\n  try {\n    const parsed = new URL(value);\n    if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n      return { ok: false, reason: \"invalid-origin\" };\n    }\n    return { ok: true, origin: parsed.origin };\n  } catch {\n    return { ok: false, reason: \"invalid-origin\" };\n  }\n}\n\n/**\n * Accept a source origin whose host matches the `Host` header *and* whose\n * scheme matches the rebuilt `request.url` scheme. The scheme check blocks\n * browser-driven protocol-downgrade CSRF and also rejects proxy-rebuilt\n * `request.url` values whose scheme differs from the browser origin. For\n * TLS-terminating proxies that leave `request.url` as `http:`, enable\n * `trustProxy` with a proxy-emitted `X-Forwarded-Proto: https`, or add the\n * browser origin to `serverActions.allowedOrigins`.\n */\nexport function matchesHostHeader(sourceOrigin: string, request: Request): boolean {\n  const host = request.headers.get(\"host\")?.trim().toLowerCase();\n  if (!host) return false;\n\n  try {\n    const source = new URL(sourceOrigin);\n    const target = new URL(request.url);\n    return source.protocol === target.protocol && source.host.toLowerCase() === host;\n  } catch {\n    return false;\n  }\n}\n\nexport function matchesAllowedOrigin(sourceOrigin: string, pattern: string): boolean {\n  const source = new URL(sourceOrigin);\n  if (!pattern.includes(\"*\")) {\n    return pattern.includes(\"://\") ? source.origin === pattern : source.host === pattern;\n  }\n\n  const schemeEnd = pattern.indexOf(\"://\");\n  const scheme = schemeEnd === -1 ? null : pattern.slice(0, schemeEnd + 1);\n  const hostPattern = pattern.slice(schemeEnd === -1 ? 0 : schemeEnd + 3);\n  const [wildcardHost, port] = splitHostAndPort(hostPattern);\n  const baseHost = wildcardHost.slice(2);\n\n  if (scheme && source.protocol !== scheme) return false;\n  if (port && getEffectivePort(source) !== port) return false;\n  if (!port && source.port) return false;\n\n  return source.hostname.endsWith(`.${baseHost}`) && source.hostname !== baseHost;\n}\n\n/**\n * Validate and canonicalize a configured origin pattern. `label` names the\n * configuration field so the thrown message points at the user's own setting.\n */\nexport function normalizeAllowedOriginPattern(value: string, label: string): string {\n  const pattern = value.trim().toLowerCase();\n  if (!pattern) {\n    throw new TypeError(`${label} cannot contain empty values`);\n  }\n\n  if (pattern.includes(\"*\")) {\n    if (!/^(?:https?:\\/\\/)?\\*\\.[a-z0-9.-]+(?::\\d+)?$/.test(pattern)) {\n      throw new TypeError(`Invalid ${label} pattern: ${JSON.stringify(value)}`);\n    }\n    return pattern;\n  }\n\n  if (pattern.includes(\"://\")) {\n    let parsed: URL;\n    try {\n      parsed = new URL(pattern);\n    } catch {\n      throw new TypeError(`Invalid ${label} value: ${JSON.stringify(value)}`);\n    }\n\n    if (\n      (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") ||\n      parsed.username ||\n      parsed.password ||\n      parsed.pathname !== \"/\" ||\n      parsed.search ||\n      parsed.hash\n    ) {\n      throw new TypeError(`${label} must contain origins without paths: ${JSON.stringify(value)}`);\n    }\n    return parsed.origin;\n  }\n\n  if (/[/@?#]/.test(pattern)) {\n    throw new TypeError(`${label} must contain origins or hosts: ${JSON.stringify(value)}`);\n  }\n\n  try {\n    return new URL(`http://${pattern}`).host;\n  } catch {\n    throw new TypeError(`Invalid ${label} value: ${JSON.stringify(value)}`);\n  }\n}\n\nfunction splitHostAndPort(value: string): [string, string | null] {\n  const separator = value.lastIndexOf(\":\");\n  if (separator === -1) return [value, null];\n  return [value.slice(0, separator), value.slice(separator + 1)];\n}\n\nfunction getEffectivePort(url: URL): string {\n  if (url.port) return url.port;\n  if (url.protocol === \"https:\") return \"443\";\n  if (url.protocol === \"http:\") return \"80\";\n  return \"\";\n}\n","import {\n  getRequestSourceOrigin,\n  matchesAllowedOrigin,\n  matchesHostHeader,\n  normalizeAllowedOriginPattern,\n} from \"./request-origin\";\n\n/**\n * Integration auth routes accept ordinary form posts, which browsers send\n * cross-site without a CORS preflight. Without an origin check, a third-party\n * page can submit credentials to an app's own sign-in route and plant an\n * attacker-controlled session in the victim's browser (login CSRF), or drive a\n * forced sign-out. This mirrors the server-action origin contract so both\n * entry points reject the same requests.\n */\n\nexport type IntegrationOriginRejection =\n  | \"missing-origin\"\n  | \"opaque-origin\"\n  | \"invalid-origin\"\n  | \"cross-site\";\n\nexport type IntegrationOriginResult =\n  | { ok: true }\n  | { ok: false; reason: IntegrationOriginRejection };\n\nexport interface IntegrationOriginPolicy {\n  /** Extra trusted origins, using the `serverActions.allowedOrigins` pattern syntax. */\n  allowedOrigins?: readonly string[];\n  /**\n   * Whether a request carrying no origin metadata at all must be rejected.\n   *\n   * Form posts always carry an Origin header in supported browsers, so\n   * state-changing POSTs default to rejecting (`true`). Top-level GET\n   * navigations legitimately arrive with no Origin and no Referer — a typed\n   * URL or a bookmark — so GET callers pass `false` to avoid breaking them.\n   */\n  requireOriginMetadata?: boolean;\n}\n\n/**\n * Resolve configured origin patterns once, at integration construction, so an\n * invalid pattern fails loudly at startup instead of per request.\n */\nexport function resolveIntegrationAllowedOrigins(\n  values: readonly string[] | undefined,\n  label: string,\n): readonly string[] {\n  return Object.freeze((values ?? []).map((value) => normalizeAllowedOriginPattern(value, label)));\n}\n\nexport function validateIntegrationRequestOrigin(\n  request: Request,\n  policy: IntegrationOriginPolicy = {},\n): IntegrationOriginResult {\n  const allowedOrigins = policy.allowedOrigins ?? [];\n  const requireOriginMetadata = policy.requireOriginMetadata ?? true;\n  const fetchSite = request.headers.get(\"sec-fetch-site\")?.trim().toLowerCase();\n  const source = getRequestSourceOrigin(request);\n\n  if (!source.ok) {\n    return { ok: false, reason: source.reason };\n  }\n\n  if (source.origin === null) {\n    // No Origin and no Referer. `sec-fetch-site: same-origin` still proves the\n    // request is first-party.\n    if (fetchSite === \"same-origin\") {\n      return { ok: true };\n    }\n\n    // Strict mode (state-changing POSTs) has nothing left to verify against.\n    if (requireOriginMetadata) {\n      return { ok: false, reason: fetchSite === \"cross-site\" ? \"cross-site\" : \"missing-origin\" };\n    }\n\n    // Lenient mode still rejects a request the browser labelled cross-site.\n    // Everything else here is a direct navigation (`none`), a same-site\n    // navigation, or a client too old to send Sec-Fetch-Site at all.\n    return fetchSite === \"cross-site\" ? { ok: false, reason: \"cross-site\" } : { ok: true };\n  }\n\n  const requestUrl = new URL(request.url);\n  const matchesConfiguredOrigin = allowedOrigins.some((pattern) =>\n    matchesAllowedOrigin(source.origin as string, pattern),\n  );\n  const matchesRequest =\n    source.origin === requestUrl.origin || matchesHostHeader(source.origin, request);\n\n  if (!matchesRequest && !matchesConfiguredOrigin) {\n    return { ok: false, reason: \"cross-site\" };\n  }\n\n  if (fetchSite === \"cross-site\" && !matchesConfiguredOrigin) {\n    return { ok: false, reason: \"cross-site\" };\n  }\n\n  return { ok: true };\n}\n\nexport function describeIntegrationOriginRejection(reason: IntegrationOriginRejection): string {\n  switch (reason) {\n    case \"missing-origin\":\n      return \"Request is missing same-origin metadata.\";\n    case \"opaque-origin\":\n      return \"Opaque origins are not allowed.\";\n    case \"invalid-origin\":\n      return \"Invalid request origin.\";\n    case \"cross-site\":\n      return \"Cross-site request was rejected.\";\n  }\n}\n","export type FarmIntegrationAPIMethod =\n  | \"GET\"\n  | \"QUERY\"\n  | \"POST\"\n  | \"PUT\"\n  | \"PATCH\"\n  | \"DELETE\"\n  | \"OPTIONS\"\n  | \"HEAD\";\n\nexport type FarmIntegrationAPIBodyFormat = \"json\" | \"form\" | \"none\";\nexport type FarmIntegrationAPIResponseFormat = \"json\" | \"text\" | \"response\";\n\nexport interface FarmIntegrationAPIOperation<\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n> {\n  readonly kind: \"farm-integration-api-operation\";\n  path: string;\n  method: TMethod;\n  bodyFormat?: FarmIntegrationAPIBodyFormat;\n  responseFormat?: FarmIntegrationAPIResponseFormat;\n  headers?: Record<string, string>;\n  credentials?: RequestCredentials;\n  isServer?: TServer;\n  __pathless?: boolean;\n  __types?: {\n    body: TBody;\n    query: TQuery;\n    response: TResponse;\n  };\n}\n\nexport type FarmIntegrationAPI = {\n  [key: string]: FarmIntegrationAPI | FarmIntegrationAPIOperation<any, any, any, any, any>;\n};\n\nexport type FarmIntegrationRouteOperationCarrier<\n  TPath extends string = string,\n  TOperation extends FarmIntegrationAPIOperation<any, any, any, any, any> =\n    FarmIntegrationAPIOperation<any, any, any, any, any>,\n> = {\n  path: TPath;\n  __operation: TOperation;\n};\n\ntype IntegrationAPIBuilderOptions<TServer extends boolean = false> = Omit<\n  FarmIntegrationAPIOperation<any, any, any, TServer>,\n  \"kind\" | \"method\" | \"path\" | \"__pathless\" | \"__types\"\n>;\n\nexport function defineIntegrationAPIOperation<\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n>(\n  operation: Omit<\n    FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>,\n    \"kind\" | \"__types\"\n  >,\n): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod> {\n  return {\n    kind: \"farm-integration-api-operation\",\n    ...operation,\n  };\n}\n\nexport function defineIntegrationAPI<TAPI extends FarmIntegrationAPI>(api: TAPI): TAPI {\n  return api;\n}\n\nfunction operation<\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n>(\n  method: TMethod,\n  pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n  maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod> {\n  const hasExplicitPath = typeof pathOrOptions === \"string\";\n  const path = hasExplicitPath ? pathOrOptions : \"\";\n  const options = (\n    hasExplicitPath\n      ? maybeOptions\n      : {\n          ...maybeOptions,\n          ...pathOrOptions,\n        }\n  ) as IntegrationAPIBuilderOptions<TServer>;\n\n  return defineIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>({\n    path,\n    method,\n    __pathless: !hasExplicitPath,\n    ...options,\n  });\n}\n\nfunction get<TResponse = unknown, TServer extends boolean = false>(\n  path: string,\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, never, TResponse, TServer, \"GET\">;\nfunction get<TQuery = never, TResponse = unknown, TServer extends boolean = false>(\n  path: string,\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"GET\">;\nfunction get<TResponse = unknown, TServer extends boolean = false>(\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, never, TResponse, TServer, \"GET\">;\nfunction get<TQuery = never, TResponse = unknown, TServer extends boolean = false>(\n  options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"GET\">;\nfunction get(\n  pathOrOptions?: string | IntegrationAPIBuilderOptions<boolean>,\n  maybeOptions: IntegrationAPIBuilderOptions<boolean> = {} as IntegrationAPIBuilderOptions<boolean>,\n) {\n  return operation<never, any, any, boolean>(\"GET\", pathOrOptions, maybeOptions);\n}\n\nfunction isOperation(value: unknown): value is FarmIntegrationAPIOperation<any, any, any, any> {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (value as FarmIntegrationAPIOperation<any, any, any, any>).kind ===\n      \"farm-integration-api-operation\"\n  );\n}\n\nfunction bindRoutePath<TAPI extends FarmIntegrationAPI>(path: string, api: TAPI): TAPI {\n  const entries = Object.entries(api as Record<string, unknown>).map(([key, value]) => {\n    if (isOperation(value)) {\n      return [\n        key,\n        {\n          ...value,\n          path,\n          __pathless: false,\n        },\n      ];\n    }\n\n    if (value && typeof value === \"object\") {\n      return [key, bindRoutePath(path, value as FarmIntegrationAPI)];\n    }\n\n    return [key, value];\n  });\n\n  return Object.fromEntries(entries) as TAPI;\n}\n\ntype RouteOperationsToAPI<\n  TOperations extends readonly FarmIntegrationAPIOperation<any, any, any, any, any>[],\n> = {\n  [TMethod in Lowercase<TOperations[number][\"method\"] & string>]: Extract<\n    TOperations[number],\n    { method: Uppercase<TMethod> }\n  >;\n};\n\ntype StripRouteClientPrefix<TPath extends string> = TPath extends `/api/${string}/${infer TRest}`\n  ? TRest\n  : TPath extends `/${string}/${infer TRest}`\n    ? TRest\n    : TPath extends `/${infer TRest}`\n      ? TRest\n      : TPath;\n\ntype NormalizeRouteSegment<TSegment extends string> = TSegment extends `[...${infer TName}]`\n  ? TName\n  : TSegment extends `[${infer TName}]`\n    ? TName\n    : TSegment extends `${infer TName}(${string}`\n      ? TName\n      : CamelCaseRouteSegment<TSegment>;\n\ntype CamelCaseRouteSegment<TSegment extends string> =\n  TSegment extends `${infer THead}-${infer TTail}`\n    ? `${THead}${Capitalize<CamelCaseRouteSegment<TTail>>}`\n    : TSegment;\n\ntype RouteNamespaceFromPath<\n  TPath extends string,\n  TOperation extends FarmIntegrationAPIOperation<any, any, any, any, any>,\n> = TPath extends `${infer THead}/${infer TTail}`\n  ? {\n      [TKey in NormalizeRouteSegment<THead>]: RouteNamespaceFromPath<TTail, TOperation>;\n    }\n  : {\n      [TKey in NormalizeRouteSegment<TPath>]: {\n        [TMethod in Lowercase<TOperation[\"method\"] & string>]: TOperation;\n      };\n    };\n\ntype UnionToIntersection<TUnion> = (\n  TUnion extends unknown ? (value: TUnion) => void : never\n) extends (value: infer TIntersection) => void\n  ? TIntersection\n  : never;\n\ntype ExpandRecursively<TValue> = TValue extends (...args: any[]) => any\n  ? TValue\n  : TValue extends object\n    ? { [TKey in keyof TValue]: ExpandRecursively<TValue[TKey]> }\n    : TValue;\n\ntype RoutesToAPI<TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[]> =\n  ExpandRecursively<\n    UnionToIntersection<\n      TRoutes[number] extends FarmIntegrationRouteOperationCarrier<infer TPath, infer TOperation>\n        ? RouteNamespaceFromPath<StripRouteClientPrefix<TPath>, TOperation>\n        : never\n    >\n  >;\n\nexport type InferIntegrationAPIFromRoutes<\n  TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[],\n> = RoutesToAPI<TRoutes>;\n\nfunction route<TAPI extends FarmIntegrationAPI>(path: string, definition: TAPI): TAPI;\nfunction route<TOperations extends readonly FarmIntegrationAPIOperation<any, any, any, any, any>[]>(\n  path: string,\n  ...operations: TOperations\n): RouteOperationsToAPI<TOperations>;\nfunction route(\n  path: string,\n  definitionOrOperation: FarmIntegrationAPI | FarmIntegrationAPIOperation<any, any, any, any, any>,\n  ...operations: readonly FarmIntegrationAPIOperation<any, any, any, any, any>[]\n) {\n  if (isOperation(definitionOrOperation)) {\n    const allOperations = [definitionOrOperation, ...operations];\n    return Object.fromEntries(\n      allOperations.map((operation) => [\n        operation.method.toLowerCase(),\n        {\n          ...operation,\n          path,\n          __pathless: false,\n        },\n      ]),\n    );\n  }\n\n  return bindRoutePath(path, definitionOrOperation as FarmIntegrationAPI);\n}\n\nfunction normalizeRouteSegment(segment: string): string {\n  if (!segment) {\n    return \"index\";\n  }\n\n  if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n    return segment.slice(4, -1) || \"index\";\n  }\n\n  if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n    return segment.slice(1, -1) || \"index\";\n  }\n\n  const matcherIndex = segment.indexOf(\"(\");\n  if (matcherIndex > 0) {\n    return segment.slice(0, matcherIndex);\n  }\n\n  return camelCaseRouteSegment(segment);\n}\n\nfunction camelCaseRouteSegment(segment: string): string {\n  return segment.replace(/-([a-zA-Z0-9])/g, (_match, value: string) => value.toUpperCase());\n}\n\nfunction getRouteClientSegments(path: string): string[] {\n  const segments = path.split(\"/\").filter(Boolean);\n  if (segments.length === 0) {\n    return [\"index\"];\n  }\n\n  const stripped =\n    segments[0] === \"api\" && segments.length > 2\n      ? segments.slice(2)\n      : segments.length > 1\n        ? segments.slice(1)\n        : [segments[segments.length - 1]];\n\n  return stripped.map(normalizeRouteSegment).filter(Boolean);\n}\n\nfunction setRouteOperation(\n  target: Record<string, unknown>,\n  pathSegments: string[],\n  operation: FarmIntegrationAPIOperation<any, any, any, any, any>,\n) {\n  const [head, ...tail] = pathSegments;\n  if (!head) {\n    return;\n  }\n\n  if (tail.length === 0) {\n    const leaf = ((target[head] as Record<string, unknown> | undefined) || {}) as Record<\n      string,\n      unknown\n    >;\n    leaf[operation.method.toLowerCase()] = {\n      ...operation,\n      path: operation.path,\n      __pathless: false,\n    };\n    target[head] = leaf;\n    return;\n  }\n\n  const branch = ((target[head] as Record<string, unknown> | undefined) || {}) as Record<\n    string,\n    unknown\n  >;\n  target[head] = branch;\n  setRouteOperation(branch, tail, operation);\n}\n\nfunction fromRoutes<TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[]>(\n  routes: TRoutes,\n): RoutesToAPI<TRoutes> {\n  const definition: Record<string, unknown> = {};\n\n  for (const route of routes) {\n    if (!isOperation(route.__operation)) {\n      continue;\n    }\n\n    setRouteOperation(definition, getRouteClientSegments(route.path), {\n      ...route.__operation,\n      path: route.path,\n      __pathless: false,\n    });\n  }\n\n  return definition as RoutesToAPI<TRoutes>;\n}\n\nexport const api = {\n  get,\n  route,\n  fromRoutes,\n  query<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"QUERY\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"QUERY\">(\"QUERY\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  post<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"POST\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"POST\">(\"POST\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  put<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PUT\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"PUT\">(\"PUT\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  patch<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PATCH\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"PATCH\">(\"PATCH\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  delete<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"DELETE\"> {\n    return operation<TBody, TQuery, TResponse, TServer, \"DELETE\">(\"DELETE\", pathOrOptions, {\n      bodyFormat: \"json\",\n      ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n    });\n  },\n  options<TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"OPTIONS\"> {\n    return operation<never, TQuery, TResponse, TServer, \"OPTIONS\">(\n      \"OPTIONS\",\n      pathOrOptions,\n      maybeOptions,\n    );\n  },\n  head<TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n    maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n  ): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"HEAD\"> {\n    return operation<never, TQuery, TResponse, TServer, \"HEAD\">(\n      \"HEAD\",\n      pathOrOptions,\n      maybeOptions,\n    );\n  },\n  form: {\n    query<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"QUERY\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"QUERY\">(\"QUERY\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    post<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"POST\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"POST\">(\"POST\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    put<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PUT\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"PUT\">(\"PUT\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    patch<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PATCH\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"PATCH\">(\"PATCH\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n    delete<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n      maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n    ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"DELETE\"> {\n      return operation<TBody, TQuery, TResponse, TServer, \"DELETE\">(\"DELETE\", pathOrOptions, {\n        bodyFormat: \"form\",\n        ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n      });\n    },\n  },\n};\n\nexport const endpoint = api;\n","import type { FarmPlugin, FarmPluginIntegrationContext } from \"./plugin\";\n\nconst FARM_PLUGIN_INTEGRATION_CONTEXT = Symbol.for(\"@farm.js/core/plugin-integration-context\");\n\nexport function setFarmPluginIntegrationContext(\n  plugin: FarmPlugin,\n  integration: Readonly<FarmPluginIntegrationContext>,\n): void {\n  Object.defineProperty(plugin, FARM_PLUGIN_INTEGRATION_CONTEXT, {\n    value: integration,\n  });\n}\n\nexport function getFarmPluginIntegrationContext(\n  plugin: FarmPlugin,\n): Readonly<FarmPluginIntegrationContext> | undefined {\n  const value = (plugin as FarmPlugin & Record<symbol, unknown>)[FARM_PLUGIN_INTEGRATION_CONTEXT];\n  return value && typeof value === \"object\"\n    ? (value as Readonly<FarmPluginIntegrationContext>)\n    : undefined;\n}\n","type RequestContextCarrier = object;\n\nexport interface SetRequestContextOptions {\n  exposeToPage?: boolean;\n}\n\nexport interface RequestContextSnapshotOptions {\n  exposedOnly?: boolean;\n}\n\ninterface RequestContextBucket {\n  privateData: Map<string, any>;\n  exposedData: Map<string, any>;\n}\n\nconst REQUEST_CONTEXT_STORE_KEY = Symbol.for(\"farm.requestContextStore\");\n\ntype GlobalWithRequestContextStore = typeof globalThis & {\n  [REQUEST_CONTEXT_STORE_KEY]?: WeakMap<RequestContextCarrier, RequestContextBucket>;\n};\n\nfunction getRequestContextStore() {\n  const globalState = globalThis as GlobalWithRequestContextStore;\n  if (!globalState[REQUEST_CONTEXT_STORE_KEY]) {\n    globalState[REQUEST_CONTEXT_STORE_KEY] = new WeakMap<\n      RequestContextCarrier,\n      RequestContextBucket\n    >();\n  }\n\n  return globalState[REQUEST_CONTEXT_STORE_KEY]!;\n}\n\nfunction getBucket(target: RequestContextCarrier): RequestContextBucket {\n  const requestContextStore = getRequestContextStore();\n  let bucket = requestContextStore.get(target);\n  if (!bucket) {\n    bucket = {\n      privateData: new Map<string, any>(),\n      exposedData: new Map<string, any>(),\n    };\n    requestContextStore.set(target, bucket);\n  }\n  return bucket;\n}\n\nexport function setRequestContext(\n  target: RequestContextCarrier,\n  key: string,\n  value: any,\n  options: SetRequestContextOptions = {},\n): void {\n  const bucket = getBucket(target);\n  bucket.privateData.set(key, value);\n  if (options.exposeToPage) {\n    bucket.exposedData.set(key, value);\n  }\n}\n\nexport function getRequestContext<T = any>(\n  target: RequestContextCarrier,\n  key: string,\n): T | undefined {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  return bucket?.privateData.get(key) as T | undefined;\n}\n\nexport function hasRequestContext(target: RequestContextCarrier, key: string): boolean {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  return bucket?.privateData.has(key) ?? false;\n}\n\nexport function deleteRequestContext(target: RequestContextCarrier, key: string): boolean {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  if (!bucket) return false;\n  const removedPrivate = bucket.privateData.delete(key);\n  bucket.exposedData.delete(key);\n  return removedPrivate;\n}\n\nexport function clearRequestContext(target: RequestContextCarrier): void {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  if (!bucket) return;\n  bucket.privateData.clear();\n  bucket.exposedData.clear();\n}\n\nexport function getRequestContextSnapshot(\n  target: RequestContextCarrier,\n  options: RequestContextSnapshotOptions = {},\n): Map<string, any> {\n  const requestContextStore = getRequestContextStore();\n  const bucket = requestContextStore.get(target);\n  if (!bucket) return new Map<string, any>();\n  if (options.exposedOnly) {\n    return new Map(bucket.exposedData);\n  }\n  return new Map(bucket.privateData);\n}\n","import type { ServerResponse } from \"node:http\";\n\ninterface ResponseEventWatcher<T> {\n  promise: Promise<T>;\n  dispose(): void;\n}\n\n/**\n * Watch a real Node response without requiring every Node-compatible response\n * adapter or test double to extend EventEmitter. The framework only needs\n * disconnect handling when the response exposes both halves of the listener\n * lifecycle; otherwise callers can still send ordinary non-blocked bodies.\n */\nfunction watchResponseEvent<T>(\n  res: ServerResponse,\n  events: ReadonlyArray<readonly [event: string, value: T]>,\n): ResponseEventWatcher<T> | null {\n  if (typeof res.once !== \"function\" || typeof res.removeListener !== \"function\") {\n    return null;\n  }\n\n  let settled = false;\n  const listeners = events.map(([event, value]) => {\n    const listener = () => {\n      if (settled) return;\n      settled = true;\n      dispose();\n      resolvePromise(value);\n    };\n    return { event, listener };\n  });\n  let resolvePromise!: (value: T) => void;\n  const promise = new Promise<T>((resolve) => {\n    resolvePromise = resolve;\n    for (const { event, listener } of listeners) {\n      res.once(event, listener);\n    }\n  });\n  const dispose = () => {\n    for (const { event, listener } of listeners) {\n      res.removeListener(event, listener);\n    }\n  };\n\n  return { promise, dispose };\n}\n\n/**\n * Waits until the response can accept more writes. Resolves false when the\n * client is gone (close or error): a disconnected socket never emits drain,\n * so waiting on drain alone leaks the pending handler, its reader lock, and\n * the response body for the life of the process.\n */\nasync function waitForWritable(res: ServerResponse): Promise<boolean> {\n  if (res.writableEnded || res.destroyed) {\n    return false;\n  }\n\n  const watcher = watchResponseEvent(res, [\n    [\"drain\", true],\n    [\"close\", false],\n    [\"error\", false],\n  ]);\n  if (!watcher) {\n    return false;\n  }\n\n  try {\n    return await watcher.promise;\n  } finally {\n    watcher.dispose();\n  }\n}\n\n/**\n * Older Fetch implementations expose repeated Set-Cookie fields as one\n * comma-joined value. Split only at a comma followed by another cookie-pair;\n * commas inside Expires dates remain part of the current cookie. RFC cookie\n * values exclude commas, so a comma followed by a cookie-pair is unambiguous\n * for valid Set-Cookie syntax once the original field boundaries are lost.\n */\nfunction splitSetCookieHeader(value: string): string[] {\n  const cookies: string[] = [];\n  let start = 0;\n\n  for (let index = 0; index < value.length; index += 1) {\n    if (value[index] !== \",\") continue;\n\n    let next = index + 1;\n    while (value[next] === \" \" || value[next] === \"\\t\") next += 1;\n\n    const equals = value.indexOf(\"=\", next);\n    if (equals === -1) continue;\n\n    const separator = value.slice(next, equals);\n    if (separator.length === 0 || /[;,\\s]/.test(separator)) continue;\n\n    cookies.push(value.slice(start, index).trim());\n    start = next;\n    index = next - 1;\n  }\n\n  cookies.push(value.slice(start).trim());\n  return cookies.filter(Boolean);\n}\n\nexport function applyWebResponseHeaders(\n  res: Pick<ServerResponse, \"setHeader\"> & Partial<Pick<ServerResponse, \"getHeader\">>,\n  headers: Headers,\n  options: { appendSetCookie?: boolean } = {},\n): void {\n  const responseHeaders = headers as Headers & {\n    getSetCookie?: () => string[];\n    raw?: () => Record<string, string[]>;\n  };\n  const rawSetCookies = responseHeaders.raw?.()[\"set-cookie\"];\n  const setCookies = responseHeaders.getSetCookie?.() || rawSetCookies || [];\n  const existing =\n    options.appendSetCookie && typeof res.getHeader === \"function\"\n      ? res.getHeader(\"Set-Cookie\")\n      : undefined;\n  const existingCookies = Array.isArray(existing)\n    ? existing.map(String)\n    : existing === undefined\n      ? []\n      : [String(existing)];\n\n  let fallbackSetCookie = \"\";\n  headers.forEach((value, key) => {\n    if (key.toLowerCase() === \"set-cookie\") {\n      fallbackSetCookie = value;\n      return;\n    }\n    res.setHeader(key, value);\n  });\n\n  const cookies =\n    setCookies.length > 0\n      ? setCookies\n      : fallbackSetCookie\n        ? splitSetCookieHeader(fallbackSetCookie)\n        : [];\n  if (cookies.length > 0) {\n    res.setHeader(\"Set-Cookie\", [...existingCookies, ...cookies]);\n  }\n}\n\nexport async function sendWebResponse(res: ServerResponse, response: Response): Promise<void> {\n  res.statusCode = response.status;\n  applyWebResponseHeaders(res, response.headers, { appendSetCookie: true });\n\n  if (!response.body) {\n    res.end();\n    return;\n  }\n\n  if (typeof res.write !== \"function\") {\n    const body = await response.arrayBuffer();\n    res.end(Buffer.from(body));\n    return;\n  }\n\n  const reader = response.body.getReader();\n  const disconnectWatcher = watchResponseEvent(res, [\n    [\"close\", true],\n    [\"error\", true],\n  ]);\n\n  try {\n    while (true) {\n      if (res.destroyed) {\n        // The client disconnected mid-response; drop the rest of the body so\n        // the handler can return.\n        void reader.cancel().catch(() => {});\n        return;\n      }\n\n      const read = reader.read().then((result) => ({ type: \"read\" as const, result }));\n      const next = disconnectWatcher\n        ? await Promise.race([\n            read,\n            disconnectWatcher.promise.then(() => ({ type: \"disconnect\" as const })),\n          ])\n        : await read;\n      if (next.type === \"disconnect\") {\n        void reader.cancel().catch(() => {});\n        return;\n      }\n\n      const { done, value } = next.result;\n      if (done) {\n        break;\n      }\n\n      if (!value || value.byteLength === 0) {\n        continue;\n      }\n\n      if (!res.write(value)) {\n        if (!(await waitForWritable(res))) {\n          void reader.cancel().catch(() => {});\n          return;\n        }\n      }\n    }\n\n    res.end();\n  } catch (error) {\n    // Releasing the lock does not stop the producer. Cancel it when the\n    // downstream write fails, without waiting on app-owned cleanup or letting\n    // a cancellation failure replace the original error.\n    void reader.cancel(error).catch(() => {});\n    if (!res.writableEnded) {\n      const responseError = error instanceof Error ? error : new Error(String(error));\n      if (typeof res.destroy === \"function\") {\n        res.destroy(responseError);\n      } else {\n        res.end();\n      }\n    }\n    throw error;\n  } finally {\n    disconnectWatcher?.dispose();\n    try {\n      reader.releaseLock();\n    } catch {\n      // A disconnect can win the race with a pending read. Cancelling the\n      // reader settles it asynchronously, so there may be no lock to release\n      // synchronously here.\n    }\n  }\n}\n","import { assertBrowserStableRoutePath } from \"./routing/specificity\";\n\ninterface FarmNodeAbortRequest {\n  aborted?: boolean;\n  once(event: \"aborted\", listener: () => void): unknown;\n  off(event: \"aborted\", listener: () => void): unknown;\n}\n\ninterface FarmNodeAbortResponse {\n  writableEnded: boolean;\n  once(event: \"close\" | \"finish\", listener: () => void): unknown;\n  off(event: \"close\" | \"finish\", listener: () => void): unknown;\n}\n\n/** Share disconnect semantics between development and production Node requests. */\nexport function createFarmNodeRequestAbortSignal(\n  req: FarmNodeAbortRequest,\n  res: FarmNodeAbortResponse,\n): AbortSignal {\n  const controller = new AbortController();\n  let disposed = false;\n  const dispose = () => {\n    if (disposed) return;\n    disposed = true;\n    req.off(\"aborted\", abort);\n    res.off(\"close\", abortOnEarlyClose);\n    res.off(\"finish\", dispose);\n    controller.signal.removeEventListener(\"abort\", dispose);\n  };\n  const abort = () => controller.abort();\n  const abortOnEarlyClose = () => {\n    if (!res.writableEnded) abort();\n    dispose();\n  };\n\n  if (req.aborted) {\n    controller.abort();\n    return controller.signal;\n  }\n\n  req.once(\"aborted\", abort);\n  res.once(\"close\", abortOnEarlyClose);\n  res.once(\"finish\", dispose);\n  controller.signal.addEventListener(\"abort\", dispose, { once: true });\n  return controller.signal;\n}\n\nexport const DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT = 10_000_000;\nexport const DEFAULT_FARM_SERVER_HEADERS_TIMEOUT = 60_000;\nexport const DEFAULT_FARM_SERVER_REQUEST_TIMEOUT = 300_000;\nexport const DEFAULT_FARM_SERVER_KEEP_ALIVE_TIMEOUT = 5_000;\nexport const DEFAULT_FARM_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT = 30_000;\nconst MAX_FARM_SERVER_TIMEOUT = 2_147_483_647;\n\nexport type FarmServerDuration = number | `${number}${\"ms\" | \"s\" | \"m\" | \"h\"}`;\n\nexport interface FarmServerHealthConfig {\n  /** Liveness endpoint. It remains healthy while a production process drains. */\n  livenessPath?: string;\n  /** Readiness endpoint. It returns 503 until startup completes and while draining. */\n  readinessPath?: string;\n}\n\nexport interface ResolvedFarmServerHealthConfig {\n  enabled: boolean;\n  livenessPath: string;\n  readinessPath: string;\n}\n\nexport interface FarmServerConfig {\n  /** Maximum request body size for API routes, integrations, workflows, and uploads. */\n  bodySizeLimit?: number | string;\n  /** Trust proxy-provided client address and request authority headers. Enable only behind a trusted proxy. */\n  trustProxy?: boolean;\n  /** Maximum time for a Node client to send complete request headers. */\n  headersTimeout?: FarmServerDuration;\n  /** Maximum time for a Node client to send the complete request. */\n  requestTimeout?: FarmServerDuration;\n  /** How long an idle Node keep-alive connection remains open after a response. */\n  keepAliveTimeout?: FarmServerDuration;\n  /** Maximum time the Node adapter drains traffic before forcing shutdown. */\n  gracefulShutdownTimeout?: FarmServerDuration;\n  /** Production liveness and readiness endpoints. Set to false to disable them. */\n  health?: false | FarmServerHealthConfig;\n}\n\nexport interface ResolvedFarmServerConfig {\n  bodySizeLimit: number;\n  trustProxy: boolean;\n  headersTimeout: number;\n  requestTimeout: number;\n  keepAliveTimeout: number;\n  gracefulShutdownTimeout: number;\n  health: ResolvedFarmServerHealthConfig;\n}\n\nexport type FarmRequestBodyErrorCode = \"BODY_TOO_LARGE\" | \"INVALID_CONTENT_LENGTH\";\n\n/** Apply the weak entity-tag comparison required by If-None-Match. */\nexport function matchesFarmIfNoneMatch(\n  value: string | readonly string[] | null | undefined,\n  etag: string,\n): boolean {\n  const expected = parseEntityTag(trimOptionalWhitespace(etag));\n  if (!expected) return false;\n\n  const values = Array.isArray(value) ? value : [value];\n  const combined = values\n    .filter((header): header is string => typeof header === \"string\")\n    .join(\",\");\n  const fieldValue = trimOptionalWhitespace(combined);\n  if (!fieldValue) return false;\n  if (fieldValue === \"*\") return true;\n\n  let matched = false;\n  let hasEntityTag = false;\n  for (const candidate of splitEntityTags(fieldValue)) {\n    const token = trimOptionalWhitespace(candidate);\n    if (!token) continue;\n\n    const parsed = parseEntityTag(token);\n    if (!parsed) return false;\n    hasEntityTag = true;\n    if (parsed === expected) matched = true;\n  }\n\n  return hasEntityTag && matched;\n}\n\nfunction trimOptionalWhitespace(value: string): string {\n  return value.replace(/^[\\t ]+|[\\t ]+$/g, \"\");\n}\n\nfunction parseEntityTag(value: string): string | null {\n  const opaqueTag = value.startsWith(\"W/\") ? value.slice(2) : value;\n  if (opaqueTag.length < 2 || opaqueTag[0] !== '\"' || opaqueTag.at(-1) !== '\"') return null;\n\n  for (let index = 1; index < opaqueTag.length - 1; index++) {\n    const code = opaqueTag.charCodeAt(index);\n    if (code === 0x21 || (code >= 0x23 && code <= 0x7e) || code >= 0x80) continue;\n    return null;\n  }\n\n  return opaqueTag;\n}\n\nfunction splitEntityTags(value: string): string[] {\n  const tags: string[] = [];\n  let start = 0;\n  let quoted = false;\n\n  for (let index = 0; index < value.length; index++) {\n    const character = value[index];\n    if (character === '\"') {\n      quoted = !quoted;\n    } else if (character === \",\" && !quoted) {\n      tags.push(value.slice(start, index));\n      start = index + 1;\n    }\n  }\n\n  tags.push(value.slice(start));\n  return tags;\n}\n\nexport class FarmRequestBodyError extends Error {\n  readonly code: FarmRequestBodyErrorCode;\n  readonly status: number;\n\n  constructor(code: FarmRequestBodyErrorCode, status: number, message: string) {\n    super(message);\n    this.name = \"FarmRequestBodyError\";\n    this.code = code;\n    this.status = status;\n  }\n}\n\nexport function resolveFarmServerConfig(\n  config: FarmServerConfig | ResolvedFarmServerConfig | undefined,\n): ResolvedFarmServerConfig {\n  const headersTimeout = parseFarmServerDuration(\n    config?.headersTimeout ?? DEFAULT_FARM_SERVER_HEADERS_TIMEOUT,\n    \"server.headersTimeout\",\n  );\n  const requestTimeout = parseFarmServerDuration(\n    config?.requestTimeout ?? DEFAULT_FARM_SERVER_REQUEST_TIMEOUT,\n    \"server.requestTimeout\",\n  );\n  if (headersTimeout > requestTimeout) {\n    throw new TypeError(\"server.headersTimeout must not exceed server.requestTimeout\");\n  }\n\n  return Object.freeze({\n    bodySizeLimit: parseBodySizeLimit(\n      config?.bodySizeLimit ?? DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT,\n      \"server.bodySizeLimit\",\n    ),\n    trustProxy: config?.trustProxy === true,\n    headersTimeout,\n    requestTimeout,\n    keepAliveTimeout: parseFarmServerDuration(\n      config?.keepAliveTimeout ?? DEFAULT_FARM_SERVER_KEEP_ALIVE_TIMEOUT,\n      \"server.keepAliveTimeout\",\n    ),\n    gracefulShutdownTimeout: parseFarmServerDuration(\n      config?.gracefulShutdownTimeout ?? DEFAULT_FARM_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT,\n      \"server.gracefulShutdownTimeout\",\n    ),\n    health: resolveFarmServerHealthConfig(config?.health),\n  });\n}\n\nexport function parseFarmServerDuration(\n  value: FarmServerDuration,\n  optionName = \"duration\",\n): number {\n  if (typeof value === \"number\") {\n    if (!Number.isSafeInteger(value) || value <= 0) {\n      throw new TypeError(`${optionName} must be a positive safe integer`);\n    }\n    if (value > MAX_FARM_SERVER_TIMEOUT) {\n      throw new TypeError(`${optionName} must not exceed ${MAX_FARM_SERVER_TIMEOUT} milliseconds`);\n    }\n    return value;\n  }\n\n  const match = value\n    .trim()\n    .toLowerCase()\n    .match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)$/);\n  if (!match) {\n    throw new TypeError(`${optionName} must be milliseconds or a duration such as \"30s\" or \"2m\"`);\n  }\n\n  const amount = Number(match[1]);\n  const unit = match[2];\n  const multiplier = unit === \"ms\" ? 1 : unit === \"s\" ? 1_000 : unit === \"m\" ? 60_000 : 3_600_000;\n  const milliseconds = Math.floor(amount * multiplier);\n  if (!Number.isSafeInteger(milliseconds) || milliseconds <= 0) {\n    throw new TypeError(`${optionName} must resolve to a positive safe integer`);\n  }\n  if (milliseconds > MAX_FARM_SERVER_TIMEOUT) {\n    throw new TypeError(`${optionName} must not exceed ${MAX_FARM_SERVER_TIMEOUT} milliseconds`);\n  }\n  return milliseconds;\n}\n\nfunction resolveFarmServerHealthConfig(\n  config: false | FarmServerHealthConfig | ResolvedFarmServerHealthConfig | undefined,\n): ResolvedFarmServerHealthConfig {\n  if (config === false || (config && \"enabled\" in config && config.enabled === false)) {\n    return Object.freeze({\n      enabled: false,\n      livenessPath: \"/_farm/health/live\",\n      readinessPath: \"/_farm/health/ready\",\n    });\n  }\n\n  const livenessPath = normalizeHealthPath(\n    config?.livenessPath ?? \"/_farm/health/live\",\n    \"server.health.livenessPath\",\n  );\n  const readinessPath = normalizeHealthPath(\n    config?.readinessPath ?? \"/_farm/health/ready\",\n    \"server.health.readinessPath\",\n  );\n  if (livenessPath === readinessPath) {\n    throw new TypeError(\"server.health livenessPath and readinessPath must be different\");\n  }\n\n  return Object.freeze({ enabled: true, livenessPath, readinessPath });\n}\n\nfunction normalizeHealthPath(value: string, optionName: string): string {\n  const path = value.trim();\n  if (!path.startsWith(\"/\") || path.includes(\"?\") || path.includes(\"#\") || path.includes(\"*\")) {\n    throw new TypeError(`${optionName} must be an absolute pathname without a query or wildcard`);\n  }\n  const normalized = path.length > 1 ? path.replace(/\\/+$/, \"\") || \"/\" : path;\n  assertBrowserStableRoutePath(normalized);\n  return normalized;\n}\n\nexport function parseBodySizeLimit(value: number | string, optionName = \"bodySizeLimit\"): number {\n  if (typeof value === \"number\") {\n    if (!Number.isSafeInteger(value) || value <= 0) {\n      throw new TypeError(`${optionName} must be a positive safe integer`);\n    }\n    return value;\n  }\n\n  const match = value\n    .trim()\n    .toLowerCase()\n    .match(/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb|kib|mib|gib)?$/);\n  if (!match) {\n    throw new TypeError(`${optionName} must be bytes or a size string such as \"500kb\" or \"10mb\"`);\n  }\n\n  const amount = Number(match[1]);\n  const unit = match[2] ?? \"b\";\n  const multiplier: Record<string, number> = {\n    b: 1,\n    kb: 1_000,\n    mb: 1_000_000,\n    gb: 1_000_000_000,\n    kib: 1_024,\n    mib: 1_048_576,\n    gib: 1_073_741_824,\n  };\n  const bytes = Math.floor(amount * multiplier[unit]);\n\n  if (!Number.isSafeInteger(bytes) || bytes <= 0) {\n    throw new TypeError(`${optionName} must resolve to a positive safe integer`);\n  }\n\n  return bytes;\n}\n\nexport async function bufferFarmRequestBody(request: Request, limit: number): Promise<Request> {\n  if (request.method === \"GET\" || request.method === \"HEAD\" || request.body === null) {\n    return request;\n  }\n\n  const bytes = await readFarmRequestBody(request, limit);\n  const body = new Uint8Array(bytes.byteLength);\n  body.set(bytes);\n  return new Request(request, {\n    // oxlint-disable-next-line unicorn/no-invalid-fetch-options -- GET and HEAD return above.\n    body: body.buffer,\n  });\n}\n\nexport async function readFarmRequestBody(request: Request, limit: number): Promise<Uint8Array> {\n  try {\n    validateContentLength(request.headers.get(\"content-length\"), limit);\n  } catch (error) {\n    // A cloned Request is a tee branch: its cancellation may wait for the\n    // untouched branch. Rejection must not wait for producer-owned cleanup.\n    void request.body?.cancel(error).catch(() => {});\n    throw error;\n  }\n  throwIfAborted(request.signal);\n  if (!request.body) return new Uint8Array();\n\n  const reader = request.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let total = 0;\n  const cancelBodyRead = () => {\n    void reader.cancel(request.signal.reason).catch(() => {});\n  };\n  request.signal.addEventListener(\"abort\", cancelBodyRead, { once: true });\n\n  try {\n    while (true) {\n      throwIfAborted(request.signal);\n      const { done, value } = await reader.read();\n      // Cancellation resolves a pending read as EOF, not necessarily an error.\n      throwIfAborted(request.signal);\n      if (done) break;\n      if (!value) continue;\n\n      total += value.byteLength;\n      if (total > limit) {\n        const error = new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\");\n        void reader.cancel(error).catch(() => {});\n        throw error;\n      }\n      chunks.push(value);\n    }\n  } catch (error) {\n    if (request.signal.aborted) throwIfAborted(request.signal);\n    throw error;\n  } finally {\n    request.signal.removeEventListener(\"abort\", cancelBodyRead);\n    reader.releaseLock();\n  }\n\n  const body = new Uint8Array(total);\n  let offset = 0;\n  for (const chunk of chunks) {\n    body.set(chunk, offset);\n    offset += chunk.byteLength;\n  }\n  return body;\n}\n\nexport async function readNodeRequestBody(\n  request: {\n    headers: Record<string, string | string[] | undefined>;\n    on(event: \"data\", listener: (chunk: unknown) => void): unknown;\n    on(event: \"end\", listener: () => void): unknown;\n    on(event: \"error\", listener: (error: Error) => void): unknown;\n    removeListener?(event: string, listener: (...args: any[]) => void): unknown;\n    resume?(): unknown;\n  },\n  limit: number,\n): Promise<Buffer> {\n  const rawContentLength = request.headers[\"content-length\"];\n  const contentLength = Array.isArray(rawContentLength) ? rawContentLength[0] : rawContentLength;\n  try {\n    validateContentLength(contentLength, limit);\n  } catch (error) {\n    request.resume?.();\n    throw error;\n  }\n\n  return await new Promise<Buffer>((resolve, reject) => {\n    const chunks: Buffer[] = [];\n    let total = 0;\n    let settled = false;\n\n    const cleanup = () => {\n      request.removeListener?.(\"data\", onData);\n      request.removeListener?.(\"end\", onEnd);\n      request.removeListener?.(\"error\", onError);\n    };\n    const rejectOnce = (error: Error) => {\n      if (settled) return;\n      settled = true;\n      cleanup();\n      request.resume?.();\n      reject(error);\n    };\n    const onData = (chunk: unknown) => {\n      const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as any);\n      total += bytes.byteLength;\n      if (total > limit) {\n        rejectOnce(new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\"));\n        return;\n      }\n      chunks.push(bytes);\n    };\n    const onEnd = () => {\n      if (settled) return;\n      settled = true;\n      cleanup();\n      resolve(Buffer.concat(chunks, total));\n    };\n    const onError = (error: Error) => rejectOnce(error);\n\n    request.on(\"data\", onData);\n    request.on(\"end\", onEnd);\n    request.on(\"error\", onError);\n  });\n}\n\nexport function createFarmRequestBodyErrorResponse(error: unknown): Response | null {\n  if (!(error instanceof FarmRequestBodyError)) return null;\n\n  return new Response(error.status === 413 ? \"Payload Too Large\" : \"Bad Request\", {\n    status: error.status,\n    headers: {\n      \"cache-control\": \"no-store\",\n      \"content-type\": \"text/plain; charset=utf-8\",\n      \"x-content-type-options\": \"nosniff\",\n    },\n  });\n}\n\nfunction validateContentLength(value: string | null | undefined, limit: number): void {\n  const contentLength = value?.trim();\n  if (!contentLength) return;\n  if (!/^\\d+$/.test(contentLength)) {\n    throw new FarmRequestBodyError(\"INVALID_CONTENT_LENGTH\", 400, \"Invalid content-length header\");\n  }\n  if (Number(contentLength) > limit) {\n    throw new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\");\n  }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n  if (!signal.aborted) return;\n  if (signal.reason !== undefined) throw signal.reason;\n  throw new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n","import type {\n  AnyFieldBuilder,\n  AnyModelDefinition,\n  FieldBuilder,\n  JsonValue,\n  ModelDefinition,\n  OrmClient,\n  SchemaDefinition,\n  SchemaModels,\n} from \"@farming-labs/orm\";\nimport type {\n  FarmIntegrationSchema,\n  FarmIntegrationSchemaField,\n  FarmIntegrationSchemaModel,\n} from \"./integrations\";\nimport { resolveStorageRuntimeClient } from \"./storage\";\nimport type { FarmStorageUserConfig } from \"./storage/types\";\nimport type { FarmConfig } from \"./types\";\n\ntype RuntimeClientFactory<TClient> = () => TClient | Promise<TClient>;\n\nexport type FarmIntegrationOrmSchema = SchemaDefinition<Record<string, AnyModelDefinition>>;\n\nexport type FarmIntegrationOrmClient<TSchema extends FarmIntegrationOrmSchema> = OrmClient<TSchema>;\n\ntype FarmIntegrationOrmFieldKind<TField extends FarmIntegrationSchemaField> = TField[\"type\"] extends\n  | \"id\"\n  | \"uuid\"\n  ? \"id\"\n  : TField[\"type\"] extends \"text\"\n    ? \"string\"\n    : TField[\"type\"] extends \"number\"\n      ? \"decimal\"\n      : Extract<TField[\"type\"], \"string\" | \"boolean\" | \"integer\" | \"datetime\" | \"json\" | \"enum\">;\n\ntype FarmIntegrationOrmFieldNullable<TField extends FarmIntegrationSchemaField> = TField extends {\n  nullable: true;\n}\n  ? true\n  : TField extends { required: false }\n    ? true\n    : false;\n\ntype FarmIntegrationOrmEnumValue<TField extends FarmIntegrationSchemaField> = TField extends {\n  values: readonly (infer TValue extends string)[];\n}\n  ? TValue\n  : string;\n\ntype FarmIntegrationOrmFieldValue<TField extends FarmIntegrationSchemaField> =\n  TField[\"type\"] extends \"id\" | \"uuid\" | \"string\" | \"text\"\n    ? string\n    : TField[\"type\"] extends \"boolean\"\n      ? boolean\n      : TField[\"type\"] extends \"integer\"\n        ? number\n        : TField[\"type\"] extends \"number\"\n          ? string\n          : TField[\"type\"] extends \"datetime\"\n            ? Date\n            : TField[\"type\"] extends \"json\"\n              ? JsonValue\n              : TField[\"type\"] extends \"enum\"\n                ? FarmIntegrationOrmEnumValue<TField>\n                : never;\n\nexport type InferFarmIntegrationOrmField<TField extends FarmIntegrationSchemaField> = FieldBuilder<\n  FarmIntegrationOrmFieldKind<TField>,\n  FarmIntegrationOrmFieldNullable<TField>,\n  FarmIntegrationOrmFieldValue<TField>\n>;\n\nexport type InferFarmIntegrationOrmFields<TModel extends FarmIntegrationSchemaModel> = {\n  [TFieldKey in keyof TModel[\"fields\"] & string]: InferFarmIntegrationOrmField<\n    Extract<TModel[\"fields\"][TFieldKey], FarmIntegrationSchemaField>\n  >;\n};\n\nexport type InferFarmIntegrationOrmSchema<TSchema extends FarmIntegrationSchema> =\n  SchemaDefinition<{\n    [TModelKey in keyof TSchema[\"models\"] & string]: ModelDefinition<\n      InferFarmIntegrationOrmFields<\n        Extract<TSchema[\"models\"][TModelKey], FarmIntegrationSchemaModel>\n      >,\n      {}\n    >;\n  }>;\n\nexport type InferFarmIntegrationOrmClient<TSchema extends FarmIntegrationSchema | undefined> =\n  TSchema extends FarmIntegrationSchema ? OrmClient<InferFarmIntegrationOrmSchema<TSchema>> : never;\n\nexport interface CreateIntegrationOrmOptions<\n  TClient = unknown,\n  TSchema extends FarmIntegrationSchema = FarmIntegrationSchema,\n> {\n  schema: TSchema;\n  config?: Pick<FarmConfig, \"storage\">;\n  storage?: FarmStorageUserConfig;\n  client?: TClient | RuntimeClientFactory<TClient>;\n}\n\nexport async function createIntegrationOrm<\n  TClient = unknown,\n  TSchema extends FarmIntegrationSchema = FarmIntegrationSchema,\n>(\n  options: CreateIntegrationOrmOptions<TClient, TSchema>,\n): Promise<InferFarmIntegrationOrmClient<TSchema>> {\n  const [schema, client] = await Promise.all([\n    farmIntegrationSchemaToOrmSchema(options.schema),\n    resolveIntegrationOrmRuntimeClient(options),\n  ]);\n\n  if (!client) {\n    throw new Error(\n      \"Schema-backed integration storage requires a runtime client at farm.config storage.client.\",\n    );\n  }\n\n  const { createOrmFromRuntime } = await import(\"@farming-labs/orm-runtime\");\n  return createOrmFromRuntime({\n    schema,\n    client,\n  }) as Promise<InferFarmIntegrationOrmClient<TSchema>>;\n}\n\nexport async function resolveIntegrationOrmRuntimeClient<TClient = unknown>(\n  options: Omit<CreateIntegrationOrmOptions<TClient>, \"schema\">,\n): Promise<TClient | unknown | undefined> {\n  if (options.client !== undefined) {\n    return typeof options.client === \"function\"\n      ? await (options.client as RuntimeClientFactory<TClient>)()\n      : options.client;\n  }\n\n  return resolveStorageRuntimeClient(options.storage ?? options.config?.storage);\n}\n\nexport async function farmIntegrationSchemaToOrmSchema(\n  schema: FarmIntegrationSchema,\n): Promise<FarmIntegrationOrmSchema> {\n  const orm = await import(\"@farming-labs/orm\");\n  const models: Record<string, AnyModelDefinition> = {};\n\n  for (const [modelKey, modelSchema] of Object.entries(schema.models)) {\n    models[modelKey] = orm.model({\n      table: modelSchema.name ?? modelKey,\n      fields: createOrmModelFields(orm, modelSchema),\n      constraints: createOrmModelConstraints(modelSchema),\n      description: modelSchema.description,\n    }) as AnyModelDefinition;\n  }\n\n  return orm.defineSchema(models) as FarmIntegrationOrmSchema;\n}\n\nfunction createOrmModelFields(\n  orm: typeof import(\"@farming-labs/orm\"),\n  modelSchema: FarmIntegrationSchemaModel,\n): Record<string, AnyFieldBuilder> {\n  return Object.fromEntries(\n    Object.entries(modelSchema.fields).map(([fieldKey, fieldSchema]) => [\n      fieldKey,\n      createOrmField(orm, fieldKey, fieldSchema),\n    ]),\n  );\n}\n\nfunction createOrmField(\n  orm: typeof import(\"@farming-labs/orm\"),\n  fieldKey: string,\n  field: FarmIntegrationSchemaField,\n): AnyFieldBuilder {\n  let builder = createOrmFieldBuilder(orm, fieldKey, field) as AnyFieldBuilder;\n\n  if (field.unique) {\n    builder = builder.unique();\n  }\n\n  if (field.nullable || field.required === false) {\n    builder = builder.nullable();\n  }\n\n  if (field.default !== undefined) {\n    builder =\n      field.type === \"datetime\" && field.default === \"now\"\n        ? builder.defaultNow()\n        : builder.default(field.default as never);\n  }\n\n  if (field.reference) {\n    builder = builder.references(`${field.reference.model}.${field.reference.field}`);\n  }\n\n  if (field.name && field.name !== fieldKey) {\n    builder = builder.map(field.name);\n  }\n\n  if (field.description) {\n    builder = builder.describe(field.description);\n  }\n\n  return builder;\n}\n\nfunction createOrmFieldBuilder(\n  orm: typeof import(\"@farming-labs/orm\"),\n  fieldKey: string,\n  field: FarmIntegrationSchemaField,\n): AnyFieldBuilder {\n  switch (field.type) {\n    case \"id\":\n    case \"uuid\":\n      return orm.id();\n    case \"string\":\n    case \"text\":\n      return orm.string();\n    case \"boolean\":\n      return orm.boolean();\n    case \"integer\":\n      return orm.integer();\n    case \"number\":\n      return orm.decimal();\n    case \"datetime\":\n      return orm.datetime();\n    case \"json\":\n      return orm.json();\n    case \"enum\": {\n      if (!field.values?.length) {\n        throw new Error(`Integration schema enum field \"${fieldKey}\" must define values.`);\n      }\n\n      return orm.enumeration(field.values as readonly [string, ...string[]]);\n    }\n    default:\n      throw new Error(\n        `Unsupported integration schema field type \"${field.type}\" for \"${fieldKey}\".`,\n      );\n  }\n}\n\nfunction createOrmModelConstraints(modelSchema: FarmIntegrationSchemaModel) {\n  const unique: Array<readonly [string, ...string[]]> = [];\n  const indexes: Array<readonly [string, ...string[]]> = [];\n\n  for (const constraint of modelSchema.constraints ?? []) {\n    if (!constraint.fields.length) {\n      continue;\n    }\n\n    const fields = constraint.fields as readonly [string, ...string[]];\n    if (constraint.type === \"unique\") {\n      unique.push(fields);\n    } else {\n      indexes.push(fields);\n    }\n  }\n\n  return {\n    unique,\n    indexes,\n  };\n}\n\nexport type IntegrationOrmModelNames<TSchema extends FarmIntegrationOrmSchema> =\n  keyof SchemaModels<TSchema> & string;\n","import { validateConfigRouteSource } from \"./plugins/route-pattern\";\nimport { defineSchema } from \"./schema\";\nimport type {\n  FarmSchema,\n  FarmSchemaConstraint,\n  FarmSchemaField,\n  FarmSchemaFieldType,\n  FarmSchemaModel,\n  FarmSchemaModelExtension,\n  FarmSchemaModelOverride,\n  FarmSchemaReference,\n} from \"./schema\";\n\n// Keep the schema types available from the integrations entrypoint as well.\n// Integration declarations reference these types, and exporting them here\n// keeps those declarations nameable for consumers that import integration\n// helpers directly.\nexport type {\n  FarmSchema,\n  FarmSchemaConstraint,\n  FarmSchemaField,\n  FarmSchemaFieldType,\n  FarmSchemaModel,\n  FarmSchemaModelExtension,\n  FarmSchemaModelOverride,\n  FarmSchemaReference,\n} from \"./schema\";\n\n// Origin validation for integration auth routes is part of the integration\n// contract, so it is re-exported here alongside defineIntegration rather than\n// only from the package root.\nexport {\n  describeIntegrationOriginRejection,\n  resolveIntegrationAllowedOrigins,\n  validateIntegrationRequestOrigin,\n  type IntegrationOriginPolicy,\n  type IntegrationOriginRejection,\n  type IntegrationOriginResult,\n} from \"./integration-request-security\";\n\nimport type { ComponentType, ReactNode } from \"react\";\nimport { api as integrationApi, defineIntegrationAPIOperation } from \"./integration-api\";\nimport type {\n  FarmIntegrationAPI,\n  FarmIntegrationAPIBodyFormat,\n  FarmIntegrationAPIMethod,\n  FarmIntegrationAPIOperation,\n  FarmIntegrationAPIResponseFormat,\n  FarmIntegrationRouteOperationCarrier,\n  InferIntegrationAPIFromRoutes,\n} from \"./integration-api\";\nimport type { InferFarmIntegrationOrmClient } from \"./integration-orm\";\nimport { setFarmPluginIntegrationContext } from \"./plugin-integration-context\";\nimport { decodeRouteSegment } from \"./utils/decode\";\nimport {\n  assertTerminalCatchAll,\n  assertUniqueRouteParameters,\n  compareRouteSpecificity,\n  getRoutePatternSpecificity,\n} from \"./routing/specificity\";\nimport type {\n  FarmPlugin,\n  FarmPluginContext,\n  FarmPluginIntegrationContext,\n  FarmRequestStore,\n} from \"./plugin\";\nimport {\n  clearRequestContext,\n  deleteRequestContext,\n  getRequestContext,\n  getRequestContextSnapshot,\n  hasRequestContext,\n  setRequestContext,\n} from \"./request-context\";\nimport { applyWebResponseHeaders, sendWebResponse } from \"./server/response\";\nimport type { FarmRequest } from \"./types\";\nimport {\n  bufferFarmRequestBody,\n  createFarmRequestBodyErrorResponse,\n  readNodeRequestBody,\n  resolveFarmServerConfig,\n} from \"./server-http\";\n\nexport { api, defineIntegrationAPI, defineIntegrationAPIOperation } from \"./integration-api\";\nexport type {\n  FarmIntegrationAPI,\n  FarmIntegrationAPIBodyFormat,\n  FarmIntegrationAPIMethod,\n  FarmIntegrationAPIOperation,\n  FarmIntegrationAPIResponseFormat,\n} from \"./integration-api\";\n\nexport type FarmIntegrationCategory = \"auth\" | \"payment\" | \"monitoring\" | \"logging\" | (string & {});\n\n/** @deprecated Use FarmIntegrationCategory instead. */\nexport type FarmIntegrationSlot = FarmIntegrationCategory;\n\nexport type FarmIntegrationRouteParamValue = string | string[];\nexport type FarmIntegrationRouteParams = Record<string, FarmIntegrationRouteParamValue>;\nexport type FarmIntegrationRouteMethod =\n  | FarmIntegrationAPIMethod\n  | Lowercase<FarmIntegrationAPIMethod>\n  | \"ALL\"\n  | \"all\";\nexport type FarmIntegrationRouteInputSource = \"body\" | \"query\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type FarmIntegrationValidationPathSegment =\n  | PropertyKey\n  | {\n      readonly key: PropertyKey;\n    };\n\nexport interface FarmIntegrationRouteInput<TBody = unknown, TQuery = unknown> {\n  body?: TBody;\n  query?: TQuery;\n}\n\nexport interface FarmIntegrationValidationIssue {\n  source: FarmIntegrationRouteInputSource;\n  path?: readonly (string | number)[];\n  code?: string;\n  message: string;\n}\n\nexport interface FarmIntegrationValidationErrorLike {\n  issues?: readonly {\n    path?: readonly FarmIntegrationValidationPathSegment[];\n    code?: string;\n    message?: string;\n  }[];\n  message?: string;\n}\n\nexport type FarmIntegrationValidationResult<TValue> =\n  | {\n      success: true;\n      data: TValue;\n    }\n  | {\n      success: false;\n      error: FarmIntegrationValidationErrorLike;\n    };\n\nexport type FarmIntegrationStandardValidationResult<TValue> =\n  | {\n      value: TValue;\n    }\n  | {\n      issues: readonly {\n        path?: readonly FarmIntegrationValidationPathSegment[];\n        code?: string;\n        message: string;\n      }[];\n    };\n\nexport interface FarmIntegrationInputSchema<TValue = unknown> {\n  _output?: TValue;\n  parse?(value: unknown): MaybePromise<TValue>;\n  safeParse?(value: unknown): MaybePromise<FarmIntegrationValidationResult<TValue>>;\n  safeParseAsync?(value: unknown): Promise<FarmIntegrationValidationResult<TValue>>;\n  \"~standard\"?: {\n    validate(value: unknown): MaybePromise<FarmIntegrationStandardValidationResult<TValue>>;\n    types?: {\n      output: TValue;\n    };\n  };\n}\n\nexport interface FarmIntegrationRouteInputSchemas<TBody = unknown, TQuery = unknown> {\n  body?: FarmIntegrationInputSchema<TBody>;\n  query?: FarmIntegrationInputSchema<TQuery>;\n}\n\n/** @deprecated Use `FarmRequestStore` and access it through `ctx.req`. */\nexport type FarmIntegrationRequestContextStore = FarmRequestStore;\n\nexport const FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY = \"farm.integration.internalDispatch\";\n\n/**\n * Request-context key under which an integration middleware can hand\n * `Set-Cookie` values to the runtime when it returns `void` (i.e. lets the\n * request continue to the downstream route/page handler). The runtime reads\n * this key back after a `void` middleware return and forwards the cookies onto\n * the response it ultimately sends, so a server-side session refresh (or any\n * other cookie rotation) reaches the browser instead of being dropped.\n */\nexport const FARM_INTEGRATION_SET_COOKIES_KEY = \"farm:integration:set-cookies\";\n\n/**\n * Forward `Set-Cookie` values from an integration middleware that returns\n * `void` (the authenticated/passthrough branch) to the runtime, so they are\n * merged onto the response the runtime sends for the matched route. This is\n * the passthrough counterpart to appending `Set-Cookie` to a `Response` the\n * middleware returns directly (e.g. a failure redirect): both paths can rotate\n * auth cookies, and both must be able to reach the browser.\n */\nexport function forwardIntegrationSetCookies(\n  context: Pick<FarmIntegrationHandlerContext, \"req\">,\n  cookies: string[],\n): void {\n  if (cookies.length === 0) return;\n  const existing = context.req.get<string[]>(FARM_INTEGRATION_SET_COOKIES_KEY) ?? [];\n  context.req.set(FARM_INTEGRATION_SET_COOKIES_KEY, [...existing, ...cookies]);\n}\n\n/**\n * Read and clear the forwarded `Set-Cookie` values an integration middleware\n * stashed on the request context. Reading-and-clearing guarantees each batch\n * is applied at most once even when several middleware run for one request.\n */\nfunction takeForwardedIntegrationSetCookies(\n  context: Pick<FarmIntegrationHandlerContext, \"req\">,\n): string[] {\n  const cookies = context.req.get<string[]>(FARM_INTEGRATION_SET_COOKIES_KEY);\n  if (cookies && cookies.length > 0) {\n    context.req.delete(FARM_INTEGRATION_SET_COOKIES_KEY);\n    return cookies;\n  }\n  if (cookies) {\n    context.req.delete(FARM_INTEGRATION_SET_COOKIES_KEY);\n  }\n  return [];\n}\n\n/**\n * Return a copy of `response` carrying the forwarded `Set-Cookie` values, or\n * `response` unchanged when there is nothing to forward. Existing `Set-Cookie`\n * headers on the response are preserved (appended to, not replaced).\n */\nfunction appendIntegrationForwardedCookies(response: Response, cookies: string[]): Response {\n  if (cookies.length === 0) return response;\n  const headers = new Headers(response.headers);\n  for (const cookie of cookies) {\n    headers.append(\"set-cookie\", cookie);\n  }\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nexport type FarmIntegrationRouteDb<TSchema extends FarmIntegrationSchema | undefined> =\n  InferFarmIntegrationOrmClient<TSchema>;\n\nexport interface FarmIntegrationRouteStorageArgs<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  getClient(): Promise<unknown | undefined>;\n  getOrm(): Promise<FarmIntegrationRouteDb<TSchema>>;\n}\n\nexport interface FarmIntegrationRouteArgs<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  db: FarmIntegrationRouteDb<TSchema>;\n  getDb(): Promise<FarmIntegrationRouteDb<TSchema>>;\n  storage: FarmIntegrationRouteStorageArgs<TSchema>;\n}\n\nexport interface FarmIntegrationConfigContext<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  key: string;\n  integration: FarmIntegration<TSchema, any>;\n  appConfig: FarmPluginContext[\"config\"];\n  /** Alias for appConfig. */\n  config: FarmPluginContext[\"config\"];\n  args: FarmIntegrationRouteArgs<TSchema>;\n  env: Record<string, string | undefined>;\n  isDev: boolean;\n  isProd: boolean;\n}\n\nexport interface FarmIntegrationConfigDefinition<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  schema?: FarmIntegrationInputSchema<TConfig>;\n  env?: Record<string, string | readonly string[]>;\n  defaults?:\n    | Partial<TConfig>\n    | ((context: FarmIntegrationConfigContext<TSchema>) => MaybePromise<Partial<TConfig>>);\n  input?:\n    | Partial<TConfig>\n    | ((context: FarmIntegrationConfigContext<TSchema>) => MaybePromise<Partial<TConfig>>);\n  resolve?(\n    context: FarmIntegrationConfigContext<TSchema>,\n  ): MaybePromise<TConfig | Partial<TConfig> | undefined>;\n}\n\nexport type FarmIntegrationConfigInput<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = FarmIntegrationInputSchema<TConfig> | FarmIntegrationConfigDefinition<TConfig, TSchema>;\n\nexport type FarmIntegrationLifecycleLogLevel = \"info\" | \"warn\" | \"error\";\n\nexport interface FarmIntegrationLifecycleLogger {\n  info(message: string, meta?: Record<string, unknown>): void;\n  warn(message: string, meta?: Record<string, unknown>): void;\n  error(message: string, meta?: Record<string, unknown>): void;\n}\n\nexport interface FarmIntegrationLifecycleContext<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationConfigContext<TSchema> {\n  integration: FarmIntegration<TSchema, TConfig>;\n  integrationConfig: TConfig;\n  log: FarmIntegrationLifecycleLogger;\n  reason?: string;\n  cleanup(callback?: () => MaybePromise<void>): Promise<void>;\n}\n\nexport type FarmIntegrationLifecycleHook<\n  TConfig = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (context: FarmIntegrationLifecycleContext<TConfig, TSchema>) => MaybePromise<void>;\n\n/**\n * Small per-call integration metadata. Values received over HTTP are\n * client-controlled and should be validated before authorization decisions.\n */\nexport type FarmIntegrationData = Record<string, unknown>;\n\nexport interface FarmIntegrationHandlerContext<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  request: Request;\n  requestId: string;\n  url: URL;\n  pathname: string;\n  method: string;\n  params: FarmIntegrationRouteParams;\n  input: FarmIntegrationRouteInput<TBody, TQuery>;\n  args: FarmIntegrationRouteArgs<TSchema>;\n  data: FarmIntegrationData;\n  integration: {\n    category: FarmIntegrationCategory;\n    /** @deprecated Use category instead. */\n    slot: FarmIntegrationCategory;\n    type: string;\n    instance: unknown;\n  };\n  route: {\n    kind: \"route\" | \"middleware\";\n    path: string;\n    methods: readonly string[];\n  };\n  req: FarmRequestStore;\n  /** @deprecated Use `req` instead. */\n  requestContext: FarmRequestStore;\n  config: FarmPluginContext[\"config\"];\n  isDev: boolean;\n  isProd: boolean;\n}\n\nexport interface FarmIntegrationRouteHookContext<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationHandlerContext<TBody, TQuery, TSchema> {\n  response?: Response;\n}\n\nexport type FarmIntegrationRouteHook<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = {\n  bivarianceHack(\n    request: Request,\n    context: FarmIntegrationRouteHookContext<TBody, TQuery, TSchema>,\n  ): Promise<Response | void> | Response | void;\n}[\"bivarianceHack\"];\n\nexport interface FarmIntegrationRoute<\n  TBody = unknown,\n  TQuery = unknown,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  path: string;\n  method?: FarmIntegrationRouteMethod;\n  methods?: readonly FarmIntegrationRouteMethod[];\n  middleware?: readonly FarmIntegrationRouteMiddleware<TSchema>[];\n  before?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  after?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  rawBody?: boolean;\n  bodyFormat?: FarmIntegrationAPIBodyFormat;\n  body?: FarmIntegrationInputSchema<TBody>;\n  query?: FarmIntegrationInputSchema<TQuery>;\n  input?: FarmIntegrationRouteInputSchemas<TBody, TQuery>;\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<TBody, TQuery, TSchema>,\n  ): Promise<Response> | Response;\n}\n\nexport interface FarmTypedIntegrationRoute<\n  TPath extends string = string,\n  TBody = never,\n  TQuery = never,\n  TResponse = unknown,\n  TServer extends boolean = false,\n  TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationRoute<TBody, TQuery, TSchema> {\n  path: TPath;\n  method: TMethod;\n  __operation: FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>;\n}\n\nexport interface FarmIntegrationRouteMiddleware<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<unknown, unknown, TSchema>,\n  ): Promise<Response | void> | Response | void;\n}\n\nexport interface FarmIntegrationMiddleware<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  matcher?: string | string[];\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<unknown, unknown, TSchema>,\n  ): Promise<Response | void> | Response | void;\n}\n\nexport interface FarmIntegrationProviderProps {\n  children: ReactNode;\n}\n\nexport interface FarmIntegrationProviderComponentReference {\n  /** Client-safe module specifier using `@/`, a path relative to the app root, or a package. */\n  module: string;\n  /** Named export to use. Defaults to the module's default export. */\n  export?: string;\n}\n\nexport interface FarmIntegrationProvider {\n  name: string;\n  type: string;\n  props?: Record<string, unknown>;\n  /**\n   * The provider can be instantiated independently around each isolated\n   * client root without relying on context or state owned by the route root.\n   * Providers are treated as route-wide unless they explicitly opt in.\n   */\n  supportsIsolatedHydration?: boolean;\n  component?:\n    | ComponentType<FarmIntegrationProviderProps>\n    | FarmIntegrationProviderComponentReference;\n}\n\nexport interface FarmIntegrationDocumentNavigation {\n  matcher: string | readonly string[];\n}\n\n// The data schema is renderer- and feature-neutral: it now lives in ./schema\n// so applications can declare one without reaching into the integration API.\n// These aliases keep every shipped `*IntegrationSchema*` name working.\n\n/** @deprecated Use `FarmSchemaFieldType`. */\nexport type FarmIntegrationSchemaFieldType = FarmSchemaFieldType;\n\n/** @deprecated Use `FarmSchemaReference`. */\nexport type FarmIntegrationSchemaReference = FarmSchemaReference;\n\n/** @deprecated Use `FarmSchemaField`. */\nexport type FarmIntegrationSchemaField = FarmSchemaField;\n\n/** @deprecated Use `FarmSchemaConstraint`. */\nexport type FarmIntegrationSchemaConstraint = FarmSchemaConstraint;\n\n/** @deprecated Use `FarmSchemaModel`. */\nexport type FarmIntegrationSchemaModel = FarmSchemaModel;\n\n/** @deprecated Use `FarmSchemaModelExtension`. */\nexport type FarmIntegrationSchemaModelExtension = FarmSchemaModelExtension;\n\n/** @deprecated Use `FarmSchemaModelOverride`. */\nexport type FarmIntegrationSchemaModelOverride = FarmSchemaModelOverride;\n\n/** @deprecated Use `FarmSchema`. */\nexport type FarmIntegrationSchema = FarmSchema;\n\n/** @deprecated Use `defineSchema`. This is an exact alias, not a wrapper. */\nexport const defineIntegrationSchema = defineSchema;\n\nexport type FarmIntegrationLogPhase =\n  | \"registered\"\n  | \"validate\"\n  | \"setup\"\n  | \"ready\"\n  | \"dispose\"\n  | \"request:start\"\n  | \"request:end\"\n  | \"request:error\";\n\nexport interface FarmIntegrationLogEvent {\n  category: FarmIntegrationCategory;\n  /** @deprecated Use category instead. */\n  slot: FarmIntegrationCategory;\n  type: string;\n  phase: FarmIntegrationLogPhase;\n  route?: {\n    kind: \"route\" | \"middleware\";\n    path: string;\n    methods: readonly string[];\n  };\n  requestId?: string;\n  request?: Request;\n  response?: Response;\n  error?: unknown;\n  durationMs?: number;\n  level?: FarmIntegrationLifecycleLogLevel;\n  message?: string;\n  meta?: Record<string, unknown>;\n  context: Map<string, unknown>;\n}\n\nexport type FarmIntegrationLogger = (event: FarmIntegrationLogEvent) => void | Promise<void>;\n\nexport interface FarmIntegrationPluginOwner {\n  key: string;\n  category: FarmIntegrationCategory;\n  type: string;\n  source: \"lifecycle\" | \"contribution\";\n  serverRuntime: boolean;\n}\n\n/** A normal plugin or an integration-bound plugin compatible with the shared instance. */\nexport type FarmIntegrationContributedPlugin<TInstance = unknown> =\n  | FarmPlugin<any, any, any, any, unknown, false>\n  | FarmPlugin<any, any, any, any, TInstance, true>;\n\nexport interface FarmIntegration<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n  TConfig = unknown,\n  TInstance = unknown,\n> {\n  readonly kind: \"farm-integration\";\n  category: FarmIntegrationCategory;\n  /** @deprecated Use category instead. */\n  slot?: FarmIntegrationCategory;\n  type: string;\n  instance: TInstance;\n  /** Set to false when a platform adapter owns this integration's production routes. */\n  serverRuntime?: boolean;\n  api?: FarmIntegrationAPI;\n  schema?: TSchema;\n  config?: FarmIntegrationConfigInput<TConfig, TSchema>;\n  validate?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  setup?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  ready?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  dispose?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n  log?: FarmIntegrationLogger;\n  routes?: readonly FarmIntegrationRoute<any, any, TSchema>[];\n  endpoints?: FarmIntegrationEndpoints<TSchema>;\n  middleware?: readonly FarmIntegrationMiddleware<TSchema>[];\n  providers?: readonly FarmIntegrationProvider[];\n  documentNavigations?: readonly FarmIntegrationDocumentNavigation[];\n  /** Additional Farm plugins owned and configured by this integration. */\n  plugins?: readonly FarmIntegrationContributedPlugin<NoInfer<TInstance>>[];\n}\n\nexport type FarmIntegrationsUserConfig = Record<string, FarmIntegration<any, any, any> | undefined>;\n\nconst FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME = Symbol.for(\n  \"@farm.js/core/integration-plugin-server-runtime\",\n);\nconst FARM_INTEGRATION_PLUGIN_OWNER = Symbol.for(\"@farm.js/core/integration-plugin-owner\");\n\n/** @internal Identifies plugins owned by platform-managed integrations. */\nexport function getFarmIntegrationPluginServerRuntime(plugin: FarmPlugin): boolean | undefined {\n  const value = (plugin as FarmPlugin & Record<symbol, unknown>)[\n    FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME\n  ];\n  return typeof value === \"boolean\" ? value : undefined;\n}\n\n/** Returns the integration that contributed a normalized plugin, when applicable. */\nexport function getFarmIntegrationPluginOwner(\n  plugin: FarmPlugin,\n): Readonly<FarmIntegrationPluginOwner> | undefined {\n  const value = (plugin as FarmPlugin & Record<symbol, unknown>)[FARM_INTEGRATION_PLUGIN_OWNER];\n  return value && typeof value === \"object\"\n    ? (value as Readonly<FarmIntegrationPluginOwner>)\n    : undefined;\n}\n\ntype IntegrationRouteBuilderOptions<\n  TBody,\n  TQuery,\n  TServer extends boolean,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = {\n  middleware?: readonly FarmIntegrationRouteMiddleware<TSchema>[];\n  before?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  after?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n  rawBody?: boolean;\n  headers?: Record<string, string>;\n  credentials?: RequestCredentials;\n  bodyFormat?: FarmIntegrationAPIBodyFormat;\n  responseFormat?: FarmIntegrationAPIResponseFormat;\n  isServer?: TServer;\n  body?: FarmIntegrationInputSchema<TBody>;\n  query?: FarmIntegrationInputSchema<TQuery>;\n  input?: FarmIntegrationRouteInputSchemas<TBody, TQuery>;\n  handler(\n    request: Request,\n    context: FarmIntegrationHandlerContext<TBody, TQuery, TSchema>,\n  ): Promise<Response> | Response;\n};\n\nfunction defineTypedIntegrationRoute<\n  TPath extends string,\n  TBody,\n  TQuery,\n  TResponse,\n  TServer extends boolean,\n  TMethod extends FarmIntegrationAPIMethod,\n  TSchema extends FarmIntegrationSchema | undefined,\n>(\n  method: TMethod,\n  path: TPath,\n  input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, TMethod, TSchema> {\n  return {\n    path,\n    method,\n    middleware: input.middleware,\n    before: input.before,\n    after: input.after,\n    rawBody: input.rawBody,\n    bodyFormat: input.bodyFormat,\n    input: normalizeIntegrationRouteInputSchemas(input),\n    handler: input.handler,\n    __operation: defineIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>({\n      path,\n      method,\n      bodyFormat: input.bodyFormat,\n      responseFormat: input.responseFormat,\n      headers: input.headers,\n      credentials: input.credentials,\n      isServer: input.isServer,\n    }),\n  };\n}\n\nexport interface FarmIntegrationRouteFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  get<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    path: TPath,\n    input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n  ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"GET\", TSchema>;\n  post<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"POST\", TSchema>;\n  query<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"QUERY\", TSchema>;\n  put<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PUT\", TSchema>;\n  patch<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PATCH\", TSchema>;\n  delete<\n    TPath extends string,\n    TBody = never,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n  ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"DELETE\", TSchema>;\n  options<\n    TPath extends string,\n    TResponse = unknown,\n    TQuery = never,\n    TServer extends boolean = false,\n  >(\n    path: TPath,\n    input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n  ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"OPTIONS\", TSchema>;\n  head<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n    path: TPath,\n    input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n  ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"HEAD\", TSchema>;\n}\n\nexport interface FarmIntegrationRoutesFactoryContext<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n  route: FarmIntegrationRouteFactory<TSchema>;\n  integrationRoute: FarmIntegrationRouteFactory<TSchema>;\n}\n\nexport type FarmIntegrationRoutesFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (\n  context: FarmIntegrationRoutesFactoryContext<TSchema>,\n) => readonly FarmIntegrationRoute<any, any, TSchema>[];\n\nexport type FarmIntegrationEndpointValue<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> =\n  | FarmIntegrationRoute<any, any, TSchema>\n  | readonly FarmIntegrationEndpointValue<TSchema>[]\n  | {\n      readonly [key: string]: FarmIntegrationEndpointValue<TSchema> | undefined;\n    };\n\nexport type FarmIntegrationEndpoints<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = {\n  readonly [key: string]: FarmIntegrationEndpointValue<TSchema> | undefined;\n};\n\nexport interface FarmIntegrationEndpointsFactoryContext<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationRoutesFactoryContext<TSchema> {\n  endpoint: FarmIntegrationRouteFactory<TSchema>;\n}\n\nexport type FarmIntegrationEndpointsFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (context: FarmIntegrationEndpointsFactoryContext<TSchema>) => FarmIntegrationEndpoints<TSchema>;\n\nfunction createIntegrationRouteFactory<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n>(): FarmIntegrationRouteFactory<TSchema> {\n  return {\n    get<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n      path: TPath,\n      input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n    ) {\n      return defineTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"GET\", TSchema>(\n        \"GET\",\n        path,\n        input,\n      );\n    },\n    post<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"POST\", TSchema>(\n        \"POST\",\n        path,\n        {\n          bodyFormat: \"json\",\n          ...input,\n        },\n      );\n    },\n    query<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        TBody,\n        TQuery,\n        TResponse,\n        TServer,\n        \"QUERY\",\n        TSchema\n      >(\"QUERY\", path, {\n        bodyFormat: \"json\",\n        ...input,\n      });\n    },\n    put<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PUT\", TSchema>(\n        \"PUT\",\n        path,\n        {\n          bodyFormat: \"json\",\n          ...input,\n        },\n      );\n    },\n    patch<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        TBody,\n        TQuery,\n        TResponse,\n        TServer,\n        \"PATCH\",\n        TSchema\n      >(\"PATCH\", path, {\n        bodyFormat: \"json\",\n        ...input,\n      });\n    },\n    delete<\n      TPath extends string,\n      TBody = never,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        TBody,\n        TQuery,\n        TResponse,\n        TServer,\n        \"DELETE\",\n        TSchema\n      >(\"DELETE\", path, {\n        bodyFormat: \"json\",\n        ...input,\n      });\n    },\n    options<\n      TPath extends string,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(\n      path: TPath,\n      input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n    ) {\n      return defineTypedIntegrationRoute<\n        TPath,\n        never,\n        TQuery,\n        TResponse,\n        TServer,\n        \"OPTIONS\",\n        TSchema\n      >(\"OPTIONS\", path, input);\n    },\n    head<\n      TPath extends string,\n      TResponse = unknown,\n      TQuery = never,\n      TServer extends boolean = false,\n    >(\n      path: TPath,\n      input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n    ) {\n      return defineTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"HEAD\", TSchema>(\n        \"HEAD\",\n        path,\n        input,\n      );\n    },\n  };\n}\n\nexport function createIntegrationRoute<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n>(_schema?: TSchema): FarmIntegrationRouteFactory<TSchema> {\n  return createIntegrationRouteFactory<TSchema>();\n}\n\nexport const integrationRoute = createIntegrationRouteFactory<undefined>();\n\ntype RegisteredIntegrationRuntime = {\n  integration: FarmIntegration;\n  config: FarmPluginContext[\"config\"];\n  isDev: boolean;\n  isProd: boolean;\n};\n\nconst INTEGRATION_RUNTIME_REGISTRY_KEY = Symbol.for(\"farm.integrationRuntimeRegistry\");\nconst INTEGRATION_REQUEST_DISPATCHER_KEY = Symbol.for(\"farm.integrationRequestDispatcher\");\n\ntype IntegrationRequestDispatcher = (\n  runtime: RegisteredIntegrationRuntime,\n  request: Request,\n  options?: { currentRequest?: Request },\n) => Promise<Response | null>;\n\ntype GlobalWithIntegrationRuntimeRegistry = typeof globalThis & {\n  [INTEGRATION_RUNTIME_REGISTRY_KEY]?: Map<string, RegisteredIntegrationRuntime>;\n  [INTEGRATION_REQUEST_DISPATCHER_KEY]?: IntegrationRequestDispatcher;\n};\n\nfunction getIntegrationRuntimeRegistry() {\n  const globalState = globalThis as GlobalWithIntegrationRuntimeRegistry;\n  if (!globalState[INTEGRATION_RUNTIME_REGISTRY_KEY]) {\n    globalState[INTEGRATION_RUNTIME_REGISTRY_KEY] = new Map<string, RegisteredIntegrationRuntime>();\n  }\n\n  return globalState[INTEGRATION_RUNTIME_REGISTRY_KEY]!;\n}\n\ntype FarmIntegrationRoutesInput<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = readonly FarmIntegrationRoute<any, any, TSchema>[] | FarmIntegrationRoutesFactory<TSchema>;\n\ntype FarmIntegrationEndpointsInput<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = FarmIntegrationEndpoints<TSchema> | FarmIntegrationEndpointsFactory<TSchema>;\n\ntype FarmIntegrationInput<\n  TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n  TConfig = unknown,\n  TInstance = unknown,\n> = Omit<\n  FarmIntegration<TSchema, TConfig, TInstance>,\n  \"kind\" | \"category\" | \"slot\" | \"instance\" | \"config\" | \"routes\" | \"endpoints\" | \"plugins\"\n> & {\n  instance: TInstance;\n  config?: FarmIntegrationConfigInput<TConfig, TSchema>;\n  routes?: FarmIntegrationRoutesInput<TSchema>;\n  endpoints?: FarmIntegrationEndpointsInput<TSchema>;\n  plugins?: readonly FarmIntegrationContributedPlugin<NoInfer<TInstance>>[];\n} & (\n    | {\n        category: FarmIntegrationCategory;\n        slot?: FarmIntegrationCategory;\n      }\n    | {\n        category?: FarmIntegrationCategory;\n        slot: FarmIntegrationCategory;\n      }\n  );\n\ntype FarmIntegrationCategoryInput =\n  | {\n      category: FarmIntegrationCategory;\n      slot?: FarmIntegrationCategory;\n    }\n  | {\n      category?: FarmIntegrationCategory;\n      slot: FarmIntegrationCategory;\n    };\n\ntype FarmIntegrationShapeForInference = FarmIntegrationCategoryInput & {\n  api?: FarmIntegrationAPI;\n  schema?: FarmIntegrationSchema;\n  config?: unknown;\n  routes?: unknown;\n  endpoints?: unknown;\n};\n\ntype ExtractIntegrationSchema<TIntegration> = TIntegration extends {\n  schema: infer TSchema extends FarmIntegrationSchema;\n}\n  ? TSchema\n  : undefined;\n\ntype ResolveIntegrationRoutesInput<TRoutes, TSchema extends FarmIntegrationSchema | undefined> =\n  TRoutes extends FarmIntegrationRoutesFactory<TSchema> ? ReturnType<TRoutes> : TRoutes;\n\ntype ResolveIntegrationEndpointsInput<\n  TEndpoints,\n  TSchema extends FarmIntegrationSchema | undefined,\n> =\n  TEndpoints extends FarmIntegrationEndpointsFactory<TSchema> ? ReturnType<TEndpoints> : TEndpoints;\n\ntype ExtractIntegrationRoutesFromRoutesInput<\n  TRoutes,\n  TSchema extends FarmIntegrationSchema | undefined,\n> =\n  ResolveIntegrationRoutesInput<TRoutes, TSchema> extends readonly (infer TRoute)[]\n    ? TRoute\n    : never;\n\ntype ExtractIntegrationRoutesFromEndpointValue<TValue> =\n  TValue extends FarmIntegrationRouteOperationCarrier<string, any>\n    ? TValue\n    : TValue extends readonly (infer TItem)[]\n      ? ExtractIntegrationRoutesFromEndpointValue<TItem>\n      : TValue extends object\n        ? ExtractIntegrationRoutesFromEndpointValue<TValue[keyof TValue]>\n        : never;\n\ntype ExtractIntegrationRoutesFromEndpointsInput<\n  TEndpoints,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = ExtractIntegrationRoutesFromEndpointValue<\n  ResolveIntegrationEndpointsInput<TEndpoints, TSchema>\n>;\n\ntype ExtractIntegrationRouteUnion<TIntegration, TSchema extends FarmIntegrationSchema | undefined> =\n  | (TIntegration extends { routes: infer TRoutes }\n      ? ExtractIntegrationRoutesFromRoutesInput<TRoutes, TSchema>\n      : never)\n  | (TIntegration extends { endpoints: infer TEndpoints }\n      ? ExtractIntegrationRoutesFromEndpointsInput<TEndpoints, TSchema>\n      : never);\n\ntype ExtractDefinedIntegrationRoutes<\n  TIntegration,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = [ExtractIntegrationRouteUnion<TIntegration, TSchema>] extends [never]\n  ? undefined\n  : readonly ExtractIntegrationRouteUnion<TIntegration, TSchema>[];\n\ntype ExtractDefinedIntegrationEndpoints<\n  TIntegration,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = TIntegration extends { endpoints: infer TEndpoints }\n  ? ResolveIntegrationEndpointsInput<TEndpoints, TSchema>\n  : undefined;\n\ntype ExtractIntegrationAPIRoutes<\n  TIntegration,\n  TSchema extends FarmIntegrationSchema | undefined,\n> = Extract<\n  ExtractIntegrationRouteUnion<TIntegration, TSchema>,\n  FarmIntegrationRouteOperationCarrier<string, any>\n>;\n\ntype ExtractIntegrationCategory<TIntegration extends FarmIntegrationCategoryInput> =\n  TIntegration extends {\n    category: infer TCategory extends FarmIntegrationCategory;\n  }\n    ? TCategory\n    : TIntegration extends { slot: infer TSlot extends FarmIntegrationCategory }\n      ? TSlot\n      : FarmIntegrationCategory;\n\ntype ExtractDerivedIntegrationAPI<\n  TIntegration extends FarmIntegrationShapeForInference,\n  TSchema extends FarmIntegrationSchema | undefined = ExtractIntegrationSchema<TIntegration>,\n> = TIntegration extends { api: infer TAPI extends FarmIntegrationAPI }\n  ? TAPI\n  : [ExtractIntegrationAPIRoutes<TIntegration, TSchema>] extends [never]\n    ? FarmIntegrationAPI | undefined\n    : InferIntegrationAPIFromRoutes<readonly ExtractIntegrationAPIRoutes<TIntegration, TSchema>[]>;\n\nexport type DefinedIntegration<\n  TIntegration extends FarmIntegrationShapeForInference,\n  TSchema extends FarmIntegrationSchema | undefined = ExtractIntegrationSchema<TIntegration>,\n> = Omit<TIntegration, \"kind\" | \"category\" | \"slot\" | \"api\" | \"routes\" | \"endpoints\"> & {\n  readonly kind: \"farm-integration\";\n  category: ExtractIntegrationCategory<TIntegration>;\n  slot: ExtractIntegrationCategory<TIntegration>;\n  routes: ExtractDefinedIntegrationRoutes<TIntegration, TSchema>;\n  endpoints: ExtractDefinedIntegrationEndpoints<TIntegration, TSchema>;\n  api: ExtractDerivedIntegrationAPI<TIntegration, TSchema>;\n};\n\nfunction isIntegrationEndpointRoute(value: unknown): value is FarmIntegrationRoute {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as { path?: unknown }).path === \"string\" &&\n    typeof (value as { handler?: unknown }).handler === \"function\"\n  );\n}\n\nfunction flattenIntegrationEndpoints(\n  endpoints: FarmIntegrationEndpointValue | FarmIntegrationEndpoints | undefined,\n): FarmIntegrationRoute[] {\n  if (!endpoints) {\n    return [];\n  }\n\n  if (Array.isArray(endpoints)) {\n    return endpoints.flatMap((endpoint) => flattenIntegrationEndpoints(endpoint));\n  }\n\n  if (isIntegrationEndpointRoute(endpoints)) {\n    return [endpoints];\n  }\n\n  if (typeof endpoints === \"object\") {\n    return Object.values(endpoints).flatMap((endpoint) => flattenIntegrationEndpoints(endpoint));\n  }\n\n  return [];\n}\n\nexport function defineIntegration<\n  const TSchema extends FarmIntegrationSchema | undefined,\n  const TConfig,\n  TIntegration extends FarmIntegrationInput<TSchema, TConfig, any>,\n>(\n  integration: TIntegration &\n    FarmIntegrationInput<TSchema, TConfig, NoInfer<TIntegration[\"instance\"]>>,\n): DefinedIntegration<TIntegration, TSchema>;\nexport function defineIntegration<\n  const TSchema extends FarmIntegrationSchema | undefined,\n  const TConfig,\n  TIntegration extends FarmIntegrationInput<TSchema, TConfig, any>,\n>(\n  integration: TIntegration &\n    FarmIntegrationInput<TSchema, TConfig, NoInfer<TIntegration[\"instance\"]>>,\n): DefinedIntegration<TIntegration, TSchema> {\n  const category = integration.category ?? integration.slot;\n\n  if (!category) {\n    throw new Error(\"Integration category is required.\");\n  }\n\n  if (integration.category && integration.slot && integration.category !== integration.slot) {\n    throw new Error(\"Integration category and slot must match when both are provided.\");\n  }\n\n  const routeFactory = createIntegrationRoute(integration.schema);\n  const routes =\n    typeof integration.routes === \"function\"\n      ? integration.routes({\n          route: routeFactory,\n          integrationRoute: routeFactory,\n        })\n      : integration.routes;\n  const endpoints =\n    typeof integration.endpoints === \"function\"\n      ? integration.endpoints({\n          endpoint: routeFactory,\n          route: routeFactory,\n          integrationRoute: routeFactory,\n        })\n      : integration.endpoints;\n  const endpointRoutes = flattenIntegrationEndpoints(endpoints);\n  const allRoutes =\n    routes?.length || endpointRoutes.length\n      ? ([...(routes || []), ...endpointRoutes] as readonly FarmIntegrationRoute[])\n      : undefined;\n\n  for (const route of allRoutes || []) {\n    assertUniqueRouteParameters(route.path, \"api\");\n    validateConfigRouteSource(route.path, `Integration route \"${route.path}\"`);\n    assertTerminalCatchAll(route.path, \"api\");\n  }\n\n  const derivedApi =\n    integration.api ||\n    (allRoutes?.length\n      ? integrationApi.fromRoutes(\n          allRoutes as unknown as ReadonlyArray<{\n            path: string;\n            __operation: FarmIntegrationAPIOperation<any, any, any, any, any>;\n          }>,\n        )\n      : undefined);\n\n  return {\n    kind: \"farm-integration\",\n    ...integration,\n    endpoints,\n    routes: allRoutes,\n    api: derivedApi,\n    category,\n    slot: category,\n  } as unknown as DefinedIntegration<TIntegration, TSchema>;\n}\n\nexport function isFarmIntegration(value: unknown): value is FarmIntegration {\n  return (\n    !!value && typeof value === \"object\" && (value as FarmIntegration).kind === \"farm-integration\"\n  );\n}\n\nexport function resolveIntegrationPlugins(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): FarmPlugin[] {\n  if (!integrations) {\n    return [];\n  }\n\n  const plugins: FarmPlugin[] = [];\n  for (const [key, integration] of Object.entries(integrations)) {\n    if (!integration || !isFarmIntegration(integration)) {\n      continue;\n    }\n\n    const owner = createIntegrationPluginOwner(key, integration, \"lifecycle\");\n    plugins.push(withIntegrationPluginOwner(createIntegrationPlugin(key, integration), owner));\n    plugins.push(...resolveIntegrationPluginContributions(key, integration));\n  }\n\n  return plugins;\n}\n\nfunction resolveIntegrationPluginContributions(\n  key: string,\n  integration: FarmIntegration<any, any>,\n): FarmPlugin[] {\n  const contributions = integration.plugins;\n  if (!contributions) return [];\n  if (!Array.isArray(contributions)) {\n    throw new TypeError(`Integration \"${key}\" plugins must be an array`);\n  }\n\n  const names = new Set<string>();\n  return contributions.map((plugin, index) => {\n    if (!plugin || typeof plugin !== \"object\" || typeof plugin.name !== \"string\") {\n      throw new TypeError(`Integration \"${key}\" plugin at index ${index} is invalid`);\n    }\n    const name = plugin.name.trim();\n    if (!name) {\n      throw new TypeError(`Integration \"${key}\" plugin at index ${index} requires a name`);\n    }\n    if (names.has(name)) {\n      throw new Error(`Integration \"${key}\" contributes duplicate plugin name \"${name}\"`);\n    }\n    names.add(name);\n\n    return withIntegrationPluginOwner(\n      plugin,\n      createIntegrationPluginOwner(key, integration, \"contribution\"),\n      createIntegrationPluginContext(key, integration),\n    );\n  });\n}\n\nfunction createIntegrationPluginOwner(\n  key: string,\n  integration: FarmIntegration<any, any>,\n  source: FarmIntegrationPluginOwner[\"source\"],\n): Readonly<FarmIntegrationPluginOwner> {\n  return Object.freeze({\n    key,\n    category: integration.category,\n    type: integration.type,\n    source,\n    serverRuntime: integration.serverRuntime !== false,\n  });\n}\n\nfunction createIntegrationPluginContext(\n  key: string,\n  integration: FarmIntegration<any, any>,\n): Readonly<FarmPluginIntegrationContext> {\n  return Object.freeze({\n    key,\n    category: integration.category,\n    type: integration.type,\n    instance: integration.instance,\n    serverRuntime: integration.serverRuntime !== false,\n  });\n}\n\nfunction withIntegrationPluginOwner(\n  plugin: FarmPlugin<any, any, any, any, any, boolean>,\n  owner: Readonly<FarmIntegrationPluginOwner>,\n  integration?: Readonly<FarmPluginIntegrationContext>,\n): FarmPlugin {\n  const descriptors = Object.getOwnPropertyDescriptors(plugin);\n  Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_OWNER);\n  Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME);\n  const ownedPlugin = Object.create(Object.getPrototypeOf(plugin), descriptors) as FarmPlugin;\n  Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_OWNER, { value: owner });\n  Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME, {\n    value: owner.serverRuntime,\n  });\n  if (integration) {\n    setFarmPluginIntegrationContext(ownedPlugin, integration);\n  }\n  return ownedPlugin;\n}\n\nexport function getIntegrationProviders(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): FarmIntegrationProvider[] {\n  if (!integrations) {\n    return [];\n  }\n\n  const providers: FarmIntegrationProvider[] = [];\n  for (const integration of Object.values(integrations)) {\n    if (!integration || !isFarmIntegration(integration) || !integration.providers?.length) {\n      continue;\n    }\n\n    for (const provider of integration.providers) {\n      providers.push({\n        name: provider.name,\n        type: provider.type,\n        props: provider.props,\n        supportsIsolatedHydration: provider.supportsIsolatedHydration,\n        component: provider.component,\n      });\n    }\n  }\n\n  return providers;\n}\n\nexport function isFarmIntegrationProviderComponentReference(\n  value: FarmIntegrationProvider[\"component\"],\n): value is FarmIntegrationProviderComponentReference {\n  return Boolean(\n    value &&\n    typeof value === \"object\" &&\n    \"module\" in value &&\n    typeof value.module === \"string\" &&\n    value.module.length > 0,\n  );\n}\n\nexport function getIntegrationDocumentNavigationMatchers(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): string[] {\n  if (!integrations) {\n    return [];\n  }\n\n  const matchers: string[] = [];\n  for (const integration of Object.values(integrations)) {\n    if (\n      !integration ||\n      !isFarmIntegration(integration) ||\n      !integration.documentNavigations?.length\n    ) {\n      continue;\n    }\n\n    for (const navigation of integration.documentNavigations) {\n      const items = Array.isArray(navigation.matcher) ? navigation.matcher : [navigation.matcher];\n\n      for (const item of items) {\n        matchers.push(item);\n      }\n    }\n  }\n\n  return matchers;\n}\n\nexport function getIntegrationSchemas(\n  integrations: FarmIntegrationsUserConfig | undefined,\n): Record<string, FarmIntegrationSchema> {\n  if (!integrations) {\n    return {};\n  }\n\n  const schemaEntries = Object.entries(integrations)\n    .map(([key, integration]) => {\n      const schema = integration && isFarmIntegration(integration) ? integration.schema : undefined;\n      return schema ? ([key, schema] as const) : null;\n    })\n    .filter((value): value is readonly [string, FarmIntegrationSchema] => value !== null);\n\n  return Object.fromEntries(schemaEntries);\n}\n\nexport function getRegisteredIntegrationRuntime(\n  key: string,\n): RegisteredIntegrationRuntime | undefined {\n  return getIntegrationRuntimeRegistry().get(key);\n}\n\nexport function getRegisteredIntegrations(): Record<string, FarmIntegration> {\n  return Object.fromEntries(\n    Array.from(getIntegrationRuntimeRegistry().entries()).map(([key, runtime]) => [\n      key,\n      runtime.integration,\n    ]),\n  );\n}\n\nexport function getRegisteredIntegrationSchemas(): Record<string, FarmIntegrationSchema> {\n  return getIntegrationSchemas(getRegisteredIntegrations());\n}\n\nexport function matchIntegrationRoute(\n  integrations: FarmIntegrationsUserConfig | undefined,\n  input: {\n    pathname: string;\n    method?: string;\n  },\n): {\n  key: string;\n  integration: FarmIntegration;\n  route: {\n    path: string;\n    methods: readonly string[];\n  };\n  params: FarmIntegrationRouteParams;\n} | null {\n  if (!integrations) {\n    return null;\n  }\n\n  for (const [key, integration] of Object.entries(integrations)) {\n    if (!integration || !isFarmIntegration(integration)) {\n      continue;\n    }\n\n    const routes = normalizeIntegrationRoutes(integration.routes || []);\n\n    for (const route of routes) {\n      if (!matchesMethod(route.methods, input.method)) {\n        continue;\n      }\n\n      const params = extractPathParams(route.path, input.pathname);\n      if (!params) {\n        continue;\n      }\n\n      return {\n        key,\n        integration,\n        route: {\n          path: route.path,\n          methods: route.methods,\n        },\n        params,\n      };\n    }\n  }\n\n  return null;\n}\n\nexport function matchRegisteredIntegrationRoute(input: { pathname: string; method?: string }): {\n  key: string;\n  integration: FarmIntegration;\n  route: {\n    path: string;\n    methods: readonly string[];\n  };\n  params: FarmIntegrationRouteParams;\n} | null {\n  return matchIntegrationRoute(getRegisteredIntegrations(), input);\n}\n\nfunction createClientSafeIntegrationAPI(\n  api: FarmIntegrationAPI | undefined,\n): FarmIntegrationAPI | undefined {\n  if (!api) {\n    return undefined;\n  }\n\n  const entries = Object.entries(api as Record<string, unknown>).map(([key, value]) => {\n    if (\n      value &&\n      typeof value === \"object\" &&\n      (value as FarmIntegrationAPIOperation<any, any, any, any, any>).kind ===\n        \"farm-integration-api-operation\"\n    ) {\n      const operation = value as FarmIntegrationAPIOperation<any, any, any, any, any>;\n      return [\n        key,\n        defineIntegrationAPIOperation({\n          path: operation.path,\n          method: operation.method,\n          bodyFormat: operation.bodyFormat,\n          responseFormat: operation.responseFormat,\n          credentials: operation.credentials,\n          isServer: operation.isServer,\n        }),\n      ];\n    }\n\n    if (value && typeof value === \"object\") {\n      return [key, createClientSafeIntegrationAPI(value as FarmIntegrationAPI)];\n    }\n\n    return [key, value];\n  });\n\n  return Object.fromEntries(entries) as FarmIntegrationAPI;\n}\n\nexport function getRegisteredIntegrationAPIManifest(): Record<string, FarmIntegrationAPI> {\n  const manifestEntries = Object.entries(getRegisteredIntegrations())\n    .map(([key, integration]) => {\n      const api = createClientSafeIntegrationAPI(integration.api);\n      return api ? ([key, api] as const) : null;\n    })\n    .filter((value): value is readonly [string, FarmIntegrationAPI] => value !== null);\n\n  return Object.fromEntries(manifestEntries);\n}\n\ntype IntegrationLifecycleCleanup = () => MaybePromise<void>;\n\nfunction getIntegrationRuntimeEnv(): Record<string, string | undefined> {\n  return typeof process !== \"undefined\" ? process.env : {};\n}\n\nfunction isIntegrationConfigDefinition(\n  value: unknown,\n): value is FarmIntegrationConfigDefinition<unknown> {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (\"schema\" in value ||\n      \"env\" in value ||\n      \"defaults\" in value ||\n      \"input\" in value ||\n      \"resolve\" in value)\n  );\n}\n\nfunction mergeIntegrationConfigValue(current: unknown, next: unknown): unknown {\n  if (next === undefined) {\n    return current;\n  }\n\n  if (isPlainIntegrationConfigObject(current) && isPlainIntegrationConfigObject(next)) {\n    return {\n      ...current,\n      ...next,\n    };\n  }\n\n  return next;\n}\n\nfunction isPlainIntegrationConfigObject(value: unknown): value is Record<string, unknown> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nasync function resolveIntegrationConfigPart<TValue>(\n  value: TValue | ((context: FarmIntegrationConfigContext) => MaybePromise<TValue>) | undefined,\n  context: FarmIntegrationConfigContext,\n): Promise<TValue | undefined> {\n  if (typeof value === \"function\") {\n    return (value as (context: FarmIntegrationConfigContext) => MaybePromise<TValue>)(context);\n  }\n\n  return value;\n}\n\nfunction resolveIntegrationEnvConfig(\n  env: Record<string, string | readonly string[]> | undefined,\n): Record<string, string> | undefined {\n  if (!env) {\n    return undefined;\n  }\n\n  const runtimeEnv = getIntegrationRuntimeEnv();\n  const config: Record<string, string> = {};\n\n  for (const [key, names] of Object.entries(env)) {\n    const envNames = Array.isArray(names) ? names : [names];\n    const value = envNames.map((name) => runtimeEnv[name]).find((entry) => entry !== undefined);\n    if (value !== undefined) {\n      config[key] = value;\n    }\n  }\n\n  return config;\n}\n\nasync function parseIntegrationConfigSchema<TConfig>(\n  integration: FarmIntegration<any, any>,\n  schema: FarmIntegrationInputSchema<TConfig>,\n  value: unknown,\n): Promise<TConfig> {\n  const parser = schema.safeParseAsync || schema.safeParse;\n  if (parser) {\n    const result = await parser.call(schema, value);\n    if (result.success) {\n      return result.data;\n    }\n\n    throw createIntegrationConfigValidationError(integration, result.error);\n  }\n\n  if (schema[\"~standard\"]?.validate) {\n    const result = await schema[\"~standard\"].validate(value);\n    if (\"value\" in result) {\n      return result.value;\n    }\n\n    throw createIntegrationConfigValidationError(integration, {\n      issues: result.issues,\n    });\n  }\n\n  if (schema.parse) {\n    try {\n      return await schema.parse(value);\n    } catch (error) {\n      throw createIntegrationConfigValidationError(\n        integration,\n        normalizeIntegrationValidationError(error),\n      );\n    }\n  }\n\n  throw new Error(\n    `Integration \"${integration.type}\" config schema must expose safeParse, safeParseAsync, parse, or ~standard.validate.`,\n  );\n}\n\nfunction createIntegrationConfigValidationError(\n  integration: FarmIntegration<any, any>,\n  error: FarmIntegrationValidationErrorLike,\n) {\n  const issues =\n    Array.isArray(error.issues) && error.issues.length > 0\n      ? error.issues\n          .map((issue) => {\n            const normalizedPath = normalizeIntegrationValidationPath(issue.path);\n            const path = normalizedPath.length ? `${normalizedPath.join(\".\")}: ` : \"\";\n            return `${path}${issue.message || \"Invalid config\"}`;\n          })\n          .join(\"; \")\n      : error.message || \"Invalid config\";\n\n  return new Error(`Integration \"${integration.type}\" config validation failed: ${issues}`);\n}\n\nasync function resolveIntegrationConfig<TConfig>(\n  integration: FarmIntegration<any, TConfig>,\n  context: FarmIntegrationConfigContext,\n): Promise<TConfig> {\n  const config = integration.config;\n  if (!config) {\n    return undefined as TConfig;\n  }\n\n  if (!isIntegrationConfigDefinition(config)) {\n    return parseIntegrationConfigSchema(integration, config, {});\n  }\n\n  let value: unknown = {};\n  value = mergeIntegrationConfigValue(\n    value,\n    await resolveIntegrationConfigPart(config.defaults, context),\n  );\n  value = mergeIntegrationConfigValue(value, resolveIntegrationEnvConfig(config.env));\n  value = mergeIntegrationConfigValue(\n    value,\n    await resolveIntegrationConfigPart(config.input, context),\n  );\n  value = mergeIntegrationConfigValue(value, await config.resolve?.(context));\n\n  return config.schema\n    ? parseIntegrationConfigSchema(integration, config.schema, value)\n    : (value as TConfig);\n}\n\nfunction createIntegrationLifecycleLogger(\n  integration: FarmIntegration<any, any>,\n  phase: FarmIntegrationLogPhase,\n): FarmIntegrationLifecycleLogger {\n  const write = (\n    level: FarmIntegrationLifecycleLogLevel,\n    message: string,\n    meta?: Record<string, unknown>,\n  ) => {\n    if (!integration.log) {\n      return;\n    }\n\n    void Promise.resolve(\n      integration.log({\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase,\n        level,\n        message,\n        meta,\n        context: new Map(),\n      }),\n    ).catch(() => {});\n  };\n\n  return {\n    info(message, meta) {\n      write(\"info\", message, meta);\n    },\n    warn(message, meta) {\n      write(\"warn\", message, meta);\n    },\n    error(message, meta) {\n      write(\"error\", message, meta);\n    },\n  };\n}\n\nasync function emitIntegrationLog(\n  integration: FarmIntegration,\n  event: FarmIntegrationLogEvent,\n): Promise<void> {\n  try {\n    await integration.log?.(event);\n  } catch {\n    // Integration logging is optional observability. A failed sink must not\n    // block lifecycle startup, request handlers, responses, or cleanup.\n  }\n}\n\nconst INTEGRATION_DATA_HEADER = \"x-farm-integration-data\";\nconst INTEGRATION_DATA_HEADER_MAX_LENGTH = 16 * 1024;\nconst BLOCKED_INTEGRATION_DATA_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nfunction isFarmIntegrationData(value: unknown): value is FarmIntegrationData {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPlainIntegrationDataObject(value: unknown): value is Record<string, unknown> {\n  if (!isFarmIntegrationData(value)) {\n    return false;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction sanitizeIntegrationDataValue(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map((item) => sanitizeIntegrationDataValue(item));\n  }\n\n  if (!isPlainIntegrationDataObject(value)) {\n    return value;\n  }\n\n  const sanitized: Record<string, unknown> = {};\n  for (const [key, item] of Object.entries(value)) {\n    if (BLOCKED_INTEGRATION_DATA_KEYS.has(key)) {\n      continue;\n    }\n\n    sanitized[key] = sanitizeIntegrationDataValue(item);\n  }\n\n  return sanitized;\n}\n\nfunction normalizeIntegrationData(value: FarmIntegrationData | undefined): FarmIntegrationData {\n  if (!isFarmIntegrationData(value)) {\n    return {};\n  }\n\n  const sanitized = sanitizeIntegrationDataValue(value);\n  return isFarmIntegrationData(sanitized) ? sanitized : {};\n}\n\nfunction getIntegrationDataHeaderByteLength(value: string): number {\n  return new TextEncoder().encode(value).byteLength;\n}\n\nfunction parseIntegrationDataHeader(request: Request): FarmIntegrationData {\n  const raw = request.headers.get(INTEGRATION_DATA_HEADER);\n  if (!raw) {\n    return {};\n  }\n\n  if (getIntegrationDataHeaderByteLength(raw) > INTEGRATION_DATA_HEADER_MAX_LENGTH) {\n    return {};\n  }\n\n  try {\n    const value = JSON.parse(raw);\n    return normalizeIntegrationData(value);\n  } catch {\n    return {};\n  }\n}\n\nfunction resolveIntegrationData(request: Request, data?: FarmIntegrationData): FarmIntegrationData {\n  return {\n    ...parseIntegrationDataHeader(request),\n    ...normalizeIntegrationData(data),\n  };\n}\n\nfunction createIntegrationPlugin(integrationKey: string, integration: FarmIntegration): FarmPlugin {\n  const routes = normalizeIntegrationRoutes(integration.routes || []);\n  const middleware = [...(integration.middleware || [])];\n  const cleanupCallbacks: IntegrationLifecycleCleanup[] = [];\n  let integrationConfigPromise: Promise<unknown> | undefined;\n\n  const runCleanup = async () => {\n    const callbacks = cleanupCallbacks.splice(0).reverse();\n    for (const callback of callbacks) {\n      await callback();\n    }\n  };\n\n  const createLifecycleContext = async (\n    context: FarmPluginContext,\n    phase: FarmIntegrationLogPhase,\n    options: { reason?: string } = {},\n  ): Promise<FarmIntegrationLifecycleContext> => {\n    const args = createIntegrationRouteArgs({\n      integration,\n      config: context.config,\n    });\n    const configContext: FarmIntegrationConfigContext = {\n      key: integrationKey,\n      integration,\n      appConfig: context.config,\n      config: context.config,\n      args,\n      env: getIntegrationRuntimeEnv(),\n      isDev: context.isDev,\n      isProd: context.isProd,\n    };\n    integrationConfigPromise ??= resolveIntegrationConfig(integration, configContext);\n\n    return {\n      ...configContext,\n      integrationConfig: await integrationConfigPromise,\n      log: createIntegrationLifecycleLogger(integration, phase),\n      reason: options.reason,\n      async cleanup(callback) {\n        if (callback) {\n          cleanupCallbacks.push(callback);\n          return;\n        }\n\n        await runCleanup();\n      },\n    };\n  };\n\n  const plugin: FarmPlugin = {\n    name: `farm:integration:${integration.category}:${integration.type}`,\n    enforce: \"pre\",\n\n    async init(context) {\n      getIntegrationRuntimeRegistry().set(integrationKey, {\n        integration,\n        config: context.config,\n        isDev: context.isDev,\n        isProd: context.isProd,\n      });\n\n      await createLifecycleContext(context, \"validate\");\n\n      if (integration.validate) {\n        await integration.validate(await createLifecycleContext(context, \"validate\"));\n      }\n\n      if (integration.setup) {\n        await integration.setup(await createLifecycleContext(context, \"setup\"));\n      }\n\n      if (!integration.log) {\n        return;\n      }\n\n      for (const route of routes) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"registered\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          context: new Map(),\n        });\n      }\n\n      for (const entry of middleware) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"registered\",\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          context: new Map(),\n        });\n      }\n    },\n\n    async ready(context) {\n      if (integration.ready) {\n        await integration.ready(await createLifecycleContext(context, \"ready\"));\n      }\n    },\n\n    async shutdown(payload, context) {\n      try {\n        if (integration.dispose) {\n          await integration.dispose(\n            await createLifecycleContext(context, \"dispose\", {\n              reason: payload.reason,\n            }),\n          );\n        }\n      } finally {\n        await runCleanup();\n      }\n    },\n\n    async beforeRequest(req, res, context) {\n      const fullUrl = `http://${req.headers.host || \"localhost\"}${req.url || \"/\"}`;\n      const url = new URL(fullUrl);\n      const pathname = url.pathname;\n      const requestId = getRequestId(req);\n      let bodyLoaded = false;\n      let requestBody: Buffer | undefined;\n\n      const getRequestBody = async () => {\n        if (!bodyLoaded) {\n          bodyLoaded = true;\n          if (req.method && req.method !== \"GET\" && req.method !== \"HEAD\") {\n            requestBody = await readNodeRequestBody(\n              req,\n              resolveFarmServerConfig(context.config.server).bodySizeLimit,\n            );\n          }\n        }\n\n        return requestBody;\n      };\n\n      const createHandlerRequest = async (): Promise<Request | null> => {\n        try {\n          return createWebRequest(req, fullUrl, await getRequestBody());\n        } catch (error) {\n          const response = createFarmRequestBodyErrorResponse(error);\n          if (!response) throw error;\n          await sendWebResponse(res, response);\n          return null;\n        }\n      };\n\n      for (const entry of middleware) {\n        const params = resolveMatcherParams(entry.matcher, pathname);\n        if (!params) {\n          continue;\n        }\n\n        const request = await createHandlerRequest();\n        if (!request) return;\n        const handlerContext = createIntegrationHandlerContext({\n          integration,\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          request,\n          rawRequest: req,\n          params,\n          pathname,\n          requestId,\n          pluginContext: context,\n        });\n        const startedAt = Date.now();\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:start\",\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          request,\n          requestId,\n          context: handlerContext.req.snapshot(),\n        });\n\n        try {\n          const response = await entry.handler(request, handlerContext);\n\n          // A middleware that returns `void` lets the request continue to the\n          // downstream route/page handler, so its rotated `Set-Cookie` values\n          // cannot ride on its own response. It hands them to the runtime via\n          // forwardIntegrationSetCookies; merge them onto the Node response now\n          // (appending, so a later short-circuit Response or the page renderer\n          // can add its own Set-Cookie without dropping these). Read-and-clear\n          // so multiple middleware for one request each forward at most once.\n          const forwardedCookies = takeForwardedIntegrationSetCookies(handlerContext);\n          if (forwardedCookies.length > 0) {\n            const setCookieHeaders = new Headers();\n            for (const cookie of forwardedCookies) {\n              setCookieHeaders.append(\"set-cookie\", cookie);\n            }\n            applyWebResponseHeaders(res, setCookieHeaders, { appendSetCookie: true });\n          }\n\n          if (response) {\n            await sendWebResponse(res, response);\n            await emitIntegrationLog(integration, {\n              category: integration.category,\n              slot: integration.category,\n              type: integration.type,\n              phase: \"request:end\",\n              route: {\n                kind: \"middleware\",\n                path: normalizeMatcher(entry.matcher),\n                methods: [\"ALL\"],\n              },\n              request,\n              response,\n              requestId,\n              durationMs: Date.now() - startedAt,\n              context: handlerContext.req.snapshot(),\n            });\n            return;\n          }\n\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:end\",\n            route: {\n              kind: \"middleware\",\n              path: normalizeMatcher(entry.matcher),\n              methods: [\"ALL\"],\n            },\n            request,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            context: handlerContext.req.snapshot(),\n          });\n        } catch (error) {\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:error\",\n            route: {\n              kind: \"middleware\",\n              path: normalizeMatcher(entry.matcher),\n              methods: [\"ALL\"],\n            },\n            request,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            error,\n            context: handlerContext.req.snapshot(),\n          });\n          throw error;\n        }\n      }\n\n      for (const route of routes) {\n        const params = matchesMethod(route.methods, req.method)\n          ? extractPathParams(route.path, pathname)\n          : null;\n        if (!params) {\n          continue;\n        }\n\n        const request = await createHandlerRequest();\n        if (!request) return;\n        const handlerContext = createIntegrationHandlerContext({\n          integration,\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          rawRequest: req,\n          params,\n          pathname,\n          requestId,\n          pluginContext: context,\n        });\n        const startedAt = Date.now();\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:start\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          requestId,\n          context: handlerContext.req.snapshot(),\n        });\n\n        try {\n          const validation = await validateIntegrationRouteInput(route, request, url);\n          if (!validation.success) {\n            await sendWebResponse(res, validation.response);\n            await emitIntegrationLog(integration, {\n              category: integration.category,\n              slot: integration.category,\n              type: integration.type,\n              phase: \"request:end\",\n              route: {\n                kind: \"route\",\n                path: route.path,\n                methods: route.methods,\n              },\n              request,\n              response: validation.response,\n              requestId,\n              durationMs: Date.now() - startedAt,\n              context: handlerContext.req.snapshot(),\n            });\n            return;\n          }\n          handlerContext.input = validation.input;\n\n          for (const middlewareEntry of route.middleware || []) {\n            const middlewareResponse = await middlewareEntry.handler(request, handlerContext);\n            if (middlewareResponse) {\n              await sendWebResponse(res, middlewareResponse);\n              await emitIntegrationLog(integration, {\n                category: integration.category,\n                slot: integration.category,\n                type: integration.type,\n                phase: \"request:end\",\n                route: {\n                  kind: \"route\",\n                  path: route.path,\n                  methods: route.methods,\n                },\n                request,\n                response: middlewareResponse,\n                requestId,\n                durationMs: Date.now() - startedAt,\n                context: handlerContext.req.snapshot(),\n              });\n              return;\n            }\n          }\n\n          const beforeResponse = await runIntegrationRouteBeforeHooks(\n            route,\n            request,\n            handlerContext,\n          );\n          if (beforeResponse) {\n            const response = await runIntegrationRouteAfterHooks(\n              route,\n              request,\n              handlerContext,\n              beforeResponse,\n            );\n            await sendWebResponse(res, response);\n            await emitIntegrationLog(integration, {\n              category: integration.category,\n              slot: integration.category,\n              type: integration.type,\n              phase: \"request:end\",\n              route: {\n                kind: \"route\",\n                path: route.path,\n                methods: route.methods,\n              },\n              request,\n              response,\n              requestId,\n              durationMs: Date.now() - startedAt,\n              context: handlerContext.req.snapshot(),\n            });\n            return;\n          }\n\n          const handlerResponse = await route.handler(request, handlerContext);\n          const response = await runIntegrationRouteAfterHooks(\n            route,\n            request,\n            handlerContext,\n            handlerResponse,\n          );\n          await sendWebResponse(res, response);\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:end\",\n            route: {\n              kind: \"route\",\n              path: route.path,\n              methods: route.methods,\n            },\n            request,\n            response,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            context: handlerContext.req.snapshot(),\n          });\n          return;\n        } catch (error) {\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:error\",\n            route: {\n              kind: \"route\",\n              path: route.path,\n              methods: route.methods,\n            },\n            request,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            error,\n            context: handlerContext.req.snapshot(),\n          });\n          throw error;\n        }\n      }\n    },\n  };\n\n  Object.defineProperty(plugin, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME, {\n    value: integration.serverRuntime !== false,\n  });\n\n  return plugin;\n}\n\nfunction createIntegrationHandlerContext(input: {\n  integration: FarmIntegration;\n  route: FarmIntegrationHandlerContext[\"route\"];\n  request: Request;\n  rawRequest: FarmRequest;\n  params: FarmIntegrationRouteParams;\n  pathname: string;\n  requestId: string;\n  pluginContext: FarmPluginContext;\n}): FarmIntegrationHandlerContext {\n  const req = createIntegrationRequestContextStore(\n    input.rawRequest,\n    input.request,\n    input.pluginContext,\n  );\n\n  return {\n    request: input.request,\n    requestId: input.requestId,\n    url: new URL(input.request.url),\n    pathname: input.pathname,\n    method: input.request.method,\n    params: input.params,\n    input: {},\n    args: createIntegrationRouteArgs({\n      integration: input.integration,\n      config: input.pluginContext.config,\n    }),\n    data: resolveIntegrationData(input.request),\n    integration: {\n      category: input.integration.category,\n      slot: input.integration.category,\n      type: input.integration.type,\n      instance: input.integration.instance,\n    },\n    route: input.route,\n    req,\n    requestContext: req,\n    config: input.pluginContext.config,\n    isDev: input.pluginContext.isDev,\n    isProd: input.pluginContext.isProd,\n  };\n}\n\ntype NormalizedIntegrationRoute = Omit<FarmIntegrationRoute, \"method\" | \"methods\"> & {\n  methods: readonly string[];\n  __operation?: FarmIntegrationAPIOperation<any, any, any, any, any>;\n};\n\nfunction normalizeIntegrationRoutes(\n  routes: readonly FarmIntegrationRoute[],\n): NormalizedIntegrationRoute[] {\n  return routes\n    .map((route, index) => {\n      // Raw FarmIntegration objects and direct dispatch also pass through here.\n      assertUniqueRouteParameters(route.path, \"api\");\n      return {\n        index,\n        route: {\n          ...route,\n          methods: normalizeIntegrationRouteMethods(route),\n          input: normalizeIntegrationRouteInputSchemas(route),\n        },\n        specificity: getRoutePatternSpecificity(route.path, \"api\"),\n      };\n    })\n    .sort(\n      (left, right) =>\n        compareRouteSpecificity(left.specificity, right.specificity) || left.index - right.index,\n    )\n    .map(({ route }) => route);\n}\n\nfunction normalizeIntegrationRouteMethods(route: Pick<FarmIntegrationRoute, \"method\" | \"methods\">) {\n  const input =\n    route.methods && route.methods.length > 0\n      ? [...route.methods]\n      : route.method\n        ? [route.method]\n        : [\"ALL\"];\n\n  return input.map((method) => String(method).toUpperCase());\n}\n\nfunction normalizeIntegrationRouteInputSchemas<TBody, TQuery>(\n  route: Pick<FarmIntegrationRoute<TBody, TQuery>, \"body\" | \"query\" | \"input\">,\n): FarmIntegrationRouteInputSchemas<TBody, TQuery> | undefined {\n  const input: FarmIntegrationRouteInputSchemas<TBody, TQuery> = {\n    ...route.input,\n  };\n\n  if (route.body) {\n    input.body = route.body;\n  }\n\n  if (route.query) {\n    input.query = route.query;\n  }\n\n  return input.body || input.query ? input : undefined;\n}\n\ntype IntegrationRouteInputValidationResult =\n  | {\n      success: true;\n      input: FarmIntegrationRouteInput;\n    }\n  | {\n      success: false;\n      response: Response;\n    };\n\nasync function validateIntegrationRouteInput(\n  route: NormalizedIntegrationRoute,\n  request: Request,\n  url: URL,\n): Promise<IntegrationRouteInputValidationResult> {\n  if (request.method.toUpperCase() === \"QUERY\" && !request.headers.has(\"content-type\")) {\n    return {\n      success: false,\n      response: Response.json(\n        {\n          error: \"Invalid QUERY request\",\n          message: \"QUERY requests must include a Content-Type header.\",\n        },\n        { status: 400 },\n      ),\n    };\n  }\n\n  const schemas = route.input;\n  if (!schemas?.body && !schemas?.query) {\n    return {\n      success: true,\n      input: {},\n    };\n  }\n\n  const input: FarmIntegrationRouteInput = {};\n  const issues: FarmIntegrationValidationIssue[] = [];\n\n  if (schemas.query) {\n    const queryResult = await parseIntegrationInputSchema(\n      \"query\",\n      schemas.query,\n      createQueryInput(url.searchParams),\n    );\n    if (queryResult.success) {\n      input.query = queryResult.data;\n    } else {\n      issues.push(...queryResult.issues);\n    }\n  }\n\n  if (schemas.body) {\n    const bodyInput = await readIntegrationValidationBody(\n      request,\n      getIntegrationRouteBodyFormat(route),\n    );\n\n    if (bodyInput.success) {\n      const bodyResult = await parseIntegrationInputSchema(\"body\", schemas.body, bodyInput.data);\n      if (bodyResult.success) {\n        input.body = bodyResult.data;\n      } else {\n        issues.push(...bodyResult.issues);\n      }\n    } else {\n      issues.push(bodyInput.issue);\n    }\n  }\n\n  if (issues.length > 0) {\n    return {\n      success: false,\n      response: createIntegrationValidationResponse(issues),\n    };\n  }\n\n  return {\n    success: true,\n    input,\n  };\n}\n\nasync function parseIntegrationInputSchema<TValue>(\n  source: FarmIntegrationRouteInputSource,\n  schema: FarmIntegrationInputSchema<TValue>,\n  value: unknown,\n): Promise<\n  | {\n      success: true;\n      data: TValue;\n    }\n  | {\n      success: false;\n      issues: FarmIntegrationValidationIssue[];\n    }\n> {\n  const parser = schema.safeParseAsync || schema.safeParse;\n  if (parser) {\n    const result = await parser.call(schema, value);\n    if (result.success) {\n      return {\n        success: true,\n        data: result.data,\n      };\n    }\n\n    return {\n      success: false,\n      issues: normalizeIntegrationValidationIssues(source, result.error),\n    };\n  }\n\n  if (schema[\"~standard\"]?.validate) {\n    const result = await schema[\"~standard\"].validate(value);\n    if (\"value\" in result) {\n      return {\n        success: true,\n        data: result.value,\n      };\n    }\n\n    return {\n      success: false,\n      issues: normalizeIntegrationValidationIssues(source, {\n        issues: result.issues,\n      }),\n    };\n  }\n\n  if (schema.parse) {\n    try {\n      return {\n        success: true,\n        data: await schema.parse(value),\n      };\n    } catch (error) {\n      return {\n        success: false,\n        issues: normalizeIntegrationValidationIssues(\n          source,\n          normalizeIntegrationValidationError(error),\n        ),\n      };\n    }\n  }\n\n  return {\n    success: false,\n    issues: [\n      {\n        source,\n        message:\n          \"Input schema must expose safeParse, safeParseAsync, parse, or ~standard.validate.\",\n      },\n    ],\n  };\n}\n\nfunction createIntegrationValidationResponse(issues: readonly FarmIntegrationValidationIssue[]) {\n  return Response.json(\n    {\n      error: \"Integration route input validation failed\",\n      issues,\n    },\n    {\n      status: 400,\n    },\n  );\n}\n\nfunction normalizeIntegrationValidationIssues(\n  source: FarmIntegrationRouteInputSource,\n  error: FarmIntegrationValidationErrorLike,\n): FarmIntegrationValidationIssue[] {\n  if (Array.isArray(error.issues) && error.issues.length > 0) {\n    return error.issues.map((issue) => ({\n      source,\n      path: normalizeIntegrationValidationPath(issue.path),\n      code: issue.code,\n      message: issue.message || \"Invalid input\",\n    }));\n  }\n\n  return [\n    {\n      source,\n      path: [],\n      message: error.message || \"Invalid input\",\n    },\n  ];\n}\n\nfunction normalizeIntegrationValidationPath(\n  path: readonly FarmIntegrationValidationPathSegment[] | undefined,\n): (string | number)[] {\n  return (path || []).map((segment) => {\n    const key =\n      typeof segment === \"object\" && segment !== null && \"key\" in segment ? segment.key : segment;\n    return typeof key === \"symbol\" ? key.description || key.toString() : key;\n  });\n}\n\nfunction normalizeIntegrationValidationError(error: unknown): FarmIntegrationValidationErrorLike {\n  if (error && typeof error === \"object\") {\n    return error as FarmIntegrationValidationErrorLike;\n  }\n\n  return {\n    message: error instanceof Error ? error.message : String(error || \"Invalid input\"),\n  };\n}\n\nasync function readIntegrationValidationBody(\n  request: Request,\n  format: FarmIntegrationAPIBodyFormat,\n): Promise<\n  | {\n      success: true;\n      data: unknown;\n    }\n  | {\n      success: false;\n      issue: FarmIntegrationValidationIssue;\n    }\n> {\n  if (request.method === \"GET\" || request.method === \"HEAD\" || format === \"none\") {\n    return {\n      success: true,\n      data: undefined,\n    };\n  }\n\n  try {\n    if (format === \"form\") {\n      return {\n        success: true,\n        data: createFormInput(await request.clone().formData()),\n      };\n    }\n\n    const text = await request.clone().text();\n    if (text.trim().length === 0) {\n      return {\n        success: true,\n        data: undefined,\n      };\n    }\n\n    return {\n      success: true,\n      data: JSON.parse(text),\n    };\n  } catch (error) {\n    return {\n      success: false,\n      issue: {\n        source: \"body\",\n        path: [],\n        message:\n          format === \"json\"\n            ? \"Expected a valid JSON request body.\"\n            : error instanceof Error && error.message\n              ? error.message\n              : \"Could not parse request body.\",\n      },\n    };\n  }\n}\n\nfunction getIntegrationRouteBodyFormat(route: NormalizedIntegrationRoute) {\n  return route.bodyFormat || route.__operation?.bodyFormat || \"json\";\n}\n\nfunction createIntegrationRouteArgs(input: {\n  integration: FarmIntegration;\n  config: FarmPluginContext[\"config\"];\n}): FarmIntegrationRouteArgs {\n  let clientPromise: Promise<unknown | undefined> | undefined;\n  let ormPromise: Promise<unknown> | undefined;\n\n  const getClient = () => {\n    clientPromise ??= import(\"./storage\").then(({ resolveStorageRuntimeClient }) =>\n      resolveStorageRuntimeClient(input.config.storage),\n    );\n    return clientPromise;\n  };\n\n  const getOrm = () => {\n    if (!input.integration.schema) {\n      throw new Error(\n        `Integration \"${input.integration.type}\" does not define a schema for ctx.args.db.`,\n      );\n    }\n\n    ormPromise ??= import(\"./integration-orm\").then(({ createIntegrationOrm }) =>\n      createIntegrationOrm({\n        schema: input.integration.schema!,\n        config: input.config,\n      }),\n    );\n    return ormPromise;\n  };\n\n  return {\n    db: createLazyIntegrationOrmClient(getOrm) as never,\n    getDb: getOrm as never,\n    storage: {\n      getClient,\n      getOrm: getOrm as never,\n    },\n  };\n}\n\nfunction createLazyIntegrationOrmClient(resolveOrm: () => Promise<unknown>) {\n  const modelProxyCache = new Map<PropertyKey, unknown>();\n\n  return new Proxy(\n    {},\n    {\n      get(_target, prop) {\n        if (prop === \"then\") {\n          return undefined;\n        }\n\n        if (prop === \"transaction\" || prop === \"batch\") {\n          return async (...args: unknown[]) => {\n            const orm = (await resolveOrm()) as Record<PropertyKey, unknown>;\n            const member = orm[prop];\n            if (typeof member !== \"function\") {\n              throw new Error(`Integration ORM does not expose \"${String(prop)}\".`);\n            }\n            return member.apply(orm, args);\n          };\n        }\n\n        if (prop === \"$driver\") {\n          return undefined;\n        }\n\n        if (!modelProxyCache.has(prop)) {\n          modelProxyCache.set(prop, createLazyIntegrationOrmModel(resolveOrm, prop));\n        }\n\n        return modelProxyCache.get(prop);\n      },\n    },\n  );\n}\n\nfunction createLazyIntegrationOrmModel(resolveOrm: () => Promise<unknown>, modelName: PropertyKey) {\n  return new Proxy(\n    {},\n    {\n      get(_target, prop) {\n        if (prop === \"then\") {\n          return undefined;\n        }\n\n        return async (...args: unknown[]) => {\n          const orm = (await resolveOrm()) as Record<PropertyKey, Record<PropertyKey, unknown>>;\n          const model = orm[modelName];\n          const member = model?.[prop];\n          if (typeof member !== \"function\") {\n            throw new Error(\n              `Integration ORM model \"${String(modelName)}\" does not expose \"${String(prop)}\".`,\n            );\n          }\n          return member.apply(model, args);\n        };\n      },\n    },\n  );\n}\n\nasync function runIntegrationRouteBeforeHooks(\n  route: NormalizedIntegrationRoute,\n  request: Request,\n  context: FarmIntegrationHandlerContext,\n): Promise<Response | undefined> {\n  const hookContext = context as FarmIntegrationRouteHookContext;\n  hookContext.response = undefined;\n\n  for (const hook of route.before || []) {\n    const response = await hook(request, hookContext);\n    if (response) {\n      hookContext.response = response;\n      return response;\n    }\n\n    if (hookContext.response) {\n      return hookContext.response;\n    }\n  }\n\n  return undefined;\n}\n\nasync function runIntegrationRouteAfterHooks(\n  route: NormalizedIntegrationRoute,\n  request: Request,\n  context: FarmIntegrationHandlerContext,\n  response: Response,\n): Promise<Response> {\n  const hookContext = context as FarmIntegrationRouteHookContext;\n  let currentResponse = response;\n\n  for (const hook of route.after || []) {\n    hookContext.response = currentResponse;\n    const nextResponse = await hook(request, hookContext);\n    currentResponse = nextResponse || hookContext.response || currentResponse;\n  }\n\n  hookContext.response = currentResponse;\n  return currentResponse;\n}\n\nfunction createQueryInput(searchParams: URLSearchParams): Record<string, string | string[]> {\n  const input: Record<string, string | string[]> = {};\n  searchParams.forEach((value, key) => {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") return;\n\n    const existing = input[key];\n    if (existing === undefined) {\n      input[key] = value;\n      return;\n    }\n\n    input[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n  });\n  return input;\n}\n\nfunction createFormInput(\n  formData: FormData,\n): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n  const input: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n  formData.forEach((value, key) => {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") return;\n\n    const existing = input[key];\n    if (existing === undefined) {\n      input[key] = value;\n      return;\n    }\n\n    input[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n  });\n  return input;\n}\n\nexport async function dispatchIntegrationRequest(\n  runtime: RegisteredIntegrationRuntime,\n  request: Request,\n  options: {\n    currentRequest?: Request;\n    data?: FarmIntegrationData;\n    internal?: boolean;\n  } = {},\n): Promise<Response | null> {\n  try {\n    request = await bufferFarmRequestBody(\n      request,\n      resolveFarmServerConfig(runtime.config.server).bodySizeLimit,\n    );\n  } catch (error) {\n    const response = createFarmRequestBodyErrorResponse(error);\n    if (response) return response;\n    throw error;\n  }\n\n  const integration = runtime.integration;\n  const url = new URL(request.url);\n  const pathname = url.pathname;\n  const requestId =\n    request.headers.get(\"x-request-id\") ||\n    options.currentRequest?.headers.get(\"x-request-id\") ||\n    String(Date.now());\n  const routes = normalizeIntegrationRoutes(integration.routes || []);\n  const middleware = [...(integration.middleware || [])];\n\n  // Cookies an integration middleware forwards via forwardIntegrationSetCookies\n  // while returning `void` (letting the request continue). They are merged onto\n  // whichever Response this dispatch ultimately returns so a server-side\n  // refresh/rotation reaches the browser instead of being dropped. Top-level\n  // and per-route middleware both contribute here; read-and-clear keeps each\n  // batch applied at most once.\n  const forwardedSetCookies: string[] = [];\n\n  for (const entry of middleware) {\n    const params = resolveMatcherParams(entry.matcher, pathname);\n    if (!params) {\n      continue;\n    }\n\n    const handlerContext = createServerIntegrationHandlerContext({\n      runtime,\n      route: {\n        kind: \"middleware\",\n        path: normalizeMatcher(entry.matcher),\n        methods: [\"ALL\"],\n      },\n      request,\n      params,\n      pathname,\n      requestId,\n      currentRequest: options.currentRequest,\n      data: options.data,\n      internal: options.internal === true,\n    });\n    const startedAt = Date.now();\n\n    await emitIntegrationLog(integration, {\n      category: integration.category,\n      slot: integration.category,\n      type: integration.type,\n      phase: \"request:start\",\n      route: {\n        kind: \"middleware\",\n        path: normalizeMatcher(entry.matcher),\n        methods: [\"ALL\"],\n      },\n      request,\n      requestId,\n      context: handlerContext.req.snapshot(),\n    });\n\n    try {\n      const response = await entry.handler(request, handlerContext);\n      forwardedSetCookies.push(...takeForwardedIntegrationSetCookies(handlerContext));\n      if (response) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:end\",\n          route: {\n            kind: \"middleware\",\n            path: normalizeMatcher(entry.matcher),\n            methods: [\"ALL\"],\n          },\n          request,\n          response,\n          requestId,\n          durationMs: Date.now() - startedAt,\n          context: handlerContext.req.snapshot(),\n        });\n        return appendIntegrationForwardedCookies(response, forwardedSetCookies);\n      }\n\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:end\",\n        route: {\n          kind: \"middleware\",\n          path: normalizeMatcher(entry.matcher),\n          methods: [\"ALL\"],\n        },\n        request,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        context: handlerContext.req.snapshot(),\n      });\n    } catch (error) {\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:error\",\n        route: {\n          kind: \"middleware\",\n          path: normalizeMatcher(entry.matcher),\n          methods: [\"ALL\"],\n        },\n        request,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        error,\n        context: handlerContext.req.snapshot(),\n      });\n      throw error;\n    }\n  }\n\n  for (const route of routes) {\n    const params = matchesMethod(route.methods, request.method)\n      ? extractPathParams(route.path, pathname)\n      : null;\n    if (!params) {\n      continue;\n    }\n\n    const handlerContext = createServerIntegrationHandlerContext({\n      runtime,\n      route: {\n        kind: \"route\",\n        path: route.path,\n        methods: route.methods,\n      },\n      request,\n      params,\n      pathname,\n      requestId,\n      currentRequest: options.currentRequest,\n      data: options.data,\n      internal: options.internal === true,\n    });\n    const startedAt = Date.now();\n\n    await emitIntegrationLog(integration, {\n      category: integration.category,\n      slot: integration.category,\n      type: integration.type,\n      phase: \"request:start\",\n      route: {\n        kind: \"route\",\n        path: route.path,\n        methods: route.methods,\n      },\n      request,\n      requestId,\n      context: handlerContext.req.snapshot(),\n    });\n\n    try {\n      const validation = await validateIntegrationRouteInput(route, request, url);\n      if (!validation.success) {\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:end\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          response: validation.response,\n          requestId,\n          durationMs: Date.now() - startedAt,\n          context: handlerContext.req.snapshot(),\n        });\n        return appendIntegrationForwardedCookies(validation.response, forwardedSetCookies);\n      }\n      handlerContext.input = validation.input;\n\n      for (const middlewareEntry of route.middleware || []) {\n        const middlewareResponse = await middlewareEntry.handler(request, handlerContext);\n        forwardedSetCookies.push(...takeForwardedIntegrationSetCookies(handlerContext));\n        if (middlewareResponse) {\n          await emitIntegrationLog(integration, {\n            category: integration.category,\n            slot: integration.category,\n            type: integration.type,\n            phase: \"request:end\",\n            route: {\n              kind: \"route\",\n              path: route.path,\n              methods: route.methods,\n            },\n            request,\n            response: middlewareResponse,\n            requestId,\n            durationMs: Date.now() - startedAt,\n            context: handlerContext.req.snapshot(),\n          });\n          return appendIntegrationForwardedCookies(middlewareResponse, forwardedSetCookies);\n        }\n      }\n\n      const beforeResponse = await runIntegrationRouteBeforeHooks(route, request, handlerContext);\n      if (beforeResponse) {\n        const response = await runIntegrationRouteAfterHooks(\n          route,\n          request,\n          handlerContext,\n          beforeResponse,\n        );\n        await emitIntegrationLog(integration, {\n          category: integration.category,\n          slot: integration.category,\n          type: integration.type,\n          phase: \"request:end\",\n          route: {\n            kind: \"route\",\n            path: route.path,\n            methods: route.methods,\n          },\n          request,\n          response,\n          requestId,\n          durationMs: Date.now() - startedAt,\n          context: handlerContext.req.snapshot(),\n        });\n        return appendIntegrationForwardedCookies(response, forwardedSetCookies);\n      }\n\n      const handlerResponse = await route.handler(request, handlerContext);\n      const response = await runIntegrationRouteAfterHooks(\n        route,\n        request,\n        handlerContext,\n        handlerResponse,\n      );\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:end\",\n        route: {\n          kind: \"route\",\n          path: route.path,\n          methods: route.methods,\n        },\n        request,\n        response,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        context: handlerContext.req.snapshot(),\n      });\n      return appendIntegrationForwardedCookies(response, forwardedSetCookies);\n    } catch (error) {\n      await emitIntegrationLog(integration, {\n        category: integration.category,\n        slot: integration.category,\n        type: integration.type,\n        phase: \"request:error\",\n        route: {\n          kind: \"route\",\n          path: route.path,\n          methods: route.methods,\n        },\n        request,\n        requestId,\n        durationMs: Date.now() - startedAt,\n        error,\n        context: handlerContext.req.snapshot(),\n      });\n      throw error;\n    }\n  }\n\n  return null;\n}\n\n(globalThis as GlobalWithIntegrationRuntimeRegistry)[INTEGRATION_REQUEST_DISPATCHER_KEY] =\n  dispatchIntegrationRequest;\n\nfunction createIntegrationRequestContextStore(\n  rawRequest: FarmRequest,\n  request: Request,\n  pluginContext: FarmPluginContext,\n): FarmIntegrationRequestContextStore {\n  return {\n    get(key) {\n      const requestValue = pluginContext.requestContext.get(request, key);\n      if (requestValue !== undefined) {\n        return requestValue;\n      }\n\n      return pluginContext.requestContext.get(rawRequest, key);\n    },\n    set(key, value, options) {\n      pluginContext.requestContext.set(rawRequest, key, value, options);\n      pluginContext.requestContext.set(request, key, value, options);\n    },\n    has(key) {\n      return (\n        pluginContext.requestContext.has(request, key) ||\n        pluginContext.requestContext.has(rawRequest, key)\n      );\n    },\n    delete(key) {\n      const deletedRequest = pluginContext.requestContext.delete(request, key);\n      const deletedRaw = pluginContext.requestContext.delete(rawRequest, key);\n      return deletedRequest || deletedRaw;\n    },\n    clear() {\n      pluginContext.requestContext.clear(rawRequest);\n      pluginContext.requestContext.clear(request);\n    },\n    snapshot(options) {\n      const merged = pluginContext.requestContext.getAll(rawRequest, options);\n      const requestSnapshot = pluginContext.requestContext.getAll(request, options);\n      for (const [key, value] of requestSnapshot) {\n        merged.set(key, value);\n      }\n      return merged;\n    },\n  };\n}\n\nfunction createServerIntegrationHandlerContext(input: {\n  runtime: RegisteredIntegrationRuntime;\n  route: FarmIntegrationHandlerContext[\"route\"];\n  request: Request;\n  params: FarmIntegrationRouteParams;\n  pathname: string;\n  requestId: string;\n  currentRequest?: Request;\n  data?: FarmIntegrationData;\n  internal?: boolean;\n}): FarmIntegrationHandlerContext {\n  const req = createServerIntegrationRequestContextStore(input.request, input.currentRequest);\n\n  if (input.internal) {\n    req.set(FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY, true);\n  }\n\n  return {\n    request: input.request,\n    requestId: input.requestId,\n    url: new URL(input.request.url),\n    pathname: input.pathname,\n    method: input.request.method,\n    params: input.params,\n    input: {},\n    args: createIntegrationRouteArgs({\n      integration: input.runtime.integration,\n      config: input.runtime.config,\n    }),\n    data: resolveIntegrationData(input.request, input.data),\n    integration: {\n      category: input.runtime.integration.category,\n      slot: input.runtime.integration.category,\n      type: input.runtime.integration.type,\n      instance: input.runtime.integration.instance,\n    },\n    route: input.route,\n    req,\n    requestContext: req,\n    config: input.runtime.config,\n    isDev: input.runtime.isDev,\n    isProd: input.runtime.isProd,\n  };\n}\n\nfunction createServerIntegrationRequestContextStore(\n  request: Request,\n  currentRequest?: Request,\n): FarmIntegrationRequestContextStore {\n  return {\n    get(key) {\n      const requestValue = getRequestContext(request, key);\n      if (requestValue !== undefined) {\n        return requestValue;\n      }\n\n      if (currentRequest) {\n        return getRequestContext(currentRequest, key);\n      }\n\n      return undefined;\n    },\n    set(key, value, options) {\n      setRequestContext(request, key, value, options);\n      if (currentRequest) {\n        setRequestContext(currentRequest, key, value, options);\n      }\n    },\n    has(key) {\n      return (\n        hasRequestContext(request, key) ||\n        (!!currentRequest && hasRequestContext(currentRequest, key))\n      );\n    },\n    delete(key) {\n      const deletedRequest = deleteRequestContext(request, key);\n      const deletedCurrent = currentRequest ? deleteRequestContext(currentRequest, key) : false;\n      return deletedRequest || deletedCurrent;\n    },\n    clear() {\n      clearRequestContext(request);\n      if (currentRequest) {\n        clearRequestContext(currentRequest);\n      }\n    },\n    snapshot(options) {\n      const merged = currentRequest\n        ? getRequestContextSnapshot(currentRequest, options)\n        : new Map<string, unknown>();\n      const requestSnapshot = getRequestContextSnapshot(request, options);\n      for (const [key, value] of requestSnapshot) {\n        merged.set(key, value);\n      }\n      return merged;\n    },\n  };\n}\n\nfunction createWebRequest(req: FarmRequest, fullUrl: string, body?: Buffer): Request {\n  const headers = new Headers();\n  for (const [key, value] of Object.entries(req.headers)) {\n    if (value == null) {\n      continue;\n    }\n\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        headers.append(key, item);\n      }\n      continue;\n    }\n\n    headers.set(key, value);\n  }\n\n  return new Request(fullUrl, {\n    method: req.method,\n    headers,\n    body: body as BodyInit | undefined,\n  });\n}\n\nfunction matchesMethod(methods: readonly string[], method: string | undefined): boolean {\n  if (!method) {\n    return false;\n  }\n\n  const normalizedMethod = method.toUpperCase();\n  return methods.some((item) => {\n    const candidate = item.toUpperCase();\n    return candidate === \"ALL\" || candidate === normalizedMethod;\n  });\n}\n\nfunction matchesMatcher(\n  matcher: string | readonly string[] | undefined,\n  pathname: string,\n): boolean {\n  return resolveMatcherParams(matcher, pathname) !== null;\n}\n\nfunction resolveMatcherParams(\n  matcher: string | readonly string[] | undefined,\n  pathname: string,\n): FarmIntegrationRouteParams | null {\n  if (!matcher) {\n    return {};\n  }\n\n  const list = Array.isArray(matcher) ? matcher : [matcher];\n  for (const item of list) {\n    if (item === \"/(.*)\" || item === \"*\") {\n      return {};\n    }\n    if (item.endsWith(\"(.*)\")) {\n      const prefix = item.slice(0, -4);\n      if (pathname === prefix || pathname.startsWith(`${prefix}/`)) {\n        return {};\n      }\n      continue;\n    }\n    const params = extractPathParams(item, pathname);\n    if (params) {\n      return params;\n    }\n  }\n\n  return null;\n}\n\nfunction matchesPath(pattern: string, pathname: string): boolean {\n  return extractPathParams(pattern, pathname) !== null;\n}\n\nfunction extractPathParams(pattern: string, pathname: string): FarmIntegrationRouteParams | null {\n  const routeSegments = splitPath(pattern);\n  const pathSegments = splitPath(pathname);\n  const params: FarmIntegrationRouteParams = {};\n\n  let routeIndex = 0;\n  let pathIndex = 0;\n\n  while (routeIndex < routeSegments.length && pathIndex < pathSegments.length) {\n    const routeSegment = routeSegments[routeIndex];\n    const pathSegment = pathSegments[pathIndex];\n\n    if (isCatchAllSegment(routeSegment)) {\n      params[getSegmentParamName(routeSegment)] = pathSegments\n        .slice(pathIndex)\n        .map((segment) => decodeRouteSegment(segment));\n      return params;\n    }\n\n    if (isDynamicSegment(routeSegment)) {\n      params[getSegmentParamName(routeSegment)] = decodeRouteSegment(pathSegment);\n      routeIndex += 1;\n      pathIndex += 1;\n      continue;\n    }\n\n    if (routeSegment !== pathSegment) {\n      return null;\n    }\n\n    routeIndex += 1;\n    pathIndex += 1;\n  }\n\n  if (routeIndex === routeSegments.length && pathIndex === pathSegments.length) {\n    return params;\n  }\n\n  if (routeIndex === routeSegments.length - 1 && isCatchAllSegment(routeSegments[routeIndex])) {\n    params[getSegmentParamName(routeSegments[routeIndex])] = [];\n    return params;\n  }\n\n  return null;\n}\n\nfunction splitPath(value: string): string[] {\n  return value.split(\"/\").filter(Boolean);\n}\n\nfunction isDynamicSegment(segment: string): boolean {\n  return segment.startsWith(\"[\") && segment.endsWith(\"]\");\n}\n\nfunction isCatchAllSegment(segment: string): boolean {\n  return segment.startsWith(\"[...\") && segment.endsWith(\"]\");\n}\n\nfunction getSegmentParamName(segment: string): string {\n  if (isCatchAllSegment(segment)) {\n    return segment.slice(4, -1);\n  }\n\n  return segment.slice(1, -1);\n}\n\nfunction getRequestId(req: FarmRequest): string {\n  const headerValue = req.headers[\"x-request-id\"];\n  if (Array.isArray(headerValue)) {\n    return headerValue[0] || String(Date.now());\n  }\n  return headerValue || String(Date.now());\n}\n\nfunction normalizeMatcher(matcher: string | readonly string[] | undefined): string {\n  if (!matcher) {\n    return \"/(.*)\";\n  }\n  return typeof matcher === \"string\" ? matcher : matcher.join(\", \");\n}\n","import type React from \"react\";\n\nexport type FarmMdxComponent = React.ComponentType<any> | keyof React.JSX.IntrinsicElements;\nexport type FarmMdxComponents = Record<string, FarmMdxComponent>;\n\nexport interface FarmMdxUserConfig {\n  /**\n   * Component map or module path that exports `components` or a default component map.\n   * Relative paths resolve from the project root.\n   */\n  components?: string | FarmMdxComponents;\n  /**\n   * Serve source-authored markdown pages at `/route.md`.\n   * Enabled by default for `page.md` and `page.mdx`.\n   */\n  markdownRoutes?: boolean;\n  /** Class name used for the wrapper around rendered markdown content. */\n  className?: string;\n}\n\nexport interface FarmMdxResolvedConfig {\n  components?: string | FarmMdxComponents;\n  markdownRoutes: boolean;\n  className: string;\n}\n\nexport function resolveMdxConfig(config: FarmMdxUserConfig | undefined): FarmMdxResolvedConfig {\n  return {\n    components: config?.components,\n    markdownRoutes: config?.markdownRoutes ?? true,\n    className: config?.className ?? \"farm-markdown\",\n  };\n}\n","export type FarmMarkdownRouteInput =\n  | string\n  | {\n      route: string;\n      title?: string;\n      cache?: number | false;\n    };\n\nexport interface FarmMarkdownUserConfig {\n  /**\n   * Enable generated markdown representations for React pages.\n   * @default true\n   */\n  enabled?: boolean;\n  /**\n   * Routes that may expose generated markdown. Every page is exposed by default.\n   */\n  expose?: boolean | FarmMarkdownRouteInput[];\n  /** @deprecated Use `expose`. */\n  routes?: FarmMarkdownRouteInput[];\n  cache?: number | false;\n  includeMetadata?: boolean;\n}\n\nexport interface FarmMarkdownResolvedRoute {\n  route: string;\n  title?: string;\n  cache?: number | false;\n}\n\nexport interface FarmMarkdownResolvedConfig {\n  enabled: boolean;\n  expose: true | FarmMarkdownResolvedRoute[];\n  cache: number | false;\n  includeMetadata: boolean;\n}\n\nexport interface FarmMarkdownMirrorTarget {\n  pathname: string;\n  route: FarmMarkdownResolvedRoute | null;\n}\n\nexport interface ResolveMarkdownMirrorTargetOptions {\n  accept?: string | null;\n}\n\nexport interface CreateMarkdownMirrorResponseOptions {\n  request: Request;\n  config?: FarmMarkdownResolvedConfig;\n  routeExists?: (pathname: string) => boolean;\n  renderPage: (request: Request) => Response | Promise<Response>;\n}\n\nexport interface ApplyMarkdownNegotiationHeadersOptions {\n  config?: FarmMarkdownResolvedConfig;\n  pathname: string;\n}\n\nexport function resolveMarkdownConfig(\n  config: FarmMarkdownUserConfig | boolean | undefined,\n): FarmMarkdownResolvedConfig {\n  if (config === false) {\n    return {\n      enabled: false,\n      expose: [],\n      cache: false,\n      includeMetadata: true,\n    };\n  }\n\n  if (config === true || config === undefined) {\n    return {\n      enabled: true,\n      expose: true,\n      cache: false,\n      includeMetadata: true,\n    };\n  }\n\n  const exposeInput = config.expose ?? config.routes ?? true;\n  const expose =\n    exposeInput === true\n      ? true\n      : Array.isArray(exposeInput)\n        ? exposeInput.map(normalizeMarkdownRouteInput)\n        : [];\n\n  return {\n    enabled: config.enabled !== false && (expose === true || expose.length > 0),\n    expose,\n    cache: config.cache ?? false,\n    includeMetadata: config.includeMetadata ?? true,\n  };\n}\n\nexport function resolveMarkdownMirrorTarget(\n  config: FarmMarkdownResolvedConfig | undefined,\n  pathname: string,\n  options: ResolveMarkdownMirrorTargetOptions = {},\n): FarmMarkdownMirrorTarget | null {\n  const hasMarkdownExtension = pathname.toLowerCase().endsWith(\".md\");\n  if (!config?.enabled || (!hasMarkdownExtension && !requestAcceptsMarkdown(options.accept))) {\n    return null;\n  }\n\n  const targetPathname = normalizeMarkdownRoute(\n    hasMarkdownExtension ? pathname.slice(0, -\".md\".length) || \"/\" : pathname,\n  );\n  const route = findExposedMarkdownRoute(config, targetPathname);\n  if (!route && config.expose !== true) {\n    return null;\n  }\n\n  return {\n    pathname: targetPathname,\n    route,\n  };\n}\n\nexport async function createMarkdownMirrorResponse(\n  options: CreateMarkdownMirrorResponseOptions,\n): Promise<Response | null> {\n  if (options.request.method !== \"GET\" && options.request.method !== \"HEAD\") {\n    return null;\n  }\n\n  const requestUrl = new URL(options.request.url);\n  const hasMarkdownExtension = requestUrl.pathname.toLowerCase().endsWith(\".md\");\n  const target = resolveMarkdownMirrorTarget(options.config, requestUrl.pathname, {\n    accept: options.request.headers.get(\"accept\"),\n  });\n  if (!target) {\n    return null;\n  }\n\n  if (options.routeExists && !options.routeExists(target.pathname)) {\n    return null;\n  }\n\n  const pageUrl = new URL(options.request.url);\n  pageUrl.pathname = target.pathname;\n  const headers = new Headers(options.request.headers);\n  headers.set(\"accept\", \"text/html\");\n\n  const pageResponse = await options.renderPage(\n    new Request(pageUrl, {\n      method: \"GET\",\n      headers,\n    }),\n  );\n\n  if (!isHtmlResponse(pageResponse)) {\n    return null;\n  }\n\n  const html = await pageResponse.text();\n  const markdown = htmlToMarkdown(html, {\n    title: target.route?.title,\n    includeMetadata: options.config?.includeMetadata ?? true,\n    sourcePath: target.pathname,\n  });\n  const headersOut = new Headers({\n    \"Content-Type\": \"text/markdown; charset=utf-8\",\n    \"Content-Location\": target.pathname === \"/\" ? \"/index.md\" : `${target.pathname}.md`,\n    \"X-Farm-Markdown-Route\": target.pathname,\n  });\n  if (!hasMarkdownExtension) {\n    headersOut.set(\"Vary\", \"Accept\");\n  }\n  const cache = target.route?.cache ?? options.config?.cache ?? false;\n  headersOut.set(\"Cache-Control\", createMarkdownCacheHeader(cache));\n\n  return new Response(options.request.method === \"HEAD\" ? null : markdown, {\n    status: pageResponse.status,\n    headers: headersOut,\n  });\n}\n\nexport function applyMarkdownNegotiationHeaders(\n  response: Response,\n  options: ApplyMarkdownNegotiationHeadersOptions,\n): Response {\n  if (!isHtmlResponse(response)) {\n    return response;\n  }\n\n  const target = resolveMarkdownMirrorTarget(options.config, options.pathname, {\n    accept: \"text/markdown\",\n  });\n  if (!target) {\n    return response;\n  }\n\n  const alternatePath = getMarkdownAlternatePath(target.pathname);\n  const headers = new Headers(response.headers);\n  appendHeaderToken(headers, \"Vary\", \"Accept\");\n  headers.append(\"Link\", `<${alternatePath}>; rel=\"alternate\"; type=\"text/markdown\"`);\n\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nexport function htmlToMarkdown(\n  html: string,\n  options: {\n    title?: string;\n    sourcePath?: string;\n    includeMetadata?: boolean;\n  } = {},\n): string {\n  const title = options.title ?? extractHtmlTitle(html);\n  let source = extractHtmlBody(html)\n    .replace(/<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, \"\")\n    .replace(/<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, \"\")\n    .replace(/<noscript\\b[^>]*>[\\s\\S]*?<\\/noscript>/gi, \"\")\n    .replace(/<!--[\\s\\S]*?-->/g, \"\");\n\n  source = source.replace(/<pre\\b[^>]*><code\\b[^>]*>([\\s\\S]*?)<\\/code><\\/pre>/gi, (_, code) => {\n    return `\\n\\n\\`\\`\\`\\n${decodeHtml(stripTags(code)).trim()}\\n\\`\\`\\`\\n\\n`;\n  });\n  source = source.replace(/<pre\\b[^>]*>([\\s\\S]*?)<\\/pre>/gi, (_, code) => {\n    return `\\n\\n\\`\\`\\`\\n${decodeHtml(stripTags(code)).trim()}\\n\\`\\`\\`\\n\\n`;\n  });\n  source = source.replace(/<h([1-6])\\b[^>]*>([\\s\\S]*?)<\\/h\\1>/gi, (_, level, content) => {\n    return `\\n\\n${\"#\".repeat(Number(level))} ${toInlineMarkdown(content).trim()}\\n\\n`;\n  });\n  source = source.replace(/<p\\b[^>]*>([\\s\\S]*?)<\\/p>/gi, (_, content) => {\n    return `\\n\\n${toInlineMarkdown(content).trim()}\\n\\n`;\n  });\n  source = source.replace(/<blockquote\\b[^>]*>([\\s\\S]*?)<\\/blockquote>/gi, (_, content) => {\n    const quote = htmlToMarkdown(content, { includeMetadata: false })\n      .split(\"\\n\")\n      .filter((line) => line.trim().length > 0)\n      .map((line) => `> ${line}`)\n      .join(\"\\n\");\n    return `\\n\\n${quote}\\n\\n`;\n  });\n  source = source.replace(/<li\\b[^>]*>([\\s\\S]*?)<\\/li>/gi, (_, content) => {\n    return `\\n- ${toInlineMarkdown(content).trim()}`;\n  });\n  source = source\n    .replace(/<\\/?(ul|ol|main|section|article|header|footer|nav|aside|div)\\b[^>]*>/gi, \"\\n\")\n    .replace(/<br\\s*\\/?>/gi, \"\\n\")\n    .replace(/<hr\\s*\\/?>/gi, \"\\n\\n---\\n\\n\");\n\n  let markdown = stripTags(source)\n    .split(\"\\n\")\n    .map((line) => line.replace(/[ \\t]+$/g, \"\"))\n    .join(\"\\n\")\n    .replace(/\\n{3,}/g, \"\\n\\n\")\n    .trim();\n\n  if (options.includeMetadata !== false) {\n    const metadata: string[] = [];\n    if (title && !markdown.startsWith(\"# \")) {\n      metadata.push(`# ${title}`);\n    }\n    if (options.sourcePath) {\n      metadata.push(`Source: ${options.sourcePath}`);\n    }\n    if (metadata.length) {\n      markdown = `${metadata.join(\"\\n\\n\")}${markdown ? `\\n\\n${markdown}` : \"\"}`;\n    }\n  }\n\n  return `${markdown}\\n`;\n}\n\nfunction normalizeMarkdownRouteInput(input: FarmMarkdownRouteInput): FarmMarkdownResolvedRoute {\n  if (typeof input === \"string\") {\n    return {\n      route: normalizeMarkdownRoute(input),\n    };\n  }\n\n  return {\n    ...input,\n    route: normalizeMarkdownRoute(input.route),\n  };\n}\n\nfunction normalizeMarkdownRoute(route: string): string {\n  const withoutMarkdownExtension = route.toLowerCase().endsWith(\".md\") ? route.slice(0, -3) : route;\n  const withSlash = withoutMarkdownExtension.startsWith(\"/\")\n    ? withoutMarkdownExtension\n    : `/${withoutMarkdownExtension}`;\n  const normalized = withSlash.replace(/\\/+/g, \"/\").replace(/\\/$/g, \"\");\n  return normalized === \"\" || normalized === \"/index\" ? \"/\" : normalized;\n}\n\n/**\n * Quality value an `Accept` header assigns a media type, or 0 when the client\n * will not take it.\n *\n * `q=0` means \"not acceptable\" per RFC 9110, so it has to be distinguished from\n * an absent entry rather than treated as a match. Wildcards are opt-in: a client\n * sending `*&#47;*` will take anything, which says nothing about whether it would\n * rather have Markdown than HTML, so callers negotiating between two concrete\n * types should ask for exact entries only.\n */\nexport function farmAcceptQuality(\n  accept: string | null | undefined,\n  mediaType: string,\n  options: { wildcards?: boolean } = {},\n): number {\n  if (!accept) return 0;\n  const target = mediaType.toLowerCase();\n  const [targetType] = target.split(\"/\");\n  let best = 0;\n\n  for (const entry of accept.split(\",\")) {\n    const [candidate, ...parameters] = entry\n      .trim()\n      .toLowerCase()\n      .split(\";\")\n      .map((part) => part.trim());\n    if (!candidate) continue;\n\n    const matches =\n      candidate === target ||\n      (options.wildcards === true && (candidate === \"*/*\" || candidate === `${targetType}/*`));\n    if (!matches) continue;\n\n    const quality = parameters.find((parameter) => parameter.startsWith(\"q=\"));\n    const value = quality === undefined ? 1 : Number(quality.slice(2));\n    if (!Number.isFinite(value) || value <= 0) continue;\n    if (value > best) best = value;\n  }\n\n  return best;\n}\n\nexport function requestAcceptsMarkdown(accept: string | null | undefined): boolean {\n  if (!accept) {\n    return false;\n  }\n\n  return accept.split(\",\").some((entry) => {\n    const [mediaType, ...parameters] = entry\n      .trim()\n      .toLowerCase()\n      .split(\";\")\n      .map((part) => part.trim());\n    if (mediaType !== \"text/markdown\") {\n      return false;\n    }\n\n    const quality = parameters.find((parameter) => parameter.startsWith(\"q=\"));\n    return quality === undefined || Number(quality.slice(2)) > 0;\n  });\n}\n\nfunction getMarkdownAlternatePath(pathname: string): string {\n  return pathname === \"/\" ? \"/index.md\" : `${pathname}.md`;\n}\n\nfunction appendHeaderToken(headers: Headers, name: string, token: string): void {\n  const current = headers.get(name);\n  if (!current) {\n    headers.set(name, token);\n    return;\n  }\n\n  const tokens = current.split(\",\").map((value) => value.trim().toLowerCase());\n  if (!tokens.includes(token.toLowerCase())) {\n    headers.set(name, `${current}, ${token}`);\n  }\n}\n\nfunction findExposedMarkdownRoute(\n  config: FarmMarkdownResolvedConfig,\n  pathname: string,\n): FarmMarkdownResolvedRoute | null {\n  if (config.expose === true) {\n    return null;\n  }\n\n  return config.expose.find((route) => routeMatches(route.route, pathname)) ?? null;\n}\n\nfunction routeMatches(pattern: string, pathname: string): boolean {\n  if (pattern === pathname) {\n    return true;\n  }\n\n  const escaped = pattern\n    .split(\"/\")\n    .map((segment) => {\n      if (/^\\[\\.\\.\\.[^\\]]+\\]$/.test(segment)) {\n        return \".*\";\n      }\n      if (/^\\[[^\\]]+\\]$/.test(segment)) {\n        return \"[^/]+\";\n      }\n      return segment.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    })\n    .join(\"/\");\n\n  return new RegExp(`^${escaped}$`).test(pathname);\n}\n\nfunction isHtmlResponse(response: Response): boolean {\n  const contentType = response.headers.get(\"content-type\") ?? \"\";\n  return contentType.includes(\"text/html\");\n}\n\nfunction createMarkdownCacheHeader(cache: number | false): string {\n  if (cache === false || cache <= 0) {\n    return \"no-store\";\n  }\n\n  return `public, max-age=${cache}, s-maxage=${cache}`;\n}\n\nfunction extractHtmlTitle(html: string): string | undefined {\n  const match = html.match(/<title\\b[^>]*>([\\s\\S]*?)<\\/title>/i);\n  return match ? decodeHtml(stripTags(match[1])).trim() : undefined;\n}\n\nfunction extractHtmlBody(html: string): string {\n  const rootMatch = html.match(\n    /<div\\b[^>]*id=[\"']root[\"'][^>]*>([\\s\\S]*?)<\\/div>\\s*(?:<script|<\\/body>|$)/i,\n  );\n  const bodyMatch = html.match(/<body\\b[^>]*>([\\s\\S]*?)<\\/body>/i);\n  const body = rootMatch ? rootMatch[1] : bodyMatch ? bodyMatch[1] : html;\n  return extractFirstElementContent(body, [\"main\", \"article\"]) ?? body;\n}\n\nfunction extractFirstElementContent(html: string, tagNames: string[]): string | undefined {\n  for (const tagName of tagNames) {\n    const match = html.match(new RegExp(`<${tagName}\\\\b[^>]*>([\\\\s\\\\S]*?)<\\\\/${tagName}>`, \"i\"));\n    if (match) {\n      return match[1];\n    }\n  }\n\n  return undefined;\n}\n\nfunction toInlineMarkdown(html: string): string {\n  let source = html\n    .replace(/<a\\b[^>]*href=[\"']([^\"']+)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi, (_, href, text) => {\n      const label: string = toInlineMarkdown(text).trim() || href;\n      return `[${label}](${decodeHtml(href)})`;\n    })\n    .replace(\n      /<img\\b[^>]*src=[\"']([^\"']+)[\"'][^>]*alt=[\"']([^\"']*)[\"'][^>]*\\/?>/gi,\n      (_, src, alt) => {\n        return `![${decodeHtml(alt)}](${decodeHtml(src)})`;\n      },\n    )\n    .replace(/<strong\\b[^>]*>([\\s\\S]*?)<\\/strong>/gi, (_, content) => {\n      return `**${toInlineMarkdown(content).trim()}**`;\n    })\n    .replace(/<b\\b[^>]*>([\\s\\S]*?)<\\/b>/gi, (_, content) => {\n      return `**${toInlineMarkdown(content).trim()}**`;\n    })\n    .replace(/<em\\b[^>]*>([\\s\\S]*?)<\\/em>/gi, (_, content) => {\n      return `_${toInlineMarkdown(content).trim()}_`;\n    })\n    .replace(/<i\\b[^>]*>([\\s\\S]*?)<\\/i>/gi, (_, content) => {\n      return `_${toInlineMarkdown(content).trim()}_`;\n    })\n    .replace(/<code\\b[^>]*>([\\s\\S]*?)<\\/code>/gi, (_, content) => {\n      return `\\`${decodeHtml(stripTags(content)).trim()}\\``;\n    })\n    .replace(/<br\\s*\\/?>/gi, \"\\n\");\n\n  source = stripTags(source);\n  return decodeHtml(source).replace(/\\s+/g, \" \");\n}\n\nfunction stripTags(input: string): string {\n  return input.replace(/<[^>]+>/g, \"\");\n}\n\nfunction decodeHtml(input: string): string {\n  return input.replace(/&(?:nbsp|amp|lt|gt|quot|#39|#(?:x|X)[0-9a-fA-F]+|#[0-9]+);/g, (entity) => {\n    switch (entity) {\n      case \"&nbsp;\":\n        return \" \";\n      case \"&amp;\":\n        return \"&\";\n      case \"&lt;\":\n        return \"<\";\n      case \"&gt;\":\n        return \">\";\n      case \"&quot;\":\n        return '\"';\n      case \"&#39;\":\n        return \"'\";\n    }\n\n    const hexadecimal = entity[2] === \"x\" || entity[2] === \"X\";\n    const codePoint = Number.parseInt(entity.slice(hexadecimal ? 3 : 2, -1), hexadecimal ? 16 : 10);\n    return codePoint === 0 || codePoint > 0x10ffff || (codePoint >= 0xd800 && codePoint <= 0xdfff)\n      ? \"\\uFFFD\"\n      : String.fromCodePoint(codePoint);\n  });\n}\n","/**\n * Compare a caller-supplied secret against the configured one without leaking\n * how much of it matched.\n *\n * `===` on strings stops at the first differing character, so the time it takes\n * to reject a guess grows with the length of the correct prefix. Over enough\n * requests that recovers a cron or workflow secret one character at a time. This\n * always inspects every position instead.\n *\n * Deliberately not node:crypto's `timingSafeEqual`: these callers are bundled\n * into the generated Nitro runtime, which also targets edge and browser-like\n * environments where importing node:crypto breaks the build.\n */\nexport function farmSecretsMatch(provided: string, expected: string): boolean {\n  if (typeof provided !== \"string\" || typeof expected !== \"string\") return false;\n  // An unset secret must never authorize a request, including an empty guess.\n  if (expected.length === 0) return false;\n\n  // Folding the lengths in rejects a wrong-length guess without an early return.\n  let mismatch = provided.length ^ expected.length;\n  const length = Math.max(provided.length, expected.length);\n  for (let index = 0; index < length; index += 1) {\n    const providedCode = index < provided.length ? provided.charCodeAt(index) : 0;\n    const expectedCode = index < expected.length ? expected.charCodeAt(index) : 0;\n    mismatch |= providedCode ^ expectedCode;\n  }\n\n  return mismatch === 0;\n}\n","/**\n * Environment access that works across the runtimes Farm targets.\n *\n * Serverless and edge runtimes (Cloudflare Workers in particular) expose\n * bindings on `globalThis.__env__` rather than `process.env`, so security\n * checks that read `process.env` directly see an empty value there and can\n * silently take an \"unconfigured\" code path in a deployed environment.\n */\nexport function getFarmRuntimeBindings(): Record<string, unknown> | undefined {\n  const runtimeBindings = (\n    globalThis as typeof globalThis & {\n      __env__?: Record<string, unknown>;\n    }\n  ).__env__;\n  return runtimeBindings && typeof runtimeBindings === \"object\" ? runtimeBindings : undefined;\n}\n\nexport function readFarmEnvironmentValue(name: string): string | undefined {\n  const runtimeValue = getFarmRuntimeBindings()?.[name];\n  if (typeof runtimeValue === \"string\") return runtimeValue;\n  return typeof process !== \"undefined\" ? process.env?.[name] : undefined;\n}\n\n/**\n * True when the process looks like a deployed runtime rather than local\n * development: either NODE_ENV is production, or runtime bindings are present\n * (a deployed worker where NODE_ENV is frequently unset).\n */\nexport function isFarmDeployedRuntime(): boolean {\n  if (getFarmRuntimeBindings()) return true;\n  return readFarmEnvironmentValue(\"NODE_ENV\") === \"production\";\n}\n","import {\n  createFarmRequestBodyErrorResponse,\n  readFarmRequestBody,\n  resolveFarmServerConfig,\n  type FarmServerConfig,\n  type ResolvedFarmServerConfig,\n} from \"./server-http\";\nimport { searchParamsToObject } from \"./search-params\";\nimport { farmSecretsMatch } from \"./secret-compare\";\nimport { isFarmDeployedRuntime, readFarmEnvironmentValue } from \"./utils/runtime-env\";\nimport { decodeRouteSegment } from \"./utils/decode\";\nimport { toPosixPath } from \"./utils\";\nimport { validateConfigRouteSource } from \"./plugins/route-pattern\";\nimport {\n  isAbsolute as isAbsolutePath,\n  normalize as normalizePath,\n  relative as relativeFilePath,\n  resolve as resolvePath,\n  sep as pathSeparator,\n} from \"node:path\";\n\nexport type FarmWorkflowSchedule = string | string[];\n\nexport interface FarmWorkflowsUserConfig {\n  /** Enable or disable Farm workflow discovery. Enabled by default. */\n  enabled?: boolean;\n  /** Directory or directories to scan for workflow modules. */\n  dir?: string | string[];\n  /** Alias for dir. */\n  dirs?: string[];\n  /** HTTP route used for manual and URL-based cron invocation. */\n  route?: string;\n  /** Environment variable that stores the optional runner secret. */\n  secretEnv?: string;\n  /** Inline runner secret. Prefer secretEnv for deployed apps. */\n  secret?: string;\n  /**\n   * Serve the workflow route without a secret in a deployed runtime.\n   * Defaults to false: without a secret the route is public, so production\n   * requests are rejected unless this is explicitly enabled.\n   */\n  allowUnsecured?: boolean;\n}\n\nexport interface FarmWorkflowsResolvedConfig {\n  enabled: boolean;\n  dirs: string[];\n  route: string;\n  secretEnv: string;\n  secret?: string;\n  allowUnsecured?: boolean;\n}\n\nexport interface FarmWorkflowLogger {\n  info: (...args: unknown[]) => void;\n  warn: (...args: unknown[]) => void;\n  error: (...args: unknown[]) => void;\n}\n\nexport interface FarmWorkflowRunContext<TPayload = unknown> {\n  id: string;\n  name: string;\n  payload: TPayload;\n  scheduledTime?: number | string;\n  request?: Request;\n  event?: unknown;\n  env: Record<string, string | undefined>;\n  data: Map<string, unknown>;\n  log: FarmWorkflowLogger;\n}\n\nexport interface FarmWorkflowDefinition<TPayload = unknown, TResult = unknown> {\n  kind?: \"farm-workflow\";\n  id?: string;\n  description?: string;\n  schedule?: FarmWorkflowSchedule;\n  timezone?: string;\n  run: (ctx: FarmWorkflowRunContext<TPayload>) => TResult | Promise<TResult>;\n}\n\nexport interface FarmCronDefinition<\n  TPayload = unknown,\n  TResult = unknown,\n> extends FarmWorkflowDefinition<TPayload, TResult> {\n  schedule: FarmWorkflowSchedule;\n}\n\nexport interface FarmDiscoveredWorkflow {\n  id: string;\n  filePath: string;\n  description?: string;\n  schedule: string[];\n  timezone?: string;\n  routePath: string;\n}\n\nexport interface PreparedFarmWorkflows {\n  workflows: FarmDiscoveredWorkflow[];\n  tasks: Record<string, { handler: string; description: string }>;\n  scheduledTasks: Record<string, string | string[]>;\n  handlerPath?: string;\n  manifestPath?: string;\n}\n\nexport interface FarmWorkflowHTTPHandlerOptions {\n  workflows: FarmDiscoveredWorkflow[];\n  config: FarmWorkflowsResolvedConfig;\n  loadModule: (workflow: FarmDiscoveredWorkflow) => Promise<Record<string, any>>;\n  server?: FarmServerConfig | ResolvedFarmServerConfig;\n}\n\nexport const DEFAULT_FARM_WORKFLOW_DIRS = [\"src/jobs\", \"src/workflows\", \"src/cron\"];\nexport const DEFAULT_FARM_WORKFLOW_ROUTE = \"/api/_farm/workflows\";\nexport const DEFAULT_FARM_WORKFLOW_SECRET_ENV = \"CRON_SECRET\";\nconst MISSING_FARM_WORKFLOW_SECRET_ERROR =\n  \"Workflow route requires a secret. Set the CRON_SECRET environment variable, configure workflows.secret, or set workflows.allowUnsecured to true.\";\n\nexport function defineWorkflow<const TPayload = unknown, TResult = unknown>(\n  definition: FarmWorkflowDefinition<TPayload, TResult>,\n): FarmWorkflowDefinition<TPayload, TResult> {\n  return {\n    ...definition,\n    kind: \"farm-workflow\",\n  };\n}\n\nexport function defineTask<const TPayload = unknown, TResult = unknown>(\n  definition: FarmWorkflowDefinition<TPayload, TResult>,\n): FarmWorkflowDefinition<TPayload, TResult> {\n  return defineWorkflow(definition);\n}\n\n/**\n * @deprecated Configure `cron` in `farm.config.ts` and point it at an API route.\n */\nexport function defineCron<const TPayload = unknown, TResult = unknown>(\n  definition: FarmCronDefinition<TPayload, TResult>,\n): FarmCronDefinition<TPayload, TResult> {\n  return {\n    ...definition,\n    kind: \"farm-workflow\",\n  };\n}\n\nexport function resolveWorkflowsConfig(\n  workflows: FarmWorkflowsUserConfig | boolean | undefined,\n): FarmWorkflowsResolvedConfig {\n  if (workflows === false) {\n    return {\n      enabled: false,\n      dirs: [...DEFAULT_FARM_WORKFLOW_DIRS],\n      route: DEFAULT_FARM_WORKFLOW_ROUTE,\n      secretEnv: DEFAULT_FARM_WORKFLOW_SECRET_ENV,\n    };\n  }\n\n  const options = workflows && typeof workflows === \"object\" ? workflows : {};\n  const dirs = normalizeWorkflowDirs(options);\n\n  return {\n    enabled: options.enabled ?? true,\n    dirs,\n    route: normalizeWorkflowRoute(options.route || DEFAULT_FARM_WORKFLOW_ROUTE),\n    secretEnv: options.secretEnv || DEFAULT_FARM_WORKFLOW_SECRET_ENV,\n    secret: options.secret,\n    allowUnsecured: options.allowUnsecured === true,\n  };\n}\n\nexport async function discoverFarmWorkflows(\n  config: {\n    root?: string;\n    workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;\n  },\n  options: {\n    loadModule?: (filePath: string) => Promise<Record<string, any>>;\n  } = {},\n): Promise<FarmDiscoveredWorkflow[]> {\n  const workflowConfig = isResolvedWorkflowConfig(config.workflows)\n    ? config.workflows\n    : resolveWorkflowsConfig(config.workflows);\n  if (!workflowConfig.enabled) return [];\n\n  const root = config.root || process.cwd();\n  const files = await findWorkflowFiles(root, workflowConfig.dirs);\n  const workflows: FarmDiscoveredWorkflow[] = [];\n  const seenIds = new Map<string, string>();\n\n  for (const filePath of files) {\n    const module = options.loadModule\n      ? await options.loadModule(filePath)\n      : await loadWorkflowModule(filePath, root);\n    const definition = resolveWorkflowDefinition(module);\n    if (!definition) continue;\n\n    const id = normalizeWorkflowId(\n      definition.id || workflowIdFromFile(root, workflowConfig.dirs, filePath),\n    );\n    const previousPath = seenIds.get(id);\n    if (previousPath) {\n      throw new Error(\n        `Duplicate Farm workflow id \"${id}\" found in ${relativePath(root, previousPath)} and ${relativePath(root, filePath)}.`,\n      );\n    }\n    seenIds.set(id, filePath);\n\n    workflows.push({\n      id,\n      filePath,\n      description: definition.description,\n      schedule: normalizeSchedule(definition.schedule),\n      timezone: definition.timezone,\n      routePath: joinRoute(workflowConfig.route, encodeURIComponent(id)),\n    });\n  }\n\n  return workflows;\n}\n\nexport function createFarmWorkflowRequestHandler(options: FarmWorkflowHTTPHandlerOptions) {\n  const workflowsById = new Map(options.workflows.map((workflow) => [workflow.id, workflow]));\n\n  return async function handleFarmWorkflowRequest(request: Request): Promise<Response | null> {\n    const url = new URL(request.url);\n    const route = normalizeWorkflowRoute(options.config.route);\n    if (url.pathname !== route && !url.pathname.startsWith(`${route}/`)) {\n      return null;\n    }\n\n    if (url.pathname === route) {\n      const secretError = verifyWorkflowSecret(request, options.config);\n      if (secretError) return secretError;\n\n      return Response.json({\n        workflows: options.workflows.map(toWorkflowMetadata),\n      });\n    }\n\n    const id = decodeRouteSegment(url.pathname.slice(route.length + 1));\n\n    // Verify the secret before consulting the workflow id map so the\n    // existing-vs-missing distinction is not disclosed to callers without\n    // the secret (a 401 for unknown ids would otherwise become a 404 oracle).\n    const secretError = verifyWorkflowSecret(request, options.config);\n    if (secretError) return secretError;\n\n    const workflow = workflowsById.get(id);\n    if (!workflow) {\n      return Response.json({ error: `Workflow \"${id}\" was not found.` }, { status: 404 });\n    }\n\n    let payload: unknown;\n    try {\n      payload = await readWorkflowPayload(\n        request,\n        resolveFarmServerConfig(options.server).bodySizeLimit,\n      );\n    } catch (error) {\n      const response = createFarmRequestBodyErrorResponse(error);\n      if (response) return response;\n      if (error instanceof SyntaxError) {\n        return Response.json({ error: \"Invalid workflow request body.\" }, { status: 400 });\n      }\n      throw error;\n    }\n    const module = await options.loadModule(workflow);\n    const result = await runFarmWorkflowModule(module, {\n      id: workflow.id,\n      name: workflow.id,\n      payload,\n      request,\n      scheduledTime: readScheduledTime(payload),\n    });\n\n    return Response.json({\n      id: workflow.id,\n      ok: true,\n      result: result ?? null,\n    });\n  };\n}\n\nexport async function runFarmWorkflowModule(\n  module: Record<string, any>,\n  context: {\n    id: string;\n    name?: string;\n    payload?: unknown;\n    scheduledTime?: number | string;\n    request?: Request;\n    event?: unknown;\n    env?: Record<string, string | undefined>;\n  },\n): Promise<unknown> {\n  const definition = resolveWorkflowDefinition(module);\n  if (!definition) {\n    throw new Error(`Farm workflow \"${context.id}\" does not export a workflow definition.`);\n  }\n\n  return await definition.run({\n    id: context.id,\n    name: context.name || context.id,\n    payload: context.payload,\n    scheduledTime: context.scheduledTime,\n    request: context.request,\n    event: context.event,\n    env: context.env || process.env,\n    data: new Map<string, unknown>(),\n    log: console,\n  });\n}\n\nexport async function prepareFarmWorkflowsForNitro(config: {\n  root?: string;\n  distDir?: string;\n  workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;\n  server?: FarmServerConfig | ResolvedFarmServerConfig;\n}): Promise<PreparedFarmWorkflows> {\n  const workflowConfig = isResolvedWorkflowConfig(config.workflows)\n    ? config.workflows\n    : resolveWorkflowsConfig(config.workflows);\n  const root = config.root || process.cwd();\n  const distDir = config.distDir || \".farm\";\n  const fs = await import(\"fs/promises\");\n  const path = await import(\"path\");\n  const generatedDir = path.join(root, distDir, \".nitro\", \"farm-workflows\");\n  const workflows = await discoverFarmWorkflows({\n    root,\n    workflows: workflowConfig,\n  });\n\n  if (workflows.length === 0) {\n    await fs.rm(generatedDir, { recursive: true, force: true });\n    return {\n      workflows,\n      tasks: {},\n      scheduledTasks: {},\n    };\n  }\n\n  await fs.rm(generatedDir, { recursive: true, force: true });\n  await fs.mkdir(generatedDir, { recursive: true });\n\n  const tasks: PreparedFarmWorkflows[\"tasks\"] = {};\n  const scheduledTasks = createScheduledTasks(workflows);\n\n  const wrapperNames = resolveWorkflowWrapperFileNames(workflows.map((workflow) => workflow.id));\n  for (const workflow of workflows) {\n    const wrapperPath = toPosixPath(\n      path.join(generatedDir, `${wrapperNames.get(workflow.id)}.mjs`),\n    );\n    await fs.writeFile(wrapperPath, createNitroTaskWrapper(workflow), \"utf8\");\n    tasks[workflow.id] = {\n      handler: wrapperPath,\n      description: workflow.description || `Farm workflow ${workflow.id}`,\n    };\n  }\n\n  const handlerPath = toPosixPath(path.join(generatedDir, \"http-handler.mjs\"));\n  await fs.writeFile(\n    handlerPath,\n    createNitroWorkflowHTTPHandler(\n      workflowConfig,\n      workflows,\n      resolveFarmServerConfig(config.server),\n    ),\n    \"utf8\",\n  );\n\n  const manifestPath = path.join(generatedDir, \"manifest.json\");\n  await fs.writeFile(\n    manifestPath,\n    JSON.stringify(\n      {\n        route: workflowConfig.route,\n        secretEnv: workflowConfig.secretEnv,\n        trigger: {\n          method: \"GET\",\n          authorization: `Bearer $${workflowConfig.secretEnv}`,\n        },\n        workflows: workflows.map(toWorkflowMetadata),\n      },\n      null,\n      2,\n    ),\n    \"utf8\",\n  );\n\n  return {\n    workflows,\n    tasks,\n    scheduledTasks,\n    handlerPath,\n    manifestPath,\n  };\n}\n\nexport function createFarmWorkflowVercelCrons(\n  workflows: FarmDiscoveredWorkflow[],\n): Array<{ path: string; schedule: string }> {\n  return workflows.flatMap((workflow) =>\n    workflow.schedule.map((schedule) => ({\n      path: workflow.routePath,\n      schedule,\n    })),\n  );\n}\n\nexport function applyFarmWorkflowVercelCrons(\n  vercelConfig: Record<string, any>,\n  workflows: FarmDiscoveredWorkflow[],\n): Record<string, any> {\n  const crons = createFarmWorkflowVercelCrons(workflows);\n  if (crons.length === 0) return vercelConfig;\n\n  const existingCrons = Array.isArray(vercelConfig.crons) ? vercelConfig.crons : [];\n  const seen = new Set(existingCrons.map((cron) => `${cron.path}:${cron.schedule}`));\n  const nextCrons = [...existingCrons];\n  for (const cron of crons) {\n    const key = `${cron.path}:${cron.schedule}`;\n    if (seen.has(key)) continue;\n    seen.add(key);\n    nextCrons.push(cron);\n  }\n  return {\n    ...vercelConfig,\n    crons: nextCrons,\n  };\n}\n\nfunction isResolvedWorkflowConfig(value: unknown): value is FarmWorkflowsResolvedConfig {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    \"dirs\" in value &&\n    Array.isArray((value as FarmWorkflowsResolvedConfig).dirs) &&\n    typeof (value as FarmWorkflowsResolvedConfig).route === \"string\"\n  );\n}\n\nfunction normalizeWorkflowDirs(options: FarmWorkflowsUserConfig): string[] {\n  const rawDirs =\n    options.dirs ||\n    (Array.isArray(options.dir) ? options.dir : options.dir ? [options.dir] : undefined);\n  const dirs = rawDirs && rawDirs.length > 0 ? rawDirs : DEFAULT_FARM_WORKFLOW_DIRS;\n  return [...new Set(dirs.map(normalizeWorkflowDir).filter(Boolean))];\n}\n\nfunction normalizeWorkflowDir(value: string): string {\n  const dir = value.trim();\n  if (!dir) return \"\";\n  return isAbsolutePath(dir) ? normalizePath(dir) : trimSlashes(dir);\n}\n\nfunction normalizeWorkflowRoute(route: string): string {\n  const trimmed = route.trim();\n  if (!trimmed || trimmed === \"/\") return DEFAULT_FARM_WORKFLOW_ROUTE;\n  const normalized = `/${trimSlashes(trimmed)}`;\n  validateConfigRouteSource(normalized, \"workflows.route\");\n  return normalized;\n}\n\nfunction normalizeWorkflowId(id: string): string {\n  const normalized = id\n    .replace(/\\\\/g, \"/\")\n    .replace(/\\.(tsx?|jsx?|mjs|cjs)$/, \"\")\n    .replace(/\\/index$/, \"\")\n    .replace(/[^a-zA-Z0-9._/-]+/g, \"-\")\n    .replace(/^\\/+|\\/+$/g, \"\")\n    .replace(/\\/+/g, \"/\");\n  return normalized || \"workflow\";\n}\n\nfunction normalizeSchedule(schedule: FarmWorkflowSchedule | undefined): string[] {\n  if (!schedule) return [];\n  return (Array.isArray(schedule) ? schedule : [schedule])\n    .map((value) => value.trim())\n    .filter(Boolean);\n}\n\nfunction resolveWorkflowDefinition(\n  module: Record<string, any>,\n): FarmWorkflowDefinition | FarmCronDefinition | null {\n  const candidates = [module.default, module.workflow, module.cron, module.task, module.job];\n  for (const candidate of candidates) {\n    if (candidate && typeof candidate === \"object\" && typeof candidate.run === \"function\") {\n      return candidate as FarmWorkflowDefinition;\n    }\n  }\n  return null;\n}\n\nasync function findWorkflowFiles(root: string, dirs: string[]): Promise<string[]> {\n  const path = await import(\"path\");\n  const files: string[] = [];\n\n  for (const dir of dirs) {\n    const absoluteDir = path.isAbsolute(dir) ? dir : path.join(root, dir);\n    if (!(await pathExists(absoluteDir))) continue;\n    await walkWorkflowDir(absoluteDir, files);\n  }\n\n  return files.sort();\n}\n\nasync function walkWorkflowDir(dir: string, files: string[]): Promise<void> {\n  const fs = await import(\"fs/promises\");\n  const path = await import(\"path\");\n  const entries = await fs.readdir(dir, { withFileTypes: true });\n  for (const entry of entries) {\n    const filePath = path.join(dir, entry.name);\n    if (entry.isDirectory()) {\n      if (entry.name === \"node_modules\" || entry.name.startsWith(\".\")) continue;\n      await walkWorkflowDir(filePath, files);\n      continue;\n    }\n    if (isWorkflowFile(entry.name)) {\n      files.push(filePath);\n    }\n  }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n  const fs = await import(\"fs/promises\");\n  return fs\n    .access(filePath)\n    .then(() => true)\n    .catch(() => false);\n}\n\nfunction isWorkflowFile(fileName: string): boolean {\n  return /\\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(fileName) && !/\\.d\\.[cm]?ts$/.test(fileName);\n}\n\nasync function loadWorkflowModule(filePath: string, root: string): Promise<Record<string, any>> {\n  const fs = await import(\"fs/promises\");\n  const path = await import(\"path\");\n  const { pathToFileURL } = await import(\"url\");\n  const { build } = await import(\"esbuild\");\n  const outDir = path.join(root, \".farm\", \".workflow-loader\");\n  await fs.mkdir(outDir, { recursive: true });\n  const outfile = path.join(\n    outDir,\n    `workflow-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`,\n  );\n\n  await build({\n    absWorkingDir: root,\n    entryPoints: [filePath],\n    outfile,\n    bundle: true,\n    format: \"esm\",\n    platform: \"node\",\n    target: `node${process.versions.node.split(\".\")[0]}`,\n    packages: \"external\",\n    external: [\"@farm.js/core\", \"@farm.js/core/*\", \"nitro\", \"nitro/*\"],\n    jsx: \"automatic\",\n    logLevel: \"silent\",\n    sourcemap: \"inline\",\n  });\n\n  try {\n    return await import(/* @vite-ignore */ `${pathToFileURL(outfile).href}?t=${Date.now()}`);\n  } finally {\n    await fs.unlink(outfile).catch(() => undefined);\n  }\n}\n\nfunction workflowIdFromFile(root: string, dirs: string[], filePath: string): string {\n  for (const dir of dirs) {\n    const scanRoot = isAbsolutePath(dir) ? dir : resolvePath(root, dir);\n    const candidate = relativeFilePath(scanRoot, filePath);\n    if (candidate && candidate !== \"..\" && !candidate.startsWith(`..${pathSeparator}`)) {\n      return normalizeWorkflowId(candidate);\n    }\n  }\n\n  return normalizeWorkflowId(relativeFilePath(root, filePath));\n}\n\nfunction createScheduledTasks(\n  workflows: FarmDiscoveredWorkflow[],\n): Record<string, string | string[]> {\n  const scheduleMap = new Map<string, string[]>();\n  for (const workflow of workflows) {\n    for (const schedule of workflow.schedule) {\n      const taskIds = scheduleMap.get(schedule) || [];\n      taskIds.push(workflow.id);\n      scheduleMap.set(schedule, taskIds);\n    }\n  }\n\n  return Object.fromEntries(\n    [...scheduleMap.entries()].map(([schedule, taskIds]) => [\n      schedule,\n      taskIds.length === 1 ? taskIds[0] : taskIds,\n    ]),\n  );\n}\n\nfunction createNitroTaskWrapper(workflow: FarmDiscoveredWorkflow): string {\n  const normalizedPath = workflow.filePath.replace(/\\\\/g, \"/\");\n  return `\nimport { defineTask } from \"nitro/runtime\";\nimport { runFarmWorkflowModule } from \"@farm.js/core/workflows\";\nimport * as workflowModule from ${JSON.stringify(normalizedPath)};\n\nexport default defineTask({\n  meta: {\n    description: ${JSON.stringify(workflow.description || `Farm workflow ${workflow.id}`)}\n  },\n  async run(event) {\n    const payload = event?.payload || {};\n    const env = event?.context?.cloudflare?.env || event?.context?.env || process.env;\n    return await runFarmWorkflowModule(workflowModule, {\n      id: ${JSON.stringify(workflow.id)},\n      name: event?.name || ${JSON.stringify(workflow.id)},\n      payload,\n      scheduledTime: payload.scheduledTime,\n      request: event?.context?.request,\n      event,\n      env\n    });\n  }\n});\n`.trim();\n}\n\nfunction createNitroWorkflowHTTPHandler(\n  config: FarmWorkflowsResolvedConfig,\n  workflows: FarmDiscoveredWorkflow[],\n  server: ResolvedFarmServerConfig,\n): string {\n  return `\nimport { H3 } from \"h3\";\nimport { runTask } from \"nitro/runtime\";\nimport {\n  createFarmRequestBodyErrorResponse,\n  farmSecretsMatch,\n  readFarmRequestBody,\n  searchParamsToObject\n} from \"@farm.js/core/internal/production-runtime\";\n\nconst route = ${JSON.stringify(config.route)};\nconst secretEnv = ${JSON.stringify(config.secretEnv)};\nconst inlineSecret = ${JSON.stringify(config.secret || \"\")};\nconst allowUnsecured = ${JSON.stringify(config.allowUnsecured === true)};\nconst bodySizeLimit = ${JSON.stringify(server.bodySizeLimit)};\nconst workflows = ${JSON.stringify(workflows.map(toWorkflowMetadata))};\nconst workflowIds = new Set(workflows.map((workflow) => workflow.id));\n\nfunction json(value, status = 200) {\n  return new Response(JSON.stringify(value), {\n    status,\n    headers: { \"content-type\": \"application/json\" }\n  });\n}\n\nfunction decodeRouteSegment(segment) {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n\nfunction getHeader(event, name) {\n  return event.req.headers.get(name);\n}\n\nfunction getSecret() {\n  // Match the dev-path verifyWorkflowSecret's resolution (readFarmEnvironmentValue):\n  // runtime bindings on globalThis.__env__ first, then process.env. Reading\n  // process.env alone misses a Cloudflare Workers secret, so a correctly\n  // configured deployment would see no secret and reject every request with 401.\n  const runtimeBindings = globalThis.__env__;\n  const runtimeSecret =\n    runtimeBindings && typeof runtimeBindings === \"object\" ? runtimeBindings[secretEnv] : undefined;\n  const resolved =\n    typeof runtimeSecret === \"string\"\n      ? runtimeSecret\n      : typeof process !== \"undefined\"\n        ? process.env?.[secretEnv]\n        : undefined;\n  return inlineSecret || resolved || \"\";\n}\n\nfunction verifySecret(event) {\n  const secret = getSecret();\n  if (!secret) {\n    if (allowUnsecured) return null;\n    return json({ error: ${JSON.stringify(MISSING_FARM_WORKFLOW_SECRET_ERROR)} }, 401);\n  }\n  const authorization = getHeader(event, \"authorization\") || \"\";\n  const headerSecret = getHeader(event, \"x-farm-workflow-secret\") || \"\";\n  const bearer = authorization.match(/^Bearer\\\\s+(.+)$/i)?.[1] || \"\";\n  if (farmSecretsMatch(headerSecret, secret) || farmSecretsMatch(bearer, secret)) return null;\n  return json({ error: \"Unauthorized workflow request.\" }, 401);\n}\n\nasync function readPayload(event) {\n  if (event.req.method === \"GET\" || event.req.method === \"HEAD\") {\n    return searchParamsToObject(event.url.searchParams);\n  }\n  const bytes = await readFarmRequestBody(event.req, bodySizeLimit);\n  const text = new TextDecoder().decode(bytes);\n  if (!text) return {};\n  const contentType = (getHeader(event, \"content-type\") || \"\").split(\";\", 1)[0].trim().toLowerCase();\n  if (\n    contentType === \"application/json\" ||\n    (contentType.startsWith(\"application/\") && contentType.endsWith(\"+json\"))\n  ) {\n    return JSON.parse(text);\n  }\n  return { text };\n}\n\nexport default new H3()\n  .get(route, (event) => {\n    const unauthorized = verifySecret(event);\n    if (unauthorized) return unauthorized;\n    return { workflows };\n  })\n  .all(route + \"/:id\", async (event) => {\n    const id = decodeRouteSegment(event.context.params?.id || \"\");\n\n    // Verify the secret before consulting the workflow id map so the\n    // existing-vs-missing distinction is not disclosed to callers without\n    // the secret (a 401 for unknown ids would otherwise become a 404 oracle).\n    const unauthorized = verifySecret(event);\n    if (unauthorized) return unauthorized;\n\n    if (!workflowIds.has(id)) {\n      return json({ error: \"Workflow \" + id + \" was not found.\" }, 404);\n    }\n\n    let payload;\n    try {\n      payload = await readPayload(event);\n    } catch (error) {\n      const response = createFarmRequestBodyErrorResponse(error);\n      if (response) return response;\n      if (error instanceof SyntaxError) return json({ error: \"Invalid workflow request body.\" }, 400);\n      throw error;\n    }\n    const result = await runTask(id, {\n      payload,\n      context: {\n        source: \"http\",\n        request: event.req,\n        route,\n        url: event.url.href,\n        method: event.req.method\n      }\n    });\n    return {\n      id,\n      ok: true,\n      result: result ?? null\n    };\n  });\n`.trim();\n}\n\nfunction toWorkflowMetadata(workflow: FarmDiscoveredWorkflow) {\n  return {\n    id: workflow.id,\n    description: workflow.description || null,\n    schedule: workflow.schedule,\n    timezone: workflow.timezone || null,\n    path: workflow.routePath,\n  };\n}\n\nasync function readWorkflowPayload(request: Request, bodySizeLimit: number): Promise<unknown> {\n  const url = new URL(request.url);\n  if (request.method === \"GET\" || request.method === \"HEAD\") {\n    return searchParamsToObject(url.searchParams);\n  }\n\n  const bytes = await readFarmRequestBody(request, bodySizeLimit);\n  const text = new TextDecoder().decode(bytes);\n  if (!text) return {};\n  const contentType = (request.headers.get(\"content-type\") || \"\")\n    .split(\";\", 1)[0]\n    .trim()\n    .toLowerCase();\n  if (\n    contentType === \"application/json\" ||\n    (contentType.startsWith(\"application/\") && contentType.endsWith(\"+json\"))\n  ) {\n    return JSON.parse(text);\n  }\n\n  return { text };\n}\n\nfunction readScheduledTime(payload: unknown): number | string | undefined {\n  return payload && typeof payload === \"object\" && \"scheduledTime\" in payload\n    ? (payload as { scheduledTime?: number | string }).scheduledTime\n    : undefined;\n}\n\nfunction verifyWorkflowSecret(\n  request: Request,\n  config: FarmWorkflowsResolvedConfig,\n): Response | null {\n  const secret = config.secret || readFarmEnvironmentValue(config.secretEnv) || \"\";\n  if (!secret) {\n    // No secret configured. Local development stays convenient, but a deployed\n    // runtime must not expose a route that lists and executes workflows to\n    // anonymous callers. Opt back in explicitly with .\n    if (config.allowUnsecured === true || !isFarmDeployedRuntime()) return null;\n    return Response.json(\n      {\n        error: MISSING_FARM_WORKFLOW_SECRET_ERROR,\n      },\n      { status: 401 },\n    );\n  }\n\n  const authorization = request.headers.get(\"authorization\") || \"\";\n  const bearer = authorization.match(/^Bearer\\s+(.+)$/i)?.[1] || \"\";\n  const headerSecret = request.headers.get(\"x-farm-workflow-secret\") || \"\";\n  if (farmSecretsMatch(bearer, secret) || farmSecretsMatch(headerSecret, secret)) return null;\n\n  return Response.json({ error: \"Unauthorized workflow request.\" }, { status: 401 });\n}\n\nfunction joinRoute(...parts: string[]): string {\n  return `/${parts\n    .map((part) => trimSlashes(part))\n    .filter(Boolean)\n    .join(\"/\")}`;\n}\n\nfunction trimSlashes(value: string): string {\n  return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\n/**\n * Wrapper file names for a set of workflow ids.\n *\n * `safeFileName` is not injective: it maps `a/b` and `a-b` onto the same string,\n * and macOS and Windows additionally fold `Daily` onto `daily` on their default\n * case-insensitive filesystems. Two workflows would then share one generated\n * wrapper and both run whichever was written last. Only ids that actually\n * collide are disambiguated, so ordinary ids keep a readable wrapper; every id\n * in a colliding group gets a digest of the exact id appended, which keeps the\n * result independent of discovery order.\n */\nfunction resolveWorkflowWrapperFileNames(ids: readonly string[]): Map<string, string> {\n  const groups = new Map<string, number>();\n  for (const id of ids) {\n    const key = safeFileName(id).toLowerCase();\n    groups.set(key, (groups.get(key) ?? 0) + 1);\n  }\n\n  const resolved = new Map<string, string>();\n  const claimed = new Map<string, string>();\n  for (const id of ids) {\n    const base = safeFileName(id);\n    const key = base.toLowerCase();\n    const fileName = (groups.get(key) ?? 0) > 1 ? `${key}-${workflowIdFingerprint(id)}` : base;\n    const claimedBy = claimed.get(fileName.toLowerCase());\n    if (claimedBy !== undefined) {\n      throw new Error(\n        `Farm workflows ${JSON.stringify(claimedBy)} and ${JSON.stringify(id)} generate the same wrapper file ${JSON.stringify(`${fileName}.mjs`)}. Rename one of them.`,\n      );\n    }\n    claimed.set(fileName.toLowerCase(), id);\n    resolved.set(id, fileName);\n  }\n  return resolved;\n}\n\n/**\n * FNV-1a. This module is bundled into server runtimes that do not provide\n * node:crypto, and the digest only needs to separate file names.\n */\nfunction workflowIdFingerprint(value: string): string {\n  let hash = 0x811c9dc5;\n  for (let index = 0; index < value.length; index += 1) {\n    hash ^= value.charCodeAt(index);\n    hash = Math.imul(hash, 0x01000193);\n  }\n  return (hash >>> 0).toString(16).padStart(8, \"0\");\n}\n\nfunction safeFileName(value: string): string {\n  return value.replace(/[^a-zA-Z0-9._-]+/g, \"-\") || \"workflow\";\n}\n\nfunction relativePath(root: string, filePath: string): string {\n  return filePath.replace(/\\\\/g, \"/\").replace(`${root.replace(/\\\\/g, \"/\")}/`, \"\");\n}\n","import { farmSecretsMatch } from \"./secret-compare\";\nimport { toPosixPath } from \"./utils\";\nimport {\n  getFarmRuntimeBindings,\n  readFarmEnvironmentValue as readEnvironmentValue,\n} from \"./utils/runtime-env\";\n\nexport type FarmCronSchedule = string | string[];\n\nexport interface FarmCronJobConfig {\n  /** Portable five-field cron expression, or a list of expressions. */\n  schedule: FarmCronSchedule;\n  /** Farm API route invoked with GET when the schedule fires. */\n  path: string;\n  /** Human-readable purpose shown by local tooling and deployment manifests. */\n  description?: string;\n  /** Disable this schedule without removing its configuration. */\n  enabled?: boolean;\n}\n\nexport type FarmCronUserConfig = Record<string, FarmCronJobConfig>;\n\nexport interface FarmCronJob {\n  name: string;\n  schedule: string[];\n  path: string;\n  description?: string;\n}\n\nexport interface FarmCronResolvedConfig {\n  enabled: boolean;\n  secretEnv: typeof DEFAULT_FARM_CRON_SECRET_ENV;\n  jobs: FarmCronJob[];\n}\n\nexport interface PreparedFarmCron {\n  jobs: FarmCronJob[];\n  tasks: Record<string, { handler: string; description: string }>;\n  scheduledTasks: Record<string, string | string[]>;\n  manifestPath?: string;\n}\n\nexport interface FarmCronRouteOptions {\n  /** Environment variable containing the bearer token. */\n  secretEnv?: string;\n  /** Inline token, primarily useful in tests. Environment variables are preferred. */\n  secret?: string;\n  /** Allow a production route without a secret. Defaults to false. */\n  allowUnsecured?: boolean;\n}\n\nexport interface FarmCronCloudflareConfig {\n  deployConfig: true;\n  wrangler: {\n    triggers: {\n      crons: string[];\n    };\n  };\n}\n\nexport const DEFAULT_FARM_CRON_SECRET_ENV = \"CRON_SECRET\";\nexport const FARM_CRON_MANIFEST = \"cron-manifest.json\";\n\nconst CRON_FIELD_RANGES = [\n  [0, 59, \"minute\"],\n  [0, 23, \"hour\"],\n  [1, 31, \"day of month\"],\n  [1, 12, \"month\"],\n  [0, 6, \"day of week\"],\n] as const;\n\nexport function resolveCronConfig(\n  cron: FarmCronResolvedConfig | FarmCronUserConfig | false | undefined,\n): FarmCronResolvedConfig {\n  if (isResolvedCronConfig(cron)) return cron;\n  if (!cron) {\n    return {\n      enabled: false,\n      secretEnv: DEFAULT_FARM_CRON_SECRET_ENV,\n      jobs: [],\n    };\n  }\n\n  const jobs: FarmCronJob[] = [];\n  for (const [name, job] of Object.entries(cron)) {\n    if (!job || typeof job !== \"object\" || Array.isArray(job)) {\n      throw new TypeError(`Farm cron ${JSON.stringify(name)} must be a configuration object.`);\n    }\n    if (job.enabled === false) continue;\n    jobs.push(normalizeCronJob(name, job));\n  }\n\n  return {\n    enabled: jobs.length > 0,\n    secretEnv: DEFAULT_FARM_CRON_SECRET_ENV,\n    jobs,\n  };\n}\n\nexport async function prepareFarmCronForNitro(config: {\n  root?: string;\n  distDir?: string;\n  cron?: FarmCronResolvedConfig | FarmCronUserConfig | false;\n}): Promise<PreparedFarmCron> {\n  const cron = isResolvedCronConfig(config.cron) ? config.cron : resolveCronConfig(config.cron);\n  const root = config.root || process.cwd();\n  const distDir = config.distDir || \".farm\";\n  const fs = await import(\"node:fs/promises\");\n  const path = await import(\"node:path\");\n  const manifestPath = path.join(root, distDir, FARM_CRON_MANIFEST);\n  const generatedDir = path.join(root, distDir, \".nitro\", \"farm-cron\");\n\n  if (!cron.enabled) {\n    await Promise.all([\n      fs.rm(manifestPath, { force: true }),\n      fs.rm(generatedDir, { recursive: true, force: true }),\n    ]);\n    return {\n      jobs: [],\n      tasks: {},\n      scheduledTasks: {},\n    };\n  }\n\n  await fs.rm(generatedDir, { recursive: true, force: true });\n  await fs.mkdir(generatedDir, { recursive: true });\n\n  const tasks: PreparedFarmCron[\"tasks\"] = {};\n  const wrapperNames = resolveCronWrapperFileNames(cron.jobs.map((job) => job.name));\n  for (const job of cron.jobs) {\n    const taskName = getFarmCronTaskName(job.name);\n    const wrapperPath = toPosixPath(path.join(generatedDir, `${wrapperNames.get(job.name)}.mjs`));\n    await fs.writeFile(wrapperPath, createNitroCronTaskWrapper(job, cron.secretEnv), \"utf8\");\n    tasks[taskName] = {\n      handler: wrapperPath,\n      description: job.description || `Farm cron ${job.name}`,\n    };\n  }\n\n  const manifest = createFarmCronManifest(cron);\n  await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n  await fs.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`, \"utf8\");\n\n  return {\n    jobs: cron.jobs,\n    tasks,\n    scheduledTasks: createCronScheduledTasks(cron.jobs),\n    manifestPath,\n  };\n}\n\nexport function createFarmCronManifest(cron: FarmCronResolvedConfig) {\n  return {\n    schemaVersion: 1,\n    secretEnv: cron.secretEnv,\n    jobs: cron.jobs.map((job) => ({\n      name: job.name,\n      schedule: job.schedule,\n      path: job.path,\n      description: job.description || null,\n    })),\n  };\n}\n\nexport function createFarmCronVercelCrons(\n  jobs: FarmCronJob[],\n): Array<{ path: string; schedule: string }> {\n  return jobs.flatMap((job) =>\n    job.schedule.map((schedule) => ({\n      path: job.path,\n      schedule,\n    })),\n  );\n}\n\nexport function applyFarmCronVercelCrons(\n  vercelConfig: Record<string, any>,\n  jobs: FarmCronJob[],\n): Record<string, any> {\n  const existingCrons = Array.isArray(vercelConfig.crons) ? vercelConfig.crons : [];\n  const seen = new Set(existingCrons.map((cron) => `${cron.path}:${cron.schedule}`));\n  const crons = [...existingCrons];\n\n  for (const cron of createFarmCronVercelCrons(jobs)) {\n    const key = `${cron.path}:${cron.schedule}`;\n    if (seen.has(key)) continue;\n    seen.add(key);\n    crons.push(cron);\n  }\n\n  return crons.length > 0 ? { ...vercelConfig, crons } : vercelConfig;\n}\n\nexport function createFarmCronCloudflareTriggers(jobs: FarmCronJob[]): string[] {\n  return [...new Set(jobs.flatMap((job) => job.schedule))];\n}\n\nexport function createFarmCronCloudflareConfig(\n  jobs: FarmCronJob[],\n): FarmCronCloudflareConfig | undefined {\n  const crons = createFarmCronCloudflareTriggers(jobs);\n  if (crons.length === 0) return undefined;\n\n  return {\n    deployConfig: true,\n    wrangler: {\n      triggers: { crons },\n    },\n  };\n}\n\nexport function mergeScheduledTasks(\n  ...maps: Array<Record<string, string | string[]> | undefined>\n): Record<string, string | string[]> {\n  const merged = new Map<string, string[]>();\n\n  for (const map of maps) {\n    for (const [schedule, taskNames] of Object.entries(map || {})) {\n      const current = merged.get(schedule) || [];\n      for (const taskName of Array.isArray(taskNames) ? taskNames : [taskNames]) {\n        if (!current.includes(taskName)) current.push(taskName);\n      }\n      merged.set(schedule, current);\n    }\n  }\n\n  return Object.fromEntries(\n    [...merged].map(([schedule, taskNames]) => [\n      schedule,\n      taskNames.length === 1 ? taskNames[0] : taskNames,\n    ]),\n  );\n}\n\n/**\n * Whether the process explicitly declares a development or test environment.\n *\n * An absent NODE_ENV is not a development signal. Plenty of container images and\n * serverless runtimes leave it unset, so treating \"not production\" as\n * development leaves an unsecured cron route open wherever the variable simply\n * was never set. Matches the fail-closed gate the auth0 and workos integrations\n * use for their development secrets.\n */\nfunction isExplicitDevelopmentEnv(): boolean {\n  const nodeEnv = readEnvironmentValue(\"NODE_ENV\");\n  return nodeEnv === \"development\" || nodeEnv === \"test\";\n}\n\nexport function isCronRequestAuthorized(\n  request: Request,\n  options: FarmCronRouteOptions = {},\n): boolean {\n  const secretEnv = options.secretEnv || DEFAULT_FARM_CRON_SECRET_ENV;\n  const secret = options.secret || readEnvironmentValue(secretEnv);\n  if (!secret) {\n    return (\n      options.allowUnsecured === true || (!getFarmRuntimeBindings() && isExplicitDevelopmentEnv())\n    );\n  }\n\n  const authorization = request.headers.get(\"authorization\") || \"\";\n  const bearer = /^Bearer (.*)$/i.exec(authorization)?.[1] || \"\";\n  const headerSecret = request.headers.get(\"x-farm-cron-secret\") || \"\";\n  // Both are checked so a caller may use either header; neither short-circuits\n  // on the first differing character.\n  return farmSecretsMatch(bearer, secret) || farmSecretsMatch(headerSecret, secret);\n}\n\nexport function cronRoute<TArgs extends unknown[], TResult>(\n  handler: (request: Request, ...args: TArgs) => TResult,\n  options: FarmCronRouteOptions = {},\n): (request: Request, ...args: TArgs) => TResult | Promise<Response> {\n  return (request, ...args) => {\n    if (!isCronRequestAuthorized(request, options)) {\n      return Promise.resolve(\n        Response.json({ error: \"Unauthorized cron request.\" }, { status: 401 }),\n      );\n    }\n    return handler(request, ...args);\n  };\n}\n\nfunction normalizeCronJob(name: string, job: FarmCronJobConfig): FarmCronJob {\n  if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/.test(name)) {\n    throw new TypeError(\n      `Farm cron name ${JSON.stringify(name)} must start with a letter or number and contain only letters, numbers, dots, underscores, or hyphens.`,\n    );\n  }\n  if (!job || typeof job !== \"object\" || Array.isArray(job)) {\n    throw new TypeError(`Farm cron ${JSON.stringify(name)} must be a configuration object.`);\n  }\n\n  const path = normalizeCronPath(name, job.path);\n  const rawSchedule = Array.isArray(job.schedule) ? job.schedule : [job.schedule];\n  const schedule = [...new Set(rawSchedule.map((value) => normalizeCronExpression(name, value)))];\n  if (schedule.length === 0) {\n    throw new TypeError(`Farm cron ${JSON.stringify(name)} must define at least one schedule.`);\n  }\n\n  return {\n    name,\n    schedule,\n    path,\n    description: job.description?.trim() || undefined,\n  };\n}\n\nfunction normalizeCronPath(name: string, value: unknown): string {\n  if (typeof value !== \"string\" || !value.trim().startsWith(\"/\")) {\n    throw new TypeError(`Farm cron ${JSON.stringify(name)} path must start with \"/\".`);\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  if (hasUnstableCharacters(value)) {\n    throw new TypeError(\n      `Farm cron ${JSON.stringify(name)} path cannot contain backslashes or control characters.`,\n    );\n  }\n\n  const path = value.trim();\n  if (path.startsWith(\"//\") || path.includes(\"?\") || path.includes(\"#\")) {\n    throw new TypeError(\n      `Farm cron ${JSON.stringify(name)} path must be an application pathname without a host, query, or hash.`,\n    );\n  }\n  for (const segment of path.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 TypeError(\n        `Farm cron ${JSON.stringify(name)} path cannot contain backslashes or control characters.`,\n      );\n    }\n    if (decoded.includes(\"/\")) {\n      throw new TypeError(\n        `Farm cron ${JSON.stringify(name)} path cannot contain percent-encoded path separators.`,\n      );\n    }\n    if (decoded === \".\" || decoded === \"..\") {\n      throw new TypeError(\n        `Farm cron ${JSON.stringify(name)} path cannot contain \".\" or \"..\" path segments.`,\n      );\n    }\n  }\n  return path.length > 1 ? path.replace(/\\/+$/, \"\") : path;\n}\n\nfunction normalizeCronExpression(name: string, value: unknown): string {\n  if (typeof value !== \"string\") {\n    throw new TypeError(`Farm cron ${JSON.stringify(name)} schedule must be a string.`);\n  }\n\n  const expression = value.trim().replace(/\\s+/g, \" \");\n  const fields = expression.split(\" \");\n  if (fields.length !== CRON_FIELD_RANGES.length) {\n    throw new TypeError(\n      `Farm cron ${JSON.stringify(name)} schedule ${JSON.stringify(expression)} must use five fields: minute hour day-of-month month day-of-week.`,\n    );\n  }\n\n  fields.forEach((field, index) => {\n    const [minimum, maximum, label] = CRON_FIELD_RANGES[index];\n    validateCronField(name, expression, field, minimum, maximum, label);\n  });\n  if (fields[2] !== \"*\" && fields[4] !== \"*\") {\n    throw new TypeError(\n      `Farm cron ${JSON.stringify(name)} schedule ${JSON.stringify(expression)} cannot constrain both day-of-month and day-of-week.`,\n    );\n  }\n  return expression;\n}\n\nfunction validateCronField(\n  name: string,\n  expression: string,\n  field: string,\n  minimum: number,\n  maximum: number,\n  label: string,\n): void {\n  for (const segment of field.split(\",\")) {\n    const [range, stepText, ...extra] = segment.split(\"/\");\n    if (!range || extra.length > 0 || (stepText !== undefined && !isIntegerInRange(stepText, 1))) {\n      throwInvalidCronField(name, expression, label);\n    }\n\n    if (range === \"*\") continue;\n    const bounds = range.split(\"-\");\n    if (bounds.length > 2 || !bounds.every((value) => isIntegerInRange(value, minimum, maximum))) {\n      throwInvalidCronField(name, expression, label);\n    }\n    if (bounds.length === 2 && Number(bounds[0]) > Number(bounds[1])) {\n      throwInvalidCronField(name, expression, label);\n    }\n  }\n}\n\nfunction isIntegerInRange(value: string, minimum: number, maximum = Number.MAX_SAFE_INTEGER) {\n  if (!/^\\d+$/.test(value)) return false;\n  const parsed = Number(value);\n  return parsed >= minimum && parsed <= maximum;\n}\n\nfunction throwInvalidCronField(name: string, expression: string, label: string): never {\n  throw new TypeError(\n    `Farm cron ${JSON.stringify(name)} schedule ${JSON.stringify(expression)} has an invalid ${label} field.`,\n  );\n}\n\nfunction isResolvedCronConfig(value: unknown): value is FarmCronResolvedConfig {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    \"enabled\" in value &&\n    typeof (value as FarmCronResolvedConfig).enabled === \"boolean\" &&\n    \"jobs\" in value &&\n    Array.isArray((value as FarmCronResolvedConfig).jobs) &&\n    \"secretEnv\" in value\n  );\n}\n\nfunction createCronScheduledTasks(jobs: FarmCronJob[]): Record<string, string | string[]> {\n  const scheduledTasks: Record<string, string | string[]> = {};\n  for (const job of jobs) {\n    const taskName = getFarmCronTaskName(job.name);\n    for (const schedule of job.schedule) {\n      scheduledTasks[schedule] = mergeTaskNames(scheduledTasks[schedule], taskName);\n    }\n  }\n  return scheduledTasks;\n}\n\nfunction mergeTaskNames(\n  current: string | string[] | undefined,\n  taskName: string,\n): string | string[] {\n  if (!current) return taskName;\n  const names = Array.isArray(current) ? current : [current];\n  return names.includes(taskName) ? names : [...names, taskName];\n}\n\nfunction getFarmCronTaskName(name: string): string {\n  return `farm:cron:${name}`;\n}\n\nfunction createNitroCronTaskWrapper(job: FarmCronJob, secretEnv: string): string {\n  return `\nimport { defineTask, useNitroApp } from \"nitro/runtime\";\n\nconst name = ${JSON.stringify(job.name)};\nconst path = ${JSON.stringify(job.path)};\nconst secretEnv = ${JSON.stringify(secretEnv)};\n\nfunction readSecret(event) {\n  const runtimeEnv = event?.context?.cloudflare?.env || event?.context?.env || {};\n  return runtimeEnv[secretEnv] || (typeof process !== \"undefined\" ? process.env?.[secretEnv] : \"\") || \"\";\n}\n\nexport default defineTask({\n  meta: {\n    name: ${JSON.stringify(getFarmCronTaskName(job.name))},\n    description: ${JSON.stringify(job.description || `Farm cron ${job.name}`)}\n  },\n  async run(event) {\n    const headers = new Headers({\n      \"x-farm-cron-name\": name,\n      \"x-farm-cron-scheduled-at\": String(event?.payload?.scheduledTime || Date.now())\n    });\n    const secret = readSecret(event);\n    if (secret) headers.set(\"authorization\", \"Bearer \" + secret);\n\n    const response = await useNitroApp().fetch(path, { method: \"GET\", headers });\n    const contentType = response.headers.get(\"content-type\") || \"\";\n    const body = response.status === 204\n      ? null\n      : contentType.includes(\"application/json\")\n        ? await response.json().catch(() => null)\n        : await response.text();\n\n    if (!response.ok) {\n      const detail = typeof body === \"string\" ? body : JSON.stringify(body);\n      throw new Error(\n        \"Farm cron \" + JSON.stringify(name) + \" received \" + response.status +\n        \" from \" + path + (detail ? \": \" + detail : \"\")\n      );\n    }\n\n    return { result: body };\n  }\n});\n`.trim();\n}\n\n/**\n * Wrapper file names for a set of cron job names.\n *\n * Cron names are case-sensitive and `Daily` and `daily` are both valid, distinct\n * jobs — but macOS and Windows use case-insensitive filesystems by default, so\n * their wrappers would overwrite one another and both jobs would run whichever\n * file was written last. Names are only disambiguated when they actually\n * collide case-insensitively, so ordinary names such as `dailyCleanup` keep a\n * readable wrapper; every name in a colliding group gets a digest of the exact\n * job name appended, which keeps the result independent of configuration order.\n */\nfunction resolveCronWrapperFileNames(names: readonly string[]): Map<string, string> {\n  const groups = new Map<string, number>();\n  for (const name of names) {\n    const key = safeFileName(name).toLowerCase();\n    groups.set(key, (groups.get(key) ?? 0) + 1);\n  }\n\n  const resolved = new Map<string, string>();\n  const claimed = new Map<string, string>();\n  for (const name of names) {\n    const base = safeFileName(name);\n    const key = base.toLowerCase();\n    const fileName = (groups.get(key) ?? 0) > 1 ? `${key}-${cronNameFingerprint(name)}` : base;\n    const claimedBy = claimed.get(fileName.toLowerCase());\n    if (claimedBy !== undefined) {\n      throw new Error(\n        `Farm cron jobs ${JSON.stringify(claimedBy)} and ${JSON.stringify(name)} generate the same wrapper file ${JSON.stringify(`${fileName}.mjs`)}. Rename one of them.`,\n      );\n    }\n    claimed.set(fileName.toLowerCase(), name);\n    resolved.set(name, fileName);\n  }\n  return resolved;\n}\n\n/**\n * FNV-1a. This module is bundled into server runtimes without node:crypto, and\n * the digest only needs to separate file names.\n */\nfunction cronNameFingerprint(value: string): string {\n  let hash = 0x811c9dc5;\n  for (let index = 0; index < value.length; index += 1) {\n    hash ^= value.charCodeAt(index);\n    hash = Math.imul(hash, 0x01000193);\n  }\n  return (hash >>> 0).toString(16).padStart(8, \"0\");\n}\n\nfunction safeFileName(value: string): string {\n  return value.replace(/[^a-zA-Z0-9._-]+/g, \"-\") || \"cron\";\n}\n","import {\n  context,\n  createContextKey,\n  isSpanContextValid,\n  propagation,\n  SpanKind,\n  SpanStatusCode,\n  trace,\n  type Attributes,\n  type Context,\n  type Span,\n} from \"@opentelemetry/api\";\nimport type { FarmEvent } from \"./observability\";\n\nexport const FARM_TRACER_NAME = \"@farm.js/core\";\n\nexport type FarmTraceSpanKind =\n  | \"request\"\n  | \"render\"\n  | \"middleware\"\n  | \"api\"\n  | \"integration\"\n  | \"storage\"\n  | \"ppr\"\n  | \"build\"\n  | \"plugin\";\n\nexport interface FarmTracingConfig {\n  /** Enable Farm's OpenTelemetry spans. */\n  enabled?: boolean;\n  /** Span families to record. All families are enabled by default. */\n  spans?: readonly FarmTraceSpanKind[];\n  /** Add Farm lifecycle events to the active span. Defaults to true. */\n  recordEvents?: boolean;\n  /** Static attributes added to every Farm-created span. */\n  attributes?: Attributes;\n  /** Path prefixes that should not create request spans. */\n  ignorePaths?: readonly string[];\n}\n\nexport type FarmTracingUserConfig = boolean | FarmTracingConfig;\n\nexport interface FarmResolvedTracingConfig {\n  enabled: boolean;\n  spans: ReadonlySet<FarmTraceSpanKind>;\n  recordEvents: boolean;\n  attributes: Attributes;\n  ignorePaths: readonly string[];\n}\n\nexport interface FarmTraceContext {\n  traceId: string;\n  spanId: string;\n  traceSampled: boolean;\n}\n\nexport interface FarmRequestSpanOptions {\n  getStatusCode?: () => number | undefined;\n  onStart?: () => void;\n  onComplete?: (status: number, durationMs: number) => void;\n  onError?: (error: unknown, durationMs: number) => void;\n}\n\nexport interface FarmSpanOptions {\n  kind?: FarmTraceSpanKind;\n  attributes?: Attributes;\n  spanKind?: SpanKind;\n}\n\nconst ALL_SPAN_KINDS: readonly FarmTraceSpanKind[] = [\n  \"request\",\n  \"render\",\n  \"middleware\",\n  \"api\",\n  \"integration\",\n  \"storage\",\n  \"ppr\",\n  \"build\",\n  \"plugin\",\n];\n\nconst DEFAULT_IGNORED_PATHS = [\n  \"/@vite/\",\n  \"/@fs/\",\n  \"/@id/\",\n  \"/@react-refresh\",\n  \"/node_modules/\",\n  \"/__vite\",\n  \"/.well-known/appspecific/\",\n];\nconst FARM_REQUEST_METHOD_CONTEXT_KEY = createContextKey(\"@farm.js/core/request-method\");\n\nlet tracingState: FarmResolvedTracingConfig = normalizeFarmTracingConfig(false);\n\nexport function normalizeFarmTracingConfig(\n  config: FarmTracingUserConfig | undefined,\n): FarmResolvedTracingConfig {\n  if (!config) {\n    return {\n      enabled: false,\n      spans: new Set(ALL_SPAN_KINDS),\n      recordEvents: true,\n      attributes: {},\n      ignorePaths: DEFAULT_IGNORED_PATHS,\n    };\n  }\n\n  if (config === true) {\n    return {\n      enabled: true,\n      spans: new Set(ALL_SPAN_KINDS),\n      recordEvents: true,\n      attributes: {},\n      ignorePaths: DEFAULT_IGNORED_PATHS,\n    };\n  }\n\n  return {\n    enabled: config.enabled ?? true,\n    spans: new Set(config.spans ?? ALL_SPAN_KINDS),\n    recordEvents: config.recordEvents ?? true,\n    attributes: { ...config.attributes },\n    ignorePaths: [...DEFAULT_IGNORED_PATHS, ...(config.ignorePaths ?? [])],\n  };\n}\n\nexport function configureFarmTracing(\n  config: FarmTracingUserConfig | FarmResolvedTracingConfig | undefined,\n): void {\n  if (isResolvedFarmTracingConfig(config)) {\n    tracingState = {\n      ...config,\n      spans: new Set(config.spans),\n      attributes: { ...config.attributes },\n      ignorePaths: [...config.ignorePaths],\n    };\n    return;\n  }\n  tracingState = normalizeFarmTracingConfig(config as FarmTracingUserConfig | undefined);\n}\n\nfunction isResolvedFarmTracingConfig(\n  config: FarmTracingUserConfig | FarmResolvedTracingConfig | undefined,\n): config is FarmResolvedTracingConfig {\n  return (\n    !!config &&\n    typeof config === \"object\" &&\n    typeof config.enabled === \"boolean\" &&\n    config.spans instanceof Set &&\n    typeof config.recordEvents === \"boolean\" &&\n    Array.isArray(config.ignorePaths)\n  );\n}\n\nexport function getFarmTracingConfig(): FarmResolvedTracingConfig {\n  return tracingState;\n}\n\nexport function resetFarmTracing(): void {\n  tracingState = normalizeFarmTracingConfig(false);\n}\n\nexport function getFarmTraceContext(): FarmTraceContext | undefined {\n  return getSpanTraceContext(trace.getSpan(context.active()));\n}\n\nexport async function runWithFarmSpan<T>(\n  name: string,\n  handler: () => T | Promise<T>,\n  options: FarmSpanOptions = {},\n): Promise<T> {\n  const spanFamily = options.kind;\n  if (!tracingState.enabled || (spanFamily !== undefined && !tracingState.spans.has(spanFamily))) {\n    return await handler();\n  }\n\n  const tracer = trace.getTracer(FARM_TRACER_NAME);\n  return await tracer.startActiveSpan(\n    name,\n    {\n      kind: options.spanKind ?? SpanKind.INTERNAL,\n      attributes: {\n        ...tracingState.attributes,\n        ...options.attributes,\n      },\n    },\n    async (span) => {\n      try {\n        return await handler();\n      } catch (error) {\n        recordSpanError(span, error);\n        throw error;\n      } finally {\n        span.end();\n      }\n    },\n  );\n}\n\nexport async function _runWithFarmRequestSpan<T>(\n  request: Request,\n  handler: () => T | Promise<T>,\n  options: FarmRequestSpanOptions = {},\n): Promise<T> {\n  const startedAt = Date.now();\n  const url = new URL(request.url);\n  const shouldTrace =\n    tracingState.enabled &&\n    tracingState.spans.has(\"request\") &&\n    !tracingState.ignorePaths.some((prefix) => url.pathname.startsWith(prefix));\n\n  if (!shouldTrace) {\n    options.onStart?.();\n    try {\n      const result = await handler();\n      options.onComplete?.(resolveResultStatus(result, options), Date.now() - startedAt);\n      return result;\n    } catch (error) {\n      options.onError?.(error, Date.now() - startedAt);\n      throw error;\n    }\n  }\n\n  const extractedContext = propagation.extract(context.active(), request.headers, {\n    keys(carrier) {\n      return Array.from(carrier.keys());\n    },\n    get(carrier, key) {\n      return carrier.get(key) ?? undefined;\n    },\n  });\n  const requestContext = extractedContext.setValue(FARM_REQUEST_METHOD_CONTEXT_KEY, request.method);\n  const tracer = trace.getTracer(FARM_TRACER_NAME);\n  const attributes: Attributes = {\n    ...tracingState.attributes,\n    \"http.request.method\": request.method,\n    \"url.path\": url.pathname,\n    \"url.scheme\": url.protocol.replace(/:$/, \"\"),\n    \"server.address\": url.hostname,\n  };\n  if (url.port) attributes[\"server.port\"] = Number(url.port);\n\n  return await tracer.startActiveSpan(\n    `${request.method} ${url.pathname}`,\n    { kind: SpanKind.SERVER, attributes },\n    requestContext,\n    async (span) => {\n      options.onStart?.();\n      try {\n        const result = await handler();\n        const status = resolveResultStatus(result, options);\n        setResponseStatus(span, status);\n        options.onComplete?.(status, Date.now() - startedAt);\n        return result;\n      } catch (error) {\n        recordSpanError(span, error);\n        options.onError?.(error, Date.now() - startedAt);\n        throw error;\n      } finally {\n        span.end();\n      }\n    },\n  );\n}\n\nexport function recordFarmEventTrace(event: FarmEvent): FarmTraceContext | undefined {\n  if (!tracingState.enabled) return undefined;\n\n  const activeContext = context.active();\n  const activeSpan = trace.getSpan(activeContext);\n  const traceContext = getSpanTraceContext(activeSpan);\n  if (activeSpan && traceContext) {\n    if (event.type === \"route.matched\") {\n      const method =\n        (activeContext.getValue(FARM_REQUEST_METHOD_CONTEXT_KEY) as string | undefined) ?? \"HTTP\";\n      activeSpan.updateName(`${method} ${event.route}`);\n      activeSpan.setAttribute(\"http.route\", event.route);\n      activeSpan.setAttribute(\"farm.route\", event.route);\n    }\n\n    if (tracingState.recordEvents) {\n      activeSpan.addEvent(event.type, toEventAttributes(event), event.timestamp);\n    }\n\n    const error = event.type === \"request.error\" ? undefined : getEventError(event);\n    if (error !== undefined) {\n      // A recoverable render error (caught by an error boundary) still fires\n      // React's onError while the request returns a valid response, so record\n      // the exception for visibility but let the actual response status\n      // (setResponseStatus) decide the span status instead of forcing the whole\n      // request trace to ERROR. A genuinely fatal render error surfaces through\n      // the request outcome (a thrown handler or a >= 500 status) and is marked\n      // there.\n      if (event.type === \"render.error\") {\n        recordSpanException(activeSpan, error);\n      } else {\n        recordSpanError(activeSpan, error);\n      }\n    }\n  }\n\n  const completedTraceContext = recordCompletedEventSpan(event, activeContext);\n  return traceContext ?? completedTraceContext;\n}\n\nfunction recordCompletedEventSpan(\n  event: FarmEvent,\n  parentContext: Context,\n): FarmTraceContext | undefined {\n  const descriptor = getCompletedSpanDescriptor(event);\n  if (!descriptor || !tracingState.spans.has(descriptor.kind)) return undefined;\n\n  const tracer = trace.getTracer(FARM_TRACER_NAME);\n  const span = tracer.startSpan(\n    descriptor.name,\n    {\n      kind: SpanKind.INTERNAL,\n      startTime: event.timestamp - descriptor.durationMs,\n      attributes: {\n        ...tracingState.attributes,\n        ...toEventAttributes(event),\n        \"farm.event.type\": event.type,\n      },\n    },\n    parentContext,\n  );\n\n  const status = \"status\" in event && typeof event.status === \"number\" ? event.status : undefined;\n  if (status !== undefined) setResponseStatus(span, status);\n  const error = getEventError(event);\n  if (error !== undefined) recordSpanError(span, error);\n  const traceContext = getSpanTraceContext(span);\n  span.end(event.timestamp);\n  return traceContext;\n}\n\nfunction getCompletedSpanDescriptor(\n  event: FarmEvent,\n): { kind: FarmTraceSpanKind; name: string; durationMs: number } | undefined {\n  if (!(\"durationMs\" in event) || typeof event.durationMs !== \"number\") return undefined;\n\n  switch (event.type) {\n    case \"render.complete\":\n      return { kind: \"render\", name: `farm.render ${event.route}`, durationMs: event.durationMs };\n    case \"render.stream.shellReady\":\n      return {\n        kind: \"render\",\n        name: `farm.render.shell ${event.route}`,\n        durationMs: event.durationMs,\n      };\n    case \"render.stream.complete\":\n      return {\n        kind: \"render\",\n        name: `farm.render.stream ${event.route}`,\n        durationMs: event.durationMs,\n      };\n    case \"middleware.complete\":\n      return {\n        kind: \"middleware\",\n        name: `farm.middleware ${event.name ?? event.route ?? \"anonymous\"}`,\n        durationMs: event.durationMs,\n      };\n    case \"api.request.complete\":\n    case \"api.error\":\n      return {\n        kind: \"api\",\n        name: `farm.api ${event.method} ${event.route}`,\n        durationMs: event.durationMs,\n      };\n    case \"integration.api.call.complete\":\n      return {\n        kind: \"integration\",\n        name: `farm.integration ${event.integration}.${event.operation}`,\n        durationMs: event.durationMs,\n      };\n    case \"storage.query.complete\":\n      return {\n        kind: \"storage\",\n        name: `farm.storage ${event.operation}`,\n        durationMs: event.durationMs,\n      };\n    case \"ppr.refresh.complete\":\n      return {\n        kind: \"ppr\",\n        name: `farm.ppr.refresh ${event.route}`,\n        durationMs: event.durationMs,\n      };\n    case \"build.complete\":\n      return {\n        kind: \"build\",\n        name: `farm.build${event.target ? ` ${event.target}` : \"\"}`,\n        durationMs: event.durationMs,\n      };\n    case \"plugin.hook.complete\":\n      return {\n        kind: \"plugin\",\n        name: `farm.plugin ${event.plugin}.${event.hook}`,\n        durationMs: event.durationMs,\n      };\n    default:\n      return undefined;\n  }\n}\n\n// A runtime-agnostic, non-cryptographic digest (FNV-1a). This module is bundled\n// into browser and edge runtimes, so it must not import node:crypto; the digest\n// only needs to redact the raw cache key while keeping cache events correlatable,\n// which does not require a cryptographic hash.\nfunction hashFarmCacheKey(value: string): string {\n  let hash = 0x811c9dc5;\n  for (let index = 0; index < value.length; index++) {\n    hash ^= value.charCodeAt(index);\n    hash = Math.imul(hash, 0x01000193);\n  }\n  return (hash >>> 0).toString(16).padStart(8, \"0\");\n}\n\nfunction toEventAttributes(event: FarmEvent): Attributes {\n  const attributes: Attributes = {};\n  // A cache event's `key` embeds the serialized arguments of the cached call\n  // (e.g. `unstable_cache(getUser)(email)` serializes the email into the key),\n  // so it must never be exported verbatim to a tracing backend. Emit a stable\n  // digest under `farm.key_hash` instead, preserving cross-event correlation\n  // without shipping the sensitive payload.\n  const redactKey = typeof event.type === \"string\" && event.type.startsWith(\"cache.\");\n  for (const [key, value] of Object.entries(event)) {\n    if (\n      key === \"timestamp\" ||\n      key === \"level\" ||\n      key === \"error\" ||\n      key === \"traceId\" ||\n      key === \"spanId\" ||\n      key === \"traceSampled\" ||\n      value === undefined\n    ) {\n      continue;\n    }\n    if (redactKey && key === \"key\" && typeof value === \"string\") {\n      attributes[\"farm.key_hash\"] = hashFarmCacheKey(value);\n      continue;\n    }\n    if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n      attributes[`farm.${key}`] = value;\n    } else if (Array.isArray(value)) {\n      if (value.every((entry) => typeof entry === \"string\")) {\n        attributes[`farm.${key}`] = value as string[];\n      } else if (value.every((entry) => typeof entry === \"number\")) {\n        attributes[`farm.${key}`] = value as number[];\n      } else if (value.every((entry) => typeof entry === \"boolean\")) {\n        attributes[`farm.${key}`] = value as boolean[];\n      }\n    }\n  }\n  return attributes;\n}\n\nfunction getEventError(event: FarmEvent): unknown {\n  return \"error\" in event ? event.error : undefined;\n}\n\nfunction recordSpanException(span: Span, error: unknown): Error {\n  const normalized = error instanceof Error ? error : new Error(String(error));\n  span.recordException(normalized);\n  return normalized;\n}\n\nfunction recordSpanError(span: Span, error: unknown): void {\n  const normalized = recordSpanException(span, error);\n  span.setStatus({ code: SpanStatusCode.ERROR, message: normalized.message });\n}\n\nfunction setResponseStatus(span: Span, status: number): void {\n  span.setAttribute(\"http.response.status_code\", status);\n  if (status >= 500) {\n    span.setStatus({ code: SpanStatusCode.ERROR });\n  }\n}\n\nfunction resolveResultStatus<T>(result: T, options: FarmRequestSpanOptions): number {\n  if (result instanceof Response) return result.status;\n  return options.getStatusCode?.() ?? 200;\n}\n\nfunction getSpanTraceContext(span: Span | undefined): FarmTraceContext | undefined {\n  if (!span) return undefined;\n  const spanContext = span.spanContext();\n  if (!isSpanContextValid(spanContext)) return undefined;\n  return {\n    traceId: spanContext.traceId,\n    spanId: spanContext.spanId,\n    traceSampled: (spanContext.traceFlags & 0x01) === 0x01,\n  };\n}\n","import {\n  _runWithFarmRequestSpan,\n  configureFarmTracing,\n  getFarmTraceContext,\n  normalizeFarmTracingConfig,\n  recordFarmEventTrace,\n  resetFarmTracing,\n  runWithFarmSpan,\n  type FarmRequestSpanOptions,\n  type FarmResolvedTracingConfig,\n  type FarmSpanOptions,\n  type FarmTraceContext,\n  type FarmTraceSpanKind,\n  type FarmTracingConfig,\n  type FarmTracingUserConfig,\n} from \"./tracing\";\n\nexport type FarmEventLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface FarmEventBase {\n  type: string;\n  timestamp: number;\n  level: FarmEventLevel;\n  requestId?: string;\n  traceId?: string;\n  spanId?: string;\n  traceSampled?: boolean;\n  route?: string;\n  pathname?: string;\n}\n\nexport type FarmRequestEvent =\n  | (FarmEventBase & { type: \"request.start\"; method: string; pathname: string })\n  | (FarmEventBase & {\n      type: \"request.complete\";\n      method: string;\n      pathname: string;\n      status: number;\n      durationMs: number;\n    })\n  | (FarmEventBase & {\n      type: \"request.error\";\n      method: string;\n      pathname: string;\n      durationMs: number;\n      error: unknown;\n    });\n\nexport type FarmServerEvent =\n  | (FarmEventBase & {\n      type: \"server.start\";\n      mode: \"dev\" | \"preview\" | \"production\";\n      port?: number;\n    })\n  | (FarmEventBase & { type: \"server.ready\"; url?: string })\n  | (FarmEventBase & { type: \"server.shutdown\"; reason?: string });\n\nexport type FarmRouteEvent =\n  | (FarmEventBase & { type: \"route.discovered\"; route: string; filePath: string })\n  | (FarmEventBase & {\n      type: \"route.matched\";\n      pathname: string;\n      route: string;\n      params?: Record<string, string>;\n    })\n  | (FarmEventBase & { type: \"route.notFound\"; pathname: string })\n  | (FarmEventBase & { type: \"route.redirect\"; from: string; to: string; status?: number })\n  | (FarmEventBase & { type: \"route.rewrite\"; from: string; to: string });\n\nexport type FarmRenderEvent =\n  | (FarmEventBase & { type: \"render.start\"; route: string; pathname?: string })\n  | (FarmEventBase & {\n      type: \"render.complete\";\n      route: string;\n      durationMs: number;\n      status?: number;\n    })\n  | (FarmEventBase & { type: \"render.error\"; route?: string; error: unknown })\n  | (FarmEventBase & { type: \"render.stream.start\"; route: string })\n  | (FarmEventBase & { type: \"render.stream.shellReady\"; route: string; durationMs: number })\n  | (FarmEventBase & { type: \"render.stream.complete\"; route: string; durationMs: number });\n\nexport type FarmCacheEvent =\n  | (FarmEventBase & {\n      type: \"cache.hit\";\n      key: string;\n      route?: string;\n      tags?: readonly string[];\n      revalidate?: number | false;\n      stale?: boolean;\n    })\n  | (FarmEventBase & { type: \"cache.miss\"; key: string; route?: string; reason?: string })\n  | (FarmEventBase & {\n      type: \"cache.set\";\n      key: string;\n      route?: string;\n      tags?: readonly string[];\n      revalidate?: number | false;\n    })\n  | (FarmEventBase & { type: \"cache.dedupe\"; key: string })\n  | (FarmEventBase & { type: \"cache.bypass\"; key?: string; route?: string; reason: string })\n  | (FarmEventBase & {\n      type: \"cache.stale\";\n      key: string;\n      route?: string;\n      tags?: readonly string[];\n      revalidate?: number | false;\n    })\n  | (FarmEventBase & { type: \"cache.revalidatePath\"; path: string; count: number })\n  | (FarmEventBase & {\n      type: \"cache.revalidateTag\";\n      tag: string;\n      profile?: unknown;\n      count: number;\n    })\n  | (FarmEventBase & { type: \"cache.updateTag\"; tag: string; count: number })\n  | (FarmEventBase & {\n      type: \"cache.invalidated\";\n      key?: string;\n      route?: string;\n      tag?: string;\n      reason?: string;\n      count?: number;\n    })\n  | (FarmEventBase & { type: \"cache.delete\"; key: string; deleted: boolean })\n  | (FarmEventBase & { type: \"cache.clear\"; count: number })\n  | (FarmEventBase & {\n      type: \"cache.error\";\n      key?: string;\n      operation: \"get\" | \"set\" | \"delete\" | \"revalidate\";\n      error: unknown;\n    });\n\nexport type FarmPPREvent =\n  | (FarmEventBase & { type: \"ppr.shell.hit\"; route: string; key: string })\n  | (FarmEventBase & { type: \"ppr.shell.miss\"; route: string; key: string })\n  | (FarmEventBase & {\n      type: \"ppr.shell.cached\";\n      route: string;\n      key: string;\n      revalidate?: number;\n    })\n  | (FarmEventBase & { type: \"ppr.shell.bypass\"; route: string; reason: string })\n  | (FarmEventBase & {\n      type: \"ppr.shell.invalidated\";\n      route: string;\n      reason?: string;\n      count?: number;\n    })\n  | (FarmEventBase & { type: \"ppr.suspense.holeDetected\"; route: string })\n  | (FarmEventBase & { type: \"ppr.refresh.start\"; route: string })\n  | (FarmEventBase & { type: \"ppr.refresh.complete\"; route: string; durationMs: number })\n  | (FarmEventBase & { type: \"ppr.refresh.error\"; route: string; error: unknown });\n\nexport type FarmAPIEvent =\n  | (FarmEventBase & { type: \"api.request.start\"; route: string; method: string })\n  | (FarmEventBase & {\n      type: \"api.request.complete\";\n      route: string;\n      method: string;\n      status: number;\n      durationMs: number;\n    })\n  | (FarmEventBase & {\n      type: \"api.validation.failed\";\n      route: string;\n      method: string;\n      issues?: unknown;\n    })\n  | (FarmEventBase & {\n      type: \"api.error\";\n      route: string;\n      method: string;\n      durationMs: number;\n      error: unknown;\n    });\n\nexport type FarmIntegrationEvent =\n  | (FarmEventBase & { type: \"integration.registered\"; name: string })\n  | (FarmEventBase & { type: \"integration.config.validated\"; name: string })\n  | (FarmEventBase & { type: \"integration.ready\"; name: string })\n  | (FarmEventBase & { type: \"integration.disposed\"; name: string })\n  | (FarmEventBase & {\n      type: \"integration.api.call.start\";\n      integration: string;\n      operation: string;\n    })\n  | (FarmEventBase & {\n      type: \"integration.api.call.complete\";\n      integration: string;\n      operation: string;\n      durationMs: number;\n    })\n  | (FarmEventBase & {\n      type: \"integration.api.call.error\";\n      integration: string;\n      operation: string;\n      error: unknown;\n    })\n  | (FarmEventBase & { type: \"integration.webhook.received\"; integration: string; event?: string })\n  | (FarmEventBase & { type: \"integration.webhook.verified\"; integration: string; event?: string })\n  | (FarmEventBase & { type: \"integration.webhook.failed\"; integration: string; reason: string });\n\nexport type FarmMiddlewareEvent =\n  | (FarmEventBase & { type: \"middleware.start\"; route?: string; name?: string })\n  | (FarmEventBase & {\n      type: \"middleware.complete\";\n      route?: string;\n      name?: string;\n      durationMs: number;\n    })\n  | (FarmEventBase & {\n      type: \"middleware.shortCircuit\";\n      route?: string;\n      name?: string;\n      status?: number;\n    })\n  | (FarmEventBase & { type: \"middleware.error\"; route?: string; name?: string; error: unknown });\n\nexport type FarmStorageEvent =\n  | (FarmEventBase & { type: \"storage.query.start\"; integration?: string; operation: string })\n  | (FarmEventBase & {\n      type: \"storage.query.complete\";\n      integration?: string;\n      operation: string;\n      durationMs: number;\n    })\n  | (FarmEventBase & {\n      type: \"storage.query.error\";\n      integration?: string;\n      operation: string;\n      error: unknown;\n    })\n  | (FarmEventBase & { type: \"storage.schema.ready\"; integration?: string })\n  | (FarmEventBase & { type: \"storage.schema.error\"; integration?: string; error: unknown });\n\nexport type FarmBuildEvent =\n  | (FarmEventBase & { type: \"build.start\"; target?: string })\n  | (FarmEventBase & { type: \"build.complete\"; target?: string; durationMs: number })\n  | (FarmEventBase & { type: \"build.error\"; target?: string; error: unknown })\n  | (FarmEventBase & { type: \"routes.generated\"; pageCount: number; apiCount?: number })\n  | (FarmEventBase & { type: \"types.generated\"; filePath: string })\n  | (FarmEventBase & { type: \"manifest.generated\"; routeCount: number });\n\nexport type FarmPluginEvent =\n  | (FarmEventBase & { type: \"plugin.hook.start\"; plugin: string; hook: string })\n  | (FarmEventBase & {\n      type: \"plugin.hook.complete\";\n      plugin: string;\n      hook: string;\n      durationMs: number;\n    })\n  | (FarmEventBase & { type: \"plugin.hook.error\"; plugin: string; hook: string; error: unknown });\n\nexport type FarmErrorEvent = FarmEventBase & {\n  type: \"error\";\n  source: string;\n  error: unknown;\n  route?: string;\n};\n\nexport type FarmEvent =\n  | FarmRequestEvent\n  | FarmServerEvent\n  | FarmRouteEvent\n  | FarmRenderEvent\n  | FarmCacheEvent\n  | FarmPPREvent\n  | FarmAPIEvent\n  | FarmIntegrationEvent\n  | FarmMiddlewareEvent\n  | FarmStorageEvent\n  | FarmBuildEvent\n  | FarmPluginEvent\n  | FarmErrorEvent;\n\nexport type FarmEventType = FarmEvent[\"type\"];\nexport type FarmEventHandler = (event: FarmEvent) => void | Promise<void>;\n\nexport type FarmEventInput = FarmEvent extends infer T\n  ? T extends FarmEvent\n    ? Omit<T, \"timestamp\" | \"level\"> & Partial<Pick<T, \"timestamp\" | \"level\">>\n    : never\n  : never;\n\nexport type FarmObservabilityUserConfig =\n  | boolean\n  | {\n      logs?: boolean;\n      onEvent?: FarmEventHandler | readonly FarmEventHandler[];\n      events?: readonly FarmEventType[];\n      tracing?: FarmTracingUserConfig;\n    };\n\nexport interface FarmResolvedObservabilityConfig {\n  logs: boolean;\n  handlers: FarmEventHandler[];\n  events?: Set<FarmEventType>;\n  tracing: FarmResolvedTracingConfig;\n}\n\nexport interface FarmEventSubscriptionOptions {\n  /** Receive events even when they are excluded by `observability.events`. */\n  unfiltered?: boolean;\n}\n\nconst runtimeHandlers = new Set<FarmEventHandler>();\nconst unfilteredRuntimeHandlers = new Set<FarmEventHandler>();\nlet observabilityState: FarmResolvedObservabilityConfig = {\n  logs: false,\n  handlers: [],\n  tracing: normalizeFarmTracingConfig(false),\n};\n\nexport function configureFarmObservability(config: FarmObservabilityUserConfig | undefined): void {\n  observabilityState = normalizeFarmObservabilityConfig(config);\n  configureFarmTracing(observabilityState.tracing);\n}\n\nexport function normalizeFarmObservabilityConfig(\n  config: FarmObservabilityUserConfig | undefined,\n): FarmResolvedObservabilityConfig {\n  if (config === undefined || config === false) {\n    return { logs: false, handlers: [], tracing: normalizeFarmTracingConfig(false) };\n  }\n\n  if (config === true) {\n    return { logs: true, handlers: [], tracing: normalizeFarmTracingConfig(false) };\n  }\n\n  const handlers = config.onEvent\n    ? Array.isArray(config.onEvent)\n      ? [...config.onEvent]\n      : [config.onEvent]\n    : [];\n\n  return {\n    logs: config.logs ?? false,\n    handlers,\n    events: config.events ? new Set(config.events) : undefined,\n    tracing: normalizeFarmTracingConfig(config.tracing),\n  };\n}\n\nexport function onFarmEvent(\n  handler: FarmEventHandler,\n  options: FarmEventSubscriptionOptions = {},\n): () => void {\n  const handlers = options.unfiltered ? unfilteredRuntimeHandlers : runtimeHandlers;\n  handlers.add(handler);\n  return () => {\n    handlers.delete(handler);\n  };\n}\n\nexport function resetFarmObservability(): void {\n  runtimeHandlers.clear();\n  unfilteredRuntimeHandlers.clear();\n  observabilityState = {\n    logs: false,\n    handlers: [],\n    tracing: normalizeFarmTracingConfig(false),\n  };\n  resetFarmTracing();\n}\n\nexport function emitFarmEvent(input: FarmEventInput): FarmEvent {\n  const event = {\n    timestamp: Date.now(),\n    level: inferFarmEventLevel(input.type),\n    ...input,\n  } as FarmEvent;\n\n  const traceContext = recordFarmEventTrace(event);\n  if (traceContext) {\n    event.traceId = traceContext.traceId;\n    event.spanId = traceContext.spanId;\n    event.traceSampled = traceContext.traceSampled;\n  }\n\n  notifyFarmEventHandlers(event, unfilteredRuntimeHandlers);\n\n  if (!shouldEmitFarmEvent(event)) return event;\n\n  if (observabilityState.logs) {\n    logFarmEvent(event);\n  }\n\n  notifyFarmEventHandlers(event, [...observabilityState.handlers, ...runtimeHandlers]);\n\n  return event;\n}\n\nfunction notifyFarmEventHandlers(event: FarmEvent, handlers: Iterable<FarmEventHandler>): void {\n  for (const handler of handlers) {\n    try {\n      Promise.resolve(handler(event)).catch((error) => {\n        console.warn(`[farm:observability] event handler failed: ${formatError(error)}`);\n      });\n    } catch (error) {\n      console.warn(`[farm:observability] event handler failed: ${formatError(error)}`);\n    }\n  }\n}\n\nexport async function runWithFarmRequestSpan<T>(\n  request: Request,\n  handler: () => T | Promise<T>,\n  options: FarmRequestSpanOptions = {},\n): Promise<T> {\n  const url = new URL(request.url);\n  const method = request.method || \"GET\";\n  return await _runWithFarmRequestSpan(request, handler, {\n    ...options,\n    onStart() {\n      emitFarmEvent({ type: \"request.start\", method, pathname: url.pathname });\n      options.onStart?.();\n    },\n    onComplete(status, durationMs) {\n      emitFarmEvent({\n        type: \"request.complete\",\n        method,\n        pathname: url.pathname,\n        status,\n        durationMs,\n      });\n      options.onComplete?.(status, durationMs);\n    },\n    onError(error, durationMs) {\n      emitFarmEvent({\n        type: \"request.error\",\n        method,\n        pathname: url.pathname,\n        durationMs,\n        error,\n      });\n      options.onError?.(error, durationMs);\n    },\n  });\n}\n\nexport { configureFarmTracing, getFarmTraceContext, normalizeFarmTracingConfig, runWithFarmSpan };\nexport type {\n  FarmRequestSpanOptions,\n  FarmResolvedTracingConfig,\n  FarmSpanOptions,\n  FarmTraceContext,\n  FarmTraceSpanKind,\n  FarmTracingConfig,\n  FarmTracingUserConfig,\n};\n\nfunction shouldEmitFarmEvent(event: FarmEvent): boolean {\n  if (\n    !observabilityState.logs &&\n    observabilityState.handlers.length === 0 &&\n    runtimeHandlers.size === 0\n  ) {\n    return false;\n  }\n\n  if (observabilityState.events && !observabilityState.events.has(event.type)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction inferFarmEventLevel(type: FarmEventType): FarmEventLevel {\n  if (type === \"error\" || type.endsWith(\".error\") || type.endsWith(\".failed\")) {\n    return \"error\";\n  }\n  if (\n    type.endsWith(\".bypass\") ||\n    type.endsWith(\".invalidated\") ||\n    type.endsWith(\".stale\") ||\n    type.endsWith(\".notFound\")\n  ) {\n    return \"warn\";\n  }\n  if (\n    type.endsWith(\".hit\") ||\n    type.endsWith(\".miss\") ||\n    type.endsWith(\".start\") ||\n    type.endsWith(\".shellReady\")\n  ) {\n    return \"debug\";\n  }\n  return \"info\";\n}\n\nfunction logFarmEvent(event: FarmEvent): void {\n  const message = `[farm:${event.level}] ${event.type}${formatFarmEventDetails(event)}`;\n  switch (event.level) {\n    case \"error\":\n      console.error(message);\n      break;\n    case \"warn\":\n      console.warn(message);\n      break;\n    default:\n      console.log(message);\n      break;\n  }\n}\n\nfunction formatFarmEventDetails(event: FarmEvent): string {\n  const details: string[] = [];\n  const record = event as unknown as Record<string, unknown>;\n\n  for (const key of [\n    \"route\",\n    \"pathname\",\n    \"method\",\n    \"status\",\n    \"key\",\n    \"tag\",\n    \"path\",\n    \"reason\",\n    \"durationMs\",\n    \"integration\",\n    \"operation\",\n    \"plugin\",\n    \"hook\",\n    \"target\",\n    \"count\",\n  ]) {\n    const value = record[key];\n    if (value !== undefined) {\n      details.push(`${key}=${formatDetailValue(value)}`);\n    }\n  }\n\n  return details.length > 0 ? ` ${details.join(\" \")}` : \"\";\n}\n\nfunction formatDetailValue(value: unknown): string {\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    return String(value);\n  }\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n}\n\nfunction formatError(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n","export type FarmRedirectStatus = 301 | 302 | 303 | 307 | 308;\n\nexport interface FarmRedirectSignal {\n  url: string;\n  status: FarmRedirectStatus;\n}\n\nconst REDIRECT_ERROR_CODE = \"FARM_REDIRECT\";\nconst NOT_FOUND_ERROR_CODE = \"FARM_NOT_FOUND\";\nconst REDIRECT_ERROR_SYMBOL = Symbol.for(\"farm.navigation.redirect\");\nconst NOT_FOUND_ERROR_SYMBOL = Symbol.for(\"farm.navigation.notFound\");\n\ntype FarmNavigationError = Error & {\n  digest: string;\n  [REDIRECT_ERROR_SYMBOL]?: FarmRedirectSignal;\n  [NOT_FOUND_ERROR_SYMBOL]?: true;\n};\n\nexport function redirect(url: string, status: FarmRedirectStatus = 307): never {\n  throw createRedirectError(url, status);\n}\n\nexport function permanentRedirect(url: string): never {\n  redirect(url, 308);\n}\n\nexport function notFound(): never {\n  const error = new Error(NOT_FOUND_ERROR_CODE) as FarmNavigationError;\n  error.digest = NOT_FOUND_ERROR_CODE;\n  error[NOT_FOUND_ERROR_SYMBOL] = true;\n  throw error;\n}\n\nexport function isFarmRedirectError(error: unknown): boolean {\n  return Boolean(getFarmRedirectError(error));\n}\n\nexport function getFarmRedirectError(error: unknown): FarmRedirectSignal | null {\n  if (!error || typeof error !== \"object\") return null;\n  const candidate = error as Partial<FarmNavigationError>;\n  if (candidate[REDIRECT_ERROR_SYMBOL]) {\n    return candidate[REDIRECT_ERROR_SYMBOL] as FarmRedirectSignal;\n  }\n\n  if (\n    typeof candidate.digest === \"string\" &&\n    candidate.digest.startsWith(`${REDIRECT_ERROR_CODE};`)\n  ) {\n    const [, status, ...urlParts] = candidate.digest.split(\";\");\n    const parsedStatus = Number(status);\n    if (isFarmRedirectStatus(parsedStatus)) {\n      return {\n        status: parsedStatus,\n        url: urlParts.join(\";\"),\n      };\n    }\n  }\n\n  return null;\n}\n\nexport function isFarmNotFoundError(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") return false;\n  const candidate = error as Partial<FarmNavigationError>;\n  return Boolean(candidate[NOT_FOUND_ERROR_SYMBOL] || candidate.digest === NOT_FOUND_ERROR_CODE);\n}\n\nfunction createRedirectError(url: string, status: FarmRedirectStatus): FarmNavigationError {\n  const error = new Error(`${REDIRECT_ERROR_CODE};${status};${url}`) as FarmNavigationError;\n  error.digest = `${REDIRECT_ERROR_CODE};${status};${url}`;\n  error[REDIRECT_ERROR_SYMBOL] = { url, status };\n  return error;\n}\n\nexport function isFarmRedirectStatus(status: unknown): status is FarmRedirectStatus {\n  return status === 301 || status === 302 || status === 303 || status === 307 || status === 308;\n}\n","export type FarmRouteRuntime = \"auto\" | \"node\" | \"edge\";\nexport type FarmRouteRegions = \"auto\" | readonly string[];\nexport type FarmRouteMaxDuration = \"auto\" | number;\n\n/** Portable execution controls shared by file, programmatic, and config routes. */\nexport interface FarmRouteRuntimeConfig {\n  runtime?: FarmRouteRuntime;\n  regions?: FarmRouteRegions;\n  maxDuration?: FarmRouteMaxDuration;\n}\n\nexport interface ResolvedFarmRouteRuntimeConfig {\n  runtime: FarmRouteRuntime;\n  regions?: string[];\n  maxDuration?: number;\n}\n\nexport type FarmRouteRuntimeEntryKind = \"page\" | \"api\" | \"metadata\" | \"rule\";\nexport type FarmRouteRenderingMode = \"static\" | \"dynamic\";\n\nexport interface FarmRouteRuntimeManifestEntry extends ResolvedFarmRouteRuntimeConfig {\n  kind: FarmRouteRuntimeEntryKind;\n  pattern: string;\n  rendering: FarmRouteRenderingMode;\n  source?: string;\n}\n\nexport interface FarmRouteRuntimeManifest {\n  version: 1;\n  routes: FarmRouteRuntimeManifestEntry[];\n}\n\nexport function normalizeFarmRouteRuntimeConfig(\n  value: FarmRouteRuntimeConfig | null | undefined,\n  source = \"Route configuration\",\n): FarmRouteRuntimeConfig {\n  if (!value) return {};\n\n  const normalized: FarmRouteRuntimeConfig = {};\n\n  if (value.runtime !== undefined) {\n    if (value.runtime !== \"auto\" && value.runtime !== \"node\" && value.runtime !== \"edge\") {\n      throw new TypeError(`${source} runtime must be \"auto\", \"node\", or \"edge\"`);\n    }\n    normalized.runtime = value.runtime;\n  }\n\n  if (value.regions !== undefined) {\n    if (value.regions === \"auto\") {\n      normalized.regions = \"auto\";\n    } else {\n      if (!Array.isArray(value.regions) || value.regions.length === 0) {\n        throw new TypeError(`${source} regions must be \"auto\" or a non-empty string array`);\n      }\n\n      const regions = Array.from(\n        new Set(\n          value.regions.map((region) => {\n            if (\n              typeof region !== \"string\" ||\n              !region.trim() ||\n              /[\\u0000-\\u001f\\u007f]/.test(region)\n            ) {\n              throw new TypeError(`${source} regions must contain non-empty region identifiers`);\n            }\n            return region.trim();\n          }),\n        ),\n      );\n\n      normalized.regions = regions;\n    }\n  }\n\n  if (value.maxDuration !== undefined) {\n    if (value.maxDuration === \"auto\") {\n      normalized.maxDuration = \"auto\";\n    } else if (\n      typeof value.maxDuration !== \"number\" ||\n      !Number.isInteger(value.maxDuration) ||\n      value.maxDuration <= 0\n    ) {\n      throw new TypeError(`${source} maxDuration must be \"auto\" or a positive integer in seconds`);\n    } else {\n      normalized.maxDuration = value.maxDuration;\n    }\n  }\n\n  return normalized;\n}\n\n/** Merge from lowest to highest precedence. Explicit \"auto\" values reset inherited hints. */\nexport function mergeFarmRouteRuntimeConfigs(\n  ...configs: Array<FarmRouteRuntimeConfig | null | undefined>\n): FarmRouteRuntimeConfig {\n  const merged: FarmRouteRuntimeConfig = {};\n\n  for (const config of configs) {\n    if (!config) continue;\n    if (config.runtime !== undefined) merged.runtime = config.runtime;\n    if (config.regions !== undefined) merged.regions = config.regions;\n    if (config.maxDuration !== undefined) merged.maxDuration = config.maxDuration;\n  }\n\n  return merged;\n}\n\nexport function resolveFarmRouteRuntimeConfig(\n  config: FarmRouteRuntimeConfig | null | undefined,\n  source?: string,\n): ResolvedFarmRouteRuntimeConfig {\n  const normalized = normalizeFarmRouteRuntimeConfig(config, source);\n\n  return {\n    runtime: normalized.runtime ?? \"auto\",\n    ...(normalized.regions && normalized.regions !== \"auto\"\n      ? { regions: [...normalized.regions] }\n      : {}),\n    ...(typeof normalized.maxDuration === \"number\" ? { maxDuration: normalized.maxDuration } : {}),\n  };\n}\n\nexport function hasFarmRouteRuntimeControls(\n  config: FarmRouteRuntimeConfig | null | undefined,\n): boolean {\n  return Boolean(\n    config &&\n    (config.runtime !== undefined ||\n      config.regions !== undefined ||\n      config.maxDuration !== undefined),\n  );\n}\n\nexport function getFarmRouteRuntimeConfig(value: unknown): FarmRouteRuntimeConfig {\n  if (!value || typeof value !== \"object\") return {};\n  const route = value as FarmRouteRuntimeConfig;\n  return {\n    ...(route.runtime !== undefined ? { runtime: route.runtime } : {}),\n    ...(route.regions !== undefined ? { regions: route.regions } : {}),\n    ...(route.maxDuration !== undefined ? { maxDuration: route.maxDuration } : {}),\n  };\n}\n\nexport function createFarmRouteRuntimeKey(config: ResolvedFarmRouteRuntimeConfig): string {\n  return JSON.stringify({\n    runtime: config.runtime,\n    regions: config.regions || null,\n    maxDuration: config.maxDuration || null,\n  });\n}\n\n/** Resolve matching route rules from broadest to most specific. */\nexport function resolveFarmRouteRuleRuntimeConfig(\n  pathname: string,\n  routeRules: Record<string, FarmRouteRuntimeConfig> | null | undefined,\n): FarmRouteRuntimeConfig {\n  if (!routeRules) return {};\n\n  const matches = Object.entries(routeRules)\n    .filter(\n      ([pattern, rule]) =>\n        hasFarmRouteRuntimeControls(rule) && farmRouteRuleMatches(pattern, pathname),\n    )\n    .sort(([left], [right]) => compareFarmRouteRuleSpecificity(left, right));\n\n  return mergeFarmRouteRuntimeConfigs(...matches.map(([, rule]) => rule));\n}\n\nexport function farmRouteRuleMatches(pattern: string, pathname: string): boolean {\n  const normalizedPattern = normalizeRoutePattern(pattern);\n  const normalizedPathname = normalizeRoutePattern(pathname);\n  if (normalizedPattern === normalizedPathname) return true;\n\n  const expression = normalizedPattern\n    .split(\"/\")\n    .filter(Boolean)\n    .map((segment) => {\n      if (segment === \"**\") return \".*\";\n      if (segment === \"*\") return \"[^/]+\";\n      if (/^\\[\\[\\.\\.\\..+\\]\\]$/.test(segment)) return \".*\";\n      if (/^\\[\\.\\.\\..+\\]$/.test(segment)) return \".+\";\n      if (/^\\[.+\\]$/.test(segment) || /^:.+$/.test(segment)) return \"[^/]+\";\n      return escapeRegExp(segment);\n    })\n    .join(\"/\");\n\n  return new RegExp(`^/${expression}/?$`).test(normalizedPathname);\n}\n\nfunction compareFarmRouteRuleSpecificity(left: string, right: string): number {\n  const leftScore = getFarmRouteRuleSpecificity(left);\n  const rightScore = getFarmRouteRuleSpecificity(right);\n  return leftScore - rightScore || left.localeCompare(right);\n}\n\nfunction getFarmRouteRuleSpecificity(pattern: string): number {\n  return normalizeRoutePattern(pattern)\n    .split(\"/\")\n    .filter(Boolean)\n    .reduce((score, segment) => {\n      if (segment === \"**\" || segment.startsWith(\"[[...\")) return score + 1;\n      if (segment === \"*\" || segment.startsWith(\"[...\")) return score + 10;\n      if (/^\\[.+\\]$/.test(segment) || /^:.+$/.test(segment)) return score + 50;\n      return score + 100;\n    }, 0);\n}\n\nfunction normalizeRoutePattern(value: string): string {\n  const withSlash = value.trim().startsWith(\"/\") ? value.trim() : `/${value.trim()}`;\n  return withSlash.length > 1 ? withSlash.replace(/\\/+$/, \"\") : withSlash;\n}\n\nfunction escapeRegExp(value: string): string {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import type { HeaderConfig, RedirectConfig } from \"./config\";\nimport { isFarmRedirectStatus, type FarmRedirectStatus } from \"./navigation-errors\";\nimport type { FarmRouteRuntimeConfig } from \"./route-runtime\";\nimport { normalizeFarmRouteRuntimeConfig } from \"./route-runtime\";\nimport { validateConfigRouteSource } from \"./plugins/route-pattern\";\n\nexport type FarmRouteRuleRenderMode = \"static\" | \"dynamic\";\n\nexport type FarmRouteRuleRedirect =\n  | string\n  | {\n      to: string;\n      statusCode?: FarmRedirectStatus;\n      permanent?: boolean;\n    };\n\nexport type FarmRouteRuleCors =\n  | boolean\n  | {\n      origin?: string;\n      methods?: string | readonly string[];\n      headers?: string | readonly string[];\n    };\n\nexport interface FarmRouteRule extends FarmRouteRuntimeConfig {\n  prerender?: boolean;\n  render?: FarmRouteRuleRenderMode;\n  ssr?: boolean;\n  swr?: boolean | number;\n  isr?: boolean | number;\n  cors?: FarmRouteRuleCors;\n  headers?: Record<string, string>;\n  redirect?: FarmRouteRuleRedirect;\n}\n\nexport type FarmRouteRules = Record<string, FarmRouteRule>;\n\nexport function normalizeRouteRules(routeRules: FarmRouteRules | undefined): FarmRouteRules {\n  if (!routeRules) return {};\n\n  const normalized: FarmRouteRules = {};\n  const normalizedSources = new Map<string, string>();\n  for (const [source, rule] of Object.entries(routeRules)) {\n    if (!rule) continue;\n    const normalizedSource = normalizeRuleSource(source);\n    validateConfigRouteSource(normalizedSource, `Route rule \"${source}\" source`);\n    const existingSource = normalizedSources.get(normalizedSource);\n    if (existingSource !== undefined) {\n      throw new Error(\n        `Route rules \"${existingSource}\" and \"${source}\" both normalize to \"${normalizedSource}\".`,\n      );\n    }\n    normalizedSources.set(normalizedSource, source);\n    if (\n      typeof rule.redirect === \"object\" &&\n      rule.redirect.statusCode !== undefined &&\n      !isFarmRedirectStatus(rule.redirect.statusCode)\n    ) {\n      throw new RangeError(\n        `Route rule \"${normalizedSource}\" redirect.statusCode must be one of 301, 302, 303, 307, or 308.`,\n      );\n    }\n    normalized[normalizedSource] = {\n      ...rule,\n      ...normalizeFarmRouteRuntimeConfig(rule, `Route rule \"${normalizedSource}\"`),\n    };\n  }\n  return normalized;\n}\n\nexport function routeRulesToRedirects(routeRules: FarmRouteRules): RedirectConfig[] {\n  return Object.entries(routeRules)\n    .filter((entry): entry is [string, FarmRouteRule & { redirect: FarmRouteRuleRedirect }] =>\n      Boolean(entry[1].redirect),\n    )\n    .map(([source, rule]) => {\n      const redirect = typeof rule.redirect === \"string\" ? { to: rule.redirect } : rule.redirect;\n      return {\n        source,\n        destination: redirect.to,\n        permanent: redirect.permanent,\n        statusCode: redirect.statusCode ?? (redirect.permanent === true ? 308 : undefined),\n      };\n    });\n}\n\nexport function routeRulesToHeaders(routeRules: FarmRouteRules): HeaderConfig[] {\n  const configs: HeaderConfig[] = [];\n\n  for (const [source, rule] of Object.entries(routeRules)) {\n    const headers = {\n      ...normalizeCorsHeaders(rule.cors),\n      ...rule.headers,\n    };\n\n    const entries = Object.entries(headers);\n    if (entries.length === 0) continue;\n\n    configs.push({\n      source,\n      headers: entries.map(([key, value]) => ({ key, value })),\n    });\n  }\n\n  return configs;\n}\n\nexport function routeRulesToNitroRouteRules(routeRules: FarmRouteRules): Record<string, any> {\n  const nitroRules: Record<string, any> = {};\n\n  for (const [source, rule] of Object.entries(routeRules)) {\n    const nitroRule: Record<string, any> = { ...rule };\n\n    if (rule.render === \"static\") {\n      nitroRule.prerender = true;\n    } else if (rule.render === \"dynamic\") {\n      nitroRule.prerender = false;\n    }\n\n    if (rule.redirect) {\n      const redirect = typeof rule.redirect === \"string\" ? { to: rule.redirect } : rule.redirect;\n      if (hasExplicitQuery(redirect.to)) {\n        // Nitro merges the incoming query into redirect targets, including when\n        // the target already declares one. Farm's redirect contract replaces\n        // the incoming query in that case, so let the bundled Farm handler own\n        // these redirects instead of changing their meaning in production.\n        delete nitroRule.redirect;\n      } else {\n        nitroRule.redirect = {\n          to: redirect.to,\n          status: redirect.statusCode ?? (redirect.permanent === true ? 308 : 307),\n        };\n      }\n    }\n\n    if (rule.cors) {\n      nitroRule.cors = true;\n      nitroRule.headers = {\n        ...normalizeCorsHeaders(rule.cors),\n        ...rule.headers,\n      };\n    }\n\n    delete nitroRule.render;\n    delete nitroRule.runtime;\n    delete nitroRule.regions;\n    delete nitroRule.maxDuration;\n    nitroRules[source] = nitroRule;\n  }\n\n  return nitroRules;\n}\n\nfunction normalizeCorsHeaders(cors: FarmRouteRuleCors | undefined): Record<string, string> {\n  if (!cors) return {};\n\n  if (cors === true) {\n    return {\n      \"Access-Control-Allow-Origin\": \"*\",\n      \"Access-Control-Allow-Methods\": \"*\",\n      \"Access-Control-Allow-Headers\": \"*\",\n    };\n  }\n\n  return {\n    \"Access-Control-Allow-Origin\": cors.origin ?? \"*\",\n    \"Access-Control-Allow-Methods\": normalizeList(cors.methods) ?? \"*\",\n    \"Access-Control-Allow-Headers\": normalizeList(cors.headers) ?? \"*\",\n  };\n}\n\nfunction normalizeList(value: string | readonly string[] | undefined): string | undefined {\n  if (!value || typeof value === \"string\") return value;\n  return value.join(\", \");\n}\n\nfunction normalizeRuleSource(source: string): string {\n  const trimmed = source.trim();\n  if (!trimmed) {\n    throw new TypeError(\"Route rule source must be a non-empty pathname pattern.\");\n  }\n  return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n}\n\nfunction hasExplicitQuery(destination: string): boolean {\n  const queryIndex = destination.indexOf(\"?\");\n  if (queryIndex === -1) return false;\n  const hashIndex = destination.indexOf(\"#\");\n  return hashIndex === -1 || queryIndex < hashIndex;\n}\n","export type FarmCacheInvalidationListener = (key: string) => void;\nexport type FarmCacheTaskListener = (task: Promise<void>) => void;\n\nexport const FARM_CACHE_INVALIDATION_HEADER = \"x-farm-cache-invalidations\";\n\ntype FarmCacheInvalidationState = {\n  listeners: Set<FarmCacheInvalidationListener>;\n  taskListeners: Set<FarmCacheTaskListener>;\n};\n\nconst FARM_CACHE_INVALIDATION_STATE = Symbol.for(\"farm.cacheInvalidationState\");\nconst globalState = globalThis as typeof globalThis & {\n  [FARM_CACHE_INVALIDATION_STATE]?: FarmCacheInvalidationState;\n};\n\nfunction getFarmCacheInvalidationState(): FarmCacheInvalidationState {\n  return (globalState[FARM_CACHE_INVALIDATION_STATE] ??= {\n    listeners: new Set(),\n    taskListeners: new Set(),\n  });\n}\n\nfunction warnFarmCacheListenerError(scope: string, error: unknown): void {\n  const detail = error instanceof Error ? (error.stack ?? error.message) : String(error);\n  console.warn(`[farm:cache] ${scope} listener failed: ${detail}`);\n}\n\nexport function notifyFarmCacheInvalidation(key: string): void {\n  if (typeof key !== \"string\" || key.length === 0) return;\n\n  for (const listener of getFarmCacheInvalidationState().listeners) {\n    // Isolate listeners: one throwing observer must not abort the remaining\n    // listeners (or the rest of a multi-key batch in applyFarmCacheInvalidations)\n    // and must not surface as a 500 when invalidation runs inside a request.\n    try {\n      listener(key);\n    } catch (error) {\n      warnFarmCacheListenerError(\"invalidation\", error);\n    }\n  }\n}\n\nexport function notifyFarmCacheTask(task: Promise<void>): void {\n  for (const listener of getFarmCacheInvalidationState().taskListeners) {\n    try {\n      listener(task);\n    } catch (error) {\n      warnFarmCacheListenerError(\"task\", error);\n    }\n  }\n}\n\nexport function applyFarmCacheInvalidations(keys: unknown): void {\n  if (!Array.isArray(keys)) return;\n\n  for (const key of keys) {\n    if (typeof key === \"string\") {\n      notifyFarmCacheInvalidation(key);\n    }\n  }\n}\n\nexport function encodeFarmCacheInvalidations(keys: readonly string[]): string | null {\n  const normalized = Array.from(\n    new Set(keys.filter((key) => typeof key === \"string\" && key.length > 0)),\n  );\n  if (normalized.length === 0) return null;\n  return encodeURIComponent(JSON.stringify(normalized));\n}\n\nexport function decodeFarmCacheInvalidations(value: string | null | undefined): readonly string[] {\n  if (!value) return [];\n\n  try {\n    const parsed = JSON.parse(decodeURIComponent(value));\n    return Array.isArray(parsed)\n      ? Array.from(\n          new Set(parsed.filter((key): key is string => typeof key === \"string\" && key.length > 0)),\n        )\n      : [];\n  } catch {\n    return [];\n  }\n}\n\nexport function subscribeFarmCacheInvalidation(\n  listener: FarmCacheInvalidationListener,\n): () => void {\n  const state = getFarmCacheInvalidationState();\n  state.listeners.add(listener);\n  return () => state.listeners.delete(listener);\n}\n\nexport function subscribeFarmCacheTask(listener: FarmCacheTaskListener): () => void {\n  const state = getFarmCacheInvalidationState();\n  state.taskListeners.add(listener);\n  return () => state.taskListeners.delete(listener);\n}\n","export const FARM_SERVER_FN_FAILURE_SYMBOL = Symbol.for(\"farm.server-fn.failure\");\n\nexport type SerializedServerFnFailure = {\n  name: \"ServerFnFailure\";\n  message: string;\n  code: string;\n  status: number;\n  data: unknown;\n};\n\nexport class ServerFnFailure<\n  TCode extends string = string,\n  TData = unknown,\n  TStatus extends number = number,\n> extends Error {\n  readonly name = \"ServerFnFailure\" as const;\n  readonly code: TCode;\n  readonly data: TData;\n  readonly status: TStatus;\n\n  constructor(\n    code: TCode,\n    data: TData,\n    options: {\n      status: TStatus;\n      message: string;\n    },\n  ) {\n    super(options.message);\n    this.code = code;\n    this.data = data;\n    this.status = options.status;\n\n    Object.defineProperty(this, FARM_SERVER_FN_FAILURE_SYMBOL, {\n      value: true,\n      enumerable: false,\n    });\n  }\n}\n\nexport class ServerActionError extends Error {\n  readonly name = \"ServerActionError\" as const;\n\n  constructor(message = \"Server function failed\") {\n    super(message);\n  }\n}\n\nexport function isServerFnFailure(value: unknown): value is ServerFnFailure {\n  if (!value || typeof value !== \"object\") return false;\n\n  const candidate = value as Partial<ServerFnFailure> & {\n    [FARM_SERVER_FN_FAILURE_SYMBOL]?: unknown;\n  };\n  return (\n    candidate[FARM_SERVER_FN_FAILURE_SYMBOL] === true &&\n    candidate.name === \"ServerFnFailure\" &&\n    typeof candidate.code === \"string\" &&\n    Number.isInteger(candidate.status) &&\n    (candidate.status ?? 0) >= 400 &&\n    (candidate.status ?? 0) <= 599\n  );\n}\n\nexport function serializeServerFnFailure(value: unknown): SerializedServerFnFailure | null {\n  if (!isServerFnFailure(value)) return null;\n\n  return {\n    name: \"ServerFnFailure\",\n    message: value.message,\n    code: value.code,\n    status: value.status,\n    data: value.data,\n  };\n}\n\nexport function createServerFnTransportError(value: unknown): ServerFnFailure | ServerActionError {\n  if (isSerializedServerFnFailure(value)) {\n    return new ServerFnFailure(value.code, value.data, {\n      status: value.status,\n      message: value.message,\n    });\n  }\n\n  const message =\n    value && typeof value === \"object\" && \"message\" in value && typeof value.message === \"string\"\n      ? value.message\n      : \"Server function failed\";\n  return new ServerActionError(message);\n}\n\nfunction isSerializedServerFnFailure(value: unknown): value is SerializedServerFnFailure {\n  if (!value || typeof value !== \"object\") return false;\n\n  const candidate = value as Partial<SerializedServerFnFailure>;\n  return (\n    candidate.name === \"ServerFnFailure\" &&\n    typeof candidate.message === \"string\" &&\n    typeof candidate.code === \"string\" &&\n    Number.isInteger(candidate.status) &&\n    (candidate.status ?? 0) >= 400 &&\n    (candidate.status ?? 0) <= 599 &&\n    \"data\" in candidate\n  );\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { subscribeFarmCacheInvalidation, subscribeFarmCacheTask } from \"./cache-invalidation\";\nimport {\n  getRequestSourceOrigin,\n  matchesAllowedOrigin,\n  matchesHostHeader,\n  normalizeAllowedOriginPattern,\n} from \"./request-origin\";\nimport { serializeServerFnFailure, type SerializedServerFnFailure } from \"./server-fn-error\";\nimport { parseBodySizeLimit } from \"./server-http\";\n\nconst SERVER_ACTION_ALLOWED_ORIGINS_LABEL = \"serverActions.allowedOrigins\";\n\nexport const DEFAULT_SERVER_ACTION_BODY_SIZE_LIMIT = 1_000_000;\n\nexport interface FarmServerActionsConfig {\n  /** Additional trusted origins or host patterns, such as https://app.example.com. */\n  allowedOrigins?: readonly string[];\n  /** Maximum encoded request body size in bytes or as a size string such as \"1mb\". */\n  bodySizeLimit?: number | string;\n}\n\nexport interface ResolvedFarmServerActionsConfig {\n  allowedOrigins: readonly string[];\n  bodySizeLimit: number;\n}\n\nexport type ServerActionRequestKind = \"javascript\" | \"form\";\n\nexport interface PreparedServerActionRequest {\n  body: string | FormData;\n  contentType: string;\n}\n\nexport type SanitizedServerActionError =\n  | {\n      name: \"ServerActionError\";\n      message: \"Server function failed\";\n    }\n  | SerializedServerFnFailure;\n\ntype ServerActionRequestErrorCode =\n  | \"BODY_TOO_LARGE\"\n  | \"INVALID_ACTION_ID\"\n  | \"INVALID_BODY\"\n  | \"INVALID_CONTENT_LENGTH\"\n  | \"INVALID_METHOD\"\n  | \"INVALID_ORIGIN\"\n  | \"MISSING_ORIGIN\"\n  | \"UNSUPPORTED_CONTENT_TYPE\";\n\nexport class ServerActionRequestError extends Error {\n  readonly code: ServerActionRequestErrorCode;\n  readonly status: number;\n\n  constructor(code: ServerActionRequestErrorCode, status: number, message: string) {\n    super(message);\n    this.name = \"ServerActionRequestError\";\n    this.code = code;\n    this.status = status;\n  }\n}\n\ntype ServerActionExecutionContext = {\n  request: Request;\n  signal: AbortSignal;\n  invalidations: Set<string>;\n  cacheTasks: Set<Promise<void>>;\n};\n\nconst SERVER_ACTION_STORAGE_KEY = Symbol.for(\"farm.serverActionStorage\");\nconst FALLBACK_ABORT_CONTROLLER_KEY = Symbol.for(\"farm.serverActionFallbackAbortController\");\nconst FORM_ACTION_CONTENT_TYPES = new Set([\n  \"application/x-www-form-urlencoded\",\n  \"multipart/form-data\",\n]);\nconst JAVASCRIPT_ACTION_CONTENT_TYPES = new Set([\n  \"application/octet-stream\",\n  \"application/x-www-form-urlencoded\",\n  \"multipart/form-data\",\n  \"text/plain\",\n]);\n\ntype GlobalWithServerActionStorage = typeof globalThis & {\n  [SERVER_ACTION_STORAGE_KEY]?: AsyncLocalStorage<ServerActionExecutionContext>;\n  [FALLBACK_ABORT_CONTROLLER_KEY]?: AbortController;\n};\n\nexport function resolveServerActionsConfig(\n  config: FarmServerActionsConfig | undefined,\n): ResolvedFarmServerActionsConfig {\n  const allowedOrigins = (config?.allowedOrigins ?? []).map((value) =>\n    normalizeAllowedOriginPattern(value, SERVER_ACTION_ALLOWED_ORIGINS_LABEL),\n  );\n  const bodySizeLimit = parseBodySizeLimit(\n    config?.bodySizeLimit ?? DEFAULT_SERVER_ACTION_BODY_SIZE_LIMIT,\n    \"serverActions.bodySizeLimit\",\n  );\n\n  return Object.freeze({\n    allowedOrigins: Object.freeze(allowedOrigins),\n    bodySizeLimit,\n  });\n}\n\nexport function validateServerActionRequest(\n  request: Request,\n  config: ResolvedFarmServerActionsConfig,\n): void {\n  if (request.method.toUpperCase() !== \"POST\") {\n    throw new ServerActionRequestError(\n      \"INVALID_METHOD\",\n      405,\n      \"Server actions only accept POST requests\",\n    );\n  }\n\n  const requestUrl = new URL(request.url);\n  const sourceOrigin = resolveSourceOrigin(request);\n  const fetchSite = request.headers.get(\"sec-fetch-site\")?.trim().toLowerCase();\n\n  if (!sourceOrigin) {\n    if (fetchSite !== \"same-origin\") {\n      throw new ServerActionRequestError(\n        \"MISSING_ORIGIN\",\n        403,\n        \"Server action request is missing same-origin metadata\",\n      );\n    }\n    return;\n  }\n\n  const matchesRequest =\n    sourceOrigin === requestUrl.origin || matchesHostHeader(sourceOrigin, request);\n  const matchesConfiguredOrigin = config.allowedOrigins.some((pattern) =>\n    matchesAllowedOrigin(sourceOrigin, pattern),\n  );\n\n  if (!matchesRequest && !matchesConfiguredOrigin) {\n    throw new ServerActionRequestError(\n      \"INVALID_ORIGIN\",\n      403,\n      \"Server action origin does not match the request origin\",\n    );\n  }\n\n  if (fetchSite === \"cross-site\" && !matchesConfiguredOrigin) {\n    throw new ServerActionRequestError(\n      \"INVALID_ORIGIN\",\n      403,\n      \"Cross-site server action request was rejected\",\n    );\n  }\n}\n\nexport async function prepareServerActionRequest(\n  request: Request,\n  config: ResolvedFarmServerActionsConfig,\n  kind: ServerActionRequestKind,\n  actionId?: string | null,\n): Promise<PreparedServerActionRequest> {\n  validateServerActionRequest(request, config);\n\n  if (kind === \"javascript\") {\n    validateActionId(actionId);\n  }\n\n  const contentType = getSupportedContentType(request, kind);\n  const bytes = await readBodyWithLimit(request, config.bodySizeLimit);\n\n  if (kind === \"form\" || contentType === \"multipart/form-data\") {\n    return {\n      body: await parseFormData(request, bytes),\n      contentType,\n    };\n  }\n\n  return {\n    body: new TextDecoder().decode(bytes),\n    contentType,\n  };\n}\n\nexport function createServerActionRequestErrorResponse(error: unknown): Response | null {\n  if (!(error instanceof ServerActionRequestError)) {\n    return null;\n  }\n\n  const headers = new Headers({\n    \"cache-control\": \"no-store\",\n    \"content-type\": \"text/plain; charset=utf-8\",\n    \"x-content-type-options\": \"nosniff\",\n  });\n  if (error.status === 405) {\n    headers.set(\"allow\", \"POST\");\n  }\n\n  return new Response(getPublicErrorMessage(error.status), {\n    status: error.status,\n    headers,\n  });\n}\n\nexport function sanitizeServerActionError(error: unknown): SanitizedServerActionError {\n  const declaredFailure = serializeServerFnFailure(error);\n  if (declaredFailure) return declaredFailure;\n\n  return {\n    name: \"ServerActionError\",\n    message: \"Server function failed\",\n  };\n}\n\nexport async function runWithServerActionRequest<T>(\n  request: Request,\n  callback: () => T | Promise<T>,\n): Promise<T> {\n  throwIfAborted(request.signal);\n  const context: ServerActionExecutionContext = {\n    request,\n    signal: request.signal,\n    invalidations: new Set(),\n    cacheTasks: new Set(),\n  };\n\n  return getServerActionStorage().run(context, async () => {\n    try {\n      const result = await callback();\n      await Promise.all(context.cacheTasks);\n      return result;\n    } catch (error) {\n      await Promise.allSettled(context.cacheTasks);\n      throw error;\n    }\n  });\n}\n\nexport function getServerActionExecutionContext(): ServerActionExecutionContext | undefined {\n  return getServerActionStorage().getStore();\n}\n\nexport function getServerActionSignal(): AbortSignal {\n  return getServerActionExecutionContext()?.signal ?? getFallbackAbortController().signal;\n}\n\nexport function getServerActionInvalidations(): readonly string[] {\n  return Array.from(getServerActionExecutionContext()?.invalidations ?? []);\n}\n\nsubscribeFarmCacheInvalidation((key) => {\n  getServerActionExecutionContext()?.invalidations.add(key);\n});\n\nsubscribeFarmCacheTask((task) => {\n  getServerActionExecutionContext()?.cacheTasks.add(task);\n});\n\nfunction getServerActionStorage(): AsyncLocalStorage<ServerActionExecutionContext> {\n  const globalState = globalThis as GlobalWithServerActionStorage;\n  if (!globalState[SERVER_ACTION_STORAGE_KEY]) {\n    globalState[SERVER_ACTION_STORAGE_KEY] = new AsyncLocalStorage<ServerActionExecutionContext>();\n  }\n  return globalState[SERVER_ACTION_STORAGE_KEY]!;\n}\n\nfunction getFallbackAbortController(): AbortController {\n  const globalState = globalThis as GlobalWithServerActionStorage;\n  if (!globalState[FALLBACK_ABORT_CONTROLLER_KEY]) {\n    globalState[FALLBACK_ABORT_CONTROLLER_KEY] = new AbortController();\n  }\n  return globalState[FALLBACK_ABORT_CONTROLLER_KEY]!;\n}\n\n/**\n * Adapt the shared origin resolution onto the server-action error contract:\n * an unusable Origin/Referer is a 403 here, while a request that simply\n * carried neither header returns null for the caller to judge.\n */\nfunction resolveSourceOrigin(request: Request): string | null {\n  const result = getRequestSourceOrigin(request);\n\n  if (!result.ok) {\n    throw new ServerActionRequestError(\n      \"INVALID_ORIGIN\",\n      403,\n      result.reason === \"opaque-origin\"\n        ? \"Opaque origins are not allowed\"\n        : \"Invalid request origin\",\n    );\n  }\n\n  return result.origin;\n}\n\nfunction validateActionId(actionId?: string | null): asserts actionId is string {\n  if (!actionId || actionId.length > 4096 || hasControlCharacters(actionId)) {\n    throw new ServerActionRequestError(\"INVALID_ACTION_ID\", 400, \"Invalid server action id\");\n  }\n}\n\nfunction hasControlCharacters(value: string): boolean {\n  for (let index = 0; index < value.length; index++) {\n    const code = value.charCodeAt(index);\n    if (code <= 31 || code === 127) return true;\n  }\n  return false;\n}\n\nfunction getSupportedContentType(request: Request, kind: ServerActionRequestKind): string {\n  const header = request.headers.get(\"content-type\")?.trim().toLowerCase();\n  const contentType = header?.split(\";\", 1)[0]?.trim() ?? \"\";\n  const supported = kind === \"form\" ? FORM_ACTION_CONTENT_TYPES : JAVASCRIPT_ACTION_CONTENT_TYPES;\n\n  if (!supported.has(contentType)) {\n    throw new ServerActionRequestError(\n      \"UNSUPPORTED_CONTENT_TYPE\",\n      415,\n      \"Unsupported server action content type\",\n    );\n  }\n\n  return contentType;\n}\n\nasync function readBodyWithLimit(request: Request, limit: number): Promise<Uint8Array> {\n  const contentLength = request.headers.get(\"content-length\")?.trim();\n  if (contentLength) {\n    if (!/^\\d+$/.test(contentLength)) {\n      throw new ServerActionRequestError(\n        \"INVALID_CONTENT_LENGTH\",\n        400,\n        \"Invalid content-length header\",\n      );\n    }\n    if (Number(contentLength) > limit) {\n      throw new ServerActionRequestError(\"BODY_TOO_LARGE\", 413, \"Server action body is too large\");\n    }\n  }\n\n  throwIfAborted(request.signal);\n  if (!request.body) return new Uint8Array();\n\n  const reader = request.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let total = 0;\n  const cancelBodyRead = () => {\n    void reader.cancel(request.signal.reason).catch(() => {});\n  };\n\n  request.signal.addEventListener(\"abort\", cancelBodyRead, { once: true });\n\n  try {\n    while (true) {\n      throwIfAborted(request.signal);\n      const { done, value } = await reader.read();\n      if (done) break;\n      if (!value) continue;\n\n      total += value.byteLength;\n      if (total > limit) {\n        const error = new ServerActionRequestError(\n          \"BODY_TOO_LARGE\",\n          413,\n          \"Server action body is too large\",\n        );\n        // As with API bodies, a cloned stream may wait for its untouched tee\n        // branch. Cleanup must neither delay rejection nor replace its error.\n        void reader.cancel(error).catch(() => {});\n        throw error;\n      }\n      chunks.push(value);\n    }\n  } catch (error) {\n    if (request.signal.aborted) throwIfAborted(request.signal);\n    throw error;\n  } finally {\n    request.signal.removeEventListener(\"abort\", cancelBodyRead);\n    reader.releaseLock();\n  }\n\n  throwIfAborted(request.signal);\n  const body = new Uint8Array(total);\n  let offset = 0;\n  for (const chunk of chunks) {\n    body.set(chunk, offset);\n    offset += chunk.byteLength;\n  }\n  return body;\n}\n\nasync function parseFormData(request: Request, bytes: Uint8Array): Promise<FormData> {\n  const body = new ArrayBuffer(bytes.byteLength);\n  new Uint8Array(body).set(bytes);\n  const copy = new Request(request.url, {\n    method: \"POST\",\n    headers: request.headers,\n    body,\n  });\n\n  try {\n    return await copy.formData();\n  } catch {\n    throw new ServerActionRequestError(\"INVALID_BODY\", 400, \"Invalid server action form body\");\n  }\n}\n\nfunction getPublicErrorMessage(status: number): string {\n  switch (status) {\n    case 400:\n      return \"Bad Request\";\n    case 403:\n      return \"Forbidden\";\n    case 405:\n      return \"Method Not Allowed\";\n    case 413:\n      return \"Payload Too Large\";\n    case 415:\n      return \"Unsupported Media Type\";\n    default:\n      return \"Server Action Request Failed\";\n  }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n  if (!signal.aborted) return;\n  if (signal.reason !== undefined) throw signal.reason;\n  throw new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n","export const DEFAULT_FARM_IMAGE_PATH = \"/_farm/image\";\nexport const DEFAULT_FARM_IMAGE_DEVICE_SIZES = [\n  640, 750, 828, 1080, 1200, 1920, 2048, 3840,\n] as const;\nexport const DEFAULT_FARM_IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384] as const;\nexport const DEFAULT_FARM_IMAGE_QUALITIES = [75] as const;\nexport const DEFAULT_FARM_IMAGE_FORMATS = [\"image/webp\"] as const;\n\nexport type FarmImageFormat = \"image/avif\" | \"image/webp\";\nexport type FarmImageProvider = \"auto\" | \"node\" | \"cloudflare\" | \"none\";\n\nexport interface FarmImageRemotePattern {\n  protocol?: \"http\" | \"https\";\n  hostname: string;\n  port?: string;\n  pathname?: string;\n  search?: string;\n}\n\nexport interface FarmImageLocalPattern {\n  pathname: string;\n  search?: string;\n}\n\nexport interface FarmImageConfig {\n  /** Runtime optimizer. Auto selects Cloudflare Images on Cloudflare and Sharp elsewhere. */\n  provider?: FarmImageProvider;\n  /** Public optimizer endpoint. */\n  path?: string;\n  /** @deprecated Prefer remotePatterns, which also restricts protocol, path, port, and query. */\n  domains?: readonly string[];\n  remotePatterns?: readonly FarmImageRemotePattern[];\n  localPatterns?: readonly FarmImageLocalPattern[];\n  deviceSizes?: readonly number[];\n  imageSizes?: readonly number[];\n  qualities?: readonly number[];\n  formats?: readonly FarmImageFormat[];\n  minimumCacheTTL?: number;\n  maximumResponseBody?: number | string;\n  maximumRedirects?: number;\n  dangerouslyAllowSVG?: boolean;\n  dangerouslyAllowLocalIP?: boolean;\n}\n\nexport interface ResolvedFarmImageConfig {\n  provider: FarmImageProvider;\n  path: string;\n  domains: readonly string[];\n  remotePatterns: readonly FarmImageRemotePattern[];\n  localPatterns: readonly FarmImageLocalPattern[];\n  deviceSizes: readonly number[];\n  imageSizes: readonly number[];\n  qualities: readonly number[];\n  formats: readonly FarmImageFormat[];\n  minimumCacheTTL: number;\n  maximumResponseBody: number;\n  maximumRedirects: number;\n  dangerouslyAllowSVG: boolean;\n  dangerouslyAllowLocalIP: boolean;\n}\n\nexport type PublicFarmImageConfig = Pick<\n  ResolvedFarmImageConfig,\n  \"provider\" | \"path\" | \"deviceSizes\" | \"imageSizes\" | \"qualities\" | \"formats\"\n>;\n\nconst SIZE_UNITS: Record<string, number> = {\n  b: 1,\n  kb: 1_000,\n  mb: 1_000_000,\n  gb: 1_000_000_000,\n  kib: 1_024,\n  mib: 1_048_576,\n  gib: 1_073_741_824,\n};\n\nexport function resolveFarmImageConfig(\n  config: FarmImageConfig | undefined,\n): ResolvedFarmImageConfig {\n  const path = normalizeImagePath(config?.path ?? DEFAULT_FARM_IMAGE_PATH);\n  const deviceSizes = normalizeIntegerList(\n    config?.deviceSizes ?? DEFAULT_FARM_IMAGE_DEVICE_SIZES,\n    \"images.deviceSizes\",\n  );\n  const imageSizes = normalizeIntegerList(\n    config?.imageSizes ?? DEFAULT_FARM_IMAGE_SIZES,\n    \"images.imageSizes\",\n  );\n  const qualities = normalizeIntegerList(\n    config?.qualities ?? DEFAULT_FARM_IMAGE_QUALITIES,\n    \"images.qualities\",\n    100,\n  );\n  const formats = [...new Set(config?.formats ?? DEFAULT_FARM_IMAGE_FORMATS)];\n\n  if (formats.some((format) => format !== \"image/avif\" && format !== \"image/webp\")) {\n    throw new TypeError('images.formats only supports \"image/avif\" and \"image/webp\"');\n  }\n\n  const minimumCacheTTL = normalizeNonNegativeInteger(\n    config?.minimumCacheTTL ?? 60,\n    \"images.minimumCacheTTL\",\n  );\n  const maximumRedirects = normalizeNonNegativeInteger(\n    config?.maximumRedirects ?? 3,\n    \"images.maximumRedirects\",\n  );\n\n  return Object.freeze({\n    provider: config?.provider ?? \"auto\",\n    path,\n    domains: Object.freeze([\n      ...new Set(\n        (config?.domains ?? []).map((domain) => domain.trim().toLowerCase()).filter(Boolean),\n      ),\n    ]),\n    remotePatterns: Object.freeze(\n      (config?.remotePatterns ?? []).map((pattern) => normalizeRemotePattern(pattern)),\n    ),\n    localPatterns: Object.freeze(\n      (config?.localPatterns ?? [{ pathname: \"/**\" }]).map((pattern) =>\n        normalizeLocalPattern(pattern),\n      ),\n    ),\n    deviceSizes: Object.freeze(deviceSizes),\n    imageSizes: Object.freeze(imageSizes),\n    qualities: Object.freeze(qualities),\n    formats: Object.freeze(formats),\n    minimumCacheTTL,\n    maximumResponseBody: parseSize(\n      config?.maximumResponseBody ?? \"10mb\",\n      \"images.maximumResponseBody\",\n    ),\n    maximumRedirects,\n    dangerouslyAllowSVG: config?.dangerouslyAllowSVG ?? false,\n    dangerouslyAllowLocalIP: config?.dangerouslyAllowLocalIP ?? false,\n  });\n}\n\nexport function getPublicFarmImageConfig(\n  config: Pick<ResolvedFarmImageConfig, keyof PublicFarmImageConfig>,\n): PublicFarmImageConfig {\n  return {\n    provider: config.provider,\n    path: config.path,\n    deviceSizes: config.deviceSizes,\n    imageSizes: config.imageSizes,\n    qualities: config.qualities,\n    formats: config.formats,\n  };\n}\n\nfunction normalizeImagePath(value: string): string {\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 TypeError(\"images.path cannot contain backslashes or control characters\");\n  }\n\n  const path = value.trim().replace(/\\/+$/, \"\") || \"/\";\n  if (!path.startsWith(\"/\") || path.startsWith(\"//\") || path.includes(\"?\") || path.includes(\"#\")) {\n    throw new TypeError(\"images.path must be an absolute pathname without a query or hash\");\n  }\n\n  for (const segment of path.split(\"/\")) {\n    let decoded = segment;\n    try {\n      decoded = decodeURIComponent(segment);\n    } catch {\n      // Malformed escapes remain literal and cannot conceal a path separator\n      // or dot segment.\n    }\n    if (hasUnstableCharacters(decoded)) {\n      throw new TypeError(\"images.path cannot contain backslashes or control characters\");\n    }\n    if (decoded.includes(\"/\")) {\n      throw new TypeError(\"images.path cannot contain percent-encoded path separators\");\n    }\n    if (decoded === \".\" || decoded === \"..\") {\n      throw new TypeError('images.path cannot contain \".\" or \"..\" path segments');\n    }\n  }\n\n  return path;\n}\n\nfunction normalizeIntegerList(values: readonly number[], name: string, max?: number): number[] {\n  if (values.length === 0) {\n    throw new TypeError(`${name} must contain at least one value`);\n  }\n\n  const normalized = [...new Set(values)].sort((left, right) => left - right);\n  for (const value of normalized) {\n    if (!Number.isSafeInteger(value) || value <= 0 || (max !== undefined && value > max)) {\n      throw new TypeError(\n        `${name} must contain positive integers${max ? ` no greater than ${max}` : \"\"}`,\n      );\n    }\n  }\n  return normalized;\n}\n\nfunction normalizeNonNegativeInteger(value: number, name: string): number {\n  if (!Number.isSafeInteger(value) || value < 0) {\n    throw new TypeError(`${name} must be a non-negative safe integer`);\n  }\n  return value;\n}\n\nfunction parseSize(value: number | string, name: string): number {\n  if (typeof value === \"number\") {\n    if (!Number.isSafeInteger(value) || value <= 0) {\n      throw new TypeError(`${name} must be a positive safe integer`);\n    }\n    return value;\n  }\n\n  const match = value\n    .trim()\n    .toLowerCase()\n    .match(/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb|kib|mib|gib)$/);\n  if (!match) {\n    throw new TypeError(`${name} must be bytes or a size string such as \"5mb\"`);\n  }\n\n  const bytes = Number(match[1]) * SIZE_UNITS[match[2]];\n  if (!Number.isSafeInteger(bytes) || bytes <= 0) {\n    throw new TypeError(`${name} must resolve to a positive safe integer`);\n  }\n  return bytes;\n}\n\nfunction normalizeRemotePattern(pattern: FarmImageRemotePattern): FarmImageRemotePattern {\n  const hostname = pattern.hostname.trim().toLowerCase();\n  if (!hostname || hostname.includes(\"/\") || hostname.includes(\":\")) {\n    throw new TypeError(\"images.remotePatterns[].hostname must be a hostname or wildcard hostname\");\n  }\n  if (pattern.pathname && !pattern.pathname.startsWith(\"/\")) {\n    throw new TypeError(\"images.remotePatterns[].pathname must start with /\");\n  }\n  if (pattern.search && !pattern.search.startsWith(\"?\")) {\n    throw new TypeError(\"images.remotePatterns[].search must start with ?\");\n  }\n  return Object.freeze({ ...pattern, hostname });\n}\n\nfunction normalizeLocalPattern(pattern: FarmImageLocalPattern): FarmImageLocalPattern {\n  if (!pattern.pathname.startsWith(\"/\")) {\n    throw new TypeError(\"images.localPatterns[].pathname must start with /\");\n  }\n  if (pattern.search && !pattern.search.startsWith(\"?\")) {\n    throw new TypeError(\"images.localPatterns[].search must start with ?\");\n  }\n  return Object.freeze({ ...pattern });\n}\n","import { existsSync, readFileSync, realpathSync, statSync } from \"node:fs\";\nimport { mkdir, unlink } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\ntype EsbuildTransform = (typeof import(\"esbuild\"))[\"transform\"];\n\nexport type FarmLayerEntry = string;\n\nexport interface ResolvedFarmLayer {\n  /** The value used in `extends`. */\n  source: string;\n  /** Stable name used by the `#layers/<name>` alias. */\n  name: string;\n  /** Absolute layer package or directory root. */\n  root: string;\n  /** Source directory relative to the layer root. */\n  srcDir: string;\n  /** Resolved layer config file when one exists. */\n  configFile?: string;\n}\n\nexport interface FarmSourceRoot {\n  name: string;\n  root: string;\n  srcDir: string;\n  layer: boolean;\n}\n\nexport interface ResolveFarmLayersOptions {\n  root: string;\n  mode: \"development\" | \"production\";\n}\n\nexport interface FarmLayerResolution<TConfig extends Record<string, any>> {\n  config: TConfig & {\n    extends?: readonly FarmLayerEntry[];\n    layers: ResolvedFarmLayer[];\n  };\n  layers: ResolvedFarmLayer[];\n}\n\nconst FARM_CORE_PACKAGE = \"@farm.js/core\";\nconst FARM_CONFIG_ENTRY = \"@farm.js/core/config\";\nconst FARM_CORE_REFERENCE_RE = /([\"'])@farm.js\\/core\\1/g;\nconst FARM_CONFIG_HELPER_IMPORT_RE =\n  /(?:^|\\n)[\\t ]*import[\\t ]*\\{([^{}]*)\\}[\\t ]*from[\\t ]*([\"'])@farm.js\\/core\\2[\\t ]*;?[\\t ]*(?:\\n|$)/g;\nconst FARM_CONFIG_HELPER_SPECIFIER_RE =\n  /^(?:defineConfig|defineFarmConfig)(?:\\s+as\\s+[$A-Z_a-z][$\\w]*)?$/;\n\nconst CONFIG_FILENAMES = [\n  \"farm.config.ts\",\n  \"farm.config.tsx\",\n  \"farm.config.mts\",\n  \"farm.config.cts\",\n  \"farm.config.js\",\n  \"farm.config.jsx\",\n  \"farm.config.mjs\",\n  \"farm.config.cjs\",\n  \"config.ts\",\n  \"config.tsx\",\n  \"config.mts\",\n  \"config.cts\",\n  \"config.js\",\n  \"config.jsx\",\n  \"config.mjs\",\n  \"config.cjs\",\n];\n\nconst LAYER_LOCAL_CONFIG_KEYS = new Set([\n  \"root\",\n  \"srcDir\",\n  \"outDir\",\n  \"distDir\",\n  \"deploy\",\n  \"output\",\n  \"preset\",\n  \"publicDir\",\n  \"generateBuildId\",\n]);\n\ntype LoadedLayer = ResolvedFarmLayer & {\n  config: Record<string, any>;\n};\n\nexport async function resolveFarmLayers<TConfig extends Record<string, any>>(\n  projectConfig: TConfig,\n  options: ResolveFarmLayersOptions,\n): Promise<FarmLayerResolution<TConfig>> {\n  const projectRoot = path.resolve(options.root);\n  const entries = normalizeLayerEntries(projectConfig.extends, \"project config\");\n\n  if (entries.length === 0) {\n    return {\n      config: {\n        ...projectConfig,\n        layers: [],\n      },\n      layers: [],\n    };\n  }\n\n  const loadedLayers: LoadedLayer[] = [];\n  const visited = new Set<string>();\n  const aliases = new Map<string, string>();\n\n  const visit = async (\n    source: string,\n    ownerRoot: string,\n    stack: Array<{ root: string; source: string }>,\n  ): Promise<void> => {\n    const resolvedSource = resolveLayerSource(source, ownerRoot);\n    const cycleIndex = stack.findIndex((entry) => entry.root === resolvedSource.root);\n    if (cycleIndex !== -1) {\n      const cycle = [...stack.slice(cycleIndex).map((entry) => entry.source), source];\n      throw new Error(`Farm layer cycle detected: ${cycle.join(\" -> \")}`);\n    }\n    if (visited.has(resolvedSource.root)) return;\n\n    const configFile = findFarmConfigFile(resolvedSource.root, resolvedSource.configFile);\n    const config = configFile\n      ? await loadFarmConfigFile(configFile, {\n          cacheRoot: projectRoot,\n          root: resolvedSource.root,\n        })\n      : {};\n    const nestedEntries = normalizeLayerEntries(config.extends, `layer ${JSON.stringify(source)}`);\n    const nextStack = [...stack, { root: resolvedSource.root, source }];\n\n    for (const nestedSource of nestedEntries) {\n      await visit(nestedSource, resolvedSource.root, nextStack);\n    }\n\n    if (visited.has(resolvedSource.root)) return;\n\n    const name = getLayerName(source, resolvedSource.root);\n    const conflictingRoot = aliases.get(name);\n    if (conflictingRoot && conflictingRoot !== resolvedSource.root) {\n      throw new Error(\n        `Farm layer alias \"#layers/${name}\" is ambiguous between ${conflictingRoot} and ${resolvedSource.root}`,\n      );\n    }\n    aliases.set(name, resolvedSource.root);\n\n    visited.add(resolvedSource.root);\n    loadedLayers.push({\n      source,\n      name,\n      root: resolvedSource.root,\n      srcDir: normalizeLayerSrcDir(config.srcDir),\n      configFile,\n      config,\n    });\n  };\n\n  for (const source of entries) {\n    await visit(source, projectRoot, []);\n  }\n\n  let mergedConfig: Record<string, any> = {};\n  for (const layer of loadedLayers) {\n    mergedConfig = mergeFarmLayerConfig(mergedConfig, getLayerDefaults(layer.config));\n  }\n  mergedConfig = mergeFarmLayerConfig(mergedConfig, projectConfig);\n\n  const layers = loadedLayers.map(({ config: _config, ...layer }) => layer);\n  return {\n    config: {\n      ...mergedConfig,\n      root: projectConfig.root,\n      srcDir: projectConfig.srcDir,\n      extends: projectConfig.extends,\n      layers,\n    } as unknown as FarmLayerResolution<TConfig>[\"config\"],\n    layers,\n  };\n}\n\nexport function getFarmSourceRoots(config: {\n  root?: string;\n  srcDir?: string;\n  layers?: readonly ResolvedFarmLayer[];\n}): FarmSourceRoot[] {\n  const roots: FarmSourceRoot[] = (config.layers ?? []).map((layer) => ({\n    name: layer.name,\n    root: layer.root,\n    srcDir: layer.srcDir,\n    layer: true,\n  }));\n\n  roots.push({\n    name: \"project\",\n    root: path.resolve(config.root || process.cwd()),\n    srcDir: config.srcDir || \"src\",\n    layer: false,\n  });\n\n  return roots;\n}\n\nexport function getFarmAppDirectories(config: {\n  root?: string;\n  srcDir?: string;\n  layers?: readonly ResolvedFarmLayer[];\n}): string[] {\n  return getFarmSourceRoots(config).map((source) => path.join(source.root, source.srcDir, \"app\"));\n}\n\nexport function getFarmLayerAliases(\n  layers: readonly ResolvedFarmLayer[] | undefined,\n): Record<string, string> {\n  return Object.fromEntries(\n    (layers ?? []).map((layer) => [`#layers/${layer.name}`, path.join(layer.root, layer.srcDir)]),\n  );\n}\n\n// Matches Windows drive-letter (`E:\\`, `E:/`) and UNC (`\\\\server\\share`) paths,\n// which would otherwise pass the \"bare specifier\" filter below. `path.isAbsolute`\n// only recognizes these on Windows, but esbuild can hand us such paths on any\n// platform (e.g. in cross-platform tests), and no valid package name contains\n// `:` or starts with `\\`.\nconst WINDOWS_ABSOLUTE_PATH_RE = /^(?:[A-Za-z]:[\\\\/]|\\\\\\\\)/;\n\n// External paths are written verbatim into the bundled config's import\n// statements. Node's ESM loader accepts `/abs/path` specifiers on POSIX, but a\n// raw Windows path like `E:\\...` is parsed as a URL with protocol `e:` and\n// rejected, so absolute paths must be emitted as file:// URLs.\nfunction toExternalSpecifier(resolvedPath: string): string {\n  return path.isAbsolute(resolvedPath) ? pathToFileURL(resolvedPath).href : resolvedPath;\n}\n\nexport function createFarmConfigResolutionPlugin(options: {\n  transform: EsbuildTransform;\n}): import(\"esbuild\").Plugin {\n  const configEntryChecks = new Map<string, Promise<boolean>>();\n\n  return {\n    name: \"farm-config-package-resolution\",\n    setup(pluginBuild) {\n      pluginBuild.onResolve({ filter: /^@farm\\.js\\/core$/ }, async (args) => {\n        if (\n          args.pluginData?.farmConfigExternal ||\n          args.kind !== \"import-statement\" ||\n          !args.importer\n        ) {\n          return;\n        }\n\n        let configEntryCheck = configEntryChecks.get(args.importer);\n        if (!configEntryCheck) {\n          configEntryCheck = onlyImportsFarmConfigHelpers(args.importer, options.transform);\n          configEntryChecks.set(args.importer, configEntryCheck);\n        }\n        if (!(await configEntryCheck)) return;\n\n        const resolved = await pluginBuild.resolve(FARM_CONFIG_ENTRY, {\n          importer: args.importer,\n          kind: args.kind,\n          namespace: args.namespace,\n          resolveDir: args.resolveDir,\n          pluginData: { farmConfigExternal: true },\n        });\n        if (resolved.errors.length > 0 || !resolved.path) return;\n\n        return {\n          path: toExternalSpecifier(resolved.path),\n          external: true,\n          warnings: resolved.warnings,\n        };\n      });\n\n      pluginBuild.onResolve({ filter: /^[^./]/ }, async (args) => {\n        // The filter is meant to catch bare package specifiers, but Windows\n        // absolute paths (`E:\\...`) match it too — including the entry point\n        // itself, which esbuild rejects when marked external.\n        if (\n          args.kind === \"entry-point\" ||\n          path.isAbsolute(args.path) ||\n          WINDOWS_ABSOLUTE_PATH_RE.test(args.path)\n        ) {\n          return;\n        }\n        if (args.pluginData?.farmConfigExternal) return;\n\n        const resolved = await pluginBuild.resolve(args.path, {\n          importer: args.importer,\n          kind: args.kind,\n          namespace: args.namespace,\n          resolveDir: args.resolveDir,\n          pluginData: { farmConfigExternal: true },\n        });\n\n        if (resolved.errors.length > 0 || !resolved.path) {\n          return { path: args.path, external: true };\n        }\n\n        return {\n          path: toExternalSpecifier(resolved.path),\n          external: true,\n          warnings: resolved.warnings,\n        };\n      });\n    },\n  };\n}\n\nexport async function loadFarmConfigFile<TConfig = Record<string, any>>(\n  configPath: string,\n  options: { root: string; cacheRoot?: string },\n): Promise<TConfig> {\n  const { build, transform } = await import(\"esbuild\");\n  const cacheRoot = path.resolve(options.cacheRoot || options.root);\n  const configCacheDir = path.join(cacheRoot, \".farm\", \".config-loader\");\n  await mkdir(configCacheDir, { recursive: true });\n\n  const modulePath = path.join(\n    configCacheDir,\n    `farm-config-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`,\n  );\n\n  await build({\n    absWorkingDir: path.resolve(options.root),\n    entryPoints: [path.resolve(configPath)],\n    outfile: modulePath,\n    bundle: true,\n    format: \"esm\",\n    platform: \"node\",\n    target: `node${process.versions.node.split(\".\")[0]}`,\n    plugins: [createFarmConfigResolutionPlugin({ transform })],\n    jsx: \"automatic\",\n    logLevel: \"silent\",\n    sourcemap: \"inline\",\n  });\n\n  const moduleUrl = `${pathToFileURL(modulePath).href}?t=${Date.now()}`;\n  try {\n    const loaded = await import(/* @vite-ignore */ moduleUrl);\n    const config = loaded.default || loaded;\n    if (!config || typeof config !== \"object\" || Array.isArray(config)) {\n      throw new TypeError(`Farm config ${configPath} must export an object`);\n    }\n    return config as TConfig;\n  } finally {\n    await unlink(modulePath).catch(() => undefined);\n  }\n}\n\nasync function onlyImportsFarmConfigHelpers(\n  importer: string,\n  transform: EsbuildTransform,\n): Promise<boolean> {\n  try {\n    const source = readFileSync(importer, \"utf8\");\n    if (!source.includes(FARM_CORE_PACKAGE)) return false;\n\n    const transformed = await transform(source, {\n      format: \"esm\",\n      jsx: \"automatic\",\n      loader: getEsbuildLoader(importer),\n      sourcefile: importer,\n    });\n    const references = [...transformed.code.matchAll(FARM_CORE_REFERENCE_RE)];\n    if (references.length === 0) return false;\n\n    const safeImportRanges: Array<{ start: number; end: number }> = [];\n    for (const match of transformed.code.matchAll(FARM_CONFIG_HELPER_IMPORT_RE)) {\n      const specifiers = match[1]\n        .split(\",\")\n        .map((specifier) => specifier.trim())\n        .filter(Boolean);\n      if (\n        specifiers.length === 0 ||\n        !specifiers.every((specifier) => FARM_CONFIG_HELPER_SPECIFIER_RE.test(specifier))\n      ) {\n        continue;\n      }\n\n      const start = match.index ?? 0;\n      safeImportRanges.push({ start, end: start + match[0].length });\n    }\n\n    return references.every((reference) => {\n      const index = reference.index ?? -1;\n      return safeImportRanges.some((range) => index >= range.start && index < range.end);\n    });\n  } catch {\n    // Unsupported syntax or non-file importers retain the existing package resolution path.\n    return false;\n  }\n}\n\nfunction getEsbuildLoader(file: string): \"js\" | \"jsx\" | \"ts\" | \"tsx\" {\n  switch (path.extname(file)) {\n    case \".ts\":\n    case \".mts\":\n    case \".cts\":\n      return \"ts\";\n    case \".tsx\":\n      return \"tsx\";\n    case \".jsx\":\n      return \"jsx\";\n    default:\n      return \"js\";\n  }\n}\n\nfunction normalizeLayerEntries(value: unknown, owner: string): string[] {\n  if (value === undefined) return [];\n  if (!Array.isArray(value)) {\n    throw new TypeError(`${owner} \"extends\" must be an array of layer paths or package names`);\n  }\n\n  return value.map((entry, index) => {\n    if (typeof entry !== \"string\" || entry.trim() === \"\") {\n      throw new TypeError(`${owner} \"extends\" entry ${index} must be a non-empty string`);\n    }\n    return entry.trim();\n  });\n}\n\nfunction resolveLayerSource(\n  source: string,\n  ownerRoot: string,\n): { root: string; configFile?: string } {\n  if (isPathLayerSource(source)) {\n    const target = source.startsWith(\"file:\")\n      ? path.resolve(ownerRoot, source.slice(\"file:\".length))\n      : path.resolve(ownerRoot, source);\n    if (!existsSync(target)) {\n      throw new Error(`Cannot resolve Farm layer ${JSON.stringify(source)} from ${ownerRoot}`);\n    }\n\n    const stats = statSync(target);\n    const root = stats.isDirectory() ? target : path.dirname(target);\n    return {\n      root: normalizeRealPath(root),\n      configFile: stats.isFile() ? normalizeRealPath(target) : undefined,\n    };\n  }\n\n  const requireFromOwner = createRequire(path.join(ownerRoot, \"package.json\"));\n  let packageJsonPath: string | undefined;\n  try {\n    packageJsonPath = requireFromOwner.resolve(`${source}/package.json`);\n  } catch {\n    // Packages with an exports map often hide package.json. Resolve their entry and walk upward.\n  }\n\n  if (packageJsonPath) {\n    return { root: normalizeRealPath(path.dirname(packageJsonPath)) };\n  }\n\n  try {\n    const entryPath = requireFromOwner.resolve(source);\n    const packageRoot = findNearestPackageRoot(entryPath);\n    if (packageRoot) return { root: normalizeRealPath(packageRoot) };\n  } catch {\n    // Use the common error below so local and package failures have the same shape.\n  }\n\n  throw new Error(`Cannot resolve Farm layer package ${JSON.stringify(source)} from ${ownerRoot}`);\n}\n\nfunction findNearestPackageRoot(entryPath: string): string | null {\n  let current = statSync(entryPath).isDirectory() ? entryPath : path.dirname(entryPath);\n  while (true) {\n    if (existsSync(path.join(current, \"package.json\"))) return current;\n    const parent = path.dirname(current);\n    if (parent === current) return null;\n    current = parent;\n  }\n}\n\nfunction findFarmConfigFile(root: string, explicitPath?: string): string | undefined {\n  if (explicitPath) return explicitPath;\n  for (const fileName of CONFIG_FILENAMES) {\n    const candidate = path.join(root, fileName);\n    if (existsSync(candidate)) return candidate;\n  }\n  return undefined;\n}\n\nfunction getLayerName(source: string, root: string): string {\n  if (!isPathLayerSource(source)) {\n    const packageName = source.split(\"/\").filter(Boolean).pop();\n    if (packageName) return sanitizeLayerName(packageName);\n  }\n\n  try {\n    const packageJson = JSON.parse(readFileSync(path.join(root, \"package.json\"), \"utf8\"));\n    if (typeof packageJson.name === \"string\") {\n      return sanitizeLayerName(packageJson.name.split(\"/\").pop() || packageJson.name);\n    }\n  } catch {\n    // A local layer does not need package metadata.\n  }\n\n  return sanitizeLayerName(path.basename(root));\n}\n\nfunction sanitizeLayerName(value: string): string {\n  const name = value\n    .trim()\n    .replace(/[^a-zA-Z0-9_-]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n  if (!name) throw new Error(`Cannot derive a name for Farm layer ${JSON.stringify(value)}`);\n  return name;\n}\n\nfunction normalizeLayerSrcDir(value: unknown): string {\n  if (value === undefined) return \"src\";\n  if (typeof value !== \"string\" || value.trim() === \"\" || path.isAbsolute(value)) {\n    throw new TypeError(\"A Farm layer srcDir must be a non-empty relative path\");\n  }\n  const normalized = path.normalize(value.trim());\n  if (normalized === \"..\" || normalized.startsWith(`..${path.sep}`)) {\n    throw new TypeError(\"A Farm layer srcDir cannot leave the layer root\");\n  }\n  return normalized;\n}\n\nfunction getLayerDefaults(config: Record<string, any>): Record<string, any> {\n  return Object.fromEntries(\n    Object.entries(config).filter(\n      ([key, value]) =>\n        key !== \"extends\" && value !== undefined && !LAYER_LOCAL_CONFIG_KEYS.has(key),\n    ),\n  );\n}\n\nfunction mergeFarmLayerConfig(\n  base: Record<string, any>,\n  override: Record<string, any>,\n): Record<string, any> {\n  const output: Record<string, any> = { ...base };\n\n  for (const [key, value] of Object.entries(override)) {\n    if (value === undefined || key === \"layers\") continue;\n\n    if (key === \"plugins\") {\n      output[key] = [...toArray(output[key]), ...toArray(value)];\n      continue;\n    }\n\n    if (key === \"middleware\" && output[key] !== undefined) {\n      output[key] = [...toArray(output[key]), ...toArray(value)];\n      continue;\n    }\n\n    if ((key === \"redirects\" || key === \"rewrites\" || key === \"headers\") && output[key]) {\n      output[key] = mergeConfigListResolvers(output[key], value);\n      continue;\n    }\n\n    if (isPlainObject(output[key]) && isPlainObject(value)) {\n      output[key] = mergePlainObjects(output[key], value);\n      continue;\n    }\n\n    output[key] = value;\n  }\n\n  return output;\n}\n\nfunction mergePlainObjects(base: Record<string, any>, override: Record<string, any>) {\n  const output: Record<string, any> = { ...base };\n  for (const [key, value] of Object.entries(override)) {\n    if (value === undefined) continue;\n    output[key] =\n      isPlainObject(output[key]) && isPlainObject(value)\n        ? mergePlainObjects(output[key], value)\n        : value;\n  }\n  return output;\n}\n\nfunction mergeConfigListResolvers(base: unknown, override: unknown) {\n  return async () => [...(await resolveConfigList(base)), ...(await resolveConfigList(override))];\n}\n\nasync function resolveConfigList(value: unknown): Promise<any[]> {\n  const resolved = typeof value === \"function\" ? await value() : value;\n  return toArray(resolved);\n}\n\nfunction toArray(value: unknown): any[] {\n  if (value === undefined || value === null) return [];\n  return Array.isArray(value) ? value : [value];\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction isPathLayerSource(source: string): boolean {\n  return (\n    source.startsWith(\".\") ||\n    source.startsWith(\"/\") ||\n    source.startsWith(\"file:\") ||\n    /^[a-zA-Z]:[\\\\/]/.test(source)\n  );\n}\n\nfunction normalizeRealPath(value: string): string {\n  return path.resolve(realpathSync(value));\n}\n","/**\n * Farm.js SSG (Static Site Generation) Module\n *\n * Handles collection and pre-rendering of SSG pages at build time.\n *\n * SSR is the default - pages render on each request\n * SSG is opt-in via `export const ssg = true`, Next-compatible route\n * config exports, or a top-of-file rendering directive.\n *\n * @example\n * ```tsx\n * // SSG Page\n * export const ssg = true;\n * export default function AboutPage() {\n *   return <h1>About</h1>;\n * }\n *\n * // SSG with ISR\n * export const ssg = true;\n * export const revalidate = 60;\n * export default async function ProductsPage() {\n *   const products = await fetchProducts();\n *   return <ProductList products={products} />;\n * }\n *\n * // Dynamic SSG\n * export const ssg = true;\n * export async function getStaticPaths() {\n *   const posts = await fetchPosts();\n *   return posts.map(post => ({ slug: post.slug }));\n * }\n * export default async function BlogPost({ params }) {\n *   return <article>{params.slug}</article>;\n * }\n *\n * // Next-compatible route config\n * export const dynamic = \"force-static\";\n * export const revalidate = 60;\n *\n * // PPR/static-shell route\n * export const experimental_ppr = true;\n * export const revalidate = 60;\n *\n * // Directive config\n * \"use ssg; 60\";\n * export default function DocsPage() {\n *   return <h1>Docs</h1>;\n * }\n * ```\n */\n\nimport { readFile } from \"fs/promises\";\nimport type {\n  RouteModule,\n  SSGPage,\n  SSGCollectionResult,\n  StaticPathParams,\n  StaticPathPrimitive,\n} from \"./types\";\n\ninterface RouteEntry {\n  path: string;\n  filePath: string;\n  isDynamic: boolean;\n  pattern: string;\n}\n\nexport type RouteRenderingDynamic = NonNullable<RouteModule[\"dynamic\"]>;\n\nexport interface RouteRenderingConfig {\n  ssg: boolean;\n  ppr: boolean;\n  revalidate?: number;\n  dynamic?: RouteRenderingDynamic;\n  directive?: string;\n}\n\nexport interface RouteRenderingOptions {\n  /**\n   * Whether `experimental.ppr` is enabled in the app config. Route-level PPR\n   * opt-ins (`ppr`, `experimental_ppr`, `\"use ppr\"`) are inert without it.\n   */\n  experimentalPPR?: boolean;\n}\n\nexport interface StaticRouteCandidateAnalysis {\n  candidate: boolean;\n  blockers: string[];\n}\n\ninterface DirectiveRenderingConfig {\n  ssg: boolean;\n  ppr: boolean;\n  revalidate?: number;\n  dynamic?: RouteRenderingDynamic;\n  directive: string;\n}\n\nconst OPTIONAL_CATCH_ALL_SEGMENT = /^\\[\\[\\.\\.\\.([^\\]]+)\\]\\]$/;\nconst REQUIRED_CATCH_ALL_SEGMENT = /^\\[\\.\\.\\.([^\\]]+)\\]$/;\nconst REQUIRED_DYNAMIC_SEGMENT = /^\\[([^\\]]+)\\]$/;\n\nconst REQUEST_API_LABELS = new Map<string, string>([\n  [\"cookies\", \"request cookies\"],\n  [\"headers\", \"request headers\"],\n  [\"getCurrentRequest\", \"the current Request\"],\n  [\"useSearchParams\", \"URL search parameters\"],\n  [\"auth\", \"request authentication\"],\n  [\"getServerSession\", \"request authentication\"],\n  [\"getSession\", \"request authentication\"],\n  [\"currentUser\", \"request authentication\"],\n]);\n\nconst ROUTE_PROP_LABELS = new Map<string, string>([\n  [\"searchParams\", \"URL search parameters\"],\n  [\"middleware\", \"middleware request data\"],\n  [\"middlewareData\", \"middleware request data\"],\n  [\"context\", \"request context\"],\n]);\n\n/**\n * Resolve route rendering from Farm exports, Next-compatible exports, and\n * top-of-file directives such as `\"use ssg\";` or `\"use ssg; 60\";`.\n */\nfunction resolveConfiguredRouteRenderingConfig(\n  mod: RouteModule | null | undefined,\n  source?: string,\n  options?: RouteRenderingOptions,\n): RouteRenderingConfig {\n  const pprEnabled = options?.experimentalPPR === true;\n  const directiveConfig = parseRouteRenderingDirective(source);\n  let ssg = directiveConfig?.ssg ?? false;\n  let requestedPPR = directiveConfig?.ppr ?? false;\n  let revalidate = directiveConfig?.revalidate;\n  const moduleDynamic = normalizeDynamicMode(mod?.dynamic);\n  const dynamic = moduleDynamic ?? directiveConfig?.dynamic;\n  const hasExplicitSsg = typeof mod?.ssg === \"boolean\";\n  const hasExplicitPPR =\n    typeof mod?.ppr === \"boolean\" || typeof mod?.experimental_ppr === \"boolean\";\n\n  if (hasExplicitSsg) {\n    ssg = mod!.ssg === true;\n  }\n\n  if (hasExplicitPPR) {\n    requestedPPR = mod?.ppr === true || mod?.experimental_ppr === true;\n  }\n\n  if (typeof mod?.revalidate === \"number\") {\n    if (mod.revalidate > 0) {\n      revalidate = mod.revalidate;\n      // A PPR opt-in keeps the route dynamic even while experimental.ppr is\n      // off: the page expects Suspense holes, so falling back to ISR would\n      // bake request-time content into a shared static artifact.\n      if (!hasExplicitSsg && !requestedPPR) {\n        ssg = true;\n      }\n    } else {\n      revalidate = undefined;\n      if (!hasExplicitSsg) {\n        ssg = false;\n      }\n    }\n  } else if (mod?.revalidate === false) {\n    revalidate = undefined;\n  }\n\n  if (moduleDynamic === \"force-static\" || moduleDynamic === \"error\") {\n    ssg = true;\n    requestedPPR = false;\n  } else if (moduleDynamic === \"force-dynamic\") {\n    ssg = false;\n    requestedPPR = false;\n    revalidate = undefined;\n  }\n\n  const ppr = pprEnabled && !ssg && requestedPPR;\n\n  return {\n    ssg,\n    ppr,\n    revalidate: ssg || ppr ? revalidate : undefined,\n    dynamic,\n    directive: directiveConfig?.directive,\n  };\n}\n\n/**\n * Resolve the effective rendering mode. Direct request reads make an explicitly\n * static route dynamic so request-specific HTML cannot enter a shared artifact.\n */\nexport function resolveRouteRenderingConfig(\n  mod: RouteModule | null | undefined,\n  source?: string,\n  options?: RouteRenderingOptions,\n): RouteRenderingConfig {\n  const rendering = resolveConfiguredRouteRenderingConfig(mod, source, options);\n  if (!rendering.ssg || !source) {\n    return rendering;\n  }\n\n  const requestBlockers = findRequestBoundSourceBlockers(source);\n  if (requestBlockers.length === 0) {\n    return rendering;\n  }\n\n  return {\n    ...rendering,\n    ssg: false,\n    revalidate: undefined,\n  };\n}\n\nexport async function resolveRouteRenderingConfigFromFile(\n  mod: RouteModule | null | undefined,\n  filePath: string,\n  options?: RouteRenderingOptions,\n): Promise<RouteRenderingConfig> {\n  const source = await readFile(filePath, \"utf8\").catch(() => undefined);\n  return resolveRouteRenderingConfig(mod, source, options);\n}\n\n/**\n * Conservatively identify a route that may be safe to pre-render.\n *\n * This intentionally produces a suggestion rather than changing rendering:\n * request-bound work can live in a transitive import, which source inspection\n * of the route module cannot prove safe. Explicit route config always wins.\n */\nexport function analyzeStaticRouteCandidate(\n  mod: RouteModule | null | undefined,\n  source: string | undefined,\n  options: { isDynamic?: boolean } = {},\n): StaticRouteCandidateAnalysis {\n  const blockers: string[] = [];\n\n  if (!source) {\n    blockers.push(\"route source is unavailable\");\n  }\n\n  if (options.isDynamic) {\n    blockers.push(\"the route has dynamic path segments\");\n  }\n\n  if (hasExplicitRenderingConfig(mod, source)) {\n    blockers.push(\"the route already has explicit rendering config\");\n  }\n\n  if (source) {\n    blockers.push(...findRequestBoundSourceBlockers(source));\n  }\n\n  return {\n    candidate: blockers.length === 0,\n    blockers,\n  };\n}\n\nfunction findRequestBoundSourceBlockers(source: string): string[] {\n  const blockers = new Set<string>();\n  const code = stripCommentsAndLiteralContents(source);\n\n  const sourceWithoutComments = stripComments(source);\n  for (const binding of readRequestApiImportBindings(sourceWithoutComments)) {\n    if (new RegExp(`\\\\b${escapeRegExp(binding.local)}\\\\s*(?:\\\\?\\\\.\\\\s*)?\\\\(`).test(code)) {\n      blockers.add(`the route reads ${binding.label}`);\n    }\n  }\n\n  for (const namespace of readNamespaceImportBindings(sourceWithoutComments)) {\n    for (const [name, label] of REQUEST_API_LABELS) {\n      if (\n        new RegExp(\n          `\\\\b${escapeRegExp(namespace)}\\\\s*(?:\\\\?\\\\.\\\\s*|\\\\.\\\\s*)${name}\\\\s*(?:\\\\?\\\\.\\\\s*)?\\\\(`,\n        ).test(code)\n      ) {\n        blockers.add(`the route reads ${label}`);\n      }\n    }\n  }\n\n  const params = readDefaultRouteParameters(code);\n  if (params) {\n    for (const [name, label] of ROUTE_PROP_LABELS) {\n      if (new RegExp(`\\\\b${name}\\\\b`).test(params)) {\n        blockers.add(`the route reads ${label}`);\n      }\n    }\n\n    const propsName = params.match(/^\\s*([A-Za-z_$][\\w$]*)\\s*(?::|,|$)/)?.[1];\n    if (propsName) {\n      for (const [name, label] of ROUTE_PROP_LABELS) {\n        if (new RegExp(`\\\\b${escapeRegExp(propsName)}\\\\s*\\\\.\\\\s*${name}\\\\b`).test(code)) {\n          blockers.add(`the route reads ${label}`);\n        }\n        if (\n          new RegExp(`\\\\{[^}]*\\\\b${name}\\\\b[^}]*\\\\}\\\\s*=\\\\s*${escapeRegExp(propsName)}\\\\b`).test(\n            code,\n          )\n        ) {\n          blockers.add(`the route reads ${label}`);\n        }\n      }\n    }\n  }\n\n  return [...blockers];\n}\n\nfunction readRequestApiImportBindings(source: string): Array<{ local: string; label: string }> {\n  const bindings: Array<{ local: string; label: string }> = [];\n  for (const clause of readStaticImportClauses(source)) {\n    const namedGroup = clause.match(/\\{([\\s\\S]*?)\\}/)?.[1];\n    for (const rawSpecifier of (namedGroup ?? \"\").split(\",\")) {\n      const specifier = rawSpecifier.trim().replace(/^type\\s+/, \"\");\n      const imported = specifier.match(/^([A-Za-z_$][\\w$]*)(?:\\s+as\\s+([A-Za-z_$][\\w$]*))?$/);\n      if (!imported?.[1]) continue;\n      const label = REQUEST_API_LABELS.get(imported[1]);\n      if (label) bindings.push({ local: imported[2] ?? imported[1], label });\n    }\n\n    const local = clause.match(/^\\s*([A-Za-z_$][\\w$]*)\\s*(?:,|$)/)?.[1];\n    if (local) {\n      const label = REQUEST_API_LABELS.get(local);\n      if (label) bindings.push({ local, label });\n    }\n  }\n\n  return bindings;\n}\n\nfunction readNamespaceImportBindings(source: string): string[] {\n  return readStaticImportClauses(source)\n    .map((clause) => clause.match(/\\*\\s*as\\s*([A-Za-z_$][\\w$]*)/)?.[1])\n    .filter((binding): binding is string => Boolean(binding));\n}\n\nfunction readStaticImportClauses(source: string): string[] {\n  return [...source.matchAll(/\\bimport\\s+(?!\\()([\\s\\S]*?)\\s+from\\s*[\"'][^\"']+[\"']/g)]\n    .map((match) => match[1])\n    .filter((clause): clause is string => Boolean(clause));\n}\n\nfunction readDefaultRouteParameters(code: string): string | undefined {\n  const inlineParams =\n    code.match(/\\bexport\\s+default\\s+(?:async\\s+)?function\\b[^(]*\\(([^)]*)\\)/)?.[1] ??\n    code.match(/\\bexport\\s+default\\s+(?:async\\s+)?\\(([^)]*)\\)\\s*=>/)?.[1];\n  if (inlineParams !== undefined) return inlineParams;\n\n  const binding =\n    code.match(/\\bexport\\s+default\\s+([A-Za-z_$][\\w$]*)\\s*;?/)?.[1] ??\n    code.match(/\\bexport\\s*\\{\\s*([A-Za-z_$][\\w$]*)\\s+as\\s+default\\s*\\}/)?.[1];\n  if (!binding) return undefined;\n  const escapedBinding = escapeRegExp(binding);\n\n  return (\n    code.match(new RegExp(`\\\\bfunction\\\\s+${escapedBinding}\\\\s*\\\\(([^)]*)\\\\)`))?.[1] ??\n    code.match(\n      new RegExp(\n        `\\\\b(?:const|let|var)\\\\s+${escapedBinding}\\\\s*=\\\\s*(?:async\\\\s+)?\\\\(([^)]*)\\\\)\\\\s*=>`,\n      ),\n    )?.[1] ??\n    code.match(\n      new RegExp(`\\\\b(?:const|let|var)\\\\s+${escapedBinding}\\\\s*=\\\\s*function\\\\s*\\\\(([^)]*)\\\\)`),\n    )?.[1]\n  );\n}\n\nfunction stripCommentsAndLiteralContents(source: string): string {\n  return sanitizeSource(source, true);\n}\n\nfunction stripComments(source: string): string {\n  return sanitizeSource(source, false);\n}\n\nfunction sanitizeSource(source: string, maskLiterals: boolean): string {\n  const output = [...source];\n  const mask = (index: number) => {\n    if (output[index] !== \"\\n\" && output[index] !== \"\\r\") output[index] = \" \";\n  };\n\n  const scanQuoted = (start: number, quote: \"'\" | '\"'): number => {\n    let index = start;\n    if (maskLiterals) mask(index);\n    index += 1;\n    while (index < source.length) {\n      if (source[index] === \"\\\\\") {\n        if (maskLiterals) mask(index);\n        if (index + 1 < source.length && maskLiterals) mask(index + 1);\n        index += 2;\n        continue;\n      }\n      const character = source[index];\n      if (maskLiterals) mask(index);\n      index += 1;\n      if (character === quote) break;\n    }\n    return index;\n  };\n\n  const scanCode = (start: number, stopAtTemplateBrace: boolean): number => {\n    let index = start;\n    let braceDepth = 0;\n    while (index < source.length) {\n      const character = source[index];\n      const next = source[index + 1];\n      if (character === \"/\" && next === \"/\") {\n        while (index < source.length && source[index] !== \"\\n\" && source[index] !== \"\\r\") {\n          mask(index++);\n        }\n        continue;\n      }\n      if (character === \"/\" && next === \"*\") {\n        mask(index++);\n        mask(index++);\n        while (index < source.length) {\n          const closesComment = source[index] === \"*\" && source[index + 1] === \"/\";\n          mask(index++);\n          if (closesComment) {\n            mask(index++);\n            break;\n          }\n        }\n        continue;\n      }\n      if (character === \"'\" || character === '\"') {\n        index = scanQuoted(index, character);\n        continue;\n      }\n      if (character === \"`\") {\n        if (maskLiterals) mask(index);\n        index += 1;\n        while (index < source.length) {\n          if (source[index] === \"\\\\\") {\n            if (maskLiterals) mask(index);\n            if (index + 1 < source.length && maskLiterals) mask(index + 1);\n            index += 2;\n          } else if (source[index] === \"`\") {\n            if (maskLiterals) mask(index);\n            index += 1;\n            break;\n          } else if (source[index] === \"$\" && source[index + 1] === \"{\") {\n            if (maskLiterals) {\n              mask(index);\n              mask(index + 1);\n            }\n            index = scanCode(index + 2, true);\n          } else {\n            if (maskLiterals) mask(index);\n            index += 1;\n          }\n        }\n        continue;\n      }\n      if (character === \"{\") {\n        braceDepth += 1;\n      } else if (character === \"}\") {\n        if (stopAtTemplateBrace && braceDepth === 0) {\n          if (maskLiterals) mask(index);\n          return index + 1;\n        }\n        braceDepth = Math.max(0, braceDepth - 1);\n      }\n      index += 1;\n    }\n    return index;\n  };\n\n  scanCode(0, false);\n  return output.join(\"\");\n}\n\nfunction escapeRegExp(value: string): string {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction hasExplicitRenderingConfig(\n  mod: RouteModule | null | undefined,\n  source: string | undefined,\n): boolean {\n  return (\n    typeof mod?.ssg === \"boolean\" ||\n    typeof mod?.ppr === \"boolean\" ||\n    typeof mod?.experimental_ppr === \"boolean\" ||\n    typeof mod?.revalidate !== \"undefined\" ||\n    typeof mod?.dynamic !== \"undefined\" ||\n    typeof parseRouteRenderingDirective(source) !== \"undefined\"\n  );\n}\n\nexport function parseRouteRenderingDirective(\n  source: string | undefined,\n): DirectiveRenderingConfig | undefined {\n  if (!source) {\n    return undefined;\n  }\n\n  for (const directive of readDirectivePrologue(source)) {\n    const config = parseKnownRenderingDirective(directive);\n    if (config) {\n      return config;\n    }\n  }\n\n  return undefined;\n}\n\nfunction parseKnownRenderingDirective(directive: string): DirectiveRenderingConfig | undefined {\n  const normalized = directive.trim().toLowerCase();\n  const match = normalized.match(\n    /^use\\s+(ssg|static|isr|ssr|dynamic|ppr)(?:\\s*[;:]\\s*(\\d+))?\\s*;?$/,\n  );\n\n  if (!match?.[1]) {\n    return undefined;\n  }\n\n  const mode = match[1];\n  const revalidate = match[2] ? Number(match[2]) : undefined;\n\n  if (mode === \"ssr\" || mode === \"dynamic\") {\n    return {\n      ssg: false,\n      ppr: false,\n      dynamic: \"force-dynamic\",\n      directive,\n    };\n  }\n\n  if (mode === \"ppr\") {\n    return {\n      ssg: false,\n      ppr: true,\n      revalidate: typeof revalidate === \"number\" && revalidate > 0 ? revalidate : undefined,\n      directive,\n    };\n  }\n\n  return {\n    ssg: true,\n    ppr: false,\n    dynamic: \"force-static\",\n    revalidate: typeof revalidate === \"number\" && revalidate > 0 ? revalidate : undefined,\n    directive,\n  };\n}\n\nfunction normalizeDynamicMode(value: unknown): RouteRenderingDynamic | undefined {\n  switch (value) {\n    case \"auto\":\n    case \"force-static\":\n    case \"force-dynamic\":\n    case \"error\":\n      return value;\n    default:\n      return undefined;\n  }\n}\n\nfunction readDirectivePrologue(source: string): string[] {\n  const directives: string[] = [];\n  let index = skipTrivia(source, 0);\n\n  while (index < source.length) {\n    const parsed = readStringStatement(source, index);\n    if (!parsed) {\n      break;\n    }\n\n    directives.push(parsed.value);\n    index = skipTrivia(source, parsed.end);\n  }\n\n  return directives;\n}\n\nfunction skipTrivia(source: string, start: number): number {\n  let index = start;\n\n  while (index < source.length) {\n    const char = source[index];\n\n    if (char && /\\s/.test(char)) {\n      index += 1;\n      continue;\n    }\n\n    if (source.startsWith(\"//\", index)) {\n      const nextLine = source.indexOf(\"\\n\", index + 2);\n      index = nextLine === -1 ? source.length : nextLine + 1;\n      continue;\n    }\n\n    if (source.startsWith(\"/*\", index)) {\n      const end = source.indexOf(\"*/\", index + 2);\n      index = end === -1 ? source.length : end + 2;\n      continue;\n    }\n\n    break;\n  }\n\n  return index;\n}\n\nfunction readStringStatement(\n  source: string,\n  start: number,\n): { value: string; end: number } | undefined {\n  const quote = source[start];\n  if (quote !== '\"' && quote !== \"'\") {\n    return undefined;\n  }\n\n  let value = \"\";\n  let index = start + 1;\n\n  while (index < source.length) {\n    const char = source[index];\n    if (char === \"\\\\\") {\n      value += source.slice(index, index + 2);\n      index += 2;\n      continue;\n    }\n\n    if (char === quote) {\n      index += 1;\n      const semicolonIndex = skipHorizontalWhitespace(source, index);\n      const end = source[semicolonIndex] === \";\" ? semicolonIndex + 1 : index;\n      return { value, end };\n    }\n\n    value += char ?? \"\";\n    index += 1;\n  }\n\n  return undefined;\n}\n\nfunction skipHorizontalWhitespace(source: string, start: number): number {\n  let index = start;\n  while (source[index] === \" \" || source[index] === \"\\t\" || source[index] === \"\\r\") {\n    index += 1;\n  }\n  return index;\n}\n\n/**\n * Collect SSG pages from route modules\n *\n * Scans all routes and categorizes them into:\n * - SSG pages: Pre-rendered at build time\n * - SSR routes: Rendered on each request\n *\n * @param routes - Array of route entries\n * @param loadModule - Function to load a route module\n * @returns SSG pages and SSR routes\n */\nexport async function collectSSGPages(\n  routes: RouteEntry[],\n  loadModule: (filePath: string) => Promise<RouteModule>,\n  options: { suggestStaticRendering?: boolean } = {},\n): Promise<SSGCollectionResult> {\n  const ssgPages: SSGPage[] = [];\n  const ssrRoutes: string[] = [];\n  const staticCandidateRoutes: string[] = [];\n\n  for (const route of routes) {\n    try {\n      const mod = await loadModule(route.filePath);\n\n      if (!mod) {\n        ssrRoutes.push(route.path);\n        continue;\n      }\n\n      const source = await readFile(route.filePath, \"utf8\").catch(() => undefined);\n      const configuredRendering = resolveConfiguredRouteRenderingConfig(mod, source);\n      const rendering = resolveRouteRenderingConfig(mod, source);\n\n      if (configuredRendering.ssg && !rendering.ssg && source) {\n        const blockers = findRequestBoundSourceBlockers(source);\n        console.warn(\n          `[Farm.js] Static rendering disabled for \"${route.path}\" because ${blockers.join(\n            \" and \",\n          )}. Farm will render this route on each request instead.`,\n        );\n      }\n\n      // Check if page is marked for SSG\n      if (rendering.ssg) {\n        if (route.isDynamic) {\n          // Dynamic SSG route requires getStaticPaths\n          const getStaticPaths = mod.getStaticPaths || mod.generateStaticParams;\n\n          if (!getStaticPaths) {\n            throw new Error(\n              `Dynamic SSG route \"${route.path}\" requires getStaticPaths export. ` +\n                `Add: export function getStaticPaths() { return [{ paramName: 'value' }]; }`,\n            );\n          }\n\n          // Get all paths to pre-render\n          const paths = await getStaticPaths();\n\n          // Materialize every path before adding any of them. If one entry is\n          // invalid, the outer error handler can safely fall the whole route\n          // back to SSR without leaving a partial SSG manifest behind.\n          const materializedPages = paths.map((params) => ({\n            urlPath: materializeSSGRoutePath(route.path, params),\n            filePath: route.filePath,\n            params: normalizeStaticPathParams(params),\n            revalidate: rendering.revalidate,\n          }));\n\n          ssgPages.push(...materializedPages);\n        } else {\n          // Static SSG page\n          ssgPages.push({\n            urlPath: route.path,\n            filePath: route.filePath,\n            params: {},\n            revalidate: rendering.revalidate,\n          });\n        }\n      } else {\n        // SSR route (default)\n        ssrRoutes.push(route.path);\n\n        if (\n          options.suggestStaticRendering !== false &&\n          analyzeStaticRouteCandidate(mod, source, { isDynamic: route.isDynamic }).candidate\n        ) {\n          staticCandidateRoutes.push(route.path);\n        }\n      }\n    } catch (error) {\n      console.error(`Error processing route ${route.path}:`, error);\n      // Fall back to SSR for problematic routes\n      ssrRoutes.push(route.path);\n    }\n  }\n\n  if (staticCandidateRoutes.length > 0) {\n    const visibleRoutes = staticCandidateRoutes.slice(0, 10);\n    const remainingCount = staticCandidateRoutes.length - visibleRoutes.length;\n    const remainingSuffix = remainingCount > 0 ? `\\n  …and ${remainingCount} more` : \"\";\n\n    console.warn(\n      `[Farm.js] ${staticCandidateRoutes.length} route${\n        staticCandidateRoutes.length === 1 ? \" appears\" : \"s appear\"\n      } eligible for static rendering:\\n  ${visibleRoutes.join(\"\\n  \")}${remainingSuffix}\\n` +\n        `Add \\`export const dynamic = \"force-static\";\\` after verifying that imported code ` +\n        `does not read cookies, headers, authentication, or other request data.`,\n    );\n  }\n\n  return { ssg: ssgPages, ssr: ssrRoutes };\n}\n\nfunction materializeSSGRoutePath(routePattern: string, params: StaticPathParams): string {\n  const outputSegments: string[] = [];\n\n  for (const segment of routePattern.split(\"/\")) {\n    if (!segment) {\n      continue;\n    }\n\n    const optionalCatchAll = segment.match(OPTIONAL_CATCH_ALL_SEGMENT);\n    if (optionalCatchAll) {\n      const parameterName = optionalCatchAll[1]!;\n      const value = params[parameterName];\n      const values = readCatchAllSegments(value, {\n        optional: true,\n        parameterName,\n        routePattern,\n      });\n      outputSegments.push(...values.map(encodePathSegment));\n      continue;\n    }\n\n    const requiredCatchAll = segment.match(REQUIRED_CATCH_ALL_SEGMENT);\n    if (requiredCatchAll) {\n      const parameterName = requiredCatchAll[1]!;\n      const value = params[parameterName];\n      const values = readCatchAllSegments(value, {\n        optional: false,\n        parameterName,\n        routePattern,\n      });\n      outputSegments.push(...values.map(encodePathSegment));\n      continue;\n    }\n\n    const requiredDynamic = segment.match(REQUIRED_DYNAMIC_SEGMENT);\n    if (requiredDynamic) {\n      const parameterName = requiredDynamic[1]!;\n      const value = params[parameterName];\n      if (isStaticPathArray(value)) {\n        throw new Error(\n          `Cannot materialize SSG route \"${routePattern}\": parameter \"${parameterName}\" ` +\n            \"must be a scalar value; arrays are only supported for catch-all segments.\",\n        );\n      }\n      if (isMissingPathValue(value)) {\n        throw missingRequiredParameterError(routePattern, parameterName);\n      }\n      outputSegments.push(encodePathSegment(value));\n      continue;\n    }\n\n    outputSegments.push(segment);\n  }\n\n  return outputSegments.length > 0 ? `/${outputSegments.join(\"/\")}` : \"/\";\n}\n\nfunction readCatchAllSegments(\n  value: StaticPathParams[string] | undefined,\n  options: {\n    optional: boolean;\n    parameterName: string;\n    routePattern: string;\n  },\n): StaticPathPrimitive[] {\n  if (isMissingPathValue(value) || (isStaticPathArray(value) && value.length === 0)) {\n    if (options.optional) {\n      return [];\n    }\n    throw missingRequiredParameterError(options.routePattern, options.parameterName);\n  }\n\n  const segments = isStaticPathArray(value) ? [...value] : [value as StaticPathPrimitive];\n  if (segments.some(isMissingPathValue)) {\n    throw new Error(\n      `Cannot materialize SSG route \"${options.routePattern}\": catch-all parameter ` +\n        `\"${options.parameterName}\" contains an empty path segment.`,\n    );\n  }\n\n  return segments;\n}\n\nfunction normalizeStaticPathParams(params: StaticPathParams): Record<string, string> {\n  return Object.fromEntries(\n    Object.entries(params).map(([key, value]) => [\n      key,\n      isStaticPathArray(value) ? value.map(String).join(\"/\") : String(value),\n    ]),\n  );\n}\n\nfunction isMissingPathValue(value: unknown): value is \"\" | null | undefined {\n  return value === \"\" || value === null || typeof value === \"undefined\";\n}\n\nfunction isStaticPathArray(\n  value: StaticPathParams[string] | undefined,\n): value is readonly StaticPathPrimitive[] {\n  return Array.isArray(value);\n}\n\nfunction missingRequiredParameterError(routePattern: string, parameterName: string): Error {\n  return new Error(\n    `Cannot materialize SSG route \"${routePattern}\": required parameter ` +\n      `\"${parameterName}\" is missing or empty.`,\n  );\n}\n\nfunction encodePathSegment(value: StaticPathPrimitive): string {\n  const encoded = encodeURIComponent(String(value)).replace(\n    /[!'()*]/g,\n    (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,\n  );\n\n  // Dot-only URL segments are normalized as navigation by URL parsers and\n  // filesystem joins. Pre-rendering them could therefore escape the intended\n  // route directory or overwrite a parent artifact. They cannot faithfully be\n  // represented as a static URL segment, so keep the route server-rendered.\n  if (encoded === \".\" || encoded === \"..\") {\n    throw new Error(\n      `Cannot materialize SSG path segment \"${encoded}\": dot-only segments are unsafe to prerender.`,\n    );\n  }\n\n  return encoded;\n}\n\n/**\n * Check if a route module is SSG\n */\nexport function isSSGModule(mod: RouteModule | null | undefined): boolean {\n  return resolveRouteRenderingConfig(mod).ssg;\n}\n\n/**\n * Check if a route module has ISR (Incremental Static Regeneration)\n */\nexport function hasISR(mod: RouteModule | null | undefined): boolean {\n  const rendering = resolveRouteRenderingConfig(mod);\n  return rendering.ssg && typeof rendering.revalidate === \"number\" && rendering.revalidate > 0;\n}\n\n/**\n * Get revalidation interval for a module\n */\nexport function getRevalidateInterval(mod: RouteModule | null | undefined): number | undefined {\n  return resolveRouteRenderingConfig(mod).revalidate;\n}\n\n/**\n * Check if a route module has PPR/static-shell caching enabled.\n */\nexport function hasPPR(\n  mod: RouteModule | null | undefined,\n  options?: RouteRenderingOptions,\n): boolean {\n  return resolveRouteRenderingConfig(mod, undefined, options).ppr;\n}\n\n/**\n * Generate SSG manifest for production builds\n */\nexport function generateSSGManifest(pages: SSGPage[]): string {\n  return JSON.stringify(\n    pages.map((page) => ({\n      urlPath: page.urlPath,\n      params: page.params,\n      revalidate: page.revalidate,\n    })),\n    null,\n    2,\n  );\n}\n\n/**\n * Check if a URL path matches an SSG page\n */\nexport function matchSSGPage(urlPath: string, ssgPages: SSGPage[]): SSGPage | undefined {\n  const normalizedPath = urlPath === \"/\" ? \"/\" : urlPath.replace(/\\/$/, \"\");\n  return ssgPages.find((page) => page.urlPath === normalizedPath);\n}\n","/**\n * Tokenizer-aware extractor for programmatic route path literals.\n *\n * `page(\"/…\")` / `createRoute(\"/…\")` declarations are discovered by scanning raw source\n * files. A naive regex over the raw source matches the same call shape inside comments,\n * string literals, regex literals, and member-access calls (e.g. `pager.page(\"/x\")`),\n * which can feed non-call text through `normalizeProgrammaticRoutePath` (crashing the\n * type-generation step) or silently widen the generated route unions with phantom paths.\n *\n * This module walks the source with a tiny lexer that classifies every code region\n * (skipping comments, string literals, template literals, and regex literals) and only\n * collects string-literal first arguments of real `page(…)` / `createRoute(…)` call\n * expressions. The previous significant token is tracked so member-access calls are\n * excluded and `/` is disambiguated as a regex literal versus a division operator.\n *\n * Static template-literal arguments (`` page(`/products/list`, …) `` with no `${…}`)\n * are preserved; dynamic templates are excluded.\n */\n\nexport function extractProgrammaticPageCallPathLiterals(source: string): string[] {\n  const results = new Set<string>();\n  const length = source.length;\n  let cursor = 0;\n  const controlParentheses: boolean[] = [];\n  let nextParenthesisIsControl = false;\n\n  type PrevKind =\n    | \"none\"\n    | \"identifier\"\n    | \"keyword\"\n    | \"value\" // string, template, regex, number, or value keyword\n    | \"dot\" // `.` member access\n    | \"questionDot\" // `?.` optional member access\n    | \"spread\" // `...`\n    | \"open\" // `(`, `[`, `{`\n    | \"close\" // `)`, `]`, `}`\n    | \"operator\"; // anything else that may begin an expression\n  let prev: PrevKind = \"none\";\n\n  const isWhitespace = (char: string): boolean =>\n    char === \" \" ||\n    char === \"\\t\" ||\n    char === \"\\n\" ||\n    char === \"\\r\" ||\n    char === \"\\f\" ||\n    char === \"\\v\";\n  const isIdentifierStart = (char: string): boolean => /[A-Za-z_$]/.test(char);\n  const isIdentifierPart = (char: string): boolean => /[A-Za-z0-9_$]/.test(char);\n  const isDigit = (char: string): boolean => char >= \"0\" && char <= \"9\";\n\n  // Keywords that are followed by an expression (regex literals may follow).\n  const EXPRESSION_KEYWORDS = new Set([\n    \"return\",\n    \"typeof\",\n    \"delete\",\n    \"void\",\n    \"new\",\n    \"throw\",\n    \"instanceof\",\n    \"in\",\n    \"of\",\n    \"await\",\n    \"yield\",\n    \"else\",\n    \"do\",\n    \"case\",\n  ]);\n  // Identifier-like keywords that denote a value (division follows).\n  const VALUE_KEYWORDS = new Set([\"true\", \"false\", \"null\", \"this\", \"super\", \"undefined\"]);\n  const CONTROL_PAREN_KEYWORDS = new Set([\"if\", \"for\", \"while\", \"switch\", \"with\", \"catch\"]);\n\n  const REGEX_CONTEXT: ReadonlySet<PrevKind> = new Set([\n    \"none\",\n    \"open\",\n    \"operator\",\n    \"keyword\",\n    \"spread\",\n  ]);\n\n  function readIdentifier(start: number): { end: number; text: string } {\n    let end = start;\n    while (end < length && isIdentifierPart(source[end])) end++;\n    return { end, text: source.slice(start, end) };\n  }\n\n  function readStringLiteral(\n    start: number,\n    quote: string,\n  ): { end: number; content: string } | null {\n    let end = start + 1;\n    while (end < length) {\n      const char = source[end];\n      if (char === \"\\\\\") {\n        end += 2;\n        continue;\n      }\n      if (char === quote) {\n        return { end: end + 1, content: source.slice(start + 1, end) };\n      }\n      end++;\n    }\n    return null;\n  }\n\n  function readTemplateLiteral(start: number): {\n    end: number;\n    content: string;\n    dynamic: boolean;\n  } | null {\n    let end = start + 1;\n    let dynamic = false;\n    while (end < length) {\n      const char = source[end];\n      if (char === \"\\\\\") {\n        end += 2;\n        continue;\n      }\n      if (char === \"`\") {\n        return { end: end + 1, content: source.slice(start + 1, end), dynamic };\n      }\n      if (char === \"$\" && source[end + 1] === \"{\") {\n        dynamic = true;\n        const after = skipTemplateInterpolation(end + 2);\n        if (after === -1) return null;\n        end = after;\n        continue;\n      }\n      end++;\n    }\n    return null;\n  }\n\n  function skipTemplateInterpolation(start: number): number {\n    let end = start;\n    let depth = 1;\n    while (end < length && depth > 0) {\n      const char = source[end];\n      if (char === \"\\\\\") {\n        end += 2;\n        continue;\n      }\n      if (char === \"{\") {\n        depth++;\n        end++;\n        continue;\n      }\n      if (char === \"}\") {\n        depth--;\n        end++;\n        continue;\n      }\n      if (char === '\"' || char === \"'\") {\n        const result = readStringLiteral(end, char);\n        if (!result) return -1;\n        end = result.end;\n        continue;\n      }\n      if (char === \"`\") {\n        const result = readTemplateLiteral(end);\n        if (!result) return -1;\n        end = result.end;\n        continue;\n      }\n      end++;\n    }\n    return depth === 0 ? end : -1;\n  }\n\n  function readRegexLiteral(start: number): number | null {\n    let end = start + 1;\n    let inClass = false;\n    while (end < length) {\n      const char = source[end];\n      if (char === \"\\\\\") {\n        end += 2;\n        continue;\n      }\n      if (char === \"[\") {\n        inClass = true;\n        end++;\n        continue;\n      }\n      if (char === \"]\") {\n        inClass = false;\n        end++;\n        continue;\n      }\n      if (char === \"/\" && !inClass) {\n        end++;\n        while (end < length && source[end] >= \"a\" && source[end] <= \"z\") end++;\n        return end;\n      }\n      if (char === \"\\n\") return null;\n      end++;\n    }\n    return null;\n  }\n\n  function skipLineComment(start: number): number {\n    let end = start + 2;\n    while (end < length && source[end] !== \"\\n\") end++;\n    return end;\n  }\n\n  function skipBlockComment(start: number): number {\n    let end = start + 2;\n    while (end < length) {\n      if (source[end] === \"*\" && source[end + 1] === \"/\") return end + 2;\n      end++;\n    }\n    return end;\n  }\n\n  function readNumber(start: number): number {\n    const first = source[start];\n    let end = start;\n    if (first === \"0\") {\n      const prefix = source[start + 1];\n      if (\n        prefix === \"x\" ||\n        prefix === \"X\" ||\n        prefix === \"o\" ||\n        prefix === \"O\" ||\n        prefix === \"b\" ||\n        prefix === \"B\"\n      ) {\n        end = start + 2;\n        while (end < length && /[0-9a-fA-F_]/.test(source[end])) end++;\n        if (source[end] === \"n\") end++;\n        return end;\n      }\n    }\n    while (end < length && (isDigit(source[end]) || source[end] === \"_\")) end++;\n    if (source[end] === \".\") {\n      end++;\n      while (end < length && (isDigit(source[end]) || source[end] === \"_\")) end++;\n    }\n    if (source[end] === \"e\" || source[end] === \"E\") {\n      end++;\n      if (source[end] === \"+\" || source[end] === \"-\") end++;\n      while (end < length && (isDigit(source[end]) || source[end] === \"_\")) end++;\n    }\n    if (source[end] === \"n\") end++;\n    return end;\n  }\n\n  function classifyWord(text: string): PrevKind {\n    if (VALUE_KEYWORDS.has(text)) return \"value\";\n    if (EXPRESSION_KEYWORDS.has(text)) return \"keyword\";\n    return \"identifier\";\n  }\n\n  while (cursor < length) {\n    const char = source[cursor];\n\n    if (isWhitespace(char)) {\n      cursor++;\n      continue;\n    }\n\n    if (char === \"/\" && source[cursor + 1] === \"/\") {\n      cursor = skipLineComment(cursor);\n      continue;\n    }\n    if (char === \"/\" && source[cursor + 1] === \"*\") {\n      cursor = skipBlockComment(cursor);\n      continue;\n    }\n\n    if (char === '\"' || char === \"'\") {\n      const result = readStringLiteral(cursor, char);\n      prev = \"value\";\n      nextParenthesisIsControl = false;\n      cursor = result ? result.end : length;\n      continue;\n    }\n\n    if (char === \"`\") {\n      const result = readTemplateLiteral(cursor);\n      prev = \"value\";\n      nextParenthesisIsControl = false;\n      cursor = result ? result.end : length;\n      continue;\n    }\n\n    if (char === \"/\" && REGEX_CONTEXT.has(prev)) {\n      const end = readRegexLiteral(cursor);\n      if (end !== null) {\n        prev = \"value\";\n        nextParenthesisIsControl = false;\n        cursor = end;\n        continue;\n      }\n      // Not a regex literal: fall through to operator handling.\n    }\n\n    if (isIdentifierStart(char)) {\n      const { end: idEnd, text } = readIdentifier(cursor);\n      const isMemberAccess = prev === \"dot\" || prev === \"questionDot\";\n\n      let next = idEnd;\n      while (next < length && isWhitespace(source[next])) next++;\n\n      if (!isMemberAccess && (text === \"page\" || text === \"createRoute\") && source[next] === \"(\") {\n        let argStart = next + 1;\n        while (argStart < length && isWhitespace(source[argStart])) argStart++;\n        const quote = source[argStart];\n\n        if (quote === '\"' || quote === \"'\") {\n          const arg = readStringLiteral(argStart, quote);\n          if (arg) {\n            results.add(arg.content);\n            prev = \"value\";\n            nextParenthesisIsControl = false;\n            cursor = arg.end;\n            continue;\n          }\n        } else if (quote === \"`\") {\n          const arg = readTemplateLiteral(argStart);\n          if (arg) {\n            if (!arg.dynamic) results.add(arg.content);\n            prev = \"value\";\n            nextParenthesisIsControl = false;\n            cursor = arg.end;\n            continue;\n          }\n        }\n      }\n\n      prev = classifyWord(text);\n      nextParenthesisIsControl = CONTROL_PAREN_KEYWORDS.has(text);\n      cursor = idEnd;\n      continue;\n    }\n\n    if (isDigit(char) || (char === \".\" && isDigit(source[cursor + 1] || \"\"))) {\n      prev = \"value\";\n      nextParenthesisIsControl = false;\n      cursor = readNumber(cursor);\n      continue;\n    }\n\n    if (char === \"?\" && source[cursor + 1] === \".\") {\n      prev = \"questionDot\";\n      nextParenthesisIsControl = false;\n      cursor += 2;\n      continue;\n    }\n    if (char === \".\" && source[cursor + 1] === \".\" && source[cursor + 2] === \".\") {\n      prev = \"spread\";\n      nextParenthesisIsControl = false;\n      cursor += 3;\n      continue;\n    }\n    if (char === \".\" && source[cursor + 1] === \".\") {\n      prev = \"operator\";\n      nextParenthesisIsControl = false;\n      cursor += 2;\n      continue;\n    }\n    if (char === \".\") {\n      prev = \"dot\";\n      nextParenthesisIsControl = false;\n      cursor += 1;\n      continue;\n    }\n\n    if (char === \"(\") {\n      controlParentheses.push(nextParenthesisIsControl);\n      nextParenthesisIsControl = false;\n      prev = \"open\";\n      cursor++;\n      continue;\n    }\n    if (char === \"[\" || char === \"{\") {\n      nextParenthesisIsControl = false;\n      prev = \"open\";\n      cursor++;\n      continue;\n    }\n    if (char === \")\") {\n      // A regex literal may begin an expression statement immediately after a\n      // control-flow condition (`if (ready) /.../.test(value)`). A plain\n      // \"close\" token would misread that slash as division and then discover\n      // phantom page() calls inside the regex body.\n      prev = controlParentheses.pop() ? \"keyword\" : \"close\";\n      nextParenthesisIsControl = false;\n      cursor++;\n      continue;\n    }\n    if (char === \"]\" || char === \"}\") {\n      prev = \"close\";\n      nextParenthesisIsControl = false;\n      cursor++;\n      continue;\n    }\n\n    prev = \"operator\";\n    nextParenthesisIsControl = false;\n    cursor++;\n  }\n\n  return results.size > 0 ? Array.from(results) : [];\n}\n","import type { ParsedRoute } from \"./types\";\nimport {\n  assertBrowserStableRoutePath,\n  assertTerminalCatchAll,\n  assertUniqueRouteParameters,\n} from \"./routing/specificity\";\nimport { extractProgrammaticPageCallPathLiterals } from \"./route-call-scanner\";\n\nexport const PROGRAMMATIC_ROUTE_FILE_NAMES = [\n  \"farm.route.ts\",\n  \"farm.route.tsx\",\n  \"farm.route.js\",\n  \"farm.route.jsx\",\n  \"farm.routes.ts\",\n  \"farm.routes.tsx\",\n  \"farm.routes.js\",\n  \"farm.routes.jsx\",\n  \"routes.ts\",\n  \"routes.tsx\",\n  \"routes.js\",\n  \"routes.jsx\",\n] as const;\n\nexport interface ProgrammaticRouteSearchClientOptions {\n  stripDefaults?: boolean | readonly string[];\n  preserve?: readonly string[];\n  temporary?: readonly string[];\n}\n\ntype ProgrammaticRouteSearchLike =\n  | { parse(value: unknown): unknown }\n  | ({\n      schema?: { parse(value: unknown): unknown };\n    } & ProgrammaticRouteSearchClientOptions);\n\nexport function getProgrammaticRouteSearchClientOptions(\n  search: ProgrammaticRouteSearchLike | undefined,\n): ProgrammaticRouteSearchClientOptions | undefined {\n  if (!search || \"parse\" in search) return undefined;\n\n  const options: ProgrammaticRouteSearchClientOptions = {};\n  if (typeof search.stripDefaults !== \"undefined\") options.stripDefaults = search.stripDefaults;\n  if (search.preserve?.length) options.preserve = [...search.preserve];\n  if (search.temporary?.length) options.temporary = [...search.temporary];\n\n  return Object.keys(options).length > 0 ? options : undefined;\n}\n\nexport function isProgrammaticRoutesFileName(fileName: string): boolean {\n  const normalized = fileName.replace(/\\\\/g, \"/\");\n  const baseName = normalized.split(\"/\").pop() || normalized;\n  return PROGRAMMATIC_ROUTE_FILE_NAMES.includes(\n    baseName as (typeof PROGRAMMATIC_ROUTE_FILE_NAMES)[number],\n  );\n}\n\nexport function createProgrammaticRouteModuleId(\n  filePath: string,\n  kind: \"page\" | \"layout\" | \"api\",\n  routePath: string,\n): string {\n  return `${filePath}?farm-route=${kind}:${encodeURIComponent(normalizeProgrammaticRoutePath(routePath))}`;\n}\n\nexport function parseProgrammaticRouteModuleId(moduleId: string): {\n  filePath: string;\n  kind: \"page\" | \"layout\" | \"api\";\n  routePath: string;\n} | null {\n  const queryIndex = moduleId.indexOf(\"?\");\n  if (queryIndex === -1) return null;\n\n  const filePath = moduleId.slice(0, queryIndex);\n  const params = new URLSearchParams(moduleId.slice(queryIndex + 1));\n  const value = params.get(\"farm-route\");\n  if (!value) return null;\n\n  const separator = value.indexOf(\":\");\n  if (separator === -1) return null;\n\n  const kind = value.slice(0, separator);\n  if (kind !== \"page\" && kind !== \"layout\" && kind !== \"api\") return null;\n\n  return {\n    filePath,\n    kind,\n    routePath: normalizeProgrammaticRoutePath(value.slice(separator + 1)),\n  };\n}\n\nexport function parseProgrammaticRoutePath(\n  routePath: string,\n  type: ParsedRoute[\"type\"] = \"page\",\n): ParsedRoute {\n  const fileName = type === \"layout\" ? \"layout.tsx\" : \"page.tsx\";\n  const normalized = normalizeProgrammaticRoutePath(routePath);\n  assertTerminalCatchAll(normalized);\n  assertUniqueRouteParameters(normalized);\n  const filePath =\n    normalized === \"/\" ? fileName : `${normalized.slice(1).replace(/\\/+$/, \"\")}/${fileName}`;\n\n  return {\n    filePath,\n    segments: normalized\n      .split(\"/\")\n      .filter(Boolean)\n      .filter((segment) => !(segment.startsWith(\"(\") && segment.endsWith(\")\")))\n      .map(parseRouteSegment),\n    type,\n  };\n}\n\nexport function scanProgrammaticPagePaths(source: string): string[] {\n  const paths = new Set<string>();\n\n  for (const routePath of extractProgrammaticPageCallPathLiterals(source)) {\n    paths.add(normalizeProgrammaticRoutePath(routePath));\n  }\n\n  return Array.from(paths);\n}\n\nexport function normalizeProgrammaticRoutePath(routePath: string): string {\n  if (routePath.includes(\"?\") || routePath.includes(\"#\")) {\n    throw new TypeError(\n      `Programmatic route path \"${routePath}\" must be a pathname without a query string or hash.`,\n    );\n  }\n  const withSlash = routePath.startsWith(\"/\") ? routePath : `/${routePath}`;\n  const withoutTrailing = withSlash.length > 1 ? withSlash.replace(/\\/+$/, \"\") : withSlash;\n  assertBrowserStableRoutePath(withoutTrailing);\n  return withoutTrailing || \"/\";\n}\n\nfunction parseRouteSegment(segment: string): ParsedRoute[\"segments\"][number] {\n  if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n    let name = segment.slice(1, -1);\n    let isOptional = false;\n    let isCatchAll = false;\n\n    if (name.startsWith(\"[\") && name.endsWith(\"]\")) {\n      isOptional = true;\n      name = name.slice(1, -1);\n    }\n\n    if (name.startsWith(\"...\")) {\n      isCatchAll = true;\n      name = name.slice(3);\n    }\n\n    return { segment: name, isDynamic: true, isOptional, isCatchAll };\n  }\n\n  return { segment, isDynamic: false, isOptional: false, isCatchAll: false };\n}\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 { emitFarmEvent } from \"./observability\";\nimport { notifyFarmCacheInvalidation, notifyFarmCacheTask } from \"./cache-invalidation\";\nimport { getActiveFarmI18nSnapshot } from \"./i18n/bridge\";\n\nexport { applyFarmCacheInvalidations } from \"./cache-invalidation\";\n\nexport type RevalidateTagProfile =\n  | \"max\"\n  | \"default\"\n  | \"seconds\"\n  | \"minutes\"\n  | \"hours\"\n  | \"days\"\n  | \"weeks\"\n  | \"months\"\n  | { expire?: number };\n\nexport interface FarmCacheOptions {\n  /**\n   * Tag cached data so it can be invalidated with revalidateTag/updateTag.\n   */\n  tags?: readonly string[];\n  /**\n   * Path tags let revalidatePath invalidate data tied to a route.\n   */\n  paths?: readonly string[];\n  /**\n   * Time in seconds before the entry becomes stale. False means no TTL.\n   */\n  revalidate?: number | false;\n}\n\nexport interface FarmCacheSetOptions extends FarmCacheOptions {\n  createdAt?: number;\n}\n\nexport type RouteDataCacheKey = string | readonly unknown[];\n\nexport type FarmCacheInvalidationTarget =\n  | { key: RouteDataCacheKey }\n  | { path: string }\n  | { tag: string };\n\ndeclare const FARM_DEFINED_CACHE_KEY_DATA: unique symbol;\n\n/**\n * A regular Farm cache key carrying the data shape stored under that key.\n *\n * The brand exists only in TypeScript. At runtime the value remains the\n * original string or structured array, so all existing cache APIs continue to\n * accept untyped keys.\n */\nexport type DefinedCacheKey<TData, TKey extends RouteDataCacheKey = RouteDataCacheKey> = TKey & {\n  readonly [FARM_DEFINED_CACHE_KEY_DATA]: TData;\n};\n\nexport type CacheKeyFactory<\n  TData,\n  TArguments extends readonly unknown[],\n  TKey extends RouteDataCacheKey = RouteDataCacheKey,\n> = (...args: TArguments) => DefinedCacheKey<TData, TKey>;\n\nexport type InferCacheKeyData<TKey> =\n  TKey extends DefinedCacheKey<infer TData, RouteDataCacheKey> ? TData : unknown;\n\n/**\n * Optionally add a data type to an existing string/array cache-key factory.\n *\n * This helper does not introduce a new runtime key representation. Calling the\n * returned factory produces the exact key returned by `factory`.\n */\nexport function defineCacheKey<TData>() {\n  return <const TArguments extends readonly unknown[], const TKey extends RouteDataCacheKey>(\n    factory: (...args: TArguments) => TKey,\n  ): CacheKeyFactory<TData, TArguments, TKey> => {\n    if (typeof factory !== \"function\") {\n      throw new TypeError(\"defineCacheKey expects a key factory function.\");\n    }\n\n    return ((...args: TArguments) => {\n      const key = factory(...args);\n      if (typeof key !== \"string\" && !Array.isArray(key)) {\n        throw new TypeError(\n          \"A defined cache key factory must return a string or structured array.\",\n        );\n      }\n      return key as DefinedCacheKey<TData, TKey>;\n    }) as CacheKeyFactory<TData, TArguments, TKey>;\n  };\n}\n\nexport interface FarmCacheEntry<T = unknown> {\n  key: string;\n  value: T;\n  tags: readonly string[];\n  /**\n   * Adapter tag versions captured before the cached value was produced.\n   * A later version makes the entry stale across every server instance.\n   */\n  tagVersions?: Readonly<Record<string, number>>;\n  createdAt: number;\n  createdVersion?: number;\n  revalidate?: number | false;\n}\n\ninterface InternalFarmCacheEntry<T = unknown> {\n  key: string;\n  value: T;\n  tags: Set<string>;\n  tagVersions?: Readonly<Record<string, number>>;\n  createdAt: number;\n  createdVersion: number;\n  revalidate?: number | false;\n}\n\n/**\n * Asynchronous persistence contract used by distributed Farm caches.\n *\n * Implementations are responsible for serializing cache entries and making\n * tag version updates atomic when the backing service supports it.\n */\nexport interface FarmCacheAdapter {\n  readonly name?: string;\n  get<T = unknown>(key: string): Promise<FarmCacheEntry<T> | null | undefined>;\n  set<T = unknown>(key: string, entry: FarmCacheEntry<T>): Promise<void>;\n  delete(key: string): Promise<void>;\n  clear?(): Promise<void>;\n  getTagVersions?(tags: readonly string[]): Promise<Readonly<Record<string, number>>>;\n  invalidateTags?(tags: readonly string[]): Promise<void>;\n  /** Atomically acquire a short-lived regeneration lease. */\n  acquireLease?(key: string, ttlMs: number): Promise<string | null | undefined>;\n  /** Release the lease only when the supplied ownership token still matches. */\n  releaseLease?(key: string, token: string): Promise<void>;\n}\n\nexport interface FarmClientCacheUserConfig {\n  /**\n   * Module path, relative to the project root, whose default export is a\n   * client cache adapter (`defineClientCacheAdapter`). The module is bundled\n   * into the browser entry; the server never imports it.\n   */\n  adapter?: string;\n  /** Extra version salt, typically a build or deploy id; entries persisted under another salt are dropped. */\n  version?: string;\n  /** Debounce for persisted write-behind flushes, in milliseconds. */\n  flushDelayMs?: number;\n}\n\nexport interface FarmCacheUserConfig {\n  /** Shared cache implementation, for example a Redis-backed adapter. */\n  adapter?: FarmCacheAdapter;\n  /** Prefix isolating applications and deployments sharing one adapter. */\n  namespace?: string;\n  /** Browser cache persistence; see the client cache adapter documentation. */\n  client?: FarmClientCacheUserConfig;\n  /**\n   * Coordinate cache fills across processes when the adapter implements\n   * acquireLease/releaseLease. Set false to disable.\n   */\n  lease?:\n    | false\n    | {\n        ttlMs?: number;\n        waitTimeoutMs?: number;\n        pollIntervalMs?: number;\n      };\n}\n\nexport interface FarmCacheStorage {\n  getItem<T = unknown>(key: string): Promise<T | null>;\n  setItem<T = unknown>(key: string, value: T): Promise<unknown>;\n  removeItem(key: string): Promise<unknown>;\n  clear?(base?: string): Promise<unknown>;\n}\n\nexport interface StorageFarmCacheAdapterOptions {\n  /** Prefix used inside the supplied storage client. */\n  base?: string;\n}\n\n/**\n * Adapt a Farm/unstorage-compatible key-value client to the cache contract.\n *\n * This is a portable baseline adapter. Provider-specific adapters should use\n * their atomic increment/transaction primitives for tag invalidation.\n */\nexport function storageCacheAdapter(\n  storage: FarmCacheStorage,\n  options: StorageFarmCacheAdapterOptions = {},\n): FarmCacheAdapter {\n  if (!storage || typeof storage.getItem !== \"function\" || typeof storage.setItem !== \"function\") {\n    throw new TypeError(\"storageCacheAdapter expects a compatible storage client.\");\n  }\n\n  const base = normalizeCacheNamespace(options.base || \"farm-cache\");\n  const entryKey = (key: string) => `${base}:entry:${key}`;\n  const tagKey = (tag: string) => `${base}:tag:${tag}`;\n\n  return {\n    name: \"storage\",\n    get: <T>(key: string) => storage.getItem<FarmCacheEntry<T>>(entryKey(key)),\n    set: async <T>(key: string, entry: FarmCacheEntry<T>) => {\n      await storage.setItem(entryKey(key), entry);\n    },\n    delete: async (key: string) => {\n      await storage.removeItem(entryKey(key));\n    },\n    clear: storage.clear\n      ? async () => {\n          await storage.clear!(base);\n        }\n      : undefined,\n    getTagVersions: async (tags) => {\n      const versions = await Promise.all(\n        tags.map(async (tag) => {\n          const value = await storage.getItem<number>(tagKey(tag));\n          return [tag, normalizeAdapterVersion(value)] as const;\n        }),\n      );\n      return Object.fromEntries(versions);\n    },\n    invalidateTags: async (tags) => {\n      await Promise.all(\n        tags.map(async (tag) => {\n          const key = tagKey(tag);\n          const current = normalizeAdapterVersion(await storage.getItem<number>(key));\n          await storage.setItem(key, Math.max(Date.now(), current + 1));\n        }),\n      );\n    },\n  };\n}\n\nexport interface GetFarmCacheEntryOptions {\n  allowStale?: boolean;\n  now?: number;\n}\n\ninterface FarmCacheStaleEntry {\n  tags: Iterable<string>;\n  createdAt: number;\n  createdVersion?: number;\n  revalidate?: number | false;\n}\n\nexport class FarmDataCache {\n  private entries = new Map<string, InternalFarmCacheEntry>();\n  private inflight = new Map<string, Promise<unknown>>();\n  private invalidatedTagVersions = new Map<string, number>();\n  private version = 0;\n  private generation = 0;\n  private adapter?: FarmCacheAdapter;\n  private namespace = \"farm\";\n  private local = true;\n  private lease = {\n    enabled: true,\n    ttlMs: 10_000,\n    waitTimeoutMs: 10_000,\n    pollIntervalMs: 25,\n  };\n\n  constructor(config: FarmCacheUserConfig = {}) {\n    this.configure(config);\n  }\n\n  configure(config: FarmCacheUserConfig = {}): void {\n    this.generation++;\n    this.entries.clear();\n    this.inflight.clear();\n    this.invalidatedTagVersions.clear();\n    this.version = 0;\n    this.adapter = config.adapter;\n    this.namespace = normalizeCacheNamespace(config.namespace || \"farm\");\n    this.local = !config.adapter;\n    this.lease =\n      config.lease === false\n        ? { ...this.lease, enabled: false }\n        : {\n            enabled: true,\n            ttlMs: normalizePositiveDuration(config.lease?.ttlMs, 10_000, \"cache.lease.ttlMs\"),\n            waitTimeoutMs: normalizePositiveDuration(\n              config.lease?.waitTimeoutMs,\n              10_000,\n              \"cache.lease.waitTimeoutMs\",\n            ),\n            pollIntervalMs: normalizePositiveDuration(\n              config.lease?.pollIntervalMs,\n              25,\n              \"cache.lease.pollIntervalMs\",\n            ),\n          };\n  }\n\n  get adapterName(): string {\n    return this.adapter?.name || (this.adapter ? \"custom\" : \"memory\");\n  }\n\n  get hasAdapter(): boolean {\n    return this.adapter !== undefined;\n  }\n\n  get size(): number {\n    return this.entries.size;\n  }\n\n  get<T>(key: string, options: GetFarmCacheEntryOptions = {}): T | undefined {\n    return this.getEntry<T>(key, options)?.value;\n  }\n\n  getEntry<T = unknown>(\n    key: string,\n    options: GetFarmCacheEntryOptions = {},\n  ): FarmCacheEntry<T> | undefined {\n    const entry = this.entries.get(key) as InternalFarmCacheEntry<T> | undefined;\n    if (!entry) {\n      emitFarmEvent({ type: \"cache.miss\", key });\n      return undefined;\n    }\n\n    const stale = this.isStale(entry, options.now);\n    if (stale) {\n      emitFarmEvent({\n        type: \"cache.stale\",\n        key,\n        tags: Array.from(entry.tags),\n        revalidate: entry.revalidate,\n      });\n    }\n\n    if (!options.allowStale && stale) {\n      emitFarmEvent({ type: \"cache.miss\", key, reason: \"stale\" });\n      return undefined;\n    }\n\n    emitFarmEvent({\n      type: \"cache.hit\",\n      key,\n      tags: Array.from(entry.tags),\n      revalidate: entry.revalidate,\n      stale,\n    });\n\n    return this.toPublicEntry(entry);\n  }\n\n  async getEntryAsync<T = unknown>(\n    key: string,\n    options: GetFarmCacheEntryOptions = {},\n  ): Promise<FarmCacheEntry<T> | undefined> {\n    if (this.local) {\n      const localEntry = this.getEntry<T>(key, options);\n      if (localEntry) return localEntry;\n    }\n\n    if (!this.adapter) {\n      return this.local ? undefined : this.getEntry<T>(key, options);\n    }\n\n    const generation = this.generation;\n    const adapter = this.adapter;\n    const namespace = this.namespace;\n    const entry = await adapter.get<T>(`${namespace}:entry:${key}`);\n    if (generation !== this.generation) return undefined;\n    if (!entry) {\n      emitFarmEvent({ type: \"cache.miss\", key });\n      return undefined;\n    }\n\n    assertFarmCacheEntry(entry, key);\n    const stale = await this.isAdapterEntryStale(entry, options.now, adapter, namespace);\n    if (generation !== this.generation) return undefined;\n    if (stale) {\n      emitFarmEvent({\n        type: \"cache.stale\",\n        key,\n        tags: [...entry.tags],\n        revalidate: entry.revalidate,\n      });\n      if (!options.allowStale) {\n        emitFarmEvent({ type: \"cache.miss\", key, reason: \"stale\" });\n        return undefined;\n      }\n    }\n\n    emitFarmEvent({\n      type: \"cache.hit\",\n      key,\n      tags: [...entry.tags],\n      revalidate: entry.revalidate,\n      stale,\n    });\n\n    if (this.local && !stale) {\n      this.hydrateLocalEntry(entry);\n    }\n    return { ...entry, key };\n  }\n\n  set<T>(key: string, value: T, options: FarmCacheSetOptions = {}): FarmCacheEntry<T> {\n    const tags = new Set<string>();\n    for (const tag of options.tags ?? []) {\n      tags.add(normalizeCacheTag(tag));\n    }\n    for (const routePath of options.paths ?? []) {\n      tags.add(createPathCacheTag(routePath));\n    }\n\n    const entry: InternalFarmCacheEntry<T> = {\n      key,\n      value,\n      tags,\n      tagVersions: undefined,\n      createdAt: options.createdAt ?? Date.now(),\n      createdVersion: ++this.version,\n      revalidate: normalizeRevalidate(options.revalidate),\n    };\n\n    this.entries.set(key, entry);\n    emitFarmEvent({\n      type: \"cache.set\",\n      key,\n      tags: Array.from(tags),\n      revalidate: entry.revalidate,\n    });\n    return this.toPublicEntry(entry);\n  }\n\n  async setAsync<T>(\n    key: string,\n    value: T,\n    options: FarmCacheSetOptions = {},\n    tagVersions?: Readonly<Record<string, number>>,\n  ): Promise<FarmCacheEntry<T>> {\n    return this.writeAsync(key, value, options, tagVersions);\n  }\n\n  private async writeAsync<T>(\n    key: string,\n    value: T,\n    options: FarmCacheSetOptions,\n    tagVersions?: Readonly<Record<string, number>>,\n    createdVersion?: number,\n  ): Promise<FarmCacheEntry<T>> {\n    const tags = normalizeCacheOptionsTags(options);\n    const capturedVersions =\n      tagVersions ?? (await this.getAdapterTagVersions(Array.from(tags.values())));\n    const entry: FarmCacheEntry<T> = {\n      key,\n      value,\n      tags: Array.from(tags),\n      tagVersions: capturedVersions,\n      createdAt: options.createdAt ?? Date.now(),\n      createdVersion: createdVersion ?? ++this.version,\n      revalidate: normalizeRevalidate(options.revalidate),\n    };\n\n    if (this.local) {\n      this.hydrateLocalEntry(entry);\n    }\n    if (this.adapter) {\n      await this.adapter.set(this.createAdapterKey(key), entry);\n    }\n\n    emitFarmEvent({\n      type: \"cache.set\",\n      key,\n      tags: [...entry.tags],\n      revalidate: entry.revalidate,\n    });\n    return entry;\n  }\n\n  delete(key: string): boolean {\n    const deleted = this.entries.delete(key);\n    emitFarmEvent({ type: \"cache.delete\", key, deleted });\n    return deleted;\n  }\n\n  async deleteAsync(key: string): Promise<boolean> {\n    const deleted = this.entries.delete(key);\n    if (this.adapter) {\n      await this.adapter.delete(this.createAdapterKey(key));\n    }\n    emitFarmEvent({ type: \"cache.delete\", key, deleted: this.adapter ? true : deleted });\n    return this.adapter ? true : deleted;\n  }\n\n  clear(): void {\n    const count = this.entries.size;\n    this.generation++;\n    this.entries.clear();\n    this.inflight.clear();\n    this.invalidatedTagVersions.clear();\n    this.version = 0;\n    emitFarmEvent({ type: \"cache.clear\", count });\n  }\n\n  async clearAsync(): Promise<void> {\n    this.clear();\n    await this.adapter?.clear?.();\n  }\n\n  isStale(entry: FarmCacheStaleEntry, now = Date.now()): boolean {\n    if (\n      typeof entry.revalidate === \"number\" &&\n      entry.revalidate >= 0 &&\n      now - entry.createdAt >= entry.revalidate * 1000\n    ) {\n      return true;\n    }\n\n    for (const tag of entry.tags) {\n      const invalidatedVersion = this.invalidatedTagVersions.get(normalizeCacheTag(tag));\n      if (\n        typeof invalidatedVersion === \"number\" &&\n        typeof entry.createdVersion === \"number\" &&\n        invalidatedVersion > entry.createdVersion\n      ) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  async isStaleAsync(entry: FarmCacheEntry, now = Date.now()): Promise<boolean> {\n    if (this.adapter) {\n      return this.isAdapterEntryStale(entry, now);\n    }\n    return this.isStale(entry, now);\n  }\n\n  revalidateTag(\n    tag: string,\n    options: { source?: \"revalidateTag\" | \"updateTag\"; profile?: RevalidateTagProfile } = {},\n  ): number {\n    const normalized = normalizeCacheTag(tag);\n    const count = this.invalidateTag(normalized);\n    emitFarmEvent(\n      options.source === \"updateTag\"\n        ? { type: \"cache.updateTag\", tag: normalized, count }\n        : { type: \"cache.revalidateTag\", tag: normalized, profile: options.profile, count },\n    );\n    return count;\n  }\n\n  async revalidateTagAsync(\n    tag: string,\n    options: { source?: \"revalidateTag\" | \"updateTag\"; profile?: RevalidateTagProfile } = {},\n  ): Promise<number> {\n    const normalized = normalizeCacheTag(tag);\n    const count = this.invalidateTag(normalized);\n    await this.adapter?.invalidateTags?.([this.createAdapterTag(normalized)]);\n    emitFarmEvent(\n      options.source === \"updateTag\"\n        ? { type: \"cache.updateTag\", tag: normalized, count }\n        : { type: \"cache.revalidateTag\", tag: normalized, profile: options.profile, count },\n    );\n    return count;\n  }\n\n  revalidatePath(routePath: string): number {\n    const normalizedPath = normalizeRevalidatePath(routePath);\n    const pathTag = createPathCacheTag(normalizedPath);\n    const pprCount = this.countEntriesForTags([pathTag, \"ppr\"]);\n    const count = this.invalidateTag(pathTag);\n    emitFarmEvent({ type: \"cache.revalidatePath\", path: normalizedPath, count });\n\n    if (pprCount > 0) {\n      emitFarmEvent({\n        type: \"ppr.shell.invalidated\",\n        route: normalizedPath,\n        reason: \"revalidatePath\",\n        count: pprCount,\n      });\n    }\n\n    return count;\n  }\n\n  async revalidatePathAsync(routePath: string): Promise<number> {\n    const normalizedPath = normalizeRevalidatePath(routePath);\n    const pathTag = createPathCacheTag(normalizedPath);\n    const pprCount = this.countEntriesForTags([pathTag, \"ppr\"]);\n    const count = this.invalidateTag(pathTag);\n    await this.adapter?.invalidateTags?.([this.createAdapterTag(pathTag)]);\n    emitFarmEvent({ type: \"cache.revalidatePath\", path: normalizedPath, count });\n\n    if (pprCount > 0) {\n      emitFarmEvent({\n        type: \"ppr.shell.invalidated\",\n        route: normalizedPath,\n        reason: \"revalidatePath\",\n        count: pprCount,\n      });\n    }\n\n    return count;\n  }\n\n  async getOrSet<T>(\n    key: string,\n    producer: () => Promise<T> | T,\n    options: FarmCacheOptions = {},\n  ): Promise<T> {\n    const cached = await this.getEntryAsync<T>(key);\n    if (cached) {\n      return cached.value;\n    }\n\n    const inflight = this.inflight.get(key) as Promise<T> | undefined;\n    if (inflight) {\n      emitFarmEvent({ type: \"cache.dedupe\", key });\n      return inflight;\n    }\n\n    const tags = Array.from(normalizeCacheOptionsTags(options));\n    const generation = this.generation;\n    const promise = this.fillCacheEntry(key, producer, options, tags, generation)\n      .catch((error) => {\n        emitFarmEvent({ type: \"cache.error\", key, operation: \"set\", error });\n        throw error;\n      })\n      .finally(() => {\n        if (this.inflight.get(key) === promise) {\n          this.inflight.delete(key);\n        }\n      });\n\n    this.inflight.set(key, promise);\n    return promise;\n  }\n\n  private async fillCacheEntry<T>(\n    key: string,\n    producer: () => Promise<T> | T,\n    options: FarmCacheOptions,\n    tags: readonly string[],\n    generation: number,\n  ): Promise<T> {\n    const adapter = this.adapter;\n    const namespace = this.namespace;\n    const lease = { ...this.lease };\n    const leaseKey = `${namespace}:lease:${key}`;\n    let leaseToken: string | null | undefined;\n\n    if (adapter?.acquireLease && adapter.releaseLease && lease.enabled) {\n      leaseToken = await adapter.acquireLease(leaseKey, lease.ttlMs);\n      if (!leaseToken) {\n        const shared = await this.waitForAdapterEntry<T>(\n          key,\n          adapter,\n          namespace,\n          lease,\n          generation,\n        );\n        if (shared) {\n          emitFarmEvent({ type: \"cache.dedupe\", key });\n          return shared.value;\n        }\n        if (generation === this.generation) {\n          leaseToken = await adapter.acquireLease(leaseKey, lease.ttlMs);\n        }\n      }\n    }\n\n    try {\n      const initialCreatedVersion = this.version;\n      const initialTagVersions = await this.getAdapterTagVersions(tags, adapter, namespace);\n      const value = await producer();\n      if (generation === this.generation) {\n        await this.writeAsync(key, value, options, initialTagVersions, initialCreatedVersion);\n      }\n      return value;\n    } finally {\n      if (leaseToken && adapter?.releaseLease) {\n        await adapter.releaseLease(leaseKey, leaseToken);\n      }\n    }\n  }\n\n  private async waitForAdapterEntry<T>(\n    key: string,\n    adapter: FarmCacheAdapter,\n    namespace: string,\n    lease: typeof this.lease,\n    generation: number,\n  ): Promise<FarmCacheEntry<T> | undefined> {\n    const deadline = Date.now() + lease.waitTimeoutMs;\n    while (Date.now() < deadline) {\n      await delay(lease.pollIntervalMs);\n      if (generation !== this.generation) return undefined;\n      const entry = await adapter.get<T>(`${namespace}:entry:${key}`);\n      if (generation !== this.generation) return undefined;\n      if (!entry) {\n        emitFarmEvent({ type: \"cache.miss\", key });\n        continue;\n      }\n      assertFarmCacheEntry(entry, key);\n      const stale = await this.isAdapterEntryStale(entry, Date.now(), adapter, namespace);\n      if (generation !== this.generation) return undefined;\n      if (stale) {\n        emitFarmEvent({\n          type: \"cache.stale\",\n          key,\n          tags: [...entry.tags],\n          revalidate: entry.revalidate,\n        });\n        emitFarmEvent({ type: \"cache.miss\", key, reason: \"stale\" });\n      } else {\n        emitFarmEvent({\n          type: \"cache.hit\",\n          key,\n          tags: [...entry.tags],\n          revalidate: entry.revalidate,\n          stale: false,\n        });\n        return { ...entry, key };\n      }\n    }\n    return undefined;\n  }\n\n  private countEntriesForTag(tag: string): number {\n    let count = 0;\n    for (const entry of this.entries.values()) {\n      if (entry.tags.has(tag)) {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  private countEntriesForTags(tags: readonly string[]): number {\n    let count = 0;\n    for (const entry of this.entries.values()) {\n      if (tags.every((tag) => entry.tags.has(tag))) {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  private invalidateTag(normalizedTag: string): number {\n    this.invalidatedTagVersions.set(normalizedTag, ++this.version);\n    return this.countEntriesForTag(normalizedTag);\n  }\n\n  private toPublicEntry<T>(entry: InternalFarmCacheEntry<T>): FarmCacheEntry<T> {\n    return {\n      key: entry.key,\n      value: entry.value,\n      tags: Array.from(entry.tags),\n      tagVersions: entry.tagVersions,\n      createdAt: entry.createdAt,\n      createdVersion: entry.createdVersion,\n      revalidate: entry.revalidate,\n    };\n  }\n\n  private hydrateLocalEntry<T>(entry: FarmCacheEntry<T>): void {\n    this.entries.set(entry.key, {\n      key: entry.key,\n      value: entry.value,\n      tags: new Set(entry.tags.map(normalizeCacheTag)),\n      tagVersions: entry.tagVersions,\n      createdAt: entry.createdAt,\n      createdVersion: entry.createdVersion ?? ++this.version,\n      revalidate: normalizeRevalidate(entry.revalidate),\n    });\n  }\n\n  private createAdapterKey(key: string): string {\n    return `${this.namespace}:entry:${key}`;\n  }\n\n  private createAdapterTag(tag: string): string {\n    return `${this.namespace}:tag:${tag}`;\n  }\n\n  private async getAdapterTagVersions(\n    tags: readonly string[],\n    adapter = this.adapter,\n    namespace = this.namespace,\n  ): Promise<Readonly<Record<string, number>>> {\n    if (!adapter?.getTagVersions || tags.length === 0) return {};\n\n    const normalized = tags.map(normalizeCacheTag);\n    const physicalTags = normalized.map((tag) => `${namespace}:tag:${tag}`);\n    const versions = await adapter.getTagVersions(physicalTags);\n    return Object.fromEntries(\n      normalized.map((tag, index) => [\n        tag,\n        normalizeAdapterVersion(versions[physicalTags[index]!]),\n      ]),\n    );\n  }\n\n  private async isAdapterEntryStale(\n    entry: FarmCacheEntry,\n    now = Date.now(),\n    adapter = this.adapter,\n    namespace = this.namespace,\n  ): Promise<boolean> {\n    if (\n      typeof entry.revalidate === \"number\" &&\n      entry.revalidate >= 0 &&\n      now - entry.createdAt >= entry.revalidate * 1000\n    ) {\n      return true;\n    }\n\n    const currentVersions = await this.getAdapterTagVersions(entry.tags, adapter, namespace);\n    for (const tag of entry.tags) {\n      if (\n        normalizeAdapterVersion(currentVersions[tag]) >\n        normalizeAdapterVersion(entry.tagVersions?.[tag])\n      ) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\nconst FARM_DATA_CACHE_SYMBOL = Symbol.for(\"farm.dataCache\");\nconst farmDataCacheGlobal = globalThis as typeof globalThis & {\n  [FARM_DATA_CACHE_SYMBOL]?: FarmDataCache;\n};\nconst sharedFarmDataCache = (farmDataCacheGlobal[FARM_DATA_CACHE_SYMBOL] ??= new FarmDataCache());\n\nexport function getFarmDataCache(): FarmDataCache {\n  return sharedFarmDataCache;\n}\n\nexport function configureFarmCache(config: FarmCacheUserConfig | undefined): void {\n  sharedFarmDataCache.configure(config);\n}\n\n/**\n * Wrap an async function so its results are cached and shared across requests,\n * processes, and restarts.\n *\n * The cache key is built from the wrapped function's identity (its name and a\n * hash of its source), the active locale, `keyParts`, and the call arguments.\n * Deriving identity from the source — rather than the closure instance — is\n * deliberate: it keeps the key stable across processes and restarts so a\n * distributed cache adapter can share entries between server instances.\n *\n * The consequence is that two closures with **identical source text but\n * different captured variables** produce the same identity. Pass those captured\n * values in `keyParts` so they take part in the key; otherwise the closures\n * share a cache entry and return each other's data:\n *\n * ```ts\n * // Collides: both closures have identical source, and `table` is captured,\n * // not an argument, so it never reaches the key.\n * const makeLoader = (table: string) =>\n *   unstable_cache(async (id: number) => db.get(table, id));\n *\n * // Correct: the captured value disambiguates the two closures.\n * const makeLoader = (table: string) =>\n *   unstable_cache(async (id: number) => db.get(table, id), [table]);\n * ```\n *\n * Values passed as call arguments already participate in the key and do not\n * need to be repeated in `keyParts`.\n *\n * @param fn The async function to memoize.\n * @param keyParts Extra values that identify this call site. Include every\n *   variable the function closes over that is not one of its arguments.\n * @param options Tags, paths, and revalidation settings for the cached entry.\n */\nexport function unstable_cache<Args extends unknown[], Result>(\n  fn: (...args: Args) => Result | Promise<Result>,\n  keyParts: readonly unknown[] = [],\n  options: FarmCacheOptions = {},\n): (...args: Args) => Promise<Result> {\n  return async (...args: Args): Promise<Result> => {\n    const locale = getActiveFarmI18nSnapshot()?.locale;\n    const key = createFarmCacheKey([\n      \"unstable_cache\",\n      getFunctionCacheIdentity(fn),\n      locale ? [\"locale\", locale] : null,\n      keyParts,\n      args,\n    ]);\n    return getFarmDataCache().getOrSet<Result>(key, () => fn(...args), options);\n  };\n}\n\n/**\n * Invalidate every cache entry carrying `tag`.\n *\n * Observability note: the `count` on the emitted `cache.revalidateTag` event is\n * derived from Farm's process-local entry tracking. With a shared `cache.adapter`\n * configured, entries live in the adapter rather than in local memory, so the\n * count can read as `0` even though the invalidation is still propagated to the\n * adapter and applied. Treat it as a best-effort signal, not a distributed count.\n */\nexport function revalidateTag(_tag: string, _profile?: RevalidateTagProfile): void | Promise<void> {\n  const cache = getFarmDataCache();\n  if (cache.hasAdapter) {\n    const task = cache\n      .revalidateTagAsync(_tag, {\n        source: \"revalidateTag\",\n        profile: _profile,\n      })\n      .then(() => undefined);\n    notifyFarmCacheTask(task);\n    return task;\n  }\n  cache.revalidateTag(_tag, {\n    source: \"revalidateTag\",\n    profile: _profile,\n  });\n}\n\nexport function updateTag(tag: string): void | Promise<void> {\n  const cache = getFarmDataCache();\n  if (cache.hasAdapter) {\n    const task = cache.revalidateTagAsync(tag, { source: \"updateTag\" }).then(() => undefined);\n    notifyFarmCacheTask(task);\n    return task;\n  }\n  cache.revalidateTag(tag, { source: \"updateTag\" });\n}\n\n/**\n * Invalidate cached data for a route path (and its PPR shell, if any).\n *\n * Observability note: the `count` on the emitted `cache.revalidatePath` event and\n * the `ppr.shell.invalidated` event are derived from process-local entry tracking.\n * With a shared `cache.adapter`, PPR shells live in the adapter rather than in\n * local memory, so the count can read as `0` and `ppr.shell.invalidated` may not\n * be emitted even though the invalidation is still propagated to the adapter and\n * applied.\n */\nexport function revalidatePath(routePath: string): void | Promise<void> {\n  const cache = getFarmDataCache();\n  if (cache.hasAdapter) {\n    const task = cache.revalidatePathAsync(routePath).then(() => undefined);\n    notifyFarmCacheTask(task);\n    return task;\n  }\n  cache.revalidatePath(routePath);\n}\n\nexport function invalidate(key: RouteDataCacheKey): void | Promise<void> {\n  const clientKey = createRouteDataCacheKey(key);\n  const task = updateTag(createRouteDataCacheTag(key));\n  notifyFarmCacheInvalidation(clientKey);\n  return task;\n}\n\nexport function invalidateRouteData(key: RouteDataCacheKey): void | Promise<void> {\n  return invalidate(key);\n}\n\n/**\n * Apply a normalized set of invalidation targets and return browser cache keys\n * that should be carried with an action/endpoint response.\n */\nexport async function applyFarmCacheInvalidationTargets(\n  targets: readonly FarmCacheInvalidationTarget[],\n): Promise<readonly string[]> {\n  if (!Array.isArray(targets)) {\n    throw new TypeError(\"Cache invalidations must resolve to an array of targets.\");\n  }\n\n  const clientKeys: string[] = [];\n  for (const target of targets) {\n    assertFarmCacheInvalidationTarget(target);\n    if (\"key\" in target) {\n      await invalidate(target.key);\n      clientKeys.push(createRouteDataCacheKey(target.key));\n    } else if (\"path\" in target) {\n      await revalidatePath(target.path);\n    } else {\n      await updateTag(target.tag);\n    }\n  }\n  return Array.from(new Set(clientKeys));\n}\n\nexport function createPathCacheTag(routePath: string): string {\n  return `path:${normalizeRevalidatePath(routePath)}`;\n}\n\nexport function createRouteDataCacheTag(key: RouteDataCacheKey): string {\n  return `route-data:${createRouteDataCacheKey(key)}`;\n}\n\nexport function createRouteDataCacheKey(key: RouteDataCacheKey): string {\n  return createFarmCacheKey(Array.isArray(key) ? key : [key]);\n}\n\nexport function normalizeRevalidatePath(routePath: string): string {\n  if (typeof routePath !== \"string\") {\n    throw new TypeError(\"revalidatePath expects a path string.\");\n  }\n\n  let normalized = routePath.trim();\n  if (!normalized) {\n    throw new Error(\"revalidatePath expects a non-empty path.\");\n  }\n\n  try {\n    if (/^https?:\\/\\//i.test(normalized)) {\n      normalized = new URL(normalized).pathname;\n    }\n  } catch {\n    // Keep the original path if URL parsing fails.\n  }\n\n  normalized = normalized.split(/[?#]/, 1)[0] ?? normalized;\n  normalized = normalized.startsWith(\"/\") ? normalized : `/${normalized}`;\n  normalized = normalized.replace(/\\/{2,}/g, \"/\");\n  if (normalized.length > 1) {\n    normalized = normalized.replace(/\\/+$/, \"\");\n  }\n  return normalized || \"/\";\n}\n\nexport function createFarmCacheKey(parts: readonly unknown[]): string {\n  return stableSerialize(parts);\n}\n\nfunction normalizeRevalidate(revalidate: number | false | undefined): number | false | undefined {\n  if (revalidate === false || revalidate === undefined) {\n    return revalidate;\n  }\n  if (!Number.isFinite(revalidate) || revalidate < 0) {\n    return undefined;\n  }\n  // 0 is meaningful: the entry is stale immediately, i.e. always re-produced.\n  return revalidate;\n}\n\nfunction normalizeCacheTag(tag: string): string {\n  if (typeof tag !== \"string\") {\n    throw new TypeError(\"Cache tags must be strings.\");\n  }\n  const normalized = tag.trim();\n  if (!normalized) {\n    throw new Error(\"Cache tags cannot be empty.\");\n  }\n  return normalized;\n}\n\nfunction normalizeCacheNamespace(namespace: string): string {\n  if (typeof namespace !== \"string\") {\n    throw new TypeError(\"Cache namespace must be a string.\");\n  }\n  const normalized = namespace.trim().replace(/:+$/g, \"\");\n  if (!normalized) {\n    throw new Error(\"Cache namespace cannot be empty.\");\n  }\n  return normalized;\n}\n\nfunction normalizeAdapterVersion(value: unknown): number {\n  return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : 0;\n}\n\nfunction normalizePositiveDuration(\n  value: number | undefined,\n  fallback: number,\n  name: string,\n): number {\n  if (value === undefined) return fallback;\n  if (!Number.isFinite(value) || value <= 0) {\n    throw new TypeError(`${name} must be a positive number of milliseconds.`);\n  }\n  return Math.floor(value);\n}\n\nfunction delay(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction normalizeCacheOptionsTags(options: FarmCacheOptions): Set<string> {\n  const tags = new Set<string>();\n  for (const tag of options.tags ?? []) {\n    tags.add(normalizeCacheTag(tag));\n  }\n  for (const routePath of options.paths ?? []) {\n    tags.add(createPathCacheTag(routePath));\n  }\n  return tags;\n}\n\nfunction assertFarmCacheEntry(\n  entry: FarmCacheEntry,\n  expectedKey: string,\n): asserts entry is FarmCacheEntry {\n  if (\n    !entry ||\n    typeof entry !== \"object\" ||\n    entry.key !== expectedKey ||\n    !Array.isArray(entry.tags) ||\n    typeof entry.createdAt !== \"number\"\n  ) {\n    throw new TypeError(\n      `Cache adapter returned an invalid entry for ${JSON.stringify(expectedKey)}.`,\n    );\n  }\n}\n\nfunction assertFarmCacheInvalidationTarget(\n  target: unknown,\n): asserts target is FarmCacheInvalidationTarget {\n  if (!target || typeof target !== \"object\") {\n    throw new TypeError(\"Cache invalidation targets must be { key }, { path }, or { tag }.\");\n  }\n\n  if (\"key\" in target) {\n    const key = (target as { key?: unknown }).key;\n    if (typeof key === \"string\" || Array.isArray(key)) return;\n  } else if (\"path\" in target && typeof (target as { path?: unknown }).path === \"string\") {\n    return;\n  } else if (\"tag\" in target && typeof (target as { tag?: unknown }).tag === \"string\") {\n    return;\n  }\n\n  throw new TypeError(\"Cache invalidation targets must contain a string/array key, path, or tag.\");\n}\n\nfunction getFunctionCacheIdentity(fn: Function): string {\n  // The name alone collides across modules — two different functions both\n  // named getUser would share cache entries. Include a hash of the source so\n  // only genuinely identical functions share, and the identity stays stable\n  // across processes and restarts.\n  const name = fn.name || \"anonymous\";\n  return `${name}:${hashFunctionSource(String(fn))}`;\n}\n\nfunction hashFunctionSource(source: string): string {\n  // FNV-1a, 32-bit.\n  let hash = 0x811c9dc5;\n  for (let index = 0; index < source.length; index++) {\n    hash ^= source.charCodeAt(index);\n    hash = Math.imul(hash, 0x01000193);\n  }\n  return (hash >>> 0).toString(36);\n}\n\nfunction compareCodepoint(a: string, b: string): number {\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction serializeBinaryBytes(bytes: Uint8Array): string {\n  return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction serializeCanonicalStringEntries(\n  entries: Iterable<readonly [string, string]>,\n  seen: WeakSet<object>,\n): string {\n  const valuesByKey = new Map<string, string[]>();\n  for (const [key, item] of entries) {\n    const values = valuesByKey.get(key);\n    if (values) values.push(item);\n    else valuesByKey.set(key, [item]);\n  }\n\n  return Array.from(valuesByKey.keys())\n    .sort(compareCodepoint)\n    .flatMap((key) =>\n      valuesByKey\n        .get(key)!\n        .map((item) => `[${stableSerialize(key, seen)},${stableSerialize(item, seen)}]`),\n    )\n    .join(\",\");\n}\n\nfunction stableSerialize(value: unknown, seen = new WeakSet<object>()): string {\n  if (value === null) return \"null\";\n  if (value === undefined) return \"undefined\";\n\n  const valueType = typeof value;\n  if (valueType === \"string\") return JSON.stringify(value);\n  if (valueType === \"number\" || valueType === \"boolean\" || valueType === \"bigint\") {\n    return `${valueType}:${String(value)}`;\n  }\n  if (valueType === \"symbol\") {\n    return `symbol:${String(value)}`;\n  }\n  if (valueType === \"function\") {\n    return `function:${getFunctionCacheIdentity(value as Function)}`;\n  }\n\n  if (value instanceof Date) {\n    // toISOString throws on an Invalid Date. Key building must not throw on a\n    // supported type, so all invalid dates share one stable marker and the\n    // caller's own validation decides what to do with the input.\n    return Number.isNaN(value.getTime()) ? \"date:invalid\" : `date:${value.toISOString()}`;\n  }\n  if (value instanceof URL) {\n    return `url:${value.toString()}`;\n  }\n  if (value instanceof RegExp) {\n    return `regexp:${value.toString()}`;\n  }\n  if (value instanceof ArrayBuffer) {\n    return `arraybuffer:${serializeBinaryBytes(new Uint8Array(value))}`;\n  }\n  if (typeof SharedArrayBuffer !== \"undefined\" && value instanceof SharedArrayBuffer) {\n    return `sharedarraybuffer:${serializeBinaryBytes(new Uint8Array(value))}`;\n  }\n  if (ArrayBuffer.isView(value)) {\n    const viewType = Object.prototype.toString.call(value).slice(8, -1);\n    const bytes = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n    return `binary:${viewType}:${serializeBinaryBytes(bytes)}`;\n  }\n\n  if (value && typeof value === \"object\") {\n    if (seen.has(value)) {\n      return \"[Circular]\";\n    }\n    seen.add(value);\n\n    if (Array.isArray(value)) {\n      const items: string[] = [];\n      for (let index = 0; index < value.length; index++) {\n        items.push(\n          Object.prototype.hasOwnProperty.call(value, index)\n            ? stableSerialize(value[index], seen)\n            : \"[Hole]\",\n        );\n      }\n      seen.delete(value);\n      return `[${items.join(\",\")}]`;\n    }\n\n    // Set and Map keep their contents internally, so Object.entries is empty\n    // for both. Serialize the contents and sort them by codepoint so equal\n    // contents give the same key regardless of insertion order.\n    if (value instanceof Set) {\n      const items = Array.from(value, (item) => stableSerialize(item, seen)).sort(compareCodepoint);\n      seen.delete(value);\n      return `set:[${items.join(\",\")}]`;\n    }\n    if (value instanceof Map) {\n      const items = Array.from(\n        value,\n        ([key, item]) => `[${stableSerialize(key, seen)},${stableSerialize(item, seen)}]`,\n      ).sort(compareCodepoint);\n      seen.delete(value);\n      return `map:[${items.join(\",\")}]`;\n    }\n    // URLSearchParams and Headers keep their contents internally, so\n    // Object.entries is empty for both (same rationale as Set/Map above).\n    // Canonicalize key order while preserving the order of repeated values for\n    // each key. URLSearchParams treats `a=1&a=2` and `a=2&a=1` as observably\n    // different inputs, while `b=2&a=1` and `a=1&b=2` should still share a key.\n    if (value instanceof URLSearchParams) {\n      const serialized = serializeCanonicalStringEntries(value, seen);\n      seen.delete(value);\n      return `urlsearchparams:[${serialized}]`;\n    }\n    if (value instanceof Headers) {\n      const serialized = serializeCanonicalStringEntries(value, seen);\n      seen.delete(value);\n      return `headers:[${serialized}]`;\n    }\n\n    // Codepoint comparison, not localeCompare: the host locale must not\n    // change how a \"stable\" key serializes, or invalidations computed on one\n    // server can miss entries written by another.\n    const entries = Object.entries(value as Record<string, unknown>).sort(([a], [b]) =>\n      compareCodepoint(a, b),\n    );\n    const serialized = entries\n      .map(([key, item]) => `${JSON.stringify(key)}:${stableSerialize(item, seen)}`)\n      .join(\",\");\n\n    seen.delete(value);\n    return `{${serialized}}`;\n  }\n\n  return String(value);\n}\n","import type { FarmConfig, FarmContextFactoryInput } from \"./types\";\n\nexport const FARM_ROUTE_CONTEXT_SYMBOL = Symbol.for(\"farm.routeContext\");\n\nexport type FarmRouteContextCarrier<TContext = unknown> = {\n  [FARM_ROUTE_CONTEXT_SYMBOL]?: TContext;\n};\n\nexport async function resolveFarmRouteContext(\n  config: Pick<FarmConfig, \"context\">,\n  input: FarmContextFactoryInput,\n): Promise<unknown> {\n  if (typeof config.context !== \"function\") {\n    return undefined;\n  }\n\n  return config.context(input);\n}\n\nexport function withFarmRouteContext<TProps extends object, TContext>(\n  props: TProps,\n  context: TContext | undefined,\n): TProps & FarmRouteContextCarrier<TContext> {\n  if (context === undefined) {\n    return props as TProps & FarmRouteContextCarrier<TContext>;\n  }\n\n  Object.defineProperty(props, FARM_ROUTE_CONTEXT_SYMBOL, {\n    value: context,\n    enumerable: false,\n    configurable: true,\n  });\n\n  return props as TProps & FarmRouteContextCarrier<TContext>;\n}\n\nexport function getFarmRouteContext<TContext = unknown>(props: unknown): TContext | undefined {\n  if (!props || typeof props !== \"object\") {\n    return undefined;\n  }\n\n  return (props as FarmRouteContextCarrier<TContext>)[FARM_ROUTE_CONTEXT_SYMBOL];\n}\n","import type { ComponentType } from \"react\";\nimport {\n  createFarmCacheKey,\n  createRouteDataCacheTag,\n  getFarmDataCache,\n  type FarmCacheOptions,\n  type RouteDataCacheKey,\n} from \"./cache\";\nimport { getFarmRouteContext } from \"./route-context\";\nimport { normalizeFarmRouteRuntimeConfig, type FarmRouteRuntimeConfig } from \"./route-runtime\";\nimport type { ServerFn } from \"./server-fn\";\nimport type { FarmServerRendererRuntime } from \"./renderer\";\nimport { parseProgrammaticRoutePath as parseSharedProgrammaticRoutePath } from \"./routes-shared\";\nimport { extractProgrammaticPageCallPathLiterals } from \"./route-call-scanner\";\nimport type {\n  FarmAppContext,\n  LayoutProps,\n  Metadata,\n  PageProps,\n  ParsedRoute,\n  PluginContextProps,\n  RouteModule,\n} from \"./types\";\n\nexport type ProgrammaticRouteRenderMode = \"static\" | \"dynamic\";\nexport type ProgrammaticRouteMethod =\n  | \"GET\"\n  | \"HEAD\"\n  | \"QUERY\"\n  | \"POST\"\n  | \"PUT\"\n  | \"DELETE\"\n  | \"PATCH\"\n  | \"OPTIONS\";\n\nexport type ProgrammaticRoutePrimitive = string | number | boolean;\nexport type ProgrammaticStaticPathParams = Record<\n  string,\n  ProgrammaticRoutePrimitive | readonly ProgrammaticRoutePrimitive[]\n>;\nexport type ProgrammaticStaticPath =\n  | string\n  | readonly ProgrammaticRoutePrimitive[]\n  | ProgrammaticStaticPathParams;\nexport type ProgrammaticStaticPaths = () =>\n  | readonly ProgrammaticStaticPath[]\n  | Promise<readonly ProgrammaticStaticPath[]>;\n\nexport interface ProgrammaticRouteSchema<TOutput = unknown> {\n  parse(value: unknown): TOutput;\n}\n\nexport interface ProgrammaticRouteSearchOptions<TOutput = ProgrammaticRouteSearchFallback> {\n  schema?: ProgrammaticRouteSchema<TOutput>;\n  stripDefaults?: boolean | readonly string[];\n  preserve?: readonly string[];\n  temporary?: readonly string[];\n}\n\nexport type ProgrammaticRouteSearchConfig<TOutput = ProgrammaticRouteSearchFallback> =\n  | ProgrammaticRouteSchema<TOutput>\n  | ProgrammaticRouteSearchOptions<TOutput>;\n\nexport type InferProgrammaticRouteSchema<TSchema, TFallback> =\n  TSchema extends ProgrammaticRouteSchema<infer TOutput> ? TOutput : TFallback;\n\nexport type InferProgrammaticRouteSearch<TSearch, TFallback> =\n  TSearch extends ProgrammaticRouteSearchOptions<infer TOutput>\n    ? TOutput\n    : TSearch extends ProgrammaticRouteSchema<infer TOutput>\n      ? TOutput\n      : TFallback;\n\nexport type ProgrammaticRouteParamsFallback = Record<string, string>;\nexport type ProgrammaticRouteSearchFallback = Record<string, string | string[] | undefined>;\nexport type ProgrammaticRouteMaybePromise<T> = T | Promise<T>;\nexport type ProgrammaticRouteAction = ServerFn<any, any, any>;\nexport type ProgrammaticRouteActions = Readonly<Record<string, ProgrammaticRouteAction>>;\nexport type ProgrammaticRouteDefaultAction<\n  TActions extends ProgrammaticRouteActions,\n  TDefaultAction extends keyof TActions | undefined,\n> = [TDefaultAction] extends [undefined]\n  ? TActions[keyof TActions]\n  : TActions[Extract<TDefaultAction, keyof TActions>];\nexport type ProgrammaticRouteActionContract<\n  TActions extends ProgrammaticRouteActions,\n  TDefaultAction extends keyof TActions | undefined,\n> = keyof TActions extends never\n  ? {\n      actions?: undefined;\n      defaultAction?: undefined;\n      action?: undefined;\n    }\n  : {\n      actions: Readonly<TActions>;\n      defaultAction: [TDefaultAction] extends [undefined]\n        ? keyof TActions\n        : Extract<TDefaultAction, keyof TActions>;\n      action: ProgrammaticRouteDefaultAction<TActions, TDefaultAction>;\n    };\nexport type ProgrammaticRouteWithActions<\n  TRoute extends ProgrammaticPageRoute<any, any, any, any>,\n  TActions extends ProgrammaticRouteActions,\n  TDefaultAction extends keyof TActions | undefined,\n> = Omit<TRoute, \"actions\" | \"defaultAction\" | \"action\"> &\n  ProgrammaticRouteActionContract<TActions, TDefaultAction>;\nexport type ProgrammaticRouteDataStaleTime =\n  | number\n  | false\n  | `${number}ms`\n  | `${number}s`\n  | `${number}m`\n  | `${number}h`;\nexport type ProgrammaticRouteContext = keyof FarmAppContext extends never\n  ? unknown\n  : FarmAppContext;\n\nexport type ProgrammaticRouteComponentProps<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TData = undefined,\n> = Omit<PageProps, \"params\" | \"searchParams\"> & {\n  params: TParams;\n  search: TSearch;\n  searchParams: Promise<TSearch>;\n} & ([TData] extends [undefined] ? { data?: undefined } : { data: TData });\n\nexport type ProgrammaticRouteDataContext<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TContext = ProgrammaticRouteContext,\n> = Omit<ProgrammaticRouteComponentProps<TParams, TSearch>, \"context\" | \"data\"> & {\n  context: TContext;\n  pluginContext?: PluginContextProps;\n};\n\nexport type ProgrammaticRouteDataCacheContext<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TBefore = unknown,\n  TContext = ProgrammaticRouteContext,\n> = ProgrammaticRouteDataContext<TParams, TSearch, TContext> & {\n  before: TBefore;\n};\n\nexport type ProgrammaticRouteGuardContext<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TContext = ProgrammaticRouteContext,\n> = ProgrammaticRouteDataContext<TParams, TSearch, TContext>;\n\nexport type ProgrammaticRouteGuard<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TContext = ProgrammaticRouteContext,\n> = (\n  context: ProgrammaticRouteGuardContext<TParams, TSearch, TContext>,\n) => ProgrammaticRouteMaybePromise<void>;\n\nexport type ProgrammaticRouteErrorComponentProps<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n> = Partial<ProgrammaticRouteComponentProps<TParams, TSearch>> & {\n  error: unknown;\n};\n\nexport type ProgrammaticRoutePendingComponentProps<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n> = Partial<ProgrammaticRouteComponentProps<TParams, TSearch>>;\n\nexport type ProgrammaticRouteDataCacheKeys<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TBefore = unknown,\n  TContext = ProgrammaticRouteContext,\n> =\n  | readonly string[]\n  | ((\n      context: ProgrammaticRouteDataCacheContext<TParams, TSearch, TBefore, TContext>,\n    ) => ProgrammaticRouteMaybePromise<readonly string[]>);\n\nexport interface ProgrammaticRouteDataHooks<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TBefore = unknown,\n  TData = unknown,\n  TContext = ProgrammaticRouteContext,\n> {\n  key?: (\n    context: ProgrammaticRouteDataCacheContext<TParams, TSearch, NoInfer<TBefore>, TContext>,\n  ) => ProgrammaticRouteMaybePromise<RouteDataCacheKey | null | undefined>;\n  staleTime?: ProgrammaticRouteDataStaleTime;\n  tags?: ProgrammaticRouteDataCacheKeys<TParams, TSearch, NoInfer<TBefore>, TContext>;\n  paths?: ProgrammaticRouteDataCacheKeys<TParams, TSearch, NoInfer<TBefore>, TContext>;\n  before?: (\n    context: ProgrammaticRouteDataContext<TParams, TSearch, TContext>,\n  ) => ProgrammaticRouteMaybePromise<TBefore>;\n  main: (\n    context: ProgrammaticRouteDataContext<TParams, TSearch, TContext> & {\n      before: NoInfer<TBefore>;\n    },\n  ) => ProgrammaticRouteMaybePromise<TData>;\n  after?: (\n    context: ProgrammaticRouteDataContext<TParams, TSearch, TContext> & {\n      before: NoInfer<TBefore>;\n      data: NoInfer<TData>;\n    },\n  ) => ProgrammaticRouteMaybePromise<void>;\n}\n\nexport type InferProgrammaticRouteData<TDataHooks> = TDataHooks extends {\n  main: (...args: any[]) => infer TResult;\n}\n  ? Awaited<TResult>\n  : undefined;\n\nexport interface ProgrammaticPageRoute<\n  TParams = ProgrammaticRouteParamsFallback,\n  TSearch = ProgrammaticRouteSearchFallback,\n  TDataHooks extends ProgrammaticRouteDataHooks<TParams, TSearch, any, any, any> | undefined =\n    | ProgrammaticRouteDataHooks<TParams, TSearch, any, any, any>\n    | undefined,\n  TContext = ProgrammaticRouteContext,\n> extends FarmRouteRuntimeConfig {\n  kind: \"page\";\n  path: string;\n  component: ComponentType<any>;\n  params?: ProgrammaticRouteSchema<TParams>;\n  search?: ProgrammaticRouteSearchConfig<TSearch>;\n  guard?: ProgrammaticRouteGuard<TParams, TSearch, TContext>;\n  data?: TDataHooks;\n  /** Named server functions owned by this route. */\n  actions?: ProgrammaticRouteActions;\n  /** Named action selected by `useAction(route)`. The first action is used when omitted. */\n  defaultAction?: string;\n  /** Resolved default server function for client and server calls. */\n  action?: ProgrammaticRouteAction;\n  pending?: ComponentType<ProgrammaticRoutePendingComponentProps<TParams, TSearch>>;\n  error?: ComponentType<ProgrammaticRouteErrorComponentProps<TParams, TSearch>>;\n  notFound?: ComponentType<ProgrammaticRouteErrorComponentProps<TParams, TSearch>>;\n  render?: ProgrammaticRouteRenderMode;\n  staticPaths?: ProgrammaticStaticPaths;\n  revalidate?: number | false;\n  ppr?: boolean;\n  metadata?: Metadata & Record<string, any>;\n  generateMetadata?: RouteModule[\"generateMetadata\"];\n}\n\nexport interface ProgrammaticLayoutRoute extends FarmRouteRuntimeConfig {\n  kind: \"layout\";\n  path: string;\n  component: ComponentType<LayoutProps>;\n  metadata?: Metadata & Record<string, any>;\n  generateMetadata?: (props: { params: Record<string, string> }) => Promise<Metadata> | Metadata;\n}\n\nexport type ProgrammaticApiRouteOptions = Partial<Record<ProgrammaticRouteMethod, any>> & {\n  render?: ProgrammaticRouteRenderMode;\n} & FarmRouteRuntimeConfig;\n\nexport interface ProgrammaticApiRoute extends FarmRouteRuntimeConfig {\n  kind: \"api\";\n  path: string;\n  methods: Partial<Record<ProgrammaticRouteMethod, any>>;\n  render?: ProgrammaticRouteRenderMode;\n}\n\nexport interface ProgrammaticRedirectRoute {\n  kind: \"redirect\";\n  source: string;\n  destination: string;\n  permanent?: boolean;\n  statusCode?: number;\n}\n\nexport type ProgrammaticRouteDefinition =\n  | ProgrammaticPageRoute<any, any>\n  | ProgrammaticLayoutRoute\n  | ProgrammaticApiRoute\n  | ProgrammaticRedirectRoute;\n\nexport interface ProgrammaticRouteManifest {\n  readonly __farmRoutes: true;\n  routes: ProgrammaticRouteDefinition[];\n}\n\nexport interface ProgrammaticRouteBuilder {\n  page(\n    path: string,\n    options: Omit<ProgrammaticPageRoute<any, any>, \"kind\" | \"path\">,\n  ): ProgrammaticPageRoute;\n  layout(\n    path: string,\n    options: Omit<ProgrammaticLayoutRoute, \"kind\" | \"path\">,\n  ): ProgrammaticLayoutRoute;\n  api(path: string, options: ProgrammaticApiRouteOptions): ProgrammaticApiRoute;\n  redirect(\n    source: string,\n    destination: string,\n    options?: Omit<ProgrammaticRedirectRoute, \"kind\" | \"source\" | \"destination\">,\n  ): ProgrammaticRedirectRoute;\n}\n\nexport type ProgrammaticRouteFactory = (\n  builder: ProgrammaticRouteBuilder,\n) => readonly ProgrammaticRouteDefinition[];\n\ntype CreateRouteParams<TParamsSchema> = InferProgrammaticRouteSchema<\n  TParamsSchema,\n  ProgrammaticRouteParamsFallback\n>;\n\ntype CreateRouteSearch<TSearchConfig> = InferProgrammaticRouteSearch<\n  TSearchConfig,\n  ProgrammaticRouteSearchFallback\n>;\n\ntype CreateRouteSharedOptions<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined,\n> = Omit<\n  ProgrammaticPageRoute<CreateRouteParams<TParamsSchema>, CreateRouteSearch<TSearchConfig>>,\n  \"kind\" | \"path\" | \"component\" | \"params\" | \"search\" | \"data\" | \"guard\" | \"action\"\n> & {\n  params?: TParamsSchema;\n  search?: TSearchConfig;\n  guard?: ProgrammaticRouteGuard<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>\n  >;\n};\n\ntype CreateRouteDataHooksWithBefore<\n  TParams,\n  TSearch,\n  TBeforeResult,\n  TMainResult,\n  TContext = ProgrammaticRouteContext,\n> = Omit<\n  ProgrammaticRouteDataHooks<\n    TParams,\n    TSearch,\n    NoInfer<Awaited<TBeforeResult>>,\n    NoInfer<Awaited<TMainResult>>,\n    TContext\n  >,\n  \"before\" | \"main\"\n> & {\n  before: (context: ProgrammaticRouteDataContext<TParams, TSearch, TContext>) => TBeforeResult;\n  main: (\n    context: ProgrammaticRouteDataContext<TParams, TSearch, TContext> & {\n      before: NoInfer<Awaited<TBeforeResult>>;\n    },\n  ) => TMainResult;\n};\n\ntype CreateRouteDataHooksWithoutBefore<\n  TParams,\n  TSearch,\n  TMainResult,\n  TContext = ProgrammaticRouteContext,\n> = Omit<\n  ProgrammaticRouteDataHooks<TParams, TSearch, undefined, NoInfer<Awaited<TMainResult>>, TContext>,\n  \"before\" | \"main\"\n> & {\n  before?: undefined;\n  main: (\n    context: ProgrammaticRouteDataContext<TParams, TSearch, TContext> & {\n      before: undefined;\n    },\n  ) => TMainResult;\n};\n\ntype CreateRouteOptionsWithBefore<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined,\n  TBefore,\n  TData,\n> = CreateRouteSharedOptions<TParamsSchema, TSearchConfig> & {\n  data: CreateRouteDataHooksWithBefore<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    TBefore,\n    TData\n  >;\n  component: ComponentType<\n    ProgrammaticRouteComponentProps<\n      CreateRouteParams<TParamsSchema>,\n      CreateRouteSearch<TSearchConfig>,\n      NoInfer<Awaited<TData>>\n    >\n  >;\n};\n\ntype CreateRouteOptionsWithoutBefore<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined,\n  TData,\n> = CreateRouteSharedOptions<TParamsSchema, TSearchConfig> & {\n  data: CreateRouteDataHooksWithoutBefore<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    TData\n  >;\n  component: ComponentType<\n    ProgrammaticRouteComponentProps<\n      CreateRouteParams<TParamsSchema>,\n      CreateRouteSearch<TSearchConfig>,\n      NoInfer<Awaited<TData>>\n    >\n  >;\n};\n\ntype CreateRouteOptionsWithoutData<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined,\n> = CreateRouteSharedOptions<TParamsSchema, TSearchConfig> & {\n  data?: undefined;\n  component: ComponentType<\n    ProgrammaticRouteComponentProps<\n      CreateRouteParams<TParamsSchema>,\n      CreateRouteSearch<TSearchConfig>,\n      undefined\n    >\n  >;\n};\n\ntype CreateRouteComponentOption<TComponent extends ComponentType<any>, TProps> = {\n  component: TComponent;\n} & (TComponent extends ComponentType<TProps> ? unknown : { component: ComponentType<TProps> });\n\nexport type CreateRouteOptions<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined = undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined = undefined,\n  TBefore = unknown,\n  TData = unknown,\n> =\n  | CreateRouteOptionsWithBefore<TParamsSchema, TSearchConfig, TBefore, TData>\n  | CreateRouteOptionsWithoutBefore<TParamsSchema, TSearchConfig, TData>\n  | CreateRouteOptionsWithoutData<TParamsSchema, TSearchConfig>;\n\ntype CreateRouteActionOptions<\n  TActions extends ProgrammaticRouteActions,\n  TDefaultAction extends keyof TActions | undefined,\n> = keyof TActions extends never\n  ? { actions?: undefined; defaultAction?: undefined }\n  : { actions: TActions; defaultAction?: TDefaultAction };\n\nconst FARM_ROUTES_BRAND = Symbol.for(\"farm.routes\");\nexport const PROGRAMMATIC_ROUTE_FILE_NAMES = [\n  \"farm.route.ts\",\n  \"farm.route.tsx\",\n  \"farm.route.js\",\n  \"farm.route.jsx\",\n  \"farm.routes.ts\",\n  \"farm.routes.tsx\",\n  \"farm.routes.js\",\n  \"farm.routes.jsx\",\n  \"routes.ts\",\n  \"routes.tsx\",\n  \"routes.js\",\n  \"routes.jsx\",\n];\n\nexport function defineRoutes(\n  input: readonly ProgrammaticRouteDefinition[] | ProgrammaticRouteFactory,\n): ProgrammaticRouteManifest {\n  const routes = typeof input === \"function\" ? input(routesBuilder) : input;\n  const manifest = {\n    __farmRoutes: true as const,\n    routes: routes.map(normalizeProgrammaticRoute),\n  };\n\n  Object.defineProperty(manifest, FARM_ROUTES_BRAND, {\n    value: true,\n    enumerable: false,\n  });\n\n  return manifest;\n}\n\nexport const routesBuilder: ProgrammaticRouteBuilder = {\n  page(path, options) {\n    return normalizeProgrammaticRoute({\n      kind: \"page\",\n      path,\n      ...options,\n    }) as ProgrammaticPageRoute;\n  },\n  layout(path, options) {\n    return normalizeProgrammaticRoute({\n      kind: \"layout\",\n      path,\n      ...options,\n    }) as ProgrammaticLayoutRoute;\n  },\n  api(path, options) {\n    const { render, runtime, regions, maxDuration, ...methods } = options;\n    return normalizeProgrammaticRoute({\n      kind: \"api\",\n      path,\n      render,\n      runtime,\n      regions,\n      maxDuration,\n      methods: normalizeApiMethods(methods),\n    }) as ProgrammaticApiRoute;\n  },\n  redirect(source, destination, options = {}) {\n    return normalizeProgrammaticRoute({\n      kind: \"redirect\",\n      source,\n      destination,\n      ...options,\n    }) as ProgrammaticRedirectRoute;\n  },\n};\n\nexport const page = routesBuilder.page;\nexport const layout = routesBuilder.layout;\nexport const api = routesBuilder.api;\nexport const redirect = routesBuilder.redirect;\n\nexport interface ProgrammaticRouteSearchClientOptions {\n  stripDefaults?: boolean | readonly string[];\n  preserve?: readonly string[];\n  temporary?: readonly string[];\n}\n\nexport interface ProgrammaticRouteSearchResolution<TSearch = unknown> {\n  search: TSearch;\n  canonicalPath?: string;\n}\n\nexport function getProgrammaticRouteSearchSchema<TSearch = unknown>(\n  search: ProgrammaticRouteSearchConfig<TSearch> | undefined,\n): ProgrammaticRouteSchema<TSearch> | undefined {\n  if (!search) return undefined;\n  if (isProgrammaticRouteSchema(search)) return search;\n  return search.schema;\n}\n\nexport function getProgrammaticRouteSearchClientOptions(\n  search: ProgrammaticRouteSearchConfig<any> | undefined,\n): ProgrammaticRouteSearchClientOptions | undefined {\n  if (!search || isProgrammaticRouteSchema(search)) return undefined;\n\n  const options: ProgrammaticRouteSearchClientOptions = {};\n  if (typeof search.stripDefaults !== \"undefined\") options.stripDefaults = search.stripDefaults;\n  if (search.preserve?.length) options.preserve = [...search.preserve];\n  if (search.temporary?.length) options.temporary = [...search.temporary];\n\n  return Object.keys(options).length > 0 ? options : undefined;\n}\n\nfunction resolveProgrammaticRouteSearch<TSearch>(\n  searchConfig: ProgrammaticRouteSearchConfig<TSearch> | undefined,\n  rawSearch: ProgrammaticRouteSearchFallback,\n  path: string,\n  routePath: string,\n): ProgrammaticRouteSearchResolution<TSearch | ProgrammaticRouteSearchFallback> {\n  const schema = getProgrammaticRouteSearchSchema(searchConfig);\n  const search = parseProgrammaticSchema(schema, rawSearch, \"search\", routePath) as\n    | TSearch\n    | ProgrammaticRouteSearchFallback;\n  const options = getProgrammaticRouteSearchOptions(searchConfig);\n  const canonicalPath = resolveProgrammaticRouteCanonicalPath({\n    options,\n    schema,\n    rawSearch,\n    parsedSearch: search,\n    path,\n  });\n\n  return { search, canonicalPath };\n}\n\nfunction getProgrammaticRouteSearchOptions(\n  search: ProgrammaticRouteSearchConfig<any> | undefined,\n): ProgrammaticRouteSearchOptions<any> | undefined {\n  if (!search || isProgrammaticRouteSchema(search)) return undefined;\n  return search;\n}\n\nfunction isProgrammaticRouteSchema(value: unknown): value is ProgrammaticRouteSchema<any> {\n  return !!value && typeof value === \"object\" && typeof (value as any).parse === \"function\";\n}\n\nfunction resolveProgrammaticRouteCanonicalPath(input: {\n  options: ProgrammaticRouteSearchOptions<any> | undefined;\n  schema: ProgrammaticRouteSchema<any> | undefined;\n  rawSearch: ProgrammaticRouteSearchFallback;\n  parsedSearch: unknown;\n  path: string;\n}): string | undefined {\n  const options = input.options;\n  if (!options?.temporary?.length && !options?.stripDefaults) {\n    return undefined;\n  }\n\n  const params = createSearchParams(input.rawSearch);\n  const original = params.toString();\n\n  for (const key of options.temporary || []) {\n    params.delete(key);\n  }\n\n  if (options.stripDefaults) {\n    const defaultSearch = parseDefaultSearch(input.schema);\n    if (defaultSearch !== undefined) {\n      const keys =\n        options.stripDefaults === true\n          ? Array.from(new Set(Array.from(params.keys())))\n          : [...options.stripDefaults];\n\n      for (const key of keys) {\n        if (\n          params.has(key) &&\n          searchValuesEqual(\n            readSearchValue(input.parsedSearch, key),\n            readSearchValue(defaultSearch, key),\n          )\n        ) {\n          params.delete(key);\n        }\n      }\n    }\n  }\n\n  const next = params.toString();\n  if (next === original) {\n    return undefined;\n  }\n\n  return next ? `${input.path}?${next}` : input.path;\n}\n\nfunction createSearchParams(value: ProgrammaticRouteSearchFallback): URLSearchParams {\n  const params = new URLSearchParams();\n\n  for (const [key, item] of Object.entries(value)) {\n    if (item == null) continue;\n    const values = Array.isArray(item) ? item : [item];\n    for (const entry of values) {\n      if (entry != null) params.append(key, String(entry));\n    }\n  }\n\n  return params;\n}\n\nfunction parseDefaultSearch(\n  schema: ProgrammaticRouteSchema<any> | undefined,\n): Record<string, unknown> | undefined {\n  if (!schema) return undefined;\n\n  try {\n    const value = schema.parse({});\n    return value && typeof value === \"object\" ? (value as Record<string, unknown>) : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction readSearchValue(value: unknown, key: string): unknown {\n  return value && typeof value === \"object\" ? (value as Record<string, unknown>)[key] : undefined;\n}\n\nfunction searchValuesEqual(left: unknown, right: unknown): boolean {\n  return (\n    JSON.stringify(normalizeComparableValue(left)) ===\n    JSON.stringify(normalizeComparableValue(right))\n  );\n}\n\nfunction normalizeComparableValue(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(normalizeComparableValue);\n  }\n  if (value && typeof value === \"object\") {\n    return Object.keys(value as Record<string, unknown>)\n      .sort()\n      .reduce<Record<string, unknown>>((output, key) => {\n        output[key] = normalizeComparableValue((value as Record<string, unknown>)[key]);\n        return output;\n      }, {});\n  }\n  return value;\n}\n\nexport function createRoute<\n  const TActions extends ProgrammaticRouteActions,\n  TDefaultAction extends keyof TActions | undefined = undefined,\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined = undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined = undefined,\n  TBeforeResult = unknown,\n  TMainResult = unknown,\n  TComponent extends ComponentType<any> = ComponentType<any>,\n>(\n  path: string,\n  options: Omit<\n    CreateRouteOptionsWithBefore<TParamsSchema, TSearchConfig, TBeforeResult, TMainResult>,\n    \"component\" | \"actions\" | \"defaultAction\" | \"action\"\n  > &\n    CreateRouteActionOptions<TActions, TDefaultAction> &\n    CreateRouteComponentOption<\n      TComponent,\n      ProgrammaticRouteComponentProps<\n        CreateRouteParams<TParamsSchema>,\n        CreateRouteSearch<TSearchConfig>,\n        Awaited<TMainResult>\n      >\n    >,\n): ProgrammaticRouteWithActions<\n  ProgrammaticPageRoute<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    CreateRouteDataHooksWithBefore<\n      CreateRouteParams<TParamsSchema>,\n      CreateRouteSearch<TSearchConfig>,\n      TBeforeResult,\n      TMainResult\n    >\n  >,\n  TActions,\n  TDefaultAction\n>;\nexport function createRoute<\n  const TActions extends ProgrammaticRouteActions,\n  TDefaultAction extends keyof TActions | undefined = undefined,\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined = undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined = undefined,\n  TMainResult = unknown,\n  TComponent extends ComponentType<any> = ComponentType<any>,\n>(\n  path: string,\n  options: Omit<\n    CreateRouteOptionsWithoutBefore<TParamsSchema, TSearchConfig, TMainResult>,\n    \"component\" | \"actions\" | \"defaultAction\" | \"action\"\n  > &\n    CreateRouteActionOptions<TActions, TDefaultAction> &\n    CreateRouteComponentOption<\n      TComponent,\n      ProgrammaticRouteComponentProps<\n        CreateRouteParams<TParamsSchema>,\n        CreateRouteSearch<TSearchConfig>,\n        Awaited<TMainResult>\n      >\n    >,\n): ProgrammaticRouteWithActions<\n  ProgrammaticPageRoute<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    CreateRouteDataHooksWithoutBefore<\n      CreateRouteParams<TParamsSchema>,\n      CreateRouteSearch<TSearchConfig>,\n      TMainResult\n    >\n  >,\n  TActions,\n  TDefaultAction\n>;\nexport function createRoute<\n  const TActions extends ProgrammaticRouteActions,\n  TDefaultAction extends keyof TActions | undefined = undefined,\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined = undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined = undefined,\n>(\n  path: string,\n  options: Omit<\n    CreateRouteOptionsWithoutData<TParamsSchema, TSearchConfig>,\n    \"actions\" | \"defaultAction\" | \"action\"\n  > &\n    CreateRouteActionOptions<TActions, TDefaultAction>,\n): ProgrammaticRouteWithActions<\n  ProgrammaticPageRoute<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    undefined\n  >,\n  TActions,\n  TDefaultAction\n>;\nexport function createRoute<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined = undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined = undefined,\n  TBeforeResult = unknown,\n  TMainResult = unknown,\n  TComponent extends ComponentType<any> = ComponentType<any>,\n>(\n  path: string,\n  options: Omit<\n    CreateRouteOptionsWithBefore<TParamsSchema, TSearchConfig, TBeforeResult, TMainResult>,\n    \"component\" | \"actions\" | \"defaultAction\" | \"action\"\n  > & { actions?: undefined; defaultAction?: undefined } & CreateRouteComponentOption<\n      TComponent,\n      ProgrammaticRouteComponentProps<\n        CreateRouteParams<TParamsSchema>,\n        CreateRouteSearch<TSearchConfig>,\n        Awaited<TMainResult>\n      >\n    >,\n): ProgrammaticRouteWithActions<\n  ProgrammaticPageRoute<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    CreateRouteDataHooksWithBefore<\n      CreateRouteParams<TParamsSchema>,\n      CreateRouteSearch<TSearchConfig>,\n      TBeforeResult,\n      TMainResult\n    >\n  >,\n  {},\n  undefined\n>;\nexport function createRoute<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined = undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined = undefined,\n  TMainResult = unknown,\n  TComponent extends ComponentType<any> = ComponentType<any>,\n>(\n  path: string,\n  options: Omit<\n    CreateRouteOptionsWithoutBefore<TParamsSchema, TSearchConfig, TMainResult>,\n    \"component\" | \"actions\" | \"defaultAction\" | \"action\"\n  > & { actions?: undefined; defaultAction?: undefined } & CreateRouteComponentOption<\n      TComponent,\n      ProgrammaticRouteComponentProps<\n        CreateRouteParams<TParamsSchema>,\n        CreateRouteSearch<TSearchConfig>,\n        Awaited<TMainResult>\n      >\n    >,\n): ProgrammaticRouteWithActions<\n  ProgrammaticPageRoute<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    CreateRouteDataHooksWithoutBefore<\n      CreateRouteParams<TParamsSchema>,\n      CreateRouteSearch<TSearchConfig>,\n      TMainResult\n    >\n  >,\n  {},\n  undefined\n>;\nexport function createRoute<\n  TParamsSchema extends ProgrammaticRouteSchema<any> | undefined = undefined,\n  TSearchConfig extends ProgrammaticRouteSearchConfig<any> | undefined = undefined,\n>(\n  path: string,\n  options: Omit<\n    CreateRouteOptionsWithoutData<TParamsSchema, TSearchConfig>,\n    \"actions\" | \"defaultAction\" | \"action\"\n  > & { actions?: undefined; defaultAction?: undefined },\n): ProgrammaticRouteWithActions<\n  ProgrammaticPageRoute<\n    CreateRouteParams<TParamsSchema>,\n    CreateRouteSearch<TSearchConfig>,\n    undefined\n  >,\n  {},\n  undefined\n>;\nexport function createRoute(path: string, options: any): any {\n  return routesBuilder.page(path, options);\n}\n\nexport function isProgrammaticRoutesFileName(fileName: string): boolean {\n  const normalized = fileName.replace(/\\\\/g, \"/\");\n  const baseName = normalized.split(\"/\").pop() || normalized;\n  return PROGRAMMATIC_ROUTE_FILE_NAMES.includes(baseName);\n}\n\nexport function getProgrammaticRouteManifest(\n  mod: Record<string, any> | null | undefined,\n): ProgrammaticRouteManifest | null {\n  if (!mod) return null;\n\n  const candidates = [mod.default, mod.routes, mod.Route];\n  for (const candidate of candidates) {\n    if (isProgrammaticRouteManifest(candidate)) {\n      return candidate;\n    }\n    if (isProgrammaticRouteDefinition(candidate)) {\n      return defineRoutes([candidate]);\n    }\n    if (Array.isArray(candidate)) {\n      return defineRoutes(candidate as ProgrammaticRouteDefinition[]);\n    }\n  }\n\n  const routeDefinitions = Object.values(mod).filter(isProgrammaticRouteDefinition);\n  if (routeDefinitions.length > 0) {\n    return defineRoutes(routeDefinitions);\n  }\n\n  return null;\n}\n\nexport function isProgrammaticRouteManifest(value: unknown): value is ProgrammaticRouteManifest {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (value as ProgrammaticRouteManifest).__farmRoutes === true &&\n    Array.isArray((value as ProgrammaticRouteManifest).routes)\n  );\n}\n\nexport function isProgrammaticRouteDefinition(\n  value: unknown,\n): value is ProgrammaticRouteDefinition {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n\n  const kind = (value as { kind?: unknown }).kind;\n  return kind === \"page\" || kind === \"layout\" || kind === \"api\" || kind === \"redirect\";\n}\n\nexport function createProgrammaticRouteModuleId(\n  filePath: string,\n  kind: \"page\" | \"layout\" | \"api\",\n  routePath: string,\n): string {\n  return `${filePath}?farm-route=${kind}:${encodeURIComponent(normalizeRoutePath(routePath))}`;\n}\n\nexport function parseProgrammaticRouteModuleId(moduleId: string): {\n  filePath: string;\n  kind: \"page\" | \"layout\" | \"api\";\n  routePath: string;\n} | null {\n  const queryIndex = moduleId.indexOf(\"?\");\n  if (queryIndex === -1) {\n    return null;\n  }\n\n  const filePath = moduleId.slice(0, queryIndex);\n  const params = new URLSearchParams(moduleId.slice(queryIndex + 1));\n  const value = params.get(\"farm-route\");\n  if (!value) {\n    return null;\n  }\n\n  const separator = value.indexOf(\":\");\n  if (separator === -1) {\n    return null;\n  }\n\n  const kind = value.slice(0, separator);\n  if (kind !== \"page\" && kind !== \"layout\" && kind !== \"api\") {\n    return null;\n  }\n\n  return {\n    filePath,\n    kind,\n    routePath: normalizeRoutePath(value.slice(separator + 1)),\n  };\n}\n\nexport function parseProgrammaticRoutePath(\n  routePath: string,\n  type: ParsedRoute[\"type\"] = \"page\",\n): ParsedRoute {\n  return parseSharedProgrammaticRoutePath(routePath, type);\n}\n\nexport function createRouteModuleFromProgrammaticPage(\n  route: ProgrammaticPageRoute,\n  rendererRuntime?: Pick<FarmServerRendererRuntime, \"createElement\" | \"Suspense\">,\n): RouteModule {\n  const mod: RouteModule = {\n    default: createProgrammaticPageComponent(route, rendererRuntime),\n    ...normalizeFarmRouteRuntimeConfig(route, `Route \"${route.path}\"`),\n  };\n\n  if (route.params || route.search || route.guard || route.data) {\n    (mod as any).__farmRouteSchemas = {\n      params: route.params,\n      search: getProgrammaticRouteSearchSchema(route.search),\n    };\n    (mod as any).__farmRouteSearch = getProgrammaticRouteSearchClientOptions(route.search);\n    (mod as any).__farmRouteGuard = route.guard;\n    (mod as any).__farmRouteData = route.data;\n    (mod as any).__farmRouteParsesProps = true;\n    (mod as any).__farmResolveRouteProps = (props: PageProps) =>\n      resolveProgrammaticRouteProps(route, props);\n    (mod as any).__farmResolveRouteCanonicalPath = (\n      rawSearch: ProgrammaticRouteSearchFallback,\n      path: string,\n    ) => resolveProgrammaticRouteSearch(route.search, rawSearch, path, route.path).canonicalPath;\n  }\n\n  if (route.pending || route.error || route.notFound) {\n    (mod as any).__farmRouteComponents = {\n      pending: route.pending,\n      error: route.error,\n      notFound: route.notFound,\n    };\n  }\n\n  if (route.render === \"static\" || route.staticPaths) {\n    mod.ssg = true;\n    mod.dynamic = \"force-static\";\n  } else if (route.render === \"dynamic\") {\n    mod.ssg = false;\n    mod.dynamic = \"force-dynamic\";\n  }\n\n  if (typeof route.revalidate !== \"undefined\") {\n    mod.revalidate = route.revalidate;\n  }\n\n  if (route.ppr) {\n    mod.ppr = true;\n  }\n\n  if (route.metadata) {\n    mod.metadata = route.metadata;\n  }\n\n  if (route.generateMetadata) {\n    mod.generateMetadata = route.generateMetadata;\n  }\n\n  if (route.staticPaths) {\n    mod.getStaticPaths = async () => normalizeStaticPaths(route.path, await route.staticPaths!());\n  }\n\n  return mod;\n}\n\nexport function createLayoutModuleFromProgrammaticLayout(route: ProgrammaticLayoutRoute) {\n  return {\n    default: route.component,\n    ...normalizeFarmRouteRuntimeConfig(route, `Layout \"${route.path}\"`),\n    metadata: route.metadata,\n    generateMetadata: route.generateMetadata,\n  };\n}\n\nexport function scanProgrammaticPagePaths(source: string): string[] {\n  const paths = new Set<string>();\n\n  for (const routePath of extractProgrammaticPageCallPathLiterals(source)) {\n    if (routePath) {\n      paths.add(normalizeRoutePath(routePath));\n    }\n  }\n\n  return Array.from(paths);\n}\n\nfunction createProgrammaticPageComponent(\n  route: ProgrammaticPageRoute,\n  rendererRuntime?: Pick<FarmServerRendererRuntime, \"createElement\" | \"Suspense\">,\n): ComponentType<PageProps> {\n  if (\n    !route.params &&\n    !route.search &&\n    !route.guard &&\n    !route.data &&\n    !route.pending &&\n    !route.error &&\n    !route.notFound\n  ) {\n    return route.component as ComponentType<PageProps>;\n  }\n\n  const createElement: FarmServerRendererRuntime[\"createElement\"] = (...args) => {\n    if (!rendererRuntime) {\n      throw new Error(\n        `Programmatic route \"${route.path}\" requires a FARMJS renderer runtime before it can render.`,\n      );\n    }\n    return rendererRuntime.createElement(...args);\n  };\n  const Component = route.component;\n\n  if (route.pending) {\n    const PendingComponent = route.pending;\n    const routePropsResources = new WeakMap<object, ProgrammaticRoutePropsResource>();\n    const FarmProgrammaticPageContent = function FarmProgrammaticPageContent(props: PageProps) {\n      try {\n        const resolvedProps = readProgrammaticRouteProps(route, props, routePropsResources);\n        return createElement(Component, stripProgrammaticRoutePropsMarker(resolvedProps));\n      } catch (error) {\n        if (isPromiseLike(error) || isProgrammaticRedirectSignal(error)) {\n          throw error;\n        }\n\n        if (isProgrammaticNotFoundSignal(error) && route.notFound) {\n          return createElement(route.notFound, createProgrammaticRouteErrorProps(error, props));\n        }\n\n        if (route.error) {\n          return createElement(route.error, createProgrammaticRouteErrorProps(error, props));\n        }\n\n        throw error;\n      }\n    };\n    const PageContent = FarmProgrammaticPageContent as unknown as ComponentType<PageProps>;\n    const FarmProgrammaticPage = function FarmProgrammaticPage(props: PageProps) {\n      return createElement(\n        rendererRuntime!.Suspense,\n        {\n          fallback: createElement(PendingComponent, createProgrammaticRoutePendingProps(props)),\n        },\n        createElement(PageContent, props),\n      );\n    };\n\n    return FarmProgrammaticPage as unknown as ComponentType<PageProps>;\n  }\n\n  const FarmProgrammaticPageContent = async function FarmProgrammaticPageContent(props: PageProps) {\n    try {\n      const resolvedProps = isProgrammaticRoutePropsResolved(props)\n        ? props\n        : await resolveProgrammaticRouteProps(route, props);\n\n      return createElement(Component, stripProgrammaticRoutePropsMarker(resolvedProps));\n    } catch (error) {\n      if (isProgrammaticRedirectSignal(error)) {\n        throw error;\n      }\n\n      if (isProgrammaticNotFoundSignal(error) && route.notFound) {\n        return createElement(route.notFound, createProgrammaticRouteErrorProps(error, props));\n      }\n\n      if (route.error) {\n        return createElement(route.error, createProgrammaticRouteErrorProps(error, props));\n      }\n\n      throw error;\n    }\n  };\n\n  return FarmProgrammaticPageContent as unknown as ComponentType<PageProps>;\n}\n\ntype ProgrammaticRoutePropsResource =\n  | { status: \"pending\"; promise: Promise<Record<string, any>> }\n  | { status: \"resolved\"; value: Record<string, any> }\n  | { status: \"rejected\"; error: unknown };\n\nfunction readProgrammaticRouteProps(\n  route: ProgrammaticPageRoute,\n  props: PageProps,\n  resources: WeakMap<object, ProgrammaticRoutePropsResource>,\n): Record<string, any> {\n  if (isProgrammaticRoutePropsResolved(props)) {\n    return props;\n  }\n\n  let resource = resources.get(props as object);\n  if (!resource) {\n    const deferredRouteProps = (props as any).__farmRoutePropsPromise;\n    const promise = Promise.resolve<Record<string, any>>(\n      isPromiseLike(deferredRouteProps)\n        ? (deferredRouteProps as PromiseLike<Record<string, any>>)\n        : resolveProgrammaticRouteProps(route, props),\n    );\n    resource = { status: \"pending\", promise };\n    resources.set(props as object, resource);\n    promise.then(\n      (value) => resources.set(props as object, { status: \"resolved\", value }),\n      (error) => resources.set(props as object, { status: \"rejected\", error }),\n    );\n  }\n\n  if (resource.status === \"pending\") throw resource.promise;\n  if (resource.status === \"rejected\") throw resource.error;\n  return resource.value;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n  return Boolean(\n    value &&\n    (typeof value === \"object\" || typeof value === \"function\") &&\n    typeof (value as PromiseLike<unknown>).then === \"function\",\n  );\n}\n\nfunction createProgrammaticRoutePendingProps(\n  props: PageProps,\n): ProgrammaticRoutePendingComponentProps {\n  return {\n    params: props.params,\n    searchParams: props.searchParams,\n    path: props.path,\n  };\n}\n\nfunction createProgrammaticRouteErrorProps(\n  error: unknown,\n  props: PageProps,\n): ProgrammaticRouteErrorComponentProps {\n  return {\n    error,\n    params: props.params,\n    searchParams: props.searchParams,\n    path: props.path,\n  };\n}\n\nfunction isProgrammaticRedirectSignal(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") return false;\n  const digest = (error as { digest?: unknown }).digest;\n  return typeof digest === \"string\" && digest.startsWith(\"FARM_REDIRECT;\");\n}\n\nfunction isProgrammaticNotFoundSignal(error: unknown): boolean {\n  if (!error || typeof error !== \"object\") return false;\n  const digest = (error as { digest?: unknown }).digest;\n  return digest === \"FARM_NOT_FOUND\";\n}\n\nasync function resolveProgrammaticRouteProps(\n  route: ProgrammaticPageRoute,\n  props: PageProps,\n): Promise<Record<string, any> & { __farmRoutePropsResolved: true }> {\n  const rawSearch = await props.searchParams;\n  const params = parseProgrammaticSchema(route.params, props.params, \"params\", route.path);\n  const { search, canonicalPath } = resolveProgrammaticRouteSearch(\n    route.search,\n    rawSearch,\n    props.path,\n    route.path,\n  );\n  const routeContextValue = getFarmRouteContext(props);\n  const pluginContext = props.context;\n  const baseProps = {\n    ...props,\n    params,\n    search,\n    searchParams: Promise.resolve(search),\n  };\n  const routeContextProps = {\n    ...baseProps,\n    context: routeContextValue,\n    pluginContext,\n  };\n\n  if (route.guard) {\n    await route.guard(routeContextProps as any);\n  }\n\n  if (!route.data) {\n    return markProgrammaticRoutePropsResolved(addCanonicalPath(baseProps, canonicalPath));\n  }\n\n  const before = route.data.before ? await route.data.before(routeContextProps as any) : undefined;\n  const dataContext = {\n    ...(routeContextProps as any),\n    before,\n  };\n  const data = await resolveProgrammaticRouteData(route, route.data, dataContext);\n\n  if (route.data.after) {\n    await route.data.after({\n      ...(routeContextProps as any),\n      before,\n      data,\n    });\n  }\n\n  return markProgrammaticRoutePropsResolved({\n    ...baseProps,\n    data,\n    ...(canonicalPath ? { __farmCanonicalPath: canonicalPath } : {}),\n  });\n}\n\nasync function resolveProgrammaticRouteData(\n  route: ProgrammaticPageRoute,\n  dataHooks: ProgrammaticRouteDataHooks<any, any, any, any>,\n  context: ProgrammaticRouteDataCacheContext<any, any, any>,\n): Promise<unknown> {\n  if (!dataHooks?.key) {\n    return dataHooks.main(context);\n  }\n\n  const routeDataKey = await dataHooks.key(context);\n  if (routeDataKey == null) {\n    return dataHooks.main(context);\n  }\n\n  const cacheKey = createFarmCacheKey([\"route-data\", routeDataKey]);\n  const cacheOptions: FarmCacheOptions = {\n    tags: [\n      createRouteDataCacheTag(routeDataKey),\n      ...(await resolveProgrammaticRouteDataKeys(dataHooks.tags, context)),\n    ],\n    paths: [\n      ...(typeof context.path === \"string\" ? [context.path] : []),\n      ...(await resolveProgrammaticRouteDataKeys(dataHooks.paths, context)),\n    ],\n    revalidate: normalizeProgrammaticRouteStaleTime(dataHooks.staleTime),\n  };\n\n  return getFarmDataCache().getOrSet(cacheKey, () => dataHooks.main(context), cacheOptions);\n}\n\nasync function resolveProgrammaticRouteDataKeys(\n  input: ProgrammaticRouteDataCacheKeys<any, any, any> | undefined,\n  context: ProgrammaticRouteDataCacheContext<any, any, any>,\n): Promise<readonly string[]> {\n  if (!input) return [];\n  const value = typeof input === \"function\" ? await input(context) : input;\n  return value.filter((item) => typeof item === \"string\" && item.trim().length > 0);\n}\n\nfunction normalizeProgrammaticRouteStaleTime(\n  staleTime: ProgrammaticRouteDataStaleTime | undefined,\n): number | false | undefined {\n  if (staleTime === undefined) return undefined;\n  if (staleTime === false) return false;\n\n  if (typeof staleTime === \"number\") {\n    if (!Number.isFinite(staleTime) || staleTime <= 0) return undefined;\n    return Math.max(1, Math.ceil(staleTime / 1000));\n  }\n\n  const match = staleTime.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)$/);\n  if (!match) return undefined;\n\n  const value = Number(match[1]);\n  if (!Number.isFinite(value) || value <= 0) return undefined;\n\n  const unit = match[2];\n  const milliseconds =\n    unit === \"ms\"\n      ? value\n      : unit === \"s\"\n        ? value * 1000\n        : unit === \"m\"\n          ? value * 60000\n          : value * 3600000;\n\n  return Math.max(1, Math.ceil(milliseconds / 1000));\n}\n\nfunction isProgrammaticRoutePropsResolved(value: unknown): boolean {\n  return !!value && typeof value === \"object\" && (value as any).__farmRoutePropsResolved === true;\n}\n\nfunction markProgrammaticRoutePropsResolved<T extends Record<string, any>>(\n  props: T,\n): T & { __farmRoutePropsResolved: true } {\n  return {\n    ...props,\n    __farmRoutePropsResolved: true,\n  };\n}\n\nfunction addCanonicalPath<T extends Record<string, any>>(\n  props: T,\n  canonicalPath: string | undefined,\n): T {\n  return canonicalPath ? ({ ...props, __farmCanonicalPath: canonicalPath } as T) : props;\n}\n\nfunction stripProgrammaticRoutePropsMarker<TProps>(props: TProps): TProps {\n  if (!isProgrammaticRoutePropsResolved(props)) {\n    return props;\n  }\n\n  const {\n    __farmRoutePropsResolved,\n    __farmCanonicalPath,\n    __farmRoutePropsPromise,\n    ...componentProps\n  } = props as any;\n  return componentProps;\n}\n\nfunction parseProgrammaticSchema<TFallback>(\n  schema: ProgrammaticRouteSchema<any> | undefined,\n  value: TFallback,\n  label: string,\n  routePath: string,\n): unknown {\n  if (!schema) {\n    return value;\n  }\n\n  try {\n    return schema.parse(value);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(`Invalid ${label} for route \"${routePath}\": ${message}`);\n  }\n}\n\nfunction normalizeProgrammaticRoute(\n  route: ProgrammaticRouteDefinition,\n): ProgrammaticRouteDefinition {\n  if (route.kind === \"redirect\") {\n    return {\n      ...route,\n      source: normalizeRoutePath(route.source),\n    };\n  }\n\n  if (route.kind === \"api\") {\n    return {\n      ...route,\n      ...normalizeFarmRouteRuntimeConfig(route, `API route \"${route.path}\"`),\n      path: normalizeRoutePath(route.path),\n      methods: normalizeApiMethods(route.methods),\n    };\n  }\n\n  const routeActions = route.kind === \"page\" ? normalizeProgrammaticRouteActions(route) : undefined;\n\n  return {\n    ...route,\n    ...routeActions,\n    ...normalizeFarmRouteRuntimeConfig(\n      route,\n      `${route.kind === \"layout\" ? \"Layout\" : \"Route\"} \"${route.path}\"`,\n    ),\n    path: normalizeRoutePath(route.path),\n  };\n}\n\nfunction normalizeProgrammaticRouteActions(route: ProgrammaticPageRoute): {\n  actions?: ProgrammaticRouteActions;\n  defaultAction?: string;\n  action?: ProgrammaticRouteAction;\n} {\n  const entries = Object.entries(route.actions ?? {});\n\n  if (entries.length === 0) {\n    if (route.defaultAction !== undefined) {\n      throw new TypeError(\n        `Route \"${route.path}\" declares defaultAction without declaring any actions.`,\n      );\n    }\n    return {};\n  }\n\n  for (const [name, action] of entries) {\n    if (typeof action !== \"function\") {\n      throw new TypeError(`Route \"${route.path}\" action \"${name}\" must be a server function.`);\n    }\n  }\n\n  const defaultAction = route.defaultAction ?? entries[0]![0];\n  const actions = Object.freeze({ ...route.actions });\n  const action = actions[defaultAction];\n\n  if (!action) {\n    throw new TypeError(\n      `Route \"${route.path}\" defaultAction \"${defaultAction}\" does not match a declared action.`,\n    );\n  }\n\n  return {\n    actions,\n    defaultAction,\n    action,\n  };\n}\n\nfunction normalizeRoutePath(routePath: string): string {\n  const withSlash = routePath.startsWith(\"/\") ? routePath : `/${routePath}`;\n  const withoutTrailing = withSlash.length > 1 ? withSlash.replace(/\\/+$/, \"\") : withSlash;\n  return withoutTrailing || \"/\";\n}\n\nfunction normalizeApiMethods(\n  methods: Record<string, any>,\n): Partial<Record<ProgrammaticRouteMethod, any>> {\n  const normalized: Partial<Record<ProgrammaticRouteMethod, any>> = {};\n\n  for (const [method, handler] of Object.entries(methods)) {\n    const normalizedMethod = method.toUpperCase() as ProgrammaticRouteMethod;\n    if (handler && isProgrammaticRouteMethod(normalizedMethod)) {\n      normalized[normalizedMethod] = handler;\n    }\n  }\n\n  return normalized;\n}\n\nfunction isProgrammaticRouteMethod(method: string): method is ProgrammaticRouteMethod {\n  return (\n    method === \"GET\" ||\n    method === \"HEAD\" ||\n    method === \"QUERY\" ||\n    method === \"POST\" ||\n    method === \"PUT\" ||\n    method === \"DELETE\" ||\n    method === \"PATCH\" ||\n    method === \"OPTIONS\"\n  );\n}\n\nfunction normalizeStaticPaths(\n  routePath: string,\n  paths: readonly ProgrammaticStaticPath[],\n): Record<string, string>[] {\n  const dynamicSegments = parseProgrammaticRoutePath(routePath).segments.filter(\n    (segment) => segment.isDynamic,\n  );\n\n  return paths.map((entry) => {\n    if (typeof entry === \"string\" || Array.isArray(entry)) {\n      if (dynamicSegments.length !== 1) {\n        throw new Error(\n          `staticPaths for \"${routePath}\" must return objects when the route has ${dynamicSegments.length} dynamic params.`,\n        );\n      }\n\n      const value = Array.isArray(entry) ? entry.join(\"/\") : entry;\n      return { [dynamicSegments[0].segment]: String(value) };\n    }\n\n    return Object.fromEntries(\n      Object.entries(entry).map(([key, value]) => [\n        key,\n        Array.isArray(value) ? value.map(String).join(\"/\") : String(value),\n      ]),\n    );\n  });\n}\n","import { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { PROGRAMMATIC_ROUTE_FILE_NAMES, scanProgrammaticPagePaths } from \"./routes-shared\";\nimport type { ProgrammaticRouteManifest } from \"./routes\";\n\nexport interface LoadedProgrammaticRouteManifest {\n  filePath: string;\n  manifest: ProgrammaticRouteManifest;\n}\n\nexport async function loadProgrammaticRouteManifests(options: {\n  root: string;\n  srcDir?: string;\n  loadModule: (filePath: string) => Promise<Record<string, any>>;\n}): Promise<LoadedProgrammaticRouteManifest[]> {\n  const manifests: LoadedProgrammaticRouteManifest[] = [];\n  const routeFiles = findProgrammaticRouteFiles(options.root, options.srcDir);\n  if (routeFiles.length === 0) return manifests;\n\n  const { getProgrammaticRouteManifest } = await import(\"./routes\");\n\n  for (const filePath of routeFiles) {\n    const mod = await options.loadModule(filePath);\n    const manifest = getProgrammaticRouteManifest(mod);\n    if (manifest) {\n      manifests.push({ filePath, manifest });\n    }\n  }\n\n  return manifests;\n}\n\nexport function findProgrammaticRouteFiles(root: string, srcDir = \"src\"): string[] {\n  return findProgrammaticRouteFilesInDir(join(root, srcDir));\n}\n\nexport function findProgrammaticRouteFilesInDir(srcRoot: string): string[] {\n  const files: string[] = [];\n\n  for (const fileName of PROGRAMMATIC_ROUTE_FILE_NAMES) {\n    const filePath = join(srcRoot, fileName);\n    if (existsSync(filePath)) {\n      files.push(filePath);\n    }\n  }\n\n  return files;\n}\n\nexport async function discoverProgrammaticRoutePaths(\n  root: string,\n  srcDir = \"src\",\n): Promise<string[]> {\n  const paths = new Set<string>();\n  const files = new Set([\n    ...findProgrammaticRouteFiles(root, srcDir),\n    ...(await findProgrammaticRouteSourceFiles(join(root, srcDir))),\n  ]);\n\n  for (const filePath of files) {\n    const source = readFileSync(filePath, \"utf8\");\n    for (const routePath of scanProgrammaticPagePaths(source)) {\n      paths.add(routePath);\n    }\n  }\n\n  return Array.from(paths).sort();\n}\n\nasync function findProgrammaticRouteSourceFiles(srcRoot: string): Promise<string[]> {\n  if (!existsSync(srcRoot)) {\n    return [];\n  }\n\n  try {\n    const glob = await import(\"fast-glob\");\n    return await glob.default(\"**/*.{ts,tsx,js,jsx}\", {\n      cwd: srcRoot,\n      absolute: true,\n      ignore: [\n        \"**/*.d.ts\",\n        \"**/node_modules/**\",\n        \"**/.*/**\",\n        \"farm-routes.d.ts\",\n        \"farm-env.d.ts\",\n        \"lib/api.generated.ts\",\n      ],\n    });\n  } catch {\n    return [];\n  }\n}\n","import { readFile } from \"fs/promises\";\nimport path from \"path\";\nimport { pathToFileURL } from \"url\";\nimport type { Metadata, RouteModule } from \"./types\";\nimport type { ComponentType } from \"react\";\nimport { requestAcceptsMarkdown } from \"./markdown\";\nimport {\n  resolveMdxConfig,\n  type FarmMdxComponents,\n  type FarmMdxResolvedConfig,\n} from \"./app-markdown-config\";\nexport {\n  resolveMdxConfig,\n  type FarmMdxComponent,\n  type FarmMdxComponents,\n  type FarmMdxResolvedConfig,\n  type FarmMdxUserConfig,\n} from \"./app-markdown-config\";\n\nexport interface FarmMarkdownPageSource {\n  source: string;\n  filePath: string;\n}\n\nexport interface FarmMarkdownPageModuleInput extends FarmMarkdownPageSource {\n  components?: FarmMdxComponents;\n  config?: FarmMdxResolvedConfig;\n}\n\nexport function isFarmMarkdownPageFile(filePath: string): boolean {\n  return /(^|[/\\\\])page\\.mdx?$/i.test(filePath);\n}\n\n/** Content type for Markdown responses, including agent-facing error bodies. */\nexport const FARM_MARKDOWN_CONTENT_TYPE = \"text/markdown; charset=utf-8\";\n\n/**\n * True when the client asked for Markdown — either via a `.md` path or an\n * `Accept: text/markdown` header. Used to serve a Markdown error body to agents\n * that navigate in Markdown, instead of the HTML error shell.\n */\nexport function farmRequestWantsMarkdown(\n  pathname: string,\n  accept: string | null | undefined,\n): boolean {\n  return pathname.toLowerCase().endsWith(\".md\") || requestAcceptsMarkdown(accept);\n}\n\n/**\n * A Markdown error document for agents that requested Markdown but hit an error\n * (typically a 404). Includes a short explanation and a link back to the site so\n * an agent can recover, satisfying the \"Markdown error body\" agent-readiness\n * expectation.\n */\nexport function createFarmMarkdownErrorBody(\n  status: number,\n  pathname: string,\n  homeHref = \"/\",\n): string {\n  const heading = status === 404 ? \"Page not found\" : `Request failed (${status})`;\n  return (\n    `# ${heading}\\n\\n` +\n    `No page is available at \\`${pathname}\\`. The URL may be incorrect, ` +\n    `or the page has not been published.\\n\\n` +\n    `Browse [the site homepage](${homeHref}) to find available pages.\\n`\n  );\n}\n\nexport function normalizeFarmMarkdownRoutePath(pathname: string): string {\n  const withoutExtension = pathname.replace(/\\.md$/i, \"\");\n  const normalized = withoutExtension.startsWith(\"/\") ? withoutExtension : `/${withoutExtension}`;\n  return normalized === \"/index\" ? \"/\" : normalized.replace(/\\/+$/g, \"\") || \"/\";\n}\n\nexport function parseMarkdownFrontmatter(source: string): {\n  frontmatter: Record<string, string>;\n  body: string;\n} {\n  if (!source.startsWith(\"---\")) {\n    return { frontmatter: {}, body: source };\n  }\n\n  const endIndex = source.indexOf(\"\\n---\", 3);\n  if (endIndex === -1) {\n    return { frontmatter: {}, body: source };\n  }\n\n  const frontmatterSource = source.slice(3, endIndex).trim();\n  const closingFenceEnd = endIndex + \"\\n---\".length;\n  const bodyStart =\n    source.slice(closingFenceEnd, closingFenceEnd + 2) === \"\\r\\n\"\n      ? closingFenceEnd + 2\n      : source[closingFenceEnd] === \"\\n\"\n        ? closingFenceEnd + 1\n        : closingFenceEnd;\n  const body = source.slice(bodyStart);\n  const frontmatter: Record<string, string> = {};\n\n  for (const line of frontmatterSource.split(/\\r?\\n/)) {\n    const separator = line.indexOf(\":\");\n    if (separator === -1) continue;\n    const key = line.slice(0, separator).trim();\n    const value = line\n      .slice(separator + 1)\n      .trim()\n      .replace(/^[\"']|[\"']$/g, \"\");\n    if (key && value) frontmatter[key] = value;\n  }\n\n  return { frontmatter, body };\n}\n\nexport function titleFromMarkdown(body: string, fallback?: string): string | undefined {\n  return body.match(/^#\\s+(.+)$/m)?.[1]?.trim() || fallback;\n}\n\nexport function createMarkdownMetadata(\n  source: string,\n  filePath: string,\n): (Metadata & Record<string, any>) | undefined {\n  const { frontmatter, body } = parseMarkdownFrontmatter(source);\n  const routeTitle = titleFromMarkdown(body);\n  const title = frontmatter.title || routeTitle;\n  const description = frontmatter.description;\n\n  if (!title && !description) {\n    return undefined;\n  }\n\n  return {\n    ...(title ? { title } : {}),\n    ...(description ? { description } : {}),\n    source: filePath,\n  };\n}\n\nasync function evaluateMdxSource(source: string, filePath: string) {\n  const [{ evaluate }, runtime, remarkGfmModule] = await Promise.all([\n    import(\"@mdx-js/mdx\"),\n    import(\"react/jsx-runtime\"),\n    import(\"remark-gfm\"),\n  ]);\n  const remarkGfm = remarkGfmModule.default;\n\n  return evaluate(source, {\n    ...runtime,\n    baseUrl: pathToFileURL(filePath),\n    remarkPlugins: [remarkGfm],\n  });\n}\n\nexport function createFarmMarkdownRouteModule(\n  input: FarmMarkdownPageModuleInput,\n): RouteModule & { source: string } {\n  const { body } = parseMarkdownFrontmatter(input.source);\n  const components = input.components || {};\n  const className = input.config?.className || \"farm-markdown\";\n  let evaluatedPromise: Promise<{ default: ComponentType<any> }> | undefined;\n\n  const loadContent = async () => {\n    evaluatedPromise ??= evaluateMdxSource(body, input.filePath) as Promise<{\n      default: ComponentType<any>;\n    }>;\n    return evaluatedPromise;\n  };\n\n  async function FarmMarkdownPage(props: any) {\n    const { createElement } = await import(\"react\");\n    const evaluated = await loadContent();\n    const MDXContent = evaluated.default;\n    return createElement(\n      \"article\",\n      { className, \"data-farm-markdown-page\": \"\" },\n      createElement(MDXContent, {\n        ...props,\n        components: {\n          ...components,\n          ...props?.components,\n        },\n      }),\n    );\n  }\n\n  return {\n    default: FarmMarkdownPage as unknown as RouteModule[\"default\"],\n    metadata: createMarkdownMetadata(input.source, input.filePath),\n    source: input.source,\n  };\n}\n\nexport async function createFarmMarkdownRouteModuleFromFile(\n  filePath: string,\n  options: {\n    components?: FarmMdxComponents;\n    config?: FarmMdxResolvedConfig;\n  } = {},\n) {\n  const source = await readFile(filePath, \"utf8\");\n  return createFarmMarkdownRouteModule({\n    source,\n    filePath,\n    components: options.components,\n    config: options.config,\n  });\n}\n\nexport async function loadFarmMdxComponents(\n  config: FarmMdxResolvedConfig | undefined,\n  options: {\n    root: string;\n    loadModule?: (modulePath: string) => Promise<unknown>;\n  },\n): Promise<FarmMdxComponents> {\n  const configured = config?.components;\n  if (!configured) {\n    return {};\n  }\n\n  if (typeof configured !== \"string\") {\n    return configured;\n  }\n\n  const modulePath = path.isAbsolute(configured) ? configured : path.join(options.root, configured);\n  const mod = options.loadModule\n    ? await options.loadModule(modulePath)\n    : await import(pathToFileURL(modulePath).href);\n  const maybeModule = mod as {\n    components?: FarmMdxComponents;\n    default?: FarmMdxComponents;\n  };\n\n  return maybeModule.components || maybeModule.default || {};\n}\n\nexport async function createFarmMarkdownSourceResponse(options: {\n  request: Request;\n  config?: FarmMdxResolvedConfig;\n  resolveSource: (\n    pathname: string,\n  ) => Promise<FarmMarkdownPageSource | null> | FarmMarkdownPageSource | null;\n}): Promise<Response | null> {\n  if (options.request.method !== \"GET\" && options.request.method !== \"HEAD\") {\n    return null;\n  }\n  if (options.config?.markdownRoutes === false) {\n    return null;\n  }\n\n  const url = new URL(options.request.url);\n  const hasMarkdownExtension = url.pathname.toLowerCase().endsWith(\".md\");\n  if (!hasMarkdownExtension && !requestAcceptsMarkdown(options.request.headers.get(\"accept\"))) {\n    return null;\n  }\n\n  const targetPathname = normalizeFarmMarkdownRoutePath(url.pathname);\n  const source = await options.resolveSource(targetPathname);\n  if (!source) {\n    return null;\n  }\n\n  const headers = new Headers({\n    \"Content-Type\": \"text/markdown; charset=utf-8\",\n    \"Content-Location\": targetPathname === \"/\" ? \"/index.md\" : `${targetPathname}.md`,\n    \"Cache-Control\": \"public, s-maxage=60, stale-while-revalidate=300\",\n    \"X-Farm-Markdown-Route\": targetPathname,\n    \"X-Farm-Markdown-Source\": source.filePath,\n  });\n  if (!hasMarkdownExtension) {\n    headers.set(\"Vary\", \"Accept\");\n  }\n\n  return new Response(options.request.method === \"HEAD\" ? null : source.source, {\n    status: 200,\n    headers,\n  });\n}\n","/**\n * Controls when Farm loads and hydrates a server-rendered client boundary.\n *\n * `load` is the compatibility-first default. The deferred strategies keep the\n * server-rendered HTML visible while postponing the boundary's JavaScript.\n */\nexport type FarmIslandStrategy = \"load\" | \"interaction\" | \"visible\" | \"idle\";\n\nexport const FARM_ISLAND_STRATEGIES = [\"load\", \"interaction\", \"visible\", \"idle\"] as const;\n\nexport function isFarmIslandStrategy(value: unknown): value is FarmIslandStrategy {\n  return FARM_ISLAND_STRATEGIES.includes(value as FarmIslandStrategy);\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { isFarmIslandStrategy, type FarmIslandStrategy } from \"../island\";\nimport type { FarmIsolatedClientHydrationMode } from \"../types\";\n\nfunction readIfExists(filePath: string): string | null {\n  try {\n    if (!filePath || !fs.existsSync(filePath)) {\n      return null;\n    }\n    return fs.readFileSync(filePath, \"utf-8\");\n  } catch {\n    return null;\n  }\n}\n\nexport function resolveModuleSourcePath(modulePath: string, root?: string): string | null {\n  const candidates = new Set<string>();\n  const withoutQuery = modulePath.split(\"?\")[0];\n\n  if (modulePath) {\n    candidates.add(modulePath);\n    candidates.add(withoutQuery);\n\n    if (modulePath.startsWith(\"file://\")) {\n      try {\n        candidates.add(fileURLToPath(modulePath));\n      } catch {\n        // ignore invalid file urls\n      }\n    }\n\n    if (modulePath.startsWith(\"/@fs/\")) {\n      // Vite emits /@fs/C:/... on Windows, where the leading slash is not part of the path.\n      const fsPath = withoutQuery.slice(\"/@fs/\".length);\n      candidates.add(path.normalize(/^[A-Za-z]:/.test(fsPath) ? fsPath : `/${fsPath}`));\n    }\n  }\n\n  if (root && modulePath) {\n    const normalized = withoutQuery.replace(/^\\/+/, \"\");\n    candidates.add(path.join(root, normalized));\n    candidates.add(path.resolve(root, normalized));\n  }\n\n  if (withoutQuery?.startsWith(\"/src/\")) {\n    const normalized = withoutQuery.replace(/^\\/+/, \"\");\n    candidates.add(path.join(process.cwd(), normalized));\n    candidates.add(path.resolve(process.cwd(), normalized));\n  }\n\n  for (const candidate of candidates) {\n    if (fs.existsSync(candidate)) {\n      return candidate;\n    }\n  }\n\n  return null;\n}\n\nexport interface ClientModuleMetadata {\n  isClientComponent: boolean;\n  shouldHydrate: boolean;\n  islandStrategy: FarmIslandStrategy | null;\n  /**\n   * Set when the module would hydrate (client imports or an explicit hydrate\n   * export) but its default export is an async server component, which React\n   * cannot run in a client root. Hydration is suppressed so the\n   * server-rendered HTML stays intact instead of crashing to a blank page.\n   */\n  suppressedAsyncHydration?: true;\n}\n\nexport interface IsolatedClientBoundaryReference {\n  /** Absolute source path. Converted to a Vite URL only at the manifest edge. */\n  modulePath: string;\n  islandStrategy: FarmIslandStrategy;\n}\n\nexport interface ClientModuleHydrationPlan extends ClientModuleMetadata {\n  mode: FarmIsolatedClientHydrationMode;\n  legacyShouldHydrate: boolean;\n  legacyIslandStrategy: FarmIslandStrategy | null;\n  estimatedIsolatedRootCount: number;\n  isolatedHydrationEligible: boolean;\n  hasIsolatedClientBoundaries: boolean;\n  isolatedBoundaries: IsolatedClientBoundaryReference[];\n  costGuardExceeded?: true;\n  fallbackReason?: string;\n}\n\n/** @internal Largest measured statically bounded independent-root plan. */\nexport const FARM_ISOLATED_HYDRATION_MAX_BOUNDARIES = 4;\n\nfunction isolatedHydrationBoundaryLimit(): number {\n  const benchmarkRoot = process.env.FARM_INTERNAL_ISOLATED_HYDRATION_BENCHMARK_ROOT;\n  const benchmarkLimit = Number(process.env.FARM_INTERNAL_ISOLATED_HYDRATION_BENCHMARK_LIMIT);\n  const resolvedBenchmarkRoot = benchmarkRoot ? path.resolve(benchmarkRoot) : null;\n  const isBenchmarkFixture =\n    process.env.FARM_INTERNAL_BENCHMARK === \"isolated-hydration\" &&\n    resolvedBenchmarkRoot !== null &&\n    (process.cwd() === resolvedBenchmarkRoot ||\n      process.cwd().startsWith(`${resolvedBenchmarkRoot}${path.sep}`));\n  return isBenchmarkFixture &&\n    Number.isSafeInteger(benchmarkLimit) &&\n    benchmarkLimit > FARM_ISOLATED_HYDRATION_MAX_BOUNDARIES\n    ? benchmarkLimit\n    : FARM_ISOLATED_HYDRATION_MAX_BOUNDARIES;\n}\n\ninterface ParsedClientModuleMetadata {\n  isClientComponent: boolean;\n  hasHydrateExport: boolean;\n  islandStrategy: FarmIslandStrategy | null;\n}\n\nconst RESOLVABLE_SOURCE_EXTENSIONS = [\n  \".svelte\",\n  \".vue\",\n  \".tsx\",\n  \".ts\",\n  \".jsx\",\n  \".js\",\n  \".mts\",\n  \".mjs\",\n  \".cts\",\n  \".cjs\",\n] as const;\n\nexport function resolveFarmIsolatedClientHydrationMode(\n  mode: FarmIsolatedClientHydrationMode | undefined,\n  options: {\n    serverComponents?: boolean;\n    hasUnsupportedIntegrationProvider?: boolean;\n  } = {},\n): FarmIsolatedClientHydrationMode {\n  if (options.serverComponents) return \"off\";\n  if (mode === \"enabled\" && options.hasUnsupportedIntegrationProvider) return \"off\";\n  return mode ?? \"off\";\n}\n\nexport function hasUseClientDirective(content: string | null): boolean {\n  if (!content) {\n    return false;\n  }\n\n  // Fast path: directive at the very start of the file.\n  const normalized = content.trimStart();\n  if (normalized.startsWith(\"'use client'\") || normalized.startsWith('\"use client\"')) {\n    return true;\n  }\n  if (!normalized.includes(\"use client\")) {\n    return false;\n  }\n\n  // Directive-prologue semantics allow comments and other directives (e.g.\n  // \"use strict\") before \"use client\". Scan the leading string-literal\n  // statements with the comment-aware tokenizer.\n  for (const token of tokenizeModuleSource(content)) {\n    if (token.kind === \"string\") {\n      if (token.value === \"use client\") {\n        return true;\n      }\n      continue;\n    }\n    if (token.kind === \"punctuation\" && token.value === \";\") {\n      continue;\n    }\n    return false;\n  }\n  return false;\n}\n\nexport function hasHydrateExport(content: string | null): boolean {\n  if (!content) {\n    return false;\n  }\n  if (/\\bexport\\s+const\\s+hydrate\\s*=\\s*true\\b/.test(content)) {\n    return true;\n  }\n  // Export lists may carry several specifiers and as-renames; the module\n  // opts in when any specifier's *exported* name is hydrate.\n  for (const match of content.matchAll(/\\bexport\\s*\\{([^}]*)\\}/g)) {\n    for (const specifier of match[1].split(\",\")) {\n      const parts = specifier.trim().split(/\\s+as\\s+/);\n      const exportedName = (parts[1] ?? parts[0])?.trim();\n      if (exportedName === \"hydrate\") {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\ninterface ModuleSourceToken {\n  kind: \"identifier\" | \"string\" | \"punctuation\";\n  value: string;\n  line: number;\n}\n\nconst REGEXP_PREFIX_PUNCTUATION = new Set([\n  \"(\",\n  \"[\",\n  \"{\",\n  \",\",\n  \";\",\n  \":\",\n  \"=\",\n  \"!\",\n  \"?\",\n  \"&\",\n  \"|\",\n  \"+\",\n  \"-\",\n  \"*\",\n  \"%\",\n  \"^\",\n  \"~\",\n  \">\",\n]);\nconst REGEXP_PREFIX_KEYWORDS = new Set([\n  \"await\",\n  \"case\",\n  \"delete\",\n  \"do\",\n  \"else\",\n  \"in\",\n  \"instanceof\",\n  \"new\",\n  \"of\",\n  \"return\",\n  \"throw\",\n  \"typeof\",\n  \"void\",\n  \"yield\",\n]);\n\nfunction canStartRegularExpression(previous: ModuleSourceToken | undefined): boolean {\n  if (!previous) return true;\n  return previous.kind === \"identifier\"\n    ? REGEXP_PREFIX_KEYWORDS.has(previous.value)\n    : REGEXP_PREFIX_PUNCTUATION.has(previous.value);\n}\n\nfunction skipRegularExpression(content: string, startIndex: number): number | null {\n  let index = startIndex + 1;\n  let inCharacterClass = false;\n\n  while (index < content.length) {\n    const character = content[index];\n    if (character === \"\\n\" || character === \"\\r\") return null;\n    if (character === \"\\\\\") {\n      index += 2;\n      continue;\n    }\n    if (character === \"[\") {\n      inCharacterClass = true;\n      index++;\n      continue;\n    }\n    if (character === \"]\" && inCharacterClass) {\n      inCharacterClass = false;\n      index++;\n      continue;\n    }\n    if (character === \"/\" && !inCharacterClass) {\n      index++;\n      while (index < content.length && /[A-Za-z]/.test(content[index])) index++;\n      return index;\n    }\n    index++;\n  }\n\n  return null;\n}\n\nfunction tokenizeModuleSource(content: string): ModuleSourceToken[] {\n  const tokens: ModuleSourceToken[] = [];\n  let index = 0;\n  let line = 1;\n\n  while (index < content.length) {\n    const character = content[index];\n    if (/\\s/.test(character)) {\n      if (character === \"\\n\") line++;\n      index++;\n      continue;\n    }\n\n    if (character === \"/\" && content[index + 1] === \"/\") {\n      index += 2;\n      while (index < content.length && content[index] !== \"\\n\") index++;\n      continue;\n    }\n    if (character === \"/\" && content[index + 1] === \"*\") {\n      index += 2;\n      while (index < content.length) {\n        if (content[index] === \"\\n\") line++;\n        if (content[index] === \"*\" && content[index + 1] === \"/\") {\n          index += 2;\n          break;\n        }\n        index++;\n      }\n      continue;\n    }\n\n    if (character === \"/\" && canStartRegularExpression(tokens[tokens.length - 1])) {\n      const endIndex = skipRegularExpression(content, index);\n      if (endIndex !== null) {\n        index = endIndex;\n        continue;\n      }\n    }\n\n    if (character === '\"' || character === \"'\") {\n      const quote = character;\n      const tokenLine = line;\n      let value = \"\";\n      index++;\n      while (index < content.length) {\n        const next = content[index];\n        if (next === \"\\\\\") {\n          value += next;\n          if (index + 1 < content.length) value += content[index + 1];\n          index += 2;\n          continue;\n        }\n        if (next === quote) {\n          index++;\n          break;\n        }\n        if (next === \"\\n\") line++;\n        value += next;\n        index++;\n      }\n      tokens.push({ kind: \"string\", value, line: tokenLine });\n      continue;\n    }\n\n    if (character === \"`\") {\n      index++;\n      while (index < content.length) {\n        const next = content[index];\n        if (next === \"\\\\\") {\n          index += 2;\n          continue;\n        }\n        if (next === \"`\") {\n          index++;\n          break;\n        }\n        if (next === \"\\n\") line++;\n        index++;\n      }\n      continue;\n    }\n\n    if (/[A-Za-z_$]/.test(character)) {\n      const start = index++;\n      while (index < content.length && /[\\w$]/.test(content[index])) index++;\n      tokens.push({ kind: \"identifier\", value: content.slice(start, index), line });\n      continue;\n    }\n\n    tokens.push({ kind: \"punctuation\", value: character, line });\n    index++;\n  }\n\n  return tokens;\n}\n\nfunction isIslandExportStart(tokens: ModuleSourceToken[], index: number): boolean {\n  const token = tokens[index];\n  const previous = tokens[index - 1];\n  const startsStatement =\n    !previous ||\n    previous.value === \";\" ||\n    previous.value === \"{\" ||\n    previous.value === \"}\" ||\n    token.line > previous.line;\n  return (\n    startsStatement &&\n    token.value === \"export\" &&\n    tokens[index + 1]?.value === \"const\" &&\n    tokens[index + 2]?.value === \"island\"\n  );\n}\n\nexport function getIslandStrategyExport(content: string | null): FarmIslandStrategy | null {\n  if (!content) return null;\n\n  const tokens = tokenizeModuleSource(content);\n  for (let index = 0; index < tokens.length - 2; index++) {\n    if (!isIslandExportStart(tokens, index)) continue;\n\n    let valueIndex = index + 3;\n    if (tokens[valueIndex]?.value === \":\") {\n      while (valueIndex < tokens.length && tokens[valueIndex].value !== \"=\") valueIndex++;\n    }\n    if (tokens[valueIndex]?.value !== \"=\") break;\n    valueIndex++;\n\n    const literal = tokens[valueIndex];\n    if (!literal || literal.kind !== \"string\" || !isFarmIslandStrategy(literal.value)) break;\n\n    let trailingIndex = valueIndex + 1;\n    if (tokens[trailingIndex]?.value === \"as\" && tokens[trailingIndex + 1]?.value === \"const\") {\n      trailingIndex += 2;\n    }\n    const trailing = tokens[trailingIndex];\n    if (trailing && trailing.value !== \";\" && trailing.line === literal.line) break;\n    return literal.value;\n  }\n\n  if (tokens.some((_token, index) => isIslandExportStart(tokens, index))) {\n    throw new Error(\n      'Farm island configuration must be a static \"load\", \"interaction\", \"visible\", or \"idle\" string literal.',\n    );\n  }\n\n  return null;\n}\n\nexport function stripUseClientDirective(content: string): string {\n  // Comments (and other directives) may precede \"use client\"; keep them and\n  // remove only the directive itself.\n  return content.replace(\n    /^((?:\\s|\\/\\/[^\\n]*(?:\\n|$)|\\/\\*[\\s\\S]*?\\*\\/|(?:\"[^\"\\n]*\"|'[^'\\n]*')\\s*;?)*)([\"'])use client\\2\\s*;?\\s*/,\n    \"$1\",\n  );\n}\n\n/**\n * Best-effort static detection of an async default export, e.g.\n * `export default async function Page() {}`. Covers direct async\n * function/arrow default exports and `export default X` where `X` is a local\n * `async function X` or `X = async ...` declaration. Wrapped exports such as\n * `export default withAuth(Page)` cannot be resolved statically; the client\n * runtime guards against those at hydration time.\n */\nexport function hasAsyncDefaultExport(content: string | null): boolean {\n  if (!content) return false;\n\n  const tokens = tokenizeModuleSource(content);\n  for (let index = 0; index < tokens.length - 2; index++) {\n    const token = tokens[index];\n    if (token.kind !== \"identifier\" || token.value !== \"export\") continue;\n    if (tokens[index - 1]?.value === \".\") continue;\n    if (tokens[index + 1]?.value !== \"default\") continue;\n\n    const exported = tokens[index + 2];\n    if (exported.kind === \"identifier\" && exported.value === \"async\") {\n      return true;\n    }\n    if (\n      exported.kind === \"identifier\" &&\n      ![\"function\", \"class\"].includes(exported.value) &&\n      tokens[index + 3]?.value !== \"(\" &&\n      isAsyncLocalDeclaration(tokens, exported.value)\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isAsyncLocalDeclaration(tokens: ModuleSourceToken[], name: string): boolean {\n  for (let index = 0; index < tokens.length - 2; index++) {\n    if (\n      tokens[index].value === \"async\" &&\n      tokens[index + 1]?.value === \"function\" &&\n      tokens[index + 2]?.value === name\n    ) {\n      return true;\n    }\n    if (\n      tokens[index].value === name &&\n      tokens[index + 1]?.value === \"=\" &&\n      tokens[index + 2]?.value === \"async\"\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction parseClientModuleMetadata(\n  content: string | null,\n  inspectIslandExport: boolean,\n): ParsedClientModuleMetadata {\n  if (!content) {\n    return {\n      isClientComponent: false,\n      hasHydrateExport: false,\n      islandStrategy: null,\n    };\n  }\n\n  const isClientComponent = hasUseClientDirective(content);\n  const hasHydrate = hasHydrateExport(content);\n  return {\n    isClientComponent,\n    hasHydrateExport: hasHydrate,\n    islandStrategy:\n      inspectIslandExport || isClientComponent || hasHydrate\n        ? getIslandStrategyExport(content)\n        : null,\n  };\n}\n\nexport function getClientModuleMetadata(modulePath: string, root?: string): ClientModuleMetadata {\n  const resolvedPath = resolveModuleSourcePath(modulePath, root);\n  return inspectClientModuleMetadata(resolvedPath, root, new Set(), true);\n}\n\n/**\n * Resolve hydration ownership without changing the legacy metadata contract.\n * The old metadata remains the conservative fallback; only an enabled and\n * completely supported graph moves ownership to leaf client modules.\n */\nexport function getClientModuleHydrationPlan(\n  modulePath: string,\n  root: string | undefined,\n  mode: FarmIsolatedClientHydrationMode = \"off\",\n): ClientModuleHydrationPlan {\n  const metadata = getClientModuleMetadata(modulePath, root);\n  const resolvedPath = resolveModuleSourcePath(modulePath, root);\n  const content = readIfExists(resolvedPath ?? \"\");\n  const parsed = parseClientModuleMetadata(content, true);\n  const emptyPlan = (\n    fallbackReason?: string,\n    costGuardExceeded = false,\n    estimatedIsolatedRootCount = 0,\n  ): ClientModuleHydrationPlan => ({\n    ...metadata,\n    mode,\n    legacyShouldHydrate: metadata.shouldHydrate,\n    legacyIslandStrategy: metadata.islandStrategy,\n    estimatedIsolatedRootCount,\n    isolatedHydrationEligible: false,\n    hasIsolatedClientBoundaries: false,\n    isolatedBoundaries: [],\n    ...(costGuardExceeded ? { costGuardExceeded: true as const } : {}),\n    ...(fallbackReason ? { fallbackReason } : {}),\n  });\n\n  if (mode === \"off\") return emptyPlan();\n  if (!resolvedPath) return emptyPlan(\"the owner source could not be resolved\");\n  if (parsed.isClientComponent) {\n    return emptyPlan(\"the owner is already a client component\");\n  }\n  if (parsed.hasHydrateExport) {\n    return emptyPlan(\"the owner explicitly exports `hydrate = true`\");\n  }\n\n  const inspection = collectIsolatedClientBoundaries(resolvedPath, root);\n  if (inspection.boundaries.length === 0) {\n    return emptyPlan(inspection.fallbackReason);\n  }\n  if (inspection.fallbackReason) {\n    return emptyPlan(\n      inspection.fallbackReason,\n      inspection.costGuardExceeded,\n      inspection.estimatedBoundaryCount,\n    );\n  }\n  const boundaryLimit = isolatedHydrationBoundaryLimit();\n  if (inspection.estimatedBoundaryCount > boundaryLimit) {\n    return emptyPlan(\n      `the client graph can create ${inspection.estimatedBoundaryCount} isolated roots, above the measured limit of ${boundaryLimit}`,\n      true,\n      inspection.estimatedBoundaryCount,\n    );\n  }\n\n  const enabled = mode === \"enabled\";\n  return {\n    ...metadata,\n    shouldHydrate: enabled ? false : metadata.shouldHydrate,\n    islandStrategy: enabled ? null : metadata.islandStrategy,\n    mode,\n    legacyShouldHydrate: metadata.shouldHydrate,\n    legacyIslandStrategy: metadata.islandStrategy,\n    estimatedIsolatedRootCount: inspection.estimatedBoundaryCount,\n    isolatedHydrationEligible: true,\n    hasIsolatedClientBoundaries: enabled,\n    isolatedBoundaries: inspection.boundaries,\n  };\n}\n\ninterface FarmIsolatedHydrationRoutePlan {\n  mode: FarmIsolatedClientHydrationMode;\n  shouldHydrate: boolean;\n  islandStrategy: FarmIslandStrategy | null;\n  legacyShouldHydrate: boolean;\n  legacyIslandStrategy: FarmIslandStrategy | null;\n  estimatedIsolatedRootCount: number;\n  hasIsolatedClientBoundaries: boolean;\n  isolatedBoundaries: IsolatedClientBoundaryReference[];\n  costGuardExceeded?: true;\n  fallbackReason?: string;\n}\n\ninterface FarmIsolatedHydrationRouteOwner {\n  pattern: string;\n  depth: number;\n  metadata: FarmIsolatedHydrationRoutePlan;\n}\n\nfunction restoreRouteWideHydration(\n  metadata: FarmIsolatedHydrationRoutePlan,\n  fallbackReason?: string,\n): void {\n  metadata.shouldHydrate = metadata.legacyShouldHydrate;\n  metadata.islandStrategy = metadata.legacyIslandStrategy;\n  metadata.hasIsolatedClientBoundaries = false;\n  metadata.isolatedBoundaries = [];\n  if (fallbackReason) {\n    metadata.costGuardExceeded = true;\n    metadata.fallbackReason = fallbackReason;\n  }\n}\n\n/** @internal Applies the measured root budget to each complete layout and page chain. */\nexport function enforceFarmIsolatedHydrationRouteBudget(\n  layouts: FarmIsolatedHydrationRouteOwner[],\n  routes: FarmIsolatedHydrationRouteOwner[],\n  layoutAppliesToRoute: (layoutPattern: string, routePattern: string) => boolean,\n): void {\n  const boundaryLimit = isolatedHydrationBoundaryLimit();\n  const sortedLayouts = [...layouts].sort((left, right) => left.depth - right.depth);\n\n  for (const route of routes) {\n    if (route.metadata.mode !== \"enabled\") continue;\n    const applicableLayouts = sortedLayouts.filter((layout) =>\n      layoutAppliesToRoute(layout.pattern, route.pattern),\n    );\n    if (applicableLayouts.some((layout) => layout.metadata.shouldHydrate)) continue;\n\n    const layoutRootCount = applicableLayouts.reduce(\n      (count, layout) =>\n        count +\n        (layout.metadata.hasIsolatedClientBoundaries\n          ? layout.metadata.estimatedIsolatedRootCount\n          : 0),\n      0,\n    );\n    const routeRootCount = route.metadata.hasIsolatedClientBoundaries\n      ? route.metadata.estimatedIsolatedRootCount\n      : 0;\n    const totalRootCount = layoutRootCount + routeRootCount;\n    if (totalRootCount <= boundaryLimit) continue;\n\n    let accumulatedLayoutRoots = 0;\n    const overflowingLayout = applicableLayouts.find((layout) => {\n      if (layout.metadata.hasIsolatedClientBoundaries) {\n        accumulatedLayoutRoots += layout.metadata.estimatedIsolatedRootCount;\n      }\n      return accumulatedLayoutRoots > boundaryLimit;\n    });\n    const fallbackReason = `the matched route ${route.pattern} can create ${totalRootCount} isolated roots, above the measured limit of ${boundaryLimit}`;\n\n    if (overflowingLayout) {\n      restoreRouteWideHydration(overflowingLayout.metadata, fallbackReason);\n    } else if (route.metadata.hasIsolatedClientBoundaries) {\n      restoreRouteWideHydration(route.metadata, fallbackReason);\n    }\n  }\n\n  for (const layout of sortedLayouts) {\n    const hasRouteWideAncestor = sortedLayouts.some(\n      (ancestor) =>\n        ancestor !== layout &&\n        ancestor.depth < layout.depth &&\n        ancestor.metadata.shouldHydrate &&\n        layoutAppliesToRoute(ancestor.pattern, layout.pattern),\n    );\n    if (hasRouteWideAncestor && layout.metadata.hasIsolatedClientBoundaries) {\n      restoreRouteWideHydration(layout.metadata);\n    }\n  }\n\n  for (const route of routes) {\n    const hasRouteWideLayout = sortedLayouts.some(\n      (layout) =>\n        layout.metadata.shouldHydrate && layoutAppliesToRoute(layout.pattern, route.pattern),\n    );\n    if (hasRouteWideLayout && route.metadata.hasIsolatedClientBoundaries) {\n      restoreRouteWideHydration(route.metadata);\n    }\n  }\n}\n\n/**\n * The first compiler pass intentionally accepts only statically named React\n * component exports. A rejected module retains route-wide hydration.\n */\nexport function isIsolatableClientBoundarySource(content: string | null): boolean {\n  if (!content || !hasUseClientDirective(content)) return false;\n  if (/\\bexport\\s*\\{/.test(content) || /\\bexport\\s*\\*/.test(content)) return false;\n  return (\n    /\\bexport\\s+default\\s+(?!(?:type|interface)\\b)/.test(content) ||\n    /\\bexport\\s+(?:async\\s+)?function\\s+[A-Z][$\\w]*/.test(content) ||\n    /\\bexport\\s+(?:const|let|var|class)\\s+[A-Z][$\\w]*/.test(content)\n  );\n}\n\nfunction getStaticImportBindings(content: string | null): Map<string, string[]> {\n  const bindings = new Map<string, string[]>();\n  if (!content) return bindings;\n  const tokens = tokenizeModuleSource(content);\n\n  for (let index = 0; index < tokens.length; index++) {\n    if (tokens[index].value !== \"import\" || tokens[index - 1]?.value === \".\") continue;\n    const first = tokens[index + 1];\n    if (!first || first.value === \"type\" || first.value === \"(\" || first.kind === \"string\") {\n      continue;\n    }\n\n    let fromIndex = -1;\n    for (let cursor = index + 1; cursor < tokens.length; cursor++) {\n      if (tokens[cursor].value === \";\") break;\n      if (tokens[cursor].value === \"from\" && tokens[cursor + 1]?.kind === \"string\") {\n        fromIndex = cursor;\n        break;\n      }\n    }\n    if (fromIndex === -1) continue;\n    const specifier = tokens[fromIndex + 1].value;\n    const clause = tokens.slice(index + 1, fromIndex);\n    const localNames: string[] = [];\n\n    if (clause[0]?.kind === \"identifier\" && clause[0].value !== \"type\") {\n      localNames.push(clause[0].value);\n    }\n    const namespaceAs = clause.findIndex(\n      (token, clauseIndex) => token.value === \"*\" && clause[clauseIndex + 1]?.value === \"as\",\n    );\n    if (namespaceAs !== -1 && clause[namespaceAs + 2]?.kind === \"identifier\") {\n      localNames.push(clause[namespaceAs + 2].value);\n    }\n\n    const openingBrace = clause.findIndex((token) => token.value === \"{\");\n    const closingBrace = clause.findIndex(\n      (token, clauseIndex) => clauseIndex > openingBrace && token.value === \"}\",\n    );\n    if (openingBrace !== -1 && closingBrace !== -1) {\n      let entryStart = openingBrace + 1;\n      for (let cursor = entryStart; cursor <= closingBrace; cursor++) {\n        if (cursor !== closingBrace && clause[cursor]?.value !== \",\") continue;\n        const entry = clause.slice(entryStart, cursor).filter((token) => token.value !== \"type\");\n        const asIndex = entry.findIndex((token) => token.value === \"as\");\n        const local = asIndex === -1 ? entry[0] : entry[asIndex + 1];\n        if (local?.kind === \"identifier\") localNames.push(local.value);\n        entryStart = cursor + 1;\n      }\n    }\n\n    bindings.set(\n      specifier,\n      Array.from(new Set([...(bindings.get(specifier) ?? []), ...localNames])),\n    );\n  }\n\n  return bindings;\n}\n\n/**\n * Elements whose content model the HTML parser enforces. A boundary marker\n * emitted inside one of these is relocated or ignored before any script runs:\n * in a table the marker and its row are foster-parented out of the table, in a\n * select the options stop being direct children and the control renders empty,\n * and inside svg the marker is created in the SVG namespace as an unknown\n * element whose children never render. RFC 0001 requires these to take the\n * route-wide fallback.\n */\nconst PARSER_SENSITIVE_JSX_CONTAINERS = new Set([\n  \"table\",\n  \"thead\",\n  \"tbody\",\n  \"tfoot\",\n  \"tr\",\n  \"select\",\n  \"optgroup\",\n  \"svg\",\n]);\n\n/**\n * Names a parser-sensitive element that encloses a use of one of the bindings,\n * or undefined when every use is in ordinary flow content.\n *\n * Ambiguity resolves toward reporting a container: the caller turns a hit into\n * the complete route-wide fallback, which is always correct, while a miss would\n * leave the silent DOM corruption in place.\n */\nfunction findParserSensitiveJsxContainer(\n  content: string | null,\n  localBindings: string[],\n): string | undefined {\n  if (!content || localBindings.length === 0) return undefined;\n  const names = new Set(localBindings);\n  const tokens = tokenizeModuleSource(content);\n  const openDepth = new Map<string, number>();\n\n  const isSelfClosing = (openingIndex: number): boolean => {\n    for (let index = openingIndex; index < tokens.length; index++) {\n      if (tokens[index].value === \">\") return tokens[index - 1]?.value === \"/\";\n    }\n    return false;\n  };\n\n  for (let index = 0; index < tokens.length - 1; index++) {\n    if (tokens[index].value !== \"<\") continue;\n\n    if (tokens[index + 1].value === \"/\") {\n      const closing = tokens[index + 2]?.value;\n      if (closing && openDepth.has(closing)) {\n        openDepth.set(closing, Math.max(0, (openDepth.get(closing) ?? 0) - 1));\n      }\n      continue;\n    }\n\n    const tag = tokens[index + 1].value;\n    if (names.has(tag)) {\n      for (const [container, depth] of openDepth) {\n        if (depth > 0) return container;\n      }\n      continue;\n    }\n    if (PARSER_SENSITIVE_JSX_CONTAINERS.has(tag) && !isSelfClosing(index)) {\n      openDepth.set(tag, (openDepth.get(tag) ?? 0) + 1);\n    }\n  }\n\n  return undefined;\n}\n\nfunction countStaticJsxUses(content: string | null, localBindings: string[]): number {\n  if (!content || localBindings.length === 0) return 0;\n  const names = new Set(localBindings);\n  const tokens = tokenizeModuleSource(content);\n  let count = 0;\n  for (let index = 0; index < tokens.length - 1; index++) {\n    if (tokens[index].value === \"<\" && names.has(tokens[index + 1].value)) count++;\n  }\n  return count;\n}\n\nfunction findMatchingToken(\n  tokens: ModuleSourceToken[],\n  openingIndex: number,\n  opening: string,\n  closing: string,\n): number {\n  let depth = 0;\n  for (let index = openingIndex; index < tokens.length; index++) {\n    if (tokens[index].value === opening) depth++;\n    if (tokens[index].value !== closing) continue;\n    depth--;\n    if (depth === 0) return index;\n  }\n  return tokens.length - 1;\n}\n\nfunction containsClientJsx(\n  tokens: ModuleSourceToken[],\n  start: number,\n  end: number,\n  clientBindings: Set<string>,\n): boolean {\n  for (let index = start; index < end; index++) {\n    if (tokens[index].value === \"<\" && clientBindings.has(tokens[index + 1]?.value)) return true;\n  }\n  return false;\n}\n\nfunction findStatementEnd(tokens: ModuleSourceToken[], start: number): number {\n  let parentheses = 0;\n  let brackets = 0;\n  let braces = 0;\n  const statementStarters = new Set([\n    \"class\",\n    \"const\",\n    \"export\",\n    \"function\",\n    \"import\",\n    \"let\",\n    \"var\",\n  ]);\n  for (let index = start; index < tokens.length; index++) {\n    const value = tokens[index].value;\n    if (\n      index > start &&\n      parentheses === 0 &&\n      brackets === 0 &&\n      braces === 0 &&\n      tokens[index].line > tokens[index - 1].line &&\n      statementStarters.has(value)\n    ) {\n      return index;\n    }\n    if (value === \";\" && parentheses === 0 && brackets === 0 && braces === 0) return index;\n    if (value === \"(\") parentheses++;\n    if (value === \")\") parentheses--;\n    if (value === \"[\") brackets++;\n    if (value === \"]\") brackets--;\n    if (value === \"{\") braces++;\n    if (value === \"}\") braces--;\n  }\n  return tokens.length;\n}\n\nfunction getClientRenderingHelpers(\n  tokens: ModuleSourceToken[],\n  clientBindings: Set<string>,\n): Set<string> {\n  const helperBodies = new Map<string, [start: number, end: number]>();\n  for (let index = 0; index < tokens.length; index++) {\n    let helperName: string | undefined;\n    let bodyStart = -1;\n    let bodyEnd = -1;\n\n    if (tokens[index].value === \"function\" && tokens[index + 1]?.kind === \"identifier\") {\n      helperName = tokens[index + 1].value;\n      const parametersStart = tokens.findIndex(\n        (token, tokenIndex) => tokenIndex > index + 1 && token.value === \"(\",\n      );\n      const parametersEnd =\n        parametersStart === -1 ? index + 1 : findMatchingToken(tokens, parametersStart, \"(\", \")\");\n      bodyStart = tokens.findIndex(\n        (token, tokenIndex) => tokenIndex > parametersEnd && token.value === \"{\",\n      );\n      if (bodyStart !== -1) bodyEnd = findMatchingToken(tokens, bodyStart, \"{\", \"}\");\n    } else if (\n      (tokens[index].value === \"const\" ||\n        tokens[index].value === \"let\" ||\n        tokens[index].value === \"var\") &&\n      tokens[index + 1]?.kind === \"identifier\"\n    ) {\n      helperName = tokens[index + 1].value;\n      let assignmentIndex = -1;\n      let arrowIndex = -1;\n      for (let cursor = index + 2; cursor < tokens.length; cursor++) {\n        if (tokens[cursor].value === \";\") break;\n        if (assignmentIndex === -1 && tokens[cursor].value === \"=\") assignmentIndex = cursor;\n        if (tokens[cursor].value === \"=\" && tokens[cursor + 1]?.value === \">\") {\n          arrowIndex = cursor;\n          break;\n        }\n      }\n      if (arrowIndex !== -1) {\n        bodyStart = arrowIndex + 2;\n        bodyEnd =\n          tokens[bodyStart]?.value === \"{\"\n            ? findMatchingToken(tokens, bodyStart, \"{\", \"}\")\n            : findStatementEnd(tokens, bodyStart);\n      } else if (assignmentIndex !== -1) {\n        bodyStart = assignmentIndex + 1;\n        bodyEnd = findStatementEnd(tokens, bodyStart);\n      }\n    }\n\n    if (helperName && bodyStart !== -1 && bodyEnd !== -1) {\n      helperBodies.set(helperName, [bodyStart, bodyEnd]);\n    }\n  }\n\n  const helpers = new Set<string>();\n  let addedHelper = true;\n  while (addedHelper) {\n    addedHelper = false;\n    for (const [helperName, [bodyStart, bodyEnd]] of helperBodies) {\n      if (helpers.has(helperName)) continue;\n      const rendersClientBoundary =\n        containsClientJsx(tokens, bodyStart, bodyEnd, clientBindings) ||\n        tokens.slice(bodyStart, bodyEnd).some((token) => helpers.has(token.value));\n      if (!rendersClientBoundary) continue;\n      helpers.add(helperName);\n      addedHelper = true;\n    }\n  }\n  return helpers;\n}\n\n/**\n * True when a boundary is handed a React element, as JSX children or as an\n * element-valued prop.\n *\n * Boundary props cross to the browser as JSON, and an element cannot be\n * serialized. Without this check the SSR wrapper drops the marker for that\n * boundary and the component renders as ordinary server markup that nothing\n * ever hydrates, leaving an interactive-looking widget permanently dead with\n * no browser-visible diagnostic. String and number children serialize fine and\n * are deliberately not flagged.\n */\nfunction passesElementValuedProps(content: string | null, localBindings: string[]): boolean {\n  if (!content || localBindings.length === 0) return false;\n  const names = new Set(localBindings);\n  const tokens = tokenizeModuleSource(content);\n\n  for (let index = 0; index < tokens.length - 1; index++) {\n    if (tokens[index].value !== \"<\" || !names.has(tokens[index + 1].value)) continue;\n    const name = tokens[index + 1].value;\n\n    // Walk the opening tag, watching for an element inside an attribute\n    // expression such as icon={<Icon />}.\n    let cursor = index + 2;\n    let braceDepth = 0;\n    let selfClosing = false;\n    for (; cursor < tokens.length; cursor++) {\n      const value = tokens[cursor].value;\n      if (value === \"{\") braceDepth++;\n      else if (value === \"}\") braceDepth--;\n      else if (value === \"<\" && braceDepth > 0) return true;\n      else if (value === \">\" && braceDepth === 0) {\n        selfClosing = tokens[cursor - 1]?.value === \"/\";\n        break;\n      }\n    }\n    if (selfClosing || cursor >= tokens.length) continue;\n\n    // The first tag after the opening one decides it: the boundary's own\n    // closing tag means no element children, anything else is an element child.\n    for (let child = cursor + 1; child < tokens.length; child++) {\n      if (tokens[child].value !== \"<\") continue;\n      const closesBoundary = tokens[child + 1]?.value === \"/\" && tokens[child + 2]?.value === name;\n      if (!closesBoundary) return true;\n      break;\n    }\n  }\n\n  return false;\n}\n\nfunction hasDynamicJsxCardinality(content: string | null, localBindings: string[]): boolean {\n  if (!content || localBindings.length === 0) return false;\n  const clientBindings = new Set(localBindings);\n  const tokens = tokenizeModuleSource(content);\n  const renderingHelpers = getClientRenderingHelpers(tokens, clientBindings);\n  const containsDynamicRenderer = (start: number, end: number) =>\n    containsClientJsx(tokens, start, end, clientBindings) ||\n    tokens.slice(start, end).some((token) => renderingHelpers.has(token.value));\n\n  for (let index = 0; index < tokens.length; index++) {\n    let callStart = -1;\n    if (\n      tokens[index].value === \".\" &&\n      (tokens[index + 1]?.value === \"map\" || tokens[index + 1]?.value === \"flatMap\") &&\n      tokens[index + 2]?.value === \"(\"\n    ) {\n      callStart = index + 2;\n    } else if (\n      tokens[index].value === \"Array\" &&\n      tokens[index + 1]?.value === \".\" &&\n      tokens[index + 2]?.value === \"from\" &&\n      tokens[index + 3]?.value === \"(\"\n    ) {\n      callStart = index + 3;\n    }\n    if (callStart !== -1) {\n      const callEnd = findMatchingToken(tokens, callStart, \"(\", \")\");\n      if (containsDynamicRenderer(callStart + 1, callEnd)) return true;\n      index = callEnd;\n      continue;\n    }\n\n    if (\n      (tokens[index].value === \"for\" || tokens[index].value === \"while\") &&\n      tokens[index + 1]?.value === \"(\"\n    ) {\n      const conditionEnd = findMatchingToken(tokens, index + 1, \"(\", \")\");\n      const bodyStart = conditionEnd + 1;\n      const bodyEnd =\n        tokens[bodyStart]?.value === \"{\"\n          ? findMatchingToken(tokens, bodyStart, \"{\", \"}\")\n          : tokens.findIndex((token, tokenIndex) => tokenIndex > bodyStart && token.value === \";\");\n      if (containsDynamicRenderer(bodyStart, bodyEnd === -1 ? tokens.length : bodyEnd)) return true;\n    }\n  }\n\n  return false;\n}\n\nfunction collectIsolatedClientBoundaries(\n  ownerPath: string,\n  root: string | undefined,\n): {\n  boundaries: IsolatedClientBoundaryReference[];\n  estimatedBoundaryCount: number;\n  costGuardExceeded?: boolean;\n  fallbackReason?: string;\n} {\n  const boundaries = new Map<string, IsolatedClientBoundaryReference>();\n  const estimates = new Map<string, number>();\n  const visiting = new Set<string>();\n  let fallbackReason: string | undefined;\n  let costGuardExceeded = false;\n  const projectRoot = root ? path.resolve(root) : undefined;\n\n  const visit = (moduleSourcePath: string): number => {\n    if (fallbackReason) return 0;\n    const cached = estimates.get(moduleSourcePath);\n    if (cached !== undefined) return cached;\n    if (visiting.has(moduleSourcePath)) return 0;\n    visiting.add(moduleSourcePath);\n    const content = readIfExists(moduleSourcePath);\n    const parsed = parseClientModuleMetadata(content, false);\n\n    if (parsed.isClientComponent) {\n      if (projectRoot && !path.resolve(moduleSourcePath).startsWith(`${projectRoot}${path.sep}`)) {\n        fallbackReason = `client boundary ${moduleSourcePath} is outside the application root`;\n        return 0;\n      }\n      if (!isIsolatableClientBoundarySource(content)) {\n        fallbackReason = `client boundary ${moduleSourcePath} uses an unsupported export shape`;\n        return 0;\n      }\n      boundaries.set(moduleSourcePath, {\n        modulePath: moduleSourcePath,\n        islandStrategy: parsed.islandStrategy ?? \"load\",\n      });\n      estimates.set(moduleSourcePath, 1);\n      visiting.delete(moduleSourcePath);\n      return 1;\n    }\n\n    if (parsed.hasHydrateExport) {\n      fallbackReason = `imported module ${moduleSourcePath} explicitly exports hydrate = true`;\n      return 0;\n    }\n\n    const importedBindings = getStaticImportBindings(content);\n    let estimatedBoundaryCount = 0;\n    for (const specifier of new Set(getImportSpecifiers(content))) {\n      const importedPath = resolveImportedModuleSourcePath(moduleSourcePath, specifier, root);\n      if (!importedPath) continue;\n      if (!specifier.startsWith(\".\") && !specifier.startsWith(\"/\")) {\n        const packageMetadata = inspectPackageClientBoundary(importedPath, root, new Set());\n        if (packageMetadata.shouldHydrate) {\n          fallbackReason = `package client boundary ${specifier} cannot yet be isolated`;\n          return 0;\n        }\n        continue;\n      }\n      const importedBoundaryCount = visit(importedPath);\n      if (fallbackReason || importedBoundaryCount === 0) continue;\n      const localBindings = importedBindings.get(specifier) ?? [];\n      const staticUses = countStaticJsxUses(content, localBindings);\n      if (staticUses > 0) {\n        const container = findParserSensitiveJsxContainer(content, localBindings);\n        if (container) {\n          fallbackReason = `the client boundary imported from ${specifier} renders inside <${container}>, where the HTML parser relocates its hydration marker`;\n          return 0;\n        }\n        if (passesElementValuedProps(content, localBindings)) {\n          fallbackReason = `the client boundary imported from ${specifier} receives React elements, which cannot cross the boundary as serialized props`;\n          return 0;\n        }\n      }\n      if (staticUses > 0 && hasDynamicJsxCardinality(content, localBindings)) {\n        fallbackReason = `the client boundary count imported from ${specifier} is data-dependent`;\n        costGuardExceeded = true;\n        return 0;\n      }\n      estimatedBoundaryCount += importedBoundaryCount * Math.max(1, staticUses);\n    }\n\n    estimates.set(moduleSourcePath, estimatedBoundaryCount);\n    visiting.delete(moduleSourcePath);\n    return estimatedBoundaryCount;\n  };\n\n  const estimatedBoundaryCount = visit(ownerPath);\n  return {\n    boundaries: Array.from(boundaries.values()),\n    estimatedBoundaryCount,\n    costGuardExceeded,\n    fallbackReason,\n  };\n}\n\nexport function isClientComponentModule(modulePath: string, root?: string): boolean {\n  return getClientModuleMetadata(modulePath, root).isClientComponent;\n}\n\nexport function shouldHydrateModule(modulePath: string, root?: string): boolean {\n  return getClientModuleMetadata(modulePath, root).shouldHydrate;\n}\n\nfunction inspectClientModuleMetadata(\n  resolvedPath: string | null,\n  root: string | undefined,\n  visited: Set<string>,\n  inspectIslandExport: boolean,\n): ClientModuleMetadata {\n  if (!resolvedPath || visited.has(resolvedPath)) {\n    return {\n      isClientComponent: false,\n      shouldHydrate: false,\n      islandStrategy: null,\n    };\n  }\n\n  visited.add(resolvedPath);\n\n  const content = readIfExists(resolvedPath);\n  const parsed = parseClientModuleMetadata(content, inspectIslandExport);\n  if (parsed.isClientComponent) {\n    return {\n      isClientComponent: true,\n      shouldHydrate: true,\n      islandStrategy: parsed.islandStrategy ?? \"load\",\n    };\n  }\n\n  let importsClientBoundary = false;\n  let importedIslandStrategy: FarmIslandStrategy | null = null;\n  for (const specifier of getImportSpecifiers(content)) {\n    const importedPath = resolveImportedModuleSourcePath(resolvedPath, specifier, root);\n    const importedMetadata =\n      !specifier.startsWith(\".\") && !specifier.startsWith(\"/\")\n        ? inspectPackageClientBoundary(importedPath, root, visited)\n        : inspectClientModuleMetadata(importedPath, root, visited, false);\n    if (importedMetadata.isClientComponent || importedMetadata.shouldHydrate) {\n      importsClientBoundary = true;\n      if (importedIslandStrategy === null) {\n        importedIslandStrategy = importedMetadata.islandStrategy;\n      } else if (importedIslandStrategy !== importedMetadata.islandStrategy) {\n        // One route-level React root cannot honor multiple schedules safely.\n        // Fall back to eager hydration when its imported boundaries disagree.\n        importedIslandStrategy = \"load\";\n      }\n    }\n  }\n\n  const shouldHydrate = parsed.hasHydrateExport || importsClientBoundary;\n\n  // React cannot run an async component in a client root: hydrating the route\n  // module would throw, blank the server-rendered HTML, and re-run the page's\n  // data fetching in a loop. Keep async server pages server-only even when\n  // they import client components.\n  if (shouldHydrate && hasAsyncDefaultExport(content)) {\n    return {\n      isClientComponent: false,\n      shouldHydrate: false,\n      islandStrategy: null,\n      suppressedAsyncHydration: true,\n    };\n  }\n\n  return {\n    isClientComponent: false,\n    shouldHydrate,\n    islandStrategy: shouldHydrate\n      ? (parsed.islandStrategy ?? importedIslandStrategy ?? \"load\")\n      : null,\n  };\n}\n\nfunction inspectPackageClientBoundary(\n  resolvedPath: string | null,\n  root: string | undefined,\n  visited: Set<string>,\n): ClientModuleMetadata {\n  if (!resolvedPath || visited.has(resolvedPath)) {\n    return {\n      isClientComponent: false,\n      shouldHydrate: false,\n      islandStrategy: null,\n    };\n  }\n\n  visited.add(resolvedPath);\n  const content = readIfExists(resolvedPath);\n  const parsed = parseClientModuleMetadata(content, false);\n  let importsClientBoundary = false;\n  let importedIslandStrategy: FarmIslandStrategy | null = null;\n\n  // Package entry points commonly re-export their React implementation from a\n  // relative file. Follow only files inside that package entry graph: scanning\n  // bare dependencies here would incorrectly turn server package APIs into\n  // client boundaries because of unrelated transitive imports.\n  for (const specifier of getImportSpecifiers(content)) {\n    if (!specifier.startsWith(\".\") && !specifier.startsWith(\"/\")) continue;\n    const importedPath = resolveImportedModuleSourcePath(resolvedPath, specifier, root);\n    const importedMetadata = inspectPackageClientBoundary(importedPath, root, visited);\n    if (!importedMetadata.shouldHydrate) continue;\n    importsClientBoundary = true;\n    if (importedIslandStrategy === null) {\n      importedIslandStrategy = importedMetadata.islandStrategy;\n    } else if (importedIslandStrategy !== importedMetadata.islandStrategy) {\n      importedIslandStrategy = \"load\";\n    }\n  }\n\n  const shouldHydrate =\n    parsed.isClientComponent || parsed.hasHydrateExport || importsClientBoundary;\n  return {\n    isClientComponent: parsed.isClientComponent,\n    shouldHydrate,\n    islandStrategy: shouldHydrate\n      ? (parsed.islandStrategy ?? importedIslandStrategy ?? \"load\")\n      : null,\n  };\n}\n\nfunction getImportSpecifiers(content: string | null): string[] {\n  if (!content) return [];\n\n  const tokens = tokenizeModuleSource(content);\n  const matches = new Set<string>();\n  let braceDepth = 0;\n\n  for (let index = 0; index < tokens.length; index++) {\n    const keyword = tokens[index];\n    if (keyword.value === \"{\") {\n      braceDepth++;\n      continue;\n    }\n    if (keyword.value === \"}\") {\n      braceDepth = Math.max(0, braceDepth - 1);\n      continue;\n    }\n    if (braceDepth !== 0) continue;\n    if (keyword.kind !== \"identifier\" || ![\"import\", \"export\"].includes(keyword.value)) {\n      continue;\n    }\n\n    const previous = tokens[index - 1];\n    if (previous?.value === \".\") continue;\n\n    const first = tokens[index + 1];\n    if (!first || first.value === \"type\" || first.value === \"(\" || first.value === \".\") {\n      continue;\n    }\n\n    let specifier: string | undefined;\n    if (keyword.value === \"import\" && first.kind === \"string\") {\n      specifier = first.value;\n    } else {\n      if (keyword.value === \"export\" && first.value !== \"{\" && first.value !== \"*\") {\n        continue;\n      }\n\n      let fromIndex = -1;\n      for (let cursor = index + 1; cursor < tokens.length; cursor++) {\n        const token = tokens[cursor];\n        if (token.value === \";\") break;\n        if (token.value === \"from\" && tokens[cursor + 1]?.kind === \"string\") {\n          fromIndex = cursor;\n          break;\n        }\n      }\n      if (fromIndex === -1 || isTypeOnlyNamedClause(tokens, index + 1, fromIndex)) {\n        continue;\n      }\n      specifier = tokens[fromIndex + 1].value;\n    }\n\n    if (!specifier || specifier.startsWith(\"node:\") || specifier.includes(\"?\")) {\n      continue;\n    }\n    matches.add(specifier);\n  }\n\n  return Array.from(matches);\n}\n\nfunction isTypeOnlyNamedClause(\n  tokens: ModuleSourceToken[],\n  startIndex: number,\n  endIndex: number,\n): boolean {\n  if (tokens[startIndex]?.value !== \"{\") return false;\n\n  const closingBraceIndex = tokens.findIndex(\n    (token, index) => index > startIndex && index < endIndex && token.value === \"}\",\n  );\n  if (closingBraceIndex === -1) return false;\n\n  let entryStartsAt = startIndex + 1;\n  for (let index = entryStartsAt; index <= closingBraceIndex; index++) {\n    if (index !== closingBraceIndex && tokens[index]?.value !== \",\") continue;\n    const entry = tokens.slice(entryStartsAt, index);\n    if (entry.length > 0 && entry[0].value !== \"type\") return false;\n    entryStartsAt = index + 1;\n  }\n  return true;\n}\n\nfunction resolveImportedModuleSourcePath(\n  importerPath: string,\n  specifier: string,\n  root?: string,\n): string | null {\n  if (!specifier.startsWith(\".\") && !specifier.startsWith(\"/\")) {\n    return resolvePackageModuleSourcePath(importerPath, specifier, root);\n  }\n\n  const candidates = new Set<string>();\n  const basePath = specifier.startsWith(\".\")\n    ? path.resolve(path.dirname(importerPath), specifier)\n    : root\n      ? path.resolve(root, specifier.replace(/^\\/+/, \"\"))\n      : path.resolve(specifier);\n\n  candidates.add(basePath);\n  return resolveSourceCandidate(candidates);\n}\n\nfunction resolvePackageModuleSourcePath(\n  importerPath: string,\n  specifier: string,\n  root?: string,\n): string | null {\n  const packageParts = specifier.split(\"/\");\n  const packageName = specifier.startsWith(\"@\")\n    ? packageParts.slice(0, 2).join(\"/\")\n    : packageParts[0];\n  const packageSubpath = packageParts.slice(packageName.startsWith(\"@\") ? 2 : 1).join(\"/\");\n  const packageDirectory = findPackageDirectory(importerPath, packageName, root);\n  if (!packageDirectory) return null;\n\n  const packageJsonPath = path.join(packageDirectory, \"package.json\");\n  const packageJson = readPackageJson(packageJsonPath);\n  const exportKey = packageSubpath ? `./${packageSubpath}` : \".\";\n  const exportTarget = resolvePackageExport(packageJson?.exports, exportKey);\n  const candidates = new Set<string>();\n\n  if (exportTarget?.startsWith(\"./\")) {\n    candidates.add(path.resolve(packageDirectory, exportTarget));\n  }\n  if (packageSubpath) {\n    candidates.add(path.join(packageDirectory, packageSubpath));\n  } else {\n    for (const entry of [packageJson?.browser, packageJson?.module, packageJson?.main]) {\n      if (typeof entry === \"string\") candidates.add(path.resolve(packageDirectory, entry));\n    }\n    candidates.add(path.join(packageDirectory, \"index\"));\n  }\n\n  return resolveSourceCandidate(candidates);\n}\n\nfunction findPackageDirectory(\n  importerPath: string,\n  packageName: string,\n  root?: string,\n): string | null {\n  const searchRoots = new Set<string>();\n  let current = path.dirname(importerPath);\n  while (true) {\n    searchRoots.add(current);\n    const parent = path.dirname(current);\n    if (parent === current) break;\n    current = parent;\n  }\n  if (root) {\n    current = path.resolve(root);\n    while (true) {\n      searchRoots.add(current);\n      const parent = path.dirname(current);\n      if (parent === current) break;\n      current = parent;\n    }\n  }\n\n  for (const searchRoot of searchRoots) {\n    const packageDirectory = path.join(searchRoot, \"node_modules\", packageName);\n    if (fs.existsSync(path.join(packageDirectory, \"package.json\"))) {\n      return packageDirectory;\n    }\n  }\n  return null;\n}\n\nfunction readPackageJson(packageJsonPath: string): Record<string, any> | null {\n  try {\n    return JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\"));\n  } catch {\n    return null;\n  }\n}\n\nfunction resolvePackageExport(exportsField: unknown, exportKey: string): string | null {\n  if (typeof exportsField === \"string\") {\n    return exportKey === \".\" ? exportsField : null;\n  }\n  if (Array.isArray(exportsField)) {\n    for (const candidate of exportsField) {\n      const resolved = resolvePackageExport(candidate, exportKey);\n      if (resolved) return resolved;\n    }\n    return null;\n  }\n  if (!exportsField || typeof exportsField !== \"object\") return null;\n\n  const entries = Object.entries(exportsField as Record<string, unknown>);\n  const subpathExports = entries.some(([key]) => key.startsWith(\".\"));\n  if (subpathExports) {\n    const exact = (exportsField as Record<string, unknown>)[exportKey];\n    if (exact !== undefined) return resolveConditionalExportTarget(exact);\n\n    for (const [key, value] of entries) {\n      const wildcardIndex = key.indexOf(\"*\");\n      if (wildcardIndex === -1) continue;\n      const prefix = key.slice(0, wildcardIndex);\n      const suffix = key.slice(wildcardIndex + 1);\n      if (!exportKey.startsWith(prefix) || !exportKey.endsWith(suffix)) continue;\n      const wildcard = exportKey.slice(prefix.length, exportKey.length - suffix.length);\n      const target = resolveConditionalExportTarget(value);\n      return target?.replace(\"*\", wildcard) ?? null;\n    }\n    return null;\n  }\n\n  return exportKey === \".\" ? resolveConditionalExportTarget(exportsField) : null;\n}\n\nfunction resolveConditionalExportTarget(value: unknown): string | null {\n  if (typeof value === \"string\") return value;\n  if (Array.isArray(value)) {\n    for (const candidate of value) {\n      const resolved = resolveConditionalExportTarget(candidate);\n      if (resolved) return resolved;\n    }\n    return null;\n  }\n  if (!value || typeof value !== \"object\") return null;\n\n  const conditions = value as Record<string, unknown>;\n  // This metadata controls browser hydration, so prefer client-facing exports\n  // regardless of declaration order while retaining Node-only package support.\n  for (const condition of [\"browser\", \"import\", \"module\", \"node\", \"default\", \"require\"]) {\n    if (conditions[condition] === undefined) continue;\n    const resolved = resolveConditionalExportTarget(conditions[condition]);\n    if (resolved) return resolved;\n  }\n  return null;\n}\n\nfunction resolveSourceCandidate(candidates: Iterable<string>): string | null {\n  for (const candidate of candidates) {\n    const paths = [candidate];\n    for (const extension of RESOLVABLE_SOURCE_EXTENSIONS) {\n      paths.push(`${candidate}${extension}`, path.join(candidate, `index${extension}`));\n    }\n    for (const sourcePath of paths) {\n      try {\n        if (fs.statSync(sourcePath).isFile()) return sourcePath;\n      } catch {\n        // Continue to the next candidate.\n      }\n    }\n  }\n  return null;\n}\n","import type { FarmIslandStrategy } from \"../island\";\nimport type { RouteRenderingConfig } from \"../ssg\";\n\n/**\n * A build-time rendering decision consumed by the browser router.\n *\n * The browser never inspects module source to choose a rendering path. It\n * executes this compact plan and only evaluates request-specific cache keys at\n * runtime.\n */\nexport interface FarmRouteRenderPlan {\n  version: 1;\n  output: \"html\";\n  navigation: \"html-fragment\";\n  hydration: \"none\" | \"route-island\" | \"layout-island\" | \"route-and-layout-islands\";\n  islandStrategy: FarmIslandStrategy | null;\n  cache: {\n    mode: \"static\" | \"revalidate\" | \"dynamic\";\n    revalidate?: number;\n  };\n}\n\nexport interface FarmRouteRenderPlanInput {\n  pageShouldHydrate?: boolean;\n  layoutShouldHydrate?: boolean;\n  islandStrategy?: FarmIslandStrategy | null;\n  rendering?: Pick<RouteRenderingConfig, \"ssg\" | \"ppr\" | \"revalidate\">;\n}\n\n/** Create a deterministic route plan during manifest generation. */\nexport function createFarmRouteRenderPlan(\n  input: FarmRouteRenderPlanInput = {},\n): FarmRouteRenderPlan {\n  const pageShouldHydrate = input.pageShouldHydrate === true;\n  const layoutShouldHydrate = input.layoutShouldHydrate === true;\n  const hydration = pageShouldHydrate\n    ? layoutShouldHydrate\n      ? \"route-and-layout-islands\"\n      : \"route-island\"\n    : layoutShouldHydrate\n      ? \"layout-island\"\n      : \"none\";\n\n  const rendering = input.rendering;\n  const cache = rendering?.ssg\n    ? typeof rendering.revalidate === \"number\" && rendering.revalidate > 0\n      ? { mode: \"revalidate\" as const, revalidate: rendering.revalidate }\n      : { mode: \"static\" as const }\n    : { mode: \"dynamic\" as const };\n\n  return {\n    version: 1,\n    output: \"html\",\n    navigation: \"html-fragment\",\n    hydration,\n    islandStrategy: hydration === \"none\" ? null : (input.islandStrategy ?? \"load\"),\n    cache,\n  };\n}\n\n/**\n * Cache policy for a fragment response. Explicit static rendering is safe to\n * share; dynamic output remains private even when the browser caches it.\n */\nexport function getFarmFragmentCacheControl(plan: FarmRouteRenderPlan): string {\n  if (plan.cache.mode === \"static\") {\n    return \"public, max-age=0, s-maxage=31536000, immutable\";\n  }\n  if (plan.cache.mode === \"revalidate\") {\n    const seconds = Math.max(1, plan.cache.revalidate ?? 1);\n    return `public, max-age=0, s-maxage=${seconds}, stale-while-revalidate=${seconds}`;\n  }\n  return \"private, max-age=0\";\n}\n\nexport function parseFarmLayoutChainHeader(value: string | null): string[] {\n  if (!value || value.length > 8_192) return [];\n  try {\n    const parsed = JSON.parse(value);\n    if (!Array.isArray(parsed) || parsed.length > 64) return [];\n    return parsed.filter(\n      (pattern): pattern is string =>\n        typeof pattern === \"string\" && pattern.startsWith(\"/\") && pattern.length <= 512,\n    );\n  } catch {\n    return [];\n  }\n}\n\nexport function getSharedLayoutPrefixLength(current: string[], next: string[]): number {\n  let index = 0;\n  while (index < current.length && index < next.length && current[index] === next[index]) {\n    index++;\n  }\n  return index;\n}\n","import { createHash } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { imageSize } from \"image-size\";\n\nexport const STATIC_METADATA_IMAGE_EXTENSIONS = [\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\"] as const;\n\nexport type StaticMetadataImageExtension = (typeof STATIC_METADATA_IMAGE_EXTENSIONS)[number];\n\nexport interface StaticMetadataImageInfo {\n  extension: StaticMetadataImageExtension;\n  contentType: string;\n  width: number;\n  height: number;\n  alt?: string;\n  hash: string;\n  byteLength: number;\n}\n\nconst CONTENT_TYPES: Record<StaticMetadataImageExtension, string> = {\n  png: \"image/png\",\n  jpg: \"image/jpeg\",\n  jpeg: \"image/jpeg\",\n  gif: \"image/gif\",\n  webp: \"image/webp\",\n};\n\nexport function isStaticMetadataImageFile(filePath: string): boolean {\n  return getStaticMetadataImageExtension(filePath) !== null;\n}\n\nexport async function inspectStaticMetadataImage(\n  filePath: string,\n): Promise<StaticMetadataImageInfo> {\n  const extension = getStaticMetadataImageExtension(filePath);\n  if (!extension) {\n    throw new Error(`Unsupported static metadata image: ${filePath}`);\n  }\n\n  const bytes = await readFile(filePath);\n  let dimensions: ReturnType<typeof imageSize>;\n\n  try {\n    dimensions = imageSize(bytes);\n  } catch (error) {\n    const reason = error instanceof Error ? error.message : String(error);\n    throw new Error(`Could not read metadata image ${filePath}: ${reason}`);\n  }\n\n  if (!dimensions.width || !dimensions.height) {\n    throw new Error(`Could not determine metadata image dimensions for ${filePath}`);\n  }\n\n  const alt = await readAltText(filePath);\n\n  return {\n    extension,\n    contentType: CONTENT_TYPES[extension],\n    width: dimensions.width,\n    height: dimensions.height,\n    alt,\n    hash: createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 16),\n    byteLength: bytes.byteLength,\n  };\n}\n\nexport function getStaticMetadataImageAltPath(filePath: string): string {\n  return path.join(\n    path.dirname(filePath),\n    `${path.basename(filePath, path.extname(filePath))}.alt.txt`,\n  );\n}\n\nfunction getStaticMetadataImageExtension(filePath: string): StaticMetadataImageExtension | null {\n  const extension = path.extname(filePath).slice(1).toLowerCase();\n  return STATIC_METADATA_IMAGE_EXTENSIONS.includes(extension as StaticMetadataImageExtension)\n    ? (extension as StaticMetadataImageExtension)\n    : null;\n}\n\nasync function readAltText(filePath: string): Promise<string | undefined> {\n  try {\n    const value = (await readFile(getStaticMetadataImageAltPath(filePath), \"utf8\")).trim();\n    return value || undefined;\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n      return undefined;\n    }\n    throw error;\n  }\n}\n","/** Preserve an incoming query when a redirect destination does not declare one. */\nexport function appendFarmRedirectQuery(destination: string, search: string): string {\n  if (!search || search === \"?\") return destination;\n\n  const hashIndex = destination.indexOf(\"#\");\n  const pathAndQuery = hashIndex === -1 ? destination : destination.slice(0, hashIndex);\n  if (pathAndQuery.includes(\"?\")) return destination;\n\n  if (hashIndex === -1) return `${destination}${search}`;\n  return `${pathAndQuery}${search}${destination.slice(hashIndex)}`;\n}\n","import type { ParsedRoute } from \"../types\";\nimport { parseRoutePath } from \"../utils\";\n\nexport type RouteSlotConvention = {\n  name: string;\n  ownerRoute: ParsedRoute;\n  route: ParsedRoute;\n  interception: boolean;\n  fallback: boolean;\n};\n\nconst SLOT_SEGMENT = /^@([A-Za-z][A-Za-z0-9_-]*)$/;\n\n/**\n * Parse a page nested below an `@slot` directory without adding the slot name\n * or interception marker to its public URL.\n */\nexport function parseRouteSlotFile(filePath: string): RouteSlotConvention | null {\n  const normalized = filePath.replace(/\\\\/g, \"/\");\n  const parts = normalized.split(\"/\").filter(Boolean);\n  const fileName = parts.at(-1) ?? \"\";\n  const baseName = fileName.replace(/\\.(tsx?|jsx?|vue|svelte)$/, \"\");\n  if (baseName !== \"page\" && baseName !== \"default\") return null;\n\n  const slotIndex = parts.findIndex((part) => SLOT_SEGMENT.test(part));\n  if (slotIndex < 0) return null;\n  if (parts.slice(slotIndex + 1, -1).some((part) => SLOT_SEGMENT.test(part))) {\n    throw new Error(`Nested route slots are not supported in \"${filePath}\"`);\n  }\n\n  const slotMatch = parts[slotIndex]!.match(SLOT_SEGMENT);\n  const name = slotMatch?.[1];\n  if (!name) return null;\n\n  const ownerParts = parts.slice(0, slotIndex);\n  const contentParts = parts.slice(slotIndex + 1, -1);\n  const marker = parseInterceptionMarker(contentParts[0]);\n  let targetBase = ownerParts;\n  let targetParts = contentParts;\n\n  if (marker) {\n    targetBase =\n      marker.root === true ? [] : ownerParts.slice(0, Math.max(0, ownerParts.length - marker.up));\n    targetParts = [...(marker.remainder ? [marker.remainder] : []), ...contentParts.slice(1)];\n  }\n\n  const ownerFile = [...ownerParts, \"layout.tsx\"].join(\"/\");\n  const routeFile = [\n    ...(baseName === \"default\" ? ownerParts : targetBase),\n    ...(baseName === \"default\" ? [] : targetParts),\n    \"page.tsx\",\n  ].join(\"/\");\n\n  return {\n    name,\n    ownerRoute: parseRoutePath(ownerFile || \"layout.tsx\"),\n    route: parseRoutePath(routeFile || \"page.tsx\"),\n    interception: marker !== null,\n    fallback: baseName === \"default\",\n  };\n}\n\nexport function createRouteSlotContainerId(name: string, ownerPattern: string): string {\n  const owner =\n    ownerPattern === \"/\"\n      ? \"root\"\n      : ownerPattern\n          .replace(/^\\//, \"\")\n          .replace(/[^A-Za-z0-9_-]+/g, \"-\")\n          .replace(/^-+|-+$/g, \"\");\n  return `__farm_slot_${name}_${owner || \"root\"}__`;\n}\n\nfunction parseInterceptionMarker(\n  segment: string | undefined,\n): { up: number; root?: boolean; remainder: string } | null {\n  if (!segment) return null;\n  if (segment.startsWith(\"(...)\")) {\n    return {\n      up: 0,\n      root: true,\n      remainder: segment.slice(5),\n    };\n  }\n  if (segment.startsWith(\"(.)\")) {\n    return {\n      up: 0,\n      remainder: segment.slice(3),\n    };\n  }\n\n  let remainder = segment;\n  let up = 0;\n  while (remainder.startsWith(\"(..)\")) {\n    up += 1;\n    remainder = remainder.slice(4);\n  }\n  return up > 0 ? { up, remainder } : null;\n}\n","import type {\n  FarmConfig,\n  ParsedRoute,\n  RouteModule,\n  LayoutModule,\n  SSGCollectionResult,\n} from \"../types\";\nimport {\n  parseRoutePath,\n  matchRoute,\n  matchRoutePrefix,\n  resolveAppPath,\n  globFiles,\n  logger,\n  toRootRelativeUrlPath,\n  toViteModuleId,\n} from \"../utils\";\nimport { collectSSGPages, resolveRouteRenderingConfigFromFile } from \"../ssg\";\nimport type {\n  ProgrammaticPageRoute,\n  ProgrammaticLayoutRoute,\n  ProgrammaticRedirectRoute,\n  ProgrammaticRouteSearchClientOptions,\n} from \"../routes\";\nimport {\n  createProgrammaticRouteModuleId,\n  getProgrammaticRouteSearchClientOptions,\n  parseProgrammaticRoutePath,\n} from \"../routes-shared\";\nimport { loadProgrammaticRouteManifests } from \"../routes.server\";\nimport {\n  createFarmMarkdownRouteModuleFromFile,\n  isFarmMarkdownPageFile,\n  loadFarmMdxComponents,\n  resolveMdxConfig,\n} from \"../app-markdown\";\nimport path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport {\n  enforceFarmIsolatedHydrationRouteBudget,\n  getClientModuleHydrationPlan,\n  getClientModuleMetadata,\n  resolveFarmIsolatedClientHydrationMode,\n  type IsolatedClientBoundaryReference,\n} from \"../utils/client-component\";\nimport { getIntegrationProviders } from \"../integrations\";\nimport type { MetadataImageKind } from \"../metadata\";\nimport type { FarmIslandStrategy } from \"../island\";\nimport type { FarmServerRendererRuntime } from \"../renderer\";\nimport { createFarmRouteRenderPlan, type FarmRouteRenderPlan } from \"../navigation/render-plan\";\nimport { getFarmSourceRoots, type FarmSourceRoot } from \"../layers\";\nimport {\n  inspectStaticMetadataImage,\n  isStaticMetadataImageFile,\n  type StaticMetadataImageInfo,\n} from \"../static-metadata-image\";\nimport {\n  getFarmRouteRuntimeConfig,\n  mergeFarmRouteRuntimeConfigs,\n  normalizeFarmRouteRuntimeConfig,\n  resolveFarmRouteRuleRuntimeConfig,\n  resolveFarmRouteRuntimeConfig,\n  type ResolvedFarmRouteRuntimeConfig,\n} from \"../route-runtime\";\nimport {\n  localizeFarmHref,\n  localizeFarmPathname,\n  resolveFarmLocalePath,\n  stripFarmLocaleFromPathname,\n} from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { appendFarmRedirectQuery } from \"../redirect-query\";\nimport { createRouteSlotContainerId, parseRouteSlotFile } from \"./route-slots\";\nimport { getFarmRendererComponentExtensions } from \"../renderer\";\nimport type { ApplicationMetadataRouteKind } from \"../metadata-route\";\nimport {\n  AmbiguousRouteError,\n  assertUniqueRouteParameters,\n  compareRouteSpecificity,\n  getRoutePatternShape,\n  type RouteSegmentSpecificity,\n} from \"./specificity\";\n\ninterface RouteEntry {\n  route: ParsedRoute;\n  modulePath: string;\n  markdownSourcePath?: string;\n  pattern: string;\n  source?: \"file\" | \"programmatic\";\n  sourceRoot: string;\n}\n\nexport interface RouteSlotEntry extends RouteEntry {\n  name: string;\n  ownerPattern: string;\n  interception: boolean;\n  fallback: boolean;\n  containerId: string;\n}\n\nexport interface MatchedRouteSlot {\n  name: string;\n  ownerPattern: string;\n  containerId: string;\n  interception: boolean;\n  fallback: boolean;\n  route: RouteSlotEntry;\n  params: Record<string, string>;\n}\n\nexport interface FarmClientRouteManifest {\n  routes: Array<{\n    pattern: string;\n    modulePath: string;\n    shouldHydrate: boolean;\n    isClientComponent: boolean;\n    islandStrategy: FarmIslandStrategy | null;\n    hasIsolatedClientBoundaries?: true;\n    isolatedBoundaries?: IsolatedClientBoundaryReference[];\n    renderPlan: FarmRouteRenderPlan;\n    suppressedAsyncHydration?: true;\n    search?: ProgrammaticRouteSearchClientOptions;\n    segments: Array<{\n      segment: string;\n      isDynamic: boolean;\n      isCatchAll?: boolean;\n      isOptional?: boolean;\n    }>;\n  }>;\n  layouts: Array<{\n    pattern: string;\n    modulePath: string;\n    shouldHydrate: boolean;\n    isClientComponent: boolean;\n    islandStrategy: FarmIslandStrategy | null;\n    hasIsolatedClientBoundaries?: true;\n    isolatedBoundaries?: IsolatedClientBoundaryReference[];\n  }>;\n  slots: Array<{\n    name: string;\n    ownerPattern: string;\n    pattern: string;\n    modulePath: string;\n    containerId: string;\n    interception: boolean;\n    fallback: boolean;\n    shouldHydrate: boolean;\n    isClientComponent: boolean;\n    segments: RouteEntry[\"route\"][\"segments\"];\n  }>;\n}\n\nexport function shouldSuggestStaticRenderingForI18n(\n  i18n: Pick<ResolvedFarmI18nConfig, \"routing\" | \"detection\"> | undefined,\n): boolean {\n  return (\n    !i18n ||\n    i18n.routing === \"prefix-always\" ||\n    (i18n.routing === \"prefix-except-default\" && i18n.detection.every((signal) => signal === \"url\"))\n  );\n}\n\ninterface MetadataImageEntry extends RouteEntry {\n  kind: MetadataImageKind;\n  fileName: \"opengraph-image\" | \"twitter-image\";\n  sourceType: \"module\" | \"static\";\n  staticInfo?: StaticMetadataImageInfo;\n}\n\nexport interface ApplicationMetadataRouteEntry extends RouteEntry {\n  kind: ApplicationMetadataRouteKind;\n  fileName: \"sitemap\" | \"robots\" | \"manifest\";\n  outputName: \"sitemap.xml\" | \"robots.txt\" | \"manifest.webmanifest\";\n}\n\ninterface RedirectEntry {\n  route: ParsedRoute;\n  pattern: string;\n  definition: ProgrammaticRedirectRoute;\n}\n\nfunction getRouteSpecificity(entry: RouteEntry): RouteSegmentSpecificity[] {\n  return entry.route.segments.map((segment) => {\n    if (!segment.isDynamic) return \"static\";\n    if (!segment.isCatchAll) return \"dynamic\";\n    return segment.isOptional ? \"optional-catch-all\" : \"catch-all\";\n  });\n}\n\nfunction compareRouteEntries(left: RouteEntry, right: RouteEntry): number {\n  return compareRouteSpecificity(getRouteSpecificity(left), getRouteSpecificity(right));\n}\n\n/**\n * Manages route discovery and matching for the Farm.js application\n */\nexport class RouteManager {\n  private config: Required<FarmConfig>;\n  private routes: Map<string, RouteEntry> = new Map();\n  private pageRouteShapes: Map<string, RouteEntry> = new Map();\n  private layouts: Map<string, RouteEntry> = new Map();\n  private routeSlots: Map<string, RouteSlotEntry> = new Map();\n  private loadings: Map<string, RouteEntry> = new Map();\n  private errors: Map<string, RouteEntry> = new Map();\n  private metadataImages: Map<string, MetadataImageEntry> = new Map();\n  private metadataRoutes: Map<string, ApplicationMetadataRouteEntry> = new Map();\n  private redirects: Map<string, RedirectEntry> = new Map();\n  private programmaticPages: Map<string, ProgrammaticPageRoute> = new Map();\n  private programmaticLayouts: Map<string, ProgrammaticLayoutRoute> = new Map();\n  private rendererRuntime?: FarmServerRendererRuntime;\n  private viteServer?: ViteDevServer;\n  private clientManifestCache?: {\n    projectRoot: string;\n    manifest: FarmClientRouteManifest;\n    isolatedClientBoundaryModules: ReadonlySet<string>;\n  };\n\n  constructor(config: Required<FarmConfig>, viteServer?: ViteDevServer) {\n    this.config = config;\n    this.viteServer = viteServer;\n  }\n\n  setRendererRuntime(rendererRuntime: FarmServerRendererRuntime): void {\n    this.rendererRuntime = rendererRuntime;\n  }\n\n  /**\n   * Discover all routes in the app directory\n   */\n  async discoverRoutes(): Promise<void> {\n    this.invalidateClientManifest();\n    this.routes.clear();\n    this.pageRouteShapes.clear();\n    this.layouts.clear();\n    this.routeSlots.clear();\n    this.loadings.clear();\n    this.errors.clear();\n    this.metadataImages.clear();\n    this.metadataRoutes.clear();\n    this.redirects.clear();\n    this.programmaticPages.clear();\n    this.programmaticLayouts.clear();\n\n    for (const source of getFarmSourceRoots(this.config)) {\n      await this.discoverFileRoutes(source);\n      await this.discoverProgrammaticRoutes(source);\n    }\n\n    for (const slot of this.routeSlots.values()) {\n      if (slot.interception && !this.pageRouteShapes.has(getRoutePatternShape(slot.pattern))) {\n        throw new AmbiguousRouteError(\n          `Intercepting route slot \"${slot.name}\" targets \"${slot.pattern}\", but no canonical page exists for that URL`,\n        );\n      }\n    }\n\n    this.routes = new Map(\n      Array.from(this.routes.entries()).sort(([, left], [, right]) =>\n        compareRouteEntries(left, right),\n      ),\n    );\n    this.metadataRoutes = new Map(\n      Array.from(this.metadataRoutes.entries()).sort(([, left], [, right]) =>\n        compareRouteEntries(left, right),\n      ),\n    );\n\n    // Silent discovery - only log if verbose mode enabled\n    if (process.env.FARM_VERBOSE) {\n      logger.info(\n        `Discovered ${this.routes.size} pages, ${this.layouts.size} layouts, and ${this.metadataRoutes.size} metadata routes`,\n      );\n    }\n\n    if (process.env.FARM_VERBOSE) {\n      this.logRoutes();\n    }\n  }\n\n  /**\n   * Find matching route for a given URL path\n   */\n  matchRoute(\n    pathname: string,\n    options: {\n      interceptFrom?: string;\n    } = {},\n  ): {\n    route: RouteEntry | null;\n    params: Record<string, string>;\n    layouts: RouteEntry[];\n    slots: MatchedRouteSlot[];\n  } {\n    // Remove trailing slash except for root\n    const routePathname = this.toRoutePathname(pathname);\n    const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n    // Find matching page route\n    let matchedRoute: RouteEntry | null = null;\n    let params: Record<string, string> = {};\n\n    for (const routeEntry of this.routes.values()) {\n      const match = matchRoute(normalizedPath, routeEntry.route.segments);\n      if (match.matches) {\n        matchedRoute = routeEntry;\n        params = match.params;\n        break;\n      }\n    }\n\n    // Find all matching layouts (from root to specific)\n    const layouts = this.findMatchingLayouts(normalizedPath);\n    const slots = this.findMatchingRouteSlots(normalizedPath, options.interceptFrom);\n\n    return {\n      route: matchedRoute,\n      params,\n      layouts,\n      slots,\n    };\n  }\n\n  /**\n   * Get all registered routes\n   */\n  getRoutes(): Map<string, RouteEntry> {\n    return new Map(this.routes);\n  }\n\n  /**\n   * Get all registered layouts\n   */\n  getLayouts(): Map<string, RouteEntry> {\n    return new Map(this.layouts);\n  }\n\n  getRouteSlots(): Map<string, RouteSlotEntry> {\n    return new Map(this.routeSlots);\n  }\n\n  /** Resolve route rules, inherited layouts, and the page export in precedence order. */\n  async resolveRouteRuntimeConfig(pattern: string): Promise<ResolvedFarmRouteRuntimeConfig> {\n    const routeEntry = this.routes.get(pattern);\n    if (!routeEntry) {\n      throw new Error(`Cannot resolve runtime configuration for unknown route \"${pattern}\"`);\n    }\n\n    const inherited = resolveFarmRouteRuleRuntimeConfig(pattern, this.config.routeRules);\n    const layouts = this.findMatchingLayouts(pattern);\n    const layoutConfigs = [];\n\n    for (const layout of layouts) {\n      const layoutModule = await this.loadLayoutModule(layout.modulePath);\n      layoutConfigs.push(\n        normalizeFarmRouteRuntimeConfig(\n          getFarmRouteRuntimeConfig(layoutModule),\n          `Layout \"${layout.pattern}\"`,\n        ),\n      );\n    }\n\n    const routeModule = await this.loadRouteModule(routeEntry.modulePath);\n    const routeConfig = normalizeFarmRouteRuntimeConfig(\n      getFarmRouteRuntimeConfig(routeModule),\n      `Route \"${pattern}\"`,\n    );\n\n    return resolveFarmRouteRuntimeConfig(\n      mergeFarmRouteRuntimeConfigs(inherited, ...layoutConfigs, routeConfig),\n      `Route \"${pattern}\"`,\n    );\n  }\n\n  /**\n   * Get all route-level loading boundaries.\n   */\n  getLoadings(): Map<string, RouteEntry> {\n    return new Map(this.loadings);\n  }\n\n  /**\n   * Get all route-level error boundaries.\n   */\n  getErrors(): Map<string, RouteEntry> {\n    return new Map(this.errors);\n  }\n\n  getMetadataImages(): Map<string, MetadataImageEntry> {\n    return new Map(this.metadataImages);\n  }\n\n  getMetadataRoutes(): Map<string, ApplicationMetadataRouteEntry> {\n    return new Map(this.metadataRoutes);\n  }\n\n  getRedirects(): ProgrammaticRedirectRoute[] {\n    return Array.from(this.redirects.values()).map((entry) => entry.definition);\n  }\n\n  matchRedirect(\n    pathname: string,\n    search = \"\",\n  ): {\n    redirect: ProgrammaticRedirectRoute;\n    destination: string;\n    statusCode: number;\n    params: Record<string, string>;\n  } | null {\n    const i18n = this.getI18nConfig();\n    const localeMatch = i18n ? resolveFarmLocalePath(pathname, i18n) : undefined;\n    const routePathname = localeMatch?.pathname || pathname;\n    const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n\n    for (const redirectEntry of this.redirects.values()) {\n      const match = matchRoute(normalizedPath, redirectEntry.route.segments);\n      if (!match.matches) continue;\n\n      const statusCode =\n        redirectEntry.definition.statusCode || (redirectEntry.definition.permanent ? 308 : 307);\n\n      return {\n        redirect: redirectEntry.definition,\n        destination: appendFarmRedirectQuery(\n          this.localizeRedirectDestination(\n            interpolateRedirectDestination(redirectEntry.definition.destination, match.params),\n            localeMatch?.locale,\n          ),\n          search,\n        ),\n        statusCode,\n        params: match.params,\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * Return the nearest matching loading boundary for a pathname.\n   */\n  getMatchingLoading(pathname: string): RouteEntry | null {\n    return this.findNearestBoundary(this.toRoutePathname(pathname), this.loadings);\n  }\n\n  /**\n   * Return the nearest matching error boundary for a pathname.\n   */\n  getMatchingError(pathname: string): RouteEntry | null {\n    return this.findNearestBoundary(this.toRoutePathname(pathname), this.errors);\n  }\n\n  matchMetadataImage(pathname: string): {\n    image: MetadataImageEntry;\n    params: Record<string, string>;\n    pagePath: string;\n  } | null {\n    const routePathname = this.toRoutePathname(pathname);\n    const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n    const suffix = getMetadataImageSuffix(normalizedPath);\n    if (!suffix) return null;\n\n    const pagePath = normalizedPath.slice(0, -suffix.fileName.length - 1) || \"/\";\n\n    for (const imageEntry of this.metadataImages.values()) {\n      if (imageEntry.kind !== suffix.kind) continue;\n\n      const match = matchRoute(pagePath, imageEntry.route.segments);\n      if (!match.matches) continue;\n\n      return {\n        image: imageEntry,\n        params: match.params,\n        pagePath,\n      };\n    }\n\n    return null;\n  }\n\n  matchMetadataRoute(pathname: string): {\n    metadata: ApplicationMetadataRouteEntry;\n    params: Record<string, string>;\n    routePath: string;\n  } | null {\n    const routePathname = this.toRoutePathname(pathname);\n    const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n    const suffix = getApplicationMetadataRouteSuffix(normalizedPath);\n    if (!suffix) return null;\n\n    const routePath = normalizedPath.slice(0, -suffix.outputName.length - 1) || \"/\";\n    for (const metadata of this.metadataRoutes.values()) {\n      if (metadata.kind !== suffix.kind) continue;\n      const match = matchRoute(routePath, metadata.route.segments);\n      if (!match.matches) continue;\n      return { metadata, params: match.params, routePath };\n    }\n\n    return null;\n  }\n\n  getMatchingMetadataRoute(\n    pathname: string,\n    kind: ApplicationMetadataRouteKind,\n  ): {\n    metadata: ApplicationMetadataRouteEntry;\n    params: Record<string, string>;\n    routePath: string;\n  } | null {\n    const routePathname = this.toRoutePathname(pathname);\n    const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n    const pathSegments = normalizedPath.split(\"/\").filter(Boolean);\n    let bestMatch: {\n      metadata: ApplicationMetadataRouteEntry;\n      params: Record<string, string>;\n      routePath: string;\n    } | null = null;\n\n    for (const metadata of this.metadataRoutes.values()) {\n      if (metadata.kind !== kind || metadata.route.segments.length > pathSegments.length) continue;\n      const routePath =\n        metadata.route.segments.length === 0\n          ? \"/\"\n          : `/${pathSegments.slice(0, metadata.route.segments.length).join(\"/\")}`;\n      const match = matchRoute(routePath, metadata.route.segments);\n      if (!match.matches) continue;\n      if (!bestMatch || metadata.route.segments.length > bestMatch.metadata.route.segments.length) {\n        bestMatch = { metadata, params: match.params, routePath };\n      }\n    }\n\n    return bestMatch;\n  }\n\n  resolveMetadataRoutePath(\n    metadata: ApplicationMetadataRouteEntry,\n    params: Record<string, string> = {},\n  ): string {\n    const routePath = routeSegmentsToPath(metadata.route.segments, params);\n    return routePath === \"/\" ? `/${metadata.outputName}` : `${routePath}/${metadata.outputName}`;\n  }\n\n  getMatchingMetadataImage(\n    pathname: string,\n    kind: MetadataImageKind,\n  ): {\n    image: MetadataImageEntry;\n    params: Record<string, string>;\n  } | null {\n    const routePathname = this.toRoutePathname(pathname);\n    const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n    const pathSegments = normalizedPath.split(\"/\").filter(Boolean);\n    let bestMatch: {\n      image: MetadataImageEntry;\n      params: Record<string, string>;\n    } | null = null;\n\n    for (const imageEntry of this.metadataImages.values()) {\n      if (imageEntry.kind !== kind) continue;\n      if (imageEntry.route.segments.length > pathSegments.length) continue;\n\n      const candidatePath =\n        imageEntry.route.segments.length === 0\n          ? \"/\"\n          : `/${pathSegments.slice(0, imageEntry.route.segments.length).join(\"/\")}`;\n      const match = matchRoute(candidatePath, imageEntry.route.segments);\n      if (!match.matches) continue;\n\n      if (!bestMatch || imageEntry.route.segments.length > bestMatch.image.route.segments.length) {\n        bestMatch = {\n          image: imageEntry,\n          params: match.params,\n        };\n      }\n    }\n\n    return bestMatch;\n  }\n\n  resolveMetadataImagePath(image: MetadataImageEntry, params: Record<string, string> = {}): string {\n    const pagePath = routeSegmentsToPath(image.route.segments, params);\n    const imagePath = pagePath === \"/\" ? `/${image.fileName}` : `${pagePath}/${image.fileName}`;\n    return image.staticInfo ? `${imagePath}?v=${image.staticInfo.hash}` : imagePath;\n  }\n\n  /**\n   * Generate the compiled route decisions consumed by SPA navigation.\n   * Requests still fetch route data, but never inspect component source.\n   */\n  generateClientManifest(projectRoot: string = this.config.root): FarmClientRouteManifest {\n    const normalizedProjectRoot = path.resolve(projectRoot);\n    if (this.clientManifestCache?.projectRoot === normalizedProjectRoot) {\n      return this.clientManifestCache.manifest;\n    }\n\n    const toUrlPath = (absolutePath: string) => {\n      const rootRelative = toRootRelativeUrlPath(absolutePath, normalizedProjectRoot);\n      if (rootRelative !== undefined) return rootRelative;\n      if (path.isAbsolute(absolutePath)) {\n        const normalized = absolutePath.replace(/\\\\/g, \"/\");\n        return normalized.startsWith(\"/\") ? `/@fs${normalized}` : `/@fs/${normalized}`;\n      }\n      return absolutePath;\n    };\n\n    const integrationProviders = getIntegrationProviders(this.config.integrations).filter(\n      (provider) => provider.component || provider.type === \"clerk\",\n    );\n    const unsupportedIntegrationProvider = integrationProviders.find(\n      (provider) => provider.supportsIsolatedHydration !== true,\n    );\n    if (\n      this.config.experimental?.isolatedClientHydration === \"enabled\" &&\n      this.config.experimental?.serverComponents !== true &&\n      unsupportedIntegrationProvider\n    ) {\n      logger.warn(\n        `[Farm.js] isolated hydration kept route-wide because integration provider \"${unsupportedIntegrationProvider.name}\" does not declare supportsIsolatedHydration: true.`,\n      );\n    }\n    const isolatedMode = resolveFarmIsolatedClientHydrationMode(\n      this.config.experimental?.isolatedClientHydration,\n      {\n        serverComponents: this.config.experimental?.serverComponents === true,\n        hasUnsupportedIntegrationProvider: Boolean(unsupportedIntegrationProvider),\n      },\n    );\n    const layoutEntries = Array.from(this.layouts.values()).map((entry) => ({\n      entry,\n      metadata: getClientModuleHydrationPlan(entry.modulePath, normalizedProjectRoot, isolatedMode),\n    }));\n\n    const routeEntries = Array.from(this.routes.values()).map((entry) => ({\n      entry,\n      metadata: getClientModuleHydrationPlan(entry.modulePath, normalizedProjectRoot, isolatedMode),\n    }));\n\n    enforceFarmIsolatedHydrationRouteBudget(\n      layoutEntries.map(({ entry, metadata }) => ({\n        pattern: entry.pattern,\n        depth: entry.route.segments.length,\n        metadata,\n      })),\n      routeEntries.map(({ entry, metadata }) => ({\n        pattern: entry.pattern,\n        depth: entry.route.segments.length,\n        metadata,\n      })),\n      (layoutPattern, routePattern) =>\n        layoutPattern === \"/\" ||\n        routePattern === layoutPattern ||\n        routePattern.startsWith(`${layoutPattern.replace(/\\/$/, \"\")}/`),\n    );\n\n    for (const { entry, metadata } of [...layoutEntries, ...routeEntries]) {\n      if (!metadata.costGuardExceeded) continue;\n      logger.warn(\n        `[Farm.js] isolated hydration kept route-wide for ${entry.modulePath}: ${metadata.fallbackReason}.`,\n      );\n    }\n    if (isolatedMode === \"analyze\") {\n      for (const { entry, metadata } of [...layoutEntries, ...routeEntries]) {\n        if (!metadata.isolatedHydrationEligible) continue;\n        logger.info(\n          `[Farm.js] isolated hydration analysis: ${entry.modulePath} can keep ${metadata.isolatedBoundaries.length} client ${metadata.isolatedBoundaries.length === 1 ? \"boundary\" : \"boundaries\"} while excluding its server owner from the browser graph.`,\n        );\n      }\n    }\n\n    const routes = routeEntries.map(({ entry, metadata }) => {\n      const programmaticPage = this.programmaticPages.get(entry.modulePath);\n      const layoutShouldHydrate = layoutEntries.some(\n        ({ entry: layout, metadata: layoutMetadata }) =>\n          layoutMetadata.shouldHydrate &&\n          (layout.pattern === \"/\" ||\n            entry.pattern === layout.pattern ||\n            entry.pattern.startsWith(`${layout.pattern.replace(/\\/$/, \"\")}/`)),\n      );\n      return {\n        pattern: entry.pattern,\n        modulePath: toUrlPath(entry.modulePath),\n        shouldHydrate: metadata.shouldHydrate,\n        isClientComponent: metadata.isClientComponent,\n        islandStrategy: metadata.islandStrategy,\n        ...(metadata.hasIsolatedClientBoundaries\n          ? {\n              hasIsolatedClientBoundaries: true as const,\n              isolatedBoundaries: metadata.isolatedBoundaries.map((boundary) => ({\n                ...boundary,\n                modulePath: toUrlPath(boundary.modulePath),\n              })),\n            }\n          : {}),\n        renderPlan: createFarmRouteRenderPlan({\n          pageShouldHydrate: metadata.shouldHydrate,\n          layoutShouldHydrate,\n          islandStrategy: metadata.islandStrategy,\n        }),\n        suppressedAsyncHydration: metadata.suppressedAsyncHydration,\n        search: getProgrammaticRouteSearchClientOptions(programmaticPage?.search),\n        segments: entry.route.segments.map((seg) => ({\n          segment: seg.segment,\n          isDynamic: seg.isDynamic,\n          isCatchAll: seg.isCatchAll,\n          isOptional: seg.isOptional,\n        })),\n      };\n    });\n\n    const layouts = layoutEntries.map(({ entry, metadata }) => ({\n      pattern: entry.pattern,\n      modulePath: toUrlPath(entry.modulePath),\n      shouldHydrate: metadata.shouldHydrate,\n      isClientComponent: metadata.isClientComponent,\n      islandStrategy: metadata.islandStrategy,\n      ...(metadata.hasIsolatedClientBoundaries\n        ? {\n            hasIsolatedClientBoundaries: true as const,\n            isolatedBoundaries: metadata.isolatedBoundaries.map((boundary) => ({\n              ...boundary,\n              modulePath: toUrlPath(boundary.modulePath),\n            })),\n          }\n        : {}),\n    }));\n\n    const slots = Array.from(this.routeSlots.values()).map((entry) => {\n      const metadata = getClientModuleMetadata(entry.modulePath, normalizedProjectRoot);\n      return {\n        name: entry.name,\n        ownerPattern: entry.ownerPattern,\n        pattern: entry.pattern,\n        modulePath: toUrlPath(entry.modulePath),\n        containerId: entry.containerId,\n        interception: entry.interception,\n        fallback: entry.fallback,\n        shouldHydrate: metadata.shouldHydrate,\n        isClientComponent: metadata.isClientComponent,\n        segments: entry.route.segments,\n      };\n    });\n\n    const isolatedClientBoundaryModules = new Set<string>();\n    for (const { metadata } of [...layoutEntries, ...routeEntries]) {\n      if (!metadata.hasIsolatedClientBoundaries) continue;\n      for (const boundary of metadata.isolatedBoundaries) {\n        isolatedClientBoundaryModules.add(path.resolve(boundary.modulePath));\n      }\n    }\n\n    const manifest = { routes, layouts, slots };\n    this.clientManifestCache = {\n      projectRoot: normalizedProjectRoot,\n      manifest,\n      isolatedClientBoundaryModules,\n    };\n    return manifest;\n  }\n\n  /** @internal Client modules selected by the compiled hydration ownership plan. */\n  getIsolatedClientBoundaryModules(projectRoot: string = this.config.root): ReadonlySet<string> {\n    const normalizedProjectRoot = path.resolve(projectRoot);\n    this.generateClientManifest(normalizedProjectRoot);\n    return this.clientManifestCache?.isolatedClientBoundaryModules ?? new Set();\n  }\n\n  /**\n   * Invalidate build-time route metadata after a page or layout changes in dev.\n   * Navigation requests reuse the cached manifest and never inspect source files.\n   */\n  invalidateClientManifest(): void {\n    this.clientManifestCache = undefined;\n  }\n\n  /**\n   * Load a route module dynamically\n   */\n  async loadRouteModule(modulePath: string): Promise<RouteModule> {\n    try {\n      const programmaticPage = this.programmaticPages.get(modulePath);\n      if (programmaticPage) {\n        const { createRouteModuleFromProgrammaticPage } = await import(\"../routes\");\n        return createRouteModuleFromProgrammaticPage(programmaticPage, this.rendererRuntime);\n      }\n\n      if (isFarmMarkdownPageFile(modulePath)) {\n        const mdxConfig = resolveMdxConfig(this.config.mdx);\n        const components = await loadFarmMdxComponents(mdxConfig, {\n          root: this.config.root,\n          loadModule: this.viteServer\n            ? (componentModulePath) => this.viteServer!.ssrLoadModule(componentModulePath)\n            : undefined,\n        });\n        return await createFarmMarkdownRouteModuleFromFile(modulePath, {\n          components,\n          config: mdxConfig,\n        });\n      }\n\n      if (this.viteServer) {\n        const module = await this.viteServer.ssrLoadModule(modulePath);\n        return module as RouteModule;\n      } else {\n        const module = await import(/* @vite-ignore */ modulePath);\n        return module as RouteModule;\n      }\n    } catch (error) {\n      logger.error(`Failed to load route module: ${modulePath}`);\n      throw error;\n    }\n  }\n\n  /**\n   * Load a layout module dynamically\n   */\n  async loadLayoutModule(modulePath: string): Promise<LayoutModule> {\n    try {\n      const programmaticLayout = this.programmaticLayouts.get(modulePath);\n      if (programmaticLayout) {\n        const { createLayoutModuleFromProgrammaticLayout } = await import(\"../routes\");\n        return createLayoutModuleFromProgrammaticLayout(programmaticLayout) as LayoutModule;\n      }\n\n      if (this.viteServer) {\n        const module = await this.viteServer.ssrLoadModule(modulePath);\n        return module as LayoutModule;\n      } else {\n        const module = await import(/* @vite-ignore */ modulePath);\n        return module as LayoutModule;\n      }\n    } catch (error) {\n      logger.error(`Failed to load layout module: ${modulePath}`);\n      throw error;\n    }\n  }\n\n  /**\n   * Create a route pattern from parsed route\n   */\n  private createRoutePattern(route: ParsedRoute): string {\n    if (route.segments.length === 0) return \"/\";\n\n    return (\n      \"/\" +\n      route.segments\n        .map((segment) => {\n          if (!segment.isDynamic) return segment.segment;\n\n          if (segment.isCatchAll) {\n            return segment.isOptional ? `[[...${segment.segment}]]` : `[...${segment.segment}]`;\n          }\n\n          return `[${segment.segment}]`;\n        })\n        .join(\"/\")\n    );\n  }\n\n  private registerPageRoute(entry: RouteEntry): void {\n    assertUniqueRouteParameters(entry.pattern);\n    const shape = getRoutePatternShape(entry.pattern);\n    const existing = this.pageRouteShapes.get(shape);\n\n    if (existing && existing.pattern !== entry.pattern) {\n      if (existing.sourceRoot === entry.sourceRoot) {\n        throw new Error(\n          `Ambiguous page routes \"${existing.pattern}\" and \"${entry.pattern}\" match the same URLs. Found ${existing.modulePath} and ${entry.modulePath}. Keep only one route for this URL shape.`,\n        );\n      }\n      this.routes.delete(existing.pattern);\n    }\n\n    this.routes.set(entry.pattern, entry);\n    this.pageRouteShapes.set(shape, entry);\n  }\n\n  private async discoverFileRoutes(source: FarmSourceRoot): Promise<void> {\n    const appDir = resolveAppPath(source.root, source.srcDir, \"app\");\n    const componentExtensions = getFarmRendererComponentExtensions(this.config.renderer).map(\n      (extension) => extension.slice(1),\n    );\n    const componentGlob = componentExtensions.join(\",\");\n    const pageFiles = await safeGlobFiles(`**/page.{${componentGlob},md,mdx}`, appDir);\n    const slotDefaultFiles = await safeGlobFiles(`**/@*/**/default.{${componentGlob}}`, appDir);\n    const layoutFiles = await safeGlobFiles(`**/layout.{${componentGlob}}`, appDir);\n    const loadingFiles = await safeGlobFiles(`**/loading.{${componentGlob}}`, appDir);\n    const errorFiles = await safeGlobFiles(`**/error.{${componentGlob}}`, appDir);\n    const metadataImageFiles = await safeGlobFiles(\n      `**/{opengraph-image,twitter-image}.{${componentGlob},png,jpg,jpeg,gif,webp}`,\n      appDir,\n    );\n    const metadataRouteFiles = await safeGlobFiles(\"**/{sitemap,robots,manifest}.{ts,js}\", appDir);\n\n    const canonicalPageGroups = new Map<\n      string,\n      {\n        route: ParsedRoute;\n        files: string[];\n      }\n    >();\n    for (const file of pageFiles.filter((candidate) => parseRouteSlotFile(candidate) === null)) {\n      const route = parseRoutePath(file);\n      const pattern = this.createRoutePattern(route);\n      const group = canonicalPageGroups.get(pattern);\n      if (group) {\n        group.files.push(file);\n      } else {\n        canonicalPageGroups.set(pattern, {\n          route,\n          files: [file],\n        });\n      }\n    }\n\n    for (const [pattern, group] of canonicalPageGroups) {\n      const componentFiles = group.files.filter((file) => !isFarmMarkdownPageFile(file));\n      const markdownFiles = group.files.filter(isFarmMarkdownPageFile);\n      if (componentFiles.length > 1) {\n        throw new Error(\n          `Duplicate page route \"${pattern}\". Found ${componentFiles\n            .map((file) => path.join(appDir, file))\n            .join(\" and \")}.`,\n        );\n      }\n      if (markdownFiles.length > 1) {\n        throw new Error(\n          `Duplicate markdown representation for page route \"${pattern}\". Found ${markdownFiles\n            .map((file) => path.join(appDir, file))\n            .join(\" and \")}.`,\n        );\n      }\n\n      const componentFile = componentFiles[0];\n      const markdownFile = markdownFiles[0];\n      const primaryFile = componentFile || markdownFile;\n      if (!primaryFile) continue;\n\n      const modulePath = path.join(appDir, primaryFile);\n      const existing = this.routes.get(pattern);\n      if (existing?.sourceRoot === source.root) {\n        throw new Error(\n          `Duplicate page route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}.`,\n        );\n      }\n      this.registerPageRoute({\n        route: group.route,\n        modulePath,\n        ...(markdownFile\n          ? {\n              markdownSourcePath: path.join(appDir, markdownFile),\n            }\n          : {}),\n        pattern,\n        source: \"file\",\n        sourceRoot: source.root,\n      });\n    }\n\n    for (const [kind, files, target] of [\n      [\"layout\", layoutFiles, this.layouts],\n      [\"loading\", loadingFiles, this.loadings],\n      [\"error\", errorFiles, this.errors],\n    ] as const) {\n      for (const file of files) {\n        const route = parseRoutePath(file);\n        const modulePath = path.join(appDir, file);\n        const pattern = this.createRoutePattern(route);\n        const existing = target.get(pattern);\n        if (existing?.sourceRoot === source.root) {\n          throw new Error(\n            `Duplicate ${kind} route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}.`,\n          );\n        }\n        target.set(pattern, {\n          route,\n          modulePath,\n          pattern,\n          source: \"file\",\n          sourceRoot: source.root,\n        });\n      }\n    }\n\n    for (const file of [...pageFiles, ...slotDefaultFiles]) {\n      const slot = parseRouteSlotFile(file);\n      if (!slot) continue;\n\n      const modulePath = path.join(appDir, file);\n      const pattern = this.createRoutePattern(slot.route);\n      const ownerPattern = this.createRoutePattern(slot.ownerRoute);\n      const key = `${ownerPattern}:${slot.name}:${slot.interception ? \"intercept\" : \"slot\"}:${\n        slot.fallback ? \"default\" : pattern\n      }`;\n      const existing = this.routeSlots.get(key);\n      if (existing?.sourceRoot === source.root) {\n        throw new Error(\n          `Duplicate route slot \"${slot.name}\" for \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}.`,\n        );\n      }\n\n      this.routeSlots.set(key, {\n        route: slot.route,\n        modulePath,\n        pattern,\n        source: \"file\",\n        sourceRoot: source.root,\n        name: slot.name,\n        ownerPattern,\n        interception: slot.interception,\n        fallback: slot.fallback,\n        containerId: createRouteSlotContainerId(slot.name, ownerPattern),\n      });\n    }\n\n    for (const file of metadataImageFiles) {\n      const fileBase = path.basename(file, path.extname(file));\n      const kind: MetadataImageKind = fileBase === \"twitter-image\" ? \"twitter\" : \"opengraph\";\n      const fileName = kind === \"twitter\" ? \"twitter-image\" : \"opengraph-image\";\n      const route = parseRoutePath(file);\n      const modulePath = path.join(appDir, file);\n      const pattern = this.createRoutePattern(route);\n      const key = `${kind}:${pattern}`;\n      const existing = this.metadataImages.get(key);\n      const sourceType = isStaticMetadataImageFile(file) ? \"static\" : \"module\";\n\n      if (existing?.sourceRoot === source.root) {\n        throw new Error(\n          `Duplicate ${fileName} route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}. Keep only one static image or module per route segment.`,\n        );\n      }\n\n      const staticInfo =\n        sourceType === \"static\" ? await inspectStaticMetadataImage(modulePath) : undefined;\n\n      this.metadataImages.set(key, {\n        route,\n        modulePath,\n        pattern,\n        kind,\n        fileName,\n        sourceType,\n        staticInfo,\n        source: \"file\",\n        sourceRoot: source.root,\n      });\n    }\n\n    for (const file of metadataRouteFiles) {\n      const descriptor = getApplicationMetadataRouteDescriptor(\n        path.basename(file, path.extname(file)),\n      );\n      if (!descriptor) continue;\n      const route = parseRoutePath(file);\n      const modulePath = path.join(appDir, file);\n      const pattern = this.createRoutePattern(route);\n      const key = `${descriptor.kind}:${pattern}`;\n      const existing = this.metadataRoutes.get(key);\n\n      if (existing?.sourceRoot === source.root) {\n        throw new Error(\n          `Duplicate ${descriptor.fileName} route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}. Keep only one .ts or .js metadata route per segment.`,\n        );\n      }\n\n      this.metadataRoutes.set(key, {\n        route,\n        modulePath,\n        pattern,\n        ...descriptor,\n        source: \"file\",\n        sourceRoot: source.root,\n      });\n    }\n  }\n\n  private async discoverProgrammaticRoutes(source: FarmSourceRoot): Promise<void> {\n    const manifests = await loadProgrammaticRouteManifests({\n      root: source.root,\n      srcDir: source.srcDir,\n      loadModule: (filePath) => this.loadProgrammaticRoutesModule(filePath),\n    });\n\n    for (const { filePath, manifest } of manifests) {\n      for (const definition of manifest.routes) {\n        if (definition.kind === \"page\") {\n          const route = parseProgrammaticRoutePath(definition.path, \"page\");\n          const pattern = this.createRoutePattern(route);\n          const existing = this.routes.get(pattern);\n\n          if (existing?.sourceRoot === source.root) {\n            throw new Error(\n              `Duplicate page route \"${pattern}\". Found both ${existing.modulePath} and programmatic route in ${filePath}.`,\n            );\n          }\n\n          const modulePath = createProgrammaticRouteModuleId(filePath, \"page\", definition.path);\n          this.programmaticPages.set(modulePath, definition);\n          this.registerPageRoute({\n            route,\n            modulePath,\n            pattern,\n            source: \"programmatic\",\n            sourceRoot: source.root,\n          });\n        }\n\n        if (definition.kind === \"layout\") {\n          const route = parseProgrammaticRoutePath(definition.path, \"layout\");\n          const pattern = this.createRoutePattern(route);\n          const existing = this.layouts.get(pattern);\n          if (existing?.sourceRoot === source.root) {\n            throw new Error(\n              `Duplicate layout route \"${pattern}\". Found both ${existing.modulePath} and programmatic route in ${filePath}.`,\n            );\n          }\n          const modulePath = createProgrammaticRouteModuleId(filePath, \"layout\", definition.path);\n          this.programmaticLayouts.set(modulePath, definition);\n          this.layouts.set(pattern, {\n            route,\n            modulePath,\n            pattern,\n            source: \"programmatic\",\n            sourceRoot: source.root,\n          });\n        }\n\n        if (definition.kind === \"redirect\") {\n          const route = parseProgrammaticRoutePath(definition.source, \"page\");\n          const pattern = this.createRoutePattern(route);\n          this.redirects.set(pattern, {\n            route,\n            pattern,\n            definition,\n          });\n        }\n      }\n    }\n  }\n\n  private async loadProgrammaticRoutesModule(filePath: string): Promise<Record<string, any>> {\n    if (this.viteServer) {\n      const viteRoot = this.viteServer.config?.root || this.config.root || process.cwd();\n      return await this.viteServer.ssrLoadModule(toViteModuleId(filePath, viteRoot));\n    }\n\n    const fileUrl = `file://${filePath}`;\n    return await import(/* @vite-ignore */ fileUrl);\n  }\n\n  /**\n   * Find all layouts that should wrap a given path\n   */\n  private findMatchingLayouts(pathname: string): RouteEntry[] {\n    const matchingLayouts: RouteEntry[] = [];\n\n    const sortedLayouts = Array.from(this.layouts.values()).sort((a, b) => {\n      return a.route.segments.length - b.route.segments.length;\n    });\n\n    for (const layoutEntry of sortedLayouts) {\n      if (matchRoutePrefix(pathname, layoutEntry.route.segments)) {\n        matchingLayouts.push(layoutEntry);\n      }\n    }\n\n    return matchingLayouts;\n  }\n\n  private findMatchingRouteSlots(pathname: string, interceptFrom?: string): MatchedRouteSlot[] {\n    const groups = new Map<string, RouteSlotEntry[]>();\n    for (const entry of this.routeSlots.values()) {\n      if (!this.matchesRoutePrefix(pathname, entry.ownerPattern)) continue;\n      const key = `${entry.ownerPattern}:${entry.name}`;\n      const entries = groups.get(key) ?? [];\n      entries.push(entry);\n      groups.set(key, entries);\n    }\n\n    const normalizedFrom = interceptFrom\n      ? this.toRoutePathname(new URL(interceptFrom, \"http://farm.local\").pathname)\n      : undefined;\n    const matches: MatchedRouteSlot[] = [];\n\n    for (const entries of groups.values()) {\n      const candidates = entries\n        .filter((entry) => !entry.fallback)\n        .filter(\n          (entry) =>\n            !entry.interception ||\n            (normalizedFrom !== undefined &&\n              this.matchesRoutePrefix(normalizedFrom, entry.ownerPattern)),\n        )\n        .map((entry) => ({\n          entry,\n          match: matchRoute(pathname, entry.route.segments),\n        }))\n        .filter((candidate) => candidate.match.matches)\n        .sort((left, right) => {\n          if (left.entry.interception !== right.entry.interception) {\n            return left.entry.interception ? -1 : 1;\n          }\n          return compareRouteEntries(left.entry, right.entry);\n        });\n\n      const selected = candidates[0];\n      if (selected) {\n        matches.push({\n          name: selected.entry.name,\n          ownerPattern: selected.entry.ownerPattern,\n          containerId: selected.entry.containerId,\n          interception: selected.entry.interception,\n          fallback: false,\n          route: selected.entry,\n          params: selected.match.params,\n        });\n        continue;\n      }\n\n      const fallback = entries.find((entry) => entry.fallback);\n      if (fallback) {\n        matches.push({\n          name: fallback.name,\n          ownerPattern: fallback.ownerPattern,\n          containerId: fallback.containerId,\n          interception: false,\n          fallback: true,\n          route: fallback,\n          params: {},\n        });\n      }\n    }\n\n    return matches.sort((left, right) => {\n      const ownerDifference = left.route.route.segments.length - right.route.route.segments.length;\n      return ownerDifference || left.name.localeCompare(right.name);\n    });\n  }\n\n  private matchesRoutePrefix(pathname: string, pattern: string): boolean {\n    if (pattern === \"/\") return true;\n    const patternSegments = parseRoutePath(`${pattern}/page.tsx`).segments;\n    return matchRoutePrefix(pathname, patternSegments);\n  }\n\n  private findNearestBoundary(\n    pathname: string,\n    boundaries: Map<string, RouteEntry>,\n  ): RouteEntry | null {\n    const normalizedPath = pathname === \"/\" ? \"/\" : pathname.replace(/\\/$/, \"\");\n    let bestMatch: RouteEntry | null = null;\n\n    for (const boundaryEntry of boundaries.values()) {\n      if (!matchRoutePrefix(normalizedPath, boundaryEntry.route.segments)) continue;\n\n      if (!bestMatch || boundaryEntry.route.segments.length > bestMatch.route.segments.length) {\n        bestMatch = boundaryEntry;\n      }\n    }\n\n    return bestMatch;\n  }\n\n  /**\n   * Log discovered routes for debugging\n   */\n  private logRoutes(): void {\n    if (this.routes.size > 0) {\n      logger.info(\"Registered routes:\");\n      for (const [pattern, entry] of this.routes) {\n        console.log(`  ${pattern} -> ${entry.modulePath}`);\n      }\n    }\n\n    if (this.layouts.size > 0) {\n      logger.info(\"Registered layouts:\");\n      for (const [pattern, entry] of this.layouts) {\n        console.log(`  ${pattern} -> ${entry.modulePath}`);\n      }\n    }\n  }\n\n  /**\n   * Collect SSG pages for static generation\n   *\n   * Returns all pages marked with `export const ssg = true` along with\n   * their pre-computed paths (for dynamic routes using getStaticPaths)\n   */\n  async collectSSGPages(): Promise<SSGCollectionResult> {\n    const routes = Array.from(this.routes.values()).map((entry) => ({\n      path: entry.pattern,\n      filePath: entry.modulePath,\n      isDynamic: entry.route.segments.some((seg) => seg.isDynamic),\n      pattern: entry.pattern,\n    }));\n\n    const i18n = this.getI18nConfig();\n    const result = await collectSSGPages(routes, (filePath) => this.loadRouteModule(filePath), {\n      suggestStaticRendering: shouldSuggestStaticRenderingForI18n(i18n),\n    });\n    if (!i18n) {\n      return result;\n    }\n\n    // A single static URL cannot safely vary by cookie or Accept-Language.\n    // Keep locale-without-prefix pages dynamic so caches never pin one language.\n    if (i18n.routing === \"none\") {\n      return {\n        ssg: [],\n        ssr: Array.from(new Set([...result.ssr, ...result.ssg.map((page) => page.urlPath)])),\n      };\n    }\n\n    return {\n      ssg: result.ssg.flatMap((page) =>\n        i18n.locales.map((locale) => ({\n          ...page,\n          urlPath: localizeFarmPathname(page.urlPath, locale, i18n),\n        })),\n      ),\n      ssr: result.ssr.flatMap((routePath) =>\n        i18n.locales.map((locale) => localizeFarmPathname(routePath, locale, i18n)),\n      ),\n    };\n  }\n\n  private toRoutePathname(pathname: string): string {\n    const i18n = this.getI18nConfig();\n    return i18n ? stripFarmLocaleFromPathname(pathname, i18n) : pathname;\n  }\n\n  private localizeRedirectDestination(destination: string, locale?: string): string {\n    if (!locale || !destination.startsWith(\"/\") || destination.startsWith(\"//\")) {\n      return destination;\n    }\n    const i18n = this.getI18nConfig();\n    return i18n ? localizeFarmHref(destination, locale, i18n) : destination;\n  }\n\n  private getI18nConfig(): ResolvedFarmI18nConfig | undefined {\n    const i18n = this.config.i18n;\n    return i18n && typeof i18n === \"object\" && \"enabled\" in i18n && i18n.enabled ? i18n : undefined;\n  }\n\n  /**\n   * Check if a route is SSG\n   */\n  async isRouteSSG(modulePath: string): Promise<boolean> {\n    try {\n      const mod = await this.loadRouteModule(modulePath);\n      const rendering = await resolveRouteRenderingConfigFromFile(mod, modulePath);\n      return rendering.ssg;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Check if a route has ISR (Incremental Static Regeneration)\n   */\n  async hasRouteISR(modulePath: string): Promise<boolean> {\n    try {\n      const mod = await this.loadRouteModule(modulePath);\n      const rendering = await resolveRouteRenderingConfigFromFile(mod, modulePath);\n      return rendering.ssg && typeof rendering.revalidate === \"number\" && rendering.revalidate > 0;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Get revalidation interval for a route\n   */\n  async getRouteRevalidateInterval(modulePath: string): Promise<number | undefined> {\n    try {\n      const mod = await this.loadRouteModule(modulePath);\n      const rendering = await resolveRouteRenderingConfigFromFile(mod, modulePath);\n      return rendering.revalidate;\n    } catch {\n      return undefined;\n    }\n  }\n}\n\nexport function interpolateRedirectDestination(\n  destination: string,\n  params: Record<string, string>,\n): string {\n  let result = destination;\n\n  for (const [key, value] of Object.entries(params)) {\n    // Longest token first: [[...key]] contains [...key], which contains [key].\n    result = replaceAll(result, `[[...${key}]]`, value);\n    result = replaceAll(result, `[...${key}]`, value);\n    result = replaceAll(result, `[${key}]`, value);\n    result = replaceAll(result, `:${key}*`, value);\n    result = replaceAll(result, `:${key}`, value);\n  }\n\n  return result;\n}\n\nfunction getMetadataImageSuffix(pathname: string): {\n  kind: MetadataImageKind;\n  fileName: MetadataImageEntry[\"fileName\"];\n} | null {\n  if (pathname === \"/opengraph-image\" || pathname.endsWith(\"/opengraph-image\")) {\n    return { kind: \"opengraph\", fileName: \"opengraph-image\" };\n  }\n\n  if (pathname === \"/twitter-image\" || pathname.endsWith(\"/twitter-image\")) {\n    return { kind: \"twitter\", fileName: \"twitter-image\" };\n  }\n\n  return null;\n}\n\nfunction getApplicationMetadataRouteDescriptor(fileName: string): {\n  kind: ApplicationMetadataRouteKind;\n  fileName: ApplicationMetadataRouteEntry[\"fileName\"];\n  outputName: ApplicationMetadataRouteEntry[\"outputName\"];\n} | null {\n  if (fileName === \"sitemap\") {\n    return { kind: \"sitemap\", fileName: \"sitemap\", outputName: \"sitemap.xml\" };\n  }\n  if (fileName === \"robots\") {\n    return { kind: \"robots\", fileName: \"robots\", outputName: \"robots.txt\" };\n  }\n  if (fileName === \"manifest\") {\n    return { kind: \"manifest\", fileName: \"manifest\", outputName: \"manifest.webmanifest\" };\n  }\n  return null;\n}\n\nfunction getApplicationMetadataRouteSuffix(pathname: string): {\n  kind: ApplicationMetadataRouteKind;\n  outputName: ApplicationMetadataRouteEntry[\"outputName\"];\n} | null {\n  for (const fileName of [\"sitemap\", \"robots\", \"manifest\"] as const) {\n    const descriptor = getApplicationMetadataRouteDescriptor(fileName)!;\n    if (\n      pathname === `/${descriptor.outputName}` ||\n      pathname.endsWith(`/${descriptor.outputName}`)\n    ) {\n      return { kind: descriptor.kind, outputName: descriptor.outputName };\n    }\n  }\n  return null;\n}\n\nfunction routeSegmentsToPath(\n  segments: ParsedRoute[\"segments\"],\n  params: Record<string, string>,\n): string {\n  if (segments.length === 0) return \"/\";\n\n  const parts: string[] = [];\n  for (const segment of segments) {\n    if (!segment.isDynamic) {\n      parts.push(segment.segment);\n      continue;\n    }\n\n    const value = params[segment.segment];\n    if (!value && segment.isOptional) continue;\n    if (!value) {\n      parts.push(`[${segment.segment}]`);\n      continue;\n    }\n\n    parts.push(...value.split(\"/\").map((part) => encodeURIComponent(part)));\n  }\n\n  return `/${parts.join(\"/\")}`;\n}\n\nfunction replaceAll(input: string, search: string, replacement: string): string {\n  return input.split(search).join(replacement);\n}\n\nasync function safeGlobFiles(pattern: string, cwd: string): Promise<string[]> {\n  try {\n    return await globFiles(pattern, cwd);\n  } catch {\n    return [];\n  }\n}\n","// Stylesheets the dev document must link beyond globals.css.\n//\n// The dev shell links `/src/app/globals.css` and nothing else, so CSS that\n// enters through a JS import — `import \"@fontsource-variable/geist\"` in a\n// layout, a component stylesheet, vendor CSS — never reaches the page: no\n// error, just silently missing rules (farming-labs/farm.js#658). Vite's module\n// graph knows every stylesheet the app touched; collecting it closes the gap.\n\n/** The slice of Vite's ModuleNode this module reads, kept minimal for tests. */\nexport interface DevStyleModule {\n  url?: string | null;\n  id?: string | null;\n  file?: string | null;\n}\n\nconst STYLE_EXTENSIONS = /\\.(css|scss|sass|less|styl|stylus)(?:$|\\?)/;\n\n/** The stylesheet link the shell already emits; its own `@import`s resolve\n * inside that response, so neither it nor its query variants repeat here. */\nconst ALREADY_LINKED = \"/src/app/globals.css\";\n\n/**\n * Stylesheet URLs from the module graph that the document should link,\n * deduped and sorted for a deterministic head. CSS modules (`.module.css`)\n * are excluded: their classes are hashed through the JS pipeline and a plain\n * link would apply nothing useful.\n */\nexport function collectDevStylesheetUrls(modules: Iterable<DevStyleModule>): string[] {\n  const seen = new Set<string>();\n  for (const mod of modules) {\n    const id = mod.id ?? mod.file ?? \"\";\n    if (!STYLE_EXTENSIONS.test(id)) continue;\n    if (id.includes(\".module.\")) continue;\n    const url = mod.url;\n    if (!url || !url.startsWith(\"/\")) continue;\n    const bare = url.split(\"?\")[0]!;\n    if (bare === ALREADY_LINKED) continue;\n    seen.add(bare);\n  }\n  return [...seen].sort();\n}\n","// Handling for a root layout that returns a full `<html>…</html>` document.\n//\n// Farm owns the document shell — a layout is expected to return a fragment (its\n// children), like the docs example does. When a layout instead returns a whole\n// document, the dev renderer must compose that document as the response rather\n// than nesting it inside the generated shell, which would emit invalid nested\n// `<html>`/`<head>`/`<body>`. This mirrors the production (Nitro) build's\n// `hasFullDocument` path so dev and prod agree.\n\n/** Peel Farm's leading `display:contents` wrapper divs (the stream root and any\n * layout-boundary divs) so the layout's own markup is exposed for inspection. */\nfunction stripContentsWrappers(markup: string): string {\n  let out = markup.replace(/^\\s+/, \"\");\n  const opener = /^<div\\b[^>]*style=\"display\\s*:\\s*contents\"[^>]*>/i;\n  let match: RegExpExecArray | null;\n  while ((match = opener.exec(out))) {\n    out = out.slice(match[0].length).replace(/^\\s+/, \"\");\n  }\n  return out;\n}\n\n/**\n * When `markup` (a rendered layout tree, possibly wrapped in Farm's\n * `display:contents` boundary divs) is a full HTML document, return just that\n * `<html>…</html>` document (leading `<!DOCTYPE>` preserved when present);\n * otherwise return `null`.\n */\nexport function extractFarmFullDocument(markup: string): string | null {\n  const inner = stripContentsWrappers(markup);\n  if (!/^<!doctype/i.test(inner) && !/^<html[\\s>]/i.test(inner)) return null;\n  const start = markup.search(/<!doctype|<html[\\s>]/i);\n  const closeIndex = markup.toLowerCase().lastIndexOf(\"</html>\");\n  if (start < 0 || closeIndex < 0) return null;\n  return markup.slice(start, closeIndex + \"</html>\".length);\n}\n\n/** True when a rendered layout tree is (or wraps) a full HTML document. */\nexport function isFarmFullDocument(markup: string): boolean {\n  return extractFarmFullDocument(markup) !== null;\n}\n\n/**\n * True when `markup` *begins* a full HTML document once Farm's wrappers are\n * peeled — usable on a streamed prefix, before the closing `</html>` has been\n * flushed.\n */\nexport function opensFarmFullDocument(markup: string): boolean {\n  const inner = stripContentsWrappers(markup);\n  return /^<!doctype/i.test(inner) || /^<html[\\s>]/i.test(inner);\n}\n\n/** Remove document title elements before inserting a higher-priority title. */\nexport function removeFarmDocumentTitles(markup: string): string {\n  return markup.replace(/<title\\b[^>]*>[\\s\\S]*?<\\/title>\\s*/gi, \"\");\n}\n\nexport interface FarmFullDocumentAssets {\n  /** Farm-managed `<head>` markup (styles, client/runtime scripts, metadata). */\n  headAssets: string;\n  /** Markup injected just before `</body>` (client bootstrap / entry scripts). */\n  bodyFooter: string;\n  /** Extra `<html>` attributes to merge (theme, direction). */\n  htmlAttributes?: string;\n  /** Existing attributes Farm owns and must replace before merging. */\n  replaceHtmlAttributes?: readonly string[];\n}\n\n/**\n * Compose a layout's own full document with Farm's managed head + body assets,\n * instead of nesting it inside the shell. String replacements use function\n * replacers so any `$`-sequences (`$&`, `$'`, `$$`) in the injected markup or\n * the document are inserted literally rather than expanded.\n */\nexport function composeFarmFullDocument(\n  documentHtml: string,\n  assets: FarmFullDocumentAssets,\n): string {\n  let html = documentHtml;\n\n  if (assets.htmlAttributes) {\n    html = html.replace(/<html\\b([^>]*)>/i, (_match, attrs: string) => {\n      let nextAttributes = attrs;\n      for (const name of assets.replaceHtmlAttributes ?? []) {\n        const escapedName = name.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n        nextAttributes = nextAttributes.replace(\n          new RegExp(\"\\\\s+\" + escapedName + \"=(?:\\\"[^\\\"]*\\\"|'[^']*'|[^\\\\s>]+)\", \"gi\"),\n          \"\",\n        );\n      }\n      return `<html${nextAttributes}${assets.htmlAttributes}>`;\n    });\n  }\n\n  // Ensure a hydration root exists so the client can mount, matching the shell.\n  if (!/\\sid=[\"']root[\"']/i.test(html)) {\n    html = html\n      .replace(/<body\\b([^>]*)>/i, '<body$1><div id=\"root\">')\n      .replace(/<\\/body>/i, \"</div></body>\");\n  }\n\n  if (assets.headAssets) {\n    html = html.replace(/<\\/head>/i, () => `  ${assets.headAssets}\\n</head>`);\n  }\n  if (assets.bodyFooter) {\n    html = html.replace(/<\\/body>/i, () => `  ${assets.bodyFooter}\\n</body>`);\n  }\n\n  return /^\\s*<!doctype/i.test(html) ? html : `<!DOCTYPE html>\\n${html}`;\n}\n","/**\n * Server-side middleware utilities for accessing middleware data in pages\n */\n\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport type { ReadonlyMiddlewareStore } from \"./types\";\n\ntype MiddlewareStoreInput = Record<string, any> | Map<string, any>;\nconst MIDDLEWARE_DATA_STORE_KEY = Symbol.for(\"farm.middlewareDataStore\");\nconst MIDDLEWARE_CONTEXT_STORE_KEY = Symbol.for(\"farm.middlewareContextStore\");\n\nfunction getGlobalMiddlewareStore(key: symbol): AsyncLocalStorage<Map<string, any>> {\n  const state = globalThis as typeof globalThis & Record<symbol, unknown>;\n  const existing = state[key];\n  if (existing instanceof AsyncLocalStorage) {\n    return existing as AsyncLocalStorage<Map<string, any>>;\n  }\n\n  const store = new AsyncLocalStorage<Map<string, any>>();\n  state[key] = store;\n  return store;\n}\n\nconst middlewareStore = getGlobalMiddlewareStore(MIDDLEWARE_DATA_STORE_KEY);\nconst middlewareContextStore = getGlobalMiddlewareStore(MIDDLEWARE_CONTEXT_STORE_KEY);\n\nfunction toMiddlewareMap(data: MiddlewareStoreInput): Map<string, any> {\n  if (data instanceof Map) {\n    return new Map(data);\n  }\n  return new Map(Object.entries(data));\n}\n\n/**\n * Internal: Set middleware data for the current request\n * This is called by the server renderer before rendering starts.\n * Prefer _runWithMiddlewareData for request-scoped async flows.\n */\nexport function _setCurrentMiddlewareData(data: MiddlewareStoreInput): void {\n  middlewareStore.enterWith(toMiddlewareMap(data));\n}\n\n/**\n * Internal: Clear middleware data after request completes\n */\nexport function _clearCurrentMiddlewareData(): void {\n  middlewareStore.enterWith(new Map());\n}\n\n/** Internal: Clear server-only middleware context after rendering. */\nexport function _clearCurrentMiddlewareContext(): void {\n  middlewareContextStore.enterWith(new Map());\n}\n\n/**\n * Internal: Run code with middleware data available\n * This is called by the server renderer\n */\nexport async function _runWithMiddlewareData<T>(\n  data: MiddlewareStoreInput,\n  fn: () => T | Promise<T>,\n): Promise<T> {\n  return middlewareStore.run(toMiddlewareMap(data), fn);\n}\n\n/** Internal: Run code with server-only middleware context available. */\nexport async function _runWithMiddlewareContext<T>(\n  context: MiddlewareStoreInput,\n  fn: () => T | Promise<T>,\n): Promise<T> {\n  return middlewareContextStore.run(toMiddlewareMap(context), fn);\n}\n\n/**\n * Get middleware data in a server component\n * No props needed - uses global storage!\n *\n * @example\n * ```tsx\n * import { getMiddlewareData } from 'farm/middleware';\n *\n * export default function Page() {\n *   const data = getMiddlewareData();  // ← No props needed!\n *   const user = data.get('user');\n *   const demoInfo = data.get('demoInfo');\n *\n *   return <div>Welcome {user?.name}</div>;\n * }\n * ```\n */\nexport function getMiddlewareData<T extends Record<string, any> = Record<string, any>>(): Map<\n  keyof T,\n  T[keyof T]\n> {\n  return (middlewareStore.getStore() || new Map()) as Map<keyof T, T[keyof T]>;\n}\n\n/**\n * Get a specific value from middleware data (synchronous)\n * Uses AsyncLocalStorage for request scoping - no props needed.\n *\n * @example\n * ```tsx\n * import { getMiddlewareValue } from 'farm/middleware';\n *\n * export default function Page() {\n *   const user = getMiddlewareValue<User>('user');  // ← No props needed!\n *   const stats = getMiddlewareValue('dashboardStats');\n *\n *   return <div>Welcome {user?.name}</div>;\n * }\n * ```\n */\nexport function getMiddlewareValue<T = any>(key: string): T | undefined {\n  const data = getMiddlewareData();\n  return data.get(key);\n}\n\n/**\n * Read server-only values set by route middleware for the current request.\n * The returned store is available to the matched page, layouts, and nested\n * Server Components, but is never added to hydration props.\n */\nexport function getMiddlewareContext<\n  T extends Record<string, any> = Record<string, any>,\n>(): ReadonlyMiddlewareStore<T> {\n  return (middlewareContextStore.getStore() || new Map()) as unknown as ReadonlyMiddlewareStore<T>;\n}\n\n/**\n * Type-safe middleware data accessor with type parameter\n *\n * @example\n * ```tsx\n * import { createMiddlewareAccessor } from 'farm/middleware/server';\n *\n * interface MiddlewareData {\n *   user: { id: number; name: string };\n *   dashboardStats: { views: number; clicks: number };\n * }\n *\n * const getData = createMiddlewareAccessor<MiddlewareData>();\n *\n * export default function Page() {\n *   const data = getData();\n *   const user = data.user;  // Fully typed!\n *   const stats = data.dashboardStats;  // Fully typed!\n *\n *   return <div>Welcome {user?.name}</div>;\n * }\n * ```\n */\nexport function createMiddlewareAccessor<T extends Record<string, any>>() {\n  return (): Partial<T> => {\n    const data = getMiddlewareData();\n    const result: any = {};\n\n    for (const [key, value] of data) {\n      result[key] = value;\n    }\n\n    return result as Partial<T>;\n  };\n}\n","type CurrentRequestResolver = () => Request | undefined;\n\nconst CURRENT_REQUEST_RESOLVER_KEY = Symbol.for(\"farm.currentRequestResolver\");\n\ntype GlobalWithCurrentRequestResolver = typeof globalThis & {\n  [CURRENT_REQUEST_RESOLVER_KEY]?: CurrentRequestResolver;\n};\n\nfunction getGlobalState(): GlobalWithCurrentRequestResolver {\n  return globalThis as GlobalWithCurrentRequestResolver;\n}\n\nexport function _setCurrentRequestResolver(resolver: CurrentRequestResolver | undefined): void {\n  getGlobalState()[CURRENT_REQUEST_RESOLVER_KEY] = resolver;\n}\n\nexport function _resolveCurrentRequest(): Request | undefined {\n  return getGlobalState()[CURRENT_REQUEST_RESOLVER_KEY]?.();\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { Readable } from \"node:stream\";\nimport type { FarmRequest } from \"../types\";\nimport { _setCurrentRequestResolver } from \"./request-bridge\";\n\nconst REQUEST_STORAGE_KEY = Symbol.for(\"@farm.js/core/request-storage\");\n\nfunction getRequestStore(): AsyncLocalStorage<Request> {\n  const runtime = globalThis as typeof globalThis & Record<PropertyKey, unknown>;\n  const existing = runtime[REQUEST_STORAGE_KEY];\n  if (existing instanceof AsyncLocalStorage) {\n    return existing as AsyncLocalStorage<Request>;\n  }\n\n  const storage = new AsyncLocalStorage<Request>();\n  runtime[REQUEST_STORAGE_KEY] = storage;\n  return storage;\n}\n\nconst requestStore = getRequestStore();\n\n_setCurrentRequestResolver(() => requestStore.getStore());\n\nexport interface FarmRequestURLOptions {\n  origin?: string | URL;\n  trustProxy?: boolean;\n}\n\nexport function resolveFarmRequestURL(req: FarmRequest, options: FarmRequestURLOptions = {}): URL {\n  if (options.origin) {\n    return new URL(req.url || \"/\", options.origin);\n  }\n\n  const forwardedHost = options.trustProxy\n    ? firstForwardedHeaderValue(req.headers[\"x-forwarded-host\"])\n    : undefined;\n  const fallbackHost = firstForwardedHeaderValue(req.headers.host) || \"localhost\";\n  const forwardedProto = options.trustProxy\n    ? firstForwardedHeaderValue(req.headers[\"x-forwarded-proto\"])\n    : undefined;\n  const normalizedProto = forwardedProto?.toLowerCase();\n  const proto =\n    normalizedProto === \"https\" || normalizedProto === \"http\"\n      ? normalizedProto\n      : isEncryptedFarmRequest(req)\n        ? \"https\"\n        : \"http\";\n  return new URL(req.url || \"/\", resolveRequestOrigin(proto, forwardedHost, fallbackHost));\n}\n\nexport function createWebRequestFromFarmRequest(\n  req: FarmRequest,\n  options: FarmRequestURLOptions = {},\n): Request {\n  const fullUrl = resolveFarmRequestURL(req, options).toString();\n\n  const headers = new Headers();\n  for (const [key, value] of Object.entries(req.headers)) {\n    if (value == null) {\n      continue;\n    }\n\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        headers.append(key, item);\n      }\n      continue;\n    }\n\n    headers.set(key, value);\n  }\n\n  const method = (req.method || \"GET\").toUpperCase();\n  const init: RequestInit & { duplex?: \"half\" } = {\n    method: req.method,\n    headers,\n  };\n\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    init.body = Readable.toWeb(req) as ReadableStream<Uint8Array>;\n    init.duplex = \"half\";\n  }\n\n  return new Request(fullUrl, init);\n}\n\nfunction isEncryptedFarmRequest(req: FarmRequest): boolean {\n  return Boolean((req.socket as { encrypted?: boolean } | undefined)?.encrypted);\n}\n\nfunction firstForwardedHeaderValue(value: string | string[] | undefined): string | undefined {\n  const first = Array.isArray(value) ? value[0] : value;\n  const token = first?.split(\",\", 1)[0]?.trim();\n  return token || undefined;\n}\n\nfunction resolveRequestOrigin(proto: \"http\" | \"https\", host: string | undefined, fallback: string) {\n  for (const candidate of [host, fallback, \"localhost\"]) {\n    if (!candidate) continue;\n    if (/[\\s/?#@\\\\]/u.test(candidate)) continue;\n    try {\n      const url = new URL(`${proto}://${candidate}`);\n      if (url.username || url.password || url.pathname !== \"/\" || url.search || url.hash) continue;\n      return url.origin;\n    } catch {\n      // Try the next host instead of turning an untrusted proxy header into a 500.\n    }\n  }\n  return `${proto}://localhost`;\n}\n\nexport async function _runWithCurrentRequest<T>(\n  request: Request,\n  fn: () => Promise<T> | T,\n): Promise<T> {\n  return requestStore.run(request, fn);\n}\n\nexport function getCurrentRequest(): Request {\n  const request = requestStore.getStore();\n  if (!request) {\n    throw new Error(\n      \"No current request is available. getCurrentRequest() can only be used during server rendering.\",\n    );\n  }\n\n  return request;\n}\n\n// Some runtimes (StackBlitz WebContainers among them) lose AsyncLocalStorage\n// context across async boundaries mid-render. Callers whose feature can\n// degrade gracefully should use this instead of getCurrentRequest() so a\n// missing store never turns into a 500.\nexport function getCurrentRequestOrNull(): Request | null {\n  return requestStore.getStore() ?? null;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getFarmRendererComponentExtensions, type FarmRenderer } from \"./renderer\";\n\ninterface FarmNotFoundPathConfig {\n  root: string;\n  renderer: FarmRenderer;\n  notFound?: {\n    component?: string;\n  };\n}\n\nexport function resolveFarmNotFoundComponentPath(\n  config: FarmNotFoundPathConfig,\n  appDirs: readonly string[],\n): string | null {\n  const extensions = getFarmRendererComponentExtensions(config.renderer);\n  const configuredPath = config.notFound?.component?.trim();\n\n  if (configuredPath) {\n    const componentPath = path.isAbsolute(configuredPath)\n      ? path.normalize(configuredPath)\n      : path.resolve(config.root, configuredPath);\n    if (!extensions.some((extension) => componentPath.endsWith(extension))) {\n      throw new Error(\n        `notFound.component must use one of the configured renderer extensions: ${extensions.join(\", \")}`,\n      );\n    }\n    if (!fs.existsSync(componentPath) || !fs.statSync(componentPath).isFile()) {\n      throw new Error(`notFound.component was not found: ${componentPath}`);\n    }\n    return componentPath;\n  }\n\n  let discoveredPath: string | null = null;\n  for (const appDir of appDirs) {\n    for (const extension of extensions) {\n      const candidate = path.join(appDir, `not-found${extension}`);\n      if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {\n        discoveredPath = candidate;\n        break;\n      }\n    }\n  }\n  return discoveredPath;\n}\n","/**\n * Agent-readiness configuration: opt-in primitives that make a Farm site easier\n * for AI agents and crawlers to discover, resolve, and use. Off by default so\n * sites that do not want agent exposure (internal tools, private dashboards) are\n * unaffected.\n */\n\n/** schema.org JSON-LD emitted in the document head to identify the site. */\nexport interface FarmAgentJsonLd {\n  /**\n   * schema.org `@type`. Common values: `\"Organization\"` for a company or\n   * project, `\"SoftwareApplication\"` for a product, `\"WebSite\"`, `\"Person\"`.\n   *\n   * @default \"Organization\"\n   */\n  type?: string;\n  /** Entity name. Defaults to the site's Open Graph site name or page title. */\n  name?: string;\n  /** Canonical URL for the entity. Defaults to the configured `metadataBase`. */\n  url?: string;\n  /** Short description. Defaults to the page/site metadata description. */\n  description?: string;\n  /** Logo URL. */\n  logo?: string;\n  /** URLs that also represent this entity (social profiles, repos) — schema.org `sameAs`. */\n  sameAs?: string[];\n  /** Additional schema.org properties merged into the emitted object. */\n  properties?: Record<string, unknown>;\n}\n\nexport interface FarmAgentUserConfig {\n  /**\n   * Emit schema.org JSON-LD in the document head so agents and crawlers can\n   * resolve the site's identity. `true` emits an `Organization` built from the\n   * site's metadata; an object customizes the type and fields.\n   *\n   * @default false\n   */\n  jsonLd?: boolean | FarmAgentJsonLd;\n}\n\nexport interface ResolvedFarmAgentConfig {\n  jsonLd: FarmAgentJsonLd | false;\n}\n\nexport function resolveFarmAgentConfig(\n  input: FarmAgentUserConfig | undefined,\n): ResolvedFarmAgentConfig {\n  const jsonLd = input?.jsonLd;\n  if (!jsonLd) return { jsonLd: false };\n  return { jsonLd: jsonLd === true ? {} : jsonLd };\n}\n\nexport interface FarmAgentJsonLdContext {\n  metadataBase?: string;\n  siteName?: string;\n  title?: string;\n  description?: string;\n}\n\nfunction pruneUndefined(object: Record<string, unknown>): Record<string, unknown> {\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(object)) {\n    if (value !== undefined && value !== null && value !== \"\") result[key] = value;\n  }\n  return result;\n}\n\n/**\n * Serialize a JSON-LD object for inline `<script>` embedding, escaping `<` so a\n * value containing `</script>` cannot break out of the tag.\n */\nfunction serializeJsonLd(value: unknown): string {\n  return JSON.stringify(value).replace(/</g, \"\\\\u003c\");\n}\n\n/**\n * Build a JSON-LD `<script>` tag for the site identity, or an empty string when\n * there is not enough information to emit meaningful structured data.\n */\nexport function renderFarmAgentJsonLd(\n  config: FarmAgentJsonLd,\n  context: FarmAgentJsonLdContext,\n): string {\n  const base = pruneUndefined({\n    name: config.name ?? context.siteName ?? context.title,\n    url: config.url ?? context.metadataBase,\n    description: config.description ?? context.description,\n    logo: config.logo,\n    sameAs: config.sameAs && config.sameAs.length > 0 ? config.sameAs : undefined,\n  });\n\n  const object = {\n    \"@context\": \"https://schema.org\",\n    \"@type\": config.type || \"Organization\",\n    ...base,\n    ...(config.properties || {}),\n  };\n\n  // Nothing beyond @context/@type and no custom properties: not worth emitting.\n  if (Object.keys(object).length <= 2 && !config.properties) {\n    return \"\";\n  }\n\n  return `<script type=\"application/ld+json\">${serializeJsonLd(object)}</script>`;\n}\n","import type { Metadata } from \"./types\";\nimport { renderFarmAgentJsonLd, type FarmAgentJsonLd } from \"./agent-config\";\n\nexport type MetadataImageKind = \"opengraph\" | \"twitter\";\n\nexport interface FarmMetadataImageReference {\n  kind: MetadataImageKind;\n  href: string;\n  alt?: string;\n  width?: number;\n  height?: number;\n  contentType?: string;\n}\n\nexport interface RenderedMetadataHead {\n  title: string;\n  tags: string;\n  hasFavicon: boolean;\n  /** False when the title is the framework fallback rather than configured. */\n  hasExplicitTitle: boolean;\n}\n\ntype MetadataRecord = Metadata & Record<string, any>;\n\nexport function mergeMetadata(\n  base: MetadataRecord | undefined,\n  next: MetadataRecord | undefined,\n): MetadataRecord {\n  if (!base) return next ? { ...next } : {};\n  if (!next) return { ...base };\n\n  return {\n    ...base,\n    ...next,\n    title: mergeMetadataTitle(base.title, next.title),\n    openGraph: mergeNestedMetadata(base.openGraph, next.openGraph),\n    twitter: mergeNestedMetadata(base.twitter, next.twitter),\n    alternates: mergeNestedMetadata((base as any).alternates, (next as any).alternates),\n    icons: mergeNestedMetadata((base as any).icons, (next as any).icons),\n  };\n}\n\nfunction mergeMetadataTitle(base: Metadata[\"title\"], next: Metadata[\"title\"]): Metadata[\"title\"] {\n  if (next === undefined) return base;\n\n  const parentTemplate = isRecord(base) ? normalizeContent(base.template) : undefined;\n  if (typeof next === \"string\") {\n    return parentTemplate ? applyTitleTemplate(parentTemplate, next) : next;\n  }\n\n  if (!isRecord(next)) return next;\n\n  const defaultTitle = normalizeContent(next.default) ?? resolveMetadataTitle(base);\n  return {\n    ...next,\n    default:\n      defaultTitle && parentTemplate\n        ? applyTitleTemplate(parentTemplate, defaultTitle)\n        : defaultTitle,\n  };\n}\n\nfunction applyTitleTemplate(template: string, title: string): string {\n  return template.split(\"%s\").join(title);\n}\n\nexport function addMetadataImageReference(\n  metadata: MetadataRecord,\n  reference: FarmMetadataImageReference,\n): MetadataRecord {\n  if (reference.kind === \"opengraph\") {\n    const openGraph = { ...metadata.openGraph };\n    if (!hasMetadataImages(openGraph.images) && !hasMetadataImages((openGraph as any).image)) {\n      openGraph.images = [\n        {\n          url: reference.href,\n          width: reference.width,\n          height: reference.height,\n          alt: reference.alt,\n          type: reference.contentType,\n        },\n      ];\n    }\n\n    return {\n      ...metadata,\n      openGraph,\n    };\n  }\n\n  const twitter = { ...metadata.twitter };\n  if (!hasMetadataImages(twitter.images)) {\n    twitter.images = [reference.href];\n    twitter.card = twitter.card || \"summary_large_image\";\n  }\n\n  return {\n    ...metadata,\n    twitter,\n  };\n}\n\nexport interface RenderMetadataHeadOptions {\n  /**\n   * Current request pathname. Used to emit a default `<link rel=\"canonical\">`\n   * when the route does not set one, so agents and crawlers can resolve the\n   * page's identity. Combined with `metadataBase` into an absolute URL when a\n   * base is configured; otherwise emitted as a self-referential path.\n   */\n  pathname?: string;\n  /**\n   * Agent JSON-LD config. When truthy, a schema.org JSON-LD script is emitted in\n   * the head, built from this config and the page/site metadata. `true` uses the\n   * defaults; `false`/omitted (the default) emits nothing.\n   */\n  jsonLd?: FarmAgentJsonLd | boolean;\n}\n\nexport function renderMetadataHead(\n  metadata: MetadataRecord | undefined,\n  options: RenderMetadataHeadOptions = {},\n): RenderedMetadataHead {\n  const resolvedMetadata = metadata || {};\n  const metadataBase = resolveMetadataBase(resolvedMetadata);\n  const explicitTitle = resolveMetadataTitle(resolvedMetadata.title);\n  const title = explicitTitle || \"Farm.js App\";\n  const tags: string[] = [];\n\n  appendMetaName(tags, \"description\", resolvedMetadata.description);\n  appendMetaName(tags, \"keywords\", normalizeKeywords(resolvedMetadata.keywords));\n  appendMetaName(tags, \"author\", (resolvedMetadata as any).author);\n\n  if (Array.isArray(resolvedMetadata.authors)) {\n    for (const author of resolvedMetadata.authors) {\n      appendMetaName(tags, \"author\", author?.name);\n      if (author?.url) {\n        appendLink(tags, \"author\", resolveMetadataUrl(author.url, metadataBase));\n      }\n    }\n  }\n\n  appendMetaName(tags, \"creator\", resolvedMetadata.creator);\n  appendMetaName(tags, \"publisher\", resolvedMetadata.publisher);\n  appendMetaName(tags, \"robots\", normalizeRobots(resolvedMetadata.robots));\n\n  const alternates = (resolvedMetadata as any).alternates;\n  const explicitCanonical = isRecord(alternates) ? alternates.canonical : undefined;\n  // Default the canonical link to the current path when the route does not set\n  // one. This is a self-referential canonical (absolute when `metadataBase` is\n  // configured), which is safe for every page and gives agents/crawlers a\n  // stable identity for the URL.\n  const canonicalHref =\n    explicitCanonical != null\n      ? resolveMetadataUrl(explicitCanonical, metadataBase)\n      : options.pathname\n        ? resolveMetadataUrl(sanitizeSelfCanonicalPathname(options.pathname), metadataBase)\n        : undefined;\n  if (canonicalHref) {\n    appendLink(tags, \"canonical\", canonicalHref);\n  }\n\n  if (isRecord(alternates) && isRecord(alternates.languages)) {\n    for (const [language, href] of Object.entries(alternates.languages)) {\n      appendLink(tags, \"alternate\", resolveMetadataUrl(href, metadataBase), {\n        hreflang: language,\n      });\n    }\n  }\n\n  const hasFavicon = appendIcons(tags, (resolvedMetadata as any).icons, metadataBase);\n\n  if ((resolvedMetadata as any).manifest) {\n    appendLink(\n      tags,\n      \"manifest\",\n      resolveMetadataUrl((resolvedMetadata as any).manifest, metadataBase),\n    );\n  }\n\n  appendOpenGraph(tags, resolvedMetadata.openGraph, metadataBase);\n  appendTwitter(tags, resolvedMetadata.twitter, metadataBase);\n\n  if (options.jsonLd) {\n    const jsonLdConfig = options.jsonLd === true ? {} : options.jsonLd;\n    const jsonLdScript = renderFarmAgentJsonLd(jsonLdConfig, {\n      metadataBase,\n      siteName: isRecord(resolvedMetadata.openGraph)\n        ? normalizeContent(resolvedMetadata.openGraph.siteName)\n        : undefined,\n      title: explicitTitle,\n      description: normalizeContent(resolvedMetadata.description),\n    });\n    if (jsonLdScript) tags.push(jsonLdScript);\n  }\n\n  return {\n    title: escapeText(title),\n    tags: tags.length > 0 ? `\\n  ${tags.join(\"\\n  \")}` : \"\",\n    hasFavicon,\n    hasExplicitTitle: Boolean(explicitTitle),\n  };\n}\n\nfunction mergeNestedMetadata(base: unknown, next: unknown): any {\n  if (isRecord(base) && isRecord(next)) {\n    return {\n      ...base,\n      ...next,\n    };\n  }\n\n  return next ?? base;\n}\n\nfunction appendOpenGraph(tags: string[], openGraph: Metadata[\"openGraph\"], metadataBase?: string) {\n  if (!isRecord(openGraph)) return;\n\n  appendMetaProperty(tags, \"og:title\", openGraph.title);\n  appendMetaProperty(tags, \"og:description\", openGraph.description);\n  appendMetaProperty(tags, \"og:url\", resolveMetadataUrl(openGraph.url, metadataBase));\n  appendMetaProperty(tags, \"og:site_name\", openGraph.siteName);\n  // Default og:type so a route that sets Open Graph data without a type still\n  // emits a valid entity type for agents and social crawlers.\n  appendMetaProperty(tags, \"og:type\", openGraph.type ?? \"website\");\n  appendMetaProperty(tags, \"og:locale\", (openGraph as any).locale);\n\n  const images = normalizeMetadataImages(\n    openGraph.images ?? (openGraph as any).image,\n    metadataBase,\n  );\n  for (const image of images) {\n    appendMetaProperty(tags, \"og:image\", image.url);\n    appendMetaProperty(tags, \"og:image:width\", image.width);\n    appendMetaProperty(tags, \"og:image:height\", image.height);\n    appendMetaProperty(tags, \"og:image:alt\", image.alt);\n    appendMetaProperty(tags, \"og:image:type\", image.type);\n  }\n}\n\nfunction appendTwitter(tags: string[], twitter: Metadata[\"twitter\"], metadataBase?: string) {\n  if (!isRecord(twitter)) return;\n\n  appendMetaName(tags, \"twitter:card\", twitter.card);\n  appendMetaName(tags, \"twitter:site\", twitter.site);\n  appendMetaName(tags, \"twitter:creator\", twitter.creator);\n  appendMetaName(tags, \"twitter:title\", twitter.title);\n  appendMetaName(tags, \"twitter:description\", twitter.description);\n\n  for (const image of normalizeMetadataImages(twitter.images, metadataBase)) {\n    appendMetaName(tags, \"twitter:image\", image.url);\n    appendMetaName(tags, \"twitter:image:alt\", image.alt);\n  }\n}\n\nfunction appendIcons(tags: string[], icons: unknown, metadataBase?: string): boolean {\n  if (!icons) return false;\n\n  if (typeof icons === \"string\") {\n    const initialTagCount = tags.length;\n    appendLink(tags, \"icon\", resolveMetadataUrl(icons, metadataBase));\n    return tags.length > initialTagCount;\n  }\n\n  if (!isRecord(icons)) return false;\n\n  const initialTagCount = tags.length;\n  appendIconList(tags, \"icon\", icons.icon, metadataBase);\n  appendIconList(tags, \"shortcut icon\", icons.shortcut, metadataBase);\n  const hasFavicon = tags.length > initialTagCount;\n  appendIconList(tags, \"apple-touch-icon\", icons.apple, metadataBase);\n  return hasFavicon;\n}\n\nfunction appendIconList(tags: string[], rel: string, value: unknown, metadataBase?: string) {\n  for (const icon of normalizeArray(value)) {\n    if (typeof icon === \"string\") {\n      appendLink(tags, rel, resolveMetadataUrl(icon, metadataBase));\n      continue;\n    }\n\n    if (!isRecord(icon)) continue;\n    appendLink(tags, rel, resolveMetadataUrl(icon.url, metadataBase), {\n      sizes: icon.sizes,\n      type: icon.type,\n    });\n  }\n}\n\nfunction appendMetaName(tags: string[], name: string, content: unknown) {\n  const normalized = normalizeContent(content);\n  if (!normalized) return;\n  tags.push(`<meta name=\"${escapeAttribute(name)}\" content=\"${escapeAttribute(normalized)}\">`);\n}\n\nfunction appendMetaProperty(tags: string[], property: string, content: unknown) {\n  const normalized = normalizeContent(content);\n  if (!normalized) return;\n  tags.push(\n    `<meta property=\"${escapeAttribute(property)}\" content=\"${escapeAttribute(normalized)}\">`,\n  );\n}\n\nfunction appendLink(\n  tags: string[],\n  rel: string,\n  href: unknown,\n  attrs: Record<string, unknown> = {},\n) {\n  const normalizedHref = normalizeContent(href);\n  if (!normalizedHref) return;\n\n  const attrText = Object.entries(attrs)\n    .map(([key, value]) => {\n      const normalized = normalizeContent(value);\n      return normalized ? ` ${key}=\"${escapeAttribute(normalized)}\"` : \"\";\n    })\n    .join(\"\");\n\n  tags.push(\n    `<link rel=\"${escapeAttribute(rel)}\" href=\"${escapeAttribute(normalizedHref)}\"${attrText}>`,\n  );\n}\n\nfunction normalizeMetadataImages(\n  value: unknown,\n  metadataBase?: string,\n): Array<{\n  url: string;\n  width?: number;\n  height?: number;\n  alt?: string;\n  type?: string;\n}> {\n  return normalizeArray(value)\n    .map((item) => {\n      if (typeof item === \"string\") {\n        return { url: resolveMetadataUrl(item, metadataBase) || item };\n      }\n\n      if (!isRecord(item)) return null;\n      const rawUrl = item.url || item.src;\n      const url = resolveMetadataUrl(rawUrl, metadataBase);\n      if (!url) return null;\n\n      return {\n        url,\n        width: normalizeNumber(item.width),\n        height: normalizeNumber(item.height),\n        alt: typeof item.alt === \"string\" ? item.alt : undefined,\n        type: typeof item.type === \"string\" ? item.type : undefined,\n      };\n    })\n    .filter((item): item is NonNullable<typeof item> => item !== null);\n}\n\nfunction normalizeArray(value: unknown): unknown[] {\n  if (value == null) return [];\n  return Array.isArray(value) ? value : [value];\n}\n\nfunction hasMetadataImages(value: unknown): boolean {\n  return normalizeMetadataImages(value).length > 0;\n}\n\n/**\n * Resolve a metadata title into displayable text. Exported so client-side\n * navigation resolves the object form the same way SSR does instead of\n * stringifying it into \"[object Object]\".\n */\nexport function resolveMetadataTitle(title: Metadata[\"title\"]): string | undefined {\n  if (typeof title === \"string\") return title;\n  if (isRecord(title)) {\n    return normalizeContent(title.default);\n  }\n  return undefined;\n}\n\nfunction normalizeKeywords(keywords: Metadata[\"keywords\"]): string | undefined {\n  if (Array.isArray(keywords)) return keywords.filter(Boolean).join(\", \");\n  return keywords;\n}\n\nfunction normalizeRobots(robots: Metadata[\"robots\"]): string | undefined {\n  if (typeof robots === \"string\") return robots;\n  if (!isRecord(robots)) return undefined;\n\n  const values: string[] = [];\n  if (typeof robots.index === \"boolean\") values.push(robots.index ? \"index\" : \"noindex\");\n  if (typeof robots.follow === \"boolean\") values.push(robots.follow ? \"follow\" : \"nofollow\");\n  return values.join(\", \") || undefined;\n}\n\nfunction resolveMetadataBase(metadata: MetadataRecord): string | undefined {\n  const base = metadata.metadataBase;\n  if (!base) return undefined;\n  return String(base);\n}\n\n/**\n * Keep the defaulted self-canonical on this origin. The pathname comes straight\n * from the request URL, and forms like `//evil.com` or `/\\evil.com` resolve to a\n * cross-origin URL through `new URL()` (and browsers treat `\\` as `/`), which\n * would advertise an attacker's domain as the page's canonical identity. Any\n * request path introducing an authority is collapsed to a single leading slash\n * so the canonical stays same-origin. Developer-supplied `alternates.canonical`\n * is trusted and does not pass through here.\n */\nfunction sanitizeSelfCanonicalPathname(pathname: string): string {\n  if (typeof pathname !== \"string\" || pathname.length === 0) return \"/\";\n  const collapsed = pathname.replace(/^[/\\\\]+/, \"/\");\n  return collapsed.startsWith(\"/\") ? collapsed : `/${collapsed}`;\n}\n\nfunction resolveMetadataUrl(value: unknown, metadataBase?: string): string | undefined {\n  const normalized = normalizeContent(value);\n  if (!normalized) return undefined;\n  if (!metadataBase) return normalized;\n\n  try {\n    return new URL(normalized, metadataBase).toString();\n  } catch {\n    return normalized;\n  }\n}\n\nfunction normalizeNumber(value: unknown): number | undefined {\n  if (typeof value === \"number\" && Number.isFinite(value)) return value;\n  if (typeof value === \"string\") {\n    const parsed = Number(value);\n    return Number.isFinite(parsed) ? parsed : undefined;\n  }\n  return undefined;\n}\n\nfunction normalizeContent(value: unknown): string | undefined {\n  if (value == null) return undefined;\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n  if (value instanceof URL) return value.toString();\n  return undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, any> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction escapeText(value: string): string {\n  return value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n  return escapeText(value).replace(/\"/g, \"&quot;\");\n}\n","export const FARM_DEFERRED_CONTENT_TYPE = \"application/x-farm-deferred+json\";\nexport const FARM_DEFERRED_ERROR_CODE = \"FARM_DEFERRED_DATA_ERROR\";\nexport const FARM_DEFERRED_BRAND: unique symbol = Symbol.for(\n  \"farm.deferred\",\n) as typeof FARM_DEFERRED_BRAND;\n\nconst FARM_DEFERRED_MARKER = \"$farmDeferred\";\n\ntype DeferredState<T = unknown> =\n  | { status: \"pending\" }\n  | { status: \"fulfilled\"; value: T }\n  | { status: \"rejected\"; reason: unknown };\n\nexport interface Deferred<T> extends Promise<T> {\n  readonly [FARM_DEFERRED_BRAND]: true;\n}\n\nexport interface PreparedDeferredData {\n  data: unknown;\n  records: readonly DeferredRecord[];\n}\n\nexport interface DeferredRecord {\n  id: string;\n  promise: Deferred<unknown>;\n}\n\nexport type DeferredSettlement =\n  | { status: \"fulfilled\"; value: unknown }\n  | { status: \"rejected\"; error: { code: typeof FARM_DEFERRED_ERROR_CODE; message: string } };\n\nexport type DeferredSettlements = Record<string, DeferredSettlement>;\n\nexport interface DeferredDataResponseOptions {\n  onError?: (error: unknown, id: string) => void;\n}\n\nexport class DeferredDataError extends Error {\n  readonly name = \"DeferredDataError\";\n  readonly code = FARM_DEFERRED_ERROR_CODE;\n\n  constructor(message = \"Deferred route data failed to load\") {\n    super(message);\n  }\n}\n\nconst deferredStates = new WeakMap<object, DeferredState>();\n\nexport function defer<T>(value: PromiseLike<T>): Deferred<Awaited<T>> {\n  if (isDeferred(value)) {\n    return value as Deferred<Awaited<T>>;\n  }\n\n  const promise = Promise.resolve(value) as Deferred<Awaited<T>>;\n  Object.defineProperty(promise, FARM_DEFERRED_BRAND, {\n    configurable: false,\n    enumerable: false,\n    value: true,\n    writable: false,\n  });\n  deferredStates.set(promise, { status: \"pending\" });\n  promise.then(\n    (resolved) => deferredStates.set(promise, { status: \"fulfilled\", value: resolved }),\n    (reason) => deferredStates.set(promise, { status: \"rejected\", reason }),\n  );\n  return promise;\n}\n\nexport function isDeferred<T = unknown>(value: unknown): value is Deferred<T> {\n  return Boolean(\n    value &&\n    (typeof value === \"object\" || typeof value === \"function\") &&\n    (value as Record<PropertyKey, unknown>)[FARM_DEFERRED_BRAND] === true,\n  );\n}\n\nexport function prepareDeferredData(value: unknown): PreparedDeferredData {\n  const context = createEncodingContext();\n  return {\n    data: encodeDeferredValue(value, context, new WeakSet()),\n    records: context.records,\n  };\n}\n\nexport function snapshotDeferredData(records: readonly DeferredRecord[]): DeferredSettlements {\n  const context = createEncodingContext(records);\n  const settlements: DeferredSettlements = {};\n\n  for (let index = 0; index < context.records.length; index++) {\n    const record = context.records[index]!;\n    const state = readDeferredState(record.promise);\n\n    if (state.status === \"fulfilled\") {\n      try {\n        settlements[record.id] = {\n          status: \"fulfilled\",\n          value: encodeDeferredValue(state.value, context, new WeakSet()),\n        };\n      } catch {\n        settlements[record.id] = createRejectedSettlement();\n      }\n    } else {\n      settlements[record.id] = createRejectedSettlement();\n    }\n  }\n\n  return settlements;\n}\n\nexport function reviveDeferredData<T>(value: T, settlements: DeferredSettlements): T {\n  return reviveDeferredValue(value, new Map(), settlements) as T;\n}\n\nexport function createDeferredDataResponse(\n  value: unknown,\n  init: ResponseInit = {},\n  options: DeferredDataResponseOptions = {},\n): Response {\n  const context = createEncodingContext();\n  const data = encodeDeferredValue(value, context, new WeakSet());\n  const headers = new Headers(init.headers);\n\n  if (context.records.length === 0) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n    return new Response(JSON.stringify(data), { ...init, headers });\n  }\n\n  headers.set(\"Content-Type\", `${FARM_DEFERRED_CONTENT_TYPE}; charset=utf-8`);\n  headers.set(\"Cache-Control\", headers.get(\"Cache-Control\") || \"private, max-age=0\");\n  const initialLine = encodeDeferredMessage({ type: \"data\", data });\n  const encoder = new TextEncoder();\n  let cancelled = false;\n\n  const stream = new ReadableStream<Uint8Array>({\n    start(controller) {\n      controller.enqueue(encoder.encode(initialLine));\n      let pending = context.records.length;\n\n      const finishRecord = () => {\n        pending--;\n        if (!cancelled && pending === 0) controller.close();\n      };\n\n      const schedule = (record: DeferredRecord) => {\n        record.promise\n          .then(\n            (resolved) => {\n              if (cancelled) return;\n              try {\n                const previousLength = context.records.length;\n                const encoded = encodeDeferredValue(resolved, context, new WeakSet());\n                const nestedRecords = context.records.slice(previousLength);\n                pending += nestedRecords.length;\n                controller.enqueue(\n                  encoder.encode(\n                    encodeDeferredMessage({ type: \"resolve\", id: record.id, data: encoded }),\n                  ),\n                );\n                for (const nestedRecord of nestedRecords) schedule(nestedRecord);\n              } catch (error) {\n                reportDeferredError(options, error, record.id);\n                controller.enqueue(\n                  encoder.encode(\n                    encodeDeferredMessage({\n                      type: \"reject\",\n                      id: record.id,\n                      error: createDeferredPublicError(),\n                    }),\n                  ),\n                );\n              }\n            },\n            (error) => {\n              if (cancelled) return;\n              reportDeferredError(options, error, record.id);\n              controller.enqueue(\n                encoder.encode(\n                  encodeDeferredMessage({\n                    type: \"reject\",\n                    id: record.id,\n                    error: createDeferredPublicError(),\n                  }),\n                ),\n              );\n            },\n          )\n          .finally(finishRecord);\n      };\n\n      const initialRecords = context.records.slice();\n      for (const record of initialRecords) schedule(record);\n    },\n    cancel() {\n      cancelled = true;\n    },\n  });\n\n  return new Response(stream, { ...init, headers });\n}\n\nexport async function readDeferredDataResponse<T>(response: Response): Promise<T> {\n  const contentType = response.headers.get(\"Content-Type\") || \"\";\n  if (!contentType.toLowerCase().startsWith(FARM_DEFERRED_CONTENT_TYPE)) {\n    return (await response.json()) as T;\n  }\n  if (!response.body) {\n    throw new DeferredDataError(\"Deferred route data response has no body\");\n  }\n\n  const reader = response.body.getReader();\n  const decoder = new TextDecoder();\n  const controllers = new Map<string, ControlledDeferred>();\n  let buffer = \"\";\n  let complete = false;\n\n  const readLine = async (): Promise<string | undefined> => {\n    while (true) {\n      const newline = buffer.indexOf(\"\\n\");\n      if (newline >= 0) {\n        const line = buffer.slice(0, newline);\n        buffer = buffer.slice(newline + 1);\n        return line;\n      }\n      if (complete) {\n        if (!buffer) return undefined;\n        const line = buffer;\n        buffer = \"\";\n        return line;\n      }\n\n      const chunk = await reader.read();\n      complete = chunk.done;\n      if (chunk.value) buffer += decoder.decode(chunk.value, { stream: !chunk.done });\n      if (chunk.done) buffer += decoder.decode();\n    }\n  };\n\n  const firstLine = await readLine();\n  if (!firstLine) {\n    reader.releaseLock();\n    throw new DeferredDataError(\"Deferred route data response is empty\");\n  }\n\n  const initial = parseDeferredMessage(firstLine);\n  if (initial.type !== \"data\") {\n    reader.releaseLock();\n    throw new DeferredDataError(\"Deferred route data response is invalid\");\n  }\n  const data = reviveDeferredValue(initial.data, controllers) as T;\n\n  void (async () => {\n    try {\n      for (let line = await readLine(); line !== undefined; line = await readLine()) {\n        if (!line) continue;\n        const message = parseDeferredMessage(line);\n        if (message.type === \"resolve\") {\n          const controller = getControlledDeferred(message.id, controllers);\n          controller.resolve(reviveDeferredValue(message.data, controllers));\n        } else if (message.type === \"reject\") {\n          getControlledDeferred(message.id, controllers).reject(\n            new DeferredDataError(message.error?.message),\n          );\n        }\n      }\n      rejectPendingDeferred(controllers, \"Deferred route data stream ended before completion\");\n    } catch {\n      rejectPendingDeferred(controllers, \"Deferred route data stream could not be read\");\n    } finally {\n      reader.releaseLock();\n    }\n  })();\n\n  return data;\n}\n\ninterface EncodingContext {\n  records: DeferredRecord[];\n  ids: Map<Deferred<unknown>, string>;\n  nextId: number;\n}\n\ninterface ControlledDeferred {\n  promise: Promise<unknown> & {\n    status?: \"pending\" | \"fulfilled\" | \"rejected\";\n    value?: unknown;\n    reason?: unknown;\n  };\n  resolve(value: unknown): void;\n  reject(error: unknown): void;\n}\n\nfunction createEncodingContext(records: readonly DeferredRecord[] = []): EncodingContext {\n  return {\n    records: [...records],\n    ids: new Map(records.map((record) => [record.promise, record.id])),\n    nextId: records.reduce((highest, record) => {\n      const value = Number(record.id.replace(/^d/, \"\"));\n      return Number.isFinite(value) ? Math.max(highest, value + 1) : highest;\n    }, records.length),\n  };\n}\n\nfunction encodeDeferredValue(\n  value: unknown,\n  context: EncodingContext,\n  ancestors: WeakSet<object>,\n): unknown {\n  if (isDeferred(value)) {\n    let id = context.ids.get(value);\n    if (!id) {\n      id = `d${context.nextId++}`;\n      context.ids.set(value, id);\n      context.records.push({ id, promise: value as Deferred<unknown> });\n    }\n    return { [FARM_DEFERRED_MARKER]: id };\n  }\n  if (!value || typeof value !== \"object\") return value;\n  if (Array.isArray(value)) {\n    assertNotCircular(value, ancestors);\n    const output = value.map((item) => encodeDeferredValue(item, context, ancestors));\n    ancestors.delete(value);\n    return output;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== Object.prototype && prototype !== null) return value;\n\n  assertNotCircular(value, ancestors);\n  const output: Record<string, unknown> = {};\n  for (const [key, item] of Object.entries(value)) {\n    defineDataProperty(output, key, encodeDeferredValue(item, context, ancestors));\n  }\n  ancestors.delete(value);\n  // User data that happens to have the marker shape must not be revived as a\n  // deferred reference. Real ids never start with \"!\", so prefix-escape the\n  // value; revive strips one \"!\" back off.\n  if (isDeferredMarker(output)) {\n    return { [FARM_DEFERRED_MARKER]: `!${output[FARM_DEFERRED_MARKER]}` };\n  }\n  return output;\n}\n\nfunction reviveDeferredValue(\n  value: unknown,\n  controllers: Map<string, ControlledDeferred>,\n  settlements?: DeferredSettlements,\n  applyingSettlements = new Set<string>(),\n): unknown {\n  if (isDeferredMarker(value)) {\n    const id = value[FARM_DEFERRED_MARKER];\n    // Escaped user data, not a deferred reference — restore the original.\n    if (id.startsWith(\"!\")) {\n      return { [FARM_DEFERRED_MARKER]: id.slice(1) };\n    }\n    const controller = getControlledDeferred(id, controllers);\n    const settlement = settlements?.[id];\n    if (settlement && controller.promise.status === \"pending\") {\n      if (applyingSettlements.has(id)) return controller.promise;\n      applyingSettlements.add(id);\n      if (settlement.status === \"fulfilled\") {\n        controller.resolve(\n          reviveDeferredValue(settlement.value, controllers, settlements, applyingSettlements),\n        );\n      } else {\n        controller.reject(new DeferredDataError(settlement.error.message));\n      }\n      applyingSettlements.delete(id);\n    } else if (settlements && controller.promise.status === \"pending\") {\n      controller.reject(new DeferredDataError(\"Deferred route data was not resolved\"));\n    }\n    return controller.promise;\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) =>\n      reviveDeferredValue(item, controllers, settlements, applyingSettlements),\n    );\n  }\n  if (!value || typeof value !== \"object\") return value;\n\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== Object.prototype && prototype !== null) return value;\n  const output: Record<string, unknown> = {};\n  for (const [key, item] of Object.entries(value)) {\n    defineDataProperty(\n      output,\n      key,\n      reviveDeferredValue(item, controllers, settlements, applyingSettlements),\n    );\n  }\n  return output;\n}\n\n// Assign an own key preserving its data. A plain `output[key] = value` runs the\n// `Object.prototype.__proto__` setter when `key` is the string \"__proto__\" (the\n// shape JSON.parse of external input produces), which silently drops the entry\n// and mutates the object's prototype instead of storing the value. Defining the\n// property sidesteps the accessor for that one key; other keys keep the fast path.\nfunction defineDataProperty(output: Record<string, unknown>, key: string, value: unknown): void {\n  if (key === \"__proto__\") {\n    Object.defineProperty(output, key, {\n      value,\n      enumerable: true,\n      writable: true,\n      configurable: true,\n    });\n  } else {\n    output[key] = value;\n  }\n}\n\nfunction getControlledDeferred(\n  id: string,\n  controllers: Map<string, ControlledDeferred>,\n): ControlledDeferred {\n  const existing = controllers.get(id);\n  if (existing) return existing;\n\n  let nativeResolve!: (value: unknown) => void;\n  let nativeReject!: (error: unknown) => void;\n  const promise = new Promise<unknown>((resolve, reject) => {\n    nativeResolve = resolve;\n    nativeReject = reject;\n  }) as ControlledDeferred[\"promise\"];\n  promise.status = \"pending\";\n  promise.catch(() => undefined);\n\n  const controlled: ControlledDeferred = {\n    promise,\n    resolve(value) {\n      if (promise.status !== \"pending\") return;\n      promise.status = \"fulfilled\";\n      promise.value = value;\n      nativeResolve(value);\n    },\n    reject(error) {\n      if (promise.status !== \"pending\") return;\n      promise.status = \"rejected\";\n      promise.reason = error;\n      nativeReject(error);\n    },\n  };\n  controllers.set(id, controlled);\n  return controlled;\n}\n\nfunction readDeferredState(promise: Deferred<unknown>): DeferredState {\n  const tracked = deferredStates.get(promise);\n  if (tracked && tracked.status !== \"pending\") return tracked;\n\n  const reactState = promise as Deferred<unknown> & {\n    status?: string;\n    value?: unknown;\n    reason?: unknown;\n  };\n  if (reactState.status === \"fulfilled\") {\n    return { status: \"fulfilled\", value: reactState.value };\n  }\n  if (reactState.status === \"rejected\") {\n    return { status: \"rejected\", reason: reactState.reason };\n  }\n  return tracked || { status: \"pending\" };\n}\n\nfunction isDeferredMarker(value: unknown): value is { [FARM_DEFERRED_MARKER]: string } {\n  return Boolean(\n    value &&\n    typeof value === \"object\" &&\n    Object.keys(value).length === 1 &&\n    typeof (value as Record<string, unknown>)[FARM_DEFERRED_MARKER] === \"string\",\n  );\n}\n\nfunction assertNotCircular(value: object, ancestors: WeakSet<object>): void {\n  if (ancestors.has(value)) {\n    throw new TypeError(\"Deferred route data must be JSON-serializable and cannot be circular\");\n  }\n  ancestors.add(value);\n}\n\nfunction createDeferredPublicError() {\n  return {\n    code: FARM_DEFERRED_ERROR_CODE,\n    message: \"Deferred route data failed to load\",\n  } as const;\n}\n\nfunction createRejectedSettlement(): DeferredSettlement {\n  return { status: \"rejected\", error: createDeferredPublicError() };\n}\n\nfunction reportDeferredError(\n  options: DeferredDataResponseOptions,\n  error: unknown,\n  id: string,\n): void {\n  try {\n    options.onError?.(error, id);\n  } catch {\n    // Error reporting must not break the response stream.\n  }\n}\n\nfunction encodeDeferredMessage(message: Record<string, unknown>): string {\n  return `${JSON.stringify(message)}\\n`;\n}\n\nfunction parseDeferredMessage(line: string): any {\n  try {\n    return JSON.parse(line);\n  } catch {\n    throw new DeferredDataError(\"Deferred route data response contains invalid JSON\");\n  }\n}\n\nfunction rejectPendingDeferred(\n  controllers: Map<string, ControlledDeferred>,\n  message: string,\n): void {\n  for (const controller of controllers.values()) {\n    if (controller.promise.status === \"pending\") {\n      controller.reject(new DeferredDataError(message));\n    }\n  }\n}\n","export const FARM_DEPLOYMENT_ID_HEADER = \"x-farm-deployment-id\";\nexport const FARM_DEPLOYMENT_MISMATCH_HEADER = \"x-farm-deployment-mismatch\";\nexport const FARM_DEPLOYMENT_COOKIE = \"__farm_deployment\";\nexport const FARM_DEPLOYMENT_MISMATCH_CODE = \"FARM_DEPLOYMENT_MISMATCH\";\nexport const FARM_DEPLOYMENT_MISMATCH_STATUS = 409;\n\nexport type FarmPresetRuntime = \"node\" | \"edge\" | \"unknown\";\n\nexport function getFarmPresetRuntime(preset: string): FarmPresetRuntime {\n  if (\n    preset === \"cloudflare\" ||\n    preset === \"cloudflare-pages\" ||\n    preset === \"cloudflare-module\" ||\n    preset === \"netlify-edge\" ||\n    preset === \"vercel-edge\" ||\n    preset === \"deno\"\n  ) {\n    return \"edge\";\n  }\n\n  if (\n    preset === \"node-server\" ||\n    preset === \"vercel\" ||\n    preset === \"netlify\" ||\n    preset === \"aws-lambda\" ||\n    preset === \"azure\" ||\n    preset === \"firebase\" ||\n    preset === \"bun\" ||\n    preset === \"self-host\" ||\n    preset === \"farm\"\n  ) {\n    return \"node\";\n  }\n\n  return \"unknown\";\n}\n\nexport interface FarmDeploymentMismatch {\n  clientDeploymentId: string;\n  serverDeploymentId: string;\n}\n\nexport interface FarmDeploymentResponseOptions {\n  setCookie?: boolean;\n  cookiePath?: string;\n  secureCookie?: boolean;\n}\n\nexport class FarmDeploymentMismatchError extends Error {\n  readonly name = \"FarmDeploymentMismatchError\";\n  readonly code = FARM_DEPLOYMENT_MISMATCH_CODE;\n  readonly retryable = false;\n\n  constructor(\n    readonly clientDeploymentId: string,\n    readonly serverDeploymentId: string,\n  ) {\n    super(\"The application was updated while this page was open. Refresh before trying again.\");\n  }\n}\n\nexport function normalizeFarmDeploymentId(value: unknown): string {\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw new TypeError(\"Farm deploymentId must be a non-empty string\");\n  }\n\n  const normalized = value.trim();\n  if (normalized.length > 200 || /[\\u0000-\\u001f\\u007f]/.test(normalized)) {\n    throw new TypeError(\"Farm deploymentId must be at most 200 characters without control bytes\");\n  }\n\n  return normalized;\n}\n\nexport function createFarmDeploymentRequestHeaders(\n  deploymentId: string | undefined,\n  init?: HeadersInit,\n): Headers {\n  const headers = new Headers(init);\n  if (deploymentId) {\n    headers.set(FARM_DEPLOYMENT_ID_HEADER, deploymentId);\n  }\n  return headers;\n}\n\nexport function getFarmRequestDeploymentId(\n  request: Pick<Request, \"headers\" | \"method\">,\n): string | undefined {\n  const headerValue = request.headers.get(FARM_DEPLOYMENT_ID_HEADER)?.trim();\n  if (headerValue) return headerValue;\n\n  if (isSafeRequestMethod(request.method)) return undefined;\n  return readCookie(request.headers.get(\"cookie\"), FARM_DEPLOYMENT_COOKIE);\n}\n\nexport function getFarmDeploymentMismatch(\n  request: Pick<Request, \"headers\" | \"method\">,\n  serverDeploymentId: string | undefined,\n): FarmDeploymentMismatch | null {\n  if (!serverDeploymentId) return null;\n\n  const clientDeploymentId = getFarmRequestDeploymentId(request);\n  if (!clientDeploymentId || clientDeploymentId === serverDeploymentId) return null;\n\n  return { clientDeploymentId, serverDeploymentId };\n}\n\nexport function createFarmDeploymentMismatchResponse(mismatch: FarmDeploymentMismatch): Response {\n  return new Response(\n    JSON.stringify({\n      error: FARM_DEPLOYMENT_MISMATCH_CODE,\n      message: \"The application deployment changed. Refresh before retrying this request.\",\n    }),\n    {\n      status: FARM_DEPLOYMENT_MISMATCH_STATUS,\n      headers: {\n        \"Cache-Control\": \"no-store\",\n        \"Content-Type\": \"application/json; charset=utf-8\",\n        [FARM_DEPLOYMENT_ID_HEADER]: mismatch.serverDeploymentId,\n        [FARM_DEPLOYMENT_MISMATCH_HEADER]: \"1\",\n      },\n    },\n  );\n}\n\nexport function withFarmDeploymentResponse(\n  response: Response,\n  deploymentId: string | undefined,\n  options: FarmDeploymentResponseOptions = {},\n): Response {\n  if (!deploymentId) return response;\n\n  const headers = new Headers(response.headers);\n  headers.set(FARM_DEPLOYMENT_ID_HEADER, deploymentId);\n  if (options.setCookie) {\n    headers.append(\n      \"Set-Cookie\",\n      createFarmDeploymentCookie(\n        deploymentId,\n        options.cookiePath ?? \"/\",\n        options.secureCookie ?? false,\n      ),\n    );\n  }\n\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nexport function getFarmResponseDeploymentId(\n  response: Pick<Response, \"headers\">,\n): string | undefined {\n  return response.headers.get(FARM_DEPLOYMENT_ID_HEADER)?.trim() || undefined;\n}\n\nexport function isFarmDeploymentMismatchResponse(\n  response: Pick<Response, \"headers\" | \"status\">,\n  clientDeploymentId: string | undefined,\n): boolean {\n  const serverDeploymentId = getFarmResponseDeploymentId(response);\n  if (clientDeploymentId && serverDeploymentId && clientDeploymentId !== serverDeploymentId) {\n    return true;\n  }\n\n  return (\n    response.status === FARM_DEPLOYMENT_MISMATCH_STATUS &&\n    response.headers.get(FARM_DEPLOYMENT_MISMATCH_HEADER) === \"1\"\n  );\n}\n\nexport function createFarmDeploymentMismatchError(\n  response: Pick<Response, \"headers\">,\n  clientDeploymentId: string,\n): FarmDeploymentMismatchError {\n  return new FarmDeploymentMismatchError(\n    clientDeploymentId,\n    getFarmResponseDeploymentId(response) || \"unknown\",\n  );\n}\n\nexport function createFarmDeploymentCookie(\n  deploymentId: string,\n  path = \"/\",\n  secure = false,\n): string {\n  const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n  return [\n    `${FARM_DEPLOYMENT_COOKIE}=${encodeURIComponent(deploymentId)}`,\n    `Path=${normalizedPath}`,\n    \"HttpOnly\",\n    \"SameSite=Lax\",\n    secure ? \"Secure\" : \"\",\n  ]\n    .filter(Boolean)\n    .join(\"; \");\n}\n\nfunction readCookie(cookieHeader: string | null, name: string): string | undefined {\n  if (!cookieHeader) return undefined;\n\n  for (const part of cookieHeader.split(\";\")) {\n    const separator = part.indexOf(\"=\");\n    if (separator === -1 || part.slice(0, separator).trim() !== name) continue;\n\n    const value = part.slice(separator + 1).trim();\n    try {\n      return decodeURIComponent(value);\n    } catch {\n      return value;\n    }\n  }\n\n  return undefined;\n}\n\nfunction isSafeRequestMethod(method: string): boolean {\n  return [\"GET\", \"HEAD\", \"OPTIONS\", \"QUERY\"].includes(method.toUpperCase());\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","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 { 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","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 { 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 { createHash, timingSafeEqual } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Plugin, ResolvedConfig, Rollup, ViteDevServer } from \"vite\";\nimport type { FarmFontDisplay, FarmFontSource, RemoteFontSource } from \"./font\";\n\nconst FONT_IMPORTS = new Set([\"@farm.js/core\", \"@farm.js/core/font\"]);\nconst FONT_FUNCTIONS = new Set<FontLoaderKind>([\"localFont\", \"remoteFont\"]);\nconst FONT_CSS_PREFIX = \"\\0farm:font-css:\";\nconst FONT_RUNTIME_ID = \"\\0farm:font-runtime\";\nconst PUBLIC_FONT_RUNTIME_ID = \"virtual:farm-font-runtime\";\nconst PRELOAD_HEADER_MARKER = \"__FARM_FONT_PRELOAD_HEADER__\";\nconst FONT_SECTION_START = \"/* farm-fonts:start */\";\nconst FONT_SECTION_END = \"/* farm-fonts:end */\";\nconst MODULE_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\nconst FONT_EXTENSION_RE = /\\.(woff2?|ttf|otf)$/i;\nconst MAX_REMOTE_FONT_BYTES = 20 * 1024 * 1024;\nconst FONT_REGISTRIES_KEY = Symbol.for(\"farm.fontRegistries\");\nconst FONT_REMOTE_BYTES_KEY = Symbol.for(\"farm.fontRemoteBytes\");\n\ntype FontLoaderKind = \"localFont\" | \"remoteFont\";\ntype OutputAsset = Rollup.OutputAsset;\ntype OutputBundle = Rollup.OutputBundle;\n\ninterface AstNode {\n  type: string;\n  start: number;\n  end: number;\n  [key: string]: unknown;\n}\n\ninterface FontResource {\n  bytes?: Buffer;\n  extension: string;\n  format: string;\n  hash: string;\n  outputFileName?: string;\n  publicPath?: string;\n  publicUrl: string;\n}\n\ninterface NormalizedFontSource {\n  source: string;\n  weight: string;\n  style: string;\n  unicodeRange?: string;\n  resource: FontResource;\n}\n\ninterface FontDefinition {\n  id: string;\n  family: string;\n  className: string;\n  variableClassName: string;\n  variable?: string;\n  fallback: string[];\n  display: FarmFontDisplay;\n  preload: boolean;\n  preloadResources: Array<{ href: string; type: string }>;\n  weight?: number | string;\n  style?: string;\n  sources: NormalizedFontSource[];\n}\n\ninterface FontCall {\n  kind: FontLoaderKind;\n  binding?: string;\n  node: AstNode;\n  ancestors: readonly AstNode[];\n}\n\ninterface Replacement {\n  start: number;\n  end: number;\n  code: string;\n}\n\nexport interface TransformFarmFontCallsOptions {\n  code: string;\n  id: string;\n  root: string;\n  production: boolean;\n  parse: (code: string) => AstNode;\n  register: (\n    moduleId: string,\n    calls: Array<{ kind: FontLoaderKind; options: Record<string, unknown> }>,\n  ) => Promise<FontDefinition[]>;\n}\n\nexport interface TransformFarmFontCallsResult {\n  code: string;\n  fonts: FontDefinition[];\n}\n\nconst registries = getGlobalMap<string, FarmFontRegistry>(FONT_REGISTRIES_KEY);\nconst remoteBytes = getGlobalMap<string, Promise<Buffer>>(FONT_REMOTE_BYTES_KEY);\n\nexport function farmFontImportsPlugin(\n  options: { root?: string; basePath?: string; publicDir?: string | false } = {},\n): Plugin {\n  let root = normalizeRoot(options.root || process.cwd());\n  let production = process.env.NODE_ENV === \"production\";\n  let registry = getOrCreateRegistry(root, options.basePath, options.publicDir);\n\n  const updateRoot = (nextRoot: string, basePath?: string, publicDir?: string | false) => {\n    const normalized = normalizeRoot(nextRoot);\n    root = normalized;\n    registry = getOrCreateRegistry(root, basePath, publicDir);\n  };\n\n  return {\n    name: \"farm:font-imports\",\n    enforce: \"post\",\n\n    configResolved(config: ResolvedConfig) {\n      production = config.command === \"build\";\n      updateRoot(\n        config.root,\n        options.basePath || config.base,\n        options.publicDir === undefined ? config.publicDir : options.publicDir,\n      );\n      registry.production = production;\n    },\n\n    configureServer(server: ViteDevServer) {\n      updateRoot(\n        server.config.root,\n        options.basePath || server.config.base,\n        options.publicDir === undefined ? server.config.publicDir : options.publicDir,\n      );\n      registry.production = false;\n      server.middlewares.use(async (req, res, next) => {\n        const pathname = new URL(req.url || \"/\", \"http://farm.local\").pathname;\n\n        if (pathname === \"/@farm/fonts.css\") {\n          res.statusCode = 200;\n          res.setHeader(\"Content-Type\", \"text/css; charset=utf-8\");\n          res.setHeader(\"Cache-Control\", \"no-store\");\n          res.end(registry.renderCss(false));\n          return;\n        }\n\n        const resource = registry.getDevResource(pathname);\n        if (!resource?.bytes) {\n          next();\n          return;\n        }\n\n        res.statusCode = 200;\n        res.setHeader(\"Content-Type\", fontContentType(resource.extension));\n        res.setHeader(\"Cache-Control\", \"public, max-age=31536000, immutable\");\n        res.end(resource.bytes);\n      });\n    },\n\n    resolveId(id) {\n      if (id === PUBLIC_FONT_RUNTIME_ID || id === FONT_RUNTIME_ID) return FONT_RUNTIME_ID;\n      if (id.startsWith(\"virtual:farm-font-css/\")) {\n        return `${FONT_CSS_PREFIX}${id.slice(\"virtual:farm-font-css/\".length)}`;\n      }\n      if (id.startsWith(FONT_CSS_PREFIX)) return id;\n      return null;\n    },\n\n    load(id) {\n      if (id === FONT_RUNTIME_ID) {\n        return `export const farmFontPreloadHeader = decodeURIComponent(${JSON.stringify(PRELOAD_HEADER_MARKER)});`;\n      }\n      if (!id.startsWith(FONT_CSS_PREFIX)) return null;\n      return registry.renderFontCss(\n        id.slice(FONT_CSS_PREFIX.length).replace(/\\.css$/, \"\"),\n        production,\n      );\n    },\n\n    async transform(code, id) {\n      const result = await transformFarmFontCalls({\n        code,\n        id,\n        root,\n        production,\n        parse: (source) => this.parse(source) as unknown as AstNode,\n        register: (moduleId, calls) => registry.register(moduleId, calls, production),\n      });\n\n      if (!result) registry.clearModule(id.split(\"?\", 1)[0]);\n\n      return result ? { code: result.code, map: null } : null;\n    },\n\n    async generateBundle(_options, bundle) {\n      registry.emitAssets(this, bundle);\n    },\n  };\n}\n\nexport async function transformFarmFontCalls(\n  options: TransformFarmFontCallsOptions,\n): Promise<TransformFarmFontCallsResult | null> {\n  const cleanId = options.id.split(\"?\", 1)[0];\n  if (\n    !MODULE_EXTENSION_RE.test(cleanId) ||\n    /\\.d\\.[cm]?ts$/.test(cleanId) ||\n    !containsFontFunction(options.code)\n  ) {\n    return null;\n  }\n\n  const ast = options.parse(options.code);\n  const bindings = findFontBindings(ast);\n  if (bindings.named.size === 0 && bindings.namespaces.size === 0) return null;\n\n  const calls = findFontCalls(ast, bindings);\n  if (calls.length === 0) return null;\n  validateFontBindingReferences(ast, calls, cleanId);\n\n  const registeredCalls = calls.map((call) => ({\n    kind: call.kind,\n    options: readFontOptions(options.code, cleanId, call),\n  }));\n  const fonts = await options.register(cleanId, registeredCalls);\n  const replacements: Replacement[] = calls.map((call, index) => ({\n    start: call.node.start,\n    end: call.node.end,\n    code: serializeFontResult(fonts[index]),\n  }));\n  replacements.push(\n    ...createFontImportReplacements(\n      options.code,\n      ast,\n      new Set(calls.map((call) => call.binding).filter((value): value is string => Boolean(value))),\n    ),\n  );\n  const imports = options.production\n    ? \"\"\n    : Array.from(new Set(fonts.map((font) => font.id)))\n        .map((id) => `import ${JSON.stringify(`virtual:farm-font-css/${id}.css`)};`)\n        .join(\"\\n\");\n\n  return {\n    code: `${applyReplacements(options.code, replacements)}\\n${imports}\\n`,\n    fonts,\n  };\n}\n\nexport function renderFarmFontDevHead(root: string): string {\n  const registry = registries.get(normalizeRoot(root));\n  if (!registry || registry.production || registry.size === 0) return \"\";\n  return `${registry.renderPreloadTags(false)}\\n  <link rel=\"stylesheet\" href=\"/@farm/fonts.css\">`;\n}\n\nclass FarmFontRegistry {\n  root: string;\n  basePath: string;\n  publicDir: string | false;\n  production = false;\n  private modules = new Map<string, FontDefinition[]>();\n  private definitions = new Map<string, FontDefinition>();\n  private resources = new Map<string, FontResource>();\n\n  constructor(root: string, basePath = \"/\", publicDir?: string | false) {\n    this.root = root;\n    this.basePath = normalizeBasePath(basePath);\n    this.publicDir = normalizePublicDir(root, publicDir);\n  }\n\n  get size(): number {\n    return this.getDefinitions().length;\n  }\n\n  async register(\n    moduleId: string,\n    calls: Array<{ kind: FontLoaderKind; options: Record<string, unknown> }>,\n    production: boolean,\n  ): Promise<FontDefinition[]> {\n    const definitions: FontDefinition[] = [];\n    for (const call of calls) {\n      definitions.push(await this.createDefinition(moduleId, call.kind, call.options, production));\n    }\n    this.modules.set(moduleId, definitions);\n    for (const definition of definitions) this.definitions.set(definition.id, definition);\n    return definitions;\n  }\n\n  clearModule(moduleId: string): void {\n    this.modules.delete(moduleId);\n  }\n\n  renderFontCss(id: string, production: boolean): string {\n    const definition = this.definitions.get(id);\n    return definition ? renderFontDefinitionCss(definition, production, this.basePath) : \"\";\n  }\n\n  renderCss(production: boolean): string {\n    const css = this.getDefinitions()\n      .map((definition) => renderFontDefinitionCss(definition, production, this.basePath))\n      .join(\"\\n\\n\");\n    return css ? `${FONT_SECTION_START}\\n${css}\\n${FONT_SECTION_END}\\n` : \"\";\n  }\n\n  renderPreloadHeader(production: boolean): string {\n    return this.getPreloadResources(production)\n      .map(\n        ({ url, resource }) =>\n          `<${url}>; rel=preload; as=font; type=${fontContentType(resource.extension)}; crossorigin`,\n      )\n      .join(\", \");\n  }\n\n  renderPreloadTags(production: boolean): string {\n    return this.getPreloadResources(production)\n      .map(\n        ({ url, resource }) =>\n          `<link rel=\"preload\" href=\"${escapeHtmlAttribute(url)}\" as=\"font\" type=\"${fontContentType(resource.extension)}\" crossorigin>`,\n      )\n      .join(\"\\n  \");\n  }\n\n  getDevResource(pathname: string): FontResource | undefined {\n    for (const resource of this.getActiveResources()) {\n      if (resource.bytes && resourceUrl(resource, false, this.basePath) === pathname) {\n        return resource;\n      }\n    }\n    return undefined;\n  }\n\n  emitAssets(context: { emitFile: (file: any) => string }, bundle: OutputBundle): void {\n    for (const resource of this.getActiveResources()) {\n      if (!resource.bytes || !resource.outputFileName) continue;\n      if (bundle[resource.outputFileName]) continue;\n      context.emitFile({\n        type: \"asset\",\n        fileName: resource.outputFileName,\n        source: resource.bytes,\n      });\n    }\n\n    const css = this.renderCss(true);\n    if (css) {\n      const cssAssets = Object.values(bundle).filter(\n        (entry): entry is OutputAsset => entry.type === \"asset\" && entry.fileName.endsWith(\".css\"),\n      );\n      const clientCss =\n        cssAssets.find(\n          (entry): entry is OutputAsset =>\n            entry.type === \"asset\" && entry.fileName === \"farm-client.css\",\n        ) ?? (cssAssets.length === 1 ? cssAssets[0] : undefined);\n      if (clientCss) {\n        clientCss.source = replaceFontSection(assetSourceToString(clientCss.source), css);\n      } else if (!bundle[\"farm-fonts.css\"]) {\n        context.emitFile({\n          type: \"asset\",\n          fileName: \"farm-fonts.css\",\n          source: css,\n        });\n      }\n    }\n\n    const preloadHeader = encodeURIComponent(this.renderPreloadHeader(true));\n    for (const entry of Object.values(bundle)) {\n      if (entry.type === \"chunk\" && entry.code.includes(PRELOAD_HEADER_MARKER)) {\n        entry.code = entry.code.split(PRELOAD_HEADER_MARKER).join(preloadHeader);\n      }\n    }\n  }\n\n  private getDefinitions(): FontDefinition[] {\n    const active = new Map<string, FontDefinition>();\n    for (const definitions of this.modules.values()) {\n      for (const definition of definitions) active.set(definition.id, definition);\n    }\n    return Array.from(active.values()).sort((left, right) => left.id.localeCompare(right.id));\n  }\n\n  private getActiveResources(): FontResource[] {\n    const active = new Set<FontResource>();\n    for (const definition of this.getDefinitions()) {\n      for (const source of definition.sources) active.add(source.resource);\n    }\n    return Array.from(active);\n  }\n\n  private getPreloadResources(production: boolean) {\n    const seen = new Set<string>();\n    const resources: Array<{ url: string; resource: FontResource }> = [];\n    for (const definition of this.getDefinitions()) {\n      if (!definition.preload) continue;\n      for (const source of definition.sources) {\n        const url = resourceUrl(source.resource, production, this.basePath);\n        if (seen.has(url)) continue;\n        seen.add(url);\n        resources.push({ url, resource: source.resource });\n      }\n    }\n    return resources;\n  }\n\n  private async createDefinition(\n    moduleId: string,\n    kind: FontLoaderKind,\n    raw: Record<string, unknown>,\n    production: boolean,\n  ): Promise<FontDefinition> {\n    validateOptionKeys(moduleId, kind, raw);\n    const family = requireString(raw.family, moduleId, `${kind}() family`);\n    const display = (raw.display ?? \"swap\") as FarmFontDisplay;\n    if (![\"auto\", \"block\", \"swap\", \"fallback\", \"optional\"].includes(display)) {\n      throw fontError(moduleId, `invalid font-display value ${JSON.stringify(display)}`);\n    }\n    const variable = optionalString(raw.variable, moduleId, `${kind}() variable`);\n    if (variable && !/^--[A-Za-z_][\\w-]*$/.test(variable)) {\n      throw fontError(moduleId, `font variable must be a CSS custom property such as --font-sans`);\n    }\n    const fallback = readStringArray(raw.fallback, moduleId, `${kind}() fallback`);\n    const defaultWeight = optionalWeight(raw.weight, moduleId);\n    const defaultStyle = optionalCssDescriptor(raw.style, moduleId, \"style\") || \"normal\";\n    const sources = readSources(raw.src, moduleId, kind, defaultWeight, defaultStyle);\n    const strategy = kind === \"remoteFont\" ? (raw.strategy ?? \"self-host\") : \"self-host\";\n    if (strategy !== \"self-host\" && strategy !== \"external\") {\n      throw fontError(moduleId, `remoteFont() strategy must be \"self-host\" or \"external\"`);\n    }\n    const integrity = optionalString(raw.integrity, moduleId, `${kind}() integrity`);\n\n    const normalizedSources: NormalizedFontSource[] = [];\n    for (const source of sources) {\n      const resource = await this.resolveResource({\n        kind,\n        moduleId,\n        source: source.path,\n        strategy,\n        integrity: source.integrity ?? integrity,\n        production,\n      });\n      normalizedSources.push({\n        source: source.path,\n        weight: String(source.weight ?? defaultWeight ?? \"400\"),\n        style: source.style || defaultStyle,\n        unicodeRange: source.unicodeRange,\n        resource,\n      });\n    }\n\n    const identity = JSON.stringify({\n      family,\n      display,\n      variable,\n      fallback,\n      preload: raw.preload !== false,\n      sources: normalizedSources.map((source) => ({\n        hash: source.resource.hash,\n        url: source.resource.publicUrl,\n        weight: source.weight,\n        style: source.style,\n        unicodeRange: source.unicodeRange,\n      })),\n    });\n    const id = createHash(\"sha256\").update(identity).digest(\"hex\").slice(0, 10);\n\n    return {\n      id,\n      family,\n      className: `farm-font-${id}`,\n      variableClassName: variable ? `farm-font-variable-${id}` : \"\",\n      variable,\n      fallback,\n      display,\n      preload: raw.preload !== false,\n      preloadResources:\n        raw.preload === false\n          ? []\n          : normalizedSources.map(({ resource }) => ({\n              href: resourceUrl(resource, production, this.basePath),\n              type: fontContentType(resource.extension),\n            })),\n      weight: defaultWeight,\n      style: raw.style === undefined ? undefined : defaultStyle,\n      sources: normalizedSources,\n    };\n  }\n\n  private async resolveResource(input: {\n    kind: FontLoaderKind;\n    moduleId: string;\n    source: string;\n    strategy: unknown;\n    integrity?: string;\n    production: boolean;\n  }): Promise<FontResource> {\n    if (input.kind === \"remoteFont\") {\n      let url: URL;\n      try {\n        url = new URL(input.source);\n      } catch {\n        throw fontError(input.moduleId, `remoteFont() source must be an absolute HTTPS URL`);\n      }\n      if (url.protocol !== \"https:\") {\n        throw fontError(input.moduleId, `remoteFont() only accepts HTTPS URLs`);\n      }\n      const extension = extensionFromPath(url.pathname);\n      if (input.strategy === \"external\") {\n        const hash = createHash(\"sha256\").update(url.href).digest(\"hex\").slice(0, 12);\n        const resource = {\n          extension,\n          format: fontFormat(extension),\n          hash,\n          publicUrl: url.href,\n        };\n        this.resources.set(`external:${url.href}`, resource);\n        return resource;\n      }\n\n      const bytes = await fetchRemoteFont(url, input.integrity);\n      return this.createSelfHostedResource(bytes, extension, path.basename(url.pathname));\n    }\n\n    if (input.source.startsWith(\"/\")) {\n      return this.createPublicResource(input.moduleId, input.source);\n    }\n\n    const resolvedPath = resolveLocalFontPath(input.source, input.moduleId, this.root);\n    if (!FONT_EXTENSION_RE.test(resolvedPath)) {\n      throw fontError(\n        input.moduleId,\n        `unsupported local font file ${JSON.stringify(input.source)}`,\n      );\n    }\n    let bytes: Buffer;\n    try {\n      bytes = await readFile(resolvedPath);\n    } catch (error) {\n      throw fontError(\n        input.moduleId,\n        `could not read ${JSON.stringify(input.source)}: ${(error as Error).message}`,\n      );\n    }\n    return this.createSelfHostedResource(\n      bytes,\n      path.extname(resolvedPath),\n      path.basename(resolvedPath),\n    );\n  }\n\n  private async createPublicResource(moduleId: string, source: string): Promise<FontResource> {\n    if (!this.publicDir) {\n      throw fontError(\n        moduleId,\n        `cannot resolve ${JSON.stringify(source)} because publicDir is disabled`,\n      );\n    }\n    const publicPath = normalizePublicFontPath(source, moduleId);\n    const resolvedPath = path.resolve(this.publicDir, `.${publicPath}`);\n    if (!isPathInside(this.publicDir, resolvedPath)) {\n      throw fontError(moduleId, `public font path must stay inside publicDir`);\n    }\n    if (!FONT_EXTENSION_RE.test(resolvedPath)) {\n      throw fontError(moduleId, `unsupported public font file ${JSON.stringify(source)}`);\n    }\n\n    let bytes: Buffer;\n    try {\n      bytes = await readFile(resolvedPath);\n    } catch (error) {\n      throw fontError(\n        moduleId,\n        `could not read ${JSON.stringify(source)} from publicDir: ${(error as Error).message}`,\n      );\n    }\n\n    const extension = path.extname(resolvedPath).toLowerCase();\n    const hash = createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 12);\n    const resource: FontResource = {\n      extension,\n      format: fontFormat(extension),\n      hash,\n      publicPath,\n      publicUrl: \"\",\n    };\n    this.resources.set(`public:${publicPath}`, resource);\n    return resource;\n  }\n\n  private createSelfHostedResource(\n    bytes: Buffer,\n    extension: string,\n    fileName: string,\n  ): FontResource {\n    const normalizedExtension = extension.toLowerCase();\n    const hash = createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 12);\n    const baseName = sanitizeFileName(path.basename(fileName, extension)) || \"font\";\n    const outputFileName = `assets/fonts/${baseName}-h${hash}${normalizedExtension}`;\n    const key = `${hash}${normalizedExtension}`;\n    const existing = this.resources.get(key);\n    if (existing) return existing;\n\n    const resource: FontResource = {\n      bytes,\n      extension: normalizedExtension,\n      format: fontFormat(normalizedExtension),\n      hash,\n      outputFileName,\n      publicUrl: \"\",\n    };\n    this.resources.set(key, resource);\n    return resource;\n  }\n}\n\nfunction findFontBindings(ast: AstNode) {\n  const named = new Map<string, FontLoaderKind>();\n  const namespaces = new Set<string>();\n  const body = Array.isArray(ast.body) ? ast.body : [];\n\n  for (const statement of body) {\n    if (!isAstNode(statement) || statement.type !== \"ImportDeclaration\") continue;\n    const source = isAstNode(statement.source) ? statement.source.value : undefined;\n    if (typeof source !== \"string\" || !FONT_IMPORTS.has(source)) continue;\n\n    const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers : [];\n    for (const specifier of specifiers) {\n      if (!isAstNode(specifier) || !isAstNode(specifier.local)) continue;\n      const localName = specifier.local.name;\n      if (typeof localName !== \"string\") continue;\n      if (specifier.type === \"ImportNamespaceSpecifier\") {\n        namespaces.add(localName);\n        continue;\n      }\n      if (specifier.type !== \"ImportSpecifier\" || !isAstNode(specifier.imported)) continue;\n      const importedName = specifier.imported.name ?? specifier.imported.value;\n      if (isFontLoaderKind(importedName)) named.set(localName, importedName);\n    }\n  }\n  return { named, namespaces };\n}\n\nfunction findFontCalls(ast: AstNode, bindings: ReturnType<typeof findFontBindings>): FontCall[] {\n  const calls: FontCall[] = [];\n  walkAst(ast, (node, ancestors) => {\n    if (node.type !== \"CallExpression\" || !isAstNode(node.callee)) return;\n    let kind: FontLoaderKind | undefined;\n    if (node.callee.type === \"Identifier\" && typeof node.callee.name === \"string\") {\n      kind = bindings.named.get(node.callee.name);\n      if (kind) calls.push({ kind, binding: node.callee.name, node, ancestors });\n    } else if (\n      node.callee.type === \"MemberExpression\" &&\n      node.callee.computed !== true &&\n      isAstNode(node.callee.object) &&\n      isAstNode(node.callee.property) &&\n      node.callee.object.type === \"Identifier\" &&\n      node.callee.property.type === \"Identifier\" &&\n      typeof node.callee.object.name === \"string\" &&\n      typeof node.callee.property.name === \"string\" &&\n      bindings.namespaces.has(node.callee.object.name) &&\n      isFontLoaderKind(node.callee.property.name)\n    ) {\n      kind = node.callee.property.name;\n    }\n    if (kind && node.callee.type !== \"Identifier\") calls.push({ kind, node, ancestors });\n  });\n  return calls;\n}\n\nfunction validateFontBindingReferences(ast: AstNode, calls: FontCall[], id: string): void {\n  const calledBindings = new Set(\n    calls.map((call) => call.binding).filter((binding): binding is string => Boolean(binding)),\n  );\n  const transformedCallees = new Set(\n    calls.flatMap((call) => {\n      const callee = call.node.callee;\n      return call.binding && isAstNode(callee) ? [`${callee.start}:${callee.end}`] : [];\n    }),\n  );\n\n  walkAst(ast, (node, ancestors) => {\n    if (\n      node.type !== \"Identifier\" ||\n      typeof node.name !== \"string\" ||\n      !calledBindings.has(node.name)\n    ) {\n      return;\n    }\n    const parent = ancestors.at(-1);\n    if (!parent || isNonReferenceIdentifier(node, parent)) return;\n    if (transformedCallees.has(`${node.start}:${node.end}`)) return;\n    throw fontError(\n      id,\n      `${node.name} can only be referenced by statically compiled font declarations`,\n    );\n  });\n}\n\nfunction isNonReferenceIdentifier(node: AstNode, parent: AstNode): boolean {\n  if (parent.type === \"ImportSpecifier\") return true;\n  if (\n    (parent.type === \"MemberExpression\" || parent.type === \"OptionalMemberExpression\") &&\n    parent.property === node &&\n    parent.computed !== true\n  ) {\n    return true;\n  }\n  if (\n    (parent.type === \"Property\" || parent.type === \"PropertyDefinition\") &&\n    parent.key === node &&\n    parent.computed !== true &&\n    parent.shorthand !== true\n  ) {\n    return true;\n  }\n  return false;\n}\n\nfunction createFontImportReplacements(\n  code: string,\n  ast: AstNode,\n  calledBindings: ReadonlySet<string>,\n): Replacement[] {\n  if (calledBindings.size === 0) return [];\n  const replacements: Replacement[] = [];\n  const body = Array.isArray(ast.body) ? ast.body : [];\n\n  for (const statement of body) {\n    if (!isAstNode(statement) || statement.type !== \"ImportDeclaration\") continue;\n    const source = isAstNode(statement.source) ? statement.source.value : undefined;\n    if (typeof source !== \"string\" || !FONT_IMPORTS.has(source)) continue;\n    const specifiers = (Array.isArray(statement.specifiers) ? statement.specifiers : []).filter(\n      isAstNode,\n    );\n    const retained = specifiers.filter((specifier) => {\n      if (specifier.type !== \"ImportSpecifier\" || !isAstNode(specifier.local)) return true;\n      return typeof specifier.local.name !== \"string\" || !calledBindings.has(specifier.local.name);\n    });\n    if (retained.length === specifiers.length) continue;\n\n    replacements.push({\n      start: statement.start,\n      end: statement.end,\n      code: renderImportDeclaration(code, source, retained),\n    });\n  }\n\n  return replacements;\n}\n\nfunction renderImportDeclaration(code: string, source: string, specifiers: AstNode[]): string {\n  if (specifiers.length === 0) return \"\";\n  const defaultSpecifier = specifiers.find(\n    (specifier) => specifier.type === \"ImportDefaultSpecifier\",\n  );\n  const namespaceSpecifier = specifiers.find(\n    (specifier) => specifier.type === \"ImportNamespaceSpecifier\",\n  );\n  const namedSpecifiers = specifiers.filter((specifier) => specifier.type === \"ImportSpecifier\");\n  const parts: string[] = [];\n\n  if (defaultSpecifier && isAstNode(defaultSpecifier.local)) {\n    parts.push(code.slice(defaultSpecifier.local.start, defaultSpecifier.local.end));\n  }\n  if (namespaceSpecifier && isAstNode(namespaceSpecifier.local)) {\n    parts.push(`* as ${code.slice(namespaceSpecifier.local.start, namespaceSpecifier.local.end)}`);\n  }\n  if (namedSpecifiers.length > 0) {\n    parts.push(\n      `{ ${namedSpecifiers.map((specifier) => code.slice(specifier.start, specifier.end)).join(\", \")} }`,\n    );\n  }\n\n  return parts.length > 0 ? `import ${parts.join(\", \")} from ${JSON.stringify(source)};` : \"\";\n}\n\nfunction readFontOptions(code: string, id: string, call: FontCall): Record<string, unknown> {\n  if (!call.binding) {\n    throw fontError(id, `${call.kind}() must use a named import from @farm.js/core/font`);\n  }\n  const args = Array.isArray(call.node.arguments) ? call.node.arguments : [];\n  if (args.length !== 1 || !isAstNode(args[0]) || args[0].type !== \"ObjectExpression\") {\n    throw fontError(id, `${call.kind}() requires one inline options object`);\n  }\n  const parent = call.ancestors.at(-1);\n  if (!parent || parent.type !== \"VariableDeclarator\" || parent.init !== call.node) {\n    throw fontError(id, `${call.kind}() must initialize a module-scope variable`);\n  }\n  const declaration = call.ancestors.at(-2);\n  const statement = call.ancestors.at(-3);\n  const statementParent = call.ancestors.at(-4);\n  const isModuleScope =\n    declaration?.type === \"VariableDeclaration\" &&\n    (statement?.type === \"Program\" ||\n      (statement?.type === \"ExportNamedDeclaration\" && statementParent?.type === \"Program\"));\n  if (!isModuleScope || call.ancestors.some((ancestor) => isFunctionNode(ancestor))) {\n    throw fontError(id, `${call.kind}() must be declared directly at module scope`);\n  }\n  return evaluateStaticObject(code, id, args[0]);\n}\n\nfunction evaluateStaticObject(code: string, id: string, node: AstNode): Record<string, unknown> {\n  const result: Record<string, unknown> = {};\n  const properties = Array.isArray(node.properties) ? node.properties : [];\n  for (const property of properties) {\n    if (!isAstNode(property) || property.type !== \"Property\" || property.computed === true) {\n      throw fontError(id, \"font options do not support spreads or computed properties\");\n    }\n    const key = readPropertyName(property.key);\n    if (!key || !isAstNode(property.value)) {\n      throw fontError(id, \"font options must use static property names and values\");\n    }\n    result[key] = evaluateStaticValue(code, id, property.value);\n  }\n  return result;\n}\n\nfunction evaluateStaticValue(code: string, id: string, node: AstNode): unknown {\n  if (node.type === \"Literal\") return node.value;\n  if (node.type === \"TemplateLiteral\") {\n    const expressions = Array.isArray(node.expressions) ? node.expressions : [];\n    const quasis = Array.isArray(node.quasis) ? node.quasis : [];\n    if (expressions.length === 0 && quasis.length === 1 && isAstNode(quasis[0])) {\n      const templateValue = quasis[0].value;\n      const value =\n        templateValue && typeof templateValue === \"object\"\n          ? (templateValue as { cooked?: unknown }).cooked\n          : undefined;\n      if (typeof value === \"string\") return value;\n    }\n  }\n  if (node.type === \"ArrayExpression\") {\n    const elements = Array.isArray(node.elements) ? node.elements : [];\n    return elements.map((element) => {\n      if (!isAstNode(element) || element.type === \"SpreadElement\") {\n        throw fontError(id, \"font option arrays must contain static values\");\n      }\n      return evaluateStaticValue(code, id, element);\n    });\n  }\n  if (node.type === \"ObjectExpression\") return evaluateStaticObject(code, id, node);\n  if (\n    node.type === \"UnaryExpression\" &&\n    (node.operator === \"+\" || node.operator === \"-\") &&\n    isAstNode(node.argument)\n  ) {\n    const value = evaluateStaticValue(code, id, node.argument);\n    if (typeof value === \"number\") return node.operator === \"-\" ? -value : value;\n  }\n  throw fontError(\n    id,\n    `font options must be statically analyzable near ${code.slice(node.start, node.end)}`,\n  );\n}\n\nfunction readSources(\n  value: unknown,\n  id: string,\n  kind: FontLoaderKind,\n  weight: number | string | undefined,\n  style: string,\n): Array<FarmFontSource & Pick<RemoteFontSource, \"integrity\">> {\n  if (typeof value === \"string\") return [{ path: value, weight, style }];\n  if (!Array.isArray(value) || value.length === 0) {\n    throw fontError(id, `${kind}() src must be a string or a non-empty source array`);\n  }\n  return value.map((entry, index) => {\n    if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n      throw fontError(id, `${kind}() src[${index}] must be an object`);\n    }\n    const source = entry as Record<string, unknown>;\n    const unknown = Object.keys(source).filter(\n      (key) =>\n        ![\n          \"path\",\n          \"weight\",\n          \"style\",\n          \"unicodeRange\",\n          ...(kind === \"remoteFont\" ? [\"integrity\"] : []),\n        ].includes(key),\n    );\n    if (unknown.length) throw fontError(id, `unknown src[${index}] option ${unknown[0]}`);\n    return {\n      path: requireString(source.path, id, `${kind}() src[${index}].path`),\n      weight: optionalWeight(source.weight, id) ?? weight,\n      style: optionalCssDescriptor(source.style, id, \"style\") || style,\n      unicodeRange: optionalUnicodeRange(source.unicodeRange, id),\n      integrity: optionalString(source.integrity, id, `${kind}() src[${index}].integrity`),\n    };\n  });\n}\n\nfunction validateOptionKeys(id: string, kind: FontLoaderKind, raw: Record<string, unknown>) {\n  const allowed = new Set([\n    \"src\",\n    \"family\",\n    \"weight\",\n    \"style\",\n    \"display\",\n    \"variable\",\n    \"fallback\",\n    \"preload\",\n    ...(kind === \"remoteFont\" ? [\"strategy\", \"integrity\"] : []),\n  ]);\n  const unknown = Object.keys(raw).find((key) => !allowed.has(key));\n  if (unknown) throw fontError(id, `unknown ${kind}() option ${JSON.stringify(unknown)}`);\n  if (typeof raw.preload !== \"undefined\" && typeof raw.preload !== \"boolean\") {\n    throw fontError(id, `${kind}() preload must be a boolean`);\n  }\n}\n\nfunction serializeFontResult(font: FontDefinition): string {\n  const stack = renderFamilyStack(font.family, font.fallback);\n  return JSON.stringify({\n    className: font.className,\n    variable: font.variableClassName,\n    style: {\n      fontFamily: stack,\n      ...(font.style ? { fontStyle: font.style } : {}),\n      ...(font.weight !== undefined && !String(font.weight).includes(\" \")\n        ? { fontWeight: font.weight }\n        : {}),\n    },\n    preloads: font.preloadResources,\n  });\n}\n\nfunction renderFontDefinitionCss(\n  font: FontDefinition,\n  production: boolean,\n  basePath: string,\n): string {\n  const faces = font.sources.map((source) => {\n    const descriptors = [\n      `  font-family: ${quoteCssString(font.family)};`,\n      `  src: url(${quoteCssString(resourceUrl(source.resource, production, basePath))}) format(${quoteCssString(source.resource.format)});`,\n      `  font-display: ${font.display};`,\n      `  font-weight: ${source.weight};`,\n      `  font-style: ${source.style};`,\n      ...(source.unicodeRange ? [`  unicode-range: ${source.unicodeRange};`] : []),\n    ];\n    return `@font-face {\\n${descriptors.join(\"\\n\")}\\n}`;\n  });\n  const stack = renderFamilyStack(font.family, font.fallback);\n  faces.push(`.${font.className} {\\n  font-family: ${stack};\\n}`);\n  if (font.variable && font.variableClassName) {\n    faces.push(`.${font.variableClassName} {\\n  ${font.variable}: ${stack};\\n}`);\n  }\n  return faces.join(\"\\n\\n\");\n}\n\nfunction resourceUrl(resource: FontResource, production: boolean, basePath: string): string {\n  // Production font URLs are root-relative: emitted assets land in the client\n  // output, which the server publishes at \"/\" regardless of basePath — the\n  // same convention as the hashed client JS/CSS hrefs. Only the dev server\n  // mounts under basePath (the Vite base), so only dev URLs carry the prefix.\n  if (resource.publicPath) {\n    return resource.publicPath;\n  }\n  if (!resource.bytes) return resource.publicUrl;\n  if (!production) {\n    return joinBasePath(basePath, `/@farm/font/${resource.hash}${resource.extension}`);\n  }\n  return `/${resource.outputFileName}`;\n}\n\nasync function fetchRemoteFont(url: URL, integrity?: string): Promise<Buffer> {\n  const key = `${url.href}\\0${integrity || \"\"}`;\n  let pending = remoteBytes.get(key);\n  if (!pending) {\n    pending = (async () => {\n      const response = await fetch(url, {\n        headers: { \"User-Agent\": \"Farm.js font compiler\" },\n        redirect: \"follow\",\n      });\n      if (!response.ok)\n        throw new Error(`request returned ${response.status} ${response.statusText}`);\n      const length = Number(response.headers.get(\"content-length\") || 0);\n      if (length > MAX_REMOTE_FONT_BYTES) throw new Error(\"font exceeds the 20 MB limit\");\n      const bytes = await readResponseBodyWithLimit(response, MAX_REMOTE_FONT_BYTES);\n      if (integrity) verifyIntegrity(bytes, integrity);\n      return bytes;\n    })().catch((error) => {\n      throw new Error(`[Farm fonts] Failed to download ${url.href}: ${(error as Error).message}`);\n    });\n    remoteBytes.set(key, pending);\n    const clearPending = () => {\n      if (remoteBytes.get(key) === pending) remoteBytes.delete(key);\n    };\n    void pending.then(clearPending, clearPending);\n  }\n  return pending;\n}\n\nasync function readResponseBodyWithLimit(response: Response, limit: number): Promise<Buffer> {\n  if (!response.body) return Buffer.alloc(0);\n  const reader = response.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let total = 0;\n\n  while (true) {\n    const chunk = await reader.read();\n    if (chunk.done) break;\n    total += chunk.value.byteLength;\n    if (total > limit) {\n      await reader.cancel(\"font exceeds the configured byte limit\");\n      throw new Error(\"font exceeds the 20 MB limit\");\n    }\n    chunks.push(chunk.value);\n  }\n\n  return Buffer.concat(chunks, total);\n}\n\nfunction verifyIntegrity(bytes: Buffer, integrity: string): void {\n  const entries = integrity.trim().split(/\\s+/);\n  const supported = entries\n    .map((entry) => entry.match(/^(sha(?:256|384|512))-(.+)$/))\n    .filter((entry): entry is RegExpMatchArray => Boolean(entry));\n  if (supported.length === 0) throw new Error(\"integrity must use sha256, sha384, or sha512\");\n  const matches = supported.some((entry) => {\n    const actual = createHash(entry[1]).update(bytes).digest();\n    const expected = Buffer.from(entry[2], \"base64\");\n    return actual.length === expected.length && timingSafeEqual(actual, expected);\n  });\n  if (!matches) throw new Error(\"downloaded font did not match its integrity value\");\n}\n\nfunction resolveLocalFontPath(source: string, importer: string, root: string): string {\n  if (source.startsWith(\".\")) return path.resolve(path.dirname(importer), source);\n  if (path.isAbsolute(source)) {\n    return source;\n  }\n  try {\n    return createRequire(pathToFileURL(importer)).resolve(source);\n  } catch {\n    const segments = source.replace(/\\\\/g, \"/\").split(\"/\");\n    if (segments.includes(\"..\")) return path.resolve(root, source);\n\n    let current = path.dirname(importer);\n    const filesystemRoot = path.parse(current).root;\n    while (true) {\n      const candidate = path.join(current, \"node_modules\", ...segments);\n      if (existsSync(candidate)) return candidate;\n      if (current === filesystemRoot) break;\n      current = path.dirname(current);\n    }\n    return path.resolve(root, \"node_modules\", ...segments);\n  }\n}\n\nfunction replaceFontSection(css: string, section: string): string {\n  const start = css.indexOf(FONT_SECTION_START);\n  const end = css.indexOf(FONT_SECTION_END);\n  const withoutExisting =\n    start >= 0 && end >= start\n      ? `${css.slice(0, start)}${css.slice(end + FONT_SECTION_END.length)}`.trimEnd()\n      : css.trimEnd();\n  return `${withoutExisting}${withoutExisting ? \"\\n\\n\" : \"\"}${section}`;\n}\n\nexport function mergeFarmFontCss(clientCss: string, fontCss: string): string {\n  return replaceFontSection(clientCss, fontCss);\n}\n\nfunction getOrCreateRegistry(\n  root: string,\n  basePath = \"/\",\n  publicDir?: string | false,\n): FarmFontRegistry {\n  const normalized = normalizeRoot(root);\n  const existing = registries.get(normalized);\n  if (existing) {\n    existing.basePath = normalizeBasePath(basePath);\n    existing.publicDir = normalizePublicDir(normalized, publicDir);\n    return existing;\n  }\n  const registry = new FarmFontRegistry(normalized, basePath, publicDir);\n  registries.set(normalized, registry);\n  return registry;\n}\n\nfunction getGlobalMap<TKey, TValue>(key: symbol): Map<TKey, TValue> {\n  const runtime = globalThis as typeof globalThis & Record<symbol, unknown>;\n  const existing = runtime[key];\n  if (existing instanceof Map) return existing as Map<TKey, TValue>;\n  const created = new Map<TKey, TValue>();\n  runtime[key] = created;\n  return created;\n}\n\nfunction normalizeRoot(root: string): string {\n  return path.resolve(root).replace(/\\\\/g, \"/\");\n}\n\nfunction normalizePublicDir(root: string, publicDir?: string | false): string | false {\n  if (publicDir === false || publicDir === \"\") return false;\n  return path.resolve(root, publicDir || \"public\");\n}\n\nfunction normalizePublicFontPath(source: string, moduleId: string): string {\n  if (source.includes(\"?\") || source.includes(\"#\")) {\n    throw fontError(moduleId, `public font paths cannot contain a query string or fragment`);\n  }\n  return `/${source.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\")}`;\n}\n\nfunction isPathInside(parent: string, child: string): boolean {\n  const relative = path.relative(parent, child);\n  return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nfunction normalizeBasePath(value: string): string {\n  if (!value || value === \"/\") return \"/\";\n  return `/${value.replace(/^\\/+|\\/+$/g, \"\")}/`;\n}\n\nfunction joinBasePath(basePath: string, value: string): string {\n  return basePath === \"/\" ? value : `${basePath.replace(/\\/$/, \"\")}${value}`;\n}\n\nfunction extensionFromPath(pathname: string): string {\n  const extension = path.extname(pathname).toLowerCase();\n  if (!FONT_EXTENSION_RE.test(extension)) {\n    throw new Error(`[Farm fonts] Remote font URL must end in .woff2, .woff, .ttf, or .otf`);\n  }\n  return extension;\n}\n\nfunction fontFormat(extension: string): string {\n  switch (extension.toLowerCase()) {\n    case \".woff2\":\n      return \"woff2\";\n    case \".woff\":\n      return \"woff\";\n    case \".ttf\":\n      return \"truetype\";\n    case \".otf\":\n      return \"opentype\";\n    default:\n      throw new Error(`[Farm fonts] Unsupported font extension ${extension}`);\n  }\n}\n\nfunction fontContentType(extension: string): string {\n  switch (extension.toLowerCase()) {\n    case \".woff2\":\n      return \"font/woff2\";\n    case \".woff\":\n      return \"font/woff\";\n    case \".ttf\":\n      return \"font/ttf\";\n    case \".otf\":\n      return \"font/otf\";\n    default:\n      return \"application/octet-stream\";\n  }\n}\n\nfunction renderFamilyStack(family: string, fallback: string[]): string {\n  return [quoteCssString(family), ...fallback.map(formatFallbackFamily)].join(\", \");\n}\n\nfunction formatFallbackFamily(value: string): string {\n  return /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|emoji|math|fangsong)$/.test(\n    value,\n  )\n    ? value\n    : quoteCssString(value);\n}\n\nfunction quoteCssString(value: string): string {\n  return JSON.stringify(value.replace(/[\\n\\r\\f]/g, \" \"));\n}\n\nfunction sanitizeFileName(value: string): string {\n  return value\n    .replace(/[^A-Za-z0-9_-]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\")\n    .slice(0, 80);\n}\n\nfunction assetSourceToString(source: string | Uint8Array): string {\n  return typeof source === \"string\" ? source : Buffer.from(source).toString(\"utf8\");\n}\n\nfunction applyReplacements(code: string, replacements: Replacement[]): string {\n  let output = code;\n  for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n    output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n  }\n  return output;\n}\n\nfunction walkAst(\n  node: AstNode,\n  visit: (node: AstNode, ancestors: readonly AstNode[]) => void,\n  ancestors: readonly AstNode[] = [],\n): void {\n  visit(node, ancestors);\n  const childAncestors = [...ancestors, node];\n  for (const [key, value] of Object.entries(node)) {\n    if ([\"start\", \"end\", \"loc\", \"range\"].includes(key)) continue;\n    if (isAstNode(value)) walkAst(value, visit, childAncestors);\n    else if (Array.isArray(value)) {\n      for (const item of value) if (isAstNode(item)) walkAst(item, visit, childAncestors);\n    }\n  }\n}\n\nfunction readPropertyName(value: unknown): string | undefined {\n  if (!isAstNode(value)) return undefined;\n  if (value.type === \"Identifier\" && typeof value.name === \"string\") return value.name;\n  if (value.type === \"Literal\" && typeof value.value === \"string\") return value.value;\n  return undefined;\n}\n\nfunction isAstNode(value: unknown): value is AstNode {\n  return (\n    Boolean(value) &&\n    typeof value === \"object\" &&\n    typeof (value as AstNode).type === \"string\" &&\n    typeof (value as AstNode).start === \"number\" &&\n    typeof (value as AstNode).end === \"number\"\n  );\n}\n\nfunction isFunctionNode(node: AstNode): boolean {\n  return (\n    node.type === \"FunctionDeclaration\" ||\n    node.type === \"FunctionExpression\" ||\n    node.type === \"ArrowFunctionExpression\"\n  );\n}\n\nfunction isFontLoaderKind(value: unknown): value is FontLoaderKind {\n  return typeof value === \"string\" && FONT_FUNCTIONS.has(value as FontLoaderKind);\n}\n\nfunction containsFontFunction(code: string): boolean {\n  return Array.from(FONT_FUNCTIONS).some((name) => code.includes(name));\n}\n\nfunction requireString(value: unknown, id: string, label: string): string {\n  if (typeof value !== \"string\" || value.trim() === \"\") {\n    throw fontError(id, `${label} must be a non-empty string`);\n  }\n  return value;\n}\n\nfunction optionalString(value: unknown, id: string, label: string): string | undefined {\n  if (value === undefined) return undefined;\n  return requireString(value, id, label);\n}\n\nfunction readStringArray(value: unknown, id: string, label: string): string[] {\n  if (value === undefined) return [];\n  if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n    throw fontError(id, `${label} must be an array of family names`);\n  }\n  return value as string[];\n}\n\nfunction optionalWeight(value: unknown, id: string): number | string | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 1000) {\n    return value;\n  }\n  if (\n    typeof value === \"string\" &&\n    /^(?:[1-9]\\d{0,2}|1000)(?:\\s+(?:[1-9]\\d{0,2}|1000))?$/.test(value)\n  ) {\n    const bounds = value.split(/\\s+/).map(Number);\n    if (bounds.length === 2 && bounds[0] > bounds[1]) {\n      throw fontError(id, `font weight range must be ordered from lowest to highest`);\n    }\n    return value;\n  }\n  throw fontError(id, `font weight must be a number or range such as \"100 900\"`);\n}\n\nfunction optionalCssDescriptor(value: unknown, id: string, label: string): string | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value !== \"string\" || !/^[A-Za-z0-9 .-]+$/.test(value)) {\n    throw fontError(id, `font ${label} contains unsupported characters`);\n  }\n  return value;\n}\n\nfunction optionalUnicodeRange(value: unknown, id: string): string | undefined {\n  if (value === undefined) return undefined;\n  if (typeof value !== \"string\" || !/^[Uu+0-9A-Fa-f?*, -]+$/.test(value)) {\n    throw fontError(id, `font unicodeRange contains unsupported characters`);\n  }\n  return value;\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n  return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\");\n}\n\nfunction fontError(id: string, message: string): Error {\n  return new Error(`[Farm fonts] ${message} in ${id.split(\"?\", 1)[0]}`);\n}\n","/** @internal */\nexport function omitFarmResponseBody(response: Response): Response {\n  if (response.body) {\n    void response.body.cancel().catch(() => undefined);\n  }\n\n  return new Response(null, {\n    status: response.status,\n    statusText: response.statusText,\n    headers: response.headers,\n  });\n}\n","import type { ImageResponseOptions } from \"@vercel/og\";\nimport type { ReactElement } from \"react\";\nimport { omitFarmResponseBody } from \"./response-body\";\nimport { matchesFarmIfNoneMatch } from \"./server-http\";\n\nconst REACT_ELEMENT_TYPE = Symbol.for(\"react.element\");\nconst REACT_TRANSITIONAL_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\");\nconst REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\");\nconst REACT_MEMO_TYPE = Symbol.for(\"react.memo\");\nconst REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n\ntype MetadataImageSize = {\n  width?: number;\n  height?: number;\n};\n\ntype MetadataImageFont = Omit<NonNullable<ImageResponseOptions[\"fonts\"]>[number], \"data\"> & {\n  data: ArrayBuffer | ArrayBufferView | Promise<ArrayBuffer | ArrayBufferView>;\n};\n\nexport type FarmMetadataImageModule = {\n  size?: MetadataImageSize;\n  contentType?: string;\n  revalidate?: number | false;\n  fonts?: MetadataImageFont[];\n  emoji?: ImageResponseOptions[\"emoji\"];\n  debug?: boolean;\n};\n\nexport type FarmMetadataImageResponseOptions = {\n  method?: string;\n  ifNoneMatch?: string | null;\n};\n\nfunction isResponse(value: unknown): value is Response {\n  return (\n    typeof Response !== \"undefined\" &&\n    (value instanceof Response ||\n      Boolean(\n        value &&\n        typeof value === \"object\" &&\n        typeof (value as Response).arrayBuffer === \"function\" &&\n        (value as Response).headers,\n      ))\n  );\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n  return Boolean(\n    value &&\n    (typeof value === \"object\" || typeof value === \"function\") &&\n    typeof (value as PromiseLike<unknown>).then === \"function\",\n  );\n}\n\nfunction isReactElement(value: unknown): value is ReactElement<Record<string, unknown>> {\n  if (!value || typeof value !== \"object\") return false;\n  const marker = (value as { $$typeof?: symbol }).$$typeof;\n  return marker === REACT_ELEMENT_TYPE || marker === REACT_TRANSITIONAL_ELEMENT_TYPE;\n}\n\nasync function prepareMetadataImageNode(node: unknown): Promise<unknown> {\n  if (isThenable(node)) {\n    return prepareMetadataImageNode(await node);\n  }\n\n  if (Array.isArray(node)) {\n    return Promise.all(node.map((child) => prepareMetadataImageNode(child)));\n  }\n\n  if (!isReactElement(node)) {\n    return node;\n  }\n\n  const element = node;\n  const type = element.type as any;\n  const props = element.props || {};\n\n  if (typeof type === \"function\") {\n    if (type.prototype?.isReactComponent) {\n      throw new Error(\n        \"Metadata image components must be stateless function components; React class components are not supported.\",\n      );\n    }\n    return prepareMetadataImageNode(await type(props));\n  }\n\n  if (type && typeof type === \"object\") {\n    if (type.$$typeof === REACT_MEMO_TYPE) {\n      const { createElement } = await import(\"react\");\n      return prepareMetadataImageNode(createElement(type.type, props));\n    }\n    if (type.$$typeof === REACT_FORWARD_REF_TYPE) {\n      return prepareMetadataImageNode(await type.render(props, null));\n    }\n    if (type.$$typeof === REACT_LAZY_TYPE) {\n      const { createElement } = await import(\"react\");\n      let resolvedType: unknown;\n      try {\n        resolvedType = type._init(type._payload);\n      } catch (suspension) {\n        if (suspension && typeof (suspension as Promise<unknown>).then === \"function\") {\n          await suspension;\n          resolvedType = type._init(type._payload);\n        } else {\n          throw suspension;\n        }\n      }\n      return prepareMetadataImageNode(createElement(resolvedType as any, props));\n    }\n  }\n\n  const preparedChildren = await prepareMetadataImageNode(props.children);\n  const preparedProps: Record<string, unknown> = { ...props };\n\n  if (typeof preparedProps.className === \"string\") {\n    preparedProps.tw = [preparedProps.tw, preparedProps.className].filter(Boolean).join(\" \");\n    delete preparedProps.className;\n  }\n  delete preparedProps.children;\n\n  const { createElement } = await import(\"react\");\n  return createElement(type, {\n    ...preparedProps,\n    key: element.key,\n    children: preparedChildren,\n  });\n}\n\nasync function normalizeFonts(\n  fonts: MetadataImageFont[] | undefined,\n): Promise<ImageResponseOptions[\"fonts\"] | undefined> {\n  if (!fonts?.length) return undefined;\n\n  return Promise.all(\n    fonts.map(async (font) => {\n      const data = await font.data;\n      const arrayBuffer = ArrayBuffer.isView(data) ? toArrayBuffer(data) : data;\n      return { ...font, data: arrayBuffer } as NonNullable<ImageResponseOptions[\"fonts\"]>[number];\n    }),\n  );\n}\n\nfunction resolveCacheControl(revalidate: number | false | undefined): string {\n  if (revalidate === false) {\n    return \"public, max-age=31536000, immutable\";\n  }\n  if (typeof revalidate === \"number\" && Number.isFinite(revalidate) && revalidate > 0) {\n    return `public, s-maxage=${Math.floor(revalidate)}, stale-while-revalidate=300`;\n  }\n  return \"public, max-age=0, must-revalidate\";\n}\n\nfunction toArrayBuffer(value: ArrayBuffer | ArrayBufferView): ArrayBuffer {\n  if (value instanceof ArrayBuffer) return value;\n  const bytes = new Uint8Array(value.byteLength);\n  bytes.set(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));\n  return bytes.buffer;\n}\n\nasync function createEntityTag(body: ArrayBuffer): Promise<string> {\n  const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", body);\n  const hash = Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, \"0\"))\n    .join(\"\")\n    .slice(0, 32);\n  return `\"${hash}\"`;\n}\n\nasync function finalizeMetadataImageResponse(\n  body: ArrayBuffer,\n  headers: HeadersInit,\n  options: FarmMetadataImageResponseOptions,\n): Promise<Response> {\n  const responseHeaders = new Headers(headers);\n  const etag = await createEntityTag(body);\n  responseHeaders.set(\"ETag\", etag);\n  responseHeaders.set(\"Content-Length\", String(body.byteLength));\n  responseHeaders.set(\"X-Content-Type-Options\", \"nosniff\");\n\n  if (matchesFarmIfNoneMatch(options.ifNoneMatch, etag)) {\n    return new Response(null, { status: 304, headers: responseHeaders });\n  }\n\n  return new Response(options.method?.toUpperCase() === \"HEAD\" ? null : body, {\n    status: 200,\n    headers: responseHeaders,\n  });\n}\n\n/** @internal */\nexport async function createFarmMetadataImageResponse(\n  value: unknown,\n  imageModule: FarmMetadataImageModule,\n  options: FarmMetadataImageResponseOptions = {},\n): Promise<Response> {\n  const method = (options.method || \"GET\").toUpperCase();\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    return new Response(null, { status: 405, headers: { Allow: \"GET, HEAD\" } });\n  }\n\n  if (isResponse(value)) {\n    return method === \"HEAD\" ? omitFarmResponseBody(value) : value;\n  }\n\n  const cacheControl = resolveCacheControl(imageModule.revalidate);\n  const explicitContentType = imageModule.contentType?.split(\";\", 1)[0]?.trim().toLowerCase();\n\n  if (isReactElement(value) && explicitContentType !== \"image/svg+xml\") {\n    const { ImageResponse } = await import(\"@vercel/og\");\n    const element = (await prepareMetadataImageNode(value)) as ReactElement;\n    const response = new ImageResponse(element, {\n      width: imageModule.size?.width || 1200,\n      height: imageModule.size?.height || 630,\n      fonts: await normalizeFonts(imageModule.fonts),\n      emoji: imageModule.emoji,\n      debug: imageModule.debug,\n      headers: { \"cache-control\": cacheControl },\n    });\n    const headers = new Headers(response.headers);\n    headers.set(\"Cache-Control\", cacheControl);\n    return finalizeMetadataImageResponse(await response.arrayBuffer(), headers, options);\n  }\n\n  let body: ArrayBuffer;\n  if (typeof value === \"string\") {\n    body = toArrayBuffer(new TextEncoder().encode(value));\n  } else if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n    body = toArrayBuffer(value);\n  } else if (isReactElement(value)) {\n    const { renderToStaticMarkup } = await import(\"react-dom/server\");\n    body = toArrayBuffer(new TextEncoder().encode(renderToStaticMarkup(value)));\n  } else {\n    throw new Error(\"Metadata image must return a Response, string, bytes, or React element\");\n  }\n\n  return finalizeMetadataImageResponse(\n    body,\n    {\n      \"Content-Type\": imageModule.contentType || \"image/svg+xml; charset=utf-8\",\n      \"Cache-Control\": cacheControl,\n    },\n    options,\n  );\n}\n","import { omitFarmResponseBody } from \"./response-body\";\n\nexport type ApplicationMetadataRouteKind = \"sitemap\" | \"robots\" | \"manifest\";\n\nexport namespace MetadataRoute {\n  export type SitemapChangeFrequency =\n    | \"always\"\n    | \"hourly\"\n    | \"daily\"\n    | \"weekly\"\n    | \"monthly\"\n    | \"yearly\"\n    | \"never\";\n\n  export interface SitemapEntry {\n    url: string;\n    lastModified?: string | Date;\n    changeFrequency?: SitemapChangeFrequency;\n    priority?: number;\n    alternates?: {\n      languages?: Record<string, string>;\n    };\n  }\n\n  export type Sitemap = SitemapEntry[];\n\n  export interface RobotsRule {\n    userAgent: string | string[];\n    allow?: string | string[];\n    disallow?: string | string[];\n    crawlDelay?: number;\n  }\n\n  export interface Robots {\n    rules: RobotsRule | RobotsRule[];\n    sitemap?: string | string[];\n    host?: string;\n  }\n\n  export interface ManifestIcon {\n    src: string;\n    sizes?: string;\n    type?: string;\n    purpose?: string;\n  }\n\n  export interface Manifest {\n    name?: string;\n    short_name?: string;\n    description?: string;\n    id?: string;\n    start_url?: string;\n    scope?: string;\n    display?: \"fullscreen\" | \"standalone\" | \"minimal-ui\" | \"browser\" | string;\n    orientation?: string;\n    background_color?: string;\n    theme_color?: string;\n    lang?: string;\n    dir?: \"ltr\" | \"rtl\" | \"auto\";\n    categories?: string[];\n    icons?: ManifestIcon[];\n    [key: string]: unknown;\n  }\n}\n\nexport interface MetadataRouteContext {\n  request: Request;\n  params: Record<string, string>;\n  searchParams: URLSearchParams;\n  /** The concrete route-segment path that owns the metadata file. */\n  path: string;\n}\n\nexport interface FarmMetadataRouteModule {\n  revalidate?: number | false;\n}\n\nexport interface FarmMetadataRouteResponseOptions {\n  method?: string;\n}\n\nfunction isResponse(value: unknown): value is Response {\n  return (\n    typeof Response !== \"undefined\" &&\n    (value instanceof Response ||\n      Boolean(\n        value &&\n        typeof value === \"object\" &&\n        typeof (value as Response).arrayBuffer === \"function\" &&\n        (value as Response).headers,\n      ))\n  );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction resolveCacheControl(revalidate: number | false | undefined): string {\n  if (revalidate === false) {\n    return \"public, max-age=31536000, immutable\";\n  }\n  if (typeof revalidate === \"number\" && Number.isFinite(revalidate) && revalidate > 0) {\n    return `public, s-maxage=${Math.floor(revalidate)}, stale-while-revalidate=300`;\n  }\n  return \"public, max-age=0, must-revalidate\";\n}\n\nfunction escapeXml(value: unknown): string {\n  return String(value)\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\nfunction serializeSitemap(value: unknown): string {\n  if (!Array.isArray(value)) {\n    throw new TypeError(\"sitemap.ts must return an array or a Response\");\n  }\n\n  const entries = value.map((candidate, index) => {\n    if (!isRecord(candidate) || typeof candidate.url !== \"string\" || !candidate.url) {\n      throw new TypeError(`sitemap.ts entry ${index} must include a non-empty url`);\n    }\n    return candidate as unknown as MetadataRoute.SitemapEntry;\n  });\n  const hasLanguageAlternates = entries.some(\n    (entry) => entry.alternates?.languages && Object.keys(entry.alternates.languages).length > 0,\n  );\n  const namespace = hasLanguageAlternates ? ' xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"' : \"\";\n  const lines = [\n    '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n    `<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"${namespace}>`,\n  ];\n\n  for (const entry of entries) {\n    lines.push(\"  <url>\", `    <loc>${escapeXml(entry.url)}</loc>`);\n    if (entry.lastModified !== undefined) {\n      const lastModified =\n        entry.lastModified instanceof Date ? entry.lastModified.toISOString() : entry.lastModified;\n      lines.push(`    <lastmod>${escapeXml(lastModified)}</lastmod>`);\n    }\n    if (entry.changeFrequency) {\n      lines.push(`    <changefreq>${escapeXml(entry.changeFrequency)}</changefreq>`);\n    }\n    if (entry.priority !== undefined) {\n      lines.push(`    <priority>${escapeXml(entry.priority)}</priority>`);\n    }\n    for (const [language, href] of Object.entries(entry.alternates?.languages || {})) {\n      lines.push(\n        `    <xhtml:link rel=\"alternate\" hreflang=\"${escapeXml(language)}\" href=\"${escapeXml(href)}\" />`,\n      );\n    }\n    lines.push(\"  </url>\");\n  }\n\n  lines.push(\"</urlset>\");\n  return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction toArray<T>(value: T | T[] | undefined): T[] {\n  return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n\nfunction serializeRobots(value: unknown): string {\n  if (!isRecord(value)) {\n    throw new TypeError(\"robots.ts must return a robots object or a Response\");\n  }\n\n  const robots = value as unknown as MetadataRoute.Robots;\n  const rules = toArray(robots.rules);\n  if (rules.length === 0) {\n    throw new TypeError(\"robots.ts must return at least one rule\");\n  }\n\n  const sections = rules.map((rule, index) => {\n    if (!isRecord(rule)) {\n      throw new TypeError(`robots.ts rule ${index} must be an object`);\n    }\n    const userAgents = toArray(rule.userAgent).filter(\n      (userAgent): userAgent is string => typeof userAgent === \"string\" && Boolean(userAgent),\n    );\n    if (userAgents.length === 0) {\n      throw new TypeError(`robots.ts rule ${index} must include a userAgent`);\n    }\n\n    const lines = userAgents.map((userAgent) => `User-agent: ${userAgent}`);\n    for (const allow of toArray(rule.allow)) lines.push(`Allow: ${allow}`);\n    for (const disallow of toArray(rule.disallow)) lines.push(`Disallow: ${disallow}`);\n    if (rule.crawlDelay !== undefined) lines.push(`Crawl-delay: ${rule.crawlDelay}`);\n    return lines.join(\"\\n\");\n  });\n\n  const globalLines = [\n    ...toArray(robots.sitemap).map((sitemap) => `Sitemap: ${sitemap}`),\n    ...(robots.host ? [`Host: ${robots.host}`] : []),\n  ];\n  return `${[...sections, ...(globalLines.length ? [globalLines.join(\"\\n\")] : [])].join(\"\\n\\n\")}\\n`;\n}\n\nfunction serializeManifest(value: unknown): string {\n  if (!isRecord(value)) {\n    throw new TypeError(\"manifest.ts must return a manifest object or a Response\");\n  }\n  return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\n/** @internal */\nexport function createFarmMetadataRouteResponse(\n  kind: ApplicationMetadataRouteKind,\n  value: unknown,\n  routeModule: FarmMetadataRouteModule = {},\n  options: FarmMetadataRouteResponseOptions = {},\n): Response {\n  const method = (options.method || \"GET\").toUpperCase();\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    return new Response(null, { status: 405, headers: { Allow: \"GET, HEAD\" } });\n  }\n\n  if (isResponse(value)) {\n    return method === \"HEAD\" ? omitFarmResponseBody(value) : value;\n  }\n\n  const body =\n    kind === \"sitemap\"\n      ? serializeSitemap(value)\n      : kind === \"robots\"\n        ? serializeRobots(value)\n        : serializeManifest(value);\n  const contentType =\n    kind === \"sitemap\"\n      ? \"application/xml; charset=utf-8\"\n      : kind === \"robots\"\n        ? \"text/plain; charset=utf-8\"\n        : \"application/manifest+json; charset=utf-8\";\n\n  return new Response(method === \"HEAD\" ? null : body, {\n    headers: {\n      \"Content-Type\": contentType,\n      \"Cache-Control\": resolveCacheControl(routeModule.revalidate),\n      \"X-Content-Type-Options\": \"nosniff\",\n    },\n  });\n}\n","const FARM_TRAILING_SLASH_PREFERENCE = Symbol.for(\"farm.trailingSlashPreference\");\n\nfunction getFarmGlobalState(): Record<PropertyKey, unknown> {\n  return globalThis as unknown as Record<PropertyKey, unknown>;\n}\n\n/** @internal Configure the app-wide URL preference for framework link rendering. */\nexport function setFarmTrailingSlashPreference(enabled: boolean | undefined): void {\n  getFarmGlobalState()[FARM_TRAILING_SLASH_PREFERENCE] = enabled === true;\n}\n\n/** @internal Read the app-wide URL preference used by framework links. */\nexport function getFarmTrailingSlashPreference(): boolean {\n  return getFarmGlobalState()[FARM_TRAILING_SLASH_PREFERENCE] === true;\n}\n\nexport function normalizeFarmTrailingSlashPathname(pathname: string, enabled: boolean): string {\n  if (pathname === \"/\") return pathname;\n  if (enabled) return pathname.endsWith(\"/\") ? pathname : `${pathname}/`;\n  return pathname.replace(/\\/+$/, \"\") || \"/\";\n}\n\nexport function resolveFarmTrailingSlashRedirect(url: URL, enabled: boolean): string | null {\n  const pathname = normalizeFarmTrailingSlashPathname(url.pathname, enabled);\n  return pathname === url.pathname ? null : `${pathname}${url.search}`;\n}\n","export const DEFAULT_NOT_FOUND_STYLES = `\nbody {\n  margin: 0;\n}\n\n.farm-default-not-found {\n  --farm-not-found-bg: #fafafa;\n  --farm-not-found-fg: #171717;\n  --farm-not-found-muted: #737373;\n  --farm-not-found-line: rgba(0, 0, 0, 0.16);\n  --farm-not-found-button-fg: #ffffff;\n  min-height: 100vh;\n  min-height: 100svh;\n  display: grid;\n  place-items: center;\n  padding: 24px;\n  color: var(--farm-not-found-fg);\n  background: var(--farm-not-found-bg);\n  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  color-scheme: light;\n}\n\n.farm-default-not-found,\n.farm-default-not-found * {\n  box-sizing: border-box;\n}\n\n.farm-default-not-found__content {\n  width: min(100%, 280px);\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n\n.farm-default-not-found__code {\n  margin: 0;\n  color: var(--farm-not-found-fg);\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  font-size: clamp(88px, 20vw, 140px);\n  font-weight: 800;\n  line-height: 0.75;\n  letter-spacing: -0.1em;\n  transform: translateX(-3px);\n}\n\n@supports (-webkit-text-stroke: 1px currentColor) {\n  .farm-default-not-found__code {\n    color: var(--farm-not-found-bg);\n    -webkit-text-stroke: 2px var(--farm-not-found-fg);\n    text-shadow: 5px 5px 0 var(--farm-not-found-fg);\n  }\n}\n\n.farm-default-not-found__description {\n  width: 100%;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin: 34px 0 30px;\n  color: var(--farm-not-found-muted);\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  font-size: 10px;\n  line-height: 1;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  white-space: nowrap;\n}\n\n.farm-default-not-found__description::before,\n.farm-default-not-found__description::after {\n  content: \"\";\n  height: 1px;\n  flex: 1 1 auto;\n  background: var(--farm-not-found-line);\n}\n\n.farm-default-not-found__home {\n  min-width: 132px;\n  min-height: 44px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0 20px;\n  border: 1px solid var(--farm-not-found-fg);\n  border-radius: 0;\n  color: var(--farm-not-found-button-fg);\n  background: var(--farm-not-found-fg);\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1;\n  text-decoration: none;\n  transition: opacity 150ms ease-out, transform 100ms ease-out;\n}\n\n@media (hover: hover) and (pointer: fine) {\n  .farm-default-not-found__home:hover {\n    opacity: 0.78;\n  }\n}\n\n.farm-default-not-found__home:active {\n  transform: translateY(1px);\n}\n\n.farm-default-not-found__home:focus-visible {\n  outline: 2px solid var(--farm-not-found-fg);\n  outline-offset: 3px;\n}\n\n@media (prefers-color-scheme: dark) {\n  .farm-default-not-found {\n    --farm-not-found-bg: #0a0a0a;\n    --farm-not-found-fg: #ededed;\n    --farm-not-found-muted: #a1a1a1;\n    --farm-not-found-line: rgba(255, 255, 255, 0.2);\n    --farm-not-found-button-fg: #0a0a0a;\n    color-scheme: dark;\n  }\n}\n\n.dark .farm-default-not-found,\n[data-theme=\"dark\"] .farm-default-not-found,\n[data-color-scheme=\"dark\"] .farm-default-not-found {\n  --farm-not-found-bg: #0a0a0a;\n  --farm-not-found-fg: #ededed;\n  --farm-not-found-muted: #a1a1a1;\n  --farm-not-found-line: rgba(255, 255, 255, 0.2);\n  --farm-not-found-button-fg: #0a0a0a;\n  color-scheme: dark;\n}\n\n.light .farm-default-not-found,\n[data-theme=\"light\"] .farm-default-not-found,\n[data-color-scheme=\"light\"] .farm-default-not-found {\n  --farm-not-found-bg: #fafafa;\n  --farm-not-found-fg: #171717;\n  --farm-not-found-muted: #737373;\n  --farm-not-found-line: rgba(0, 0, 0, 0.16);\n  --farm-not-found-button-fg: #ffffff;\n  color-scheme: light;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .farm-default-not-found__home {\n    transition: none;\n  }\n\n  .farm-default-not-found__home:active {\n    transform: none;\n  }\n}\n`;\n","/**\n * Shared styles for Farm's default HTTP error page.\n *\n * Kept framework-agnostic so the same fallback can be used by the development\n * renderer and generated production runtimes.\n */\nexport const DEFAULT_ERROR_STYLES = `\nbody {\n  margin: 0;\n  background: #080808;\n}\n\n.farm-default-error {\n  --farm-error-bg: #080808;\n  --farm-error-panel: #0d0d0d;\n  --farm-error-fg: #f3f3f3;\n  --farm-error-muted: #9a9a9a;\n  --farm-error-subtle: #6f6f6f;\n  --farm-error-line: rgba(255, 255, 255, 0.1);\n  --farm-error-line-strong: rgba(255, 255, 255, 0.2);\n  --farm-error-button-bg: #f1f1f1;\n  --farm-error-button-fg: #0a0a0a;\n  --farm-error-source-line: rgba(255, 255, 255, 0.055);\n  --farm-error-source-marker: #f3f3f3;\n  --farm-error-font-sans: \"Geist Variable\", \"Geist Sans\", Geist, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  --farm-error-font-mono: \"Geist Mono Variable\", \"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n  min-height: 100vh;\n  min-height: 100svh;\n  display: grid;\n  color: var(--farm-error-fg);\n  background: var(--farm-error-bg);\n  font-family: var(--farm-error-font-sans);\n  font-synthesis: none;\n  color-scheme: dark;\n  text-rendering: optimizeLegibility;\n}\n\n.farm-default-error,\n.farm-default-error * {\n  box-sizing: border-box;\n}\n\n.farm-default-error__frame {\n  width: min(100%, 1180px);\n  min-height: 100vh;\n  min-height: 100svh;\n  display: grid;\n  grid-template-rows: auto minmax(0, 1fr) auto;\n  margin: 0 auto;\n  padding: clamp(24px, 4vw, 52px);\n}\n\n.farm-default-error__brand {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  color: var(--farm-error-muted);\n  font-family: var(--farm-error-font-mono);\n  font-size: 11px;\n  font-weight: 520;\n  line-height: 1;\n  letter-spacing: 0.08em;\n}\n\n.farm-default-error__brand > span:first-child {\n  color: var(--farm-error-fg);\n}\n\n.farm-default-error__brand-divider,\n.farm-default-error__status-divider,\n.farm-default-error__footer-divider {\n  color: var(--farm-error-subtle);\n}\n\n.farm-default-error__content {\n  width: min(100%, 680px);\n  min-width: 0;\n  align-self: center;\n  margin: 0 auto;\n  padding: clamp(64px, 10vh, 112px) 0;\n}\n\n.farm-default-error--development .farm-default-error__content {\n  width: min(100%, 900px);\n}\n\n.farm-default-error > .farm-default-error__content {\n  align-self: center;\n  padding-right: 24px;\n  padding-left: 24px;\n}\n\n.farm-default-error__status,\n.farm-default-error__eyebrow {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin: 0 0 24px;\n  color: var(--farm-error-muted);\n  font-family: var(--farm-error-font-mono);\n  font-size: 12px;\n  font-weight: 520;\n  line-height: 1.4;\n  letter-spacing: 0.055em;\n  text-transform: uppercase;\n}\n\n.farm-default-error__status-mark {\n  width: 6px;\n  height: 6px;\n  flex: 0 0 auto;\n  background: var(--farm-error-fg);\n}\n\n.farm-default-error__code {\n  margin: 0 0 18px;\n  color: var(--farm-error-fg);\n  font-family: var(--farm-error-font-mono);\n  font-size: clamp(48px, 8vw, 72px);\n  font-weight: 540;\n  line-height: 0.95;\n  letter-spacing: -0.055em;\n}\n\n.farm-default-error__summary {\n  margin: 0;\n}\n\n.farm-default-error__title {\n  max-width: 680px;\n  margin: 0;\n  color: var(--farm-error-fg);\n  font-family: var(--farm-error-font-sans);\n  font-size: clamp(36px, 5.2vw, 56px);\n  font-weight: 560;\n  line-height: 1.04;\n  letter-spacing: -0.052em;\n  text-wrap: balance;\n}\n\n.farm-default-error__message {\n  max-width: 590px;\n  margin: 18px 0 0;\n  color: var(--farm-error-muted);\n  font-family: var(--farm-error-font-sans);\n  font-size: clamp(16px, 2vw, 19px);\n  line-height: 1.55;\n  letter-spacing: -0.012em;\n  overflow-wrap: anywhere;\n}\n\n.farm-default-error__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 10px;\n  margin-top: 30px;\n}\n\n.farm-default-error__action {\n  min-height: 44px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0 17px;\n  border: 1px solid var(--farm-error-line-strong);\n  border-radius: 7px;\n  color: var(--farm-error-fg);\n  background: transparent;\n  font: inherit;\n  font-family: var(--farm-error-font-mono);\n  font-size: 13px;\n  font-weight: 560;\n  line-height: 1;\n  letter-spacing: 0.015em;\n  text-decoration: none;\n  cursor: pointer;\n  transition: background-color 150ms ease-out, border-color 150ms ease-out, color 150ms ease-out, transform 100ms ease-out;\n}\n\n.farm-default-error__action--primary {\n  border-color: var(--farm-error-button-bg);\n  color: var(--farm-error-button-fg);\n  background: var(--farm-error-button-bg);\n}\n\n.farm-default-error__panel {\n  margin-top: 42px;\n  border-top: 1px solid var(--farm-error-line-strong);\n}\n\n.farm-default-error__row {\n  min-height: 45px;\n  display: grid;\n  grid-template-columns: 92px minmax(0, 1fr);\n  align-items: center;\n  border-bottom: 1px solid var(--farm-error-line);\n}\n\n.farm-default-error__label,\n.farm-default-error__value,\n.farm-default-error__details-title,\n.farm-default-error__source-path,\n.farm-default-error__meta,\n.farm-default-error__footer-action {\n  font-family: var(--farm-error-font-mono);\n}\n\n.farm-default-error__label {\n  color: var(--farm-error-subtle);\n  font-size: 10px;\n  font-weight: 560;\n  letter-spacing: 0.09em;\n  text-transform: uppercase;\n}\n\n.farm-default-error__value {\n  min-width: 0;\n  padding: 11px 0;\n  color: var(--farm-error-muted);\n  font-size: 12px;\n  line-height: 1.55;\n  overflow-wrap: anywhere;\n}\n\n.farm-default-error__details {\n  padding: 24px 0 0;\n  border-bottom: 1px solid var(--farm-error-line);\n}\n\n.farm-default-error__details-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 16px;\n  margin-bottom: 12px;\n}\n\n.farm-default-error__details-title {\n  margin: 0;\n  color: var(--farm-error-muted);\n  font-size: 10px;\n  font-weight: 560;\n  line-height: 1;\n  letter-spacing: 0.09em;\n  text-transform: uppercase;\n}\n\n.farm-default-error__copy {\n  min-height: 32px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0 10px;\n  border: 1px solid var(--farm-error-line);\n  border-radius: 6px;\n  color: var(--farm-error-muted);\n  background: transparent;\n  font: inherit;\n  font-size: 11px;\n  cursor: pointer;\n  transition: background-color 150ms ease-out, border-color 150ms ease-out, color 150ms ease-out;\n}\n\n.farm-default-error__source {\n  overflow: hidden;\n  border: 1px solid var(--farm-error-line);\n  border-radius: 7px;\n  background: var(--farm-error-panel);\n}\n\n.farm-default-error__source-path {\n  margin: 0;\n  padding: 10px 13px;\n  border-bottom: 1px solid var(--farm-error-line);\n  color: var(--farm-error-muted);\n  font-size: 11px;\n  line-height: 1.45;\n  overflow-wrap: anywhere;\n}\n\n.farm-default-error__source-code {\n  margin: 0;\n  padding: 8px 0;\n  overflow-x: auto;\n  color: var(--farm-error-fg);\n  font-family: var(--farm-error-font-mono);\n  font-size: 12px;\n  line-height: 1.75;\n  tab-size: 2;\n}\n\n.farm-default-error__source-line {\n  min-width: max-content;\n  display: grid;\n  grid-template-columns: 68px minmax(0, 1fr);\n  padding: 0 14px 0 0;\n  border-left: 1px solid transparent;\n}\n\n.farm-default-error__source-line--active {\n  border-left-color: var(--farm-error-source-marker);\n  background: var(--farm-error-source-line);\n}\n\n.farm-default-error__source-gutter {\n  padding-right: 14px;\n  color: var(--farm-error-subtle);\n  text-align: right;\n  user-select: none;\n}\n\n.farm-default-error__source-line--active .farm-default-error__source-gutter {\n  color: var(--farm-error-source-marker);\n}\n\n.farm-default-error__source-text {\n  white-space: pre;\n}\n\n.farm-default-error__details-empty {\n  margin: 0;\n  padding: 14px;\n  border: 1px solid var(--farm-error-line);\n  border-radius: 7px;\n  color: var(--farm-error-muted);\n  background: var(--farm-error-panel);\n  font-family: var(--farm-error-font-mono);\n  font-size: 12px;\n  line-height: 1.5;\n}\n\n.farm-default-error__meta {\n  margin: 12px 0 20px;\n  color: var(--farm-error-subtle);\n  font-size: 10px;\n  line-height: 1.5;\n  letter-spacing: 0.035em;\n}\n\n.farm-default-error__footer {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  padding-top: 24px;\n}\n\n.farm-default-error__footer-action {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 0;\n  border: 0;\n  color: var(--farm-error-muted);\n  background: transparent;\n  font-size: 10px;\n  font-weight: 540;\n  line-height: 1.4;\n  letter-spacing: 0.065em;\n  text-decoration: none;\n  cursor: pointer;\n  transition: color 150ms ease-out;\n}\n\n.farm-default-error__docs-icon {\n  width: 14px;\n  height: 14px;\n  flex: 0 0 auto;\n  stroke: currentColor;\n  stroke-width: 1.25;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n\n.farm-default-error__sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n\n@media (hover: hover) and (pointer: fine) {\n  .farm-default-error__action:hover {\n    border-color: var(--farm-error-fg);\n    background: var(--farm-error-source-line);\n  }\n\n  .farm-default-error__action--primary:hover {\n    border-color: var(--farm-error-muted);\n    background: var(--farm-error-muted);\n  }\n\n  .farm-default-error__copy:hover {\n    border-color: var(--farm-error-line-strong);\n    color: var(--farm-error-fg);\n    background: var(--farm-error-source-line);\n  }\n\n  .farm-default-error__footer-action:hover {\n    color: var(--farm-error-fg);\n  }\n}\n\n.farm-default-error__copy:active,\n.farm-default-error__action:active {\n  transform: translateY(1px);\n}\n\n.farm-default-error__copy:focus-visible,\n.farm-default-error__action:focus-visible,\n.farm-default-error__footer-action:focus-visible {\n  outline: 2px solid var(--farm-error-fg);\n  outline-offset: 3px;\n}\n\n@media (max-width: 620px) {\n  .farm-default-error__frame {\n    padding: 22px 18px 26px;\n  }\n\n  .farm-default-error__content {\n    padding: 56px 0 68px;\n  }\n\n  .farm-default-error > .farm-default-error__content {\n    padding: 48px 18px;\n  }\n\n  .farm-default-error__title {\n    font-size: clamp(34px, 11vw, 44px);\n  }\n\n  .farm-default-error__message {\n    margin-top: 15px;\n  }\n\n  .farm-default-error__actions {\n    display: grid;\n    grid-template-columns: 1fr;\n  }\n\n  .farm-default-error__action {\n    width: 100%;\n  }\n\n  .farm-default-error__row {\n    grid-template-columns: 1fr;\n    gap: 2px;\n    padding: 11px 0;\n  }\n\n  .farm-default-error__value {\n    padding: 0;\n  }\n\n  .farm-default-error__details-header {\n    align-items: flex-start;\n    flex-direction: column;\n  }\n\n  .farm-default-error__copy {\n    width: 100%;\n  }\n\n  .farm-default-error__source-line {\n    grid-template-columns: 54px minmax(0, 1fr);\n  }\n}\n\n@media (prefers-color-scheme: light) {\n  .farm-default-error {\n    --farm-error-bg: #f7f7f5;\n    --farm-error-panel: #ffffff;\n    --farm-error-fg: #141414;\n    --farm-error-muted: #666666;\n    --farm-error-subtle: #8a8a8a;\n    --farm-error-line: rgba(0, 0, 0, 0.1);\n    --farm-error-line-strong: rgba(0, 0, 0, 0.19);\n    --farm-error-button-bg: #141414;\n    --farm-error-button-fg: #ffffff;\n    --farm-error-source-line: rgba(0, 0, 0, 0.045);\n    --farm-error-source-marker: #141414;\n    color-scheme: light;\n  }\n}\n\n.dark .farm-default-error,\n[data-theme=\"dark\"] .farm-default-error,\n[data-color-scheme=\"dark\"] .farm-default-error {\n  --farm-error-bg: #080808;\n  --farm-error-panel: #0d0d0d;\n  --farm-error-fg: #f3f3f3;\n  --farm-error-muted: #9a9a9a;\n  --farm-error-subtle: #6f6f6f;\n  --farm-error-line: rgba(255, 255, 255, 0.1);\n  --farm-error-line-strong: rgba(255, 255, 255, 0.2);\n  --farm-error-button-bg: #f1f1f1;\n  --farm-error-button-fg: #0a0a0a;\n  --farm-error-source-line: rgba(255, 255, 255, 0.055);\n  --farm-error-source-marker: #f3f3f3;\n  color-scheme: dark;\n}\n\n.light .farm-default-error,\n[data-theme=\"light\"] .farm-default-error,\n[data-color-scheme=\"light\"] .farm-default-error {\n  --farm-error-bg: #f7f7f5;\n  --farm-error-panel: #ffffff;\n  --farm-error-fg: #141414;\n  --farm-error-muted: #666666;\n  --farm-error-subtle: #8a8a8a;\n  --farm-error-line: rgba(0, 0, 0, 0.1);\n  --farm-error-line-strong: rgba(0, 0, 0, 0.19);\n  --farm-error-button-bg: #141414;\n  --farm-error-button-fg: #ffffff;\n  --farm-error-source-line: rgba(0, 0, 0, 0.045);\n  --farm-error-source-marker: #141414;\n  color-scheme: light;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .farm-default-error__copy,\n  .farm-default-error__action,\n  .farm-default-error__footer-action {\n    transition: none;\n  }\n\n  .farm-default-error__copy:active,\n  .farm-default-error__action:active {\n    transform: none;\n  }\n}\n`;\n","import { DEFAULT_ERROR_STYLES } from \"./error-styles\";\n\nexport { DEFAULT_ERROR_STYLES } from \"./error-styles\";\n\nconst ERROR_STATUS_TEXT: Record<number, string> = {\n  400: \"Bad Request\",\n  401: \"Unauthorized\",\n  402: \"Payment Required\",\n  403: \"Forbidden\",\n  404: \"Not Found\",\n  405: \"Method Not Allowed\",\n  406: \"Not Acceptable\",\n  408: \"Request Timeout\",\n  409: \"Conflict\",\n  410: \"Gone\",\n  411: \"Length Required\",\n  412: \"Precondition Failed\",\n  413: \"Content Too Large\",\n  414: \"URI Too Long\",\n  415: \"Unsupported Media Type\",\n  416: \"Range Not Satisfiable\",\n  418: \"I'm a Teapot\",\n  422: \"Unprocessable Content\",\n  423: \"Locked\",\n  424: \"Failed Dependency\",\n  425: \"Too Early\",\n  426: \"Upgrade Required\",\n  428: \"Precondition Required\",\n  429: \"Too Many Requests\",\n  431: \"Request Header Fields Too Large\",\n  451: \"Unavailable For Legal Reasons\",\n  500: \"Internal Server Error\",\n  501: \"Not Implemented\",\n  502: \"Bad Gateway\",\n  503: \"Service Unavailable\",\n  504: \"Gateway Timeout\",\n  505: \"HTTP Version Not Supported\",\n  506: \"Variant Also Negotiates\",\n  507: \"Insufficient Storage\",\n  508: \"Loop Detected\",\n  510: \"Not Extended\",\n  511: \"Network Authentication Required\",\n};\n\nconst ERROR_TITLES: Record<number, string> = {\n  400: \"This request could not be completed\",\n  401: \"Authentication is required\",\n  403: \"You do not have access to this page\",\n  404: \"This page could not be found\",\n  405: \"This request method is not supported\",\n  408: \"The request took too long\",\n  409: \"The request conflicts with the current state\",\n  410: \"This resource is no longer available\",\n  413: \"The request is too large\",\n  422: \"The request could not be processed\",\n  429: \"Too many requests were sent\",\n  500: \"Something went wrong\",\n  501: \"This operation is not implemented\",\n  502: \"An upstream service returned an invalid response\",\n  503: \"The service is temporarily unavailable\",\n  504: \"An upstream service took too long to respond\",\n};\n\nconst ERROR_PUBLIC_MESSAGES: Record<number, string> = {\n  400: \"Check the request details, then try again.\",\n  401: \"Sign in and try this request again.\",\n  403: \"Use an account with the required permissions or return home.\",\n  404: \"Check the address or return to the home page.\",\n  405: \"Use a supported request method and try again.\",\n  408: \"Try the request again in a moment.\",\n  409: \"Refresh the page, review the latest state, and try again.\",\n  410: \"Return home to continue browsing.\",\n  413: \"Reduce the request size and try again.\",\n  422: \"Review the request data and try again.\",\n  429: \"Wait a moment before trying again.\",\n  500: \"The application ran into an unexpected problem. Try again in a moment.\",\n  501: \"This operation is not available yet.\",\n  502: \"Try again after the upstream service recovers.\",\n  503: \"Try again in a moment.\",\n  504: \"Try again after the upstream service recovers.\",\n};\n\nexport interface DefaultErrorSourceLine {\n  number: number;\n  content: string;\n  highlight?: boolean;\n}\nexport interface DefaultErrorSourceFrame {\n  file: string;\n  line: number;\n  column: number;\n  lines: DefaultErrorSourceLine[];\n}\n\nexport interface DefaultErrorPageOptions {\n  statusCode?: number;\n  statusText?: string;\n  requestPath?: string;\n  method?: string;\n  message?: string;\n  errorName?: string;\n  stack?: string;\n  sourceFrame?: DefaultErrorSourceFrame;\n  development?: boolean;\n  farmVersion?: string;\n  nodeVersion?: string;\n  mode?: string;\n}\n\nfunction escapeHtml(value: unknown): string {\n  return String(value ?? \"\")\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n\nfunction serializeJsonForHtml(value: unknown): string {\n  return JSON.stringify(value)\n    .replace(/</g, \"\\\\u003c\")\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nfunction normalizeErrorStatus(status: unknown): number | undefined {\n  const value = typeof status === \"string\" && status.trim() ? Number(status) : status;\n  return typeof value === \"number\" && Number.isInteger(value) && value >= 400 && value <= 599\n    ? value\n    : undefined;\n}\n\nexport function resolveDefaultErrorStatus(error: unknown): number {\n  if (error && typeof error === \"object\") {\n    const candidate = error as { status?: unknown; statusCode?: unknown };\n    return (\n      normalizeErrorStatus(candidate.status) ?? normalizeErrorStatus(candidate.statusCode) ?? 500\n    );\n  }\n  return 500;\n}\n\nexport function getDefaultErrorStatusText(statusCode: number): string {\n  return ERROR_STATUS_TEXT[statusCode] || (statusCode >= 500 ? \"Server Error\" : \"Request Error\");\n}\n\nexport function getDefaultErrorTitle(statusCode: number): string {\n  return (\n    ERROR_TITLES[statusCode] ||\n    (statusCode >= 500\n      ? \"The server could not complete the request\"\n      : \"The request could not be completed\")\n  );\n}\n\nfunction getDefaultErrorPublicMessage(statusCode: number): string {\n  return ERROR_PUBLIC_MESSAGES[statusCode] || \"Try again or return to the home page.\";\n}\n\nfunction createSourceFrameMarkup(sourceFrame?: DefaultErrorSourceFrame): string {\n  if (!sourceFrame) {\n    return `<p class=\"farm-default-error__details-empty\">Source location is unavailable. Copy the debug report to inspect the filtered stack trace.</p>`;\n  }\n\n  const lines = sourceFrame.lines\n    .map(\n      (line) =>\n        `<span class=\"farm-default-error__source-line${line.highlight ? \" farm-default-error__source-line--active\" : \"\"}\"><span class=\"farm-default-error__source-gutter\">${line.highlight ? \"&gt;\" : \"&nbsp;\"} ${line.number}</span><span class=\"farm-default-error__source-text\">${escapeHtml(line.content || \" \")}</span></span>`,\n    )\n    .join(\"\\n\");\n\n  return `<div class=\"farm-default-error__source\"><p class=\"farm-default-error__source-path\">${escapeHtml(sourceFrame.file)}:${sourceFrame.line}:${sourceFrame.column}</p><pre class=\"farm-default-error__source-code\" tabindex=\"0\"><code>${lines}</code></pre></div>`;\n}\n\nfunction createDebugReport(\n  options: Required<Pick<DefaultErrorPageOptions, \"statusCode\">> & DefaultErrorPageOptions,\n): string {\n  const statusText = options.statusText || getDefaultErrorStatusText(options.statusCode);\n  const sourceFrame = options.sourceFrame;\n  const source = sourceFrame\n    ? [\n        `\\`${sourceFrame.file}:${sourceFrame.line}:${sourceFrame.column}\\``,\n        \"\",\n        \"```text\",\n        ...sourceFrame.lines.map(\n          (line) =>\n            `${line.highlight ? \">\" : \" \"} ${String(line.number).padStart(4, \" \")} | ${line.content}`,\n        ),\n        \"```\",\n      ].join(\"\\n\")\n    : \"Source frame unavailable.\";\n\n  return [\n    \"# Farm.js debug report\",\n    \"\",\n    \"## Error\",\n    `- Status: ${options.statusCode} ${statusText}`,\n    `- Name: ${options.errorName || \"Error\"}`,\n    `- Message: ${options.message || getDefaultErrorPublicMessage(options.statusCode)}`,\n    `- Request: ${(options.method || \"GET\").toUpperCase()} ${options.requestPath || \"/\"}`,\n    \"\",\n    \"## Runtime\",\n    `- Farm.js: ${options.farmVersion || \"unknown\"}`,\n    `- Node.js: ${options.nodeVersion || \"unknown\"}`,\n    `- Mode: ${options.mode || \"development\"}`,\n    \"\",\n    \"## Source\",\n    source,\n    \"\",\n    \"## Filtered stack\",\n    \"```text\",\n    options.stack || \"Stack trace unavailable.\",\n    \"```\",\n  ].join(\"\\n\");\n}\n\nconst ERROR_PAGE_SCRIPT = `<script>(function(){var root=document.querySelector(\"[data-farm-default-error]\");if(!root)return;var retry=root.querySelector(\"[data-farm-error-retry]\");var back=root.querySelector(\"[data-farm-error-back]\");if(retry)retry.addEventListener(\"click\",function(){window.location.reload()});if(back)back.addEventListener(\"click\",function(){if(window.history.length>1){window.history.back()}else{window.location.assign(\"/\")}})})();</script>`;\nconst ERROR_COPY_SCRIPT = `<script>(function(){var root=document.querySelector(\"[data-farm-default-error]\");var copy=root&&root.querySelector(\"[data-farm-error-copy]\");var report=document.getElementById(\"farm-default-error-report\");if(!copy||!report)return;copy.addEventListener(\"click\",async function(){var value=\"\";try{value=JSON.parse(report.textContent||'\"\"')}catch(_error){value=report.textContent||\"\"}try{if(navigator.clipboard&&window.isSecureContext){await navigator.clipboard.writeText(value)}else{var area=document.createElement(\"textarea\");area.value=value;area.setAttribute(\"readonly\",\"\");area.style.position=\"fixed\";area.style.opacity=\"0\";document.body.appendChild(area);area.select();document.execCommand(\"copy\");area.remove()}var label=copy.querySelector(\"[data-farm-error-copy-label]\");var status=copy.querySelector(\"[data-farm-error-copy-status]\");if(label)label.textContent=\"COPIED\";if(status)status.textContent=\"Debug report copied\";window.setTimeout(function(){if(label)label.textContent=\"COPY DEBUG REPORT\";if(status)status.textContent=\"\"},1800)}catch(_error){var status=copy.querySelector(\"[data-farm-error-copy-status]\");if(status)status.textContent=\"Unable to copy the debug report\"}})})();</script>`;\n\nconst ERROR_DOCS_ICON = `<svg class=\"farm-default-error__docs-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M2.75 2.75h3.5A1.75 1.75 0 0 1 8 4.5v8.75a1.75 1.75 0 0 0-1.75-1.75h-3.5v-8.75Z\"/><path d=\"M13.25 2.75h-3.5A1.75 1.75 0 0 0 8 4.5v8.75a1.75 1.75 0 0 1 1.75-1.75h3.5v-8.75Z\"/></svg>`;\n\nexport function createDefaultErrorMarkup(options: DefaultErrorPageOptions = {}): string {\n  const statusCode = normalizeErrorStatus(options.statusCode) ?? 500;\n  const statusText = options.statusText || getDefaultErrorStatusText(statusCode);\n  const development = options.development === true;\n  const title = getDefaultErrorTitle(statusCode);\n  const message =\n    development && options.message ? options.message : getDefaultErrorPublicMessage(statusCode);\n  const requestPath = options.requestPath || \"/\";\n  const method = (options.method || \"GET\").toUpperCase();\n  const isServerError = statusCode >= 500;\n  const details = development\n    ? `<section class=\"farm-default-error__details\" aria-labelledby=\"farm-default-error-details-title\"><div class=\"farm-default-error__details-header\"><h2 id=\"farm-default-error-details-title\" class=\"farm-default-error__details-title\">Technical details</h2></div>${createSourceFrameMarkup(options.sourceFrame)}<p class=\"farm-default-error__meta\">Farm.js v${escapeHtml(options.farmVersion || \"unknown\")} · ${escapeHtml(options.mode || \"development\")} · Node.js ${escapeHtml(options.nodeVersion || \"unknown\")}</p></section>`\n    : \"\";\n  const report = development\n    ? `<script id=\"farm-default-error-report\" type=\"application/json\">${serializeJsonForHtml(createDebugReport({ ...options, statusCode, statusText, requestPath, method }))}</script>${ERROR_COPY_SCRIPT}`\n    : \"\";\n\n  const primaryAction = isServerError\n    ? `<button class=\"farm-default-error__action farm-default-error__action--primary\" type=\"button\" data-farm-error-retry>TRY AGAIN</button>`\n    : `<button class=\"farm-default-error__action farm-default-error__action--primary\" type=\"button\" data-farm-error-back>GO BACK</button>`;\n  const debugAction = development\n    ? `<span class=\"farm-default-error__footer-divider\" aria-hidden=\"true\">/</span><button class=\"farm-default-error__footer-action\" type=\"button\" data-farm-error-copy><span data-farm-error-copy-label>COPY DEBUG REPORT</span><span class=\"farm-default-error__sr-only\" aria-live=\"polite\" data-farm-error-copy-status></span></button>`\n    : \"\";\n\n  return `<style>${DEFAULT_ERROR_STYLES}</style><main class=\"farm-default-error${development ? \" farm-default-error--development\" : \"\"}\" data-farm-default-error role=\"alert\" aria-labelledby=\"farm-default-error-title\" aria-describedby=\"farm-default-error-description\"><div class=\"farm-default-error__frame\"><div class=\"farm-default-error__brand\" aria-hidden=\"true\"><span>FARM.JS</span><span class=\"farm-default-error__brand-divider\">/</span><span>ERROR</span></div><div class=\"farm-default-error__content\"><p class=\"farm-default-error__status\"><span class=\"farm-default-error__status-mark\" aria-hidden=\"true\"></span><span>${statusCode}</span><span class=\"farm-default-error__status-divider\" aria-hidden=\"true\">/</span><span>${escapeHtml(statusText)}</span></p><header class=\"farm-default-error__summary\"><h1 id=\"farm-default-error-title\" class=\"farm-default-error__title\">${escapeHtml(title)}</h1><p id=\"farm-default-error-description\" class=\"farm-default-error__message\">${escapeHtml(message)}</p></header><div class=\"farm-default-error__actions\">${primaryAction}<a class=\"farm-default-error__action\" href=\"/\">RETURN HOME</a></div><section class=\"farm-default-error__panel\" aria-label=\"Error information\"><div class=\"farm-default-error__row\"><span class=\"farm-default-error__label\">Request</span><span class=\"farm-default-error__value\">${escapeHtml(method)} ${escapeHtml(requestPath)}</span></div><div class=\"farm-default-error__row\"><span class=\"farm-default-error__label\">Status</span><span class=\"farm-default-error__value\">${statusCode} ${escapeHtml(statusText)}</span></div>${details}</section></div><footer class=\"farm-default-error__footer\"><a class=\"farm-default-error__footer-action\" href=\"https://farm.js.dev/docs\" target=\"_blank\" rel=\"noopener noreferrer\">${ERROR_DOCS_ICON}<span>VIEW DOCUMENTATION</span></a>${debugAction}</footer></div>${report}${ERROR_PAGE_SCRIPT}</main>`;\n}\n","import type { FarmThemeConfig, ResolvedFarmThemeConfig } from \"./types\";\n\nexport const DEFAULT_FARM_THEME_STORAGE_KEY = \"farm-theme\";\n\nconst STORAGE_KEY_PATTERN = /^[A-Za-z0-9._-]+$/;\n\nexport function resolveFarmThemeConfig(\n  config: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n  basePath = \"/\",\n): ResolvedFarmThemeConfig {\n  if (config && \"enabled\" in config) {\n    return config;\n  }\n\n  if (!config) {\n    return {\n      enabled: false,\n      default: \"system\",\n      storageKey: DEFAULT_FARM_THEME_STORAGE_KEY,\n      cookiePath: normalizeCookiePath(basePath),\n    };\n  }\n\n  const storageKey = config.storageKey?.trim() || DEFAULT_FARM_THEME_STORAGE_KEY;\n  if (!STORAGE_KEY_PATTERN.test(storageKey)) {\n    throw new Error(\n      \"theme.storageKey may only contain letters, numbers, dots, underscores, and hyphens.\",\n    );\n  }\n\n  const defaultTheme = config.default ?? \"system\";\n  if (defaultTheme !== \"light\" && defaultTheme !== \"dark\" && defaultTheme !== \"system\") {\n    throw new Error('theme.default must be \"light\", \"dark\", or \"system\".');\n  }\n\n  return {\n    enabled: true,\n    default: defaultTheme,\n    storageKey,\n    cookiePath: normalizeCookiePath(basePath),\n  };\n}\n\nfunction normalizeCookiePath(basePath: string): string {\n  const normalized = `/${basePath}`.replace(/\\/{2,}/g, \"/\");\n  if (normalized === \"/\") return normalized;\n  return normalized.replace(/\\/$/, \"\");\n}\n","import { resolveFarmThemeConfig } from \"./config\";\nimport type {\n  FarmThemeConfig,\n  FarmThemePreference,\n  FarmThemeRuntime,\n  ResolvedFarmThemeConfig,\n} from \"./types\";\n\nconst THEME_SCRIPT_ID = \"farm-theme-script\";\nconst THEME_STYLE_ID = \"farm-theme-style\";\n\ndeclare global {\n  interface Window {\n    __FARM_THEME__?: FarmThemeRuntime;\n  }\n}\n\nexport interface FarmThemeDocumentParts {\n  attributes: string;\n  head: string;\n}\n\nexport function createFarmThemeDocumentParts(\n  input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n  basePath = \"/\",\n  serverTheme?: FarmThemePreference,\n): FarmThemeDocumentParts {\n  const config = resolveFarmThemeConfig(input, basePath);\n  if (!config.enabled) return { attributes: \"\", head: \"\" };\n\n  const hydrationTheme = serverTheme ?? config.default;\n  const initialTheme = hydrationTheme === \"system\" ? \"light\" : hydrationTheme;\n  const script = createFarmThemeBootstrapScript(config, hydrationTheme);\n\n  return {\n    attributes: ` data-theme=\"${initialTheme}\"`,\n    head: `<style id=\"${THEME_STYLE_ID}\">:root[data-theme=\"light\"]{color-scheme:light}:root[data-theme=\"dark\"]{color-scheme:dark}</style><script id=\"${THEME_SCRIPT_ID}\">${script}</script>`,\n  };\n}\n\nexport function createFarmThemeBootstrapScript(\n  config: ResolvedFarmThemeConfig,\n  serverTheme: FarmThemePreference = config.default,\n): string {\n  return `(function(config,serverTheme){\nvar isTheme=function(value){return value===\"light\"||value===\"dark\"||value===\"system\";};\nvar decode=function(value){try{return decodeURIComponent(value);}catch(_error){return value;}};\nvar readCookie=function(){var entries=document.cookie.split(\";\");for(var index=0;index<entries.length;index++){var entry=entries[index];var separator=entry.indexOf(\"=\");if(separator<0)continue;if(decode(entry.slice(0,separator).trim())===config.storageKey)return decode(entry.slice(separator+1).trim());}};\nvar media=window.matchMedia(\"(prefers-color-scheme: dark)\");\nvar resolveTheme=function(theme){return theme===\"system\"?(media.matches?\"dark\":\"light\"):theme;};\nvar storedTheme=readCookie();\nvar preference=isTheme(storedTheme)?storedTheme:config.default;\nvar serverSnapshot={theme:serverTheme,resolvedTheme:serverTheme===\"system\"?undefined:serverTheme,mounted:false};\nvar apply=function(){var resolvedTheme=resolveTheme(preference);document.documentElement.dataset.theme=resolvedTheme;var snapshot={theme:preference,resolvedTheme:resolvedTheme,mounted:true};if(window.__FARM_THEME__)window.__FARM_THEME__.snapshot=snapshot;return snapshot;};\nvar emit=function(){var snapshot=apply();window.dispatchEvent(new CustomEvent(\"farm:themechange\",{detail:snapshot}));};\nvar persist=function(theme){var secure=window.location.protocol===\"https:\"?\"; Secure\":\"\";document.cookie=encodeURIComponent(config.storageKey)+\"=\"+encodeURIComponent(theme)+\"; Path=\"+config.cookiePath+\"; Max-Age=31536000; SameSite=Lax\"+secure;try{localStorage.setItem(config.storageKey,theme);}catch(_error){}};\nvar setTheme=function(theme){if(!isTheme(theme))throw new TypeError(\"Unknown FARMJS theme: \"+String(theme));preference=theme;persist(theme);emit();};\nvar initialSnapshot={theme:preference,resolvedTheme:resolveTheme(preference),mounted:true};\nwindow.__FARM_THEME__={config:config,serverSnapshot:serverSnapshot,snapshot:initialSnapshot,setTheme:setTheme};\ndocument.documentElement.dataset.theme=initialSnapshot.resolvedTheme;\nvar handleSystemChange=function(){if(preference===\"system\")emit();};\nif(typeof media.addEventListener===\"function\")media.addEventListener(\"change\",handleSystemChange);else if(typeof media.addListener===\"function\")media.addListener(handleSystemChange);\nwindow.addEventListener(\"storage\",function(event){if(event.key!==config.storageKey||!isTheme(event.newValue))return;preference=event.newValue;persist(preference);emit();});\n})(${serializeInlineValue(config)},${serializeInlineValue(serverTheme)});`;\n}\n\nexport function applyFarmThemeDocument(\n  html: string,\n  input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n  basePath = \"/\",\n  serverTheme?: FarmThemePreference,\n): string {\n  const parts = createFarmThemeDocumentParts(input, basePath, serverTheme);\n  if (!parts.head) return html;\n\n  let output = html.replace(/<html([^>]*)>/i, (_match, attributes: string) => {\n    const nextAttributes = attributes.replace(/\\sdata-theme=(?:\"[^\"]*\"|'[^']*'|[^\\s>]+)/i, \"\");\n    return `<html${nextAttributes}${parts.attributes}>`;\n  });\n\n  if (!output.includes(`id=\"${THEME_SCRIPT_ID}\"`)) {\n    output = output.replace(/<head([^>]*)>/i, `<head$1>${parts.head}`);\n  }\n\n  return output;\n}\n\nfunction serializeInlineValue(value: unknown): string {\n  return JSON.stringify(value)\n    .replace(/</g, \"\\\\u003c\")\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\");\n}\n","import type { FarmThemeSnapshot } from \"./types\";\n\nconst FALLBACK_SERVER_SNAPSHOT: FarmThemeSnapshot = Object.freeze({\n  theme: \"system\",\n  resolvedTheme: undefined,\n  mounted: false,\n});\n\nconst FARM_THEME_SERVER_SNAPSHOT_RESOLVER = Symbol.for(\"farm.js.theme.server-snapshot-resolver\");\n\ntype FarmThemeBridgeGlobal = typeof globalThis & {\n  [FARM_THEME_SERVER_SNAPSHOT_RESOLVER]?: () => FarmThemeSnapshot;\n};\n\nexport function _setFarmThemeServerSnapshotResolver(resolver: () => FarmThemeSnapshot): void {\n  (globalThis as FarmThemeBridgeGlobal)[FARM_THEME_SERVER_SNAPSHOT_RESOLVER] = resolver;\n}\n\nexport function getFarmThemeServerSnapshot(): FarmThemeSnapshot {\n  return (\n    (globalThis as FarmThemeBridgeGlobal)[FARM_THEME_SERVER_SNAPSHOT_RESOLVER]?.() ??\n    FALLBACK_SERVER_SNAPSHOT\n  );\n}\n","import { getCurrentRequestOrNull } from \"../server/request\";\nimport { _setFarmThemeServerSnapshotResolver } from \"./bridge\";\nimport { resolveFarmThemeConfig } from \"./config\";\nimport type {\n  FarmThemeConfig,\n  FarmThemePreference,\n  FarmThemeSnapshot,\n  ResolvedFarmThemeConfig,\n} from \"./types\";\n\nlet defaultThemeConfig = resolveFarmThemeConfig(undefined);\n\nexport function _setDefaultFarmThemeConfig(\n  config: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n  basePath = \"/\",\n): void {\n  defaultThemeConfig = resolveFarmThemeConfig(config, basePath);\n}\n\n// The theme preference is cosmetic, so a missing request context must never\n// crash a render: without a request to read the cookie from, the configured\n// default applies. Runtimes with partial AsyncLocalStorage support (for\n// example StackBlitz WebContainers) can lose the store mid-render, and a\n// thrown error here would also take down the error page itself.\nexport function getTheme(request: Request | null = getCurrentRequestOrNull()): FarmThemePreference {\n  if (!request) return defaultThemeConfig.default;\n  return readFarmThemePreference(request, defaultThemeConfig);\n}\n\nexport function getThemeSnapshot(\n  request: Request | null = getCurrentRequestOrNull(),\n): FarmThemeSnapshot {\n  const theme = request\n    ? readFarmThemePreference(request, defaultThemeConfig)\n    : defaultThemeConfig.default;\n  return {\n    theme,\n    resolvedTheme: theme === \"system\" ? undefined : theme,\n    mounted: false,\n  };\n}\n\nexport function readFarmThemePreference(\n  request: Request,\n  config: ResolvedFarmThemeConfig,\n): FarmThemePreference {\n  if (!config.enabled) return config.default;\n  const stored = readCookie(request.headers.get(\"cookie\"), config.storageKey);\n  return isFarmThemePreference(stored) ? stored : config.default;\n}\n\nfunction readCookie(cookieHeader: string | null, name: string): string | undefined {\n  if (!cookieHeader) return undefined;\n  for (const entry of cookieHeader.split(\";\")) {\n    const separator = entry.indexOf(\"=\");\n    if (separator < 0) continue;\n    const key = decodeCookieValue(entry.slice(0, separator).trim());\n    if (key !== name) continue;\n    return decodeCookieValue(entry.slice(separator + 1).trim());\n  }\n  return undefined;\n}\n\nfunction decodeCookieValue(value: string): string {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return value;\n  }\n}\n\nfunction isFarmThemePreference(value: unknown): value is FarmThemePreference {\n  return value === \"light\" || value === \"dark\" || value === \"system\";\n}\n\n_setFarmThemeServerSnapshotResolver(() => {\n  try {\n    return getThemeSnapshot();\n  } catch {\n    const theme = defaultThemeConfig.default;\n    return {\n      theme,\n      resolvedTheme: theme === \"system\" ? undefined : theme,\n      mounted: false,\n    };\n  }\n});\n","{\n  \"name\": \"@farm.js/core\",\n  \"version\": \"0.1.0-beta.102\",\n  \"description\": \"Core Farm.js framework for modern integrated apps\",\n  \"keywords\": [\n    \"@farm.js/core\",\n    \"framework\",\n    \"react\",\n    \"rsc\",\n    \"server-components\",\n    \"ssr\",\n    \"vite\"\n  ],\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/farming-labs/farm.js\",\n    \"directory\": \"packages/farm\"\n  },\n  \"files\": [\n    \"dist\",\n    \"types\"\n  ],\n  \"main\": \"./dist/index.cjs\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"typesVersions\": {\n    \"*\": {\n      \"middleware\": [\n        \"./types/middleware.d.ts\",\n        \"./dist/middleware.d.ts\"\n      ],\n      \"version\": [\n        \"./dist/version.d.ts\"\n      ],\n      \"router\": [\n        \"./dist/router.d.ts\"\n      ],\n      \"routes\": [\n        \"./dist/routes.d.ts\"\n      ],\n      \"storage\": [\n        \"./dist/storage.d.ts\"\n      ],\n      \"integrations\": [\n        \"./dist/integrations.d.ts\"\n      ],\n      \"schema\": [\n        \"./dist/schema.d.ts\"\n      ],\n      \"cache\": [\n        \"./dist/cache.d.ts\"\n      ],\n      \"deferred\": [\n        \"./dist/deferred.d.ts\"\n      ],\n      \"after\": [\n        \"./dist/after.d.ts\"\n      ],\n      \"navigation\": [\n        \"./dist/navigation.d.ts\"\n      ],\n      \"headers\": [\n        \"./dist/headers.d.ts\"\n      ],\n      \"theme\": [\n        \"./dist/theme/index.d.ts\"\n      ],\n      \"theme/client\": [\n        \"./dist/theme/client.d.ts\"\n      ],\n      \"theme/runtime\": [\n        \"./dist/theme/runtime.d.ts\"\n      ],\n      \"theme/server\": [\n        \"./dist/theme/server.d.ts\"\n      ],\n      \"docs\": [\n        \"./dist/docs.d.ts\"\n      ],\n      \"markdown\": [\n        \"./dist/markdown.d.ts\"\n      ],\n      \"app-markdown\": [\n        \"./dist/app-markdown.d.ts\"\n      ],\n      \"observability\": [\n        \"./dist/observability.d.ts\"\n      ],\n      \"instrumentation\": [\n        \"./dist/instrumentation.d.ts\"\n      ],\n      \"workflows\": [\n        \"./dist/workflows.d.ts\"\n      ],\n      \"cron\": [\n        \"./dist/cron.d.ts\"\n      ],\n      \"server-fn\": [\n        \"./dist/server-fn.d.ts\"\n      ],\n      \"server-fn/client\": [\n        \"./dist/server-fn-client.d.ts\"\n      ],\n      \"server-query\": [\n        \"./dist/server-query.d.ts\"\n      ],\n      \"server-query/client\": [\n        \"./dist/server-query-client.d.ts\"\n      ],\n      \"server-action-security\": [\n        \"./dist/server-action-security.d.ts\"\n      ],\n      \"deployment\": [\n        \"./dist/deployment.d.ts\"\n      ],\n      \"env\": [\n        \"./dist/env.d.ts\"\n      ],\n      \"env-types\": [\n        \"./dist/env-types.d.ts\"\n      ],\n      \"environment\": [\n        \"./dist/environment.d.ts\"\n      ],\n      \"environment/vite\": [\n        \"./dist/environment/vite.d.ts\"\n      ],\n      \"font\": [\n        \"./dist/font.d.ts\"\n      ],\n      \"testing\": [\n        \"./dist/testing.d.ts\"\n      ],\n      \"agent-runtime\": [\n        \"./dist/agent-runtime.d.ts\"\n      ],\n      \"css\": [\n        \"./types/css.d.ts\"\n      ],\n      \"image\": [\n        \"./types/image.d.ts\",\n        \"./dist/image.d.ts\"\n      ],\n      \"image/server\": [\n        \"./dist/image/server.d.ts\"\n      ],\n      \"image/sharp\": [\n        \"./dist/image/sharp.d.ts\"\n      ],\n      \"i18n\": [\n        \"./dist/i18n/index.d.ts\"\n      ],\n      \"i18n/server\": [\n        \"./dist/i18n/server.d.ts\"\n      ],\n      \"i18n/client\": [\n        \"./dist/i18n/client.d.ts\"\n      ],\n      \"internal/production-runtime\": [\n        \"./dist/internal/production-runtime.d.ts\"\n      ],\n      \"internal/product-telemetry-runtime\": [\n        \"./dist/internal/product-telemetry-runtime.d.ts\"\n      ],\n      \"internal/metadata-image-runtime\": [\n        \"./dist/internal/metadata-image-runtime.d.ts\"\n      ],\n      \"internal/client-runtime\": [\n        \"./dist/internal/client-runtime.d.ts\"\n      ],\n      \"internal/isolated-boundary\": [\n        \"./dist/internal/isolated-boundary.d.ts\"\n      ],\n      \"internal/build-runtime\": [\n        \"./dist/internal/build-runtime.d.ts\"\n      ],\n      \"internal/config-runtime\": [\n        \"./dist/internal/config-runtime.d.ts\"\n      ],\n      \"internal/production-node-env\": [\n        \"./dist/internal/production-node-env.d.ts\"\n      ],\n      \"config\": [\n        \"./dist/config.d.ts\"\n      ],\n      \"renderer\": [\n        \"./dist/renderer.d.ts\"\n      ],\n      \"renderer-client\": [\n        \"./dist/renderer-client.d.ts\"\n      ],\n      \"api\": [\n        \"./types/api.d.ts\",\n        \"./dist/api.d.ts\"\n      ],\n      \"api/client\": [\n        \"./dist/api/client.d.ts\"\n      ],\n      \"api/route-manager\": [\n        \"./dist/api/route-manager.d.ts\"\n      ],\n      \"api/runtime\": [\n        \"./dist/api/runtime.d.ts\"\n      ],\n      \"request\": [\n        \"./dist/request.d.ts\"\n      ],\n      \"client\": [\n        \"./types/client.d.ts\",\n        \"./dist/client.d.ts\"\n      ],\n      \"client/lifecycle\": [\n        \"./dist/client/lifecycle.d.ts\"\n      ],\n      \"server\": [\n        \"./dist/server.d.ts\"\n      ],\n      \"vite\": [\n        \"./dist/vite.d.ts\"\n      ],\n      \"plugin\": [\n        \"./dist/plugin.d.ts\"\n      ],\n      \"query\": [\n        \"./dist/query/index.d.ts\"\n      ],\n      \"*\": [\n        \"./dist/*.d.ts\"\n      ]\n    }\n  },\n  \"exports\": {\n    \".\": {\n      \"types\": \"./dist/index.d.ts\",\n      \"import\": \"./dist/index.mjs\",\n      \"require\": \"./dist/index.cjs\",\n      \"default\": \"./dist/index.mjs\"\n    },\n    \"./version\": {\n      \"types\": \"./dist/version.d.ts\",\n      \"import\": \"./dist/version.mjs\",\n      \"require\": \"./dist/version.cjs\"\n    },\n    \"./config\": {\n      \"types\": \"./dist/config.d.ts\",\n      \"import\": \"./dist/config.mjs\",\n      \"require\": \"./dist/config.cjs\"\n    },\n    \"./renderer\": {\n      \"types\": \"./dist/renderer.d.ts\",\n      \"import\": \"./dist/renderer.mjs\",\n      \"require\": \"./dist/renderer.cjs\"\n    },\n    \"./renderer-client\": {\n      \"types\": \"./dist/renderer-client.d.ts\",\n      \"import\": \"./dist/renderer-client.mjs\",\n      \"require\": \"./dist/renderer-client.cjs\"\n    },\n    \"./renderer/react/server\": {\n      \"types\": \"./dist/renderer/react/server.d.ts\",\n      \"import\": \"./dist/renderer/react/server.mjs\",\n      \"require\": \"./dist/renderer/react/server.cjs\"\n    },\n    \"./renderer/react/client\": {\n      \"types\": \"./dist/renderer/react/client.d.ts\",\n      \"import\": \"./dist/renderer/react/client.mjs\",\n      \"require\": \"./dist/renderer/react/client.cjs\"\n    },\n    \"./renderer/react/vite\": {\n      \"types\": \"./dist/renderer/react/vite.d.ts\",\n      \"import\": \"./dist/renderer/react/vite.mjs\",\n      \"require\": \"./dist/renderer/react/vite.cjs\"\n    },\n    \"./server\": {\n      \"types\": \"./dist/server.d.ts\",\n      \"import\": \"./dist/server.mjs\",\n      \"require\": \"./dist/server.cjs\"\n    },\n    \"./client\": {\n      \"types\": \"./types/client.d.ts\",\n      \"import\": \"./dist/client.mjs\",\n      \"require\": \"./dist/client.cjs\"\n    },\n    \"./client/lifecycle\": {\n      \"types\": \"./dist/client/lifecycle.d.ts\",\n      \"import\": \"./dist/client/lifecycle.mjs\",\n      \"require\": \"./dist/client/lifecycle.cjs\"\n    },\n    \"./storage\": {\n      \"types\": \"./dist/storage.d.ts\",\n      \"import\": \"./dist/storage.mjs\",\n      \"require\": \"./dist/storage.cjs\"\n    },\n    \"./integrations\": {\n      \"types\": \"./dist/integrations.d.ts\",\n      \"import\": \"./dist/integrations.mjs\",\n      \"require\": \"./dist/integrations.cjs\"\n    },\n    \"./schema\": {\n      \"types\": \"./dist/schema.d.ts\",\n      \"import\": \"./dist/schema.mjs\",\n      \"require\": \"./dist/schema.cjs\"\n    },\n    \"./cache\": {\n      \"types\": \"./dist/cache.d.ts\",\n      \"import\": \"./dist/cache.mjs\",\n      \"require\": \"./dist/cache.cjs\"\n    },\n    \"./deferred\": {\n      \"types\": \"./dist/deferred.d.ts\",\n      \"import\": \"./dist/deferred.mjs\",\n      \"require\": \"./dist/deferred.cjs\"\n    },\n    \"./after\": {\n      \"types\": \"./dist/after.d.ts\",\n      \"import\": \"./dist/after.mjs\",\n      \"require\": \"./dist/after.cjs\"\n    },\n    \"./navigation\": {\n      \"types\": \"./dist/navigation.d.ts\",\n      \"import\": \"./dist/navigation.mjs\",\n      \"require\": \"./dist/navigation.cjs\"\n    },\n    \"./headers\": {\n      \"types\": \"./dist/headers.d.ts\",\n      \"import\": \"./dist/headers.mjs\",\n      \"require\": \"./dist/headers.cjs\"\n    },\n    \"./theme\": {\n      \"types\": \"./dist/theme/index.d.ts\",\n      \"import\": \"./dist/theme/index.mjs\",\n      \"require\": \"./dist/theme/index.cjs\"\n    },\n    \"./theme/client\": {\n      \"types\": \"./dist/theme/client.d.ts\",\n      \"import\": \"./dist/theme/client.mjs\",\n      \"require\": \"./dist/theme/client.cjs\"\n    },\n    \"./theme/runtime\": {\n      \"types\": \"./dist/theme/runtime.d.ts\",\n      \"import\": \"./dist/theme/runtime.mjs\",\n      \"require\": \"./dist/theme/runtime.cjs\"\n    },\n    \"./theme/server\": {\n      \"types\": \"./dist/theme/server.d.ts\",\n      \"import\": \"./dist/theme/server.mjs\",\n      \"require\": \"./dist/theme/server.cjs\"\n    },\n    \"./docs\": {\n      \"types\": \"./dist/docs.d.ts\",\n      \"import\": \"./dist/docs.mjs\",\n      \"require\": \"./dist/docs.cjs\"\n    },\n    \"./markdown\": {\n      \"types\": \"./dist/markdown.d.ts\",\n      \"import\": \"./dist/markdown.mjs\",\n      \"require\": \"./dist/markdown.cjs\"\n    },\n    \"./app-markdown\": {\n      \"types\": \"./dist/app-markdown.d.ts\",\n      \"import\": \"./dist/app-markdown.mjs\",\n      \"require\": \"./dist/app-markdown.cjs\"\n    },\n    \"./observability\": {\n      \"types\": \"./dist/observability.d.ts\",\n      \"import\": \"./dist/observability.mjs\",\n      \"require\": \"./dist/observability.cjs\"\n    },\n    \"./instrumentation\": {\n      \"types\": \"./dist/instrumentation.d.ts\",\n      \"import\": \"./dist/instrumentation.mjs\",\n      \"require\": \"./dist/instrumentation.cjs\"\n    },\n    \"./workflows\": {\n      \"types\": \"./dist/workflows.d.ts\",\n      \"import\": \"./dist/workflows.mjs\",\n      \"require\": \"./dist/workflows.cjs\"\n    },\n    \"./cron\": {\n      \"types\": \"./dist/cron.d.ts\",\n      \"import\": \"./dist/cron.mjs\",\n      \"require\": \"./dist/cron.cjs\"\n    },\n    \"./server-fn\": {\n      \"types\": \"./dist/server-fn.d.ts\",\n      \"import\": \"./dist/server-fn.mjs\",\n      \"require\": \"./dist/server-fn.cjs\"\n    },\n    \"./server-fn/client\": {\n      \"types\": \"./dist/server-fn-client.d.ts\",\n      \"import\": \"./dist/server-fn-client.mjs\",\n      \"require\": \"./dist/server-fn-client.cjs\"\n    },\n    \"./server-query\": {\n      \"types\": \"./dist/server-query.d.ts\",\n      \"import\": \"./dist/server-query.mjs\",\n      \"require\": \"./dist/server-query.cjs\"\n    },\n    \"./server-query/client\": {\n      \"types\": \"./dist/server-query-client.d.ts\",\n      \"import\": \"./dist/server-query-client.mjs\",\n      \"require\": \"./dist/server-query-client.cjs\"\n    },\n    \"./server-action-security\": {\n      \"types\": \"./dist/server-action-security.d.ts\",\n      \"import\": \"./dist/server-action-security.mjs\",\n      \"require\": \"./dist/server-action-security.cjs\"\n    },\n    \"./deployment\": {\n      \"types\": \"./dist/deployment.d.ts\",\n      \"import\": \"./dist/deployment.mjs\",\n      \"require\": \"./dist/deployment.cjs\"\n    },\n    \"./env\": {\n      \"types\": \"./dist/env.d.ts\",\n      \"import\": \"./dist/env.mjs\",\n      \"require\": \"./dist/env.cjs\"\n    },\n    \"./env-types\": {\n      \"types\": \"./dist/env-types.d.ts\",\n      \"import\": \"./dist/env-types.mjs\",\n      \"require\": \"./dist/env-types.cjs\"\n    },\n    \"./environment\": {\n      \"types\": \"./dist/environment.d.ts\",\n      \"import\": \"./dist/environment.mjs\",\n      \"require\": \"./dist/environment.cjs\"\n    },\n    \"./environment/vite\": {\n      \"types\": \"./dist/environment/vite.d.ts\",\n      \"import\": \"./dist/environment/vite.mjs\",\n      \"require\": \"./dist/environment/vite.cjs\"\n    },\n    \"./font\": {\n      \"types\": \"./dist/font.d.ts\",\n      \"import\": \"./dist/font.mjs\",\n      \"require\": \"./dist/font.cjs\"\n    },\n    \"./vite\": {\n      \"types\": \"./dist/vite.d.ts\",\n      \"import\": \"./dist/vite.mjs\",\n      \"require\": \"./dist/vite.cjs\"\n    },\n    \"./plugin\": {\n      \"types\": \"./dist/plugin.d.ts\",\n      \"import\": \"./dist/plugin.mjs\",\n      \"require\": \"./dist/plugin.cjs\"\n    },\n    \"./plugin/server\": {\n      \"types\": \"./dist/server-plugins.d.ts\",\n      \"import\": \"./dist/server-plugins.mjs\",\n      \"require\": \"./dist/server-plugins.cjs\"\n    },\n    \"./plugin/client\": {\n      \"types\": \"./dist/client-plugins.d.ts\",\n      \"import\": \"./dist/client-plugins.mjs\",\n      \"require\": \"./dist/client-plugins.cjs\"\n    },\n    \"./query\": {\n      \"types\": \"./dist/query/index.d.ts\",\n      \"import\": \"./dist/query/index.mjs\",\n      \"require\": \"./dist/query/index.cjs\"\n    },\n    \"./query/parsers\": {\n      \"types\": \"./dist/query/parsers.d.ts\",\n      \"import\": \"./dist/query/parsers.mjs\",\n      \"require\": \"./dist/query/parsers.cjs\"\n    },\n    \"./query/client\": {\n      \"types\": \"./dist/query/client.d.ts\",\n      \"import\": \"./dist/query/client.mjs\",\n      \"require\": \"./dist/query/client.cjs\"\n    },\n    \"./query/server\": {\n      \"types\": \"./dist/query/server.d.ts\",\n      \"import\": \"./dist/query/server.mjs\",\n      \"require\": \"./dist/query/server.cjs\"\n    },\n    \"./middleware\": {\n      \"types\": \"./dist/middleware.d.ts\",\n      \"import\": \"./dist/middleware.mjs\",\n      \"require\": \"./dist/middleware.cjs\"\n    },\n    \"./api\": {\n      \"types\": \"./dist/api.d.ts\",\n      \"import\": \"./dist/api.mjs\",\n      \"require\": \"./dist/api.cjs\"\n    },\n    \"./api/client\": {\n      \"types\": \"./dist/api/client.d.ts\",\n      \"import\": \"./dist/api/client.mjs\",\n      \"require\": \"./dist/api/client.cjs\"\n    },\n    \"./api/route-manager\": {\n      \"types\": \"./dist/api/route-manager.d.ts\",\n      \"import\": \"./dist/api/route-manager.mjs\",\n      \"require\": \"./dist/api/route-manager.cjs\"\n    },\n    \"./api/runtime\": {\n      \"types\": \"./dist/api/runtime.d.ts\",\n      \"import\": \"./dist/api/runtime.mjs\",\n      \"require\": \"./dist/api/runtime.cjs\"\n    },\n    \"./request\": {\n      \"types\": \"./dist/request.d.ts\",\n      \"import\": \"./dist/request.mjs\",\n      \"require\": \"./dist/request.cjs\"\n    },\n    \"./router\": {\n      \"types\": \"./dist/router.d.ts\",\n      \"import\": \"./dist/router.mjs\",\n      \"require\": \"./dist/router.cjs\"\n    },\n    \"./routes\": {\n      \"types\": \"./dist/routes.d.ts\",\n      \"import\": \"./dist/routes.mjs\",\n      \"require\": \"./dist/routes.cjs\"\n    },\n    \"./testing\": {\n      \"types\": \"./dist/testing.d.ts\",\n      \"import\": \"./dist/testing.mjs\",\n      \"require\": \"./dist/testing.cjs\"\n    },\n    \"./agent-runtime\": {\n      \"types\": \"./dist/agent-runtime.d.ts\",\n      \"import\": \"./dist/agent-runtime.mjs\",\n      \"require\": \"./dist/agent-runtime.cjs\"\n    },\n    \"./css\": {\n      \"types\": \"./types/css.d.ts\"\n    },\n    \"./image\": {\n      \"types\": \"./types/image.d.ts\",\n      \"import\": \"./dist/image.mjs\",\n      \"require\": \"./dist/image.cjs\"\n    },\n    \"./image/server\": {\n      \"types\": \"./dist/image/server.d.ts\",\n      \"import\": \"./dist/image/server.mjs\",\n      \"require\": \"./dist/image/server.cjs\"\n    },\n    \"./image/sharp\": {\n      \"types\": \"./dist/image/sharp.d.ts\",\n      \"import\": \"./dist/image/sharp.mjs\",\n      \"require\": \"./dist/image/sharp.cjs\"\n    },\n    \"./i18n\": {\n      \"types\": \"./dist/i18n/index.d.ts\",\n      \"import\": \"./dist/i18n/index.mjs\",\n      \"require\": \"./dist/i18n/index.cjs\"\n    },\n    \"./i18n/server\": {\n      \"types\": \"./dist/i18n/server.d.ts\",\n      \"import\": \"./dist/i18n/server.mjs\",\n      \"require\": \"./dist/i18n/server.cjs\"\n    },\n    \"./i18n/client\": {\n      \"types\": \"./dist/i18n/client.d.ts\",\n      \"import\": \"./dist/i18n/client.mjs\",\n      \"require\": \"./dist/i18n/client.cjs\"\n    },\n    \"./internal/production-runtime\": {\n      \"types\": \"./dist/internal/production-runtime.d.ts\",\n      \"import\": \"./dist/internal/production-runtime.mjs\",\n      \"require\": \"./dist/internal/production-runtime.cjs\"\n    },\n    \"./internal/product-telemetry-runtime\": {\n      \"types\": \"./dist/internal/product-telemetry-runtime.d.ts\",\n      \"import\": \"./dist/internal/product-telemetry-runtime.mjs\",\n      \"require\": \"./dist/internal/product-telemetry-runtime.cjs\"\n    },\n    \"./internal/metadata-image-runtime\": {\n      \"types\": \"./dist/internal/metadata-image-runtime.d.ts\",\n      \"import\": \"./dist/internal/metadata-image-runtime.mjs\",\n      \"require\": \"./dist/internal/metadata-image-runtime.cjs\"\n    },\n    \"./internal/client-runtime\": {\n      \"types\": \"./dist/internal/client-runtime.d.ts\",\n      \"import\": \"./dist/internal/client-runtime.mjs\",\n      \"require\": \"./dist/internal/client-runtime.cjs\"\n    },\n    \"./internal/isolated-boundary\": {\n      \"types\": \"./dist/internal/isolated-boundary.d.ts\",\n      \"import\": \"./dist/internal/isolated-boundary.mjs\",\n      \"require\": \"./dist/internal/isolated-boundary.cjs\"\n    },\n    \"./internal/build-runtime\": {\n      \"types\": \"./dist/internal/build-runtime.d.ts\",\n      \"import\": \"./dist/internal/build-runtime.mjs\",\n      \"require\": \"./dist/internal/build-runtime.cjs\"\n    },\n    \"./internal/config-runtime\": {\n      \"types\": \"./dist/internal/config-runtime.d.ts\",\n      \"import\": \"./dist/internal/config-runtime.mjs\",\n      \"require\": \"./dist/internal/config-runtime.cjs\"\n    },\n    \"./internal/production-node-env\": {\n      \"types\": \"./dist/internal/production-node-env.d.ts\",\n      \"import\": \"./dist/internal/production-node-env.mjs\",\n      \"require\": \"./dist/internal/production-node-env.cjs\"\n    }\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"build:runtime\": \"tsup --config tsup.runtime.config.ts\",\n    \"dev\": \"tsup --watch\",\n    \"test\": \"vitest run\",\n    \"test:coverage\": \"vitest --coverage\",\n    \"lint\": \"biome lint .\",\n    \"lint:fix\": \"biome lint --write .\",\n    \"format\": \"biome format --write .\",\n    \"type-check\": \"tsc --noEmit\",\n    \"clean\": \"rm -rf dist\"\n  },\n  \"dependencies\": {\n    \"@farming-labs/docs\": \"^0.2.44\",\n    \"@farming-labs/orm\": \"0.0.62\",\n    \"@farming-labs/orm-runtime\": \"0.0.62\",\n    \"@formatjs/icu-messageformat-parser\": \"3.5.15\",\n    \"@jridgewell/trace-mapping\": \"0.3.31\",\n    \"@mdx-js/mdx\": \"^3.1.1\",\n    \"@opentelemetry/api\": \"1.9.1\",\n    \"@scalar/api-reference\": \"^1.38.1\",\n    \"@scalar/openapi-parser\": \"^0.22.3\",\n    \"@tailwindcss/vite\": \"4.1.18\",\n    \"@vercel/og\": \"0.11.1\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"better-call\": \"^1.0.19\",\n    \"db0\": \"^0.3.4\",\n    \"es-module-lexer\": \"2.0.0\",\n    \"esbuild\": \"^0.28.0\",\n    \"fast-glob\": \"^3.3.2\",\n    \"h3\": \"2.0.1-rc.5\",\n    \"image-size\": \"^2.0.2\",\n    \"intl-messageformat\": \"11.2.12\",\n    \"marked\": \"^12.0.2\",\n    \"nitro\": \"3.0.1-alpha.0\",\n    \"pg\": \"^8.20.0\",\n    \"picocolors\": \"^1.0.0\",\n    \"remark-gfm\": \"^4.0.1\",\n    \"sirv\": \"^2.0.4\",\n    \"sugar-high\": \"^0.9.5\",\n    \"supports-color\": \"^10.2.2\",\n    \"tailwindcss\": \"4.1.18\",\n    \"unstorage\": \"^2.0.0-alpha.3\",\n    \"vite\": \"^5.0.10\",\n    \"zod\": \"^4.1.12\"\n  },\n  \"devDependencies\": {\n    \"@clerk/react\": \"^6.1.0\",\n    \"@farm.js/otel\": \"workspace:*\",\n    \"@farm.js/renderer-tests\": \"workspace:*\",\n    \"@opentelemetry/sdk-node\": \"0.221.0\",\n    \"@opentelemetry/sdk-trace-base\": \"2.10.0\",\n    \"@types/react\": \"^18.2.45\",\n    \"@types/react-dom\": \"^18.2.18\",\n    \"@vitest/coverage-v8\": \"^3.2.7\",\n    \"jsdom\": \"^25.0.0\",\n    \"react\": \"19.2.8\",\n    \"react-dom\": \"19.2.8\",\n    \"tsup\": \"^8.3.5\",\n    \"typescript\": \"^5.3.3\",\n    \"vitest\": \"^3.2.7\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"^18.2.0 || ^19.0.0\",\n    \"react-dom\": \"^18.2.0 || ^19.0.0\"\n  },\n  \"peerDependenciesMeta\": {\n    \"react\": {\n      \"optional\": true\n    },\n    \"react-dom\": {\n      \"optional\": true\n    }\n  },\n  \"optionalDependencies\": {\n    \"rolldown\": \"1.2.0\",\n    \"sharp\": \"^0.34.5\",\n    \"vite-rolldown\": \"npm:vite@8.1.5\"\n  },\n  \"engines\": {\n    \"node\": \">=22.13.0\"\n  }\n}\n","import { version } from \"../package.json\";\n\nexport const FARM_VERSION = version;\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { DefaultErrorSourceFrame } from \"../components/error-page\";\n\nexport interface DefaultErrorDiagnostics {\n  name: string;\n  message: string;\n  stack?: string;\n  sourceFrame?: DefaultErrorSourceFrame;\n}\n\ninterface StackLocation {\n  absolutePath: string;\n  displayPath: string;\n  line: number;\n  column: number;\n}\n\nconst SECRET_VALUE_PATTERN =\n  /\\b(api[_-]?key|access[_-]?token|auth[_-]?token|client[_-]?secret|secret[_-]?key|token|password|secret)\\s*[:=]\\s*([^\\s,;]+)/gi;\nconst BEARER_PATTERN = /\\b(Bearer\\s+)[A-Za-z0-9._~+/=-]+/gi;\n\nfunction redactErrorText(value: string): string {\n  return value\n    .replace(BEARER_PATTERN, \"$1[REDACTED]\")\n    .replace(SECRET_VALUE_PATTERN, \"$1=[REDACTED]\");\n}\n\nfunction isPathInsideRoot(root: string, filePath: string): boolean {\n  const relative = path.relative(root, filePath);\n  return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nfunction normalizeStackPath(value: string): string | undefined {\n  const withoutQuery = value.replace(/[?#].*$/, \"\");\n  try {\n    return withoutQuery.startsWith(\"file://\") ? fileURLToPath(withoutQuery) : withoutQuery;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction findStackLocation(stack: string, root: string): StackLocation | undefined {\n  for (const stackLine of stack.split(\"\\n\")) {\n    const match = stackLine.match(\n      /(?:\\()?((?:file:\\/\\/\\/|\\/|[A-Za-z]:[\\\\/])[^\\n()]+):(\\d+):(\\d+)\\)?$/,\n    );\n    if (!match) continue;\n\n    const candidate = normalizeStackPath(match[1]);\n    if (!candidate || candidate.includes(`${path.sep}node_modules${path.sep}`)) continue;\n\n    const absolutePath = path.resolve(candidate);\n    if (!isPathInsideRoot(root, absolutePath) || !fs.existsSync(absolutePath)) continue;\n\n    const relativePath = path.relative(root, absolutePath).split(path.sep).join(\"/\");\n    return {\n      absolutePath,\n      displayPath: relativePath || path.basename(absolutePath),\n      line: Number(match[2]),\n      column: Number(match[3]),\n    };\n  }\n  return undefined;\n}\n\nfunction createSourceFrame(location: StackLocation): DefaultErrorSourceFrame | undefined {\n  try {\n    const sourceLines = fs.readFileSync(location.absolutePath, \"utf8\").split(/\\r?\\n/);\n    if (location.line < 1 || location.line > sourceLines.length) return undefined;\n\n    const start = Math.max(1, location.line - 2);\n    const end = Math.min(sourceLines.length, location.line + 2);\n    const lines = [];\n    for (let line = start; line <= end; line++) {\n      lines.push({\n        number: line,\n        content: sourceLines[line - 1],\n        highlight: line === location.line,\n      });\n    }\n\n    return {\n      file: location.displayPath,\n      line: location.line,\n      column: location.column,\n      lines,\n    };\n  } catch {\n    return undefined;\n  }\n}\n\nfunction sanitizeStack(stack: string, root: string): string {\n  const normalizedRoot = path.resolve(root);\n  return (\n    redactErrorText(stack)\n      .split(normalizedRoot)\n      .join(\"<project>\")\n      // Match displayPath, which reports project-relative paths with POSIX separators.\n      .replace(/<project>[^\\s)]*/g, (segment) => segment.split(\"\\\\\").join(\"/\"))\n      .split(\"\\n\")\n      .filter((line, index) => index === 0 || !line.includes(\"node:internal\"))\n      .slice(0, 14)\n      .join(\"\\n\")\n  );\n}\n\nexport function createDefaultErrorDiagnostics(\n  error: unknown,\n  root: string,\n): DefaultErrorDiagnostics {\n  const normalizedError =\n    error instanceof Error\n      ? error\n      : new Error(typeof error === \"string\" ? error : \"Unknown server rendering error\");\n  const rawStack = normalizedError.stack || `${normalizedError.name}: ${normalizedError.message}`;\n  const location = findStackLocation(rawStack, path.resolve(root));\n\n  return {\n    name: redactErrorText(normalizedError.name || \"Error\"),\n    message: redactErrorText(normalizedError.message || \"Unknown server rendering error\"),\n    stack: sanitizeStack(rawStack, root),\n    sourceFrame: location ? createSourceFrame(location) : undefined,\n  };\n}\n","import type React from \"react\";\nimport type { FarmIslandStrategy } from \"../island\";\n\nconst REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\");\nconst LEGACY_REACT_ELEMENT_TYPE = Symbol.for(\"react.element\");\nconst BOUNDARY_GRAPH_CONTEXT = Symbol.for(\"farm.isolated-hydration.client-graph-context\");\n\nfunction getBoundaryGraphContext(ReactRuntime: typeof React): React.Context<boolean> {\n  const shared = globalThis as typeof globalThis &\n    Record<symbol, WeakMap<object, React.Context<boolean>> | undefined>;\n  const contexts = shared[BOUNDARY_GRAPH_CONTEXT] ?? new WeakMap();\n  shared[BOUNDARY_GRAPH_CONTEXT] = contexts;\n  const runtimeIdentity = ReactRuntime.createElement;\n  const existing = contexts.get(runtimeIdentity);\n  if (existing) return existing;\n\n  const context = ReactRuntime.createContext(false);\n  contexts.set(runtimeIdentity, context);\n  return context;\n}\n\nfunction serializeBoundaryProps(value: unknown, seen = new Set<object>()): unknown {\n  if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return value;\n  if (typeof value === \"number\") {\n    if (!Number.isFinite(value)) throw new TypeError(\"non-finite numbers are not serializable\");\n    return value;\n  }\n  if (typeof value === \"undefined\") {\n    throw new TypeError(\"undefined values are not serializable\");\n  }\n  if (typeof value !== \"object\") {\n    throw new TypeError(`${typeof value} values are not serializable`);\n  }\n  if (\n    (value as { $$typeof?: symbol }).$$typeof === REACT_ELEMENT_TYPE ||\n    (value as { $$typeof?: symbol }).$$typeof === LEGACY_REACT_ELEMENT_TYPE\n  ) {\n    throw new TypeError(\"React elements cannot cross an isolated hydration boundary\");\n  }\n  if (seen.has(value)) throw new TypeError(\"circular props are not serializable\");\n  seen.add(value);\n  try {\n    if (Array.isArray(value)) return value.map((entry) => serializeBoundaryProps(entry, seen));\n    const prototype = Object.getPrototypeOf(value);\n    if (prototype !== Object.prototype && prototype !== null) {\n      throw new TypeError(\"class instances are not serializable\");\n    }\n    return Object.fromEntries(\n      Object.entries(value).map(([key, entry]) => [key, serializeBoundaryProps(entry, seen)]),\n    );\n  } finally {\n    seen.delete(value);\n  }\n}\n\nfunction serializeBoundaryPayload(value: unknown): string {\n  return JSON.stringify(serializeBoundaryProps(value))\n    .replace(/&/g, \"\\\\u0026\")\n    .replace(/</g, \"\\\\u003c\")\n    .replace(/>/g, \"\\\\u003e\")\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\n/** @internal Keeps client-to-client imports inside one isolated React root. */\nexport function wrapFarmIsolatedClientGraph(\n  ReactRuntime: typeof React,\n  element: React.ReactNode,\n): React.ReactElement {\n  const Context = getBoundaryGraphContext(ReactRuntime);\n  return ReactRuntime.createElement(Context.Provider, { value: true }, element);\n}\n\n/** @internal Generated by Farm's experimental isolated-hydration transform. */\nexport function createFarmIsolatedClientBoundary(\n  ReactRuntime: typeof React,\n  Component: React.ComponentType<any>,\n  moduleReference: string,\n  exportName: string,\n  islandStrategy: FarmIslandStrategy,\n): React.ComponentType<any> {\n  function FarmIsolatedClientBoundary(props: Record<string, unknown>) {\n    const Context = getBoundaryGraphContext(ReactRuntime);\n    const belongsToParentClientGraph = ReactRuntime.useContext(Context);\n    const boundaryId = ReactRuntime.useId();\n\n    if (belongsToParentClientGraph) {\n      return ReactRuntime.createElement(Component, props);\n    }\n\n    let serializedProps: string;\n    try {\n      serializedProps = serializeBoundaryPayload(props);\n    } catch (error) {\n      if (typeof window === \"undefined\") {\n        console.warn(\n          `[Farm.js] Could not isolate ${moduleReference}#${exportName}: ${\n            error instanceof Error ? error.message : String(error)\n          }. The server-rendered component was preserved without client hydration.`,\n        );\n      }\n      return ReactRuntime.createElement(Component, props);\n    }\n\n    return ReactRuntime.createElement(\n      ReactRuntime.Fragment,\n      null,\n      ReactRuntime.createElement(\n        \"farm-client-boundary\",\n        {\n          \"data-farm-client-boundary\": moduleReference,\n          \"data-farm-client-id\": boundaryId,\n          \"data-farm-client-export\": exportName,\n          \"data-farm-island-strategy\": islandStrategy,\n          style: { display: \"contents\" },\n        },\n        ReactRuntime.createElement(\n          Context.Provider,\n          { value: true },\n          ReactRuntime.createElement(Component, props),\n        ),\n      ),\n      ReactRuntime.createElement(\"script\", {\n        type: \"application/json\",\n        \"data-farm-client-props\": boundaryId,\n        dangerouslySetInnerHTML: { __html: serializedProps },\n      }),\n    );\n  }\n\n  FarmIsolatedClientBoundary.displayName = `FarmIsolated(${\n    Component.displayName || Component.name || exportName\n  })`;\n  return FarmIsolatedClientBoundary;\n}\n\ntype FarmIsolatedRoot = {\n  render(element: React.ReactNode): void;\n  unmount(): void;\n};\n\ninterface FarmIsolatedRootRecord {\n  root: FarmIsolatedRoot;\n  reference: string;\n  exportName: string;\n  props: Record<string, unknown>;\n  serverHTML: string;\n  restore(error: unknown): void;\n}\n\ninterface FarmIsolatedHydrationRootOptions {\n  onUncaughtError?: (error: unknown) => void;\n}\n\nexport interface FarmIsolatedHydrationRuntimeOptions {\n  ReactRuntime: typeof React;\n  hydrateRoot(\n    container: Element,\n    element: React.ReactNode,\n    options?: FarmIsolatedHydrationRootOptions,\n  ): FarmIsolatedRoot;\n  load(reference: string): Promise<Record<string, unknown>>;\n  schedule(options: {\n    container: Element;\n    strategy: FarmIslandStrategy;\n    signal?: AbortSignal;\n    hydrate(): Promise<void>;\n  }): Promise<unknown>;\n  wrap?(element: React.ReactElement): React.ReactNode;\n  report?(message: string, error?: unknown): void;\n}\n\nfunction findBoundaryPayload(container: Element, boundaryId: string): HTMLScriptElement | null {\n  const sibling = container.nextElementSibling;\n  if (\n    sibling instanceof HTMLScriptElement &&\n    sibling.type === \"application/json\" &&\n    sibling.getAttribute(\"data-farm-client-props\") === boundaryId\n  ) {\n    return sibling;\n  }\n\n  for (const candidate of container.ownerDocument.querySelectorAll<HTMLScriptElement>(\n    'script[type=\"application/json\"][data-farm-client-props]',\n  )) {\n    if (candidate.getAttribute(\"data-farm-client-props\") === boundaryId) return candidate;\n  }\n  return null;\n}\n\n/** @internal Shared development and production runtime for isolated React roots. */\nexport function createFarmIsolatedHydrationRuntime(options: FarmIsolatedHydrationRuntimeOptions) {\n  const roots = new Map<Element, FarmIsolatedRootRecord>();\n  const pending = new Map<Element, AbortController>();\n  const report =\n    options.report ??\n    ((message: string, error?: unknown) => console.warn(`[Farm.js] ${message}`, error));\n\n  const failRoot = (\n    container: Element,\n    reference: string,\n    exportName: string,\n    serverHTML: string,\n    error: unknown,\n  ) => {\n    report(\n      `Could not hydrate isolated client boundary ${reference}#${exportName}. ` +\n        \"The server-rendered HTML was restored.\",\n      error,\n    );\n    queueMicrotask(() => {\n      try {\n        roots.get(container)?.root.unmount();\n      } catch {\n        // React may already have detached a root that failed during hydration.\n      }\n      roots.delete(container);\n      container.removeAttribute(\"data-farm-hydrated\");\n      container.removeAttribute(\"data-farm-island-hydrated\");\n      container.innerHTML = serverHTML;\n    });\n  };\n\n  class FarmIsolatedRootErrorBoundary extends options.ReactRuntime.Component<\n    { children?: React.ReactNode; onError(error: unknown): void },\n    { failed: boolean }\n  > {\n    state = { failed: false };\n\n    static getDerivedStateFromError() {\n      return { failed: true };\n    }\n\n    componentDidCatch(error: unknown) {\n      this.props.onError(error);\n    }\n\n    render() {\n      return this.state.failed ? null : this.props.children;\n    }\n  }\n\n  const createBoundaryGraph = (\n    Component: React.ComponentType<any>,\n    props: Record<string, unknown>,\n    restore: (error: unknown) => void,\n  ) => {\n    const componentElement = options.ReactRuntime.createElement(Component, props);\n    const wrappedElement = options.wrap ? options.wrap(componentElement) : componentElement;\n    return wrapFarmIsolatedClientGraph(\n      options.ReactRuntime,\n      options.ReactRuntime.createElement(\n        FarmIsolatedRootErrorBoundary,\n        { onError: restore },\n        wrappedElement,\n      ),\n    );\n  };\n\n  async function hydrate(scope: ParentNode = document, signal?: AbortSignal): Promise<void> {\n    const candidates = Array.from(\n      scope.querySelectorAll<Element>(\"farm-client-boundary[data-farm-client-boundary]\"),\n    );\n    if (\n      scope instanceof Element &&\n      scope.matches(\"farm-client-boundary[data-farm-client-boundary]\")\n    ) {\n      candidates.unshift(scope);\n    }\n    const boundaries = candidates.filter((container) => {\n      if (roots.has(container) || pending.has(container)) return false;\n      return !container.parentElement?.closest(\"farm-client-boundary[data-farm-client-boundary]\");\n    });\n\n    await Promise.all(\n      boundaries.map(async (container) => {\n        const reference = container.getAttribute(\"data-farm-client-boundary\");\n        const boundaryId = container.getAttribute(\"data-farm-client-id\");\n        const exportName = container.getAttribute(\"data-farm-client-export\") || \"default\";\n        const strategy =\n          (container.getAttribute(\"data-farm-island-strategy\") as FarmIslandStrategy | null) ??\n          \"load\";\n        if (!reference || !boundaryId) {\n          report(\"An isolated client boundary is missing its module reference or payload ID.\");\n          return;\n        }\n\n        const controller = new AbortController();\n        pending.set(container, controller);\n        const abort = () => controller.abort();\n        if (signal?.aborted) abort();\n        else signal?.addEventListener(\"abort\", abort, { once: true });\n        const cleanup = () => {\n          signal?.removeEventListener(\"abort\", abort);\n          if (pending.get(container) === controller) pending.delete(container);\n        };\n\n        let scheduled: Promise<unknown>;\n        try {\n          scheduled = options.schedule({\n            container,\n            strategy,\n            signal: controller.signal,\n            hydrate: async () => {\n              if (controller.signal.aborted || !container.isConnected) return;\n              const serverHTML = container.innerHTML;\n              try {\n                const module = await options.load(reference);\n                if (controller.signal.aborted || !container.isConnected) return;\n                const originals = module.__farm_client_boundary_originals__ as\n                  | Record<string, unknown>\n                  | undefined;\n                const Component = originals?.[exportName];\n                if (typeof Component !== \"function\" && typeof Component !== \"object\") {\n                  throw new Error(\"compiled original export was not found\");\n                }\n                const payload = findBoundaryPayload(container, boundaryId);\n                if (!payload) throw new Error(`serialized props ${boundaryId} were not found`);\n                const props = JSON.parse(payload.textContent || \"{}\");\n                if (!props || typeof props !== \"object\" || Array.isArray(props)) {\n                  throw new Error(\"serialized props must be an object\");\n                }\n\n                let rootFailure: unknown;\n                const restore = (error: unknown) => {\n                  if (rootFailure !== undefined) return;\n                  rootFailure = error;\n                  failRoot(container, reference, exportName, serverHTML, error);\n                  controller.abort();\n                };\n                const graphElement = createBoundaryGraph(\n                  Component as React.ComponentType<any>,\n                  props as Record<string, unknown>,\n                  restore,\n                );\n                const root = options.hydrateRoot(container, graphElement, {\n                  onUncaughtError: restore,\n                });\n                roots.set(container, {\n                  root,\n                  reference,\n                  exportName,\n                  props: props as Record<string, unknown>,\n                  serverHTML,\n                  restore,\n                });\n                container.setAttribute(\"data-farm-hydrated\", \"true\");\n              } catch (error) {\n                failRoot(container, reference, exportName, serverHTML, error);\n                controller.abort();\n              }\n            },\n          });\n        } catch (error) {\n          failRoot(container, reference, exportName, container.innerHTML, error);\n          controller.abort();\n          cleanup();\n          return;\n        }\n\n        const tracked = Promise.resolve(scheduled)\n          .catch((error) => {\n            if (!controller.signal.aborted) {\n              failRoot(container, reference, exportName, container.innerHTML, error);\n              controller.abort();\n            }\n          })\n          .finally(cleanup);\n        if (strategy === \"load\") await tracked;\n        else void tracked;\n      }),\n    );\n  }\n\n  function updateModule(reference: string, module: Record<string, unknown>): number {\n    const originals = module.__farm_client_boundary_originals__ as\n      | Record<string, unknown>\n      | undefined;\n    let updated = 0;\n\n    for (const [container, record] of roots) {\n      if (record.reference !== reference) continue;\n      const Component = originals?.[record.exportName];\n      if (typeof Component !== \"function\" && typeof Component !== \"object\") {\n        failRoot(\n          container,\n          record.reference,\n          record.exportName,\n          record.serverHTML,\n          new Error(\"updated compiled original export was not found\"),\n        );\n        continue;\n      }\n\n      try {\n        record.root.render(\n          createBoundaryGraph(Component as React.ComponentType<any>, record.props, record.restore),\n        );\n        updated++;\n      } catch (error) {\n        failRoot(container, record.reference, record.exportName, record.serverHTML, error);\n      }\n    }\n\n    return updated;\n  }\n\n  function dispose(scope: Node): void {\n    for (const [container, controller] of pending) {\n      if (container === scope || scope.contains(container)) {\n        controller.abort();\n        pending.delete(container);\n      }\n    }\n    for (const [container, record] of roots) {\n      if (container === scope || scope.contains(container)) {\n        try {\n          record.root.unmount();\n        } catch {\n          // The DOM owner may already have removed a failed root.\n        }\n        roots.delete(container);\n        container.removeAttribute(\"data-farm-hydrated\");\n        container.removeAttribute(\"data-farm-island-hydrated\");\n      }\n    }\n  }\n\n  return {\n    hydrate,\n    updateModule,\n    dispose,\n    rootCount: () => roots.size,\n  };\n}\n","import React from \"react\";\nimport {\n  renderToPipeableStream as reactRenderToPipeableStream,\n  renderToString as reactRenderToString,\n} from \"react-dom/server\";\nimport { wrapFarmIsolatedClientGraph } from \"../../client/isolated-boundary\";\n\nexport class ErrorBoundary extends React.Component<\n  {\n    Fallback: React.ComponentType<any>;\n    fallbackProps: Record<string, any>;\n    children: React.ReactNode;\n  },\n  { hasError: boolean; error: unknown }\n> {\n  constructor(props: any) {\n    super(props);\n    this.state = { hasError: false, error: null };\n  }\n\n  static getDerivedStateFromError(error: unknown) {\n    return { hasError: true, error };\n  }\n\n  render() {\n    if (this.state.hasError) {\n      const Fallback = this.props.Fallback;\n      return React.createElement(Fallback, {\n        ...this.props.fallbackProps,\n        error: this.state.error,\n        reset: () => this.setState({ hasError: false, error: null }),\n      });\n    }\n    return this.props.children as React.ReactElement;\n  }\n}\n\nexport const name = \"react\";\nexport const capabilities = {\n  streaming: { node: true, web: false },\n} as const;\nexport const Fragment = React.Fragment;\nexport const Suspense = React.Suspense;\nexport const createElement = React.createElement;\nexport const isValidElement = React.isValidElement;\nexport const wrapClientGraph = (element: React.ReactNode) =>\n  wrapFarmIsolatedClientGraph(React, element);\nexport const renderToString = reactRenderToString;\nexport const renderToPipeableStream = reactRenderToPipeableStream;\n\nexport default React;\n\n/**\n * React DOM's streaming runtime reveals a Suspense boundary with `$RC`/`$RS`/\n * `$RV`/`$RX` calls and labels the segments with Fizz ids such as `id=\"S:1\"`.\n * The first of those in a chunk is where the static shell ends.\n */\nexport function findStaticShellBoundary(chunk: string): number {\n  const markerIndexes = [\n    chunk.indexOf('id=\"S:'),\n    chunk.indexOf(\"id='S:\"),\n    chunk.indexOf(\"$RC(\"),\n    chunk.indexOf(\"$RS(\"),\n    chunk.indexOf(\"$RV(\"),\n    chunk.indexOf(\"$RX(\"),\n  ].filter((index) => index >= 0);\n\n  if (markerIndexes.length === 0) return -1;\n\n  const markerIndex = Math.min(...markerIndexes);\n  const tagStart = chunk.lastIndexOf(\"<\", markerIndex);\n  return tagStart >= 0 ? tagStart : markerIndex;\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type {\n  FarmConfig,\n  FarmRequest,\n  FarmResponse,\n  LoadingProps,\n  PageProps,\n  RouteModule,\n  SSGPage,\n} from \"../types\";\nimport type { MatchedRouteSlot, RouteManager } from \"../routing/route-manager\";\nimport { logger, toViteModuleId } from \"../utils\";\nimport { collectDevStylesheetUrls } from \"./dev-styles\";\nimport {\n  composeFarmFullDocument,\n  extractFarmFullDocument,\n  opensFarmFullDocument,\n  removeFarmDocumentTitles,\n} from \"./full-document\";\nimport { getClientModuleMetadata } from \"../utils/client-component\";\nimport { Writable } from \"stream\";\nimport {\n  _clearCurrentMiddlewareContext,\n  _clearCurrentMiddlewareData,\n  _runWithMiddlewareContext,\n  _runWithMiddlewareData,\n} from \"../middleware/server\";\nimport { getRequestContextSnapshot } from \"../request-context\";\nimport { matchSSGPage, resolveRouteRenderingConfigFromFile } from \"../ssg\";\nimport {\n  FARM_MARKDOWN_CONTENT_TYPE,\n  createFarmMarkdownErrorBody,\n  farmRequestWantsMarkdown,\n} from \"../app-markdown\";\nimport {\n  getIntegrationProviders,\n  getRegisteredIntegrationAPIManifest,\n  isFarmIntegrationProviderComponentReference,\n} from \"../integrations\";\nimport {\n  _runWithCurrentRequest,\n  createWebRequestFromFarmRequest,\n  resolveFarmRequestURL,\n} from \"./request\";\nimport { createFarmCacheKey, getFarmDataCache, normalizeRevalidatePath } from \"../cache\";\nimport { resolveFarmNotFoundComponentPath } from \"../not-found\";\nimport { getFarmAppDirectories } from \"../layers\";\nimport { emitFarmEvent } from \"../observability\";\nimport {\n  getFarmRedirectError,\n  isFarmNotFoundError,\n  isFarmRedirectError,\n} from \"../navigation-errors\";\nimport {\n  addMetadataImageReference,\n  mergeMetadata,\n  renderMetadataHead,\n  type FarmMetadataImageReference,\n  type MetadataImageKind,\n} from \"../metadata\";\nimport { resolveFarmRouteContext, withFarmRouteContext } from \"../route-context\";\nimport { searchParamsToObject } from \"../search-params\";\nimport { prepareDeferredData, snapshotDeferredData, type DeferredRecord } from \"../deferred\";\nimport { createFarmDeploymentCookie, FARM_DEPLOYMENT_ID_HEADER } from \"../deployment\";\nimport type { StaticMetadataImageInfo } from \"../static-metadata-image\";\nimport {\n  _runWithFarmI18nRequest,\n  getFarmI18nClientSnapshot,\n  type FarmI18nClientSnapshot,\n  type FarmI18nRuntime,\n} from \"../i18n/server\";\nimport { createFarmLocaleCookie, getFarmLocaleVaryHeaders } from \"../i18n/resolver\";\nimport { localizeFarmHref, localizeFarmPathname } from \"../i18n/routing\";\nimport { sendWebResponse } from \"./response\";\nimport { matchesFarmIfNoneMatch } from \"../server-http\";\nimport { renderFarmFontDevHead } from \"../font-vite\";\nimport { createFarmMetadataImageResponse } from \"../metadata-image\";\nimport { createFarmMetadataRouteResponse } from \"../metadata-route\";\nimport {\n  resolveFarmTrailingSlashRedirect,\n  setFarmTrailingSlashPreference,\n} from \"../trailing-slash\";\nimport { applyFarmBasePath, setFarmBasePath } from \"../base-path\";\nimport { DEFAULT_NOT_FOUND_STYLES } from \"../components/not-found-styles\";\nimport {\n  createDefaultErrorMarkup,\n  getDefaultErrorStatusText,\n  resolveDefaultErrorStatus,\n} from \"../components/error-page\";\nimport { createFarmThemeDocumentParts } from \"../theme/server-runtime\";\nimport { getTheme as getFarmTheme } from \"../theme/server\";\nimport { FARM_VERSION } from \"../version\";\nimport type { ViteDevServer } from \"vite\";\nimport {\n  getFarmRendererCapabilities,\n  getFarmRendererComponentExtensions,\n  isReactRenderer,\n  readFarmRendererWebStream,\n  resolveFarmRendererModule,\n  type FarmServerRendererRuntime,\n} from \"../renderer\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmIslandStrategy } from \"../island\";\nimport { createDefaultErrorDiagnostics } from \"./error-diagnostics\";\n\nlet cachedClerkProvider: { ClerkProvider: any } | null = null;\n\nconst importRuntimeModule = new Function(\"specifier\", \"return import(specifier);\") as (\n  specifier: string,\n) => Promise<any>;\n\ninterface CachedSSGPage {\n  html: string;\n  document: boolean;\n}\n\ninterface CachedPPRShell {\n  html: string;\n}\n\nexport function shouldServePrerenderedPage(\n  nodeEnv: string | undefined,\n  method: string | undefined,\n): boolean {\n  if (nodeEnv !== \"production\") return false;\n  const normalizedMethod = (method || \"GET\").toUpperCase();\n  return normalizedMethod === \"GET\" || normalizedMethod === \"HEAD\";\n}\n\nfunction formatSSGManifestError(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nfunction parseSSGManifest(content: string, manifestPath: string): SSGPage[] {\n  let manifest: unknown;\n\n  try {\n    manifest = JSON.parse(content);\n  } catch (error) {\n    throw new Error(\n      `Failed to parse SSG manifest at ${manifestPath}: ${formatSSGManifestError(error)}`,\n    );\n  }\n\n  if (!Array.isArray(manifest)) {\n    throw new Error(`Invalid SSG manifest at ${manifestPath}: expected an array of pages.`);\n  }\n\n  for (const [index, page] of manifest.entries()) {\n    if (!page || typeof page !== \"object\" || Array.isArray(page)) {\n      throw new Error(`Invalid SSG manifest at ${manifestPath}: page ${index} must be an object.`);\n    }\n\n    const entry = page as Record<string, unknown>;\n    if (typeof entry.urlPath !== \"string\") {\n      throw new Error(\n        `Invalid SSG manifest at ${manifestPath}: page ${index} must have a string urlPath.`,\n      );\n    }\n    if (\n      !entry.params ||\n      typeof entry.params !== \"object\" ||\n      Array.isArray(entry.params) ||\n      Object.values(entry.params).some((value) => typeof value !== \"string\")\n    ) {\n      throw new Error(\n        `Invalid SSG manifest at ${manifestPath}: page ${index} must have string params.`,\n      );\n    }\n    if (\n      entry.revalidate !== undefined &&\n      (typeof entry.revalidate !== \"number\" ||\n        !Number.isFinite(entry.revalidate) ||\n        entry.revalidate <= 0)\n    ) {\n      throw new Error(\n        `Invalid SSG manifest at ${manifestPath}: page ${index} revalidate must be a positive number.`,\n      );\n    }\n  }\n\n  return manifest as SSGPage[];\n}\n\ninterface PPRShellCacheOptions {\n  pathname: string;\n  search: string;\n  /**\n   * Locale the shell was rendered in, resolved once when these options are built.\n   * The shell carries `lang`, `dir`, the message catalog and the alternate links, so\n   * it cannot be shared across locales. It is captured rather than read at write\n   * time because the shell is stored from a streaming `onComplete` callback, which\n   * can run outside the request context that resolved the locale.\n   */\n  locale: string;\n  revalidate?: number;\n}\n\nexport interface FarmNavigationFragmentLayout {\n  pattern: string;\n  module: { default?: any };\n}\n\nexport interface FarmNavigationFragmentSlot {\n  name: string;\n  ownerPattern: string;\n  containerId: string;\n  module: { default?: any };\n  props: Record<string, unknown>;\n}\n\nexport interface FarmNavigationFragmentInput {\n  PageComponent: any;\n  LoadingComponent?: any;\n  pageProps: Record<string, unknown>;\n  params: Record<string, string>;\n  layouts: FarmNavigationFragmentLayout[];\n  /** First destination layout that changed compared with the active shell. */\n  layoutStartIndex?: number;\n  slots?: FarmNavigationFragmentSlot[];\n  pageShouldHydrate: boolean;\n  layoutShouldHydrate: boolean;\n  islandStrategy?: FarmIslandStrategy | null;\n}\n\nconst warnedSuppressedAsyncHydrationModules = new Set<string>();\n\nfunction warnSuppressedAsyncHydrationOnce(modulePath: string): void {\n  if (warnedSuppressedAsyncHydrationModules.has(modulePath)) return;\n  warnedSuppressedAsyncHydrationModules.add(modulePath);\n  logger.warn(\n    `${modulePath} is an async server component that imports client components. ` +\n      `React cannot hydrate async components in the browser, so this route stays ` +\n      `server-rendered and its client imports are not interactive. Move the ` +\n      `interactive UI into a \"use client\" child rendered by a synchronous page, ` +\n      `or enable experimental server components support.`,\n  );\n}\n\n// Routes whose layout was observed to render a full `<html>` document. The\n// streaming path can't rewrite a document after its shell is flushed, so once a\n// route is seen to be full-document it is served through the buffered path\n// (which composes the document correctly) on every subsequent request.\nconst fullDocumentRoutes = new Set<string>();\n\nlet warnedFullDocumentLayout = false;\n\nfunction warnFarmFullDocumentLayout(): void {\n  if (warnedFullDocumentLayout) return;\n  warnedFullDocumentLayout = true;\n  logger.warn(\n    `A root layout returned a full <html> document. Farm.js owns the document ` +\n      `shell, so a layout should return a fragment (its children) — like the docs ` +\n      `example — and let the framework provide <html>/<head>/<body>. The document ` +\n      `has been composed into the response, but returning a fragment avoids the ` +\n      `ambiguity and keeps dev and production identical.`,\n  );\n}\n\nfunction hasRequestHeader(req: FarmRequest, name: string): boolean {\n  const value = req.headers[name.toLowerCase()];\n  return Array.isArray(value) ? value.length > 0 : Boolean(value);\n}\n\n/**\n * The request pathname (without query/hash) used as the default canonical URL.\n * Prefers the resolved route path recorded on the request, falling back to the\n * raw request URL.\n */\nfunction getFarmMetadataPathname(req: FarmRequest): string | undefined {\n  const raw = (req as any).__FARM_ROUTE__ || req.url;\n  if (typeof raw !== \"string\" || raw.length === 0) return undefined;\n  const boundary = raw.search(/[?#]/);\n  return boundary === -1 ? raw : raw.slice(0, boundary);\n}\n\nfunction serializeInlineValue(value: unknown): string {\n  return JSON.stringify(value)\n    .replace(/</g, \"\\\\u003c\")\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\");\n}\n\nfunction appendResponseHeader(res: FarmResponse, name: string, value: string): void {\n  const current = res.getHeader(name);\n  if (current === undefined) {\n    res.setHeader(name, value);\n  } else if (Array.isArray(current)) {\n    res.setHeader(name, [...current.map(String), value]);\n  } else {\n    res.setHeader(name, [String(current), value]);\n  }\n}\n\nfunction appendResponseVary(res: FarmResponse, value: string): void {\n  const current = res.getHeader(\"Vary\");\n  const values = new Set(\n    (Array.isArray(current) ? current.join(\",\") : String(current || \"\"))\n      .split(\",\")\n      .map((entry) => entry.trim())\n      .filter(Boolean),\n  );\n  values.add(value);\n  res.setHeader(\"Vary\", Array.from(values).join(\", \"));\n}\n\nfunction renderI18nAlternateLinks(requestPath: string, snapshot: FarmI18nClientSnapshot): string {\n  if (snapshot.routing === \"none\") return \"\";\n  const url = new URL(requestPath, \"http://farm.local\");\n  const links = snapshot.locales.map((locale) => {\n    const href = localizeFarmPathname(url.pathname, locale, snapshot);\n    return `<link rel=\"alternate\" hreflang=\"${escapeHtmlAttribute(locale)}\" href=\"${escapeHtmlAttribute(href)}\">`;\n  });\n  links.push(\n    `<link rel=\"alternate\" hreflang=\"x-default\" href=\"${escapeHtmlAttribute(\n      localizeFarmPathname(url.pathname, snapshot.defaultLocale, snapshot),\n    )}\">`,\n  );\n  return links.join(\"\");\n}\n\nfunction createPPRRefreshScript(): string {\n  return `<script>(function(){if(window.__FARM_PPR_REFRESHING__)return;window.__FARM_PPR_REFRESHING__=true;function replaceRoot(html){var doc=new DOMParser().parseFromString(html,\"text/html\");var next=doc.getElementById(\"root\");var current=document.getElementById(\"root\");if(!next||!current)return;current.innerHTML=next.innerHTML;}fetch(window.location.href,{credentials:\"same-origin\",headers:{\"x-farm-ppr-refresh\":\"1\"}}).then(function(response){return response.ok?response.text():null;}).then(function(html){if(html)replaceRoot(html);}).catch(function(){});})();</script>`;\n}\n\nfunction createPreHydrationClickQueueScript(): string {\n  return `<script>(function(){if(window.__FARM_PREHYDRATION_CLICK_QUEUE__)return;var queue=[];window.__FARM_PREHYDRATION_CLICK_QUEUE__=queue;window.__FARM_HYDRATED__=false;document.documentElement.dataset.farmHydrated=\"false\";function isModified(event){return !!(event.metaKey||event.altKey||event.ctrlKey||event.shiftKey)}function closestQueuedTarget(target){while(target&&target!==document.documentElement){if(target.matches&&target.matches('button,[role=\"button\"],input[type=\"button\"],input[type=\"submit\"],input[type=\"reset\"]'))return target;target=target.parentElement}return null}document.addEventListener(\"click\",function(event){if(window.__FARM_HYDRATED__)return;if(event.defaultPrevented||event.button!==0||isModified(event))return;var target=closestQueuedTarget(event.target);if(!target||target.closest&&target.closest(\"a[href]\")||target.closest&&target.closest('[data-farm-island-hydrated=\"true\"]'))return;if(queue.some(function(item){return item.target===target}))return;queue.push({target:target,createdAt:Date.now()});document.dispatchEvent(new CustomEvent(\"farm:island-interaction\",{detail:{target:target}}));event.preventDefault();event.stopImmediatePropagation()},true);})();</script>`;\n}\n\nfunction createDocumentFooter(options: {\n  suspenseRevealFallback: string;\n  refreshPPR?: boolean;\n  deferredHydrationScript?: string;\n}): string {\n  return `</div>\n  ${options.suspenseRevealFallback}\n  ${options.refreshPPR ? createPPRRefreshScript() : \"\"}\n  ${options.deferredHydrationScript || \"\"}\n  <script type=\"module\" src=\"/@farm/client.js\"></script>\n</body>\n</html>`;\n}\n\nfunction createDeferredHydrationScript(records: readonly DeferredRecord[]): string {\n  if (records.length === 0) return \"\";\n  return `<script>window.__FARM_DEFERRED_DATA__=${serializeInlineValue(\n    snapshotDeferredData(records),\n  )};</script>`;\n}\n\nfunction toMiddlewareMap(input: unknown): Map<string, any> {\n  if (input instanceof Map) {\n    return new Map(input as Map<string, any>);\n  }\n  if (input && typeof input === \"object\") {\n    return new Map(Object.entries(input as Record<string, any>));\n  }\n  return new Map<string, any>();\n}\n\nfunction isWebResponse(value: unknown): value is Response {\n  return (\n    typeof Response !== \"undefined\" &&\n    value instanceof Response &&\n    typeof value.arrayBuffer === \"function\"\n  );\n}\n\nasync function parseRouteModuleProps(\n  routeModule: RouteModule,\n  input: {\n    props: PageProps;\n    search: Record<string, string | string[] | undefined>;\n    routePath: string;\n  },\n): Promise<\n  PageProps & {\n    search: unknown;\n    data?: unknown;\n    __farmCanonicalPath?: string;\n    __farmRoutePropsPromise?: Promise<Record<string, unknown>>;\n    __farmRoutePropsResolved?: true;\n  }\n> {\n  const resolveRouteProps = (routeModule as any).__farmResolveRouteProps;\n  if (typeof resolveRouteProps === \"function\") {\n    // Resolve the top-level route state before starting the HTTP stream. It can\n    // still return explicit defer() values for nested Suspense boundaries, but\n    // redirects, notFound(), and failures must retain their real HTTP status.\n    return await resolveRouteProps(input.props);\n  }\n\n  if ((routeModule as any).__farmRouteParsesProps) {\n    return {\n      ...input.props,\n      search: input.search,\n    };\n  }\n\n  const schemas = (routeModule as any).__farmRouteSchemas;\n  const params = parseRouteModuleSchema(\n    schemas?.params,\n    input.props.params,\n    \"params\",\n    input.routePath,\n  );\n  const search = parseRouteModuleSchema(schemas?.search, input.search, \"search\", input.routePath);\n\n  return {\n    ...input.props,\n    params: params as Record<string, string>,\n    search,\n    searchParams: Promise.resolve(search as Record<string, string | string[] | undefined>),\n  };\n}\n\nfunction parseRouteModuleSchema(\n  schema: { parse?: (value: unknown) => unknown } | undefined,\n  value: unknown,\n  label: string,\n  routePath: string,\n): unknown {\n  if (!schema || typeof schema.parse !== \"function\") {\n    return value;\n  }\n\n  try {\n    return schema.parse(value);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(`Invalid ${label} for route \"${routePath}\": ${message}`);\n  }\n}\n\nfunction createRouteStateProps(input: {\n  params: Record<string, string>;\n  searchParamsObject: Record<string, string | string[] | undefined>;\n  path: string;\n  middlewareMap: Map<string, any>;\n  pluginExposedContext: Map<string, any>;\n}): LoadingProps {\n  return {\n    params: input.params,\n    search: input.searchParamsObject,\n    searchParams: Promise.resolve(input.searchParamsObject),\n    path: input.path,\n    middleware: input.middlewareMap.size > 0 ? { data: input.middlewareMap } : undefined,\n    context: input.pluginExposedContext.size > 0 ? { data: input.pluginExposedContext } : undefined,\n  };\n}\n\nexport class ServerRenderer {\n  private config: Required<FarmConfig>;\n  private routeManager: RouteManager;\n  private ssgManifest: SSGPage[] = [];\n  private dataCache = getFarmDataCache();\n  private i18nRuntime?: FarmI18nRuntime;\n  private viteServer?: ViteDevServer;\n  private rendererRuntime!: FarmServerRendererRuntime;\n\n  constructor(\n    config: Required<FarmConfig>,\n    routeManager: RouteManager,\n    i18nRuntime?: FarmI18nRuntime,\n    viteServer?: ViteDevServer,\n  ) {\n    this.config = config;\n    this.routeManager = routeManager;\n    this.i18nRuntime = i18nRuntime;\n    this.viteServer = viteServer;\n    this.loadSSGManifest();\n  }\n\n  async initialize(): Promise<void> {\n    if (this.rendererRuntime) return;\n\n    if (this.config.notFound?.component?.trim()) {\n      resolveFarmNotFoundComponentPath(this.config, getFarmAppDirectories(this.config));\n    }\n\n    const loaded = isReactRenderer(this.config.renderer)\n      ? await import(\"../renderer/react/server\")\n      : this.viteServer\n        ? await this.viteServer.ssrLoadModule(this.config.renderer.server)\n        : await import(\n            pathToFileURL(\n              resolveFarmRendererModule(\n                this.config.root || process.cwd(),\n                this.config.renderer.server,\n              ),\n            ).href\n          );\n    const runtime = loaded as Partial<FarmServerRendererRuntime>;\n    const required = [\"createElement\", \"isValidElement\", \"renderToString\"] as const;\n    for (const key of required) {\n      if (typeof runtime[key] !== \"function\") {\n        throw new Error(\n          `Renderer \\`${this.config.renderer.name}\\` server module must export ${key}().`,\n        );\n      }\n    }\n\n    const capabilities = getFarmRendererCapabilities(this.config.renderer);\n    if (capabilities.streaming.node && typeof runtime.renderToPipeableStream !== \"function\") {\n      throw new Error(\n        `Renderer \\`${this.config.renderer.name}\\` advertises Node streaming but its server module does not export renderToPipeableStream().`,\n      );\n    }\n    if (capabilities.streaming.web && typeof runtime.renderToReadableStream !== \"function\") {\n      throw new Error(\n        `Renderer \\`${this.config.renderer.name}\\` advertises Web streaming but its server module does not export renderToReadableStream().`,\n      );\n    }\n\n    this.rendererRuntime = runtime as FarmServerRendererRuntime;\n    this.routeManager.setRendererRuntime?.(this.rendererRuntime);\n  }\n\n  private createPageBoundary(\n    pageElement: unknown,\n    options: {\n      pageShouldHydrate: boolean;\n      layoutShouldHydrate: boolean;\n      islandStrategy?: FarmIslandStrategy | null;\n    },\n  ): unknown {\n    return this.rendererRuntime.createElement(\n      \"div\",\n      {\n        id: \"__farm_page__\",\n        \"data-farm-segment\": \"page\",\n        \"data-farm-client\": options.pageShouldHydrate ? \"true\" : \"false\",\n        ...(options.layoutShouldHydrate ? { \"data-farm-layout-client\": \"true\" } : {}),\n        \"data-farm-island\": \"page\",\n        \"data-farm-island-strategy\": options.islandStrategy || \"load\",\n      },\n      pageElement,\n    );\n  }\n\n  /// Stylesheets the app imported through JS (fontsource packages, component\n  /// CSS) that the document must link alongside globals.css — see #658.\n  private collectDevStyleHrefs(): string[] {\n    const graph = this.viteServer?.moduleGraph;\n    if (!graph) return [];\n    return collectDevStylesheetUrls(graph.idToModuleMap.values());\n  }\n\n  private collectDevStyleLinks(): string[] {\n    return this.collectDevStyleHrefs().map(\n      (href) => `<link rel=\"stylesheet\" href=\"${escapeHtmlAttribute(href)}\">`,\n    );\n  }\n\n  private createLayoutBoundary(pattern: string, layoutElement: unknown): unknown {\n    return this.rendererRuntime.createElement(\n      \"div\",\n      {\n        \"data-farm-layout-boundary\": \"true\",\n        \"data-farm-layout-pattern\": pattern,\n        style: { display: \"contents\" },\n      },\n      layoutElement,\n    );\n  }\n\n  private wrapClientGraph(element: unknown): unknown {\n    const getIsolatedClientBoundaryModules = this.routeManager.getIsolatedClientBoundaryModules;\n    if (\n      !this.rendererRuntime.wrapClientGraph ||\n      typeof getIsolatedClientBoundaryModules !== \"function\" ||\n      getIsolatedClientBoundaryModules.call(this.routeManager, this.config.root).size === 0\n    ) {\n      return element;\n    }\n    return this.rendererRuntime.wrapClientGraph(element);\n  }\n\n  private async renderElementToCompleteHTML(element: unknown): Promise<string> {\n    const capabilities = getFarmRendererCapabilities(this.config.renderer);\n    const renderToPipeableStream = capabilities.streaming.node\n      ? this.rendererRuntime.renderToPipeableStream\n      : undefined;\n\n    if (renderToPipeableStream) {\n      return await new Promise<string>((resolve, reject) => {\n        const chunks: Buffer[] = [];\n        let started = false;\n        const writable = new Writable({\n          write(chunk, _encoding, callback) {\n            chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n            callback();\n          },\n        });\n        writable.once(\"finish\", () => resolve(Buffer.concat(chunks).toString(\"utf8\")));\n        writable.once(\"error\", reject);\n\n        const stream = renderToPipeableStream(element, {\n          onShellReady() {\n            started = true;\n            stream.pipe(writable);\n          },\n          onShellError(error) {\n            reject(error);\n          },\n          onError(error) {\n            if (!started) reject(error);\n          },\n        });\n      });\n    }\n\n    if (capabilities.streaming.web && this.rendererRuntime.renderToReadableStream) {\n      const stream = await this.rendererRuntime.renderToReadableStream(element);\n      return await readFarmRendererWebStream(stream);\n    }\n\n    return await this.rendererRuntime.renderToString(element);\n  }\n\n  /**\n   * Buffered render carrying document-head markup for renderers that emit it\n   * during render (e.g. <svelte:head>). Other renderers return an empty head.\n   */\n  private async renderElementToDocumentParts(\n    element: unknown,\n  ): Promise<{ html: string; head: string }> {\n    if (this.rendererRuntime.renderToStringWithHead) {\n      const rendered = await this.rendererRuntime.renderToStringWithHead(element);\n      return { html: rendered.html, head: rendered.head || \"\" };\n    }\n    return { html: await this.rendererRuntime.renderToString(element), head: \"\" };\n  }\n\n  /**\n   * Render the route tree used by client navigation without producing a second\n   * document response. Layout markers let the browser preserve the longest\n   * common shell and replace only the first changed boundary.\n   */\n  async renderNavigationFragment(input: FarmNavigationFragmentInput): Promise<string> {\n    await this.initialize();\n    setFarmBasePath(this.config.basePath);\n    setFarmTrailingSlashPreference(this.config.trailingSlash);\n    let element = this.rendererRuntime.createElement(input.PageComponent, input.pageProps);\n    if (input.LoadingComponent) {\n      element = this.rendererRuntime.createElement(\n        this.rendererRuntime.Suspense,\n        {\n          fallback: this.rendererRuntime.createElement(input.LoadingComponent, {\n            params: input.params,\n            path: (input.pageProps as any).path,\n          }),\n        },\n        element,\n      );\n    }\n    if (input.pageShouldHydrate && !input.layoutShouldHydrate) {\n      element = this.wrapClientGraph(element);\n    }\n    element = this.createPageBoundary(element, {\n      pageShouldHydrate: input.pageShouldHydrate,\n      layoutShouldHydrate: input.layoutShouldHydrate,\n      islandStrategy: input.islandStrategy,\n    });\n\n    const layoutStartIndex = Math.max(\n      0,\n      Math.min(input.layoutStartIndex ?? 0, input.layouts.length),\n    );\n    for (let index = input.layouts.length - 1; index >= layoutStartIndex; index--) {\n      const layout = input.layouts[index]!;\n      const LayoutComponent = layout.module.default;\n      if (!LayoutComponent) continue;\n      const slotProps: Record<string, unknown> = {};\n      for (const slot of input.slots || []) {\n        if (slot.ownerPattern !== layout.pattern || !slot.module.default) continue;\n        let slotElement = this.rendererRuntime.createElement(slot.module.default, slot.props);\n        slotElement = this.wrapClientGraph(slotElement);\n        slotProps[slot.name] = this.rendererRuntime.createElement(\n          \"div\",\n          {\n            id: slot.containerId,\n            \"data-farm-route-slot\": slot.name,\n            \"data-farm-slot-owner\": slot.ownerPattern,\n          },\n          slotElement,\n        );\n      }\n      element = this.rendererRuntime.createElement(LayoutComponent, {\n        children: element,\n        params: input.params,\n        ...slotProps,\n      });\n      element = this.createLayoutBoundary(layout.pattern, element);\n    }\n\n    if (input.layoutShouldHydrate) {\n      element = this.wrapClientGraph(element);\n    }\n\n    return this.renderElementToCompleteHTML(await this.wrapWithIntegrationProviders(element));\n  }\n\n  async runWithRequestContext<T>(request: Request, fn: () => T | Promise<T>): Promise<T> {\n    return _runWithCurrentRequest(request, () =>\n      this.i18nRuntime?.config.enabled\n        ? _runWithFarmI18nRequest(this.i18nRuntime, request, fn, {\n            redirect: false,\n          })\n        : fn(),\n    );\n  }\n\n  async resolveRouteContext(input: {\n    request: Request;\n    rawRequest?: FarmRequest;\n    params: Record<string, string>;\n    search: Record<string, string | string[] | undefined>;\n    path: string;\n  }): Promise<unknown> {\n    return resolveFarmRouteContext(this.config, input);\n  }\n\n  /**\n   * Load SSG manifest from build output\n   */\n  private loadSSGManifest(): void {\n    const manifestPath = path.join(this.config.root, this.config.outDir, \"__ssg_manifest.json\");\n    let content: string;\n\n    try {\n      content = fs.readFileSync(manifestPath, \"utf-8\");\n    } catch (error) {\n      if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n        return;\n      }\n\n      throw new Error(\n        `Failed to read SSG manifest at ${manifestPath}: ${formatSSGManifestError(error)}`,\n      );\n    }\n\n    this.ssgManifest = parseSSGManifest(content, manifestPath);\n    logger.info(`Loaded SSG manifest: ${this.ssgManifest.length} pages`);\n  }\n\n  /**\n   * Check if a path should be served from SSG cache\n   */\n  private async shouldServeSSG(pathname: string): Promise<SSGPage | null> {\n    const ssgPage = matchSSGPage(pathname, this.ssgManifest);\n    if (!ssgPage) return null;\n\n    const cached = await this.getCachedSSGPage(pathname);\n    if (cached && (await this.dataCache.isStaleAsync(cached))) {\n      // Stale - needs revalidation (serve stale, regenerate in background)\n      this.regenerateSSGPage(ssgPage);\n    }\n\n    return ssgPage;\n  }\n\n  private getSSGCacheKey(urlPath: string): string {\n    return createFarmCacheKey([\"ssg\", normalizeRevalidatePath(urlPath)]);\n  }\n\n  private getPPRCacheKey(pathname: string, search = \"\", locale = \"\"): string {\n    return createFarmCacheKey([\"ppr\", locale, normalizeRevalidatePath(pathname), search]);\n  }\n\n  private getCachedSSGPage(urlPath: string) {\n    return this.dataCache.getEntryAsync<CachedSSGPage>(this.getSSGCacheKey(urlPath), {\n      allowStale: true,\n    });\n  }\n\n  private async cacheSSGPage(\n    page: SSGPage,\n    html: string,\n    options: { document: boolean; createdAt?: number },\n  ): Promise<void> {\n    await this.dataCache.setAsync(\n      this.getSSGCacheKey(page.urlPath),\n      { html, document: options.document },\n      {\n        createdAt: options.createdAt,\n        paths: [page.urlPath],\n        tags: [\"ssg\"],\n        revalidate: page.revalidate ?? false,\n      },\n    );\n  }\n\n  private getCachedPPRShell(pathname: string, search: string, locale = \"\") {\n    return this.dataCache.getEntryAsync<CachedPPRShell>(\n      this.getPPRCacheKey(pathname, search, locale),\n    );\n  }\n\n  private async cachePPRShell(options: PPRShellCacheOptions, html: string): Promise<void> {\n    const key = this.getPPRCacheKey(options.pathname, options.search, options.locale);\n    await this.dataCache.setAsync(\n      key,\n      { html },\n      {\n        paths: [options.pathname],\n        tags: [\"ppr\"],\n        revalidate: options.revalidate ?? false,\n      },\n    );\n    emitFarmEvent({\n      type: \"ppr.shell.cached\",\n      route: options.pathname,\n      key,\n      revalidate: options.revalidate,\n    });\n  }\n\n  private getPPRShellBypassReason(\n    req: FarmRequest,\n    middlewareMap: Map<string, any>,\n    middlewareContext: Map<string, any>,\n    pluginExposedContext: Map<string, any>,\n  ): string | undefined {\n    const method = (req.method || \"GET\").toUpperCase();\n    if (method !== \"GET\" && method !== \"HEAD\") {\n      return \"method\";\n    }\n\n    if (req.headers.cookie) {\n      return \"cookie\";\n    }\n\n    if (req.headers.authorization) {\n      return \"authorization\";\n    }\n\n    if (hasRequestHeader(req, \"x-farm-ppr-refresh\")) {\n      return \"refresh\";\n    }\n\n    if (middlewareMap.size > 0) {\n      return \"middleware-data\";\n    }\n\n    if (middlewareContext.size > 0) {\n      return \"middleware-context\";\n    }\n\n    if (pluginExposedContext.size > 0) {\n      return \"plugin-context\";\n    }\n\n    return undefined;\n  }\n\n  private getPPRHeaders(status: \"hit\" | \"miss\" | \"bypass\", revalidate?: number) {\n    const headers: Record<string, string> = {\n      \"X-Farm-PPR\": status,\n    };\n\n    if (status === \"bypass\") {\n      headers[\"Cache-Control\"] = \"private, no-store\";\n      return headers;\n    }\n\n    if (typeof revalidate === \"number\" && revalidate > 0) {\n      headers[\"Cache-Control\"] = `s-maxage=${revalidate}, stale-while-revalidate`;\n    }\n\n    return headers;\n  }\n\n  private serveCachedPPRShell(res: FarmResponse, shell: CachedPPRShell, revalidate?: number): void {\n    res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n    for (const [key, value] of Object.entries(this.getPPRHeaders(\"hit\", revalidate))) {\n      res.setHeader(key, value);\n    }\n    res.write(shell.html);\n    res.end();\n  }\n\n  /**\n   * Regenerate an SSG page in the background (ISR)\n   */\n  private async regenerateSSGPage(page: SSGPage): Promise<void> {\n    try {\n      // This runs in the background - don't await\n      setImmediate(async () => {\n        try {\n          const mod = await this.routeManager.loadRouteModule(page.filePath);\n          if (!mod?.default) return;\n\n          const { route, layouts } = this.routeManager.matchRoute(page.urlPath);\n          const layoutModules = await Promise.all(\n            layouts.map((l) => this.routeManager.loadLayoutModule(l.modulePath)),\n          );\n          const routeManifest = this.routeManager.generateClientManifest(this.config.root);\n\n          const PageComponent = mod.default;\n          const pageProps = {\n            params: page.params,\n            searchParams: Promise.resolve({}),\n            path: page.urlPath,\n          };\n\n          let pageElement: any = this.rendererRuntime.createElement(PageComponent, pageProps);\n          const pageMetadata = routeManifest.routes.find(\n            (entry) => entry.pattern === route?.pattern,\n          ) ?? {\n            shouldHydrate: false,\n            islandStrategy: null,\n          };\n          const layoutMetadata = layouts.map(\n            (layout) =>\n              routeManifest.layouts.find((entry) => entry.pattern === layout.pattern) ?? {\n                shouldHydrate: false,\n                islandStrategy: null,\n              },\n          );\n          const layoutShouldHydrate = layoutMetadata.some((metadata) => metadata.shouldHydrate);\n          pageElement = this.createPageBoundary(pageElement, {\n            pageShouldHydrate: pageMetadata.shouldHydrate,\n            layoutShouldHydrate,\n            islandStrategy: pageMetadata.islandStrategy,\n          });\n\n          for (let i = layoutModules.length - 1; i >= 0; i--) {\n            const layoutModule = layoutModules[i];\n            const LayoutComponent = layoutModule.default;\n            pageElement = this.rendererRuntime.createElement(LayoutComponent, {\n              children: pageElement,\n              params: page.params,\n            });\n            pageElement = this.createLayoutBoundary(layouts[i]!.pattern, pageElement);\n          }\n\n          const html = await this.rendererRuntime.renderToString(\n            await this.wrapWithIntegrationProviders(pageElement),\n          );\n\n          // Resolve metadata so the regenerated document keeps its title and\n          // meta/OG tags instead of falling back to the framework default\n          // (\"Farm.js App\"). Without this, a static route served from the ISR\n          // cache loses its metadata after the first revalidation (issue #1018).\n          const mergedMetadata = await this.resolveRouteMetadata({\n            layoutModules,\n            routeModule: mod,\n            pageProps: pageProps as unknown as PageProps,\n            pathname: page.urlPath,\n          });\n          const { title, tags, hasFavicon } = renderMetadataHead(mergedMetadata);\n          const metadataHead = `${\n            hasFavicon ? \"\" : '<link rel=\"icon\" href=\"data:,\">\\n  '\n          }<title>${title}</title>${tags}`;\n          const fullDocument = this.createFullHTML(\n            html,\n            pageMetadata.shouldHydrate === true,\n            page.urlPath,\n            metadataHead,\n          );\n\n          await this.cacheSSGPage(page, fullDocument, { document: true });\n\n          logger.info(`ISR: Regenerated ${page.urlPath}`);\n        } catch (error) {\n          logger.error(`ISR regeneration failed for ${page.urlPath}: ${error}`);\n        }\n      });\n    } catch (error) {\n      logger.error(`ISR trigger failed: ${error}`);\n    }\n  }\n\n  /**\n   * Serve a pre-rendered SSG page\n   */\n  private async serveSSGPage(req: FarmRequest, res: FarmResponse, page: SSGPage): Promise<boolean> {\n    // Check cache first (for ISR)\n    const cached = await this.getCachedSSGPage(page.urlPath);\n    if (cached) {\n      res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n      res.setHeader(\"X-Farm-SSG\", \"cached\");\n      if (page.revalidate) {\n        res.setHeader(\"Cache-Control\", `s-maxage=${page.revalidate}, stale-while-revalidate`);\n      }\n      res.write(\n        cached.value.document\n          ? cached.value.html\n          : this.createFullHTML(cached.value.html, false, page.urlPath),\n      );\n      res.end();\n      return true;\n    }\n\n    // Try to read from file system (production)\n    try {\n      const htmlPath =\n        page.urlPath === \"/\"\n          ? path.join(this.config.root, this.config.outDir, \"client\", \"index.html\")\n          : path.join(this.config.root, this.config.outDir, \"client\", page.urlPath + \".html\");\n\n      if (fs.existsSync(htmlPath)) {\n        const stat = fs.statSync(htmlPath);\n        const html = fs.readFileSync(htmlPath, \"utf-8\");\n        await this.cacheSSGPage(page, html, {\n          document: true,\n          createdAt: stat.mtimeMs,\n        });\n        const fileCacheEntry = await this.getCachedSSGPage(page.urlPath);\n        if (fileCacheEntry && (await this.dataCache.isStaleAsync(fileCacheEntry))) {\n          this.regenerateSSGPage(page);\n        }\n\n        res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n        res.setHeader(\"X-Farm-SSG\", \"file\");\n        if (page.revalidate) {\n          res.setHeader(\"Cache-Control\", `s-maxage=${page.revalidate}, stale-while-revalidate`);\n        }\n        res.write(html);\n        res.end();\n        return true;\n      }\n    } catch (error) {\n      logger.error(`Failed to serve SSG page ${page.urlPath}: ${error}`);\n    }\n\n    return false;\n  }\n\n  async renderPage(req: FarmRequest, res: FarmResponse): Promise<void> {\n    await this.initialize();\n    setFarmBasePath(this.config.basePath);\n    setFarmTrailingSlashPreference(this.config.trailingSlash);\n    const request = createWebRequestFromFarmRequest(req, {\n      trustProxy: this.config.server?.trustProxy,\n    });\n    const runtime = this.i18nRuntime;\n\n    if (runtime?.config.enabled) {\n      const resolution = runtime.resolveRequest(request);\n      const varyHeaders = getFarmLocaleVaryHeaders(runtime.config, resolution);\n      for (const header of varyHeaders) appendResponseVary(res, header);\n      if (resolution.persist) {\n        appendResponseHeader(\n          res,\n          \"Set-Cookie\",\n          createFarmLocaleCookie(resolution.locale, runtime.config),\n        );\n      }\n      if (resolution.redirect && (request.method === \"GET\" || request.method === \"HEAD\")) {\n        res.statusCode = 307;\n        res.setHeader(\"Location\", resolution.redirect);\n        if (varyHeaders.length > 0) res.setHeader(\"Cache-Control\", \"private, no-store\");\n        res.end();\n        return;\n      }\n    }\n\n    return this.runWithRequestContext(request, () => this.renderPageInContext(req, res));\n  }\n\n  private async renderPageInContext(req: FarmRequest, res: FarmResponse): Promise<void> {\n    const renderStartTime = Date.now();\n    let pathname = \"/\";\n    let params: Record<string, string> = {};\n    let layouts: Array<{ modulePath: string; pattern: string }> = [];\n    let routeSlots: MatchedRouteSlot[] = [];\n    let searchParamsObject: Record<string, string | string[] | undefined> = {};\n    let middlewareMap = new Map<string, any>();\n    let middlewareContext = new Map<string, any>();\n    let pluginExposedContext = new Map<string, any>();\n    let errorBoundaryEntry: { modulePath: string } | null = null;\n    let pprRefreshRoute: string | null = null;\n\n    const completeRender = (status = res.statusCode || 200, route = pathname) => {\n      emitFarmEvent({\n        type: \"render.complete\",\n        route,\n        pathname,\n        status,\n        durationMs: Date.now() - renderStartTime,\n      });\n    };\n\n    try {\n      const url = resolveFarmRequestURL(req, { trustProxy: this.config.server?.trustProxy });\n      pathname = url.pathname;\n      emitFarmEvent({ type: \"render.start\", route: pathname, pathname });\n      searchParamsObject = searchParamsToObject(url.searchParams);\n\n      const metadataRouteMatch = this.routeManager.matchMetadataRoute(pathname);\n      if (metadataRouteMatch) {\n        await this.renderMetadataRoute(req, res, metadataRouteMatch);\n        completeRender(res.statusCode || 200, pathname);\n        return;\n      }\n\n      const metadataImageMatch = this.routeManager.matchMetadataImage(pathname);\n      if (metadataImageMatch) {\n        await this.renderMetadataImage(req, res, {\n          pathname,\n          searchParamsObject,\n          ...metadataImageMatch,\n        });\n        completeRender(res.statusCode || 200, pathname);\n        return;\n      }\n\n      this.applyDeploymentHeaders(req, res);\n\n      const match = this.routeManager.matchRoute(pathname);\n      if (match.route) {\n        const redirectLocation = resolveFarmTrailingSlashRedirect(url, this.config.trailingSlash);\n        if (redirectLocation) {\n          res.statusCode = 308;\n          res.setHeader(\"Location\", redirectLocation);\n          res.end();\n          completeRender(308, match.route.pattern);\n          return;\n        }\n      }\n\n      // Pre-rendered HTML only represents retrieval requests. Other methods must\n      // continue through the live route so their request semantics are preserved.\n      if (shouldServePrerenderedPage(process.env.NODE_ENV, req.method)) {\n        const ssgPage = await this.shouldServeSSG(pathname);\n        if (ssgPage) {\n          const served = await this.serveSSGPage(req, res, ssgPage);\n          if (served) {\n            completeRender(res.statusCode || 200, ssgPage.urlPath);\n            return;\n          }\n        }\n      }\n\n      // Match route\n      const route = match.route;\n      params = match.params;\n      layouts = match.layouts;\n      routeSlots = match.slots ?? [];\n\n      if (!route) {\n        emitFarmEvent({ type: \"route.notFound\", pathname });\n        await this.render404(req, res);\n        completeRender(404);\n        return;\n      }\n\n      emitFarmEvent({\n        type: \"route.matched\",\n        pathname,\n        route: route.pattern,\n        params,\n      });\n\n      const loadingBoundaryEntry = this.routeManager.getMatchingLoading(pathname);\n      errorBoundaryEntry = this.routeManager.getMatchingError(pathname);\n\n      middlewareMap = toMiddlewareMap((req as any).__FARM_MIDDLEWARE_DATA__);\n      middlewareContext = toMiddlewareMap((req as any).__FARM_MIDDLEWARE_CONTEXT__);\n      pluginExposedContext = getRequestContextSnapshot(req as object, {\n        exposedOnly: true,\n      });\n      const currentRequest = createWebRequestFromFarmRequest(req, {\n        trustProxy: this.config.server?.trustProxy,\n      });\n      const routeContext = await this.resolveRouteContext({\n        request: currentRequest,\n        rawRequest: req,\n        params,\n        search: searchParamsObject,\n        path: pathname,\n      });\n\n      // Load route module\n      const routeModule = await this.routeManager.loadRouteModule(route.modulePath);\n\n      if (!routeModule.default) {\n        throw new Error(`Route module ${route.modulePath} does not export a default component`);\n      }\n\n      // Create page props with searchParams as plain object and middleware data\n      const rawPageProps: PageProps = withFarmRouteContext(\n        {\n          params,\n          searchParams: Promise.resolve(searchParamsObject),\n          path: pathname,\n          middleware: middlewareMap.size > 0 ? { data: middlewareMap } : undefined,\n          context: pluginExposedContext.size > 0 ? { data: pluginExposedContext } : undefined,\n        } as PageProps & { search: unknown },\n        routeContext,\n      );\n      const programmaticRouteComponents = (routeModule as any).__farmRouteComponents as\n        | {\n            error?: any;\n            notFound?: any;\n          }\n        | undefined;\n      let PageComponent = routeModule.default;\n      let pageProps: PageProps & {\n        search: unknown;\n        data?: unknown;\n        error?: unknown;\n        __farmRoutePropsPromise?: Promise<Record<string, unknown>>;\n        __farmRoutePropsResolved?: true;\n      };\n\n      try {\n        pageProps = await parseRouteModuleProps(routeModule, {\n          props: rawPageProps,\n          search: searchParamsObject,\n          routePath: route.pattern,\n        });\n      } catch (error) {\n        if (isFarmRedirectError(error)) throw error;\n\n        const routeStateProps = {\n          ...rawPageProps,\n          search: searchParamsObject,\n          searchParams: Promise.resolve(searchParamsObject),\n          error,\n        };\n\n        if (isFarmNotFoundError(error) && programmaticRouteComponents?.notFound) {\n          res.statusCode = 404;\n          PageComponent = programmaticRouteComponents.notFound;\n          pageProps = routeStateProps;\n        } else if (programmaticRouteComponents?.error) {\n          res.statusCode = 500;\n          PageComponent = programmaticRouteComponents.error;\n          pageProps = routeStateProps;\n        } else {\n          throw error;\n        }\n      }\n\n      const renderingConfig = await resolveRouteRenderingConfigFromFile(\n        routeModule,\n        route.modulePath,\n        { experimentalPPR: this.config.experimental?.ppr === true },\n      );\n      const pprBypassReason = renderingConfig.ppr\n        ? this.getPPRShellBypassReason(req, middlewareMap, middlewareContext, pluginExposedContext)\n        : undefined;\n      const canCachePPRShell = renderingConfig.ppr && !pprBypassReason;\n      const pprShellOptions: PPRShellCacheOptions | undefined = canCachePPRShell\n        ? {\n            pathname,\n            search: url.search,\n            locale: getFarmI18nClientSnapshot()?.locale ?? \"\",\n            revalidate: renderingConfig.revalidate,\n          }\n        : undefined;\n\n      if (renderingConfig.ppr && pprBypassReason) {\n        emitFarmEvent({\n          type: \"ppr.shell.bypass\",\n          route: pathname,\n          reason: pprBypassReason,\n        });\n        emitFarmEvent({\n          type: \"cache.bypass\",\n          route: pathname,\n          reason: pprBypassReason,\n        });\n\n        if (pprBypassReason === \"refresh\") {\n          pprRefreshRoute = pathname;\n          emitFarmEvent({ type: \"ppr.refresh.start\", route: pathname });\n        }\n      }\n\n      if (pprShellOptions) {\n        // Same locale for the lookup and the later store, so the two cannot diverge.\n        const pprCacheKey = this.getPPRCacheKey(pathname, url.search, pprShellOptions.locale);\n        const cachedPPRShell = await this.getCachedPPRShell(\n          pathname,\n          url.search,\n          pprShellOptions.locale,\n        );\n        if (cachedPPRShell) {\n          emitFarmEvent({\n            type: \"ppr.shell.hit\",\n            route: pathname,\n            key: pprCacheKey,\n          });\n          this.serveCachedPPRShell(res, cachedPPRShell.value, renderingConfig.revalidate);\n          completeRender(res.statusCode || 200, pathname);\n          return;\n        }\n        emitFarmEvent({\n          type: \"ppr.shell.miss\",\n          route: pathname,\n          key: pprCacheKey,\n        });\n      }\n\n      let LoadingFallbackComponent: any = null;\n      if (loadingBoundaryEntry) {\n        const loadingModule = await this.routeManager.loadRouteModule(\n          loadingBoundaryEntry.modulePath,\n        );\n        if (loadingModule.default) {\n          LoadingFallbackComponent = loadingModule.default;\n        }\n      }\n\n      let ErrorFallbackComponent: any = null;\n      if (errorBoundaryEntry) {\n        const errorModule = await this.routeManager.loadRouteModule(errorBoundaryEntry.modulePath);\n        if (errorModule.default) {\n          ErrorFallbackComponent = errorModule.default;\n        }\n      }\n\n      // Hydration decisions are compiled into a manifest and reused on requests.\n      // Development HMR invalidates this cache when a route module changes.\n      const routeManifest = this.routeManager.generateClientManifest(this.config.root);\n      const routeManifestEntry = routeManifest.routes.find(\n        (entry) => entry.pattern === route.pattern,\n      );\n      const moduleMetadata =\n        routeManifestEntry || getClientModuleMetadata(route.modulePath, this.config.root);\n      const isClientComponent = moduleMetadata.isClientComponent;\n      const renderedRouteSlots = await Promise.all(\n        routeSlots.map(async (slot) => {\n          const slotModule = await this.routeManager.loadRouteModule(slot.route.modulePath);\n          if (!slotModule.default) {\n            throw new Error(\n              `Route slot \"${slot.name}\" module ${slot.route.modulePath} does not export a default component`,\n            );\n          }\n\n          const slotContext = await this.resolveRouteContext({\n            request: currentRequest,\n            rawRequest: req,\n            params: slot.params,\n            search: searchParamsObject,\n            path: pathname,\n          });\n          const rawSlotProps = withFarmRouteContext(\n            {\n              params: slot.params,\n              searchParams: Promise.resolve(searchParamsObject),\n              path: pathname,\n              middleware: middlewareMap.size > 0 ? { data: middlewareMap } : undefined,\n              context: pluginExposedContext.size > 0 ? { data: pluginExposedContext } : undefined,\n            } as PageProps & { search: unknown },\n            slotContext,\n          );\n          const slotProps = await parseRouteModuleProps(slotModule, {\n            props: rawSlotProps,\n            search: searchParamsObject,\n            routePath: slot.route.pattern,\n          });\n          const metadata = routeManifest.slots.find(\n            (entry) =>\n              entry.name === slot.name &&\n              entry.ownerPattern === slot.ownerPattern &&\n              entry.pattern === slot.route.pattern,\n          ) ?? {\n            isClientComponent: false,\n            shouldHydrate: false,\n          };\n\n          return {\n            ...slot,\n            module: slotModule,\n            props: slotProps,\n            isClientComponent: metadata.isClientComponent,\n            shouldHydrate: metadata.shouldHydrate,\n          };\n        }),\n      );\n      const shouldHydrate = moduleMetadata.shouldHydrate;\n      if (moduleMetadata.suppressedAsyncHydration) {\n        warnSuppressedAsyncHydrationOnce(route.modulePath);\n      }\n      const layoutHydrationMetadata = layouts.map((layout) => {\n        const manifestEntry = routeManifest.layouts.find(\n          (entry) => entry.pattern === layout.pattern,\n        ) as\n          | {\n              isClientComponent?: boolean;\n              shouldHydrate?: boolean;\n              islandStrategy?: \"load\" | \"interaction\" | \"visible\" | \"idle\" | null;\n              hasIsolatedClientBoundaries?: boolean;\n            }\n          | undefined;\n        if (typeof manifestEntry?.shouldHydrate === \"boolean\") {\n          return {\n            isClientComponent: manifestEntry.isClientComponent === true,\n            shouldHydrate: manifestEntry.shouldHydrate,\n            islandStrategy: manifestEntry.islandStrategy ?? null,\n            ...(manifestEntry.hasIsolatedClientBoundaries === true\n              ? { hasIsolatedClientBoundaries: true }\n              : {}),\n          };\n        }\n        return {\n          isClientComponent: false,\n          shouldHydrate: false,\n          islandStrategy: null,\n        };\n      });\n      const shouldHydrateLayout = layoutHydrationMetadata.some(\n        (metadata) => metadata.shouldHydrate,\n      );\n      const clientLayouts = layouts.map((layout, index) => ({\n        pattern: layout.pattern,\n        modulePath: toViteModuleId(layout.modulePath, this.config.root),\n        shouldHydrate: layoutHydrationMetadata[index]?.shouldHydrate === true,\n        islandStrategy: layoutHydrationMetadata[index]?.islandStrategy ?? null,\n        ...(layoutHydrationMetadata[index]?.hasIsolatedClientBoundaries === true\n          ? { hasIsolatedClientBoundaries: true }\n          : {}),\n      }));\n      const hydrationStrategies = [\n        ...(shouldHydrate && moduleMetadata.islandStrategy ? [moduleMetadata.islandStrategy] : []),\n        ...layoutHydrationMetadata.flatMap((metadata) =>\n          metadata.shouldHydrate && metadata.islandStrategy ? [metadata.islandStrategy] : [],\n        ),\n      ];\n      const hydrationIslandStrategy = hydrationStrategies.every(\n        (strategy) => strategy === hydrationStrategies[0],\n      )\n        ? (hydrationStrategies[0] ?? \"load\")\n        : \"load\";\n      const hasHydratableRouteSlots = renderedRouteSlots.some(\n        (slot) => slot.isClientComponent || slot.shouldHydrate,\n      );\n      const hasIsolatedClientBoundaries =\n        routeManifestEntry?.hasIsolatedClientBoundaries === true ||\n        layoutHydrationMetadata.some((metadata) => metadata.hasIsolatedClientBoundaries === true);\n\n      (req as any).__FARM_PAGE_PATH__ = route.modulePath;\n      (req as any).__FARM_ROUTE__ = pathname;\n      (req as any).__FARM_IS_CLIENT_COMPONENT__ = isClientComponent;\n      (req as any).__FARM_PAGE_SHOULD_HYDRATE__ = shouldHydrate;\n      (req as any).__FARM_LAYOUT_SHOULD_HYDRATE__ = shouldHydrateLayout;\n      (req as any).__FARM_LAYOUTS__ = clientLayouts;\n      if (hasIsolatedClientBoundaries) {\n        (req as any).__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ = true;\n      }\n      (req as any).__FARM_SHOULD_HYDRATE__ =\n        shouldHydrate || shouldHydrateLayout || hasIsolatedClientBoundaries;\n      (req as any).__FARM_ISLAND_STRATEGY__ = hydrationIslandStrategy;\n      (req as any).__FARM_HAS_HYDRATABLE_ROUTE_SLOTS__ = hasHydratableRouteSlots;\n      (req as any).__FARM_LOADING_MODULE_PATH__ = loadingBoundaryEntry?.modulePath\n        ? toViteModuleId(loadingBoundaryEntry.modulePath, this.config.root)\n        : null;\n      (req as any).__FARM_ROUTE_SLOTS__ = renderedRouteSlots.map((slot) => ({\n        name: slot.name,\n        ownerPattern: slot.ownerPattern,\n        containerId: slot.containerId,\n        interception: slot.interception,\n        fallback: slot.fallback,\n        modulePath: slot.route.modulePath,\n        isClientComponent: slot.isClientComponent,\n        shouldHydrate: slot.shouldHydrate,\n        props: {\n          params: slot.props.params,\n          search: (slot.props as any).search,\n          searchParams: (slot.props as any).search,\n          ...(\"data\" in slot.props ? { data: (slot.props as any).data } : {}),\n          ...((slot.props as any).__farmCanonicalPath\n            ? { __farmCanonicalPath: (slot.props as any).__farmCanonicalPath }\n            : {}),\n          ...((slot.props as any).__farmRoutePropsResolved\n            ? { __farmRoutePropsResolved: true }\n            : {}),\n          path: pathname,\n        },\n      }));\n      // Store pageProps for client-side hydration (serializable version - no Promises)\n      (req as any).__FARM_PROPS__ = {\n        params: pageProps.params,\n        search: (pageProps as any).search,\n        searchParams: (pageProps as any).search,\n        ...(\"data\" in pageProps ? { data: (pageProps as any).data } : {}),\n        ...((pageProps as any).__farmCanonicalPath\n          ? { __farmCanonicalPath: (pageProps as any).__farmCanonicalPath }\n          : {}),\n        ...((pageProps as any).__farmRoutePropsResolved ? { __farmRoutePropsResolved: true } : {}),\n        path: pathname,\n        middleware:\n          middlewareMap.size > 0\n            ? {\n                data: Object.fromEntries(middlewareMap),\n              }\n            : undefined,\n        context:\n          pluginExposedContext.size > 0\n            ? {\n                data: Object.fromEntries(pluginExposedContext),\n              }\n            : undefined,\n      };\n\n      // Load layout modules\n      const layoutModules = await Promise.all(\n        layouts.map((layout) => this.routeManager.loadLayoutModule(layout.modulePath)),\n      );\n\n      const mergedMetadata = await this.resolveRouteMetadata({\n        layoutModules,\n        routeModule,\n        pageProps,\n        pathname,\n      });\n\n      // Store metadata on request for renderWithSSR\n      (req as any).__FARM_METADATA__ = mergedMetadata;\n\n      // Get middleware data for AsyncLocalStorage\n      const middlewareDataForContext = middlewareMap;\n\n      await _runWithMiddlewareData(middlewareDataForContext, async () => {\n        await _runWithMiddlewareContext(middlewareContext, async () => {\n          await _runWithCurrentRequest(currentRequest, async () => {\n            let pageElement: any = this.rendererRuntime.createElement(PageComponent, pageProps);\n\n            if (LoadingFallbackComponent) {\n              const loadingFallback = this.rendererRuntime.createElement(LoadingFallbackComponent, {\n                ...createRouteStateProps({\n                  params,\n                  searchParamsObject,\n                  path: pathname,\n                  middlewareMap,\n                  pluginExposedContext,\n                }),\n              });\n\n              pageElement = this.rendererRuntime.createElement(\n                this.rendererRuntime.Suspense,\n                { fallback: loadingFallback },\n                pageElement,\n              );\n            }\n\n            // A route-wide page owns every compiled client component beneath\n            // its React root. Keep shared leaf modules as ordinary components\n            // here even when an isolated layout also imports the same module.\n            if ((isClientComponent || shouldHydrate) && !shouldHydrateLayout) {\n              pageElement = this.wrapClientGraph(pageElement);\n            }\n\n            // Every route gets a stable HTML boundary. Server-only pages keep\n            // native markup with no React root; interactive pages hydrate this\n            // exact boundary.\n            pageElement = this.createPageBoundary(pageElement, {\n              pageShouldHydrate: isClientComponent || shouldHydrate,\n              layoutShouldHydrate: shouldHydrateLayout,\n              islandStrategy: hydrationIslandStrategy,\n            });\n\n            let wrappedElement: any = pageElement;\n            for (let i = layoutModules.length - 1; i >= 0; i--) {\n              const layoutModule = layoutModules[i];\n              const layoutEntry = layouts[i];\n              const LayoutComponent = layoutModule.default;\n              const slotProps: Record<string, any> = {};\n              for (const slot of renderedRouteSlots) {\n                if (slot.ownerPattern !== layoutEntry.pattern) continue;\n\n                let slotElement = this.rendererRuntime.createElement(\n                  slot.module.default,\n                  slot.props,\n                );\n                slotElement = this.wrapClientGraph(slotElement);\n                slotElement = this.rendererRuntime.createElement(\n                  \"div\",\n                  {\n                    id: slot.containerId,\n                    \"data-farm-route-slot\": slot.name,\n                    \"data-farm-slot-owner\": slot.ownerPattern,\n                  },\n                  slotElement,\n                );\n                slotProps[slot.name] = slotElement;\n              }\n              wrappedElement = this.rendererRuntime.createElement(LayoutComponent, {\n                children: wrappedElement,\n                params,\n                ...slotProps,\n              });\n              wrappedElement = this.createLayoutBoundary(layoutEntry.pattern, wrappedElement);\n            }\n\n            if (shouldHydrateLayout) {\n              wrappedElement = this.wrapClientGraph(wrappedElement);\n            }\n\n            if (ErrorFallbackComponent && this.rendererRuntime.ErrorBoundary) {\n              wrappedElement = this.rendererRuntime.createElement(\n                this.rendererRuntime.ErrorBoundary,\n                {\n                  Fallback: ErrorFallbackComponent,\n                  fallbackProps: {\n                    ...createRouteStateProps({\n                      params,\n                      searchParamsObject,\n                      path: pathname,\n                      middlewareMap,\n                      pluginExposedContext,\n                    }),\n                  },\n                },\n                wrappedElement,\n              );\n            }\n\n            const integratedElement = await this.wrapWithIntegrationProviders(wrappedElement);\n            const pprHeaders = renderingConfig.ppr\n              ? this.getPPRHeaders(pprShellOptions ? \"miss\" : \"bypass\", renderingConfig.revalidate)\n              : undefined;\n\n            // Render with middleware data available\n            await this.renderWithSSR(\n              integratedElement,\n              req,\n              res,\n              () => {\n                _clearCurrentMiddlewareData();\n                _clearCurrentMiddlewareContext();\n              },\n              {\n                responseHeaders: pprHeaders,\n                routeManifest,\n                captureStaticShell: Boolean(pprShellOptions),\n                observabilityRoute: pathname,\n                onSuspenseHoleDetected: pprShellOptions\n                  ? () =>\n                      emitFarmEvent({\n                        type: \"ppr.suspense.holeDetected\",\n                        route: pathname,\n                      })\n                  : undefined,\n                onComplete:\n                  pprShellOptions && req.method !== \"HEAD\"\n                    ? (html) => this.cachePPRShell(pprShellOptions, html)\n                    : undefined,\n              },\n            );\n            if (pprRefreshRoute) {\n              emitFarmEvent({\n                type: \"ppr.refresh.complete\",\n                route: pprRefreshRoute,\n                durationMs: Date.now() - renderStartTime,\n              });\n            }\n            completeRender(res.statusCode || 200, pathname);\n          });\n        });\n      });\n    } catch (caughtError) {\n      let error = caughtError;\n\n      if (isWebResponse(error)) {\n        if (!res.headersSent && !(res as any).writableEnded) {\n          await sendWebResponse(res, error);\n        } else if (!(res as any).writableEnded) {\n          res.end();\n        }\n        completeRender(error.status, pathname);\n        return;\n      }\n\n      if (isFarmRedirectError(error)) {\n        const redirect = getFarmRedirectError(error)!;\n        const snapshot = getFarmI18nClientSnapshot();\n        const redirectUrl =\n          snapshot && redirect.url.startsWith(\"/\") && !redirect.url.startsWith(\"//\")\n            ? localizeFarmHref(redirect.url, snapshot.locale, snapshot)\n            : redirect.url;\n        emitFarmEvent({\n          type: \"route.redirect\",\n          from: pathname,\n          to: redirectUrl,\n          status: redirect.status,\n        });\n        if (!res.headersSent && !(res as any).writableEnded) {\n          res.statusCode = redirect.status;\n          res.setHeader(\"Location\", redirectUrl);\n          res.end();\n        } else if (!(res as any).writableEnded) {\n          res.end();\n        }\n        completeRender(redirect.status, pathname);\n        return;\n      }\n\n      if (isFarmNotFoundError(error)) {\n        emitFarmEvent({ type: \"route.notFound\", pathname });\n        if (!res.headersSent && !(res as any).writableEnded) {\n          try {\n            await this.render404(req, res);\n            completeRender(404, pathname);\n            return;\n          } catch (notFoundRenderError) {\n            error = notFoundRenderError;\n          }\n        } else {\n          if (!(res as any).writableEnded) {\n            res.end();\n          }\n          completeRender(404, pathname);\n          return;\n        }\n      }\n\n      emitFarmEvent({ type: \"render.error\", route: pathname, error });\n      const errorStatus = resolveDefaultErrorStatus(error);\n      if (pprRefreshRoute) {\n        emitFarmEvent({\n          type: \"ppr.refresh.error\",\n          route: pprRefreshRoute,\n          error,\n        });\n      }\n      logger.error(`Error rendering page: ${error}`);\n\n      if (res.headersSent || (res as any).writableEnded) {\n        if (!(res as any).writableEnded) {\n          res.end();\n        }\n        return;\n      }\n\n      if (errorBoundaryEntry) {\n        const rendered = await this.renderRouteErrorBoundary(req, res, {\n          pathname,\n          params,\n          layouts,\n          searchParamsObject,\n          middlewareMap,\n          middlewareContext,\n          pluginExposedContext,\n          error,\n          statusCode: errorStatus,\n          errorModulePath: errorBoundaryEntry.modulePath,\n        });\n\n        if (rendered) {\n          return;\n        }\n      }\n\n      await this.renderError(req, res, error, errorStatus);\n    }\n  }\n\n  private async wrapWithIntegrationProviders(element: any): Promise<any> {\n    const providers = getIntegrationProviders(this.config.integrations);\n    let wrapped = element;\n\n    for (let i = providers.length - 1; i >= 0; i--) {\n      const provider = providers[i];\n      if (provider.component || provider.type === \"clerk\") {\n        if (!isReactRenderer(this.config.renderer)) {\n          throw new Error(\n            `Integration provider \\`${provider.type}\\` currently requires the React renderer.`,\n          );\n        }\n        let ProviderComponent;\n        if (isFarmIntegrationProviderComponentReference(provider.component)) {\n          const providerModuleId = provider.component.module.startsWith(\".\")\n            ? toViteModuleId(\n                path.resolve(this.config.root, provider.component.module),\n                this.config.root,\n              )\n            : provider.component.module;\n          const providerModule = this.viteServer\n            ? await this.viteServer.ssrLoadModule(providerModuleId)\n            : await importRuntimeModule(\n                provider.component.module.startsWith(\".\")\n                  ? pathToFileURL(path.resolve(this.config.root, provider.component.module)).href\n                  : provider.component.module,\n              );\n          ProviderComponent = providerModule[provider.component.export || \"default\"];\n        } else if (typeof provider.component === \"function\") {\n          ProviderComponent = provider.component;\n        } else if (provider.type === \"clerk\") {\n          if (!cachedClerkProvider) {\n            cachedClerkProvider = await importRuntimeModule(\"@clerk/react\");\n          }\n          ProviderComponent = cachedClerkProvider!.ClerkProvider;\n        } else {\n          throw new Error(\n            `Integration provider \\`${provider.name}\\` has an invalid component reference.`,\n          );\n        }\n        if (!ProviderComponent) {\n          throw new Error(\n            `Integration provider \\`${provider.name}\\` did not export its configured component.`,\n          );\n        }\n\n        wrapped = this.rendererRuntime.createElement(\n          ProviderComponent,\n          provider.props || {},\n          wrapped,\n        );\n      }\n    }\n\n    return wrapped;\n  }\n\n  private async resolveRouteMetadata(options: {\n    layoutModules: Array<Record<string, any>>;\n    routeModule: RouteModule;\n    pageProps: PageProps;\n    pathname: string;\n  }): Promise<Record<string, any>> {\n    let metadata: Record<string, any> = {};\n\n    for (const layoutModule of options.layoutModules) {\n      metadata = mergeMetadata(metadata, layoutModule.metadata);\n      if (typeof layoutModule.generateMetadata === \"function\") {\n        metadata = mergeMetadata(\n          metadata,\n          await layoutModule.generateMetadata({\n            params: options.pageProps.params,\n          }),\n        );\n      }\n    }\n\n    metadata = mergeMetadata(metadata, (options.routeModule as any).metadata);\n    if (typeof (options.routeModule as any).generateMetadata === \"function\") {\n      metadata = mergeMetadata(\n        metadata,\n        await (options.routeModule as any).generateMetadata(options.pageProps),\n      );\n    }\n\n    if (!metadata.manifest) {\n      const manifestMatch = this.routeManager.getMatchingMetadataRoute(\n        options.pathname,\n        \"manifest\",\n      );\n      if (manifestMatch) {\n        const rawHref = this.routeManager.resolveMetadataRoutePath(\n          manifestMatch.metadata,\n          manifestMatch.params,\n        );\n        const snapshot = getFarmI18nClientSnapshot();\n        const localizedHref = snapshot\n          ? localizeFarmHref(rawHref, snapshot.locale, snapshot)\n          : rawHref;\n        metadata.manifest = applyFarmBasePath(localizedHref, this.config.basePath);\n      }\n    }\n\n    for (const kind of [\"opengraph\", \"twitter\"] as const) {\n      const reference = await this.resolveMetadataImageReference(kind, options.pathname);\n      if (reference) {\n        metadata = addMetadataImageReference(metadata, reference);\n      }\n    }\n\n    return metadata;\n  }\n\n  private async resolveMetadataImageReference(\n    kind: MetadataImageKind,\n    pathname: string,\n  ): Promise<FarmMetadataImageReference | null> {\n    const match = this.routeManager.getMatchingMetadataImage(pathname, kind);\n    if (!match) return null;\n\n    const rawHref = this.routeManager.resolveMetadataImagePath(match.image, match.params);\n    const snapshot = getFarmI18nClientSnapshot();\n    const localizedHref = snapshot ? localizeFarmHref(rawHref, snapshot.locale, snapshot) : rawHref;\n    const href = applyFarmBasePath(localizedHref, this.config.basePath);\n    const reference: FarmMetadataImageReference = {\n      kind,\n      href,\n    };\n\n    if (match.image.sourceType === \"static\" && match.image.staticInfo) {\n      return {\n        ...reference,\n        width: match.image.staticInfo.width,\n        height: match.image.staticInfo.height,\n        alt: match.image.staticInfo.alt,\n        contentType: match.image.staticInfo.contentType,\n      };\n    }\n\n    try {\n      const imageModule = await this.routeManager.loadRouteModule(match.image.modulePath);\n      const size = (imageModule as any).size;\n      if (size && typeof size === \"object\") {\n        reference.width = typeof size.width === \"number\" ? size.width : undefined;\n        reference.height = typeof size.height === \"number\" ? size.height : undefined;\n      }\n      if (typeof (imageModule as any).alt === \"string\") {\n        reference.alt = (imageModule as any).alt;\n      }\n      if (typeof (imageModule as any).contentType === \"string\") {\n        reference.contentType = (imageModule as any).contentType;\n      }\n    } catch (error) {\n      logger.warn(`Failed to read ${kind} image metadata for ${pathname}: ${error}`);\n    }\n\n    return reference;\n  }\n\n  private async renderMetadataRoute(\n    req: FarmRequest,\n    res: FarmResponse,\n    match: NonNullable<ReturnType<RouteManager[\"matchMetadataRoute\"]>>,\n  ): Promise<void> {\n    const method = (req.method || \"GET\").toUpperCase();\n    if (method !== \"GET\" && method !== \"HEAD\") {\n      res.statusCode = 405;\n      res.setHeader(\"Allow\", \"GET, HEAD\");\n      res.end();\n      return;\n    }\n\n    try {\n      const routeModule = await this.routeManager.loadRouteModule(match.metadata.modulePath);\n      if (routeModule.default === undefined) {\n        throw new Error(\n          `Metadata route module ${match.metadata.modulePath} does not export a default value or handler`,\n        );\n      }\n\n      const request = createWebRequestFromFarmRequest(req, {\n        trustProxy: this.config.server?.trustProxy,\n      });\n      const url = new URL(request.url);\n      const value =\n        typeof routeModule.default === \"function\"\n          ? await (routeModule.default as any)({\n              request,\n              params: match.params,\n              searchParams: url.searchParams,\n              path: match.routePath,\n            })\n          : routeModule.default;\n      const response = createFarmMetadataRouteResponse(match.metadata.kind, value, routeModule, {\n        method,\n      });\n      await sendWebResponse(res as any, response);\n    } catch (error) {\n      logger.error(`Metadata route render failed for ${match.metadata.modulePath}: ${error}`);\n      await sendWebResponse(\n        res as any,\n        new Response(\"Internal Server Error\", {\n          status: 500,\n          headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n        }),\n      );\n    }\n  }\n\n  private async renderMetadataImage(\n    req: FarmRequest,\n    res: FarmResponse,\n    options: {\n      pathname: string;\n      pagePath: string;\n      params: Record<string, string>;\n      searchParamsObject: Record<string, string | string[] | undefined>;\n      image: {\n        modulePath: string;\n        kind: MetadataImageKind;\n        sourceType?: \"module\" | \"static\";\n        staticInfo?: StaticMetadataImageInfo;\n      };\n    },\n  ): Promise<void> {\n    const method = (req.method || \"GET\").toUpperCase();\n    if (method !== \"GET\" && method !== \"HEAD\") {\n      res.statusCode = 405;\n      res.setHeader(\"Allow\", \"GET, HEAD\");\n      res.end();\n      return;\n    }\n\n    if (options.image.sourceType === \"static\") {\n      if (!options.image.staticInfo) {\n        throw new Error(`Static metadata image ${options.image.modulePath} is missing file info`);\n      }\n      await this.writeStaticMetadataImageResponse(req, res, {\n        modulePath: options.image.modulePath,\n        staticInfo: options.image.staticInfo,\n      });\n      return;\n    }\n\n    const imageModule = await this.routeManager.loadRouteModule(options.image.modulePath);\n    if (!imageModule.default) {\n      throw new Error(\n        `Metadata image module ${options.image.modulePath} does not export a default component or handler`,\n      );\n    }\n\n    const imageProps: PageProps = {\n      params: options.params,\n      searchParams: Promise.resolve(options.searchParamsObject),\n      path: options.pagePath,\n    };\n    const handlerResult =\n      typeof imageModule.default === \"function\"\n        ? await (imageModule.default as any)(imageProps)\n        : imageModule.default;\n\n    await this.writeMetadataImageResponse(req, res, handlerResult, imageModule);\n  }\n\n  private async writeMetadataImageResponse(\n    req: FarmRequest,\n    res: FarmResponse,\n    value: unknown,\n    imageModule: RouteModule,\n  ): Promise<void> {\n    const ifNoneMatch = req.headers[\"if-none-match\"];\n    const response = await createFarmMetadataImageResponse(value, imageModule, {\n      method: req.method,\n      ifNoneMatch: Array.isArray(ifNoneMatch) ? ifNoneMatch[0] : ifNoneMatch,\n    });\n    await sendWebResponse(res as any, response);\n  }\n\n  private async writeStaticMetadataImageResponse(\n    req: FarmRequest,\n    res: FarmResponse,\n    image: { modulePath: string; staticInfo: StaticMetadataImageInfo },\n  ): Promise<void> {\n    const method = (req.method || \"GET\").toUpperCase();\n    if (method !== \"GET\" && method !== \"HEAD\") {\n      res.statusCode = 405;\n      res.setHeader(\"Allow\", \"GET, HEAD\");\n      res.end();\n      return;\n    }\n\n    const etag = `\"${image.staticInfo.hash}\"`;\n    const requestUrl = resolveFarmRequestURL(req, {\n      trustProxy: this.config.server?.trustProxy,\n    });\n    const isVersioned = requestUrl.searchParams.get(\"v\") === image.staticInfo.hash;\n\n    res.setHeader(\"Content-Type\", image.staticInfo.contentType);\n    res.setHeader(\"Content-Length\", image.staticInfo.byteLength);\n    res.setHeader(\"ETag\", etag);\n    res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n    res.setHeader(\n      \"Cache-Control\",\n      isVersioned ? \"public, max-age=31536000, immutable\" : \"public, max-age=0, must-revalidate\",\n    );\n\n    if (matchesFarmIfNoneMatch(req.headers[\"if-none-match\"], etag)) {\n      res.statusCode = 304;\n      res.end();\n      return;\n    }\n\n    res.statusCode = res.statusCode || 200;\n    if (method === \"HEAD\") {\n      res.end();\n      return;\n    }\n\n    res.write(await fs.promises.readFile(image.modulePath));\n    res.end();\n  }\n\n  private async renderRouteErrorBoundary(\n    req: FarmRequest,\n    res: FarmResponse,\n    options: {\n      pathname: string;\n      params: Record<string, string>;\n      layouts: Array<{ modulePath: string }>;\n      searchParamsObject: Record<string, string | string[] | undefined>;\n      middlewareMap: Map<string, any>;\n      middlewareContext: Map<string, any>;\n      pluginExposedContext: Map<string, any>;\n      error: unknown;\n      statusCode: number;\n      errorModulePath: string;\n    },\n  ): Promise<boolean> {\n    try {\n      if (res.headersSent || (res as any).writableEnded) {\n        if (!(res as any).writableEnded) {\n          res.end();\n        }\n        return true;\n      }\n\n      const errorModule = await this.routeManager.loadRouteModule(options.errorModulePath);\n      if (!errorModule.default) {\n        return false;\n      }\n\n      const ErrorComponent = errorModule.default;\n      const errorElement = this.rendererRuntime.createElement(ErrorComponent, {\n        ...createRouteStateProps({\n          params: options.params,\n          searchParamsObject: options.searchParamsObject,\n          path: options.pathname,\n          middlewareMap: options.middlewareMap,\n          pluginExposedContext: options.pluginExposedContext,\n        }),\n        error: options.error,\n        reset: () => {},\n      });\n\n      let wrapped: any = errorElement;\n      const layoutModules = await Promise.all(\n        options.layouts.map((layout) => this.routeManager.loadLayoutModule(layout.modulePath)),\n      );\n      for (let i = layoutModules.length - 1; i >= 0; i--) {\n        const LayoutComponent = layoutModules[i].default;\n        wrapped = this.rendererRuntime.createElement(LayoutComponent, {\n          children: wrapped,\n          params: options.params,\n        });\n      }\n\n      wrapped = await this.wrapWithIntegrationProviders(wrapped);\n\n      const html = await _runWithMiddlewareData(options.middlewareMap, () =>\n        _runWithMiddlewareContext(options.middlewareContext, () =>\n          this.rendererRuntime.renderToString(wrapped),\n        ),\n      );\n      res.statusCode = options.statusCode;\n      res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n      // A PPR shell failure leaves the \"miss\" caching headers (s-maxage,\n      // stale-while-revalidate, X-Farm-PPR) on res. Error responses must not be\n      // cached by shared/CDN caches, so clear them here, matching renderError.\n      res.setHeader(\"Cache-Control\", \"private, no-store\");\n      res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n      if (typeof res.removeHeader === \"function\") {\n        res.removeHeader(\"X-Farm-PPR\");\n      }\n      res.write(this.createFullHTML(html, false, options.pathname));\n      res.end();\n      return true;\n    } catch (renderError) {\n      logger.warn(`Failed to render route-level error boundary: ${renderError}`);\n      return false;\n    }\n  }\n\n  private async renderBufferedSSR(\n    element: unknown,\n    req: FarmRequest,\n    res: FarmResponse,\n    clearMiddlewareData?: () => void,\n    options: {\n      responseHeaders?: Record<string, string> | undefined;\n      routeManifest?: ReturnType<RouteManager[\"generateClientManifest\"]>;\n      onComplete?: (html: string) => void | Promise<void>;\n      captureStaticShell?: boolean;\n      observabilityRoute?: string;\n      onSuspenseHoleDetected?: () => void;\n    } = {},\n  ): Promise<void> {\n    const startedAt = Date.now();\n    const route = options.observabilityRoute || (req as any).__FARM_ROUTE__ || req.url || \"/\";\n    emitFarmEvent({ type: \"render.stream.start\", route });\n    res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n    for (const [key, value] of Object.entries(options.responseHeaders || {})) {\n      res.setHeader(key, value);\n    }\n\n    try {\n      const manifest =\n        options.routeManifest ?? this.routeManager.generateClientManifest(this.config.root);\n      const clientManifest = {\n        clientEntry: \"/@farm/client.js\",\n        routes: {} as Record<string, any>,\n        layouts: {} as Record<string, any>,\n        slots: [] as Array<Record<string, any>>,\n        sharedAssets: [\n          {\n            tag: \"link\",\n            attrs: { rel: \"stylesheet\", href: \"/src/app/globals.css\" },\n          },\n          ...this.collectDevStyleHrefs().map((href) => ({\n            tag: \"link\",\n            attrs: { rel: \"stylesheet\", href },\n          })),\n        ],\n      };\n\n      for (const routeEntry of manifest.routes) {\n        clientManifest.routes[routeEntry.pattern] = {\n          modulePath: routeEntry.modulePath,\n          pattern: routeEntry.pattern,\n          segments: routeEntry.segments,\n          search: routeEntry.search,\n          isClientComponent: routeEntry.isClientComponent,\n          shouldHydrate: routeEntry.shouldHydrate,\n          islandStrategy: routeEntry.islandStrategy,\n          renderPlan: routeEntry.renderPlan,\n          preloads: [routeEntry.modulePath],\n          assets: [],\n        };\n      }\n      for (const layoutEntry of manifest.layouts) {\n        clientManifest.layouts[layoutEntry.pattern] = {\n          modulePath: layoutEntry.modulePath,\n          pattern: layoutEntry.pattern,\n          shouldHydrate: layoutEntry.shouldHydrate,\n          islandStrategy: layoutEntry.islandStrategy,\n          preloads: [layoutEntry.modulePath],\n          assets: [],\n        };\n      }\n      for (const slotEntry of manifest.slots ?? []) {\n        clientManifest.slots.push({\n          ...slotEntry,\n          preloads: [slotEntry.modulePath],\n          assets: [],\n        });\n      }\n\n      const routeSlots = ((req as any).__FARM_ROUTE_SLOTS__ || []).map(\n        (slot: Record<string, any>) => ({\n          ...slot,\n          modulePath:\n            typeof slot.modulePath === \"string\"\n              ? toViteModuleId(slot.modulePath, this.config.root)\n              : slot.modulePath,\n        }),\n      );\n      const deferredProps = prepareDeferredData({\n        page: (req as any).__FARM_PROPS__ || {},\n        slots: routeSlots,\n      });\n      const pagePath = (req as any).__FARM_PAGE_PATH__;\n      const relativePath = pagePath\n        ? toViteModuleId(pagePath, this.config.root)\n        : \"/src/app/page.tsx\";\n      const deploymentId = this.getDeploymentId();\n      const bootstrapScript = `<script>\nwindow.__FARM_PROPS__ = ${serializeInlineValue((deferredProps.data as any).page)};\nwindow.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue((deferredProps.data as any).slots)};\nwindow.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(deploymentId)};\nwindow.__FARM_PATH__ = ${JSON.stringify((req as any).__FARM_ROUTE__ || req.url || \"/\")};\nwindow.__FARM_IS_CLIENT__ = ${JSON.stringify((req as any).__FARM_IS_CLIENT_COMPONENT__ === true)};\nwindow.__FARM_PAGE_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_PAGE_SHOULD_HYDRATE__ === true)};\nwindow.__FARM_LAYOUT_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_LAYOUT_SHOULD_HYDRATE__ === true)};\nwindow.__FARM_LAYOUTS__ = ${JSON.stringify((req as any).__FARM_LAYOUTS__ || [])};\nwindow.__FARM_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_SHOULD_HYDRATE__ === true)};\n${\n  (req as any).__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ === true\n    ? \"window.__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ = true;\"\n    : \"\"\n}\nwindow.__FARM_ISLAND_STRATEGY__ = ${JSON.stringify((req as any).__FARM_ISLAND_STRATEGY__ || \"load\")};\nwindow.__FARM_PAGE_MODULE__ = ${JSON.stringify(relativePath)};\nwindow.__FARM_LOADING_MODULE__ = ${JSON.stringify((req as any).__FARM_LOADING_MODULE_PATH__ || null)};\nwindow.__FARM_MANIFEST__ = ${JSON.stringify(clientManifest)};\nwindow.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};\n${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(getFarmI18nClientSnapshot())};` : \"\"}\n</script>`;\n      const deferredScript = createDeferredHydrationScript(deferredProps.records);\n      const rendererHydrationScript = this.rendererRuntime.generateHydrationScript?.() || \"\";\n      const { html: content, head: rendererHead } =\n        await this.renderElementToDocumentParts(element);\n      const {\n        title,\n        tags: metaTags,\n        hasFavicon,\n        hasExplicitTitle,\n      } = renderMetadataHead((req as any).__FARM_METADATA__, {\n        pathname: getFarmMetadataPathname(req),\n        jsonLd: this.config.agent?.jsonLd,\n      });\n      // A renderer-emitted <title> (e.g. <svelte:head>) must take effect: the\n      // first <title> in a document wins, so the fallback framework title is\n      // suppressed when the renderer supplies one. Explicit metadata titles\n      // still come first and win.\n      const documentTitleTag =\n        !hasExplicitTitle && /<title[\\s>]/i.test(rendererHead) ? \"\" : `<title>${title}</title>`;\n      const rendererHasTitle = /<title[\\s>]/i.test(rendererHead);\n      const i18nSnapshot = getFarmI18nClientSnapshot();\n      const alternateTags = i18nSnapshot\n        ? renderI18nAlternateLinks((req as any).__FARM_ROUTE__ || req.url || \"/\", i18nSnapshot)\n        : \"\";\n      const themeDocument = createFarmThemeDocumentParts(\n        this.config.theme,\n        this.config.basePath,\n        getFarmTheme(),\n      );\n\n      // A layout that returns its own full `<html>` document is composed as the\n      // document (Farm assets merged in) rather than nested inside the shell,\n      // matching the production build and avoiding invalid nested documents.\n      const fullDocument = extractFarmFullDocument(content);\n      let html: string;\n      if (fullDocument) {\n        warnFarmFullDocumentLayout();\n        const shouldReplaceLayoutTitle = hasExplicitTitle || rendererHasTitle;\n        const documentHtml = shouldReplaceLayoutTitle\n          ? removeFarmDocumentTitles(fullDocument)\n          : fullDocument;\n        const effectiveRendererHead = hasExplicitTitle\n          ? removeFarmDocumentTitles(rendererHead)\n          : rendererHead;\n        html = composeFarmFullDocument(documentHtml, {\n          htmlAttributes: `${\n            i18nSnapshot\n              ? ` lang=\"${escapeHtmlAttribute(i18nSnapshot.locale)}\" dir=\"${escapeHtmlAttribute(i18nSnapshot.direction)}\"`\n              : \"\"\n          }${themeDocument.attributes}`,\n          replaceHtmlAttributes: [\n            ...(i18nSnapshot ? [\"lang\", \"dir\"] : []),\n            ...(themeDocument.attributes ? [\"data-theme\"] : []),\n          ],\n          headAssets: [\n            themeDocument.head,\n            `<meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(deploymentId)}\">`,\n            hasExplicitTitle ? documentTitleTag : \"\",\n            metaTags,\n            alternateTags,\n            effectiveRendererHead,\n            renderFarmFontDevHead(this.config.root || process.cwd()),\n            `<link rel=\"stylesheet\" href=\"/src/app/globals.css\">`,\n            ...this.collectDevStyleLinks(),\n            `<script type=\"module\" src=\"/@vite/client\"></script>`,\n            rendererHydrationScript,\n            bootstrapScript,\n          ]\n            .filter(Boolean)\n            .join(\"\\n  \"),\n          bodyFooter: [deferredScript, `<script type=\"module\" src=\"/@farm/client.js\"></script>`]\n            .filter(Boolean)\n            .join(\"\\n  \"),\n        });\n      } else {\n        html = `<!DOCTYPE html>\n<html lang=\"${escapeHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n          i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n        }${themeDocument.attributes}>\n<head>\n  ${themeDocument.head}\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(deploymentId)}\">\n  ${hasFavicon ? \"\" : '<link rel=\"icon\" href=\"data:,\">'}\n  ${documentTitleTag}${metaTags}${alternateTags}${rendererHead ? `\\n  ${rendererHead}` : \"\"}\n  ${renderFarmFontDevHead(this.config.root || process.cwd())}\n  <link rel=\"stylesheet\" href=\"/src/app/globals.css\">${this.collectDevStyleLinks()\n    .map((l) => `\\n  ${l}`)\n    .join(\"\")}\n  <script type=\"module\" src=\"/@vite/client\"></script>\n  ${rendererHydrationScript}\n  ${bootstrapScript}\n</head>\n<body class=\"\">\n  <div id=\"root\">${content}</div>\n  ${deferredScript}\n  <script type=\"module\" src=\"/@farm/client.js\"></script>\n</body>\n</html>`;\n      }\n\n      emitFarmEvent({\n        type: \"render.stream.shellReady\",\n        route,\n        durationMs: Date.now() - startedAt,\n      });\n      if ((req.method || \"GET\").toUpperCase() !== \"HEAD\") res.write(html);\n      res.end();\n      await options.onComplete?.(html);\n      emitFarmEvent({\n        type: \"render.stream.complete\",\n        route,\n        durationMs: Date.now() - startedAt,\n      });\n    } catch (error) {\n      emitFarmEvent({ type: \"render.error\", route, error });\n      throw error;\n    } finally {\n      clearMiddlewareData?.();\n    }\n  }\n\n  private async renderWithSSR(\n    element: any,\n    req: FarmRequest,\n    res: FarmResponse,\n    clearMiddlewareData?: () => void,\n    options: {\n      responseHeaders?: Record<string, string> | undefined;\n      routeManifest?: ReturnType<RouteManager[\"generateClientManifest\"]>;\n      onComplete?: (html: string) => void | Promise<void>;\n      captureStaticShell?: boolean;\n      observabilityRoute?: string;\n      onSuspenseHoleDetected?: () => void;\n    } = {},\n  ): Promise<void> {\n    const renderToPipeableStream = this.rendererRuntime.renderToPipeableStream;\n    const fullDocumentRouteKey =\n      options.observabilityRoute || (req as any).__FARM_ROUTE__ || req.url || \"/\";\n    // A full-document layout can't be composed once the stream's shell is\n    // flushed, so a route previously seen to render one is served through the\n    // buffered path, which produces a valid single document.\n    if (!renderToPipeableStream || fullDocumentRoutes.has(fullDocumentRouteKey)) {\n      return this.renderBufferedSSR(element, req, res, clearMiddlewareData, options);\n    }\n\n    return new Promise((resolve, reject) => {\n      const streamStartTime = Date.now();\n      const observabilityRoute =\n        options.observabilityRoute || (req as any).__FARM_ROUTE__ || req.url || \"/\";\n      const deploymentId = this.getDeploymentId();\n      emitFarmEvent({ type: \"render.stream.start\", route: observabilityRoute });\n      res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n      for (const [key, value] of Object.entries(options.responseHeaders || {})) {\n        res.setHeader(key, value);\n      }\n      const htmlParts: string[] = [];\n      // Splitting a static shell out of the stream requires knowing where the\n      // first dynamic boundary is, and only the renderer that emitted the\n      // markers can say. Without that, every chunk would look static and a\n      // per-request response would be cached as a shared shell, so skip the\n      // shell entirely rather than guess.\n      const findStaticShellBoundary = this.rendererRuntime.findStaticShellBoundary;\n      const staticShellParts: string[] | undefined =\n        options.captureStaticShell && findStaticShellBoundary ? [] : undefined;\n      let staticShellClosed = false;\n      let suspenseHoleEmitted = false;\n      let didError = false;\n\n      // Get the page path for client-side hydration\n      const pagePath = (req as any).__FARM_PAGE_PATH__;\n      const isClientComponent = (req as any).__FARM_IS_CLIENT_COMPONENT__ === true;\n      const relativePath = pagePath\n        ? toViteModuleId(pagePath, this.config.root)\n        : \"/src/app/page.tsx\";\n\n      // Generate manifest for client-side SPA navigation (TanStack Start pattern)\n      // This manifest is inlined in HTML - no separate file or API endpoint\n      const manifest =\n        options.routeManifest ?? this.routeManager.generateClientManifest(this.config.root);\n\n      // Convert to object format for client\n      const clientManifest = {\n        clientEntry: \"/@farm/client.js\",\n        routes: {} as Record<string, any>,\n        layouts: {} as Record<string, any>,\n        slots: [] as Array<Record<string, any>>,\n        sharedAssets: [\n          {\n            tag: \"link\",\n            attrs: { rel: \"stylesheet\", href: \"/src/app/globals.css\" },\n          },\n          ...this.collectDevStyleHrefs().map((href) => ({\n            tag: \"link\",\n            attrs: { rel: \"stylesheet\", href },\n          })),\n        ],\n      };\n\n      // Convert routes array to object keyed by pattern\n      for (const routeEntry of manifest.routes) {\n        clientManifest.routes[routeEntry.pattern] = {\n          modulePath: routeEntry.modulePath,\n          pattern: routeEntry.pattern,\n          segments: routeEntry.segments,\n          search: routeEntry.search,\n          isClientComponent: routeEntry.isClientComponent,\n          shouldHydrate: routeEntry.shouldHydrate,\n          islandStrategy: routeEntry.islandStrategy,\n          renderPlan: routeEntry.renderPlan,\n          preloads: [routeEntry.modulePath],\n          assets: [],\n        };\n      }\n\n      // Convert layouts array to object\n      for (const layoutEntry of manifest.layouts) {\n        clientManifest.layouts[layoutEntry.pattern] = {\n          modulePath: layoutEntry.modulePath,\n          pattern: layoutEntry.pattern,\n          shouldHydrate: layoutEntry.shouldHydrate,\n          islandStrategy: layoutEntry.islandStrategy,\n          preloads: [layoutEntry.modulePath],\n          assets: [],\n        };\n      }\n\n      for (const slotEntry of manifest.slots ?? []) {\n        clientManifest.slots.push({\n          ...slotEntry,\n          preloads: [slotEntry.modulePath],\n          assets: [],\n        });\n      }\n\n      // Inject page props, component info, and MANIFEST for client-side SPA\n      // __FARM_MANIFEST__ contains the full route manifest (TanStack Start pattern)\n      const routeSlotPayload = ((req as any).__FARM_ROUTE_SLOTS__ || []).map(\n        (slot: Record<string, any>) => ({\n          ...slot,\n          modulePath:\n            typeof slot.modulePath === \"string\"\n              ? toViteModuleId(slot.modulePath, this.config.root)\n              : slot.modulePath,\n        }),\n      );\n      const deferredProps = prepareDeferredData({\n        page: (req as any).__FARM_PROPS__ || {},\n        slots: routeSlotPayload,\n      });\n      const propsScript = `<script>\nwindow.__FARM_PROPS__ = ${serializeInlineValue((deferredProps.data as any).page)};\nwindow.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue((deferredProps.data as any).slots)};\nwindow.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(deploymentId)};\nwindow.__FARM_PATH__ = ${JSON.stringify((req as any).__FARM_ROUTE__ || req.url || \"/\")};\nwindow.__FARM_IS_CLIENT__ = ${JSON.stringify(isClientComponent)};\nwindow.__FARM_PAGE_SHOULD_HYDRATE__ = ${JSON.stringify(\n        (req as any).__FARM_PAGE_SHOULD_HYDRATE__ === true,\n      )};\nwindow.__FARM_LAYOUT_SHOULD_HYDRATE__ = ${JSON.stringify(\n        (req as any).__FARM_LAYOUT_SHOULD_HYDRATE__ === true,\n      )};\nwindow.__FARM_LAYOUTS__ = ${JSON.stringify((req as any).__FARM_LAYOUTS__ || [])};\nwindow.__FARM_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_SHOULD_HYDRATE__ === true)};\n${\n  (req as any).__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ === true\n    ? \"window.__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ = true;\"\n    : \"\"\n}\nwindow.__FARM_ISLAND_STRATEGY__ = ${JSON.stringify((req as any).__FARM_ISLAND_STRATEGY__ || \"load\")};\nwindow.__FARM_PAGE_MODULE__ = ${JSON.stringify(relativePath)};\nwindow.__FARM_LOADING_MODULE__ = ${JSON.stringify(\n        (req as any).__FARM_LOADING_MODULE_PATH__ || null,\n      )};\nwindow.__FARM_MANIFEST__ = ${JSON.stringify(clientManifest)};\nwindow.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};\n${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(getFarmI18nClientSnapshot())};` : \"\"}\n</script>`;\n      const hydrationClickQueueScript =\n        isClientComponent ||\n        (req as any).__FARM_SHOULD_HYDRATE__ === true ||\n        (req as any).__FARM_HAS_HYDRATABLE_ROUTE_SLOTS__ === true\n          ? createPreHydrationClickQueueScript()\n          : \"\";\n\n      const {\n        title,\n        tags: metaTags,\n        hasFavicon,\n      } = renderMetadataHead((req as any).__FARM_METADATA__, {\n        pathname: getFarmMetadataPathname(req),\n        jsonLd: this.config.agent?.jsonLd,\n      });\n      const i18nSnapshot = getFarmI18nClientSnapshot();\n      const i18nAlternateTags = i18nSnapshot\n        ? renderI18nAlternateLinks((req as any).__FARM_ROUTE__ || req.url || \"/\", i18nSnapshot)\n        : \"\";\n      const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());\n      const themeDocument = createFarmThemeDocumentParts(\n        this.config.theme,\n        this.config.basePath,\n        getFarmTheme(),\n      );\n\n      // React 19: ensure root is a single DOM node so streaming starts early (avoids Fragment delay)\n      const streamRoot = this.rendererRuntime.createElement(\n        \"div\",\n        { style: { display: \"contents\" } },\n        element,\n      );\n      const devStyleLinks = this.collectDevStyleLinks();\n      const { pipe } = renderToPipeableStream(streamRoot, {\n        onShellReady() {\n          const shellReadyMs = Date.now() - streamStartTime;\n          emitFarmEvent({\n            type: \"render.stream.shellReady\",\n            route: observabilityRoute,\n            durationMs: shellReadyMs,\n          });\n          if (process.env.FARM_VERBOSE) {\n            console.log(`[FARM STREAM] onShellReady at ${shellReadyMs}ms`);\n          }\n          const shell = `<!DOCTYPE html>\n<html lang=\"${escapeHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n            i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n          }${themeDocument.attributes}>\n<head>\n  ${themeDocument.head}\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(deploymentId)}\">\n  ${hasFavicon ? \"\" : '<link rel=\"icon\" href=\"data:,\">'}\n  <title>${title}</title>${metaTags}${i18nAlternateTags}\n  ${fontHead}\n  <link rel=\"stylesheet\" href=\"/src/app/globals.css\" />${devStyleLinks\n    .map((l) => `\\n  ${l}`)\n    .join(\"\")}\n  <script type=\"module\" src=\"/@vite/client\"></script>\n  ${propsScript}\n  ${hydrationClickQueueScript}\n</head>\n<body class=\"\">\n  <div id=\"root\">`;\n          htmlParts.push(shell);\n          staticShellParts?.push(shell);\n\n          let firstChunk = true;\n          let checkedFullDocument = false;\n          const writableStream = new Writable({\n            write(chunk, encoding, callback) {\n              if (firstChunk && process.env.FARM_VERBOSE) {\n                console.log(`[FARM STREAM] first pipe chunk at ${Date.now() - streamStartTime}ms`);\n                firstChunk = false;\n              }\n              const chunkText = Buffer.isBuffer(chunk) ? chunk.toString() : String(chunk);\n              // The shell was already flushed, so this response still nests the\n              // document; record the route so later requests take the buffered\n              // path (which composes it correctly) and warn the developer once.\n              if (!checkedFullDocument) {\n                checkedFullDocument = true;\n                if (opensFarmFullDocument(chunkText)) {\n                  fullDocumentRoutes.add(fullDocumentRouteKey);\n                  warnFarmFullDocumentLayout();\n                }\n              }\n              htmlParts.push(chunkText);\n\n              if (staticShellParts && findStaticShellBoundary && !staticShellClosed) {\n                const dynamicIndex = findStaticShellBoundary(chunkText);\n                if (dynamicIndex >= 0) {\n                  if (dynamicIndex > 0) {\n                    staticShellParts.push(chunkText.slice(0, dynamicIndex));\n                  }\n                  staticShellClosed = true;\n                  if (!suspenseHoleEmitted) {\n                    suspenseHoleEmitted = true;\n                    options.onSuspenseHoleDetected?.();\n                  }\n                } else {\n                  staticShellParts.push(chunkText);\n                }\n              }\n\n              res.write(chunk, encoding, () => {\n                if (typeof (res as any).flush === \"function\") (res as any).flush();\n                callback();\n              });\n            },\n            final(callback) {\n              const suspenseRevealFallback = `<script>(function(){function moveFragment(srcId,placeholderId){var src=document.getElementById(srcId),ph=document.getElementById(placeholderId);if(!src||!ph||!ph.parentNode)return false;while(src.firstChild)ph.parentNode.insertBefore(src.firstChild,ph);ph.parentNode.removeChild(ph);if(src.parentNode)src.parentNode.removeChild(src);return true}function revealBoundary(boundaryId,sectionId){var boundary=document.getElementById(boundaryId),section=document.getElementById(sectionId);if(!boundary||!section||!boundary.parentNode)return false;var start=boundary.previousSibling;if(!start||start.nodeType!==8)return false;var parent=boundary.parentNode;var node=boundary;var depth=0;while(node){if(node.nodeType===8){var data=node.data;if(data===\"/$\"||data===\"/&\"){if(depth===0)break;depth--;}else if(data===\"$\"||data===\"$?\"||data===\"$~\"||data===\"$!\"||data===\"&\"){depth++;}}var next=node.nextSibling;parent.removeChild(node);node=next;}while(section.firstChild)parent.insertBefore(section.firstChild,node);if(section.parentNode)section.parentNode.removeChild(section);start.data=\"$\";return true}var tries=0;var timer=setInterval(function(){var changed=false;document.querySelectorAll('div[id^=\"S:\"]').forEach(function(section){var suffix=section.id.slice(2);changed=moveFragment('S:'+suffix,'P:'+suffix)||changed;});document.querySelectorAll('template[id^=\"B:\"]').forEach(function(boundary){var suffix=boundary.id.slice(2);changed=revealBoundary('B:'+suffix,'S:'+suffix)||changed;});tries++;if(tries>80||(!document.querySelector('template[id^=\"B:\"]')&&!document.querySelector('template[id^=\"P:\"]'))){clearInterval(timer);}},50);})();</script>`;\n              const footer = createDocumentFooter({\n                suspenseRevealFallback,\n                deferredHydrationScript: createDeferredHydrationScript(deferredProps.records),\n              });\n              htmlParts.push(footer);\n              res.write(footer);\n              res.end();\n              callback();\n              if (clearMiddlewareData) {\n                clearMiddlewareData();\n              }\n              if (!didError && options.onComplete) {\n                if (staticShellParts) {\n                  staticShellParts.push(\n                    createDocumentFooter({\n                      suspenseRevealFallback,\n                      refreshPPR: staticShellClosed,\n                    }),\n                  );\n                }\n\n                const cachedHtml = staticShellParts\n                  ? staticShellParts.join(\"\")\n                  : htmlParts.join(\"\");\n                Promise.resolve(options.onComplete(cachedHtml)).catch((error) => {\n                  logger.warn(`Failed to cache PPR shell: ${error}`);\n                });\n              }\n              emitFarmEvent({\n                type: \"render.stream.complete\",\n                route: observabilityRoute,\n                durationMs: Date.now() - streamStartTime,\n              });\n              resolve();\n            },\n          });\n\n          // Queue the shell immediately, then start piping the Suspense stream.\n          // Waiting for the write callback can delay the fallback until the whole\n          // response is ready under some dev-server wrappers.\n          res.write(shell);\n          if (typeof (res as any).flush === \"function\") {\n            (res as any).flush();\n          }\n          pipe(writableStream);\n        },\n        onShellError(error) {\n          didError = true;\n          if (!isWebResponse(error) && !isFarmRedirectError(error) && !isFarmNotFoundError(error)) {\n            logger.error(`SSR shell error: ${error}`);\n            emitFarmEvent({\n              type: \"render.error\",\n              route: observabilityRoute,\n              error,\n            });\n          }\n\n          if (clearMiddlewareData) {\n            clearMiddlewareData();\n          }\n\n          reject(error);\n        },\n        onError(error) {\n          didError = true;\n          if (!isWebResponse(error) && !isFarmRedirectError(error) && !isFarmNotFoundError(error)) {\n            logger.error(`SSR streaming error: ${error}`);\n            emitFarmEvent({\n              type: \"render.error\",\n              route: observabilityRoute,\n              error,\n            });\n          }\n        },\n      });\n    });\n  }\n\n  private async render404(req: FarmRequest, res: FarmResponse): Promise<void> {\n    res.statusCode = 404;\n\n    const pathname = resolveFarmRequestURL(req, {\n      trustProxy: this.config.server?.trustProxy,\n    }).pathname;\n\n    // Agents that navigate in Markdown (a `.md` URL or `Accept: text/markdown`)\n    // get a Markdown error body instead of the HTML not-found shell.\n    const acceptHeader = req.headers.accept;\n    const accept = Array.isArray(acceptHeader) ? acceptHeader.join(\",\") : acceptHeader;\n    if (farmRequestWantsMarkdown(pathname, accept)) {\n      res.setHeader(\"Content-Type\", FARM_MARKDOWN_CONTENT_TYPE);\n      res.setHeader(\"X-Farm-Markdown-Error\", \"404\");\n      res.setHeader(\"Cache-Control\", \"no-store\");\n      res.end(createFarmMarkdownErrorBody(404, pathname, this.config.basePath || \"/\"));\n      return;\n    }\n\n    try {\n      // Look for custom not-found page\n      const appDir = path.join(this.config.root, this.config.srcDir, \"app\");\n      const notFoundExtensions = getFarmRendererComponentExtensions(this.config.renderer);\n      const notFoundPath = resolveFarmNotFoundComponentPath(\n        this.config,\n        getFarmAppDirectories(this.config),\n      );\n\n      if (notFoundPath) {\n        // Use routeManager to load the module (uses Vite's ssrLoadModule in dev)\n        const notFoundModule = await this.routeManager.loadRouteModule(notFoundPath);\n        const NotFoundComponent = notFoundModule.default;\n\n        if (NotFoundComponent) {\n          // Look for root layout\n          let LayoutComponent: any = null;\n          for (const ext of notFoundExtensions) {\n            const layoutPath = path.join(appDir, `layout${ext}`);\n            if (fs.existsSync(layoutPath)) {\n              const layoutModule = await this.routeManager.loadLayoutModule(layoutPath);\n              LayoutComponent = layoutModule.default;\n              break;\n            }\n          }\n\n          // Render the 404 page\n          let element: any = this.rendererRuntime.createElement(NotFoundComponent, { pathname });\n\n          // Wrap with layout if available\n          if (LayoutComponent) {\n            element = this.rendererRuntime.createElement(LayoutComponent, {\n              children: element,\n            });\n          }\n\n          element = await this.wrapWithIntegrationProviders(element);\n\n          // Render to string\n          const content = await this.rendererRuntime.renderToString(element);\n\n          const html = this.createFullHTML(content, false, pathname);\n          res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n          res.write(html);\n          res.end();\n          return;\n        }\n      }\n    } catch (error) {\n      throw new Error(`Failed to render custom 404 page: ${error}`);\n    }\n\n    // Render the shared adaptive fallback when the app does not provide its own page.\n    const homeHref = escapeHtmlAttribute(applyFarmBasePath(\"/\", this.config.basePath));\n    const defaultContent = `<style>${DEFAULT_NOT_FOUND_STYLES}</style><main class=\"farm-default-not-found\" aria-labelledby=\"farm-default-not-found-title\" aria-describedby=\"farm-default-not-found-description\"><div class=\"farm-default-not-found__content\"><h1 id=\"farm-default-not-found-title\" class=\"farm-default-not-found__code\">404</h1><p id=\"farm-default-not-found-description\" class=\"farm-default-not-found__description\">Not found</p><a class=\"farm-default-not-found__home\" href=\"${homeHref}\">GO HOME</a></div></main>`;\n\n    const html = this.createFullHTML(defaultContent, false, pathname);\n    res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n    res.write(html);\n    res.end();\n  }\n\n  private async renderError(\n    req: FarmRequest,\n    res: FarmResponse,\n    error: unknown,\n    statusCode = 500,\n  ): Promise<void> {\n    if (res.headersSent || (res as any).writableEnded) {\n      if (!(res as any).writableEnded) {\n        res.end();\n      }\n      return;\n    }\n\n    res.statusCode = statusCode;\n    const isDev = process.env.NODE_ENV === \"development\";\n    const requestUrl = resolveFarmRequestURL(req, {\n      trustProxy: this.config.server?.trustProxy,\n    });\n    const diagnostics = isDev\n      ? createDefaultErrorDiagnostics(error, this.config.root || process.cwd())\n      : undefined;\n    const statusText = getDefaultErrorStatusText(statusCode);\n    const content = createDefaultErrorMarkup({\n      statusCode,\n      statusText,\n      requestPath: requestUrl.pathname,\n      method: req.method || \"GET\",\n      message: diagnostics?.message,\n      errorName: diagnostics?.name,\n      stack: diagnostics?.stack,\n      sourceFrame: diagnostics?.sourceFrame,\n      development: isDev,\n      farmVersion: FARM_VERSION,\n      nodeVersion: process.version,\n      mode: isDev ? \"development\" : \"production\",\n    });\n\n    const html = this.createFullHTML(\n      content,\n      false,\n      requestUrl.pathname,\n      `${statusCode} - ${statusText}`,\n    );\n\n    res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n    res.setHeader(\"Cache-Control\", \"private, no-store\");\n    res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n    res.write(html);\n    res.end();\n  }\n\n  private createFullHTML(\n    content: string,\n    isClientComponent = false,\n    requestPath = \"/\",\n    metadataHead?: string,\n  ): string {\n    const i18nSnapshot = getFarmI18nClientSnapshot();\n    const clientScript = isClientComponent\n      ? `  <script type=\"module\" src=\"/@farm/client.js\"></script>`\n      : \"\";\n    const integrationManifestScript = `<script>\nwindow.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(this.getDeploymentId())};\nwindow.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};\n${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue(i18nSnapshot)};` : \"\"}\n</script>`;\n    const alternateLinks = i18nSnapshot ? renderI18nAlternateLinks(requestPath, i18nSnapshot) : \"\";\n    const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());\n    const themeDocument = createFarmThemeDocumentParts(\n      this.config.theme,\n      this.config.basePath,\n      getFarmTheme(),\n    );\n    const rendererHydrationScript = this.rendererRuntime.generateHydrationScript?.() || \"\";\n\n    // A layout that returns its own full `<html>` document must not be nested\n    // inside this shell (that yields invalid nested `<html>`/`<head>`/`<body>`).\n    // Compose Farm's managed assets into the layout's document instead, matching\n    // the production build's `hasFullDocument` path.\n    const fullDocument = extractFarmFullDocument(content);\n    if (fullDocument) {\n      warnFarmFullDocumentLayout();\n      return composeFarmFullDocument(\n        metadataHead ? removeFarmDocumentTitles(fullDocument) : fullDocument,\n        {\n          htmlAttributes: `${\n            i18nSnapshot\n              ? ` lang=\"${escapeHtmlAttribute(i18nSnapshot.locale)}\" dir=\"${escapeHtmlAttribute(i18nSnapshot.direction)}\"`\n              : \"\"\n          }${themeDocument.attributes}`,\n          replaceHtmlAttributes: [\n            ...(i18nSnapshot ? [\"lang\", \"dir\"] : []),\n            ...(themeDocument.attributes ? [\"data-theme\"] : []),\n          ],\n          headAssets: [\n            themeDocument.head,\n            `<meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(this.getDeploymentId())}\">`,\n            metadataHead,\n            alternateLinks,\n            fontHead,\n            `<link rel=\"stylesheet\" href=\"/src/app/globals.css\" />`,\n            ...this.collectDevStyleLinks(),\n            `<script type=\"module\" src=\"/@vite/client\"></script>`,\n            rendererHydrationScript,\n            integrationManifestScript,\n          ]\n            .filter(Boolean)\n            .join(\"\\n  \"),\n          bodyFooter: clientScript.trim(),\n        },\n      );\n    }\n\n    return `<!DOCTYPE html>\n<html lang=\"${escapeHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n      i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n    }${themeDocument.attributes}>\n<head>\n  ${themeDocument.head}\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(this.getDeploymentId())}\">\n  ${metadataHead ?? '<link rel=\"icon\" href=\"data:,\">\\n  <title>Farm.js App</title>'}${alternateLinks}\n  ${fontHead}\n  <link rel=\"stylesheet\" href=\"/src/app/globals.css\" />${this.collectDevStyleLinks()\n    .map((l) => `\\n  ${l}`)\n    .join(\"\")}\n  <script type=\"module\" src=\"/@vite/client\"></script>\n  ${rendererHydrationScript}\n  ${integrationManifestScript}\n</head>\n<body class=\"\">\n  <div id=\"root\">${content}</div>\n${clientScript}\n</body>\n</html>`;\n  }\n\n  private applyDeploymentHeaders(req: FarmRequest, res: FarmResponse): void {\n    const deploymentId = this.getDeploymentId();\n    res.setHeader(FARM_DEPLOYMENT_ID_HEADER, deploymentId);\n    if ((req.method || \"GET\").toUpperCase() !== \"GET\") return;\n\n    const forwardedProto = req.headers[\"x-forwarded-proto\"];\n    const isSecure =\n      (Array.isArray(forwardedProto) ? forwardedProto[0] : forwardedProto)\n        ?.split(\",\")[0]\n        ?.trim() === \"https\" || Boolean((req.socket as any)?.encrypted);\n    const cookie = createFarmDeploymentCookie(deploymentId, this.config.basePath || \"/\", isSecure);\n    const existing = res.getHeader(\"Set-Cookie\");\n\n    if (Array.isArray(existing)) {\n      res.setHeader(\"Set-Cookie\", [...existing, cookie]);\n    } else if (existing) {\n      res.setHeader(\"Set-Cookie\", [String(existing), cookie]);\n    } else {\n      res.setHeader(\"Set-Cookie\", cookie);\n    }\n  }\n\n  private getDeploymentId(): string {\n    return this.config.deploymentId || \"development\";\n  }\n}\n","export const DEFAULT_FARM_DEVTOOLS_SHORTCUT = \"mod+shift+.\";\nexport const FARM_DEVTOOLS_PATH = \"/__farm/devtools\";\nexport const FARM_DEVTOOLS_LAUNCH_PARAM = \"__farm_devtools\";\n\n/**\n * Configuration for the built-in DevTools dashboard. The dashboard is deprecated in favor\n * of the `@farm.js/devtools` plugin, which reuses this configuration for enablement and\n * the keyboard shortcut. Both options keep working while the built-in UI remains available.\n */\nexport interface FarmDevtoolsConfig {\n  /** Enable the development-only DevTools UI and runtime endpoints. */\n  enabled?: boolean;\n  /** Keyboard shortcut used to toggle DevTools, or false to disable the shortcut. */\n  shortcut?: string | false;\n}\n\nexport type FarmDevtoolsUserConfig = boolean | FarmDevtoolsConfig;\n\nexport interface ResolvedFarmDevtoolsConfig {\n  enabled: boolean;\n  shortcut: string | false;\n}\n\nexport function resolveFarmDevtoolsConfig(\n  config: FarmDevtoolsUserConfig | ResolvedFarmDevtoolsConfig | undefined,\n  mode: \"development\" | \"production\" = \"development\",\n): ResolvedFarmDevtoolsConfig {\n  if (mode !== \"development\" || config === false) {\n    return { enabled: false, shortcut: false };\n  }\n\n  const options = config === true || config === undefined ? {} : config;\n  const enabled = options.enabled ?? true;\n\n  if (!enabled) {\n    return { enabled: false, shortcut: false };\n  }\n\n  const shortcut =\n    typeof options.shortcut === \"string\" && options.shortcut.trim()\n      ? options.shortcut\n          .toLowerCase()\n          .split(\"+\")\n          .map((part) => part.trim())\n          .filter(Boolean)\n          .join(\"+\")\n      : options.shortcut === false\n        ? false\n        : DEFAULT_FARM_DEVTOOLS_SHORTCUT;\n\n  return { enabled: true, shortcut };\n}\n","export type FarmBuildActivityPosition = \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\nexport interface FarmDevIndicatorsConfig {\n  /** Show build and HMR activity in the browser during development. */\n  buildActivity?: boolean;\n  /** Corner used by the build activity indicator. */\n  buildActivityPosition?: FarmBuildActivityPosition;\n}\n\nexport interface ResolvedFarmDevIndicatorsConfig {\n  buildActivity: boolean;\n  buildActivityPosition: FarmBuildActivityPosition;\n}\n\nexport function resolveFarmDevIndicatorsConfig(\n  config: FarmDevIndicatorsConfig | undefined,\n  mode: \"development\" | \"production\" = \"development\",\n): ResolvedFarmDevIndicatorsConfig {\n  return {\n    buildActivity: mode === \"development\" && (config?.buildActivity ?? true),\n    buildActivityPosition: config?.buildActivityPosition ?? \"bottom-right\",\n  };\n}\n\nexport function generateFarmDevIndicatorsClientRuntime(\n  config: ResolvedFarmDevIndicatorsConfig,\n): string {\n  if (!config.buildActivity) return \"\";\n\n  const position = {\n    \"bottom-right\": \"right: 16px; bottom: 16px;\",\n    \"bottom-left\": \"left: 16px; bottom: 16px;\",\n    \"top-right\": \"right: 16px; top: 16px;\",\n    \"top-left\": \"left: 16px; top: 16px;\",\n  }[config.buildActivityPosition];\n  const styles = `\n    #__farm_build_activity__ {\n      position: fixed;\n      ${position}\n      z-index: 2147483645;\n      display: inline-flex;\n      align-items: center;\n      gap: 7px;\n      min-height: 30px;\n      padding: 0 10px;\n      border: 1px solid rgb(255 255 255 / 0.16);\n      border-radius: 999px;\n      background: rgb(17 17 17 / 0.9);\n      box-shadow: 0 8px 24px rgb(0 0 0 / 0.2);\n      color: rgb(250 250 250);\n      font: 500 12px/1 ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n      letter-spacing: -0.01em;\n      opacity: 0;\n      pointer-events: none;\n      transform: translateY(4px);\n      transition: opacity 120ms ease-out, transform 120ms ease-out;\n    }\n    #__farm_build_activity__[data-visible=\"true\"] {\n      opacity: 1;\n      transform: translateY(0);\n    }\n    #__farm_build_activity__::before {\n      width: 8px;\n      height: 8px;\n      border: 1.5px solid rgb(255 255 255 / 0.32);\n      border-top-color: currentColor;\n      border-radius: 50%;\n      content: \"\";\n      animation: farm-build-activity-spin 650ms linear infinite;\n    }\n    #__farm_build_activity__[data-state=\"ready\"]::before {\n      border-color: currentColor;\n      animation: none;\n    }\n    #__farm_build_activity__[data-state=\"error\"] {\n      border-color: rgb(248 113 113 / 0.55);\n      color: rgb(254 202 202);\n    }\n    #__farm_build_activity__[data-state=\"error\"]::before {\n      border-color: currentColor;\n      animation: none;\n    }\n    @keyframes farm-build-activity-spin { to { transform: rotate(360deg); } }\n    @media (prefers-reduced-motion: reduce) {\n      #__farm_build_activity__ { transition: none; }\n      #__farm_build_activity__::before { animation-duration: 1.4s; }\n    }\n  `;\n\n  return `\nif (import.meta.hot) {\n  (() => {\n    const hot = import.meta.hot;\n    const indicatorId = \"__farm_build_activity__\";\n    const styleId = \"__farm_build_activity_styles__\";\n    const runtimeKey = \"__FARM_BUILD_ACTIVITY_RUNTIME__\";\n    const reloadMarker = \"__FARM_BUILD_ACTIVITY_RELOADING__\";\n    let hideTimer;\n\n    const ensureIndicator = () => {\n      let style = document.getElementById(styleId);\n      if (!style) {\n        style = document.createElement(\"style\");\n        style.id = styleId;\n        style.textContent = ${JSON.stringify(styles)};\n        document.head.appendChild(style);\n      }\n\n      let indicator = document.getElementById(indicatorId);\n      if (!indicator) {\n        indicator = document.createElement(\"div\");\n        indicator.id = indicatorId;\n        indicator.setAttribute(\"role\", \"status\");\n        indicator.setAttribute(\"aria-live\", \"polite\");\n        document.body.appendChild(indicator);\n      }\n      return indicator;\n    };\n\n    const show = (state, label) => {\n      window.clearTimeout(hideTimer);\n      const indicator = ensureIndicator();\n      indicator.dataset.state = state;\n      indicator.dataset.visible = \"true\";\n      indicator.textContent = label;\n    };\n    const hide = () => {\n      const indicator = document.getElementById(indicatorId);\n      if (indicator) indicator.dataset.visible = \"false\";\n    };\n    const onBeforeUpdate = () => show(\"building\", \"Farm updating\");\n    const onAfterUpdate = () => {\n      show(\"ready\", \"Farm ready\");\n      hideTimer = window.setTimeout(hide, 500);\n    };\n    const onError = () => show(\"error\", \"Build failed\");\n    const onBeforeFullReload = () => {\n      try {\n        window.sessionStorage.setItem(reloadMarker, \"1\");\n      } catch {}\n      show(\"building\", \"Farm updating\");\n    };\n\n    window[runtimeKey]?.dispose?.();\n    ensureIndicator();\n    let completedReload = false;\n    try {\n      completedReload = window.sessionStorage.getItem(reloadMarker) === \"1\";\n      window.sessionStorage.removeItem(reloadMarker);\n    } catch {}\n    if (completedReload) onAfterUpdate();\n    else hide();\n    hot.on(\"vite:beforeUpdate\", onBeforeUpdate);\n    hot.on(\"vite:afterUpdate\", onAfterUpdate);\n    hot.on(\"vite:error\", onError);\n    hot.on(\"vite:beforeFullReload\", onBeforeFullReload);\n    window[runtimeKey] = {\n      dispose() {\n        window.clearTimeout(hideTimer);\n        hot.off(\"vite:beforeUpdate\", onBeforeUpdate);\n        hot.off(\"vite:afterUpdate\", onAfterUpdate);\n        hot.off(\"vite:error\", onError);\n        hot.off(\"vite:beforeFullReload\", onBeforeFullReload);\n        document.getElementById(indicatorId)?.remove();\n      },\n    };\n  })();\n}\n`;\n}\n","import { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmIntegration } from \"./integrations\";\n\nexport interface FarmAuthEmailAndPasswordConfig {\n  /** Require a verified email before creating a session. @default false */\n  requireEmailVerification?: boolean;\n  /** Smallest accepted password length. @default 8 */\n  minPasswordLength?: number;\n  /** Largest accepted password length. @default 128 */\n  maxPasswordLength?: number;\n}\n\nexport interface FarmAuthSessionConfig {\n  /** Session lifetime in seconds. @default 604800 */\n  expiresIn?: number;\n  /** Session refresh interval in seconds. @default 86400 */\n  updateAge?: number;\n}\n\nexport interface FarmAuthDatabaseConfig {\n  /**\n   * Postgres connection string. Defaults to DATABASE_URL.\n   * Local development falls back to SQLite when no URL is present.\n   */\n  url?: string;\n  /** Local SQLite path. @default \".farm/auth.sqlite\" */\n  path?: string;\n  /** Automatically update the auth schema in development. @default true */\n  migrateInDevelopment?: boolean;\n}\n\nexport interface FarmAuthConfig {\n  /** Set false to disable auth without removing its configuration. @default true */\n  enabled?: boolean;\n  /** Display name used by authentication emails and metadata. */\n  appName?: string;\n  /** Route prefix for the auth endpoints. @default \"/api/auth\" */\n  basePath?: string;\n  /**\n   * Email/password authentication. It is enabled by default; set false to\n   * disable it when adding another sign-in method.\n   */\n  emailAndPassword?: boolean | FarmAuthEmailAndPasswordConfig;\n  session?: FarmAuthSessionConfig;\n  database?: FarmAuthDatabaseConfig;\n}\n\nexport type FarmAuthUserConfig = boolean | FarmAuthConfig;\n\nexport interface ResolvedFarmAuthConfig {\n  enabled: boolean;\n  appName?: string;\n  basePath: string;\n  emailAndPassword: {\n    enabled: boolean;\n    requireEmailVerification: boolean;\n    minPasswordLength: number;\n    maxPasswordLength: number;\n  };\n  session: {\n    expiresIn: number;\n    updateAge: number;\n  };\n  database: {\n    url?: string;\n    path: string;\n    migrateInDevelopment: boolean;\n  };\n}\n\ninterface FarmAuthRuntimeModule {\n  createFarmAuthIntegration(\n    config: ResolvedFarmAuthConfig,\n    options: {\n      root: string;\n      mode: \"development\" | \"production\";\n    },\n  ): FarmIntegration;\n}\n\nexport function resolveFarmAuthConfig(\n  input: FarmAuthUserConfig | undefined,\n): ResolvedFarmAuthConfig {\n  const config = input === true ? {} : input && typeof input === \"object\" ? input : {};\n  const passwordConfig = typeof config.emailAndPassword === \"object\" ? config.emailAndPassword : {};\n\n  const resolved: ResolvedFarmAuthConfig = {\n    enabled: input !== undefined && input !== false && config.enabled !== false,\n    appName: config.appName,\n    basePath: normalizeBasePath(config.basePath),\n    emailAndPassword: {\n      enabled: config.emailAndPassword !== false,\n      requireEmailVerification: passwordConfig.requireEmailVerification ?? false,\n      minPasswordLength: passwordConfig.minPasswordLength ?? 8,\n      maxPasswordLength: passwordConfig.maxPasswordLength ?? 128,\n    },\n    session: {\n      expiresIn: config.session?.expiresIn ?? 60 * 60 * 24 * 7,\n      updateAge: config.session?.updateAge ?? 60 * 60 * 24,\n    },\n    database: {\n      url: config.database?.url,\n      path: config.database?.path || \".farm/auth.sqlite\",\n      migrateInDevelopment: config.database?.migrateInDevelopment ?? true,\n    },\n  };\n\n  validateFarmAuthConfig(resolved);\n  return resolved;\n}\n\nexport async function resolveFarmAuthIntegration(\n  config: ResolvedFarmAuthConfig,\n  options: {\n    root: string;\n    mode: \"development\" | \"production\";\n  },\n): Promise<FarmIntegration | undefined> {\n  if (!config.enabled) return undefined;\n\n  const root = path.resolve(options.root);\n  let modulePath: string;\n  try {\n    const resolveFromApp = createRequire(path.join(root, \"package.json\"));\n    modulePath = resolveFromApp.resolve(\"@farm.js/auth/internal\");\n  } catch {\n    throw new Error(\n      \"The `auth` config requires @farm.js/auth. Install it with `pnpm add @farm.js/auth` and try again.\",\n    );\n  }\n\n  const runtime = (await import(\n    /* @vite-ignore */ pathToFileURL(modulePath).href\n  )) as FarmAuthRuntimeModule;\n  if (typeof runtime.createFarmAuthIntegration !== \"function\") {\n    throw new Error(\n      \"The installed @farm.js/auth package is incompatible with this version of @farm.js/core.\",\n    );\n  }\n\n  return runtime.createFarmAuthIntegration(config, {\n    ...options,\n    root,\n  });\n}\n\nfunction normalizeBasePath(value: string | undefined): string {\n  const route = (value || \"/api/auth\").trim();\n  if (!route) return \"/api/auth\";\n  assertStableBasePath(route);\n  const withLeadingSlash = route.startsWith(\"/\") ? route : `/${route}`;\n  const normalized = withLeadingSlash.replace(/\\/+/g, \"/\").replace(/\\/+$/, \"\");\n  return normalized || \"/api/auth\";\n}\n\nfunction assertStableBasePath(route: string): void {\n  if (route.includes(\"?\") || route.includes(\"#\")) {\n    throw new Error(\"auth.basePath cannot contain a query string or fragment.\");\n  }\n  if (route.startsWith(\"//\") || /^[a-z][a-z\\d+.-]*:\\/\\//i.test(route)) {\n    throw new Error('auth.basePath must be an application pathname such as \"/api/auth\".');\n  }\n  if (hasUnstablePathCharacters(route)) {\n    throw new Error(\"auth.basePath cannot contain backslashes or control characters.\");\n  }\n  for (const segment of route.split(\"/\")) {\n    let decoded = segment;\n    try {\n      decoded = decodeURIComponent(segment);\n    } catch {\n      // Malformed escapes remain literal URL pathname segments.\n    }\n    if (hasUnstablePathCharacters(decoded) || decoded.includes(\"/\")) {\n      throw new Error(\"auth.basePath cannot contain encoded path separators.\");\n    }\n    if (decoded === \".\" || decoded === \"..\") {\n      throw new Error('auth.basePath cannot contain \".\" or \"..\" path segments.');\n    }\n  }\n}\n\nfunction hasUnstablePathCharacters(value: string): boolean {\n  return (\n    value.includes(\"\\\\\") ||\n    Array.from(value).some((character) => {\n      const code = character.charCodeAt(0);\n      return code <= 31 || (code >= 127 && code <= 159);\n    })\n  );\n}\n\nfunction validateFarmAuthConfig(config: ResolvedFarmAuthConfig): void {\n  const { minPasswordLength, maxPasswordLength } = config.emailAndPassword;\n  if (!Number.isInteger(minPasswordLength) || minPasswordLength < 1) {\n    throw new Error(\"auth.emailAndPassword.minPasswordLength must be a positive integer.\");\n  }\n  if (!Number.isInteger(maxPasswordLength) || maxPasswordLength < minPasswordLength) {\n    throw new Error(\n      \"auth.emailAndPassword.maxPasswordLength must be an integer greater than or equal to minPasswordLength.\",\n    );\n  }\n  if (!Number.isInteger(config.session.expiresIn) || config.session.expiresIn < 1) {\n    throw new Error(\"auth.session.expiresIn must be a positive integer.\");\n  }\n  if (!Number.isInteger(config.session.updateAge) || config.session.updateAge < 0) {\n    throw new Error(\"auth.session.updateAge must be a non-negative integer.\");\n  }\n}\n","export type FarmPreloadMode = \"warn\" | \"enforce\";\n\nexport interface FarmPreloadUserConfig {\n  /** Report excess hints or remove the lower-priority hints. @default \"enforce\" */\n  mode?: FarmPreloadMode;\n  /** Maximum image preload hints per document. @default 1 */\n  maxImages?: number;\n  /** Maximum font preload hints per document. @default 2 */\n  maxFonts?: number;\n}\n\nexport interface ResolvedFarmPreloadConfig {\n  mode: FarmPreloadMode;\n  maxImages: number;\n  maxFonts: number;\n}\n\nexport interface FarmPerformanceConfig {\n  preload?: FarmPreloadUserConfig;\n}\n\nexport interface ResolvedFarmPerformanceConfig {\n  preload: ResolvedFarmPreloadConfig;\n}\n\nexport type FarmPreloadKind = \"image\" | \"font\";\n\nexport interface FarmPreloadBudgetWarning {\n  kind: FarmPreloadKind;\n  count: number;\n  budget: number;\n  removed: number;\n}\n\nexport interface FarmManagedPreloads {\n  value: string;\n  warnings: FarmPreloadBudgetWarning[];\n}\n\nexport interface FarmManagedDocumentPreloads {\n  html: string;\n  linkHeader: string;\n  warnings: FarmPreloadBudgetWarning[];\n}\n\nconst DEFAULT_PRELOAD_CONFIG: ResolvedFarmPreloadConfig = {\n  mode: \"enforce\",\n  maxImages: 1,\n  maxFonts: 2,\n};\n\nconst reportedWarnings = new Map<string, number>();\nconst PRELOAD_WARNING_TTL_MS = 60_000;\nconst MAX_REPORTED_PRELOAD_WARNINGS = 256;\n\nexport function resolveFarmPerformanceConfig(\n  config: FarmPerformanceConfig | undefined,\n): ResolvedFarmPerformanceConfig {\n  return {\n    preload: {\n      mode: config?.preload?.mode === \"warn\" ? \"warn\" : \"enforce\",\n      maxImages: normalizeBudget(config?.preload?.maxImages, DEFAULT_PRELOAD_CONFIG.maxImages),\n      maxFonts: normalizeBudget(config?.preload?.maxFonts, DEFAULT_PRELOAD_CONFIG.maxFonts),\n    },\n  };\n}\n\n/**\n * Apply image and font budgets to HTML preload elements. High-priority image\n * hints are retained before ordinary hints, making an explicitly preloaded LCP\n * image the winner when a document contains too many React-generated hints.\n */\nexport function manageFarmHtmlPreloads(\n  html: string,\n  config: ResolvedFarmPreloadConfig,\n): FarmManagedPreloads {\n  const elements = findHtmlLinkElements(html);\n  const candidates = elements.flatMap((element, index) => {\n    const kind = getHtmlPreloadKind(element.value);\n    return kind\n      ? [\n          {\n            index,\n            kind,\n            highPriority:\n              readHtmlAttribute(element.value, \"fetchpriority\")?.toLowerCase() === \"high\",\n          },\n        ]\n      : [];\n  });\n\n  const budget = selectPreloadsWithinBudget(candidates, config);\n  if (config.mode === \"warn\" || budget.removed.size === 0) {\n    return { value: html, warnings: budget.warnings };\n  }\n\n  return {\n    value: removeHtmlLinkElements(html, elements, budget.removed),\n    warnings: budget.warnings,\n  };\n}\n\n/** Apply the same budgets to HTTP Link preload hints, including Farm fonts. */\nexport function manageFarmLinkHeaderPreloads(\n  value: string,\n  config: ResolvedFarmPreloadConfig,\n): FarmManagedPreloads {\n  if (!value) return { value, warnings: [] };\n\n  const links = splitLinkHeader(value);\n  const candidates = links.flatMap((link, index) => {\n    const kind = getLinkHeaderPreloadKind(link);\n    return kind\n      ? [\n          {\n            index,\n            kind,\n            highPriority: getLinkHeaderParameter(link, \"fetchpriority\")?.toLowerCase() === \"high\",\n          },\n        ]\n      : [];\n  });\n  const budget = selectPreloadsWithinBudget(candidates, config);\n\n  return {\n    value:\n      config.mode === \"enforce\"\n        ? links.filter((_, index) => !budget.removed.has(index)).join(\", \")\n        : value,\n    warnings: budget.warnings,\n  };\n}\n\n/** Apply a single document budget across HTML and HTTP Link header hints. */\nexport function manageFarmDocumentPreloads(\n  html: string,\n  linkHeader: string,\n  config: ResolvedFarmPreloadConfig,\n): FarmManagedDocumentPreloads {\n  const elements = findHtmlLinkElements(html);\n  const links = linkHeader ? splitLinkHeader(linkHeader) : [];\n  const headerOffset = elements.length;\n  const candidates: PreloadCandidate[] = [];\n\n  for (const [index, element] of elements.entries()) {\n    const kind = getHtmlPreloadKind(element.value);\n    if (!kind) continue;\n    candidates.push({\n      index,\n      kind,\n      highPriority: readHtmlAttribute(element.value, \"fetchpriority\")?.toLowerCase() === \"high\",\n    });\n  }\n  for (const [index, link] of links.entries()) {\n    const kind = getLinkHeaderPreloadKind(link);\n    if (!kind) continue;\n    candidates.push({\n      index: headerOffset + index,\n      kind,\n      highPriority: getLinkHeaderParameter(link, \"fetchpriority\")?.toLowerCase() === \"high\",\n    });\n  }\n\n  const budget = selectPreloadsWithinBudget(candidates, config);\n  if (config.mode === \"warn\" || budget.removed.size === 0) {\n    return { html, linkHeader, warnings: budget.warnings };\n  }\n\n  return {\n    html: removeHtmlLinkElements(html, elements, budget.removed),\n    linkHeader: links.filter((_, index) => !budget.removed.has(headerOffset + index)).join(\", \"),\n    warnings: budget.warnings,\n  };\n}\n\n/** Rate-limit identical route-and-budget warnings within a server process. */\nexport function reportFarmPreloadWarnings(\n  warnings: FarmPreloadBudgetWarning[],\n  context = \"the rendered document\",\n): void {\n  const now = Date.now();\n  for (const [key, reportedAt] of reportedWarnings) {\n    if (now - reportedAt >= PRELOAD_WARNING_TTL_MS) reportedWarnings.delete(key);\n  }\n\n  for (const warning of warnings) {\n    const key = `${context}:${warning.kind}:${warning.count}:${warning.budget}:${warning.removed}`;\n    const reportedAt = reportedWarnings.get(key);\n    if (reportedAt !== undefined && now - reportedAt < PRELOAD_WARNING_TTL_MS) continue;\n    reportedWarnings.set(key, now);\n    while (reportedWarnings.size > MAX_REPORTED_PRELOAD_WARNINGS) {\n      const oldest = reportedWarnings.keys().next().value;\n      if (oldest === undefined) break;\n      reportedWarnings.delete(oldest);\n    }\n\n    const action = warning.removed > 0 ? ` Removed ${warning.removed} lower-priority hint(s).` : \"\";\n    const recommendation =\n      warning.kind === \"image\"\n        ? ' Mark only the LCP image with `preload` or `fetchPriority=\"high\"`.'\n        : \" Set `preload: false` on fonts that are not required above the fold.\";\n    console.warn(\n      `[Farm.js] ${context} emitted ${warning.count} ${warning.kind} preload hints ` +\n        `(budget: ${warning.budget}).${action}${recommendation}`,\n    );\n  }\n}\n\nexport function clearReportedFarmPreloadWarnings(): void {\n  reportedWarnings.clear();\n}\n\ninterface PreloadCandidate {\n  index: number;\n  kind: FarmPreloadKind;\n  highPriority: boolean;\n}\n\nfunction selectPreloadsWithinBudget(\n  candidates: PreloadCandidate[],\n  config: ResolvedFarmPreloadConfig,\n): { removed: Set<number>; warnings: FarmPreloadBudgetWarning[] } {\n  const removed = new Set<number>();\n  const warnings: FarmPreloadBudgetWarning[] = [];\n\n  for (const kind of [\"image\", \"font\"] as const) {\n    const matching = candidates.filter((candidate) => candidate.kind === kind);\n    const limit = kind === \"image\" ? config.maxImages : config.maxFonts;\n    if (matching.length <= limit) continue;\n\n    const retained = new Set(\n      [...matching]\n        .sort(\n          (left, right) =>\n            Number(right.highPriority) - Number(left.highPriority) || left.index - right.index,\n        )\n        .slice(0, limit)\n        .map((candidate) => candidate.index),\n    );\n\n    if (config.mode === \"enforce\") {\n      for (const candidate of matching) {\n        if (!retained.has(candidate.index)) removed.add(candidate.index);\n      }\n    }\n\n    warnings.push({\n      kind,\n      count: matching.length,\n      budget: limit,\n      removed: config.mode === \"enforce\" ? matching.length - retained.size : 0,\n    });\n  }\n\n  return { removed, warnings };\n}\n\nfunction getHtmlPreloadKind(link: string): FarmPreloadKind | undefined {\n  const rel = readHtmlAttribute(link, \"rel\")?.toLowerCase().split(/\\s+/) || [];\n  if (!rel.includes(\"preload\")) return undefined;\n  return normalizePreloadKind(readHtmlAttribute(link, \"as\"));\n}\n\nfunction getLinkHeaderPreloadKind(link: string): FarmPreloadKind | undefined {\n  const relations = getLinkHeaderParameter(link, \"rel\")?.toLowerCase().split(/\\s+/) ?? [];\n  if (!relations.includes(\"preload\")) return undefined;\n  return normalizePreloadKind(getLinkHeaderParameter(link, \"as\"));\n}\n\nfunction getLinkHeaderParameter(link: string, name: string): string | undefined {\n  const uriEnd = link.indexOf(\">\");\n  if (uriEnd === -1) return undefined;\n\n  for (const parameter of splitLinkParameters(link.slice(uriEnd + 1))) {\n    const separator = parameter.indexOf(\"=\");\n    const parameterName = (separator === -1 ? parameter : parameter.slice(0, separator))\n      .trim()\n      .toLowerCase();\n    if (parameterName !== name.toLowerCase() || separator === -1) continue;\n    const rawValue = parameter.slice(separator + 1).trim();\n    if (rawValue.startsWith('\"') && rawValue.endsWith('\"')) {\n      return rawValue.slice(1, -1).replace(/\\\\([\\\\\"])/g, \"$1\");\n    }\n    return rawValue;\n  }\n  return undefined;\n}\n\nfunction splitLinkParameters(value: string): string[] {\n  const parameters: string[] = [];\n  let start = 0;\n  let quoted = false;\n  for (let index = 0; index < value.length; index += 1) {\n    const character = value[index];\n    if (character === '\"' && !isEscaped(value, index)) quoted = !quoted;\n    else if (character === \";\" && !quoted) {\n      const parameter = value.slice(start, index).trim();\n      if (parameter) parameters.push(parameter);\n      start = index + 1;\n    }\n  }\n  const parameter = value.slice(start).trim();\n  if (parameter) parameters.push(parameter);\n  return parameters;\n}\n\nfunction normalizePreloadKind(value: string | undefined): FarmPreloadKind | undefined {\n  const normalized = value?.toLowerCase();\n  return normalized === \"image\" || normalized === \"font\" ? normalized : undefined;\n}\n\nfunction readHtmlAttribute(element: string, name: string): string | undefined {\n  const match = element.match(\n    new RegExp(`\\\\s${name}\\\\s*=\\\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\\\s>]+))`, \"i\"),\n  );\n  return match?.[1] ?? match?.[2] ?? match?.[3];\n}\n\ninterface HtmlLinkElement {\n  start: number;\n  end: number;\n  value: string;\n}\n\nfunction findHtmlLinkElements(html: string): HtmlLinkElement[] {\n  const elements: HtmlLinkElement[] = [];\n  const lowerHtml = html.toLowerCase();\n  let cursor = 0;\n\n  while (cursor < html.length) {\n    const start = html.indexOf(\"<\", cursor);\n    if (start === -1) break;\n\n    if (lowerHtml.startsWith(\"<!--\", start)) {\n      const commentEnd = lowerHtml.indexOf(\"-->\", start + 4);\n      cursor = commentEnd === -1 ? html.length : commentEnd + 3;\n      continue;\n    }\n\n    const rawText = lowerHtml\n      .slice(start)\n      .match(/^<(script|style|template|textarea|title|noscript|svg)(?=[\\s/>])/);\n    if (rawText?.[1]) {\n      const openingEnd = findHtmlTagEnd(html, start);\n      if (openingEnd === -1) break;\n      if (rawText[1] === \"svg\" && html[openingEnd - 2] === \"/\") {\n        cursor = openingEnd;\n        continue;\n      }\n      const closingStart = findHtmlClosingTag(lowerHtml, rawText[1], openingEnd);\n      if (closingStart === -1) {\n        cursor = html.length;\n        continue;\n      }\n      const closingEnd = findHtmlTagEnd(html, closingStart);\n      cursor = closingEnd === -1 ? html.length : closingEnd;\n      continue;\n    }\n\n    if (/^<link(?=[\\s/>])/i.test(html.slice(start))) {\n      const end = findHtmlTagEnd(html, start);\n      if (end === -1) break;\n      elements.push({ start, end, value: html.slice(start, end) });\n      cursor = end;\n      continue;\n    }\n\n    if (/^<\\/?[A-Za-z][\\w:-]*(?=[\\s/>])/.test(html.slice(start))) {\n      const end = findHtmlTagEnd(html, start);\n      cursor = end === -1 ? html.length : end;\n      continue;\n    }\n\n    cursor = start + 1;\n  }\n\n  return elements;\n}\n\nfunction findHtmlClosingTag(html: string, tagName: string, start: number): number {\n  const prefix = `</${tagName}`;\n  let candidate = html.indexOf(prefix, start);\n  while (candidate !== -1) {\n    const boundary = html[candidate + prefix.length];\n    if (boundary === \">\" || boundary === \"/\" || /\\s/.test(boundary ?? \"\")) return candidate;\n    candidate = html.indexOf(prefix, candidate + prefix.length);\n  }\n  return -1;\n}\n\nfunction findHtmlTagEnd(html: string, start: number): number {\n  let quote: '\"' | \"'\" | undefined;\n  for (let index = start + 1; index < html.length; index += 1) {\n    const character = html[index];\n    if (quote) {\n      if (character === quote) quote = undefined;\n    } else if (character === '\"' || character === \"'\") {\n      quote = character;\n    } else if (character === \">\") {\n      return index + 1;\n    }\n  }\n  return -1;\n}\n\nfunction removeHtmlLinkElements(\n  html: string,\n  elements: HtmlLinkElement[],\n  removed: ReadonlySet<number>,\n): string {\n  let cursor = 0;\n  let output = \"\";\n  for (const [index, element] of elements.entries()) {\n    if (!removed.has(index)) continue;\n    output += html.slice(cursor, element.start);\n    cursor = element.end;\n  }\n  return output + html.slice(cursor);\n}\n\nfunction splitLinkHeader(value: string): string[] {\n  const links: string[] = [];\n  let start = 0;\n  let insideAngleBrackets = false;\n  let quoted = false;\n\n  for (let index = 0; index < value.length; index += 1) {\n    const character = value[index];\n    if (quoted) {\n      if (character === '\"' && !isEscaped(value, index)) quoted = false;\n      continue;\n    }\n    if (character === '\"') {\n      quoted = true;\n    } else if (character === \"<\") {\n      insideAngleBrackets = true;\n    } else if (character === \">\") {\n      insideAngleBrackets = false;\n    } else if (character === \",\" && !insideAngleBrackets) {\n      links.push(value.slice(start, index).trim());\n      start = index + 1;\n    }\n  }\n\n  links.push(value.slice(start).trim());\n  return links.filter(Boolean);\n}\n\nfunction isEscaped(value: string, index: number): boolean {\n  let backslashes = 0;\n  for (let cursor = index - 1; cursor >= 0 && value[cursor] === \"\\\\\"; cursor -= 1) {\n    backslashes += 1;\n  }\n  return backslashes % 2 === 1;\n}\n\nfunction normalizeBudget(value: number | undefined, fallback: number): number {\n  return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n    ? Math.floor(value)\n    : fallback;\n}\n","export type FarmCspDirectiveValue = string | readonly string[] | boolean | null | undefined;\n\nexport type FarmCspDirectives = Readonly<Record<string, FarmCspDirectiveValue>>;\n\nexport interface FarmCspOptions {\n  /** A pre-serialized CSP value. Cannot be combined with directives. */\n  policy?: string;\n  /** CSP directives using camelCase or kebab-case names. */\n  directives?: FarmCspDirectives;\n  /** Emit Content-Security-Policy-Report-Only instead of enforcing the policy. */\n  reportOnly?: boolean;\n}\n\nexport type FarmCspConfig = string | FarmCspOptions;\n\nexport interface FarmSecurityConfig {\n  /** App-wide Content Security Policy applied to pages, APIs, and static output. */\n  csp?: FarmCspConfig | false;\n  /** @deprecated Use csp. */\n  contentSecurityPolicy?: never;\n}\n\nexport interface ResolvedFarmCspConfig {\n  value: string;\n  reportOnly: boolean;\n}\n\nexport interface ResolvedFarmSecurityConfig {\n  csp: ResolvedFarmCspConfig | false;\n}\n\nexport function resolveFarmSecurityConfig(\n  input: FarmSecurityConfig | ResolvedFarmSecurityConfig | undefined,\n): ResolvedFarmSecurityConfig {\n  if (input === undefined) return { csp: false };\n  if (!isPlainRecord(input)) {\n    throw new TypeError(\"security must be an object containing the csp option.\");\n  }\n  if (Object.prototype.hasOwnProperty.call(input, \"contentSecurityPolicy\")) {\n    throw new TypeError(\n      \"security.contentSecurityPolicy is not supported. Use security.csp instead.\",\n    );\n  }\n\n  const csp = input.csp;\n  if (csp === undefined || csp === false) return { csp: false };\n\n  if (typeof csp === \"string\") {\n    return {\n      csp: {\n        value: validateSerializedCsp(csp),\n        reportOnly: false,\n      },\n    };\n  }\n\n  if (!isPlainRecord(csp)) {\n    throw new TypeError(\"security.csp must be a policy string, false, or an options object.\");\n  }\n\n  const reportOnly = validateReportOnly(csp.reportOnly);\n  if (Object.prototype.hasOwnProperty.call(csp, \"value\")) {\n    if (\n      Object.prototype.hasOwnProperty.call(csp, \"policy\") ||\n      Object.prototype.hasOwnProperty.call(csp, \"directives\")\n    ) {\n      throw new TypeError(\n        \"Resolved security.csp values cannot include policy or directives options.\",\n      );\n    }\n    return {\n      csp: {\n        value: validateSerializedCsp(csp.value),\n        reportOnly,\n      },\n    };\n  }\n\n  const { policy, directives } = csp;\n  if (policy !== undefined && directives !== undefined) {\n    throw new TypeError(\"security.csp accepts either policy or directives, not both.\");\n  }\n  if (policy === undefined && directives === undefined) {\n    throw new TypeError(\"security.csp requires a policy string or directives object.\");\n  }\n\n  return {\n    csp: {\n      value:\n        policy !== undefined\n          ? validateSerializedCsp(policy)\n          : serializeFarmCspDirectives(directives as FarmCspDirectives),\n      reportOnly,\n    },\n  };\n}\n\nexport function serializeFarmCspDirectives(directives: FarmCspDirectives): string {\n  if (!isPlainRecord(directives)) {\n    throw new TypeError(\"security.csp.directives must be an object.\");\n  }\n  const serialized: string[] = [];\n  const normalizedNames = new Set<string>();\n\n  for (const [configuredName, configuredValue] of Object.entries(directives)) {\n    if (configuredValue === false || configuredValue === null || configuredValue === undefined) {\n      continue;\n    }\n\n    const name = normalizeDirectiveName(configuredName);\n    if (normalizedNames.has(name)) {\n      throw new TypeError(`security.csp contains the duplicate directive ${JSON.stringify(name)}.`);\n    }\n    normalizedNames.add(name);\n\n    const values =\n      configuredValue === true\n        ? []\n        : (Array.isArray(configuredValue) ? configuredValue : [configuredValue]).map(\n            validateDirectiveValue,\n          );\n    serialized.push(values.length > 0 ? `${name} ${values.join(\" \")}` : name);\n  }\n\n  if (serialized.length === 0) {\n    throw new TypeError(\"security.csp.directives must contain at least one enabled directive.\");\n  }\n  return serialized.join(\"; \");\n}\n\nexport function getFarmSecurityHeader(\n  security: ResolvedFarmSecurityConfig,\n): { key: string; value: string } | undefined {\n  if (!security.csp) return undefined;\n  return {\n    key: security.csp.reportOnly\n      ? \"Content-Security-Policy-Report-Only\"\n      : \"Content-Security-Policy\",\n    value: security.csp.value,\n  };\n}\n\n/**\n * Whether a resolved CSP would block the inline scripts the framework injects\n * into SSR documents (theme bootstrap, hydration bootstraps).\n *\n * The scripts carry no nonce or hash yet (see the CSP-nonce RFC), so they run\n * only when the governing directive — `script-src`, falling back to\n * `default-src` — permits inline script either via `'unsafe-inline'` or by\n * listing a nonce/hash source. A policy with no script-governing directive at\n * all does not restrict inline scripts, so it is not flagged. When a nonce or\n * hash is already present the app is assumed to be managing inline sources\n * deliberately and is left alone, to avoid nagging a correct-by-construction\n * setup.\n */\nexport function farmCspBlocksFrameworkInlineScripts(security: ResolvedFarmSecurityConfig): boolean {\n  if (!security.csp) return false;\n\n  const directives = parseCspDirectives(security.csp.value);\n  const governing = directives.get(\"script-src\") ?? directives.get(\"default-src\");\n  if (!governing) return false;\n\n  const allowsInline = governing.some((source) => {\n    const value = source.toLowerCase();\n    return (\n      value === \"'unsafe-inline'\" ||\n      value.startsWith(\"'nonce-\") ||\n      value.startsWith(\"'sha256-\") ||\n      value.startsWith(\"'sha384-\") ||\n      value.startsWith(\"'sha512-\")\n    );\n  });\n  return !allowsInline;\n}\n\nfunction parseCspDirectives(value: string): Map<string, string[]> {\n  const directives = new Map<string, string[]>();\n  for (const segment of value.split(\";\")) {\n    const parts = segment.trim().split(/\\s+/).filter(Boolean);\n    if (parts.length === 0) continue;\n    const name = parts[0]!.toLowerCase();\n    if (!directives.has(name)) directives.set(name, parts.slice(1));\n  }\n  return directives;\n}\n\nfunction normalizeDirectiveName(value: string): string {\n  const name = value\n    .trim()\n    .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n    .toLowerCase();\n  if (!/^[a-z][a-z0-9-]*$/.test(name)) {\n    throw new TypeError(`Invalid security.csp directive name: ${JSON.stringify(value)}.`);\n  }\n  return name;\n}\n\nfunction validateDirectiveValue(value: string): string {\n  if (typeof value !== \"string\") {\n    throw new TypeError(\"security.csp directive values must be strings or booleans.\");\n  }\n  const normalized = value.trim();\n  if (!normalized || /[;\\r\\n]/.test(normalized) || normalized.includes(\"\\0\")) {\n    throw new TypeError(`Invalid security.csp directive value: ${JSON.stringify(value)}.`);\n  }\n  return normalized;\n}\n\nfunction validateSerializedCsp(value: unknown): string {\n  if (typeof value !== \"string\") {\n    throw new TypeError(\"security.csp policy must be a non-empty single-line string.\");\n  }\n  const normalized = value.trim().replace(/;+$/g, \"\").trim();\n  if (!normalized || /[\\r\\n]/.test(normalized) || normalized.includes(\"\\0\")) {\n    throw new TypeError(\"security.csp policy must be a non-empty single-line string.\");\n  }\n  return normalized;\n}\n\nfunction validateReportOnly(value: unknown): boolean {\n  if (value === undefined) return false;\n  if (typeof value !== \"boolean\") {\n    throw new TypeError(\"security.csp.reportOnly must be a boolean.\");\n  }\n  return value;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n","import type { ResolvedFarmEnv } from \"../env\";\n\nexport const DEFAULT_FARM_API_BASE_PATH = \"/api\";\n\nexport interface FarmAPIConfigResolverContext {\n  root: string;\n  mode: \"development\" | \"production\";\n  env: ResolvedFarmEnv;\n}\n\nexport type FarmAPIConfigValue =\n  | string\n  | undefined\n  | ((context: FarmAPIConfigResolverContext) => string | undefined | Promise<string | undefined>);\n\nexport interface FarmAPIConfig {\n  /**\n   * Public API root. An origin-only URL is joined with `basePath`; a URL that\n   * already has a path is used as-is. May be resolved from deployment context.\n   */\n  baseURL?: FarmAPIConfigValue;\n  /** Public API path and same-origin server mount used when `baseURL` has no path. @default \"/api\" */\n  basePath?: FarmAPIConfigValue;\n}\n\nexport interface ResolvedFarmAPIConfig {\n  /** Fully resolved public API root, either absolute or root-relative. */\n  baseURL: string;\n  /** Effective pathname of `baseURL`. */\n  basePath: string;\n}\n\ndeclare const __FARM_API_BASE_URL__: string | undefined;\n\nexport async function resolveFarmAPIConfig(\n  config: FarmAPIConfig | undefined,\n  context: FarmAPIConfigResolverContext,\n): Promise<ResolvedFarmAPIConfig> {\n  const configuredBasePath = await resolveConfigValue(config?.basePath, context, \"api.basePath\");\n  const basePath = normalizeFarmAPIBasePath(configuredBasePath ?? DEFAULT_FARM_API_BASE_PATH);\n  const configuredBaseURL = await resolveConfigValue(config?.baseURL, context, \"api.baseURL\");\n\n  return normalizeFarmAPIConfig({ baseURL: configuredBaseURL, basePath });\n}\n\n/** Normalize already-resolved API strings. */\nexport function normalizeFarmAPIConfig(\n  config: { baseURL?: string; basePath?: string } | undefined,\n): ResolvedFarmAPIConfig {\n  const basePath = normalizeFarmAPIBasePath(config?.basePath ?? DEFAULT_FARM_API_BASE_PATH);\n  const baseURL = config?.baseURL?.trim();\n\n  if (!baseURL) {\n    return { baseURL: basePath, basePath };\n  }\n\n  if (baseURL.startsWith(\"//\")) {\n    throw new Error(\n      'Farm api.baseURL must be an absolute URL or a root-relative path such as \"/api\", not a network-path reference.',\n    );\n  }\n\n  if (baseURL.startsWith(\"/\")) {\n    const url = parseRootRelativeBaseURL(baseURL);\n    if (url.pathname !== \"/\") {\n      const effectivePath = normalizeFarmAPIBasePath(url.pathname);\n      return { baseURL: effectivePath, basePath: effectivePath };\n    }\n    return { baseURL: basePath, basePath };\n  }\n\n  let url: URL;\n  try {\n    url = new URL(baseURL);\n  } catch {\n    throw new Error(\n      'Farm api.baseURL must be an absolute URL or a root-relative path such as \"/api\".',\n    );\n  }\n\n  if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n    throw new Error(\"Farm api.baseURL must use http or https.\");\n  }\n  if (url.search || url.hash) {\n    throw new Error(\"Farm api.baseURL cannot contain a query string or hash.\");\n  }\n\n  if (url.pathname !== \"/\") {\n    const effectivePath = normalizeFarmAPIBasePath(url.pathname);\n    return {\n      baseURL: `${url.origin}${effectivePath}`,\n      basePath: effectivePath,\n    };\n  }\n\n  return {\n    baseURL: basePath === \"/\" ? url.origin : `${url.origin}${basePath}`,\n    basePath,\n  };\n}\n\nexport function normalizeFarmAPIBasePath(value: string): string {\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(\"Farm api.basePath cannot contain backslashes or control characters.\");\n  }\n\n  const path = value.trim();\n  if (!path) {\n    throw new Error(\"Farm api.basePath cannot be empty.\");\n  }\n  if (path.includes(\"?\") || path.includes(\"#\")) {\n    throw new Error(\"Farm api.basePath cannot contain a query string or hash.\");\n  }\n  if (path.startsWith(\"//\")) {\n    throw new Error('Farm api.basePath must be a pathname such as \"/api\", not a URL.');\n  }\n  for (const segment of path.split(\"/\")) {\n    let decoded = segment;\n    try {\n      decoded = decodeURIComponent(segment);\n    } catch {\n      // A malformed escape remains literal in a URL pathname. It cannot be a\n      // dot segment, so leave the ordinary URL parser to preserve it.\n    }\n    if (hasUnstableCharacters(decoded)) {\n      throw new Error(\"Farm api.basePath cannot contain backslashes or control characters.\");\n    }\n    if (decoded.includes(\"/\")) {\n      throw new Error(\"Farm api.basePath cannot contain percent-encoded path separators.\");\n    }\n    if (decoded === \".\" || decoded === \"..\") {\n      throw new Error('Farm api.basePath cannot contain \".\" or \"..\" path segments.');\n    }\n  }\n\n  const normalized = `/${path.replace(/^\\/+|\\/+$/g, \"\")}`;\n  return normalized === \"/\" ? \"/\" : normalized;\n}\n\n/** Read the API root embedded by Farm's Vite build. */\nexport function getFarmAPIBaseURL(): string {\n  if (typeof __FARM_API_BASE_URL__ !== \"undefined\" && __FARM_API_BASE_URL__) {\n    return __FARM_API_BASE_URL__;\n  }\n  return DEFAULT_FARM_API_BASE_PATH;\n}\n\n/** Resolve a canonical Farm route such as `/api/users` against an API root. */\nexport function resolveFarmAPIRequestURL(\n  routePath: string,\n  baseURL = getFarmAPIBaseURL(),\n  fallbackOrigin = getDefaultOrigin(),\n): URL {\n  const base = new URL(baseURL, fallbackOrigin);\n  if (base.pathname === \"/\") {\n    return new URL(routePath, base);\n  }\n\n  const route = new URL(routePath, fallbackOrigin);\n  const suffix = stripCanonicalAPIBasePath(route.pathname);\n  const joinedPath = joinURLPath(base.pathname, suffix);\n  base.pathname = joinedPath;\n  base.search = route.search;\n  base.hash = route.hash;\n  return base;\n}\n\nasync function resolveConfigValue(\n  value: FarmAPIConfigValue,\n  context: FarmAPIConfigResolverContext,\n  name: string,\n): Promise<string | undefined> {\n  const resolved = typeof value === \"function\" ? await value(context) : value;\n  if (resolved === undefined) return undefined;\n  if (typeof resolved !== \"string\") {\n    throw new Error(`Farm ${name} must resolve to a string or undefined.`);\n  }\n  if (!resolved.trim()) {\n    throw new Error(`Farm ${name} cannot be empty.`);\n  }\n  return resolved;\n}\n\nfunction parseRootRelativeBaseURL(value: string): URL {\n  const url = new URL(value, \"http://farm.local\");\n  if (url.search || url.hash) {\n    throw new Error(\"Farm api.baseURL cannot contain a query string or hash.\");\n  }\n  return url;\n}\n\nfunction stripCanonicalAPIBasePath(pathname: string): string {\n  if (pathname === DEFAULT_FARM_API_BASE_PATH) return \"\";\n  if (pathname.startsWith(`${DEFAULT_FARM_API_BASE_PATH}/`)) {\n    return pathname.slice(DEFAULT_FARM_API_BASE_PATH.length + 1);\n  }\n  return pathname.replace(/^\\/+/, \"\");\n}\n\nfunction joinURLPath(basePath: string, suffix: string): string {\n  const normalizedBase = basePath === \"/\" ? \"\" : basePath.replace(/\\/+$/, \"\");\n  const normalizedSuffix = suffix.replace(/^\\/+/, \"\");\n  if (!normalizedSuffix) return normalizedBase || \"/\";\n  return `${normalizedBase}/${normalizedSuffix}`;\n}\n\nfunction getDefaultOrigin(): string {\n  return typeof window !== \"undefined\" ? window.location.origin : \"http://localhost:3000\";\n}\n","import type { FarmConfig } from \"./types\";\nimport type { FarmDocsResolvedConfig } from \"./docs/types\";\nimport type { FarmMarkdownResolvedConfig } from \"./markdown\";\nimport { resolveMdxConfig, type FarmMdxResolvedConfig } from \"./app-markdown-config\";\nimport { resolveMarkdownConfig } from \"./markdown\";\nimport { resolveWorkflowsConfig, type FarmWorkflowsResolvedConfig } from \"./workflows\";\nimport { resolveCronConfig, type FarmCronResolvedConfig } from \"./cron\";\nimport { resolveAppPath, fileExists, logger } from \"./utils\";\nimport { initStorage } from \"./storage\";\nimport { configureFarmObservability } from \"./observability\";\nimport { normalizeRouteRules } from \"./route-rules\";\nimport { resolveServerActionsConfig } from \"./server-action-security\";\nimport { resolveFarmServerConfig } from \"./server-http\";\nimport { resolveFarmImageConfig, type ResolvedFarmImageConfig } from \"./image-config\";\nimport { getFarmAppDirectories, getFarmSourceRoots } from \"./layers\";\nimport { RouteManager } from \"./routing/route-manager\";\nimport { ServerRenderer } from \"./server/renderer\";\nimport { findProgrammaticRouteFiles } from \"./routes.server\";\nimport path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport { resolveFarmDevtoolsConfig, type ResolvedFarmDevtoolsConfig } from \"./devtools-config\";\nimport {\n  resolveFarmDevIndicatorsConfig,\n  type ResolvedFarmDevIndicatorsConfig,\n} from \"./dev-indicators\";\nimport { resolveFarmI18nConfig } from \"./i18n/config\";\nimport {\n  createFarmI18nRuntime,\n  _setDefaultFarmI18nRuntime,\n  type FarmI18nRuntime,\n} from \"./i18n/server\";\nimport type { ResolvedFarmI18nConfig } from \"./i18n/types\";\nimport { configureFarmCache } from \"./cache\";\nimport { resolveFarmAuthConfig, type ResolvedFarmAuthConfig } from \"./auth-config\";\nimport { resolveFarmPerformanceConfig, type ResolvedFarmPerformanceConfig } from \"./preload\";\nimport { normalizeFarmConfigBasePath } from \"./base-path\";\nimport { resolveFarmSecurityConfig, type ResolvedFarmSecurityConfig } from \"./security\";\nimport { resolveFarmThemeConfig } from \"./theme/config\";\nimport { _setDefaultFarmThemeConfig } from \"./theme/server\";\nimport type { ResolvedFarmThemeConfig } from \"./theme/types\";\nimport { getFarmRendererComponentExtensions, resolveFarmRenderer } from \"./renderer\";\nimport type { FarmRenderer } from \"./renderer\";\nimport { normalizeFarmAPIConfig, type ResolvedFarmAPIConfig } from \"./api/config\";\n\ntype NormalizedFarmConfig = Omit<\n  Required<FarmConfig>,\n  \"api\" | \"devtools\" | \"devIndicators\" | \"images\" | \"i18n\" | \"performance\" | \"security\" | \"theme\"\n> & {\n  api: ResolvedFarmAPIConfig;\n  docs: FarmDocsResolvedConfig;\n  md: FarmMarkdownResolvedConfig;\n  mdx: FarmMdxResolvedConfig;\n  cron: FarmCronResolvedConfig;\n  workflows: FarmWorkflowsResolvedConfig;\n  devtools: ResolvedFarmDevtoolsConfig;\n  devIndicators: ResolvedFarmDevIndicatorsConfig;\n  images: ResolvedFarmImageConfig;\n  i18n: ResolvedFarmI18nConfig;\n  auth: ResolvedFarmAuthConfig;\n  performance: ResolvedFarmPerformanceConfig;\n  security: ResolvedFarmSecurityConfig;\n  theme: ResolvedFarmThemeConfig;\n  renderer: FarmRenderer;\n};\n\nconst defaultDocsConfig: FarmDocsResolvedConfig = {\n  enabled: false,\n  entry: \"/docs\",\n  config: { entry: \"docs\", docsPath: \"/docs\" },\n};\n\nfunction isResolvedDocsConfig(value: FarmConfig[\"docs\"]): value is FarmDocsResolvedConfig {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    \"enabled\" in value &&\n    \"entry\" in value &&\n    \"config\" in value\n  );\n}\n\nexport class FarmApp {\n  private config: NormalizedFarmConfig;\n  private routeManager: RouteManager;\n  private serverRenderer: ServerRenderer;\n  private i18nRuntime: FarmI18nRuntime;\n  private viteServer?: ViteDevServer;\n\n  constructor(config: FarmConfig = {}, viteServer?: ViteDevServer) {\n    this.config = this.normalizeConfig(config);\n    configureFarmObservability(this.config.observability);\n    _setDefaultFarmThemeConfig(this.config.theme);\n    this.i18nRuntime = createFarmI18nRuntime(this.config.i18n);\n    _setDefaultFarmI18nRuntime(this.i18nRuntime);\n    this.viteServer = viteServer;\n    this.routeManager = new RouteManager(this.config, viteServer);\n    this.serverRenderer = new ServerRenderer(\n      this.config,\n      this.routeManager,\n      this.i18nRuntime,\n      this.viteServer,\n    );\n  }\n\n  async initialize(): Promise<void> {\n    // Silent initialization unless verbose mode\n    if (process.env.FARM_VERBOSE) {\n      logger.info(\"Initializing Farm.js application...\");\n    }\n\n    await initStorage(this.config.storage);\n    await configureFarmCache(this.config.cache);\n    await this.i18nRuntime.initialize();\n    await this.serverRenderer.initialize();\n\n    // Verify app directory structure\n    await this.verifyAppStructure();\n\n    // Discover and register routes\n    await this.routeManager.discoverRoutes();\n\n    // Compile hydration and island decisions once during startup. Navigation\n    // requests only read this manifest; HMR invalidates it when route code changes.\n    this.routeManager.generateClientManifest(this.config.root);\n\n    if (process.env.FARM_VERBOSE) {\n      logger.success(\"Farm.js application initialized successfully!\");\n    }\n  }\n\n  getRouteManager(): RouteManager {\n    return this.routeManager;\n  }\n\n  getServerRenderer(): ServerRenderer {\n    return this.serverRenderer;\n  }\n\n  getI18nRuntime(): FarmI18nRuntime {\n    return this.i18nRuntime;\n  }\n\n  getConfig(): NormalizedFarmConfig {\n    return this.config;\n  }\n\n  private normalizeConfig(config: FarmConfig): NormalizedFarmConfig {\n    const root = config.root || process.cwd();\n    const basePath = normalizeFarmConfigBasePath(config.basePath);\n\n    return {\n      root,\n      srcDir: config.srcDir || \"src\",\n      extends: config.extends || [],\n      layers: [...(config.layers || [])],\n      outDir: config.outDir || \"dist\",\n      basePath,\n      trailingSlash: config.trailingSlash ?? false,\n      renderer: resolveFarmRenderer(config.renderer),\n      preset: config.preset ?? \"node-server\",\n      deploy: config.deploy || {},\n      storage: config.storage || {},\n      cache: config.cache || {},\n      auth: isResolvedAuthConfig(config.auth) ? config.auth : resolveFarmAuthConfig(config.auth),\n      integrations: config.integrations || {},\n      plugins: config.plugins || [],\n      migrations: config.migrations || { commands: [] },\n      cron: resolveCronConfig(config.cron),\n      workflows: resolveWorkflowsConfig(config.workflows),\n      api: normalizeFarmAppAPIConfig(config.api),\n      middleware: config.middleware || {},\n      routeRules: normalizeRouteRules(config.routeRules),\n      context: config.context || (() => undefined),\n      server: resolveFarmServerConfig(config.server),\n      serverActions: resolveServerActionsConfig(config.serverActions),\n      security: resolveFarmSecurityConfig(config.security),\n      images: resolveFarmImageConfig(config.images),\n      performance: resolveFarmPerformanceConfig(config.performance),\n      theme: resolveFarmThemeConfig(config.theme, basePath),\n      i18n: isResolvedI18nConfig(config.i18n)\n        ? config.i18n\n        : resolveFarmI18nConfig(config.i18n, {\n            root,\n            mode: process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n            basePath,\n          }),\n      deploymentId: config.deploymentId || \"development\",\n      notFound: config.notFound || {},\n      serverRuntimeConfig: config.serverRuntimeConfig || {},\n      publicRuntimeConfig: config.publicRuntimeConfig || {},\n      docs: isResolvedDocsConfig(config.docs) ? config.docs : defaultDocsConfig,\n      md: resolveMarkdownConfig(config.md),\n      mdx: resolveMdxConfig(config.mdx),\n      observability: config.observability ?? false,\n      telemetry: config.telemetry !== false,\n      devtools: resolveFarmDevtoolsConfig(\n        config.devtools,\n        process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n      ),\n      devIndicators: resolveFarmDevIndicatorsConfig(\n        config.devIndicators,\n        process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n      ),\n      env: config.env || { server: {}, public: {} },\n      suppressLintOnLink: config.suppressLintOnLink ?? false,\n      experimental: {\n        serverComponents: config.experimental?.serverComponents ?? false,\n        serverActions: config.experimental?.serverActions ?? false,\n        isolatedClientHydration: config.experimental?.isolatedClientHydration ?? \"off\",\n        ppr: config.experimental?.ppr ?? false,\n        ...config.experimental,\n      },\n      agent: config.agent ?? {},\n      vite: config.vite || {},\n    };\n  }\n\n  private async verifyAppStructure(): Promise<void> {\n    const appDirs = getFarmAppDirectories(this.config);\n\n    const hasAppDirectory = (await Promise.all(appDirs.map((appDir) => fileExists(appDir)))).some(\n      Boolean,\n    );\n\n    if (!hasAppDirectory) {\n      const routeFiles = getFarmSourceRoots(this.config).flatMap((source) =>\n        findProgrammaticRouteFiles(source.root, source.srcDir),\n      );\n      if (routeFiles.length > 0) {\n        return;\n      }\n\n      const appDir = resolveAppPath(this.config.root, this.config.srcDir, \"app\");\n      throw new Error(\n        `App directory not found at ${appDir}. ` +\n          \"Please create a src/app directory or extend a Farm layer containing routes.\",\n      );\n    }\n\n    const componentExtensions = getFarmRendererComponentExtensions(this.config.renderer);\n    const rootLayoutPaths = appDirs.flatMap((appDir) =>\n      componentExtensions.map((extension) => path.join(appDir, `layout${extension}`)),\n    );\n\n    const hasRootLayout = await Promise.all(rootLayoutPaths.map((p) => fileExists(p))).then(\n      (results) => results.some(Boolean),\n    );\n\n    if (!hasRootLayout) {\n      logger.warn(\n        `No root layout found. Consider creating src/app/layout${componentExtensions[0]} for consistent page structure.`,\n      );\n    }\n  }\n}\n\nfunction isResolvedI18nConfig(value: FarmConfig[\"i18n\"]): value is ResolvedFarmI18nConfig {\n  return Boolean(value && typeof value === \"object\" && \"enabled\" in value);\n}\n\nfunction isResolvedAuthConfig(value: FarmConfig[\"auth\"]): value is ResolvedFarmAuthConfig {\n  return Boolean(\n    value &&\n    typeof value === \"object\" &&\n    \"enabled\" in value &&\n    \"emailAndPassword\" in value &&\n    \"database\" in value,\n  );\n}\n\nfunction normalizeFarmAppAPIConfig(config: FarmConfig[\"api\"]): ResolvedFarmAPIConfig {\n  if (typeof config?.baseURL === \"function\" || typeof config?.basePath === \"function\") {\n    throw new Error(\n      \"Farm API config resolver functions must be processed with resolveConfig() before creating a FarmApp.\",\n    );\n  }\n  return normalizeFarmAPIConfig(config as { baseURL?: string; basePath?: string } | undefined);\n}\n\nexport function createFarmApp(config?: FarmConfig, viteServer?: ViteDevServer): FarmApp {\n  return new FarmApp(config, viteServer);\n}\n","export interface EnvSchema<TOutput = unknown> {\n  parse(value: unknown): TOutput;\n}\n\nexport type EnvParser<TOutput = unknown> =\n  | EnvSchema<TOutput>\n  | ((value: string | undefined, context: { key: string; scope: \"server\" | \"public\" }) => TOutput);\n\nexport type EnvShape = Record<string, EnvParser<any>>;\n\nexport type InferEnvParser<TParser> =\n  TParser extends EnvSchema<infer TOutput>\n    ? TOutput\n    : TParser extends (value: string | undefined, context: any) => infer TOutput\n      ? TOutput\n      : never;\n\nexport type InferEnvShape<TShape> = TShape extends EnvShape\n  ? { [K in keyof TShape]: InferEnvParser<TShape[K]> }\n  : {};\n\nexport interface FarmEnvConfig<\n  TServer extends EnvShape = EnvShape,\n  TPublic extends EnvShape = EnvShape,\n> {\n  server?: TServer;\n  public?: TPublic;\n}\n\nexport interface ResolvedFarmEnv<\n  TServer extends Record<string, any> = Record<string, unknown>,\n  TPublic extends Record<string, any> = Record<string, unknown>,\n> {\n  server: TServer;\n  public: TPublic;\n}\n\nexport type InferEnv<TConfig> =\n  TConfig extends FarmEnvConfig<infer TServer, infer TPublic>\n    ? ResolvedFarmEnv<InferEnvShape<TServer>, InferEnvShape<TPublic>>\n    : ResolvedFarmEnv;\n\n/**\n * Augmented by generated src/farm.d.ts for project-specific autocomplete.\n */\nexport interface FarmEnvTypes {}\n\nexport type FarmServerEnv = FarmEnvTypes extends { server: infer TServer }\n  ? TServer extends Record<string, any>\n    ? TServer\n    : Record<string, unknown>\n  : Record<string, unknown>;\n\nexport type FarmPublicEnv = FarmEnvTypes extends { public: infer TPublic }\n  ? TPublic extends Record<string, any>\n    ? TPublic\n    : Record<string, unknown>\n  : Record<string, unknown>;\n\nexport type FarmTypedEnv = ResolvedFarmEnv<FarmServerEnv, FarmPublicEnv>;\n\ndeclare const __FARM_PUBLIC_ENV__: Record<string, unknown> | undefined;\ndeclare const __FARM_ENV__: ResolvedFarmEnv | undefined;\n\nconst FARM_ENV_SYMBOL = Symbol.for(\"farm.env\");\nconst farmEnvGlobal = globalThis as typeof globalThis & {\n  [FARM_ENV_SYMBOL]?: ResolvedFarmEnv;\n};\nlet currentEnv: ResolvedFarmEnv = getInitialEnv();\n\nexport function resolveEnv<TConfig extends FarmEnvConfig<any, any> | undefined>(\n  config: TConfig,\n  source: Record<string, string | undefined> = getProcessEnv(),\n): InferEnv<NonNullable<TConfig>> {\n  const resolved = {\n    server: resolveEnvScope(config?.server, source, \"server\"),\n    public: resolveEnvScope(config?.public, source, \"public\"),\n  } as InferEnv<NonNullable<TConfig>>;\n\n  return resolved;\n}\n\nexport function setEnv(env: ResolvedFarmEnv): void {\n  currentEnv = normalizeResolvedEnv(env);\n  if (typeof window === \"undefined\") {\n    farmEnvGlobal[FARM_ENV_SYMBOL] = currentEnv;\n  }\n}\n\nexport function getResolvedEnv<TEnv extends ResolvedFarmEnv = FarmTypedEnv>(): TEnv {\n  return getCurrentEnv() as TEnv;\n}\n\nexport function getEnv<TServer extends Record<string, any> = FarmServerEnv>(): TServer;\nexport function getEnv<TKey extends Extract<keyof FarmServerEnv, string>>(\n  key: TKey,\n): FarmServerEnv[TKey];\nexport function getEnv(key?: string): unknown {\n  assertServerEnvAccess();\n  if (key === undefined) {\n    return getCurrentEnv().server;\n  }\n\n  return getCurrentEnv().server[key];\n}\n\nexport function getPublicEnv<TPublic extends Record<string, any> = FarmPublicEnv>(): TPublic;\nexport function getPublicEnv<TKey extends Extract<keyof FarmPublicEnv, string>>(\n  key: TKey,\n): FarmPublicEnv[TKey];\nexport function getPublicEnv(key?: string): unknown {\n  if (key === undefined) {\n    return getCurrentEnv().public;\n  }\n\n  return getCurrentEnv().public[key];\n}\n\nexport const env = createEnvProxy(\"server\") as FarmServerEnv;\nexport const serverEnv = env;\nexport const publicEnv = createEnvProxy(\"public\") as FarmPublicEnv;\n\nfunction resolveEnvScope(\n  shape: EnvShape | undefined,\n  source: Record<string, string | undefined>,\n  scope: \"server\" | \"public\",\n): Record<string, unknown> {\n  if (!shape) {\n    return {};\n  }\n\n  const resolved: Record<string, unknown> = {};\n\n  for (const [key, parser] of Object.entries(shape)) {\n    try {\n      resolved[key] = parseEnvValue(parser, source[key], key, scope);\n    } catch (error) {\n      const message = error instanceof Error ? error.message : String(error);\n      throw new Error(`Invalid ${scope} env \"${key}\": ${message}`);\n    }\n  }\n\n  return resolved;\n}\n\nfunction parseEnvValue(\n  parser: EnvParser<any>,\n  value: string | undefined,\n  key: string,\n  scope: \"server\" | \"public\",\n): unknown {\n  if (typeof parser === \"function\") {\n    return parser(value, { key, scope });\n  }\n\n  if (parser && typeof parser.parse === \"function\") {\n    return parser.parse(value);\n  }\n\n  throw new Error(\"expected a parser function or schema with parse()\");\n}\n\nfunction createEnvProxy(scope: \"server\" | \"public\"): Record<string, unknown> {\n  return new Proxy(\n    {},\n    {\n      get(_target, property) {\n        if (typeof property === \"symbol\") {\n          return undefined;\n        }\n\n        const env = getEnvScope(scope);\n        return env[property];\n      },\n      ownKeys() {\n        return Reflect.ownKeys(getEnvScope(scope));\n      },\n      getOwnPropertyDescriptor(_target, property) {\n        const env = getEnvScope(scope);\n        if (!(property in env)) {\n          return undefined;\n        }\n\n        return {\n          enumerable: true,\n          configurable: true,\n          value: env[property as keyof typeof env],\n        };\n      },\n      has(_target, property) {\n        return property in getEnvScope(scope);\n      },\n    },\n  );\n}\n\nfunction getEnvScope(scope: \"server\" | \"public\"): Record<string, unknown> {\n  if (scope === \"server\") {\n    assertServerEnvAccess();\n  }\n\n  return getCurrentEnv()[scope] || {};\n}\n\nfunction assertServerEnvAccess(): void {\n  if (typeof window !== \"undefined\") {\n    throw new Error(\"Farm server env is not available in the browser. Use publicEnv.\");\n  }\n}\n\nfunction getInitialEnv(): ResolvedFarmEnv {\n  const injectedEnv = getInjectedEnv();\n  if (injectedEnv) {\n    return injectedEnv;\n  }\n\n  if (typeof window === \"undefined\" && farmEnvGlobal[FARM_ENV_SYMBOL]) {\n    return normalizeResolvedEnv(farmEnvGlobal[FARM_ENV_SYMBOL]);\n  }\n\n  return {\n    server: {},\n    public: getInjectedPublicEnv(),\n  };\n}\n\nfunction getCurrentEnv(): ResolvedFarmEnv {\n  if (typeof window === \"undefined\" && farmEnvGlobal[FARM_ENV_SYMBOL]) {\n    return farmEnvGlobal[FARM_ENV_SYMBOL];\n  }\n\n  return currentEnv;\n}\n\nfunction getInjectedEnv(): ResolvedFarmEnv | null {\n  try {\n    if (typeof __FARM_ENV__ !== \"undefined\" && __FARM_ENV__) {\n      return normalizeResolvedEnv(__FARM_ENV__);\n    }\n  } catch {\n    // The compile-time global is only defined in Farm server bundles.\n  }\n\n  return null;\n}\n\nfunction getInjectedPublicEnv(): Record<string, unknown> {\n  try {\n    if (typeof __FARM_PUBLIC_ENV__ !== \"undefined\" && __FARM_PUBLIC_ENV__) {\n      return __FARM_PUBLIC_ENV__;\n    }\n  } catch {\n    // The compile-time global is only defined in Farm browser bundles.\n  }\n\n  return {};\n}\n\nfunction normalizeResolvedEnv(env: ResolvedFarmEnv): ResolvedFarmEnv {\n  return {\n    server: isRecord(env.server) ? env.server : {},\n    public: isRecord(env.public) ? env.public : {},\n  };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction getProcessEnv(): Record<string, string | undefined> {\n  if (typeof process !== \"undefined\" && process.env) {\n    return process.env;\n  }\n\n  return {};\n}\n","// Tailwind v4 syntax (used with @tailwindcss/vite – no PostCSS or tailwind.config)\nexport const defaultGlobalCSS = `@import \"tailwindcss\";\n`;\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { FarmClientPlugin } from \"./client/plugin\";\nimport type { FarmPlugin, FarmPluginClientConfig } from \"./plugin\";\n\nexport interface ResolvedFarmClientPlugin {\n  name: string;\n  version?: string;\n  enforce?: \"pre\" | \"post\";\n  definition: FarmClientPlugin;\n  publicData?: unknown;\n}\n\nexport interface FarmClientPluginEntryCode {\n  imports: string;\n  registrations: string;\n  plugins: ResolvedFarmClientPlugin[];\n}\n\nconst CLIENT_KEYS = [\n  \"public\",\n  \"setup\",\n  \"hydration\",\n  \"navigation\",\n  \"error\",\n  \"performance\",\n  \"close\",\n] as const;\nconst HYDRATION_KEYS = [\"before\", \"after\"] as const;\nconst NAVIGATION_KEYS = [\"before\", \"loaded\", \"resolved\", \"rendered\", \"error\"] as const;\nconst APP_CLIENT_EXTENSIONS = [\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"mjs\"] as const;\n\n/** Resolve the optional application-owned browser lifecycle entry. */\nexport function resolveFarmAppClientEntry(\n  root = process.cwd(),\n  srcDir = \"src\",\n): string | undefined {\n  const sourceRoot = path.resolve(root, srcDir);\n  for (const extension of APP_CLIENT_EXTENSIONS) {\n    const candidate = path.join(sourceRoot, `client.${extension}`);\n    if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) return candidate;\n  }\n  return undefined;\n}\n\nexport function resolveFarmClientPlugins(\n  plugins: readonly FarmPlugin[] | undefined,\n  _root?: string,\n): ResolvedFarmClientPlugin[] {\n  if (!plugins?.length) return [];\n\n  return plugins.flatMap((plugin) => {\n    if (!plugin.client) return [];\n    assertClientLifecycle(plugin.client, plugin.name);\n    assertPublicData(plugin.client.public, plugin.name);\n\n    return [\n      {\n        name: plugin.name,\n        version: plugin.version,\n        enforce: plugin.enforce,\n        definition: plugin.client,\n        publicData: plugin.client.public,\n      },\n    ];\n  });\n}\n\nexport function generateFarmClientPluginEntryCode(\n  plugins: readonly FarmPlugin[] | undefined,\n  root?: string,\n  srcDir = \"src\",\n  appPublicData?: unknown,\n): FarmClientPluginEntryCode {\n  const resolved = resolveFarmClientPlugins(plugins, root);\n  const appClientEntry = root ? resolveFarmAppClientEntry(root, srcDir) : undefined;\n  const imports = appClientEntry\n    ? `import farmAppClientDefinition from ${JSON.stringify(appClientEntry.replace(/\\\\/g, \"/\"))};`\n    : \"\";\n  const serializedPlugins = resolved.map(\n    (plugin) => `  {\n    name: ${JSON.stringify(plugin.name)},\n    version: ${serializeOptionalString(plugin.version)},\n    enforce: ${serializeOptionalString(plugin.enforce)},\n    definition: ${serializeClientLifecycle(plugin.definition, plugin.name)},\n    public: ${serializePublicData(plugin.publicData)},\n  }`,\n  );\n  if (appClientEntry) {\n    assertPublicData(appPublicData, \"farm:app-client\");\n    serializedPlugins.push(`  {\n    name: \"farm:app-client\",\n    enforce: \"post\",\n    definition: farmAppClientDefinition,\n    public: ${serializePublicData(appPublicData)},\n  }`);\n  }\n  const registrations = `[\n${serializedPlugins.join(\",\\n\")}\n]`;\n\n  return { imports, registrations, plugins: resolved };\n}\n\nfunction assertClientLifecycle(client: FarmPluginClientConfig, pluginName: string): void {\n  assertLifecycleObject(client, pluginName, \"client\", CLIENT_KEYS);\n  assertHook(client.setup, pluginName, \"client.setup\");\n  assertHook(client.error, pluginName, \"client.error\");\n  assertHook(client.performance, pluginName, \"client.performance\");\n  assertHook(client.close, pluginName, \"client.close\");\n\n  if (client.hydration !== undefined) {\n    assertLifecycleObject(client.hydration, pluginName, \"client.hydration\", HYDRATION_KEYS);\n    assertHook(client.hydration.before, pluginName, \"client.hydration.before\");\n    assertHook(client.hydration.after, pluginName, \"client.hydration.after\");\n  }\n\n  if (client.navigation !== undefined) {\n    assertLifecycleObject(client.navigation, pluginName, \"client.navigation\", NAVIGATION_KEYS);\n    for (const key of NAVIGATION_KEYS) {\n      assertHook(client.navigation[key], pluginName, `client.navigation.${key}`);\n    }\n  }\n}\n\nfunction assertLifecycleObject(\n  value: unknown,\n  pluginName: string,\n  location: string,\n  allowedKeys: readonly string[],\n): asserts value is Record<string, unknown> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be an object`);\n  }\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== Object.prototype && prototype !== null) {\n    throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be a plain object`);\n  }\n\n  for (const key of Reflect.ownKeys(value)) {\n    if (typeof key === \"symbol\") {\n      throw new TypeError(`Client plugin \"${pluginName}\" ${location} cannot contain symbol keys`);\n    }\n    if (!allowedKeys.includes(key)) {\n      throw new TypeError(`Client plugin \"${pluginName}\" has an unknown ${location}.${key} option`);\n    }\n    const descriptor = Object.getOwnPropertyDescriptor(value, key);\n    if (!descriptor?.enumerable) {\n      throw new TypeError(`Client plugin \"${pluginName}\" ${location}.${key} must be enumerable`);\n    }\n    if (!(\"value\" in descriptor)) {\n      throw new TypeError(`Client plugin \"${pluginName}\" ${location}.${key} cannot be an accessor`);\n    }\n  }\n}\n\nfunction assertHook(value: unknown, pluginName: string, location: string): void {\n  if (value === undefined) return;\n  if (typeof value !== \"function\") {\n    throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be a function`);\n  }\n  functionSource(value, pluginName, location);\n}\n\nfunction serializeClientLifecycle(definition: FarmClientPlugin, pluginName: string): string {\n  const fields: string[] = [];\n  pushHook(fields, \"setup\", definition.setup, pluginName, \"client.setup\", 2);\n  pushHookGroup(fields, \"hydration\", definition.hydration, HYDRATION_KEYS, pluginName, 2);\n  pushHookGroup(fields, \"navigation\", definition.navigation, NAVIGATION_KEYS, pluginName, 2);\n  pushHook(fields, \"error\", definition.error, pluginName, \"client.error\", 2);\n  pushHook(fields, \"performance\", definition.performance, pluginName, \"client.performance\", 2);\n  pushHook(fields, \"close\", definition.close, pluginName, \"client.close\", 2);\n\n  return fields.length ? `{\\n${fields.join(\",\\n\")}\\n  }` : \"{}\";\n}\n\nfunction pushHookGroup(\n  fields: string[],\n  groupName: \"hydration\" | \"navigation\",\n  group: Record<string, unknown> | undefined,\n  keys: readonly string[],\n  pluginName: string,\n  indent: number,\n): void {\n  if (!group) return;\n  const hooks: string[] = [];\n  for (const key of keys) {\n    pushHook(hooks, key, group[key], pluginName, `client.${groupName}.${key}`, indent + 2);\n  }\n  fields.push(\n    `${\" \".repeat(indent)}${JSON.stringify(groupName)}: {\\n${hooks.join(\",\\n\")}\\n${\" \".repeat(indent)}}`,\n  );\n}\n\nfunction pushHook(\n  fields: string[],\n  key: string,\n  hook: unknown,\n  pluginName: string,\n  location: string,\n  indent: number,\n): void {\n  if (hook === undefined) return;\n  fields.push(\n    `${\" \".repeat(indent)}${JSON.stringify(key)}: ${functionSource(hook, pluginName, location)}`,\n  );\n}\n\nfunction functionSource(value: unknown, pluginName: string, location: string): string {\n  if (typeof value !== \"function\") {\n    throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be a function`);\n  }\n\n  const source = Function.prototype.toString.call(value).trim();\n  if (!source || source.includes(\"[native code]\")) {\n    throw new TypeError(\n      `Client plugin \"${pluginName}\" ${location} must be authored inline and cannot be native or bound`,\n    );\n  }\n\n  if (/^(?:async\\s+)?function(?:\\s*\\*)?(?:\\s+|\\()/.test(source)) {\n    return `(${source})`;\n  }\n\n  const method = source.match(/^(async\\s+)?(\\*\\s*)?[$A-Z_a-z][$\\w]*\\s*(\\([\\s\\S]*)$/);\n  if (method) {\n    const asyncPrefix = method[1] ?? \"\";\n    const generator = method[2] ? \"*\" : \"\";\n    return `(${asyncPrefix}function${generator}${method[3]})`;\n  }\n\n  if (source.includes(\"=>\")) return `(${source})`;\n\n  throw new TypeError(\n    `Client plugin \"${pluginName}\" ${location} must use a function, method, or arrow function`,\n  );\n}\n\nfunction assertPublicData(value: unknown, pluginName: string): void {\n  if (value === undefined) return;\n  const seen = new WeakSet<object>();\n\n  const visit = (current: unknown, pathSegments: string[]): void => {\n    if (current === null || typeof current === \"string\" || typeof current === \"boolean\") {\n      return;\n    }\n    if (typeof current === \"number\") {\n      if (Number.isFinite(current)) return;\n      throwPublicDataError(pluginName, pathSegments, \"must be a finite number\");\n    }\n    if (typeof current !== \"object\") {\n      throwPublicDataError(pluginName, pathSegments, `cannot contain ${typeof current} values`);\n    }\n    if (seen.has(current)) {\n      throwPublicDataError(pluginName, pathSegments, \"cannot contain circular references\");\n    }\n    seen.add(current);\n\n    if (Array.isArray(current)) {\n      for (let index = 0; index < current.length; index += 1) {\n        if (!Object.prototype.hasOwnProperty.call(current, index)) {\n          throwPublicDataError(\n            pluginName,\n            [...pathSegments, String(index)],\n            \"cannot contain sparse array slots\",\n          );\n        }\n        visit(current[index], [...pathSegments, String(index)]);\n      }\n      for (const key of Reflect.ownKeys(current)) {\n        if (key === \"length\" || (typeof key === \"string\" && isArrayIndex(key))) continue;\n        throwPublicDataError(\n          pluginName,\n          pathSegments,\n          typeof key === \"symbol\"\n            ? \"cannot contain symbol keys\"\n            : `cannot contain non-index array property ${key}`,\n        );\n      }\n      seen.delete(current);\n      return;\n    }\n\n    const prototype = Object.getPrototypeOf(current);\n    if (prototype !== Object.prototype && prototype !== null) {\n      throwPublicDataError(pluginName, pathSegments, \"must contain only plain objects and arrays\");\n    }\n    for (const key of Reflect.ownKeys(current)) {\n      if (typeof key === \"symbol\") {\n        throwPublicDataError(pluginName, pathSegments, \"cannot contain symbol keys\");\n      }\n      const descriptor = Object.getOwnPropertyDescriptor(current, key);\n      if (!descriptor?.enumerable) {\n        throwPublicDataError(\n          pluginName,\n          [...pathSegments, key],\n          \"cannot contain non-enumerable properties\",\n        );\n      }\n      if (!(\"value\" in descriptor)) {\n        throwPublicDataError(\n          pluginName,\n          [...pathSegments, key],\n          \"cannot contain accessor properties\",\n        );\n      }\n      visit(descriptor.value, [...pathSegments, key]);\n    }\n    seen.delete(current);\n  };\n\n  visit(value, []);\n}\n\nfunction throwPublicDataError(pluginName: string, pathSegments: string[], message: string): never {\n  const location = pathSegments.length ? ` at client.public.${pathSegments.join(\".\")}` : \"\";\n  throw new TypeError(`Client plugin \"${pluginName}\"${location} ${message}`);\n}\n\nfunction serializePublicData(value: unknown): string {\n  if (value === undefined) return \"undefined\";\n  return `JSON.parse(${JSON.stringify(JSON.stringify(value))})`;\n}\n\nfunction serializeOptionalString(value: string | undefined): string {\n  return value === undefined ? \"undefined\" : JSON.stringify(value);\n}\n\nfunction isArrayIndex(key: string): boolean {\n  const value = Number(key);\n  return Number.isInteger(value) && value >= 0 && value < 4_294_967_295 && String(value) === key;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { FarmCacheUserConfig } from \"./cache\";\n\nconst ADAPTER_EXTENSIONS = [\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"mjs\"] as const;\n\nexport interface ResolvedClientCacheAdapterEntry {\n  /** Absolute adapter module path with forward slashes, ready for codegen. */\n  importPath: string;\n  options: { version?: string; flushDelayMs?: number };\n}\n\nexport interface ClientCachePersistenceEntryCode {\n  imports: string;\n  init: string;\n}\n\n/**\n * Resolve `cache.client.adapter` from configuration to an absolute module\n * path for the generated client entries. Fails the build with an actionable\n * error when the option is set but the module cannot be found.\n */\nexport function resolveFarmClientCacheAdapterEntry(\n  root: string,\n  cache: FarmCacheUserConfig | undefined,\n): ResolvedClientCacheAdapterEntry | undefined {\n  const client = cache?.client;\n  const adapter = client?.adapter;\n  if (adapter === undefined) return undefined;\n\n  if (typeof adapter !== \"string\" || adapter.trim().length === 0) {\n    throw new Error(\n      'cache.client.adapter must be a module path string, for example \"./src/cache-adapter\".',\n    );\n  }\n\n  const resolved = path.resolve(root, adapter);\n  const found = resolveAdapterFile(resolved);\n  if (!found) {\n    throw new Error(\n      `cache.client.adapter was not found: ${adapter} (resolved to ${resolved}). ` +\n        \"Point it at a client module whose default export is created with defineClientCacheAdapter().\",\n    );\n  }\n\n  const options: ResolvedClientCacheAdapterEntry[\"options\"] = {};\n  if (client?.version !== undefined) options.version = client.version;\n  if (client?.flushDelayMs !== undefined) options.flushDelayMs = client.flushDelayMs;\n  return { importPath: found.replace(/\\\\/g, \"/\"), options };\n}\n\nfunction resolveAdapterFile(resolved: string): string | undefined {\n  if (fs.existsSync(resolved) && fs.statSync(resolved).isFile()) return resolved;\n  for (const extension of ADAPTER_EXTENSIONS) {\n    const candidate = `${resolved}.${extension}`;\n    if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) return candidate;\n  }\n  return undefined;\n}\n\n/**\n * Code fragments for the generated client entries: an import of the user's\n * adapter module and an init call that runs before hydration starts. Empty\n * strings when persistence is not configured, so entries stay unchanged.\n */\nexport function generateClientCachePersistenceCode(\n  entry: ResolvedClientCacheAdapterEntry | undefined,\n): ClientCachePersistenceEntryCode {\n  if (!entry) return { imports: \"\", init: \"\" };\n\n  return {\n    imports: [\n      `import * as __farmClientCacheAdapterModule from ${JSON.stringify(entry.importPath)};`,\n      `import { initConfiguredClientCachePersistence as __farmInitClientCachePersistence } from \"@farm.js/core/client\";`,\n    ].join(\"\\n\"),\n    init: `__farmInitClientCachePersistence(__farmClientCacheAdapterModule, ${JSON.stringify(entry.options)});`,\n  };\n}\n","export type MultipartField = string | number | boolean | bigint | Blob | Date | null | undefined;\n\nexport type MultipartValues = Record<string, MultipartField | readonly MultipartField[]>;\n\n/**\n * A real FormData value that retains the submitted value shape for generated\n * API-client inference.\n */\nexport type TypedFormData<TValues> = FormData & {\n  readonly __farmMultipartInput: TValues;\n};\n\nexport type MultipartSchema<TSchema> = TSchema & {\n  readonly __farmMultipartSchema: true;\n};\n\nexport type FarmStreamResponse<TItem> = Response & {\n  readonly __farmStreamItem: TItem;\n};\n\nexport interface FarmAPIStream<TItem> extends AsyncIterable<TItem> {\n  readonly response: Response;\n  cancel(reason?: unknown): Promise<void>;\n}\n\ntype SchemaLike = {\n  parse(data: unknown): unknown;\n};\n\n/**\n * Mark a body schema as multipart. The handler still receives the schema's\n * parsed object; generated clients require `toFormData(...)` for the request.\n */\nexport function multipart<TSchema extends SchemaLike>(schema: TSchema): MultipartSchema<TSchema> {\n  if (!Object.isExtensible(schema) && !isMultipartSchema(schema)) {\n    throw new TypeError(\"multipart() requires an extensible schema object\");\n  }\n\n  if (!isMultipartSchema(schema)) {\n    Object.defineProperty(schema, \"__farmMultipartSchema\", {\n      value: true,\n      configurable: false,\n      enumerable: false,\n      writable: false,\n    });\n  }\n\n  return schema as MultipartSchema<TSchema>;\n}\n\nexport function isMultipartSchema(value: unknown): value is MultipartSchema<SchemaLike> {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    (value as { __farmMultipartSchema?: unknown }).__farmMultipartSchema === true &&\n    typeof (value as SchemaLike).parse === \"function\"\n  );\n}\n\n/**\n * Encode a typed object as multipart FormData without converting File or Blob\n * values to JSON or base64.\n */\nexport function toFormData<TValues extends MultipartValues>(\n  values: TValues,\n): TypedFormData<TValues> {\n  const formData = new FormData();\n\n  for (const [key, value] of Object.entries(values)) {\n    if (isUnsafeFormKey(key)) continue;\n    if (Array.isArray(value)) {\n      for (const entry of value) appendFormValue(formData, key, entry);\n      continue;\n    }\n    appendFormValue(formData, key, value as MultipartField);\n  }\n\n  return formData as TypedFormData<TValues>;\n}\n\n/**\n * Stream JSON values as newline-delimited JSON. Each source value becomes one\n * independently decodable item instead of buffering the whole response.\n */\nexport function jsonStream<TItem>(\n  source: AsyncIterable<TItem> | Iterable<TItem>,\n  init: ResponseInit = {},\n): FarmStreamResponse<TItem> {\n  const iterator = toAsyncIterator(source);\n  const encoder = new TextEncoder();\n  let finished = false;\n  let cleanup: Promise<unknown> | undefined;\n  const closeSource = (reason?: unknown) =>\n    (cleanup ??= Promise.resolve().then(() => iterator.return?.(reason)));\n\n  const body = new ReadableStream<Uint8Array>(\n    {\n      async pull(controller) {\n        if (finished) return;\n\n        try {\n          const next = await iterator.next();\n          if (finished) return;\n          if (next.done) {\n            finished = true;\n            controller.close();\n            return;\n          }\n          controller.enqueue(encoder.encode(`${JSON.stringify(next.value)}\\n`));\n        } catch (error) {\n          if (finished) return;\n          finished = true;\n          try {\n            await closeSource(error);\n          } catch {\n            // Preserve the serialization/source error that failed the response stream.\n          }\n          controller.error(error);\n        }\n      },\n      async cancel(reason) {\n        finished = true;\n        await closeSource(reason);\n      },\n    },\n    {\n      // Do not read the next application event until the response consumer\n      // requests another chunk.\n      highWaterMark: 0,\n    },\n  );\n  const headers = new Headers(init.headers);\n  if (!headers.has(\"content-type\")) {\n    headers.set(\"content-type\", \"application/x-ndjson; charset=utf-8\");\n  }\n  headers.set(\"cache-control\", headers.get(\"cache-control\") ?? \"no-store\");\n\n  return new Response(body, {\n    ...init,\n    headers,\n  }) as FarmStreamResponse<TItem>;\n}\n\nexport function isJSONStreamResponse(response: { headers?: Pick<Headers, \"get\"> | null }): boolean {\n  const contentType = response.headers?.get?.(\"content-type\")?.toLowerCase() ?? \"\";\n  return contentType.includes(\"application/x-ndjson\") || contentType.includes(\"application/ndjson\");\n}\n\n/**\n * Decode a Farm JSON stream lazily. The response body is read only as the\n * consumer advances the async iterator, preserving fetch backpressure.\n */\nexport function readJSONStream<TItem>(response: Response): FarmAPIStream<TItem> {\n  if (!response.body) {\n    throw new TypeError(\"Cannot read a JSON stream response without a body\");\n  }\n\n  const reader = response.body.getReader();\n  const decoder = new TextDecoder();\n  let buffer = \"\";\n  let completed = false;\n  let cancelled = false;\n  let claimed = false;\n  let released = false;\n\n  const releaseReader = () => {\n    if (released) return;\n    released = true;\n    reader.releaseLock();\n  };\n  const parseLine = async (line: string) => {\n    try {\n      return JSON.parse(line) as TItem;\n    } catch (error) {\n      completed = true;\n      buffer = \"\";\n      // A tee branch can wait for an unread sibling during cancellation. The\n      // parse failure is already known and must not wait for producer cleanup.\n      void reader.cancel(error).catch(() => {});\n      releaseReader();\n      throw error;\n    }\n  };\n\n  const readNext = async (): Promise<IteratorResult<TItem>> => {\n    while (true) {\n      if (cancelled) return { done: true, value: undefined };\n      const lineEnd = buffer.indexOf(\"\\n\");\n      if (lineEnd >= 0) {\n        const line = buffer.slice(0, lineEnd).trim();\n        buffer = buffer.slice(lineEnd + 1);\n        if (!line) continue;\n        return { done: false, value: await parseLine(line) };\n      }\n\n      if (completed) {\n        const line = buffer.trim();\n        buffer = \"\";\n        if (!line) {\n          releaseReader();\n          return { done: true, value: undefined };\n        }\n        return { done: false, value: await parseLine(line) };\n      }\n\n      let chunk: ReadableStreamReadResult<Uint8Array>;\n      try {\n        chunk = await reader.read();\n      } catch (error) {\n        if (cancelled) return { done: true, value: undefined };\n        completed = true;\n        buffer = \"\";\n        releaseReader();\n        throw error;\n      }\n      if (cancelled) return { done: true, value: undefined };\n      completed = chunk.done;\n      buffer += decoder.decode(chunk.value, { stream: !chunk.done });\n    }\n  };\n\n  let readQueue = Promise.resolve();\n  const iterator: AsyncIterator<TItem> = {\n    next() {\n      const result = readQueue.then(readNext);\n      // A failed read must not poison subsequent operations on this iterator.\n      readQueue = result.then(\n        () => {},\n        () => {},\n      );\n      return result;\n    },\n    async return() {\n      cancelled = true;\n      completed = true;\n      buffer = \"\";\n      if (!released) {\n        try {\n          await reader.cancel();\n        } finally {\n          releaseReader();\n        }\n      }\n      return { done: true, value: undefined };\n    },\n  };\n\n  return {\n    response,\n    async cancel(reason) {\n      // Cancellation must interrupt the active reader, not wait in its queue.\n      cancelled = true;\n      completed = true;\n      buffer = \"\";\n      if (!released) {\n        try {\n          await reader.cancel(reason);\n        } finally {\n          releaseReader();\n        }\n      }\n    },\n    [Symbol.asyncIterator]() {\n      if (claimed) {\n        throw new TypeError(\"Farm API streams can only be consumed once\");\n      }\n      claimed = true;\n      return iterator;\n    },\n  };\n}\n\nexport function isFarmAPIStream(value: unknown): value is FarmAPIStream<unknown> {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    \"response\" in value &&\n    typeof (value as FarmAPIStream<unknown>).cancel === \"function\" &&\n    typeof (value as FarmAPIStream<unknown>)[Symbol.asyncIterator] === \"function\"\n  );\n}\n\nfunction appendFormValue(formData: FormData, key: string, value: MultipartField): void {\n  if (value === undefined) return;\n  if (value === null) {\n    formData.append(key, \"\");\n    return;\n  }\n  if (value instanceof Blob) {\n    formData.append(key, value);\n    return;\n  }\n  if (value instanceof Date) {\n    formData.append(key, value.toISOString());\n    return;\n  }\n  formData.append(key, String(value));\n}\n\nfunction isUnsafeFormKey(key: string): boolean {\n  return key === \"__proto__\" || key === \"constructor\" || key === \"prototype\";\n}\n\nfunction toAsyncIterator<TItem>(\n  source: AsyncIterable<TItem> | Iterable<TItem>,\n): AsyncIterator<TItem> {\n  if (Symbol.asyncIterator in Object(source)) {\n    return (source as AsyncIterable<TItem>)[Symbol.asyncIterator]();\n  }\n\n  const iterator = (source as Iterable<TItem>)[Symbol.iterator]();\n  return {\n    next: async () => iterator.next(),\n    return: iterator.return ? async (value?: unknown) => iterator.return!(value) : undefined,\n  };\n}\n","import { createEndpoint as betterCallEndpoint } from \"better-call\";\nimport { applyFarmCacheInvalidationTargets, type FarmCacheInvalidationTarget } from \"../cache\";\nimport { isMultipartSchema, type MultipartSchema, type TypedFormData } from \"./transport\";\nimport type { RouteSchema, RouteSchemaInput, RouteSchemaOutput } from \"./route-schema\";\n\n// Share the route factory's Zod and Standard Schema contract.\ntype AnySchema = RouteSchema;\n\ntype MaybePromise<T> = T | Promise<T>;\ntype Simplify<T> = { [TKey in keyof T]: T[TKey] } & {};\ntype UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (\n  value: infer TIntersection,\n) => void\n  ? TIntersection\n  : never;\n\n// Handlers receive parsed output; callers supply the schema input.\ntype InferOutput<T> = RouteSchemaOutput<T>;\n\ntype InferInput<T> = T extends { _input: infer I }\n  ? I\n  : T extends { \"~standard\": unknown }\n    ? RouteSchemaInput<T>\n    : T extends { parse: (data: infer I) => unknown }\n      ? I\n      : unknown;\n\ntype InferBodyInput<T> =\n  T extends MultipartSchema<AnySchema> ? TypedFormData<InferInput<T>> : InferInput<T>;\n\ntype InferHeadersOutput<T> = [T] extends [never]\n  ? Record<string, string>\n  : T extends AnySchema\n    ? InferOutput<T>\n    : Record<string, string>;\n\nexport type EndpointErrorSchema = AnySchema & { parse: (data: unknown) => unknown };\n\ntype EndpointErrorDefinitionBase<TStatus extends number> = {\n  status: TStatus;\n  /** Public message safe to expose to API callers. */\n  message?: string;\n};\n\nexport type EndpointErrorDefinition<\n  TSchema extends EndpointErrorSchema = EndpointErrorSchema,\n  TStatus extends number = number,\n> = EndpointErrorDefinitionBase<TStatus> &\n  (\n    | {\n        /** Schema for the public error payload exposed to API callers. */\n        data: TSchema;\n        schema?: never;\n      }\n    | {\n        data?: never;\n        /** @deprecated Use `data` for consistency with server functions. */\n        schema: TSchema;\n      }\n  );\n\nexport type EndpointErrorDefinitions = Record<\n  string,\n  EndpointErrorDefinition<EndpointErrorSchema, number>\n>;\n\ntype InferEndpointErrorSchema<TDefinition> = TDefinition extends {\n  data: infer TSchema extends AnySchema;\n}\n  ? TSchema\n  : TDefinition extends { schema: infer TSchema extends AnySchema }\n    ? TSchema\n    : never;\n\nexport type EndpointErrorContracts<TErrors extends EndpointErrorDefinitions> = {\n  [TCode in keyof TErrors]: {\n    data: InferOutput<InferEndpointErrorSchema<TErrors[TCode]>>;\n    status: TErrors[TCode][\"status\"];\n  };\n};\n\nexport type EndpointErrorHandler<TErrors extends EndpointErrorDefinitions> = <\n  TCode extends keyof TErrors & string,\n>(\n  code: TCode,\n  data: InferInput<InferEndpointErrorSchema<TErrors[TCode]>>,\n) => never;\n\n/** @deprecated Use `EndpointErrorHandler`. */\nexport type EndpointFail<TErrors extends EndpointErrorDefinitions> = EndpointErrorHandler<TErrors>;\n\nexport class EndpointFailure<TCode extends string = string, TData = unknown> extends Error {\n  readonly code: TCode;\n  readonly data: TData;\n  readonly status: number;\n\n  constructor(\n    code: TCode,\n    data: TData,\n    options: {\n      status: number;\n      message: string;\n    },\n  ) {\n    super(options.message);\n    this.name = \"EndpointFailure\";\n    this.code = code;\n    this.data = data;\n    this.status = options.status;\n  }\n}\n\nexport function isEndpointFailure(value: unknown): value is EndpointFailure<string, unknown> {\n  return value instanceof EndpointFailure;\n}\n\nexport type EndpointParamValue = string | string[];\nexport type EndpointParams = Record<string, EndpointParamValue>;\n\nexport type EndpointMiddlewareContext<\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> = {\n  body: TBody;\n  query: TQuery;\n  headers: THeaders;\n  request: Request;\n  /** Context accumulated from middleware that ran earlier in the chain. */\n  context: Readonly<TContext>;\n  params: EndpointParams;\n};\n\nexport type EndpointMiddlewareResult<TProvidedContext extends object = object> =\n  | TProvidedContext\n  | true\n  | false\n  | Response;\n\n/** A plain async function. No wrapper or `next()` callback is required. */\nexport type EndpointMiddleware<\n  TProvidedContext extends object = object,\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> = (\n  ctx: EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders>,\n) => MaybePromise<EndpointMiddlewareResult<TProvidedContext>>;\n\nexport type AnyEndpointMiddleware = (ctx: EndpointMiddlewareContext<any, any, any, any>) => unknown;\n\nexport type EndpointInvalidationTarget = FarmCacheInvalidationTarget;\n\nexport type EndpointInvalidationContext<\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> = EndpointMiddlewareContext<TContext, TBody, TQuery, THeaders> & {\n  /** The raw value returned by the endpoint handler. */\n  result: unknown;\n};\n\nexport type EndpointInvalidations<\n  TContext extends object = {},\n  TBody = unknown,\n  TQuery = unknown,\n  THeaders = Record<string, string>,\n> =\n  | readonly EndpointInvalidationTarget[]\n  | ((\n      context: EndpointInvalidationContext<TContext, TBody, TQuery, THeaders>,\n    ) => readonly EndpointInvalidationTarget[] | Promise<readonly EndpointInvalidationTarget[]>);\n\ntype ValidateEndpointMiddlewares<TMiddlewares extends readonly AnyEndpointMiddleware[]> = {\n  readonly [TIndex in keyof TMiddlewares]: TMiddlewares[TIndex] extends AnyEndpointMiddleware\n    ? [Awaited<ReturnType<TMiddlewares[TIndex]>>] extends [EndpointMiddlewareResult<object>]\n      ? TMiddlewares[TIndex]\n      : never\n    : never;\n};\n\ntype ContextFromMiddlewareResult<TResult> =\n  Exclude<TResult, Response | boolean> extends infer TContext\n    ? [TContext] extends [never]\n      ? {}\n      : TContext extends object\n        ? TContext\n        : {}\n    : {};\n\ntype ContextFromMiddleware<TMiddleware> = TMiddleware extends (...args: any[]) => infer TResult\n  ? ContextFromMiddlewareResult<Awaited<TResult>>\n  : {};\n\nexport type InferEndpointMiddlewareContext<\n  TMiddlewares extends readonly ((...args: any[]) => any)[],\n  TContext extends object = {},\n> = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]\n  ? TMiddleware extends (...args: any[]) => any\n    ? TRest extends readonly ((...args: any[]) => any)[]\n      ? InferEndpointMiddlewareContext<\n          TRest,\n          Simplify<TContext & ContextFromMiddleware<TMiddleware>>\n        >\n      : Simplify<TContext>\n    : Simplify<TContext>\n  : number extends TMiddlewares[\"length\"]\n    ? Simplify<TContext & UnionToIntersection<ContextFromMiddleware<TMiddlewares[number]>>>\n    : Simplify<TContext>;\n\nexport type EndpointOptions<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TMiddlewares extends readonly AnyEndpointMiddleware[] = readonly [],\n  TErrors extends EndpointErrorDefinitions = {},\n> = {\n  method?: \"GET\" | \"HEAD\" | \"QUERY\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\" | \"OPTIONS\";\n  body?: TBody;\n  query?: TQuery;\n  headers?: THeaders;\n  middleware?: TMiddlewares;\n  /**\n   * Cache keys, tags, and route paths made stale after a successful handler result.\n   * The resolver receives validated input and middleware context.\n   */\n  invalidates?: EndpointInvalidations<\n    InferEndpointMiddlewareContext<TMiddlewares>,\n    InferOutput<TBody>,\n    InferOutput<TQuery>,\n    InferHeadersOutput<THeaders>\n  >;\n  errors?: TErrors;\n  /** @deprecated Use plain functions in `middleware` for Farm endpoint middleware. */\n  use?: any[];\n};\n\nexport type EndpointHandler<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n  TContext extends object = {},\n  TErrors extends EndpointErrorDefinitions = {},\n> = (ctx: {\n  body: InferOutput<TBody>;\n  query: InferOutput<TQuery>;\n  headers: InferHeadersOutput<THeaders>;\n  request: Request;\n  context: Readonly<TContext>;\n  params: EndpointParams;\n  error: EndpointErrorHandler<TErrors>;\n  /** @deprecated Use `error`. */\n  fail: EndpointFail<TErrors>;\n}) => Promise<TResponse> | TResponse;\n\n// Type to represent an endpoint with its input/output types\nexport type TypedEndpoint<\n  TBody = never,\n  TQuery = never,\n  TResponse = any,\n  THeaders = Record<string, string>,\n  TErrors = never,\n  TBodyInput = TBody,\n  TQueryInput = TQuery,\n> = {\n  __types: {\n    body: TBody;\n    inputBody: TBodyInput;\n    query: TQuery;\n    inputQuery: TQueryInput;\n    headers: THeaders;\n    response: TResponse;\n    errors: TErrors;\n  };\n  __path?: string;\n  __method?: string;\n} & ((options?: { body?: TBodyInput; query?: TQueryInput }) => Promise<TResponse>);\n\ntype CreatedEndpoint<\n  TBody extends AnySchema,\n  TQuery extends AnySchema,\n  THeaders extends AnySchema,\n  TResponse,\n  TErrors extends EndpointErrorDefinitions = {},\n> = TypedEndpoint<\n  InferOutput<TBody>,\n  InferOutput<TQuery>,\n  Awaited<TResponse>,\n  InferHeadersOutput<THeaders>,\n  EndpointErrorContracts<TErrors>,\n  InferBodyInput<TBody>,\n  InferInput<TQuery>\n>;\n\ntype AnyEndpointOptions = EndpointOptions<\n  AnySchema,\n  AnySchema,\n  AnySchema,\n  readonly AnyEndpointMiddleware[],\n  EndpointErrorDefinitions\n>;\ntype EndpointBodyFromOptions<TOptions> = TOptions extends {\n  body: infer TBody extends AnySchema;\n}\n  ? TBody\n  : never;\ntype EndpointQueryFromOptions<TOptions> = TOptions extends {\n  query: infer TQuery extends AnySchema;\n}\n  ? TQuery\n  : never;\ntype EndpointHeadersFromOptions<TOptions> = TOptions extends {\n  headers: infer THeaders extends AnySchema;\n}\n  ? THeaders\n  : never;\ntype EndpointMiddlewaresFromOptions<TOptions> = TOptions extends {\n  middleware: infer TMiddlewares extends readonly AnyEndpointMiddleware[];\n}\n  ? TMiddlewares\n  : readonly [];\ntype EndpointErrorsFromOptions<TOptions> = TOptions extends {\n  errors: infer TErrors extends EndpointErrorDefinitions;\n}\n  ? TErrors\n  : {};\ntype MethodlessEndpointOptions = Omit<AnyEndpointOptions, \"method\">;\ntype EndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandler<\n  EndpointBodyFromOptions<TOptions>,\n  EndpointQueryFromOptions<TOptions>,\n  EndpointHeadersFromOptions<TOptions>,\n  TResponse,\n  InferEndpointMiddlewareContext<EndpointMiddlewaresFromOptions<TOptions>>,\n  EndpointErrorsFromOptions<TOptions>\n>;\ntype ValidatedEndpointHandlerFromOptions<TOptions, TResponse> = EndpointHandlerFromOptions<\n  TOptions,\n  TResponse\n> &\n  (EndpointMiddlewaresFromOptions<TOptions> extends ValidateEndpointMiddlewares<\n    EndpointMiddlewaresFromOptions<TOptions>\n  >\n    ? unknown\n    : never);\ntype CreatedEndpointFromOptions<TOptions, TResponse> = CreatedEndpoint<\n  EndpointBodyFromOptions<TOptions>,\n  EndpointQueryFromOptions<TOptions>,\n  EndpointHeadersFromOptions<TOptions>,\n  TResponse,\n  EndpointErrorsFromOptions<TOptions>\n>;\n\n/**\n * Create a Farm.js API endpoint\n *\n * Supports two patterns:\n * 1. File-based routing (path auto-inferred from file location):\n *    `export const POST = createEndpoint({ method: 'POST', body: schema }, handler)`\n *    `createEndpoint({ method: 'GET', query: z.object({...}) }, handler)`\n *\n * 2. Explicit path (for routes.ts at project root):\n *    `createEndpoint('/api/hello', { method: 'GET', query: z.object({...}) }, handler)`\n */\nexport function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function createEndpoint<const TOptions extends AnyEndpointOptions, TResponse = any>(\n  path: string,\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function createEndpoint<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: EndpointOptions<TBody, TQuery, THeaders, readonly []>,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function createEndpoint<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  path: string,\n  options: EndpointOptions<TBody, TQuery, THeaders, readonly []>,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function createEndpoint(\n  pathOrOptions:\n    | string\n    | EndpointOptions<any, any, any, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>,\n  optionsOrHandler:\n    | EndpointOptions<any, any, any, readonly AnyEndpointMiddleware[], EndpointErrorDefinitions>\n    | EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>,\n  maybeHandler?: EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>,\n): TypedEndpoint<any, any, any, any> {\n  // Determine if first arg is path or options\n  let path: string;\n  let options: EndpointOptions<\n    any,\n    any,\n    any,\n    readonly AnyEndpointMiddleware[],\n    EndpointErrorDefinitions\n  >;\n  let handler: EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>;\n\n  if (typeof pathOrOptions === \"string\") {\n    // createEndpoint('/path', options, handler)\n    path = pathOrOptions;\n    options = optionsOrHandler as typeof options;\n    handler = maybeHandler as typeof handler;\n  } else {\n    // createEndpoint(options, handler) - path will be set by API plugin from file location\n    path = \"\";\n    options = pathOrOptions;\n    handler = optionsOrHandler as typeof handler;\n  }\n\n  if (typeof handler !== \"function\") {\n    throw new TypeError(\"createEndpoint requires a handler function\");\n  }\n\n  const middleware = normalizeEndpointMiddleware(options.middleware);\n  const errors = normalizeEndpointErrors(options.errors);\n  const error = createEndpointErrorHandler(errors);\n  const wrappedHandler = (async (ctx: EndpointMiddlewareContext<any, any, any, any>) => {\n    const execution = await runEndpointMiddleware(\n      middleware,\n      ctx,\n      handler,\n      error,\n      options.invalidates,\n    );\n    return execution.result;\n  }) as typeof handler;\n  const {\n    middleware: _middleware,\n    errors: _errors,\n    invalidates: _invalidates,\n    ...betterCallOptions\n  } = options;\n\n  // Create the endpoint - path will be set later by API plugin if not provided\n  // We use a temporary path that will be replaced when the router is created\n  const endpoint = betterCallEndpoint(\n    path || \"/__farm_auto_path__\",\n    betterCallOptions as any,\n    wrappedHandler as any,\n  ) as any;\n\n  // Store the path and type information on the endpoint for later access\n  // Empty/undefined path means it will be inferred from file location by the API plugin\n  endpoint.__path = path || undefined;\n  endpoint.__method = options.method || \"GET\";\n  endpoint.__autoPath = !path; // Flag to indicate path should be auto-inferred\n  endpoint.__handler = wrappedHandler; // Used by Farm's route runtime.\n  endpoint.__farmInvoke = (ctx: EndpointMiddlewareContext<any, any, any, any>) =>\n    runEndpointMiddleware(middleware, ctx, handler, error, options.invalidates);\n  endpoint.__middleware = middleware;\n  endpoint.__sourceHandler = handler;\n  endpoint.__invalidates = options.invalidates;\n  endpoint.__errors = errors;\n\n  // Store type information for inference\n  endpoint.__types = {\n    body: options.body,\n    inputBody: isMultipartSchema(options.body) ? \"form-data\" : options.body,\n    query: options.query,\n    inputQuery: options.query,\n    headers: options.headers,\n    response: null as any,\n    errors,\n  };\n\n  return endpoint as any;\n}\n\nconst EMPTY_ENDPOINT_MIDDLEWARE = Object.freeze([]) as readonly AnyEndpointMiddleware[];\nconst EMPTY_ENDPOINT_CONTEXT = Object.freeze(Object.create(null)) as Readonly<\n  Record<string | symbol, unknown>\n>;\nconst UNSAFE_ENDPOINT_CONTEXT_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nfunction normalizeEndpointErrors(\n  definitions: EndpointErrorDefinitions | undefined,\n): Readonly<EndpointErrorDefinitions> {\n  if (definitions === undefined) return Object.freeze({});\n  if (!isPlainEndpointContext(definitions)) {\n    throw new TypeError(\"createEndpoint errors must be an object\");\n  }\n\n  const normalized: EndpointErrorDefinitions = Object.create(null);\n  for (const [code, definition] of Object.entries(definitions)) {\n    if (!code.trim()) {\n      throw new TypeError(\"Endpoint error codes cannot be empty\");\n    }\n    if (!definition || typeof definition !== \"object\") {\n      throw new TypeError(`Endpoint error \"${code}\" must be an object`);\n    }\n    if (\n      !Number.isInteger(definition.status) ||\n      definition.status < 400 ||\n      definition.status > 599\n    ) {\n      throw new TypeError(`Endpoint error \"${code}\" status must be an integer between 400 and 599`);\n    }\n    const dataSchema = resolveEndpointErrorSchema(definition);\n    if (!dataSchema || typeof dataSchema.parse !== \"function\") {\n      throw new TypeError(`Endpoint error \"${code}\" requires a data schema with parse()`);\n    }\n    if (definition.message !== undefined && typeof definition.message !== \"string\") {\n      throw new TypeError(`Endpoint error \"${code}\" message must be a string`);\n    }\n\n    normalized[code] = Object.freeze({ ...definition });\n  }\n\n  return Object.freeze(normalized);\n}\n\nfunction resolveEndpointErrorSchema(\n  definition: EndpointErrorDefinition<EndpointErrorSchema, number>,\n): EndpointErrorSchema | undefined {\n  if (definition.data && definition.schema) {\n    throw new TypeError(\"Endpoint errors cannot define both data and schema\");\n  }\n  return definition.data ?? definition.schema;\n}\n\nfunction createEndpointErrorHandler(\n  definitions: Readonly<EndpointErrorDefinitions>,\n): EndpointErrorHandler<EndpointErrorDefinitions> {\n  return ((code: string, data: unknown): never => {\n    const definition = definitions[code];\n    if (!definition) {\n      throw new TypeError(`Endpoint error \"${code}\" is not declared`);\n    }\n\n    const parsed = resolveEndpointErrorSchema(definition)!.parse(data);\n    throw new EndpointFailure(code, parsed, {\n      status: definition.status,\n      message: definition.message ?? \"Request failed\",\n    });\n  }) as EndpointErrorHandler<EndpointErrorDefinitions>;\n}\n\nfunction normalizeEndpointMiddleware(\n  middleware: readonly AnyEndpointMiddleware[] | undefined,\n): readonly AnyEndpointMiddleware[] {\n  if (middleware === undefined) return EMPTY_ENDPOINT_MIDDLEWARE;\n  if (!Array.isArray(middleware)) {\n    throw new TypeError(\"createEndpoint middleware must be an array of functions\");\n  }\n\n  const normalized = [...middleware];\n  for (const entry of normalized) {\n    if (typeof entry !== \"function\") {\n      throw new TypeError(\"createEndpoint middleware entries must be functions\");\n    }\n  }\n\n  return Object.freeze(normalized);\n}\n\nasync function runEndpointMiddleware(\n  middleware: readonly AnyEndpointMiddleware[],\n  handlerContext: EndpointMiddlewareContext<any, any, any, any>,\n  handler: EndpointHandler<any, any, any, any, any, EndpointErrorDefinitions>,\n  error: EndpointErrorHandler<EndpointErrorDefinitions>,\n  invalidations: EndpointInvalidations<any, any, any, any> | undefined,\n): Promise<{\n  result: unknown;\n  context: Readonly<Record<string | symbol, unknown>>;\n  handlerExecuted: boolean;\n  invalidations: readonly string[];\n}> {\n  let context = createInitialEndpointContext(handlerContext.context);\n\n  for (let index = 0; index < middleware.length; index++) {\n    const result = await middleware[index]({ ...handlerContext, context });\n\n    if (isEndpointResponse(result)) {\n      return {\n        result,\n        context,\n        handlerExecuted: false,\n        invalidations: [],\n      };\n    }\n    if (result === false) {\n      return {\n        result: forbiddenEndpointResponse(),\n        context,\n        handlerExecuted: false,\n        invalidations: [],\n      };\n    }\n    if (result === true) continue;\n\n    if (!isPlainEndpointContext(result)) {\n      throw new TypeError(\n        `Endpoint middleware ${index + 1} must return an object, true, false, or a Response`,\n      );\n    }\n\n    context = mergeEndpointContext(context, result, index);\n  }\n\n  const result = await handler({ ...handlerContext, context, error, fail: error });\n  return {\n    result,\n    context,\n    handlerExecuted: true,\n    invalidations: await applyEndpointInvalidations(\n      invalidations,\n      {\n        ...handlerContext,\n        context,\n        result,\n      },\n      result,\n    ),\n  };\n}\n\nasync function applyEndpointInvalidations(\n  declaration: EndpointInvalidations<any, any, any, any> | undefined,\n  context: EndpointInvalidationContext<any, any, any, any>,\n  result: unknown,\n): Promise<readonly string[]> {\n  if (!declaration || (isEndpointResponse(result) && result.status >= 400)) {\n    return [];\n  }\n\n  const targets = typeof declaration === \"function\" ? await declaration(context) : declaration;\n  if (!Array.isArray(targets)) {\n    throw new TypeError(\n      \"Endpoint invalidates must resolve to an array of { key }, { path }, or { tag } targets\",\n    );\n  }\n\n  return applyFarmCacheInvalidationTargets(targets);\n}\n\nfunction createInitialEndpointContext(value: unknown) {\n  if (value === undefined || value === null) return EMPTY_ENDPOINT_CONTEXT;\n  if (!isPlainEndpointContext(value)) {\n    throw new TypeError(\"Endpoint context must be a plain object\");\n  }\n\n  return mergeEndpointContext(EMPTY_ENDPOINT_CONTEXT, value);\n}\n\nfunction mergeEndpointContext(\n  current: Readonly<Record<string | symbol, unknown>>,\n  added: object,\n  middlewareIndex?: number,\n) {\n  const next = Object.assign(Object.create(null), current) as Record<string | symbol, unknown>;\n\n  for (const key of Reflect.ownKeys(added)) {\n    if (!Object.prototype.propertyIsEnumerable.call(added, key)) continue;\n    if (typeof key === \"string\" && UNSAFE_ENDPOINT_CONTEXT_KEYS.has(key)) {\n      throw new TypeError(`Endpoint middleware cannot provide the unsafe context key \"${key}\"`);\n    }\n    if (Object.prototype.hasOwnProperty.call(current, key)) {\n      const source =\n        middlewareIndex === undefined\n          ? \"Endpoint context\"\n          : `Endpoint middleware ${middlewareIndex + 1}`;\n      throw new TypeError(`${source} cannot replace the existing context key \"${String(key)}\"`);\n    }\n    next[key] = (added as Record<string | symbol, unknown>)[key];\n  }\n\n  return Object.freeze(next);\n}\n\nfunction isPlainEndpointContext(value: unknown): value is object {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction isEndpointResponse(value: unknown): value is Response {\n  return (\n    value instanceof Response ||\n    (typeof value === \"object\" &&\n      value !== null &&\n      \"headers\" in value &&\n      \"status\" in value &&\n      typeof (value as Response).arrayBuffer === \"function\")\n  );\n}\n\nfunction forbiddenEndpointResponse() {\n  return new Response(JSON.stringify({ error: \"Forbidden\" }), {\n    status: 403,\n    headers: { \"Content-Type\": \"application/json\" },\n  });\n}\n\n/**\n * Convenience method for GET requests\n */\nexport function GET<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function GET<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function GET<\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<never, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<never, TQuery, THeaders, TResponse>;\nexport function GET(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"GET\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"GET\" }, args[1]);\n}\n\n/**\n * Convenience method for HEAD requests\n */\nexport function HEAD<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function HEAD<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function HEAD<\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<never, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<never, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<never, TQuery, THeaders, TResponse>;\nexport function HEAD(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"HEAD\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"HEAD\" }, args[1]);\n}\n\n/**\n * Convenience method for safe, idempotent QUERY requests with a request body\n */\nexport function QUERY<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function QUERY<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function QUERY<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function QUERY(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"QUERY\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"QUERY\" }, args[1]);\n}\n\n/**\n * Convenience method for POST requests\n */\nexport function POST<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function POST<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function POST<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function POST(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"POST\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"POST\" }, args[1]);\n}\n\n/**\n * Convenience method for PUT requests\n */\nexport function PUT<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function PUT<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function PUT<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function PUT(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"PUT\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"PUT\" }, args[1]);\n}\n\n/**\n * Convenience method for DELETE requests\n */\nexport function DELETE<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function DELETE<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function DELETE<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function DELETE(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"DELETE\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"DELETE\" }, args[1]);\n}\n\n/**\n * Convenience method for PATCH requests\n */\nexport function PATCH<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function PATCH<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function PATCH<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function PATCH(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"PATCH\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"PATCH\" }, args[1]);\n}\n\n/**\n * Convenience method for OPTIONS requests\n */\nexport function OPTIONS<T = any>(\n  handler: EndpointHandler<never, never, never, T>,\n): CreatedEndpoint<never, never, never, T>;\nexport function OPTIONS<const TOptions extends MethodlessEndpointOptions, TResponse = any>(\n  options: TOptions,\n  handler: ValidatedEndpointHandlerFromOptions<TOptions, TResponse>,\n): CreatedEndpointFromOptions<TOptions, TResponse>;\nexport function OPTIONS<\n  TBody extends AnySchema = never,\n  TQuery extends AnySchema = never,\n  THeaders extends AnySchema = never,\n  TResponse = any,\n>(\n  options: Omit<EndpointOptions<TBody, TQuery, THeaders, readonly []>, \"method\">,\n  handler: EndpointHandler<TBody, TQuery, THeaders, TResponse>,\n): CreatedEndpoint<TBody, TQuery, THeaders, TResponse>;\nexport function OPTIONS(...args: any[]): any {\n  if (args.length === 1) {\n    return createEndpoint(\"\", { method: \"OPTIONS\" }, args[0]);\n  }\n  return createEndpoint(\"\", { ...args[0], method: \"OPTIONS\" }, args[1]);\n}\n","import {\n  createEndpoint,\n  type TypedEndpoint,\n  type AnyEndpointMiddleware,\n  type EndpointMiddlewareResult,\n  type InferEndpointMiddlewareContext,\n} from \"./endpoint\";\nimport {\n  assertBrowserStableRoutePath,\n  assertUniqueRouteParameters,\n  getRoutePatternShape,\n} from \"../routing/specificity\";\nimport type { RouteSchema, RouteSchemaInput, RouteSchemaOutput } from \"./route-schema\";\n\nexport type RouteMethod =\n  | \"GET\"\n  | \"HEAD\"\n  | \"QUERY\"\n  | \"POST\"\n  | \"PUT\"\n  | \"PATCH\"\n  | \"DELETE\"\n  | \"OPTIONS\";\nexport type RoutePathParams<Path extends string> = Path extends `${infer Head}/${infer Tail}`\n  ? RoutePathParams<Head> & RoutePathParams<Tail>\n  : Path extends `[[...${infer Name}]]`\n    ? { [K in Name]?: string[] }\n    : Path extends `[...${infer Name}]`\n      ? { [K in Name]: string[] }\n      : Path extends `[${infer Name}]`\n        ? { [K in Name]: string }\n        : {};\n\nexport interface RouteInputSchemas {\n  body?: RouteSchema;\n  query?: RouteSchema;\n  params?: RouteSchema;\n  headers?: RouteSchema;\n}\ntype Input<I, K extends PropertyKey> = K extends keyof I ? RouteSchemaInput<I[K]> : never;\ntype Output<I, K extends PropertyKey, Fallback = unknown> = K extends keyof I\n  ? RouteSchemaOutput<I[K]>\n  : Fallback;\n/** JSON responses have wire types, not server-side instances such as Date. */\nexport type RouteJSON<T> = T extends Response\n  ? unknown\n  : T extends { toJSON(): infer J }\n    ? RouteJSON<J>\n    : T extends bigint | symbol | ((...args: any[]) => any)\n      ? never\n      : T extends readonly (infer V)[]\n        ? RouteJSON<V>[]\n        : T extends object\n          ? { [K in keyof T]: RouteJSON<T[K]> }\n          : T;\n\nexport type RouteDefinition<\n  P extends string = string,\n  M extends RouteMethod = RouteMethod,\n  E = any,\n> = {\n  readonly path: P;\n  readonly method: M;\n  readonly endpoint: E;\n};\n\ntype RouteEndpoint<P extends string, I extends RouteInputSchemas, R> = TypedEndpoint<\n  Output<I, \"body\">,\n  Input<I, \"query\">,\n  RouteJSON<R>,\n  Input<I, \"headers\">,\n  never,\n  Input<I, \"body\">\n> & {\n  __types: { params: RoutePathParams<P>; inputHeaders: Input<I, \"headers\"> };\n};\n\ntype TrimStart<P extends string> = P extends `/${infer Rest}` ? TrimStart<Rest> : P;\ntype Join<P extends string, C extends string> = C extends \"\" ? P : `${P}/${TrimStart<C>}`;\ntype ParamsCheck<P extends string, I extends RouteInputSchemas> = I extends { params: infer S }\n  ? Exclude<keyof RoutePathParams<P>, keyof RouteSchemaOutput<S>> extends never\n    ? Exclude<keyof RouteSchemaOutput<S>, keyof RoutePathParams<P>> extends never\n      ? unknown\n      : { __error_unknown_route_params: never }\n    : { __error_missing_route_params: never }\n  : unknown;\n\ntype RouteMiddlewareResults = readonly (\n  | EndpointMiddlewareResult\n  | Promise<EndpointMiddlewareResult>\n)[];\n// Infer callback results directly so inline middleware is contextually typed before\n// its returned context is exposed to the route handler.\ntype RouteMiddlewares<Results extends readonly unknown[]> = {\n  readonly [K in keyof Results]: (context: Parameters<AnyEndpointMiddleware>[0]) => Results[K];\n};\n\nexport type RouteOptions<\n  P extends string,\n  I extends RouteInputSchemas,\n  O extends RouteSchema | undefined,\n  R,\n  MiddlewareResults extends RouteMiddlewareResults = RouteMiddlewareResults,\n> = {\n  input?: I & ParamsCheck<P, I>;\n  /** Validate plain JSON handler results. Raw Response/stream results are never buffered. */\n  output?: O;\n  middleware?: RouteMiddlewares<MiddlewareResults>;\n  handler(\n    request: Request,\n    context: {\n      input: {\n        body: Output<I, \"body\">;\n        query: Output<I, \"query\", Record<string, string | string[]>>;\n        headers: Output<I, \"headers\", Record<string, string>>;\n        params: Output<I, \"params\", RoutePathParams<P>>;\n      };\n      params: Output<I, \"params\", RoutePathParams<P>>;\n      context: Readonly<InferEndpointMiddlewareContext<RouteMiddlewares<MiddlewareResults>>>;\n    },\n  ): R | Promise<R>;\n};\n\ntype RouteBuilder<P extends string, M extends RouteMethod> = <\n  const C extends string,\n  const MiddlewareResults extends RouteMiddlewareResults,\n  const I extends RouteInputSchemas = {},\n  O extends RouteSchema | undefined = undefined,\n  R = unknown,\n>(\n  path: C,\n  options: RouteOptions<Join<P, C>, I, O, R, MiddlewareResults>,\n) => RouteDefinition<\n  Join<P, C>,\n  M,\n  RouteEndpoint<\n    Join<P, C>,\n    I,\n    Extract<Awaited<R>, Response> extends never\n      ? O extends RouteSchema\n        ? RouteSchemaOutput<O>\n        : Awaited<R>\n      : unknown\n  >\n>;\n\nexport type RouteFactory<P extends string = \"\"> = {\n  [M in Lowercase<RouteMethod>]: RouteBuilder<P, Uppercase<M> & RouteMethod>;\n} & {\n  /** Return a new builder; never mutate the parent scope. */\n  scope<const C extends string>(path: C): RouteFactory<Join<P, C>>;\n};\n\nexport type PluginRoutes = readonly RouteDefinition[];\nexport type PluginRoutesFactory<R extends PluginRoutes = PluginRoutes> = (context: {\n  route: RouteFactory;\n}) => R;\n\nexport function createRouteFactory(): RouteFactory {\n  return createRouteFactoryAt(\"\");\n}\n\nfunction createRouteFactoryAt(prefix: string): RouteFactory {\n  const factory: Record<string, unknown> = {\n    scope(child: string) {\n      return createRouteFactoryAt(joinRoutePath(prefix, child));\n    },\n  };\n  for (const method of [\n    \"GET\",\n    \"HEAD\",\n    \"QUERY\",\n    \"POST\",\n    \"PUT\",\n    \"PATCH\",\n    \"DELETE\",\n    \"OPTIONS\",\n  ] as const) {\n    factory[method.toLowerCase()] = (\n      child: string,\n      options: RouteOptions<string, any, any, any>,\n    ) => {\n      const path = joinRoutePath(prefix, child);\n      const input = options.input ?? {};\n      const endpoint = createEndpoint(\n        path,\n        {\n          method,\n          body: input.body,\n          query: input.query,\n          headers: input.headers,\n          middleware: options.middleware,\n        },\n        (ctx) =>\n          options.handler(ctx.request, {\n            input: { body: ctx.body, query: ctx.query, headers: ctx.headers, params: ctx.params },\n            params: ctx.params,\n            context: ctx.context,\n          }),\n      ) as any;\n      endpoint.__types.params = input.params;\n      endpoint.__output = options.output;\n      return Object.freeze({ path, method, endpoint });\n    };\n  }\n  return Object.freeze(factory) as RouteFactory;\n}\n\nfunction joinRoutePath(prefix: string, child: string): string {\n  if (typeof child !== \"string\") throw new TypeError(\"Route paths must be strings.\");\n  const path = child === \"\" ? prefix : `${prefix}/${child.replace(/^\\//, \"\")}`;\n  if (!(path === \"/api\" || path.startsWith(\"/api/\")) || /[?#]|\\/\\/|\\/$/.test(path)) {\n    throw new TypeError(\n      `Plugin route \"${path}\" must be a canonical /api path without a query, hash, or empty segment.`,\n    );\n  }\n  assertBrowserStableRoutePath(path);\n  assertUniqueRouteParameters(path, \"api\");\n  getRoutePatternShape(path, \"api\");\n  for (const segment of path.split(\"/\")) {\n    if ([\"__proto__\", \"constructor\", \"prototype\", \"$params\"].includes(segment)) {\n      throw new TypeError(`Route segment \"${segment}\" is reserved.`);\n    }\n  }\n  return path;\n}\n\ntype UnionToIntersection<U> = (U extends unknown ? (v: U) => void : never) extends (\n  v: infer I,\n) => void\n  ? I\n  : never;\ntype RouteTree<P extends string, M extends string, E> = P extends `${infer Head}/${infer Tail}`\n  ? { [K in Head]: RouteTree<Tail, M, E> }\n  : P extends \"\"\n    ? { [K in Lowercase<M>]: E }\n    : { [K in P]: { [Method in Lowercase<M>]: E } };\ntype HasMethodSegment<P extends string> = P extends `${infer H}/${infer T}`\n  ? H extends Lowercase<RouteMethod>\n    ? true\n    : HasMethodSegment<T>\n  : P extends Lowercase<RouteMethod>\n    ? true\n    : false;\ntype DefinitionTree<D> =\n  D extends RouteDefinition<infer P, infer M, infer E>\n    ? string extends P\n      ? {}\n      : (P extends `/api/integrations${string}` ? true : HasMethodSegment<P>) extends true\n        ? { [K in P extends `/api/${infer C}` ? `/${C}` : \"/\"]: { [Method in Lowercase<M>]: E } }\n        : RouteTree<P extends `/api/${infer C}` ? C : \"\", M, E>\n    : {};\nexport type PluginAPIRouter<C> = C extends { plugins: readonly (infer P)[] }\n  ? UnionToIntersection<\n      P extends { routes?: PluginRoutesFactory<infer R> } ? DefinitionTree<R[number]> : {}\n    >\n  : {};\n\nexport function resolvePluginRoutes(\n  plugins: readonly { name: string; routes?: PluginRoutesFactory }[] = [],\n): PluginRoutes {\n  return plugins.flatMap((plugin) => {\n    if (!plugin.routes) return [];\n    const routes = plugin.routes({ route: createRouteFactory() });\n    if (!Array.isArray(routes))\n      throw new TypeError(`Plugin \"${plugin.name}\" routes must return an array synchronously.`);\n    for (const route of routes) {\n      if (\n        !route ||\n        joinRoutePath(\"\", route.path) !== route.path ||\n        typeof route.endpoint !== \"function\" ||\n        ![\"GET\", \"HEAD\", \"QUERY\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\"].includes(\n          route.method,\n        )\n      ) {\n        throw new TypeError(`Plugin \"${plugin.name}\" returned an invalid API route.`);\n      }\n    }\n    return routes;\n  });\n}\n","import {\n  AmbiguousRouteError,\n  assertUniqueRouteParameters,\n  getRoutePatternShape,\n} from \"../routing/specificity\";\n\nexport interface APIRouteShapeSource<TSource> {\n  routePath: string;\n  source: TSource;\n  filePath: string;\n}\n\n/** Validate API URL shapes and return the lower-priority route replaced by this source. */\nexport function registerAPIRouteShape<TSource>(\n  shapes: Map<string, APIRouteShapeSource<TSource>>,\n  routePath: string,\n  filePath: string,\n  source: TSource,\n): string | undefined {\n  assertUniqueRouteParameters(routePath, \"api\");\n  const shape = getRoutePatternShape(routePath, \"api\");\n  const existing = shapes.get(shape);\n  const replacesPath = existing && existing.routePath !== routePath;\n\n  if (replacesPath && existing.source === source) {\n    throw new AmbiguousRouteError(\n      `Ambiguous API routes \"${existing.routePath}\" and \"${routePath}\" match the same URLs. Found ${existing.filePath} and ${filePath}. Keep only one route for this URL shape.`,\n    );\n  }\n\n  shapes.set(shape, { routePath, source, filePath });\n  return replacesPath ? existing.routePath : undefined;\n}\n","import { resolvePluginRoutes, type PluginRoutesFactory } from \"./route\";\nimport { registerAPIRouteShape } from \"./route-shape\";\n\ninterface MountedRoute {\n  path: string;\n  methods: string[];\n  endpoints: Record<string, any>;\n  filePath?: string;\n  pluginMethods?: string[];\n}\n\n/** The same registration step is used by dev discovery and the production bundle. */\nexport function mergePluginAPIRoutes(\n  existing: readonly MountedRoute[],\n  plugins: readonly { name: string; routes?: PluginRoutesFactory }[],\n  expected?: readonly { path: string; methods: readonly string[] }[],\n): Array<MountedRoute & { filePath: string }> {\n  const routes = new Map<string, MountedRoute & { filePath: string }>();\n  const shapes = new Map();\n  for (const route of existing) {\n    registerAPIRouteShape(shapes, route.path, route.filePath || route.path, \"app\");\n    routes.set(route.path, {\n      ...route,\n      filePath: route.filePath || \"\",\n      methods: [...route.methods],\n      endpoints: { ...route.endpoints },\n    });\n  }\n  for (const definition of resolvePluginRoutes(plugins)) {\n    registerAPIRouteShape(shapes, definition.path, `plugin:${definition.path}`, \"app\");\n    let route = routes.get(definition.path);\n    if (route?.methods.includes(definition.method)) {\n      throw new Error(\n        `Duplicate API route for ${definition.method} ${definition.path}. Plugin routes cannot override app or other plugin endpoints.`,\n      );\n    }\n    if (!route) {\n      route = { path: definition.path, filePath: \"\", methods: [], endpoints: {} };\n      routes.set(definition.path, route);\n    }\n    route.methods.push(definition.method);\n    route.pluginMethods = [...(route.pluginMethods ?? []), definition.method];\n    route.endpoints[definition.method] = definition.endpoint;\n  }\n  const result = [...routes.values()];\n  if (expected) {\n    const signature = (entries: readonly { path: string; methods: readonly string[] }[]) =>\n      entries\n        .map(({ path, methods }) => `${path}:${[...methods].sort().join(\",\")}`)\n        .sort()\n        .join(\"\\n\");\n    if (signature(result) !== signature(expected)) {\n      throw new Error(\n        \"Plugin API routes changed between build and runtime. Route paths and methods must be stable across environments; rebuild the app.\",\n      );\n    }\n  }\n  return result;\n}\n","import {\n  DEFAULT_FARM_API_BASE_PATH,\n  normalizeFarmAPIBasePath,\n  resolveFarmAPIRequestURL,\n  type ResolvedFarmAPIConfig,\n} from \"./config\";\n\n/** Return the same-origin path served by this Farm application. */\nexport function resolveFarmAPIServerBasePath(config: ResolvedFarmAPIConfig): string {\n  // Absolute API URLs belong to another origin and must not move local routes.\n  return config.baseURL.startsWith(\"/\") ? config.basePath : DEFAULT_FARM_API_BASE_PATH;\n}\n\n/** Translate a public local API pathname back to Farm's canonical `/api` route table. */\nexport function resolveFarmAPICanonicalPathname(\n  pathname: string,\n  serverBasePath = DEFAULT_FARM_API_BASE_PATH,\n): string {\n  const basePath = normalizeFarmAPIBasePath(serverBasePath);\n  if (basePath === DEFAULT_FARM_API_BASE_PATH) return pathname;\n\n  if (basePath === \"/\") {\n    return pathname === \"/\"\n      ? DEFAULT_FARM_API_BASE_PATH\n      : `${DEFAULT_FARM_API_BASE_PATH}${pathname.startsWith(\"/\") ? pathname : `/${pathname}`}`;\n  }\n\n  if (pathname === basePath) return DEFAULT_FARM_API_BASE_PATH;\n  if (pathname.startsWith(`${basePath}/`)) {\n    return `${DEFAULT_FARM_API_BASE_PATH}${pathname.slice(basePath.length)}`;\n  }\n  return pathname;\n}\n\n/** Resolve a canonical `/api` route to the path served by this application. */\nexport function resolveFarmAPIServerRoutePath(\n  routePath: string,\n  serverBasePath = DEFAULT_FARM_API_BASE_PATH,\n): string {\n  return resolveFarmAPIRequestURL(routePath, serverBasePath).pathname;\n}\n","/** Server-only schema contract shared by declarative routes and the API runtime. */\nexport interface RouteSchema {\n  readonly _input?: unknown;\n  readonly _output?: unknown;\n  parse?: (value: unknown) => unknown;\n  parseAsync?: (value: unknown) => Promise<unknown>;\n  readonly \"~standard\"?: {\n    readonly types?: { input: unknown; output: unknown };\n    validate(value: unknown): unknown;\n  };\n}\n\nexport type RouteSchemaInput<T> = T extends { _input: infer I }\n  ? I\n  : T extends { \"~standard\": { types?: { input: infer I } } }\n    ? I\n    : unknown;\n\nexport type RouteSchemaOutput<T> = T extends { _output: infer O }\n  ? O\n  : T extends { \"~standard\": { types?: { output: infer O } } }\n    ? O\n    : T extends { parse: (...args: any[]) => infer O }\n      ? Awaited<O>\n      : unknown;\n\nexport async function parseRouteSchema(schema: RouteSchema, value: unknown): Promise<unknown> {\n  if (schema[\"~standard\"]) {\n    const result = (await schema[\"~standard\"].validate(value)) as {\n      value?: unknown;\n      issues?: readonly unknown[];\n    };\n    if (result.issues)\n      throw Object.assign(new Error(\"Validation failed\"), { issues: result.issues });\n    return result.value;\n  }\n  if (schema.parseAsync) return schema.parseAsync(value);\n  if (schema.parse) return schema.parse(value);\n  throw new TypeError(\"Route validators must implement Standard Schema or parse().\");\n}\n","import { compareRouteSpecificity, type RouteSegmentSpecificity } from \"../routing/specificity\";\n\nexport type APIRouteParamValue = string | string[];\nexport type APIRouteParams = Record<string, APIRouteParamValue>;\n\nexport interface APIRouteMatch<T extends { path: string }> {\n  route: T;\n  params: APIRouteParams;\n}\n\nexport function matchAPIRoute<T extends { path: string }>(\n  routes: Map<string, T>,\n  pathname: string,\n): APIRouteMatch<T> | null {\n  const exactRoute = routes.get(pathname);\n  if (exactRoute) {\n    return { route: exactRoute, params: {} };\n  }\n\n  const normalizedPathname = normalizePathname(pathname);\n  if (normalizedPathname !== pathname) {\n    const normalizedRoute = routes.get(normalizedPathname);\n    if (normalizedRoute) {\n      return { route: normalizedRoute, params: {} };\n    }\n  }\n\n  let bestMatch: APIRouteMatch<T> | null = null;\n  let bestSpecificity: RouteSegmentSpecificity[] | null = null;\n\n  for (const route of routes.values()) {\n    const params = matchRoutePath(route.path, pathname);\n    if (!params) continue;\n\n    const specificity = getAPIRouteSpecificity(route.path);\n    if (bestSpecificity === null || compareRouteSpecificity(specificity, bestSpecificity) < 0) {\n      bestMatch = { route, params };\n      bestSpecificity = specificity;\n    }\n  }\n\n  return bestMatch;\n}\n\nfunction matchRoutePath(routePath: string, pathname: string): APIRouteParams | null {\n  const routeSegments = getPathSegments(routePath);\n  const pathnameSegments = getPathSegments(pathname);\n  const params: APIRouteParams = {};\n  let pathIndex = 0;\n\n  for (const routeSegment of routeSegments) {\n    const dynamicSegment = parseDynamicSegment(routeSegment);\n\n    if (dynamicSegment?.catchAll) {\n      const remainingSegments = pathnameSegments.slice(pathIndex).map(decodePathSegment);\n      if (remainingSegments.length === 0 && !dynamicSegment.optional) {\n        return null;\n      }\n      if (remainingSegments.length > 0) {\n        params[dynamicSegment.name] = remainingSegments;\n      }\n      pathIndex = pathnameSegments.length;\n      continue;\n    }\n\n    const pathnameSegment = pathnameSegments[pathIndex];\n    if (pathnameSegment === undefined) {\n      return null;\n    }\n\n    if (dynamicSegment) {\n      params[dynamicSegment.name] = decodePathSegment(pathnameSegment);\n      pathIndex++;\n      continue;\n    }\n\n    if (decodePathSegment(routeSegment) !== decodePathSegment(pathnameSegment)) {\n      return null;\n    }\n\n    pathIndex++;\n  }\n\n  return pathIndex === pathnameSegments.length ? params : null;\n}\n\nfunction getPathSegments(pathname: string): string[] {\n  return normalizePathname(pathname)\n    .split(\"/\")\n    .filter((segment) => segment.length > 0);\n}\n\nfunction getAPIRouteSpecificity(routePath: string): RouteSegmentSpecificity[] {\n  return getPathSegments(routePath).map((segment) => {\n    const dynamic = parseDynamicSegment(segment);\n    if (!dynamic) return \"static\";\n    if (!dynamic.catchAll) return \"dynamic\";\n    return dynamic.optional ? \"optional-catch-all\" : \"catch-all\";\n  });\n}\n\nfunction normalizePathname(pathname: string): string {\n  if (pathname.length > 1 && pathname.endsWith(\"/\")) {\n    return pathname.replace(/\\/+$/, \"\");\n  }\n\n  return pathname;\n}\n\nexport function parseDynamicSegment(\n  segment: string,\n): { name: string; catchAll: boolean; optional: boolean } | null {\n  const optionalCatchAll = segment.match(/^\\[\\[\\.\\.\\.(.+)\\]\\]$/);\n  if (optionalCatchAll?.[1]) {\n    return { name: optionalCatchAll[1], catchAll: true, optional: true };\n  }\n\n  const catchAll = segment.match(/^\\[\\.\\.\\.(.+)\\]$/);\n  if (catchAll?.[1]) {\n    return { name: catchAll[1], catchAll: true, optional: false };\n  }\n\n  const dynamic = segment.match(/^\\[(.+)\\]$/);\n  if (dynamic?.[1]) {\n    return { name: dynamic[1], catchAll: false, optional: false };\n  }\n\n  return null;\n}\n\nfunction decodePathSegment(segment: string): string {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n","import { _runWithCurrentRequest } from \"../server/request\";\nimport {\n  decodeFarmCacheInvalidations,\n  encodeFarmCacheInvalidations,\n  FARM_CACHE_INVALIDATION_HEADER,\n} from \"../cache-invalidation\";\nimport { isEndpointFailure, type EndpointFailure } from \"./endpoint\";\nimport {\n  bufferFarmRequestBody,\n  createFarmRequestBodyErrorResponse,\n  DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT,\n} from \"../server-http\";\nimport { DEFAULT_FARM_API_BASE_PATH, normalizeFarmAPIBasePath } from \"./config\";\nimport { resolveFarmAPICanonicalPathname } from \"./server-path\";\nimport { parseRouteSchema } from \"./route-schema\";\nimport { omitFarmResponseBody } from \"../response-body\";\n\nexport { registerAPIRouteShape, type APIRouteShapeSource } from \"./route-shape\";\nexport { mergePluginAPIRoutes } from \"./plugin-route-runtime\";\n\nexport {\n  matchAPIRoute,\n  type APIRouteParams,\n  type APIRouteParamValue,\n  type APIRouteMatch,\n} from \"./route-pattern\";\nimport { matchAPIRoute, type APIRouteParams, type APIRouteMatch } from \"./route-pattern\";\ninterface APIRouteMethodTable {\n  methods: string[];\n  endpoints: Record<string, any>;\n}\n\nexport function resolveAPIRouteEndpoint(\n  route: APIRouteMethodTable,\n  method: string,\n): any | undefined {\n  const normalizedMethod = method.toUpperCase();\n  return (\n    route.endpoints[normalizedMethod] ??\n    (normalizedMethod === \"HEAD\" ? route.endpoints.GET : undefined)\n  );\n}\n\nexport function getAllowedAPIRouteMethods(route: APIRouteMethodTable): string[] {\n  const methods = [...route.methods];\n  const getIndex = methods.indexOf(\"GET\");\n  if (getIndex >= 0 && !methods.includes(\"HEAD\")) {\n    methods.splice(getIndex + 1, 0, \"HEAD\");\n  }\n  return methods;\n}\n\n/** Match canonical routes through a configurable same-origin public API path. */\nexport function matchAPIRouteAtBasePath<T extends { path: string }>(\n  routes: Map<string, T>,\n  pathname: string,\n  serverBasePath = DEFAULT_FARM_API_BASE_PATH,\n): APIRouteMatch<T> | null {\n  const directMatch = matchAPIRoute(routes, pathname);\n  if (directMatch) return directMatch;\n\n  const canonicalPathname = resolveFarmAPICanonicalPathname(pathname, serverBasePath);\n  return canonicalPathname === pathname ? null : matchAPIRoute(routes, canonicalPathname);\n}\n\n/** Test whether a pathname belongs to the configured local API surface. */\nexport function isFarmAPIPathname(\n  pathname: string,\n  serverBasePath = DEFAULT_FARM_API_BASE_PATH,\n): boolean {\n  const basePath = normalizeFarmAPIBasePath(serverBasePath);\n  return basePath !== \"/\" && (pathname === basePath || pathname.startsWith(`${basePath}/`));\n}\n\nexport async function invokeAPIRouteEndpoint(\n  endpoint: any,\n  request: Request,\n  params: APIRouteParams = {},\n  bodySizeLimit = DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT,\n): Promise<Response> {\n  try {\n    request = await bufferFarmRequestBody(request, bodySizeLimit);\n  } catch (error) {\n    const response = createFarmRequestBodyErrorResponse(error);\n    if (response) return response;\n    throw error;\n  }\n\n  const response = await _runWithCurrentRequest(request, () =>\n    invokeAPIRouteEndpointInContext(endpoint, request, params),\n  );\n\n  if (request.method.toUpperCase() !== \"HEAD\") {\n    return response;\n  }\n\n  return omitFarmResponseBody(response);\n}\n\nasync function invokeAPIRouteEndpointInContext(\n  endpoint: any,\n  request: Request,\n  params: APIRouteParams,\n): Promise<Response> {\n  const queryContentTypeError = validateQueryContentType(request);\n  if (queryContentTypeError) {\n    return queryContentTypeError;\n  }\n\n  // `createEndpoint` brands its parsed-context handler explicitly. Plain route\n  // exports always receive the Web Request regardless of their parameter name;\n  // inferring a calling convention from `Function#toString()` misclassified\n  // valid handlers named `context`, `ctx`, or using destructuring.\n  const farmHandler = endpoint.__handler || null;\n\n  if (!farmHandler) {\n    const result = await endpoint(request, {\n      params: Promise.resolve(params),\n    });\n    return normalizeRouteResponse(result);\n  }\n\n  const url = new URL(request.url);\n  // Repeated keys collect into arrays, the same representation the rest of the\n  // framework hands to routes, and the same helper this path already uses for\n  // urlencoded and multipart bodies. Spread back onto a normal object so an\n  // endpoint without a query schema still receives the object shape it did\n  // before; `entriesToObject` has already dropped the prototype-poisoning keys.\n  const query: Record<string, string | string[]> = {\n    ...searchParamsToObject(url.searchParams),\n  };\n\n  let body: any = undefined;\n  if (request.method.toUpperCase() !== \"GET\" && request.method.toUpperCase() !== \"HEAD\") {\n    const parsedBody = await readRequestBody(request);\n    if (parsedBody.error) return parsedBody.error;\n    body = parsedBody.body;\n  }\n\n  const headers = Object.fromEntries(request.headers.entries());\n  const types = endpoint.__types || {};\n\n  const queryValidation = await validateInput(types.query, query, \"Invalid query parameters\");\n  if (queryValidation instanceof Response) {\n    return queryValidation;\n  }\n\n  const bodyValidation = await validateInput(types.body, body, \"Invalid request body\");\n  if (bodyValidation instanceof Response) {\n    return bodyValidation;\n  }\n\n  const headersValidation = await validateInput(types.headers, headers, \"Invalid request headers\");\n  if (headersValidation instanceof Response) {\n    return headersValidation;\n  }\n\n  const paramsValidation = await validateInput(types.params, params, \"Invalid route parameters\");\n  if (paramsValidation instanceof Response) return paramsValidation;\n\n  const handlerContext = {\n    query: queryValidation,\n    body: bodyValidation,\n    headers: headersValidation,\n    request,\n    context: {},\n    params: paramsValidation,\n  };\n  let execution: {\n    result: unknown;\n    context: unknown;\n    handlerExecuted: boolean;\n    invalidations: readonly string[];\n  };\n  try {\n    execution =\n      typeof endpoint.__farmInvoke === \"function\"\n        ? await endpoint.__farmInvoke(handlerContext)\n        : {\n            result: await farmHandler(handlerContext),\n            context: handlerContext.context,\n            handlerExecuted: true,\n            invalidations: [],\n          };\n  } catch (error) {\n    if (isEndpointFailure(error)) {\n      return createEndpointFailureResponse(error);\n    }\n    throw error;\n  }\n\n  if (execution.handlerExecuted && endpoint.__output && !isWebResponse(execution.result)) {\n    try {\n      execution.result = await parseRouteSchema(endpoint.__output, execution.result);\n    } catch {\n      throw new Error(\"API route returned a value that does not match its output schema.\");\n    }\n  }\n  const response = normalizeRouteResponse(execution.result);\n  return attachEndpointInvalidations(response, execution.invalidations);\n}\n\nfunction validateQueryContentType(request: Request): Response | null {\n  if (request.method.toUpperCase() !== \"QUERY\" || request.headers.has(\"content-type\")) {\n    return null;\n  }\n\n  return new Response(\n    JSON.stringify({\n      error: \"Invalid QUERY request\",\n      message: \"QUERY requests must include a Content-Type header.\",\n    }),\n    {\n      status: 400,\n      headers: { \"Content-Type\": \"application/json\" },\n    },\n  );\n}\n\nexport function normalizeRouteResponse(result: unknown): Response {\n  if (isWebResponse(result)) {\n    return result;\n  }\n\n  if (result === undefined) {\n    return new Response(null, { status: 204 });\n  }\n\n  return new Response(JSON.stringify(result), {\n    status: 200,\n    headers: { \"Content-Type\": \"application/json\" },\n  });\n}\n\nexport function isWebResponse(value: unknown): value is Response {\n  return (\n    value instanceof Response ||\n    (typeof value === \"object\" &&\n      value !== null &&\n      \"headers\" in value &&\n      \"status\" in value &&\n      typeof (value as Response).arrayBuffer === \"function\")\n  );\n}\n\nfunction attachEndpointInvalidations(response: Response, keys: readonly string[]): Response {\n  const existing = decodeFarmCacheInvalidations(\n    response.headers.get(FARM_CACHE_INVALIDATION_HEADER),\n  );\n  const encoded = encodeFarmCacheInvalidations([...existing, ...keys]);\n  if (!encoded) return response;\n\n  const headers = new Headers(response.headers);\n  headers.set(FARM_CACHE_INVALIDATION_HEADER, encoded);\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nexport function createEndpointFailureResponse(failure: EndpointFailure<string, unknown>): Response {\n  return new Response(\n    JSON.stringify({\n      error: {\n        code: failure.code,\n        message: failure.message,\n        data: failure.data,\n      },\n    }),\n    {\n      status: failure.status,\n      headers: {\n        \"cache-control\": \"no-store\",\n        \"content-type\": \"application/json\",\n      },\n    },\n  );\n}\n\ninterface RequestBodyParseResult {\n  body?: unknown;\n  error?: Response;\n}\n\nasync function readRequestBody(request: Request): Promise<RequestBodyParseResult> {\n  const contentType = request.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n\n  try {\n    if (contentType === \"multipart/form-data\") {\n      return { body: formDataToObject(await request.clone().formData()) };\n    }\n\n    const text = await request.clone().text();\n    if (!text) return { body: undefined };\n    if (contentType === \"application/x-www-form-urlencoded\") {\n      return { body: searchParamsToObject(new URLSearchParams(text)) };\n    }\n    if (contentType === \"application/json\" || contentType?.endsWith(\"+json\")) {\n      return { body: JSON.parse(text) };\n    }\n\n    // A body is only parsed as JSON when the request says it is JSON, or when it\n    // declares no type at all (the permissive path kept for non-browser callers\n    // that omit the header).\n    //\n    // Parsing a *declared* non-JSON type as JSON removed the barrier that keeps\n    // browsers from reaching this surface cross-origin: `text/plain`,\n    // `application/x-www-form-urlencoded`, and `multipart/form-data` are the\n    // CORS \"simple\" types that a cross-site page may send with credentials and\n    // without a preflight. Honouring the declared type means such a request no\n    // longer arrives as a parsed JSON object.\n    if (contentType === undefined) {\n      return { body: JSON.parse(text) };\n    }\n\n    return { body: undefined };\n  } catch {\n    if (contentType === \"application/json\" || contentType?.endsWith(\"+json\")) {\n      return {\n        error: new Response(\n          JSON.stringify({\n            error: \"Invalid request body\",\n            message: \"The request body is not valid JSON.\",\n          }),\n          {\n            status: 400,\n            headers: { \"Content-Type\": \"application/json\" },\n          },\n        ),\n      };\n    }\n    // The body format is unsupported or malformed. Schema validation below\n    // will turn the missing value into a typed 400 response when applicable.\n  }\n\n  return { body: undefined };\n}\n\nfunction formDataToObject(\n  formData: FormData,\n): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n  return entriesToObject(formData.entries());\n}\n\nfunction searchParamsToObject(searchParams: URLSearchParams): Record<string, string | string[]> {\n  return entriesToObject(searchParams.entries());\n}\n\nfunction entriesToObject<TValue>(\n  entries: IterableIterator<[string, TValue]>,\n): Record<string, TValue | TValue[]> {\n  const output: Record<string, TValue | TValue[]> = Object.create(null);\n  for (const [key, value] of entries) {\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") continue;\n    const current = output[key];\n    if (current === undefined) {\n      output[key] = value;\n    } else if (Array.isArray(current)) {\n      current.push(value);\n    } else {\n      output[key] = [current, value];\n    }\n  }\n  return output;\n}\n\nasync function validateInput(\n  schema: any,\n  value: unknown,\n  error: string,\n): Promise<unknown | Response> {\n  if (!schema) return value;\n  try {\n    return await parseRouteSchema(schema, value);\n  } catch (validationError: any) {\n    return Response.json(\n      {\n        error,\n        details: (validationError.issues || validationError.errors || []).map((issue: any) => ({\n          path: issue.path,\n          message: issue.message,\n          code: issue.code,\n        })),\n      },\n      { status: 400 },\n    );\n  }\n}\n","export function isFarmAPIRouteFileName(fileName: string): boolean {\n  return /^route\\.(?:ts|tsx|js|jsx)$/.test(fileName);\n}\n","import { mergePluginAPIRoutes } from \"./plugin-route-runtime\";\nimport type { FarmPlugin } from \"../plugin\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport { logger } from \"../utils\";\nimport type { ProgrammaticApiRoute } from \"../routes\";\nimport { createProgrammaticRouteModuleId } from \"../routes-shared\";\nimport { findProgrammaticRouteFilesInDir } from \"../routes.server\";\nimport {\n  getFarmRouteRuntimeConfig,\n  normalizeFarmRouteRuntimeConfig,\n  type FarmRouteRuntimeConfig,\n} from \"../route-runtime\";\nimport { _runWithFarmI18nRequest, type FarmI18nRuntime } from \"../i18n/server\";\nimport {\n  getAllowedAPIRouteMethods,\n  invokeAPIRouteEndpoint,\n  registerAPIRouteShape,\n  type APIRouteShapeSource,\n  matchAPIRouteAtBasePath,\n  matchAPIRoute,\n  resolveAPIRouteEndpoint,\n  type APIRouteMatch,\n} from \"./runtime\";\nimport { isFarmAPIRouteFileName } from \"./route-files\";\nimport { AmbiguousRouteError, NonTerminalCatchAllRouteError } from \"../routing/specificity\";\n\nexport interface APIRoute extends FarmRouteRuntimeConfig {\n  pluginMethods?: string[];\n  path: string;\n  filePath: string;\n  methods: string[];\n  endpoints: Record<string, any>;\n}\n\nexport interface APIRouteManagerOptions {\n  plugins?: readonly FarmPlugin[];\n  throwOnLoadError?: boolean;\n  i18n?: FarmI18nRuntime;\n  bodySizeLimit?: number;\n  /** Same-origin path where canonical `/api` routes are served. */\n  basePath?: string;\n}\n\nexport interface APIRouteHandlerOptions {\n  /** Let a framework request boundary report the original endpoint error. */\n  throwOnError?: boolean;\n}\n\nexport class APIRouteConflictError extends Error {\n  constructor(routePath: string, method: string, existingFile: string, conflictingFile: string) {\n    super(\n      `Duplicate API route for ${method.toUpperCase()} ${routePath}: ${existingFile} conflicts with ${conflictingFile}`,\n    );\n    this.name = \"APIRouteConflictError\";\n  }\n}\n\nexport const API_ROUTE_METHODS = [\n  \"GET\",\n  \"HEAD\",\n  \"QUERY\",\n  \"POST\",\n  \"PUT\",\n  \"DELETE\",\n  \"PATCH\",\n  \"OPTIONS\",\n] as const;\n\nexport class APIRouteManager {\n  private plugins: readonly FarmPlugin[];\n  private routes: Map<string, APIRoute> = new Map();\n  private endpointSources: Map<string, Map<string, { appDir: string; filePath: string }>> =\n    new Map();\n  private routeShapes = new Map<string, APIRouteShapeSource<string>>();\n  private viteServer?: ViteDevServer;\n  private appDirs: string[];\n  private throwOnLoadError: boolean;\n  private i18n?: FarmI18nRuntime;\n  private bodySizeLimit?: number;\n  private basePath?: string;\n\n  constructor(\n    appDir: string | readonly string[],\n    viteServer?: ViteDevServer,\n    options: APIRouteManagerOptions = {},\n  ) {\n    this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir as string];\n    this.viteServer = viteServer;\n    this.plugins = options.plugins ?? [];\n    this.throwOnLoadError = options.throwOnLoadError === true;\n    this.i18n = options.i18n;\n    this.bodySizeLimit = options.bodySizeLimit;\n    this.basePath = options.basePath;\n  }\n\n  /**\n   * Discover route.ts files in /app/api and explicit endpoints in root routes.ts\n   */\n  async discoverRoutes(): Promise<void> {\n    const previousRoutes = this.routes;\n    const previousEndpointSources = this.endpointSources;\n    const previousRouteShapes = this.routeShapes;\n    this.routes = new Map();\n    this.endpointSources = new Map();\n    this.routeShapes = new Map();\n\n    try {\n      for (const appDir of this.appDirs) {\n        const apiDir = path.join(appDir, \"api\");\n        let routeFiles: string[] = [];\n\n        if (fs.existsSync(apiDir)) {\n          routeFiles = this.findRouteFiles(apiDir);\n        }\n\n        for (const filePath of routeFiles) {\n          await this.loadRoute(filePath, appDir);\n        }\n\n        await this.loadRootRoutes(appDir);\n        await this.loadProgrammaticApiRoutes(appDir);\n      }\n      this.routes = new Map(\n        mergePluginAPIRoutes([...this.routes.values()], this.plugins).map((route) => [\n          route.path,\n          route,\n        ]),\n      );\n    } catch (error) {\n      this.routes = previousRoutes;\n      this.endpointSources = previousEndpointSources;\n      this.routeShapes = previousRouteShapes;\n      throw error;\n    }\n\n    if (process.env.FARM_VERBOSE) {\n      logger.success(`Discovered ${this.routes.size} API routes`);\n      for (const [routePath, route] of this.routes) {\n        logger.info(`  ${route.methods.join(\", \")} ${routePath}`);\n      }\n    }\n  }\n\n  /**\n   * Recursively find all route.ts files\n   */\n  private findRouteFiles(dir: string): string[] {\n    const files: string[] = [];\n\n    if (!fs.existsSync(dir)) {\n      return files;\n    }\n\n    const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n    for (const entry of entries) {\n      const fullPath = path.join(dir, entry.name);\n\n      if (entry.isDirectory()) {\n        files.push(...this.findRouteFiles(fullPath));\n      } else if (isFarmAPIRouteFileName(entry.name)) {\n        files.push(fullPath);\n      }\n    }\n\n    return files;\n  }\n\n  /**\n   * Load a route.ts file and extract HTTP method exports\n   */\n  private async loadRoute(filePath: string, appDir: string): Promise<void> {\n    try {\n      // Convert file path to API route path\n      // /app/api/auth/login/route.ts -> /api/auth/login\n      const apiDir = path.join(appDir, \"api\");\n      const relativePath = path.relative(apiDir, path.dirname(filePath));\n      const routePath = \"/api/\" + (relativePath === \".\" ? \"\" : relativePath.replace(/\\\\/g, \"/\"));\n\n      const routeModule = await this.loadModule(filePath);\n\n      const endpoints: Record<string, any> = {};\n      const availableMethods: string[] = [];\n\n      for (const method of API_ROUTE_METHODS) {\n        if (routeModule[method]) {\n          endpoints[method] = routeModule[method];\n          availableMethods.push(method);\n        }\n      }\n\n      if (availableMethods.length > 0) {\n        const existingSources = this.endpointSources.get(routePath);\n        if (existingSources) {\n          for (const method of availableMethods) {\n            const existingSource = existingSources.get(method);\n            if (existingSource?.appDir === appDir) {\n              throw new APIRouteConflictError(routePath, method, existingSource.filePath, filePath);\n            }\n          }\n        }\n        const runtimeConfig = normalizeFarmRouteRuntimeConfig(\n          getFarmRouteRuntimeConfig(routeModule),\n          `API route \"${routePath}\"`,\n        );\n        this.registerRouteShape(routePath, filePath, appDir);\n        const existingRoute = this.routes.get(routePath);\n        const mergedMethods = existingRoute ? [...existingRoute.methods] : [];\n        for (const method of availableMethods) {\n          if (!mergedMethods.includes(method)) mergedMethods.push(method);\n        }\n        this.routes.set(routePath, {\n          ...existingRoute,\n          path: routePath,\n          filePath,\n          methods: mergedMethods,\n          endpoints: { ...existingRoute?.endpoints, ...endpoints },\n          ...runtimeConfig,\n        });\n        const nextSources = new Map(existingSources);\n        for (const method of availableMethods) {\n          nextSources.set(method, { appDir, filePath });\n        }\n        this.endpointSources.set(routePath, nextSources);\n      }\n    } catch (error) {\n      this.handleLoadError(`Error loading route ${filePath}`, error);\n    }\n  }\n\n  /**\n   * Load explicit-path endpoints from src/routes.ts-style files.\n   */\n  private async loadRootRoutes(appDir: string): Promise<void> {\n    const routesFile = this.findRootRoutesFile(appDir);\n    if (!routesFile) {\n      return;\n    }\n\n    try {\n      const routesModule = await this.loadModule(routesFile);\n\n      for (const exportValue of Object.values(routesModule)) {\n        const endpoint = exportValue as any;\n        if (!endpoint?.__path) {\n          continue;\n        }\n\n        const method = String(endpoint.__method || \"GET\").toUpperCase();\n        this.registerRouteShape(endpoint.__path, routesFile, appDir);\n        this.addEndpoint(endpoint.__path, routesFile, method, endpoint, appDir);\n      }\n    } catch (error) {\n      this.handleLoadError(`Error loading root API routes ${routesFile}`, error);\n    }\n  }\n\n  private async loadProgrammaticApiRoutes(appDir: string): Promise<void> {\n    const candidateRoots = [path.dirname(appDir), appDir];\n    const routeFiles = Array.from(\n      new Set(candidateRoots.flatMap((srcRoot) => findProgrammaticRouteFilesInDir(srcRoot))),\n    );\n    if (routeFiles.length === 0) return;\n\n    const { getProgrammaticRouteManifest } = await import(\"../routes\");\n\n    for (const routeFile of routeFiles) {\n      try {\n        const routesModule = await this.loadModule(routeFile);\n        const manifest = getProgrammaticRouteManifest(routesModule);\n        if (!manifest) continue;\n\n        for (const definition of manifest.routes) {\n          if (definition.kind !== \"api\") continue;\n          if (!Object.values(definition.methods).some(Boolean)) continue;\n          this.addProgrammaticApiRoute(routeFile, definition, appDir);\n        }\n      } catch (error) {\n        this.handleLoadError(`Error loading programmatic API routes ${routeFile}`, error);\n      }\n    }\n  }\n\n  private handleLoadError(message: string, error: unknown): void {\n    logger.error(`${message}: ${error}`);\n    if (\n      this.throwOnLoadError ||\n      error instanceof APIRouteConflictError ||\n      error instanceof AmbiguousRouteError ||\n      error instanceof NonTerminalCatchAllRouteError\n    ) {\n      throw error;\n    }\n  }\n\n  private findRootRoutesFile(appDir: string): string | null {\n    const routeNames = [\"routes.ts\", \"routes.tsx\", \"routes.js\"];\n    const candidateDirs = [path.dirname(appDir), appDir];\n    const seen = new Set<string>();\n\n    for (const dir of candidateDirs) {\n      for (const routeName of routeNames) {\n        const routesFile = path.join(dir, routeName);\n        if (seen.has(routesFile)) {\n          continue;\n        }\n        seen.add(routesFile);\n\n        if (fs.existsSync(routesFile)) {\n          return routesFile;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  private async loadModule(filePath: string): Promise<Record<string, unknown>> {\n    if (this.viteServer) {\n      return await this.viteServer.ssrLoadModule(filePath);\n    }\n\n    const fileUrl = `file://${filePath}`;\n    return await import(/* @vite-ignore */ fileUrl);\n  }\n\n  private addEndpoint(\n    routePath: string,\n    filePath: string,\n    method: string,\n    endpoint: any,\n    appDir: string,\n    runtimeConfig: FarmRouteRuntimeConfig = {},\n  ): void {\n    const normalizedMethod = method.toUpperCase();\n    const existingRoute = this.routes.get(routePath);\n    const existingSource = this.endpointSources.get(routePath)?.get(normalizedMethod);\n\n    if (existingSource?.appDir === appDir) {\n      throw new APIRouteConflictError(\n        routePath,\n        normalizedMethod,\n        existingSource.filePath,\n        filePath,\n      );\n    }\n\n    if (existingRoute) {\n      if (!existingRoute.methods.includes(normalizedMethod)) {\n        existingRoute.methods.push(normalizedMethod);\n      }\n      existingRoute.endpoints[normalizedMethod] = endpoint;\n      Object.assign(existingRoute, runtimeConfig);\n      const sources = this.endpointSources.get(routePath) ?? new Map();\n      sources.set(normalizedMethod, { appDir, filePath });\n      this.endpointSources.set(routePath, sources);\n      return;\n    }\n\n    this.routes.set(routePath, {\n      path: routePath,\n      filePath,\n      methods: [normalizedMethod],\n      endpoints: { [normalizedMethod]: endpoint },\n      ...runtimeConfig,\n    });\n    this.endpointSources.set(routePath, new Map([[normalizedMethod, { appDir, filePath }]]));\n  }\n\n  private addProgrammaticApiRoute(\n    filePath: string,\n    route: ProgrammaticApiRoute,\n    appDir: string,\n  ): void {\n    const modulePath = createProgrammaticRouteModuleId(filePath, \"api\", route.path);\n    const runtimeConfig = normalizeFarmRouteRuntimeConfig(route, `API route \"${route.path}\"`);\n    for (const [method, endpoint] of Object.entries(route.methods)) {\n      if (endpoint) {\n        this.addEndpoint(route.path, modulePath, method, endpoint, appDir, runtimeConfig);\n      }\n    }\n  }\n\n  private registerRouteShape(routePath: string, filePath: string, appDir: string): void {\n    const replacedPath = registerAPIRouteShape(this.routeShapes, routePath, filePath, appDir);\n    if (replacedPath) {\n      this.routes.delete(replacedPath);\n      this.endpointSources.delete(replacedPath);\n    }\n  }\n\n  /**\n   * Get the handler that directly invokes endpoint handlers\n   */\n  getHandler(options: APIRouteHandlerOptions = {}): ((req: Request) => Promise<Response>) | null {\n    if (this.routes.size === 0) {\n      return null;\n    }\n\n    return async (request: Request): Promise<Response> => {\n      const url = new URL(request.url);\n      const pathname = url.pathname;\n      const method = request.method.toUpperCase();\n\n      // Find matching route\n      const match = matchAPIRouteAtBasePath(this.routes, pathname, this.basePath);\n      if (!match) {\n        return new Response(JSON.stringify({ error: \"Not Found\" }), {\n          status: 404,\n          headers: { \"Content-Type\": \"application/json\" },\n        });\n      }\n\n      // Check if method is supported\n      const { route, params } = match;\n      const endpoint = resolveAPIRouteEndpoint(route, method);\n      if (!endpoint) {\n        return new Response(JSON.stringify({ error: \"Method Not Allowed\" }), {\n          status: 405,\n          headers: {\n            Allow: getAllowedAPIRouteMethods(route).join(\", \"),\n            \"Content-Type\": \"application/json\",\n          },\n        });\n      }\n\n      const invoke = async () => {\n        try {\n          return await invokeAPIRouteEndpoint(endpoint, request, params, this.bodySizeLimit);\n        } catch (error: any) {\n          if (options.throwOnError) throw error;\n          console.error(`[API Error] ${pathname}:`, error);\n          return new Response(JSON.stringify({ error: \"Internal Server Error\" }), {\n            status: 500,\n            headers: { \"Content-Type\": \"application/json\" },\n          });\n        }\n      };\n\n      return this.i18n?.config.enabled\n        ? _runWithFarmI18nRequest(this.i18n, request, invoke, {\n            redirect: false,\n          })\n        : invoke();\n    };\n  }\n\n  /**\n   * Check if a path is an API route\n   */\n  isAPIRoute(pathname: string): boolean {\n    return Boolean(this.matchRoute(pathname));\n  }\n\n  matchRoute(pathname: string): APIRouteMatch<APIRoute> | null {\n    return matchAPIRouteAtBasePath(this.routes, pathname, this.basePath);\n  }\n\n  /**\n   * Get all routes for client type generation\n   */\n  getRoutes(): Map<string, APIRoute> {\n    return this.routes;\n  }\n}\n\nexport {\n  getAllowedAPIRouteMethods,\n  invokeAPIRouteEndpoint,\n  isWebResponse,\n  matchAPIRoute,\n  normalizeRouteResponse,\n  resolveAPIRouteEndpoint,\n} from \"./runtime\";\nexport type { APIRouteMatch, APIRouteParams, APIRouteParamValue } from \"./runtime\";\n","import type { CookieOptions } from \"./types\";\n\nfunction decodeCookieValue(value: string): string {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    // Cookies are not required to be percent-encoded; keep the raw value\n    // instead of failing the whole request on malformed encoding.\n    return value;\n  }\n}\n\nexport function parseMiddlewareCookieHeader(cookieHeader?: string | null): Record<string, string> {\n  const cookies = Object.create(null) as Record<string, string>;\n  if (!cookieHeader) return cookies;\n\n  for (const cookie of cookieHeader.split(\";\")) {\n    const separator = cookie.indexOf(\"=\");\n    if (separator < 0) continue;\n\n    const name = cookie.slice(0, separator).trim();\n    if (!name) continue;\n\n    const value = cookie.slice(separator + 1).trim();\n    cookies[name] = decodeCookieValue(value);\n  }\n\n  return cookies;\n}\n\n/**\n * Apply the attributes a cookie name prefix makes mandatory.\n *\n * Browsers reject a `Set-Cookie` whose name starts with `__Host-` or\n * `__Secure-` unless it carries `Secure` (and, for `__Host-`, `Path=/` with no\n * `Domain`). A rejected header is discarded silently, so emitting one without\n * these attributes makes both a set and a *deletion* a no-op — a logout that\n * looks like it worked while the session cookie stays live. The attributes are\n * therefore derived from the name rather than trusted from the caller.\n */\nexport function applyCookieNamePrefixRequirements(\n  name: string,\n  options: CookieOptions,\n): CookieOptions {\n  if (name.startsWith(\"__Host-\")) {\n    return { ...options, secure: true, path: \"/\", domain: undefined };\n  }\n  if (name.startsWith(\"__Secure-\")) {\n    return { ...options, secure: true };\n  }\n  return options;\n}\n\nexport function serializeMiddlewareCookie(\n  name: string,\n  value: string,\n  options: CookieOptions = {},\n): string {\n  const resolved = applyCookieNamePrefixRequirements(name, options);\n  let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n  if (resolved.maxAge != null) cookie += `; Max-Age=${resolved.maxAge}`;\n  if (resolved.expires) cookie += `; Expires=${resolved.expires.toUTCString()}`;\n  cookie += `; Path=${resolved.path || \"/\"}`;\n  if (resolved.domain) cookie += `; Domain=${resolved.domain}`;\n  if (resolved.secure) cookie += \"; Secure\";\n  if (resolved.httpOnly) cookie += \"; HttpOnly\";\n  if (resolved.sameSite) {\n    cookie += `; SameSite=${resolved.sameSite.charAt(0).toUpperCase()}${resolved.sameSite.slice(1)}`;\n  }\n\n  return cookie;\n}\n\n/**\n * Serialize the tombstone that removes a cookie. A deletion only matches the\n * stored cookie when its `Path` and `Domain` match the ones it was set with,\n * so callers must be able to pass them through.\n */\nexport function serializeMiddlewareCookieDeletion(\n  name: string,\n  options: CookieOptions = {},\n): string {\n  return serializeMiddlewareCookie(name, \"\", { ...options, maxAge: 0, expires: new Date(0) });\n}\n","/**\n * Middleware Context Implementation\n */\n\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport type { ViteDevServer } from \"vite\";\nimport type { MiddlewareContext, CookieJar, CookieOptions } from \"./types\";\nimport type { FarmServerConfig, ResolvedFarmServerConfig } from \"../server-http\";\nimport { resolveFarmRequestURL } from \"../server/request\";\nimport {\n  parseMiddlewareCookieHeader,\n  serializeMiddlewareCookie as serializeCookie,\n  serializeMiddlewareCookieDeletion,\n} from \"./cookie-header\";\n\n/**\n * Serialize a cookie\n */\n/**\n * Cookie Jar implementation\n */\nclass CookieJarImpl implements CookieJar {\n  private cookies: Record<string, string>;\n  private setCookies: string[];\n\n  constructor(\n    private req: IncomingMessage,\n    private res: ServerResponse,\n  ) {\n    this.cookies = parseMiddlewareCookieHeader(req.headers.cookie);\n    const existing = res.getHeader(\"Set-Cookie\");\n    this.setCookies = Array.isArray(existing)\n      ? existing.map(String)\n      : existing === undefined\n        ? []\n        : [String(existing)];\n  }\n\n  get(name: string): string | undefined {\n    return this.cookies[name];\n  }\n\n  set(name: string, value: string, options: CookieOptions = {}): void {\n    this.cookies[name] = value;\n    const cookieString = serializeCookie(name, value, options);\n    this.setCookies.push(cookieString);\n\n    // Update Set-Cookie header\n    this.res.setHeader(\"Set-Cookie\", this.setCookies);\n  }\n\n  delete(name: string, options: CookieOptions = {}): void {\n    delete this.cookies[name];\n    // Path and Domain must match the cookie that was set, or the tombstone\n    // addresses a different cookie and the original survives.\n    this.setCookies.push(serializeMiddlewareCookieDeletion(name, options));\n    this.res.setHeader(\"Set-Cookie\", this.setCookies);\n  }\n\n  getAll(): Record<string, string> {\n    return { ...this.cookies };\n  }\n}\n\n/**\n * Create a middleware context from request/response\n */\nexport function createContext(\n  req: IncomingMessage,\n  res: ServerResponse,\n  viteServer?: ViteDevServer,\n  parent?: MiddlewareContext[\"parent\"],\n  server?: FarmServerConfig | ResolvedFarmServerConfig,\n): MiddlewareContext {\n  const url = resolveFarmRequestURL(req, { trustProxy: server?.trustProxy });\n  const headers = new Map<string, string>();\n  const data = parent?.data ? new Map(parent.data) : new Map<string, any>();\n  const locals = parent?.locals ? new Map(parent.locals) : new Map<string, any>();\n  const cookies = new CookieJarImpl(req, res);\n\n  if (parent?.headers) {\n    for (const [key, value] of Object.entries(parent.headers)) {\n      headers.set(key, value);\n    }\n  }\n\n  let handled = false;\n\n  const applyResponseHeaders = () => {\n    for (const [key, value] of headers) {\n      try {\n        res.setHeader(key, value);\n      } catch {\n        // Keep helper behavior aligned with the middleware manager: an invalid\n        // optional header must not prevent the response itself from completing.\n      }\n    }\n  };\n\n  const ctx: MiddlewareContext = {\n    request: req,\n    response: res,\n    url,\n    pathname: url.pathname,\n    searchParams: url.searchParams,\n    method: req.method || \"GET\",\n    params: {},\n    route: url.pathname,\n    parent,\n    vite: {\n      isDev: process.env.NODE_ENV !== \"production\",\n      hmr: !!viteServer?.hot,\n      server: viteServer,\n    },\n    data,\n    locals,\n    headers,\n    cookies,\n    _handled: false,\n\n    redirect(redirectUrl: string, status = 307): void {\n      if (handled) {\n        console.warn(\"Response already sent, cannot redirect\");\n        return;\n      }\n\n      ctx._redirectUrl = redirectUrl;\n      ctx._handled = true;\n      handled = true;\n\n      applyResponseHeaders();\n      res.writeHead(status, {\n        Location: redirectUrl,\n        \"Content-Type\": \"text/plain\",\n      });\n      res.end(`Redirecting to ${redirectUrl}`);\n    },\n\n    rewrite(rewriteUrl: string): void {\n      ctx._rewriteUrl = rewriteUrl;\n      // Update the URL for downstream middleware\n      const newUrl = new URL(rewriteUrl, `http://${req.headers.host || \"localhost\"}`);\n      ctx.url = newUrl;\n      ctx.pathname = newUrl.pathname;\n      ctx.searchParams = newUrl.searchParams;\n      ctx.route = newUrl.pathname;\n      // Update the original request URL\n      req.url = rewriteUrl;\n    },\n\n    json(jsonData: any, status = 200): void {\n      if (handled) {\n        console.warn(\"Response already sent, cannot send JSON\");\n        return;\n      }\n\n      ctx._handled = true;\n      handled = true;\n\n      applyResponseHeaders();\n      res.writeHead(status, {\n        \"Content-Type\": \"application/json\",\n      });\n      res.end(JSON.stringify(jsonData));\n    },\n\n    text(content: string, status = 200): void {\n      if (handled) {\n        console.warn(\"Response already sent, cannot send text\");\n        return;\n      }\n\n      ctx._handled = true;\n      handled = true;\n\n      applyResponseHeaders();\n      res.writeHead(status, {\n        \"Content-Type\": \"text/plain\",\n      });\n      res.end(content);\n    },\n\n    html(content: string, status = 200): void {\n      if (handled) {\n        console.warn(\"Response already sent, cannot send HTML\");\n        return;\n      }\n\n      ctx._handled = true;\n      handled = true;\n\n      applyResponseHeaders();\n      res.writeHead(status, {\n        \"Content-Type\": \"text/html\",\n      });\n      res.end(content);\n    },\n  };\n\n  return ctx;\n}\n","import { createWebRequestFromFarmRequest } from \"../server/request\";\nimport type {\n  MiddlewareConfig,\n  MiddlewareContext,\n  MiddlewareFunction,\n  MiddlewareModule,\n  MiddlewareStore,\n  RequestMiddlewareContext,\n} from \"./types\";\n\nexport interface NormalizedMiddlewareModule {\n  handlers: MiddlewareFunction[];\n  config?: MiddlewareConfig;\n}\n\nfunction isWebRequest(request: unknown): request is Request {\n  return typeof Request !== \"undefined\" && request instanceof Request;\n}\n\nfunction toWebRequest(ctx: MiddlewareContext): Request {\n  if (isWebRequest(ctx.request)) {\n    return ctx.request;\n  }\n  return createWebRequestFromFarmRequest(ctx.request, { origin: ctx.url.origin });\n}\n\nfunction createRequestMiddlewareContext(\n  ctx: MiddlewareContext,\n): RequestMiddlewareContext<Record<string, any>, Record<string, any>> {\n  const context = {\n    get url() {\n      return ctx.url;\n    },\n    get pathname() {\n      return ctx.pathname;\n    },\n    get searchParams() {\n      return ctx.searchParams;\n    },\n    get method() {\n      return ctx.method;\n    },\n    get params() {\n      return ctx.params;\n    },\n    get route() {\n      return ctx.route;\n    },\n    get locals() {\n      return ctx.locals as MiddlewareStore<Record<string, any>>;\n    },\n    get data() {\n      return ctx.data as MiddlewareStore<Record<string, any>>;\n    },\n    get headers() {\n      return ctx.headers;\n    },\n    get cookies() {\n      return ctx.cookies;\n    },\n    get(key: string) {\n      return ctx.locals.get(key);\n    },\n    has(key: string) {\n      return ctx.locals.has(key);\n    },\n    set(key: string, value: any) {\n      ctx.locals.set(key, value);\n    },\n    delete(key: string) {\n      return ctx.locals.delete(key);\n    },\n    redirect(url: string, status?: number) {\n      ctx.redirect(url, status);\n    },\n    rewrite(url: string) {\n      ctx.rewrite(url);\n    },\n    json(data: any, status?: number) {\n      ctx.json(data, status);\n    },\n    text(content: string, status?: number) {\n      ctx.text(content, status);\n    },\n    html(content: string, status?: number) {\n      ctx.html(content, status);\n    },\n  } satisfies RequestMiddlewareContext;\n\n  return context;\n}\n\n/**\n * Normalize the two supported middleware file styles to Farm's internal chain.\n */\nexport function normalizeMiddlewareModule(\n  middlewareModule: MiddlewareModule | Record<string, any>,\n  routePath: string,\n): NormalizedMiddlewareModule | null {\n  const module = middlewareModule as MiddlewareModule;\n  const defaultExport = module.default;\n  const namedExport = module.middleware;\n  const hasNamedExport = typeof namedExport === \"function\";\n\n  if (namedExport !== undefined && !hasNamedExport) {\n    throw new TypeError(\"The named middleware export must be a function\");\n  }\n\n  if (defaultExport && hasNamedExport) {\n    throw new Error(\n      \"A middleware file cannot export both a default handler and a named middleware handler\",\n    );\n  }\n\n  if (hasNamedExport) {\n    return {\n      handlers: [\n        async (ctx) => {\n          return namedExport(toWebRequest(ctx), createRequestMiddlewareContext(ctx));\n        },\n      ],\n      config: module.config,\n    };\n  }\n\n  if (defaultExport && typeof defaultExport === \"object\" && \"build\" in defaultExport) {\n    if (typeof (defaultExport as any).setBasePath === \"function\") {\n      (defaultExport as any).setBasePath(routePath);\n    }\n    const built = (defaultExport as any).build();\n    const handlers = Array.isArray(built?.handlers)\n      ? built.handlers.filter((handler: unknown) => typeof handler === \"function\")\n      : [];\n    return handlers.length > 0\n      ? {\n          handlers,\n          config: module.config || built?.config,\n        }\n      : null;\n  }\n\n  if (typeof defaultExport === \"function\") {\n    return {\n      handlers: [defaultExport as MiddlewareFunction],\n      config: module.config,\n    };\n  }\n\n  return null;\n}\n","import picocolors from \"picocolors\";\n\n/**\n * Create colors for Farm's terminal output.\n *\n * Some interactive terminal hosts advertise a limited TERM value or set\n * NO_COLOR for captured subprocess output even though they render ANSI styles.\n * Prefer the actual stream type so the dev server remains colored in a TTY,\n * while redirected output stays plain.\n */\nexport function createCliColors(interactive = process.stdout.isTTY === true) {\n  return picocolors.createColors(interactive);\n}\n","export function appendMiddlewareRoutePath(routePath: string, directoryName: string): string {\n  if (directoryName.startsWith(\"(\") && directoryName.endsWith(\")\")) {\n    return routePath;\n  }\n\n  return routePath === \"/\" ? `/${directoryName}` : `${routePath}/${directoryName}`;\n}\n","/**\n * Middleware Manager\n *\n * Discovers and executes middleware files in the file system\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport { decodeRouteSegment } from \"../utils/decode\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\nimport type {\n  FarmMiddlewareConfig,\n  MiddlewareFunction,\n  MiddlewareMatcher,\n  MiddlewareConfig,\n  MiddlewareContext,\n  MiddlewareResult,\n} from \"./types\";\nimport { createContext } from \"./context\";\nimport { normalizeMiddlewareModule } from \"./module\";\nimport { logger } from \"../utils\";\nimport { sendWebResponse } from \"../server/response\";\nimport { emitFarmEvent } from \"../observability\";\nimport { stripFarmLocaleFromPathname } from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { createCliColors } from \"../cli-colors\";\nimport { appendMiddlewareRoutePath } from \"./path\";\nimport type { FarmServerConfig, ResolvedFarmServerConfig } from \"../server-http\";\nimport { resolveFarmRequestURL } from \"../server/request\";\n\nexport interface DiscoveredMiddleware {\n  path: string;\n  filePath: string;\n  handlers: MiddlewareFunction[];\n  config?: MiddlewareConfig;\n  source?: \"config\" | \"file\";\n}\n\nfunction isMiddlewareResponse(value: unknown): value is Response {\n  return value instanceof Response;\n}\n\n/**\n * Middleware Manager - discovers and executes middleware\n */\nexport class MiddlewareManager {\n  private middleware: DiscoveredMiddleware[] = [];\n  private configMiddleware: DiscoveredMiddleware[] = [];\n  private globalConfig?: MiddlewareConfig;\n  private viteServer?: ViteDevServer;\n  private appDirs: string[];\n  private i18n?: ResolvedFarmI18nConfig;\n  private server?: FarmServerConfig | ResolvedFarmServerConfig;\n\n  constructor(\n    appDir: string | readonly string[],\n    viteServer?: ViteDevServer,\n    config?: FarmMiddlewareConfig,\n    i18n?: ResolvedFarmI18nConfig,\n    server?: FarmServerConfig | ResolvedFarmServerConfig,\n  ) {\n    this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir as string];\n    this.viteServer = viteServer;\n    this.i18n = i18n;\n    this.server = server;\n    this.configure(config);\n  }\n\n  configure(config?: FarmMiddlewareConfig): void {\n    this.configMiddleware = [];\n    this.globalConfig = undefined;\n\n    if (!config) return;\n\n    const entries = Array.isArray(config) ? config : [config];\n\n    for (const [index, entry] of entries.entries()) {\n      const handlers = this.getConfigHandlers(entry);\n      const middlewareConfig = this.toMiddlewareConfig(entry);\n\n      if (handlers.length === 0) {\n        this.globalConfig = middlewareConfig;\n        continue;\n      }\n\n      this.configMiddleware.push({\n        path: \"/\",\n        filePath: `farm.config.ts#middleware-${index}`,\n        handlers,\n        config: middlewareConfig,\n        source: \"config\",\n      });\n    }\n  }\n\n  /**\n   * Discover all middleware.ts files\n   */\n  async discover(): Promise<void> {\n    const middlewareByPath = new Map<string, DiscoveredMiddleware>();\n    for (const appDir of this.appDirs) {\n      const discovered: DiscoveredMiddleware[] = [];\n      await this.discoverInDirectory(appDir, \"/\", discovered);\n      for (const middleware of discovered) {\n        middlewareByPath.set(middleware.path, middleware);\n      }\n    }\n    this.middleware = Array.from(middlewareByPath.values());\n\n    // Sort by path depth (root first, then nested)\n    this.middleware.sort((a, b) => {\n      const depthA = a.path.split(\"/\").filter(Boolean).length;\n      const depthB = b.path.split(\"/\").filter(Boolean).length;\n      return depthA - depthB;\n    });\n\n    if (process.env.FARM_VERBOSE && this.middleware.length > 0) {\n      logger.success(`Discovered ${this.middleware.length} middleware files`);\n      for (const mw of this.middleware) {\n        logger.info(`  ${mw.path} (${mw.handlers.length} handlers)`);\n      }\n    }\n  }\n\n  /**\n   * Recursively discover middleware files\n   */\n  private async discoverInDirectory(\n    dir: string,\n    routePath: string,\n    discovered: DiscoveredMiddleware[],\n  ): Promise<void> {\n    if (!fs.existsSync(dir)) {\n      return;\n    }\n\n    // Check for middleware.ts in current directory\n    const middlewareFile = this.findMiddlewareFile(dir);\n    if (middlewareFile) {\n      const middleware = await this.loadMiddleware(middlewareFile, routePath);\n      if (middleware) {\n        discovered.push(middleware);\n      }\n    }\n\n    // Recursively check subdirectories\n    const entries = fs.readdirSync(dir, { withFileTypes: true });\n    for (const entry of entries) {\n      if (entry.isDirectory() && !entry.name.startsWith(\".\") && !entry.name.startsWith(\"_\")) {\n        const subPath = path.join(dir, entry.name);\n        const subRoutePath = appendMiddlewareRoutePath(routePath, entry.name);\n        await this.discoverInDirectory(subPath, subRoutePath, discovered);\n      }\n    }\n  }\n\n  /**\n   * Find middleware file in directory\n   */\n  private findMiddlewareFile(dir: string): string | null {\n    const extensions = [\".ts\", \".tsx\", \".js\", \".jsx\"];\n    for (const ext of extensions) {\n      const filePath = path.join(dir, `middleware${ext}`);\n      if (fs.existsSync(filePath)) {\n        return filePath;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Load a middleware file\n   */\n  private async loadMiddleware(filePath: string, routePath: string): Promise<DiscoveredMiddleware> {\n    try {\n      // Load the module\n      let module: any;\n      if (this.viteServer) {\n        module = await this.viteServer.ssrLoadModule(filePath);\n      } else {\n        const fileUrl = `file://${filePath}`;\n        module = await import(/* @vite-ignore */ fileUrl);\n      }\n\n      const normalized = normalizeMiddlewareModule(module, routePath);\n      if (!normalized) {\n        throw new Error(\"must export a default handler or a named middleware handler\");\n      }\n\n      return {\n        path: routePath,\n        filePath,\n        handlers: normalized.handlers,\n        config: normalized.config,\n        source: \"file\",\n      };\n    } catch (error) {\n      throw new Error(`Failed to load middleware ${filePath}: ${error}`);\n    }\n  }\n\n  /**\n   * Execute middleware for a request\n   */\n  async execute(req: IncomingMessage, res: ServerResponse): Promise<boolean> {\n    const url = resolveFarmRequestURL(req, { trustProxy: this.server?.trustProxy });\n    const pathname = url.pathname;\n    const routePathname = this.i18n?.enabled\n      ? stripFarmLocaleFromPathname(pathname, this.i18n)\n      : pathname;\n    const method = req.method || \"GET\";\n    const startTime = Date.now();\n\n    let parentData: MiddlewareContext[\"parent\"] | undefined;\n    let ctx = createContext(req, res, this.viteServer, undefined, this.server);\n\n    if (this.globalConfig) {\n      const globalMatch = this.matchesConfig(routePathname, this.globalConfig, ctx);\n      if (!globalMatch.matched) {\n        return false;\n      }\n      if (globalMatch.params) {\n        ctx.params = { ...ctx.params, ...globalMatch.params };\n      }\n    }\n\n    // Find applicable middleware (config entries first, then cascading files)\n    const applicable: Array<{\n      mw: DiscoveredMiddleware;\n      routeMatch: { matched: boolean; params?: Record<string, string> };\n    }> = [\n      ...this.configMiddleware.map((mw) => ({ mw, routeMatch: { matched: true } })),\n      ...this.middleware\n        .map((mw) => ({ mw, routeMatch: this.matchRoutePath(routePathname, mw.path) }))\n        .filter((entry) => entry.routeMatch.matched),\n    ];\n\n    if (applicable.length === 0) {\n      return false; // No middleware to run\n    }\n    const pc = createCliColors();\n    const log = [\n      pc.dim(\"[\") + pc.bold(pc.blue(\"FARM\")) + pc.dim(\"]\"),\n      pc.dim(\"[\") + pc.bold(pc.magenta(\"MIDDLEWARE\")) + pc.dim(\"]\"),\n      pc.dim(\"[\") + pc.bold(pc.white(method.padEnd(3))) + pc.dim(\"]\"),\n      pc.gray(\"Executing middleware: \"),\n      pc.gray(pathname),\n      pc.dim(` (${(Date.now() - startTime).toFixed(2)}ms)`),\n    ].join(\" \");\n    console.log(log);\n\n    // Execute middleware in cascade order\n    for (const entry of applicable) {\n      // Check matcher configuration\n      const { mw, routeMatch } = entry;\n      const configMatch = mw.config\n        ? this.matchesConfig(routePathname, mw.config, ctx)\n        : { matched: true };\n      if (!configMatch.matched) {\n        continue;\n      }\n      if (routeMatch.params) {\n        ctx.params = { ...ctx.params, ...routeMatch.params };\n      }\n      if (configMatch.params) {\n        ctx.params = { ...ctx.params, ...configMatch.params };\n      }\n\n      // Create new context with parent data\n      if (parentData) {\n        ctx = createContext(req, res, this.viteServer, parentData, this.server);\n        if (routeMatch.params) {\n          ctx.params = { ...ctx.params, ...routeMatch.params };\n        }\n        if (configMatch.params) {\n          ctx.params = { ...ctx.params, ...configMatch.params };\n        }\n      }\n\n      const middlewareStartTime = Date.now();\n      const middlewareEvent = {\n        route: mw.path,\n        pathname,\n        name: mw.filePath,\n      };\n      emitFarmEvent({ type: \"middleware.start\", ...middlewareEvent });\n\n      try {\n        // Execute all handlers in this middleware\n        let handlerIndex = 0;\n        let returnedResponse: Response | undefined;\n        const executeNext = async (): Promise<MiddlewareResult> => {\n          if (handlerIndex < mw.handlers.length) {\n            const handler = mw.handlers[handlerIndex++];\n            const result = await handler(ctx, executeNext);\n            if (isMiddlewareResponse(result)) {\n              returnedResponse = result;\n              return result;\n            }\n          }\n          return returnedResponse;\n        };\n\n        const result = await executeNext();\n        const response = isMiddlewareResponse(result) ? result : returnedResponse;\n        if (response) {\n          if (!res.headersSent && !res.writableEnded) {\n            for (const [key, value] of ctx.headers) {\n              try {\n                res.setHeader(key, value);\n              } catch (error) {}\n            }\n          }\n          emitFarmEvent({\n            type: \"middleware.shortCircuit\",\n            ...middlewareEvent,\n            status: response.status,\n          });\n          await sendWebResponse(res, response);\n          return true;\n        }\n\n        // Check if response has been sent or handled by middleware helpers.\n        if (ctx._handled || res.headersSent || res.writableEnded) {\n          emitFarmEvent({\n            type: \"middleware.shortCircuit\",\n            ...middlewareEvent,\n            status: res.statusCode,\n          });\n          return true;\n        }\n\n        emitFarmEvent({\n          type: \"middleware.complete\",\n          ...middlewareEvent,\n          durationMs: Date.now() - middlewareStartTime,\n        });\n      } catch (error) {\n        emitFarmEvent({\n          type: \"middleware.error\",\n          ...middlewareEvent,\n          error,\n        });\n        throw error;\n      }\n\n      parentData = {\n        data: new Map(ctx.data),\n        locals: new Map(ctx.locals),\n        headers: Object.fromEntries(ctx.headers),\n      };\n    }\n\n    if (!res.headersSent && !res.writableEnded) {\n      for (const [key, value] of ctx.headers) {\n        try {\n          res.setHeader(key, value);\n        } catch (error) {}\n      }\n    }\n\n    (req as any).__FARM_MIDDLEWARE_DATA__ = new Map(ctx.data);\n    (req as any).__FARM_MIDDLEWARE_CONTEXT__ = new Map(ctx.locals);\n\n    return false; // Continue to page rendering\n  }\n\n  /**\n   * Check if pathname matches middleware config\n   */\n  private matchesConfig(\n    pathname: string,\n    config: MiddlewareConfig,\n    ctx: MiddlewareContext,\n  ): { matched: boolean; params?: Record<string, string> } {\n    // Check exclusions\n    if (config.exclude) {\n      for (const pattern of config.exclude) {\n        if (this.matchPattern(pattern, pathname).matched) {\n          return { matched: false };\n        }\n      }\n    }\n\n    // Check matchers\n    if (config.matcher) {\n      for (const matcher of this.toMatcherList(config.matcher)) {\n        if (typeof matcher === \"string\" || matcher instanceof RegExp) {\n          const result = this.matchPattern(matcher, pathname);\n          if (result.matched) {\n            return result;\n          }\n        } else if (typeof matcher === \"function\" && matcher(ctx)) {\n          return { matched: true };\n        }\n      }\n      return { matched: false };\n    }\n\n    return { matched: true };\n  }\n\n  /**\n   * Match a pattern against pathname\n   */\n  private matchPattern(\n    pattern: string | RegExp,\n    pathname: string,\n  ): { matched: boolean; params?: Record<string, string> } {\n    if (pattern instanceof RegExp) {\n      pattern.lastIndex = 0;\n      const match = pattern.exec(pathname);\n      return {\n        matched: !!match,\n        params: match?.groups ? { ...match.groups } : undefined,\n      };\n    }\n\n    if (pattern === \"*\" || pattern === \"/(.*)\") {\n      return { matched: true };\n    }\n\n    if (pattern.endsWith(\"(.*)\")) {\n      // Strip a trailing slash before the wildcard so `/admin/(.*)` matches the\n      // `/admin` subtree like `/admin/**` does. Without this the prefix keeps\n      // its slash and the check becomes startsWith(\"/admin//\"), which no path\n      // satisfies, so the matcher silently matches nothing.\n      const prefix = pattern.slice(0, -4).replace(/\\/$/, \"\");\n      return { matched: pathname === prefix || pathname.startsWith(`${prefix}/`) };\n    }\n\n    const { regex, params } = this.compilePathPattern(pattern);\n    const match = regex.exec(pathname);\n    if (!match) {\n      return { matched: false };\n    }\n\n    const values: Record<string, string> = {};\n    params.forEach((param, index) => {\n      values[param] = decodeRouteSegment(match[index + 1] || \"\");\n    });\n\n    return {\n      matched: true,\n      params: Object.keys(values).length > 0 ? values : undefined,\n    };\n  }\n\n  /**\n   * Reload middleware (for HMR)\n   */\n  async reload(): Promise<void> {\n    await this.discover();\n  }\n\n  getMiddlewares(): DiscoveredMiddleware[] {\n    return [...this.configMiddleware, ...this.middleware];\n  }\n\n  hasMiddleware(): boolean {\n    return this.configMiddleware.length > 0 || this.middleware.length > 0;\n  }\n\n  private matchRoutePath(\n    pathname: string,\n    middlewarePath: string,\n  ): { matched: boolean; params?: Record<string, string> } {\n    if (middlewarePath === \"/\") return { matched: true };\n\n    const exactMatch = this.matchPattern(middlewarePath, pathname);\n    if (exactMatch.matched) {\n      return exactMatch;\n    }\n\n    const nestedMatch = this.matchPattern(`${middlewarePath}/:__farmRest*`, pathname);\n    if (!nestedMatch.matched) {\n      return { matched: false };\n    }\n\n    const params = { ...nestedMatch.params };\n    delete params.__farmRest;\n    return {\n      matched: true,\n      params: Object.keys(params).length > 0 ? params : undefined,\n    };\n  }\n\n  private toMatcherList(matcher: MiddlewareConfig[\"matcher\"]): MiddlewareMatcher[] {\n    if (!matcher) return [];\n    return Array.isArray(matcher) ? matcher : [matcher];\n  }\n\n  private getConfigHandlers(\n    entry:\n      | MiddlewareConfig\n      | (MiddlewareConfig & {\n          handler?: MiddlewareFunction;\n          handlers?: MiddlewareFunction[];\n        }),\n  ): MiddlewareFunction[] {\n    const handlers: MiddlewareFunction[] = [];\n    if (\"handler\" in entry && typeof entry.handler === \"function\") {\n      handlers.push(entry.handler);\n    }\n    if (\"handlers\" in entry && Array.isArray(entry.handlers)) {\n      handlers.push(...entry.handlers.filter((handler) => typeof handler === \"function\"));\n    }\n    return handlers;\n  }\n\n  private toMiddlewareConfig(\n    entry: MiddlewareConfig & {\n      handler?: MiddlewareFunction;\n      handlers?: MiddlewareFunction[];\n    },\n  ): MiddlewareConfig {\n    const { matcher, exclude, runtime } = entry;\n    return { matcher, exclude, runtime };\n  }\n\n  private compilePathPattern(pattern: string): { regex: RegExp; params: string[] } {\n    const params: string[] = [];\n    const segments = pattern.split(\"/\").filter(Boolean);\n\n    if (segments.length === 0) {\n      return { regex: /^\\/$/, params };\n    }\n\n    const parts = segments.map((segment) => {\n      if (segment === \"**\") {\n        return \"(?:/.*)?\";\n      }\n\n      if (segment === \"*\") {\n        return \"/[^/]+\";\n      }\n\n      if (segment.startsWith(\":\")) {\n        const { name, modifier } = this.parseColonParam(segment);\n        params.push(name);\n\n        if (modifier === \"*\") {\n          return \"(?:/(.*))?\";\n        }\n        if (modifier === \"+\") {\n          return \"/(.+)\";\n        }\n        return \"/([^/]+)\";\n      }\n\n      if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n        params.push(segment.slice(4, -1));\n        return \"(?:/(.*))?\";\n      }\n\n      if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n        params.push(segment.slice(1, -1));\n        return \"/([^/]+)\";\n      }\n\n      return `/${this.escapeRegex(segment).replace(/\\\\\\*/g, \"[^/]*\")}`;\n    });\n\n    return {\n      regex: new RegExp(`^${parts.join(\"\")}$`),\n      params,\n    };\n  }\n\n  private parseColonParam(segment: string): { name: string; modifier?: string } {\n    const raw = segment.slice(1);\n    const last = raw[raw.length - 1];\n    const modifier = last === \"*\" || last === \"+\" || last === \"?\" ? last : undefined;\n    return {\n      name: modifier ? raw.slice(0, -1) : raw,\n      modifier,\n    };\n  }\n\n  private escapeRegex(value: string): string {\n    return value.replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\");\n  }\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\n\nexport function writeFileIfChanged(filePath: string, content: string): boolean {\n  try {\n    if (readFileSync(filePath, \"utf8\") === content) {\n      return false;\n    }\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n      throw error;\n    }\n  }\n\n  writeFileSync(filePath, content, \"utf8\");\n  return true;\n}\n","import { readFileSync, existsSync, readdirSync, mkdirSync } from \"fs\";\nimport { join, relative, dirname } from \"path\";\nimport { initSync, parse } from \"es-module-lexer\";\nimport { writeFileIfChanged } from \"./write-file-if-changed\";\nimport { registerAPIRouteShape } from \"./api/route-shape\";\nimport { isFarmAPIRouteFileName } from \"./api/route-files\";\n\nlet moduleLexerInitialized = false;\n\nconst API_CLIENT_METHOD_SEGMENTS = new Set([\n  \"get\",\n  \"head\",\n  \"query\",\n  \"post\",\n  \"put\",\n  \"delete\",\n  \"patch\",\n  \"options\",\n]);\n\nexport interface APIRouteInfo {\n  path: string;\n  methods: string[];\n  filePath: string;\n  relativePath: string;\n}\n\nexport class APITypeGenerator {\n  private appDirs: string[];\n\n  constructor(appDir: string | readonly string[]) {\n    this.appDirs = Array.isArray(appDir) ? [...appDir] : [appDir as string];\n  }\n\n  /**\n   * Scan all API route files and extract route information\n   */\n  scanAPIRoutes(): APIRouteInfo[] {\n    const methodSources = new Map<string, Map<string, APIRouteInfo>>();\n\n    for (const appDir of this.appDirs) {\n      const apiDir = join(appDir, \"api\");\n      if (!existsSync(apiDir)) continue;\n\n      const discovered: APIRouteInfo[] = [];\n      this.scanDirectory(apiDir, appDir, discovered);\n      for (const route of discovered) {\n        const routeMethods = methodSources.get(route.path) ?? new Map<string, APIRouteInfo>();\n        for (const method of route.methods) {\n          routeMethods.set(method, route);\n        }\n        methodSources.set(route.path, routeMethods);\n      }\n    }\n\n    const routes: APIRouteInfo[] = [];\n    for (const [routePath, methods] of methodSources) {\n      const routesByFile = new Map<string, APIRouteInfo>();\n      for (const [method, route] of methods) {\n        const existing = routesByFile.get(route.filePath);\n        if (existing) {\n          existing.methods.push(method);\n        } else {\n          routesByFile.set(route.filePath, {\n            ...route,\n            path: routePath,\n            methods: [method],\n          });\n        }\n      }\n      routes.push(...routesByFile.values());\n    }\n\n    return routes.sort(\n      (left, right) =>\n        left.path.localeCompare(right.path) || left.filePath.localeCompare(right.filePath),\n    );\n  }\n\n  private scanDirectory(dir: string, appDir: string, routes: APIRouteInfo[], basePath = \"\") {\n    const items = readdirSync(dir, { withFileTypes: true });\n\n    for (const item of items) {\n      const fullPath = join(dir, item.name);\n\n      if (item.isDirectory()) {\n        const newBasePath = basePath ? `${basePath}/${item.name}` : item.name;\n        this.scanDirectory(fullPath, appDir, routes, newBasePath);\n      } else if (isFarmAPIRouteFileName(item.name)) {\n        const routeInfo = this.extractRouteInfo(fullPath, appDir, basePath);\n        if (routeInfo) {\n          routes.push(routeInfo);\n        }\n      }\n    }\n  }\n\n  private extractRouteInfo(\n    filePath: string,\n    appDir: string,\n    basePath: string,\n  ): APIRouteInfo | null {\n    try {\n      const content = readFileSync(filePath, \"utf-8\");\n      const methods = this.extractExportedMethods(content);\n\n      if (methods.length === 0) {\n        return null;\n      }\n\n      const relativePath = relative(appDir, filePath);\n      const apiPath = basePath ? `/api/${basePath}` : \"/api\";\n\n      return {\n        path: apiPath,\n        methods,\n        filePath,\n        relativePath,\n      };\n    } catch (error) {\n      console.warn(`Failed to read route file ${filePath}:`, error);\n      return null;\n    }\n  }\n\n  private extractExportedMethods(content: string): string[] {\n    if (!moduleLexerInitialized) {\n      initSync();\n      moduleLexerInitialized = true;\n    }\n    const httpMethods = [\"GET\", \"HEAD\", \"QUERY\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"];\n    const [, exports] = parse(content);\n    const valueExports = new Set(\n      exports\n        .filter((specifier) => !this.isTypeOnlyExportSpecifier(content, specifier.s))\n        .map((specifier) => specifier.n),\n    );\n    return httpMethods.filter((method) => valueExports.has(method));\n  }\n\n  private isTypeOnlyExportSpecifier(content: string, exportNameStart: number): boolean {\n    let cursor = exportNameStart - 1;\n\n    while (cursor >= 0) {\n      while (cursor >= 0 && /\\s/.test(content[cursor])) cursor--;\n\n      if (content.slice(cursor - 1, cursor + 1) === \"*/\") {\n        const commentStart = content.lastIndexOf(\"/*\", cursor - 1);\n        if (commentStart >= 0) {\n          cursor = commentStart - 1;\n          continue;\n        }\n      }\n\n      const lineStart = content.lastIndexOf(\"\\n\", cursor) + 1;\n      const lineCommentStart = content.indexOf(\"//\", lineStart);\n      if (lineCommentStart >= 0 && lineCommentStart <= cursor) {\n        cursor = lineCommentStart - 1;\n        continue;\n      }\n\n      break;\n    }\n\n    const tokenEnd = cursor + 1;\n    while (cursor >= 0 && /[A-Za-z0-9_$]/.test(content[cursor])) cursor--;\n    return content.slice(cursor + 1, tokenEnd) === \"type\";\n  }\n\n  /**\n   * Generate TypeScript code for the API router\n   */\n  generateAPIRouter(\n    routes: APIRouteInfo[],\n    options: {\n      outFile?: string;\n      pluginConfigs?: readonly string[];\n      pluginRoutes?: readonly { path: string; method: string }[];\n    } = {},\n  ): string {\n    const imports: string[] = [];\n    const pluginTypes: string[] = [];\n    if (options.pluginConfigs?.length) {\n      imports.push('import type { PluginAPIRouter } from \"@farm.js/core/api\";');\n      options.pluginConfigs.forEach((filePath, index) => {\n        const importPath = this.getRouteImportPath({ filePath } as APIRouteInfo, options.outFile);\n        imports.push(`import type FarmPluginConfig${index} from ${JSON.stringify(importPath)};`);\n        pluginTypes.push(`PluginAPIRouter<typeof FarmPluginConfig${index}>`);\n      });\n    }\n\n    // Group routes by path to handle multiple methods\n    const routeGroups = new Map<string, APIRouteInfo[]>();\n\n    for (const route of routes) {\n      const key = route.path;\n      if (!routeGroups.has(key)) {\n        routeGroups.set(key, []);\n      }\n      routeGroups.get(key)!.push(route);\n    }\n\n    const routeMethodsByPath = new Map<string, Set<string>>();\n    for (const [routePath, routeList] of routeGroups) {\n      const cleanPath = routePath === \"/api\" ? \"\" : routePath.replace(/^\\/api\\//, \"\");\n      routeMethodsByPath.set(\n        cleanPath,\n        new Set(routeList.flatMap((route) => route.methods.map((method) => method.toLowerCase()))),\n      );\n    }\n    for (const route of options.pluginRoutes ?? []) {\n      const cleanPath = route.path === \"/api\" ? \"\" : route.path.replace(/^\\/api\\//, \"\");\n      const methods = routeMethodsByPath.get(cleanPath) ?? new Set<string>();\n      methods.add(route.method.toLowerCase());\n      routeMethodsByPath.set(cleanPath, methods);\n    }\n\n    // Build nested structure\n    const nestedStructure: any = {};\n    const usedRouteNames = new Map<string, number>();\n\n    for (const [path, routeList] of routeGroups) {\n      const routeName = this.uniqueRouteName(path, usedRouteNames);\n      const cleanPath = path === \"/api\" ? \"\" : path.replace(/^\\/api\\//, \"\");\n      const parts = cleanPath ? cleanPath.split(\"/\") : [];\n\n      // Keep the final source for each method, matching runtime layer precedence.\n      const methodSources = new Map<string, APIRouteInfo>();\n      for (const route of routeList) {\n        for (const method of route.methods) methodSources.set(method, route);\n      }\n      const allMethods = [...methodSources.keys()];\n\n      // Generate imports\n      for (const method of allMethods) {\n        const importPath = this.getRouteImportPath(methodSources.get(method)!, options.outFile);\n        const importName = `${method}_${routeName}`;\n        imports.push(\n          `import type { ${method} as ${importName} } from ${JSON.stringify(importPath)};`,\n        );\n      }\n\n      if (parts.length === 0) {\n        for (const method of allMethods) {\n          const importName = `${method}_${routeName}`;\n          const methodName = method.toLowerCase();\n          nestedStructure[methodName] = `typeof ${importName}`;\n        }\n      } else {\n        const hasMethodCollision = parts.some((part, index) => {\n          if (part === \"$params\" || (index === 0 && part === \"integrations\")) return true;\n          if (!API_CLIENT_METHOD_SEGMENTS.has(part)) return false;\n          const parentPath = parts.slice(0, index).join(\"/\");\n          return routeMethodsByPath.get(parentPath)?.has(part) === true;\n        });\n        const typePath = hasMethodCollision ? [`/${cleanPath}`] : parts;\n        // Build nested object\n        let current = nestedStructure;\n        for (let i = 0; i < typePath.length; i++) {\n          const part = typePath[i];\n          if (i === typePath.length - 1) {\n            // Last part - add methods\n            current[part] = {};\n            for (const method of allMethods) {\n              const importName = `${method}_${routeName}`;\n              const methodName = method.toLowerCase();\n              current[part][methodName] = `typeof ${importName}`;\n            }\n          } else {\n            // Intermediate part - create nested object\n            if (!current[part]) {\n              current[part] = {};\n            }\n            current = current[part];\n          }\n        }\n      }\n    }\n\n    // Convert nested structure to TypeScript code\n    const typeExports = this.structureToTypeString(nestedStructure, 1);\n    const manifest = new Map<string, Set<string>>();\n    const shapes = new Map();\n    for (const route of routes) {\n      registerAPIRouteShape(shapes, route.path, route.filePath, \"app\");\n      const methods = manifest.get(route.path) ?? new Set<string>();\n      for (const method of route.methods) methods.add(method);\n      manifest.set(route.path, methods);\n    }\n    for (const route of options.pluginRoutes ?? []) {\n      registerAPIRouteShape(shapes, route.path, `plugin:${route.path}`, \"app\");\n      const methods = manifest.get(route.path) ?? new Set<string>();\n      if (methods.has(route.method))\n        throw new Error(`Duplicate API route for ${route.method} ${route.path}`);\n      methods.add(route.method);\n      manifest.set(route.path, methods);\n    }\n    const routeManifest = [...manifest]\n      .sort(([a], [b]) => a.localeCompare(b))\n      .map(([path, methods]) => ({ path, methods: [...methods].sort() }));\n    const manifestSource = routeManifest.length\n      ? `[\\n${routeManifest\n          .map(\n            ({ path, methods }) =>\n              `  {\\n    path: ${JSON.stringify(path)},\\n    methods: [${methods.map((method) => JSON.stringify(method)).join(\", \")}],\\n  },`,\n          )\n          .join(\"\\n\")}\\n]`\n      : \"[]\";\n\n    return `/**\n * Auto-generated API router types\n * This file is automatically generated - do not edit manually\n *\n * Server modules are imported only as types. Runtime data contains paths and methods only.\n */\n\n${imports.join(\"\\n\")}\n\n// Type-only representation of your API routes\nexport type APIRouter = ${pluginTypes.length ? `${pluginTypes.join(\" & \")} & ` : \"\"}{\n${typeExports}\n};\n\n// Pass this schema-free manifest to createApiClients({ routes: apiRoutes }).\nexport const apiRoutes = ${manifestSource} as const;\n`;\n  }\n\n  private getRouteImportPath(route: APIRouteInfo, outFile?: string): string {\n    if (!outFile) {\n      return `../app/${route.relativePath.replace(/\\\\/g, \"/\").replace(/\\.(ts|tsx|js|jsx)$/, \"\")}`;\n    }\n\n    const relativeImport = relative(dirname(outFile), route.filePath)\n      .replace(/\\\\/g, \"/\")\n      .replace(/\\.(ts|tsx|js|jsx)$/, \"\");\n    return relativeImport.startsWith(\".\") ? relativeImport : `./${relativeImport}`;\n  }\n\n  private pathToRouteName(path: string): string {\n    // Replace (not strip) invalid identifier characters, so /api/id and\n    // /api/[id] do not normalize to the same name.\n    return (path === \"/api\" ? \"root\" : path.replace(/^\\/api\\//, \"\"))\n      .replace(/\\//g, \"_\")\n      .replace(/[^a-zA-Z0-9_]/g, \"_\");\n  }\n\n  private uniqueRouteName(path: string, usedNames: Map<string, number>): string {\n    const base = this.pathToRouteName(path);\n    const seen = usedNames.get(base);\n    usedNames.set(base, (seen ?? 0) + 1);\n    // Suffix any remaining collision so the generated import aliases are\n    // always distinct identifiers.\n    return seen ? `${base}_${seen + 1}` : base;\n  }\n\n  private structureToTypeString(obj: any, indent: number): string {\n    const spaces = \"  \".repeat(indent);\n    const lines: string[] = [];\n\n    for (const [key, value] of Object.entries(obj)) {\n      const propertyKey = this.toTypePropertyKey(key);\n\n      if (typeof value === \"string\") {\n        // It's a type reference\n        lines.push(`${spaces}${propertyKey}: ${value};`);\n      } else if (typeof value === \"object\") {\n        // It's a nested object\n        lines.push(`${spaces}${propertyKey}: {`);\n        lines.push(this.structureToTypeString(value, indent + 1));\n        lines.push(`${spaces}};`);\n      }\n    }\n\n    return lines.join(\"\\n\");\n  }\n\n  private toTypePropertyKey(key: string): string {\n    return /^[$A-Z_][0-9A-Z_$]*$/i.test(key) ? key : JSON.stringify(key);\n  }\n\n  private getBaseExportName(path: string): string {\n    const cleanPath = path.replace(/^\\/api\\//, \"\");\n\n    if (cleanPath === \"\") {\n      return \"api\";\n    }\n\n    // Convert path to nested structure\n    // /api/auth/login -> ['auth', 'login']\n    return cleanPath;\n  }\n\n  private getExportName(path: string, method: string): string {\n    const cleanPath = path.replace(/^\\/api\\//, \"\");\n\n    if (cleanPath === \"\") {\n      return method.toLowerCase();\n    }\n\n    const parts = cleanPath.split(\"/\");\n    if (parts.length === 1) {\n      // For single-level paths like /api/hello, just use the path name\n      return parts[0];\n    }\n\n    // For nested paths like /api/auth/login, create nested structure\n    // This matches the expected API client usage: api.auth.login()\n    return parts.join(\".\");\n  }\n\n  /**\n   * Generate the API index file\n   */\n  generateAPIIndex(outputPath: string): void {\n    const routes = this.scanAPIRoutes();\n    const content = this.generateAPIRouter(routes, { outFile: outputPath });\n\n    mkdirSync(dirname(outputPath), { recursive: true });\n    writeFileIfChanged(outputPath, content);\n    console.log(`✅ Generated API types for ${routes.length} routes`);\n  }\n}\n","import * as path from \"path\";\nimport * as fs from \"fs\";\nimport { parseRoutePath } from \"../utils\";\nimport { parseRouteSlotFile } from \"./route-slots\";\nimport type { ParsedRoute } from \"../types\";\nimport { discoverProgrammaticRoutePaths } from \"../routes.server\";\nimport type { FarmSourceRoot } from \"../layers\";\nimport { writeFileIfChanged } from \"../write-file-if-changed\";\nimport { resolveFarmComponentExtensions } from \"../renderer\";\n\nfunction routeSegmentsToTsTypeLiteral(segments: string[]): string {\n  if (segments.length === 0) return '\"/\"';\n  const hasDynamic = segments.some((s) => s.startsWith(\"[\"));\n  if (!hasDynamic) return JSON.stringify(\"/\" + segments.join(\"/\"));\n  const parts = segments.map((s) => {\n    if (s.startsWith(\"[[...\") || s.startsWith(\"[...\")) return \"${string}\";\n    if (s.startsWith(\"[\")) return \"${string}\";\n    return s;\n  });\n  return \"`/\" + parts.join(\"/\") + \"`\";\n}\n\nfunction routePatternToTsTypeLiterals(pattern: string): string[] {\n  if (pattern === \"/\") return ['\"/\"'];\n\n  let variants: string[][] = [[]];\n  for (const segment of pattern.slice(1).split(\"/\").filter(Boolean)) {\n    if (segment.startsWith(\"[[...\") && segment.endsWith(\"]]\")) {\n      variants = variants.flatMap((parts) => [parts, [...parts, segment]]);\n    } else {\n      variants = variants.map((parts) => [...parts, segment]);\n    }\n  }\n\n  return variants.map(routeSegmentsToTsTypeLiteral);\n}\n\nfunction routePatternToRouteLiteral(pattern: string): string {\n  return JSON.stringify(pattern);\n}\n\nfunction renderTypeUnion(values: readonly string[]): string {\n  return values.length <= 1 ? values[0] || \"never\" : `\\n  | ${values.join(\"\\n  | \")}`;\n}\n\nfunction renderTypeAlias(name: string, value: string): string {\n  return `export type ${name} =${value.startsWith(\"\\n\") ? \"\" : \" \"}${value};`;\n}\n\nfunction createRoutePattern(route: ParsedRoute): string {\n  if (route.segments.length === 0) return \"/\";\n  return (\n    \"/\" +\n    route.segments\n      .map((seg) => {\n        if (!seg.isDynamic) return seg.segment;\n        if (seg.isCatchAll) return seg.isOptional ? `[[...${seg.segment}]]` : `[...${seg.segment}]`;\n        return `[${seg.segment}]`;\n      })\n      .join(\"/\")\n  );\n}\n\nexport interface GenerateRouteTypesOptions {\n  root: string;\n  srcDir?: string;\n  outFile?: string;\n  extraRoutes?: string[];\n  /** Ordered layer roots followed by the project root. */\n  sourceRoots?: readonly FarmSourceRoot[];\n  /** When true, do not augment LinkDefaultRoute so Link href accepts any string (no route-type errors). */\n  suppressLintOnLink?: boolean;\n  /** Additional renderer-owned component extensions, such as `.vue` or `.svelte`. */\n  componentExtensions?: readonly string[];\n}\n\nconst DEFAULT_OUT_FILE = \"farm-routes.d.ts\";\n\n/**\n * Scan application route modules, generate page and module route unions,\n * and write a .d.ts file for typed Link hrefs and route component props.\n */\nexport async function generateRouteTypes(options: GenerateRouteTypesOptions): Promise<string> {\n  const root = path.resolve(options.root);\n  const srcDir = options.srcDir || \"src\";\n  const outFile = options.outFile || DEFAULT_OUT_FILE;\n  const outPath = path.isAbsolute(outFile) ? outFile : path.join(root, srcDir, outFile);\n  const content = await createRouteTypeDeclarations(options, outPath);\n\n  fs.mkdirSync(path.dirname(outPath), { recursive: true });\n  writeFileIfChanged(outPath, content);\n\n  return outPath;\n}\n\nexport async function createRouteTypeDeclarations(\n  options: GenerateRouteTypesOptions,\n  outPath: string,\n): Promise<string> {\n  const { root, srcDir = \"src\", extraRoutes = [], suppressLintOnLink = false } = options;\n  const sourceRoots = options.sourceRoots ?? [{ name: \"project\", root, srcDir, layer: false }];\n  const componentExtensions = resolveFarmComponentExtensions(options.componentExtensions).map(\n    (extension) => extension.slice(1),\n  );\n\n  const patterns = new Set<string>();\n  const routeModulePatterns = new Set<string>();\n\n  const glob = await import(\"fast-glob\");\n  for (const source of sourceRoots) {\n    const appDir = path.join(source.root, source.srcDir, \"app\");\n    if (fs.existsSync(appDir)) {\n      const routeModuleFiles = await glob.default(\n        `**/{page,layout,loading,error}.{${componentExtensions.join(\",\")},md,mdx}`,\n        {\n          cwd: appDir,\n          absolute: false,\n        },\n      );\n\n      for (const file of routeModuleFiles) {\n        if (parseRouteSlotFile(file)) continue;\n        const route = parseRoutePath(file);\n        const pattern = createRoutePattern(route);\n        routeModulePatterns.add(pattern);\n        if (route.type === \"page\") {\n          patterns.add(pattern);\n        }\n      }\n    }\n\n    for (const route of await discoverProgrammaticRoutePaths(source.root, source.srcDir)) {\n      patterns.add(route);\n      routeModulePatterns.add(route);\n    }\n  }\n\n  for (const route of extraRoutes) {\n    if (route.startsWith(\"/\")) {\n      patterns.add(route);\n      routeModulePatterns.add(route);\n    }\n  }\n\n  const sortedPatterns = Array.from(patterns).sort();\n  const typeLiterals = Array.from(new Set(sortedPatterns.flatMap(routePatternToTsTypeLiterals)));\n  const patternLiterals = sortedPatterns.map(routePatternToRouteLiteral);\n  const routeModulePatternLiterals = Array.from(routeModulePatterns)\n    .sort()\n    .map(routePatternToRouteLiteral);\n\n  const routePathType = suppressLintOnLink ? \"string\" : renderTypeUnion(typeLiterals);\n  const routePatternType = suppressLintOnLink ? \"string\" : renderTypeUnion(patternLiterals);\n  const routeModulePatternType = renderTypeUnion(routeModulePatternLiterals);\n  const routeTypesImportPath = `./${path.basename(outPath).replace(/\\.d\\.ts$/, \"\")}`;\n  const linkAugmentationBlock = suppressLintOnLink\n    ? \"\"\n    : `\ndeclare module \"@farm.js/core/client\" {\n  interface LinkDefaultRoute {\n    _: import(${JSON.stringify(routeTypesImportPath)}).RoutePath;\n    pattern: import(${JSON.stringify(routeTypesImportPath)}).RoutePattern;\n  }\n}\n\ndeclare module \"@farm.js/core\" {\n  interface LinkDefaultRoute {\n    _: import(${JSON.stringify(routeTypesImportPath)}).RoutePath;\n    pattern: import(${JSON.stringify(routeTypesImportPath)}).RoutePattern;\n  }\n  // Ensure root import (\"@farm.js/core\") uses the same typed Link signature as client entry.\n  const Link: typeof import(\"@farm.js/core/client\").Link;\n}\n\n// Internal declaration path used by @farm.js/core root type re-exports.\ndeclare module \"@farm.js/core/dist/client.js\" {\n  interface LinkDefaultRoute {\n    _: import(${JSON.stringify(routeTypesImportPath)}).RoutePath;\n    pattern: import(${JSON.stringify(routeTypesImportPath)}).RoutePattern;\n  }\n}\n`;\n\n  const routeModuleAugmentationBlock = `\ndeclare global {\n  namespace FarmJS {\n    interface RouteRegistry {\n      pattern: import(${JSON.stringify(routeTypesImportPath)}).RouteModulePattern;\n    }\n  }\n}\n`;\n\n  const content = `/**\n * Auto-generated route types from src/app.\n * Link href and route component props are typed automatically from generated declarations.\n * Regenerated on dev start and when routes change.\n * Set suppressLintOnLink: true in farm.config.ts to accept any string on Link href.\n */\n${renderTypeAlias(\"RoutePath\", routePathType)}\n${renderTypeAlias(\"RoutePattern\", routePatternType)}\n${renderTypeAlias(\"RouteModulePattern\", routeModulePatternType)}${linkAugmentationBlock}${routeModuleAugmentationBlock}\n`;\n\n  return content;\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { writeFileIfChanged } from \"./write-file-if-changed\";\n\nexport interface GenerateEnvTypesOptions {\n  root: string;\n  srcDir?: string;\n  outFile?: string;\n  configPath?: string;\n  /** Lower-priority layer config files, ordered before the project config. */\n  layerConfigPaths?: readonly string[];\n}\n\nconst DEFAULT_OUT_FILE = \"farm-env.d.ts\";\nconst CONFIG_FILENAMES = [\n  \"farm.config.ts\",\n  \"farm.config.tsx\",\n  \"farm.config.mts\",\n  \"farm.config.cts\",\n  \"farm.config.js\",\n  \"farm.config.jsx\",\n  \"farm.config.mjs\",\n  \"farm.config.cjs\",\n  \"config.ts\",\n  \"config.tsx\",\n  \"config.mts\",\n  \"config.cts\",\n  \"config.js\",\n  \"config.jsx\",\n  \"config.mjs\",\n  \"config.cjs\",\n];\n\nexport async function generateEnvTypes(options: GenerateEnvTypesOptions): Promise<string> {\n  const root = path.resolve(options.root);\n  const srcDir = options.srcDir || \"src\";\n  const outFile = options.outFile || DEFAULT_OUT_FILE;\n  const outPath = path.isAbsolute(outFile) ? outFile : path.join(root, srcDir, outFile);\n  const content = createEnvTypeDeclarations(options, outPath);\n\n  fs.mkdirSync(path.dirname(outPath), { recursive: true });\n  writeFileIfChanged(outPath, content);\n\n  return outPath;\n}\n\nexport function createEnvTypeDeclarations(\n  options: GenerateEnvTypesOptions,\n  outPath: string,\n): string {\n  const root = path.resolve(options.root);\n  const configPath = findConfigPath(root, options.configPath);\n  const configPaths = [\n    ...(options.layerConfigPaths ?? []).filter((value) => fs.existsSync(value)),\n    ...(configPath ? [configPath] : []),\n  ];\n  const content =\n    configPaths.length > 1\n      ? createLayeredConfigBackedEnvTypes(outPath, configPaths)\n      : configPaths.length === 1\n        ? createConfigBackedEnvTypes(outPath, configPaths[0])\n        : createEmptyEnvTypes();\n\n  return content;\n}\n\nfunction createLayeredConfigBackedEnvTypes(outPath: string, configPaths: string[]): string {\n  const imports = configPaths\n    .map(\n      (configPath, index) =>\n        `import type FarmConfig${index} from ${JSON.stringify(toTypeImportPath(outPath, configPath))};`,\n    )\n    .join(\"\\n\");\n  const resolvedTypes = configPaths\n    .map(\n      (_configPath, index) => `\ntype FarmConfigEnv${index} = typeof FarmConfig${index} extends { env?: infer TEnv }\n  ? NonNullable<TEnv>\n  : never;\ntype FarmResolvedEnv${index} = [FarmConfigEnv${index}] extends [never]\n  ? { server: {}; public: {} }\n  : InferEnv<FarmConfigEnv${index}>;`,\n    )\n    .join(\"\\n\");\n  const mergedTypes = configPaths\n    .slice(1)\n    .map(\n      (_configPath, index) =>\n        `type FarmMergedEnv${index + 1} = MergeFarmEnv<${index === 0 ? \"FarmResolvedEnv0\" : `FarmMergedEnv${index}`}, FarmResolvedEnv${index + 1}>;`,\n    )\n    .join(\"\\n\");\n  const finalType = `FarmMergedEnv${configPaths.length - 1}`;\n\n  return `/**\n * Auto-generated env types from Farm layers and farm.config.\n * Regenerated on dev start, build, and farm generate.\n */\n${imports}\nimport type { InferEnv } from \"@farm.js/core/env\";\n\ntype MergeFarmEnv<TBase, TOverride> = {\n  server: Omit<TBase extends { server: infer T } ? T : {}, keyof (TOverride extends { server: infer T } ? T : {})> &\n    (TOverride extends { server: infer T } ? T : {});\n  public: Omit<TBase extends { public: infer T } ? T : {}, keyof (TOverride extends { public: infer T } ? T : {})> &\n    (TOverride extends { public: infer T } ? T : {});\n};\n${resolvedTypes}\n${mergedTypes}\n\ntype FarmResolvedEnv = ${finalType};\n\ndeclare module \"@farm.js/core/env\" {\n  interface FarmEnvTypes {\n    server: FarmResolvedEnv[\"server\"];\n    public: FarmResolvedEnv[\"public\"];\n  }\n}\n\ndeclare module \"@farm.js/core\" {\n  interface FarmEnvTypes {\n    server: FarmResolvedEnv[\"server\"];\n    public: FarmResolvedEnv[\"public\"];\n  }\n}\n\nexport {};\n`;\n}\n\nfunction findConfigPath(root: string, configPath?: string): string | null {\n  if (configPath) {\n    const resolvedPath = path.isAbsolute(configPath) ? configPath : path.join(root, configPath);\n    return fs.existsSync(resolvedPath) ? resolvedPath : null;\n  }\n\n  for (const filename of CONFIG_FILENAMES) {\n    const resolvedPath = path.join(root, filename);\n    if (fs.existsSync(resolvedPath)) {\n      return resolvedPath;\n    }\n  }\n\n  return null;\n}\n\nfunction createConfigBackedEnvTypes(outPath: string, configPath: string): string {\n  const configImportPath = toTypeImportPath(outPath, configPath);\n\n  return `/**\n * Auto-generated env types from farm.config.\n * Regenerated on dev start, build, and farm generate.\n */\nimport type FarmConfig from ${JSON.stringify(configImportPath)};\nimport type { InferEnv } from \"@farm.js/core/env\";\n\ntype FarmConfigEnv = typeof FarmConfig extends { env?: infer TEnv } ? NonNullable<TEnv> : never;\ntype FarmResolvedEnv = [FarmConfigEnv] extends [never]\n  ? { server: {}; public: {} }\n  : InferEnv<FarmConfigEnv>;\n\ndeclare module \"@farm.js/core/env\" {\n  interface FarmEnvTypes {\n    server: FarmResolvedEnv[\"server\"];\n    public: FarmResolvedEnv[\"public\"];\n  }\n}\n\ndeclare module \"@farm.js/core\" {\n  interface FarmEnvTypes {\n    server: FarmResolvedEnv[\"server\"];\n    public: FarmResolvedEnv[\"public\"];\n  }\n}\n\nexport {};\n`;\n}\n\nfunction createEmptyEnvTypes(): string {\n  return `/**\n * Auto-generated env types from farm.config.\n * Regenerated on dev start, build, and farm generate.\n */\ndeclare module \"@farm.js/core/env\" {\n  interface FarmEnvTypes {\n    server: {};\n    public: {};\n  }\n}\n\ndeclare module \"@farm.js/core\" {\n  interface FarmEnvTypes {\n    server: {};\n    public: {};\n  }\n}\n\nexport {};\n`;\n}\n\nfunction toTypeImportPath(outPath: string, targetPath: string): string {\n  const relativePath = path\n    .relative(path.dirname(outPath), targetPath)\n    .replace(/\\\\/g, \"/\")\n    .replace(/\\.(tsx?|jsx?|mjs|cjs|mts|cts)$/, \"\");\n\n  return relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n","import { mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { writeFileIfChanged } from \"./write-file-if-changed\";\n\nexport const FARM_STATIC_IMAGE_EXTENSIONS = [\"avif\", \"gif\", \"jpeg\", \"jpg\", \"png\", \"webp\"] as const;\n\nexport interface GenerateFarmImageTypesOptions {\n  root: string;\n  srcDir?: string;\n  outFile?: string;\n}\n\nexport function generateFarmImageTypes(options: GenerateFarmImageTypesOptions): string {\n  const outputPath = options.outFile\n    ? path.resolve(options.root, options.outFile)\n    : path.join(options.root, options.srcDir || \"src\", \"farm-images.d.ts\");\n  mkdirSync(path.dirname(outputPath), { recursive: true });\n  writeFileIfChanged(outputPath, createFarmImageTypeDeclarations());\n  return outputPath;\n}\n\nexport function createFarmImageTypeDeclarations(): string {\n  const modules = FARM_STATIC_IMAGE_EXTENSIONS.map(\n    (extension) => `declare module \"*.${extension}\" {\n  const image: import(\"@farm.js/core/image\").StaticImageData;\n  export const src: string;\n  export const width: number;\n  export const height: number;\n  export const blurDataURL: string | undefined;\n  export default image;\n}`,\n  );\n\n  return `// Generated by Farm.js. Do not edit.\n${modules.join(\"\\n\\n\")}\n\ndeclare module \"*?url\" {\n  const src: string;\n  export default src;\n}\n`;\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport interface CreateContentTypeDeclarationsOptions {\n  root: string;\n  configPath?: string;\n  /** Lower-priority layer config files, ordered before the project config. */\n  layerConfigPaths?: readonly string[];\n}\n\nconst CONFIG_FILENAMES = [\n  \"farm.config.ts\",\n  \"farm.config.tsx\",\n  \"farm.config.mts\",\n  \"farm.config.cts\",\n  \"farm.config.js\",\n  \"farm.config.jsx\",\n  \"farm.config.mjs\",\n  \"farm.config.cjs\",\n  \"config.ts\",\n  \"config.tsx\",\n  \"config.mts\",\n  \"config.cts\",\n  \"config.js\",\n  \"config.jsx\",\n  \"config.mjs\",\n  \"config.cjs\",\n];\n\n/** Infer content collection names and entry data from content() in Farm config. */\nexport function createContentTypeDeclarations(\n  options: CreateContentTypeDeclarationsOptions,\n  outPath: string,\n): string {\n  const root = path.resolve(options.root);\n  const projectConfig = findConfigPath(root, options.configPath);\n  const configPaths = [\n    ...(options.layerConfigPaths ?? []).filter((value) => fs.existsSync(value)),\n    ...(projectConfig ? [projectConfig] : []),\n  ];\n\n  if (configPaths.length === 0) return createEmptyContentTypes();\n\n  const imports = configPaths\n    .map(\n      (configPath, index) =>\n        `import type FarmContentConfig${index} from ${JSON.stringify(toTypeImportPath(outPath, configPath))};`,\n    )\n    .join(\"\\n\");\n  const registries = configPaths\n    .map(\n      (_configPath, index) =>\n        `type FarmContentRegistry${index} = ContentRegistryFromConfig<typeof FarmContentConfig${index}>;`,\n    )\n    .join(\"\\n\");\n  const registryUnion = configPaths\n    .map((_configPath, index) => `FarmContentRegistry${index}`)\n    .join(\" | \");\n\n  return `/**\n * Auto-generated content collection types from Farm layers and farm.config.\n * Regenerated on dev start, build, and farm generate.\n */\n${imports}\n\ntype FarmContentPluginFromConfig<TConfig> = TConfig extends {\n  plugins?: readonly (infer TPlugin)[];\n}\n  ? Extract<TPlugin, { readonly __farmContentRegistry: Record<string, unknown> }>\n  : never;\ntype ContentRegistryFromConfig<TConfig> =\n  FarmContentPluginFromConfig<TConfig> extends {\n    readonly __farmContentRegistry: infer TRegistry;\n  }\n    ? TRegistry\n    : never;\ntype FarmContentUnionToIntersection<TValue> = (\n  TValue extends unknown ? (value: TValue) => void : never\n) extends (value: infer TIntersection) => void\n  ? TIntersection\n  : never;\n${registries}\n\ntype FarmResolvedContentRegistry = [${registryUnion}] extends [never]\n  ? {}\n  : FarmContentUnionToIntersection<${registryUnion}>;\n\ndeclare global {\n  namespace FarmJS {\n    interface ContentRegistry {\n      collections: FarmResolvedContentRegistry;\n    }\n  }\n}\n\nexport {};\n`;\n}\n\nfunction createEmptyContentTypes(): string {\n  return `/**\n * Auto-generated content collection types from farm.config.\n * Regenerated on dev start, build, and farm generate.\n */\ndeclare global {\n  namespace FarmJS {\n    interface ContentRegistry {\n      collections: {};\n    }\n  }\n}\n\nexport {};\n`;\n}\n\nfunction findConfigPath(root: string, configPath?: string): string | null {\n  if (configPath) {\n    const resolvedPath = path.isAbsolute(configPath) ? configPath : path.join(root, configPath);\n    return fs.existsSync(resolvedPath) ? resolvedPath : null;\n  }\n  for (const filename of CONFIG_FILENAMES) {\n    const resolvedPath = path.join(root, filename);\n    if (fs.existsSync(resolvedPath)) return resolvedPath;\n  }\n  return null;\n}\n\nfunction toTypeImportPath(outPath: string, targetPath: string): string {\n  const relativePath = path\n    .relative(path.dirname(outPath), targetPath)\n    .replace(/\\\\/g, \"/\")\n    .replace(/\\.(tsx?|jsx?|mjs|cjs|mts|cts)$/, \"\");\n  return relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n","import { mkdirSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n  readFarmI18nCatalogs,\n  type FarmI18nArgumentKind,\n  type FarmI18nMessageSignature,\n} from \"./catalog\";\nimport type { ResolvedFarmI18nConfig } from \"./types\";\nimport { writeFileIfChanged } from \"../write-file-if-changed\";\n\nexport interface GenerateFarmI18nTypesOptions {\n  root: string;\n  srcDir?: string;\n  config: ResolvedFarmI18nConfig;\n  outFile?: string;\n}\n\nexport async function generateFarmI18nTypes(\n  options: GenerateFarmI18nTypesOptions,\n): Promise<string | undefined> {\n  if (!options.config.enabled) return undefined;\n\n  const { signatures } = await readFarmI18nCatalogs(options.config);\n  const outFile = options.outFile\n    ? resolve(options.root, options.outFile)\n    : join(resolve(options.root), options.srcDir || \"src\", \"farm-i18n.d.ts\");\n  const content = renderFarmI18nTypes(options.config.locales, signatures);\n\n  mkdirSync(dirname(outFile), { recursive: true });\n  writeFileIfChanged(outFile, content);\n  return outFile;\n}\n\nexport function renderFarmI18nTypes(\n  locales: readonly string[],\n  signatures: Record<string, FarmI18nMessageSignature>,\n): string {\n  const localeEntries = locales.map((locale) => `    ${JSON.stringify(locale)}: true;`);\n  const messageEntries = Object.entries(signatures)\n    .sort(([a], [b]) => a.localeCompare(b))\n    .map(([key, signature]) => `    ${JSON.stringify(key)}: ${renderSignature(signature)};`);\n\n  return `// Generated by Farm.js. Do not edit.\nimport \"@farm.js/core/i18n\";\n\ndeclare module \"@farm.js/core/i18n\" {\n  interface FarmI18nLocaleRegistry {\n${localeEntries.join(\"\\n\")}\n  }\n\n  interface FarmI18nMessageRegistry {\n${messageEntries.join(\"\\n\")}\n  }\n}\n\nexport {};\n`;\n}\n\nfunction renderSignature(signature: FarmI18nMessageSignature): string {\n  const entries = Object.entries(signature).sort(([a], [b]) => a.localeCompare(b));\n  if (entries.length === 0) return \"Record<never, never>\";\n  return `{ ${entries\n    .map(([name, kind]) => `${JSON.stringify(name)}: ${argumentType(kind)}`)\n    .join(\"; \")} }`;\n}\n\nfunction argumentType(kind: FarmI18nArgumentKind): string {\n  switch (kind) {\n    case \"number\":\n      return \"number\";\n    case \"date\":\n      return \"Date | number\";\n    case \"rich\":\n      return \"(chunks: unknown[]) => unknown\";\n    case \"select\":\n    case \"string\":\n      return \"string\";\n  }\n}\n","import { existsSync, mkdirSync, readFileSync, unlinkSync } from \"fs\";\nimport { dirname, isAbsolute, join, resolve } from \"path\";\nimport { APITypeGenerator, type APIRouteInfo } from \"./type-generator\";\nimport {\n  createRouteTypeDeclarations,\n  generateRouteTypes,\n  type GenerateRouteTypesOptions,\n} from \"./routing/generate-route-types\";\nimport { createEnvTypeDeclarations, generateEnvTypes } from \"./env-types\";\nimport { createFarmImageTypeDeclarations, generateFarmImageTypes } from \"./image-types\";\nimport { createContentTypeDeclarations } from \"./content-types\";\nimport { generateFarmI18nTypes, renderFarmI18nTypes } from \"./i18n/type-generator\";\nimport { readFarmI18nCatalogs } from \"./i18n/catalog\";\nimport type { ResolvedFarmI18nConfig } from \"./i18n/types\";\nimport { getFarmAppDirectories, getFarmSourceRoots, type ResolvedFarmLayer } from \"./layers\";\nimport { writeFileIfChanged } from \"./write-file-if-changed\";\nimport type { FarmPlugin } from \"./plugin\";\nimport { resolvePluginRoutes } from \"./api/route\";\n\nexport { generateFarmI18nTypes };\n\nexport interface GenerateFarmTypeArtifactsOptions {\n  root: string;\n  srcDir?: string;\n  configPath?: string;\n  plugins?: readonly FarmPlugin[];\n  extraRoutes?: string[];\n  layers?: readonly ResolvedFarmLayer[];\n  suppressLintOnLink?: boolean;\n  componentExtensions?: readonly string[];\n  routeTypesOutFile?: string;\n  apiTypesOutFile?: string;\n  envTypesOutFile?: string;\n  imageTypesOutFile?: string;\n  i18nTypesOutFile?: string;\n  i18nConfig?: ResolvedFarmI18nConfig;\n  routes?: boolean;\n  api?: boolean;\n  env?: boolean;\n  images?: boolean;\n  i18n?: boolean;\n  /** Compare generated content with disk without writing files. */\n  check?: boolean;\n}\n\nexport interface GenerateFarmTypeArtifactsResult {\n  typesPath?: string;\n  routeTypesPath?: string;\n  apiTypesPath?: string;\n  envTypesPath?: string;\n  imageTypesPath?: string;\n  i18nTypesPath?: string;\n  apiRoutes: APIRouteInfo[];\n  /** Generated files whose checked-in content is missing or stale. */\n  stalePaths: string[];\n}\n\nexport async function generateFarmTypeArtifacts(\n  options: GenerateFarmTypeArtifactsOptions,\n): Promise<GenerateFarmTypeArtifactsResult> {\n  const root = resolve(options.root);\n  const srcDir = options.srcDir || \"src\";\n  const shouldGenerateRoutes = options.routes !== false;\n  const shouldGenerateApi = options.api !== false;\n  const shouldGenerateEnv = options.env !== false;\n  const shouldGenerateImages = options.images !== false;\n  const shouldGenerateI18n = options.i18n !== false && options.i18nConfig?.enabled;\n  const sourceRoots = getFarmSourceRoots({ root, srcDir, layers: options.layers });\n  const appDirs = getFarmAppDirectories({ root, srcDir, layers: options.layers });\n\n  const result: GenerateFarmTypeArtifactsResult = {\n    apiRoutes: [],\n    stalePaths: [],\n  };\n  const unifiedTypesPath = join(root, srcDir, \"farm.d.ts\");\n  const shouldRefreshUnifiedTypes =\n    (shouldGenerateRoutes && !options.routeTypesOutFile) ||\n    (shouldGenerateEnv && !options.envTypesOutFile) ||\n    (shouldGenerateI18n && !options.i18nTypesOutFile);\n  const unifiedSections: string[] = [];\n\n  if (shouldRefreshUnifiedTypes && !options.routeTypesOutFile) {\n    const routeOptions: GenerateRouteTypesOptions = {\n      root,\n      srcDir,\n      extraRoutes: options.extraRoutes || [],\n      suppressLintOnLink: options.suppressLintOnLink,\n      componentExtensions: options.componentExtensions,\n      sourceRoots,\n    };\n    unifiedSections.push(await createRouteTypeDeclarations(routeOptions, unifiedTypesPath));\n    result.routeTypesPath = unifiedTypesPath;\n  } else if (shouldGenerateRoutes) {\n    const routeOptions = {\n      root,\n      srcDir,\n      outFile: options.routeTypesOutFile,\n      extraRoutes: options.extraRoutes || [],\n      suppressLintOnLink: options.suppressLintOnLink,\n      componentExtensions: options.componentExtensions,\n      sourceRoots,\n    } satisfies GenerateRouteTypesOptions;\n    if (options.check) {\n      const routeTypesPath = resolveGeneratedPath(root, srcDir, options.routeTypesOutFile!);\n      const content = await createRouteTypeDeclarations(routeOptions, routeTypesPath);\n      checkGeneratedFile(routeTypesPath, content, result.stalePaths);\n      result.routeTypesPath = routeTypesPath;\n    } else {\n      result.routeTypesPath = await generateRouteTypes(routeOptions);\n    }\n  }\n\n  if (shouldGenerateApi) {\n    const generator = new APITypeGenerator(appDirs);\n    const apiRoutes = generator.scanAPIRoutes();\n    const apiTypesPath = options.apiTypesOutFile\n      ? resolve(root, options.apiTypesOutFile)\n      : join(root, srcDir, \"lib\", \"api.generated.ts\");\n    const pluginRoutes = resolvePluginRoutes(options.plugins);\n    const configFiles = [\n      ...(options.layers ?? [])\n        .map((layer) => layer.configFile)\n        .filter((file): file is string => Boolean(file)),\n      options.configPath\n        ? resolve(root, options.configPath)\n        : [\n            \"farm.config.ts\",\n            \"farm.config.mts\",\n            \"farm.config.js\",\n            \"farm.config.mjs\",\n            \"farm.config.cts\",\n            \"farm.config.cjs\",\n            \"config.ts\",\n            \"config.js\",\n          ]\n            .map((name) => join(root, name))\n            .find((file) => existsSync(file)),\n    ].filter((file): file is string => Boolean(file));\n    if (pluginRoutes.length && !configFiles.length) {\n      throw new Error(\n        \"Cannot generate plugin API types without a Farm config file. Pass configPath.\",\n      );\n    }\n    const content = generator.generateAPIRouter(apiRoutes, {\n      outFile: apiTypesPath,\n      pluginConfigs: pluginRoutes.length ? [...new Set(configFiles)] : [],\n      pluginRoutes,\n    });\n\n    writeOrCheckGeneratedFile(apiTypesPath, content, options.check, result.stalePaths);\n\n    result.apiTypesPath = apiTypesPath;\n    result.apiRoutes = apiRoutes;\n  }\n\n  if (shouldRefreshUnifiedTypes && !options.envTypesOutFile) {\n    unifiedSections.push(\n      createEnvTypeDeclarations(\n        {\n          root,\n          srcDir,\n          configPath: options.configPath,\n          layerConfigPaths: (options.layers ?? [])\n            .map((layer) => layer.configFile)\n            .filter((configFile): configFile is string => Boolean(configFile)),\n        },\n        unifiedTypesPath,\n      ),\n    );\n    result.envTypesPath = unifiedTypesPath;\n  } else if (shouldGenerateEnv) {\n    const envOptions = {\n      root,\n      srcDir,\n      outFile: options.envTypesOutFile,\n      configPath: options.configPath,\n      layerConfigPaths: (options.layers ?? [])\n        .map((layer) => layer.configFile)\n        .filter((configFile): configFile is string => Boolean(configFile)),\n    };\n    if (options.check) {\n      const envTypesPath = resolveGeneratedPath(root, srcDir, options.envTypesOutFile!);\n      checkGeneratedFile(\n        envTypesPath,\n        createEnvTypeDeclarations(envOptions, envTypesPath),\n        result.stalePaths,\n      );\n      result.envTypesPath = envTypesPath;\n    } else {\n      result.envTypesPath = await generateEnvTypes(envOptions);\n    }\n  }\n\n  // Static image modules are declared by @farm.js/core itself. Keep the\n  // explicit output option for callers that need a standalone declaration.\n  if (shouldGenerateImages && options.imageTypesOutFile) {\n    const imageTypesPath = resolveGeneratedPath(root, srcDir, options.imageTypesOutFile, false);\n    if (options.check) {\n      checkGeneratedFile(imageTypesPath, createFarmImageTypeDeclarations(), result.stalePaths);\n      result.imageTypesPath = imageTypesPath;\n    } else {\n      result.imageTypesPath = generateFarmImageTypes({\n        root,\n        srcDir,\n        outFile: options.imageTypesOutFile,\n      });\n    }\n  }\n\n  if (shouldRefreshUnifiedTypes && options.i18nConfig?.enabled && !options.i18nTypesOutFile) {\n    const { signatures } = await readFarmI18nCatalogs(options.i18nConfig);\n    unifiedSections.push(renderFarmI18nTypes(options.i18nConfig.locales, signatures));\n    result.i18nTypesPath = unifiedTypesPath;\n  } else if (shouldGenerateI18n && options.i18nConfig) {\n    if (options.check) {\n      const i18nTypesPath = resolveGeneratedPath(root, srcDir, options.i18nTypesOutFile!, false);\n      const { signatures } = await readFarmI18nCatalogs(options.i18nConfig);\n      checkGeneratedFile(\n        i18nTypesPath,\n        renderFarmI18nTypes(options.i18nConfig.locales, signatures),\n        result.stalePaths,\n      );\n      result.i18nTypesPath = i18nTypesPath;\n    } else {\n      result.i18nTypesPath = await generateFarmI18nTypes({\n        root,\n        srcDir,\n        config: options.i18nConfig,\n        outFile: options.i18nTypesOutFile,\n      });\n    }\n  }\n\n  if (shouldRefreshUnifiedTypes) {\n    unifiedSections.push(\n      createContentTypeDeclarations(\n        {\n          root,\n          configPath: options.configPath,\n          layerConfigPaths: (options.layers ?? [])\n            .map((layer) => layer.configFile)\n            .filter((configFile): configFile is string => Boolean(configFile)),\n        },\n        unifiedTypesPath,\n      ),\n    );\n  }\n\n  if (shouldRefreshUnifiedTypes) {\n    writeOrCheckGeneratedFile(\n      unifiedTypesPath,\n      `/**\n * Generated by Farm.js. Do not edit.\n * Contains project-specific route, environment, content, and internationalization types.\n */\n\nimport \"@farm.js/core/image\";\nimport \"@farm.js/core/css\";\n\n${unifiedSections.map(normalizeUnifiedTypeSection).join(\"\\n\\n\")}\n`,\n      options.check,\n      result.stalePaths,\n    );\n    result.typesPath = unifiedTypesPath;\n    if (options.check) {\n      collectLegacyTypeArtifacts(root, srcDir, result.stalePaths);\n    } else {\n      removeLegacyTypeArtifacts(root, srcDir);\n    }\n  }\n\n  return result;\n}\n\nfunction normalizeUnifiedTypeSection(section: string): string {\n  // The unified artifact already imports Farm's asset types, so it is a module.\n  // Individual generators add this marker for standalone declaration files, but\n  // formatters remove the now-redundant export and make `farm generate --check`\n  // report a false stale-file failure.\n  return section.trimEnd().replace(/\\n+export \\{\\};$/, \"\");\n}\n\nfunction resolveGeneratedPath(\n  root: string,\n  srcDir: string,\n  outFile: string,\n  relativeToSrc = true,\n): string {\n  if (isAbsolute(outFile)) return resolve(outFile);\n  return resolve(root, relativeToSrc ? join(srcDir, outFile) : outFile);\n}\n\nfunction writeOrCheckGeneratedFile(\n  filePath: string,\n  content: string,\n  check: boolean | undefined,\n  stalePaths: string[],\n): void {\n  if (check) {\n    checkGeneratedFile(filePath, content, stalePaths);\n    return;\n  }\n\n  mkdirSync(dirname(filePath), { recursive: true });\n  writeFileIfChanged(filePath, content);\n}\n\nfunction checkGeneratedFile(filePath: string, content: string, stalePaths: string[]): void {\n  if (!existsSync(filePath) || readFileSync(filePath, \"utf8\") !== content) {\n    stalePaths.push(filePath);\n  }\n}\n\nconst LEGACY_TYPE_ARTIFACTS = [\n  [\"farm-routes.d.ts\", \"Auto-generated route types\"],\n  [\"farm-env.d.ts\", \"Auto-generated env types\"],\n  [\"farm-images.d.ts\", \"Generated by Farm.js\"],\n  [\"farm-i18n.d.ts\", \"Generated by Farm.js\"],\n] as const;\n\nfunction removeLegacyTypeArtifacts(root: string, srcDir: string): void {\n  for (const [fileName, marker] of LEGACY_TYPE_ARTIFACTS) {\n    const filePath = join(root, srcDir, fileName);\n    if (!existsSync(filePath)) continue;\n    const source = readFileSync(filePath, \"utf8\");\n    if (source.includes(marker)) {\n      unlinkSync(filePath);\n    }\n  }\n}\n\nfunction collectLegacyTypeArtifacts(root: string, srcDir: string, stalePaths: string[]): void {\n  for (const [fileName, marker] of LEGACY_TYPE_ARTIFACTS) {\n    const filePath = join(root, srcDir, fileName);\n    if (!existsSync(filePath)) continue;\n    if (readFileSync(filePath, \"utf8\").includes(marker)) stalePaths.push(filePath);\n  }\n}\n","import type { Plugin } from \"vite\";\nimport type { FarmEnvironment } from \"./environment\";\n\ntype EnvironmentFunctionKind = \"createServerOnlyFn\" | \"createClientOnlyFn\" | \"createIsomorphicFn\";\n\ninterface AstNode {\n  type: string;\n  start: number;\n  end: number;\n  [key: string]: unknown;\n}\n\ninterface EnvironmentCall {\n  node: AstNode;\n  kind: EnvironmentFunctionKind;\n}\n\ninterface Replacement {\n  start: number;\n  end: number;\n  code: string;\n}\n\nexport interface TransformEnvironmentFunctionsOptions {\n  code: string;\n  id: string;\n  environment: FarmEnvironment;\n  parse: (code: string) => AstNode;\n}\n\nexport interface TransformEnvironmentFunctionsResult {\n  code: string;\n}\n\nconst ENVIRONMENT_IMPORTS = new Set([\n  \"@farm.js/core\",\n  \"@farm.js/core/environment\",\n  \"@farm.js/core/server\",\n]);\nconst ENVIRONMENT_FUNCTIONS = new Set<EnvironmentFunctionKind>([\n  \"createServerOnlyFn\",\n  \"createClientOnlyFn\",\n  \"createIsomorphicFn\",\n]);\nconst MODULE_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\n\nexport function transformEnvironmentFunctions(\n  options: TransformEnvironmentFunctionsOptions,\n): TransformEnvironmentFunctionsResult | null {\n  if (!isTransformableModule(options.id) || !containsEnvironmentFunction(options.code)) {\n    return null;\n  }\n\n  let output = options.code;\n  let transformed = false;\n\n  for (let pass = 0; pass < 20; pass++) {\n    const ast = options.parse(output);\n    const bindings = findEnvironmentFunctionBindings(ast);\n    if (bindings.named.size === 0 && bindings.namespaces.size === 0) break;\n\n    const calls = findEnvironmentCalls(ast, bindings);\n    if (calls.length === 0) break;\n\n    const innermostCalls = calls.filter(\n      (call) =>\n        !calls.some(\n          (candidate) =>\n            candidate !== call &&\n            candidate.node.start > call.node.start &&\n            candidate.node.end < call.node.end,\n        ),\n    );\n    const replacements = innermostCalls.map((call) =>\n      createReplacement(output, options.id, options.environment, call),\n    );\n\n    output = applyReplacements(output, replacements);\n    transformed = true;\n  }\n\n  if (!transformed) return null;\n\n  const remainingAst = options.parse(output);\n  const remainingBindings = findEnvironmentFunctionBindings(remainingAst);\n  if (findEnvironmentCalls(remainingAst, remainingBindings).length > 0) {\n    throw transformError(options.id, \"environment functions are nested too deeply\");\n  }\n\n  return { code: output };\n}\n\nexport function farmEnvironmentFunctionsPlugin(): Plugin {\n  return {\n    name: \"farm:environment-functions\",\n    enforce: \"post\",\n\n    transform(code, id, transformOptions) {\n      const result = transformEnvironmentFunctions({\n        code,\n        id,\n        environment: resolveBuildEnvironment(\n          this as unknown as { environment?: { name?: string } },\n          transformOptions?.ssr,\n        ),\n        parse: (source) => this.parse(source) as unknown as AstNode,\n      });\n\n      return result ? { code: result.code, map: null } : null;\n    },\n  };\n}\n\nfunction resolveBuildEnvironment(\n  context: { environment?: { name?: string } },\n  ssr: boolean | undefined,\n): FarmEnvironment {\n  if (context.environment?.name === \"client\") return \"client\";\n  if (context.environment?.name === \"rsc\" || context.environment?.name === \"ssr\") {\n    return \"server\";\n  }\n  return ssr ? \"server\" : \"client\";\n}\n\nfunction findEnvironmentFunctionBindings(ast: AstNode) {\n  const named = new Map<string, EnvironmentFunctionKind>();\n  const namespaces = new Set<string>();\n  const body = Array.isArray(ast.body) ? ast.body : [];\n\n  for (const statement of body) {\n    if (!isAstNode(statement) || statement.type !== \"ImportDeclaration\") continue;\n    const source = isAstNode(statement.source) ? statement.source.value : undefined;\n    if (typeof source !== \"string\" || !ENVIRONMENT_IMPORTS.has(source)) continue;\n\n    const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers : [];\n    for (const specifier of specifiers) {\n      if (!isAstNode(specifier) || !isAstNode(specifier.local)) continue;\n      const localName = specifier.local.name;\n      if (typeof localName !== \"string\") continue;\n\n      if (specifier.type === \"ImportNamespaceSpecifier\") {\n        namespaces.add(localName);\n        continue;\n      }\n\n      if (specifier.type !== \"ImportSpecifier\" || !isAstNode(specifier.imported)) continue;\n      const importedName = specifier.imported.name ?? specifier.imported.value;\n      if (isEnvironmentFunctionKind(importedName)) {\n        named.set(localName, importedName);\n      }\n    }\n  }\n\n  return { named, namespaces };\n}\n\nfunction findEnvironmentCalls(\n  ast: AstNode,\n  bindings: ReturnType<typeof findEnvironmentFunctionBindings>,\n): EnvironmentCall[] {\n  const calls: EnvironmentCall[] = [];\n\n  walkAst(ast, (node, ancestors) => {\n    if (node.type !== \"CallExpression\" || !isAstNode(node.callee)) return;\n\n    if (node.callee.type === \"Identifier\" && typeof node.callee.name === \"string\") {\n      const kind = bindings.named.get(node.callee.name);\n      if (kind && !isNameShadowed(node.callee.name, ancestors)) calls.push({ node, kind });\n      return;\n    }\n\n    if (\n      node.callee.type !== \"MemberExpression\" ||\n      node.callee.computed === true ||\n      !isAstNode(node.callee.object) ||\n      !isAstNode(node.callee.property) ||\n      node.callee.object.type !== \"Identifier\" ||\n      node.callee.property.type !== \"Identifier\" ||\n      typeof node.callee.object.name !== \"string\" ||\n      typeof node.callee.property.name !== \"string\" ||\n      !bindings.namespaces.has(node.callee.object.name) ||\n      isNameShadowed(node.callee.object.name, ancestors) ||\n      !isEnvironmentFunctionKind(node.callee.property.name)\n    ) {\n      return;\n    }\n\n    calls.push({ node, kind: node.callee.property.name });\n  });\n\n  return calls;\n}\n\nfunction createReplacement(\n  code: string,\n  id: string,\n  environment: FarmEnvironment,\n  call: EnvironmentCall,\n): Replacement {\n  const args = Array.isArray(call.node.arguments) ? call.node.arguments : [];\n  if (args.length !== 1 || !isAstNode(args[0]) || args[0].type === \"SpreadElement\") {\n    throw transformError(id, `${call.kind}() requires exactly one static argument`);\n  }\n\n  let replacement: string;\n  if (call.kind === \"createIsomorphicFn\") {\n    replacement = selectIsomorphicImplementation(code, id, environment, args[0]);\n  } else {\n    const expected = call.kind === \"createServerOnlyFn\" ? \"server\" : \"client\";\n    replacement =\n      environment === expected\n        ? readNode(code, args[0])\n        : `(0, ${readNode(code, call.node.callee as AstNode)})(undefined, ${JSON.stringify(environment)})`;\n  }\n\n  return {\n    start: call.node.start,\n    end: call.node.end,\n    code: `(${replacement})`,\n  };\n}\n\nfunction selectIsomorphicImplementation(\n  code: string,\n  id: string,\n  environment: FarmEnvironment,\n  optionsNode: AstNode,\n): string {\n  if (optionsNode.type !== \"ObjectExpression\") {\n    throw transformError(id, \"createIsomorphicFn() requires an inline options object\");\n  }\n\n  const properties = Array.isArray(optionsNode.properties) ? optionsNode.properties : [];\n  if (properties.some((property) => isAstNode(property) && property.type === \"SpreadElement\")) {\n    throw transformError(id, \"createIsomorphicFn() does not support spread properties\");\n  }\n\n  let selectedProperty: AstNode | undefined;\n  for (const property of properties) {\n    if (!isAstNode(property) || property.type !== \"Property\" || property.computed === true) {\n      continue;\n    }\n    const key = readPropertyName(property.key);\n    if (key === environment) selectedProperty = property;\n  }\n\n  if (!selectedProperty || !isAstNode(selectedProperty.value)) {\n    throw transformError(id, `createIsomorphicFn() requires a ${environment} implementation`);\n  }\n  if (selectedProperty.kind !== undefined && selectedProperty.kind !== \"init\") {\n    throw transformError(id, \"createIsomorphicFn() does not support getters or setters\");\n  }\n\n  return selectedProperty.method === true\n    ? renderObjectMethod(code, id, selectedProperty.value)\n    : readNode(code, selectedProperty.value);\n}\n\nfunction renderObjectMethod(code: string, id: string, functionNode: AstNode): string {\n  if (!isAstNode(functionNode.body) || !Array.isArray(functionNode.params)) {\n    throw transformError(id, \"createIsomorphicFn() received an unsupported method\");\n  }\n\n  const params = functionNode.params.map((param) => {\n    if (!isAstNode(param)) {\n      throw transformError(id, \"createIsomorphicFn() received an unsupported parameter\");\n    }\n    return readNode(code, param);\n  });\n  const asyncPrefix = functionNode.async === true ? \"async \" : \"\";\n  const generatorMarker = functionNode.generator === true ? \"*\" : \"\";\n  return `${asyncPrefix}function${generatorMarker}(${params.join(\", \")}) ${readNode(code, functionNode.body)}`;\n}\n\nfunction applyReplacements(code: string, replacements: Replacement[]): string {\n  let output = code;\n  for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n    output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n  }\n  return output;\n}\n\nfunction walkAst(\n  node: AstNode,\n  visit: (node: AstNode, ancestors: readonly AstNode[]) => void,\n  ancestors: readonly AstNode[] = [],\n) {\n  visit(node, ancestors);\n  const childAncestors = [...ancestors, node];\n\n  for (const [key, value] of Object.entries(node)) {\n    if (key === \"start\" || key === \"end\" || key === \"loc\" || key === \"range\") continue;\n    if (isAstNode(value)) {\n      walkAst(value, visit, childAncestors);\n    } else if (Array.isArray(value)) {\n      for (const item of value) {\n        if (isAstNode(item)) walkAst(item, visit, childAncestors);\n      }\n    }\n  }\n}\n\nfunction isNameShadowed(name: string, ancestors: readonly AstNode[]): boolean {\n  for (const [index, ancestor] of ancestors.entries()) {\n    if (isFunctionNode(ancestor)) {\n      const params = Array.isArray(ancestor.params) ? ancestor.params : [];\n      if (params.some((param) => patternContainsName(param, name))) return true;\n      if (patternContainsName(ancestor.id, name)) return true;\n      if (\n        isAstNode(ancestor.body) &&\n        ancestors.slice(index + 1).includes(ancestor.body) &&\n        functionBodyDeclaresVarName(ancestor.body, name)\n      ) {\n        return true;\n      }\n    }\n\n    if (ancestor.type === \"CatchClause\" && patternContainsName(ancestor.param, name)) {\n      return true;\n    }\n\n    if (\n      (ancestor.type === \"BlockStatement\" || ancestor.type === \"StaticBlock\") &&\n      blockDeclaresName(ancestor, name)\n    ) {\n      return true;\n    }\n\n    if (loopDeclaresName(ancestor, name)) return true;\n\n    if (\n      ancestor.type === \"SwitchStatement\" &&\n      ancestors.slice(index + 1).some((candidate) => candidate.type === \"SwitchCase\") &&\n      switchDeclaresName(ancestor, name)\n    ) {\n      return true;\n    }\n\n    if (\n      ancestor.type === \"ClassExpression\" &&\n      patternContainsName(ancestor.id, name) &&\n      ancestors.slice(index + 1).some((candidate) => candidate.type === \"ClassBody\")\n    ) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction functionBodyDeclaresVarName(body: AstNode, name: string): boolean {\n  if (body.type === \"VariableDeclaration\" && body.kind === \"var\") {\n    const declarations = Array.isArray(body.declarations) ? body.declarations : [];\n    if (\n      declarations.some(\n        (declaration) => isAstNode(declaration) && patternContainsName(declaration.id, name),\n      )\n    ) {\n      return true;\n    }\n  }\n\n  for (const [key, value] of Object.entries(body)) {\n    if (key === \"start\" || key === \"end\" || key === \"loc\" || key === \"range\") continue;\n    if (isAstNode(value)) {\n      if (isNestedVarScope(value)) continue;\n      if (functionBodyDeclaresVarName(value, name)) return true;\n    } else if (Array.isArray(value)) {\n      for (const item of value) {\n        if (!isAstNode(item) || isNestedVarScope(item)) continue;\n        if (functionBodyDeclaresVarName(item, name)) return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction isNestedVarScope(node: AstNode): boolean {\n  return (\n    isFunctionNode(node) || node.type === \"ClassDeclaration\" || node.type === \"ClassExpression\"\n  );\n}\n\nfunction loopDeclaresName(node: AstNode, name: string): boolean {\n  const declaration =\n    node.type === \"ForStatement\"\n      ? node.init\n      : node.type === \"ForInStatement\" || node.type === \"ForOfStatement\"\n        ? node.left\n        : undefined;\n  if (!isAstNode(declaration) || declaration.type !== \"VariableDeclaration\") return false;\n\n  const declarations = Array.isArray(declaration.declarations) ? declaration.declarations : [];\n  return declarations.some((item) => isAstNode(item) && patternContainsName(item.id, name));\n}\n\nfunction switchDeclaresName(node: AstNode, name: string): boolean {\n  const cases = Array.isArray(node.cases) ? node.cases : [];\n  return cases.some((switchCase) => {\n    if (!isAstNode(switchCase) || !Array.isArray(switchCase.consequent)) return false;\n    return switchCase.consequent.some((statement) => {\n      if (!isAstNode(statement)) return false;\n      if (\n        (statement.type === \"FunctionDeclaration\" || statement.type === \"ClassDeclaration\") &&\n        patternContainsName(statement.id, name)\n      ) {\n        return true;\n      }\n      if (statement.type !== \"VariableDeclaration\" || statement.kind === \"var\") return false;\n      const declarations = Array.isArray(statement.declarations) ? statement.declarations : [];\n      return declarations.some(\n        (declaration) => isAstNode(declaration) && patternContainsName(declaration.id, name),\n      );\n    });\n  });\n}\n\nfunction blockDeclaresName(block: AstNode, name: string): boolean {\n  const statements = Array.isArray(block.body) ? block.body : [];\n  for (const statement of statements) {\n    if (!isAstNode(statement)) continue;\n    if (\n      (statement.type === \"FunctionDeclaration\" || statement.type === \"ClassDeclaration\") &&\n      patternContainsName(statement.id, name)\n    ) {\n      return true;\n    }\n    if (statement.type !== \"VariableDeclaration\" || !Array.isArray(statement.declarations)) {\n      continue;\n    }\n    if (\n      statement.declarations.some(\n        (declaration) => isAstNode(declaration) && patternContainsName(declaration.id, name),\n      )\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction patternContainsName(value: unknown, name: string): boolean {\n  if (!isAstNode(value)) return false;\n  if (value.type === \"Identifier\") return value.name === name;\n\n  if (value.type === \"RestElement\") return patternContainsName(value.argument, name);\n  if (value.type === \"AssignmentPattern\") return patternContainsName(value.left, name);\n  if (value.type === \"Property\") return patternContainsName(value.value, name);\n\n  const elements = Array.isArray(value.elements)\n    ? value.elements\n    : Array.isArray(value.properties)\n      ? value.properties\n      : [];\n  return elements.some((element) => patternContainsName(element, name));\n}\n\nfunction isFunctionNode(node: AstNode): boolean {\n  return (\n    node.type === \"FunctionDeclaration\" ||\n    node.type === \"FunctionExpression\" ||\n    node.type === \"ArrowFunctionExpression\"\n  );\n}\n\nfunction readPropertyName(value: unknown): string | undefined {\n  if (!isAstNode(value)) return undefined;\n  if (value.type === \"Identifier\" && typeof value.name === \"string\") return value.name;\n  if (value.type === \"Literal\" && typeof value.value === \"string\") return value.value;\n  return undefined;\n}\n\nfunction readNode(code: string, node: AstNode): string {\n  return code.slice(node.start, node.end);\n}\n\nfunction isAstNode(value: unknown): value is AstNode {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as AstNode).type === \"string\" &&\n    typeof (value as AstNode).start === \"number\" &&\n    typeof (value as AstNode).end === \"number\"\n  );\n}\n\nfunction isEnvironmentFunctionKind(value: unknown): value is EnvironmentFunctionKind {\n  return typeof value === \"string\" && ENVIRONMENT_FUNCTIONS.has(value as EnvironmentFunctionKind);\n}\n\nfunction containsEnvironmentFunction(code: string): boolean {\n  return Array.from(ENVIRONMENT_FUNCTIONS).some((name) => code.includes(name));\n}\n\nfunction isTransformableModule(id: string): boolean {\n  const cleanId = id.split(\"?\", 1)[0];\n  return MODULE_EXTENSION_RE.test(cleanId) && !/\\.d\\.[cm]?ts$/.test(cleanId);\n}\n\nfunction transformError(id: string, message: string): Error {\n  return new Error(`[Farm environment functions] ${message} in ${id.split(\"?\", 1)[0]}`);\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nexport type AfterCallback = () => void | Promise<void>;\n\n/** Runtime hooks supplied by a deployment adapter. */\nexport interface FarmAfterPlatformContext {\n  /** Keep a serverless invocation alive until the scheduled work settles. */\n  waitUntil?: (promise: Promise<void>) => void;\n  /** Register a callback that runs once the response has finished. */\n  onResponseFinished?: (callback: () => void) => void;\n}\n\ninterface AfterTask {\n  result: Promise<void>;\n  start: () => void;\n}\n\ninterface AfterRequestState {\n  completion: Promise<void>;\n  finishResponse: () => void;\n  phase: \"open\" | \"running\" | \"closed\";\n  reportError: (error: unknown) => void;\n  tasks: AfterTask[];\n}\n\nconst AFTER_STORAGE = Symbol.for(\"@farm.js/core/after-storage\");\n\nfunction getAfterStorage(): AsyncLocalStorage<AfterRequestState> {\n  const runtime = globalThis as typeof globalThis & Record<PropertyKey, unknown>;\n  const existing = runtime[AFTER_STORAGE];\n  if (existing instanceof AsyncLocalStorage) {\n    return existing as AsyncLocalStorage<AfterRequestState>;\n  }\n\n  const storage = new AsyncLocalStorage<AfterRequestState>();\n  runtime[AFTER_STORAGE] = storage;\n  return storage;\n}\n\nconst afterStorage = getAfterStorage();\n\nfunction defaultAfterErrorReporter(error: unknown): void {\n  console.error(\"[Farm.js] after() callback failed:\", error);\n}\n\nfunction reportAfterError(state: AfterRequestState, error: unknown): void {\n  try {\n    state.reportError(error);\n  } catch {\n    // Error reporting must never interrupt the remaining post-response work.\n  }\n}\n\nfunction createAfterRequestState(\n  reportError: (error: unknown) => void = defaultAfterErrorReporter,\n): AfterRequestState {\n  let resolveResponseFinished!: () => void;\n  let responseFinished = false;\n  const responseFinishedPromise = new Promise<void>((resolve) => {\n    resolveResponseFinished = resolve;\n  });\n\n  const state: AfterRequestState = {\n    completion: Promise.resolve(),\n    finishResponse: () => {\n      if (responseFinished) return;\n      responseFinished = true;\n      resolveResponseFinished();\n    },\n    phase: \"open\",\n    reportError,\n    tasks: [],\n  };\n\n  state.completion = responseFinishedPromise.then(() =>\n    afterStorage.run(state, async () => {\n      state.phase = \"running\";\n\n      for (let index = 0; index < state.tasks.length; index++) {\n        const task = state.tasks[index];\n        task.start();\n        try {\n          await task.result;\n        } catch (error) {\n          reportAfterError(state, error);\n        }\n      }\n\n      state.phase = \"closed\";\n    }),\n  );\n\n  return state;\n}\n\nfunction registerPlatformLifetime(\n  state: AfterRequestState,\n  context: FarmAfterPlatformContext | undefined,\n): void {\n  if (!context?.waitUntil) return;\n\n  try {\n    context.waitUntil(state.completion);\n  } catch (error) {\n    reportAfterError(state, error);\n  }\n}\n\nfunction registerResponseFinishedHook(\n  state: AfterRequestState,\n  context: FarmAfterPlatformContext | undefined,\n): boolean {\n  if (!context?.onResponseFinished) return false;\n\n  try {\n    context.onResponseFinished(state.finishResponse);\n    return true;\n  } catch (error) {\n    reportAfterError(state, error);\n    return false;\n  }\n}\n\nfunction finishSoon(state: AfterRequestState): void {\n  setTimeout(state.finishResponse, 0);\n}\n\nfunction wrapResponseBody(\n  response: Response,\n  request: Request,\n  state: AfterRequestState,\n): Response {\n  if (\n    request.method === \"HEAD\" ||\n    response.status < 200 ||\n    response.status > 599 ||\n    !response.body ||\n    response.bodyUsed ||\n    response.body.locked\n  ) {\n    finishSoon(state);\n    return response;\n  }\n\n  const reader = response.body.getReader();\n  let released = false;\n  const releaseReader = () => {\n    if (released) return;\n    released = true;\n    reader.releaseLock();\n  };\n\n  const body = new ReadableStream<Uint8Array>({\n    async pull(controller) {\n      try {\n        const chunk = await reader.read();\n        if (chunk.done) {\n          releaseReader();\n          controller.close();\n          finishSoon(state);\n          return;\n        }\n        controller.enqueue(chunk.value);\n      } catch (error) {\n        releaseReader();\n        controller.error(error);\n        finishSoon(state);\n      }\n    },\n    cancel(reason) {\n      try {\n        // Preserve the caller's cleanup promise, but response completion must\n        // not depend on whether producer-owned cancellation ever settles.\n        return reader.cancel(reason);\n      } finally {\n        releaseReader();\n        finishSoon(state);\n      }\n    },\n  });\n\n  return new Response(body, {\n    headers: response.headers,\n    status: response.status,\n    statusText: response.statusText,\n  });\n}\n\n/**\n * Schedule non-blocking work for after the current response finishes.\n *\n * Callbacks run in registration order. A callback failure is reported without\n * changing the response or preventing later callbacks from running.\n */\nexport function after(callback: AfterCallback): void {\n  if (typeof callback !== \"function\") {\n    throw new TypeError(\"after() expects a callback function.\");\n  }\n\n  const state = afterStorage.getStore();\n  if (!state) {\n    throw new Error(\"after() can only be used while Farm is handling a server request.\");\n  }\n  if (state.phase === \"closed\") {\n    throw new Error(\"after() cannot schedule work after the request lifecycle has completed.\");\n  }\n\n  let start!: () => void;\n  const ready = new Promise<void>((resolve) => {\n    start = resolve;\n  });\n\n  // Registering the continuation here preserves every request AsyncLocalStorage\n  // context that is active at the after() call site.\n  const result = ready.then(callback);\n  state.tasks.push({ result, start });\n}\n\n/** @internal Run a Web Request handler inside Farm's post-response lifecycle. */\nexport async function _runWithAfterRequest(\n  request: Request,\n  handler: () => Response | Promise<Response>,\n  context?: FarmAfterPlatformContext,\n): Promise<Response> {\n  if (afterStorage.getStore()) {\n    return await handler();\n  }\n\n  const state = createAfterRequestState();\n  registerPlatformLifetime(state, context);\n  const hasResponseHook = registerResponseFinishedHook(state, context);\n\n  try {\n    const response = await afterStorage.run(state, handler);\n    return hasResponseHook ? response : wrapResponseBody(response, request, state);\n  } catch (error) {\n    // The handler threw, so there is no successful response for a\n    // response-finished hook to fire on. Run the after-lifecycle now regardless\n    // of the hook; otherwise a spec-compliant adapter (whose hook only fires on\n    // a real response) never runs the registered after() callbacks and\n    // waitUntil(state.completion) hangs forever. finishResponse is idempotent,\n    // so a later hook firing (e.g. a Node error response's close) is a no-op.\n    finishSoon(state);\n    throw error;\n  }\n}\n\n/** @internal Run a Node response handler inside Farm's post-response lifecycle. */\nexport async function _runWithAfterNodeResponse<T>(\n  response: ServerResponse,\n  handler: () => T | Promise<T>,\n  context?: Pick<FarmAfterPlatformContext, \"waitUntil\">,\n): Promise<T> {\n  if (afterStorage.getStore()) {\n    return await handler();\n  }\n\n  const state = createAfterRequestState();\n  let finished = false;\n  const finish = () => {\n    if (finished) return;\n    finished = true;\n    response.off(\"finish\", finish);\n    response.off(\"close\", finish);\n    state.finishResponse();\n  };\n\n  response.once(\"finish\", finish);\n  response.once(\"close\", finish);\n  if (response.writableEnded) finishSoon(state);\n  registerPlatformLifetime(state, context);\n\n  return await afterStorage.run(state, handler);\n}\n\n/** @internal Add Farm's post-response lifecycle to a Node middleware. */\nexport function _withAfterNodeMiddleware(\n  handler: (\n    request: IncomingMessage,\n    response: ServerResponse,\n    next: (error?: unknown) => void,\n  ) => void | Promise<void>,\n): (\n  request: IncomingMessage,\n  response: ServerResponse,\n  next: (error?: unknown) => void,\n) => Promise<void> {\n  return async (request, response, next) => {\n    await _runWithAfterNodeResponse(response, () => handler(request, response, next));\n  };\n}\n","/** Browser-safe bridge: neither handlers nor Node.js imports cross this boundary. */\nexport interface APIRequestRuntime {\n  basePath: string;\n  dispatch(request: Request): Promise<Response>;\n}\n\nconst API_RUNTIME_RESOLVER = Symbol.for(\"farm.apiRequestRuntimeResolver\");\ntype RuntimeGlobal = typeof globalThis & {\n  [API_RUNTIME_RESOLVER]?: () => APIRequestRuntime | undefined;\n};\n\nexport function setAPIRequestRuntimeResolver(resolver: () => APIRequestRuntime | undefined): void {\n  (globalThis as RuntimeGlobal)[API_RUNTIME_RESOLVER] = resolver;\n}\n\nexport function resolveAPIRequestRuntime(): APIRequestRuntime | undefined {\n  return (globalThis as RuntimeGlobal)[API_RUNTIME_RESOLVER]?.();\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { setAPIRequestRuntimeResolver, type APIRequestRuntime } from \"./server-client-bridge\";\n\nconst API_RUNTIME_STORAGE = Symbol.for(\"@farm.js/core/api-request-storage\");\nconst runtimeGlobal = globalThis as typeof globalThis & {\n  [API_RUNTIME_STORAGE]?: AsyncLocalStorage<APIRequestRuntime>;\n};\nconst storage = (runtimeGlobal[API_RUNTIME_STORAGE] ??= new AsyncLocalStorage<APIRequestRuntime>());\nsetAPIRequestRuntimeResolver(() => storage.getStore());\n\n/** Bind the owning app's live route dispatcher, never a process-wide route table. */\nexport function _runWithAPIRequestRuntime<T>(runtime: APIRequestRuntime, run: () => T): T {\n  return storage.run(runtime, run);\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\n\ninterface DottedPathRouteMatcher {\n  matchRoute(pathname: string): { route: unknown } | null | undefined;\n  matchMetadataRoute(pathname: string): object | null;\n  matchMetadataImage(pathname: string): object | null;\n}\n\n/**\n * Decide whether the dev server should hand a dotted request path to the\n * static pipeline instead of Farm's renderer. Dotted paths are usually asset\n * requests, but they are also how page routes with dotted segments and\n * application metadata routes (/manifest.webmanifest, /sitemap.xml,\n * /robots.txt, generated metadata images) are addressed, so the router is\n * only bypassed when nothing in the app matches the pathname or a real file\n * shadows it.\n */\nexport function shouldBypassFarmRouterForDottedPath(\n  pathname: string,\n  routeManager: DottedPathRouteMatcher | null | undefined,\n  baseDirs: Array<string | false | undefined>,\n): boolean {\n  if (!pathname.includes(\".\") || pathname.endsWith(\".html\")) return false;\n  const matchesAppRoute = Boolean(\n    routeManager?.matchRoute(pathname)?.route ||\n    routeManager?.matchMetadataRoute(pathname) ||\n    routeManager?.matchMetadataImage(pathname),\n  );\n  return !matchesAppRoute || devServableFileExists(pathname, baseDirs);\n}\n\n/**\n * Route segments may legitimately contain dots (e.g. /kinfish/farm.js), so a\n * dot alone cannot classify a dev request as a static asset. A dotted path is\n * only treated as an asset when it maps to a real file under one of the\n * servable base dirs (project root, public dir), matching the\n * filesystem-first behavior of production hosting.\n */\nexport function devServableFileExists(\n  pathname: string,\n  baseDirs: Array<string | false | undefined>,\n): boolean {\n  let decodedPathname: string;\n  try {\n    decodedPathname = decodeURIComponent(pathname);\n  } catch {\n    return false;\n  }\n  const relativePathname = decodedPathname.replace(/^\\/+/, \"\");\n  if (!relativePathname) return false;\n  for (const baseDir of baseDirs) {\n    if (typeof baseDir !== \"string\" || baseDir.length === 0) continue;\n    const resolvedBase = path.resolve(baseDir);\n    const candidate = path.resolve(resolvedBase, relativePathname);\n    if (!candidate.startsWith(resolvedBase + path.sep)) continue;\n    try {\n      if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {\n        return true;\n      }\n    } catch {\n      // Ignore filesystem errors and keep checking other base dirs.\n    }\n  }\n  return false;\n}\n","const SERVER_FN_FACTORIES = [\"createServerQuery\", \"createServerFn\"] as const;\n\nconst FARM_CORE_IMPORT_RE =\n  /import\\s*(?!type\\b)(?:[\\w$]+\\s*,\\s*)?\\{([^}]*)\\}\\s*from\\s*([\"'])@farm\\.js\\/core(?:\\/[\\w./-]+)?\\2/g;\n\nexport type ServerFnBoundaryViolation = {\n  factory: (typeof SERVER_FN_FACTORIES)[number];\n};\n\n/**\n * Detect a module that defines a Farm server function (createServerQuery /\n * createServerFn) while being compiled for the client environment. Without\n * the server-function transform (@farm.js/plugin/rsc with\n * experimental.serverActions enabled) there is no client stub: the server\n * handler and its dependency graph would be bundled into the browser and\n * executed there, surfacing as confusing Vite externalization errors for\n * Node built-ins (#408).\n */\nexport function findClientServerFnViolation(\n  code: string,\n  id: string,\n): ServerFnBoundaryViolation | null {\n  if (id.startsWith(\"\\0\") || id.startsWith(\"virtual:\") || id.includes(\"node_modules\")) return null;\n  // Markdown modules never execute import statements: matched text is\n  // documentation (fenced code examples), not code, before and after the\n  // markdown transform (fences compile to string content).\n  if (/\\.(md|mdx)(\\?|$)/.test(id)) return null;\n  if (!code.includes(\"@farm.js/core\")) return null;\n\n  for (const match of code.matchAll(FARM_CORE_IMPORT_RE)) {\n    const specifiers = match[1];\n    for (const factory of SERVER_FN_FACTORIES) {\n      if (!new RegExp(`(?:^|[\\\\s{,])${factory}(?:[\\\\s},]|$)`).test(specifiers)) continue;\n      // Only a call site makes the module a server-function definition; a\n      // type-only or re-exported symbol never executes a handler.\n      if (new RegExp(`(?<![\\\\w$.])${factory}\\\\s*(?:<[^>]*>)?\\\\s*\\\\(`).test(code)) {\n        return { factory };\n      }\n    }\n  }\n  return null;\n}\n\nexport function formatServerFnBoundaryError(\n  violation: ServerFnBoundaryViolation,\n  id: string,\n): string {\n  return [\n    `${violation.factory} handlers run only on the server, but ${id} is being bundled into the client.`,\n    `Importing a ${violation.factory} module from client code executes the server handler (and its Node-only imports) in the browser.`,\n    `Either enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,`,\n    `or keep the query on the server: call it from server components, or expose an API route and use createAPIClient from the client.`,\n  ].join(\"\\n\");\n}\n","/**\n * Diagnostics for server-only access in modules compiled for the client.\n *\n * A module entering the client graph runs in the browser. Module-scope reads\n * of non-public process.env values evaluate to undefined there and broke\n * layout hydration in #560, and node: builtin imports are silently stubbed\n * with empty objects by farm:browser-external-stub. Both deserve a clear\n * build-time warning naming the module instead of a runtime mystery (#1065).\n */\n\ntype EstreeNode = { type: string; [key: string]: unknown };\n\nconst FUNCTION_BODY_TYPES = new Set([\n  \"FunctionDeclaration\",\n  \"FunctionExpression\",\n  \"ArrowFunctionExpression\",\n]);\n\nexport function shouldInspectClientBoundary(id: string, code: string): boolean {\n  if (id.startsWith(\"\\0\") || id.startsWith(\"virtual:\") || id.includes(\"node_modules\")) return false;\n  return code.includes(\"process.env\") || code.includes(\"node:\");\n}\n\nexport interface ClientBoundaryFindings {\n  /** Non-public process.env keys read at module scope. */\n  envKeys: string[];\n  /**\n   * Declared-public keys read via process.env at module scope. The value is\n   * still undefined in the browser — only publicEnv is populated there — so\n   * these get their own warning pointing at the supported accessor.\n   */\n  publicEnvKeys: string[];\n  /** node: builtin specifiers imported into the module. */\n  builtinImports: string[];\n}\n\n/**\n * One walk over the module AST for both diagnostics.\n *\n * Reads and dynamic imports inside function bodies are skipped: they may be\n * server-gated at runtime — a lazy `await import(\"node:fs\")` behind a server\n * check is the recommended escape hatch — and flagging them would drown the\n * signal in noise. Static import/export-from declarations always execute at\n * module scope, so they are always flagged.\n */\nexport function analyzeClientBoundary(\n  program: EstreeNode,\n  publicKeys: ReadonlySet<string>,\n): ClientBoundaryFindings {\n  const envKeys = new Set<string>();\n  const publicEnvKeys = new Set<string>();\n  const builtinImports = new Set<string>();\n\n  const visit = (node: unknown, inFunction: boolean): void => {\n    if (!node || typeof node !== \"object\") return;\n    if (Array.isArray(node)) {\n      for (const entry of node) visit(entry, inFunction);\n      return;\n    }\n    const estree = node as EstreeNode;\n    if (typeof estree.type !== \"string\") return;\n\n    if (!inFunction) {\n      const builtin = readNodeBuiltinSource(estree);\n      if (builtin !== undefined) builtinImports.add(builtin);\n\n      const key = readProcessEnvKey(estree);\n      if (key !== undefined) {\n        if (key !== \"NODE_ENV\") {\n          (publicKeys.has(key) ? publicEnvKeys : envKeys).add(key);\n        }\n        return;\n      }\n    }\n\n    // Params and defaults evaluate at call time along with the body.\n    const nextInFunction = inFunction || FUNCTION_BODY_TYPES.has(estree.type);\n    for (const [childKey, value] of Object.entries(estree)) {\n      if (childKey === \"type\") continue;\n      visit(value, nextInFunction);\n    }\n  };\n\n  visit((program as { body?: unknown }).body, false);\n  return {\n    envKeys: [...envKeys],\n    publicEnvKeys: [...publicEnvKeys],\n    builtinImports: [...builtinImports],\n  };\n}\n\nfunction readNodeBuiltinSource(node: EstreeNode): string | undefined {\n  if (\n    node.type === \"ImportDeclaration\" ||\n    node.type === \"ExportNamedDeclaration\" ||\n    node.type === \"ExportAllDeclaration\" ||\n    node.type === \"ImportExpression\"\n  ) {\n    const value = (node.source as { value?: unknown } | null | undefined)?.value;\n    return typeof value === \"string\" && value.startsWith(\"node:\") ? value : undefined;\n  }\n  if (node.type === \"CallExpression\") {\n    const callee = node.callee as EstreeNode | undefined;\n    if (callee?.type === \"Identifier\" && (callee as { name?: string }).name === \"require\") {\n      const arg = (node.arguments as EstreeNode[] | undefined)?.[0];\n      const value = arg?.type === \"Literal\" ? (arg as { value?: unknown }).value : undefined;\n      return typeof value === \"string\" && value.startsWith(\"node:\") ? value : undefined;\n    }\n  }\n  return undefined;\n}\n\nfunction readProcessEnvKey(node: EstreeNode): string | undefined {\n  if (node.type !== \"MemberExpression\") return undefined;\n  const object = node.object as EstreeNode | undefined;\n  if (\n    !object ||\n    object.type !== \"MemberExpression\" ||\n    (object.object as EstreeNode | undefined)?.type !== \"Identifier\" ||\n    (object.object as { name?: string }).name !== \"process\" ||\n    (object.property as { name?: string })?.name !== \"env\"\n  ) {\n    return undefined;\n  }\n\n  const property = node.property as EstreeNode | undefined;\n  if (!property) return undefined;\n  if (!node.computed && property.type === \"Identifier\") {\n    return (property as { name?: string }).name;\n  }\n  if (node.computed && property.type === \"Literal\") {\n    const value = (property as { value?: unknown }).value;\n    return typeof value === \"string\" ? value : undefined;\n  }\n  return undefined;\n}\n\nexport function formatClientBoundaryWarning(id: string, findings: ClientBoundaryFindings): string {\n  const { envKeys, publicEnvKeys, builtinImports } = findings;\n  const lines = [`${id} is compiled for the client but uses server-only APIs:`];\n  if (envKeys.length > 0) {\n    lines.push(\n      `- module-scope read of process.env.${envKeys.join(\", process.env.\")} — undefined in the browser. Move the read behind a server boundary, or expose it through env.public in farm.config.ts.`,\n    );\n  }\n  if (publicEnvKeys.length > 0) {\n    lines.push(\n      `- module-scope read of process.env.${publicEnvKeys.join(\", process.env.\")} — process.env is not populated in the browser even for public keys. Read it through publicEnv from \"@farm.js/core/env\".`,\n    );\n  }\n  if (builtinImports.length > 0) {\n    lines.push(\n      `- import of ${builtinImports.join(\", \")} — stubbed with an empty object in the browser. Move the import into server-only code.`,\n    );\n  }\n  return lines.join(\"\\n\");\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { imageSize } from \"image-size\";\nimport type { Plugin } from \"vite\";\n\nconst FARM_IMAGE_ID_PREFIX = \"\\0farm:image:\";\nconst STATIC_IMAGE_RE = /\\.(?:avif|gif|jpe?g|png|webp)$/i;\nconst SCRIPT_IMPORTER_RE = /\\.(?:[cm]?[jt]sx?|mdx?)$/i;\n\nexport function farmImageImportsPlugin(): Plugin {\n  return {\n    name: \"farm-image-imports\",\n    enforce: \"pre\",\n\n    async resolveId(source, importer, options) {\n      if (\n        !importer ||\n        source.includes(\"?\") ||\n        !STATIC_IMAGE_RE.test(source) ||\n        !SCRIPT_IMPORTER_RE.test(importer.split(\"?\", 1)[0])\n      ) {\n        return null;\n      }\n\n      const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });\n      if (!resolved || resolved.external) return null;\n\n      return `${FARM_IMAGE_ID_PREFIX}${encodeURIComponent(resolved.id.split(\"?\", 1)[0])}`;\n    },\n\n    async load(id) {\n      if (!id.startsWith(FARM_IMAGE_ID_PREFIX)) return null;\n\n      const filePath = decodeURIComponent(id.slice(FARM_IMAGE_ID_PREFIX.length));\n      const assetRequest = `${filePath.replace(/\\\\/g, \"/\")}?url`;\n      return createStaticImageModule(filePath, `import src from ${JSON.stringify(assetRequest)};`);\n    },\n\n    async transform(code, id) {\n      const filePath = id.split(\"?\", 1)[0];\n      if (id.includes(\"?\") || !STATIC_IMAGE_RE.test(filePath)) return null;\n\n      const defaultExport = code.match(/^\\s*export\\s+default\\s+(.+?);?\\s*$/s)?.[1];\n      if (!defaultExport) return null;\n      return createStaticImageModule(filePath, `const src = ${defaultExport};`);\n    },\n  };\n}\n\nasync function createStaticImageModule(\n  filePath: string,\n  sourceDeclaration: string,\n): Promise<string> {\n  const bytes = await readFile(filePath);\n  const dimensions = imageSize(bytes);\n  if (!dimensions.width || !dimensions.height) {\n    throw new Error(`Could not determine image dimensions for ${filePath}`);\n  }\n\n  const blurDataURL = await createBlurDataURL(bytes);\n  return [\n    sourceDeclaration,\n    `const image = ${JSON.stringify({\n      width: dimensions.width,\n      height: dimensions.height,\n      ...(blurDataURL ? { blurDataURL } : {}),\n    })};`,\n    \"image.src = src;\",\n    \"export { src };\",\n    \"export const width = image.width;\",\n    \"export const height = image.height;\",\n    \"export const blurDataURL = image.blurDataURL;\",\n    \"export default image;\",\n  ].join(\"\\n\");\n}\n\nasync function createBlurDataURL(bytes: Buffer): Promise<string | undefined> {\n  try {\n    const { default: sharp } = await import(\"sharp\");\n    const placeholder = await sharp(bytes)\n      .rotate()\n      .resize({ width: 8, height: 8, fit: \"inside\", withoutEnlargement: true })\n      .webp({ quality: 35 })\n      .toBuffer();\n    return `data:image/webp;base64,${placeholder.toString(\"base64\")}`;\n  } catch {\n    return undefined;\n  }\n}\n\nexport function isFarmStaticImageFile(filePath: string): boolean {\n  return STATIC_IMAGE_RE.test(path.extname(filePath));\n}\n","export type FarmFontDisplay = \"auto\" | \"block\" | \"swap\" | \"fallback\" | \"optional\";\n\nexport interface FarmFontSource {\n  /** Local file path or remote URL, depending on the loader. */\n  path: string;\n  /** A fixed weight (`400`) or variable range (`100 900`). */\n  weight?: number | string;\n  /** Font style for this source. */\n  style?: string;\n  /** Optional CSS unicode-range descriptor. */\n  unicodeRange?: string;\n}\n\nexport interface FarmFontOptions {\n  /** CSS font-family name. */\n  family: string;\n  /** A fixed weight (`400`) or variable range (`100 900`). */\n  weight?: number | string;\n  /** Font style. @default \"normal\" */\n  style?: string;\n  /** Browser loading behavior. @default \"swap\" */\n  display?: FarmFontDisplay;\n  /** CSS custom property populated by `variable`, for example `--font-sans`. */\n  variable?: `--${string}`;\n  /** Fallback family names appended to the generated stack. */\n  fallback?: string[];\n  /** Emit font preload hints. @default true */\n  preload?: boolean;\n}\n\nexport interface LocalFontOptions extends FarmFontOptions {\n  /**\n   * A file relative to this module, a package font specifier, or explicit\n   * sources for a multi-weight family.\n   */\n  src: string | FarmFontSource[];\n}\n\nexport interface RemoteFontSource extends FarmFontSource {\n  /** Optional integrity value for this source. Overrides the family-level value. */\n  integrity?: string;\n}\n\nexport interface RemoteFontOptions extends FarmFontOptions {\n  /** HTTPS font URL, or explicit remote sources for a multi-weight family. */\n  src: string | RemoteFontSource[];\n  /** Download and fingerprint the font during the build, or retain its URL. */\n  strategy?: \"self-host\" | \"external\";\n  /** Optional Subresource Integrity value checked while self-hosting. */\n  integrity?: string;\n}\n\nexport interface FarmFont {\n  /** Generated class that applies the font family and fallback stack. */\n  className: string;\n  /** Generated class that defines the configured CSS custom property. */\n  variable: string;\n  /** Inline-style equivalent of the generated family. */\n  style: Readonly<{\n    fontFamily: string;\n    fontStyle?: string;\n    fontWeight?: number | string;\n  }>;\n  /** Compiled resources that should be preloaded when this font is selected. */\n  preloads: readonly Readonly<{\n    href: string;\n    type: string;\n  }>[];\n}\n\n/** Semantic font roles inherited by framework-owned surfaces such as Farm Docs. */\nexport interface FarmLayoutFonts {\n  /** Default text and prose font. */\n  body?: FarmFont;\n  /** Code, keyboard input, and other technical UI font. */\n  code?: FarmFont;\n}\n\nexport interface FarmLayoutFontModule {\n  fonts?: FarmLayoutFonts;\n}\n\n/**\n * Define the semantic fonts exported by a layout.\n *\n * Layouts are resolved from the root toward the requested route. A nearer\n * layout overrides only the roles it defines, so it can replace `body` while\n * continuing to inherit `code` from a parent layout.\n */\nexport function defineLayoutFonts<const T extends FarmLayoutFonts>(fonts: T): T {\n  return fonts;\n}\n\n/** Resolve semantic font roles from root layout to nearest layout. */\nexport function resolveFarmLayoutFonts(\n  layouts: readonly FarmLayoutFontModule[],\n): FarmLayoutFonts | undefined {\n  let resolved: FarmLayoutFonts | undefined;\n\n  for (const layout of layouts) {\n    if (!layout.fonts) continue;\n    resolved = { ...resolved, ...layout.fonts };\n  }\n\n  return resolved;\n}\n\nfunction fontCompilerError(loader: string): never {\n  throw new Error(\n    `[Farm fonts] ${loader}() must be called at module scope with static options and compiled by the Farm Vite plugin.`,\n  );\n}\n\n/**\n * Compile local font files into hashed application assets and generated CSS.\n * The call is removed at build time and adds no font-loader runtime code.\n */\nexport function localFont(_options: LocalFontOptions): FarmFont {\n  return fontCompilerError(\"localFont\");\n}\n\n/**\n * Compile a remote font into a self-hosted application asset by default.\n * Use `strategy: \"external\"` only when the browser should retain the remote URL.\n */\nexport function remoteFont(_options: RemoteFontOptions): FarmFont {\n  return fontCompilerError(\"remoteFont\");\n}\n","import type {\n  FarmImageFormat,\n  FarmImageLocalPattern,\n  FarmImageRemotePattern,\n  ResolvedFarmImageConfig,\n} from \"./image-config\";\nimport { matchesFarmIfNoneMatch } from \"./server-http\";\n\nexport interface FarmImageTransformInput {\n  source: Uint8Array;\n  sourceUrl: URL;\n  sourceType: string;\n  width: number;\n  quality: number;\n  accept: string;\n  formats: readonly FarmImageFormat[];\n  signal: AbortSignal;\n  /**\n   * Byte ceiling for any source the transformer fetches itself. Supplied by the\n   * image handler; transformers that re-fetch the origin (Cloudflare) must\n   * enforce it, since they bypass the handler's bounded read.\n   */\n  maximumResponseBody?: number;\n}\n\nexport interface FarmImageTransformResult {\n  body: Uint8Array;\n  contentType: string;\n}\n\nexport type FarmImageTransformer = (\n  input: FarmImageTransformInput,\n) => Promise<FarmImageTransformResult>;\n\nexport interface CreateFarmImageHandlerOptions {\n  fetch?: typeof globalThis.fetch;\n  /** Node-only fetcher that validates the DNS result used for remote connections. @internal */\n  fetchRemote?: typeof globalThis.fetch;\n  transform: FarmImageTransformer;\n  validateRemoteUrl?: (url: URL) => void | Promise<void>;\n  onError?: (error: unknown, request: Request) => void;\n  cacheEntries?: number;\n}\n\nexport type FarmImageHandler = (request: Request) => Promise<Response | null>;\n\ntype OptimizedImage = FarmImageTransformResult & {\n  etag: string;\n  cacheControl: string;\n  expiresAt: number;\n};\n\ntype FarmImageRequestErrorCode =\n  | \"BODY_TOO_LARGE\"\n  | \"DISALLOWED_SOURCE\"\n  | \"INVALID_METHOD\"\n  | \"INVALID_PARAMETER\"\n  | \"PRIVATE_SOURCE\"\n  | \"TOO_MANY_REDIRECTS\"\n  | \"UNSUPPORTED_IMAGE\";\n\nexport class FarmImageRequestError extends Error {\n  readonly code: FarmImageRequestErrorCode;\n  readonly status: number;\n\n  constructor(code: FarmImageRequestErrorCode, status: number, message: string) {\n    super(message);\n    this.name = \"FarmImageRequestError\";\n    this.code = code;\n    this.status = status;\n  }\n}\n\nexport function createFarmImageHandler(\n  config: ResolvedFarmImageConfig,\n  options: CreateFarmImageHandlerOptions,\n): FarmImageHandler {\n  const fetcher = options.fetch ?? globalThis.fetch;\n  const cache = new FarmImageMemoryCache(options.cacheEntries ?? 100);\n  // Identical concurrent misses share one fetch + transform. Without this a\n  // burst for an uncached image (a new page going live, a CDN cold start)\n  // fetches the origin and runs the codec once per request.\n  const inflight = new Map<string, InflightOptimization>();\n  const allowedWidths = new Set([...config.deviceSizes, ...config.imageSizes]);\n  const allowedQualities = new Set(config.qualities);\n\n  return async function handleFarmImage(request): Promise<Response | null> {\n    const requestUrl = new URL(request.url);\n    if (requestUrl.pathname !== config.path) return null;\n\n    try {\n      if (config.provider === \"none\") {\n        throw new FarmImageRequestError(\n          \"DISALLOWED_SOURCE\",\n          404,\n          \"The Farm image optimizer is disabled\",\n        );\n      }\n      if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n        throw new FarmImageRequestError(\n          \"INVALID_METHOD\",\n          405,\n          \"The Farm image optimizer only accepts GET and HEAD\",\n        );\n      }\n\n      const sourceUrl = await resolveImageSourceUrl(requestUrl, config, options.validateRemoteUrl);\n      const width = parseAllowedInteger(requestUrl.searchParams.get(\"w\"), allowedWidths, \"width\");\n      const quality = parseAllowedInteger(\n        requestUrl.searchParams.get(\"q\"),\n        allowedQualities,\n        \"quality\",\n      );\n      const accept = request.headers.get(\"accept\") ?? \"\";\n      // Key on the format the Accept header negotiates to, not the header text.\n      // Both transformers derive their output from `selectOutputFormat(accept,\n      // formats)` alone, so every header that negotiates to the same format\n      // produces byte-identical output. Keying on the raw header let a caller\n      // vary it freely (`image/webp,*/*;q=0.8`, reordered lists, extra params)\n      // and force an uncached fetch and transform each time.\n      const negotiatedFormat = selectOutputFormat(accept, config.formats) ?? \"\";\n      const cacheKey = `${sourceUrl.href}\\n${width}\\n${quality}\\n${negotiatedFormat}`;\n      let optimized = cache.get(cacheKey);\n\n      if (!optimized) {\n        optimized = await runCoalesced(inflight, cacheKey, request.signal, async (signal) => {\n          const fetchedSource = await fetchImageSource(\n            sourceUrl,\n            requestUrl.origin,\n            config,\n            fetcher,\n            options.fetchRemote,\n            options.validateRemoteUrl,\n            signal,\n          );\n          const source = await readResponseWithLimit(\n            fetchedSource.response,\n            config.maximumResponseBody,\n          );\n          const sourceType = detectImageContentType(source);\n          validateSourceType(sourceType, config);\n          throwIfAborted(signal);\n\n          const result = await options.transform({\n            source,\n            sourceUrl: fetchedSource.url,\n            sourceType,\n            width,\n            quality,\n            accept,\n            formats: config.formats,\n            signal,\n            maximumResponseBody: config.maximumResponseBody,\n          });\n          throwIfAborted(signal);\n          validateTransformedResult(result, config);\n\n          const entry = {\n            ...result,\n            etag: createImageEtag(result.body),\n            cacheControl: `public, max-age=${config.minimumCacheTTL}, stale-while-revalidate=${Math.max(\n              config.minimumCacheTTL,\n              60,\n            )}`,\n            expiresAt: Date.now() + config.minimumCacheTTL * 1_000,\n          };\n          cache.set(cacheKey, entry);\n          return entry;\n        });\n      }\n\n      return createOptimizedImageResponse(request, optimized, config);\n    } catch (error) {\n      if (!(error instanceof FarmImageRequestError) && !isAbortError(error)) {\n        try {\n          options.onError?.(error, request);\n        } catch {\n          // Error reporting must not replace the optimizer's sanitized response.\n        }\n      }\n      return createFarmImageErrorResponse(error);\n    }\n  };\n}\n\n/** Mirrors the `images.maximumResponseBody` default (\"10mb\"). */\nconst DEFAULT_IMAGE_TRANSFORM_BODY_LIMIT = 10 * 1024 * 1024;\n\nexport function createCloudflareImageTransformer(\n  fetcher: typeof globalThis.fetch = globalThis.fetch,\n): FarmImageTransformer {\n  return async ({ sourceUrl, width, quality, accept, formats, signal, maximumResponseBody }) => {\n    const format = selectOutputFormat(accept, formats);\n    // Cloudflare resizing works by letting the edge fetch the origin, so this\n    // request cannot reuse the bytes the handler already read. It still must not\n    // be a weaker fetch than the validated one: `redirect: \"manual\"` keeps it\n    // from silently following a hop the handler never validated, and the body is\n    // read under the same ceiling as the handler's own read.\n    const response = await fetcher(sourceUrl, {\n      signal,\n      redirect: \"manual\",\n      headers: { accept: \"image/*\" },\n      cf: {\n        image: {\n          fit: \"scale-down\",\n          width,\n          quality,\n          ...(format ? { format: format === \"image/avif\" ? \"avif\" : \"webp\" } : {}),\n        },\n      },\n    } as RequestInit);\n\n    if (response.status >= 300 && response.status < 400) {\n      void cancelResponseBody(response);\n      throw new FarmImageRequestError(\n        \"UNSUPPORTED_IMAGE\",\n        502,\n        \"Source image redirected after validation\",\n      );\n    }\n\n    if (!response.ok) {\n      throw new FarmImageRequestError(\n        \"UNSUPPORTED_IMAGE\",\n        response.status === 404 ? 404 : 502,\n        \"Cloudflare could not transform the source image\",\n      );\n    }\n\n    const body = await readResponseWithLimit(\n      response,\n      maximumResponseBody ?? DEFAULT_IMAGE_TRANSFORM_BODY_LIMIT,\n    );\n    return {\n      body,\n      contentType:\n        normalizeImageContentType(response.headers.get(\"content-type\")) ||\n        detectImageContentType(body),\n    };\n  };\n}\n\nexport function selectOutputFormat(\n  accept: string,\n  formats: readonly FarmImageFormat[],\n): FarmImageFormat | undefined {\n  const qualityByFormat = new Map<string, number>();\n\n  for (const range of accept.split(\",\")) {\n    const [rawType, ...parameters] = range.split(\";\");\n    const type = rawType.trim().toLowerCase();\n    if (!type) continue;\n\n    let quality = 1;\n    for (const parameter of parameters) {\n      const [rawName, rawValue] = parameter.split(\"=\", 2);\n      if (rawName.trim().toLowerCase() !== \"q\") continue;\n      const parsed = Number(rawValue?.trim());\n      quality = Number.isFinite(parsed) && parsed >= 0 && parsed <= 1 ? parsed : 0;\n      break;\n    }\n\n    qualityByFormat.set(type, Math.max(qualityByFormat.get(type) ?? 0, quality));\n  }\n\n  let selected: FarmImageFormat | undefined;\n  let selectedQuality = 0;\n  for (const format of formats) {\n    const quality = qualityByFormat.get(format) ?? 0;\n    if (quality > selectedQuality) {\n      selected = format;\n      selectedQuality = quality;\n    }\n  }\n  return selected;\n}\n\n/**\n * Expand an IPv6 address into its eight 16-bit hextets, or null when the value\n * is not a parseable IPv6 address.\n *\n * Textual comparison is not enough for this boundary: the same address has many\n * spellings, and `new URL()` rewrites some of them. `::ffff:127.0.0.1` becomes\n * `::ffff:7f00:1`, and `::1` may arrive fully expanded, so every form has to be\n * reduced to numbers before any range check.\n */\nfunction parseIpv6Hextets(value: string): number[] | null {\n  // Drop any zone index (fe80::1%eth0); it does not affect the address.\n  let text = value.split(\"%\", 1)[0] ?? \"\";\n  if (!text.includes(\":\")) return null;\n\n  // A trailing dotted quad (::ffff:127.0.0.1) contributes the low two hextets.\n  let tail: number[] = [];\n  const lastColon = text.lastIndexOf(\":\");\n  const candidate = text.slice(lastColon + 1);\n  if (candidate.includes(\".\")) {\n    const octets = parseIpv4Octets(candidate);\n    if (!octets) return null;\n    tail = [(octets[0]! << 8) | octets[1]!, (octets[2]! << 8) | octets[3]!];\n    text = text.slice(0, lastColon);\n    // \"::1.2.3.4\" leaves \"::\" here, and \"1.2.3.4\" alone leaves \"\" — not IPv6.\n    if (text === \"\") return null;\n  }\n\n  const compressionParts = text.split(\"::\");\n  if (compressionParts.length > 2) return null;\n\n  const parseGroup = (group: string): number[] | null => {\n    if (group === \"\") return [];\n    const hextets: number[] = [];\n    for (const part of group.split(\":\")) {\n      if (!/^[0-9a-f]{1,4}$/.test(part)) return null;\n      hextets.push(Number.parseInt(part, 16));\n    }\n    return hextets;\n  };\n\n  const head = parseGroup(compressionParts[0] ?? \"\");\n  const rest = parseGroup(compressionParts[1] ?? \"\");\n  if (!head || !rest) return null;\n\n  const explicit = [...head, ...rest, ...tail];\n  if (compressionParts.length === 1) {\n    return explicit.length === 8 ? explicit : null;\n  }\n\n  // \"::\" stands for at least one zero hextet.\n  if (explicit.length >= 8) return null;\n  const zeros = Array.from({ length: 8 - explicit.length }, () => 0);\n  return [...head, ...zeros, ...rest, ...tail];\n}\n\nfunction parseIpv4Octets(value: string): number[] | null {\n  const parts = value.split(\".\");\n  if (parts.length !== 4 || parts.some((part) => !/^\\d{1,3}$/.test(part))) return null;\n  const octets = parts.map(Number);\n  return octets.some((part) => part > 255) ? null : octets;\n}\n\nfunction isPrivateIpv4(octets: readonly number[]): boolean {\n  const [a, b] = octets as [number, number];\n  return (\n    a === 0 ||\n    a === 10 ||\n    a === 127 ||\n    (a === 100 && b >= 64 && b <= 127) ||\n    (a === 169 && b === 254) ||\n    (a === 172 && b >= 16 && b <= 31) ||\n    (a === 192 && (b === 0 || b === 168)) ||\n    (a === 198 && (b === 18 || b === 19)) ||\n    a >= 224\n  );\n}\n\nexport function isPrivateImageAddress(address: string): boolean {\n  const value = address\n    .trim()\n    .toLowerCase()\n    .replace(/^\\[|\\]$/g, \"\");\n\n  const hextets = parseIpv6Hextets(value);\n  if (hextets) {\n    const [h0, h1, h2, h3, h4, h5, h6, h7] = hextets as [\n      number,\n      number,\n      number,\n      number,\n      number,\n      number,\n      number,\n      number,\n    ];\n    const zeroPrefix = h0 === 0 && h1 === 0 && h2 === 0 && h3 === 0;\n\n    // An address that embeds IPv4 is only as safe as that IPv4 address:\n    // IPv4-mapped (::ffff:0:0/96), IPv4-translated (::ffff:0:0:0/96), and the\n    // deprecated IPv4-compatible (::/96) forms all reach the v4 host.\n    const embedsIpv4 =\n      zeroPrefix &&\n      ((h4 === 0 && h5 === 0xffff) || (h4 === 0xffff && h5 === 0) || (h4 === 0 && h5 === 0));\n    if (embedsIpv4 && (h6 !== 0 || h7 !== 0)) {\n      return isPrivateIpv4([h6 >> 8, h6 & 0xff, h7 >> 8, h7 & 0xff]);\n    }\n\n    // Unspecified (::) and loopback (::1) in any spelling.\n    if (zeroPrefix && h4 === 0 && h5 === 0 && h6 === 0 && (h7 === 0 || h7 === 1)) return true;\n    // Unique-local fc00::/7, link-local fe80::/10, multicast ff00::/8.\n    if ((h0 & 0xfe00) === 0xfc00) return true;\n    if ((h0 & 0xffc0) === 0xfe80) return true;\n    if ((h0 & 0xff00) === 0xff00) return true;\n    return false;\n  }\n\n  const octets = parseIpv4Octets(value);\n  return octets ? isPrivateIpv4(octets) : false;\n}\n\nfunction parseAllowedInteger(\n  raw: string | null,\n  allowed: ReadonlySet<number>,\n  name: string,\n): number {\n  if (!raw || !/^\\d+$/.test(raw)) {\n    throw new FarmImageRequestError(\n      \"INVALID_PARAMETER\",\n      400,\n      `Image ${name} must be an allowed integer`,\n    );\n  }\n  const value = Number(raw);\n  if (!allowed.has(value)) {\n    throw new FarmImageRequestError(\"INVALID_PARAMETER\", 400, `Image ${name} is not configured`);\n  }\n  return value;\n}\n\nasync function resolveImageSourceUrl(\n  requestUrl: URL,\n  config: ResolvedFarmImageConfig,\n  validateRemoteUrl: CreateFarmImageHandlerOptions[\"validateRemoteUrl\"],\n): Promise<URL> {\n  const raw = requestUrl.searchParams.get(\"url\");\n  if (!raw || raw.length > 4096 || raw.startsWith(\"//\")) {\n    throw new FarmImageRequestError(\"INVALID_PARAMETER\", 400, \"Invalid image source URL\");\n  }\n\n  let sourceUrl: URL;\n  try {\n    sourceUrl = raw.startsWith(\"/\") ? new URL(raw, requestUrl.origin) : new URL(raw);\n  } catch {\n    throw new FarmImageRequestError(\"INVALID_PARAMETER\", 400, \"Invalid image source URL\");\n  }\n\n  await validateImageSourceUrl(sourceUrl, requestUrl.origin, config, validateRemoteUrl);\n  return sourceUrl;\n}\n\nasync function validateImageSourceUrl(\n  sourceUrl: URL,\n  requestOrigin: string,\n  config: ResolvedFarmImageConfig,\n  validateRemoteUrl: CreateFarmImageHandlerOptions[\"validateRemoteUrl\"],\n): Promise<void> {\n  if (sourceUrl.protocol !== \"http:\" && sourceUrl.protocol !== \"https:\") {\n    throw new FarmImageRequestError(\"DISALLOWED_SOURCE\", 400, \"Unsupported image protocol\");\n  }\n  if (sourceUrl.username || sourceUrl.password || sourceUrl.hash) {\n    throw new FarmImageRequestError(\"DISALLOWED_SOURCE\", 400, \"Unsafe image source URL\");\n  }\n\n  if (sourceUrl.origin === requestOrigin) {\n    if (\n      sourceUrl.pathname === config.path ||\n      !matchesLocalPatterns(sourceUrl, config.localPatterns)\n    ) {\n      throw new FarmImageRequestError(\n        \"DISALLOWED_SOURCE\",\n        400,\n        \"Local image source is not allowed\",\n      );\n    }\n    return;\n  }\n\n  if (!matchesRemoteSource(sourceUrl, config)) {\n    throw new FarmImageRequestError(\"DISALLOWED_SOURCE\", 400, \"Remote image source is not allowed\");\n  }\n  if (!config.dangerouslyAllowLocalIP && isPrivateImageAddress(sourceUrl.hostname)) {\n    throw new FarmImageRequestError(\"PRIVATE_SOURCE\", 400, \"Private image source is not allowed\");\n  }\n  if (!config.dangerouslyAllowLocalIP) {\n    await validateRemoteUrl?.(sourceUrl);\n  }\n}\n\nasync function fetchImageSource(\n  initialUrl: URL,\n  requestOrigin: string,\n  config: ResolvedFarmImageConfig,\n  fetcher: typeof globalThis.fetch,\n  fetchRemote: typeof globalThis.fetch | undefined,\n  validateRemoteUrl: CreateFarmImageHandlerOptions[\"validateRemoteUrl\"],\n  signal: AbortSignal,\n): Promise<{ response: Response; url: URL }> {\n  let currentUrl = initialUrl;\n\n  for (let redirectCount = 0; ; redirectCount += 1) {\n    throwIfAborted(signal);\n    const sourceFetcher = currentUrl.origin === requestOrigin ? fetcher : (fetchRemote ?? fetcher);\n    const response = await sourceFetcher(currentUrl, {\n      method: \"GET\",\n      redirect: \"manual\",\n      signal,\n      headers: {\n        accept: \"image/avif,image/webp,image/*,*/*;q=0.8\",\n        \"user-agent\": \"Farm.js Image Optimizer\",\n      },\n    });\n\n    if (![301, 302, 303, 307, 308].includes(response.status)) {\n      if (!response.ok) {\n        await cancelResponseBody(response);\n        throw new FarmImageRequestError(\n          \"UNSUPPORTED_IMAGE\",\n          response.status === 404 ? 404 : 502,\n          \"Could not fetch source image\",\n        );\n      }\n      return { response, url: currentUrl };\n    }\n\n    if (redirectCount >= config.maximumRedirects) {\n      await cancelResponseBody(response);\n      throw new FarmImageRequestError(\n        \"TOO_MANY_REDIRECTS\",\n        400,\n        \"Source image exceeded the redirect limit\",\n      );\n    }\n    const location = response.headers.get(\"location\");\n    if (!location) {\n      await cancelResponseBody(response);\n      throw new FarmImageRequestError(\"UNSUPPORTED_IMAGE\", 502, \"Invalid image redirect\");\n    }\n    await cancelResponseBody(response);\n    currentUrl = new URL(location, currentUrl);\n    await validateImageSourceUrl(currentUrl, requestOrigin, config, validateRemoteUrl);\n  }\n}\n\ntype InflightOptimization = {\n  promise: Promise<OptimizedImage>;\n  controller: AbortController;\n  waiters: number;\n};\n\n/**\n * Share one in-flight optimization between identical concurrent requests.\n *\n * The shared work runs under its own AbortController rather than any single\n * request's signal, so one caller going away cannot cancel the image everyone\n * else is waiting for. The controller is aborted only when the last waiter\n * leaves, so an abandoned burst still stops promptly.\n */\nasync function runCoalesced(\n  inflight: Map<string, InflightOptimization>,\n  key: string,\n  requestSignal: AbortSignal,\n  run: (signal: AbortSignal) => Promise<OptimizedImage>,\n): Promise<OptimizedImage> {\n  let entry = inflight.get(key);\n  if (!entry) {\n    const controller = new AbortController();\n    const created: InflightOptimization = {\n      controller,\n      waiters: 0,\n      promise: undefined as unknown as Promise<OptimizedImage>,\n    };\n    created.promise = run(controller.signal).finally(() => {\n      if (inflight.get(key) === created) inflight.delete(key);\n    });\n    // Every waiter can detach before the shared work settles: an already\n    // aborted request returns early without ever attaching to this promise,\n    // and the last waiter leaving aborts the controller. Keep one no-op\n    // handler so that rejection is never reported as unhandled. Waiters still\n    // observe it, because this does not replace the promise they await.\n    created.promise.catch(() => {});\n    inflight.set(key, created);\n    entry = created;\n  }\n\n  const pending = entry;\n  pending.waiters += 1;\n  try {\n    return await raceRequestAbort(pending.promise, requestSignal);\n  } finally {\n    pending.waiters -= 1;\n    if (pending.waiters === 0 && inflight.get(key) === pending) {\n      inflight.delete(key);\n      pending.controller.abort();\n    }\n  }\n}\n\nfunction raceRequestAbort(\n  promise: Promise<OptimizedImage>,\n  signal: AbortSignal,\n): Promise<OptimizedImage> {\n  if (!signal) return promise;\n  if (signal.aborted) return Promise.reject(signal.reason ?? new Error(\"Aborted\"));\n\n  return new Promise<OptimizedImage>((resolve, reject) => {\n    const onAbort = () => reject(signal.reason ?? new Error(\"Aborted\"));\n    signal.addEventListener(\"abort\", onAbort, { once: true });\n    promise.then(resolve, reject).finally(() => signal.removeEventListener(\"abort\", onAbort));\n  });\n}\n\nasync function readResponseWithLimit(response: Response, limit: number): Promise<Uint8Array> {\n  const contentLength = response.headers.get(\"content-length\");\n  if (contentLength && Number(contentLength) > limit) {\n    // Cleanup (including an unread tee branch) must not delay the size rejection.\n    void cancelResponseBody(response);\n    throw new FarmImageRequestError(\"BODY_TOO_LARGE\", 413, \"Source image is too large\");\n  }\n\n  if (!response.body) return new Uint8Array();\n  const reader = response.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let byteLength = 0;\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n      byteLength += value.byteLength;\n      if (byteLength > limit) {\n        const error = new FarmImageRequestError(\"BODY_TOO_LARGE\", 413, \"Source image is too large\");\n        void reader.cancel(error).catch(() => {});\n        throw error;\n      }\n      chunks.push(value);\n    }\n  } finally {\n    reader.releaseLock();\n  }\n\n  const result = new Uint8Array(byteLength);\n  let offset = 0;\n  for (const chunk of chunks) {\n    result.set(chunk, offset);\n    offset += chunk.byteLength;\n  }\n  return result;\n}\n\nasync function cancelResponseBody(response: Response): Promise<void> {\n  try {\n    await response.body?.cancel();\n  } catch {\n    // Cleanup must not replace the request error or redirect result.\n  }\n}\n\nfunction detectImageContentType(bytes: Uint8Array): string {\n  if (\n    bytes.length >= 8 &&\n    bytes[0] === 0x89 &&\n    bytes[1] === 0x50 &&\n    bytes[2] === 0x4e &&\n    bytes[3] === 0x47\n  ) {\n    return \"image/png\";\n  }\n  if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {\n    return \"image/jpeg\";\n  }\n  if (bytes.length >= 6) {\n    const signature = new TextDecoder().decode(bytes.slice(0, 6));\n    if (signature === \"GIF87a\" || signature === \"GIF89a\") return \"image/gif\";\n  }\n  if (bytes.length >= 12) {\n    const riff = new TextDecoder().decode(bytes.slice(0, 4));\n    const webp = new TextDecoder().decode(bytes.slice(8, 12));\n    if (riff === \"RIFF\" && webp === \"WEBP\") return \"image/webp\";\n    const box = new TextDecoder().decode(bytes.slice(4, 12));\n    if (box.startsWith(\"ftypavif\") || box.startsWith(\"ftypavis\")) return \"image/avif\";\n  }\n\n  const prefix = new TextDecoder().decode(bytes.slice(0, 512)).trimStart().toLowerCase();\n  if (prefix.startsWith(\"<svg\") || (prefix.startsWith(\"<?xml\") && prefix.includes(\"<svg\"))) {\n    return \"image/svg+xml\";\n  }\n  return \"\";\n}\n\nfunction validateSourceType(type: string, config: ResolvedFarmImageConfig): void {\n  if (!type || (type === \"image/svg+xml\" && !config.dangerouslyAllowSVG)) {\n    throw new FarmImageRequestError(\"UNSUPPORTED_IMAGE\", 415, \"Unsupported source image\");\n  }\n}\n\nfunction validateTransformedResult(\n  result: FarmImageTransformResult,\n  config: ResolvedFarmImageConfig,\n): void {\n  if (!(result.body instanceof Uint8Array) || result.body.byteLength === 0) {\n    throw new Error(\"The image transformer returned an empty response\");\n  }\n  if (result.body.byteLength > config.maximumResponseBody) {\n    throw new FarmImageRequestError(\"BODY_TOO_LARGE\", 413, \"Optimized image is too large\");\n  }\n  const contentType = normalizeImageContentType(result.contentType);\n  if (!contentType || (contentType === \"image/svg+xml\" && !config.dangerouslyAllowSVG)) {\n    throw new Error(\"The image transformer returned an unsupported content type\");\n  }\n  result.contentType = contentType;\n}\n\nfunction normalizeImageContentType(value: string | null): string {\n  const type = value?.split(\";\", 1)[0].trim().toLowerCase() ?? \"\";\n  return type.startsWith(\"image/\") ? type : \"\";\n}\n\nfunction matchesRemoteSource(url: URL, config: ResolvedFarmImageConfig): boolean {\n  if (config.domains.includes(url.hostname.toLowerCase())) return true;\n  return config.remotePatterns.some((pattern) => matchesRemotePattern(url, pattern));\n}\n\nfunction matchesRemotePattern(url: URL, pattern: FarmImageRemotePattern): boolean {\n  return (\n    (!pattern.protocol || url.protocol === `${pattern.protocol}:`) &&\n    matchesHostname(url.hostname, pattern.hostname) &&\n    (pattern.port === undefined || url.port === pattern.port) &&\n    matchesGlob(url.pathname, pattern.pathname ?? \"/**\") &&\n    (pattern.search === undefined || url.search === pattern.search)\n  );\n}\n\nfunction matchesLocalPatterns(url: URL, patterns: readonly FarmImageLocalPattern[]): boolean {\n  return patterns.some(\n    (pattern) =>\n      matchesGlob(url.pathname, pattern.pathname) &&\n      (pattern.search === undefined || url.search === pattern.search),\n  );\n}\n\nfunction matchesHostname(hostname: string, pattern: string): boolean {\n  const normalizedHostname = hostname.toLowerCase();\n  const normalizedPattern = pattern.toLowerCase();\n  if (normalizedPattern.startsWith(\"**.\")) {\n    const suffix = normalizedPattern.slice(3);\n    return normalizedHostname === suffix || normalizedHostname.endsWith(`.${suffix}`);\n  }\n  if (normalizedPattern.startsWith(\"*.\")) {\n    const suffix = normalizedPattern.slice(2);\n    const prefix = normalizedHostname.slice(0, -(suffix.length + 1));\n    return normalizedHostname.endsWith(`.${suffix}`) && !!prefix && !prefix.includes(\".\");\n  }\n  return normalizedHostname === normalizedPattern;\n}\n\nfunction matchesGlob(value: string, pattern: string): boolean {\n  const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  const source = escaped.replace(/\\*\\*/g, \"\\0\").replace(/\\*/g, \"[^/]*\").replace(/\\0/g, \".*\");\n  return new RegExp(`^${source}$`).test(value);\n}\n\nfunction createOptimizedImageResponse(\n  request: Request,\n  image: OptimizedImage,\n  config: ResolvedFarmImageConfig,\n): Response {\n  const headers = new Headers({\n    \"cache-control\": image.cacheControl,\n    \"content-type\": image.contentType,\n    \"content-length\": String(image.body.byteLength),\n    \"content-disposition\": \"inline\",\n    etag: image.etag,\n    vary: \"Accept\",\n    \"x-content-type-options\": \"nosniff\",\n  });\n  if (image.contentType === \"image/svg+xml\" && config.dangerouslyAllowSVG) {\n    headers.set(\"content-security-policy\", \"default-src 'none'; sandbox\");\n  }\n  if (matchesFarmIfNoneMatch(request.headers.get(\"if-none-match\"), image.etag)) {\n    headers.delete(\"content-length\");\n    return new Response(null, { status: 304, headers });\n  }\n  const body =\n    request.method === \"HEAD\"\n      ? null\n      : image.body.buffer.slice(\n          image.body.byteOffset,\n          image.body.byteOffset + image.body.byteLength,\n        );\n  return new Response(body as ArrayBuffer | null, { status: 200, headers });\n}\n\nfunction createFarmImageErrorResponse(error: unknown): Response {\n  const status =\n    error instanceof FarmImageRequestError ? error.status : isAbortError(error) ? 499 : 500;\n  const headers = new Headers({\n    \"cache-control\": \"no-store\",\n    \"content-type\": \"text/plain; charset=utf-8\",\n    \"x-content-type-options\": \"nosniff\",\n  });\n  if (status === 405) headers.set(\"allow\", \"GET, HEAD\");\n\n  const message =\n    status === 400\n      ? \"Invalid image request\"\n      : status === 404\n        ? \"Image not found\"\n        : status === 405\n          ? \"Method not allowed\"\n          : status === 413\n            ? \"Image is too large\"\n            : status === 415\n              ? \"Unsupported image\"\n              : status === 499\n                ? \"Image request cancelled\"\n                : \"Image optimization failed\";\n  return new Response(message, { status, headers });\n}\n\nfunction createImageEtag(bytes: Uint8Array): string {\n  let hash = 0x811c9dc5;\n  for (const byte of bytes) {\n    hash ^= byte;\n    hash = Math.imul(hash, 0x01000193);\n  }\n  return `W/\"farm-${bytes.byteLength.toString(16)}-${(hash >>> 0).toString(16)}\"`;\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n  if (signal.aborted) {\n    throw signal.reason instanceof Error\n      ? signal.reason\n      : new DOMException(\"The image request was aborted\", \"AbortError\");\n  }\n}\n\nfunction isAbortError(error: unknown): boolean {\n  return error instanceof Error && error.name === \"AbortError\";\n}\n\nclass FarmImageMemoryCache {\n  private readonly entries = new Map<string, OptimizedImage>();\n\n  constructor(private readonly capacity: number) {}\n\n  get(key: string): OptimizedImage | undefined {\n    const value = this.entries.get(key);\n    if (!value) return undefined;\n    if (value.expiresAt <= Date.now()) {\n      this.entries.delete(key);\n      return undefined;\n    }\n    this.entries.delete(key);\n    this.entries.set(key, value);\n    return value;\n  }\n\n  set(key: string, value: OptimizedImage): void {\n    if (this.capacity <= 0) return;\n    this.entries.delete(key);\n    this.entries.set(key, value);\n    while (this.entries.size > this.capacity) {\n      const oldestKey = this.entries.keys().next().value as string | undefined;\n      if (oldestKey === undefined) break;\n      this.entries.delete(oldestKey);\n    }\n  }\n}\n","import path from \"node:path\";\nimport type { UserConfig as ViteUserConfig } from \"vite\";\nimport type { FarmRenderer } from \"../renderer\";\n\nconst FARM_CLIENT_ENTRY_PATTERN =\n  \"**/{page,layout,loading,error,not-found,default}.{js,jsx,ts,tsx}\";\n\n/**\n * Client runtimes that must be optimized in the same generation as React.\n * Farm loads route modules dynamically, so Vite's HTML crawl cannot reliably\n * discover these linked-package entry points before hydration begins.\n */\nexport const FARM_CLIENT_OPTIMIZE_DEPS_INCLUDE = [\n  \"react\",\n  \"react-dom\",\n  \"react-dom/client\",\n  \"react/jsx-runtime\",\n  \"react/jsx-dev-runtime\",\n  \"@farm.js/core/client\",\n  \"@farm.js/core/plugin/client\",\n  \"@farm.js/core/deferred\",\n  \"@farm.js/core/deployment\",\n  \"@farm.js/core/i18n/client\",\n  \"@farm.js/core/query/client\",\n  \"@farm.js/core/server-fn/client\",\n  \"@farm.js/core/server-query/client\",\n] as const;\n\nexport function getFarmClientOptimizeDepsInclude(renderer?: FarmRenderer): string[] {\n  return Array.from(\n    new Set([...FARM_CLIENT_OPTIMIZE_DEPS_INCLUDE, ...(renderer?.optimizeDeps || [])]),\n  );\n}\n\nexport function createFarmClientOptimizeDepsEntries(\n  projectRoot: string,\n  appDirectories: readonly string[],\n): string[] {\n  const resolvedProjectRoot = path.resolve(projectRoot);\n\n  return appDirectories.map((appDirectory) => {\n    const relativeAppDirectory = path\n      .relative(resolvedProjectRoot, path.resolve(appDirectory))\n      .replace(/\\\\/g, \"/\");\n    const prefix = relativeAppDirectory || \".\";\n    return `${prefix}/${FARM_CLIENT_ENTRY_PATTERN}`;\n  });\n}\n\nexport function createFarmClientOptimizeDepsConfig(\n  entries?: readonly string[],\n  renderer?: FarmRenderer,\n): ViteUserConfig[\"optimizeDeps\"] {\n  return {\n    // Keep normal application dependency discovery for CJS-only packages, but\n    // seed every Farm browser runtime so React is present in the first crawl.\n    noDiscovery: false,\n    // Waiting for the crawl avoids serving a partial optimizer generation and\n    // then changing browser hashes while hydration is already in progress.\n    holdUntilCrawlEnd: true,\n    include: getFarmClientOptimizeDepsInclude(renderer),\n    // Farm's HTML boots through a virtual module and imports route UI lazily.\n    // Explicit entries let Vite finish that crawl before a navigation can\n    // rotate the optimizer hash underneath a hydrated React runtime.\n    ...(entries?.length ? { entries: [...entries] } : {}),\n  };\n}\n\n/**\n * Farm's application-source alias. Keep this shared by development, route\n * discovery, and production bundling so `@/…` always follows `srcDir`.\n */\nexport function createFarmSourceAlias(projectRoot: string, srcDir = \"src\"): Record<string, string> {\n  return {\n    \"@\": path.resolve(projectRoot, srcDir),\n  };\n}\n\ntype ViteNoExternal = NonNullable<NonNullable<ViteUserConfig[\"ssr\"]>[\"noExternal\"]>;\ntype ViteAlias = NonNullable<NonNullable<ViteUserConfig[\"resolve\"]>[\"alias\"]>;\n\nfunction mergeNoExternal(\n  farmValue: ViteNoExternal | undefined,\n  userValue: ViteNoExternal | undefined,\n): ViteNoExternal {\n  if (farmValue === true || userValue === true) return true;\n\n  const normalize = (value: ViteNoExternal | undefined): Array<string | RegExp> =>\n    value == null || value === true ? [] : Array.isArray(value) ? value : [value];\n\n  return Array.from(new Set([...normalize(farmValue), ...normalize(userValue)]));\n}\n\nfunction mergeAlias(farmValue: ViteAlias | undefined, userValue: ViteAlias | undefined): ViteAlias {\n  if (!farmValue) return userValue || {};\n  if (!userValue) return farmValue;\n\n  if (!Array.isArray(farmValue) && !Array.isArray(userValue)) {\n    return {\n      ...farmValue,\n      ...userValue,\n    };\n  }\n\n  const normalize = (value: ViteAlias): Exclude<ViteAlias, Record<string, string>> =>\n    Array.isArray(value)\n      ? [...value]\n      : Object.entries(value).map(([find, replacement]) => ({ find, replacement }));\n\n  // Vite uses the first matching array entry. Put application entries first\n  // so an explicit user alias can intentionally override a Farm default.\n  return [...normalize(userValue), ...normalize(farmValue)];\n}\n\nexport function mergeFarmViteConfig(\n  farmConfig: ViteUserConfig,\n  userConfig: ViteUserConfig = {},\n): ViteUserConfig {\n  const noDiscovery = userConfig.optimizeDeps?.noDiscovery ?? farmConfig.optimizeDeps?.noDiscovery;\n  const holdUntilCrawlEnd =\n    userConfig.optimizeDeps?.holdUntilCrawlEnd ??\n    (userConfig.optimizeDeps?.noDiscovery === true\n      ? false\n      : farmConfig.optimizeDeps?.holdUntilCrawlEnd);\n\n  return {\n    ...farmConfig,\n    ...userConfig,\n    plugins: [...(farmConfig.plugins || []), ...(userConfig.plugins || [])],\n    server: {\n      ...farmConfig.server,\n      ...userConfig.server,\n    },\n    resolve: {\n      ...farmConfig.resolve,\n      ...userConfig.resolve,\n      alias: mergeAlias(farmConfig.resolve?.alias, userConfig.resolve?.alias),\n      dedupe: Array.from(\n        new Set([...(farmConfig.resolve?.dedupe || []), ...(userConfig.resolve?.dedupe || [])]),\n      ),\n    },\n    optimizeDeps: {\n      ...farmConfig.optimizeDeps,\n      ...userConfig.optimizeDeps,\n      noDiscovery,\n      holdUntilCrawlEnd,\n      include: Array.from(\n        new Set([\n          ...(farmConfig.optimizeDeps?.include || []),\n          ...(userConfig.optimizeDeps?.include || []),\n        ]),\n      ),\n      exclude: Array.from(\n        new Set([\n          ...(farmConfig.optimizeDeps?.exclude || []),\n          ...(userConfig.optimizeDeps?.exclude || []),\n        ]),\n      ),\n    },\n    ssr: {\n      ...farmConfig.ssr,\n      ...userConfig.ssr,\n      noExternal: mergeNoExternal(farmConfig.ssr?.noExternal, userConfig.ssr?.noExternal),\n    },\n  };\n}\n","import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport interface FarmDocsPublicFontAsset {\n  family: \"Geist Sans\" | \"Geist Mono\";\n  url: string;\n}\n\nexport interface FarmDocsFontAsset extends FarmDocsPublicFontAsset {\n  sourcePath: string;\n}\n\nconst FARM_DOCS_FONT_SOURCES = [\n  {\n    family: \"Geist Sans\",\n    packagePath: \"geist/dist/fonts/geist-sans/Geist-Variable.woff2\",\n  },\n  {\n    family: \"Geist Mono\",\n    packagePath: \"geist/dist/fonts/geist-mono/GeistMono-Variable.woff2\",\n  },\n] as const;\n\nexport function resolveFarmDocsFontAssets(root: string): FarmDocsFontAsset[] {\n  return FARM_DOCS_FONT_SOURCES.flatMap(({ family, packagePath }) => {\n    const sourcePath = path.join(root, \"node_modules\", packagePath);\n    if (!existsSync(sourcePath)) return [];\n\n    const source = readFileSync(sourcePath);\n    const fingerprint = createHash(\"sha256\").update(source).digest(\"hex\").slice(0, 12);\n    const extension = path.extname(packagePath);\n    const baseName = path.basename(packagePath, extension);\n\n    return [\n      {\n        family,\n        sourcePath,\n        url: `/assets/fonts/${baseName}-h${fingerprint}${extension}`,\n      },\n    ];\n  });\n}\n\nexport function toFarmDocsPublicFontAssets(\n  assets: readonly FarmDocsFontAsset[],\n): FarmDocsPublicFontAsset[] {\n  return assets.map(({ family, url }) => ({ family, url }));\n}\n","import type { Plugin } from \"vite\";\nimport { resolveFarmThemeConfig } from \"./config\";\nimport type { FarmThemeConfig, ResolvedFarmThemeConfig } from \"./types\";\n\nconst FARM_DARK_VARIANT =\n  '@custom-variant dark (&:where([data-theme=\"dark\"], [data-theme=\"dark\"] *));';\n\nexport function createFarmThemeCssPlugin(\n  input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n  basePath = \"/\",\n): Plugin {\n  const config = resolveFarmThemeConfig(input, basePath);\n\n  return {\n    name: \"farm:theme-css\",\n    enforce: \"pre\",\n    transform(code, id) {\n      if (\n        !config.enabled ||\n        !/\\.css(?:\\?.*)?$/.test(id) ||\n        !/@import\\s+[\"']tailwindcss[\"']/.test(code) ||\n        /@custom-variant\\s+dark\\b/.test(code)\n      ) {\n        return null;\n      }\n\n      return {\n        code: `${code.trimEnd()}\\n\\n${FARM_DARK_VARIANT}\\n`,\n        map: null,\n      };\n    },\n  };\n}\n","import path from \"node:path\";\nimport type { FarmIntegrationProvider } from \"./integrations\";\nimport { isFarmIntegrationProviderComponentReference } from \"./integrations\";\nimport { toViteModuleId } from \"./utils\";\n\nexport type FarmIntegrationProviderClientCode = {\n  hasProviders: boolean;\n  imports: string;\n  runtime: string;\n};\n\nexport function generateFarmIntegrationProviderClientCode(\n  providers: FarmIntegrationProvider[],\n  root: string,\n): FarmIntegrationProviderClientCode {\n  const renderedProviders = providers.filter(\n    (provider) => provider.component || provider.type === \"clerk\",\n  );\n  const imports: string[] = [];\n  const registrations: string[] = [];\n  let hasClerkProvider = false;\n\n  renderedProviders.forEach((provider, index) => {\n    let componentExpression = \"null\";\n    if (isFarmIntegrationProviderComponentReference(provider.component)) {\n      const namespace = `FarmIntegrationProviderModule${index}`;\n      imports.push(\n        `import * as ${namespace} from ${JSON.stringify(resolveProviderModule(provider.component.module, root))};`,\n      );\n      componentExpression = `${namespace}[${JSON.stringify(provider.component.export || \"default\")}]`;\n    } else if (typeof provider.component === \"function\") {\n      throw new Error(\n        `Integration provider \"${provider.name}\" must use an importable component reference for client hydration, for example component: { module: \"@/components/provider\" }.`,\n      );\n    } else if (provider.type === \"clerk\") {\n      hasClerkProvider = true;\n      componentExpression = \"FarmClerkProvider\";\n    }\n\n    registrations.push(`{\n  name: ${JSON.stringify(provider.name)},\n  type: ${JSON.stringify(provider.type)},\n  props: ${JSON.stringify(provider.props || {})},\n  Component: ${componentExpression},\n}`);\n  });\n\n  if (hasClerkProvider) {\n    imports.unshift(`import { ClerkProvider as FarmClerkProvider } from \"@clerk/react\";`);\n  }\n\n  return {\n    hasProviders: renderedProviders.length > 0,\n    imports: imports.join(\"\\n\"),\n    runtime: `const integrationProviders = [${registrations.join(\",\\n\")}];\n\nfunction wrapWithIntegrationProviders(element) {\n  let wrapped = element;\n  for (let index = integrationProviders.length - 1; index >= 0; index--) {\n    const provider = integrationProviders[index];\n    if (!provider.Component) {\n      throw new Error(\"Integration provider \" + provider.name + \" did not export its configured component.\");\n    }\n    wrapped = React.createElement(provider.Component, provider.props || {}, wrapped);\n  }\n  return wrapped;\n}`,\n  };\n}\n\nexport function createFarmIntegrationProviderModuleKey(component: {\n  module: string;\n  export?: string;\n}): string {\n  return `${component.module}\\0${component.export || \"default\"}`;\n}\n\nexport function generateFarmIntegrationProviderServerModules(\n  providers: FarmIntegrationProvider[],\n  root: string,\n): { imports: string; entries: string; hasClerkProvider: boolean } {\n  const imports: string[] = [];\n  const entries: string[] = [];\n\n  providers.forEach((provider, index) => {\n    if (!isFarmIntegrationProviderComponentReference(provider.component)) return;\n    const namespace = `FarmServerIntegrationProviderModule${index}`;\n    imports.push(\n      `import * as ${namespace} from ${JSON.stringify(resolveProviderModule(provider.component.module, root))};`,\n    );\n    entries.push(\n      `[${JSON.stringify(createFarmIntegrationProviderModuleKey(provider.component))}, ${namespace}[${JSON.stringify(provider.component.export || \"default\")}]]`,\n    );\n  });\n\n  return {\n    imports: imports.join(\"\\n\"),\n    entries: entries.join(\",\\n\"),\n    hasClerkProvider: providers.some(\n      (provider) => provider.type === \"clerk\" && !provider.component,\n    ),\n  };\n}\n\nfunction resolveProviderModule(moduleId: string, root: string): string {\n  if (!moduleId.startsWith(\".\")) return moduleId;\n  return toViteModuleId(path.resolve(root, moduleId), root);\n}\n","import { isFarmNotFoundError } from \"../navigation-errors\";\n\nexport interface FarmPageDataFailure {\n  status: number;\n  payload: {\n    error: string;\n    message: string;\n    code?: string;\n  };\n}\n\n/**\n * Preserve expected route outcomes when a page-data render fails. Internal\n * navigation must report the same HTTP class as a full document render so a\n * missing resource never masquerades as a framework crash.\n */\nexport function resolveFarmPageDataFailure(error: unknown): FarmPageDataFailure {\n  if (isFarmNotFoundError(error)) {\n    return {\n      status: 404,\n      payload: {\n        error: \"Route not found\",\n        message: \"The requested route did not resolve to a resource.\",\n        code: \"FARM_NOT_FOUND\",\n      },\n    };\n  }\n\n  if (error instanceof Response) {\n    return {\n      status: error.status || 500,\n      payload: {\n        error: error.statusText || \"Page data request failed\",\n        message: error.statusText || `The route returned HTTP ${error.status || 500}.`,\n      },\n    };\n  }\n\n  return {\n    status: 500,\n    payload: {\n      error: \"Failed to load page data\",\n      message: error instanceof Error ? error.message : \"Unknown error\",\n    },\n  };\n}\n","import type { FarmPlugin, FarmPluginContext } from \"../plugin\";\nimport type { RewriteConfig } from \"../config\";\nimport type { FarmRequest, FarmResponse } from \"../types\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { resolveFarmRequestURL } from \"../server/request\";\nimport {\n  compileConfigRoutePattern,\n  interpolateConfigRouteDestination,\n  localizeConfigRouteDestination,\n  resolveConfigRoutePathname,\n} from \"./route-pattern\";\n\nexport const FARM_CONFIG_REWRITES_PLUGIN_NAME = \"farm:rewrites\";\n\nexport function createRewritesPlugin(\n  rewrites: RewriteConfig[],\n  {\n    beforeRequest: overrideBeforeRequest,\n    afterResponse: overrideAfterResponse,\n    i18n,\n  }: {\n    beforeRequest?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n    afterResponse?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n    i18n?: ResolvedFarmI18nConfig;\n  } = {},\n): FarmPlugin {\n  const compiledRewrites = rewrites.map((rewrite) => ({\n    rewrite,\n    pattern: compileConfigRoutePattern(rewrite.source),\n  }));\n\n  return {\n    name: FARM_CONFIG_REWRITES_PLUGIN_NAME,\n    enforce: \"pre\",\n\n    async beforeRequest(req, res, context) {\n      if (overrideBeforeRequest) {\n        await overrideBeforeRequest(req, res, context);\n      }\n      const url = resolveFarmRequestURL(req);\n      const routePath = resolveConfigRoutePathname(url.pathname, i18n);\n      const pathname = routePath.pathname;\n\n      for (const { rewrite, pattern } of compiledRewrites) {\n        const match = pathname.match(pattern.regex);\n        if (match) {\n          const newPath = localizeConfigRouteDestination(\n            interpolateConfigRouteDestination(rewrite.destination, match, pattern.tokens),\n            routePath.locale,\n            i18n,\n          );\n          const destinationUrl = new URL(newPath, url);\n          if (!destinationUrl.search && url.search) {\n            destinationUrl.search = url.search;\n          }\n          req.url =\n            destinationUrl.origin === url.origin\n              ? destinationUrl.pathname + destinationUrl.search\n              : destinationUrl.href;\n          break;\n        }\n      }\n    },\n\n    async afterResponse(req, res, context) {\n      if (overrideAfterResponse) {\n        await overrideAfterResponse(req, res, context);\n      }\n    },\n  };\n}\n","import { logger } from \"../utils\";\n\ninterface OpenAPIDevStatusLogger {\n  success(message: string): void;\n  warn(message: string): void;\n}\n\nexport function reportOpenAPIDevGenerationResult(\n  spec: unknown,\n  output: OpenAPIDevStatusLogger = logger,\n): void {\n  if (spec) {\n    output.success(\"✅ OpenAPI documentation enabled\");\n    return;\n  }\n\n  output.warn(\"OpenAPI documentation is enabled, but its specification failed to generate.\");\n}\n","export const FARM_NAVIGATION_HEAD_SELECTOR = [\n  \"meta[name]\",\n  \"meta[property]\",\n  \"meta[http-equiv]\",\n  \"meta[charset]\",\n  \"meta[itemprop]\",\n  'link[rel~=\"author\"]',\n  'link[rel~=\"canonical\"]',\n  'link[rel~=\"alternate\"]',\n  'link[rel~=\"icon\"]',\n  'link[rel~=\"apple-touch-icon\"]',\n  'link[rel~=\"manifest\"]',\n  'link[rel~=\"search\"]',\n  'link[rel~=\"next\"]',\n  'link[rel~=\"prev\"]',\n  'link[rel~=\"publisher\"]',\n  'link[rel~=\"license\"]',\n  'link[rel~=\"help\"]',\n  'link[rel~=\"me\"]',\n  'link[rel~=\"pingback\"]',\n  'link[rel~=\"privacy-policy\"]',\n  'link[rel~=\"terms-of-service\"]',\n].join(\",\");\n\nexport function reconcileFarmDocumentHead(nextDocument: Document): void {\n  const nextTitle = nextDocument.querySelector(\"title\");\n  document.title = nextTitle?.textContent || \"\";\n\n  document.head.querySelectorAll(FARM_NAVIGATION_HEAD_SELECTOR).forEach((node) => node.remove());\n  nextDocument.head\n    .querySelectorAll(FARM_NAVIGATION_HEAD_SELECTOR)\n    .forEach((node) => document.head.appendChild(document.importNode(node, true)));\n}\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, readdirSync, realpathSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport const FARM_DOCS_LAST_MODIFIED_MANIFEST = \".farm-docs-last-modified.json\";\n\nexport interface FarmDocsLastModifiedManifest {\n  version: 1;\n  pages: Record<string, string>;\n}\n\nexport interface CreateFarmDocsLastModifiedManifestOptions {\n  fallback?: \"mtime\" | \"now\";\n  now?: Date;\n}\n\nconst COMMIT_MARKER = \"__FARM_DOCS_COMMIT__\";\nconst DOCS_FILE_EXTENSIONS = new Set([\".md\", \".mdx\"]);\nconst manifestCache = new Map<\n  string,\n  {\n    signature: string;\n    manifest: FarmDocsLastModifiedManifest;\n  }\n>();\n\nfunction normalizeRelativePath(value: string): string {\n  return value.replace(/\\\\/g, \"/\").replace(/^\\.\\/+/, \"\");\n}\n\nfunction resolveExistingPath(filePath: string): string {\n  try {\n    return realpathSync(filePath);\n  } catch {\n    return path.resolve(filePath);\n  }\n}\n\nfunction isDocsSourceFile(filePath: string): boolean {\n  return DOCS_FILE_EXTENSIONS.has(path.extname(filePath).toLowerCase());\n}\n\nfunction discoverDocsSourceFiles(contentDir: string): string[] {\n  const files: string[] = [];\n\n  const visit = (dir: string) => {\n    for (const entry of readdirSync(dir, { withFileTypes: true }).sort((a, b) =>\n      a.name.localeCompare(b.name),\n    )) {\n      if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n\n      const absolutePath = path.join(dir, entry.name);\n      if (entry.isDirectory()) {\n        visit(absolutePath);\n      } else if (entry.isFile() && isDocsSourceFile(absolutePath)) {\n        files.push(absolutePath);\n      }\n    }\n  };\n\n  if (existsSync(contentDir)) visit(contentDir);\n  return files;\n}\n\nfunction getGitLastModifiedDates(contentDir: string): Record<string, string> {\n  try {\n    const gitRoot = execFileSync(\"git\", [\"-C\", contentDir, \"rev-parse\", \"--show-toplevel\"], {\n      encoding: \"utf8\",\n      stdio: [\"ignore\", \"pipe\", \"ignore\"],\n    }).trim();\n    if (!gitRoot) return {};\n\n    const contentPathspec = normalizeRelativePath(path.relative(gitRoot, contentDir)) || \".\";\n    const contentPrefix = contentPathspec === \".\" ? \"\" : `${contentPathspec}/`;\n    const history = execFileSync(\n      \"git\",\n      [\n        \"-C\",\n        gitRoot,\n        \"-c\",\n        \"core.quotePath=false\",\n        \"log\",\n        `--format=${COMMIT_MARKER}%cI`,\n        \"--name-only\",\n        \"--\",\n        contentPathspec,\n      ],\n      {\n        encoding: \"utf8\",\n        stdio: [\"ignore\", \"pipe\", \"ignore\"],\n        maxBuffer: 32 * 1024 * 1024,\n      },\n    );\n\n    const pages: Record<string, string> = {};\n    let commitDate: string | undefined;\n\n    for (const rawLine of history.split(/\\r?\\n/)) {\n      const line = normalizeRelativePath(rawLine.trim());\n      if (!line) continue;\n\n      if (line.startsWith(COMMIT_MARKER)) {\n        commitDate = line.slice(COMMIT_MARKER.length);\n        continue;\n      }\n      if (!commitDate || (contentPrefix && !line.startsWith(contentPrefix))) continue;\n\n      const relativePath = contentPrefix ? line.slice(contentPrefix.length) : line;\n      if (isDocsSourceFile(relativePath) && !pages[relativePath]) {\n        pages[relativePath] = commitDate;\n      }\n    }\n\n    return pages;\n  } catch {\n    return {};\n  }\n}\n\nfunction readManifest(contentDir: string): FarmDocsLastModifiedManifest | null {\n  const manifestPath = path.join(contentDir, FARM_DOCS_LAST_MODIFIED_MANIFEST);\n  if (!existsSync(manifestPath)) return null;\n\n  try {\n    const parsed = JSON.parse(\n      readFileSync(manifestPath, \"utf8\"),\n    ) as Partial<FarmDocsLastModifiedManifest>;\n    if (parsed.version !== 1 || !parsed.pages || typeof parsed.pages !== \"object\") return null;\n\n    const pages = Object.fromEntries(\n      Object.entries(parsed.pages).filter(\n        (entry): entry is [string, string] => typeof entry[1] === \"string\" && entry[1].length > 0,\n      ),\n    );\n    return { version: 1, pages };\n  } catch {\n    return null;\n  }\n}\n\nexport function createFarmDocsLastModifiedManifest(\n  contentDir: string,\n  options: CreateFarmDocsLastModifiedManifestOptions = {},\n): FarmDocsLastModifiedManifest {\n  const resolvedContentDir = resolveExistingPath(contentDir);\n  const gitDates = getGitLastModifiedDates(resolvedContentDir);\n  const fallbackDate = (options.now ?? new Date()).toISOString();\n  const pages: Record<string, string> = {};\n\n  for (const sourcePath of discoverDocsSourceFiles(resolvedContentDir)) {\n    const relativePath = normalizeRelativePath(path.relative(resolvedContentDir, sourcePath));\n    pages[relativePath] =\n      gitDates[relativePath] ||\n      (options.fallback === \"now\" ? fallbackDate : statSync(sourcePath).mtime.toISOString());\n  }\n\n  return { version: 1, pages };\n}\n\nfunction getLastModifiedManifest(contentDir: string): FarmDocsLastModifiedManifest {\n  const resolvedContentDir = resolveExistingPath(contentDir);\n  const manifestPath = path.join(resolvedContentDir, FARM_DOCS_LAST_MODIFIED_MANIFEST);\n  const manifestStat = existsSync(manifestPath) ? statSync(manifestPath) : null;\n  const signature = manifestStat\n    ? `file:${manifestStat.mtimeMs}:${manifestStat.size}`\n    : \"generated\";\n  const cached = manifestCache.get(resolvedContentDir);\n  if (cached?.signature === signature) return cached.manifest;\n\n  const manifest =\n    readManifest(resolvedContentDir) ?? createFarmDocsLastModifiedManifest(resolvedContentDir);\n  manifestCache.set(resolvedContentDir, { signature, manifest });\n  return manifest;\n}\n\nexport function resolveFarmDocsPageLastModified(\n  contentDir: string,\n  sourcePath: string,\n  frontmatter: Record<string, string>,\n): string {\n  const configured =\n    frontmatter.lastModified ||\n    frontmatter.lastmod ||\n    frontmatter.lastUpdated ||\n    frontmatter.updatedAt;\n  if (configured) return configured;\n\n  const resolvedContentDir = resolveExistingPath(contentDir);\n  const resolvedSourcePath = resolveExistingPath(sourcePath);\n  const relativePath = normalizeRelativePath(path.relative(resolvedContentDir, resolvedSourcePath));\n  const isInsideContentDir =\n    relativePath !== \"..\" && !relativePath.startsWith(\"../\") && !path.isAbsolute(relativePath);\n\n  if (isInsideContentDir) {\n    const generated = getLastModifiedManifest(resolvedContentDir).pages[relativePath];\n    if (generated) return generated;\n  }\n\n  return statSync(resolvedSourcePath).mtime.toISOString();\n}\n","import { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport type { FarmDocsResolvedConfig } from \"./types\";\n\nexport function isFarmDocsSearchEnabled(docs: FarmDocsResolvedConfig | undefined): boolean {\n  if (!docs?.enabled) return false;\n\n  const search = docs.config.search;\n  if (search === false) return false;\n  return !(search && typeof search === \"object\" && search.enabled === false);\n}\n\nexport function resolveFarmDocsSearchClientModule(root: string): string | undefined {\n  try {\n    const requireFromApp = createRequire(path.join(path.resolve(root), \"package.json\"));\n    const themeEntry = requireFromApp.resolve(\"@farming-labs/theme\");\n    const commandSearchModule = path.join(path.dirname(themeEntry), \"docs-command-search.mjs\");\n    if (existsSync(commandSearchModule)) return commandSearchModule;\n  } catch {\n    // The public package entry remains a compatible fallback.\n  }\n\n  return undefined;\n}\n\nexport function generateFarmDocsSearchBootstrapRuntime(): string {\n  return `(()=>{if(window.__farmDocsSearchBootstrap)return;window.__farmDocsSearchBootstrap=true;const queue=(trigger,event)=>{if(window.__FARM_DOCS_SEARCH_BRIDGE_ACTIVE__)return;event.preventDefault();event.stopPropagation();event.stopImmediatePropagation();window.__FARM_DOCS_SEARCH_PENDING__=trigger;window.__FARM_MOUNT_DOCS_SEARCH__?.()};document.addEventListener(\"click\",(event)=>{const target=event.target instanceof Element?event.target.closest(\"[data-search-full]\"):null;if(target)queue(\"button\",event)},true);document.addEventListener(\"keydown\",(event)=>{if((event.metaKey||event.ctrlKey)&&event.key.toLowerCase()===\"k\")queue(\"keyboard\",event)},true)})();`;\n}\n\nexport function generateFarmDocsSearchClientRuntime(enabled: boolean, moduleId?: string): string {\n  if (!enabled || !moduleId) {\n    return `\nfunction isFarmDocsSearchPage() {\n  return false;\n}\n\nasync function mountFarmDocsSearch() {\n  return false;\n}\n`;\n  }\n\n  return `\nlet farmDocsSearchRoot = null;\nlet farmDocsSearchContainer = null;\nlet farmDocsSearchModulePromise = null;\nlet farmDocsSearchPendingTrigger = window.__FARM_DOCS_SEARCH_PENDING__ === 'keyboard'\n  ? 'keyboard'\n  : window.__FARM_DOCS_SEARCH_PENDING__\n    ? 'button'\n    : null;\nlet farmDocsSearchReady = false;\n\nfunction isFarmDocsSearchPage() {\n  return document.querySelector('[data-farm-docs-search-root]') instanceof HTMLElement;\n}\n\nfunction replayFarmDocsSearchOpen() {\n  const pendingTrigger = farmDocsSearchPendingTrigger;\n  farmDocsSearchPendingTrigger = null;\n  window.__FARM_DOCS_SEARCH_PENDING__ = null;\n  if (!pendingTrigger) return;\n\n  queueMicrotask(() => {\n    if (pendingTrigger === 'keyboard') {\n      document.dispatchEvent(\n        new KeyboardEvent('keydown', {\n          key: 'k',\n          metaKey: true,\n          bubbles: true,\n          cancelable: true,\n        }),\n      );\n    } else {\n      const trigger = document.querySelector('[data-search-full]');\n      if (trigger instanceof HTMLElement) trigger.click();\n    }\n  });\n}\n\nfunction FarmDocsSearchBridge({ component, api }) {\n  React.useEffect(() => {\n    farmDocsSearchReady = true;\n    replayFarmDocsSearchOpen();\n    return () => {\n      farmDocsSearchReady = false;\n    };\n  }, []);\n\n  return React.createElement(component, { api });\n}\n\nfunction queueFarmDocsSearchOpen(trigger, event) {\n  if (farmDocsSearchReady) return;\n  event.preventDefault();\n  event.stopPropagation();\n  event.stopImmediatePropagation();\n  farmDocsSearchPendingTrigger = trigger;\n  window.__FARM_DOCS_SEARCH_PENDING__ = trigger;\n  void mountFarmDocsSearch();\n}\n\ndocument.addEventListener(\n  'click',\n  (event) => {\n    const target = event.target instanceof Element\n      ? event.target.closest('[data-search-full]')\n      : null;\n    if (target) queueFarmDocsSearchOpen('button', event);\n  },\n  true,\n);\n\ndocument.addEventListener(\n  'keydown',\n  (event) => {\n    if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') {\n      queueFarmDocsSearchOpen('keyboard', event);\n    }\n  },\n  true,\n);\n\nwindow.__FARM_DOCS_SEARCH_BRIDGE_ACTIVE__ = true;\n\nasync function mountFarmDocsSearch() {\n  const container = document.querySelector('[data-farm-docs-search-root]');\n  if (!(container instanceof HTMLElement)) return false;\n  if (farmDocsSearchContainer === container && farmDocsSearchRoot) return true;\n\n  try {\n    farmDocsSearchModulePromise ||= import(${JSON.stringify(moduleId)});\n    const { DocsCommandSearch } = await farmDocsSearchModulePromise;\n    if (!container.isConnected) return false;\n\n    if (farmDocsSearchRoot) {\n      farmDocsSearchReady = false;\n      try {\n        farmDocsSearchRoot.unmount();\n      } catch {}\n    }\n\n    farmDocsSearchContainer = container;\n    farmDocsSearchRoot = createRoot(container);\n    farmDocsSearchRoot.render(\n      React.createElement(FarmDocsSearchBridge, {\n        component: DocsCommandSearch,\n        api: container.dataset.api || '/api/docs',\n      }),\n    );\n    return true;\n  } catch (error) {\n    farmDocsSearchModulePromise = null;\n    console.error('[Farm.js] Could not load docs search:', error);\n    return false;\n  }\n}\n\nwindow.__FARM_MOUNT_DOCS_SEARCH__ = mountFarmDocsSearch;\n`;\n}\n","import { createHash } from \"node:crypto\";\nimport type { LoadedFarmDocsPage } from \"./handler\";\nimport type {\n  FarmDocsResolvedConfig,\n  FarmDocsSocialImageConfig,\n  FarmDocsSocialImageFonts,\n} from \"./types\";\n\nexport const FARM_DOCS_SOCIAL_IMAGE_WIDTH = 1200;\nexport const FARM_DOCS_SOCIAL_IMAGE_HEIGHT = 630;\n\nexport interface FarmDocsSocialImageDescriptor {\n  title: string;\n  description: string;\n  section: string;\n  siteName: string;\n  brand: string;\n  pageHref: string;\n  pageUrl: string;\n  imagePath: string;\n  imageUrl: string;\n  imageAlt: string;\n  illustration: FarmDocsSocialImageIllustration;\n  fonts?: FarmDocsSocialImageFonts;\n  hash: string;\n}\n\nexport type FarmDocsSocialImageIllustration =\n  | \"auth\"\n  | \"cache\"\n  | \"cli\"\n  | \"integrations\"\n  | \"project\"\n  | \"routing\"\n  | \"runtime\";\n\nconst FARM_DOCS_SOCIAL_IMAGE_VERSION = 3;\n\nfunction normalizeEntry(entry: string): string {\n  if (!entry || entry === \"/\") return \"\";\n  return `/${entry.replace(/^\\/+|\\/+$/g, \"\")}`;\n}\n\nfunction encodeSlugPath(slug: string): string {\n  return slug\n    .split(\"/\")\n    .filter(Boolean)\n    .map((segment) => encodeURIComponent(segment))\n    .join(\"/\");\n}\n\nfunction getSocialImageConfig(docs: FarmDocsResolvedConfig): FarmDocsSocialImageConfig | undefined {\n  return typeof docs.config.socialImage === \"object\" && docs.config.socialImage\n    ? docs.config.socialImage\n    : undefined;\n}\n\nfunction getNavTitle(docs: FarmDocsResolvedConfig): string {\n  if (typeof docs.config.nav !== \"object\" || !docs.config.nav || !(\"title\" in docs.config.nav)) {\n    return \"Farm.js\";\n  }\n  return String((docs.config.nav as { title?: unknown }).title || \"Farm.js\");\n}\n\nfunction isFalse(value: string | undefined): boolean {\n  return value ? /^(false|no|none|off|disabled)$/i.test(value.trim()) : false;\n}\n\nfunction isExternalOrRootPath(value: string): boolean {\n  return /^(https?:)?\\/\\//i.test(value) || value.startsWith(\"/\");\n}\n\nexport function isFarmDocsSocialImageEnabled(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n): boolean {\n  if (docs.config.socialImage === false || getSocialImageConfig(docs)?.enabled === false) {\n    return false;\n  }\n  return !isFalse(page.frontmatter.socialImage);\n}\n\nexport function getFarmDocsCustomSocialImage(page: LoadedFarmDocsPage): string | undefined {\n  const value =\n    page.frontmatter.socialImage || page.frontmatter.openGraphImage || page.frontmatter.ogImage;\n  return value && !isFalse(value) && isExternalOrRootPath(value) ? value : undefined;\n}\n\nfunction resolveIllustration(page: LoadedFarmDocsPage): FarmDocsSocialImageIllustration {\n  const explicit = page.frontmatter.socialIllustration?.toLowerCase();\n  if (\n    explicit === \"auth\" ||\n    explicit === \"cache\" ||\n    explicit === \"cli\" ||\n    explicit === \"integrations\" ||\n    explicit === \"project\" ||\n    explicit === \"routing\" ||\n    explicit === \"runtime\"\n  ) {\n    return explicit;\n  }\n\n  const source = `${page.slug} ${page.title} ${page.section || \"\"}`.toLowerCase();\n  if (/auth|session|security|csrf/.test(source)) return \"auth\";\n  if (/cache|ppr|render|static|revalid|stream/.test(source)) return \"cache\";\n  if (/integration|stripe|prisma|better.auth|email|job|workflow/.test(source)) {\n    return \"integrations\";\n  }\n  if (/cli|test|deploy|preview|upgrade|migration|install/.test(source)) return \"cli\";\n  if (/project|structure|config|environment|markdown|docs.engine/.test(source)) {\n    return \"project\";\n  }\n  if (/rout|endpoint|middleware|navigation|server.function|server.action|api/.test(source)) {\n    return \"routing\";\n  }\n  return \"runtime\";\n}\n\nfunction createHashValue(value: unknown): string {\n  return createHash(\"sha256\").update(JSON.stringify(value)).digest(\"hex\").slice(0, 16);\n}\n\nfunction resolveBaseUrl(requestUrl: URL, config: FarmDocsSocialImageConfig | undefined): URL {\n  return config?.baseUrl ? new URL(config.baseUrl) : new URL(requestUrl.origin);\n}\n\nexport function createFarmDocsSocialImageDescriptor(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n  requestUrl: URL,\n): FarmDocsSocialImageDescriptor {\n  const config = getSocialImageConfig(docs);\n  const siteName = config?.siteName || getNavTitle(docs);\n  const brand = config?.brand || siteName;\n  const title = page.frontmatter.socialTitle || page.title;\n  const description =\n    page.frontmatter.socialDescription ||\n    page.description ||\n    docs.config.metadata?.description ||\n    `Documentation for ${siteName}`;\n  const section = page.frontmatter.section || page.section || \"Documentation\";\n  const illustration = resolveIllustration(page);\n  const entry = normalizeEntry(docs.entry);\n  const slugPath = encodeSlugPath(page.slug) || \"index\";\n  const imagePath = `${entry}/_social/${slugPath}/opengraph-image.svg`;\n  const baseUrl = resolveBaseUrl(requestUrl, config);\n  const pageUrl = new URL(page.href, baseUrl).href;\n  const imageAlt = `${title} — ${siteName} documentation`;\n  const hash = createHashValue({\n    version: FARM_DOCS_SOCIAL_IMAGE_VERSION,\n    title,\n    description,\n    section,\n    siteName,\n    brand,\n    pageHref: page.href,\n    illustration,\n    fonts: config?.fonts,\n  });\n\n  return {\n    title,\n    description,\n    section,\n    siteName,\n    brand,\n    pageHref: page.href,\n    pageUrl,\n    imagePath,\n    imageUrl: new URL(`${imagePath}?v=${hash}`, baseUrl).href,\n    imageAlt,\n    illustration,\n    fonts: config?.fonts,\n    hash,\n  };\n}\n\nexport function getFarmDocsSocialImageSlug(\n  docs: FarmDocsResolvedConfig,\n  requestUrl: URL,\n): string | null {\n  const entry = normalizeEntry(docs.entry);\n  const prefix = `${entry}/_social/`;\n  const suffix = \"/opengraph-image.svg\";\n  if (!requestUrl.pathname.startsWith(prefix) || !requestUrl.pathname.endsWith(suffix)) {\n    return null;\n  }\n\n  const rawSlug = requestUrl.pathname.slice(prefix.length, -suffix.length);\n  if (!rawSlug) return null;\n  try {\n    const slug = rawSlug\n      .split(\"/\")\n      .map((segment) => decodeURIComponent(segment))\n      .join(\"/\");\n    if (slug.split(\"/\").some((segment) => !segment || segment === \"..\" || segment === \".\")) {\n      return null;\n    }\n    return slug === \"index\" ? \"\" : slug;\n  } catch {\n    return null;\n  }\n}\n\nfunction escapeXml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&apos;\");\n}\n\nfunction truncate(value: string, length: number): string {\n  if (value.length <= length) return value;\n  return `${value.slice(0, Math.max(0, length - 1)).trimEnd()}…`;\n}\n\nfunction wrapText(value: string, maxCharacters: number, maxLines: number): string[] {\n  const words = value.trim().split(/\\s+/).filter(Boolean);\n  const lines: string[] = [];\n  let current = \"\";\n  let consumedWords = 0;\n\n  for (const word of words) {\n    const candidate = current ? `${current} ${word}` : word;\n    if (candidate.length <= maxCharacters || !current) {\n      current = candidate;\n      consumedWords += 1;\n      continue;\n    }\n    lines.push(current);\n    if (lines.length === maxLines) break;\n    current = word;\n    consumedWords += 1;\n  }\n\n  if (current && lines.length < maxLines) lines.push(current);\n  if (consumedWords < words.length && lines.length) {\n    lines[lines.length - 1] = truncate(`${lines[lines.length - 1]}…`, maxCharacters);\n  }\n  return lines;\n}\n\nfunction renderTextLines(\n  lines: string[],\n  x: number,\n  y: number,\n  lineHeight: number,\n  attributes: string,\n): string {\n  return lines\n    .map(\n      (line, index) =>\n        `<text x=\"${x}\" y=\"${y + index * lineHeight}\" ${attributes}>${escapeXml(line)}</text>`,\n    )\n    .join(\"\");\n}\n\nfunction renderEmbeddedFont(name: string, source: string | undefined, weight: string): string {\n  if (!source) return \"\";\n  return `@font-face{font-family:\"${name}\";src:url(\"${escapeXml(source)}\") format(\"woff2\");font-style:normal;font-weight:${weight};font-display:block;}`;\n}\n\nfunction renderArrow(x1: number, y: number, x2: number, color = \"#8b8b8b\"): string {\n  return `<path d=\"M${x1} ${y}H${x2 - 9}\" fill=\"none\" stroke=\"${color}\"/><path d=\"m${x2 - 9} ${y - 5} 9 5-9 5\" fill=\"none\" stroke=\"${color}\"/>`;\n}\n\nfunction renderPanelHeader(label: string, status: string): string {\n  return `<text x=\"819\" y=\"171\" class=\"label\">${escapeXml(label)}</text><text x=\"1134\" y=\"171\" class=\"label bright\" text-anchor=\"end\">${escapeXml(status)}</text>`;\n}\n\nfunction renderRoutingIllustration(): string {\n  return `${renderPanelHeader(\"ROUTE BLUEPRINT\", \"TYPED\")}\n    <rect x=\"819\" y=\"296\" width=\"92\" height=\"54\" fill=\"#a3a3a3\"/>\n    <text x=\"832\" y=\"327\" class=\"diagram-title ink\">src/app</text>\n    <path d=\"M911 323h41M952 232v181M952 232h44M952 323h44M952 413h44\" fill=\"none\" stroke=\"#696969\"/>\n    <rect x=\"996\" y=\"205\" width=\"138\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#414141\"/>\n    <text x=\"1010\" y=\"228\" class=\"diagram-title\">/</text><text x=\"1010\" y=\"246\" class=\"micro\">STATIC</text>\n    <rect x=\"996\" y=\"296\" width=\"138\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#414141\"/>\n    <text x=\"1010\" y=\"319\" class=\"diagram-title\">/blog/:slug</text><text x=\"1010\" y=\"337\" class=\"micro\">DYNAMIC</text>\n    <rect x=\"996\" y=\"386\" width=\"138\" height=\"55\" fill=\"#f0f0f0\"/>\n    <text x=\"1010\" y=\"410\" class=\"diagram-title ink\">/docs/:path*</text><text x=\"1010\" y=\"428\" class=\"micro ink-muted\">CATCH-ALL</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">FILE ROUTES</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">TYPES INCLUDED</text>`;\n}\n\nfunction renderAuthIllustration(): string {\n  return `${renderPanelHeader(\"REQUEST GUARD\", \"SERVER VERIFIED\")}\n    <rect x=\"819\" y=\"269\" width=\"86\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#454545\"/>\n    <text x=\"837\" y=\"292\" class=\"micro bright\">REQUEST</text><text x=\"837\" y=\"310\" class=\"diagram-title\">GET /app</text>\n    ${renderArrow(905, 296, 943)}\n    <rect x=\"943\" y=\"224\" width=\"104\" height=\"118\" fill=\"#f0f0f0\"/>\n    <path d=\"M974 271v-12a21 21 0 0 1 42 0v12M968 271h54v45h-54z\" fill=\"#050505\"/>\n    <circle cx=\"995\" cy=\"292\" r=\"4\" fill=\"#f0f0f0\"/><path d=\"M995 296v8\" stroke=\"#f0f0f0\" stroke-width=\"3\"/>\n    <text x=\"995\" y=\"332\" class=\"micro ink\" text-anchor=\"middle\">auth()</text>\n    ${renderArrow(1047, 296, 1071)}\n    <rect x=\"1071\" y=\"269\" width=\"63\" height=\"54\" fill=\"#0a0a0a\" stroke=\"#454545\"/>\n    <text x=\"1082\" y=\"292\" class=\"micro bright\">ALLOW</text><text x=\"1082\" y=\"310\" class=\"micro\">/app</text>\n    <rect x=\"819\" y=\"372\" width=\"315\" height=\"38\" fill=\"#090909\" stroke=\"#3d3d3d\"/>\n    <rect x=\"832\" y=\"385\" width=\"11\" height=\"11\" fill=\"#a3a3a3\"/>\n    <text x=\"856\" y=\"395\" class=\"code\">session.user / verified</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">SESSION TYPED</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">CSRF PROTECTED</text>`;\n}\n\nfunction renderCacheIllustration(): string {\n  return `${renderPanelHeader(\"PAGE / PRODUCT\", \"CACHE + PPR\")}\n    <rect x=\"819\" y=\"204\" width=\"315\" height=\"54\" fill=\"#f0f0f0\"/>\n    <text x=\"836\" y=\"235\" class=\"diagram-title ink\">STATIC SHELL</text><text x=\"1116\" y=\"235\" class=\"micro ink-muted\" text-anchor=\"end\">BUILD</text>\n    <rect x=\"819\" y=\"271\" width=\"198\" height=\"76\" fill=\"#a3a3a3\"/>\n    <text x=\"836\" y=\"301\" class=\"diagram-title ink\">CACHED DATA</text><text x=\"836\" y=\"326\" class=\"micro ink-muted\">tag: products</text>\n    <rect x=\"1029\" y=\"271\" width=\"105\" height=\"76\" fill=\"#0a0a0a\" stroke=\"#555\"/>\n    <text x=\"1045\" y=\"301\" class=\"diagram-title\">LIVE</text><text x=\"1045\" y=\"326\" class=\"micro\">stream</text>\n    <path d=\"M1081 347v43m-8-9 8 9 8-9\" fill=\"none\" stroke=\"#d4d4d4\"/>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">STATIC FIRST</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">DYNAMIC WHERE NEEDED</text>`;\n}\n\nfunction renderIntegrationsIllustration(): string {\n  return `${renderPanelHeader(\"INTEGRATION GRAPH\", \"ONE PRODUCT\")}\n    <path d=\"M976 309H879V247M976 309H879v87M1030 309h93V247M1030 309h93v87\" fill=\"none\" stroke=\"#4a4a4a\"/>\n    <rect x=\"819\" y=\"214\" width=\"120\" height=\"57\" fill=\"#0a0a0a\" stroke=\"#4b4b4b\"/><text x=\"839\" y=\"247\" class=\"diagram-title\">BETTER AUTH</text>\n    <rect x=\"819\" y=\"368\" width=\"120\" height=\"57\" fill=\"#0a0a0a\" stroke=\"#4b4b4b\"/><text x=\"851\" y=\"401\" class=\"diagram-title\">PRISMA</text>\n    <rect x=\"1061\" y=\"214\" width=\"73\" height=\"57\" fill=\"#0a0a0a\" stroke=\"#4b4b4b\"/><text x=\"1077\" y=\"247\" class=\"diagram-title\">STRIPE</text>\n    <rect x=\"1061\" y=\"368\" width=\"73\" height=\"57\" fill=\"#a3a3a3\"/><text x=\"1075\" y=\"401\" class=\"diagram-title ink\">VERCEL</text>\n    <rect x=\"976\" y=\"277\" width=\"94\" height=\"64\" fill=\"#f0f0f0\"/>\n    <text x=\"994\" y=\"304\" class=\"diagram-title ink\">FARM.JS</text><text x=\"994\" y=\"324\" class=\"micro ink-muted\">CORE</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">BRING YOUR STACK</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">CONNECTED ONCE</text>`;\n}\n\nfunction renderCliIllustration(): string {\n  return `${renderPanelHeader(\"TERMINAL\", \"PRODUCTION OUTPUT\")}\n    <rect x=\"819\" y=\"203\" width=\"315\" height=\"213\" fill=\"#050505\" stroke=\"#555\"/>\n    <line x1=\"819\" y1=\"236\" x2=\"1134\" y2=\"236\" stroke=\"#555\"/>\n    <circle cx=\"837\" cy=\"220\" r=\"4\" fill=\"#5d5d5d\"/><circle cx=\"850\" cy=\"220\" r=\"4\" fill=\"#7a7a7a\"/><circle cx=\"863\" cy=\"220\" r=\"4\" fill=\"#a3a3a3\"/>\n    <text x=\"837\" y=\"273\" class=\"code bright\"><tspan fill=\"#7a7a7a\">$</tspan> farm build</text>\n    <rect x=\"837\" y=\"293\" width=\"11\" height=\"11\" fill=\"#a3a3a3\"/><path d=\"m839 298 3 3 6-7\" fill=\"none\" stroke=\"#050505\" stroke-width=\"1.5\"/>\n    <text x=\"861\" y=\"303\" class=\"code\">64 routes discovered</text>\n    <rect x=\"837\" y=\"320\" width=\"11\" height=\"11\" fill=\"#a3a3a3\"/><path d=\"m839 325 3 3 6-7\" fill=\"none\" stroke=\"#050505\" stroke-width=\"1.5\"/>\n    <text x=\"861\" y=\"330\" class=\"code\">client + server bundles</text>\n    <rect x=\"837\" y=\"355\" width=\"126\" height=\"30\" fill=\"#f0f0f0\"/><text x=\"853\" y=\"374\" class=\"micro ink\">BUILD COMPLETE</text>\n    <text x=\"1115\" y=\"374\" class=\"micro\" text-anchor=\"end\">/dist</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">REAL COMMANDS</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">842MS</text>`;\n}\n\nfunction renderProjectIllustration(): string {\n  return `${renderPanelHeader(\"PROJECT MAP\", \"CONVENTION TYPED\")}\n    <rect x=\"819\" y=\"202\" width=\"315\" height=\"216\" fill=\"#050505\" stroke=\"#555\"/>\n    <text x=\"837\" y=\"227\" class=\"diagram-title bright\">my-app/</text>\n    <path d=\"M847 243v143M847 259h23M847 293h23M847 327h23M847 361h23\" fill=\"none\" stroke=\"#666\"/>\n    <rect x=\"870\" y=\"243\" width=\"246\" height=\"33\" fill=\"#0a0a0a\" stroke=\"#444\"/><text x=\"886\" y=\"264\" class=\"code\">src/app</text><text x=\"1098\" y=\"264\" class=\"micro\" text-anchor=\"end\">ROUTES</text>\n    <rect x=\"870\" y=\"277\" width=\"246\" height=\"33\" fill=\"#f0f0f0\"/><text x=\"886\" y=\"298\" class=\"code ink\">src/app/page.tsx</text>\n    <rect x=\"870\" y=\"311\" width=\"246\" height=\"33\" fill=\"#0a0a0a\" stroke=\"#444\"/><text x=\"886\" y=\"332\" class=\"code\">src/app/api/users/route.ts</text><text x=\"1098\" y=\"332\" class=\"micro\" text-anchor=\"end\">API</text>\n    <rect x=\"870\" y=\"345\" width=\"246\" height=\"33\" fill=\"#0a0a0a\" stroke=\"#444\"/><text x=\"886\" y=\"366\" class=\"code\">farm.config.ts</text><text x=\"1098\" y=\"366\" class=\"micro\" text-anchor=\"end\">CONFIG</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">FILES BECOME FEATURES</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">ONE CONFIG</text>`;\n}\n\nfunction renderRuntimeIllustration(): string {\n  return `${renderPanelHeader(\"PRODUCT ARCHITECTURE\", \"FULL STACK\")}\n    <rect x=\"819\" y=\"211\" width=\"315\" height=\"55\" fill=\"#f0f0f0\"/>\n    <text x=\"836\" y=\"244\" class=\"diagram-title ink\">PRODUCT SURFACE</text><text x=\"1116\" y=\"244\" class=\"micro ink-muted\" text-anchor=\"end\">UI + ROUTES</text>\n    <path d=\"M976 266v20m0 61v20\" stroke=\"#727272\"/>\n    <rect x=\"855\" y=\"286\" width=\"242\" height=\"61\" fill=\"#a3a3a3\"/>\n    <text x=\"874\" y=\"314\" class=\"diagram-title ink\">APPLICATION CORE</text><text x=\"874\" y=\"334\" class=\"micro ink-muted\">APIS · MIDDLEWARE</text>\n    <rect x=\"819\" y=\"367\" width=\"315\" height=\"55\" fill=\"#4c4c4c\"/>\n    <text x=\"836\" y=\"400\" class=\"diagram-title bright\">CONNECTED STACK</text><text x=\"1116\" y=\"400\" class=\"micro\" text-anchor=\"end\">DATA · AUTH · DEPLOY</text>\n    <line x1=\"819\" y1=\"450\" x2=\"1134\" y2=\"450\" stroke=\"#343434\"/>\n    <text x=\"819\" y=\"475\" class=\"label bright\">ONE FRAMEWORK</text><text x=\"1134\" y=\"475\" class=\"label\" text-anchor=\"end\">ONE DEPLOYMENT MODEL</text>`;\n}\n\nfunction renderIllustration(type: FarmDocsSocialImageIllustration): string {\n  switch (type) {\n    case \"auth\":\n      return renderAuthIllustration();\n    case \"cache\":\n      return renderCacheIllustration();\n    case \"cli\":\n      return renderCliIllustration();\n    case \"integrations\":\n      return renderIntegrationsIllustration();\n    case \"project\":\n      return renderProjectIllustration();\n    case \"routing\":\n      return renderRoutingIllustration();\n    default:\n      return renderRuntimeIllustration();\n  }\n}\n\nexport function renderFarmDocsSocialImageSvg(descriptor: FarmDocsSocialImageDescriptor): string {\n  const titleLines = wrapText(descriptor.title, 22, 2);\n  const longestTitleLine = Math.max(...titleLines.map((line) => line.length));\n  const titleSize = titleLines.length === 1 ? (longestTitleLine > 17 ? 62 : 74) : 56;\n  const titleLineHeight = Math.round(titleSize * 0.98);\n  const titleY = titleLines.length === 1 ? 294 : 266;\n  const descriptionY = titleY + (titleLines.length - 1) * titleLineHeight + 59;\n  const descriptionLines = wrapText(descriptor.description, 68, 2);\n  const routeY = Math.max(418, descriptionY + descriptionLines.length * 29 + 24);\n  const section = truncate(descriptor.section.toUpperCase(), 27);\n  const route = truncate(descriptor.pageHref, 42);\n  const footerUrl = truncate(descriptor.pageUrl.replace(/^https?:\\/\\//, \"\"), 70);\n  const brand = truncate(descriptor.brand.toUpperCase(), 25);\n  const titleId = `farm-docs-og-${descriptor.hash}`;\n\n  return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"${FARM_DOCS_SOCIAL_IMAGE_WIDTH}\" height=\"${FARM_DOCS_SOCIAL_IMAGE_HEIGHT}\" viewBox=\"0 0 ${FARM_DOCS_SOCIAL_IMAGE_WIDTH} ${FARM_DOCS_SOCIAL_IMAGE_HEIGHT}\" role=\"img\" aria-labelledby=\"${titleId}-title ${titleId}-description\">\n  <title id=\"${titleId}-title\">${escapeXml(descriptor.imageAlt)}</title>\n  <desc id=\"${titleId}-description\">${escapeXml(descriptor.description)}</desc>\n  <metadata>${escapeXml(JSON.stringify({ generator: \"Farm.js docs\", page: descriptor.pageUrl, illustration: descriptor.illustration }))}</metadata>\n  <style type=\"text/css\">\n    ${renderEmbeddedFont(\"Farm Sans\", descriptor.fonts?.sans, \"100 900\")}\n    ${renderEmbeddedFont(\"Farm Mono\", descriptor.fonts?.mono, \"100 900\")}\n    ${renderEmbeddedFont(\"Farm Pixel\", descriptor.fonts?.display, \"400 700\")}\n    .sans{font-family:\"Farm Sans\",\"Arial\",sans-serif}.mono,.label,.code,.diagram-title,.micro{font-family:\"Farm Mono\",\"Menlo\",\"DejaVu Sans Mono\",monospace}.pixel{font-family:\"Farm Pixel\",\"Farm Mono\",monospace}.label{fill:#8b8b8b;font-size:10px;font-weight:600;letter-spacing:1.2px}.code{fill:#8b8b8b;font-size:11px}.diagram-title{fill:#e7e7e7;font-size:11px;font-weight:650}.micro{fill:#777;font-size:8px;letter-spacing:.45px}.bright{fill:#f5f5f4}.ink{fill:#050505}.ink-muted{fill:#4c4c4c}\n  </style>\n  <defs>\n    <pattern id=\"canvas-grid\" width=\"40\" height=\"40\" patternUnits=\"userSpaceOnUse\"><path d=\"M40 0H0V40\" fill=\"none\" stroke=\"#151515\"/></pattern>\n    <pattern id=\"diagonal\" width=\"12\" height=\"12\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(45)\"><line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"12\" stroke=\"#171717\" stroke-width=\"2\"/></pattern>\n    <clipPath id=\"frame-clip\"><rect x=\"28\" y=\"28\" width=\"1144\" height=\"574\"/></clipPath>\n  </defs>\n  <rect width=\"1200\" height=\"630\" fill=\"#050505\"/>\n  <rect width=\"1200\" height=\"630\" fill=\"url(#canvas-grid)\"/>\n  <g clip-path=\"url(#frame-clip)\">\n    <rect x=\"28\" y=\"28\" width=\"1144\" height=\"574\" fill=\"#020202\"/>\n    <rect x=\"782\" y=\"114\" width=\"390\" height=\"411\" fill=\"url(#diagonal)\"/>\n  </g>\n  <rect x=\"28.5\" y=\"28.5\" width=\"1143\" height=\"573\" fill=\"none\" stroke=\"#323232\"/>\n  <path d=\"M28 114.5h1144M28 525.5h1144M781.5 114v411\" fill=\"none\" stroke=\"#303030\"/>\n\n  <g transform=\"translate(71 51)\">\n    <rect width=\"11\" height=\"11\" rx=\"1\" fill=\"#f5f5f4\"/><rect x=\"15\" width=\"28\" height=\"11\" rx=\"1\" fill=\"#f5f5f4\"/>\n    <rect y=\"15\" width=\"11\" height=\"11\" rx=\"1\" fill=\"#9b9b9b\"/><rect x=\"15\" y=\"15\" width=\"28\" height=\"11\" rx=\"1\" fill=\"#9b9b9b\"/>\n    <rect y=\"30\" width=\"11\" height=\"11\" rx=\"1\" fill=\"#5f5f5f\"/><rect x=\"15\" y=\"30\" width=\"20\" height=\"11\" rx=\"1\" fill=\"#5f5f5f\"/>\n    <text x=\"61\" y=\"24\" class=\"mono bright\" font-size=\"24\" font-weight=\"550\">FARM<tspan fill=\"#777\">.JS</tspan></text>\n    <text x=\"61\" y=\"43\" class=\"label\">BY FARMING LABS</text>\n  </g>\n  <text x=\"1134\" y=\"72\" class=\"label\" text-anchor=\"end\">${escapeXml(brand)} · DOCUMENTATION</text>\n\n  <text x=\"71\" y=\"198\" class=\"mono bright\" font-size=\"13\" font-weight=\"650\">DOCS</text>\n  <line x1=\"117\" y1=\"193\" x2=\"155\" y2=\"193\" stroke=\"#696969\"/>\n  <text x=\"166\" y=\"198\" class=\"mono\" fill=\"#9b9b9b\" font-size=\"13\">${escapeXml(section)}</text>\n  ${renderTextLines(titleLines, 71, titleY, titleLineHeight, `class=\"pixel bright\" font-size=\"${titleSize}\" font-weight=\"500\" letter-spacing=\"-2.4\"`)}\n  ${renderTextLines(descriptionLines, 71, descriptionY, 29, 'class=\"sans\" fill=\"#a3a3a3\" font-size=\"20\" font-weight=\"430\" letter-spacing=\"-.3\"')}\n  <rect x=\"71\" y=\"${routeY}\" width=\"${Math.min(390, 56 + route.length * 8)}\" height=\"36\" fill=\"#050505\" stroke=\"#3c3c3c\"/>\n  <text x=\"85\" y=\"${routeY + 23}\" class=\"mono bright\" font-size=\"11\" font-weight=\"600\">GET</text>\n  <text x=\"119\" y=\"${routeY + 23}\" class=\"mono\" fill=\"#898989\" font-size=\"11\">${escapeXml(route)}</text>\n\n  ${renderIllustration(descriptor.illustration)}\n\n  <text x=\"71\" y=\"570\" class=\"mono bright\" font-size=\"13\" font-weight=\"550\">${escapeXml(footerUrl)}</text>\n  <text x=\"1134\" y=\"570\" class=\"mono\" fill=\"#9b9b9b\" font-size=\"12\" text-anchor=\"end\">FARM.JS DOCUMENTATION</text>\n  <path d=\"M20 20h10M20 20v10M1180 20h-10M1180 20v10M20 610h10M20 610v-10M1180 610h-10M1180 610v-10\" fill=\"none\" stroke=\"#9b9b9b\"/>\n</svg>`;\n}\n\nexport function renderFarmDocsSocialMetadata(\n  descriptor: FarmDocsSocialImageDescriptor,\n  customImage?: string,\n): string {\n  const imageUrl = customImage\n    ? new URL(customImage, descriptor.pageUrl).href\n    : descriptor.imageUrl;\n  const customExtension = customImage?.toLowerCase().split(/[?#]/, 1)[0];\n  const imageType = customExtension?.endsWith(\".webp\")\n    ? \"image/webp\"\n    : customExtension?.endsWith(\".png\")\n      ? \"image/png\"\n      : customExtension?.match(/\\.jpe?g$/)\n        ? \"image/jpeg\"\n        : \"image/svg+xml\";\n  const tag = (property: string, content: string, name = false) =>\n    `<meta ${name ? \"name\" : \"property\"}=\"${property}\" content=\"${escapeXml(content)}\">`;\n\n  return [\n    tag(\"og:type\", \"article\"),\n    tag(\"og:site_name\", descriptor.siteName),\n    tag(\"og:title\", descriptor.title),\n    tag(\"og:description\", descriptor.description),\n    tag(\"og:url\", descriptor.pageUrl),\n    tag(\"og:image\", imageUrl),\n    tag(\"og:image:type\", imageType),\n    ...(customImage\n      ? []\n      : [\n          tag(\"og:image:width\", String(FARM_DOCS_SOCIAL_IMAGE_WIDTH)),\n          tag(\"og:image:height\", String(FARM_DOCS_SOCIAL_IMAGE_HEIGHT)),\n        ]),\n    tag(\"og:image:alt\", descriptor.imageAlt),\n    tag(\"twitter:card\", \"summary_large_image\", true),\n    tag(\"twitter:title\", descriptor.title, true),\n    tag(\"twitter:description\", descriptor.description, true),\n    tag(\"twitter:image\", imageUrl, true),\n    tag(\"twitter:image:alt\", descriptor.imageAlt, true),\n  ].join(\"\\n  \");\n}\n","import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\nimport {\n  buildDocsAgentDiscoverySpec,\n  buildDocsSitemapManifest,\n  isDocsAgentDiscoveryRequest,\n  isDocsAgentsRequest,\n  isDocsSkillRequest,\n  renderDocsAgentsDocument,\n  renderDocsLlmsTxt,\n  renderDocsMarkdownDocument,\n  renderDocsRobotsTxt,\n  renderDocsSitemapMarkdown,\n  renderDocsSitemapXml,\n  renderDocsSkillDocument,\n  resolveDocsLlmsTxtFormat,\n  resolveDocsRobotsRequest,\n  resolveDocsSitemapRequest,\n  type DocsLlmsTxtPageInput,\n  type DocsMarkdownPage,\n  type DocsSitemapPageInput,\n} from \"@farming-labs/docs\";\nimport { marked, Renderer } from \"marked\";\nimport { highlight } from \"sugar-high\";\nimport { FARM_NAVIGATION_HEAD_SELECTOR } from \"../client/document-head\";\nimport { farmAcceptQuality } from \"../markdown\";\nimport type { FarmLayoutFonts } from \"../font\";\nimport { matchesFarmIfNoneMatch } from \"../server-http\";\nimport {\n  resolveFarmDocsFontAssets,\n  toFarmDocsPublicFontAssets,\n  type FarmDocsPublicFontAsset,\n} from \"./fonts\";\nimport { resolveFarmDocsPageLastModified } from \"./last-modified\";\nimport { generateFarmDocsSearchBootstrapRuntime, isFarmDocsSearchEnabled } from \"./search-client\";\nimport {\n  createFarmDocsSocialImageDescriptor,\n  getFarmDocsCustomSocialImage,\n  getFarmDocsSocialImageSlug,\n  isFarmDocsSocialImageEnabled,\n  renderFarmDocsSocialImageSvg,\n  renderFarmDocsSocialMetadata,\n} from \"./social-image\";\nimport type { FarmDocsResolvedConfig } from \"./types\";\n\nexport interface FarmDocsHandlerOptions {\n  root: string;\n  srcDir?: string;\n  clientEntry?: string;\n  fontAssets?: readonly FarmDocsPublicFontAsset[];\n  /** Resolve semantic fonts from the layouts that apply to the requested docs route. */\n  resolveLayoutFonts?: (\n    pathname: string,\n  ) => FarmLayoutFonts | undefined | Promise<FarmLayoutFonts | undefined>;\n  /** Stylesheet containing the `@font-face` rules generated by Farm's font compiler. */\n  fontStylesheetHref?: string;\n  /** Application-owned global stylesheet, including the selected docs theme CSS import. */\n  globalStylesheetHref?: string;\n}\n\nexport interface FarmDocsPage {\n  slug: string;\n  title: string;\n  description?: string;\n  section?: string;\n  href: string;\n  sourcePath: string;\n  lastModified?: string;\n}\n\nexport interface LoadedFarmDocsPage extends FarmDocsPage {\n  body: string;\n  frontmatter: Record<string, string>;\n}\n\nconst DOCS_FILE_NAMES = [\"page.mdx\", \"page.md\", \"index.mdx\", \"index.md\"];\nconst DOCS_FILE_EXTENSIONS = [\".mdx\", \".md\"];\nconst FARM_DOCS_FALLBACK_FAVICON =\n  \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='black'/%3E%3Cpath d='M7 8h18v3H10v5h12v3H10v5H7z' fill='white'/%3E%3C/svg%3E\";\nconst FARM_DOCS_FAVICON_FILES = [\"favicon.svg\", \"favicon.ico\", \"favicon.png\"];\n\nfunction trimSlashes(value: string): string {\n  return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizeEntry(entry: string | undefined): string {\n  if (!entry || entry === \"/\") return \"/\";\n  return `/${trimSlashes(entry)}`;\n}\n\nfunction decodeDocsPath(value: string): string {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    // Malformed percent-encoding in a request path must resolve to a\n    // non-matching slug (a 404), not throw out of the handler.\n    return value;\n  }\n}\n\nfunction normalizeSlug(value: string): string {\n  return trimSlashes(decodeDocsPath(value)).replace(/\\.(mdx?|markdown)$/i, \"\");\n}\n\nfunction resolveFarmDocsFavicon(\n  docs: FarmDocsResolvedConfig | undefined,\n  options: FarmDocsHandlerOptions,\n): string {\n  const configuredFavicon = docs?.config.favicon;\n  if (typeof configuredFavicon === \"string\" && configuredFavicon.trim()) {\n    return configuredFavicon.trim();\n  }\n\n  const publicDir = path.join(path.resolve(options.root), \"public\");\n\n  for (const fileName of FARM_DOCS_FAVICON_FILES) {\n    const faviconPath = path.join(publicDir, fileName);\n    if (existsSync(faviconPath) && statSync(faviconPath).isFile()) {\n      return `/${fileName}`;\n    }\n  }\n\n  return FARM_DOCS_FALLBACK_FAVICON;\n}\n\nfunction renderFarmDocsFaviconLink(faviconHref: string): string {\n  const normalizedHref = faviconHref.split(/[?#]/, 1)[0]?.toLowerCase() || \"\";\n  const type =\n    normalizedHref.endsWith(\".svg\") || faviconHref.startsWith(\"data:image/svg+xml\")\n      ? \"image/svg+xml\"\n      : normalizedHref.endsWith(\".png\")\n        ? \"image/png\"\n        : normalizedHref.endsWith(\".ico\")\n          ? \"image/x-icon\"\n          : undefined;\n  const metadata =\n    type === \"image/svg+xml\" ? ' sizes=\"any\" type=\"image/svg+xml\"' : type ? ` type=\"${type}\"` : \"\";\n\n  return `<link rel=\"icon\" href=\"${escapeAttribute(faviconHref)}\"${metadata}>`;\n}\n\nfunction renderFarmDocsBrandMark(): string {\n  return `<svg class=\"sidebar-brand-logo\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n    <rect x=\"2\" y=\"2\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\"></rect>\n    <path d=\"M9.75 2h11.5c.41 0 .75.34.75.75v3.5c0 .41-.34.75-.75.75H9.75A.75.75 0 0 1 9 6.25v-3.5c0-.41.34-.75.75-.75Zm9.75 1.62a.38.38 0 0 0-.38.38v1c0 .21.17.38.38.38h.75c.21 0 .38-.17.38-.38V4a.38.38 0 0 0-.38-.38h-.75Z\" fill=\"currentColor\"></path>\n    <rect x=\"2\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.64\"></rect>\n    <rect x=\"9\" y=\"9.5\" width=\"13\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.64\"></rect>\n    <rect x=\"2\" y=\"17\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.34\"></rect>\n    <rect x=\"9\" y=\"17\" width=\"7.5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.34\"></rect>\n  </svg>`;\n}\n\nfunction renderFarmDocsBrandTitle(navTitle: string): string {\n  const suffix = navTitle.match(/\\.js$/i)?.[0];\n\n  if (!suffix) {\n    return `<span class=\"sidebar-brand-title\">${escapeHtml(navTitle)}</span>`;\n  }\n\n  const productName = navTitle.slice(0, -suffix.length);\n  return `<span class=\"sidebar-brand-title\">${escapeHtml(productName)}<span class=\"sidebar-brand-suffix\">${escapeHtml(suffix)}</span></span>`;\n}\n\nfunction isSafeSegment(segment: string): boolean {\n  return segment !== \"..\" && !segment.includes(\"/\") && !segment.includes(\"\\\\\");\n}\n\nfunction resolveInside(root: string, target: string): string | null {\n  const resolvedRoot = path.resolve(root);\n  const resolvedTarget = path.resolve(target);\n  const relative = path.relative(resolvedRoot, resolvedTarget);\n  if (relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))) {\n    return resolvedTarget;\n  }\n  return null;\n}\n\nfunction resolveExistingFileInside(root: string, target: string): string | null {\n  const safePath = resolveInside(root, target);\n  if (!safePath) return null;\n\n  try {\n    const realRoot = realpathSync(root);\n    const realTarget = realpathSync(safePath);\n    const containedTarget = resolveInside(realRoot, realTarget);\n    return containedTarget && statSync(containedTarget).isFile() ? containedTarget : null;\n  } catch {\n    return null;\n  }\n}\n\nexport function isFarmDocsRequest(docs: FarmDocsResolvedConfig | undefined, request: Request) {\n  if (!docs?.enabled) return false;\n  if (request.method !== \"GET\" && request.method !== \"HEAD\") return false;\n\n  const pathname = new URL(request.url).pathname;\n  const entry = normalizeEntry(docs.entry);\n  if (entry === \"/\") return true;\n\n  return pathname === entry || pathname === `${entry}.md` || pathname.startsWith(`${entry}/`);\n}\n\nexport function resolveFarmDocsContentDir(\n  docs: FarmDocsResolvedConfig,\n  options: FarmDocsHandlerOptions,\n): string {\n  const root = path.resolve(options.root);\n  const srcDir = options.srcDir || \"src\";\n  const configuredContentDir = docs.contentDir || docs.config.contentDir;\n\n  if (configuredContentDir) {\n    return path.isAbsolute(configuredContentDir)\n      ? configuredContentDir\n      : path.join(root, configuredContentDir);\n  }\n\n  const entryDir = docs.config.entry || trimSlashes(docs.entry) || \"docs\";\n  const appDocsDir = path.join(root, srcDir, \"app\", entryDir);\n  if (existsSync(appDocsDir)) return appDocsDir;\n\n  return path.join(root, entryDir);\n}\n\nexport function getFarmDocsRouteTypeEntries(docs: FarmDocsResolvedConfig | undefined): string[] {\n  if (!docs?.enabled) return [];\n  const entry = normalizeEntry(docs.entry);\n  if (entry === \"/\") return [\"/\", \"/[...docs]\"];\n  return [entry, `${entry}/[...docs]`];\n}\n\nexport function getFarmDocsDocumentNavigationMatchers(\n  docs: FarmDocsResolvedConfig | undefined,\n): string[] {\n  if (!docs?.enabled) return [];\n  const entry = normalizeEntry(docs.entry);\n  return [entry === \"/\" ? \"/(.*)\" : `${entry}(.*)`];\n}\n\nfunction getRequestSlug(docs: FarmDocsResolvedConfig, request: Request): string {\n  const pathname = new URL(request.url).pathname;\n  const entry = normalizeEntry(docs.entry);\n\n  if (entry === \"/\") return normalizeSlug(pathname);\n  if (pathname === entry || pathname === `${entry}.md`) return \"\";\n\n  return normalizeSlug(pathname.slice(entry.length));\n}\n\nfunction findDocsPageFile(contentDir: string, slug: string): string | null {\n  const segments = slug ? slug.split(\"/\").filter(Boolean) : [];\n  if (!segments.every(isSafeSegment)) return null;\n\n  const slugDir = path.join(contentDir, ...segments);\n  const candidates =\n    segments.length === 0\n      ? DOCS_FILE_NAMES.map((filename) => path.join(contentDir, filename))\n      : [\n          ...DOCS_FILE_NAMES.map((filename) => path.join(slugDir, filename)),\n          ...DOCS_FILE_EXTENSIONS.map((extension) => path.join(contentDir, `${slug}${extension}`)),\n        ];\n\n  for (const candidate of candidates) {\n    const safePath = resolveExistingFileInside(contentDir, candidate);\n    if (safePath) {\n      return safePath;\n    }\n  }\n\n  return null;\n}\n\nfunction parseFrontmatter(source: string): {\n  frontmatter: Record<string, string>;\n  body: string;\n} {\n  if (!source.startsWith(\"---\")) {\n    return { frontmatter: {}, body: source };\n  }\n\n  const endIndex = source.indexOf(\"\\n---\", 3);\n  if (endIndex === -1) return { frontmatter: {}, body: source };\n\n  const frontmatterSource = source.slice(3, endIndex).trim();\n  const body = source.slice(source.indexOf(\"\\n\", endIndex + 1) + 1);\n  const frontmatter: Record<string, string> = {};\n\n  for (const line of frontmatterSource.split(/\\r?\\n/)) {\n    const separator = line.indexOf(\":\");\n    if (separator === -1) continue;\n    const key = line.slice(0, separator).trim();\n    const value = line\n      .slice(separator + 1)\n      .trim()\n      .replace(/^[\"']|[\"']$/g, \"\");\n    if (key && value) frontmatter[key] = value;\n  }\n\n  return { frontmatter, body };\n}\n\nfunction titleFromSlug(slug: string): string {\n  const lastSegment = slug.split(\"/\").filter(Boolean).pop() || \"Docs\";\n  return lastSegment\n    .split(/[-_]/)\n    .filter(Boolean)\n    .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n    .join(\" \");\n}\n\nfunction titleFromMarkdown(body: string, fallback: string): string {\n  const heading = body.match(/^#\\s+(.+)$/m)?.[1]?.trim();\n  return heading || fallback;\n}\n\nexport function loadFarmDocsPage(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n  slug: string,\n): LoadedFarmDocsPage | null {\n  const sourcePath = findDocsPageFile(contentDir, slug);\n  if (!sourcePath) return null;\n\n  const source = readFileSync(sourcePath, \"utf8\");\n  const { frontmatter, body } = parseFrontmatter(source);\n  const title = frontmatter.title || titleFromMarkdown(body, titleFromSlug(slug));\n  const href = createDocsHref(docs.entry, slug);\n\n  return {\n    slug,\n    title,\n    description: frontmatter.description,\n    section: frontmatter.section,\n    href,\n    sourcePath,\n    lastModified: resolveFarmDocsPageLastModified(contentDir, sourcePath, frontmatter),\n    frontmatter,\n    body,\n  };\n}\n\nfunction createDocsHref(entry: string, slug: string): string {\n  const normalizedEntry = normalizeEntry(entry);\n  const normalizedSlug = trimSlashes(slug);\n  if (normalizedEntry === \"/\") return normalizedSlug ? `/${normalizedSlug}` : \"/\";\n  return normalizedSlug ? `${normalizedEntry}/${normalizedSlug}` : normalizedEntry;\n}\n\nfunction pathToSlug(contentDir: string, filePath: string): string | null {\n  const relative = path.relative(contentDir, filePath).replace(/\\\\/g, \"/\");\n  if (relative.startsWith(\"..\")) return null;\n\n  const extension = path.extname(relative);\n  if (!DOCS_FILE_EXTENSIONS.includes(extension)) return null;\n\n  const withoutExtension = relative.slice(0, -extension.length);\n  if (withoutExtension === \"page\" || withoutExtension === \"index\") return \"\";\n  if (withoutExtension.endsWith(\"/page\") || withoutExtension.endsWith(\"/index\")) {\n    return withoutExtension.replace(/\\/(page|index)$/, \"\");\n  }\n  return withoutExtension;\n}\n\nfunction loadPage(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n  request: Request,\n): LoadedFarmDocsPage | null {\n  return loadFarmDocsPage(contentDir, docs, getRequestSlug(docs, request));\n}\n\nexport function discoverFarmDocsPages(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n): FarmDocsPage[] {\n  if (!existsSync(contentDir)) return [];\n\n  const pages: FarmDocsPage[] = [];\n  const visit = (dir: string) => {\n    for (const entry of readdirSync(dir, { withFileTypes: true })) {\n      if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n      const absolutePath = path.join(dir, entry.name);\n      if (entry.isDirectory()) {\n        visit(absolutePath);\n        continue;\n      }\n      if (!entry.isFile()) continue;\n\n      const slug = pathToSlug(contentDir, absolutePath);\n      if (slug === null) continue;\n\n      const source = readFileSync(absolutePath, \"utf8\");\n      const { frontmatter, body } = parseFrontmatter(source);\n      pages.push({\n        slug,\n        title: frontmatter.title || titleFromMarkdown(body, titleFromSlug(slug)),\n        description: frontmatter.description,\n        section: frontmatter.section,\n        href: createDocsHref(docs.entry, slug),\n        sourcePath: absolutePath,\n        lastModified: resolveFarmDocsPageLastModified(contentDir, absolutePath, frontmatter),\n      });\n    }\n  };\n\n  visit(contentDir);\n  return pages.sort((a, b) => a.href.localeCompare(b.href));\n}\n\nexport function toFarmDocsMarkdownPage(page: LoadedFarmDocsPage): DocsMarkdownPage {\n  const lastModified =\n    page.lastModified || page.frontmatter.lastModified || page.frontmatter.lastmod;\n\n  return {\n    slug: page.slug,\n    url: page.href,\n    title: page.title,\n    description: page.description,\n    lastModified,\n    lastmod: lastModified,\n    content: page.body,\n    rawContent: page.body,\n  };\n}\n\nfunction getDocsTitle(docs: FarmDocsResolvedConfig): string {\n  return typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n    ? String((docs.config.nav as { title?: unknown }).title || \"Documentation\")\n    : \"Documentation\";\n}\n\nfunction getDocsDescription(docs: FarmDocsResolvedConfig): string | undefined {\n  return docs.config.metadata?.description;\n}\n\nfunction getLoadedDocsPages(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n): LoadedFarmDocsPage[] {\n  return discoverFarmDocsPages(contentDir, docs)\n    .map((page) => loadFarmDocsPage(contentDir, docs, page.slug))\n    .filter((page): page is LoadedFarmDocsPage => Boolean(page));\n}\n\nfunction toDocsLlmsPage(page: LoadedFarmDocsPage): DocsLlmsTxtPageInput {\n  return toFarmDocsMarkdownPage(page);\n}\n\nfunction toDocsSitemapPage(page: LoadedFarmDocsPage): DocsSitemapPageInput {\n  return {\n    ...toFarmDocsMarkdownPage(page),\n    sourcePath: page.sourcePath,\n  };\n}\n\ntype CopyMarkdownActionConfig = {\n  format: \"markdown\" | \"text\";\n  includeTitle: boolean;\n  label: string;\n  copiedLabel: string;\n};\n\ntype LastUpdatedDisplayConfig = {\n  enabled: boolean;\n  label: string;\n  position: \"footer\" | \"below-title\";\n};\n\ntype ReadingTimeDisplayConfig = {\n  wordsPerMinute: number;\n  format: \"long\" | \"short\";\n  includeCode: boolean;\n};\n\nfunction resolvePageActionsConfig(docs: FarmDocsResolvedConfig): Record<string, unknown> {\n  return isObjectRecord(docs.config.pageActions) ? docs.config.pageActions : {};\n}\n\nfunction resolvePageActionsAlignment(docs: FarmDocsResolvedConfig): \"left\" | \"right\" {\n  return resolvePageActionsConfig(docs).alignment === \"right\" ? \"right\" : \"left\";\n}\n\nfunction resolveCopyMarkdownActionConfig(\n  docs: FarmDocsResolvedConfig,\n): CopyMarkdownActionConfig | null {\n  const raw = resolvePageActionsConfig(docs).copyMarkdown;\n  if (raw === undefined || raw === false) return null;\n\n  const options = isObjectRecord(raw) ? raw : {};\n  if (isObjectRecord(raw) && raw.enabled === false) return null;\n\n  return {\n    format: options.format === \"text\" ? \"text\" : \"markdown\",\n    includeTitle: options.includeTitle === true,\n    label: readString(options.label) ?? \"Copy page\",\n    copiedLabel: readString(options.copiedLabel) ?? \"Copied!\",\n  };\n}\n\nfunction resolveLastUpdatedDisplayConfig(docs: FarmDocsResolvedConfig): LastUpdatedDisplayConfig {\n  const raw = docs.config.lastUpdated;\n  const options = isObjectRecord(raw) ? raw : {};\n\n  return {\n    enabled: raw !== false && (!isObjectRecord(raw) || raw.enabled !== false),\n    label: typeof options.label === \"string\" ? options.label : \"Last updated\",\n    position: options.position === \"below-title\" ? \"below-title\" : \"footer\",\n  };\n}\n\nfunction formatLastModifiedDate(value: string | undefined): string | undefined {\n  if (!value) return undefined;\n\n  const date = new Date(value);\n  if (Number.isNaN(date.getTime())) return value;\n\n  return new Intl.DateTimeFormat(\"en\", {\n    day: \"numeric\",\n    month: \"long\",\n    year: \"numeric\",\n  }).format(date);\n}\n\nfunction renderLastUpdatedText(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n  position: \"footer\" | \"below-title\",\n): string {\n  const config = resolveLastUpdatedDisplayConfig(docs);\n  const formatted = formatLastModifiedDate(page.lastModified);\n  if (!config.enabled || config.position !== position || !formatted) return \"\";\n\n  const time = `<time datetime=\"${escapeAttribute(page.lastModified || \"\")}\">${escapeHtml(formatted)}</time>`;\n  const label = config.label.trim();\n  return label ? `${escapeHtml(label)} ${time}` : time;\n}\n\nfunction resolveReadingTimeDisplayConfig(\n  docs: FarmDocsResolvedConfig,\n): ReadingTimeDisplayConfig | null {\n  const raw = docs.config.readingTime;\n  if (raw === undefined || raw === false) return null;\n\n  const options = isObjectRecord(raw) ? raw : {};\n  if (isObjectRecord(raw) && options.enabled === false) return null;\n\n  const wordsPerMinute =\n    typeof options.wordsPerMinute === \"number\" && options.wordsPerMinute > 0\n      ? options.wordsPerMinute\n      : 220;\n\n  return {\n    wordsPerMinute,\n    format: options.format === \"short\" ? \"short\" : \"long\",\n    includeCode: options.includeCode === true,\n  };\n}\n\nfunction countMarkdownWords(body: string, includeCode: boolean): number {\n  const readable = (\n    includeCode ? body : body.replace(/```[\\s\\S]*?```/g, \" \").replace(/`[^`]*`/g, \" \")\n  )\n    .replace(/!\\[[^\\]]*]\\([^)]*\\)/g, \" \")\n    .replace(/\\[([^\\]]+)]\\([^)]*\\)/g, \"$1\")\n    .replace(/<[^>]+>/g, \" \")\n    .replace(/[#>*_~`|:-]/g, \" \");\n\n  return readable.match(/[A-Za-z0-9]+(?:[-'][A-Za-z0-9]+)*/g)?.length ?? 0;\n}\n\nfunction renderReadingTimeMeta(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const config = resolveReadingTimeDisplayConfig(docs);\n  if (!config) return \"\";\n\n  const words = countMarkdownWords(page.body, config.includeCode);\n  const minutes = Math.max(1, Math.ceil(words / config.wordsPerMinute));\n  const label = config.format === \"short\" ? `${minutes} min` : `${minutes} min read`;\n\n  return `<div class=\"fd-page-meta not-prose\" data-page-reading-time>\n  <span class=\"fd-page-meta-dot\" aria-hidden=\"true\">·</span>\n  <span class=\"fd-page-meta-item\">${escapeHtml(label)}</span>\n</div>`;\n}\n\nfunction renderPixelPageActions(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const copyMarkdown = resolveCopyMarkdownActionConfig(docs);\n  if (!copyMarkdown) return \"\";\n\n  const markdownUrl = `${page.href}.md`;\n  const includeTitle = copyMarkdown.includeTitle ? \"true\" : \"false\";\n\n  return `<div class=\"fd-page-actions\" data-page-actions data-actions-alignment=\"${resolvePageActionsAlignment(docs)}\">\n  <button\n    type=\"button\"\n    class=\"fd-page-action-btn\"\n    data-page-action=\"copy-markdown\"\n    data-copied=\"false\"\n    data-markdown-url=\"${escapeAttribute(markdownUrl)}\"\n    data-copy-markdown-format=\"${copyMarkdown.format}\"\n    data-copy-markdown-include-title=\"${includeTitle}\"\n    data-copy-label=\"${escapeAttribute(copyMarkdown.label)}\"\n    data-copied-label=\"${escapeAttribute(copyMarkdown.copiedLabel)}\"\n    aria-label=\"${escapeAttribute(copyMarkdown.label)}\"\n    title=\"${escapeAttribute(copyMarkdown.label)}\"\n  >\n    <svg class=\"fd-page-action-copy-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>\n    <svg class=\"fd-page-action-check-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20 6 9 17l-5-5\"></path></svg>\n    <span data-page-action-label>${escapeHtml(copyMarkdown.label)}</span>\n  </button>\n</div>`;\n}\n\nfunction renderBelowTitleMeta(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const lastUpdated = renderLastUpdatedText(page, docs, \"below-title\");\n  const actions = renderPixelPageActions(page, docs);\n  const readingTime = renderReadingTimeMeta(page, docs);\n  if (!lastUpdated && !actions && !readingTime) return \"\";\n\n  return `<div class=\"fd-below-title-block not-prose\">\n  ${lastUpdated ? `<p class=\"fd-last-updated-inline\">${lastUpdated}</p>` : \"\"}\n  ${actions}\n  ${readingTime}\n</div>`;\n}\n\nfunction renderMarkdownHtmlWithTitleMeta(\n  page: LoadedFarmDocsPage,\n  docs: FarmDocsResolvedConfig,\n  html: string,\n): string {\n  const meta = renderBelowTitleMeta(page, docs);\n  if (!meta) return html;\n\n  const withTitleMeta = html.replace(/(<h1\\b[\\s\\S]*?<\\/h1>)/, `$1\\n${meta}`);\n  return withTitleMeta === html ? `${meta}\\n${html}` : withTitleMeta;\n}\n\nfunction renderPixelPageFooter(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  const lastUpdated = renderLastUpdatedText(page, docs, \"footer\");\n  if (!lastUpdated) return \"\";\n\n  return `<div class=\"not-prose fd-page-footer\">\n  <span class=\"fd-last-updated-footer\">${lastUpdated}</span>\n</div>`;\n}\n\nfunction getDocsLlmsOptions(docs: FarmDocsResolvedConfig, request: Request) {\n  const configured =\n    typeof docs.config.llmsTxt === \"object\" && docs.config.llmsTxt !== null\n      ? docs.config.llmsTxt\n      : {};\n  return {\n    enabled: true,\n    baseUrl: new URL(request.url).origin,\n    siteTitle: getDocsTitle(docs),\n    siteDescription: getDocsDescription(docs),\n    ...configured,\n  };\n}\n\nfunction getDocsDiscoveryOptions(docs: FarmDocsResolvedConfig, request: Request) {\n  return {\n    origin: new URL(request.url).origin,\n    entry: docs.entry,\n    i18n: null,\n    search: docs.config.search ?? true,\n    mcp: {\n      enabled: false,\n      route: \"/api/docs/mcp\",\n      name: `${getDocsTitle(docs)} MCP`,\n      version: \"1\",\n      tools: {\n        listDocs: false,\n        listPages: false,\n        readPage: false,\n        searchDocs: false,\n        getNavigation: false,\n        getCodeExamples: false,\n        getConfigSchema: false,\n      },\n    },\n    feedback: undefined,\n    llms: getDocsLlmsOptions(docs, request),\n    sitemap: docs.config.sitemap ?? true,\n    robots: docs.config.robots ?? true,\n    openapi: undefined,\n    markdown: {\n      acceptHeader: true,\n      signatureAgentHeader: true,\n    },\n  };\n}\n\nfunction createFarmDocsPublicResponse(\n  contentDir: string,\n  docs: FarmDocsResolvedConfig,\n  request: Request,\n): Response | null {\n  const url = new URL(request.url);\n  let loadedPages: LoadedFarmDocsPage[] | undefined;\n  const getPages = () => (loadedPages ??= getLoadedDocsPages(contentDir, docs));\n  const sitemapManifest = () =>\n    buildDocsSitemapManifest({\n      pages: getPages().map(toDocsSitemapPage),\n      entry: docs.entry,\n      siteTitle: getDocsTitle(docs),\n      baseUrl: url.origin,\n    });\n  const textHeaders = (contentType: string) => ({\n    \"Content-Type\": contentType,\n    \"Cache-Control\": \"public, max-age=60\",\n  });\n\n  const llmsFormat = resolveDocsLlmsTxtFormat(url);\n  if (llmsFormat) {\n    const generated = renderDocsLlmsTxt(\n      getPages().map(toDocsLlmsPage),\n      getDocsLlmsOptions(docs, request),\n    );\n    return new Response(llmsFormat === \"llms-full\" ? generated.llmsFullTxt : generated.llmsTxt, {\n      status: 200,\n      headers: textHeaders(\"text/plain; charset=utf-8\"),\n    });\n  }\n\n  const sitemapFormat = resolveDocsSitemapRequest(url, docs.config.sitemap ?? true);\n  if (sitemapFormat === \"xml\") {\n    return new Response(\n      renderDocsSitemapXml(sitemapManifest(), {\n        baseUrl: url.origin,\n        includeLastmod: true,\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"application/xml; charset=utf-8\"),\n      },\n    );\n  }\n  if (sitemapFormat === \"markdown\") {\n    return new Response(\n      renderDocsSitemapMarkdown(sitemapManifest(), {\n        includeDescriptions: true,\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"text/markdown; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (resolveDocsRobotsRequest(url, docs.config.robots ?? true)) {\n    return new Response(\n      renderDocsRobotsTxt({\n        entry: docs.entry,\n        sitemap: docs.config.sitemap ?? true,\n        robots: docs.config.robots ?? true,\n        baseUrl: url.origin,\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"text/plain; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (isDocsAgentDiscoveryRequest(url)) {\n    const spec = buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(docs, request));\n    const title = getDocsTitle(docs);\n    return new Response(\n      JSON.stringify({\n        ...spec,\n        name: title,\n        site: {\n          ...spec.site,\n          title,\n          description: getDocsDescription(docs),\n          entry: docs.entry,\n        },\n      }),\n      {\n        status: 200,\n        headers: textHeaders(\"application/json; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (isDocsAgentsRequest(url)) {\n    return new Response(\n      `${renderDocsAgentsDocument(getDocsDiscoveryOptions(docs, request)).trim()}\\n`,\n      {\n        status: 200,\n        headers: textHeaders(\"text/markdown; charset=utf-8\"),\n      },\n    );\n  }\n\n  if (isDocsSkillRequest(url)) {\n    return new Response(\n      `${renderDocsSkillDocument(getDocsDiscoveryOptions(docs, request)).trim()}\\n`,\n      {\n        status: 200,\n        headers: textHeaders(\"text/markdown; charset=utf-8\"),\n      },\n    );\n  }\n\n  return null;\n}\n\nfunction omitFarmDocsHeadBody(request: Request, response: Response): Response {\n  if (request.method !== \"HEAD\") return response;\n  return new Response(null, {\n    status: response.status,\n    statusText: response.statusText,\n    headers: response.headers,\n  });\n}\n\nfunction escapeHtml(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nfunction shouldReturnMarkdown(request: Request): boolean {\n  const url = new URL(request.url);\n  if (url.pathname.endsWith(\".md\")) return true;\n\n  const accept = request.headers.get(\"accept\");\n  // Substring matching cannot see `q=0`, so `text/markdown;q=0` (an explicit\n  // refusal) used to be served Markdown anyway. Only an exact entry counts:\n  // `*/*` means \"anything\", not \"Markdown over HTML\".\n  const markdown = Math.max(\n    farmAcceptQuality(accept, \"text/markdown\"),\n    farmAcceptQuality(accept, \"text/plain\"),\n  );\n  if (markdown <= 0) return false;\n\n  // A client listing text/plain as a low-quality fallback behind text/html\n  // wants the HTML page; serve Markdown only when it is at least as welcome.\n  return markdown >= farmAcceptQuality(accept, \"text/html\", { wildcards: true });\n}\n\nfunction escapeAttribute(value: string): string {\n  return escapeHtml(value).replace(/'/g, \"&#39;\");\n}\n\nfunction slugify(value: string): string {\n  return value\n    .toLowerCase()\n    .replace(/<[^>]+>/g, \"\")\n    .replace(/`([^`]+)`/g, \"$1\")\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-|-$/g, \"\");\n}\n\nfunction createSlugger() {\n  const seen = new Map<string, number>();\n\n  return (value: string) => {\n    const base = slugify(value) || \"section\";\n    const count = seen.get(base) || 0;\n    seen.set(base, count + 1);\n    return count === 0 ? base : `${base}-${count + 1}`;\n  };\n}\n\nfunction stripHtml(value: string): string {\n  return value.replace(/<[^>]+>/g, \"\");\n}\n\nfunction getCodeFence(line: string): { marker: \"`\" | \"~\"; length: number } | null {\n  const match = /^(?: {0,3})(`{3,}|~{3,})/.exec(line);\n  const value = match?.[1];\n  if (!value) return null;\n  return { marker: value[0] as \"`\" | \"~\", length: value.length };\n}\n\nfunction isClosingCodeFence(line: string, fence: { marker: \"`\" | \"~\"; length: number }): boolean {\n  const trimmed = line.trim();\n  return (\n    trimmed.length >= fence.length && Array.from(trimmed).every((char) => char === fence.marker)\n  );\n}\n\nfunction stripMdxRuntimeSyntax(body: string): string {\n  const output: string[] = [];\n  let fence: { marker: \"`\" | \"~\"; length: number } | null = null;\n\n  for (const line of body.split(\"\\n\")) {\n    const nextFence = getCodeFence(line);\n    if (fence) {\n      output.push(line);\n      if (nextFence && nextFence.marker === fence.marker && isClosingCodeFence(line, fence)) {\n        fence = null;\n      }\n      continue;\n    }\n\n    if (nextFence) {\n      fence = nextFence;\n      output.push(line);\n      continue;\n    }\n\n    if (/^\\s*import\\s.+$/.test(line) || /^\\s*export\\s+(const|default)\\s.+$/.test(line)) {\n      continue;\n    }\n\n    output.push(line);\n  }\n\n  return output.join(\"\\n\");\n}\n\nfunction unescapeHtml(value: string): string {\n  return value\n    .replace(/&quot;/g, '\"')\n    .replace(/&#39;/g, \"'\")\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&amp;/g, \"&\");\n}\n\nconst CODE_LANGUAGE_LABELS = new Set([\n  \"bash\",\n  \"cjs\",\n  \"cmd\",\n  \"console\",\n  \"css\",\n  \"html\",\n  \"javascript\",\n  \"js\",\n  \"json\",\n  \"jsx\",\n  \"md\",\n  \"mdx\",\n  \"shell\",\n  \"sh\",\n  \"terminal\",\n  \"text\",\n  \"ts\",\n  \"tsx\",\n  \"txt\",\n  \"typescript\",\n  \"yaml\",\n  \"yml\",\n  \"zsh\",\n]);\n\nconst EXTENSIONLESS_CODE_FILENAMES = new Set([\n  \"dockerfile\",\n  \"makefile\",\n  \"procfile\",\n  \"readme\",\n  \"license\",\n]);\n\nfunction isCodePathLabel(label: string): boolean {\n  const trimmed = label.trim();\n  if (!trimmed || /\\s/.test(trimmed)) return false;\n\n  const lower = trimmed.toLowerCase();\n  if (CODE_LANGUAGE_LABELS.has(lower)) return false;\n\n  const fileName = trimmed.split(/[\\\\/]/).filter(Boolean).pop() || trimmed;\n  const lowerFileName = fileName.toLowerCase();\n  if (EXTENSIONLESS_CODE_FILENAMES.has(lowerFileName)) return true;\n  if (fileName.startsWith(\".\") && fileName.length > 1) return true;\n\n  return /\\.[a-z0-9][a-z0-9-]*$/i.test(fileName);\n}\n\nfunction parseCodeInfo(info: string | undefined): {\n  language: string;\n  label: string;\n  hasExplicitLabel: boolean;\n} {\n  const source = (info || \"\").trim();\n  const language = source.match(/^\\S+/)?.[0] || \"text\";\n  const explicitLabel = source\n    .match(/\\b(?:title|filename|file|label|name)=[\"']([^\"']+)[\"']/)?.[1]\n    ?.trim();\n  return { language, label: explicitLabel || language, hasExplicitLabel: Boolean(explicitLabel) };\n}\n\nfunction getStandaloneCodeLabel(line: string): string | null {\n  const trimmed = line.trim();\n  const match = /^(?:\\*\\*([^*]+)\\*\\*|__([^_]+)__|`([^`]+)`)$/u.exec(trimmed);\n  const label = match?.[1] || match?.[2] || match?.[3];\n  return label?.trim() || null;\n}\n\nfunction hasCodeFenceTitle(info: string): boolean {\n  return /\\b(?:title|filename|file|label|name)=[\"'][^\"']+[\"']/.test(info);\n}\n\nfunction escapeCodeFenceTitle(value: string): string {\n  return value.replace(/\"/g, \"&quot;\");\n}\n\nfunction addTitleToCodeFence(line: string, title: string): string {\n  const match = /^(\\s{0,3})(`{3,}|~{3,})(.*)$/u.exec(line);\n  if (!match) return line;\n  const [, indent, marker, infoSource] = match;\n  const info = infoSource.trim();\n  if (hasCodeFenceTitle(info)) return line;\n  const suffix = `title=\"${escapeCodeFenceTitle(title)}\"`;\n  return `${indent}${marker}${info ? `${info} ${suffix}` : `text ${suffix}`}`;\n}\n\nfunction attachCodeBlockLabels(body: string): string {\n  const lines = body.split(\"\\n\");\n  const output: string[] = [];\n  let fence: { marker: \"`\" | \"~\"; length: number } | null = null;\n\n  for (let index = 0; index < lines.length; index += 1) {\n    const line = lines[index] || \"\";\n    const nextFence = getCodeFence(line);\n\n    if (fence) {\n      output.push(line);\n      if (nextFence && nextFence.marker === fence.marker && isClosingCodeFence(line, fence)) {\n        fence = null;\n      }\n      continue;\n    }\n\n    if (nextFence) {\n      fence = nextFence;\n      output.push(line);\n      continue;\n    }\n\n    const label = getStandaloneCodeLabel(line);\n    if (!label) {\n      output.push(line);\n      continue;\n    }\n\n    let fenceIndex = index + 1;\n    while (fenceIndex < lines.length && (lines[fenceIndex] || \"\").trim() === \"\") {\n      fenceIndex += 1;\n    }\n\n    const labeledFence = getCodeFence(lines[fenceIndex] || \"\");\n    if (!labeledFence) {\n      output.push(line);\n      continue;\n    }\n\n    output.push(addTitleToCodeFence(lines[fenceIndex] || \"\", label));\n    fence = labeledFence;\n    index = fenceIndex;\n  }\n\n  return output.join(\"\\n\");\n}\n\nfunction highlightCodeBlock(code: string): string {\n  return highlight(code.replace(/\\n$/, \"\")).replace(/<\\/span>\\n<span/g, \"</span><span\");\n}\n\nfunction renderCodeCopyButton(className = \"code-copy\"): string {\n  return `<button class=\"${className}\" type=\"button\" data-copied=\"false\" aria-label=\"Copy code\" title=\"Copy code\" onclick=\"navigator.clipboard?.writeText(this.closest('figure').querySelector('code').innerText); this.dataset.copied='true'; this.setAttribute('aria-label','Copied'); this.title='Copied'; clearTimeout(this._copyTimer); this._copyTimer=setTimeout(() => { this.dataset.copied='false'; this.setAttribute('aria-label','Copy code'); this.title='Copy code'; }, 4500);\"><svg class=\"code-copy-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg><svg class=\"code-copy-check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20 6 9 17l-5-5\"></path></svg></button>`;\n}\n\nfunction renderMarkdownDocument(\n  body: string,\n  depth: number,\n): { html: string; tocItems: TocItem[] } {\n  const slug = createSlugger();\n  const renderer = new Renderer();\n  const maxLevel = Math.max(2, Math.min(depth, 6));\n  const tocItems: TocItem[] = [];\n\n  renderer.heading = (text, level, raw) => {\n    const title = raw || stripHtml(text);\n    const id = slug(title);\n    if (level >= 2 && level <= maxLevel) {\n      tocItems.push({ id, title, level });\n    }\n    return `<h${level} id=\"${escapeAttribute(id)}\"><a class=\"heading-anchor\" href=\"#${escapeAttribute(id)}\">${text}</a></h${level}>\\n`;\n  };\n\n  renderer.code = (code, infostring, escaped) => {\n    const { language, label, hasExplicitLabel } = parseCodeInfo(infostring);\n    const rawCode = escaped ? unescapeHtml(code) : code;\n    const highlighted = highlightCodeBlock(rawCode);\n    const shouldRenderHeader = hasExplicitLabel && isCodePathLabel(label);\n    const header = shouldRenderHeader\n      ? `<div class=\"code-block-header\">\n    <span class=\"code-block-title\">${escapeHtml(label)}</span>\n    ${renderCodeCopyButton()}\n  </div>`\n      : renderCodeCopyButton(\"code-copy code-copy-floating\");\n\n    return `<figure class=\"shiki code-block ${shouldRenderHeader ? \"code-block-framed\" : \"code-block-plain\"}\" data-language=\"${escapeAttribute(language)}\">\n  ${header}\n  <pre><code class=\"sh-code language-${escapeAttribute(language)}\">${highlighted}</code></pre>\n</figure>\\n`;\n  };\n\n  renderer.table = (header, body) =>\n    `<div class=\"fd-table-wrapper table-wrap relative overflow-auto prose-no-margin my-6\"><table><thead>${header}</thead><tbody>${body}</tbody></table></div>\\n`;\n\n  renderer.blockquote = (quote) => `<blockquote>${quote}</blockquote>\\n`;\n  renderer.codespan = (code) => `<code>${escapeHtml(code)}</code>`;\n\n  renderer.link = (href, title, text) => {\n    const safeHref = href || \"\";\n    const titleAttribute = title ? ` title=\"${escapeAttribute(title)}\"` : \"\";\n    return `<a href=\"${escapeAttribute(safeHref)}\"${titleAttribute}>${text}</a>`;\n  };\n\n  renderer.image = (href, title, text) => {\n    const titleAttribute = title ? ` title=\"${escapeAttribute(title)}\"` : \"\";\n    return `<img src=\"${escapeAttribute(href)}\" alt=\"${escapeAttribute(text)}\"${titleAttribute}>`;\n  };\n\n  const html = marked(attachCodeBlockLabels(stripMdxRuntimeSyntax(body)), {\n    async: false,\n    breaks: false,\n    gfm: true,\n    renderer,\n  }) as string;\n\n  return { html: html.trim(), tocItems };\n}\n\ninterface TocItem {\n  id: string;\n  title: string;\n  level: number;\n}\n\nfunction getThemeUI(docs: FarmDocsResolvedConfig): Record<string, any> {\n  const theme = docs.config.theme;\n  return theme && typeof theme === \"object\" && \"ui\" in theme && typeof theme.ui === \"object\"\n    ? (theme.ui as Record<string, any>)\n    : {};\n}\n\nfunction getThemeName(docs: FarmDocsResolvedConfig): string {\n  const theme = docs.config.theme;\n  return theme && typeof theme === \"object\" && \"name\" in theme\n    ? String((theme as { name?: unknown }).name || \"farm-docs\")\n    : \"farm-docs\";\n}\n\nfunction getThemeTocDepth(docs: FarmDocsResolvedConfig): number {\n  const toc = getThemeUI(docs).layout?.toc;\n  return toc && typeof toc === \"object\" && typeof toc.depth === \"number\" ? toc.depth : 3;\n}\n\nconst SIDEBAR_SECTION_ORDER = [\n  \"Start\",\n  \"Core\",\n  \"Data and APIs\",\n  \"Integrations\",\n  \"Runtime\",\n  \"Content\",\n  \"Extending\",\n  \"Reference\",\n];\n\nconst SIDEBAR_PAGE_ORDER = new Map(\n  [\n    \"\",\n    \"getting-started\",\n    \"project-structure\",\n    \"configuration\",\n    \"routing\",\n    \"layouts\",\n    \"server-rendering\",\n    \"middleware\",\n    \"query\",\n    \"api-routes\",\n    \"api-client\",\n    \"storage\",\n    \"integrations\",\n    \"integrations/stripe\",\n    \"integrations/autumn\",\n    \"integrations/polar\",\n    \"integrations/auth\",\n    \"integrations/email\",\n    \"integrations/jobs\",\n    \"integrations/unkey\",\n    \"integrations/ui-registry\",\n    \"integrations/orm-storage\",\n    \"cache-ppr\",\n    \"observability\",\n    \"deployment\",\n    \"docs-engine\",\n    \"markdown\",\n    \"openapi\",\n    \"plugins\",\n    \"plugins/create-plugin\",\n    \"cli\",\n    \"examples\",\n    \"reference\",\n  ].map((slug, index) => [slug, index]),\n);\n\ntype SidebarNavigationItem = {\n  label?: string;\n  icon?: string;\n  slug?: string;\n  href?: string;\n  children: SidebarNavigationItem[];\n};\n\nfunction isSidebarNavigationItem(\n  value: SidebarNavigationItem | null,\n): value is SidebarNavigationItem {\n  return value !== null;\n}\n\nfunction compareSidebarPages(a: FarmDocsPage, b: FarmDocsPage): number {\n  const aOrder = SIDEBAR_PAGE_ORDER.get(a.slug) ?? 1000;\n  const bOrder = SIDEBAR_PAGE_ORDER.get(b.slug) ?? 1000;\n  return aOrder - bOrder || a.title.localeCompare(b.title);\n}\n\nfunction getSidebarSection(page: FarmDocsPage): string {\n  if (page.section) return page.section;\n  if (page.slug.startsWith(\"integrations/\")) return \"Integrations\";\n  if (page.slug.startsWith(\"plugins/\")) return \"Extending\";\n  return \"Reference\";\n}\n\nfunction sidebarIdFor(section: string): string {\n  return `sidebar-${slugify(section)}`;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n  return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n  return typeof value === \"string\" ? value.trim() : undefined;\n}\n\nfunction normalizeSidebarSlug(value: string): string {\n  if (value === \"/\" || value === \".\") return \"\";\n  return trimSlashes(value);\n}\n\nfunction getSidebarNavigation(docs: FarmDocsResolvedConfig): SidebarNavigationItem[] {\n  const navigation = docs.config.navigation;\n  if (!isObjectRecord(navigation) || !Array.isArray(navigation.sidebar)) return [];\n  return navigation.sidebar.map(normalizeSidebarNavigationItem).filter(isSidebarNavigationItem);\n}\n\nfunction normalizeSidebarNavigationItem(value: unknown): SidebarNavigationItem | null {\n  if (!isObjectRecord(value)) return null;\n\n  const label = readString(value.label) ?? readString(value.title);\n  const icon = readString(value.icon);\n  const slug = readOptionalString(value.slug) ?? readOptionalString(value.path);\n  const href = readString(value.href) ?? readString(value.url);\n  const rawChildren = Array.isArray(value.children)\n    ? value.children\n    : Array.isArray(value.items)\n      ? value.items\n      : [];\n  const children = rawChildren.map(normalizeSidebarNavigationItem).filter(isSidebarNavigationItem);\n\n  if (!label && !slug && !href && children.length === 0) return null;\n  return {\n    ...(label ? { label } : {}),\n    ...(icon ? { icon } : {}),\n    ...(slug !== undefined ? { slug: normalizeSidebarSlug(slug) } : {}),\n    ...(href ? { href } : {}),\n    children,\n  };\n}\n\nfunction createSidebarPageMaps(pages: FarmDocsPage[]) {\n  return {\n    bySlug: new Map(pages.map((page) => [page.slug, page])),\n    byHref: new Map(pages.map((page) => [page.href, page])),\n  };\n}\n\nfunction resolveConfiguredSidebarPage(\n  item: SidebarNavigationItem,\n  maps: ReturnType<typeof createSidebarPageMaps>,\n): FarmDocsPage | undefined {\n  if (item.slug !== undefined) return maps.bySlug.get(item.slug);\n  if (item.href) return maps.byHref.get(item.href);\n  return undefined;\n}\n\nfunction getSidebarIconRegistry(docs: FarmDocsResolvedConfig): Record<string, unknown> {\n  return isObjectRecord(docs.config.icons) ? docs.config.icons : {};\n}\n\nfunction renderConfiguredIconSvg(value: unknown): string {\n  if (typeof value !== \"string\") return \"\";\n  const icon = value.trim();\n  if (!icon) return \"\";\n  if (/^<svg[\\s>]/i.test(icon)) return icon;\n  if (/^<(path|circle|rect|line|polyline|polygon|ellipse|g)\\b/i.test(icon)) {\n    return `<svg viewBox=\"0 0 24 24\" focusable=\"false\">${icon}</svg>`;\n  }\n  return \"\";\n}\n\nfunction renderSidebarIcon(\n  docs: FarmDocsResolvedConfig,\n  icon: string | undefined,\n  className = \"sidebar-icon fd-sidebar-icon\",\n): string {\n  if (!icon) return \"\";\n  const iconRegistry = getSidebarIconRegistry(docs);\n  const configuredIcon = iconRegistry[icon] ?? icon;\n  const svg = renderConfiguredIconSvg(configuredIcon);\n  if (!svg) return \"\";\n  return `<span class=\"${className}\" data-sidebar-icon=\"${escapeAttribute(icon)}\" aria-hidden=\"true\">${svg}</span>`;\n}\n\nfunction renderSidebarLabel(\n  docs: FarmDocsResolvedConfig,\n  icon: string | undefined,\n  label: string,\n  className: string,\n): string {\n  return `<span class=\"${className}\">${renderSidebarIcon(docs, icon)}<span class=\"sidebar-label-text\">${escapeHtml(label)}</span></span>`;\n}\n\nfunction getSidebarPageLabel(item: FarmDocsPage, configured?: SidebarNavigationItem): string {\n  if (configured?.label) return configured.label;\n  if (item.slug === \"\") return \"Why?\";\n  if (item.slug === \"integrations\") return \"Overview\";\n  if (item.slug === \"integrations/ui-registry\") return \"UI Registry\";\n  if (item.slug === \"integrations/orm-storage\") return \"ORM Storage\";\n  if (item.slug.startsWith(\"integrations/\")) {\n    return item.title.replace(/\\s+Integrations?$/i, \"\");\n  }\n  return item.title;\n}\n\nfunction renderSidebarLink(\n  item: FarmDocsPage,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n  configured?: SidebarNavigationItem,\n): string {\n  const active = item.href === activeHref;\n  return `<a class=\"fd-sidebar-link${active ? \" fd-sidebar-link-active\" : \"\"}\" data-active=\"${active ? \"true\" : \"false\"}\" href=\"${escapeAttribute(item.href)}\">${renderSidebarLabel(docs, configured?.icon, getSidebarPageLabel(item, configured), \"sidebar-link-label fd-sidebar-link-label\")}</a>`;\n}\n\nfunction collectConfiguredSidebarPages(\n  items: SidebarNavigationItem[],\n  maps: ReturnType<typeof createSidebarPageMaps>,\n  seen = new Set<string>(),\n): FarmDocsPage[] {\n  const ordered: FarmDocsPage[] = [];\n  for (const item of items) {\n    const page = resolveConfiguredSidebarPage(item, maps);\n    if (page && !seen.has(page.slug)) {\n      seen.add(page.slug);\n      ordered.push(page);\n    }\n    ordered.push(...collectConfiguredSidebarPages(item.children, maps, seen));\n  }\n  return ordered;\n}\n\nfunction getOrderedSidebarPages(\n  pages: FarmDocsPage[],\n  docs?: FarmDocsResolvedConfig,\n): FarmDocsPage[] {\n  if (!docs) return [...pages].sort(compareSidebarPages);\n\n  const maps = createSidebarPageMaps(pages);\n  const configuredPages = collectConfiguredSidebarPages(getSidebarNavigation(docs), maps);\n  if (configuredPages.length === 0) return [...pages].sort(compareSidebarPages);\n\n  const configuredSlugs = new Set(configuredPages.map((page) => page.slug));\n  const remainingPages = pages\n    .filter((page) => !configuredSlugs.has(page.slug))\n    .sort(compareSidebarPages);\n  return [...configuredPages, ...remainingPages];\n}\n\nfunction renderExternalSidebarLink(\n  item: SidebarNavigationItem,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  if (!item.href || !item.label) return \"\";\n  const active = item.href === activeHref;\n  return `<a class=\"fd-sidebar-link${active ? \" fd-sidebar-link-active\" : \"\"}\" data-active=\"${active ? \"true\" : \"false\"}\" href=\"${escapeAttribute(item.href)}\">${renderSidebarLabel(docs, item.icon, item.label, \"sidebar-link-label fd-sidebar-link-label\")}</a>`;\n}\n\nfunction renderConfiguredSidebarSubgroup(\n  item: SidebarNavigationItem,\n  childHtml: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const label = item.label;\n  if (!label) return childHtml;\n  return `<div class=\"sidebar-subgroup fd-sidebar-folder\" data-sidebar-subgroup=\"${escapeAttribute(slugify(label))}\">\n  <div class=\"sidebar-subgroup-title fd-sidebar-folder-trigger\">${renderSidebarLabel(docs, item.icon, label, \"sidebar-subgroup-label\")}</div>\n  <div class=\"sidebar-subgroup-content fd-sidebar-folder-content\">\n${childHtml}\n  </div>\n</div>`;\n}\n\nfunction renderConfiguredSidebarItems(\n  items: SidebarNavigationItem[],\n  maps: ReturnType<typeof createSidebarPageMaps>,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const renderedItems: string[] = [];\n  for (const item of items) {\n    const page = resolveConfiguredSidebarPage(item, maps);\n    const childHtml = renderConfiguredSidebarItems(item.children, maps, activeHref, docs);\n\n    if (item.children.length > 0) {\n      renderedItems.push(renderConfiguredSidebarSubgroup(item, childHtml, docs));\n      continue;\n    }\n\n    const linkHtml = page\n      ? renderSidebarLink(page, activeHref, docs, item)\n      : renderExternalSidebarLink(item, activeHref, docs);\n    if (linkHtml) renderedItems.push(linkHtml);\n  }\n  return renderedItems.join(\"\\n\");\n}\n\nfunction renderConfiguredSidebarSection(\n  section: SidebarNavigationItem,\n  maps: ReturnType<typeof createSidebarPageMaps>,\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const label = section.label || \"Docs\";\n  const id = sidebarIdFor(label);\n  const links = renderConfiguredSidebarItems(section.children, maps, activeHref, docs);\n  return `<div class=\"sidebar-folder fd-sidebar-folder\" data-state=\"open\">\n  <button class=\"text-fd-muted-foreground sidebar-folder-trigger fd-sidebar-folder-trigger\" type=\"button\" aria-controls=\"${escapeAttribute(id)}\" aria-expanded=\"true\">${renderSidebarLabel(docs, section.icon, label, \"sidebar-folder-label\")}</button>\n  <div id=\"${escapeAttribute(id)}\" class=\"overflow-hidden sidebar-folder-content fd-sidebar-folder-content\" data-state=\"open\">\n${links}\n  </div>\n</div>`;\n}\n\nfunction renderAutoSidebarSectionItems(\n  items: FarmDocsPage[],\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  return [...items]\n    .sort(compareSidebarPages)\n    .map((item) => renderSidebarLink(item, activeHref, docs))\n    .join(\"\\n\");\n}\n\nfunction renderPixelNavItems(\n  pages: FarmDocsPage[],\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const configuredSidebar = getSidebarNavigation(docs);\n  if (configuredSidebar.length > 0) {\n    const maps = createSidebarPageMaps(pages);\n    const renderedSections = configuredSidebar\n      .map((section) => {\n        if (section.children.length > 0) {\n          return renderConfiguredSidebarSection(section, maps, activeHref, docs);\n        }\n        const page = resolveConfiguredSidebarPage(section, maps);\n        return page\n          ? renderSidebarLink(page, activeHref, docs, section)\n          : renderExternalSidebarLink(section, activeHref, docs);\n      })\n      .filter(Boolean)\n      .join(\"\\n\");\n\n    return `<div class=\"sidebar-scroll overscroll-contain fd-sidebar-nav\">\n  <div class=\"sidebar-tree\">\n${renderedSections}\n  </div>\n</div>`;\n  }\n\n  const groups = new Map<string, FarmDocsPage[]>();\n  for (const item of pages) {\n    const group = item.slug === \"\" ? \"Start\" : getSidebarSection(item);\n    const entries = groups.get(group) ?? [];\n    entries.push(item);\n    groups.set(group, entries);\n  }\n\n  const renderedSections = Array.from(groups.entries())\n    .sort(([a], [b]) => {\n      const aOrder = SIDEBAR_SECTION_ORDER.indexOf(a);\n      const bOrder = SIDEBAR_SECTION_ORDER.indexOf(b);\n      return (aOrder === -1 ? 100 : aOrder) - (bOrder === -1 ? 100 : bOrder) || a.localeCompare(b);\n    })\n    .map(([section, items]) => {\n      const id = sidebarIdFor(section);\n      const links = renderAutoSidebarSectionItems(items, activeHref, docs);\n      return `<div class=\"sidebar-folder fd-sidebar-folder\" data-state=\"open\">\n  <button class=\"text-fd-muted-foreground sidebar-folder-trigger fd-sidebar-folder-trigger\" type=\"button\" aria-controls=\"${escapeAttribute(id)}\" aria-expanded=\"true\">${renderSidebarLabel(docs, undefined, section, \"sidebar-folder-label\")}</button>\n  <div id=\"${escapeAttribute(id)}\" class=\"overflow-hidden sidebar-folder-content fd-sidebar-folder-content\" data-state=\"open\">\n${links}\n  </div>\n</div>`;\n    })\n    .join(\"\\n\");\n\n  return `<div class=\"sidebar-scroll overscroll-contain fd-sidebar-nav\">\n  <div class=\"sidebar-tree\">\n${renderedSections}\n  </div>\n</div>`;\n}\n\nfunction renderPixelPageNav(\n  pages: FarmDocsPage[],\n  activeHref: string,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const orderedPages = getOrderedSidebarPages(pages, docs);\n  const activeIndex = orderedPages.findIndex((item) => item.href === activeHref);\n  if (activeIndex === -1) return \"\";\n\n  const previous = orderedPages[activeIndex - 1];\n  const next = orderedPages[activeIndex + 1];\n  if (!previous && !next) return \"\";\n\n  const renderChevron = (direction: \"prev\" | \"next\") =>\n    `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"${direction === \"prev\" ? \"15 18 9 12 15 6\" : \"9 18 15 12 9 6\"}\" /></svg>`;\n  const renderCard = (item: FarmDocsPage, direction: \"prev\" | \"next\") =>\n    `<a class=\"fd-page-nav-card fd-page-nav-${direction}\" href=\"${escapeAttribute(item.href)}\">\n  <span class=\"fd-page-nav-title fd-page-nav-title-${direction}\">${direction === \"prev\" ? `${renderChevron(direction)}${escapeHtml(item.title)}` : `${escapeHtml(item.title)}${renderChevron(direction)}`}</span>\n  <span class=\"fd-page-nav-description\">${direction === \"prev\" ? \"Previous Page\" : \"Next Page\"}</span>\n</a>`;\n\n  return `<nav class=\"not-prose fd-page-nav\" aria-label=\"Page navigation\">\n  ${previous ? renderCard(previous, \"prev\") : \"\"}\n  ${next ? renderCard(next, \"next\") : \"\"}\n</nav>`;\n}\n\nfunction titleizePathSegment(value: string): string {\n  return value.replace(/[-_]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction isBreadcrumbEnabled(docs: FarmDocsResolvedConfig): boolean {\n  const breadcrumb = docs.config.breadcrumb;\n  if (breadcrumb === false) return false;\n  if (breadcrumb && typeof breadcrumb === \"object\" && \"enabled\" in breadcrumb) {\n    return (breadcrumb as { enabled?: unknown }).enabled !== false;\n  }\n  return true;\n}\n\nfunction renderPixelBreadcrumb(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n  if (!isBreadcrumbEnabled(docs)) return \"\";\n\n  const segments = trimSlashes(page.slug).split(\"/\").filter(Boolean);\n  if (segments.length < 2) return \"\";\n\n  const parentSegments = segments.slice(0, -1);\n  const parentSegment = parentSegments[parentSegments.length - 1];\n  const currentSegment = segments[segments.length - 1];\n  const entry = normalizeEntry(docs.entry);\n  const parentPath = parentSegments.join(\"/\");\n  const parentHref = entry === \"/\" ? `/${parentPath}` : `${entry}/${parentPath}`;\n\n  return `<nav class=\"fd-breadcrumb\" aria-label=\"Breadcrumb\">\n  <span class=\"fd-breadcrumb-item\">\n    <a class=\"fd-breadcrumb-parent fd-breadcrumb-link\" href=\"${escapeAttribute(parentHref)}\">${escapeHtml(titleizePathSegment(parentSegment))}</a>\n  </span>\n  <span class=\"fd-breadcrumb-item\">\n    <span class=\"fd-breadcrumb-sep\">/</span>\n    <span class=\"fd-breadcrumb-current\">${escapeHtml(titleizePathSegment(currentSegment))}</span>\n  </span>\n</nav>`;\n}\n\nfunction renderDocsSearchTrigger(showIcon = true, className = \"\"): string {\n  return `<button class=\"fd-docs-search-trigger ${className}\" type=\"button\" data-search-full=\"\" aria-label=\"Search documentation\" aria-haspopup=\"dialog\" aria-keyshortcuts=\"Meta+K Control+K\">\n  ${showIcon ? '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"11\" cy=\"11\" r=\"7\"></circle><path d=\"m20 20-4-4\"></path></svg>' : \"\"}\n  <kbd><span>⌘</span><span>K</span></kbd>\n</button>`;\n}\n\nfunction renderDocsSearchMount(clientEntry: string): string {\n  return `<div id=\"farm-docs-search-root\" data-farm-docs-search-root data-api=\"/api/docs\"></div>\n  <script type=\"module\" src=\"${escapeAttribute(clientEntry)}\"></script>`;\n}\n\nfunction renderDocsSearchBootstrapScript(): string {\n  return `<script>${generateFarmDocsSearchBootstrapRuntime()}</script>`;\n}\n\nfunction renderPixelToc(items: TocItem[]): string {\n  if (items.length === 0) return '<p class=\"toc-empty\">No sections</p>';\n  return `<div class=\"toc-track fd-toc-list\">\n  <div class=\"toc-thumb\" data-toc-thumb style=\"clip-path: polygon(0 0px, 100% 0px, 100% 32px, 0 32px);\"></div>\n  <div class=\"toc-links\">\n${items\n  .map(\n    (item) =>\n      `<a class=\"toc-link fd-toc-link${items[0] === item ? \" fd-toc-link-active\" : \"\"}\" data-active=\"${items[0] === item ? \"true\" : \"false\"}\" data-toc-item data-depth=\"${item.level}\" href=\"#${escapeAttribute(item.id)}\">${escapeHtml(item.title)}</a>`,\n  )\n  .join(\"\\n\")}\n  </div>\n</div>`;\n}\n\nfunction renderDocsRuntimeScript(docs: FarmDocsResolvedConfig): string {\n  const docsEntry = JSON.stringify(normalizeEntry(docs.entry));\n  const reconcileHeadRuntime = `const farmNavigationHeadSelector=${JSON.stringify(FARM_NAVIGATION_HEAD_SELECTOR)};const reconcileDocsHead=(nextDoc)=>{const nextTitle=nextDoc.querySelector(\"title\");document.title=nextTitle?.textContent||\"\";document.head.querySelectorAll(farmNavigationHeadSelector).forEach((node)=>node.remove());nextDoc.head.querySelectorAll(farmNavigationHeadSelector).forEach((node)=>document.head.appendChild(document.importNode(node,true)))}`;\n  return `<script>(()=>{if(window.__farmDocsRuntime)return;window.__farmDocsRuntime=true;document.documentElement.dataset.farmDocsRuntime=\"true\";document.documentElement.dataset.farmDocsRuntimeId=Math.random().toString(36).slice(2);${reconcileHeadRuntime};const docsEntry=${docsEntry};let cleanupToc=()=>{};let closeMobileSidebar=()=>{};const normalizePath=(path)=>path.length>1?path.replace(/\\\\/+$/,\"\"):path;const isDocsPath=(path)=>{const next=normalizePath(path);const entry=normalizePath(docsEntry);if(next.endsWith(\".md\"))return false;if(entry===\"/\")return true;return next===entry||next.startsWith(entry+\"/\")};const initToc=()=>{cleanupToc();const toc=document.getElementById(\"nd-toc\");if(!toc){cleanupToc=()=>{};return}const links=Array.from(toc.querySelectorAll(\"[data-toc-item]\"));const thumb=toc.querySelector(\"[data-toc-thumb]\");const pairs=links.map((link)=>{let id=link.hash.slice(1);try{id=decodeURIComponent(id)}catch{}return{link,heading:document.getElementById(id)}}).filter((item)=>item.heading);const setActive=(active)=>{for(const {link} of pairs){const selected=link===active.link;link.dataset.active=selected?\"true\":\"false\";link.classList.toggle(\"fd-toc-link-active\",selected)}if(!thumb)return;const styles=getComputedStyle(active.link);const top=active.link.offsetTop+parseFloat(styles.paddingTop||\"0\");const bottom=active.link.offsetTop+active.link.clientHeight-parseFloat(styles.paddingBottom||\"0\");thumb.style.clipPath=\"polygon(0 \"+top+\"px,100% \"+top+\"px,100% \"+bottom+\"px,0 \"+bottom+\"px)\"};const update=()=>{if(pairs.length===0)return;const offset=Math.min(window.innerHeight*0.3,160);let active=pairs[0];for(const pair of pairs){if(pair.heading.getBoundingClientRect().top<=offset)active=pair;else break}setActive(active)};let frame=0;const schedule=()=>{if(frame)return;frame=requestAnimationFrame(()=>{frame=0;update()})};const onHashChange=()=>setTimeout(schedule,0);window.addEventListener(\"scroll\",schedule,{passive:true});window.addEventListener(\"resize\",schedule);window.addEventListener(\"hashchange\",onHashChange);cleanupToc=()=>{window.removeEventListener(\"scroll\",schedule);window.removeEventListener(\"resize\",schedule);window.removeEventListener(\"hashchange\",onHashChange);if(frame)cancelAnimationFrame(frame);frame=0};update()};const getSidebar=()=>document.getElementById(\"nd-sidebar\");const ensureActiveVisible=()=>{const sidebar=getSidebar();if(!sidebar)return;const active=sidebar.querySelector('a[data-active=\"true\"]');if(!(active instanceof HTMLElement))return;const activeRect=active.getBoundingClientRect();const sidebarRect=sidebar.getBoundingClientRect();if(activeRect.top<sidebarRect.top||activeRect.bottom>sidebarRect.bottom)sidebar.scrollTop+=activeRect.top-sidebarRect.top-(sidebar.clientHeight-activeRect.height)/2};const setSidebarActive=(path)=>{const sidebar=getSidebar();if(!sidebar)return;const current=normalizePath(path);for(const link of Array.from(sidebar.querySelectorAll(\"a[href]\"))){try{link.dataset.active=normalizePath(new URL(link.href,location.href).pathname)===current?\"true\":\"false\"}catch{}}ensureActiveVisible()};const initMobileSidebar=()=>{const layout=document.getElementById(\"nd-docs-layout\");const sidebar=getSidebar();const toggle=document.querySelector(\"[data-sidebar-toggle]\");const backdrop=document.querySelector(\"[data-sidebar-backdrop]\");if(!layout||!sidebar||!(toggle instanceof HTMLButtonElement))return;const setOpen=(open)=>{layout.dataset.sidebarOpen=open?\"true\":\"false\";sidebar.classList.toggle(\"fd-sidebar-open\",open);document.documentElement.dataset.farmDocsSidebar=open?\"open\":\"closed\";toggle.setAttribute(\"aria-expanded\",open?\"true\":\"false\");toggle.setAttribute(\"aria-label\",open?\"Close menu\":\"Open menu\")};const toggleOpen=()=>setOpen(layout.dataset.sidebarOpen!==\"true\");closeMobileSidebar=()=>setOpen(false);toggle.addEventListener(\"click\",(event)=>{event.preventDefault();toggleOpen()});backdrop?.addEventListener(\"click\",()=>closeMobileSidebar());document.addEventListener(\"keydown\",(event)=>{if(event.key===\"Escape\")closeMobileSidebar()});sidebar.addEventListener(\"click\",(event)=>{const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(target)closeMobileSidebar()});closeMobileSidebar()};const initSidebarScroll=()=>{const sidebar=getSidebar();if(!sidebar)return;const key=\"farmdocs:sidebar-scroll:\"+location.origin;const getStorage=()=>{try{return window.sessionStorage}catch{return null}};const readSaved=()=>{try{const raw=getStorage()?.getItem(key);if(!raw)return null;const parsed=JSON.parse(raw);return parsed&&typeof parsed===\"object\"?parsed:null}catch{return null}};const save=(path=location.pathname)=>{try{getStorage()?.setItem(key,JSON.stringify({path,scrollTop:sidebar.scrollTop}))}catch{}};const saved=readSaved();if(saved?.path===location.pathname&&Number.isFinite(Number(saved.scrollTop)))sidebar.scrollTop=Number(saved.scrollTop);ensureActiveVisible();save();sidebar.addEventListener(\"scroll\",()=>save(),{passive:true});sidebar.addEventListener(\"click\",(event)=>{const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(!target)return;try{save(new URL(target.href,location.href).pathname)}catch{save()}});window.addEventListener(\"beforeunload\",()=>save())};let navigateController=null;const getPageKey=(root)=>{const article=root.getElementById(\"nd-page\");if(!article)return\"\";return article.querySelector(\"h1\")?.textContent?.trim()||article.textContent?.replace(/\\\\s+/g,\" \").trim().slice(0,160)||\"\"};const swapDocsPage=(html,url)=>{const nextDoc=new DOMParser().parseFromString(html,\"text/html\");const nextArticle=nextDoc.getElementById(\"nd-page\");const currentArticle=document.getElementById(\"nd-page\");if(!nextArticle||!currentArticle)return false;const nextKey=getPageKey(nextDoc);const importedArticle=document.importNode(nextArticle,true);currentArticle.replaceWith(importedArticle);const renderedArticle=document.getElementById(\"nd-page\");if(!renderedArticle||renderedArticle===currentArticle||(nextKey&&getPageKey(document)!==nextKey))return false;const nextToc=nextDoc.getElementById(\"nd-toc\");const currentToc=document.getElementById(\"nd-toc\");if(nextToc&&currentToc)currentToc.replaceWith(document.importNode(nextToc,true));reconcileDocsHead(nextDoc);setSidebarActive(url.pathname);initToc();closeMobileSidebar();return true};const navigateDocs=async(url,{replace=false,scroll=true}={})=>{if(!isDocsPath(url.pathname))return false;if(navigateController)navigateController.abort();const controller=new AbortController();navigateController=controller;document.documentElement.dataset.farmDocsNavigating=\"true\";try{const response=await fetch(url.href,{cache:\"no-store\",headers:{accept:\"text/html\",\"x-farm-docs-navigate\":\"1\"},signal:controller.signal});if(!response.ok||!((response.headers.get(\"content-type\")||\"\").includes(\"text/html\")))return false;const html=await response.text();if(!swapDocsPage(html,url))return false;if(replace)history.replaceState({farmDocs:true},\"\",url.href);else history.pushState({farmDocs:true},\"\",url.href);if(scroll){if(url.hash){let id=url.hash.slice(1);try{id=decodeURIComponent(id)}catch{}document.getElementById(id)?.scrollIntoView({block:\"start\"})}else window.scrollTo({top:0,left:0})}return true}catch(error){if(error?.name===\"AbortError\")return true;return false}finally{if(navigateController===controller){delete document.documentElement.dataset.farmDocsNavigating;navigateController=null}}};const initClientNavigation=()=>{document.addEventListener(\"click\",(event)=>{if(event.defaultPrevented||event.button!==0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return;const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(!target||target.target||target.hasAttribute(\"download\"))return;let url;try{url=new URL(target.href,location.href)}catch{return}if(url.origin!==location.origin||!isDocsPath(url.pathname))return;if(normalizePath(url.pathname)===normalizePath(location.pathname)&&url.hash)return;event.preventDefault();navigateDocs(url).then((handled)=>{if(!handled)location.href=url.href})});window.addEventListener(\"popstate\",()=>{navigateDocs(new URL(location.href),{replace:true,scroll:false}).then((handled)=>{if(!handled)location.reload()})})};const init=()=>{initToc();initMobileSidebar();initSidebarScroll();initClientNavigation()};if(document.readyState===\"loading\")document.addEventListener(\"DOMContentLoaded\",init,{once:true});else init()})();</script>`;\n}\n\nfunction renderDocsPageActionsRuntimeScript(): string {\n  return `<script>(()=>{if(window.__farmDocsPageActionsRuntime)return;window.__farmDocsPageActionsRuntime=true;const readArticleText=()=>{const article=document.getElementById(\"nd-page\");if(!article)return\"\";const clone=article.cloneNode(true);if(!(clone instanceof HTMLElement))return article.innerText||\"\";clone.querySelectorAll(\"[data-page-actions],.fd-page-footer,.fd-page-nav\").forEach((node)=>node.remove());return clone.innerText||\"\"};const withTitle=(content,format,includeTitle)=>{if(!includeTitle)return content;const title=document.querySelector(\"#nd-page h1\")?.textContent?.trim()||document.title.trim();if(!title)return content;const trimmed=content.trimStart();if(trimmed.startsWith(title)||trimmed.startsWith(\"# \"+title))return content;return format===\"markdown\"?\"# \"+title+\"\\\\n\\\\n\"+content:title+\"\\\\n\\\\n\"+content};const writeClipboard=async(text)=>{if(navigator.clipboard?.writeText){try{await navigator.clipboard.writeText(text);return}catch{}}const textarea=document.createElement(\"textarea\");textarea.value=text;textarea.setAttribute(\"readonly\",\"\");textarea.style.position=\"fixed\";textarea.style.opacity=\"0\";textarea.style.pointerEvents=\"none\";document.body.appendChild(textarea);textarea.select();document.execCommand(\"copy\");textarea.remove()};const markCopied=(button)=>{const label=button.querySelector(\"[data-page-action-label]\");button.dataset.copied=\"true\";button.setAttribute(\"aria-label\",button.dataset.copiedLabel||\"Copied!\");button.title=button.dataset.copiedLabel||\"Copied!\";if(label)label.textContent=button.dataset.copiedLabel||\"Copied!\";const previous=Number(button.dataset.copyTimeout||0);if(previous)clearTimeout(previous);button.dataset.copyTimeout=String(setTimeout(()=>{button.dataset.copied=\"false\";button.setAttribute(\"aria-label\",button.dataset.copyLabel||\"Copy page\");button.title=button.dataset.copyLabel||\"Copy page\";if(label)label.textContent=button.dataset.copyLabel||\"Copy page\";button.dataset.copyTimeout=\"0\"},4500))};document.addEventListener(\"click\",async(event)=>{const target=event.target instanceof Element?event.target.closest('[data-page-action=\"copy-markdown\"]'):null;if(!(target instanceof HTMLButtonElement))return;event.preventDefault();const format=target.dataset.copyMarkdownFormat===\"text\"?\"text\":\"markdown\";const includeTitle=target.dataset.copyMarkdownIncludeTitle===\"true\";let content=\"\";target.disabled=true;try{if(format===\"markdown\"&&target.dataset.markdownUrl){try{const response=await fetch(target.dataset.markdownUrl,{headers:{Accept:\"text/markdown\"}});if(response.ok)content=await response.text()}catch{}}if(!content)content=readArticleText();content=withTitle(content,format,includeTitle);if(content.trim()){await writeClipboard(content);markCopied(target)}}finally{target.disabled=false}})})();</script>`;\n}\n\nfunction renderDocsHashRuntimeScript(): string {\n  return `<script>(()=>{if(window.__farmDocsHashRuntime)return;window.__farmDocsHashRuntime=true;const scrollToHash=()=>{if(!location.hash)return;let id=location.hash.slice(1);try{id=decodeURIComponent(id)}catch{}document.getElementById(id)?.scrollIntoView({block:\"start\"})};const schedule=()=>requestAnimationFrame(()=>requestAnimationFrame(scrollToHash));if(document.readyState===\"loading\")document.addEventListener(\"DOMContentLoaded\",schedule,{once:true});else schedule();window.addEventListener(\"load\",schedule,{once:true});window.addEventListener(\"hashchange\",schedule)})();</script>`;\n}\n\nfunction renderDocsRuntimeScripts(docs: FarmDocsResolvedConfig): string {\n  return `${renderDocsRuntimeScript(docs)}\n${renderDocsHashRuntimeScript()}\n${renderDocsPageActionsRuntimeScript()}`;\n}\n\nfunction renderFarmDocsFontPreloads(fontAssets: readonly FarmDocsPublicFontAsset[]): string {\n  return fontAssets\n    .map(\n      ({ url }) =>\n        `<link rel=\"preload\" href=\"${escapeAttribute(url)}\" as=\"font\" type=\"font/woff2\" crossorigin>`,\n    )\n    .join(\"\\n  \");\n}\n\nfunction renderFarmDocsFontPreloadHeader(fontAssets: readonly FarmDocsPublicFontAsset[]): string {\n  return fontAssets\n    .map(({ url }) => `<${url}>; rel=preload; as=font; type=font/woff2; crossorigin`)\n    .join(\", \");\n}\n\nfunction getFarmLayoutFontPreloads(layoutFonts?: FarmLayoutFonts) {\n  const seen = new Set<string>();\n  return [layoutFonts?.body, layoutFonts?.code].flatMap((font) =>\n    (font?.preloads || []).filter(({ href }) => {\n      if (seen.has(href)) return false;\n      seen.add(href);\n      return true;\n    }),\n  );\n}\n\nfunction renderFarmLayoutFontPreloadHeader(layoutFonts?: FarmLayoutFonts): string {\n  return getFarmLayoutFontPreloads(layoutFonts)\n    .map(({ href, type }) => `<${href}>; rel=preload; as=font; type=${type}; crossorigin`)\n    .join(\", \");\n}\n\nfunction renderPixelDocsHtml(\n  page: LoadedFarmDocsPage,\n  pages: FarmDocsPage[],\n  docs: FarmDocsResolvedConfig,\n  clientEntry: string,\n  faviconHref: string,\n  requestUrl: URL,\n  fontAssets: readonly FarmDocsPublicFontAsset[],\n  fontStylesheetHref?: string,\n  globalStylesheetHref?: string,\n): string {\n  const navTitle =\n    typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n      ? String((docs.config.nav as { title?: unknown }).title || \"Docs\")\n      : \"Docs\";\n  const description = page.description || docs.config.metadata?.description || \"\";\n  // Rendering and TOC extraction share the same preprocessed Marked pass. This\n  // guarantees MDX lines removed before rendering, Setext/CommonMark edge\n  // cases, and duplicate-slug counters cannot diverge between the article and\n  // its navigation.\n  const renderedMarkdown = renderMarkdownDocument(page.body, getThemeTocDepth(docs));\n  const tocItems = renderedMarkdown.tocItems;\n  const themeName = getThemeName(docs);\n  const searchEnabled = isFarmDocsSearchEnabled(docs);\n  const socialMetadata = isFarmDocsSocialImageEnabled(page, docs)\n    ? renderFarmDocsSocialMetadata(\n        createFarmDocsSocialImageDescriptor(page, docs, requestUrl),\n        getFarmDocsCustomSocialImage(page),\n      )\n    : \"\";\n\n  return `<!DOCTYPE html>\n<html class=\"dark\" lang=\"en\" data-docs-theme=\"${escapeAttribute(themeName)}\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"generator\" content=\"@farming-labs/docs via Farm.js\">\n  <title>${escapeHtml(page.title)}</title>\n  ${renderFarmDocsFaviconLink(faviconHref)}\n  ${renderFarmDocsFontPreloads(fontAssets)}\n  ${fontStylesheetHref ? `<link rel=\"stylesheet\" href=\"${escapeAttribute(fontStylesheetHref)}\">` : \"\"}\n  ${globalStylesheetHref ? `<link rel=\"stylesheet\" href=\"${escapeAttribute(globalStylesheetHref)}\">` : \"\"}\n  ${description ? `<meta name=\"description\" content=\"${escapeHtml(description)}\">` : \"\"}\n  ${socialMetadata}\n  ${searchEnabled ? renderDocsSearchBootstrapScript() : \"\"}\n</head>\n<body>\n  <div id=\"nd-docs-layout\" class=\"fd-layout\" data-fd-framework=\"farmjs\">\n    <header class=\"mobile-topbar fd-header\" aria-label=\"Mobile docs navigation\">\n      <button class=\"fd-mobile-nav-btn fd-menu-btn\" type=\"button\" data-sidebar-toggle aria-controls=\"nd-sidebar\" aria-expanded=\"false\" aria-label=\"Open menu\">\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line></svg>\n      </button>\n      <a class=\"fd-header-title\" href=\"/\">${escapeHtml(navTitle)}</a>\n      <div class=\"mobile-topbar-actions\">\n        ${searchEnabled ? renderDocsSearchTrigger(true, \"fd-search-trigger-mobile\") : \"\"}\n        <a class=\"mobile-topbar-link\" href=\"/llms.txt\">llms.txt</a>\n      </div>\n    </header>\n    <aside id=\"nd-sidebar\" class=\"fd-sidebar\">\n      <div class=\"sidebar-brand fd-sidebar-header\">\n        <a class=\"fd-sidebar-title\" href=\"/\">${renderFarmDocsBrandMark()}${renderFarmDocsBrandTitle(navTitle)}</a>\n        <span>/ docs</span>\n      </div>\n      ${searchEnabled ? `<div class=\"fd-sidebar-search\">${renderDocsSearchTrigger(true, \"fd-sidebar-search-btn\")}</div>` : \"\"}\n      ${renderPixelNavItems(pages, page.href, docs)}\n    </aside>\n    <div class=\"sidebar-backdrop fd-sidebar-overlay\" data-sidebar-backdrop></div>\n    <main class=\"fd-main\">\n      <div class=\"fd-page\">\n      <article id=\"nd-page\" class=\"prose fd-page-article fd-page-body fd-docs-content\">\n        ${renderPixelBreadcrumb(page, docs)}\n${renderMarkdownHtmlWithTitleMeta(page, docs, renderedMarkdown.html)}\n        ${renderPixelPageFooter(page, docs)}\n        ${renderPixelPageNav(pages, page.href, docs)}\n      </article>\n      <nav id=\"nd-toc\" class=\"fd-toc sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 max-xl:hidden\" data-toc aria-labelledby=\"toc-title\">\n      <div class=\"fd-toc-inner\">\n        <h3 id=\"toc-title\" class=\"fd-toc-title inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground\"><svg class=\"size-4\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 7h16\"></path><path d=\"M4 12h16\"></path><path d=\"M4 17h16\"></path></svg>On this page</h3>\n        <div class=\"toc-scroll\">\n          ${renderPixelToc(tocItems)}\n        </div>\n      </div>\n    </nav>\n      </div>\n    </main>\n  </div>\n  ${searchEnabled ? renderDocsSearchMount(clientEntry) : \"\"}\n  ${renderDocsRuntimeScripts(docs)}\n</body>\n</html>`;\n}\n\nexport function createFarmDocsHandler(\n  docs: FarmDocsResolvedConfig | undefined,\n  options: FarmDocsHandlerOptions,\n) {\n  const faviconHref = resolveFarmDocsFavicon(docs, options);\n  const fontAssets =\n    options.fontAssets ?? toFarmDocsPublicFontAssets(resolveFarmDocsFontAssets(options.root));\n  const fallbackFontPreloadHeader = renderFarmDocsFontPreloadHeader(fontAssets);\n\n  return async function handleFarmDocsRequest(request: Request): Promise<Response | null> {\n    if (!docs?.enabled || (request.method !== \"GET\" && request.method !== \"HEAD\")) return null;\n\n    const contentDir = resolveFarmDocsContentDir(docs, options);\n    const requestUrl = new URL(request.url);\n    const socialImageSlug = getFarmDocsSocialImageSlug(docs, requestUrl);\n    if (socialImageSlug !== null) {\n      const socialImagePage = loadFarmDocsPage(contentDir, docs, socialImageSlug);\n      if (\n        !socialImagePage ||\n        !isFarmDocsSocialImageEnabled(socialImagePage, docs) ||\n        getFarmDocsCustomSocialImage(socialImagePage)\n      ) {\n        return null;\n      }\n\n      const descriptor = createFarmDocsSocialImageDescriptor(socialImagePage, docs, requestUrl);\n      if (requestUrl.pathname !== descriptor.imagePath) return null;\n\n      const etag = `\"${descriptor.hash}\"`;\n      const immutable = requestUrl.searchParams.get(\"v\") === descriptor.hash;\n      const headers = new Headers({\n        \"Content-Type\": \"image/svg+xml; charset=utf-8\",\n        \"Cache-Control\": immutable\n          ? \"public, max-age=31536000, immutable\"\n          : \"public, max-age=0, must-revalidate\",\n        ETag: etag,\n        \"X-Content-Type-Options\": \"nosniff\",\n      });\n      if (matchesFarmIfNoneMatch(request.headers.get(\"if-none-match\"), etag)) {\n        return new Response(null, { status: 304, headers });\n      }\n      if (request.method === \"HEAD\") return new Response(null, { status: 200, headers });\n\n      return new Response(renderFarmDocsSocialImageSvg(descriptor), { status: 200, headers });\n    }\n\n    const publicResponse = createFarmDocsPublicResponse(contentDir, docs, request);\n    if (publicResponse) return omitFarmDocsHeadBody(request, publicResponse);\n\n    if (!isFarmDocsRequest(docs, request)) return null;\n\n    const page = loadPage(contentDir, docs, request);\n    if (!page) return null;\n\n    if (shouldReturnMarkdown(request)) {\n      const origin = new URL(request.url).origin;\n      return omitFarmDocsHeadBody(\n        request,\n        new Response(\n          renderDocsMarkdownDocument(toFarmDocsMarkdownPage(page), {\n            origin,\n            llms: docs.config.llmsTxt ?? true,\n            sitemap: docs.config.sitemap,\n          }),\n          {\n            status: 200,\n            headers: {\n              \"Content-Type\": \"text/markdown; charset=utf-8\",\n              \"Cache-Control\": \"public, max-age=60\",\n            },\n          },\n        ),\n      );\n    }\n\n    const pathname = new URL(request.url).pathname;\n    const layoutFonts = await options.resolveLayoutFonts?.(pathname);\n    const usesLayoutFonts = Boolean(layoutFonts?.body || layoutFonts?.code);\n    const activeFontAssets = usesLayoutFonts ? [] : fontAssets;\n    const fontPreloadHeader = usesLayoutFonts\n      ? renderFarmLayoutFontPreloadHeader(layoutFonts)\n      : fallbackFontPreloadHeader;\n\n    return omitFarmDocsHeadBody(\n      request,\n      new Response(\n        renderPixelDocsHtml(\n          page,\n          discoverFarmDocsPages(contentDir, docs),\n          docs,\n          options.clientEntry || \"/farm-client.js\",\n          faviconHref,\n          requestUrl,\n          activeFontAssets,\n          usesLayoutFonts ? options.fontStylesheetHref : undefined,\n          options.globalStylesheetHref,\n        ),\n        {\n          status: 200,\n          headers: {\n            \"Content-Type\": \"text/html; charset=utf-8\",\n            \"Cache-Control\": \"public, s-maxage=60, stale-while-revalidate=300\",\n            ...(fontPreloadHeader ? { Link: fontPreloadHeader } : {}),\n          },\n        },\n      ),\n    );\n  };\n}\n","import type { FarmLayoutFonts } from \"../font\";\nimport { resolveFarmDocsContentDir } from \"./handler\";\nimport type { FarmDocsResolvedConfig } from \"./types\";\n\ninterface FarmDocsAdapterServerModule {\n  createFarmDocsRuntimeHandler?: (\n    config: Record<string, unknown>,\n    options: {\n      rootDir: string;\n      clientEntry: string;\n      stylesheets: string[];\n      resolveLayoutFonts?: (\n        pathname: string,\n      ) => FarmLayoutFonts | undefined | Promise<FarmLayoutFonts | undefined>;\n      loadReactModule?: () => Promise<any>;\n    },\n  ) => (request: Request) => Promise<Response | null>;\n}\n\nexport interface FarmDocsAdapterHandlerOptions {\n  root: string;\n  srcDir?: string;\n  clientEntry: string;\n  fontStylesheetHref?: string;\n  globalStylesheetHref?: string;\n  resolveLayoutFonts?: (\n    pathname: string,\n  ) => FarmLayoutFonts | undefined | Promise<FarmLayoutFonts | undefined>;\n  loadModule: (specifier: string) => Promise<any>;\n}\n\nexport function hasFarmDocsRuntimeAdapter(\n  docs: FarmDocsResolvedConfig | undefined,\n): docs is FarmDocsResolvedConfig & { adapter: NonNullable<FarmDocsResolvedConfig[\"adapter\"]> } {\n  return Boolean(docs?.enabled && docs.adapter?.server && docs.adapter.react);\n}\n\n/**\n * Load a documentation runtime through the versioned adapter descriptor.\n *\n * Core deliberately knows nothing about the adapter's DOM or theme. It only\n * supplies host assets and Vite's module loader; the adapter returns the final\n * Web Request handler.\n */\nexport async function createFarmDocsAdapterHandler(\n  docs: FarmDocsResolvedConfig,\n  options: FarmDocsAdapterHandlerOptions,\n): Promise<(request: Request) => Promise<Response | null>> {\n  if (!hasFarmDocsRuntimeAdapter(docs)) {\n    throw new Error(\"Farm docs adapter requires server and react runtime entrypoints.\");\n  }\n\n  const serverModule = (await options.loadModule(\n    docs.adapter.server,\n  )) as FarmDocsAdapterServerModule;\n  if (typeof serverModule.createFarmDocsRuntimeHandler !== \"function\") {\n    const adapterId = JSON.stringify(docs.adapter.id);\n    const serverEntry = JSON.stringify(docs.adapter.server);\n    throw new Error(\n      `Farm docs adapter ${adapterId} does not export createFarmDocsRuntimeHandler from ${serverEntry}. ` +\n        \"Upgrade the adapter to a runtime-enabled release.\",\n    );\n  }\n\n  const runtimeConfig = {\n    ...docs.config,\n    entry: docs.config.entry || docs.entry.replace(/^\\/+|\\/+$/g, \"\") || \"docs\",\n    docsPath: docs.entry,\n    contentDir: resolveFarmDocsContentDir(docs, {\n      root: options.root,\n      srcDir: options.srcDir,\n    }),\n  };\n\n  return serverModule.createFarmDocsRuntimeHandler(runtimeConfig as Record<string, unknown>, {\n    rootDir: options.root,\n    clientEntry: options.clientEntry,\n    stylesheets: [options.fontStylesheetHref, options.globalStylesheetHref].filter(\n      (value): value is string => typeof value === \"string\" && value.length > 0,\n    ),\n    resolveLayoutFonts: options.resolveLayoutFonts,\n    loadReactModule: () => options.loadModule(docs.adapter.react!),\n  });\n}\n","import { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmDocsAdapterDescriptor, FarmDocsUserConfig } from \"./types\";\n\nconst FRAMEWORK_PACKAGE = \"@farming-labs/farmjs\";\nconst FRAMEWORK_CONFIG_ENTRY = \"@farming-labs/farmjs/config\";\n\n/**\n * The adapter descriptor protocol this core release knows how to drive.\n * Auto-detection must never wire up a descriptor from a future framework\n * release that this core cannot interpret; explicit withDocs() usage stays\n * the user's own call.\n */\nconst SUPPORTED_ADAPTER_PROTOCOL = 1;\n\nexport interface FarmDocsFrameworkDetectionOptions {\n  root: string;\n  log?: (message: string) => void;\n  warn?: (message: string) => void;\n}\n\n/**\n * Delegation triggers only for a dependency the app declared itself. A copy\n * that is merely resolvable through hoisting or a transitive dependency must\n * not silently change how the app's docs are served.\n */\nasync function frameworkDeclaredByApp(root: string): Promise<boolean> {\n  try {\n    const raw = await readFile(path.join(root, \"package.json\"), \"utf8\");\n    const manifest = JSON.parse(raw) as Record<string, unknown>;\n    for (const field of [\"dependencies\", \"devDependencies\", \"peerDependencies\"]) {\n      const section = manifest[field];\n      if (section && typeof section === \"object\" && FRAMEWORK_PACKAGE in section) {\n        return true;\n      }\n    }\n  } catch {\n    // Unreadable manifest: treat as not declared and keep the embedded renderer.\n  }\n  return false;\n}\n\nconst emittedNotices = new Set<string>();\n\n/** Test hook: notices are once-per-process so dev-server restarts stay quiet. */\nexport function resetFarmDocsFrameworkDetectionNotices(): void {\n  emittedNotices.clear();\n}\n\nfunction noticeOnce(key: string, emit: (message: string) => void, message: string): void {\n  if (emittedNotices.has(key)) return;\n  emittedNotices.add(key);\n  emit(message);\n}\n\nfunction docsWantsFrameworkDetection(docs: FarmDocsUserConfig | undefined): boolean {\n  if (docs === true) return true;\n  if (!docs || typeof docs !== \"object\") return false;\n  if (docs.enabled === false) return false;\n  // An explicit descriptor means the app already wired an adapter; an\n  // explicit `false` is the opt-out that pins the embedded renderer.\n  if (docs.adapter !== undefined) return false;\n  return true;\n}\n\nfunction isSupportedAdapterDescriptor(value: unknown): value is FarmDocsAdapterDescriptor {\n  if (!value || typeof value !== \"object\") return false;\n  const descriptor = value as Partial<FarmDocsAdapterDescriptor>;\n  return (\n    descriptor.protocol === SUPPORTED_ADAPTER_PROTOCOL &&\n    typeof descriptor.server === \"string\" &&\n    descriptor.server.length > 0 &&\n    typeof descriptor.react === \"string\" &&\n    descriptor.react.length > 0\n  );\n}\n\n/**\n * Delegate `docs: {}` to the @farming-labs/farmjs docs framework when the app\n * has it installed (#483 phase 1).\n *\n * Detection applies the framework's own withDocs() to the user config, so the\n * result is byte-for-byte what a manual `withDocs(defineConfig(...))` produces:\n * the MDX Vite plugin plus the versioned adapter descriptor. When the package\n * is absent the embedded renderer keeps serving, with a one-time migration\n * notice. Any failure falls back to the embedded renderer instead of breaking\n * a working app.\n */\nexport async function applyFarmDocsFrameworkAutoDetection<\n  T extends { docs?: FarmDocsUserConfig; vite?: unknown },\n>(userConfig: T, options: FarmDocsFrameworkDetectionOptions): Promise<T> {\n  if (!docsWantsFrameworkDetection(userConfig.docs)) return userConfig;\n\n  const log = options.log ?? ((message: string) => console.log(message));\n  const warn = options.warn ?? ((message: string) => console.warn(message));\n  const root = path.resolve(options.root || process.cwd());\n\n  if (!(await frameworkDeclaredByApp(root))) {\n    noticeOnce(\n      \"embedded-fallback\",\n      warn,\n      `[farm] docs is served by the embedded renderer, which is being replaced by the ${FRAMEWORK_PACKAGE} docs framework. ` +\n        `Install ${FRAMEWORK_PACKAGE} (with @farming-labs/docs and @farming-labs/theme) to migrate now, ` +\n        \"or set docs.adapter = false to keep the embedded renderer and silence this notice.\",\n    );\n    return userConfig;\n  }\n\n  let configEntryPath: string;\n  try {\n    const requireFromApp = createRequire(path.join(root, \"package.json\"));\n    configEntryPath = requireFromApp.resolve(FRAMEWORK_CONFIG_ENTRY);\n  } catch {\n    noticeOnce(\n      \"declared-not-installed\",\n      warn,\n      `[farm] ${FRAMEWORK_PACKAGE} is declared in package.json but could not be resolved; ` +\n        \"keeping the embedded docs renderer. Run your package manager's install to enable docs delegation.\",\n    );\n    return userConfig;\n  }\n\n  try {\n    const frameworkConfig = await import(/* @vite-ignore */ pathToFileURL(configEntryPath).href);\n    const withDocs = frameworkConfig?.withDocs;\n    if (typeof withDocs !== \"function\") {\n      noticeOnce(\n        \"missing-withdocs\",\n        warn,\n        `[farm] ${FRAMEWORK_CONFIG_ENTRY} does not export withDocs(); keeping the embedded docs renderer.`,\n      );\n      return userConfig;\n    }\n\n    const applied = withDocs(userConfig);\n    const adapter = (applied as { docs?: { adapter?: unknown } } | undefined)?.docs?.adapter;\n    if (!isSupportedAdapterDescriptor(adapter)) {\n      noticeOnce(\n        \"unsupported-descriptor\",\n        warn,\n        `[farm] The installed ${FRAMEWORK_PACKAGE} release publishes a docs adapter this Farm version cannot drive ` +\n          `(need protocol ${SUPPORTED_ADAPTER_PROTOCOL}); keeping the embedded docs renderer. ` +\n          \"Upgrading @farm.js/core usually resolves this.\",\n      );\n      return userConfig;\n    }\n\n    noticeOnce(\n      \"delegated\",\n      log,\n      `[farm] docs: delegated to ${FRAMEWORK_PACKAGE} (detected in this app). ` +\n        \"Set docs.adapter = false to keep the embedded renderer.\",\n    );\n    return applied as T;\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    noticeOnce(\n      \"detect-failed\",\n      warn,\n      `[farm] Failed to load ${FRAMEWORK_CONFIG_ENTRY} (${message}); keeping the embedded docs renderer.`,\n    );\n    return userConfig;\n  }\n}\n","import type { FarmUserConfig } from \"./config\";\n\n/** Define a Farm application config while preserving literal types. */\nexport function defineConfig<const TConfig extends FarmUserConfig>(config: TConfig): TConfig {\n  return config;\n}\n\n/** @deprecated Use {@link defineConfig}. */\nexport const defineFarmConfig = defineConfig;\n\nexport type { FarmUserConfig };\n","import type {\n  FarmConfig as BaseFarmConfig,\n  FarmMigrationCommand,\n  FarmMigrationsConfig,\n  FarmMigrationsUserConfig,\n  ResolvedFarmMigrationsConfig,\n} from \"./types\";\nimport type { DocsConfig } from \"@farming-labs/docs\";\nimport type { FarmDocsResolvedConfig, FarmDocsUserConfig } from \"./docs/types\";\nimport type { FarmIntegrationsUserConfig } from \"./integrations\";\nimport type { FarmMarkdownResolvedConfig, FarmMarkdownUserConfig } from \"./markdown\";\nimport type { FarmObservabilityUserConfig } from \"./observability\";\nimport type { FarmMiddlewareConfig } from \"./middleware/types\";\nimport type { FarmPlugin } from \"./plugin\";\nimport type { FarmWorkflowsResolvedConfig, FarmWorkflowsUserConfig } from \"./workflows\";\nimport type { FarmCronResolvedConfig, FarmCronUserConfig } from \"./cron\";\nimport type { FarmEnvConfig, ResolvedFarmEnv } from \"./env\";\nimport type { UserConfig as ViteUserConfig } from \"vite\";\nimport { resolveIntegrationPlugins } from \"./integrations\";\nimport { resolveMarkdownConfig } from \"./markdown\";\nimport { resolveWorkflowsConfig } from \"./workflows\";\nimport { resolveCronConfig } from \"./cron\";\nimport { resolveEnv, setEnv } from \"./env\";\nimport {\n  resolveMdxConfig,\n  type FarmMdxResolvedConfig,\n  type FarmMdxUserConfig,\n} from \"./app-markdown-config\";\nimport {\n  normalizeRouteRules,\n  routeRulesToHeaders,\n  routeRulesToRedirects,\n  type FarmRouteRules,\n} from \"./route-rules\";\nimport {\n  resolveServerActionsConfig,\n  type FarmServerActionsConfig,\n  type ResolvedFarmServerActionsConfig,\n} from \"./server-action-security\";\nimport {\n  resolveFarmServerConfig,\n  type FarmServerConfig,\n  type ResolvedFarmServerConfig,\n} from \"./server-http\";\nimport {\n  loadFarmConfigFile,\n  resolveFarmLayers,\n  type FarmLayerEntry,\n  type ResolvedFarmLayer,\n} from \"./layers\";\nimport path from \"path\";\nimport { logger } from \"./utils\";\nimport { normalizeFarmDeploymentId } from \"./deployment\";\nimport { normalizeFarmConfigBasePath } from \"./base-path\";\nimport { resolveFarmDevtoolsConfig, type ResolvedFarmDevtoolsConfig } from \"./devtools-config\";\nimport {\n  resolveFarmDevIndicatorsConfig,\n  type FarmDevIndicatorsConfig,\n  type ResolvedFarmDevIndicatorsConfig,\n} from \"./dev-indicators\";\nimport {\n  resolveFarmImageConfig,\n  type FarmImageConfig,\n  type ResolvedFarmImageConfig,\n} from \"./image-config\";\nimport { resolveFarmI18nConfig } from \"./i18n/config\";\nimport type { FarmI18nUserConfig, ResolvedFarmI18nConfig } from \"./i18n/types\";\nimport type { FarmCacheUserConfig } from \"./cache\";\nimport {\n  resolveFarmAuthConfig,\n  resolveFarmAuthIntegration,\n  type FarmAuthUserConfig,\n  type ResolvedFarmAuthConfig,\n} from \"./auth-config\";\nimport { resolveFarmPerformanceConfig, type ResolvedFarmPerformanceConfig } from \"./preload\";\nimport { validateConfigRouteSource } from \"./plugins/route-pattern\";\nimport {\n  farmCspBlocksFrameworkInlineScripts,\n  getFarmSecurityHeader,\n  resolveFarmSecurityConfig,\n  type FarmCspConfig,\n  type FarmCspDirectives,\n  type FarmCspDirectiveValue,\n  type FarmCspOptions,\n  type FarmSecurityConfig,\n  type ResolvedFarmCspConfig,\n  type ResolvedFarmSecurityConfig,\n} from \"./security\";\nimport { isFarmRedirectStatus } from \"./navigation-errors\";\nimport { resolveFarmThemeConfig } from \"./theme/config\";\nimport { resolveFarmAgentConfig, type ResolvedFarmAgentConfig } from \"./agent-config\";\nimport type { ResolvedFarmThemeConfig } from \"./theme/types\";\nimport { isReactRenderer, resolveFarmRenderer } from \"./renderer\";\nimport type { FarmRenderer } from \"./renderer\";\nimport { applyFarmDocsFrameworkAutoDetection } from \"./docs/framework-detect\";\nimport { resolveFarmAPIConfig, type ResolvedFarmAPIConfig } from \"./api/config\";\n\nconst FARM_RESOLVED_CUSTOM_CONTEXT = Symbol.for(\"farm.resolvedCustomContext\");\n\nexport type {\n  FarmDocsConfigInput,\n  FarmDocsNavigationConfig,\n  FarmDocsResolvedConfig,\n  FarmDocsSidebarItem,\n  FarmDocsUserConfig,\n} from \"./docs/types\";\nexport type {\n  FarmMarkdownResolvedConfig,\n  FarmMarkdownRouteInput,\n  FarmMarkdownUserConfig,\n} from \"./markdown\";\nexport type {\n  FarmMdxComponents,\n  FarmMdxResolvedConfig,\n  FarmMdxUserConfig,\n} from \"./app-markdown-config\";\nexport type {\n  FarmMigrationCommand,\n  FarmMigrationsConfig,\n  FarmMigrationsUserConfig,\n  ResolvedFarmMigrationsConfig,\n} from \"./types\";\nexport type { FarmWorkflowsResolvedConfig, FarmWorkflowsUserConfig } from \"./workflows\";\nexport type { FarmCronJobConfig, FarmCronResolvedConfig, FarmCronUserConfig } from \"./cron\";\nexport type {\n  FarmRouteRule,\n  FarmRouteRuleCors,\n  FarmRouteRuleRedirect,\n  FarmRouteRuleRenderMode,\n  FarmRouteRules,\n} from \"./route-rules\";\nexport type {\n  FarmServerActionsConfig,\n  ResolvedFarmServerActionsConfig,\n} from \"./server-action-security\";\nexport type {\n  FarmServerConfig,\n  FarmServerDuration,\n  FarmServerHealthConfig,\n  ResolvedFarmServerConfig,\n  ResolvedFarmServerHealthConfig,\n} from \"./server-http\";\nexport type { FarmLayerEntry, ResolvedFarmLayer } from \"./layers\";\nexport type {\n  FarmDevtoolsConfig,\n  FarmDevtoolsUserConfig,\n  ResolvedFarmDevtoolsConfig,\n} from \"./devtools-config\";\nexport type {\n  FarmBuildActivityPosition,\n  FarmDevIndicatorsConfig,\n  ResolvedFarmDevIndicatorsConfig,\n} from \"./dev-indicators\";\nexport type {\n  FarmPerformanceConfig,\n  FarmPreloadMode,\n  FarmPreloadUserConfig,\n  ResolvedFarmPerformanceConfig,\n  ResolvedFarmPreloadConfig,\n} from \"./preload\";\nexport type {\n  FarmImageConfig,\n  FarmImageFormat,\n  FarmImageLocalPattern,\n  FarmImageProvider,\n  FarmImageRemotePattern,\n  ResolvedFarmImageConfig,\n} from \"./image-config\";\nexport type {\n  FarmI18nCookieConfig,\n  FarmI18nDetectionSignal,\n  FarmI18nDirection,\n  FarmI18nRouting,\n  FarmI18nUserConfig,\n  ResolvedFarmI18nConfig,\n} from \"./i18n/types\";\nexport type {\n  FarmAuthConfig,\n  FarmAuthDatabaseConfig,\n  FarmAuthEmailAndPasswordConfig,\n  FarmAuthSessionConfig,\n  FarmAuthUserConfig,\n  ResolvedFarmAuthConfig,\n} from \"./auth-config\";\nexport type {\n  FarmCspConfig,\n  FarmCspDirectives,\n  FarmCspDirectiveValue,\n  FarmCspOptions,\n  FarmSecurityConfig,\n  ResolvedFarmCspConfig,\n  ResolvedFarmSecurityConfig,\n} from \"./security\";\nexport type {\n  FarmRenderer,\n  FarmRendererCapabilities,\n  FarmRendererCapabilitiesInput,\n  FarmRendererStreamingCapabilities,\n} from \"./renderer\";\nexport { defineRenderer } from \"./renderer\";\nexport type {\n  FarmAPIConfig,\n  FarmAPIConfigResolverContext,\n  FarmAPIConfigValue,\n  ResolvedFarmAPIConfig,\n} from \"./api/config\";\n\nexport interface RedirectConfig {\n  source: string;\n  destination: string;\n  permanent?: boolean;\n  statusCode?: import(\"./navigation-errors\").FarmRedirectStatus;\n}\n\nexport interface HeaderConfig {\n  source: string;\n  headers: Array<{\n    key: string;\n    value: string;\n  }>;\n}\n\nexport interface RewriteConfig {\n  source: string;\n  destination: string;\n}\n\n/** @deprecated Use FarmImageConfig. */\nexport type ImageConfig = FarmImageConfig;\n\n/** @deprecated Use FarmI18nUserConfig. */\nexport type I18nConfig = FarmI18nUserConfig;\n\nexport interface OpenAPIConfig {\n  enabled?: boolean;\n  route?: string;\n  /**\n   * Path where the raw OpenAPI spec is served as JSON, so agents and API tools\n   * can fetch it at a predictable URL. Set to `false` to disable.\n   *\n   * @default \"/openapi.json\"\n   */\n  specRoute?: string | false;\n  title?: string;\n  description?: string;\n  version?: string;\n  servers?: Array<{\n    url: string;\n    description?: string;\n  }>;\n  contact?: {\n    name?: string;\n    email?: string;\n    url?: string;\n  };\n  license?: {\n    name: string;\n    url?: string;\n  };\n}\n\nexport type MiddlewareConfig = FarmMiddlewareConfig;\n\nexport interface NotFoundConfig {\n  /** Path to a custom 404 page component (e.g., \"./src/app/not-found.tsx\") */\n  component?: string;\n}\n\nexport type FarmDeployTarget = \"vercel\" | \"cloudflare\" | \"netlify\" | \"node\" | string;\n\nexport interface FarmDeployConfig {\n  /**\n   * Deployment platform. When present, Farm picks the matching Nitro preset and\n   * output directory unless explicitly overridden.\n   */\n  target?: FarmDeployTarget;\n  /** Nitro preset override. Usually inferred from target. */\n  preset?: BaseFarmConfig[\"preset\"];\n  /** Deployable output directory, relative to project root unless absolute. */\n  outputDir?: string;\n  /** Alias for outputDir for terser config. */\n  output?: string;\n  /** Cloudflare Pages project name used by `farm deploy --cloudflare`. */\n  projectName?: string;\n  vercel?: {\n    outputDirectory?: string;\n    buildCommand?: string;\n    installCommand?: string;\n    framework?: string | null;\n  };\n  cloudflare?: {\n    outputDir?: string;\n    projectName?: string;\n  };\n  netlify?: {\n    outputDir?: string;\n    site?: string;\n  };\n}\n\nexport interface ResolvedFarmDeployConfig extends Omit<FarmDeployConfig, \"output\"> {\n  target?: FarmDeployTarget;\n  preset: BaseFarmConfig[\"preset\"];\n  outputDir: string;\n}\n\nexport interface FarmUserConfig extends Omit<BaseFarmConfig, \"vite\" | \"docs\" | \"env\" | \"layers\"> {\n  /** Reusable Farm directories or installed packages, applied from left to right. */\n  extends?: readonly FarmLayerEntry[];\n  /** Global plugins. Integration-bound plugins must be contributed through an integration. */\n  plugins?: FarmPlugin<any, any, any, any, unknown, false>[];\n  integrations?: FarmIntegrationsUserConfig;\n  /**\n   * Farm-native authentication. `true` enables email/password auth with\n   * server helpers from `@farm.js/auth/server` and React APIs from\n   * `@farm.js/auth/client`.\n   */\n  auth?: FarmAuthUserConfig;\n  /** Shared application data, route, ISR, and PPR cache. */\n  cache?: FarmCacheUserConfig;\n  migrations?: FarmMigrationsUserConfig;\n  /** Map portable cron schedules to ordinary GET API routes. */\n  cron?: FarmCronUserConfig | FarmCronResolvedConfig | false;\n  workflows?: FarmWorkflowsUserConfig | boolean;\n  preset?: BaseFarmConfig[\"preset\"];\n  deploy?: FarmDeployConfig;\n  docs?: FarmDocsUserConfig;\n  md?: FarmMarkdownUserConfig | boolean;\n  mdx?: FarmMdxUserConfig;\n  observability?: FarmObservabilityUserConfig;\n  trailingSlash?: boolean;\n  redirects?: () => Promise<RedirectConfig[]> | RedirectConfig[];\n  rewrites?: () => Promise<RewriteConfig[]> | RewriteConfig[];\n  headers?: () => Promise<HeaderConfig[]> | HeaderConfig[];\n\n  images?: ImageConfig;\n  publicDir?: string;\n\n  i18n?: FarmI18nUserConfig | false;\n  openapi?: OpenAPIConfig;\n\n  middleware?: FarmMiddlewareConfig;\n  routeRules?: FarmRouteRules;\n  context?: BaseFarmConfig[\"context\"];\n  /** Server ingress and trusted-proxy policy. */\n  server?: FarmServerConfig;\n  serverActions?: FarmServerActionsConfig;\n  /** Build identifier used to detect and recover from deployment version skew. */\n  deploymentId?: string;\n\n  notFound?: NotFoundConfig;\n\n  distDir?: string;\n  generateBuildId?: () => string | Promise<string>;\n  compress?: boolean;\n\n  devIndicators?: FarmDevIndicatorsConfig;\n\n  serverRuntimeConfig?: Record<string, any>;\n  publicRuntimeConfig?: Record<string, any>;\n\n  env?: FarmEnvConfig<any, any>;\n\n  vite?: ViteUserConfig | ((config: ViteUserConfig) => ViteUserConfig);\n\n  [key: string]: any;\n}\n\nexport interface ResolvedFarmConfig extends Required<\n  Omit<\n    FarmUserConfig,\n    | \"extends\"\n    | \"plugins\"\n    | \"vite\"\n    | \"deploy\"\n    | \"docs\"\n    | \"md\"\n    | \"mdx\"\n    | \"migrations\"\n    | \"cron\"\n    | \"workflows\"\n    | \"api\"\n    | \"env\"\n    | \"server\"\n    | \"serverActions\"\n    | \"devtools\"\n    | \"devIndicators\"\n    | \"images\"\n    | \"i18n\"\n    | \"auth\"\n    | \"performance\"\n    | \"security\"\n    | \"theme\"\n    | \"renderer\"\n    | \"agent\"\n  >\n> {\n  agent: ResolvedFarmAgentConfig;\n  /** @internal Tracks whether `context` came from user/layer config instead of the default noop. */\n  [FARM_RESOLVED_CUSTOM_CONTEXT]?: boolean;\n  root: string;\n  extends: readonly FarmLayerEntry[];\n  layers: ResolvedFarmLayer[];\n  plugins: FarmPlugin[];\n  vite: ViteUserConfig;\n  deploy: ResolvedFarmDeployConfig;\n  docs: FarmDocsResolvedConfig;\n  md: FarmMarkdownResolvedConfig;\n  mdx: FarmMdxResolvedConfig;\n  migrations: ResolvedFarmMigrationsConfig;\n  cron: FarmCronResolvedConfig;\n  workflows: FarmWorkflowsResolvedConfig;\n  api: ResolvedFarmAPIConfig;\n  env: ResolvedFarmEnv;\n  server: ResolvedFarmServerConfig;\n  serverActions: ResolvedFarmServerActionsConfig;\n  devtools: ResolvedFarmDevtoolsConfig;\n  devIndicators: ResolvedFarmDevIndicatorsConfig;\n  images: ResolvedFarmImageConfig;\n  i18n: ResolvedFarmI18nConfig;\n  auth: ResolvedFarmAuthConfig;\n  performance: ResolvedFarmPerformanceConfig;\n  security: ResolvedFarmSecurityConfig;\n  theme: ResolvedFarmThemeConfig;\n  renderer: FarmRenderer;\n  routeRules: FarmRouteRules;\n  notFound: NotFoundConfig;\n}\n\nexport function hasCustomFarmRouteContext(config: ResolvedFarmConfig): boolean {\n  return config[FARM_RESOLVED_CUSTOM_CONTEXT] === true;\n}\n\nexport type FarmLayerConfig = Omit<\n  FarmUserConfig,\n  | \"root\"\n  | \"outDir\"\n  | \"distDir\"\n  | \"deploy\"\n  | \"preset\"\n  | \"publicDir\"\n  | \"generateBuildId\"\n  | \"deploymentId\"\n>;\n\nexport { defineConfig, defineFarmConfig } from \"./config-entry\";\n\nexport function normalizeDeployTarget(target?: FarmDeployTarget): FarmDeployTarget | undefined {\n  if (!target) return undefined;\n  if (target === \"cloudflare-pages\" || target === \"cloudflare_pages\") return \"cloudflare\";\n  if (target === \"node-server\" || target === \"nitro\") return \"node\";\n  return target;\n}\n\nexport function getPresetForDeployTarget(\n  target?: FarmDeployTarget,\n): BaseFarmConfig[\"preset\"] | undefined {\n  switch (normalizeDeployTarget(target)) {\n    case \"vercel\":\n      return \"vercel\";\n    case \"cloudflare\":\n      return \"cloudflare-pages\";\n    case \"netlify\":\n      return \"netlify\";\n    case \"node\":\n      return \"node-server\";\n    default:\n      return undefined;\n  }\n}\n\nexport function getDeployTargetForPreset(preset?: string): FarmDeployTarget | undefined {\n  if (!preset) return undefined;\n  if (preset === \"vercel\" || preset === \"vercel-edge\") return \"vercel\";\n  if (preset === \"cloudflare\" || preset === \"cloudflare-pages\" || preset === \"cloudflare-module\") {\n    return \"cloudflare\";\n  }\n  if (preset === \"netlify\" || preset === \"netlify-edge\") return \"netlify\";\n  if (preset === \"node-server\") return \"node\";\n  return undefined;\n}\n\nexport function getDefaultDeployOutputDir(\n  target: FarmDeployTarget | undefined,\n  preset: string | undefined,\n  distDir: string,\n): string {\n  const normalizedTarget = normalizeDeployTarget(target) || getDeployTargetForPreset(preset);\n  if (normalizedTarget === \"vercel\") return \".vercel/output\";\n  return `${distDir}/.output`;\n}\n\nexport function resolveDeployOutputPath(root: string, outputDir: string): string {\n  return path.isAbsolute(outputDir) ? outputDir : path.join(root, outputDir);\n}\n\nconst PLATFORM_BUILD_ENV_TARGETS: ReadonlyArray<[string, FarmDeployTarget]> = [\n  [\"VERCEL\", \"vercel\"],\n  [\"NETLIFY\", \"netlify\"],\n  [\"CF_PAGES\", \"cloudflare\"],\n];\n\n/**\n * Deploy target announced by the build environment (VERCEL=1, NETLIFY=true,\n * CF_PAGES=1), or undefined outside platform CI.\n */\nexport function detectPlatformDeployTarget(\n  env: NodeJS.ProcessEnv = process.env,\n): FarmDeployTarget | undefined {\n  for (const [key, target] of PLATFORM_BUILD_ENV_TARGETS) {\n    if (env[key]) return target;\n  }\n  return undefined;\n}\n\nconst warnedPlatformMismatches = new Set<string>();\n\nexport function resolveDeployConfig(\n  config: Pick<FarmUserConfig, \"deploy\" | \"preset\" | \"distDir\">,\n  overrides: {\n    target?: FarmDeployTarget;\n    preset?: BaseFarmConfig[\"preset\"];\n    outputDir?: string;\n    /** Build environment consulted for platform detection. Tests inject this. */\n    env?: NodeJS.ProcessEnv;\n  } = {},\n): ResolvedFarmDeployConfig {\n  const deploy = config.deploy || {};\n  const distDir = config.distDir || \".farm\";\n  // An explicit preset override replaces the deployment plan, so the\n  // configured platform target must not keep steering the output. Otherwise\n  // `farm build --preset node-server` on an app configured for Vercel writes\n  // a node server into .vercel/output — a directory Vercel will deploy as\n  // Build Output API content.\n  const overrideTarget = normalizeDeployTarget(overrides.target);\n  let target = overrideTarget\n    ? overrideTarget\n    : overrides.preset\n      ? getDeployTargetForPreset(overrides.preset)\n      : normalizeDeployTarget(deploy.target);\n\n  // A platform build environment (Vercel, Netlify, Cloudflare Pages) can only\n  // deploy its own output shape. When nothing selects a preset, the\n  // node-server fallback would build an artifact the platform cannot serve,\n  // so honor the detected platform instead. An explicit configuration always\n  // wins; it just gets a warning when it cannot run where it is being built.\n  const detectedTarget = detectPlatformDeployTarget(overrides.env);\n  if (detectedTarget) {\n    const hasExplicitSelection = Boolean(\n      target || overrides.preset || deploy.preset || config.preset,\n    );\n    if (!hasExplicitSelection) {\n      target = detectedTarget;\n      if (!warnedPlatformMismatches.has(`select:${detectedTarget}`)) {\n        warnedPlatformMismatches.add(`select:${detectedTarget}`);\n        logger.info(\n          `Detected ${detectedTarget} build environment; using the ${detectedTarget} preset. Set deploy.target in farm.config.ts to override.`,\n        );\n      }\n    }\n  }\n  // A CLI --target override governs the preset too: keep a configured preset\n  // only when it targets the same platform, otherwise derive the preset from\n  // the override target. Mirrors how a --preset override recomputes the target\n  // above, so `farm build --target netlify` never ships Vercel-shaped output.\n  const configuredPreset = deploy.preset || config.preset;\n  const overrideTargetPreset =\n    overrideTarget && getDeployTargetForPreset(configuredPreset) !== overrideTarget\n      ? getPresetForDeployTarget(overrideTarget)\n      : undefined;\n  const preset =\n    overrides.preset ||\n    overrideTargetPreset ||\n    configuredPreset ||\n    getPresetForDeployTarget(target) ||\n    \"node-server\";\n  const resolvedTarget = target || getDeployTargetForPreset(preset);\n  if (detectedTarget && resolvedTarget !== detectedTarget) {\n    const mismatchKey = `mismatch:${resolvedTarget}:${detectedTarget}`;\n    if (!warnedPlatformMismatches.has(mismatchKey)) {\n      warnedPlatformMismatches.add(mismatchKey);\n      logger.warn(\n        `The configured deploy target \"${resolvedTarget ?? preset}\" cannot be served by ${detectedTarget}, but this build is running in a ${detectedTarget} build environment. Set deploy.target: \"${detectedTarget}\" in farm.config.ts to deploy there.`,\n      );\n    }\n  }\n  const platformOutput =\n    resolvedTarget === \"vercel\"\n      ? deploy.vercel?.outputDirectory\n      : resolvedTarget === \"cloudflare\"\n        ? deploy.cloudflare?.outputDir\n        : resolvedTarget === \"netlify\"\n          ? deploy.netlify?.outputDir\n          : undefined;\n  const outputDir =\n    overrides.outputDir ||\n    deploy.outputDir ||\n    deploy.output ||\n    platformOutput ||\n    getDefaultDeployOutputDir(resolvedTarget, preset, distDir);\n\n  return {\n    ...deploy,\n    target: resolvedTarget,\n    preset,\n    outputDir,\n  };\n}\n\nexport function resolveMigrationsConfig(\n  migrations: FarmMigrationsUserConfig | undefined,\n): ResolvedFarmMigrationsConfig {\n  if (!migrations) return { commands: [] };\n  if (Array.isArray(migrations)) return { commands: migrations };\n  return { commands: migrations.commands || [] };\n}\n\nexport const DOCS_CONFIG_FILENAMES = [\n  \"docs.config.ts\",\n  \"docs.config.tsx\",\n  \"docs.config.mts\",\n  \"docs.config.cts\",\n  \"docs.config.js\",\n  \"docs.config.jsx\",\n  \"docs.config.mjs\",\n  \"docs.config.cjs\",\n  \"docs.json\",\n];\n\nfunction normalizeDocsRoute(value: string | undefined, fallback = \"/docs\"): string {\n  const raw = (value || fallback).trim();\n  if (!raw || raw === \"/\") return \"/\";\n  const normalized = raw\n    .replace(/\\\\/g, \"/\")\n    .replace(/\\/+/g, \"/\")\n    .replace(/^\\/?/, \"/\")\n    .replace(/\\/+$/, \"\");\n  return normalized || \"/\";\n}\n\nfunction docsRouteToEntry(route: string): string {\n  const entry = route.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  return entry || \"docs\";\n}\n\nfunction normalizeDocsContentDir(value: string | undefined): string | undefined {\n  if (!value) return undefined;\n  const normalized = value.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  return normalized || undefined;\n}\n\nasync function inferDocsContentDir(\n  root: string,\n  srcDir: string,\n  entry: string,\n): Promise<string | undefined> {\n  const { existsSync } = await import(\"fs\");\n  const contentDir = path.resolve(root, srcDir, \"app\", entry);\n  if (!existsSync(contentDir)) return undefined;\n\n  const relativeContentDir = path.relative(root, contentDir);\n  if (relativeContentDir.startsWith(\"..\") || path.isAbsolute(relativeContentDir)) return undefined;\n\n  return normalizeDocsContentDir(relativeContentDir);\n}\n\nfunction isRecord(value: unknown): value is Record<string, any> {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction cloneSerializable(value: unknown, seen = new WeakSet<object>()): any {\n  if (value === null) return null;\n\n  const valueType = typeof value;\n  if (valueType === \"string\" || valueType === \"number\" || valueType === \"boolean\") {\n    return value;\n  }\n  if (valueType === \"undefined\" || valueType === \"function\" || valueType === \"symbol\") {\n    return undefined;\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => cloneSerializable(item, seen)).filter((item) => item !== undefined);\n  }\n  if (value instanceof Date) {\n    return value.toISOString();\n  }\n  if (isRecord(value)) {\n    if (seen.has(value)) return undefined;\n    seen.add(value);\n\n    const output: Record<string, any> = {};\n    for (const [key, nestedValue] of Object.entries(value)) {\n      const clonedValue = cloneSerializable(nestedValue, seen);\n      if (clonedValue !== undefined) {\n        output[key] = clonedValue;\n      }\n    }\n    return output;\n  }\n\n  return undefined;\n}\n\nfunction sanitizeDocsConfig(config: Partial<DocsConfig>): Partial<DocsConfig> {\n  return cloneSerializable(config) || {};\n}\n\nexport async function findDocsConfigPath(\n  rootDir: string,\n  configPath?: string,\n): Promise<string | undefined> {\n  const { existsSync } = await import(\"fs\");\n  const root = path.resolve(rootDir || process.cwd());\n\n  if (configPath) {\n    const resolvedPath = path.isAbsolute(configPath) ? configPath : path.join(root, configPath);\n    if (!existsSync(resolvedPath)) {\n      throw new Error(`Could not find docs config at ${configPath}.`);\n    }\n    return path.resolve(resolvedPath);\n  }\n\n  for (const filename of DOCS_CONFIG_FILENAMES) {\n    const resolvedPath = path.join(root, filename);\n    if (existsSync(resolvedPath)) {\n      return resolvedPath;\n    }\n  }\n\n  return undefined;\n}\n\nexport async function loadDocsConfig(\n  rootDir: string,\n  configPath?: string,\n): Promise<{ config: Partial<DocsConfig>; configPath: string } | undefined> {\n  const fs = await import(\"fs/promises\");\n  const { pathToFileURL } = await import(\"url\");\n  const root = path.resolve(rootDir || process.cwd());\n  const resolvedPath = await findDocsConfigPath(root, configPath);\n\n  if (!resolvedPath) return undefined;\n\n  try {\n    if (resolvedPath.endsWith(\".json\")) {\n      const content = await fs.readFile(resolvedPath, \"utf8\");\n      return { config: JSON.parse(content), configPath: resolvedPath };\n    }\n\n    const { build } = await import(\"esbuild\");\n    const configCacheDir = path.join(root, \".farm\", \".config-loader\");\n    await fs.mkdir(configCacheDir, { recursive: true });\n    const modulePath = path.join(\n      configCacheDir,\n      `docs-config-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`,\n    );\n\n    await build({\n      absWorkingDir: root,\n      entryPoints: [resolvedPath],\n      outfile: modulePath,\n      bundle: true,\n      format: \"esm\",\n      platform: \"node\",\n      target: `node${process.versions.node.split(\".\")[0]}`,\n      packages: \"external\",\n      jsx: \"automatic\",\n      logLevel: \"silent\",\n      sourcemap: \"inline\",\n    });\n\n    const moduleUrl = pathToFileURL(modulePath).href + `?t=${Date.now()}`;\n    let importedConfig: any;\n\n    try {\n      importedConfig = await import(/* @vite-ignore */ moduleUrl);\n    } finally {\n      await fs.unlink(modulePath).catch(() => undefined);\n    }\n\n    return {\n      config: importedConfig.default || importedConfig,\n      configPath: resolvedPath,\n    };\n  } catch (error: any) {\n    const relativePath = path.relative(root, resolvedPath) || resolvedPath;\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(`Failed to load docs config from ${relativePath}: ${message}`);\n  }\n}\n\nexport async function resolveDocsConfig(\n  userDocs: FarmDocsUserConfig | undefined,\n  options: {\n    root?: string;\n    srcDir?: string;\n  } = {},\n): Promise<FarmDocsResolvedConfig> {\n  const root = options.root || process.cwd();\n\n  if (userDocs === false) {\n    return {\n      enabled: false,\n      entry: \"/docs\",\n      config: { entry: \"docs\", docsPath: \"/docs\" },\n    };\n  }\n\n  const docsOptions = isRecord(userDocs) ? userDocs : {};\n  if (docsOptions.enabled === false) {\n    return {\n      enabled: false,\n      entry: \"/docs\",\n      config: { entry: \"docs\", docsPath: \"/docs\" },\n    };\n  }\n\n  const loadedConfig = await loadDocsConfig(root, docsOptions.configPath);\n  const hasExplicitDocsConfig = userDocs === true || isRecord(userDocs);\n\n  if (!hasExplicitDocsConfig && !loadedConfig) {\n    return {\n      enabled: false,\n      entry: \"/docs\",\n      config: { entry: \"docs\", docsPath: \"/docs\" },\n    };\n  }\n\n  const inlineDocsConfig = sanitizeDocsConfig(docsOptions.config || {});\n  const directDocsConfig = sanitizeDocsConfig({\n    ...docsOptions,\n    adapter: undefined,\n    enabled: undefined,\n    config: undefined,\n    configPath: undefined,\n  } as Partial<DocsConfig>);\n  const loadedDocsConfig = sanitizeDocsConfig(loadedConfig?.config || {});\n  const mergedDocsConfig: Partial<DocsConfig> = {\n    ...loadedDocsConfig,\n    ...inlineDocsConfig,\n    ...directDocsConfig,\n  };\n\n  const explicitRoute = typeof docsOptions.entry === \"string\" ? docsOptions.entry : undefined;\n  const configuredDocsPath =\n    typeof mergedDocsConfig.docsPath === \"string\" ? mergedDocsConfig.docsPath : undefined;\n  const configuredEntry =\n    typeof mergedDocsConfig.entry === \"string\" ? mergedDocsConfig.entry : undefined;\n  const entryRoute = normalizeDocsRoute(\n    configuredDocsPath || explicitRoute || (configuredEntry ? `/${configuredEntry}` : undefined),\n  );\n  const docsEntry =\n    explicitRoute && explicitRoute.startsWith(\"/\")\n      ? docsRouteToEntry(explicitRoute)\n      : docsRouteToEntry(configuredEntry || entryRoute);\n  const configuredContentDir = normalizeDocsContentDir(\n    docsOptions.contentDir || mergedDocsConfig.contentDir,\n  );\n  const contentDir =\n    configuredContentDir || (await inferDocsContentDir(root, options.srcDir || \"src\", docsEntry));\n\n  return {\n    enabled: true,\n    entry: entryRoute,\n    ...(docsOptions.adapter ? { adapter: docsOptions.adapter } : {}),\n    contentDir,\n    configPath: loadedConfig?.configPath,\n    config: {\n      ...mergedDocsConfig,\n      entry: docsEntry,\n      docsPath: entryRoute,\n      ...(contentDir ? { contentDir } : {}),\n    },\n  };\n}\n\nfunction validateRedirectConfigs(redirects: RedirectConfig[], field: string): RedirectConfig[] {\n  for (const [index, redirect] of redirects.entries()) {\n    validateConfigRouteSource(redirect.source, `${field}[${index}].source`);\n    if (redirect.statusCode !== undefined && !isFarmRedirectStatus(redirect.statusCode)) {\n      throw new RangeError(\n        `${field}[${index}].statusCode must be one of 301, 302, 303, 307, or 308.`,\n      );\n    }\n  }\n  return redirects;\n}\n\nfunction validateConfigRouteSources<T extends { source: string }>(routes: T[], field: string): T[] {\n  for (const [index, route] of routes.entries()) {\n    validateConfigRouteSource(route.source, `${field}[${index}].source`);\n  }\n  return routes;\n}\n\nexport async function resolveConfig(\n  userConfig: FarmUserConfig,\n  mode: \"development\" | \"production\",\n): Promise<ResolvedFarmConfig> {\n  const projectRoot = userConfig.root || process.cwd();\n  const layerResolution = await resolveFarmLayers(userConfig, {\n    root: projectRoot,\n    mode,\n  });\n  userConfig = layerResolution.config;\n\n  if ((userConfig as Record<string, unknown>).typescript !== undefined) {\n    logger.warn(\n      'The top-level \"typescript\" option is not supported and has no effect. Configure TypeScript in `tsconfig.json` and run `tsc --noEmit` separately when builds must enforce project type errors.',\n    );\n  }\n\n  if ((userConfig as Record<string, unknown>).output !== undefined) {\n    logger.warn(\n      'The top-level \"output\" option is not supported and has no effect. Configure `deploy.target`, `deploy.preset`, or `deploy.outputDir` for deployment output, and use route rendering configuration for static pages.',\n    );\n  }\n\n  // The docs adapter runtime is React-only today; other renderers keep the\n  // embedded docs handler without any migration notice.\n  if (isReactRenderer(resolveFarmRenderer(userConfig.renderer))) {\n    userConfig = await applyFarmDocsFrameworkAutoDetection(userConfig, {\n      root: userConfig.root || projectRoot,\n    });\n  }\n\n  const redirects = validateRedirectConfigs(\n    typeof userConfig.redirects === \"function\"\n      ? await userConfig.redirects()\n      : userConfig.redirects || [],\n    \"redirects\",\n  );\n\n  const rewrites =\n    typeof userConfig.rewrites === \"function\"\n      ? await userConfig.rewrites()\n      : userConfig.rewrites || [];\n  validateConfigRouteSources(rewrites, \"rewrites\");\n\n  const headers =\n    typeof userConfig.headers === \"function\"\n      ? await userConfig.headers()\n      : userConfig.headers || [];\n  validateConfigRouteSources(headers, \"headers\");\n  const routeRules = normalizeRouteRules(userConfig.routeRules);\n  const routeRuleRedirects = routeRulesToRedirects(routeRules);\n  const routeRuleHeaders = routeRulesToHeaders(routeRules);\n  const security = resolveFarmSecurityConfig(userConfig.security);\n  const securityHeader = getFarmSecurityHeader(security);\n  if (farmCspBlocksFrameworkInlineScripts(security)) {\n    logger.warn(\n      \"security.csp restricts inline scripts (no 'unsafe-inline', nonce, or hash in \" +\n        \"script-src/default-src), which blocks the inline scripts Farm injects for theming \" +\n        \"and hydration. Add 'unsafe-inline' or the scripts' hashes until nonce support lands \" +\n        \"(https://github.com/farming-labs/farm.js/issues/1275).\",\n    );\n  }\n\n  const deploy = resolveDeployConfig(userConfig);\n  const root = userConfig.root || process.cwd();\n  const srcDir = userConfig.srcDir || \"src\";\n  const docs = await resolveDocsConfig(userConfig.docs, { root, srcDir });\n  const md = resolveMarkdownConfig(userConfig.md);\n  const mdx = resolveMdxConfig(userConfig.mdx);\n  const env = resolveEnv(userConfig.env, process.env);\n  setEnv(env);\n  const api = await resolveFarmAPIConfig(userConfig.api, { root, mode, env });\n  const auth = resolveFarmAuthConfig(userConfig.auth);\n  if (auth.enabled && userConfig.integrations?.auth) {\n    throw new Error(\n      \"Choose either the top-level `auth` config or `integrations.auth`; they cannot both own the auth route.\",\n    );\n  }\n  const nativeAuthIntegration = await resolveFarmAuthIntegration(auth, {\n    root,\n    mode,\n  });\n  const integrations = nativeAuthIntegration\n    ? { ...userConfig.integrations, auth: nativeAuthIntegration }\n    : userConfig.integrations || {};\n  const generateBuildId = userConfig.generateBuildId || (() => `build-${Date.now()}`);\n  const deploymentId = normalizeFarmDeploymentId(\n    userConfig.deploymentId ||\n      process.env.FARM_DEPLOYMENT_ID ||\n      process.env.VERCEL_GIT_COMMIT_SHA ||\n      process.env.CF_PAGES_COMMIT_SHA ||\n      (mode === \"production\" ? await generateBuildId() : \"development\"),\n  );\n  const basePath = normalizeFarmConfigBasePath(userConfig.basePath);\n  const openapi = {\n    enabled: false,\n    route: \"/docs/reference\",\n    specRoute: \"/openapi.json\" as string | false,\n    title: \"API Documentation\",\n    description: \"Auto-generated API documentation\",\n    version: \"1.0.0\",\n    servers: [{ url: \"http://localhost:3000\", description: \"Development server\" }],\n    ...userConfig.openapi,\n  };\n  if (openapi.route !== undefined) validateConfigRouteSource(openapi.route, \"openapi.route\");\n  if (openapi.specRoute) validateConfigRouteSource(openapi.specRoute, \"openapi.specRoute\");\n\n  const resolved: ResolvedFarmConfig = {\n    [FARM_RESOLVED_CUSTOM_CONTEXT]: typeof userConfig.context === \"function\",\n    root,\n    srcDir,\n    extends: userConfig.extends || [],\n    layers: layerResolution.layers,\n    outDir: userConfig.outDir || \"dist\",\n    basePath,\n    renderer: resolveFarmRenderer(userConfig.renderer),\n    preset: deploy.preset || \"node-server\",\n    deploy,\n    docs,\n    md,\n    mdx,\n    migrations: resolveMigrationsConfig(userConfig.migrations),\n    cron: resolveCronConfig(userConfig.cron),\n    workflows: resolveWorkflowsConfig(userConfig.workflows),\n    api,\n    observability: userConfig.observability ?? false,\n    telemetry: userConfig.telemetry !== false,\n    devtools: resolveFarmDevtoolsConfig(userConfig.devtools, mode),\n    storage: userConfig.storage || {},\n    cache: userConfig.cache || {},\n    auth,\n    suppressLintOnLink: userConfig.suppressLintOnLink ?? false,\n    experimental: {\n      serverComponents: false,\n      serverActions: false,\n      isolatedClientHydration: \"off\",\n      ppr: false,\n      ...userConfig.experimental,\n    },\n    agent: resolveFarmAgentConfig(userConfig.agent),\n    plugins: [...resolveIntegrationPlugins(integrations), ...(userConfig.plugins || [])],\n    integrations,\n    trailingSlash: userConfig.trailingSlash ?? false,\n    redirects: () => [...redirects, ...routeRuleRedirects],\n    rewrites: () => rewrites,\n    headers: () => [\n      ...headers,\n      ...routeRuleHeaders,\n      ...(securityHeader ? [{ source: \"/*\", headers: [securityHeader] }] : []),\n    ],\n    routeRules,\n    images: resolveFarmImageConfig(userConfig.images),\n    performance: resolveFarmPerformanceConfig(userConfig.performance),\n    theme: resolveFarmThemeConfig(userConfig.theme, basePath),\n    publicDir: userConfig.publicDir || \"public\",\n    i18n: resolveFarmI18nConfig(userConfig.i18n, { root, mode, basePath }),\n    openapi,\n    middleware: userConfig.middleware || {},\n    notFound: userConfig.notFound || {},\n    context: userConfig.context || (() => undefined),\n    server: resolveFarmServerConfig(userConfig.server),\n    serverActions: resolveServerActionsConfig(userConfig.serverActions),\n    security,\n    deploymentId,\n    distDir: userConfig.distDir || \".farm\",\n    generateBuildId,\n    compress: userConfig.compress ?? true,\n    devIndicators: resolveFarmDevIndicatorsConfig(userConfig.devIndicators, mode),\n    serverRuntimeConfig: userConfig.serverRuntimeConfig || {},\n    publicRuntimeConfig: userConfig.publicRuntimeConfig || {},\n    env,\n    vite: typeof userConfig.vite === \"function\" ? userConfig.vite({}) : userConfig.vite || {},\n  };\n\n  return resolved;\n}\n\nexport async function loadConfig(\n  rootDir?: string,\n  configPath?: string,\n  mode = process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n  loadEnvironment?: (typeof import(\"vite\"))[\"loadEnv\"],\n): Promise<FarmUserConfig | undefined> {\n  const { existsSync } = await import(\"fs\");\n  const loadEnv = loadEnvironment || (await import(\"vite\")).loadEnv;\n\n  const root = rootDir || process.cwd();\n  const loadedEnv = loadEnv(mode, root, \"\");\n  for (const [key, value] of Object.entries(loadedEnv)) {\n    if (process.env[key] === undefined) {\n      process.env[key] = value;\n    }\n  }\n  // An explicitly supplied config path must resolve — silently falling back\n  // to the default config would run against the wrong configuration.\n  if (configPath) {\n    const explicitPath = path.resolve(\n      path.isAbsolute(configPath) ? configPath : path.join(root, configPath),\n    );\n    if (!existsSync(explicitPath)) {\n      throw new Error(`Config file not found at ${configPath} (resolved to ${explicitPath}).`);\n    }\n  }\n\n  const searchPaths = [\n    configPath,\n    \"farm.config.ts\",\n    \"farm.config.mts\",\n    \"farm.config.js\",\n    \"farm.config.mjs\",\n    \"config.ts\",\n    \"config.mts\",\n    \"config.js\",\n    \"config.mjs\",\n  ].filter(Boolean) as string[];\n\n  for (const relativePath of searchPaths) {\n    try {\n      // Use path.join for proper path construction\n      const absolutePath = path.isAbsolute(relativePath)\n        ? relativePath\n        : path.join(root, relativePath);\n\n      // Normalize the path to handle any issues\n      const normalizedPath = path.resolve(absolutePath);\n\n      // Check if file exists before trying to import\n      if (!existsSync(normalizedPath)) {\n        continue;\n      }\n\n      const loadedConfig = await loadFarmConfigFile<FarmUserConfig>(normalizedPath, { root });\n      return loadedConfig.root === undefined ? { ...loadedConfig, root } : loadedConfig;\n    } catch (error: any) {\n      const message = error instanceof Error ? error.message : String(error);\n      throw new Error(`Failed to load config from ${relativePath}: ${message}`);\n    }\n  }\n  return undefined;\n}\n","import {\n  buildDocsAgentDiscoverySpec,\n  buildDocsConfigMap,\n  buildDocsDiagnostics as buildFarmingDocsDiagnostics,\n  buildDocsSitemapManifest,\n  performDocsSearch,\n  renderDocsAgentsDocument,\n  renderDocsLlmsTxt,\n  renderDocsMarkdownDocument,\n  renderDocsRobotsTxt,\n  renderDocsSitemapMarkdown,\n  renderDocsSitemapXml,\n  renderDocsSkillDocument,\n  type DocsConfig,\n  type DocsLlmsTxtPageInput,\n  type DocsSearchSourcePage,\n  type DocsSitemapPageInput,\n} from \"@farming-labs/docs\";\nimport { resolveDocsConfig } from \"../config\";\nimport type { FarmDocsResolvedConfig, FarmDocsUserConfig } from \"./types\";\nimport {\n  discoverFarmDocsPages,\n  type LoadedFarmDocsPage,\n  loadFarmDocsPage,\n  resolveFarmDocsContentDir,\n  toFarmDocsMarkdownPage,\n} from \"./handler\";\n\nexport interface FarmDocsAPIOptions {\n  rootDir?: string;\n  root?: string;\n  srcDir?: string;\n  docs?: FarmDocsUserConfig | FarmDocsResolvedConfig;\n  config?: Partial<DocsConfig>;\n  configPath?: string;\n  entry?: string;\n  docsPath?: string;\n  contentDir?: string;\n}\n\nexport interface FarmDocsCloudRouteOptions {\n  locale?: string;\n  publicBaseUrl?: string;\n}\n\nexport interface FarmDocsCloudServer {\n  handleRequest(request: Request, options?: FarmDocsCloudRouteOptions): Promise<Response>;\n}\n\nexport type FarmDocsCloudIntegration =\n  | FarmDocsCloudServer\n  | (FarmDocsCloudRouteOptions & { docsCloud?: FarmDocsCloudServer });\n\nexport interface FarmDocsAPIRouteHandlers {\n  GET(request: Request): Promise<Response>;\n  POST(request: Request): Promise<Response>;\n}\n\nexport type FarmDocsAPIHandler = (request: Request) => Promise<Response | null>;\n\ninterface FarmDocsAPIContext {\n  root: string;\n  srcDir: string;\n  docs: FarmDocsResolvedConfig;\n  contentDir: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\ntype DocsAPIPathTarget = {\n  format?: string;\n  slug?: string;\n};\ntype FarmDocsRuntimeConfig = {\n  root?: string;\n  srcDir?: string;\n  docs?: FarmDocsResolvedConfig;\n};\n\ndeclare global {\n  // Injected by Farm's generated server entry so route wrappers can stay zero-config.\n  // eslint-disable-next-line no-var\n  var __FARM_DOCS_RUNTIME_CONFIG__: FarmDocsRuntimeConfig | undefined;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isResolvedDocsConfig(value: unknown): value is FarmDocsResolvedConfig {\n  return (\n    isRecord(value) &&\n    typeof value.enabled === \"boolean\" &&\n    typeof value.entry === \"string\" &&\n    isRecord(value.config)\n  );\n}\n\nexport function isFarmDocsAPIRequest(requestOrPathname: Request | string): boolean {\n  const pathname =\n    typeof requestOrPathname === \"string\"\n      ? requestOrPathname\n      : new URL(requestOrPathname.url).pathname;\n\n  return pathname === \"/api/docs\" || pathname.startsWith(\"/api/docs/\");\n}\n\nfunction json(data: unknown, init: ResponseInit = {}): Response {\n  const headers = new Headers(init.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json\");\n  }\n  return new Response(JSON.stringify(data), { ...init, headers });\n}\n\nfunction text(content: string, contentType: string, init: ResponseInit = {}): Response {\n  const headers = new Headers(init.headers);\n  headers.set(\"Content-Type\", contentType);\n  return new Response(content, { ...init, headers });\n}\n\nfunction omitHeadBody(response: Response): Response {\n  return new Response(null, {\n    status: response.status,\n    statusText: response.statusText,\n    headers: response.headers,\n  });\n}\n\nfunction normalizeAction(value: string | null | undefined): string | undefined {\n  return value?.trim().toLowerCase().replace(/_/g, \"-\") || undefined;\n}\n\nfunction getDocsTitle(docs: FarmDocsResolvedConfig): string {\n  return typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n    ? String((docs.config.nav as { title?: unknown }).title || \"Documentation\")\n    : \"Documentation\";\n}\n\nfunction isDocsCloudServer(value: unknown): value is FarmDocsCloudServer {\n  return isRecord(value) && typeof value.handleRequest === \"function\";\n}\n\nfunction resolveDocsCloudIntegration(\n  integration?: FarmDocsCloudIntegration,\n): { docsCloud: FarmDocsCloudServer; routeOptions: FarmDocsCloudRouteOptions } | undefined {\n  if (!integration) return undefined;\n\n  if (isDocsCloudServer(integration)) {\n    return { docsCloud: integration, routeOptions: {} };\n  }\n\n  if (!integration.docsCloud) return undefined;\n\n  return {\n    docsCloud: integration.docsCloud,\n    routeOptions: {\n      locale: integration.locale,\n      publicBaseUrl: integration.publicBaseUrl,\n    },\n  };\n}\n\nfunction isDocsCloudGetRequest(request: Request): boolean {\n  const url = new URL(request.url);\n  const cloud = normalizeAction(url.searchParams.get(\"cloud\"));\n  const action = normalizeAction(url.searchParams.get(\"action\"));\n  const format = normalizeAction(url.searchParams.get(\"format\"));\n\n  return (\n    cloud === \"config\" ||\n    cloud === \"public-config\" ||\n    action === \"cloud-config\" ||\n    action === \"docs-cloud-config\" ||\n    format === \"cloud-config\" ||\n    format === \"docs-cloud-config\"\n  );\n}\n\nfunction isDocsCloudAction(action: string | undefined): boolean {\n  return Boolean(\n    action &&\n    [\"analytics\", \"track\", \"track-event\", \"event\", \"ask-ai\", \"ai\", \"chat\", \"docs-cloud\"].includes(\n      action,\n    ),\n  );\n}\n\nasync function readJson(request: Request): Promise<unknown> {\n  try {\n    return await request.clone().json();\n  } catch {\n    return undefined;\n  }\n}\n\nasync function isDocsCloudPostRequest(request: Request): Promise<boolean> {\n  const url = new URL(request.url);\n  const cloud = normalizeAction(url.searchParams.get(\"cloud\"));\n  const action = normalizeAction(url.searchParams.get(\"action\"));\n\n  if (isDocsCloudAction(cloud) || isDocsCloudAction(action)) return true;\n\n  const body = await readJson(request);\n  if (!isRecord(body)) return false;\n\n  const bodyAction = normalizeAction(typeof body.action === \"string\" ? body.action : undefined);\n  if (isDocsCloudAction(bodyAction)) return true;\n\n  if (typeof body.type === \"string\") return true;\n  if (isRecord(body.event) && typeof body.event.type === \"string\") return true;\n  if (isRecord(body.payload) && typeof body.payload.type === \"string\") return true;\n\n  return false;\n}\n\nfunction normalizeDocsApiSlug(\n  value: string | null | undefined,\n  docs: FarmDocsResolvedConfig,\n): string {\n  const entry = docs.entry.replace(/^\\/+|\\/+$/g, \"\");\n  let slug = (value || \"\").trim().replace(/^\\/+|\\/+$/g, \"\");\n\n  if (entry && slug === entry) return \"\";\n  if (entry && slug.startsWith(`${entry}/`)) {\n    slug = slug.slice(entry.length + 1);\n  }\n\n  let decoded = slug;\n  try {\n    decoded = decodeURIComponent(slug);\n  } catch {\n    // Malformed percent-encoding resolves to a non-matching slug (404),\n    // not an exception out of the handler.\n  }\n  return decoded.replace(/\\.(mdx?|markdown)$/i, \"\");\n}\n\nfunction getDocsAPIPathTarget(request: Request): DocsAPIPathTarget {\n  const pathname = new URL(request.url).pathname.replace(/\\/+$/, \"\") || \"/\";\n  const prefix = \"/api/docs\";\n\n  if (pathname !== prefix && !pathname.startsWith(`${prefix}/`)) return {};\n\n  const rawValue = pathname === prefix ? \"\" : pathname.slice(prefix.length + 1);\n  const value = rawValue.replace(/^\\/+|\\/+$/g, \"\");\n  const normalizedValue = normalizeAction(value);\n\n  if (!value) return {};\n  if (\n    normalizedValue === \"agent\" ||\n    normalizedValue === \"agent.json\" ||\n    normalizedValue === \"agent/spec\"\n  ) {\n    return { format: \"agent-spec\" };\n  }\n  if (\n    normalizedValue === \"agents\" ||\n    normalizedValue === \"agents.md\" ||\n    normalizedValue === \"agent.md\"\n  ) {\n    return { format: \"agents\" };\n  }\n  if (normalizedValue === \"skill\" || normalizedValue === \"skill.md\") return { format: \"skill\" };\n  if (normalizedValue === \"llms.txt\") return { format: \"llms\" };\n  if (normalizedValue === \"llms-full.txt\") return { format: \"llms-full\" };\n  if (normalizedValue === \"sitemap.md\") return { format: \"sitemap-md\" };\n  if (normalizedValue === \"sitemap.xml\") return { format: \"sitemap-xml\" };\n  if (normalizedValue === \"robots.txt\") return { format: \"robots\" };\n  if (/\\.(mdx?|markdown)$/i.test(value)) return { format: \"markdown\", slug: value };\n\n  return { slug: value };\n}\n\nfunction getDocsAPIFormat(request: Request): string | undefined {\n  const url = new URL(request.url);\n  return (\n    normalizeAction(url.searchParams.get(\"format\") || url.searchParams.get(\"type\")) ||\n    getDocsAPIPathTarget(request).format\n  );\n}\n\nfunction getDocsDescription(docs: FarmDocsResolvedConfig): string | undefined {\n  return docs.config.metadata?.description;\n}\n\nfunction getLoadedDocsPages(context: FarmDocsAPIContext): LoadedFarmDocsPage[] {\n  return discoverFarmDocsPages(context.contentDir, context.docs)\n    .map((page) => loadFarmDocsPage(context.contentDir, context.docs, page.slug))\n    .filter((page): page is LoadedFarmDocsPage => Boolean(page));\n}\n\nfunction toDocsSourcePage(page: LoadedFarmDocsPage): DocsSearchSourcePage {\n  return {\n    ...toFarmDocsMarkdownPage(page),\n    sourcePath: page.sourcePath,\n  };\n}\n\nfunction toDocsSitemapPage(page: LoadedFarmDocsPage): DocsSitemapPageInput {\n  return {\n    ...toFarmDocsMarkdownPage(page),\n    sourcePath: page.sourcePath,\n  };\n}\n\nfunction toDocsLlmsPage(page: LoadedFarmDocsPage): DocsLlmsTxtPageInput {\n  return toFarmDocsMarkdownPage(page);\n}\n\nfunction getDocsLlmsOptions(context: FarmDocsAPIContext, request: Request) {\n  const configured = isRecord(context.docs.config.llmsTxt) ? context.docs.config.llmsTxt : {};\n  return {\n    enabled: true,\n    baseUrl: new URL(request.url).origin,\n    siteTitle: getDocsTitle(context.docs),\n    siteDescription: getDocsDescription(context.docs),\n    ...configured,\n  };\n}\n\nfunction getDocsDiscoveryOptions(context: FarmDocsAPIContext, request: Request) {\n  const origin = new URL(request.url).origin;\n\n  return {\n    origin,\n    entry: context.docs.entry,\n    i18n: null,\n    search: context.docs.config.search ?? true,\n    mcp: {\n      enabled: false,\n      route: \"/api/docs/mcp\",\n      name: `${getDocsTitle(context.docs)} MCP`,\n      version: \"1\",\n      tools: {\n        listDocs: false,\n        listPages: false,\n        readPage: false,\n        searchDocs: false,\n        getNavigation: false,\n        getCodeExamples: false,\n        getConfigSchema: false,\n      },\n    },\n    feedback: undefined,\n    llms: getDocsLlmsOptions(context, request),\n    sitemap: context.docs.config.sitemap ?? true,\n    robots: context.docs.config.robots ?? true,\n    openapi: context.docs.config.apiReference,\n    markdown: {\n      acceptHeader: true,\n      signatureAgentHeader: true,\n    },\n  };\n}\n\nfunction buildSitemapManifest(context: FarmDocsAPIContext, request: Request) {\n  const origin = new URL(request.url).origin;\n  return buildDocsSitemapManifest({\n    pages: getLoadedDocsPages(context).map(toDocsSitemapPage),\n    entry: context.docs.entry,\n    siteTitle: getDocsTitle(context.docs),\n    baseUrl: origin,\n  });\n}\n\nfunction renderLlmsTxt(context: FarmDocsAPIContext, request: Request, full: boolean): string {\n  const generated = renderDocsLlmsTxt(\n    getLoadedDocsPages(context).map(toDocsLlmsPage),\n    getDocsLlmsOptions(context, request),\n  );\n\n  return full ? generated.llmsFullTxt : generated.llmsTxt;\n}\n\nfunction renderSkillDocument(context: FarmDocsAPIContext, request: Request): string {\n  const farmAliases = [\n    \"## Farm API Route Aliases\",\n    \"\",\n    \"- Search JSON: /api/docs?query=<term>\",\n    \"- Config JSON: /api/docs?format=config\",\n    \"- Markdown by query: /api/docs?format=markdown&path=<slug>\",\n    \"- Markdown by path: /api/docs/<slug>.md\",\n    \"- LLM summary: /api/docs?format=llms\",\n    \"- Full LLM document: /api/docs?format=llms-full\",\n    \"- Sitemap XML: /api/docs?format=sitemap-xml\",\n    \"- Agent spec JSON: /api/docs/agent/spec\",\n  ].join(\"\\n\");\n\n  return `${renderDocsSkillDocument(getDocsDiscoveryOptions(context, request)).trim()}\\n\\n${farmAliases}\\n`;\n}\n\nfunction renderAgentsDocument(context: FarmDocsAPIContext, request: Request): string {\n  return `${renderDocsAgentsDocument(getDocsDiscoveryOptions(context, request)).trim()}\\n`;\n}\n\nfunction buildAgentSpec(context: FarmDocsAPIContext, request: Request) {\n  const url = new URL(request.url);\n  const origin = url.origin;\n  const pages = discoverFarmDocsPages(context.contentDir, context.docs);\n  const spec = buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(context, request));\n  const title = getDocsTitle(context.docs);\n\n  return {\n    ...spec,\n    name: title,\n    site: {\n      ...spec.site,\n      title,\n      description: getDocsDescription(context.docs),\n      entry: context.docs.entry,\n    },\n    entry: context.docs.entry,\n    routes: {\n      docs: `${origin}${context.docs.entry}`,\n      config: `${origin}/api/docs?format=config`,\n      search: `${origin}/api/docs?query=<term>`,\n      markdown: `${origin}/api/docs/<slug>.md`,\n      markdownQuery: `${origin}/api/docs?format=markdown&path=<slug>`,\n      llms: `${origin}/api/docs?format=llms`,\n      llmsFull: `${origin}/api/docs?format=llms-full`,\n      sitemapXml: `${origin}/api/docs?format=sitemap-xml`,\n      sitemapMarkdown: `${origin}/api/docs?format=sitemap-md`,\n      robots: `${origin}/api/docs?format=robots`,\n      skill: `${origin}/api/docs?format=skill`,\n      agents: `${origin}/api/docs?format=agents`,\n      agentSpec: `${origin}/api/docs/agent/spec`,\n    },\n    capabilities: {\n      ...spec.capabilities,\n      search: spec.capabilities.search,\n      markdown: spec.capabilities.markdownRoutes,\n      llms: spec.capabilities.llms,\n      sitemap: spec.capabilities.sitemap,\n      robots: spec.capabilities.robots,\n      post: false,\n    },\n    pages,\n  };\n}\n\nfunction buildDiagnostics(context: FarmDocsAPIContext) {\n  const pages = discoverFarmDocsPages(context.contentDir, context.docs);\n  const diagnostics = buildFarmingDocsDiagnostics(context.docs.config, {\n    entry: context.docs.entry,\n    mcp: {\n      enabled: false,\n      route: \"/api/docs/mcp\",\n      name: `${getDocsTitle(context.docs)} MCP`,\n      version: \"1\",\n      tools: {\n        listDocs: false,\n        listPages: false,\n        readPage: false,\n        searchDocs: false,\n        getNavigation: false,\n        getCodeExamples: false,\n        getConfigSchema: false,\n      },\n    },\n  });\n\n  return {\n    ...diagnostics,\n    enabled: context.docs.enabled,\n    entry: context.docs.entry,\n    root: context.root,\n    srcDir: context.srcDir,\n    contentDir: context.contentDir,\n    configPath: context.docs.configPath || null,\n    pageCount: pages.length,\n    pages,\n  };\n}\n\nasync function searchDocs(context: FarmDocsAPIContext, request: Request, query: string) {\n  const loadedPages = getLoadedDocsPages(context);\n  const sourcePages = loadedPages.map(toDocsSourcePage);\n  const sourcePageByUrl = new Map(sourcePages.map((page) => [page.url, page]));\n  const resultLimit =\n    isRecord(context.docs.config.search) &&\n    typeof context.docs.config.search.maxResults === \"number\"\n      ? context.docs.config.search.maxResults\n      : undefined;\n\n  const results = await performDocsSearch({\n    pages: sourcePages,\n    query,\n    search: context.docs.config.search ?? true,\n    pathname: new URL(request.url).pathname,\n    siteTitle: getDocsTitle(context.docs),\n    limit: resultLimit,\n  });\n\n  return results.map((result) => {\n    const pageUrl = result.url.split(\"#\")[0];\n    const page = sourcePageByUrl.get(pageUrl);\n    return {\n      ...result,\n      title: page?.title || result.content,\n      href: page?.url || pageUrl,\n      description: result.description || page?.description,\n    };\n  });\n}\n\nasync function resolveAPIContext(options: FarmDocsAPIOptions): Promise<FarmDocsAPIContext> {\n  const runtimeConfig = globalThis.__FARM_DOCS_RUNTIME_CONFIG__;\n  const root = options.rootDir || options.root || runtimeConfig?.root || process.cwd();\n  const srcDir = options.srcDir || runtimeConfig?.srcDir || \"src\";\n  const canUseRuntimeDocs =\n    options.docs === undefined &&\n    options.config === undefined &&\n    options.configPath === undefined &&\n    options.entry === undefined &&\n    options.docsPath === undefined &&\n    options.contentDir === undefined &&\n    options.root === undefined &&\n    options.rootDir === undefined &&\n    options.srcDir === undefined;\n  const docsInput =\n    options.docs ??\n    (canUseRuntimeDocs ? runtimeConfig?.docs : undefined) ??\n    ({\n      enabled: true,\n      entry: options.entry,\n      docsPath: options.docsPath,\n      contentDir: options.contentDir,\n      config: options.config,\n      configPath: options.configPath,\n    } satisfies Exclude<FarmDocsUserConfig, boolean>);\n  const docs = isResolvedDocsConfig(docsInput)\n    ? docsInput\n    : await resolveDocsConfig(docsInput, { root, srcDir });\n\n  return {\n    root,\n    srcDir,\n    docs,\n    contentDir: resolveFarmDocsContentDir(docs, { root, srcDir }),\n  };\n}\n\nasync function handleDocsAPIGet(request: Request, context: FarmDocsAPIContext): Promise<Response> {\n  if (!context.docs.enabled) {\n    return json({ error: \"Docs are disabled\" }, { status: 404 });\n  }\n\n  const url = new URL(request.url);\n  const format = getDocsAPIFormat(request);\n  const pathTarget = getDocsAPIPathTarget(request);\n\n  if (format === \"config\" || format === \"docs-config\") {\n    return json({\n      entry: context.docs.entry,\n      contentDir: context.docs.contentDir || context.docs.config.contentDir || null,\n      config: context.docs.config,\n      map: buildDocsConfigMap(context.docs.config, {\n        file: context.docs.configPath || \"farm.config.ts\",\n      }),\n    });\n  }\n\n  if (format === \"skill\")\n    return text(renderSkillDocument(context, request), \"text/markdown; charset=utf-8\");\n  if (format === \"agents\")\n    return text(renderAgentsDocument(context, request), \"text/markdown; charset=utf-8\");\n  if (format === \"agent\" || format === \"agent-spec\") return json(buildAgentSpec(context, request));\n  if (format === \"diagnostics\") return json(buildDiagnostics(context));\n  if (format === \"llms\")\n    return text(renderLlmsTxt(context, request, false), \"text/plain; charset=utf-8\");\n  if (format === \"llms-full\")\n    return text(renderLlmsTxt(context, request, true), \"text/plain; charset=utf-8\");\n  if (format === \"sitemap-md\") {\n    return text(\n      renderDocsSitemapMarkdown(buildSitemapManifest(context, request), {\n        includeDescriptions: true,\n      }),\n      \"text/markdown; charset=utf-8\",\n    );\n  }\n  if (format === \"sitemap-xml\" || format === \"sitemap\") {\n    const origin = new URL(request.url).origin;\n    return text(\n      renderDocsSitemapXml(buildSitemapManifest(context, request), {\n        baseUrl: origin,\n        includeLastmod: true,\n      }),\n      \"application/xml; charset=utf-8\",\n    );\n  }\n  if (format === \"robots\") {\n    return text(\n      renderDocsRobotsTxt({\n        entry: context.docs.entry,\n        sitemap: context.docs.config.sitemap ?? true,\n        robots: context.docs.config.robots ?? true,\n        baseUrl: new URL(request.url).origin,\n      }),\n      \"text/plain; charset=utf-8\",\n    );\n  }\n\n  if (format === \"markdown\" || url.pathname.endsWith(\".md\")) {\n    const pathParam = url.searchParams.get(\"path\") || url.searchParams.get(\"slug\");\n    const slug = normalizeDocsApiSlug(pathParam ?? pathTarget.slug ?? \"\", context.docs);\n    const page = loadFarmDocsPage(context.contentDir, context.docs, slug);\n    if (!page) return text(\"Docs page not found\\n\", \"text/plain; charset=utf-8\", { status: 404 });\n    return text(\n      renderDocsMarkdownDocument(toFarmDocsMarkdownPage(page), {\n        origin: new URL(request.url).origin,\n        llms: getDocsLlmsOptions(context, request),\n        sitemap: context.docs.config.sitemap,\n      }),\n      \"text/markdown; charset=utf-8\",\n    );\n  }\n\n  const query = url.searchParams.get(\"query\") || url.searchParams.get(\"q\") || \"\";\n  if (!query.trim()) return json([]);\n  return json(await searchDocs(context, request, query));\n}\n\nexport function createDocsAPI(\n  options: FarmDocsAPIOptions = {},\n  cloudIntegration?: FarmDocsCloudIntegration,\n): FarmDocsAPIRouteHandlers {\n  let contextPromise: Promise<FarmDocsAPIContext> | undefined;\n  const getContext = () => {\n    contextPromise ??= resolveAPIContext(options);\n    return contextPromise;\n  };\n  const integration = resolveDocsCloudIntegration(cloudIntegration);\n\n  return {\n    async GET(request: Request) {\n      if (integration && isDocsCloudGetRequest(request)) {\n        return integration.docsCloud.handleRequest(request, integration.routeOptions);\n      }\n\n      return handleDocsAPIGet(request, await getContext());\n    },\n    async POST(request: Request) {\n      if (integration && (await isDocsCloudPostRequest(request))) {\n        return integration.docsCloud.handleRequest(request, integration.routeOptions);\n      }\n\n      return json(\n        {\n          error: \"AI is not enabled for this Farm docs API route yet.\",\n        },\n        { status: 501 },\n      );\n    },\n  };\n}\n\nexport function createFarmDocsAPIHandler(\n  options: FarmDocsAPIOptions = {},\n  cloudIntegration?: FarmDocsCloudIntegration,\n): FarmDocsAPIHandler {\n  const handlers = createDocsAPI(options, cloudIntegration);\n\n  return async function handleFarmDocsAPIRequest(request: Request): Promise<Response | null> {\n    if (!isFarmDocsAPIRequest(request)) return null;\n\n    const method = request.method.toUpperCase();\n    if (method === \"GET\" || method === \"HEAD\") {\n      const response = await handlers.GET(request);\n      return method === \"HEAD\" ? omitHeadBody(response) : response;\n    }\n    if (method === \"POST\") {\n      return handlers.POST(request);\n    }\n\n    return json(\n      {\n        error: \"Method Not Allowed\",\n      },\n      {\n        status: 405,\n        headers: {\n          Allow: \"GET, HEAD, POST\",\n        },\n      },\n    );\n  };\n}\n","export {\n  createFarmDocsHandler,\n  discoverFarmDocsPages,\n  getFarmDocsDocumentNavigationMatchers,\n  getFarmDocsRouteTypeEntries,\n  isFarmDocsRequest,\n  loadFarmDocsPage,\n  resolveFarmDocsContentDir,\n} from \"./handler\";\nexport {\n  createFarmDocsAdapterHandler,\n  hasFarmDocsRuntimeAdapter,\n  type FarmDocsAdapterHandlerOptions,\n} from \"./adapter\";\nexport { createDocsAPI, createFarmDocsAPIHandler, isFarmDocsAPIRequest } from \"./api\";\nexport type { FarmDocsHandlerOptions, FarmDocsPage, LoadedFarmDocsPage } from \"./handler\";\nexport type {\n  FarmDocsAPIHandler,\n  FarmDocsAPIOptions,\n  FarmDocsAPIRouteHandlers,\n  FarmDocsCloudIntegration,\n  FarmDocsCloudRouteOptions,\n  FarmDocsCloudServer,\n} from \"./api\";\nexport type {\n  FarmDocsConfigInput,\n  FarmDocsNavigationConfig,\n  FarmDocsResolvedConfig,\n  FarmDocsSocialImageConfig,\n  FarmDocsSocialImageFonts,\n  FarmDocsSidebarItem,\n  FarmDocsUserConfig,\n} from \"./types\";\n","import type { OpenAPIConfig } from \"../config\";\nimport type { APIRouteInfo } from \"../type-generator\";\nimport * as z from \"zod\";\n\nexport interface OpenAPISpec {\n  openapi: string;\n  info: {\n    title: string;\n    description?: string;\n    version: string;\n    contact?: {\n      name?: string;\n      email?: string;\n      url?: string;\n    };\n    license?: {\n      name: string;\n      url?: string;\n    };\n  };\n  servers?: Array<{\n    url: string;\n    description?: string;\n  }>;\n  paths: Record<string, any>;\n  components?: {\n    schemas?: Record<string, any>;\n    securitySchemes?: Record<string, any>;\n  };\n}\n\ntype AllowedType = \"string\" | \"number\" | \"boolean\" | \"array\" | \"object\";\nconst allowedType = new Set([\"string\", \"number\", \"boolean\", \"array\", \"object\"]);\n\n/**\n * OpenAPI `type` for a literal's value(s). A single-type literal keeps its JS\n * type; mixed-type literal sets fall back to string (the enum still carries the\n * exact values). bigint maps to integer.\n */\nfunction openAPITypeForLiteralValues(values: readonly unknown[]): AllowedType {\n  if (values.length === 0) return \"string\";\n  const jsType = typeof values[0];\n  if (!values.every((value) => typeof value === jsType)) return \"string\";\n  switch (jsType) {\n    case \"number\":\n      return \"number\";\n    case \"bigint\":\n      return \"number\";\n    case \"boolean\":\n      return \"boolean\";\n    default:\n      return \"string\";\n  }\n}\n\nexport class OpenAPIGenerator {\n  private config: OpenAPIConfig;\n  private appDir: string;\n\n  constructor(appDir: string, config: OpenAPIConfig) {\n    this.appDir = appDir;\n    this.config = config;\n  }\n\n  /**\n   * Get type from Zod type\n   */\n  private getTypeFromZodType(zodType: z.ZodType<any>): AllowedType {\n    const tag = (zodType as any)._def?.type;\n    return typeof tag === \"string\" && allowedType.has(tag) ? (tag as AllowedType) : \"string\";\n  }\n\n  /**\n   * Whether a schema field must be supplied by the caller. A field with a\n   * default is supplied by the server when omitted, so — like an explicitly\n   * optional field — it is not required. Only ZodOptional was excluded before,\n   * which documented every `.default()` field as required.\n   */\n  private isRequiredField(value: z.ZodType<any>): boolean {\n    return !(value instanceof z.ZodOptional) && !(value instanceof z.ZodDefault);\n  }\n\n  /**\n   * Process Zod type to OpenAPI schema\n   */\n  private processZodType(zodType: z.ZodType<any>): any {\n    // Handle ZodOptional and ZodNullable\n    if (zodType instanceof z.ZodOptional || zodType instanceof z.ZodNullable) {\n      const innerType = (zodType as any)._def.innerType;\n      const innerSchema = this.processZodType(innerType);\n      return {\n        ...innerSchema,\n        nullable: true,\n      };\n    }\n\n    // Handle ZodDefault. The value is always present after parsing, so the\n    // documented type is the wrapped one.\n    if (zodType instanceof z.ZodDefault) {\n      return this.processZodType((zodType as any)._def.innerType);\n    }\n\n    // Handle ZodObject\n    if (zodType instanceof z.ZodObject) {\n      const shape = (zodType as any).shape;\n      if (shape) {\n        const properties: Record<string, any> = {};\n        const required: string[] = [];\n        Object.entries(shape).forEach(([key, value]) => {\n          if (value instanceof z.ZodType) {\n            properties[key] = this.processZodType(value as z.ZodType<any>);\n            if (this.isRequiredField(value as z.ZodType<any>)) {\n              required.push(key);\n            }\n          }\n        });\n        return {\n          type: \"object\",\n          properties,\n          ...(required.length > 0 ? { required } : {}),\n          description: (zodType as any).description,\n        };\n      }\n    }\n\n    // Handle ZodArray\n    if (zodType instanceof z.ZodArray) {\n      return {\n        type: \"array\",\n        items: this.processZodType((zodType as any)._def.element),\n        description: (zodType as any).description,\n      };\n    }\n\n    // Handle ZodEnum\n    if (zodType instanceof z.ZodEnum) {\n      return {\n        type: \"string\",\n        enum: (zodType as any).options,\n        description: (zodType as any).description,\n      };\n    }\n\n    // Handle ZodLiteral: emit the concrete value(s) as an enum rather than\n    // dropping the constraint and documenting a bare string.\n    if (zodType instanceof z.ZodLiteral) {\n      const values = ((zodType as any)._def.values as unknown[]) ?? [];\n      return {\n        type: openAPITypeForLiteralValues(values),\n        ...(values.length > 0 ? { enum: [...values] } : {}),\n        description: (zodType as any).description,\n      };\n    }\n\n    // Handle ZodUnion (including discriminated unions): oneOf over the members.\n    if (zodType instanceof z.ZodUnion) {\n      const options = ((zodType as any)._def.options as z.ZodType<any>[]) ?? [];\n      return {\n        oneOf: options.map((option) => this.processZodType(option)),\n        description: (zodType as any).description,\n      };\n    }\n\n    // Handle ZodRecord: an object whose values share a schema.\n    if (zodType instanceof z.ZodRecord) {\n      return {\n        type: \"object\",\n        additionalProperties: this.processZodType((zodType as any)._def.valueType),\n        description: (zodType as any).description,\n      };\n    }\n\n    // Handle ZodTuple: a fixed-length (unless variadic) array. OpenAPI 3.0 has no\n    // positional items, so the element schemas are unioned; the length is pinned\n    // when there is no rest element.\n    if (zodType instanceof z.ZodTuple) {\n      const items = ((zodType as any)._def.items as z.ZodType<any>[]) ?? [];\n      const rest = (zodType as any)._def.rest;\n      const itemSchemas = items.map((item) => this.processZodType(item));\n      const tupleSchema: any = {\n        type: \"array\",\n        items: itemSchemas.length === 1 ? itemSchemas[0] : { oneOf: itemSchemas },\n        description: (zodType as any).description,\n      };\n      if (!rest) {\n        tupleSchema.minItems = items.length;\n        tupleSchema.maxItems = items.length;\n      }\n      return tupleSchema;\n    }\n\n    // For primitive types\n    const baseSchema: any = {\n      type: this.getTypeFromZodType(zodType),\n      description: (zodType as any).description,\n    };\n\n    // Add constraints if available. `min`/`max` are methods rather than values, so\n    // the bounds are read from `minValue`/`maxValue`. An absent bound is reported as\n    // `null` or as an infinity depending on the schema, and neither belongs in the\n    // document; a finite check keeps a `0` bound and drops both.\n    const constraints: Array<[string, unknown]> = [\n      [\"minLength\", (zodType as any).minLength],\n      [\"maxLength\", (zodType as any).maxLength],\n      [\"minimum\", (zodType as any).minValue],\n      [\"maximum\", (zodType as any).maxValue],\n    ];\n    for (const [key, value] of constraints) {\n      // Zod 4's .int() implies bounds of +/-Number.MAX_SAFE_INTEGER; those are\n      // implementation details of the safe-integer range, not author-declared\n      // constraints, and would otherwise stamp every integer field with\n      // maximum: 9007199254740991.\n      if (Number.isFinite(value) && Math.abs(value as number) !== Number.MAX_SAFE_INTEGER) {\n        baseSchema[key] = value;\n      }\n    }\n\n    return baseSchema;\n  }\n\n  /**\n   * Generate standard error responses\n   */\n  private getStandardResponses(): Record<string, any> {\n    return {\n      \"200\": {\n        description: \"Successful response\",\n        content: {\n          \"application/json\": {\n            schema: {\n              type: \"object\",\n              description: \"Response data\",\n            },\n          },\n        },\n      },\n      \"400\": {\n        description: \"Bad Request. Usually due to missing parameters, or invalid parameters.\",\n        content: {\n          \"application/json\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                message: { type: \"string\" },\n                error: { type: \"string\" },\n              },\n              required: [\"message\"],\n            },\n          },\n        },\n      },\n      \"401\": {\n        description: \"Unauthorized. Due to missing or invalid authentication.\",\n        content: {\n          \"application/json\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                message: { type: \"string\" },\n              },\n              required: [\"message\"],\n            },\n          },\n        },\n      },\n      \"403\": {\n        description:\n          \"Forbidden. You do not have permission to access this resource or to perform this action.\",\n        content: {\n          \"application/json\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                message: { type: \"string\" },\n              },\n            },\n          },\n        },\n      },\n      \"404\": {\n        description: \"Not Found. The requested resource was not found.\",\n        content: {\n          \"application/json\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                message: { type: \"string\" },\n              },\n            },\n          },\n        },\n      },\n      \"429\": {\n        description: \"Too Many Requests. You have exceeded the rate limit. Try again later.\",\n        content: {\n          \"application/json\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                message: { type: \"string\" },\n              },\n            },\n          },\n        },\n      },\n      \"500\": {\n        description:\n          \"Internal Server Error. This is a problem with the server that you cannot fix.\",\n        content: {\n          \"application/json\": {\n            schema: {\n              type: \"object\",\n              properties: {\n                message: { type: \"string\" },\n                error: { type: \"string\" },\n              },\n            },\n          },\n        },\n      },\n    };\n  }\n\n  /**\n   * Generate OpenAPI spec from API routes\n   */\n  async generateSpec(routes: APIRouteInfo[]): Promise<OpenAPISpec> {\n    const spec: OpenAPISpec = {\n      openapi: \"3.0.3\",\n      info: {\n        title: this.config.title || \"API Documentation\",\n        description: this.config.description || \"Auto-generated API documentation\",\n        version: this.config.version || \"1.0.0\",\n        ...(this.config.contact && { contact: this.config.contact }),\n        ...(this.config.license && { license: this.config.license }),\n      },\n      servers: this.config.servers || [\n        { url: \"http://localhost:3000\", description: \"Development server\" },\n      ],\n      paths: {},\n      components: {\n        schemas: {},\n        securitySchemes: {\n          bearerAuth: {\n            type: \"http\",\n            scheme: \"bearer\",\n            description: \"Bearer token authentication\",\n          },\n          apiKeyCookie: {\n            type: \"apiKey\",\n            in: \"cookie\",\n            name: \"session\",\n            description: \"API Key authentication via cookie\",\n          },\n        },\n      },\n    };\n\n    // Group routes by path\n    const routeGroups = new Map<string, APIRouteInfo[]>();\n    for (const route of routes) {\n      const key = route.path;\n      if (!routeGroups.has(key)) {\n        routeGroups.set(key, []);\n      }\n      routeGroups.get(key)!.push(route);\n    }\n\n    // Generate paths\n    for (const [path, routeList] of routeGroups) {\n      const openAPIPath = this.convertToOpenAPIPath(path);\n      spec.paths[openAPIPath] = {};\n\n      for (const route of routeList) {\n        for (const method of route.methods) {\n          const operation = await this.generateOperation(route, method);\n          if (method === \"QUERY\") {\n            const additionalOperations =\n              spec.paths[openAPIPath][\"x-oai-additionalOperations\"] ?? {};\n            additionalOperations.QUERY = operation;\n            spec.paths[openAPIPath][\"x-oai-additionalOperations\"] = additionalOperations;\n          } else {\n            spec.paths[openAPIPath][method.toLowerCase()] = operation;\n          }\n        }\n      }\n    }\n\n    return spec;\n  }\n\n  /**\n   * Convert a Farm.js API path to OpenAPI path format.\n   *\n   * Strips the `/api` prefix and rewrites dynamic segments to OpenAPI's\n   * `{name}` templating: `[id]` -> `{id}`, `[...slug]` -> `{slug}`, and\n   * `[[...slug]]` -> `{slug}`. Leaving the bracket form produces a path key that\n   * is invalid OpenAPI, which breaks \"try it\" and any generated client.\n   */\n  private convertToOpenAPIPath(path: string): string {\n    return path\n      .replace(/^\\/api/, \"\")\n      .replace(/\\[\\[\\.\\.\\.([^\\]]+)\\]\\]/g, \"{$1}\")\n      .replace(/\\[\\.\\.\\.([^\\]]+)\\]/g, \"{$1}\")\n      .replace(/\\[([^\\]]+)\\]/g, \"{$1}\");\n  }\n\n  /**\n   * Path parameters implied by a Farm.js API path's dynamic segments. Every\n   * path parameter is `required: true` per the OpenAPI spec (a path parameter\n   * cannot be optional), including catch-all segments.\n   */\n  private getPathParameters(path: string): any[] {\n    const openAPIPath = this.convertToOpenAPIPath(path);\n    return [...openAPIPath.matchAll(/\\{([^}]+)\\}/g)].map((match) => ({\n      name: match[1],\n      in: \"path\",\n      required: true,\n      schema: { type: \"string\" },\n    }));\n  }\n\n  /**\n   * Extract request body schema from endpoint\n   */\n  private async getRequestBody(route: APIRouteInfo, method: string): Promise<any> {\n    if (![\"QUERY\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(method)) {\n      return undefined;\n    }\n\n    try {\n      // Try to dynamically load the route module\n      const modulePath = route.filePath;\n      const routeModule = await import(/* @vite-ignore */ modulePath);\n\n      // Get the method handler (GET, POST, etc.)\n      const handler = routeModule[method];\n\n      // Check for Farm.js endpoint format: handler.__types.body\n      if (handler && handler.__types && handler.__types.body) {\n        const bodySchema = handler.__types.body;\n\n        if (bodySchema instanceof z.ZodObject || bodySchema instanceof z.ZodOptional) {\n          const shape = (bodySchema as any).shape || (bodySchema as any)._def?.innerType?.shape;\n          if (shape) {\n            const properties: Record<string, any> = {};\n            const required: string[] = [];\n\n            Object.entries(shape).forEach(([key, value]) => {\n              if (value instanceof z.ZodType) {\n                properties[key] = this.processZodType(value as z.ZodType<any>);\n                if (this.isRequiredField(value as z.ZodType<any>)) {\n                  required.push(key);\n                }\n              }\n            });\n            return {\n              required: bodySchema instanceof z.ZodOptional ? false : true,\n              content: {\n                \"application/json\": {\n                  schema: {\n                    type: \"object\",\n                    properties,\n                    ...(required.length > 0 ? { required } : {}),\n                  },\n                },\n              },\n            };\n          }\n        }\n      }\n\n      // Fallback: Check for better-call format: handler._type.body\n      if (handler && handler._type && handler._type.body) {\n        const bodySchema = handler._type.body;\n\n        if (bodySchema instanceof z.ZodObject || bodySchema instanceof z.ZodOptional) {\n          const shape = (bodySchema as any).shape || (bodySchema as any)._def?.innerType?.shape;\n          if (shape) {\n            const properties: Record<string, any> = {};\n            const required: string[] = [];\n\n            Object.entries(shape).forEach(([key, value]) => {\n              if (value instanceof z.ZodType) {\n                properties[key] = this.processZodType(value as z.ZodType<any>);\n                if (this.isRequiredField(value as z.ZodType<any>)) {\n                  required.push(key);\n                }\n              }\n            });\n\n            return {\n              required: bodySchema instanceof z.ZodOptional ? false : true,\n              content: {\n                \"application/json\": {\n                  schema: {\n                    type: \"object\",\n                    properties,\n                    ...(required.length > 0 ? { required } : {}),\n                  },\n                },\n              },\n            };\n          }\n        }\n      }\n    } catch (error) {\n      // If we can't load the module, return generic schema\n      console.warn(`Could not extract schema from ${route.filePath}:`, error);\n    }\n\n    // Fallback to generic schema\n    return {\n      required: true,\n      content: {\n        \"application/json\": {\n          schema: {\n            type: \"object\",\n            description: \"Request body\",\n          },\n        },\n      },\n    };\n  }\n\n  /**\n   * Extract query parameters from endpoint\n   */\n  private async getParameters(route: APIRouteInfo, method: string): Promise<any[]> {\n    const parameters: any[] = [];\n\n    try {\n      // Try to dynamically load the route module\n      const modulePath = route.filePath;\n      const routeModule = await import(/* @vite-ignore */ modulePath);\n\n      // Get the method handler\n      const handler = routeModule[method];\n\n      // Check for Farm.js endpoint format: handler.__types.query\n      if (handler && handler.__types && handler.__types.query) {\n        const querySchema = handler.__types.query;\n\n        if (querySchema instanceof z.ZodObject) {\n          Object.entries((querySchema as any).shape).forEach(([key, value]) => {\n            if (value instanceof z.ZodType) {\n              parameters.push({\n                name: key,\n                in: \"query\",\n                required: this.isRequiredField(value as z.ZodType<any>),\n                schema: this.processZodType(value as z.ZodType<any>),\n              });\n            }\n          });\n        }\n      }\n\n      // Fallback: Check for better-call format: handler._type.query\n      if (handler && handler._type && handler._type.query) {\n        const querySchema = handler._type.query;\n\n        if (querySchema instanceof z.ZodObject) {\n          Object.entries((querySchema as any).shape).forEach(([key, value]) => {\n            if (value instanceof z.ZodType) {\n              parameters.push({\n                name: key,\n                in: \"query\",\n                required: this.isRequiredField(value as z.ZodType<any>),\n                schema: this.processZodType(value as z.ZodType<any>),\n              });\n            }\n          });\n        }\n      }\n    } catch (error) {\n      console.warn(`Could not extract query params from ${route.filePath}:`, error);\n    }\n\n    return parameters;\n  }\n\n  /**\n   * Generate OpenAPI operation from route info\n   */\n  private async generateOperation(route: APIRouteInfo, method: string): Promise<any> {\n    const operation: any = {\n      summary: this.generateSummary(route.path, method),\n      description: this.generateDescription(route.path, method),\n      operationId: this.generateOperationId(route.path, method),\n      tags: this.generateTags(route.path),\n      security: [{ bearerAuth: [] }, { apiKeyCookie: [] }],\n      responses: this.getStandardResponses(),\n    };\n\n    // Path parameters (from dynamic route segments) precede query parameters.\n    const parameters = [\n      ...this.getPathParameters(route.path),\n      ...(await this.getParameters(route, method)),\n    ];\n    if (parameters.length > 0) {\n      operation.parameters = parameters;\n    }\n\n    // QUERY and mutation methods can carry typed request content.\n    if ([\"QUERY\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(method)) {\n      operation.requestBody = await this.getRequestBody(route, method);\n    }\n\n    return operation;\n  }\n\n  /**\n   * Generate operation summary\n   */\n  private generateSummary(path: string, method: string): string {\n    const cleanPath = path.replace(/^\\/api\\//, \"\");\n    const pathParts = cleanPath.split(\"/\");\n    const lastPart = pathParts[pathParts.length - 1];\n\n    const action =\n      method === \"GET\"\n        ? \"Get\"\n        : method === \"QUERY\"\n          ? \"Query\"\n          : method === \"POST\"\n            ? \"Create\"\n            : method === \"PUT\"\n              ? \"Update\"\n              : method === \"DELETE\"\n                ? \"Delete\"\n                : method === \"PATCH\"\n                  ? \"Update\"\n                  : method;\n\n    return `${action} ${lastPart}`;\n  }\n\n  /**\n   * Generate operation description\n   */\n  private generateDescription(path: string, method: string): string {\n    const cleanPath = path.replace(/^\\/api\\//, \"\");\n    return `${method} ${cleanPath} endpoint`;\n  }\n\n  /**\n   * Generate operation ID\n   */\n  private generateOperationId(path: string, method: string): string {\n    const cleanPath = path.replace(/^\\/api\\//, \"\").replace(/\\//g, \"_\");\n    return `${method.toLowerCase()}_${cleanPath}`;\n  }\n\n  /**\n   * Generate tags for grouping operations\n   */\n  private generateTags(path: string): string[] {\n    const cleanPath = path.replace(/^\\/api\\//, \"\");\n    const pathParts = cleanPath.split(\"/\");\n\n    if (pathParts.length > 1) {\n      return [pathParts[0]]; // Use first part as tag\n    }\n\n    return [\"default\"];\n  }\n\n  /**\n   * Generate OpenAPI spec file\n   */\n  async generateSpecFile(routes: APIRouteInfo[], outputPath: string): Promise<void> {\n    const spec = await this.generateSpec(routes);\n    const fs = require(\"fs\");\n    const path = require(\"path\");\n\n    // Ensure directory exists\n    const dir = path.dirname(outputPath);\n    if (!fs.existsSync(dir)) {\n      fs.mkdirSync(dir, { recursive: true });\n    }\n\n    // Write spec file\n    fs.writeFileSync(outputPath, JSON.stringify(spec, null, 2));\n  }\n}\n","import { OpenAPIGenerator, type OpenAPISpec } from \"./generator\";\nimport { APITypeGenerator } from \"../type-generator\";\nimport type { OpenAPIConfig } from \"../config\";\n\nfunction escapeHTML(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n\nexport function renderOpenAPIReferenceHTML(spec: OpenAPISpec, config: OpenAPIConfig): string {\n  return `\n<!DOCTYPE html>\n<html>\n  <head>\n    <title>${escapeHTML(config.title || \"API Documentation\")}</title>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <link rel=\"icon\" href=\"data:,\" />\n  </head>\n  <body>\n    <script\n      id=\"api-reference\"\n      data-url=\"data:application/json;base64,${Buffer.from(JSON.stringify(spec)).toString(\"base64\")}\"\n    ></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/@scalar/api-reference\"></script>\n  </body>\n</html>\n    `;\n}\n\nexport class OpenAPIManager {\n  private generator: OpenAPIGenerator;\n  private apiTypeGenerator: APITypeGenerator;\n  private config: OpenAPIConfig;\n  private appDir: string;\n  private specCache: any = null;\n\n  constructor(appDir: string | readonly string[], config: OpenAPIConfig) {\n    const appDirs = Array.isArray(appDir) ? [...appDir] : [appDir as string];\n    this.appDir = appDirs[appDirs.length - 1];\n    this.config = config;\n    this.generator = new OpenAPIGenerator(this.appDir, config);\n    this.apiTypeGenerator = new APITypeGenerator(appDirs);\n  }\n\n  /**\n   * Generate OpenAPI spec from API routes\n   */\n  async generateSpec(): Promise<any> {\n    try {\n      // Get API routes using the existing type generator\n      const routes = this.apiTypeGenerator.scanAPIRoutes();\n\n      // Generate OpenAPI spec (now async)\n      const spec = await this.generator.generateSpec(routes);\n\n      // Cache the spec\n      this.specCache = spec;\n\n      return spec;\n    } catch (error) {\n      console.error(\"Failed to generate OpenAPI spec:\", error);\n      return null;\n    }\n  }\n\n  /**\n   * Get cached spec or generate new one\n   */\n  async getSpec(): Promise<any> {\n    if (this.specCache) {\n      return this.specCache;\n    }\n\n    return await this.generateSpec();\n  }\n\n  /**\n   * Generate and save OpenAPI spec file\n   */\n  async generateSpecFile(): Promise<void> {\n    try {\n      const routes = this.apiTypeGenerator.scanAPIRoutes();\n      const outputPath = `${this.appDir}/lib/openapi.spec.json`;\n\n      await this.generator.generateSpecFile(routes, outputPath);\n      console.log(\"✅ OpenAPI spec generated at:\", outputPath);\n    } catch (error) {\n      console.error(\"Failed to generate OpenAPI spec file:\", error);\n    }\n  }\n\n  /**\n   * Invalidate cache and regenerate spec\n   */\n  async invalidateCache(): Promise<void> {\n    this.specCache = null;\n    await this.generateSpec();\n  }\n\n  /**\n   * Get the docs route handler\n   */\n  getDocsRouteHandler() {\n    return async (req: any, res: any) => {\n      try {\n        const method = String(req.method || \"GET\").toUpperCase();\n        if (method !== \"GET\" && method !== \"HEAD\") {\n          res.statusCode = 405;\n          res.setHeader(\"Allow\", \"GET, HEAD\");\n          res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n          res.end(\"Method Not Allowed\");\n          return;\n        }\n\n        const spec = await this.getSpec();\n\n        if (!spec) {\n          res.statusCode = 500;\n          res.setHeader(\"Content-Type\", \"text/html\");\n          res.end(`\n            <html>\n              <body>\n                <h1>Error</h1>\n                <p>Failed to generate OpenAPI specification</p>\n              </body>\n            </html>\n          `);\n          return;\n        }\n\n        // Set headers for HTML response\n        res.statusCode = 200;\n        res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n        res.setHeader(\"Cache-Control\", \"public, max-age=0, must-revalidate\");\n        res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n\n        // Generate HTML with Scalar\n        res.end(method === \"HEAD\" ? undefined : renderOpenAPIReferenceHTML(spec, this.config));\n      } catch (error) {\n        console.error(\"Error serving docs route:\", error);\n        res.statusCode = 500;\n        res.setHeader(\"Content-Type\", \"text/html\");\n        res.end(`\n          <html>\n            <body>\n              <h1>Error</h1>\n              <p>Failed to load API documentation</p>\n            </body>\n          </html>\n        `);\n      }\n    };\n  }\n}\n","import path from \"node:path\";\nimport { getDeployTargetForPreset } from \"./config\";\nimport { resolveCronConfig, type FarmCronJob } from \"./cron\";\nimport {\n  mergeFarmRouteRuntimeConfigs,\n  resolveFarmRouteRuleRuntimeConfig,\n  resolveFarmRouteRuntimeConfig,\n  type ResolvedFarmRouteRuntimeConfig,\n} from \"./route-runtime\";\nimport type { FarmConfig } from \"./types\";\nimport type { FarmDiscoveredWorkflow } from \"./workflows\";\n\ntype RouteMapEntry = {\n  pattern: string;\n  modulePath: string;\n};\n\ntype RouteManagerLike = {\n  getRoutes(): Map<string, RouteMapEntry>;\n  getLayouts(): Map<string, RouteMapEntry>;\n  getLoadings(): Map<string, RouteMapEntry>;\n  getErrors(): Map<string, RouteMapEntry>;\n  resolveRouteRuntimeConfig?(\n    pattern: string,\n  ): Promise<ResolvedFarmRouteRuntimeConfig> | ResolvedFarmRouteRuntimeConfig;\n};\n\ntype APIRouteManagerLike = {\n  getRoutes(): Map<\n    string,\n    {\n      path: string;\n      filePath: string;\n      methods: string[];\n      runtime?: \"auto\" | \"node\" | \"edge\";\n      regions?: \"auto\" | readonly string[];\n      maxDuration?: \"auto\" | number;\n    }\n  >;\n};\n\ntype MiddlewareManagerLike = {\n  getMiddlewares(): Array<{\n    path: string;\n    filePath: string;\n    handlers: unknown[];\n    source?: \"config\" | \"file\";\n  }>;\n};\n\ntype IntegrationLike = {\n  kind?: string;\n  type?: string;\n  category?: string;\n  serverRuntime?: boolean;\n  routes?: ReadonlyArray<{\n    path: string;\n    method?: string;\n    methods?: readonly string[];\n  }>;\n  middleware?: readonly unknown[];\n  providers?: readonly unknown[];\n  schema?: {\n    models?: Record<string, unknown>;\n  };\n};\n\nexport type FarmDevtoolsRuntime = {\n  runtime: \"auto\" | \"node\" | \"edge\";\n  regions?: string[];\n  maxDuration?: number;\n};\n\nexport type FarmDevtoolsDiagnostic = {\n  severity: \"error\" | \"warning\" | \"info\";\n  code: string;\n  title: string;\n  message: string;\n  action?: string;\n};\n\nexport type FarmDevtoolsSnapshot = {\n  generatedAt: string;\n  health: \"ready\" | \"attention\" | \"error\";\n  project: {\n    name: string;\n    root: string;\n    srcDir: string;\n    basePath: string;\n    deploymentId: string;\n  };\n  deployment: {\n    target: string;\n    preset: string;\n    outputDir?: string;\n  };\n  counts: {\n    pages: number;\n    layouts: number;\n    loadingBoundaries: number;\n    errorBoundaries: number;\n    apiRoutes: number;\n    middleware: number;\n    integrations: number;\n    storageMounts: number;\n    cronJobs: number;\n    workflows: number;\n    layers: number;\n    diagnostics: number;\n  };\n  routes: Array<{\n    kind: \"page\" | \"layout\" | \"loading\" | \"error\";\n    pattern: string;\n    filePath: string;\n    runtime?: FarmDevtoolsRuntime;\n  }>;\n  apiRoutes: Array<{\n    path: string;\n    methods: string[];\n    filePath: string;\n    runtime: FarmDevtoolsRuntime;\n  }>;\n  middleware: Array<{\n    path: string;\n    source: \"config\" | \"file\";\n    filePath: string;\n    handlerCount: number;\n  }>;\n  integrations: Array<{\n    key: string;\n    type: string;\n    category: string;\n    serverRuntime: boolean;\n    routes: Array<{ path: string; methods: string[] }>;\n    middlewareCount: number;\n    providerCount: number;\n    schemaModelCount: number;\n  }>;\n  storage: Array<{\n    mount: string;\n    driver: string;\n    default: boolean;\n  }>;\n  cron: FarmCronJob[];\n  workflows: Array<{\n    id: string;\n    filePath: string;\n    routePath: string;\n    schedule: string[];\n    timezone?: string;\n  }>;\n  layers: Array<{\n    name: string;\n    source: string;\n    srcDir: string;\n  }>;\n  environment: {\n    server: string[];\n    public: string[];\n  };\n  docs: {\n    enabled: boolean;\n    entry?: string;\n  };\n  features: {\n    openapi: boolean;\n    markdown: boolean;\n    serverComponents: boolean;\n    serverActions: boolean;\n    optimizedBoundary: boolean;\n    observability: boolean;\n  };\n  diagnostics: FarmDevtoolsDiagnostic[];\n};\n\nexport interface CreateFarmDevtoolsSnapshotInput {\n  root: string;\n  srcDir: string;\n  routeManager: RouteManagerLike;\n  apiRouteManager: APIRouteManagerLike;\n  middlewareManager: MiddlewareManagerLike;\n  config?: FarmConfig & { openapi?: { enabled?: boolean } };\n  workflows?: readonly FarmDiscoveredWorkflow[];\n  now?: () => Date;\n  env?: Record<string, string | undefined>;\n}\n\nfunction normalizePath(value: string): string {\n  return value.replace(/\\\\/g, \"/\");\n}\n\nfunction toProjectPath(root: string, filePath: string): string {\n  const normalizedRoot = normalizePath(root).replace(/\\/$/, \"\");\n  const normalizedFile = normalizePath(filePath);\n  if (normalizedFile.startsWith(normalizedRoot + \"/\")) {\n    return normalizedFile.slice(normalizedRoot.length + 1);\n  }\n  return normalizedFile;\n}\n\nfunction sortByPath<T extends { path?: string; pattern?: string }>(items: T[]): T[] {\n  return [...items].sort((a, b) =>\n    (a.path || a.pattern || \"\").localeCompare(b.path || b.pattern || \"\"),\n  );\n}\n\nfunction toRuntime(value: ResolvedFarmRouteRuntimeConfig): FarmDevtoolsRuntime {\n  return {\n    runtime: value.runtime,\n    ...(value.regions ? { regions: [...value.regions] } : {}),\n    ...(value.maxDuration ? { maxDuration: value.maxDuration } : {}),\n  };\n}\n\nasync function collectRoutes(\n  root: string,\n  kind: FarmDevtoolsSnapshot[\"routes\"][number][\"kind\"],\n  routes: Map<string, RouteMapEntry>,\n  routeManager: RouteManagerLike,\n  diagnostics: FarmDevtoolsDiagnostic[],\n): Promise<FarmDevtoolsSnapshot[\"routes\"]> {\n  return Promise.all(\n    Array.from(routes.values()).map(async (route) => {\n      let runtime: FarmDevtoolsRuntime | undefined;\n      if (kind === \"page\" && routeManager.resolveRouteRuntimeConfig) {\n        try {\n          runtime = toRuntime(await routeManager.resolveRouteRuntimeConfig(route.pattern));\n        } catch (error) {\n          diagnostics.push({\n            severity: \"warning\",\n            code: \"ROUTE_RUNTIME_UNRESOLVED\",\n            title: `Could not inspect ${route.pattern}`,\n            message: error instanceof Error ? error.message : String(error),\n            action: \"Check the route and inherited layout runtime exports.\",\n          });\n        }\n      }\n\n      return {\n        kind,\n        pattern: route.pattern,\n        filePath: toProjectPath(root, route.modulePath),\n        ...(runtime ? { runtime } : {}),\n      };\n    }),\n  );\n}\n\nfunction collectIntegrations(integrations: FarmConfig[\"integrations\"] | undefined) {\n  if (!integrations || typeof integrations !== \"object\") return [];\n\n  return Object.entries(integrations)\n    .filter((entry): entry is [string, NonNullable<(typeof entry)[1]>] => Boolean(entry[1]))\n    .map(([key, value]) => {\n      const integration = value as IntegrationLike;\n      const routes = (integration.routes || []).map((route) => ({\n        path: route.path,\n        methods: [...(route.methods || (route.method ? [route.method] : [\"ALL\"]))]\n          .map((method) => method.toUpperCase())\n          .sort(),\n      }));\n\n      return {\n        key,\n        type: integration.type || key,\n        category: integration.category || \"custom\",\n        serverRuntime: integration.serverRuntime !== false,\n        routes: sortByPath(routes),\n        middlewareCount: integration.middleware?.length || 0,\n        providerCount: integration.providers?.length || 0,\n        schemaModelCount: Object.keys(integration.schema?.models || {}).length,\n      };\n    })\n    .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nfunction collectStorage(storage: FarmConfig[\"storage\"] | undefined): {\n  entries: FarmDevtoolsSnapshot[\"storage\"];\n  configured: boolean;\n} {\n  if (!storage || typeof storage !== \"object\") {\n    return {\n      entries: [{ mount: \"root\", driver: \"memory\", default: true }],\n      configured: false,\n    };\n  }\n\n  const value = storage as Record<string, any>;\n  if (value.kind === \"farm-storage-client\") {\n    return {\n      entries: [{ mount: \"root\", driver: \"storage client\", default: false }],\n      configured: true,\n    };\n  }\n\n  const configured = Object.keys(value).length > 0;\n  const rootDriver = value.client\n    ? describeStorageDriver(value.client)\n    : describeStorageDriver(value.driver);\n  const entries: FarmDevtoolsSnapshot[\"storage\"] = [\n    {\n      mount: \"root\",\n      driver: rootDriver,\n      default: !configured,\n    },\n  ];\n\n  if (value.mounts && typeof value.mounts === \"object\") {\n    for (const [mount, mountConfig] of Object.entries(value.mounts)) {\n      entries.push({\n        mount,\n        driver: describeStorageDriver(mountConfig),\n        default: false,\n      });\n    }\n  }\n\n  return {\n    entries: entries.sort((a, b) => {\n      if (a.mount === \"root\") return -1;\n      if (b.mount === \"root\") return 1;\n      return a.mount.localeCompare(b.mount);\n    }),\n    configured,\n  };\n}\n\nfunction describeStorageDriver(value: unknown): string {\n  if (!value) return \"memory\";\n  if (typeof value === \"string\") return value;\n  if (typeof value === \"function\") return \"custom\";\n  if (typeof value !== \"object\") return \"custom\";\n\n  const record = value as Record<string, unknown>;\n  if (record.kind === \"farm-storage-client\") return \"storage client\";\n  if (typeof record.driver === \"string\") return record.driver;\n  if (typeof record.driver === \"function\") return \"custom\";\n  return \"custom\";\n}\n\nfunction featureEnabled(value: unknown): boolean {\n  if (!value) return false;\n  if (typeof value === \"object\" && \"enabled\" in value) {\n    return (value as { enabled?: boolean }).enabled !== false;\n  }\n  return value !== false;\n}\n\nfunction collectEnvironmentKeys(config: FarmConfig | undefined) {\n  const env = config?.env as\n    | { server?: Record<string, unknown>; public?: Record<string, unknown> }\n    | undefined;\n  return {\n    server: Object.keys(env?.server || {}).sort(),\n    public: Object.keys(env?.public || {}).sort(),\n  };\n}\n\nfunction resolveHealth(diagnostics: FarmDevtoolsDiagnostic[]): FarmDevtoolsSnapshot[\"health\"] {\n  if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) return \"error\";\n  if (diagnostics.some((diagnostic) => diagnostic.severity === \"warning\")) return \"attention\";\n  return \"ready\";\n}\n\nexport async function createFarmDevtoolsSnapshot(\n  input: CreateFarmDevtoolsSnapshotInput,\n): Promise<FarmDevtoolsSnapshot> {\n  const config = input.config || {};\n  const diagnostics: FarmDevtoolsDiagnostic[] = [];\n  const pageRoutes = await collectRoutes(\n    input.root,\n    \"page\",\n    input.routeManager.getRoutes(),\n    input.routeManager,\n    diagnostics,\n  );\n  const layoutRoutes = await collectRoutes(\n    input.root,\n    \"layout\",\n    input.routeManager.getLayouts(),\n    input.routeManager,\n    diagnostics,\n  );\n  const loadingRoutes = await collectRoutes(\n    input.root,\n    \"loading\",\n    input.routeManager.getLoadings(),\n    input.routeManager,\n    diagnostics,\n  );\n  const errorRoutes = await collectRoutes(\n    input.root,\n    \"error\",\n    input.routeManager.getErrors(),\n    input.routeManager,\n    diagnostics,\n  );\n  const apiRoutes = sortByPath(\n    Array.from(input.apiRouteManager.getRoutes().values()).map((route) => {\n      const runtime = resolveFarmRouteRuntimeConfig(\n        mergeFarmRouteRuntimeConfigs(\n          resolveFarmRouteRuleRuntimeConfig(route.path, config.routeRules),\n          route,\n        ),\n        `API route \"${route.path}\"`,\n      );\n      return {\n        path: route.path,\n        methods: [...route.methods].sort(),\n        filePath: toProjectPath(input.root, route.filePath),\n        runtime: toRuntime(runtime),\n      };\n    }),\n  );\n  const middleware = sortByPath(\n    input.middlewareManager.getMiddlewares().map((entry) => ({\n      path: entry.path,\n      source: entry.source || \"file\",\n      filePath: toProjectPath(input.root, entry.filePath),\n      handlerCount: entry.handlers.length,\n    })),\n  );\n  const integrations = collectIntegrations(config.integrations);\n  const storage = collectStorage(config.storage);\n  const cron = resolveCronConfig(config.cron);\n  const workflows = (input.workflows || [])\n    .map((workflow) => ({\n      id: workflow.id,\n      filePath: toProjectPath(input.root, workflow.filePath),\n      routePath: workflow.routePath,\n      schedule: [...workflow.schedule],\n      ...(workflow.timezone ? { timezone: workflow.timezone } : {}),\n    }))\n    .sort((a, b) => a.id.localeCompare(b.id));\n  const layers = (config.layers || []).map((layer) => ({\n    name: layer.name,\n    source: layer.source,\n    srcDir: layer.srcDir,\n  }));\n  const deploymentPreset = String(config.deploy?.preset || config.preset || \"node-server\");\n  const deploymentTarget = String(\n    config.deploy?.target || getDeployTargetForPreset(deploymentPreset) || \"node\",\n  );\n  const env = input.env || process.env;\n\n  if (pageRoutes.length === 0) {\n    diagnostics.push({\n      severity: \"warning\",\n      code: \"NO_PAGE_ROUTES\",\n      title: \"No page routes found\",\n      message: `Farm did not discover a page under ${input.srcDir}/app.`,\n      action: `Add ${input.srcDir}/app/page.tsx or a programmatic page route.`,\n    });\n  }\n  if (layoutRoutes.length === 0) {\n    diagnostics.push({\n      severity: \"warning\",\n      code: \"ROOT_LAYOUT_MISSING\",\n      title: \"Root layout is missing\",\n      message: \"The application has no shared root layout.\",\n      action: `Add ${input.srcDir}/app/layout.tsx for shared metadata and application chrome.`,\n    });\n  }\n\n  const apiPaths = new Set(apiRoutes.map((route) => route.path));\n  for (const job of cron.jobs) {\n    if (!apiPaths.has(job.path)) {\n      diagnostics.push({\n        severity: \"warning\",\n        code: \"CRON_ROUTE_MISSING\",\n        title: `Cron route ${job.path} was not found`,\n        message: `${job.name} is scheduled, but its GET API route is not registered.`,\n        action: \"Add the target API route or update the cron path in farm.config.ts.\",\n      });\n    }\n  }\n  if (cron.jobs.length > 0 && !env[cron.secretEnv]) {\n    diagnostics.push({\n      severity: \"info\",\n      code: \"CRON_SECRET_NOT_SET\",\n      title: `${cron.secretEnv} is not set`,\n      message: \"Local manual runs remain available, but production cron routes fail closed.\",\n      action: `Set ${cron.secretEnv} in the deployment environment before production.`,\n    });\n  }\n  if (\n    storage.configured &&\n    storage.entries[0]?.driver === \"memory\" &&\n    [\"vercel\", \"cloudflare\", \"netlify\"].includes(deploymentTarget)\n  ) {\n    diagnostics.push({\n      severity: \"warning\",\n      code: \"EPHEMERAL_PRODUCTION_STORAGE\",\n      title: \"Production storage is in memory\",\n      message: `${deploymentTarget} instances do not preserve in-memory data across executions.`,\n      action: \"Configure a durable storage driver or mount for production state.\",\n    });\n  }\n\n  const environment = collectEnvironmentKeys(config);\n  const docs = config.docs;\n  const docsEnabled = featureEnabled(docs);\n  const allRoutes = sortByPath([...pageRoutes, ...layoutRoutes, ...loadingRoutes, ...errorRoutes]);\n\n  return {\n    generatedAt: (input.now?.() || new Date()).toISOString(),\n    health: resolveHealth(diagnostics),\n    project: {\n      name: path.basename(path.resolve(input.root)),\n      root: input.root,\n      srcDir: input.srcDir,\n      basePath: config.basePath || \"/\",\n      deploymentId: config.deploymentId || \"development\",\n    },\n    deployment: {\n      target: deploymentTarget,\n      preset: deploymentPreset,\n      ...(config.deploy?.outputDir ? { outputDir: config.deploy.outputDir } : {}),\n    },\n    counts: {\n      pages: pageRoutes.length,\n      layouts: layoutRoutes.length,\n      loadingBoundaries: loadingRoutes.length,\n      errorBoundaries: errorRoutes.length,\n      apiRoutes: apiRoutes.length,\n      middleware: middleware.length,\n      integrations: integrations.length,\n      storageMounts: storage.entries.length,\n      cronJobs: cron.jobs.length,\n      workflows: workflows.length,\n      layers: layers.length,\n      diagnostics: diagnostics.length,\n    },\n    routes: allRoutes,\n    apiRoutes,\n    middleware,\n    integrations,\n    storage: storage.entries,\n    cron: cron.jobs,\n    workflows,\n    layers,\n    environment,\n    docs: {\n      enabled: docsEnabled,\n      entry:\n        docsEnabled && docs && typeof docs === \"object\" && \"entry\" in docs\n          ? String(docs.entry)\n          : undefined,\n    },\n    features: {\n      openapi: Boolean(config.openapi?.enabled),\n      markdown: featureEnabled(config.md),\n      serverComponents: Boolean(config.experimental?.serverComponents),\n      serverActions: Boolean(config.experimental?.serverActions),\n      optimizedBoundary: Boolean(config.experimental?.optimizedBoundary),\n      observability: featureEnabled(config.observability),\n    },\n    diagnostics,\n  };\n}\n","import type { FarmDevtoolsDiagnostic, FarmDevtoolsRuntime, FarmDevtoolsSnapshot } from \"./devtools\";\n\ntype IconName =\n  | \"activity\"\n  | \"api\"\n  | \"app\"\n  | \"blocks\"\n  | \"book\"\n  | \"clock\"\n  | \"chevron\"\n  | \"close\"\n  | \"copy\"\n  | \"database\"\n  | \"external\"\n  | \"layers\"\n  | \"overview\"\n  | \"refresh\"\n  | \"route\"\n  | \"runtime\"\n  | \"search\"\n  | \"shield\"\n  | \"terminal\";\n\nconst ICON_PATHS: Record<IconName, string> = {\n  activity: '<path d=\"M22 12h-4l-3 9L9 3l-3 9H2\"/>',\n  api: '<path d=\"M8 3H7a2 2 0 0 0-2 2v4a2 2 0 0 1-2 2 2 2 0 0 1 2 2v4a2 2 0 0 0 2 2h1\"/><path d=\"M16 3h1a2 2 0 0 1 2 2v4a2 2 0 0 0 2 2 2 2 0 0 0-2 2v4a2 2 0 0 1-2 2h-1\"/>',\n  app: '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n  blocks:\n    '<rect width=\"7\" height=\"7\" x=\"3\" y=\"3\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"3\"/><rect width=\"7\" height=\"7\" x=\"14\" y=\"14\"/><rect width=\"7\" height=\"7\" x=\"3\" y=\"14\"/>',\n  book: '<path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\"/><path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\"/>',\n  clock: '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3 2\"/>',\n  chevron: '<path d=\"m9 18 6-6-6-6\"/>',\n  close: '<path d=\"M18 6 6 18M6 6l12 12\"/>',\n  copy: '<rect width=\"14\" height=\"14\" x=\"8\" y=\"8\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/>',\n  database:\n    '<ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"/><path d=\"M3 5v14c0 1.7 4 3 9 3s9-1.3 9-3V5\"/><path d=\"M3 12c0 1.7 4 3 9 3s9-1.3 9-3\"/>',\n  external:\n    '<path d=\"M15 3h6v6\"/><path d=\"M10 14 21 3\"/><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"/>',\n  layers:\n    '<path d=\"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\"/><path d=\"m22 12.5-9.17 4.17a2 2 0 0 1-1.66 0L2 12.5\"/><path d=\"m22 17.5-9.17 4.17a2 2 0 0 1-1.66 0L2 17.5\"/>',\n  overview:\n    '<rect width=\"7\" height=\"9\" x=\"3\" y=\"3\"/><rect width=\"7\" height=\"5\" x=\"14\" y=\"3\"/><rect width=\"7\" height=\"9\" x=\"14\" y=\"12\"/><rect width=\"7\" height=\"5\" x=\"3\" y=\"16\"/>',\n  refresh:\n    '<path d=\"M20 11a8.1 8.1 0 0 0-15.5-2M4 4v5h5\"/><path d=\"M4 13a8.1 8.1 0 0 0 15.5 2M20 20v-5h-5\"/>',\n  route:\n    '<circle cx=\"6\" cy=\"19\" r=\"3\"/><path d=\"M9 19h5.5a3.5 3.5 0 0 0 0-7h-5a3.5 3.5 0 0 1 0-7H18\"/><circle cx=\"18\" cy=\"5\" r=\"3\"/>',\n  runtime:\n    '<rect width=\"20\" height=\"14\" x=\"2\" y=\"3\"/><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"/><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"/>',\n  search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.3-4.3\"/>',\n  shield: '<path d=\"M20 13c0 5-3.5 7.5-8 9-4.5-1.5-8-4-8-9V5l8-3 8 3z\"/><path d=\"m9 12 2 2 4-4\"/>',\n  terminal: '<polyline points=\"4 17 10 11 4 5\"/><line x1=\"12\" x2=\"20\" y1=\"19\" y2=\"19\"/>',\n};\n\nfunction icon(name: IconName, className = \"\"): string {\n  return `<svg class=\"icon ${className}\" data-lucide=\"${name}\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${ICON_PATHS[name]}</svg>`;\n}\n\nfunction escapeHtml(value: unknown): string {\n  return String(value ?? \"\")\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/'/g, \"&#39;\");\n}\n\nfunction escapeAttribute(value: unknown): string {\n  return escapeHtml(value).replace(/`/g, \"&#96;\");\n}\n\nfunction renderBadge(value: string, tone = \"neutral\"): string {\n  return `<span class=\"badge badge-${tone}\">${escapeHtml(value)}</span>`;\n}\n\nfunction renderRuntime(runtime: FarmDevtoolsRuntime | undefined): string {\n  if (!runtime) return '<span class=\"muted\">Inherited</span>';\n  const details = [\n    runtime.regions?.length ? runtime.regions.join(\", \") : null,\n    runtime.maxDuration ? `${runtime.maxDuration}s` : null,\n  ].filter(Boolean);\n  return `<span class=\"runtime-value\">${renderBadge(runtime.runtime, runtime.runtime)}${\n    details.length ? `<small>${escapeHtml(details.join(\" / \"))}</small>` : \"\"\n  }</span>`;\n}\n\nfunction renderEmpty(title: string, detail: string): string {\n  return `<div class=\"empty-state\">\n    ${icon(\"activity\")}\n    <strong>${escapeHtml(title)}</strong>\n    <span>${escapeHtml(detail)}</span>\n  </div>`;\n}\n\nfunction renderFilter(id: string, placeholder: string): string {\n  return `<label class=\"filter-control\">\n    ${icon(\"search\")}\n    <span class=\"sr-only\">${escapeHtml(placeholder)}</span>\n    <input type=\"search\" placeholder=\"${escapeAttribute(placeholder)}\" data-filter=\"${escapeAttribute(id)}\" autocomplete=\"off\">\n    <kbd>/</kbd>\n  </label>`;\n}\n\nfunction renderDiagnostics(diagnostics: FarmDevtoolsDiagnostic[]): string {\n  if (diagnostics.length === 0) {\n    return `<div class=\"diagnostic diagnostic-ready\">\n      <span class=\"diagnostic-mark\">${icon(\"shield\")}</span>\n      <div><strong>Framework checks passed</strong><p>Routes and configured systems are internally consistent.</p></div>\n      ${renderBadge(\"ready\", \"ready\")}\n    </div>`;\n  }\n\n  return diagnostics\n    .map(\n      (diagnostic) => `<article class=\"diagnostic diagnostic-${diagnostic.severity}\">\n        <span class=\"diagnostic-mark\">${icon(\n          diagnostic.severity === \"error\" ? \"activity\" : \"shield\",\n        )}</span>\n        <div>\n          <span class=\"diagnostic-code\">${escapeHtml(diagnostic.code)}</span>\n          <strong>${escapeHtml(diagnostic.title)}</strong>\n          <p>${escapeHtml(diagnostic.message)}</p>\n          ${diagnostic.action ? `<small>${escapeHtml(diagnostic.action)}</small>` : \"\"}\n        </div>\n        ${renderBadge(diagnostic.severity, diagnostic.severity)}\n      </article>`,\n    )\n    .join(\"\");\n}\n\nfunction renderSystemRows(snapshot: FarmDevtoolsSnapshot): string {\n  const rows = [\n    [\"Integrations\", snapshot.counts.integrations, \"Configured product adapters\", \"blocks\"],\n    [\"Storage\", snapshot.counts.storageMounts, \"Root driver and named mounts\", \"database\"],\n    [\"Cron\", snapshot.counts.cronJobs, \"Portable scheduled API routes\", \"clock\"],\n    [\"Workflows\", snapshot.counts.workflows, \"Discovered workflow modules\", \"activity\"],\n    [\"Docs\", snapshot.docs.enabled ? \"On\" : \"Off\", snapshot.docs.entry || \"No docs route\", \"book\"],\n  ] as const;\n\n  return rows\n    .map(\n      ([label, value, detail, rowIcon]) => `<div class=\"system-row\">\n        <span class=\"system-icon\">${icon(rowIcon)}</span>\n        <div><strong>${escapeHtml(label)}</strong><small>${escapeHtml(detail)}</small></div>\n        <span class=\"system-value\">${escapeHtml(value)}</span>\n      </div>`,\n    )\n    .join(\"\");\n}\n\nfunction renderIntegrations(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.integrations.length === 0) {\n    return renderEmpty(\n      \"No integrations configured\",\n      \"Register product systems through farm.config.ts when the app needs them.\",\n    );\n  }\n\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Registry key</th><th>Adapter</th><th>Routes</th><th>Runtime surface</th></tr></thead>\n    <tbody>${snapshot.integrations\n      .map(\n        (integration) => `<tr>\n          <td><code>${escapeHtml(integration.key)}</code><small class=\"cell-detail\">${escapeHtml(\n            integration.category,\n          )}</small></td>\n          <td>${escapeHtml(integration.type)}</td>\n          <td>${\n            integration.routes.length\n              ? integration.routes\n                  .map(\n                    (route) =>\n                      `<span class=\"route-operation\"><code>${escapeHtml(\n                        route.path,\n                      )}</code><small>${escapeHtml(route.methods.join(\", \"))}</small></span>`,\n                  )\n                  .join(\"\")\n              : '<span class=\"muted\">No HTTP routes</span>'\n          }</td>\n          <td><span class=\"runtime-facts\">${renderBadge(\n            integration.serverRuntime ? \"server\" : \"platform\",\n          )}<span>${integration.middlewareCount} middleware</span><span>${\n            integration.providerCount\n          } providers</span><span>${integration.schemaModelCount} models</span></span></td>\n        </tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderMiddleware(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.middleware.length === 0) {\n    return renderEmpty(\"No middleware configured\", \"Requests currently enter routes directly.\");\n  }\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Path</th><th>Source</th><th>Handlers</th><th>File</th></tr></thead>\n    <tbody>${snapshot.middleware\n      .map(\n        (entry) =>\n          `<tr><td><code>${escapeHtml(entry.path)}</code></td><td>${renderBadge(\n            entry.source,\n          )}</td><td>${entry.handlerCount}</td><td class=\"file-cell\">${escapeHtml(\n            entry.filePath,\n          )}</td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderStorage(snapshot: FarmDevtoolsSnapshot): string {\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Mount</th><th>Driver</th><th>State</th></tr></thead>\n    <tbody>${snapshot.storage\n      .map(\n        (entry) =>\n          `<tr><td><code>${escapeHtml(entry.mount)}</code></td><td>${escapeHtml(\n            entry.driver,\n          )}</td><td>${renderBadge(entry.default ? \"default\" : \"configured\")}</td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderCron(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.cron.length === 0) {\n    return renderEmpty(\n      \"No cron routes configured\",\n      \"Add named schedules under cron in farm.config.ts.\",\n    );\n  }\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Name</th><th>Schedule (UTC)</th><th>Target</th></tr></thead>\n    <tbody>${snapshot.cron\n      .map(\n        (job) =>\n          `<tr><td><code>${escapeHtml(job.name)}</code></td><td>${job.schedule\n            .map((schedule) => `<code class=\"schedule\">${escapeHtml(schedule)}</code>`)\n            .join(\"\")}</td><td><code>${escapeHtml(job.path)}</code></td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderWorkflows(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.workflows.length === 0) {\n    return renderEmpty(\n      \"No workflows discovered\",\n      \"Workflow directories are enabled but currently empty.\",\n    );\n  }\n  return `<div class=\"table-scroll\"><table>\n    <thead><tr><th>Workflow</th><th>Schedule</th><th>Endpoint</th><th>Source</th></tr></thead>\n    <tbody>${snapshot.workflows\n      .map(\n        (workflow) =>\n          `<tr><td><code>${escapeHtml(workflow.id)}</code></td><td>${\n            workflow.schedule.length\n              ? workflow.schedule.map((schedule) => `<code>${escapeHtml(schedule)}</code>`).join(\"\")\n              : '<span class=\"muted\">Manual</span>'\n          }</td><td><code>${escapeHtml(workflow.routePath)}</code></td><td class=\"file-cell\">${escapeHtml(\n            workflow.filePath,\n          )}</td></tr>`,\n      )\n      .join(\"\")}</tbody>\n  </table></div>`;\n}\n\nfunction renderFeatureMatrix(snapshot: FarmDevtoolsSnapshot): string {\n  const features = [\n    [\"OpenAPI\", snapshot.features.openapi],\n    [\"Markdown\", snapshot.features.markdown],\n    [\"Server components\", snapshot.features.serverComponents],\n    [\"Server actions\", snapshot.features.serverActions],\n    [\"Optimized boundary\", snapshot.features.optimizedBoundary],\n    [\"Observability\", snapshot.features.observability],\n  ] as const;\n  return `<div class=\"feature-matrix\">${features\n    .map(\n      ([label, enabled]) =>\n        `<div><span>${escapeHtml(label)}</span>${renderBadge(\n          enabled ? \"enabled\" : \"disabled\",\n          enabled ? \"ready\" : \"neutral\",\n        )}</div>`,\n    )\n    .join(\"\")}</div>`;\n}\n\nfunction renderEnvironment(snapshot: FarmDevtoolsSnapshot): string {\n  const renderKeys = (keys: string[]) =>\n    keys.length\n      ? `<div class=\"key-list\">${keys.map((key) => `<code>${escapeHtml(key)}</code>`).join(\"\")}</div>`\n      : '<span class=\"muted\">No validated keys</span>';\n  return `<div class=\"environment-grid\">\n    <div><span class=\"mini-label\">Server keys</span>${renderKeys(snapshot.environment.server)}</div>\n    <div><span class=\"mini-label\">Public keys</span>${renderKeys(snapshot.environment.public)}</div>\n  </div>`;\n}\n\nfunction renderLayers(snapshot: FarmDevtoolsSnapshot): string {\n  if (snapshot.layers.length === 0) {\n    return renderEmpty(\n      \"No layers extended\",\n      \"This project owns its complete route and config surface.\",\n    );\n  }\n  return `<div class=\"layer-list\">${snapshot.layers\n    .map(\n      (layer) =>\n        `<div><span>${icon(\"layers\")}<strong>${escapeHtml(\n          layer.name,\n        )}</strong></span><code>${escapeHtml(layer.source)}</code><small>${escapeHtml(\n          layer.srcDir,\n        )}</small></div>`,\n    )\n    .join(\"\")}</div>`;\n}\n\ntype InspectorEntry = {\n  id: string;\n  label: string;\n  description: string;\n  value?: string | number;\n  searchValue?: string;\n  detailMeta?: string;\n  content: string;\n};\n\nfunction renderPropertyList(entries: Array<[label: string, value: string]>): string {\n  return `<dl class=\"property-list\">${entries\n    .map(([label, value]) => `<div><dt>${escapeHtml(label)}</dt><dd>${value}</dd></div>`)\n    .join(\"\")}</dl>`;\n}\n\nfunction renderDetailIntro(\n  label: string,\n  title: string,\n  description: string,\n  detailIcon: IconName,\n): string {\n  return `<div class=\"detail-intro\">\n    <span class=\"detail-icon\">${icon(detailIcon)}</span>\n    <div><span class=\"mini-label\">${escapeHtml(label)}</span><h2>${escapeHtml(\n      title,\n    )}</h2><p>${escapeHtml(description)}</p></div>\n  </div>`;\n}\n\nfunction renderInspector(\n  scope: string,\n  title: string,\n  entries: InspectorEntry[],\n  filterPlaceholder?: string,\n): string {\n  if (entries.length === 0) {\n    return `<div class=\"single-pane\">\n      <header class=\"pane-header\"><strong>${escapeHtml(title)}</strong><span>0 items</span></header>\n      ${renderEmpty(`No ${title.toLowerCase()} found`, \"Farm has no runtime data for this surface yet.\")}\n    </div>`;\n  }\n\n  return `<div class=\"split-view\" data-inspector=\"${escapeAttribute(scope)}\">\n    <section class=\"pane pane-list\">\n      <header class=\"pane-header\"><strong>${escapeHtml(title)}</strong><span>${entries.length} ${\n        entries.length === 1 ? \"item\" : \"items\"\n      }</span></header>\n      ${\n        filterPlaceholder\n          ? `<div class=\"pane-tools\">${renderFilter(scope, filterPlaceholder)}</div>`\n          : \"\"\n      }\n      <div class=\"pane-scroll inspector-list\" data-filter-rows=\"${escapeAttribute(scope)}\">\n        ${entries\n          .map(\n            (\n              entry,\n              index,\n            ) => `<button type=\"button\" class=\"inspector-row\" data-detail-trigger=\"${escapeAttribute(\n              scope,\n            )}\" data-detail-id=\"${escapeAttribute(entry.id)}\" data-search-value=\"${escapeAttribute(\n              entry.searchValue || `${entry.label} ${entry.description}`,\n            )}\" aria-selected=\"${index === 0 ? \"true\" : \"false\"}\">\n              <span class=\"inspector-row-copy\"><strong>${escapeHtml(\n                entry.label,\n              )}</strong><small>${escapeHtml(entry.description)}</small></span>\n              ${entry.value === undefined ? \"\" : `<span class=\"inspector-row-value\">${escapeHtml(entry.value)}</span>`}\n            </button>`,\n          )\n          .join(\"\")}\n        <div class=\"filtered-empty\" data-filter-empty=\"${escapeAttribute(\n          scope,\n        )}\" hidden>No items match this filter.</div>\n      </div>\n    </section>\n    <section class=\"pane pane-detail\">\n      ${entries\n        .map(\n          (entry, index) => `<article class=\"detail-panel\" data-detail-panel=\"${escapeAttribute(\n            scope,\n          )}\" data-detail-id=\"${escapeAttribute(entry.id)}\"${index === 0 ? \"\" : \" hidden\"}>\n            <header class=\"pane-header\"><strong>${escapeHtml(entry.label)}</strong><span>${escapeHtml(\n              entry.detailMeta || entry.description,\n            )}</span></header>\n            <div class=\"detail-scroll\">${entry.content}</div>\n          </article>`,\n        )\n        .join(\"\")}\n    </section>\n  </div>`;\n}\n\nfunction renderJson(value: unknown): string {\n  return `<pre class=\"json-viewer\"><code>${escapeHtml(JSON.stringify(value, null, 2))}</code></pre>`;\n}\n\nfunction renderOverviewInspector(\n  snapshot: FarmDevtoolsSnapshot,\n  healthLabel: string,\n  generatedTime: string,\n): string {\n  const scheduledCount = snapshot.counts.cronJobs + snapshot.counts.workflows;\n  return renderInspector(\"overview\", \"Project\", [\n    {\n      id: \"diagnostics\",\n      label: \"Diagnostics\",\n      description: \"Actionable framework checks\",\n      value: snapshot.counts.diagnostics,\n      detailMeta: healthLabel,\n      content: `${renderDetailIntro(\n        \"Project health\",\n        healthLabel,\n        snapshot.diagnostics.length\n          ? \"Farm found configuration details that deserve attention before production.\"\n          : \"Routes and configured systems are internally consistent.\",\n        \"shield\",\n      )}<div class=\"detail-section\">${renderDiagnostics(snapshot.diagnostics)}</div>`,\n    },\n    {\n      id: \"project\",\n      label: snapshot.project.name,\n      description: snapshot.project.root,\n      value: snapshot.project.srcDir,\n      detailMeta: \"Active project\",\n      content: `${renderDetailIntro(\n        \"Active project\",\n        snapshot.project.name,\n        \"The application currently resolved by the Farm development server.\",\n        \"app\",\n      )}${renderPropertyList([\n        [\"Root\", `<code>${escapeHtml(snapshot.project.root)}</code>`],\n        [\"Source directory\", `<code>${escapeHtml(snapshot.project.srcDir)}</code>`],\n        [\"Base path\", `<code>${escapeHtml(snapshot.project.basePath)}</code>`],\n        [\"Deployment ID\", `<code>${escapeHtml(snapshot.project.deploymentId)}</code>`],\n        [\"Snapshot\", `<span class=\"mono\">${escapeHtml(generatedTime)}</span>`],\n      ])}`,\n    },\n    {\n      id: \"routes\",\n      label: \"Route surface\",\n      description: \"Pages, boundaries, and typed endpoints\",\n      value: snapshot.counts.pages + snapshot.counts.apiRoutes,\n      detailMeta: `${snapshot.counts.pages} pages / ${snapshot.counts.apiRoutes} API`,\n      content: `${renderDetailIntro(\n        \"Application routing\",\n        `${snapshot.counts.pages + snapshot.counts.apiRoutes} registered routes`,\n        \"Farm resolves page boundaries and server endpoints from the same application tree.\",\n        \"route\",\n      )}${renderPropertyList([\n        [\"Pages\", `<strong>${snapshot.counts.pages}</strong>`],\n        [\"Layouts\", `<strong>${snapshot.counts.layouts}</strong>`],\n        [\"Loading boundaries\", `<strong>${snapshot.counts.loadingBoundaries}</strong>`],\n        [\"Error boundaries\", `<strong>${snapshot.counts.errorBoundaries}</strong>`],\n        [\"API routes\", `<strong>${snapshot.counts.apiRoutes}</strong>`],\n      ])}`,\n    },\n    {\n      id: \"systems\",\n      label: \"Connected systems\",\n      description: \"Integrations, storage, and request layers\",\n      value: snapshot.counts.integrations,\n      detailMeta: \"Configured surfaces\",\n      content: `${renderDetailIntro(\n        \"System map\",\n        \"Application services\",\n        \"Product integrations and framework services visible to the running application.\",\n        \"blocks\",\n      )}<div class=\"detail-section\">${renderSystemRows(snapshot)}</div>`,\n    },\n    {\n      id: \"deployment\",\n      label: \"Runtime\",\n      description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,\n      value: scheduledCount,\n      detailMeta: \"Deployment controls\",\n      content: `${renderDetailIntro(\n        \"Deployment runtime\",\n        snapshot.deployment.target,\n        \"The resolved deployment adapter, output contract, and enabled framework surfaces.\",\n        \"runtime\",\n      )}${renderPropertyList([\n        [\"Target\", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],\n        [\"Nitro preset\", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],\n        [\n          \"Output\",\n          `<code>${escapeHtml(snapshot.deployment.outputDir || \"Framework default\")}</code>`,\n        ],\n        [\"Scheduled work\", `<strong>${scheduledCount}</strong>`],\n      ])}<div class=\"detail-section\">${renderFeatureMatrix(snapshot)}</div>`,\n    },\n  ]);\n}\n\nfunction renderRoutesInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\n    \"routes\",\n    \"Routes\",\n    snapshot.routes.map((route, index) => ({\n      id: `route-${index}`,\n      label: route.pattern,\n      description: route.filePath,\n      value: route.kind,\n      searchValue: `${route.kind} ${route.pattern} ${route.filePath} ${\n        route.runtime?.runtime || \"inherited\"\n      }`,\n      detailMeta: route.kind,\n      content: `${renderDetailIntro(\n        `${route.kind} route`,\n        route.pattern,\n        route.filePath,\n        \"route\",\n      )}${renderPropertyList([\n        [\"Kind\", renderBadge(route.kind, route.kind)],\n        [\"Pattern\", `<code>${escapeHtml(route.pattern)}</code>`],\n        [\"Runtime\", renderRuntime(route.runtime)],\n        [\"Source\", `<code>${escapeHtml(route.filePath)}</code>`],\n      ])}`,\n    })),\n    \"Filter routes or files\",\n  );\n}\n\nfunction renderApiInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\n    \"api\",\n    \"API routes\",\n    snapshot.apiRoutes.map((route, index) => ({\n      id: `api-${index}`,\n      label: route.path,\n      description: route.filePath,\n      value: route.methods.length,\n      searchValue: `${route.path} ${route.methods.join(\" \")} ${route.filePath} ${\n        route.runtime.runtime\n      }`,\n      detailMeta: route.methods.join(\" / \"),\n      content: `${renderDetailIntro(\n        \"Server endpoint\",\n        route.path,\n        route.filePath,\n        \"api\",\n      )}${renderPropertyList([\n        [\n          \"Methods\",\n          `<span class=\"method-list\">${route.methods\n            .map((method) => renderBadge(method, \"method\"))\n            .join(\"\")}</span>`,\n        ],\n        [\"Runtime\", renderRuntime(route.runtime)],\n        [\"Source\", `<code>${escapeHtml(route.filePath)}</code>`],\n      ])}`,\n    })),\n    \"Filter endpoints or methods\",\n  );\n}\n\nfunction renderSystemsInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\"systems\", \"Systems\", [\n    {\n      id: \"integrations\",\n      label: \"Integrations\",\n      description: \"Configured product adapters\",\n      value: snapshot.integrations.length,\n      content: renderIntegrations(snapshot),\n    },\n    {\n      id: \"middleware\",\n      label: \"Middleware\",\n      description: \"Request layers and source modules\",\n      value: snapshot.middleware.length,\n      content: renderMiddleware(snapshot),\n    },\n    {\n      id: \"storage\",\n      label: \"Storage mounts\",\n      description: \"Root driver and named namespaces\",\n      value: snapshot.storage.length,\n      content: renderStorage(snapshot),\n    },\n    {\n      id: \"docs\",\n      label: \"Documentation\",\n      description: snapshot.docs.entry || \"No docs route\",\n      value: snapshot.docs.enabled ? \"on\" : \"off\",\n      content: `${renderDetailIntro(\n        \"Documentation\",\n        snapshot.docs.enabled ? \"Docs enabled\" : \"Docs disabled\",\n        \"Farm can serve application documentation from the same development runtime.\",\n        \"book\",\n      )}${renderPropertyList([\n        [\"State\", renderBadge(snapshot.docs.enabled ? \"enabled\" : \"disabled\")],\n        [\"Entry\", `<code>${escapeHtml(snapshot.docs.entry || \"Not configured\")}</code>`],\n      ])}`,\n    },\n  ]);\n}\n\nfunction renderRuntimeInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\"runtime\", \"Runtime\", [\n    {\n      id: \"deployment\",\n      label: \"Deployment\",\n      description: `${snapshot.deployment.target} / ${snapshot.deployment.preset}`,\n      content: `${renderDetailIntro(\n        \"Deployment target\",\n        snapshot.deployment.target,\n        \"Resolved platform adapter and build output for this application.\",\n        \"runtime\",\n      )}${renderPropertyList([\n        [\"Target\", `<code>${escapeHtml(snapshot.deployment.target)}</code>`],\n        [\"Nitro preset\", `<code>${escapeHtml(snapshot.deployment.preset)}</code>`],\n        [\n          \"Output directory\",\n          `<code>${escapeHtml(snapshot.deployment.outputDir || \"Framework default\")}</code>`,\n        ],\n      ])}`,\n    },\n    {\n      id: \"cron\",\n      label: \"Cron routes\",\n      description: \"Portable scheduled API routes\",\n      value: snapshot.cron.length,\n      content: renderCron(snapshot),\n    },\n    {\n      id: \"workflows\",\n      label: \"Workflows\",\n      description: \"Discovered workflow modules\",\n      value: snapshot.workflows.length,\n      content: renderWorkflows(snapshot),\n    },\n    {\n      id: \"features\",\n      label: \"Framework features\",\n      description: \"Resolved configuration switches\",\n      content: renderFeatureMatrix(snapshot),\n    },\n    {\n      id: \"environment\",\n      label: \"Environment\",\n      description: \"Validated key names only\",\n      value: snapshot.environment.server.length + snapshot.environment.public.length,\n      content: renderEnvironment(snapshot),\n    },\n    {\n      id: \"layers\",\n      label: \"Layers\",\n      description: \"Extended source roots\",\n      value: snapshot.layers.length,\n      content: renderLayers(snapshot),\n    },\n  ]);\n}\n\nfunction renderRawInspector(snapshot: FarmDevtoolsSnapshot): string {\n  return renderInspector(\"raw\", \"Raw snapshot\", [\n    {\n      id: \"snapshot\",\n      label: \"Snapshot\",\n      description: \"Complete serialized runtime state\",\n      content: renderJson(snapshot),\n    },\n    {\n      id: \"routes\",\n      label: \"Routes\",\n      description: \"Pages and route boundaries\",\n      value: snapshot.routes.length,\n      content: renderJson(snapshot.routes),\n    },\n    {\n      id: \"api\",\n      label: \"API\",\n      description: \"Typed server endpoints\",\n      value: snapshot.apiRoutes.length,\n      content: renderJson(snapshot.apiRoutes),\n    },\n    {\n      id: \"systems\",\n      label: \"Systems\",\n      description: \"Integrations, middleware, and storage\",\n      content: renderJson({\n        integrations: snapshot.integrations,\n        middleware: snapshot.middleware,\n        storage: snapshot.storage,\n      }),\n    },\n    {\n      id: \"diagnostics\",\n      label: \"Diagnostics\",\n      description: \"Framework health findings\",\n      value: snapshot.diagnostics.length,\n      content: renderJson(snapshot.diagnostics),\n    },\n  ]);\n}\n\nfunction renderNavigationItem(view: string, label: string): string {\n  return `<button type=\"button\" class=\"nav-item\" data-view-trigger=\"${view}\" aria-selected=\"false\">\n    <span>${escapeHtml(label)}</span>\n  </button>`;\n}\n\nexport function renderFarmDevtoolsHtml(snapshot: FarmDevtoolsSnapshot): string {\n  const healthLabel =\n    snapshot.health === \"ready\" ? \"Ready\" : snapshot.health === \"error\" ? \"Error\" : \"Attention\";\n  const generatedTime = new Date(snapshot.generatedAt).toLocaleTimeString(\"en-US\", {\n    hour: \"2-digit\",\n    minute: \"2-digit\",\n    second: \"2-digit\",\n    hour12: false,\n  });\n\n  return `<!doctype html>\n<html lang=\"en\" class=\"devtools-frame\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <meta name=\"color-scheme\" content=\"dark\">\n  <title>Farm Devtools - ${escapeHtml(snapshot.project.name)}</title>\n  <style>\n    :root {\n      color-scheme: dark;\n      --background: #000;\n      --surface: #050505;\n      --surface-raised: #090909;\n      --foreground: #f5f5f5;\n      --muted: #858585;\n      --muted-strong: #a8a8a8;\n      --line: rgb(255 255 255 / 0.12);\n      --line-soft: rgb(255 255 255 / 0.065);\n      --line-strong: rgb(255 255 255 / 0.22);\n      --font-sans: \"Geist Sans\", Geist, Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n      --font-mono: \"Geist Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace;\n    }\n    * { box-sizing: border-box; }\n    html { min-width: 320px; min-height: 100%; background: var(--background); }\n    body { min-height: 100vh; min-height: 100dvh; margin: 0; overflow: hidden; background: #030303; color: var(--foreground); font-family: var(--font-sans); font-size: 14px; letter-spacing: 0; text-rendering: optimizeLegibility; }\n    button, input { color: inherit; font: inherit; letter-spacing: 0; }\n    button, a { -webkit-tap-highlight-color: transparent; }\n    button { cursor: pointer; }\n    a { color: inherit; }\n    [hidden] { display: none !important; }\n    code, kbd, .badge, .mono, .mini-label, .metric-label, .metric-detail, .section-index, .diagnostic-code, th, .statusbar, .eyebrow { font-family: var(--font-mono); letter-spacing: 0; }\n    .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }\n    .icon { width: 16px; height: 16px; flex: 0 0 auto; }\n    .stage { display: grid; min-height: 100vh; min-height: 100dvh; place-items: center; padding: 20px; }\n    .shell { display: flex; width: min(1280px, 100%); height: min(780px, calc(100dvh - 40px)); min-height: 560px; min-width: 0; flex-direction: column; overflow: hidden; border: 1px solid var(--line-strong); background: var(--background); box-shadow: 0 24px 80px rgb(0 0 0 / 0.72); }\n    .topbar { z-index: 30; display: flex; min-height: 42px; flex: 0 0 auto; align-items: stretch; border-bottom: 1px solid var(--line); background: var(--background); }\n    .brand { display: flex; min-width: 170px; align-items: center; gap: 8px; padding: 0 12px; border-right: 1px solid var(--line); text-decoration: none; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; white-space: nowrap; }\n    .brand-mark { display: grid; width: 18px; height: 18px; place-items: center; border: 1px solid var(--line-strong); color: #fff; font-family: var(--font-sans); font-size: 9px; font-weight: 650; }\n    .brand-slash { color: #555; }\n    .brand-product { color: var(--muted-strong); }\n    .tabbar { display: flex; min-width: 0; flex: 1 1 auto; align-items: stretch; overflow-x: auto; scrollbar-width: none; }\n    .tabbar::-webkit-scrollbar { display: none; }\n    .nav-item { position: relative; display: flex; min-width: max-content; min-height: 41px; align-items: center; gap: 7px; padding: 0 11px; border: 0; background: transparent; color: var(--muted); font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; transition: background-color 140ms ease-out, color 140ms ease-out; }\n    .nav-item::after { position: absolute; right: 10px; bottom: -1px; left: 10px; height: 1px; background: transparent; content: \"\"; }\n    .nav-item:hover, .nav-item:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }\n    .nav-item[aria-selected=\"true\"] { color: #fff; }\n    .nav-item[aria-selected=\"true\"]::after { background: #fff; }\n    .nav-item .icon { width: 13px; height: 13px; }\n    .nav-item small { color: #666; font-size: 9px; font-weight: 400; }\n    .topbar-meta { display: flex; flex: 0 0 auto; margin-left: auto; border-left: 1px solid var(--line); }\n    .deprecation-tag { display: inline-flex; align-items: center; padding: 0 10px; border-right: 1px solid var(--line); color: #d9a626; font-family: var(--font-mono); font-size: 10px; text-transform: uppercase; white-space: nowrap; }\n    .topbar-status { display: flex; min-width: max-content; align-items: center; gap: 7px; padding: 0 11px; color: var(--muted-strong); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n    .status-dot { width: 5px; height: 5px; background: #fff; box-shadow: 0 0 0 3px rgb(255 255 255 / 0.06); }\n    .status-dot-attention { background: #909090; animation: status-pulse 1.8s ease-in-out infinite; }\n    .status-dot-error { background: transparent; border: 1px solid #fff; }\n    .workspace { min-height: 0; flex: 1 1 auto; }\n    .eyebrow { display: block; color: var(--muted); font-size: 9px; font-weight: 400; text-transform: uppercase; }\n    .content { height: 100%; min-width: 0; }\n    .view { height: 100%; min-width: 0; overflow: hidden; }\n    .split-view { display: grid; height: 100%; min-height: 0; grid-template-columns: clamp(230px, 28%, 300px) minmax(0, 1fr); }\n    .pane { min-width: 0; min-height: 0; overflow: hidden; background: var(--background); }\n    .pane-list { display: flex; flex-direction: column; border-right: 1px solid var(--line); }\n    .pane-detail { position: relative; }\n    .pane-header { display: flex; min-height: 38px; align-items: center; justify-content: space-between; gap: 12px; padding: 0 12px; border-bottom: 1px solid var(--line); background: var(--surface); }\n    .pane-header strong { overflow: hidden; font-size: 11px; font-weight: 520; text-overflow: ellipsis; white-space: nowrap; }\n    .pane-header span { overflow: hidden; color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }\n    .pane-tools { border-bottom: 1px solid var(--line); }\n    .pane-tools .filter-control { width: 100%; min-height: 36px; border: 0; }\n    .pane-scroll, .detail-scroll { min-height: 0; overflow: auto; overscroll-behavior: contain; }\n    .pane-scroll { flex: 1 1 auto; }\n    .inspector-list { scrollbar-width: thin; scrollbar-color: var(--line-strong) transparent; }\n    .inspector-row { position: relative; display: grid; width: 100%; min-height: 54px; grid-template-columns: 24px minmax(0, 1fr) auto; align-items: center; gap: 9px; padding: 8px 11px; border: 0; border-bottom: 1px solid var(--line-soft); background: transparent; color: var(--muted); text-align: left; transition: background-color 120ms ease-out, color 120ms ease-out; }\n    .inspector-row::before { position: absolute; inset: 0 auto 0 0; width: 1px; background: transparent; content: \"\"; }\n    .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); outline: none; }\n    .inspector-row[aria-selected=\"true\"] { background: rgb(255 255 255 / 0.075); color: #fff; }\n    .inspector-row[aria-selected=\"true\"]::before { background: #fff; }\n    .inspector-row-copy { min-width: 0; }\n    .inspector-row-copy strong, .inspector-row-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n    .inspector-row-copy strong { color: inherit; font-size: 11px; font-weight: 520; }\n    .inspector-row-copy small { margin-top: 3px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n    .inspector-row-value { color: var(--muted-strong); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n    .detail-panel { display: flex; height: 100%; min-height: 0; flex-direction: column; }\n    .detail-scroll { flex: 1 1 auto; }\n    .detail-intro { display: grid; min-height: 132px; grid-template-columns: 34px minmax(0, 1fr); align-items: start; gap: 14px; padding: 22px; border-bottom: 1px solid var(--line); }\n    .detail-icon { display: grid; width: 32px; height: 32px; border: 1px solid var(--line); color: var(--muted-strong); place-items: center; }\n    .detail-icon .icon { width: 15px; height: 15px; }\n    .detail-intro .mini-label { margin: 1px 0 8px; }\n    .detail-intro h2 { margin: 0; overflow-wrap: anywhere; font-size: 20px; font-weight: 530; line-height: 1.2; }\n    .detail-intro p { max-width: 680px; margin: 8px 0 0; color: var(--muted); font-size: 11px; line-height: 1.55; }\n    .detail-section { border-top: 1px solid var(--line); }\n    .detail-intro + .detail-section { border-top: 0; }\n    .property-list { margin: 0; }\n    .property-list > div { display: grid; min-height: 48px; grid-template-columns: minmax(120px, 0.32fr) minmax(0, 1fr); align-items: center; gap: 18px; padding: 9px 16px; border-bottom: 1px solid var(--line-soft); }\n    .property-list dt { color: var(--muted); font-family: var(--font-mono); font-size: 9px; text-transform: uppercase; }\n    .property-list dd { min-width: 0; margin: 0; overflow-wrap: anywhere; color: var(--muted-strong); font-size: 11px; }\n    .property-list dd > code { color: var(--foreground); font-size: 10px; }\n    .single-pane { height: 100%; min-height: 0; }\n    .json-viewer { min-height: 100%; margin: 0; padding: 16px; overflow: auto; background: #000; color: var(--muted-strong); font-family: var(--font-mono); font-size: 10px; line-height: 1.65; tab-size: 2; white-space: pre-wrap; word-break: break-word; }\n    .diagnostic { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; align-items: start; gap: 12px; min-height: 88px; padding: 16px 18px; border-bottom: 1px solid var(--line-soft); }\n    .diagnostic:last-child { border-bottom: 0; }\n    .diagnostic-mark { display: grid; width: 28px; height: 28px; place-items: center; border: 1px solid var(--line); color: var(--muted-strong); }\n    .diagnostic-code { display: block; margin-bottom: 5px; color: var(--muted); font-size: 9px; }\n    .diagnostic strong { display: block; font-size: 12px; font-weight: 540; }\n    .diagnostic p { margin: 5px 0 0; color: var(--muted-strong); font-size: 11px; line-height: 1.5; }\n    .diagnostic small { display: block; margin-top: 6px; color: var(--muted); font-size: 10px; line-height: 1.5; }\n    .diagnostic-warning { box-shadow: inset 1px 0 var(--line-strong); }\n    .system-row { display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; min-height: 64px; align-items: center; gap: 10px; padding: 11px 16px; border-bottom: 1px solid var(--line-soft); }\n    .system-row:last-child { border-bottom: 0; }\n    .system-icon { display: grid; width: 28px; height: 28px; place-items: center; color: var(--muted-strong); }\n    .system-row strong, .system-row small { display: block; }\n    .system-row strong { font-size: 12px; font-weight: 520; }\n    .system-row small { margin-top: 3px; overflow: hidden; color: var(--muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }\n    .system-value { font-family: var(--font-mono); font-size: 11px; }\n    .filter-control { display: flex; width: min(280px, 34vw); min-height: 34px; align-items: center; gap: 8px; padding: 0 9px; border: 1px solid var(--line); background: #000; color: var(--muted); }\n    .filter-control:focus-within { border-color: var(--line-strong); color: #fff; }\n    .filter-control input { min-width: 0; flex: 1; border: 0; outline: 0; background: transparent; color: var(--foreground); font-family: var(--font-mono); font-size: 10px; }\n    .filter-control input::placeholder { color: #666; }\n    .filter-control kbd { padding: 1px 5px; border: 1px solid var(--line); color: var(--muted); font-size: 9px; }\n    .table-scroll { width: 100%; overflow-x: auto; }\n    table { width: 100%; border-collapse: collapse; table-layout: auto; }\n    th { height: 36px; padding: 0 16px; border-bottom: 1px solid var(--line); background: #030303; color: var(--muted); font-size: 9px; font-weight: 400; text-align: left; text-transform: uppercase; white-space: nowrap; }\n    td { min-height: 48px; padding: 12px 16px; border-bottom: 1px solid var(--line-soft); color: var(--muted-strong); font-size: 11px; line-height: 1.55; vertical-align: top; }\n    tr:last-child td { border-bottom: 0; }\n    tbody tr { transition: background-color 120ms ease-out; }\n    tbody tr:hover { background: rgb(255 255 255 / 0.035); }\n    td code { color: var(--foreground); font-size: 10px; white-space: nowrap; }\n    .file-cell { max-width: 420px; overflow: hidden; font-family: var(--font-mono); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }\n    .badge { display: inline-flex; min-height: 20px; align-items: center; padding: 1px 6px; border: 1px solid var(--line); color: var(--muted-strong); font-size: 9px; font-weight: 400; text-transform: uppercase; white-space: nowrap; }\n    .badge-ready, .badge-page, .badge-node { border-color: var(--line-strong); color: #fff; }\n    .badge-warning, .badge-attention, .badge-edge { border-style: dashed; color: #fff; }\n    .badge-error { background: #fff; color: #000; }\n    .badge-method { min-width: 36px; justify-content: center; border-color: var(--line-soft); color: #d0d0d0; }\n    .method-list, .runtime-value, .runtime-facts { display: flex; flex-wrap: wrap; align-items: center; gap: 5px; }\n    .runtime-value small, .runtime-facts span { color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n    .cell-detail { display: block; margin-top: 4px; color: var(--muted); font-family: var(--font-mono); font-size: 9px; }\n    .route-operation { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n    .route-operation + .route-operation { margin-top: 5px; }\n    .route-operation small { color: var(--muted); font-family: var(--font-mono); font-size: 9px; white-space: nowrap; }\n    .schedule { display: block; }\n    .schedule + .schedule { margin-top: 4px; }\n    .muted { color: var(--muted); }\n    .empty-state { display: grid; min-height: 156px; place-items: center; align-content: center; gap: 7px; padding: 24px; color: var(--muted); text-align: center; }\n    .empty-state strong { color: var(--muted-strong); font-size: 12px; font-weight: 520; }\n    .empty-state span { max-width: 420px; font-size: 10px; line-height: 1.5; }\n    .filtered-empty { padding: 24px; color: var(--muted); font-family: var(--font-mono); font-size: 10px; text-align: center; }\n    .feature-matrix > div { display: flex; min-height: 45px; align-items: center; justify-content: space-between; gap: 16px; padding: 9px 16px; border-bottom: 1px solid var(--line-soft); }\n    .feature-matrix > div:last-child { border-bottom: 0; }\n    .feature-matrix span:first-child { font-size: 11px; }\n    .environment-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }\n    .environment-grid > div { min-height: 128px; padding: 16px; }\n    .environment-grid > div + div { border-left: 1px solid var(--line); }\n    .mini-label { display: block; margin-bottom: 12px; color: var(--muted); font-size: 9px; text-transform: uppercase; }\n    .key-list { display: flex; flex-wrap: wrap; gap: 6px; }\n    .key-list code { padding: 4px 6px; border: 1px solid var(--line-soft); color: var(--muted-strong); font-size: 9px; }\n    .layer-list > div { display: grid; grid-template-columns: minmax(120px, 0.7fr) minmax(0, 1fr) auto; min-height: 52px; align-items: center; gap: 14px; padding: 10px 16px; border-bottom: 1px solid var(--line-soft); }\n    .layer-list > div:last-child { border-bottom: 0; }\n    .layer-list span { display: flex; align-items: center; gap: 8px; }\n    .layer-list strong { font-size: 11px; font-weight: 520; }\n    .layer-list code, .layer-list small { color: var(--muted); font-size: 9px; }\n    .statusbar { display: flex; min-height: 29px; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 16px; padding: 0 10px; border-top: 1px solid var(--line); background: var(--surface); color: var(--muted); font-size: 9px; text-transform: uppercase; }\n    .statusbar span { display: flex; align-items: center; gap: 7px; }\n    @keyframes status-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }\n    @media (max-width: 1100px) {\n      .topbar-status { display: none; }\n    }\n    @media (max-width: 840px) {\n      .stage { display: block; padding: 0; }\n      .shell { width: 100%; height: 100dvh; min-height: 0; border: 0; }\n      .topbar { flex-wrap: wrap; }\n      .brand { min-width: auto; height: 40px; border-right: 0; }\n      .brand-product, .brand-slash { display: none; }\n      .tabbar { order: 3; width: 100%; flex-basis: 100%; border-top: 1px solid var(--line); }\n      .topbar-meta { height: 40px; }\n      .nav-item { min-height: 39px; }\n      .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(150px, 34%) minmax(0, 1fr); }\n      .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }\n      .filter-control { width: 100%; }\n    }\n    @media (max-width: 560px) {\n      .detail-intro { min-height: 112px; padding: 16px; }\n      .detail-intro h2 { font-size: 17px; }\n      .property-list > div { grid-template-columns: minmax(98px, 0.38fr) minmax(0, 1fr); gap: 12px; padding-inline: 12px; }\n      .environment-grid { grid-template-columns: 1fr; }\n      .environment-grid > div + div { border-top: 1px solid var(--line); border-left: 0; }\n      .statusbar span:last-child { display: none; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      html { scroll-behavior: auto; }\n      *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }\n    }\n  </style>\n  <style data-assistant-ui-layout>\n    :root {\n      --background: #0a0a0a;\n      --surface: #0a0a0a;\n      --surface-raised: #111111;\n      --foreground: #ededed;\n      --muted: #929299;\n      --muted-strong: #b4b4ba;\n      --line: rgb(255 255 255 / 0.11);\n      --line-soft: rgb(255 255 255 / 0.075);\n      --line-strong: rgb(255 255 255 / 0.16);\n      --accent: #1c1c1e;\n    }\n    html, body { width: 100%; height: 100%; background: #080808; }\n    body { position: relative; min-height: 100dvh; overflow: hidden; font-size: 13px; }\n    .stage {\n      position: fixed;\n      inset: 0;\n      z-index: 2;\n      display: grid;\n      min-height: 0;\n      padding: 20px;\n      place-items: center;\n      pointer-events: none;\n    }\n    .shell {\n      width: min(960px, 92vw);\n      height: min(560px, 80dvh);\n      min-width: 0;\n      min-height: 0;\n      border: 1px solid var(--line-strong);\n      border-radius: 12px;\n      background: var(--background);\n      box-shadow: 0 24px 80px rgb(0 0 0 / 0.72), 0 4px 18px rgb(0 0 0 / 0.45);\n      pointer-events: auto;\n      animation: devtools-window-in 180ms cubic-bezier(0.175, 0.885, 0.32, 1.08);\n    }\n    .topbar {\n      min-height: 40px;\n      height: 40px;\n      align-items: center;\n      justify-content: space-between;\n      flex-wrap: nowrap;\n      border-bottom-color: var(--line);\n      background: var(--background);\n    }\n    .brand { display: none; }\n    .tabbar {\n      height: 100%;\n      flex: 1 1 auto;\n      align-items: stretch;\n      order: initial;\n      width: auto;\n      flex-basis: auto;\n      padding-inline-start: 8px;\n      border-top: 0;\n    }\n    .nav-item {\n      min-height: 39px;\n      height: 39px;\n      gap: 0;\n      padding: 0 12px;\n      border-radius: 0;\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 13px;\n      font-weight: 500;\n      text-transform: none;\n    }\n    .nav-item::after {\n      right: 8px;\n      bottom: -1px;\n      left: 8px;\n      height: 2px;\n      border-radius: 999px;\n    }\n    .nav-item:hover, .nav-item:focus-visible { background: transparent; color: var(--foreground); }\n    .nav-item[aria-selected=\"true\"] { color: var(--foreground); }\n    .topbar-meta {\n      height: 100%;\n      align-items: center;\n      gap: 8px;\n      margin-left: 0;\n      padding: 0 8px 0 4px;\n      border-left: 0;\n    }\n    .project-select {\n      display: inline-flex;\n      height: 28px;\n      min-width: 0;\n      align-items: center;\n      gap: 5px;\n      padding: 0 9px;\n      border: 1px solid var(--line);\n      border-radius: 8px;\n      color: var(--muted-strong);\n      font-size: 12px;\n      white-space: nowrap;\n    }\n    .project-select .icon { width: 12px; height: 12px; transform: rotate(90deg); }\n    .topbar-status {\n      min-width: max-content;\n      gap: 6px;\n      padding: 0;\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 11px;\n      text-transform: none;\n    }\n    .status-dot {\n      width: 6px;\n      height: 6px;\n      border: 0;\n      border-radius: 999px;\n      background: #2dd4bf;\n      box-shadow: none;\n    }\n    .status-dot-attention { background: #f59e0b; animation: none; }\n    .status-dot-error { background: #ef4444; }\n    .close-action {\n      display: inline-flex;\n      width: 28px;\n      height: 28px;\n      flex: 0 0 auto;\n      align-items: center;\n      justify-content: center;\n      padding: 0;\n      border: 0;\n      border-radius: 6px;\n      background: transparent;\n      color: var(--muted);\n      text-decoration: none;\n      transition: background-color 120ms ease-out, color 120ms ease-out;\n    }\n    .close-action:hover, .close-action:focus-visible { background: var(--accent); color: var(--foreground); outline: none; }\n    .close-action .icon { width: 14px; height: 14px; }\n    .workspace, .content, .view { min-height: 0; }\n    .split-view {\n      grid-template-columns: clamp(14rem, 28%, 18rem) minmax(0, 1fr);\n      grid-template-rows: minmax(0, 1fr);\n    }\n    .pane { background: var(--background); }\n    .pane-list { border-right: 1px solid var(--line); border-bottom: 0; }\n    .pane-header {\n      min-height: 32px;\n      height: 32px;\n      max-height: 32px;\n      flex: 0 0 32px;\n      padding: 0 12px;\n      border-bottom-color: var(--line);\n      background: var(--background);\n    }\n    .pane-header strong {\n      color: var(--muted);\n      font-size: 11px;\n      font-weight: 400;\n      line-height: 1;\n    }\n    .pane-header span {\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 10px;\n      line-height: 1;\n    }\n    .pane-tools { border-bottom-color: var(--line); }\n    .pane-tools .filter-control { min-height: 32px; height: 32px; }\n    .filter-control {\n      min-height: 32px;\n      gap: 7px;\n      padding: 0 10px;\n      border-color: var(--line);\n      border-radius: 0;\n      background: var(--background);\n    }\n    .filter-control .icon { width: 13px; height: 13px; }\n    .filter-control input { font-family: var(--font-sans); font-size: 11px; }\n    .filter-control input::placeholder { color: var(--muted); }\n    .filter-control kbd {\n      padding: 1px 5px;\n      border-color: var(--line);\n      border-radius: 4px;\n      color: var(--muted);\n      font-size: 9px;\n    }\n    .inspector-row {\n      min-height: 44px;\n      grid-template-columns: minmax(0, 1fr) auto;\n      gap: 8px;\n      padding: 6px 11px 6px 12px;\n      border: 0;\n      border-left: 2px solid transparent;\n      border-radius: 0;\n      color: var(--muted-strong);\n    }\n    .inspector-row::before { display: none; }\n    .inspector-row:hover, .inspector-row:focus-visible { background: rgb(255 255 255 / 0.035); color: var(--foreground); }\n    .inspector-row[aria-selected=\"true\"] {\n      border-left-color: var(--foreground);\n      background: var(--accent);\n      color: var(--foreground);\n    }\n    .inspector-row-copy strong { font-size: 12px; font-weight: 500; }\n    .inspector-row-copy small {\n      margin-top: 2px;\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 10px;\n    }\n    .inspector-row-value {\n      padding: 2px 6px;\n      border: 1px solid var(--line);\n      border-radius: 999px;\n      background: rgb(255 255 255 / 0.035);\n      color: var(--muted);\n      font-family: var(--font-sans);\n      font-size: 9px;\n      line-height: 1.2;\n      text-transform: none;\n    }\n    .detail-intro {\n      display: block;\n      min-height: 0;\n      padding: 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .detail-icon { display: none; }\n    .detail-intro .mini-label { margin: 0 0 8px; }\n    .detail-intro h2 { font-size: 13px; font-weight: 500; line-height: 1.3; }\n    .detail-intro p { margin-top: 6px; font-size: 11px; line-height: 1.5; }\n    .detail-section, .detail-intro + .detail-section { border-top-color: var(--line); }\n    .property-list > div {\n      min-height: 36px;\n      grid-template-columns: minmax(96px, 0.28fr) minmax(0, 1fr);\n      gap: 14px;\n      padding: 7px 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .property-list dt { font-family: var(--font-sans); font-size: 10px; text-transform: none; }\n    .property-list dd { color: var(--foreground); font-size: 11px; }\n    .property-list dd > code { font-size: 10px; }\n    .json-viewer {\n      padding: 12px;\n      background: var(--background);\n      color: var(--muted-strong);\n      font-size: 10px;\n      line-height: 1.55;\n    }\n    .diagnostic {\n      min-height: 68px;\n      grid-template-columns: 24px minmax(0, 1fr) auto;\n      gap: 10px;\n      padding: 11px 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .diagnostic-mark { width: 22px; height: 22px; border: 0; }\n    .diagnostic-mark .icon { width: 13px; height: 13px; }\n    .diagnostic-code { margin-bottom: 3px; font-size: 9px; }\n    .diagnostic strong { font-size: 11px; font-weight: 500; }\n    .diagnostic p { margin-top: 3px; font-size: 10px; line-height: 1.45; }\n    .diagnostic small { margin-top: 4px; font-size: 9px; }\n    .diagnostic-warning { box-shadow: none; }\n    .system-row {\n      min-height: 48px;\n      grid-template-columns: 24px minmax(0, 1fr) auto;\n      gap: 8px;\n      padding: 8px 12px;\n      border-bottom-color: var(--line-soft);\n    }\n    .system-icon { width: 20px; height: 20px; }\n    .system-icon .icon { width: 13px; height: 13px; }\n    .system-row strong { font-size: 11px; font-weight: 500; }\n    .system-row small { margin-top: 2px; font-size: 10px; }\n    .system-value { color: var(--muted); font-size: 10px; }\n    table { font-size: 11px; }\n    th {\n      height: 32px;\n      padding: 0 12px;\n      background: var(--background);\n      font-family: var(--font-sans);\n      font-size: 10px;\n      font-weight: 400;\n      text-transform: none;\n    }\n    td { min-height: 40px; padding: 9px 12px; font-size: 10px; }\n    td code, .file-cell { font-size: 9px; }\n    .badge {\n      min-height: 18px;\n      padding: 1px 6px;\n      border-radius: 999px;\n      background: rgb(255 255 255 / 0.04);\n      font-family: var(--font-sans);\n      font-size: 9px;\n      text-transform: none;\n    }\n    .badge-error { background: var(--foreground); color: var(--background); }\n    .badge-warning, .badge-attention, .badge-edge { border-style: solid; }\n    .empty-state { min-height: 100%; padding: 24px; gap: 6px; }\n    .empty-state .icon { display: none; }\n    .empty-state strong { font-size: 12px; font-weight: 400; }\n    .empty-state span { font-size: 11px; }\n    .feature-matrix > div { min-height: 36px; padding: 7px 12px; border-bottom-color: var(--line-soft); }\n    .feature-matrix span:first-child { font-size: 11px; }\n    .environment-grid > div { min-height: 104px; padding: 12px; }\n    .mini-label { margin-bottom: 8px; font-family: var(--font-sans); font-size: 10px; text-transform: none; }\n    .key-list code { border-radius: 4px; font-size: 9px; }\n    .layer-list > div { min-height: 44px; padding: 8px 12px; border-bottom-color: var(--line-soft); }\n    .layer-list strong { font-size: 11px; font-weight: 500; }\n    .statusbar { display: none; }\n    html.devtools-frame .stage { position: static; width: 100%; height: 100%; min-height: 100%; padding: 0; }\n    html.devtools-frame .shell { width: 100%; height: 100%; border-radius: 12px; box-shadow: none; animation: none; }\n    @keyframes devtools-window-in {\n      from { opacity: 0; transform: scale(0.985) translateY(4px); }\n      to { opacity: 1; transform: scale(1) translateY(0); }\n    }\n    @media (max-width: 700px) {\n      .stage { display: grid; padding: 0; }\n      .shell {\n        width: 100%;\n        height: 100%;\n        min-height: 0;\n        border: 1px solid var(--line-strong);\n        border-radius: 10px;\n      }\n      .topbar { flex-wrap: nowrap; }\n      .tabbar {\n        order: initial;\n        width: auto;\n        flex-basis: auto;\n        border-top: 0;\n        padding-inline-start: 4px;\n      }\n      .topbar-meta { height: 40px; }\n      .nav-item { min-height: 39px; height: 39px; padding-inline: 9px; }\n      .split-view { grid-template-columns: 1fr; grid-template-rows: minmax(148px, 36%) minmax(0, 1fr); }\n      .pane-list { border-right: 0; border-bottom: 1px solid var(--line); }\n    }\n    @media (max-width: 560px) {\n      .project-select { display: none; }\n      .topbar-status { display: none; }\n      .topbar-meta { gap: 4px; padding-left: 0; }\n      .status-label { display: none; }\n      .detail-intro { min-height: 0; padding: 12px; }\n      .detail-intro h2 { font-size: 13px; }\n      .property-list > div { grid-template-columns: minmax(82px, 0.34fr) minmax(0, 1fr); gap: 10px; padding-inline: 10px; }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      .shell { animation: none; }\n    }\n  </style>\n</head>\n<body>\n  <div class=\"stage\">\n    <div class=\"shell\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Farm.js DevTools\">\n      <header class=\"topbar\">\n        <nav class=\"tabbar\" aria-label=\"Devtools views\">\n          ${renderNavigationItem(\"overview\", \"Overview\")}\n          ${renderNavigationItem(\"routes\", \"Routes\")}\n          ${renderNavigationItem(\"api\", \"API\")}\n          ${renderNavigationItem(\"systems\", \"Systems\")}\n          ${renderNavigationItem(\"runtime\", \"Runtime\")}\n          ${renderNavigationItem(\"raw\", \"Raw\")}\n        </nav>\n        <div class=\"topbar-meta\">\n          <span class=\"deprecation-tag\" title=\"The built-in dashboard is deprecated. Install @farm.js/devtools for the maintained workspace.\">Deprecated &middot; use @farm.js/devtools</span>\n          <span class=\"project-select\">${escapeHtml(snapshot.project.name)} ${icon(\n            \"chevron\",\n          )}</span>\n          <span class=\"topbar-status\"><span class=\"status-dot\"></span><span class=\"status-label\">1 instance</span></span>\n          <button class=\"close-action\" type=\"button\" data-close-devtools aria-label=\"Close DevTools\" title=\"Close DevTools\">${icon(\n            \"close\",\n          )}</button>\n        </div>\n      </header>\n      <div class=\"workspace\">\n        <main class=\"content\">\n          <section class=\"view\" data-view-panel=\"overview\">${renderOverviewInspector(\n            snapshot,\n            healthLabel,\n            generatedTime,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"routes\" hidden>${renderRoutesInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"api\" hidden>${renderApiInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"systems\" hidden>${renderSystemsInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"runtime\" hidden>${renderRuntimeInspector(\n            snapshot,\n          )}</section>\n          <section class=\"view\" data-view-panel=\"raw\" hidden>${renderRawInspector(snapshot)}</section>\n        </main>\n      </div>\n    </div>\n  </div>\n  <script>\n    (() => {\n      const embedded = window.parent !== window;\n      const closeDevtools = () => {\n        if (embedded && window.parent !== window) {\n          window.parent.postMessage({ type: \"farm:devtools:close\" }, location.origin);\n          return;\n        }\n        location.assign(\"/\");\n      };\n      document.querySelector(\"[data-close-devtools]\")?.addEventListener(\"click\", closeDevtools);\n      document.addEventListener(\"keydown\", (event) => {\n        if (event.key === \"Escape\") {\n          event.preventDefault();\n          closeDevtools();\n          return;\n        }\n        if (embedded && window.parent !== window) {\n          window.parent.postMessage(\n            {\n              type: \"farm:devtools:keydown\",\n              event: {\n                key: event.key,\n                code: event.code,\n                altKey: event.altKey,\n                ctrlKey: event.ctrlKey,\n                metaKey: event.metaKey,\n                shiftKey: event.shiftKey,\n                repeat: event.repeat,\n              },\n            },\n            location.origin,\n          );\n        }\n      });\n\n      const validViews = new Set([\"overview\", \"routes\", \"api\", \"systems\", \"runtime\", \"raw\"]);\n      const triggers = Array.from(document.querySelectorAll(\"[data-view-trigger]\"));\n      const panels = Array.from(document.querySelectorAll(\"[data-view-panel]\"));\n      const selectView = (view, updateHash = true) => {\n        const nextView = validViews.has(view) ? view : \"overview\";\n        triggers.forEach((trigger) => {\n          trigger.setAttribute(\"aria-selected\", String(trigger.dataset.viewTrigger === nextView));\n        });\n        panels.forEach((panel) => {\n          panel.hidden = panel.dataset.viewPanel !== nextView;\n        });\n        if (updateHash) {\n          history.replaceState(null, \"\", nextView === \"overview\" ? location.pathname : \"#\" + nextView);\n          const activePanel = panels.find((panel) => panel.dataset.viewPanel === nextView);\n          if (activePanel) activePanel.scrollTop = 0;\n        }\n      };\n      triggers.forEach((trigger) => trigger.addEventListener(\"click\", () => selectView(trigger.dataset.viewTrigger)));\n      window.addEventListener(\"hashchange\", () => selectView(location.hash.slice(1), false));\n      selectView(location.hash.slice(1), false);\n\n      document.querySelectorAll(\"[data-detail-trigger]\").forEach((trigger) => {\n        trigger.addEventListener(\"click\", () => {\n          const scope = trigger.dataset.detailTrigger;\n          const id = trigger.dataset.detailId;\n          document.querySelectorAll('[data-detail-trigger=\"' + scope + '\"]').forEach((row) => {\n            row.setAttribute(\"aria-selected\", String(row.dataset.detailId === id));\n          });\n          document.querySelectorAll('[data-detail-panel=\"' + scope + '\"]').forEach((panel) => {\n            panel.hidden = panel.dataset.detailId !== id;\n          });\n        });\n      });\n\n      document.querySelectorAll(\"[data-filter]\").forEach((input) => {\n        input.addEventListener(\"input\", () => {\n          const id = input.dataset.filter;\n          const query = input.value.trim().toLowerCase();\n          const rows = Array.from(document.querySelectorAll('[data-filter-rows=\"' + id + '\"] [data-search-value]'));\n          let visible = 0;\n          rows.forEach((row) => {\n            const matches = !query || (row.dataset.searchValue || \"\").toLowerCase().includes(query);\n            row.hidden = !matches;\n            if (matches) visible += 1;\n          });\n          const selected = rows.find((row) => row.getAttribute(\"aria-selected\") === \"true\");\n          if (selected?.hidden) rows.find((row) => !row.hidden)?.click();\n          const empty = document.querySelector('[data-filter-empty=\"' + id + '\"]');\n          if (empty) empty.hidden = visible !== 0;\n        });\n      });\n\n      document.addEventListener(\"keydown\", (event) => {\n        if (event.key !== \"/\" || event.metaKey || event.ctrlKey || event.altKey) return;\n        const active = document.activeElement;\n        if (active && (active.tagName === \"INPUT\" || active.tagName === \"TEXTAREA\")) return;\n        const panel = document.querySelector(\"[data-view-panel]:not([hidden])\");\n        const input = panel?.querySelector(\"[data-filter]\");\n        if (input) {\n          event.preventDefault();\n          input.focus();\n        }\n      });\n\n    })();\n  </script>\n</body>\n</html>`;\n}\n","import {\n  FARM_DEVTOOLS_LAUNCH_PARAM,\n  FARM_DEVTOOLS_PATH,\n  type ResolvedFarmDevtoolsConfig,\n} from \"./devtools-config\";\n\ntype ParsedShortcut = {\n  key: string;\n  alt: boolean;\n  ctrl: boolean;\n  meta: boolean;\n  mod: boolean;\n  shift: boolean;\n};\n\nfunction parseShortcut(shortcut: string): ParsedShortcut | null {\n  const tokens = shortcut\n    .toLowerCase()\n    .split(\"+\")\n    .map((token) => token.trim())\n    .filter(Boolean);\n  const key = tokens.find(\n    (token) =>\n      ![\"alt\", \"ctrl\", \"control\", \"meta\", \"cmd\", \"command\", \"mod\", \"shift\"].includes(token),\n  );\n\n  if (!key) {\n    return null;\n  }\n\n  return {\n    key,\n    alt: tokens.includes(\"alt\"),\n    ctrl: tokens.includes(\"ctrl\") || tokens.includes(\"control\"),\n    meta: tokens.includes(\"meta\") || tokens.includes(\"cmd\") || tokens.includes(\"command\"),\n    mod: tokens.includes(\"mod\"),\n    shift: tokens.includes(\"shift\"),\n  };\n}\n\nexport function generateFarmDevtoolsClientRuntime(config: ResolvedFarmDevtoolsConfig): string {\n  if (!config.enabled) {\n    return \"\";\n  }\n\n  const shortcut = config.shortcut ? parseShortcut(config.shortcut) : null;\n  const overlayStyles = `\n    #__farm_devtools_overlay__ {\n      position: fixed;\n      inset: 0;\n      z-index: 2147483646;\n      display: grid;\n      place-items: center;\n      box-sizing: border-box;\n      padding: 20px;\n      background: rgb(0 0 0 / 0);\n      backdrop-filter: blur(6px);\n      -webkit-backdrop-filter: blur(6px);\n      overscroll-behavior: none;\n      isolation: isolate;\n      opacity: 0;\n      pointer-events: none;\n      transition: opacity 150ms ease-out;\n    }\n    #__farm_devtools_overlay__[data-open=\"true\"] {\n      background: rgb(0 0 0 / 0.32);\n      opacity: 1;\n      pointer-events: auto;\n    }\n    #__farm_devtools_overlay__ > iframe {\n      display: block;\n      width: min(1100px, calc(100vw - 48px));\n      height: min(720px, calc(100dvh - 48px));\n      border: 0;\n      border-radius: 12px;\n      background: transparent;\n      box-shadow: 0 24px 80px rgb(0 0 0 / 0.48), 0 4px 18px rgb(0 0 0 / 0.24);\n      transform: scale(0.985) translateY(4px);\n      transition: transform 150ms ease-out;\n    }\n    #__farm_devtools_overlay__[data-open=\"true\"] > iframe {\n      transform: scale(1) translateY(0);\n    }\n    @media (max-width: 700px) {\n      #__farm_devtools_overlay__ { padding: 8px; }\n      #__farm_devtools_overlay__ > iframe {\n        width: calc(100vw - 16px);\n        height: calc(100dvh - 16px);\n        border-radius: 12px;\n      }\n    }\n    @media (prefers-reduced-motion: reduce) {\n      #__farm_devtools_overlay__, #__farm_devtools_overlay__ > iframe { transition: none; }\n    }\n  `;\n\n  return `\n(() => {\n  const overlayId = \"__farm_devtools_overlay__\";\n  const styleId = \"__farm_devtools_overlay_styles__\";\n  const runtimeKey = \"__FARM_DEVTOOLS_RUNTIME__\";\n  const launchParam = ${JSON.stringify(FARM_DEVTOOLS_LAUNCH_PARAM)};\n  const devtoolsPath = ${JSON.stringify(FARM_DEVTOOLS_PATH)};\n  const validViews = new Set([\"overview\", \"routes\", \"api\", \"systems\", \"runtime\", \"raw\", \"inspect\", \"diagnostics\"]);\n  const shortcut = ${JSON.stringify(shortcut)};\n  const isMac = /Mac|iPhone|iPad|iPod/.test(navigator.platform);\n  let returnFocus = null;\n  let restorePage = null;\n  let closeTimer = null;\n\n  const lockPage = () => {\n    const styles = [];\n    for (const element of [document.documentElement, document.body]) {\n      for (const [property, value] of [[\"overflow-x\", \"hidden\"], [\"overflow-y\", \"hidden\"], [\"overscroll-behavior\", \"none\"]]) {\n        const previous = element.style.getPropertyValue(property);\n        const priority = element.style.getPropertyPriority(property);\n        element.style.setProperty(property, value, \"important\");\n        styles.push({ element, property, value, previous, priority });\n      }\n    }\n    return () => {\n      for (const { element, property, value, previous, priority } of styles) {\n        // Do not overwrite a newer style set by the application while the panel was open.\n        if (element.style.getPropertyValue(property) !== value || element.style.getPropertyPriority(property) !== \"important\") continue;\n        if (previous) element.style.setProperty(property, previous, priority);\n        else element.style.removeProperty(property);\n      }\n    };\n  };\n\n  const matchesShortcut = (event) => {\n    if (!shortcut || event.repeat) return false;\n    const expectedCtrl = shortcut.ctrl || (shortcut.mod && !isMac);\n    const expectedMeta = shortcut.meta || (shortcut.mod && isMac);\n    if (\n      Boolean(event.altKey) !== shortcut.alt ||\n      Boolean(event.ctrlKey) !== expectedCtrl ||\n      Boolean(event.metaKey) !== expectedMeta ||\n      Boolean(event.shiftKey) !== shortcut.shift\n    ) return false;\n\n    if (shortcut.key === \".\" || shortcut.key === \"period\") return event.code === \"Period\";\n    if (shortcut.key === \",\" || shortcut.key === \"comma\") return event.code === \"Comma\";\n    if (shortcut.key === \"/\" || shortcut.key === \"slash\") return event.code === \"Slash\";\n    return String(event.key || \"\").toLowerCase() === shortcut.key;\n  };\n\n  const ensureStyles = () => {\n    if (document.getElementById(styleId)) return;\n    const style = document.createElement(\"style\");\n    style.id = styleId;\n    style.textContent = ${JSON.stringify(overlayStyles)};\n    document.head.appendChild(style);\n  };\n\n  const finishClose = () => {\n    if (closeTimer !== null) window.clearTimeout(closeTimer);\n    closeTimer = null;\n    const overlay = document.getElementById(overlayId);\n    overlay?.remove();\n    restorePage?.();\n    restorePage = null;\n    const focusTarget = returnFocus;\n    returnFocus = null;\n    focusTarget?.focus?.({ preventScroll: true });\n  };\n\n  const close = () => {\n    const overlay = document.getElementById(overlayId);\n    if (!overlay || closeTimer !== null) return;\n    overlay.dataset.open = \"false\";\n    closeTimer = window.setTimeout(finishClose, 160);\n  };\n\n  const open = (view = \"overview\") => {\n    if (closeTimer !== null) finishClose();\n    if (document.getElementById(overlayId)) return;\n    ensureStyles();\n    returnFocus = document.activeElement;\n    restorePage = lockPage();\n    const overlay = document.createElement(\"div\");\n    overlay.id = overlayId;\n    overlay.setAttribute(\"role\", \"dialog\");\n    overlay.setAttribute(\"aria-modal\", \"true\");\n    overlay.setAttribute(\"aria-label\", \"Farm.js DevTools overlay\");\n    const frame = document.createElement(\"iframe\");\n    const resolvedView = validViews.has(view) ? view : \"overview\";\n    frame.src = devtoolsPath + \"?embedded=1\" + (resolvedView === \"overview\" ? \"\" : \"#\" + resolvedView);\n    frame.title = \"Farm.js DevTools\";\n    frame.addEventListener(\"load\", () => frame.contentWindow?.focus(), { once: true });\n    overlay.appendChild(frame);\n    overlay.addEventListener(\"pointerdown\", (event) => {\n      if (event.target === overlay) close();\n    });\n    overlay.addEventListener(\"wheel\", (event) => event.preventDefault(), { passive: false });\n    overlay.addEventListener(\"touchmove\", (event) => event.preventDefault(), { passive: false });\n    document.body.appendChild(overlay);\n    requestAnimationFrame(() => {\n      if (overlay.isConnected && closeTimer === null) overlay.dataset.open = \"true\";\n    });\n  };\n\n  const toggle = () => {\n    if (document.getElementById(overlayId)) close();\n    else open();\n  };\n\n  const onKeydown = (event) => {\n    if (event.key === \"Escape\" && document.getElementById(overlayId)) {\n      event.preventDefault();\n      close();\n      return;\n    }\n    if (!matchesShortcut(event)) return;\n    event.preventDefault();\n    event.stopPropagation();\n    toggle();\n  };\n\n  const onMessage = (event) => {\n    if (event.origin !== location.origin) return;\n    const frame = document.querySelector(\"#\" + overlayId + \" > iframe\");\n    if (!frame || event.source !== frame.contentWindow) return;\n    if (event.data?.type === \"farm:devtools:close\") close();\n    if (event.data?.type === \"farm:devtools:keydown\" && matchesShortcut(event.data.event || {})) close();\n  };\n\n  window[runtimeKey]?.dispose?.();\n  window.addEventListener(\"keydown\", onKeydown, true);\n  window.addEventListener(\"message\", onMessage);\n  window[runtimeKey] = {\n    dispose() {\n      finishClose();\n      window.removeEventListener(\"keydown\", onKeydown, true);\n      window.removeEventListener(\"message\", onMessage);\n    },\n  };\n  window.__FARM_DEVTOOLS__ = { open, close, toggle };\n\n  const launchUrl = new URL(location.href);\n  const launchRequest = launchUrl.searchParams.get(launchParam);\n  if (launchRequest !== null) {\n    const hashView = launchUrl.hash.slice(1);\n    const launchView = validViews.has(launchRequest)\n      ? launchRequest\n      : validViews.has(hashView)\n        ? hashView\n        : \"overview\";\n    launchUrl.searchParams.delete(launchParam);\n    if (validViews.has(hashView)) launchUrl.hash = \"\";\n    history.replaceState(\n      history.state,\n      \"\",\n      launchUrl.pathname + launchUrl.search + launchUrl.hash,\n    );\n    const launch = () => requestAnimationFrame(() => open(launchView));\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", launch, { once: true });\n    } else {\n      launch();\n    }\n  }\n})();\n`;\n}\n","import type { ResolvedFarmImageConfig } from \"./image-config\";\nimport {\n  FarmImageRequestError,\n  isPrivateImageAddress,\n  selectOutputFormat,\n  type FarmImageTransformer,\n} from \"./image-server\";\n\ntype NodeImageDnsLookup = (\n  hostname: string,\n  options: { all: true; verbatim: true },\n  callback: (\n    error: NodeJS.ErrnoException | null,\n    addresses: Array<{ address: string; family: number }>,\n  ) => void,\n) => void;\n\nexport function createSharpImageTransformer(): FarmImageTransformer {\n  return async ({ source, sourceType, width, quality, accept, formats, signal }) => {\n    // Sharp is an optional native runtime. Load it only when an image request\n    // actually needs a transform so disabled/unused image pipelines do not add\n    // a startup dependency or native-module initialization cost.\n    const { default: sharp } = await import(\"sharp\");\n    throwIfAborted(signal);\n    const outputFormat = selectOutputFormat(accept, formats);\n    let pipeline = sharp(source, {\n      animated: sourceType === \"image/gif\" || sourceType === \"image/webp\",\n      failOn: \"warning\",\n      limitInputPixels: 268_402_689,\n    })\n      .rotate()\n      .resize({ width, fit: \"inside\", withoutEnlargement: true });\n\n    // When the Accept header matches none of the configured formats, keep the\n    // source's own format (svg rasterizes to png) instead of forcing JPEG —\n    // that preserved neither transparency nor the truth of the content type.\n    let encodedType: string;\n    if (outputFormat === \"image/avif\") {\n      pipeline = pipeline.avif({ quality });\n      encodedType = \"image/avif\";\n    } else if (outputFormat === \"image/webp\") {\n      pipeline = pipeline.webp({ quality });\n      encodedType = \"image/webp\";\n    } else if (sourceType === \"image/png\" || sourceType === \"image/svg+xml\") {\n      pipeline = pipeline.png();\n      encodedType = \"image/png\";\n    } else if (sourceType === \"image/gif\") {\n      pipeline = pipeline.gif();\n      encodedType = \"image/gif\";\n    } else if (sourceType === \"image/webp\") {\n      pipeline = pipeline.webp({ quality });\n      encodedType = \"image/webp\";\n    } else if (sourceType === \"image/avif\") {\n      pipeline = pipeline.avif({ quality });\n      encodedType = \"image/avif\";\n    } else {\n      pipeline = pipeline.jpeg({ quality });\n      encodedType = \"image/jpeg\";\n    }\n\n    const body = await pipeline.toBuffer();\n    throwIfAborted(signal);\n    return {\n      body,\n      contentType: encodedType,\n    };\n  };\n}\n\nexport function createNodeImageUrlValidator(config: ResolvedFarmImageConfig) {\n  return async function validateNodeImageUrl(url: URL): Promise<void> {\n    if (config.dangerouslyAllowLocalIP) return;\n\n    let addresses: Array<{ address: string; family: number }>;\n    try {\n      // DNS is only needed by remote image requests. Keeping it out of the\n      // initial server module graph reduces normal page/API startup work.\n      const { lookup } = await import(\"node:dns/promises\");\n      addresses = await lookup(url.hostname, { all: true, verbatim: true });\n    } catch {\n      throw new FarmImageRequestError(\n        \"PRIVATE_SOURCE\",\n        400,\n        \"Could not safely resolve the image source\",\n      );\n    }\n    if (addresses.length === 0 || addresses.some(({ address }) => isPrivateImageAddress(address))) {\n      throw new FarmImageRequestError(\"PRIVATE_SOURCE\", 400, \"Private image source is not allowed\");\n    }\n  };\n}\n\n/**\n * Create a remote image fetcher whose socket lookup rejects private addresses.\n * Validation and connection share this lookup, closing the DNS-rebinding gap\n * left by resolving a hostname before a separate global fetch.\n */\nexport function createNodeImageFetcher(\n  config: Pick<ResolvedFarmImageConfig, \"dangerouslyAllowLocalIP\">,\n  lookup?: NodeImageDnsLookup,\n): typeof globalThis.fetch {\n  if (config.dangerouslyAllowLocalIP) return globalThis.fetch.bind(globalThis);\n\n  return (async (input: RequestInfo | URL, init: RequestInit = {}) => {\n    const inputRequest = input instanceof Request ? input : undefined;\n    const url = input instanceof URL ? input : new URL(inputRequest?.url ?? String(input));\n    if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n      throw new FarmImageRequestError(\"DISALLOWED_SOURCE\", 400, \"Unsupported image protocol\");\n    }\n\n    const [{ request }, { Readable }, dns] = await Promise.all([\n      url.protocol === \"https:\" ? import(\"node:https\") : import(\"node:http\"),\n      import(\"node:stream\"),\n      lookup ? Promise.resolve(null) : import(\"node:dns\"),\n    ]);\n    const resolveHostname = lookup ?? (dns!.lookup as unknown as NodeImageDnsLookup);\n    const headers = new Headers(inputRequest?.headers);\n    new Headers(init.headers).forEach((value, name) => headers.set(name, value));\n    if (!headers.has(\"accept-encoding\")) headers.set(\"accept-encoding\", \"identity\");\n\n    return new Promise<Response>((resolve, reject) => {\n      const nodeRequest = request(\n        url,\n        {\n          method: init.method ?? inputRequest?.method ?? \"GET\",\n          headers: Object.fromEntries(headers.entries()),\n          signal: init.signal ?? inputRequest?.signal,\n          lookup(hostname, options, callback) {\n            resolveHostname(hostname, { all: true, verbatim: true }, (error, addresses) => {\n              if (error) {\n                callback(error, \"\", 4);\n                return;\n              }\n              if (\n                addresses.length === 0 ||\n                addresses.some(({ address }) => isPrivateImageAddress(address))\n              ) {\n                callback(\n                  new FarmImageRequestError(\n                    \"PRIVATE_SOURCE\",\n                    400,\n                    \"Private image source is not allowed\",\n                  ),\n                  \"\",\n                  4,\n                );\n                return;\n              }\n\n              if (options.all) {\n                (\n                  callback as unknown as (\n                    error: null,\n                    addresses: Array<{ address: string; family: number }>,\n                  ) => void\n                )(null, addresses);\n                return;\n              }\n              const address = addresses[0]!;\n              callback(null, address.address, address.family);\n            });\n          },\n        },\n        (nodeResponse) => {\n          const status = nodeResponse.statusCode ?? 500;\n          if (status < 200 || status > 599) {\n            nodeResponse.resume();\n            reject(\n              new FarmImageRequestError(\n                \"UNSUPPORTED_IMAGE\",\n                502,\n                \"Image source returned an invalid HTTP status\",\n              ),\n            );\n            return;\n          }\n          const responseHeaders = new Headers();\n          for (let index = 0; index < nodeResponse.rawHeaders.length; index += 2) {\n            responseHeaders.append(\n              nodeResponse.rawHeaders[index]!,\n              nodeResponse.rawHeaders[index + 1]!,\n            );\n          }\n          const body =\n            status === 204 || status === 205 || status === 304\n              ? null\n              : (Readable.toWeb(nodeResponse) as ReadableStream);\n          resolve(\n            new Response(body, {\n              status,\n              statusText: nodeResponse.statusMessage,\n              headers: responseHeaders,\n            }),\n          );\n        },\n      );\n      nodeRequest.once(\"error\", reject);\n      nodeRequest.end();\n    });\n  }) as typeof globalThis.fetch;\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n  if (signal.aborted) {\n    throw signal.reason instanceof Error\n      ? signal.reason\n      : new DOMException(\"The image request was aborted\", \"AbortError\");\n  }\n}\n","import type { ConfigEnv, Plugin, UserConfig, ViteDevServer, HmrContext, Connect } from \"vite\";\nimport type { FarmConfig, FarmRequest } from \"./types\";\nimport { FarmApp } from \"./app\";\nimport { logger, toPosixPath, toViteModuleId } from \"./utils\";\nimport { defaultGlobalCSS } from \"./default-styles\";\nimport {\n  FARM_NODE_RESPONSE_END_PENDING,\n  type FarmPlugin,\n  type FarmPluginRuntimeSession,\n  type PluginManager,\n} from \"./plugin\";\nimport { generateFarmClientPluginEntryCode } from \"./client-plugin-build\";\nimport {\n  generateClientCachePersistenceCode,\n  resolveFarmClientCacheAdapterEntry,\n  type ClientCachePersistenceEntryCode,\n} from \"./client-cache-persistence-build\";\n\nexport {\n  generateClientCachePersistenceCode,\n  resolveFarmClientCacheAdapterEntry,\n} from \"./client-cache-persistence-build\";\nexport type { ClientCachePersistenceEntryCode } from \"./client-cache-persistence-build\";\nimport { APIRouteManager } from \"./api/route-manager\";\nimport { DEFAULT_FARM_API_BASE_PATH } from \"./api/config\";\nimport { resolveFarmAPIServerBasePath } from \"./api/server-path\";\nimport { isFarmAPIPathname } from \"./api/runtime\";\nimport type { OpenAPIManager } from \"./openapi/manager\";\nimport { MiddlewareManager } from \"./middleware/manager\";\nimport { generateFarmTypeArtifacts, type GenerateFarmTypeArtifactsOptions } from \"./type-artifacts\";\nimport {\n  isProgrammaticRoutesFileName,\n  parseProgrammaticRouteModuleId,\n  scanProgrammaticPagePaths,\n} from \"./routes-shared\";\nimport type { FarmDocsAPIHandler } from \"./docs\";\nimport { createMarkdownMirrorResponse, resolveMarkdownMirrorTarget } from \"./markdown\";\nimport {\n  FARM_MARKDOWN_CONTENT_TYPE,\n  createFarmMarkdownErrorBody,\n  createFarmMarkdownSourceResponse,\n  farmRequestWantsMarkdown,\n  isFarmMarkdownPageFile,\n  normalizeFarmMarkdownRoutePath,\n} from \"./app-markdown\";\nimport { applyWebResponseHeaders, sendWebResponse } from \"./server/response\";\nimport {\n  getClientModuleMetadata,\n  getIslandStrategyExport,\n  hasUseClientDirective,\n  isIsolatableClientBoundarySource,\n  resolveFarmIsolatedClientHydrationMode,\n  stripUseClientDirective,\n} from \"./utils/client-component\";\nimport {\n  dispatchIntegrationRequest,\n  getFarmIntegrationPluginOwner,\n  getIntegrationDocumentNavigationMatchers,\n  getIntegrationProviders,\n  matchIntegrationRoute,\n} from \"./integrations\";\nimport type { FarmDiscoveredWorkflow } from \"./workflows\";\nimport { resolveFarmRouteContext, withFarmRouteContext } from \"./route-context\";\nimport {\n  FARM_DEVTOOLS_LAUNCH_PARAM,\n  FARM_DEVTOOLS_PATH,\n  resolveFarmDevtoolsConfig,\n} from \"./devtools-config\";\nimport { generateFarmDevIndicatorsClientRuntime } from \"./dev-indicators\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmUserConfig } from \"./config\";\nimport { getFarmAppDirectories, getFarmLayerAliases, getFarmSourceRoots } from \"./layers\";\nimport { farmEnvironmentFunctionsPlugin } from \"./environment-vite\";\nimport { FARM_VERSION } from \"./version\";\nimport { createDeferredDataResponse } from \"./deferred\";\nimport { _withAfterNodeMiddleware } from \"./after\";\nimport { _runWithAPIRequestRuntime } from \"./api/server-context\";\nimport type { APIRequestRuntime } from \"./api/server-client-bridge\";\nimport { shouldBypassFarmRouterForDottedPath } from \"./dev-static\";\nimport { findClientServerFnViolation, formatServerFnBoundaryError } from \"./server-query-boundary\";\nimport {\n  analyzeClientBoundary,\n  formatClientBoundaryWarning,\n  shouldInspectClientBoundary,\n} from \"./client-boundary-env\";\nimport {\n  createFarmDeploymentMismatchResponse,\n  FARM_DEPLOYMENT_ID_HEADER,\n  getFarmDeploymentMismatch,\n} from \"./deployment\";\nimport { getPublicFarmImageConfig, resolveFarmImageConfig } from \"./image-config\";\nimport { farmImageImportsPlugin } from \"./image-vite\";\nimport { farmFontImportsPlugin } from \"./font-vite\";\nimport { resolveFarmLayoutFonts } from \"./font\";\nimport { createFarmImageHandler, type FarmImageHandler } from \"./image-server\";\nimport { isFarmI18nCatalogFile, resolveFarmI18nMessagePath } from \"./i18n/config\";\nimport { getFarmI18nClientSnapshot } from \"./i18n/server\";\nimport { localizeFarmPathname } from \"./i18n/routing\";\nimport type { FarmI18nClientSnapshot } from \"./i18n/types\";\nimport {\n  createFarmClientOptimizeDepsConfig,\n  createFarmClientOptimizeDepsEntries,\n  createFarmSourceAlias,\n} from \"./server/vite-config\";\nimport { resolveFarmDocsFontAssets, toFarmDocsPublicFontAssets } from \"./docs/fonts\";\nimport {\n  createFarmNodeRequestAbortSignal,\n  createFarmRequestBodyErrorResponse,\n  readNodeRequestBody,\n  resolveFarmServerConfig,\n} from \"./server-http\";\nimport { createCliColors } from \"./cli-colors\";\nimport { createFarmThemeCssPlugin } from \"./theme/vite\";\nimport { searchParamsToObject } from \"./search-params\";\nimport { emitFarmEvent, runWithFarmRequestSpan } from \"./observability\";\nimport {\n  getFarmRendererCapabilities,\n  isReactRenderer,\n  loadFarmRendererVitePlugins,\n  REACT_RENDERER,\n  resolveFarmRenderer,\n} from \"./renderer\";\nimport type { FarmRenderer } from \"./renderer\";\nimport { generateFarmIntegrationProviderClientCode } from \"./integration-provider-build\";\nimport type { FarmIslandStrategy } from \"./island\";\nimport { resolveRouteRenderingConfig } from \"./ssg\";\nimport {\n  createFarmRouteRenderPlan,\n  getSharedLayoutPrefixLength,\n  getFarmFragmentCacheControl,\n  parseFarmLayoutChainHeader,\n} from \"./navigation/render-plan\";\nimport { resolveFarmPageDataFailure } from \"./navigation/page-data-error\";\nimport { mergeMetadata } from \"./metadata\";\nimport { FARM_CONFIG_REWRITES_PLUGIN_NAME } from \"./plugins/rewrites\";\nimport { resolveFarmRequestURL } from \"./server/request\";\nimport { reportOpenAPIDevGenerationResult } from \"./openapi/dev-status\";\n\ninterface FarmVitePluginOptions extends FarmConfig {\n  openapi?: FarmUserConfig[\"openapi\"];\n  images?: FarmUserConfig[\"images\"];\n  publicDir?: FarmUserConfig[\"publicDir\"];\n  /** @internal Modules selected by the compiled isolated-hydration ownership plan. */\n  isolatedClientBoundaryModules?: ReadonlySet<string>;\n}\n\ntype TypeArtifactSelection = Pick<\n  GenerateFarmTypeArtifactsOptions,\n  \"routes\" | \"api\" | \"env\" | \"images\" | \"i18n\"\n>;\n\nconst ALL_TYPE_ARTIFACTS: TypeArtifactSelection = {\n  routes: true,\n  api: true,\n  env: true,\n  images: false,\n  i18n: true,\n};\n\nconst createEmptyTypeArtifactSelection = (): TypeArtifactSelection => ({\n  routes: false,\n  api: false,\n  env: false,\n  images: false,\n  i18n: false,\n});\n\nconst FARM_I18N_CLIENT_BRIDGE_ID = \"\\0farm-i18n-client-bridge\";\n\n// The @farm.js/devtools plugin serves this path itself; reaching the built-in\n// dashboard render means the app is still on the deprecated core UI.\nlet warnedDeprecatedDevtoolsDashboard = false;\nconst EMPTY_FARM_DOCS_SEARCH_CLIENT_RUNTIME = `\nfunction isFarmDocsSearchPage() {\n  return false;\n}\n\nasync function mountFarmDocsSearch() {\n  return false;\n}\n`;\n\nfunction loadFarmDocsDevRuntime() {\n  return import(\"./docs\");\n}\n\nfunction loadFarmDocsSearchDevRuntime() {\n  return import(\"./docs/search-client\");\n}\n\nfunction loadFarmOpenAPIDevRuntime() {\n  return import(\"./openapi/manager\");\n}\n\nfunction loadFarmWorkflowsDevRuntime() {\n  return import(\"./workflows\");\n}\n\nfunction loadFarmDevtoolsSnapshotRuntime() {\n  return import(\"./devtools\");\n}\n\nfunction loadFarmDevtoolsUIRuntime() {\n  return import(\"./devtools-ui\");\n}\n\nfunction loadFarmDevtoolsClientRuntime() {\n  return import(\"./devtools-client\");\n}\n\nexport function farmI18nClientBridgePlugin(): Plugin {\n  return {\n    name: \"farm:i18n-client-bridge\",\n    enforce: \"pre\",\n    resolveId(id, _importer, options) {\n      if (id === \"@farm.js/core/i18n/server\" && !options?.ssr) {\n        return FARM_I18N_CLIENT_BRIDGE_ID;\n      }\n      return null;\n    },\n    load(id) {\n      if (id !== FARM_I18N_CLIENT_BRIDGE_ID) return null;\n      return 'export { createTranslator, format, getLocale, getLocaleSource, t } from \"@farm.js/core/i18n/client\";';\n    },\n  };\n}\n\nconst FARM_CONFIG_FILENAMES = new Set([\n  \"farm.config.ts\",\n  \"farm.config.tsx\",\n  \"farm.config.mts\",\n  \"farm.config.cts\",\n  \"farm.config.js\",\n  \"farm.config.jsx\",\n  \"farm.config.mjs\",\n  \"farm.config.cjs\",\n  \"config.ts\",\n  \"config.tsx\",\n  \"config.mts\",\n  \"config.cts\",\n  \"config.js\",\n  \"config.jsx\",\n  \"config.mjs\",\n  \"config.cjs\",\n]);\n\nfunction serializeFarmInlineValue(value: unknown): string {\n  return JSON.stringify(value)\n    .replace(/</g, \"\\\\u003c\")\n    .replace(/\\u2028/g, \"\\\\u2028\")\n    .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nfunction escapeFarmHtmlAttribute(value: string): string {\n  return value\n    .replace(/&/g, \"&amp;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\");\n}\n\nfunction renderFarmI18nStaticHead(\n  requestPath: string,\n  snapshot: FarmI18nClientSnapshot | undefined,\n): string {\n  if (!snapshot) return \"\";\n  const runtime = `<script>window.__FARM_I18N__ = ${serializeFarmInlineValue(snapshot)};</script>`;\n  if (snapshot.routing === \"none\") return runtime;\n\n  const links = snapshot.locales.map(\n    (locale) =>\n      `<link rel=\"alternate\" hreflang=\"${escapeFarmHtmlAttribute(locale)}\" href=\"${escapeFarmHtmlAttribute(\n        localizeFarmPathname(requestPath, locale, snapshot),\n      )}\">`,\n  );\n  links.push(\n    `<link rel=\"alternate\" hreflang=\"x-default\" href=\"${escapeFarmHtmlAttribute(\n      localizeFarmPathname(requestPath, snapshot.defaultLocale, snapshot),\n    )}\">`,\n  );\n  return `${links.join(\"\")}${runtime}`;\n}\n\nfunction getPublicEnvDefine(config: FarmVitePluginOptions): Record<string, unknown> {\n  const publicEnv = (config as any).env?.public;\n  if (!isResolvedEnvScope(publicEnv)) {\n    return {};\n  }\n\n  return publicEnv;\n}\n\nfunction createRequestFromNodeRequest(\n  req: {\n    method?: string;\n    headers: Record<string, string | string[] | undefined>;\n  },\n  url: URL,\n  signal?: AbortSignal,\n): Request {\n  const headers = new Headers();\n  for (const [key, value] of Object.entries(req.headers)) {\n    if (Array.isArray(value)) {\n      for (const item of value) headers.append(key, item);\n    } else if (value !== undefined) {\n      headers.set(key, value);\n    }\n  }\n\n  return new Request(url.toString(), {\n    method: req.method || \"GET\",\n    headers,\n    signal,\n  });\n}\n\nexport { createFarmNodeRequestAbortSignal } from \"./server-http\";\n\n/** Exported for tests: the request boundary all Farm dev middlewares share. */\nexport function withFarmRequestTracing(\n  handler: Parameters<typeof _withAfterNodeMiddleware>[0],\n  apiRuntime?: APIRequestRuntime,\n  resolveTraceUrl: (request: Connect.IncomingMessage) => URL = (request) =>\n    resolveFarmRequestURL(request as FarmRequest),\n): Connect.NextHandleFunction {\n  const middleware = _withAfterNodeMiddleware(handler);\n  return (req, res, next) => {\n    const traceUrl = resolveTraceUrl(req);\n    const traceRequest = createRequestFromNodeRequest(req, traceUrl);\n    const run = () =>\n      runWithFarmRequestSpan(traceRequest, () => middleware(req, res, next), {\n        getStatusCode: () => res.statusCode || 200,\n      });\n    const result = apiRuntime ? _runWithAPIRequestRuntime(apiRuntime, run) : run();\n    // connect ignores returned promises, so a rejection from the handler\n    // becomes an unhandled rejection and kills the dev server process. A\n    // throw from one request must cost that request a 500, not an outage.\n    return Promise.resolve(result).catch((error) => {\n      console.error(\n        `[FARM] Unhandled error while handling ${req.method || \"GET\"} ${req.url || \"/\"}:`,\n        error,\n      );\n      if (res.writableEnded) {\n        return;\n      }\n      if (res.headersSent) {\n        res.destroy?.(error instanceof Error ? error : new Error(String(error)));\n        return;\n      }\n      res.statusCode = 500;\n      res.setHeader(\"Content-Type\", \"application/json\");\n      res.end(JSON.stringify({ error: \"Internal server error\" }));\n    });\n  };\n}\n\nfunction toRequestBody(body: Buffer | undefined): ArrayBuffer | undefined {\n  if (!body) return undefined;\n  const copy = new Uint8Array(body.byteLength);\n  copy.set(body);\n  return copy.buffer;\n}\n\nfunction applyWebRequestToNodeRequest(\n  request: Request,\n  req: {\n    method?: string;\n    url?: string;\n    headers: Record<string, string | string[] | undefined>;\n  },\n): void {\n  const url = new URL(request.url);\n  req.method = request.method;\n  req.url = `${url.pathname}${url.search}`;\n\n  for (const key of Object.keys(req.headers)) {\n    delete req.headers[key];\n  }\n  request.headers.forEach((value, key) => {\n    req.headers[key] = value;\n  });\n}\n\nfunction createHeadersFromNodeResponse(res: {\n  getHeaders(): Record<string, string | number | string[] | undefined>;\n}): Headers {\n  const headers = new Headers();\n  for (const [key, value] of Object.entries(res.getHeaders())) {\n    if (Array.isArray(value)) {\n      for (const item of value) headers.append(key, item);\n    } else if (value !== undefined) {\n      headers.set(key, String(value));\n    }\n  }\n  return headers;\n}\n\nfunction applyWebResponseToNodeResponse(\n  response: Response,\n  res: {\n    statusCode: number;\n    headersSent: boolean;\n    getHeaderNames(): string[];\n    removeHeader(name: string): void;\n    setHeader(name: string, value: string): void;\n  },\n): void {\n  if (res.headersSent) return;\n\n  res.statusCode = response.status;\n  for (const name of res.getHeaderNames()) {\n    res.removeHeader(name);\n  }\n  applyWebResponseHeaders(res as any, response.headers);\n}\n\nfunction toNodeResponseBuffer(chunk: unknown, encoding?: unknown): Buffer | undefined {\n  if (chunk === undefined || chunk === null || typeof chunk === \"function\") return undefined;\n  if (Buffer.isBuffer(chunk)) return chunk;\n  if (chunk instanceof Uint8Array) return Buffer.from(chunk);\n  return Buffer.from(\n    String(chunk),\n    typeof encoding === \"string\" ? (encoding as BufferEncoding) : \"utf8\",\n  );\n}\n\nfunction applyNodeWriteHeadHeaders(res: any, headers: unknown): void {\n  if (Array.isArray(headers)) {\n    const grouped = new Map<string, { name: string; values: Array<string | number> }>();\n    for (let index = 0; index + 1 < headers.length; index += 2) {\n      const name = String(headers[index]);\n      const key = name.toLowerCase();\n      const entry = grouped.get(key) ?? { name, values: [] };\n      const value = headers[index + 1];\n      entry.values.push(...(Array.isArray(value) ? value : [value]).map(String));\n      grouped.set(key, entry);\n    }\n    for (const { name, values } of grouped.values()) {\n      res.setHeader(name, values.length === 1 ? values[0] : values);\n    }\n    return;\n  }\n\n  if (!headers || typeof headers !== \"object\") return;\n  for (const [name, value] of Object.entries(headers)) {\n    if (value !== undefined) res.setHeader(name, value);\n  }\n}\n\nfunction interceptFarmDevPageResponse(options: {\n  req: any;\n  res: any;\n  pm: PluginManager;\n  runtimeSession?: FarmPluginRuntimeSession;\n  hasRuntimeAfterHook: boolean;\n  hasAfterResponseHook: boolean;\n  hasHTMLTransformHook: boolean;\n  renderPayload: Record<string, unknown>;\n  method: string;\n  urlPath: string;\n  pathname: string;\n  startTime: number;\n  logResponse(method: string, path: string, status: number, durationMs: number, type: \"PAGE\"): void;\n  emitError(error: unknown): Promise<void>;\n}): { isEnded(): boolean } {\n  const {\n    req,\n    res,\n    pm,\n    runtimeSession,\n    hasRuntimeAfterHook,\n    hasAfterResponseHook,\n    hasHTMLTransformHook,\n    renderPayload,\n    method,\n    urlPath,\n    startTime,\n  } = options;\n  const originalWrite = res.write.bind(res);\n  const originalEnd = res.end.bind(res);\n  const originalWriteHead = res.writeHead.bind(res);\n  const originalFlushHeaders = res.flushHeaders?.bind(res);\n  let afterResponseCalled = false;\n  let interceptedEnd = false;\n  const htmlChunks: Buffer[] = [];\n  const responseChunks: Buffer[] = [];\n  let didStreamHtml = false;\n  const bufferPluginResponse = Boolean(\n    hasHTMLTransformHook || (runtimeSession && hasRuntimeAfterHook),\n  );\n  const shouldBufferCurrentResponse = () => {\n    const contentTypeHeader = res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n    const contentType = typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n    return contentType.includes(\"text/html\")\n      ? bufferPluginResponse\n      : Boolean(runtimeSession && hasRuntimeAfterHook);\n  };\n\n  res.writeHead = ((statusCode: number, ...args: unknown[]) => {\n    const statusMessage = typeof args[0] === \"string\" ? args[0] : undefined;\n    const headers = statusMessage === undefined ? args[0] : args[1];\n    res.statusCode = statusCode;\n    if (statusMessage !== undefined) res.statusMessage = statusMessage;\n    applyNodeWriteHeadHeaders(res, headers);\n\n    if (shouldBufferCurrentResponse()) return res;\n    return statusMessage === undefined\n      ? originalWriteHead(statusCode)\n      : originalWriteHead(statusCode, statusMessage);\n  }) as any;\n\n  if (originalFlushHeaders) {\n    res.flushHeaders = (() =>\n      shouldBufferCurrentResponse() ? undefined : originalFlushHeaders()) as any;\n  }\n\n  res.write = ((chunk: unknown, ...args: unknown[]) => {\n    const contentTypeHeader = res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n    const contentType = typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n    const isHtmlResponse = contentType.includes(\"text/html\");\n    const bufferChunk = toNodeResponseBuffer(chunk, args[0]);\n\n    if (isHtmlResponse && bufferChunk) {\n      htmlChunks.push(bufferChunk);\n      didStreamHtml = true;\n    } else if (runtimeSession && hasRuntimeAfterHook && bufferChunk) {\n      responseChunks.push(bufferChunk);\n    }\n\n    const shouldBufferResponse = isHtmlResponse\n      ? bufferPluginResponse\n      : Boolean(runtimeSession && hasRuntimeAfterHook);\n    if (shouldBufferResponse) {\n      const callback = args.find((arg) => typeof arg === \"function\") as (() => void) | undefined;\n      callback?.();\n      return true;\n    }\n\n    const writeResult = originalWrite(chunk, ...args);\n    if (isHtmlResponse && typeof res.flush === \"function\") res.flush();\n    return writeResult;\n  }) as any;\n\n  res.end = ((...args: unknown[]) => {\n    interceptedEnd = true;\n    res[FARM_NODE_RESPONSE_END_PENDING] = true;\n    if (afterResponseCalled) return res;\n\n    afterResponseCalled = true;\n    options.logResponse(method, urlPath, res.statusCode || 200, Date.now() - startTime, \"PAGE\");\n    const originalEndArgs = [...args];\n    const callback =\n      typeof originalEndArgs[originalEndArgs.length - 1] === \"function\"\n        ? (originalEndArgs[originalEndArgs.length - 1] as () => void)\n        : undefined;\n    const contentTypeHeader = res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n    const contentType = typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n    const isHtmlResponse = contentType.includes(\"text/html\");\n    const finalChunk = toNodeResponseBuffer(args[0], args[1]);\n    if (finalChunk) {\n      if (isHtmlResponse) htmlChunks.push(finalChunk);\n      else if (runtimeSession && hasRuntimeAfterHook) responseChunks.push(finalChunk);\n    }\n\n    Promise.resolve()\n      .then(async () => {\n        if (isHtmlResponse) {\n          const fullHtml = Buffer.concat(htmlChunks).toString(\"utf8\");\n          if (!didStreamHtml || bufferPluginResponse) {\n            let html = await pm.runHookSerial(\"transformHTML\", fullHtml);\n            html = await pm.runHookSerial(\"afterRender\", html, renderPayload);\n            originalEndArgs.length = 0;\n            originalEndArgs.push(html);\n            if (callback) originalEndArgs.push(callback);\n          } else {\n            await pm.runHookSerial(\"transformHTML\", fullHtml);\n            await pm.runHookSerial(\"afterRender\", fullHtml, renderPayload);\n          }\n        }\n\n        if (runtimeSession) {\n          pm.copyRequestContext(req, runtimeSession.request);\n          const status = res.statusCode || 200;\n          const canHaveBody =\n            method !== \"HEAD\" && status !== 204 && status !== 205 && status !== 304;\n          const firstArg = originalEndArgs[0];\n          const responseBody = canHaveBody\n            ? isHtmlResponse\n              ? didStreamHtml && !bufferPluginResponse\n                ? Buffer.concat(htmlChunks)\n                : toNodeResponseBuffer(firstArg, originalEndArgs[1])\n              : hasRuntimeAfterHook\n                ? Buffer.concat(responseChunks)\n                : toNodeResponseBuffer(firstArg, originalEndArgs[1])\n            : null;\n          const runtimeResponse = await pm.endRuntimeRequest(\n            runtimeSession,\n            new Response(responseBody ? toRequestBody(responseBody) : responseBody, {\n              status,\n              headers: createHeadersFromNodeResponse(res),\n            }),\n          );\n          applyWebResponseToNodeResponse(runtimeResponse, res);\n\n          const canReplaceOutput = isHtmlResponse\n            ? !didStreamHtml || bufferPluginResponse\n            : hasRuntimeAfterHook;\n          if (canReplaceOutput) {\n            const body = runtimeResponse.body\n              ? Buffer.from(await runtimeResponse.arrayBuffer())\n              : undefined;\n            originalEndArgs.length = 0;\n            if (body) originalEndArgs.push(body);\n            if (callback) originalEndArgs.push(callback);\n          }\n        }\n      })\n      .then(() =>\n        hasAfterResponseHook ? pm.runHookParallel(\"afterResponse\", req, res) : undefined,\n      )\n      .then(() => {\n        res.write = originalWrite;\n        res.end = originalEnd;\n        res.writeHead = originalWriteHead;\n        if (originalFlushHeaders) res.flushHeaders = originalFlushHeaders;\n        delete res[FARM_NODE_RESPONSE_END_PENDING];\n        originalEnd(...originalEndArgs);\n      })\n      .catch((error) => {\n        void options.emitError(error);\n        console.error(\"Error in afterResponse hook:\", error);\n        const shouldBufferResponse = isHtmlResponse\n          ? bufferPluginResponse\n          : Boolean(runtimeSession && hasRuntimeAfterHook);\n        if (shouldBufferResponse) {\n          const body = Buffer.concat(isHtmlResponse ? htmlChunks : responseChunks);\n          res.write = originalWrite;\n          res.end = originalEnd;\n          res.writeHead = originalWriteHead;\n          if (originalFlushHeaders) res.flushHeaders = originalFlushHeaders;\n          delete res[FARM_NODE_RESPONSE_END_PENDING];\n          originalEnd(body, callback);\n        } else {\n          res.write = originalWrite;\n          res.end = originalEnd;\n          res.writeHead = originalWriteHead;\n          if (originalFlushHeaders) res.flushHeaders = originalFlushHeaders;\n          delete res[FARM_NODE_RESPONSE_END_PENDING];\n          originalEnd(...originalEndArgs);\n        }\n      });\n\n    return res;\n  }) as any;\n\n  return {\n    isEnded: () => interceptedEnd || res.writableEnded,\n  };\n}\n\nfunction getFullEnvDefine(config: FarmVitePluginOptions): {\n  server: Record<string, unknown>;\n  public: Record<string, unknown>;\n} {\n  const env = (config as any).env;\n  if (!env || typeof env !== \"object\") {\n    return { server: {}, public: {} };\n  }\n\n  return {\n    server: isResolvedEnvScope(env.server) ? env.server : {},\n    public: isResolvedEnvScope(env.public) ? env.public : {},\n  };\n}\n\nfunction getEnvDefines(\n  config: FarmVitePluginOptions,\n  configEnv?: ConfigEnv,\n): Record<string, string> {\n  const defines: Record<string, string> = {\n    __FARM_API_BASE_URL__: JSON.stringify(getFarmAPIBaseURLDefine(config)),\n    __FARM_PUBLIC_ENV__: JSON.stringify(getPublicEnvDefine(config)),\n    __FARM_IMAGE_CONFIG__: JSON.stringify(\n      getPublicFarmImageConfig(resolveFarmImageConfig(config.images)),\n    ),\n  };\n\n  if (configEnv?.isSsrBuild) {\n    defines.__FARM_ENV__ = JSON.stringify(getFullEnvDefine(config));\n  }\n\n  return defines;\n}\n\nfunction getFarmAPIBaseURLDefine(config: FarmVitePluginOptions): string {\n  const baseURL = config.api?.baseURL;\n  return typeof baseURL === \"string\" && baseURL ? baseURL : DEFAULT_FARM_API_BASE_PATH;\n}\n\nfunction isResolvedEnvScope(value: unknown): value is Record<string, unknown> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n\n  return !Object.values(value).some(\n    (entry) =>\n      typeof entry === \"function\" ||\n      (!!entry && typeof entry === \"object\" && typeof (entry as any).parse === \"function\"),\n  );\n}\n\nfunction isPotentialProgrammaticRouteSourceFile(\n  normalizedFile: string,\n  srcDirSlug: string,\n): boolean {\n  return (\n    normalizedFile.startsWith(`${srcDirSlug}/`) &&\n    /\\.(ts|tsx|js|jsx)$/.test(normalizedFile) &&\n    !normalizedFile.endsWith(\".d.ts\") &&\n    !normalizedFile.endsWith(\"/farm-routes.d.ts\") &&\n    !normalizedFile.endsWith(\"/farm-env.d.ts\") &&\n    !normalizedFile.endsWith(\"/lib/api.generated.ts\")\n  );\n}\n\nfunction fileContainsProgrammaticPageRoute(file: string): boolean {\n  if (!fs.existsSync(file)) {\n    return false;\n  }\n\n  try {\n    return scanProgrammaticPagePaths(fs.readFileSync(file, \"utf8\")).length > 0;\n  } catch {\n    return false;\n  }\n}\n\ninterface FarmModuleAstNode {\n  type: string;\n  start: number;\n  end: number;\n  [key: string]: unknown;\n}\n\nexport function rewriteEarlySsrRelativeImports(options: {\n  code: string;\n  id: string;\n  root: string;\n  parse: (code: string) => FarmModuleAstNode;\n}): string | null {\n  const cleanId = options.id.split(\"?\", 1)[0];\n  if (!path.isAbsolute(cleanId) || cleanId.replace(/\\\\/g, \"/\").includes(\"/node_modules/\")) {\n    return null;\n  }\n\n  const replacements: Array<{ start: number; end: number; code: string }> = [];\n  let ast: FarmModuleAstNode;\n  try {\n    ast = options.parse(options.code);\n  } catch {\n    return null;\n  }\n\n  walkModuleAst(ast, (node) => {\n    if (\n      node.type !== \"ImportDeclaration\" &&\n      node.type !== \"ExportNamedDeclaration\" &&\n      node.type !== \"ExportAllDeclaration\" &&\n      node.type !== \"ImportExpression\"\n    ) {\n      return;\n    }\n\n    const source = node.source;\n    if (!isFarmModuleAstNode(source) || typeof source.value !== \"string\") return;\n    if (!source.value.startsWith(\".\")) return;\n\n    const suffixIndex = source.value.search(/[?#]/);\n    const sourcePath = suffixIndex === -1 ? source.value : source.value.slice(0, suffixIndex);\n    const suffix = suffixIndex === -1 ? \"\" : source.value.slice(suffixIndex);\n    const resolvedPath = path.resolve(path.dirname(cleanId), sourcePath);\n\n    replacements.push({\n      start: source.start,\n      end: source.end,\n      code: JSON.stringify(`${toViteModuleId(resolvedPath, options.root)}${suffix}`),\n    });\n  });\n\n  if (replacements.length === 0) return null;\n\n  let output = options.code;\n  for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n    output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n  }\n  return output;\n}\n\nexport function transformIsolatedClientBoundaryModule(options: {\n  code: string;\n  moduleReference: string;\n  islandStrategy: FarmIslandStrategy;\n  parse: (code: string) => FarmModuleAstNode;\n}): string | null {\n  let ast: FarmModuleAstNode;\n  try {\n    ast = options.parse(options.code);\n  } catch {\n    return null;\n  }\n\n  const body = Array.isArray((ast as any).body) ? ((ast as any).body as any[]) : [];\n  const replacements: Array<{ start: number; end: number; code: string }> = [];\n  const wrapperStatements: string[] = [];\n  const originalEntries: string[] = [];\n  let transformedExports = 0;\n\n  const addWrapper = (localName: string, exportName: string, isDefault = false) => {\n    const safeName = exportName.replace(/[^A-Za-z0-9_$]/g, \"_\");\n    const wrapperName = `__farm_isolated_boundary_${safeName || \"default\"}__`;\n    wrapperStatements.push(\n      `const ${wrapperName} = __farm_create_isolated_boundary__(__farm_isolated_react__, ${localName}, ${JSON.stringify(options.moduleReference)}, ${JSON.stringify(exportName)}, ${JSON.stringify(options.islandStrategy)});`,\n    );\n    wrapperStatements.push(\n      isDefault ? `export default ${wrapperName};` : `export { ${wrapperName} as ${exportName} };`,\n    );\n    originalEntries.push(`${JSON.stringify(exportName)}: ${localName}`);\n    transformedExports++;\n  };\n\n  for (const node of body) {\n    if (node?.type === \"ExportDefaultDeclaration\" && node.declaration) {\n      const declaration = node.declaration;\n      if (\n        (declaration.type === \"FunctionDeclaration\" || declaration.type === \"ClassDeclaration\") &&\n        declaration.id?.name\n      ) {\n        replacements.push({\n          start: node.start,\n          end: node.end,\n          code: options.code.slice(declaration.start, declaration.end),\n        });\n        addWrapper(declaration.id.name, \"default\", true);\n      } else {\n        const originalName = \"__farm_isolated_original_default__\";\n        replacements.push({\n          start: node.start,\n          end: node.end,\n          code: `const ${originalName} = (${options.code.slice(declaration.start, declaration.end)});`,\n        });\n        addWrapper(originalName, \"default\", true);\n      }\n      continue;\n    }\n\n    if (node?.type !== \"ExportNamedDeclaration\" || !node.declaration) continue;\n    const declaration = node.declaration;\n    const declaredNames: string[] = [];\n    if (\n      (declaration.type === \"FunctionDeclaration\" || declaration.type === \"ClassDeclaration\") &&\n      declaration.id?.name\n    ) {\n      declaredNames.push(declaration.id.name);\n    } else if (declaration.type === \"VariableDeclaration\") {\n      for (const declarator of declaration.declarations || []) {\n        if (declarator.id?.type === \"Identifier\") declaredNames.push(declarator.id.name);\n      }\n    }\n    const componentNames = declaredNames.filter((name) => /^[A-Z]/.test(name));\n    if (componentNames.length === 0) continue;\n\n    replacements.push({\n      start: node.start,\n      end: node.end,\n      code: options.code.slice(declaration.start, declaration.end),\n    });\n    for (const name of declaredNames) {\n      if (/^[A-Z]/.test(name)) addWrapper(name, name);\n      else wrapperStatements.push(`export { ${name} };`);\n    }\n  }\n\n  if (transformedExports === 0) return null;\n  let output = options.code;\n  for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n    output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n  }\n\n  return `import * as __farm_isolated_react__ from \"react\";\\nimport { createFarmIsolatedClientBoundary as __farm_create_isolated_boundary__ } from \"@farm.js/core/internal/isolated-boundary\";\\n${output}\\n${wrapperStatements.join(\"\\n\")}\\nexport const __farm_client_boundary_originals__ = Object.freeze({ ${originalEntries.join(\", \")} });\\n`;\n}\n\nfunction walkModuleAst(node: FarmModuleAstNode, visit: (node: FarmModuleAstNode) => void): void {\n  visit(node);\n\n  for (const [key, value] of Object.entries(node)) {\n    if (key === \"start\" || key === \"end\" || key === \"loc\" || key === \"range\") continue;\n    if (isFarmModuleAstNode(value)) {\n      walkModuleAst(value, visit);\n      continue;\n    }\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        if (isFarmModuleAstNode(item)) walkModuleAst(item, visit);\n      }\n    }\n  }\n}\n\nfunction isFarmModuleAstNode(value: unknown): value is FarmModuleAstNode {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as FarmModuleAstNode).type === \"string\" &&\n    typeof (value as FarmModuleAstNode).start === \"number\" &&\n    typeof (value as FarmModuleAstNode).end === \"number\"\n  );\n}\n\nfunction isFarmConfigFile(file: string, root: string): boolean {\n  const normalized = file.replace(/\\\\/g, \"/\");\n  const rootSlug = root.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n  const relative = normalized.startsWith(`${rootSlug}/`)\n    ? normalized.slice(rootSlug.length + 1)\n    : normalized;\n\n  return FARM_CONFIG_FILENAMES.has(relative);\n}\n\nconst warnedClientBoundaryIds = new Set<string>();\n\n/**\n * Warn once per module about server-only access in client-compiled code:\n * module-scope non-public process.env reads (undefined in the browser, #560)\n * and node: builtin imports (silently stubbed by farm:browser-external-stub).\n * Diagnostics only; behavior is unchanged (#1065).\n */\nfunction warnClientBoundaryOnce(\n  context: { parse(code: string): unknown },\n  id: string,\n  code: string,\n  config: FarmVitePluginOptions,\n): void {\n  if (warnedClientBoundaryIds.has(id)) return;\n\n  let program: unknown;\n  try {\n    program = context.parse(code);\n  } catch {\n    // Unparseable at this stage; another transform will surface the error.\n    return;\n  }\n  const publicKeys = new Set(Object.keys((config as any).env?.public ?? {}));\n  const findings = analyzeClientBoundary(program as any, publicKeys);\n\n  if (\n    findings.envKeys.length === 0 &&\n    findings.publicEnvKeys.length === 0 &&\n    findings.builtinImports.length === 0\n  ) {\n    return;\n  }\n  warnedClientBoundaryIds.add(id);\n  logger.warn(formatClientBoundaryWarning(id, findings));\n}\n\n/**\n * Whether Farm should append its own client-root HMR handler to a\n * `\"use client\"` module.\n *\n * Re-rendering the whole root on every edit only makes sense for a renderer\n * that diffs the result against the live DOM. On Solid and Svelte `render()`\n * tears the tree down and rebuilds it, so a one character change in any client\n * component would wipe the page's state. Those renderers ship their own HMR\n * integration (solid-refresh, svelte's hot API) which preserves component\n * state, and appending an `import.meta.hot.accept` here would swallow the\n * update before theirs could run.\n */\nexport function shouldEmitFarmClientRootHmr(renderer?: FarmRenderer): boolean {\n  return getFarmRendererCapabilities(resolveFarmRenderer(renderer)).reconcilesRerenders;\n}\n\nexport function farmPlugin(\n  options: FarmVitePluginOptions = {},\n  initialPluginManager?: PluginManager,\n): Plugin {\n  const imageImports = farmImageImportsPlugin();\n  const fontImports = farmFontImportsPlugin({\n    root: options.root,\n    basePath: options.basePath,\n    publicDir: options.publicDir,\n  });\n  let farmApp: FarmApp;\n  let server: ViteDevServer;\n  let apiRouteManager: APIRouteManager;\n  let openAPIManager: OpenAPIManager | null = null;\n  let middlewareManager: MiddlewareManager;\n  let refreshRouteDiscovery: ((reason: string) => Promise<void>) | null = null;\n  let workflowHandler: ((request: Request) => Promise<Response | null>) | null = null;\n  const logUpdate = (tag: \"PAGE\" | \"API\" | \"MIDDLEWARE\" | \"TYPE\", message: string) => {\n    const pc = createCliColors();\n    const log = [\n      pc.dim(\"[\") + pc.bold(pc.blue(\"FARM\")) + pc.dim(\"]\"),\n      pc.dim(\"[\") + pc.bold(pc.cyan(tag)) + pc.dim(\"]\"),\n      pc.dim(\"[\") + pc.bold(pc.yellow(\"UPDATE\")) + pc.dim(\"]\"),\n      pc.gray(message),\n    ].join(\" \");\n    console.log(log);\n  };\n\n  return {\n    name: \"farm\",\n\n    config(_userConfig, configEnv) {\n      const layerAliases = getFarmLayerAliases(options.layers);\n      const layerRoots = (options.layers ?? []).map((layer) => layer.root);\n      return {\n        // Honor Farm's publicDir so the dev server serves the same static\n        // directory the production client build emits.\n        ...(options.publicDir ? { publicDir: options.publicDir } : {}),\n        define: getEnvDefines(options, configEnv),\n        resolve: {\n          alias: layerAliases,\n        },\n        ...(layerRoots.length\n          ? {\n              server: {\n                fs: {\n                  allow: [path.resolve(options.root || process.cwd()), ...layerRoots],\n                },\n              },\n            }\n          : {}),\n      };\n    },\n\n    async configResolved(config) {\n      if (typeof fontImports.configResolved === \"function\") {\n        await fontImports.configResolved.call(this, config);\n      }\n      // Defer Farm application initialization until Vite server is available.\n    },\n\n    async configureServer(viteServer) {\n      if (typeof fontImports.configureServer === \"function\") {\n        await fontImports.configureServer.call(this, viteServer);\n      }\n      server = viteServer;\n\n      // Store the plugin manager passed during creation\n      const pm = initialPluginManager;\n      const emitPluginError = async (\n        phase: string,\n        error: unknown,\n        meta?: Record<string, unknown>,\n      ) => {\n        if (!pm) return;\n        try {\n          await pm.runHookParallel(\"onError\", { phase, error, meta });\n        } catch {\n          // Ignore plugin error reporter failures\n        }\n      };\n\n      farmApp = new FarmApp(\n        {\n          root: server.config.root,\n          ...options,\n        },\n        server,\n      );\n\n      const globalsCSSPath = path.join(server.config.root, \"src/app/globals.css\");\n      if (!fs.existsSync(globalsCSSPath)) {\n        const appDir = path.join(server.config.root, \"src/app\");\n        if (!fs.existsSync(appDir)) {\n          fs.mkdirSync(appDir, { recursive: true });\n        }\n        fs.writeFileSync(globalsCSSPath, defaultGlobalCSS);\n      }\n\n      await farmApp.initialize();\n\n      const farmConfig = farmApp.getConfig();\n      const apiServerBasePath = resolveFarmAPIServerBasePath(farmConfig.api);\n      const serverConfig = resolveFarmServerConfig(farmConfig.server);\n      let imageHandler: FarmImageHandler | null = null;\n      if (farmConfig.images.provider !== \"none\") {\n        const { createNodeImageFetcher, createNodeImageUrlValidator, createSharpImageTransformer } =\n          await import(\"./image-sharp\");\n        imageHandler = createFarmImageHandler(farmConfig.images, {\n          transform: createSharpImageTransformer(),\n          fetchRemote: createNodeImageFetcher(farmConfig.images),\n          validateRemoteUrl: createNodeImageUrlValidator(farmConfig.images),\n          onError(error) {\n            logger.error(\n              `Image optimization failed: ${error instanceof Error ? error.message : String(error)}`,\n            );\n          },\n        });\n      }\n      const sourceRoots = getFarmSourceRoots(farmConfig);\n      server.watcher.add(sourceRoots.map((source) => path.join(source.root, source.srcDir)));\n      if (farmConfig.i18n.enabled) {\n        server.watcher.add(\n          farmConfig.i18n.locales.map((locale) =>\n            resolveFarmI18nMessagePath(farmConfig.i18n, locale),\n          ),\n        );\n      }\n      const workflowConfig = farmConfig.workflows;\n      const farmDocsDevRuntime = farmConfig.docs.enabled ? await loadFarmDocsDevRuntime() : null;\n      const getExtraRouteTypes = () => [\n        ...(options.openapi?.enabled && options.openapi.route ? [options.openapi.route] : []),\n        ...(farmDocsDevRuntime?.getFarmDocsRouteTypeEntries(farmConfig.docs) ?? []),\n      ];\n      const appDirSlugs = sourceRoots.map((source) =>\n        path.join(source.root, source.srcDir, \"app\").replace(/\\\\/g, \"/\"),\n      );\n      const generateTypeArtifacts = async (\n        reason: string,\n        selection: TypeArtifactSelection = ALL_TYPE_ARTIFACTS,\n        log = false,\n      ) => {\n        try {\n          const result = await generateFarmTypeArtifacts({\n            root: farmConfig.root,\n            srcDir: farmConfig.srcDir,\n            layers: farmConfig.layers,\n            plugins: farmConfig.plugins,\n            extraRoutes: getExtraRouteTypes(),\n            suppressLintOnLink: farmConfig.suppressLintOnLink,\n            componentExtensions: farmConfig.renderer.componentExtensions,\n            i18nConfig: farmConfig.i18n,\n            ...selection,\n          });\n          if (log) {\n            const refreshed = [\n              selection.routes !== false && \"route\",\n              selection.api !== false && \"API\",\n              selection.env !== false && \"env\",\n              selection.images !== false && \"image\",\n              selection.i18n !== false && farmConfig.i18n.enabled && \"i18n\",\n            ].filter(Boolean);\n            logUpdate(\n              \"TYPE\",\n              `${reason} - refreshed ${refreshed.join(\", \")} types${\n                selection.api !== false\n                  ? ` (${result.apiRoutes.length} API route${result.apiRoutes.length === 1 ? \"\" : \"s\"})`\n                  : \"\"\n              }`,\n            );\n          }\n          if (openAPIManager) {\n            await openAPIManager.invalidateCache();\n          }\n        } catch (e) {\n          const message = e instanceof Error ? e.message : String(e);\n          logger.warn(`Route type generation failed (farm.d.ts may be stale): ${message}`);\n          if (pm) {\n            await emitPluginError(\"type-artifact-generation\", e, { reason });\n          }\n        }\n      };\n      await generateTypeArtifacts(\"startup\");\n\n      const srcDirSlugs = sourceRoots.map((source) =>\n        path.join(source.root, source.srcDir).replace(/\\\\/g, \"/\"),\n      );\n      const layerConfigFiles = new Set(\n        farmConfig.layers\n          .map((layer) => layer.configFile?.replace(/\\\\/g, \"/\"))\n          .filter((file): file is string => Boolean(file)),\n      );\n      const isPageFile = (file: string) => {\n        const normalized = file.replace(/\\\\/g, \"/\");\n        return (\n          appDirSlugs.some((appDir) => normalized.startsWith(`${appDir}/`)) &&\n          /page\\.(ts|tsx|js|jsx|md|mdx)$/.test(normalized)\n        );\n      };\n      const isApiRouteFile = (file: string) => {\n        const normalized = file.replace(/\\\\/g, \"/\");\n        return (\n          appDirSlugs.some((appDir) => normalized.startsWith(`${appDir}/api/`)) &&\n          /route\\.(ts|tsx|js|jsx)$/.test(normalized)\n        );\n      };\n      const isProgrammaticRouteFile = (file: string) => {\n        const normalized = file.replace(/\\\\/g, \"/\");\n        return (\n          srcDirSlugs.some((srcDir) => normalized.startsWith(`${srcDir}/`)) &&\n          isProgrammaticRoutesFileName(normalized)\n        );\n      };\n      const isProgrammaticRouteSourceFile = (file: string) => {\n        const normalized = file.replace(/\\\\/g, \"/\");\n        return srcDirSlugs.some((srcDir) =>\n          isPotentialProgrammaticRouteSourceFile(normalized, srcDir),\n        );\n      };\n      const isAppRuntimeFile = (file: string) => {\n        const normalized = file.replace(/\\\\/g, \"/\");\n        return (\n          appDirSlugs.some((appDir) => normalized.startsWith(`${appDir}/`)) &&\n          /\\/(?:page|default|layout|loading|error|middleware|route)\\.(?:ts|tsx|js|jsx|md|mdx)$|\\/(?:sitemap|robots|manifest)\\.(?:ts|js)$|\\/(?:opengraph-image|twitter-image)(?:\\.(?:ts|tsx|js|jsx|png|jpg|jpeg|gif|webp)|\\.alt\\.txt)$/.test(\n            normalized,\n          )\n        );\n      };\n      const isStaticMetadataImageFile = (file: string) =>\n        /\\/(?:opengraph-image|twitter-image)(?:\\.(?:png|jpg|jpeg|gif|webp)|\\.alt\\.txt)$/.test(\n          file.replace(/\\\\/g, \"/\"),\n        );\n      const isI18nCatalogFile = (file: string) => isFarmI18nCatalogFile(farmConfig.i18n, file);\n      let typeArtifactGenScheduled: ReturnType<typeof setTimeout> | null = null;\n      let pendingTypeArtifacts = createEmptyTypeArtifactSelection();\n      let pendingTypeArtifactReason = \"\";\n      let routeRefreshScheduled: ReturnType<typeof setTimeout> | null = null;\n      let pendingRouteRefreshIncludesMiddleware = false;\n      const scheduleTypeArtifactGen = (\n        file: string,\n        event: string,\n        selection: TypeArtifactSelection,\n      ) => {\n        const normalizedFile = toPosixPath(file);\n        for (const [artifact, enabled] of Object.entries(selection)) {\n          if (enabled) {\n            pendingTypeArtifacts[artifact as keyof TypeArtifactSelection] = true;\n          }\n        }\n        pendingTypeArtifactReason ||= `${event} ${normalizedFile.split(\"/app/\")[1] || normalizedFile}`;\n        if (typeArtifactGenScheduled) return;\n        typeArtifactGenScheduled = setTimeout(() => {\n          typeArtifactGenScheduled = null;\n          const artifacts = pendingTypeArtifacts;\n          const reason = pendingTypeArtifactReason;\n          pendingTypeArtifacts = createEmptyTypeArtifactSelection();\n          pendingTypeArtifactReason = \"\";\n          generateTypeArtifacts(reason, artifacts, true).catch(() => {});\n        }, 100);\n      };\n      [\"add\", \"change\", \"unlink\"].forEach((ev) => {\n        server.watcher.on(ev as \"add\", (file: string) => {\n          const normalizedFile = file.replace(/\\\\/g, \"/\");\n          const configChanged =\n            isFarmConfigFile(file, farmConfig.root) || layerConfigFiles.has(normalizedFile);\n          const programmaticRouteChanged =\n            isProgrammaticRouteFile(file) ||\n            (isProgrammaticRouteSourceFile(file) &&\n              (ev === \"unlink\" || fileContainsProgrammaticPageRoute(file)));\n          const typeArtifacts: TypeArtifactSelection = configChanged\n            ? ALL_TYPE_ARTIFACTS\n            : {\n                routes: (ev !== \"change\" && isPageFile(file)) || programmaticRouteChanged,\n                api: isApiRouteFile(file) || programmaticRouteChanged,\n                env: false,\n                images: false,\n                i18n: isI18nCatalogFile(file),\n              };\n          if (Object.values(typeArtifacts).some(Boolean)) {\n            scheduleTypeArtifactGen(file, ev, typeArtifacts);\n          }\n          if (isI18nCatalogFile(file)) {\n            farmApp\n              ?.getI18nRuntime()\n              .reload()\n              .then(() => server.ws.send({ type: \"full-reload\", path: \"*\" }))\n              .catch((error) => logger.warn(`i18n catalog reload failed: ${error.message}`));\n          }\n          const isRouteRefreshEvent =\n            (ev !== \"change\" || isStaticMetadataImageFile(file)) &&\n            (isAppRuntimeFile(file) ||\n              isProgrammaticRouteFile(file) ||\n              (isProgrammaticRouteSourceFile(file) &&\n                (ev === \"unlink\" || fileContainsProgrammaticPageRoute(file))));\n          if (isRouteRefreshEvent) {\n            if (file.includes(\"middleware.\")) {\n              pendingRouteRefreshIncludesMiddleware = true;\n            }\n            if (!routeRefreshScheduled) {\n              routeRefreshScheduled = setTimeout(() => {\n                routeRefreshScheduled = null;\n                const reloadsMiddleware = pendingRouteRefreshIncludesMiddleware;\n                pendingRouteRefreshIncludesMiddleware = false;\n                Promise.all([\n                  refreshRouteDiscovery?.(`${ev} ${file}`),\n                  reloadsMiddleware ? middlewareManager?.reload() : undefined,\n                ])\n                  .then(() => server.ws.send({ type: \"full-reload\", path: \"*\" }))\n                  .catch((error) => logger.warn(`Route refresh failed: ${error.message}`));\n              }, 50);\n            }\n          }\n        });\n      });\n\n      // Initialize API route manager\n      const appDirs = getFarmAppDirectories(farmConfig);\n      const routeManager = farmApp.getRouteManager();\n      const discoveredRoutes: Array<{\n        kind: \"page\" | \"layout\";\n        pattern: string;\n        modulePath: string;\n      }> = [];\n      for (const [pattern, entry] of routeManager.getRoutes()) {\n        discoveredRoutes.push({\n          kind: \"page\",\n          pattern,\n          modulePath: entry.modulePath,\n        });\n      }\n      for (const [pattern, entry] of routeManager.getLayouts()) {\n        discoveredRoutes.push({\n          kind: \"layout\",\n          pattern,\n          modulePath: entry.modulePath,\n        });\n      }\n      if (pm) {\n        for (const route of discoveredRoutes) {\n          await pm.runHookParallel(\"routeDiscovered\", route);\n        }\n        await pm.runHookParallel(\"routesGenerated\", {\n          routes: discoveredRoutes,\n          pageCount: discoveredRoutes.filter((r) => r.kind === \"page\").length,\n          layoutCount: discoveredRoutes.filter((r) => r.kind === \"layout\").length,\n        });\n      }\n\n      apiRouteManager = new APIRouteManager(appDirs, server, {\n        plugins: farmConfig.plugins,\n        i18n: farmApp.getI18nRuntime(),\n        bodySizeLimit: serverConfig.bodySizeLimit,\n        basePath: apiServerBasePath,\n      });\n      await apiRouteManager.discoverRoutes();\n      let discoveredWorkflows: FarmDiscoveredWorkflow[] = [];\n      const hasWorkflowDirectory =\n        workflowConfig.enabled &&\n        workflowConfig.dirs.some((dir) =>\n          fs.existsSync(path.isAbsolute(dir) ? dir : path.join(farmConfig.root, dir)),\n        );\n      if (hasWorkflowDirectory) {\n        const { createFarmWorkflowRequestHandler, discoverFarmWorkflows } =\n          await loadFarmWorkflowsDevRuntime();\n        discoveredWorkflows = await discoverFarmWorkflows(\n          { ...farmConfig, workflows: workflowConfig },\n          {\n            loadModule: async (filePath) =>\n              server.ssrLoadModule(filePath) as Promise<Record<string, any>>,\n          },\n        );\n        if (discoveredWorkflows.length > 0) {\n          workflowHandler = createFarmWorkflowRequestHandler({\n            workflows: discoveredWorkflows,\n            config: workflowConfig,\n            loadModule: async (workflow: FarmDiscoveredWorkflow) =>\n              server.ssrLoadModule(workflow.filePath) as Promise<Record<string, any>>,\n            server: farmConfig.server,\n          });\n          logger.success(`✅ Discovered ${discoveredWorkflows.length} Farm workflow task(s)`);\n        }\n      }\n      if (pm) {\n        for (const [, apiRoute] of apiRouteManager.getRoutes()) {\n          await pm.runHookParallel(\"apiRouteDiscovered\", {\n            path: apiRoute.path,\n            filePath: apiRoute.filePath,\n            methods: apiRoute.methods,\n          });\n        }\n      }\n\n      middlewareManager = new MiddlewareManager(\n        appDirs,\n        server,\n        farmConfig.middleware,\n        farmConfig.i18n,\n        farmConfig.server,\n      );\n      await middlewareManager.discover();\n      if (pm) {\n        for (const middleware of middlewareManager.getMiddlewares()) {\n          await pm.runHookParallel(\"middlewareDiscovered\", {\n            path: middleware.path,\n            filePath: middleware.filePath,\n            handlerCount: middleware.handlers.length,\n          });\n        }\n      }\n\n      // Initialize OpenAPI manager if enabled\n      if (options.openapi?.enabled) {\n        const { OpenAPIManager } = await loadFarmOpenAPIDevRuntime();\n        openAPIManager = new OpenAPIManager(appDirs, options.openapi);\n        const spec = await openAPIManager.generateSpec();\n        reportOpenAPIDevGenerationResult(spec);\n      }\n\n      refreshRouteDiscovery = async (reason: string) => {\n        await routeManager.discoverRoutes();\n        await apiRouteManager.discoverRoutes();\n        const manifestModule = server.moduleGraph.getModuleById(\"/@farm/manifest\");\n        if (manifestModule) {\n          server.moduleGraph.invalidateModule(manifestModule);\n        }\n        if (openAPIManager) {\n          await openAPIManager.invalidateCache();\n        }\n        if (process.env.FARM_VERBOSE) {\n          logger.info(`Refreshed routes: ${reason}`);\n        }\n      };\n\n      const farmDocsFontAssetList = farmDocsDevRuntime\n        ? resolveFarmDocsFontAssets(farmConfig.root)\n        : [];\n      const resolveDocsLayoutFonts = async (pathname: string) => {\n        const layouts = routeManager.matchRoute(pathname).layouts;\n        const layoutModules = await Promise.all(\n          layouts.map((layout) => routeManager.loadLayoutModule(layout.modulePath)),\n        );\n        return resolveFarmLayoutFonts(layoutModules);\n      };\n      const farmDocsHandler = farmDocsDevRuntime\n        ? farmDocsDevRuntime.hasFarmDocsRuntimeAdapter(farmConfig.docs)\n          ? await farmDocsDevRuntime.createFarmDocsAdapterHandler(farmConfig.docs, {\n              root: farmConfig.root,\n              srcDir: farmConfig.srcDir,\n              clientEntry: \"/@farm/client.js\",\n              resolveLayoutFonts: resolveDocsLayoutFonts,\n              fontStylesheetHref: \"/@farm/fonts.css\",\n              globalStylesheetHref: \"/src/app/globals.css\",\n              loadModule: async (specifier) => {\n                const resolved = await server.pluginContainer.resolveId(specifier, undefined, {\n                  ssr: true,\n                });\n                if (specifier === farmConfig.docs.adapter?.server && resolved?.id) {\n                  return import(/* @vite-ignore */ pathToFileURL(resolved.id).href);\n                }\n                return server.ssrLoadModule(resolved?.id ?? specifier);\n              },\n            })\n          : farmDocsDevRuntime.createFarmDocsHandler(farmConfig.docs, {\n              root: farmConfig.root,\n              srcDir: farmConfig.srcDir,\n              clientEntry: \"/@farm/client.js\",\n              fontAssets: toFarmDocsPublicFontAssets(farmDocsFontAssetList),\n              resolveLayoutFonts: resolveDocsLayoutFonts,\n              fontStylesheetHref: \"/@farm/fonts.css\",\n              globalStylesheetHref: \"/src/app/globals.css\",\n            })\n        : null;\n      const wrapFarmDocsResponseWithLayouts = async (\n        request: Request,\n        response: Response,\n      ): Promise<Response> => {\n        if (\n          request.method === \"HEAD\" ||\n          response.headers.has(\"x-farm-docs-adapter\") ||\n          !response.headers.get(\"content-type\")?.toLowerCase().includes(\"text/html\")\n        ) {\n          return response;\n        }\n\n        const pathname = new URL(request.url).pathname;\n        const matchedRoute = routeManager.matchRoute(pathname);\n        const layoutEntries = matchedRoute.layouts.map((layout) => ({\n          ...layout,\n          metadata: getClientModuleMetadata(layout.modulePath, farmConfig.root),\n        }));\n        if (!layoutEntries.some((layout) => layout.metadata.shouldHydrate)) {\n          return response;\n        }\n\n        const source = await response.text();\n        const bodyMatch = source.match(/<body([^>]*)>([\\s\\S]*?)<\\/body>/i);\n        if (!bodyMatch) {\n          return new Response(source, {\n            status: response.status,\n            statusText: response.statusText,\n            headers: response.headers,\n          });\n        }\n\n        // The app's layouts are authored for whichever renderer it selected, so\n        // they have to be composed and rendered through that renderer's server\n        // module. The production entry already resolves this the same way\n        // (nitro/universal-build.ts, rendererServerImports); importing react\n        // and react-dom/server literally here made dev disagree with prod for\n        // every non-React app.\n        const docsRenderer = resolveFarmRenderer((farmApp?.getConfig() ?? options).renderer);\n        const [rendererRuntime, layoutModules] = await Promise.all([\n          isReactRenderer(docsRenderer)\n            ? import(\"./renderer/react/server\")\n            : server.ssrLoadModule(docsRenderer.server),\n          Promise.all(\n            layoutEntries.map((layout) => routeManager.loadLayoutModule(layout.modulePath)),\n          ),\n        ]);\n        const hydrationStrategies = layoutEntries.flatMap((layout) =>\n          layout.metadata.shouldHydrate && layout.metadata.islandStrategy\n            ? [layout.metadata.islandStrategy]\n            : [],\n        );\n        const islandStrategy = hydrationStrategies.every(\n          (strategy) => strategy === hydrationStrategies[0],\n        )\n          ? (hydrationStrategies[0] ?? \"load\")\n          : \"load\";\n        const params = matchedRoute.params || {};\n        const toUrlPath = (absolutePath: string) => toViteModuleId(absolutePath, farmConfig.root);\n        const clientLayouts = Object.fromEntries(\n          layoutEntries.map((layout) => [\n            layout.pattern,\n            {\n              modulePath: toUrlPath(layout.modulePath),\n              pattern: layout.pattern,\n              shouldHydrate: layout.metadata.shouldHydrate,\n              islandStrategy: layout.metadata.islandStrategy,\n              preloads: [toUrlPath(layout.modulePath)],\n              assets: [],\n            },\n          ]),\n        );\n        const inlineValue = (value: unknown) =>\n          JSON.stringify(value).replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n        const pageModulePath = matchedRoute.route?.modulePath\n          ? toUrlPath(matchedRoute.route.modulePath)\n          : \"\";\n        const bootstrapScript = `<script>\nwindow.__FARM_PROPS__ = ${inlineValue({ params })};\nwindow.__FARM_ROUTE_SLOTS__ = [];\nwindow.__FARM_DEPLOYMENT_ID__ = ${inlineValue(farmConfig.deploymentId)};\nwindow.__FARM_PATH__ = ${inlineValue(pathname)};\nwindow.__FARM_IS_CLIENT__ = false;\nwindow.__FARM_PAGE_SHOULD_HYDRATE__ = false;\nwindow.__FARM_LAYOUT_SHOULD_HYDRATE__ = true;\nwindow.__FARM_SHOULD_HYDRATE__ = true;\nwindow.__FARM_ISLAND_STRATEGY__ = ${inlineValue(islandStrategy)};\nwindow.__FARM_PAGE_MODULE__ = ${inlineValue(pageModulePath)};\nwindow.__FARM_LOADING_MODULE__ = null;\nwindow.__FARM_MANIFEST__ = ${inlineValue({\n          routes: {},\n          layouts: clientLayouts,\n          slots: [],\n          clientEntry: \"/@farm/client.js\",\n          sharedAssets: [],\n        })};\n</script>`;\n\n        let wrappedElement: any = rendererRuntime.createElement(\"div\", {\n          id: \"__farm_page__\",\n          \"data-farm-client\": \"false\",\n          \"data-farm-layout-client\": \"true\",\n          \"data-farm-island\": \"page\",\n          \"data-farm-island-strategy\": islandStrategy,\n          dangerouslySetInnerHTML: { __html: bootstrapScript + bodyMatch[2] },\n        });\n        for (let index = layoutModules.length - 1; index >= 0; index--) {\n          const LayoutComponent = layoutModules[index].default;\n          if (LayoutComponent) {\n            wrappedElement = rendererRuntime.createElement(LayoutComponent, {\n              children: wrappedElement,\n              params,\n            });\n          }\n        }\n\n        const rootMarkup = await rendererRuntime.renderToString(\n          rendererRuntime.createElement(\"div\", { id: \"root\" }, wrappedElement),\n        );\n        const html = source.replace(bodyMatch[0], `<body${bodyMatch[1]}>${rootMarkup}</body>`);\n        const headers = new Headers(response.headers);\n        headers.delete(\"content-length\");\n        headers.delete(\"etag\");\n        return new Response(html, {\n          status: response.status,\n          statusText: response.statusText,\n          headers,\n        });\n      };\n      const farmDocsAPIHandler: FarmDocsAPIHandler | null =\n        farmDocsDevRuntime && !farmDocsDevRuntime.hasFarmDocsRuntimeAdapter(farmConfig.docs)\n          ? farmDocsDevRuntime.createFarmDocsAPIHandler({\n              rootDir: farmConfig.root,\n              srcDir: farmConfig.srcDir,\n              docs: farmConfig.docs,\n            })\n          : null;\n      const farmDocsFontAssets = new Map(\n        farmDocsFontAssetList.map(({ url, sourcePath }) => [url, sourcePath]),\n      );\n      const logResponse = (\n        method: string,\n        urlPath: string,\n        status: number,\n        duration: number,\n        tag: \"API\" | \"PAGE\",\n      ) => {\n        // In dev, browsers can trigger bursts of identical requests (reload/prefetch).\n        // Collapse near-identical page logs to keep terminal output readable.\n        const now = Date.now();\n        const dedupeKey = `${tag}:${method}:${urlPath}:${status}`;\n        const dedupeWindowMs = 250;\n        const last = (logResponse as any).__last as { key: string; ts: number } | undefined;\n        if (tag === \"PAGE\" && last && last.key === dedupeKey && now - last.ts < dedupeWindowMs) {\n          return;\n        }\n        (logResponse as any).__last = { key: dedupeKey, ts: now };\n\n        const pc = createCliColors();\n        let statusColor = pc.green;\n        if (status >= 500) statusColor = pc.red;\n        else if (status >= 400) statusColor = pc.yellow;\n        else if (status >= 300) statusColor = pc.cyan;\n\n        const log = [\n          pc.dim(\"[\") + pc.bold(pc.blue(\"FARM\")) + pc.dim(\"]\"),\n          pc.dim(\"[\") + pc.bold(pc.cyan(tag)) + pc.dim(\"]\"),\n          pc.dim(\"[\") + pc.bold(pc.white(method.padEnd(3))) + pc.dim(\"]\"),\n          pc.gray(urlPath),\n          pc.dim(\"-\"),\n          statusColor(status.toString()),\n          pc.dim(`(${duration}ms)`),\n        ].join(\" \");\n        console.log(log);\n      };\n\n      // Register middleware directly (not in return function) to ensure it runs early\n      const withAPIRequestTracing = (handler: Parameters<typeof withFarmRequestTracing>[0]) =>\n        withFarmRequestTracing(\n          handler,\n          {\n            basePath: apiServerBasePath,\n            dispatch: async (request) => {\n              // Resolve at call time so HMR never leaves a captured endpoint map.\n              const handler = apiRouteManager.getHandler();\n              return handler\n                ? handler(request)\n                : Response.json({ error: \"Not Found\" }, { status: 404 });\n            },\n          },\n          (request) => {\n            const currentConfig = farmApp?.getConfig() ?? options;\n            const currentServerConfig = resolveFarmServerConfig(currentConfig.server);\n            return resolveFarmRequestURL(request as FarmRequest, {\n              trustProxy: currentServerConfig.trustProxy,\n            });\n          },\n        );\n      server.middlewares.use(\n        withAPIRequestTracing(async (req, res, next) => {\n          const requestUrl = req.url || \"/\";\n          const requestMethod = req.method || \"GET\";\n          const currentConfig = farmApp?.getConfig() ?? options;\n          const currentServerConfig = resolveFarmServerConfig(currentConfig.server);\n          const parsedRequestUrl = resolveFarmRequestURL(req as FarmRequest, {\n            trustProxy: currentServerConfig.trustProxy,\n          });\n          const fullUrl = parsedRequestUrl.toString();\n          const requestPathname = parsedRequestUrl.pathname;\n\n          if (imageHandler && requestPathname === farmConfig.images.path) {\n            const imageResponse = await imageHandler(\n              createRequestFromNodeRequest(req, new URL(fullUrl)),\n            );\n            if (imageResponse) {\n              await sendWebResponse(res, imageResponse);\n              return;\n            }\n          }\n\n          const farmDocsFontPath = farmDocsFontAssets.get(requestPathname);\n          if (\n            (requestMethod === \"GET\" || requestMethod === \"HEAD\") &&\n            farmDocsFontPath &&\n            fs.existsSync(farmDocsFontPath)\n          ) {\n            res.statusCode = 200;\n            res.setHeader(\"Content-Type\", \"font/woff2\");\n            res.setHeader(\"Cache-Control\", \"public, max-age=31536000, immutable\");\n            if (requestMethod === \"HEAD\") res.end();\n            else fs.createReadStream(farmDocsFontPath).pipe(res);\n            return;\n          }\n\n          if (\n            requestMethod === \"GET\" &&\n            (requestPathname === FARM_DEVTOOLS_PATH ||\n              requestPathname === `${FARM_DEVTOOLS_PATH}.json`)\n          ) {\n            if (!farmConfig.devtools.enabled) {\n              res.statusCode = 404;\n              res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n              res.setHeader(\"Cache-Control\", \"no-store\");\n              res.end(\"Farm DevTools are disabled.\");\n              return;\n            }\n\n            if (\n              requestPathname === FARM_DEVTOOLS_PATH &&\n              parsedRequestUrl.searchParams.get(\"embedded\") !== \"1\"\n            ) {\n              let launchUrl = new URL(farmConfig.basePath || \"/\", parsedRequestUrl.origin);\n              const referrer = req.headers.referer;\n              if (referrer) {\n                try {\n                  const referrerUrl = new URL(referrer);\n                  if (\n                    referrerUrl.origin === parsedRequestUrl.origin &&\n                    !referrerUrl.pathname.startsWith(FARM_DEVTOOLS_PATH)\n                  ) {\n                    launchUrl = referrerUrl;\n                  }\n                } catch {\n                  // Ignore malformed referrers and return to the application root.\n                }\n              }\n              launchUrl.searchParams.set(FARM_DEVTOOLS_LAUNCH_PARAM, \"1\");\n              res.statusCode = 302;\n              res.setHeader(\n                \"Location\",\n                `${launchUrl.pathname}${launchUrl.search}${launchUrl.hash}`,\n              );\n              res.setHeader(\"Cache-Control\", \"no-store\");\n              res.setHeader(\"Vary\", \"Referer\");\n              res.end();\n              return;\n            }\n\n            const { createFarmDevtoolsSnapshot } = await loadFarmDevtoolsSnapshotRuntime();\n            const snapshot = await createFarmDevtoolsSnapshot({\n              root: farmConfig.root,\n              srcDir: farmConfig.srcDir,\n              routeManager: farmApp.getRouteManager(),\n              apiRouteManager,\n              middlewareManager,\n              config: {\n                ...currentConfig,\n                openapi: options.openapi,\n              },\n              workflows: discoveredWorkflows,\n            });\n\n            res.statusCode = 200;\n            res.setHeader(\n              \"Content-Type\",\n              requestPathname.endsWith(\".json\")\n                ? \"application/json; charset=utf-8\"\n                : \"text/html; charset=utf-8\",\n            );\n            res.setHeader(\"Cache-Control\", \"no-store\");\n            if (requestPathname.endsWith(\".json\")) {\n              res.end(JSON.stringify(snapshot, null, 2));\n            } else {\n              if (!warnedDeprecatedDevtoolsDashboard) {\n                warnedDeprecatedDevtoolsDashboard = true;\n                logger.warn(\n                  \"The built-in DevTools dashboard is deprecated. Install @farm.js/devtools and add devtools() to plugins in farm.config.ts.\",\n                );\n              }\n              const { renderFarmDevtoolsHtml } = await loadFarmDevtoolsUIRuntime();\n              res.end(renderFarmDevtoolsHtml(snapshot));\n            }\n            return;\n          }\n\n          // The OpenAPI spec and reference, docs, raw markdown-source, the\n          // markdown mirror, and the Markdown 404 fallback expose page content\n          // or route-existence, so app middleware must pass before they are\n          // sent — matching the production entry, where these handlers run\n          // after the middleware runner.\n          const runAppMiddlewareForContentRoute = async (): Promise<boolean> => {\n            if (!middlewareManager?.hasMiddleware()) return false;\n            const middlewareRequest = createRequestFromNodeRequest(req, new URL(fullUrl));\n            return farmApp\n              .getServerRenderer()\n              .runWithRequestContext(middlewareRequest, () => middlewareManager!.execute(req, res));\n          };\n\n          // Serve the raw OpenAPI spec as JSON at a predictable URL for agents\n          // and API tooling.\n          if (\n            openAPIManager &&\n            options.openapi?.specRoute &&\n            requestPathname === options.openapi.specRoute\n          ) {\n            if (await runAppMiddlewareForContentRoute()) return;\n            if (requestMethod !== \"GET\" && requestMethod !== \"HEAD\") {\n              res.statusCode = 405;\n              res.setHeader(\"Allow\", \"GET, HEAD\");\n              res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n              res.end(\"Method Not Allowed\");\n              return;\n            }\n            const spec = await openAPIManager.getSpec();\n            const body = JSON.stringify(spec);\n            res.statusCode = 200;\n            res.setHeader(\"Content-Type\", \"application/json; charset=utf-8\");\n            res.setHeader(\"Cache-Control\", \"no-store\");\n            res.end(requestMethod === \"HEAD\" ? undefined : body);\n            return;\n          }\n\n          // Handle OpenAPI docs route\n          if (openAPIManager && requestPathname === options.openapi?.route) {\n            if (await runAppMiddlewareForContentRoute()) return;\n            const docsHandler = openAPIManager.getDocsRouteHandler();\n            return docsHandler(req, res);\n          }\n\n          const docsHeaders = new Headers();\n          for (const [key, value] of Object.entries(req.headers)) {\n            if (value) {\n              docsHeaders.set(key, Array.isArray(value) ? value.join(\", \") : value);\n            }\n          }\n          if (farmDocsHandler) {\n            const docsRequest = new Request(fullUrl, {\n              method: requestMethod,\n              headers: docsHeaders,\n            });\n            const docsResponse = await farmDocsHandler(docsRequest.clone());\n            if (docsResponse) {\n              if (await runAppMiddlewareForContentRoute()) return;\n              await sendWebResponse(\n                res,\n                await wrapFarmDocsResponseWithLayouts(docsRequest, docsResponse),\n              );\n              return;\n            }\n          }\n\n          const markdownSourceResponse = await createFarmMarkdownSourceResponse({\n            request: new Request(fullUrl, {\n              method: requestMethod,\n              headers: docsHeaders,\n            }),\n            config: farmApp.getConfig().mdx,\n            resolveSource: async (pathname) => {\n              const match = farmApp.getRouteManager().matchRoute(pathname);\n              const sourcePath =\n                match.route?.markdownSourcePath ||\n                (match.route && isFarmMarkdownPageFile(match.route.modulePath)\n                  ? match.route.modulePath\n                  : null);\n              if (!sourcePath) {\n                return null;\n              }\n              return {\n                source: await fs.promises.readFile(sourcePath, \"utf8\"),\n                filePath: sourcePath,\n              };\n            },\n          });\n          if (markdownSourceResponse) {\n            if (await runAppMiddlewareForContentRoute()) return;\n            await sendWebResponse(res, markdownSourceResponse);\n            return;\n          }\n\n          const markdownResponse = await createMarkdownMirrorResponse({\n            request: new Request(fullUrl, {\n              method: requestMethod,\n              headers: docsHeaders,\n            }),\n            config: farmApp.getConfig().md,\n            routeExists: (pathname) =>\n              Boolean(farmApp.getRouteManager().matchRoute(pathname).route),\n            renderPage: async (request) => fetch(request),\n          });\n          if (markdownResponse) {\n            if (await runAppMiddlewareForContentRoute()) return;\n            await sendWebResponse(res, markdownResponse);\n            return;\n          }\n\n          // No Markdown source or mirror matched. When the client explicitly\n          // asked for Markdown (a `.md` URL or `Accept: text/markdown`) and no\n          // page route exists, return a Markdown 404 body rather than letting a\n          // `.md` request fall through to a static-asset 404 or an HTML shell.\n          if (farmRequestWantsMarkdown(requestPathname, req.headers.accept)) {\n            const markdownRoute = farmApp\n              .getRouteManager()\n              .matchRoute(normalizeFarmMarkdownRoutePath(requestPathname));\n            if (!markdownRoute.route) {\n              if (await runAppMiddlewareForContentRoute()) return;\n              res.statusCode = 404;\n              res.setHeader(\"Content-Type\", FARM_MARKDOWN_CONTENT_TYPE);\n              res.setHeader(\"X-Farm-Markdown-Error\", \"404\");\n              res.setHeader(\"Cache-Control\", \"no-store\");\n              res.end(\n                createFarmMarkdownErrorBody(404, requestPathname, farmConfig.basePath || \"/\"),\n              );\n              return;\n            }\n          }\n\n          const markdownPageTarget = resolveMarkdownMirrorTarget(\n            farmApp.getConfig().md,\n            requestPathname,\n            {\n              accept: \"text/markdown\",\n            },\n          );\n          if (\n            markdownPageTarget &&\n            farmApp.getRouteManager().matchRoute(markdownPageTarget.pathname).route\n          ) {\n            const vary = res.getHeader(\"Vary\");\n            const varyValues = String(vary || \"\")\n              .split(\",\")\n              .map((value) => value.trim())\n              .filter(Boolean);\n            if (!varyValues.some((value) => value.toLowerCase() === \"accept\")) {\n              res.setHeader(\"Vary\", [...varyValues, \"Accept\"].join(\", \"));\n            }\n            const alternatePath =\n              markdownPageTarget.pathname === \"/\"\n                ? \"/index.md\"\n                : `${markdownPageTarget.pathname}.md`;\n            const alternateLink = `<${alternatePath}>; rel=\"alternate\"; type=\"text/markdown\"`;\n            const currentLink = res.getHeader(\"Link\");\n            res.setHeader(\n              \"Link\",\n              currentLink ? `${String(currentLink)}, ${alternateLink}` : alternateLink,\n            );\n          }\n\n          if (\n            workflowHandler &&\n            (requestPathname === workflowConfig.route ||\n              requestPathname.startsWith(`${workflowConfig.route}/`))\n          ) {\n            let workflowBody: Buffer | undefined;\n            try {\n              if (requestMethod !== \"GET\" && requestMethod !== \"HEAD\") {\n                workflowBody = await readNodeRequestBody(\n                  req as any,\n                  currentServerConfig.bodySizeLimit,\n                );\n              }\n            } catch (error) {\n              const response = createFarmRequestBodyErrorResponse(error);\n              if (!response) throw error;\n              await sendWebResponse(res, response);\n              return;\n            }\n            const workflowResponse = await workflowHandler(\n              new Request(fullUrl, {\n                method: requestMethod,\n                headers: docsHeaders,\n                body: toRequestBody(workflowBody),\n              }),\n            );\n            if (workflowResponse) {\n              await sendWebResponse(res, workflowResponse);\n              return;\n            }\n          }\n\n          const configuredIntegrations = currentConfig.integrations;\n\n          const tryConfiguredIntegrationRoute = async () => {\n            const matchedRoute = matchIntegrationRoute(configuredIntegrations, {\n              pathname: requestPathname,\n              method: requestMethod,\n            });\n\n            if (!matchedRoute) {\n              return false;\n            }\n\n            const startTime = Date.now();\n\n            try {\n              if (pm) {\n                await pm.runHookParallelFiltered(\n                  \"beforeRequest\",\n                  (plugin) => {\n                    const owner = getFarmIntegrationPluginOwner(plugin);\n                    return (\n                      plugin.name !== FARM_CONFIG_REWRITES_PLUGIN_NAME &&\n                      (owner?.source !== \"lifecycle\" || owner.key !== matchedRoute.key)\n                    );\n                  },\n                  req,\n                  res,\n                );\n              }\n\n              if (res.writableEnded) {\n                const duration = Date.now() - startTime;\n                logResponse(requestMethod, requestUrl, res.statusCode || 200, duration, \"API\");\n                return true;\n              }\n\n              const headers = new Headers();\n              for (const [key, value] of Object.entries(req.headers)) {\n                if (value) {\n                  headers.set(key, Array.isArray(value) ? value.join(\", \") : value);\n                }\n              }\n\n              let body: Buffer | undefined;\n              if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n                body = await readNodeRequestBody(req as any, currentServerConfig.bodySizeLimit);\n              }\n\n              const integrationRequest = new Request(fullUrl, {\n                method: req.method,\n                headers,\n                body: toRequestBody(body),\n              });\n\n              const dispatchIntegration = async (request: Request) => {\n                const result = await dispatchIntegrationRequest(\n                  {\n                    integration: matchedRoute.integration,\n                    config: currentConfig,\n                    isDev: true,\n                    isProd: false,\n                  },\n                  request,\n                );\n                if (!result) {\n                  throw new Error(`Matched integration route did not return a response`);\n                }\n                return result;\n              };\n              const response = pm\n                ? await pm.runRuntimeRequest(integrationRequest, dispatchIntegration, {\n                    kind: \"integration\",\n                    route: {\n                      pathname: requestPathname,\n                      pattern: matchedRoute.route.path,\n                    },\n                  })\n                : await dispatchIntegration(integrationRequest);\n\n              if (!response) {\n                return false;\n              }\n\n              const duration = Date.now() - startTime;\n              logResponse(requestMethod, requestUrl, response.status, duration, \"API\");\n\n              await sendWebResponse(res, response);\n              return true;\n            } catch (error) {\n              const bodyErrorResponse = createFarmRequestBodyErrorResponse(error);\n              if (bodyErrorResponse) {\n                await sendWebResponse(res, bodyErrorResponse);\n                return true;\n              }\n              const duration = Date.now() - startTime;\n              logResponse(requestMethod, requestUrl, 500, duration, \"API\");\n              await emitPluginError(\"integration-handler\", error, {\n                pathname: requestPathname,\n                routePath: requestUrl,\n                method: requestMethod,\n                integration: matchedRoute.key,\n              });\n              logger.error(`Integration route error: ${error}`);\n              if (!res.writableEnded) {\n                res.statusCode = 500;\n                res.setHeader(\"Content-Type\", \"application/json\");\n                res.end(JSON.stringify({ error: \"Internal server error\" }));\n              }\n              return true;\n            }\n          };\n\n          if (await tryConfiguredIntegrationRoute()) {\n            return;\n          }\n\n          const redirectMatch = farmApp\n            .getRouteManager()\n            .matchRedirect(requestPathname, parsedRequestUrl.search);\n          if (redirectMatch) {\n            res.statusCode = redirectMatch.statusCode;\n            res.setHeader(\"Location\", redirectMatch.destination);\n            res.end(`Redirecting to ${redirectMatch.destination}`);\n            return;\n          }\n\n          // Handle API routes first\n          const matchedApiRoute = apiRouteManager.matchRoute(requestPathname);\n          const hasMatchedApiRoute = Boolean(matchedApiRoute);\n          if (hasMatchedApiRoute || isFarmAPIPathname(requestPathname, apiServerBasePath)) {\n            const startTime = Date.now();\n            const method = req.method || \"GET\";\n            const urlPath = req.url || \"/\";\n            const pathname = resolveFarmRequestURL(req as FarmRequest, {\n              trustProxy: currentServerConfig.trustProxy,\n            }).pathname;\n\n            try {\n              if (pm) {\n                if (hasMatchedApiRoute) {\n                  await pm.runHookParallelFiltered(\n                    \"beforeRequest\",\n                    (plugin) => plugin.name !== FARM_CONFIG_REWRITES_PLUGIN_NAME,\n                    req,\n                    res,\n                  );\n                } else {\n                  await pm.runHookParallel(\"beforeRequest\", req, res);\n                }\n              }\n\n              if (res.writableEnded) {\n                const duration = Date.now() - startTime;\n                logResponse(method, urlPath, res.statusCode || 200, duration, \"API\");\n                return;\n              }\n            } catch (error) {\n              await emitPluginError(\"before-request\", error, {\n                urlPath,\n                method,\n              });\n              logger.error(`Request hook error: ${error}`);\n              res.statusCode = 500;\n              res.setHeader(\"Content-Type\", \"application/json\");\n              res.end(JSON.stringify({ error: \"Internal server error\" }));\n              return;\n            }\n\n            // Let this request boundary observe endpoint failures before it\n            // converts them into the development 500 response below.\n            const apiHandler = apiRouteManager.getHandler({ throwOnError: true });\n            const hasExplicitAPIRoute =\n              hasMatchedApiRoute || Boolean(apiRouteManager.matchRoute(pathname));\n            if (apiHandler && hasExplicitAPIRoute) {\n              const apiRoutePattern =\n                matchedApiRoute?.route.path ||\n                apiRouteManager.matchRoute(pathname)?.route.path ||\n                urlPath;\n              emitFarmEvent({\n                type: \"route.matched\",\n                pathname,\n                route: apiRoutePattern,\n              });\n              emitFarmEvent({\n                type: \"api.request.start\",\n                pathname,\n                route: apiRoutePattern,\n                method,\n              });\n              try {\n                // Convert Node.js request to Web Request\n                const url = `http://${req.headers.host || \"localhost:3000\"}${req.url}`;\n                const headers = new Headers();\n                for (const [key, value] of Object.entries(req.headers)) {\n                  if (value) {\n                    headers.set(key, Array.isArray(value) ? value.join(\", \") : value);\n                  }\n                }\n\n                // Get body for POST/PUT/PATCH\n                let body: Buffer | undefined;\n                if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n                  body = await readNodeRequestBody(req as any, currentServerConfig.bodySizeLimit);\n                }\n\n                const request = new Request(url, {\n                  method: req.method,\n                  headers,\n                  body: toRequestBody(body),\n                });\n\n                const apiLifecyclePayload = {\n                  pathname: new URL(url).pathname,\n                  method,\n                  routePath: apiRoutePattern,\n                };\n                const invokeAPIHandler = async (runtimeRequest: Request) => {\n                  const handledRequest: Request = pm\n                    ? await pm.runHookSerial(\n                        \"beforeApiHandler\",\n                        runtimeRequest,\n                        apiLifecyclePayload,\n                      )\n                    : runtimeRequest;\n\n                  const response = await apiHandler(handledRequest);\n                  return pm\n                    ? await pm.runHookSerial(\"afterApiHandler\", response, apiLifecyclePayload)\n                    : response;\n                };\n                const handledResponse: Response = pm\n                  ? await pm.runRuntimeRequest(request, invokeAPIHandler, {\n                      kind: \"api\",\n                      route: {\n                        pathname: apiLifecyclePayload.pathname,\n                        pattern: apiLifecyclePayload.routePath,\n                      },\n                    })\n                  : await invokeAPIHandler(request);\n\n                const duration = Date.now() - startTime;\n                emitFarmEvent({\n                  type: \"api.request.complete\",\n                  pathname,\n                  route: apiRoutePattern,\n                  method,\n                  status: handledResponse.status,\n                  durationMs: duration,\n                });\n                logResponse(method, urlPath, handledResponse.status, duration, \"API\");\n\n                // Send response\n                await sendWebResponse(res, handledResponse);\n                return;\n              } catch (error) {\n                const duration = Date.now() - startTime;\n                emitFarmEvent({\n                  type: \"api.error\",\n                  pathname,\n                  route: apiRoutePattern,\n                  method,\n                  durationMs: duration,\n                  error,\n                });\n                const bodyErrorResponse = createFarmRequestBodyErrorResponse(error);\n                if (bodyErrorResponse) {\n                  logResponse(method, urlPath, bodyErrorResponse.status, duration, \"API\");\n                  await sendWebResponse(res, bodyErrorResponse);\n                  return;\n                }\n                await emitPluginError(\"api-handler\", error, {\n                  urlPath,\n                  method,\n                });\n                logger.error(`API route error: ${error}`);\n                res.statusCode = 500;\n                res.setHeader(\"Content-Type\", \"application/json\");\n                res.end(JSON.stringify({ error: \"Internal server error\" }));\n                return;\n              }\n            }\n\n            if (farmDocsAPIHandler && farmDocsDevRuntime?.isFarmDocsAPIRequest(pathname)) {\n              try {\n                const url = `http://${req.headers.host || \"localhost:3000\"}${req.url}`;\n                const headers = new Headers();\n                for (const [key, value] of Object.entries(req.headers)) {\n                  if (value) {\n                    headers.set(key, Array.isArray(value) ? value.join(\", \") : value);\n                  }\n                }\n\n                let body: Buffer | undefined;\n                if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n                  body = await readNodeRequestBody(req as any, currentServerConfig.bodySizeLimit);\n                }\n\n                const request = new Request(url, {\n                  method: req.method,\n                  headers,\n                  body: toRequestBody(body),\n                });\n\n                const apiLifecyclePayload = {\n                  pathname,\n                  method,\n                  routePath: urlPath,\n                };\n                const invokeDocsAPIHandler = async (runtimeRequest: Request) => {\n                  const handledRequest: Request = pm\n                    ? await pm.runHookSerial(\n                        \"beforeApiHandler\",\n                        runtimeRequest,\n                        apiLifecyclePayload,\n                      )\n                    : runtimeRequest;\n                  const response = await farmDocsAPIHandler(handledRequest);\n                  if (!response) {\n                    return new Response(null, { status: 404 });\n                  }\n                  return pm\n                    ? await pm.runHookSerial(\"afterApiHandler\", response, apiLifecyclePayload)\n                    : response;\n                };\n                const docsResponse = pm\n                  ? await pm.runRuntimeRequest(request, invokeDocsAPIHandler, {\n                      kind: \"docs\",\n                      route: {\n                        pathname,\n                        pattern: apiLifecyclePayload.routePath,\n                      },\n                    })\n                  : await invokeDocsAPIHandler(request);\n                if (docsResponse) {\n                  const duration = Date.now() - startTime;\n                  logResponse(method, urlPath, docsResponse.status, duration, \"API\");\n                  await sendWebResponse(res, docsResponse);\n                  return;\n                }\n              } catch (error) {\n                const bodyErrorResponse = createFarmRequestBodyErrorResponse(error);\n                if (bodyErrorResponse) {\n                  await sendWebResponse(res, bodyErrorResponse);\n                  return;\n                }\n                await emitPluginError(\"docs-api-handler\", error, {\n                  urlPath,\n                  method,\n                });\n                logger.error(`Docs API route error: ${error}`);\n                res.statusCode = 500;\n                res.setHeader(\"Content-Type\", \"application/json\");\n                res.end(JSON.stringify({ error: \"Internal server error\" }));\n                return;\n              }\n            }\n\n            const duration = Date.now() - startTime;\n            logResponse(method, urlPath, 404, duration, \"API\");\n            res.statusCode = 404;\n            res.setHeader(\"Content-Type\", \"application/json\");\n            res.end(JSON.stringify({ error: \"API route not found\", pathname }));\n            return;\n          }\n\n          // Skip internal Vite requests\n          if (req.url?.startsWith(\"/@\") || req.url?.startsWith(\"/node_modules\")) {\n            return next();\n          }\n\n          // Dotted paths are usually static assets (modules, images, source\n          // maps), but dots are also valid inside route segments and in\n          // application metadata routes (/manifest.webmanifest, /sitemap.xml,\n          // /robots.txt, metadata images). Only skip the router when the\n          // request maps to a real file on disk or nothing in the app matches\n          // the pathname.\n          if (\n            shouldBypassFarmRouterForDottedPath(requestPathname, farmApp?.getRouteManager(), [\n              server.config.publicDir,\n              server.config.root,\n            ])\n          ) {\n            return next();\n          }\n\n          // Handle SPA page-data requests for client-side navigation\n          if (req.url?.startsWith(\"/__farm/page-data\")) {\n            const urlObj = parsedRequestUrl;\n            const targetPath = urlObj.searchParams.get(\"path\") || \"/\";\n\n            try {\n              const request = createRequestFromNodeRequest(\n                req,\n                urlObj,\n                createFarmNodeRequestAbortSignal(req, res),\n              );\n              const deploymentMismatch = getFarmDeploymentMismatch(\n                request,\n                farmConfig.deploymentId,\n              );\n              if (deploymentMismatch) {\n                await sendWebResponse(\n                  res,\n                  createFarmDeploymentMismatchResponse(deploymentMismatch),\n                );\n                return;\n              }\n\n              const targetRequestUrl = new URL(targetPath, request.url);\n              const targetRequest = new Request(targetRequestUrl, {\n                method: \"GET\",\n                headers: request.headers,\n                signal: request.signal,\n              });\n              await farmApp.getServerRenderer().runWithRequestContext(targetRequest, async () => {\n                const routeManager = farmApp.getRouteManager();\n                if (pm) {\n                  await pm.runHookParallel(\"beforeRouteMatch\", {\n                    pathname: targetPath,\n                    method: req.method || \"GET\",\n                  });\n                }\n                const interceptFromHeader =\n                  request.headers.get(\"x-farm-intercept-from\") || undefined;\n                const match = routeManager.matchRoute(targetRequestUrl.pathname, {\n                  interceptFrom: interceptFromHeader,\n                });\n                if (pm) {\n                  await pm.runHookParallel(\"afterRouteMatch\", {\n                    pathname: targetPath,\n                    matched: !!match?.route,\n                    routePattern: match?.route?.pattern || null,\n                    params: match?.params || {},\n                    layoutPatterns: (match?.layouts || []).map((l) => l.pattern),\n                  });\n                }\n\n                if (!match) {\n                  res.statusCode = 404;\n                  res.setHeader(\"Content-Type\", \"application/json\");\n                  res.end(JSON.stringify({ error: \"Route not found\" }));\n                  return;\n                }\n\n                const { route, params, layouts, slots } = match;\n\n                // Check if route was found\n                if (!route) {\n                  res.statusCode = 404;\n                  res.setHeader(\"Content-Type\", \"application/json\");\n                  res.end(JSON.stringify({ error: \"Route not found\" }));\n                  return;\n                }\n\n                // Load route module to get metadata\n                const routeModule = await routeManager.loadRouteModule(route.modulePath);\n                const loadingBoundary = routeManager.getMatchingLoading(targetRequestUrl.pathname);\n                const loadingModule = loadingBoundary\n                  ? await routeManager.loadRouteModule(loadingBoundary.modulePath)\n                  : null;\n\n                const navigationManifest = routeManager.generateClientManifest(server.config.root);\n                const moduleMetadata =\n                  navigationManifest.routes.find((entry) => entry.pattern === route.pattern) ??\n                  getClientModuleMetadata(route.modulePath, server.config.root);\n                const isClientComponent = moduleMetadata.isClientComponent;\n                const shouldHydrate = moduleMetadata.shouldHydrate;\n\n                // Collect metadata from layouts and page\n                let mergedMetadata: Record<string, any> = {};\n                const layoutModules = await Promise.all(\n                  layouts.map((layout) => routeManager.loadLayoutModule(layout.modulePath)),\n                );\n                const layoutHydrationMetadata = layouts.map(\n                  (layout) =>\n                    navigationManifest.layouts.find((entry) => entry.pattern === layout.pattern) ??\n                    getClientModuleMetadata(layout.modulePath, server.config.root),\n                );\n                const shouldHydrateLayout = layoutHydrationMetadata.some(\n                  (metadata) => metadata.shouldHydrate,\n                );\n                const hydrationStrategies = [\n                  ...(shouldHydrate && moduleMetadata.islandStrategy\n                    ? [moduleMetadata.islandStrategy]\n                    : []),\n                  ...layoutHydrationMetadata.flatMap((metadata) =>\n                    metadata.shouldHydrate && metadata.islandStrategy\n                      ? [metadata.islandStrategy]\n                      : [],\n                  ),\n                ];\n                const hydrationIslandStrategy = hydrationStrategies.every(\n                  (strategy) => strategy === hydrationStrategies[0],\n                )\n                  ? (hydrationStrategies[0] ?? \"load\")\n                  : \"load\";\n\n                // Build search params\n                const targetUrl = new URL(targetPath, \"http://localhost\");\n                const searchParams = searchParamsToObject(targetUrl.searchParams);\n                const routeContext = await resolveFarmRouteContext(farmApp.getConfig(), {\n                  request: targetRequest,\n                  params,\n                  search: searchParams,\n                  path: targetUrl.pathname,\n                });\n                const routeProps = await parseRouteModuleProps(routeModule as RouteModuleLike, {\n                  props: withFarmRouteContext(\n                    {\n                      params,\n                      searchParams: Promise.resolve(searchParams),\n                      path: targetUrl.pathname,\n                    },\n                    routeContext,\n                  ),\n                  search: searchParams,\n                  routePath: route.pattern,\n                });\n\n                // Collect metadata exactly the way a full-page load does:\n                // static and generated interleaved per layer, deep-merged with\n                // mergeMetadata so a page's openGraph extends a layout's\n                // instead of replacing it. Layouts receive the params,\n                // the route receives its full resolved props.\n                for (const layoutModule of layoutModules) {\n                  mergedMetadata = mergeMetadata(mergedMetadata, (layoutModule as any).metadata);\n                  if (typeof (layoutModule as any).generateMetadata === \"function\") {\n                    mergedMetadata = mergeMetadata(\n                      mergedMetadata,\n                      await (layoutModule as any).generateMetadata({ params: routeProps.params }),\n                    );\n                  }\n                }\n                mergedMetadata = mergeMetadata(mergedMetadata, (routeModule as any).metadata);\n                if (typeof (routeModule as any).generateMetadata === \"function\") {\n                  mergedMetadata = mergeMetadata(\n                    mergedMetadata,\n                    await (routeModule as any).generateMetadata(routeProps),\n                  );\n                }\n\n                const routeSlots = await Promise.all(\n                  slots.map(async (slot) => {\n                    const slotModule = await routeManager.loadRouteModule(slot.route.modulePath);\n                    const slotMetadata =\n                      navigationManifest.slots.find(\n                        (entry) =>\n                          entry.name === slot.name &&\n                          entry.ownerPattern === slot.ownerPattern &&\n                          entry.pattern === slot.route.pattern,\n                      ) ?? getClientModuleMetadata(slot.route.modulePath, server.config.root);\n                    const slotContext = await resolveFarmRouteContext(farmApp.getConfig(), {\n                      request: targetRequest,\n                      params: slot.params,\n                      search: searchParams,\n                      path: targetUrl.pathname,\n                    });\n                    const slotProps = await parseRouteModuleProps(slotModule as RouteModuleLike, {\n                      props: withFarmRouteContext(\n                        {\n                          params: slot.params,\n                          searchParams: Promise.resolve(searchParams),\n                          path: targetUrl.pathname,\n                        },\n                        slotContext,\n                      ),\n                      search: searchParams,\n                      routePath: slot.route.pattern,\n                    });\n\n                    return {\n                      name: slot.name,\n                      ownerPattern: slot.ownerPattern,\n                      containerId: slot.containerId,\n                      interception: slot.interception,\n                      fallback: slot.fallback,\n                      modulePath: slot.route.modulePath,\n                      renderModule: slotModule,\n                      isClientComponent: slotMetadata.isClientComponent,\n                      shouldHydrate: slotMetadata.shouldHydrate,\n                      props: {\n                        params: slotProps.params,\n                        search: (slotProps as any).search,\n                        searchParams: (slotProps as any).search,\n                        ...(\"data\" in slotProps ? { data: (slotProps as any).data } : {}),\n                        ...((slotProps as any).__farmCanonicalPath\n                          ? {\n                              __farmCanonicalPath: (slotProps as any).__farmCanonicalPath,\n                            }\n                          : {}),\n                        ...((slotProps as any).__farmRoutePropsResolved\n                          ? { __farmRoutePropsResolved: true }\n                          : {}),\n                        path: targetUrl.pathname,\n                      },\n                    };\n                  }),\n                );\n\n                // Convert absolute paths to URL paths (relative to project root)\n                const projectRoot = server.config.root;\n                const toUrlPath = (absolutePath: string) =>\n                  toViteModuleId(absolutePath, projectRoot);\n\n                const renderPlan = createFarmRouteRenderPlan({\n                  pageShouldHydrate: shouldHydrate,\n                  layoutShouldHydrate: shouldHydrateLayout,\n                  islandStrategy: hydrationIslandStrategy,\n                  rendering: resolveRouteRenderingConfig(routeModule as any),\n                });\n                const destinationLayoutPatterns = layouts.map((layout) => layout.pattern);\n                const layoutStartIndex = getSharedLayoutPrefixLength(\n                  parseFarmLayoutChainHeader(request.headers.get(\"x-farm-layout-chain\")),\n                  destinationLayoutPatterns,\n                );\n                const fragmentHtml = await farmApp.getServerRenderer().renderNavigationFragment({\n                  PageComponent: (routeModule as any).default,\n                  LoadingComponent: (loadingModule as any)?.default,\n                  pageProps: routeProps as Record<string, unknown>,\n                  params,\n                  layouts: layouts.map((layout, index) => ({\n                    pattern: layout.pattern,\n                    module: layoutModules[index] as any,\n                  })),\n                  layoutStartIndex,\n                  slots: routeSlots.map((slot) => ({\n                    name: slot.name,\n                    ownerPattern: slot.ownerPattern,\n                    containerId: slot.containerId,\n                    module: slot.renderModule as any,\n                    props: slot.props,\n                  })),\n                  pageShouldHydrate: shouldHydrate,\n                  layoutShouldHydrate: shouldHydrateLayout,\n                  islandStrategy: hydrationIslandStrategy,\n                });\n\n                // Return page data for SPA navigation\n                const pageData = {\n                  props: {\n                    params: routeProps.params,\n                    search: (routeProps as any).search,\n                    searchParams: (routeProps as any).search,\n                    ...(\"data\" in routeProps ? { data: (routeProps as any).data } : {}),\n                    ...((routeProps as any).__farmCanonicalPath\n                      ? {\n                          __farmCanonicalPath: (routeProps as any).__farmCanonicalPath,\n                        }\n                      : {}),\n                    ...((routeProps as any).__farmRoutePropsResolved\n                      ? { __farmRoutePropsResolved: true }\n                      : {}),\n                  },\n                  canonicalPath: (routeProps as any).__farmCanonicalPath,\n                  modulePath: toUrlPath(route.modulePath),\n                  loadingModulePath: loadingBoundary ? toUrlPath(loadingBoundary.modulePath) : null,\n                  isClientComponent: routeSlots.length > 0 ? false : isClientComponent,\n                  pageShouldHydrate: shouldHydrate,\n                  layoutShouldHydrate: shouldHydrateLayout,\n                  shouldHydrate:\n                    shouldHydrate ||\n                    shouldHydrateLayout ||\n                    routeSlots.some((slot) => slot.isClientComponent || slot.shouldHydrate),\n                  islandStrategy: hydrationIslandStrategy,\n                  renderPlan,\n                  fragment: {\n                    html: fragmentHtml,\n                    layoutPatterns: destinationLayoutPatterns,\n                  },\n                  // The full merged metadata, not a title/description\n                  // projection: client navigation reconciles the same head\n                  // tags a full-page load renders, so it needs the same input.\n                  metadata: mergedMetadata,\n                  layoutModules: layouts.map((l) => toUrlPath(l.modulePath)),\n                  routeSlots: routeSlots.map(({ renderModule: _renderModule, ...slot }) => ({\n                    ...slot,\n                    modulePath: toUrlPath(slot.modulePath),\n                  })),\n                  interception: routeSlots.some((slot) => slot.interception)\n                    ? {\n                        from: interceptFromHeader,\n                        slots: routeSlots\n                          .filter((slot) => slot.interception)\n                          .map((slot) => slot.name),\n                      }\n                    : undefined,\n                  i18n: getFarmI18nClientSnapshot(),\n                };\n\n                await sendWebResponse(\n                  res,\n                  createDeferredDataResponse(\n                    pageData,\n                    {\n                      status: 200,\n                      headers: {\n                        \"Cache-Control\": getFarmFragmentCacheControl(renderPlan),\n                        \"X-Farm-Navigation\": \"html-fragment\",\n                        Vary: \"X-Farm-Layout-Chain\",\n                        [FARM_DEPLOYMENT_ID_HEADER]: farmConfig.deploymentId,\n                      },\n                    },\n                    {\n                      onError(error, id) {\n                        logger.error(`Deferred route data ${id} failed: ${error}`);\n                      },\n                    },\n                  ),\n                );\n                return;\n              });\n              return;\n            } catch (error) {\n              const failure = resolveFarmPageDataFailure(error);\n              if (failure.status >= 500) {\n                await emitPluginError(\"page-data\", error, {\n                  path: targetPath,\n                });\n                console.error(\"[Farm.js] Page data error:\", error);\n              }\n              res.statusCode = failure.status;\n              res.setHeader(\"Content-Type\", \"application/json\");\n              res.end(JSON.stringify(failure.payload));\n              return;\n            }\n          }\n\n          const startTime = Date.now();\n          const method = req.method || \"GET\";\n          const urlPath = req.url || \"/\";\n          const pathname = resolveFarmRequestURL(req as FarmRequest, {\n            trustProxy: currentServerConfig.trustProxy,\n          }).pathname;\n          const routeManager = farmApp.getRouteManager();\n          const hasBeforeRouteMatchHook = pm?.hasHook(\"beforeRouteMatch\") ?? false;\n          const hasAfterRouteMatchHook = pm?.hasHook(\"afterRouteMatch\") ?? false;\n          const hasBeforeRequestHook = pm?.hasHook(\"beforeRequest\") ?? false;\n          const hasBeforeRenderHook = pm?.hasHook(\"beforeRender\") ?? false;\n          const hasAfterResponseHook = pm?.hasHook(\"afterResponse\") ?? false;\n          const hasHTMLTransformHook =\n            (pm?.hasHook(\"transformHTML\") ?? false) || (pm?.hasHook(\"afterRender\") ?? false);\n          const hasRuntimeRequestHooks = pm?.hasRuntimeRequestHooks() ?? false;\n          const hasRuntimeAfterHook = pm?.hasRuntimeHook(\"after\") ?? false;\n\n          if (pm && hasBeforeRouteMatchHook) {\n            await pm.runHookParallel(\"beforeRouteMatch\", {\n              pathname,\n              method,\n            });\n          }\n          const routeMatch = routeManager.matchRoute(pathname);\n          if (pm && hasAfterRouteMatchHook) {\n            await pm.runHookParallel(\"afterRouteMatch\", {\n              pathname,\n              matched: !!routeMatch?.route,\n              routePattern: routeMatch?.route?.pattern || null,\n              params: routeMatch?.params || {},\n              layoutPatterns: (routeMatch?.layouts || []).map((l) => l.pattern),\n            });\n          }\n          const renderPayload = {\n            pathname,\n            method,\n            routePattern: routeMatch?.route?.pattern || null,\n            params: routeMatch?.params || {},\n          };\n          let runtimeSession: FarmPluginRuntimeSession | undefined;\n          if (pm && hasRuntimeRequestHooks) {\n            try {\n              runtimeSession = await pm.beginRuntimeRequest(\n                createRequestFromNodeRequest(req, new URL(fullUrl)),\n                {\n                  kind: \"page\",\n                  route: {\n                    pathname,\n                    pattern: renderPayload.routePattern,\n                    params: renderPayload.params,\n                  },\n                },\n              );\n              pm.copyRequestContext(runtimeSession.request, req);\n              applyWebRequestToNodeRequest(runtimeSession.request, req);\n\n              if (runtimeSession.response) {\n                const response = await pm.endRuntimeRequest(\n                  runtimeSession,\n                  runtimeSession.response,\n                );\n                await sendWebResponse(res, response);\n                return;\n              }\n            } catch (error) {\n              await emitPluginError(\"runtime-before\", error, { pathname });\n              res.statusCode = 500;\n              res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n              res.end(\"Internal Server Error\");\n              return;\n            }\n          }\n\n          // Runtime response transforms need the complete byte stream, including\n          // responses completed by middleware or beforeRequest hooks.\n          const shouldInterceptResponse = Boolean(\n            pm &&\n            (hasAfterResponseHook ||\n              hasHTMLTransformHook ||\n              (runtimeSession && hasRuntimeAfterHook)),\n          );\n          const responseInterceptor =\n            pm && shouldInterceptResponse\n              ? interceptFarmDevPageResponse({\n                  req,\n                  res,\n                  pm,\n                  runtimeSession,\n                  hasRuntimeAfterHook,\n                  hasAfterResponseHook,\n                  hasHTMLTransformHook,\n                  renderPayload,\n                  method,\n                  urlPath,\n                  pathname,\n                  startTime,\n                  logResponse,\n                  emitError: (error) => emitPluginError(\"response-end\", error, { pathname }),\n                })\n              : undefined;\n\n          try {\n            if (middlewareManager?.hasMiddleware()) {\n              const middlewareRequest = createRequestFromNodeRequest(req, new URL(fullUrl));\n              const handled = await farmApp\n                .getServerRenderer()\n                .runWithRequestContext(middlewareRequest, () =>\n                  middlewareManager!.execute(req, res),\n                );\n              if (handled) {\n                if (!responseInterceptor?.isEnded()) {\n                  const duration = Date.now() - startTime;\n                  logResponse(method, urlPath, res.statusCode || 200, duration, \"PAGE\");\n                }\n                return; // Middleware handled the response\n              }\n            }\n\n            // Run beforeRequest hooks\n            if (pm && hasBeforeRequestHook) {\n              const currentPathname = new URL(\n                req.url || \"/\",\n                `http://${req.headers.host || \"localhost:3000\"}`,\n              ).pathname;\n              const hasLocalPageRoute = Boolean(routeManager.matchRoute(currentPathname)?.route);\n              await pm.runHookParallelFiltered(\n                \"beforeRequest\",\n                (plugin) => !hasLocalPageRoute || plugin.name !== FARM_CONFIG_REWRITES_PLUGIN_NAME,\n                req,\n                res,\n              );\n            }\n\n            if (res.writableEnded || responseInterceptor?.isEnded()) {\n              if (!responseInterceptor?.isEnded()) {\n                const duration = Date.now() - startTime;\n                logResponse(method, urlPath, res.statusCode || 200, duration, \"PAGE\");\n              }\n              return;\n            }\n\n            // Note: __FARM_PROPS__ is set by the renderer with actual page props (params, searchParams)\n\n            const renderer = farmApp.getServerRenderer();\n            if (pm && hasBeforeRenderHook) {\n              await pm.runHookParallel(\"beforeRender\", renderPayload);\n            }\n            await renderer.renderPage(req as any, res as any);\n            if (!shouldInterceptResponse) {\n              logResponse(method, urlPath, res.statusCode || 200, Date.now() - startTime, \"PAGE\");\n            }\n          } catch (error) {\n            // Log error response\n            const duration = Date.now() - startTime;\n            logResponse(method, urlPath, 500, duration, \"PAGE\");\n            if (pm && runtimeSession) {\n              await pm.failRuntimeRequest(runtimeSession, error);\n            }\n            await emitPluginError(\"render-page\", error, { pathname });\n            next(error);\n          }\n        }),\n      );\n    },\n\n    async resolveId(id, importer, resolveOptions) {\n      if (typeof fontImports.resolveId === \"function\") {\n        const fontId = await fontImports.resolveId.call(this, id, importer, resolveOptions);\n        if (fontId) return fontId;\n      }\n\n      if (typeof imageImports.resolveId === \"function\") {\n        const imageId = await imageImports.resolveId.call(this, id, importer, resolveOptions);\n        if (imageId) return imageId;\n      }\n\n      if (parseProgrammaticRouteModuleId(id)) {\n        return id;\n      }\n\n      if (isFarmClientVirtualId(id)) {\n        return id;\n      }\n\n      if (id === \"/@farm/server\") {\n        return id;\n      }\n\n      // Virtual manifest module - TanStack Start pattern\n      if (id === \"virtual:farm-manifest\" || id === \"/@farm/manifest\") {\n        return \"/@farm/manifest\";\n      }\n    },\n\n    async load(id) {\n      if (typeof fontImports.load === \"function\") {\n        const fontModule = await fontImports.load.call(this, id);\n        if (fontModule) return fontModule;\n      }\n\n      if (typeof imageImports.load === \"function\") {\n        const imageModule = await imageImports.load.call(this, id);\n        if (imageModule) return imageModule;\n      }\n\n      if (parseProgrammaticRouteModuleId(id)) {\n        const renderer = farmApp?.getConfig().renderer || resolveFarmRenderer(options.renderer);\n        return generateProgrammaticRouteModule(id, server?.config.root || options.root, renderer);\n      }\n\n      if (isFarmClientVirtualId(id)) {\n        const resolvedConfig = farmApp?.getConfig();\n        const renderer = resolvedConfig?.renderer || resolveFarmRenderer(options.renderer);\n        const integrations = resolvedConfig?.integrations || options.integrations;\n        const root = resolvedConfig?.root || server?.config.root || process.cwd();\n        const docs = resolvedConfig?.docs;\n        const adapterOwnsDocsRuntime = Boolean(\n          isReactRenderer(renderer) && docs?.adapter?.server && docs.adapter.react,\n        );\n        const devtools = resolvedConfig?.devtools ?? resolveFarmDevtoolsConfig(false, \"production\");\n        const [docsRuntime, docsSearchRuntime, devtoolsClientRuntime] = await Promise.all([\n          docs?.enabled ? loadFarmDocsDevRuntime() : null,\n          docs?.enabled && !adapterOwnsDocsRuntime ? loadFarmDocsSearchDevRuntime() : null,\n          devtools.enabled ? loadFarmDevtoolsClientRuntime() : null,\n        ]);\n        const docsSearchEnabled = docsSearchRuntime?.isFarmDocsSearchEnabled(docs) ?? false;\n        const generatedDocsSearchRuntime = docsSearchRuntime\n          ? docsSearchRuntime.generateFarmDocsSearchClientRuntime(\n              docsSearchEnabled,\n              docsSearchEnabled\n                ? docsSearchRuntime.resolveFarmDocsSearchClientModule(root)\n                : undefined,\n            )\n          : EMPTY_FARM_DOCS_SEARCH_CLIENT_RUNTIME;\n        const generatedDevtoolsClientRuntime = devtoolsClientRuntime\n          ? devtoolsClientRuntime.generateFarmDevtoolsClientRuntime(devtools)\n          : \"\";\n        const generatedDevIndicatorsClientRuntime = farmApp\n          ? generateFarmDevIndicatorsClientRuntime(farmApp.getConfig().devIndicators)\n          : \"\";\n        const integrationProviders = isReactRenderer(renderer)\n          ? getIntegrationProviders(integrations)\n          : [];\n        const isolatedHydrationMode = resolveFarmIsolatedClientHydrationMode(\n          resolvedConfig?.experimental?.isolatedClientHydration,\n          {\n            serverComponents: resolvedConfig?.experimental?.serverComponents === true,\n            hasUnsupportedIntegrationProvider: integrationProviders\n              .filter((provider) => provider.component || provider.type === \"clerk\")\n              .some((provider) => provider.supportsIsolatedHydration !== true),\n          },\n        );\n\n        return generateClientCode(\n          integrationProviders,\n          [\n            ...getIntegrationDocumentNavigationMatchers(integrations),\n            ...(docsRuntime?.getFarmDocsDocumentNavigationMatchers(docs) ?? []),\n          ],\n          generatedDocsSearchRuntime,\n          `${generatedDevtoolsClientRuntime}\\n${generatedDevIndicatorsClientRuntime}`,\n          resolvedConfig?.plugins || [],\n          root,\n          resolvedConfig?.srcDir || options.srcDir || \"src\",\n          resolvedConfig?.publicRuntimeConfig || options.publicRuntimeConfig,\n          isReactRenderer(renderer) ? docs?.adapter?.react : undefined,\n          renderer,\n          isolatedHydrationMode === \"enabled\",\n          resolvedConfig?.trailingSlash ?? false,\n          resolvedConfig?.basePath ?? \"/\",\n          generateClientCachePersistenceCode(\n            resolveFarmClientCacheAdapterEntry(root, resolvedConfig?.cache),\n          ),\n        );\n      }\n\n      if (id === \"/@farm/server\") {\n        return generateServerCode();\n      }\n\n      // Virtual manifest module - TanStack Start pattern\n      // Manifest is generated at build time and inlined\n      if (id === \"/@farm/manifest\") {\n        const routeManager = farmApp?.getRouteManager();\n        if (!routeManager) {\n          return `\nexport const getManifest = () => ({\n  routes: {},\n  layouts: {},\n  slots: [],\n  clientEntry: \"/@farm/client.js\",\n  sharedAssets: []\n});\n`;\n        }\n\n        const manifest = routeManager.generateClientManifest(server.config.root);\n\n        // Convert to full manifest format\n        const fullManifest = {\n          clientEntry: \"/@farm/client.js\",\n          routes: {} as Record<string, any>,\n          layouts: {} as Record<string, any>,\n          slots: [] as Array<Record<string, any>>,\n          sharedAssets: [\n            {\n              tag: \"link\",\n              attrs: { rel: \"stylesheet\", href: \"/src/app/globals.css\" },\n            },\n          ],\n        };\n\n        // Convert routes array to object keyed by pattern\n        for (const route of manifest.routes) {\n          fullManifest.routes[route.pattern] = {\n            modulePath: route.modulePath,\n            pattern: route.pattern,\n            segments: route.segments,\n            search: route.search,\n            isClientComponent: route.isClientComponent,\n            shouldHydrate: route.shouldHydrate,\n            islandStrategy: route.islandStrategy,\n            renderPlan: route.renderPlan,\n            preloads: [route.modulePath], // In dev, preload is just the module\n            assets: [],\n          };\n        }\n\n        // Convert layouts array to object keyed by pattern\n        for (const layout of manifest.layouts) {\n          fullManifest.layouts[layout.pattern] = {\n            modulePath: layout.modulePath,\n            pattern: layout.pattern,\n            shouldHydrate: layout.shouldHydrate,\n            islandStrategy: layout.islandStrategy,\n            preloads: [layout.modulePath],\n            assets: [],\n          };\n        }\n\n        for (const slot of manifest.slots) {\n          fullManifest.slots.push({\n            ...slot,\n            preloads: [slot.modulePath],\n            assets: [],\n          });\n        }\n\n        return `\n// Auto-generated manifest for SPA navigation (TanStack Start pattern)\n// This manifest is inlined in the server bundle - no file on disk\n// Client receives this via window.__FARM_MANIFEST__ in HTML\nexport const getManifest = () => (${JSON.stringify(fullManifest, null, 2)});\nexport const manifest = getManifest();\n`;\n      }\n    },\n\n    async transform(code, id, transformOptions) {\n      if (!transformOptions?.ssr) {\n        const currentConfig = (farmApp?.getConfig() ?? options) as FarmVitePluginOptions;\n        if (currentConfig.experimental?.serverActions !== true) {\n          // Without the server-function transform there is no client stub for\n          // server queries: bundling the defining module into the browser\n          // executes the server handler there. Fail with an actionable\n          // boundary error instead of Vite's Node-builtin externalization\n          // failure at runtime.\n          const violation = findClientServerFnViolation(code, id);\n          if (violation) {\n            this.error(formatServerFnBoundaryError(violation, id));\n          }\n        }\n      }\n\n      if (!transformOptions?.ssr && shouldInspectClientBoundary(id, code)) {\n        warnClientBoundaryOnce(this, id, code, farmApp?.getConfig() ?? options);\n      }\n\n      if (typeof imageImports.transform === \"function\") {\n        const imageModule = await imageImports.transform.call(this, code, id, transformOptions);\n        if (imageModule) return imageModule;\n      }\n\n      let transformedCode = code;\n      let transformed = false;\n\n      if (typeof fontImports.transform === \"function\") {\n        const fontResult = await fontImports.transform.call(\n          this,\n          transformedCode,\n          id,\n          transformOptions,\n        );\n        const fontCode = typeof fontResult === \"string\" ? fontResult : fontResult?.code;\n        if (fontCode) {\n          transformedCode = fontCode;\n          transformed = true;\n        }\n      }\n\n      if (transformOptions?.ssr && server) {\n        const rewrittenImports = rewriteEarlySsrRelativeImports({\n          code: transformedCode,\n          id,\n          root: server.config.root,\n          parse: (source) => this.parse(source) as unknown as FarmModuleAstNode,\n        });\n        if (rewrittenImports) {\n          transformedCode = rewrittenImports;\n          transformed = true;\n        }\n      }\n\n      if (hasUseClientDirective(transformedCode)) {\n        const clientBoundarySource = transformedCode;\n        const moduleInfo = this.getModuleInfo(id);\n        if (moduleInfo) {\n          (moduleInfo as any).isClientComponent = true;\n        }\n\n        transformedCode = stripUseClientDirective(transformedCode);\n        transformed = true;\n\n        const currentConfig = (farmApp?.getConfig() ?? options) as FarmVitePluginOptions;\n        const configuredProviders = getIntegrationProviders(currentConfig.integrations).filter(\n          (provider) => provider.component || provider.type === \"clerk\",\n        );\n        const isolatedHydrationEnabled =\n          resolveFarmIsolatedClientHydrationMode(\n            currentConfig.experimental?.isolatedClientHydration,\n            {\n              serverComponents: currentConfig.experimental?.serverComponents === true,\n              hasUnsupportedIntegrationProvider: configuredProviders.some(\n                (provider) => provider.supportsIsolatedHydration !== true,\n              ),\n            },\n          ) === \"enabled\" && isReactRenderer(resolveFarmRenderer(currentConfig.renderer));\n        let isolatedModuleReference: string | null = null;\n        const root = currentConfig.root || server?.config.root || process.cwd();\n        const cleanId = id.split(\"?\", 1)[0];\n        const selectedIsolatedModules =\n          options.isolatedClientBoundaryModules ??\n          farmApp?.getRouteManager().getIsolatedClientBoundaryModules(root);\n        const selectedForIsolatedHydration =\n          selectedIsolatedModules?.has(path.resolve(cleanId)) === true;\n        if (\n          isolatedHydrationEnabled &&\n          selectedForIsolatedHydration &&\n          isIsolatableClientBoundarySource(clientBoundarySource)\n        ) {\n          isolatedModuleReference = toViteModuleId(cleanId, root);\n          const transformedBoundary = transformIsolatedClientBoundaryModule({\n            code: transformedCode,\n            moduleReference: isolatedModuleReference,\n            islandStrategy: getIslandStrategyExport(clientBoundarySource) ?? \"load\",\n            parse: (source) => this.parse(source) as unknown as FarmModuleAstNode,\n          });\n          if (!transformedBoundary) {\n            this.error(\n              `[Farm.js] Could not compile isolated client boundary ${cleanId}. ` +\n                `Use experimental.isolatedClientHydration = \"analyze\" to inspect eligibility ` +\n                `or \"off\" to retain route-wide hydration.`,\n            );\n          }\n          transformedCode = transformedBoundary;\n        }\n\n        // Store client component for later injection\n        if (!farmApp) {\n          return {\n            code: transformedCode,\n            map: null,\n          };\n        }\n\n        const clientComponents = (farmApp as any).__clientComponents__ || new Set();\n        clientComponents.add(id);\n        (farmApp as any).__clientComponents__ = clientComponents;\n\n        // Add HMR support for client components\n        // This ensures React re-renders when the component updates\n        const isolatedHmrUpdate = isolatedModuleReference\n          ? `\n    if (\n      newModule &&\n      newModule.__farm_client_boundary_originals__ &&\n      window.__FARM_ISOLATED_HYDRATION_RUNTIME__\n    ) {\n      window.__FARM_ISOLATED_HYDRATION_RUNTIME__.updateModule(\n        ${JSON.stringify(isolatedModuleReference)},\n        newModule,\n      );\n      return;\n    }`\n          : \"\";\n        // Re-rendering the whole root on every edit only makes sense for a\n        // renderer that diffs the result against the live DOM. On Solid and\n        // Svelte `render()` tears the tree down and rebuilds it, so a one\n        // character change in any client component would wipe the page's\n        // state. Those renderers ship their own HMR integration (solid-refresh\n        // and svelte's hot API) which preserves component state, so leave the\n        // module for them to accept: appending our own `import.meta.hot.accept`\n        // here would swallow the update instead of letting theirs run.\n        const hmrCode = !shouldEmitFarmClientRootHmr(currentConfig.renderer)\n          ? \"\"\n          : `\nif (import.meta.hot) {\n  import.meta.hot.accept((newModule) => {\n    ${isolatedHmrUpdate}\n    if (newModule && newModule.default && window.__FARM_REACT_ROOT__) {\n      // Re-render with the new component\n      const React = window.__FARM_REACT__;\n      const props = window.__FARM_PROPS__ || {};\n      const nextElement = React.createElement(newModule.default, props);\n      const wrapProviders = window.__FARM_WRAP_PROVIDERS__;\n      const wrapClientGraph = window.__FARM_WRAP_CLIENT_GRAPH__;\n      Promise.resolve(\n        typeof wrapProviders === 'function' ? wrapProviders(nextElement) : nextElement\n      ).then((wrappedElement) => {\n        window.__FARM_REACT_ROOT__.render(\n          typeof wrapClientGraph === 'function'\n            ? wrapClientGraph(wrappedElement)\n            : wrappedElement\n        );\n      });\n    }\n  });\n}\n`;\n        return {\n          code: transformedCode + \"\\n\" + hmrCode,\n          map: null,\n        };\n      }\n\n      return transformed ? { code: transformedCode, map: null } : null;\n    },\n\n    async generateBundle(options, bundle) {\n      if (typeof fontImports.generateBundle === \"function\") {\n        await fontImports.generateBundle.call(this, options, bundle, false);\n      }\n      const clientManifest = generateClientManifest(bundle);\n      this.emitFile({\n        type: \"asset\",\n        fileName: \"farm-client-manifest.json\",\n        source: JSON.stringify(clientManifest, null, 2),\n      });\n    },\n\n    async closeBundle() {\n      // SSG: Pre-render static pages at build time\n      if (!farmApp) return;\n\n      try {\n        const routeManager = farmApp.getRouteManager();\n        if (!routeManager) return;\n\n        const { ssg: ssgPages, ssr: ssrRoutes } = await routeManager.collectSSGPages();\n\n        if (ssgPages.length === 0) {\n          logger.info(\"No SSG pages found - all pages will use SSR\");\n          return;\n        }\n\n        logger.info(`Found ${ssgPages.length} SSG pages, ${ssrRoutes.length} SSR routes`);\n        logger.info(\"Pre-rendering SSG pages...\");\n\n        const outDir = path.join(server?.config.root || process.cwd(), options.outDir || \"dist\");\n        const clientDir = path.join(outDir, \"client\");\n\n        // Pre-render each SSG page\n        for (const page of ssgPages) {\n          try {\n            const staticRequest = new Request(new URL(page.urlPath, \"http://farm.static\"));\n            await farmApp.getServerRenderer().runWithRequestContext(staticRequest, async () => {\n              // Load the route module\n              const mod = await routeManager.loadRouteModule(page.filePath);\n              if (!mod?.default) return;\n\n              // Find matching layouts\n              const { layouts } = routeManager.matchRoute(page.urlPath);\n              const layoutModules = await Promise.all(\n                layouts.map((l) => routeManager.loadLayoutModule(l.modulePath)),\n              );\n\n              // Render the page\n              const React = await import(\"react\");\n              const { renderToString } = await import(\"react-dom/server\");\n\n              const PageComponent = mod.default;\n              const pageProps = {\n                params: page.params,\n                searchParams: Promise.resolve({}),\n                path: page.urlPath,\n              };\n\n              let pageElement = React.createElement(\n                PageComponent as React.ComponentType<unknown>,\n                pageProps as React.Attributes,\n              );\n\n              // Wrap with layouts\n              for (let i = layoutModules.length - 1; i >= 0; i--) {\n                const layoutModule = layoutModules[i];\n                const LayoutComponent = layoutModule.default;\n                pageElement = React.createElement(\n                  LayoutComponent as React.ComponentType<unknown>,\n                  {\n                    children: pageElement,\n                    params: page.params,\n                  } as React.Attributes,\n                );\n              }\n\n              const html = renderToString(pageElement);\n\n              // Generate full HTML with proper structure\n              const i18nSnapshot = getFarmI18nClientSnapshot();\n              const i18nHead = renderFarmI18nStaticHead(page.urlPath, i18nSnapshot);\n              const fullHtml = `<!DOCTYPE html>\n<html lang=\"${escapeFarmHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n                i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n              }>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <link rel=\"icon\" href=\"data:,\">\n  <link rel=\"stylesheet\" href=\"/assets/globals.css\">\n  ${page.revalidate ? `<meta name=\"x-farm-revalidate\" content=\"${page.revalidate}\">` : \"\"}\n  ${i18nHead}\n</head>\n<body>\n  <div id=\"root\">${html}</div>\n  <script type=\"module\" src=\"/assets/client.js\"></script>\n</body>\n</html>`;\n\n              // Write to output directory\n              const outputPath =\n                page.urlPath === \"/\"\n                  ? path.join(clientDir, \"index.html\")\n                  : path.join(clientDir, page.urlPath + \".html\");\n\n              fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n              fs.writeFileSync(outputPath, fullHtml);\n\n              const revalidateInfo = page.revalidate ? ` (revalidate: ${page.revalidate}s)` : \"\";\n              logger.success(`  ✓ ${page.urlPath}${revalidateInfo}`);\n            });\n          } catch (error) {\n            logger.error(`  ✗ ${page.urlPath}: ${error}`);\n          }\n        }\n\n        // Write SSG manifest for server to know which pages are pre-rendered\n        const manifestPath = path.join(outDir, \"__ssg_manifest.json\");\n        fs.writeFileSync(\n          manifestPath,\n          JSON.stringify(\n            ssgPages.map((p) => ({\n              urlPath: p.urlPath,\n              params: p.params,\n              revalidate: p.revalidate,\n            })),\n            null,\n            2,\n          ),\n        );\n\n        logger.success(`SSG complete: ${ssgPages.length} pages pre-rendered`);\n      } catch (error) {\n        logger.error(`SSG build failed: ${error}`);\n      }\n    },\n\n    async handleHotUpdate(ctx: HmrContext) {\n      const { file, server, modules } = ctx;\n      if (initialPluginManager) {\n        try {\n          await initialPluginManager.runHookParallel(\"hmrUpdate\", {\n            file,\n            modules: modules.map((m) => m.id || m.url || \"\").filter(Boolean),\n          });\n        } catch (error) {\n          await initialPluginManager.runHookParallel(\"onError\", {\n            phase: \"hmrUpdate\",\n            error,\n            meta: { file },\n          });\n        }\n      }\n\n      const currentFarmConfig = farmApp?.getConfig();\n      const normalizedFile = file.replace(/\\\\/g, \"/\");\n      if (\n        currentFarmConfig &&\n        /\\/route\\.(?:ts|tsx|js|jsx)$/.test(normalizedFile) &&\n        getFarmAppDirectories(currentFarmConfig).some((appDir) =>\n          normalizedFile.startsWith(`${toPosixPath(appDir)}/api/`),\n        )\n      ) {\n        // Vite has not invalidated these modules yet. Refreshing only generated\n        // types leaves both HTTP and direct server calls bound to old handlers.\n        for (const mod of modules) server.moduleGraph.invalidateModule(mod);\n        await refreshRouteDiscovery?.(`updated ${file}`);\n        server.ws.send({ type: \"full-reload\", path: \"*\" });\n        return [];\n      }\n      const currentSrcRoot = currentFarmConfig\n        ? getFarmSourceRoots(currentFarmConfig)\n            .map((source) => path.join(source.root, source.srcDir).replace(/\\\\/g, \"/\"))\n            .find((sourceRoot) => normalizedFile.startsWith(`${sourceRoot}/`)) || null\n        : null;\n      if (\n        currentSrcRoot &&\n        normalizedFile.startsWith(`${currentSrcRoot}/`) &&\n        isProgrammaticRoutesFileName(normalizedFile)\n      ) {\n        logUpdate(\"PAGE\", `updated ${path.basename(file)}`);\n\n        for (const mod of modules) {\n          server.moduleGraph.invalidateModule(mod);\n        }\n\n        await refreshRouteDiscovery?.(`updated ${file}`);\n\n        server.ws.send({\n          type: \"full-reload\",\n          path: \"*\",\n        });\n\n        return [];\n      }\n\n      if (\n        currentSrcRoot &&\n        isPotentialProgrammaticRouteSourceFile(normalizedFile, currentSrcRoot) &&\n        fileContainsProgrammaticPageRoute(file)\n      ) {\n        const shortPath = normalizedFile.slice(currentSrcRoot.length + 1);\n        logUpdate(\"PAGE\", `updated ${shortPath}`);\n\n        for (const mod of modules) {\n          server.moduleGraph.invalidateModule(mod);\n        }\n\n        await refreshRouteDiscovery?.(`updated ${file}`);\n\n        server.ws.send({\n          type: \"full-reload\",\n          path: \"*\",\n        });\n\n        return [];\n      }\n\n      const isolatedHydrationMode = currentFarmConfig?.experimental?.isolatedClientHydration;\n      if (\n        currentSrcRoot &&\n        (isolatedHydrationMode === \"enabled\" || isolatedHydrationMode === \"analyze\") &&\n        /\\.[cm]?[jt]sx?$/.test(normalizedFile)\n      ) {\n        const routeManager = farmApp?.getRouteManager();\n        if (routeManager) {\n          const previousPlan = JSON.stringify(\n            routeManager.generateClientManifest(currentFarmConfig.root),\n          );\n          routeManager.invalidateClientManifest();\n          const nextPlan = JSON.stringify(\n            routeManager.generateClientManifest(currentFarmConfig.root),\n          );\n          const planChanged = previousPlan !== nextPlan;\n          const manifestModule = server.moduleGraph.getModuleById(\"/@farm/manifest\");\n          if (manifestModule) server.moduleGraph.invalidateModule(manifestModule);\n          if (planChanged) {\n            for (const mod of modules) server.moduleGraph.invalidateModule(mod);\n            server.ws.send({ type: \"full-reload\", path: \"*\" });\n            return [];\n          }\n        }\n      }\n\n      if (normalizedFile.includes(\"/app/\")) {\n        // Hot reload middleware changes\n        if (normalizedFile.includes(\"middleware.\")) {\n          if (middlewareManager) {\n            await middlewareManager.reload();\n            logger.success(\"✅ Middleware reloaded!\");\n            if (initialPluginManager) {\n              for (const middleware of middlewareManager.getMiddlewares()) {\n                await initialPluginManager.runHookParallel(\"middlewareDiscovered\", {\n                  path: middleware.path,\n                  filePath: middleware.filePath,\n                  handlerCount: middleware.handlers.length,\n                });\n              }\n            }\n          }\n\n          return [];\n        }\n\n        farmApp?.getRouteManager().invalidateClientManifest();\n        const manifestModule = server.moduleGraph.getModuleById(\"/@farm/manifest\");\n        if (manifestModule) {\n          server.moduleGraph.invalidateModule(manifestModule);\n        }\n\n        if (normalizedFile.includes(\"page.\") || normalizedFile.includes(\"layout.\")) {\n          const shortPath = normalizedFile.split(\"/app/\")[1] || normalizedFile;\n          logUpdate(\"PAGE\", `updated ${shortPath}`);\n\n          for (const mod of modules) {\n            server.moduleGraph.invalidateModule(mod);\n          }\n\n          server.ws.send({\n            type: \"full-reload\",\n            path: \"*\",\n          });\n\n          return [];\n        }\n      }\n\n      return modules;\n    },\n  };\n}\n\nfunction isFarmClientVirtualId(id: string): boolean {\n  const pathname = id.split(\"?\", 1)[0];\n  return pathname === \"/@farm/client\" || pathname === \"/@farm/client.js\";\n}\n\nfunction generateProgrammaticRouteModule(\n  moduleId: string,\n  root?: string,\n  renderer: FarmRenderer = REACT_RENDERER,\n): string {\n  const parsed = parseProgrammaticRouteModuleId(moduleId);\n  if (!parsed) {\n    return \"\";\n  }\n\n  const routeFile = toProgrammaticRouteImportSpecifier(parsed.filePath, root);\n\n  if (parsed.kind === \"api\") {\n    return generateProgrammaticApiRouteModule(parsed.routePath, routeFile);\n  }\n\n  return `\nimport {\n  createElement as __farmCreateElement,\n  Suspense as __farmSuspense,\n} from ${JSON.stringify(renderer.server)};\nimport {\n  createLayoutModuleFromProgrammaticLayout as __farmCreateLayoutRouteModule,\n  createRouteModuleFromProgrammaticPage as __farmCreatePageRouteModule,\n} from \"@farm.js/core/routes\";\nimport * as __farmRoutesModule from ${JSON.stringify(routeFile)};\n\nconst __farmIsRouteDefinition = (value) => (\n  value &&\n  typeof value === \"object\" &&\n  (\n    value.kind === \"page\" ||\n    value.kind === \"layout\" ||\n    value.kind === \"api\" ||\n    value.kind === \"redirect\"\n  )\n);\nconst __farmRouteListFromCandidate = (candidate) => {\n  if (Array.isArray(candidate)) return candidate;\n  if (Array.isArray(candidate?.routes)) return candidate.routes;\n  if (__farmIsRouteDefinition(candidate)) return [candidate];\n  return [];\n};\nconst __farmGetRouteExport = (name) => Reflect.get(__farmRoutesModule, name);\nconst __farmRouteCandidates = [\n  __farmGetRouteExport(\"default\"),\n  __farmGetRouteExport(\"routes\"),\n  __farmGetRouteExport(\"Route\"),\n];\nlet __farmRoutes = [];\nfor (const __farmCandidate of __farmRouteCandidates) {\n  __farmRoutes = __farmRouteListFromCandidate(__farmCandidate);\n  if (__farmRoutes.length > 0) break;\n}\n\nif (__farmRoutes.length === 0) {\n  __farmRoutes = Object.values(__farmRoutesModule).filter(__farmIsRouteDefinition);\n}\nconst __farmNormalizeRoutePath = (routePath) => {\n  const withSlash = routePath && routePath.startsWith(\"/\") ? routePath : \"/\" + (routePath || \"\");\n  const withoutTrailing = withSlash.length > 1 ? withSlash.replace(/\\\\/+$/, \"\") : withSlash;\n  return withoutTrailing || \"/\";\n};\nconst __farmRoute = __farmRoutes.find((route) => (\n  route &&\n  route.kind === ${JSON.stringify(parsed.kind)} &&\n  __farmNormalizeRoutePath(route.path) === ${JSON.stringify(parsed.routePath)}\n));\n\nif (!__farmRoute) {\n  throw new Error(${JSON.stringify(\n    `Programmatic ${parsed.kind} route \"${parsed.routePath}\" was not found in ${routeFile}.`,\n  )});\n}\n\nconst __farmRouteModule = __farmRoute.kind === \"layout\"\n  ? __farmCreateLayoutRouteModule(__farmRoute)\n  : __farmCreatePageRouteModule(__farmRoute, {\n      createElement: __farmCreateElement,\n      Suspense: __farmSuspense,\n    });\n\nexport const metadata = __farmRouteModule.metadata;\nexport const generateMetadata = __farmRouteModule.generateMetadata;\nconst __farmIsSearchSchema = (value) => value && typeof value.parse === \"function\";\nconst __farmGetSearchSchema = (search) => __farmIsSearchSchema(search) ? search : search?.schema;\nconst __farmGetSearchOptions = (search) => __farmIsSearchSchema(search) ? undefined : search;\nconst __farmSearchSchema = __farmGetSearchSchema(__farmRoute.search);\nconst __farmSearchOptions = __farmGetSearchOptions(__farmRoute.search);\nexport const __farmRouteSchemas = __farmRouteModule.__farmRouteSchemas;\nexport const __farmRouteSearch = __farmRouteModule.__farmRouteSearch;\nexport const __farmRouteData = __farmRouteModule.__farmRouteData;\nexport const __farmRouteGuard = __farmRouteModule.__farmRouteGuard;\nexport const __farmRouteParsesProps = __farmRouteModule.__farmRouteParsesProps;\nexport const __farmRouteComponents = __farmRouteModule.__farmRouteComponents;\nexport const __farmResolveRouteCanonicalPath =\n  __farmRouteModule.__farmResolveRouteCanonicalPath;\nexport const ssg = __farmRouteModule.ssg;\nexport const dynamic = __farmRouteModule.dynamic;\nexport const revalidate = __farmRouteModule.revalidate;\nexport const ppr = __farmRouteModule.ppr;\nexport const getStaticPaths = __farmRouteModule.getStaticPaths;\n\nconst __farmParseSchema = (schema, value, label) => {\n  if (!schema || typeof schema.parse !== \"function\") {\n    return value;\n  }\n\n  try {\n    return schema.parse(value);\n  } catch (error) {\n    throw new Error(\"Invalid \" + label + \" for route \" + JSON.stringify(__farmRoute.path) + \": \" + (error?.message || String(error)));\n  }\n};\n\nconst __farmMarkRoutePropsResolved = (props) => ({\n  ...props,\n  __farmRoutePropsResolved: true,\n});\n\nconst __farmAddCanonicalPath = (props, canonicalPath) => (\n  canonicalPath ? { ...props, __farmCanonicalPath: canonicalPath } : props\n);\n\nconst __farmStripRoutePropsMarker = (props) => {\n  if (!props || props.__farmRoutePropsResolved !== true) {\n    return props;\n  }\n\n  const {\n    __farmRoutePropsResolved,\n    __farmCanonicalPath,\n    __farmRoutePropsPromise,\n    ...componentProps\n  } = props;\n  return componentProps;\n};\n\nconst __farmCreateSearchParams = (value) => {\n  const params = new URLSearchParams();\n  for (const [key, item] of Object.entries(value || {})) {\n    if (item == null) continue;\n    const values = Array.isArray(item) ? item : [item];\n    for (const entry of values) {\n      if (entry != null) params.append(key, String(entry));\n    }\n  }\n  return params;\n};\n\nconst __farmComparable = (value) => {\n  if (Array.isArray(value)) return value.map(__farmComparable);\n  if (value && typeof value === \"object\") {\n    return Object.keys(value).sort().reduce((output, key) => {\n      output[key] = __farmComparable(value[key]);\n      return output;\n    }, {});\n  }\n  return value;\n};\n\nconst __farmEqual = (left, right) => (\n  JSON.stringify(__farmComparable(left)) === JSON.stringify(__farmComparable(right))\n);\n\nconst __farmReadSearchValue = (value, key) => (\n  value && typeof value === \"object\" ? value[key] : undefined\n);\n\nconst __farmParseDefaultSearch = () => {\n  if (!__farmSearchSchema) return undefined;\n  try {\n    const value = __farmSearchSchema.parse({});\n    return value && typeof value === \"object\" ? value : undefined;\n  } catch {\n    return undefined;\n  }\n};\n\nconst __farmResolveCanonicalPath = (rawSearch, parsedSearch, path) => {\n  if (!__farmSearchOptions?.temporary?.length && !__farmSearchOptions?.stripDefaults) {\n    return undefined;\n  }\n\n  const params = __farmCreateSearchParams(rawSearch);\n  const original = params.toString();\n\n  for (const key of __farmSearchOptions.temporary || []) {\n    params.delete(key);\n  }\n\n  if (__farmSearchOptions.stripDefaults) {\n    const defaults = __farmParseDefaultSearch();\n    if (defaults) {\n      const keys = __farmSearchOptions.stripDefaults === true\n        ? Array.from(new Set(Array.from(params.keys())))\n        : [...__farmSearchOptions.stripDefaults];\n      for (const key of keys) {\n        if (params.has(key) && __farmEqual(__farmReadSearchValue(parsedSearch, key), __farmReadSearchValue(defaults, key))) {\n          params.delete(key);\n        }\n      }\n    }\n  }\n\n  const next = params.toString();\n  if (next === original) return undefined;\n  return next ? path + \"?\" + next : path;\n};\n\nexport async function __farmResolveRouteProps(props) {\n  return typeof __farmRouteModule.__farmResolveRouteProps === \"function\"\n    ? __farmRouteModule.__farmResolveRouteProps(props)\n    : props;\n}\n\nconst __farmNeedsPageWrapper = __farmRoute.kind === \"page\" && !!(\n  __farmRoute.params ||\n  __farmRoute.search ||\n  __farmRoute.data\n);\n\nasync function __farmProgrammaticPage(props) {\n  const deferredRouteProps = props?.__farmRoutePropsPromise;\n  const resolvedProps = props?.__farmRoutePropsResolved === true\n    ? props\n    : deferredRouteProps && typeof deferredRouteProps.then === \"function\"\n      ? await deferredRouteProps\n      : await __farmResolveRouteProps(props);\n\n  return __farmCreateElement(\n    __farmRoute.component,\n    __farmStripRoutePropsMarker(resolvedProps)\n  );\n}\n\nexport default __farmRouteModule.default;\n`;\n}\n\nfunction generateProgrammaticApiRouteModule(routePath: string, routeFile: string): string {\n  return `\nimport * as __farmRoutesModule from ${JSON.stringify(routeFile)};\n\nconst __farmIsRouteDefinition = (value) => (\n  value && typeof value === \"object\" && (\n    value.kind === \"page\" ||\n    value.kind === \"layout\" ||\n    value.kind === \"api\" ||\n    value.kind === \"redirect\"\n  )\n);\nconst __farmRouteListFromCandidate = (candidate) => {\n  if (Array.isArray(candidate)) return candidate;\n  if (Array.isArray(candidate?.routes)) return candidate.routes;\n  if (__farmIsRouteDefinition(candidate)) return [candidate];\n  return [];\n};\nconst __farmGetRouteExport = (name) => Reflect.get(__farmRoutesModule, name);\nconst __farmRouteCandidates = [\n  __farmGetRouteExport(\"default\"),\n  __farmGetRouteExport(\"routes\"),\n  __farmGetRouteExport(\"Route\"),\n];\nlet __farmRoutes = [];\nfor (const __farmCandidate of __farmRouteCandidates) {\n  __farmRoutes = __farmRouteListFromCandidate(__farmCandidate);\n  if (__farmRoutes.length > 0) break;\n}\nif (__farmRoutes.length === 0) {\n  __farmRoutes = Object.values(__farmRoutesModule).filter(__farmIsRouteDefinition);\n}\nconst __farmNormalizeRoutePath = (value) => {\n  const withSlash = value && value.startsWith(\"/\") ? value : \"/\" + (value || \"\");\n  return withSlash.length > 1 ? withSlash.replace(/\\\\/+$/, \"\") : withSlash;\n};\nconst __farmRoute = __farmRoutes.find((route) => (\n  route?.kind === \"api\" &&\n  __farmNormalizeRoutePath(route.path) === ${JSON.stringify(routePath)}\n));\n\nif (!__farmRoute) {\n  throw new Error(${JSON.stringify(\n    `Programmatic api route \"${routePath}\" was not found in ${routeFile}.`,\n  )});\n}\n\nexport const GET = __farmRoute.methods.GET;\nexport const HEAD = __farmRoute.methods.HEAD;\nexport const QUERY = __farmRoute.methods.QUERY;\nexport const POST = __farmRoute.methods.POST;\nexport const PUT = __farmRoute.methods.PUT;\nexport const DELETE = __farmRoute.methods.DELETE;\nexport const PATCH = __farmRoute.methods.PATCH;\nexport const OPTIONS = __farmRoute.methods.OPTIONS;\n`.trim();\n}\n\nfunction toProgrammaticRouteImportSpecifier(filePath: string, root?: string): string {\n  return root ? toViteModuleId(filePath, root) : filePath;\n}\n\ntype RouteModuleLike = {\n  __farmRouteParsesProps?: boolean;\n  __farmResolveRouteProps?: (props: {\n    params: Record<string, string>;\n    searchParams: Promise<Record<string, string | string[] | undefined>>;\n    path: string;\n    [key: string]: unknown;\n  }) => Promise<Record<string, unknown>>;\n  __farmRouteSchemas?: {\n    params?: { parse?: (value: unknown) => unknown };\n    search?: { parse?: (value: unknown) => unknown };\n  };\n};\n\nasync function parseRouteModuleProps(\n  routeModule: RouteModuleLike,\n  input: {\n    props: {\n      params: Record<string, string>;\n      searchParams: Promise<Record<string, string | string[] | undefined>>;\n      path: string;\n      [key: string]: unknown;\n    };\n    search: Record<string, string | string[] | undefined>;\n    routePath: string;\n  },\n): Promise<Record<string, unknown>> {\n  if (typeof routeModule.__farmResolveRouteProps === \"function\") {\n    return await routeModule.__farmResolveRouteProps(input.props);\n  }\n\n  if (routeModule.__farmRouteParsesProps) {\n    return {\n      ...input.props,\n      search: input.search,\n    };\n  }\n\n  const schemas = routeModule.__farmRouteSchemas;\n  const params = parseRouteModuleSchema(\n    schemas?.params,\n    input.props.params,\n    \"params\",\n    input.routePath,\n  );\n  const search = parseRouteModuleSchema(schemas?.search, input.search, \"search\", input.routePath);\n\n  return {\n    ...input.props,\n    params,\n    search,\n    searchParams: Promise.resolve(search as Record<string, string | string[] | undefined>),\n  };\n}\n\nfunction parseRouteModuleSchema(\n  schema: { parse?: (value: unknown) => unknown } | undefined,\n  value: unknown,\n  label: string,\n  routePath: string,\n): unknown {\n  if (!schema || typeof schema.parse !== \"function\") {\n    return value;\n  }\n\n  try {\n    return schema.parse(value);\n  } catch (error) {\n    const message = error instanceof Error ? error.message : String(error);\n    throw new Error(`Invalid ${label} for route \"${routePath}\": ${message}`);\n  }\n}\n\nfunction generateClientCode(\n  integrationProviders: ReturnType<typeof getIntegrationProviders> = [],\n  documentNavigationMatchers: string[] = [],\n  docsSearchClientRuntime = EMPTY_FARM_DOCS_SEARCH_CLIENT_RUNTIME,\n  devtoolsClientRuntime = \"\",\n  plugins: readonly FarmPlugin[] = [],\n  root = process.cwd(),\n  srcDir = \"src\",\n  publicRuntimeConfig: Record<string, unknown> | undefined = undefined,\n  docsAdapterReact?: string,\n  renderer: FarmRenderer = REACT_RENDERER,\n  isolatedHydrationEnabled = false,\n  trailingSlash = false,\n  basePath = \"/\",\n  clientCachePersistence: ClientCachePersistenceEntryCode = { imports: \"\", init: \"\" },\n): string {\n  const providerClientCode = generateFarmIntegrationProviderClientCode(integrationProviders, root);\n  const clientPluginEntry = generateFarmClientPluginEntryCode(\n    plugins,\n    root,\n    srcDir,\n    publicRuntimeConfig,\n  );\n  const rendererClientImports = isReactRenderer(renderer)\n    ? `import React from 'react'\\nimport { hydrateRoot, createRoot } from 'react-dom/client'`\n    : `import React, { hydrateRoot, createRoot } from ${JSON.stringify(renderer.client)}`;\n  const isolatedHydrationImport = isolatedHydrationEnabled\n    ? `import { createFarmIsolatedHydrationRuntime, wrapFarmIsolatedClientGraph } from '@farm.js/core/internal/isolated-boundary'`\n    : \"\";\n  const docsAdapterImportBlock = docsAdapterReact\n    ? `import * as FarmDocsAdapterReact from ${JSON.stringify(docsAdapterReact)};\n\nasync function hydrateFarmDocsAdapterRuntime() {\n  const runtime = window.__FARM_DOCS_ADAPTER__;\n  if (!runtime) return false;\n  if (typeof FarmDocsAdapterReact.hydrateFarmDocs !== 'function') {\n    throw new Error('The configured Farm docs adapter does not export hydrateFarmDocs().');\n  }\n  FarmDocsAdapterReact.hydrateFarmDocs({\n    config: runtime.config || {},\n    data: runtime.data,\n  });\n  return true;\n}`\n    : `async function hydrateFarmDocsAdapterRuntime() { return false; }`;\n  const isolatedHydrationRuntime = isolatedHydrationEnabled\n    ? `const farmIsolatedHydrationRuntime = createFarmIsolatedHydrationRuntime({\n  ReactRuntime: React,\n  hydrateRoot,\n  load: (reference) => import(/* @vite-ignore */ reference),\n  schedule: scheduleFarmIslandHydration,\n  wrap: wrapWithIntegrationProviders,\n});\nwindow.__FARM_ISOLATED_HYDRATION_RUNTIME__ = farmIsolatedHydrationRuntime;\n\nfunction disposeFarmIsolatedClientBoundaries(scope) {\n  farmIsolatedHydrationRuntime.dispose(scope);\n}\n\nasync function hydrateFarmIsolatedClientBoundaries(scope = document, signal) {\n  await farmIsolatedHydrationRuntime.hydrate(scope, signal);\n}`\n    : \"\";\n\n  return `\n${rendererClientImports}\n${isolatedHydrationImport}\nimport { installChunkErrorRecovery, SPARouter } from '@farm.js/core/client'\nimport { createClientPluginManager } from '@farm.js/core/plugin/client'\nimport { isFarmRouteActive } from '@farm.js/core/router'\nimport { scheduleFarmIslandHydration, searchParamsToObject, setFarmBasePath, setFarmTrailingSlashPreference, stripFarmBasePath } from '@farm.js/core/internal/client-runtime'\nimport { reviveDeferredData } from '@farm.js/core/deferred'\nimport {\n  createFarmDeploymentMismatchError,\n  createFarmDeploymentRequestHeaders,\n  isFarmDeploymentMismatchResponse,\n} from '@farm.js/core/deployment'\n${providerClientCode.imports}\n${clientPluginEntry.imports}\n${clientCachePersistence.imports}\n${docsSearchClientRuntime}\n${devtoolsClientRuntime}\n${docsAdapterImportBlock}\n\n// ⭐ Farm.js SPA Client Runtime (TanStack Start pattern)\n// Uses manifest-based chunk loading - NO HTML fetching!\n// Manifest is inlined in HTML via window.__FARM_MANIFEST__\n\n// Expose React for HMR\nwindow.__FARM_REACT__ = React;\nconst integrationDocumentNavigationMatchers = ${JSON.stringify(documentNavigationMatchers)};\n\nsetFarmBasePath(${JSON.stringify(basePath)});\nsetFarmTrailingSlashPreference(${JSON.stringify(trailingSlash)});\ninstallChunkErrorRecovery();\n${clientCachePersistence.init}\n\nlet reactRoot = null;\n${isolatedHydrationRuntime}\n\nfunction matchesDocumentNavigation(pathname) {\n  pathname = stripFarmBasePath(pathname);\n  return integrationDocumentNavigationMatchers.some((matcher) => {\n    if (matcher === '/(.*)' || matcher === '*') {\n      return true;\n    }\n    if (matcher.endsWith('(.*)')) {\n      const prefix = matcher.slice(0, -4);\n      return pathname === prefix || pathname.startsWith(prefix + '/');\n    }\n    return matcher === pathname;\n  });\n}\n\n${providerClientCode.runtime}\n\nwindow.__FARM_WRAP_PROVIDERS__ = wrapWithIntegrationProviders;\n${isolatedHydrationEnabled ? \"window.__FARM_WRAP_CLIENT_GRAPH__ = (element) => wrapFarmIsolatedClientGraph(React, element);\" : \"\"}\n\n// Get manifest from window (inlined by server in HTML)\n// Fallback to empty manifest if not available yet\nconst getManifest = () => window.__FARM_MANIFEST__ || { routes: {}, layouts: {}, slots: [], clientEntry: '', sharedAssets: [] };\n\n// ====== CLIENT-SIDE ROUTE MATCHING ======\n// Matches URL to route using manifest (no server request!)\n\nfunction matchSegment(urlSegment, routeSegment) {\n  if (!routeSegment.isDynamic) {\n    return urlSegment === routeSegment.segment ? {} : null;\n  }\n  if (routeSegment.isCatchAll) {\n    return { [routeSegment.segment]: urlSegment };\n  }\n  return { [routeSegment.segment]: urlSegment };\n}\n\nfunction decodeRouteSegment(segment) {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    return segment;\n  }\n}\n\nfunction matchRoute(pathname, routeSegments) {\n  const normalizedPath = pathname === '/' ? '' : pathname.replace(/^\\\\//, '').replace(/\\\\/$/, '');\n  const pathSegments = normalizedPath ? normalizedPath.split('/').map(decodeRouteSegment) : [];\n  \n  // Handle catch-all routes\n  const hasCatchAll = routeSegments.some(s => s.isCatchAll);\n  \n  if (!hasCatchAll && pathSegments.length !== routeSegments.length) {\n    return null;\n  }\n  \n  const params = {};\n  \n  for (let i = 0; i < routeSegments.length; i++) {\n    const routeSeg = routeSegments[i];\n    const pathSeg = pathSegments[i];\n\n    if (routeSeg.isCatchAll) {\n      // Collect remaining segments\n      params[routeSeg.segment] = pathSegments.slice(i).join('/');\n      return params;\n    }\n    \n    if (pathSeg === undefined) {\n      if (routeSeg.isOptional) continue;\n      return null;\n    }\n    \n    const match = matchSegment(pathSeg, routeSeg);\n    if (match === null) return null;\n    Object.assign(params, match);\n  }\n  \n  return params;\n}\n\nfunction findRoute(pathname) {\n  pathname = stripFarmBasePath(pathname);\n  const manifest = getManifest();\n  const routes = Object.values(manifest.routes);\n  \n  for (const route of routes) {\n    const params = matchRoute(pathname, route.segments);\n    if (params !== null) {\n      return { route, params };\n    }\n  }\n  return null;\n}\n\nfunction findLayouts(pathname) {\n  pathname = stripFarmBasePath(pathname);\n  const manifest = getManifest();\n  const layouts = Object.values(manifest.layouts);\n  const matchingLayouts = [];\n  \n  for (const layout of layouts) {\n    if (layout.pattern === '/' || isFarmRouteActive(layout.pattern, pathname, { exact: false })) {\n      matchingLayouts.push(layout);\n    }\n  }\n  \n  return matchingLayouts.sort((a, b) => a.pattern.length - b.pattern.length);\n}\n\n// ====== SPA ROUTER ======\n// Client-side router - no server requests needed!\n\nclass LegacyManifestSPARouter {\n  constructor() {\n    this.moduleCache = new Map();\n    this.prefetchingUrls = new Set();\n    this.observers = new Map();\n    \n    if (typeof window !== 'undefined') {\n      window.addEventListener('popstate', this.handlePopState.bind(this));\n    }\n  }\n\n  setNavigationHandler(handler) {\n    this.onNavigate = handler;\n  }\n\n  async navigate(href, options = {}) {\n    const { replace = false, scroll = true } = options;\n    const url = new URL(href, window.location.origin);\n    const pathname = url.pathname;\n    const search = url.search;\n    const fullPath = pathname + search;\n\n    if (matchesDocumentNavigation(pathname)) {\n      if (replace) {\n        window.location.replace(url.toString());\n      } else {\n        window.location.assign(url.toString());\n      }\n      return;\n    }\n\n    // Same page - update fragment history without loading route data.\n    if (pathname === window.location.pathname && search === window.location.search) {\n      if (url.hash === window.location.hash) return;\n      if (replace) {\n        window.history.replaceState(window.history.state, '', url);\n      } else {\n        window.history.pushState(window.history.state, '', url);\n      }\n      if (scroll) {\n        if (url.hash) document.querySelector(url.hash)?.scrollIntoView();\n        else window.scrollTo(0, 0);\n      }\n      return;\n    }\n\n    // Save scroll position\n    this.saveScrollPosition(window.location.pathname + window.location.search);\n\n    try {\n      // CLIENT-SIDE route matching - no server request!\n      const match = findRoute(pathname);\n      if (!match) {\n        console.warn('[Farm.js] Route not found:', pathname);\n        window.location.href = href;\n        return;\n      }\n\n      const { route, params } = match;\n\n      // Parse search params\n      const searchParams = searchParamsToObject(url.searchParams);\n\n      // Build page data from manifest (no server request!)\n      const pageData = {\n        route: route, // Full route entry from manifest\n        params,\n        searchParams,\n        layouts: findLayouts(pathname),\n      };\n\n      // Update URL\n      if (replace) {\n        window.history.replaceState({ path: fullPath }, '', fullPath);\n      } else {\n        window.history.pushState({ path: fullPath }, '', fullPath);\n      }\n\n      // Navigate using the handler\n      if (this.onNavigate) {\n        await this.onNavigate(pageData);\n      }\n      applyCanonicalPathFromProps(currentPageProps);\n\n      // Handle scroll\n      if (scroll) {\n        if (url.hash) {\n          const element = document.querySelector(url.hash);\n          if (element) element.scrollIntoView();\n        } else {\n          window.scrollTo(0, 0);\n        }\n      }\n    } catch (error) {\n      console.error('[Farm.js] Navigation error:', error);\n      window.location.href = href; // Fallback\n    }\n  }\n\n  async prefetch(href) {\n    // Prefetching disabled in dev mode to avoid Vite dep optimization issues\n    // In production, assets are already bundled and prefetched via link tags\n    if (import.meta.env?.DEV) return;\n    \n    const url = new URL(href, window.location.origin);\n    const pathname = url.pathname;\n\n    if (this.prefetchingUrls.has(pathname)) return;\n\n    // Find route in manifest\n    const match = findRoute(pathname);\n    if (!match) return;\n\n    // Only prefetch routes that will hydrate on the client.\n    if (!match.route.isClientComponent && !match.route.shouldHydrate) return;\n    if (match.route.islandStrategy && match.route.islandStrategy !== 'load') return;\n\n    const modulePath = match.route.modulePath;\n    if (this.moduleCache.has(modulePath)) return;\n\n    this.prefetchingUrls.add(pathname);\n    try {\n      // Prefetch by importing the module (Vite caches it)\n      const module = await import(/* @vite-ignore */ modulePath);\n      this.moduleCache.set(modulePath, module);\n      pageModuleCache.set(modulePath, module);\n    } catch (error) {\n      // Silently fail for prefetch\n    } finally {\n      this.prefetchingUrls.delete(pathname);\n    }\n  }\n\n  observeForPrefetch(element) {\n    if (typeof IntersectionObserver === 'undefined') return;\n    const href = element.getAttribute('href');\n    if (!href || this.isExternalUrl(href)) return;\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          if (entry.isIntersecting) {\n            setTimeout(() => this.prefetch(href), 100);\n            observer.unobserve(element);\n            this.observers.delete(element);\n          }\n        }\n      },\n      { rootMargin: '200px' }\n    );\n    observer.observe(element);\n    this.observers.set(element, observer);\n  }\n\n  unobserveForPrefetch(element) {\n    const observer = this.observers.get(element);\n    if (observer) {\n      observer.unobserve(element);\n      this.observers.delete(element);\n    }\n  }\n\n  async handlePopState(event) {\n    if (document.documentElement.dataset.farmDocsRuntime === 'true') return;\n\n    const pathname = window.location.pathname;\n    const search = window.location.search;\n    \n    try {\n      // Client-side route matching for back/forward\n      const match = findRoute(pathname);\n      if (!match) {\n        window.location.reload();\n        return;\n      }\n\n      const { route, params } = match;\n      const url = new URL(window.location.href);\n      const searchParams = searchParamsToObject(url.searchParams);\n\n      const pageData = {\n        route: route,\n        params,\n        searchParams,\n        layouts: findLayouts(pathname),\n      };\n\n      if (this.onNavigate) await this.onNavigate(pageData);\n      this.restoreScrollPosition(pathname + search);\n    } catch (error) {\n      console.error('[Farm.js] Popstate error:', error);\n      window.location.reload();\n    }\n  }\n\n  isExternalUrl(href) {\n    return href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//');\n  }\n\n  saveScrollPosition(path) {\n    try {\n      sessionStorage.setItem('farm-scroll-' + path, JSON.stringify({ x: window.scrollX, y: window.scrollY }));\n    } catch {}\n  }\n\n  restoreScrollPosition(path) {\n    try {\n      const saved = sessionStorage.getItem('farm-scroll-' + path);\n      if (saved) {\n        const { x, y } = JSON.parse(saved);\n        setTimeout(() => window.scrollTo(x, y), 0);\n      }\n    } catch {}\n  }\n}\n\n// Initialize the SPA router\nconst spaRouter = new SPARouter({\n  shouldUseDocumentNavigation: matchesDocumentNavigation,\n});\nwindow.__FARM_SPA_ROUTER__ = spaRouter;\n\nconst farmClientRuntime = createClientPluginManager(\n  ${clientPluginEntry.registrations},\n  {\n    router: spaRouter,\n    isDev: import.meta.env?.DEV === true,\n    isProd: import.meta.env?.PROD === true,\n    deploymentId: window.__FARM_DEPLOYMENT_ID__,\n  },\n);\nspaRouter.setClientPluginManager(farmClientRuntime);\nwindow.__FARM_CLIENT_RUNTIME__ = farmClientRuntime;\nvoid farmClientRuntime.start();\n\nif (import.meta.hot) {\n  // Vite awaits a promise returned from dispose before evaluating the new\n  // module, so the old runtime is fully closed before its successor starts.\n  // The router is destroyed afterwards — plugins may still touch navigation\n  // during close — and unconditionally, or every entry reload would leave\n  // another popstate/beforeunload listener behind.\n  import.meta.hot.dispose(async () => {\n    try {\n      await farmClientRuntime.close('hmr');\n    } finally {\n      spaRouter.destroy();\n    }\n  });\n}\n\n// Cache for loaded page modules\nconst pageModuleCache = new Map();\n\n// Current page state for React rendering\nlet currentPageComponent = null;\nlet currentPageProps = {};\nlet appRoot = null;\n\n// Layout modules are cached independently so nested client-aware layouts are\n// composed with the same root-to-leaf structure that the server rendered.\nconst layoutComponentCache = new Map();\n\n// Track if we've taken over rendering from SSR\nlet hasClientTakenOver = false;\nconst routeSlotRoots = new Map();\nconst routeSlotDefinitions = new Map();\nlet activeRouteInterception = null;\nlet pendingPageHydrationController = null;\n\nfunction cancelPendingPageHydration() {\n  pendingPageHydrationController?.abort();\n  pendingPageHydrationController = null;\n}\n\nfunction normalizeServerProps(rawProps) {\n  const props = rawProps && typeof rawProps === 'object' ? { ...rawProps } : {};\n  if (props.middleware && props.middleware.data && !(props.middleware.data instanceof Map)) {\n    props.middleware = { ...props.middleware, data: new Map(Object.entries(props.middleware.data)) };\n  }\n  if (props.context && props.context.data && !(props.context.data instanceof Map)) {\n    props.context = { ...props.context, data: new Map(Object.entries(props.context.data)) };\n  }\n  return props;\n}\n\nfunction getRouteSlotKey(slot) {\n  return slot.ownerPattern + ':' + slot.name;\n}\n\nasync function renderRouteSlot(slot, mode = 'render') {\n  const container = document.getElementById(slot.containerId);\n  if (!container || !slot.modulePath) return false;\n  if (mode === 'intercept' && !slot.isClientComponent && !slot.shouldHydrate) {\n    return false;\n  }\n\n  let slotModule = pageModuleCache.get(slot.modulePath);\n  if (!slotModule) {\n    slotModule = await import(/* @vite-ignore */ slot.modulePath);\n    pageModuleCache.set(slot.modulePath, slotModule);\n  }\n  const SlotComponent = slotModule?.default;\n  if (!SlotComponent) return false;\n\n  const props = reviveDeferredData(\n    normalizeServerProps(slot.props || {}),\n    window.__FARM_DEFERRED_DATA__ || {},\n  );\n  let element = wrapWithIntegrationProviders(React.createElement(SlotComponent, props));\n  ${isolatedHydrationEnabled ? \"element = wrapFarmIsolatedClientGraph(React, element);\" : \"\"}\n  const key = getRouteSlotKey(slot);\n  const existingRoot = routeSlotRoots.get(key);\n\n  if (mode === 'hydrate') {\n    if (existingRoot) return true;\n    const root = hydrateRoot(container, element);\n    routeSlotRoots.set(key, root);\n  } else {\n    if (existingRoot) {\n      try { existingRoot.unmount(); } catch (error) {}\n    }\n    const root = createRoot(container);\n    root.render(element);\n    routeSlotRoots.set(key, root);\n  }\n\n  routeSlotDefinitions.set(key, slot);\n  return true;\n}\n\nasync function hydrateInitialRouteSlots() {\n  const slots = Array.isArray(window.__FARM_ROUTE_SLOTS__)\n    ? window.__FARM_ROUTE_SLOTS__\n    : [];\n  let hydrated = false;\n\n  for (const slot of slots) {\n    routeSlotDefinitions.set(getRouteSlotKey(slot), slot);\n    if (!slot.isClientComponent && !slot.shouldHydrate) continue;\n    try {\n      const slotHydrated = await renderRouteSlot(slot, 'hydrate');\n      hydrated = slotHydrated || hydrated;\n      if (slotHydrated) {\n        replayPreHydrationClicks(document.getElementById(slot.containerId));\n      }\n    } catch (error) {\n      console.warn('[Farm.js] Could not hydrate route slot:', slot.name, error);\n    }\n  }\n\n  return hydrated;\n}\n\nasync function renderRouteInterception(pageData) {\n  const slots = Array.isArray(pageData.routeSlots)\n    ? pageData.routeSlots.filter((slot) => slot.interception)\n    : [];\n  if (!pageData.interception || slots.length === 0) return false;\n\n  const previous = new Map();\n  for (const slot of slots) {\n    const key = getRouteSlotKey(slot);\n    previous.set(key, routeSlotDefinitions.get(key) || null);\n    if (!(await renderRouteSlot(slot, 'intercept'))) {\n      return false;\n    }\n  }\n\n  activeRouteInterception = {\n    from: pageData.interception.from,\n    slots,\n    previous,\n  };\n  return true;\n}\n\nasync function clearRouteInterception(destination) {\n  if (!activeRouteInterception) return false;\n  const active = activeRouteInterception;\n  activeRouteInterception = null;\n\n  for (const slot of active.slots) {\n    const key = getRouteSlotKey(slot);\n    const root = routeSlotRoots.get(key);\n    if (root) {\n      try { root.unmount(); } catch (error) {}\n      routeSlotRoots.delete(key);\n    }\n\n    const previous = active.previous.get(key);\n    if (previous && (previous.isClientComponent || previous.shouldHydrate)) {\n      await renderRouteSlot(previous, 'render');\n    } else {\n      const container = document.getElementById(slot.containerId);\n      if (container) container.replaceChildren();\n      if (previous) routeSlotDefinitions.set(key, previous);\n      else routeSlotDefinitions.delete(key);\n    }\n  }\n\n  if (!active.from) return false;\n  const background = new URL(active.from, window.location.origin);\n  return destination === background.pathname + background.search;\n}\n\nfunction applyCanonicalPathFromProps(props) {\n  const canonicalPath = props && typeof props.__farmCanonicalPath === 'string'\n    ? props.__farmCanonicalPath\n    : null;\n  if (!canonicalPath) return;\n  const currentPath = window.location.pathname + window.location.search;\n  if (canonicalPath === currentPath) return;\n  window.history.replaceState({ ...(window.history.state || {}), path: canonicalPath }, '', canonicalPath);\n}\n\nfunction replayPreHydrationClicks(container = null) {\n  if (!container) {\n    markFarmHydrated();\n  } else {\n    container.dataset.farmIslandHydrated = 'true';\n  }\n\n  const queue = Array.isArray(window.__FARM_PREHYDRATION_CLICK_QUEUE__)\n    ? window.__FARM_PREHYDRATION_CLICK_QUEUE__\n    : [];\n  if (queue.length === 0) return;\n\n  const queuedClicks = [];\n  const remainingClicks = [];\n  for (const queuedClick of queue) {\n    const target = queuedClick?.target;\n    if (!container || (target instanceof Node && container.contains(target))) {\n      queuedClicks.push(queuedClick);\n    } else {\n      remainingClicks.push(queuedClick);\n    }\n  }\n  queue.splice(0, queue.length, ...remainingClicks);\n  for (const queuedClick of queuedClicks) {\n    const target = queuedClick?.target;\n    if (!target || typeof target.click !== 'function') continue;\n    if (target.isConnected === false) continue;\n    setTimeout(() => target.click(), 0);\n  }\n}\n\nfunction markFarmHydrated() {\n  window.__FARM_HYDRATED__ = true;\n  document.documentElement.dataset.farmHydrated = 'true';\n}\n\nasync function buildClientHydrationElement(\n  PageComponent,\n  pageProps,\n  loadingModuleOverride,\n) {\n  let element = React.createElement(PageComponent, pageProps);\n  const loadingModulePath = loadingModuleOverride === undefined\n    ? window.__FARM_LOADING_MODULE__\n    : loadingModuleOverride;\n\n  if (loadingModulePath) {\n    try {\n      const loadingModule = await import(/* @vite-ignore */ loadingModulePath);\n      const LoadingComponent = loadingModule?.default;\n      if (LoadingComponent) {\n        const loadingFallback = React.createElement(LoadingComponent, {\n          params: pageProps?.params || {},\n          path: pageProps?.path || window.location.pathname,\n        });\n        element = React.createElement(React.Suspense, { fallback: loadingFallback }, element);\n      }\n    } catch (error) {\n      console.error(\n        '[Farm.js] Loading boundary failed to load and was skipped: ' + loadingModulePath,\n        error,\n      );\n    }\n  }\n\n  return element;\n}\n\nasync function loadLayoutComponents(layouts = []) {\n  const loadedLayouts = [];\n\n  for (const layout of layouts) {\n    if (!layout?.modulePath) continue;\n    try {\n      let LayoutComponent = layoutComponentCache.get(layout.modulePath);\n      if (!LayoutComponent) {\n        const layoutModule = await import(/* @vite-ignore */ layout.modulePath);\n        LayoutComponent = layoutModule.default;\n        if (LayoutComponent) {\n          layoutComponentCache.set(layout.modulePath, LayoutComponent);\n        }\n      }\n      if (LayoutComponent) loadedLayouts.push({ ...layout, Component: LayoutComponent });\n    } catch (error) {\n      // Skipping the layout leaves the client tree different from the server's,\n      // so React discards the server rendered markup for this branch, including\n      // whatever the layout drew. Losing visible UI deserves more than a warning.\n      console.error(\n        '[Farm.js] Layout failed to load and was skipped: ' + layout.modulePath +\n          '. The client tree no longer matches the server, so React will discard the ' +\n          'server rendered markup for this route, including anything this layout renders.',\n        error,\n      );\n    }\n  }\n\n  return loadedLayouts;\n}\n\nfunction wrapWithLoadedLayouts(element, loadedLayouts, params) {\n  let wrapped = element;\n  for (let index = loadedLayouts.length - 1; index >= 0; index--) {\n    const layout = loadedLayouts[index];\n    wrapped = React.createElement(layout.Component, {\n      children: wrapped,\n      params,\n    });\n    wrapped = React.createElement('div', {\n      'data-farm-layout-boundary': 'true',\n      'data-farm-layout-pattern': layout.pattern,\n      style: { display: 'contents' },\n    }, wrapped);\n  }\n  return wrapped;\n}\n\nfunction getCurrentSearchParams() {\n  const url = new URL(window.location.href);\n  return searchParamsToObject(url.searchParams);\n}\n\nfunction parseClientRouteSchema(schema, value, label) {\n  if (!schema || typeof schema.parse !== 'function') {\n    return value;\n  }\n\n  try {\n    return schema.parse(value);\n  } catch (error) {\n    throw new Error('Invalid route ' + label + ': ' + (error?.message || String(error)));\n  }\n}\n\nasync function buildRouteComponentProps(pageModule, params, searchParams, path, existingProps) {\n  if (existingProps?.__farmRoutePropsResolved === true) {\n    const revivedProps = reviveDeferredData(\n      existingProps,\n      window.__FARM_DEFERRED_DATA__ || {},\n    );\n    window.__FARM_PROPS__ = revivedProps;\n    return {\n      ...revivedProps,\n      searchParams: Promise.resolve(revivedProps.search ?? revivedProps.searchParams ?? {}),\n      path: revivedProps.path || path,\n    };\n  }\n\n  if (typeof pageModule?.__farmResolveRouteProps === 'function') {\n    const rawProps = {\n      ...(existingProps || {}),\n      params,\n      searchParams: Promise.resolve(searchParams),\n      path,\n    };\n    // Keep top-level route errors inside the router's navigation transaction.\n    // Explicit defer() values can still suspend nested UI after this resolves.\n    return await pageModule.__farmResolveRouteProps(rawProps);\n  }\n\n  const schemas = pageModule?.__farmRouteSchemas;\n  const parsedParams = parseClientRouteSchema(schemas?.params, params, 'params');\n  const parsedSearch = parseClientRouteSchema(schemas?.search, searchParams, 'search');\n\n  return {\n    ...(existingProps || {}),\n    params: parsedParams,\n    search: parsedSearch,\n    searchParams: schemas ? Promise.resolve(parsedSearch) : parsedSearch,\n    path,\n  };\n}\n\nasync function buildWrappedHydrationElement(PageComponent, pageProps, layouts = []) {\n  const loadedLayouts = await loadLayoutComponents(layouts);\n  const pageElement = await buildClientHydrationElement(PageComponent, pageProps);\n  const wrappedTree = wrapWithLoadedLayouts(\n    pageElement,\n    loadedLayouts,\n    pageProps?.params || {},\n  );\n  return wrapWithIntegrationProviders(wrappedTree);\n}\n\nfunction createLayoutPageBoundary(\n  pageShouldHydrate,\n  islandStrategy,\n  pageElement,\n  serverHtml,\n) {\n  const props = {\n    id: '__farm_page__',\n    'data-farm-client': pageShouldHydrate ? 'true' : 'false',\n    'data-farm-layout-client': 'true',\n    'data-farm-island': 'page',\n    'data-farm-island-strategy': islandStrategy || 'load',\n  };\n  if (typeof serverHtml === 'string') {\n    props.suppressHydrationWarning = true;\n    props.dangerouslySetInnerHTML = { __html: serverHtml };\n    return React.createElement('div', props);\n  }\n  return React.createElement('div', props, pageElement);\n}\n\nasync function tryHydrateImportedPage(\n  container,\n  route,\n  params,\n  layouts,\n  useHydrate = false,\n  existingProps = null,\n  signal = null,\n  hydrationOptions = {},\n) {\n  const modulePath = route?.modulePath;\n  if (!modulePath || signal?.aborted) {\n    return false;\n  }\n\n  const pageShouldHydrate = hydrationOptions.pageShouldHydrate !== false;\n  const layoutShouldHydrate = hydrationOptions.layoutShouldHydrate === true;\n  const islandStrategy = hydrationOptions.islandStrategy || route.islandStrategy || 'load';\n  let pageElement = null;\n\n  if (pageShouldHydrate) {\n    let pageModule = pageModuleCache.get(modulePath);\n    if (!pageModule) {\n      pageModule = await import(/* @vite-ignore */ modulePath);\n      pageModuleCache.set(modulePath, pageModule);\n    }\n    if (signal?.aborted || !container?.isConnected) return false;\n\n    const PageComponent = pageModule?.default;\n    if (!PageComponent) return false;\n\n    if (\n      typeof PageComponent === 'function' &&\n      PageComponent.constructor &&\n      PageComponent.constructor.name === 'AsyncFunction'\n    ) {\n      console.warn(\n        '[Farm.js] Skipping hydration for ' + modulePath +\n        ': async server components cannot run in the browser. ' +\n        'Server-rendered HTML is preserved; move interactive UI into a \"use client\" child of a synchronous page.'\n      );\n      return false;\n    }\n\n    currentPageComponent = PageComponent;\n    currentPageProps = await buildRouteComponentProps(\n      pageModule,\n      params,\n      getCurrentSearchParams(),\n      window.location.pathname,\n      existingProps,\n    );\n    pageElement = await buildClientHydrationElement(\n      PageComponent,\n      currentPageProps,\n      hydrationOptions.loadingModulePath,\n    );\n  } else if (layoutShouldHydrate) {\n    currentPageProps = existingProps || { params };\n    const serverPage = document.getElementById('__farm_page__');\n    pageElement = createLayoutPageBoundary(\n      false,\n      islandStrategy,\n      null,\n      typeof hydrationOptions.serverHtml === 'string'\n        ? hydrationOptions.serverHtml\n        : serverPage ? serverPage.innerHTML : '',\n    );\n  }\n  if (signal?.aborted || !container?.isConnected || !pageElement) return false;\n\n  let wrappedElement;\n  if (layoutShouldHydrate) {\n    const loadedLayouts = await loadLayoutComponents(layouts);\n    if (pageShouldHydrate) {\n      pageElement = createLayoutPageBoundary(true, islandStrategy, pageElement);\n    }\n    const wrappedTree = wrapWithLoadedLayouts(pageElement, loadedLayouts, params);\n    wrappedElement = wrapWithIntegrationProviders(wrappedTree);\n  } else if (useHydrate && container?.id === '__farm_page__') {\n    wrappedElement = wrapWithIntegrationProviders(pageElement);\n  } else {\n    wrappedElement = await buildWrappedHydrationElement(\n      currentPageComponent,\n      currentPageProps,\n      layouts,\n    );\n  }\n  if (signal?.aborted || !container?.isConnected) return false;\n\n  ${isolatedHydrationEnabled ? \"wrappedElement = wrapFarmIsolatedClientGraph(React, wrappedElement);\" : \"\"}\n\n  if (useHydrate) {\n    try {\n      reactRoot = hydrateRoot(container, wrappedElement);\n      window.__FARM_REACT_ROOT__ = reactRoot;\n      return true;\n    } catch (error) {\n      appRoot = createRoot(container);\n      appRoot.render(wrappedElement);\n      window.__FARM_REACT_ROOT__ = appRoot;\n      hasClientTakenOver = true;\n      return true;\n    }\n  }\n\n  hasClientTakenOver = true;\n  const existingRoot = appRoot || reactRoot;\n  if (existingRoot && layoutShouldHydrate) {\n    existingRoot.render(wrappedElement);\n    appRoot = existingRoot;\n    reactRoot = null;\n    window.__FARM_REACT_ROOT__ = appRoot;\n    return true;\n  }\n  if (reactRoot) { try { reactRoot.unmount(); } catch (e) {} reactRoot = null; }\n  if (appRoot) { try { appRoot.unmount(); } catch (e) {} appRoot = null; }\n  appRoot = createRoot(container);\n  window.__FARM_REACT_ROOT__ = appRoot;\n  appRoot.render(wrappedElement);\n  return true;\n}\n\nfunction findLayoutBoundary(root, pattern) {\n  const boundaries = root.querySelectorAll\n    ? root.querySelectorAll('[data-farm-layout-boundary=\"true\"]')\n    : [];\n  for (const boundary of boundaries) {\n    if (boundary.getAttribute('data-farm-layout-pattern') === pattern) return boundary;\n  }\n  return null;\n}\n\nfunction readActiveLayoutPatterns() {\n  return Array.from(document.querySelectorAll('[data-farm-layout-boundary=\"true\"]'))\n    .map((element) => element.getAttribute('data-farm-layout-pattern'))\n    .filter(Boolean);\n}\n\nfunction activateFragmentScripts(root) {\n  for (const script of Array.from(root.querySelectorAll?.('script') || [])) {\n    const freshScript = document.createElement('script');\n    for (const attribute of Array.from(script.attributes)) {\n      freshScript.setAttribute(attribute.name, attribute.value);\n    }\n    freshScript.textContent = script.textContent || '';\n    script.replaceWith(freshScript);\n  }\n}\n\nfunction parseNavigationFragment(html) {\n  const template = document.createElement('template');\n  template.innerHTML = html;\n  return template.content;\n}\n\nfunction replaceNavigationBoundary(container, fragment, currentPatterns, nextPatterns) {\n  let sharedCount = 0;\n  while (\n    sharedCount < currentPatterns.length &&\n    sharedCount < nextPatterns.length &&\n    currentPatterns[sharedCount] === nextPatterns[sharedCount]\n  ) {\n    sharedCount++;\n  }\n\n  const fragmentTreeRoot = nextPatterns.length > 0\n    ? findLayoutBoundary(fragment, nextPatterns[0])\n    : fragment.querySelector('#__farm_page__');\n  const currentTarget = sharedCount < currentPatterns.length\n    ? findLayoutBoundary(container, currentPatterns[sharedCount])\n    : container.querySelector('#__farm_page__');\n  const nextTarget = sharedCount < nextPatterns.length\n    ? findLayoutBoundary(fragment, nextPatterns[sharedCount])\n    : fragment.querySelector('#__farm_page__');\n\n  if (!currentTarget || !nextTarget) {\n    ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(container);\" : \"\"}\n    container.replaceChildren(fragment);\n    activateFragmentScripts(container);\n    return container;\n  }\n\n  ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(currentTarget);\" : \"\"}\n  currentTarget.replaceWith(nextTarget);\n  activateFragmentScripts(nextTarget);\n  if (fragmentTreeRoot && fragmentTreeRoot !== nextTarget) fragmentTreeRoot.remove();\n\n  // React's completed streaming markup can include reveal instructions next\n  // to the route tree. Execute those support nodes after the boundary exists.\n  if (fragment.childNodes.length > 0) {\n    const support = document.createElement('div');\n    support.hidden = true;\n    support.dataset.farmFragmentSupport = 'true';\n    support.append(fragment);\n    document.body.appendChild(support);\n    activateFragmentScripts(support);\n    setTimeout(() => support.remove(), 0);\n  }\n  return nextTarget;\n}\n\nlet activeLayoutPatterns = readActiveLayoutPatterns();\nlet activeLayoutShouldHydrate = window.__FARM_LAYOUT_SHOULD_HYDRATE__ === true;\n\n// ====== MANIFEST-DRIVEN HTML-FRAGMENT NAVIGATION ======\n// One page-data response carries both server HTML and the hydration plan.\nasync function renderPage(pageData) {\n  const container = document.getElementById('root');\n  if (!container) return;\n  cancelPendingPageHydration();\n  const destination = window.location.pathname + window.location.search;\n\n  if (pageData.interception) {\n    if (await renderRouteInterception(pageData)) return;\n    window.location.assign(destination);\n    return;\n  }\n\n  if (await clearRouteInterception(destination)) {\n    return;\n  }\n\n  const manifestRoute = findRoute(window.location.pathname)?.route;\n  const renderPlan = pageData.renderPlan || manifestRoute?.renderPlan;\n  const hydrationMode = renderPlan?.hydration;\n  const route = {\n    modulePath: pageData.modulePath,\n    isClientComponent: pageData.isClientComponent === true,\n    pageShouldHydrate:\n      hydrationMode === 'route-island' ||\n      hydrationMode === 'route-and-layout-islands' ||\n      pageData.pageShouldHydrate === true,\n    layoutShouldHydrate:\n      hydrationMode === 'layout-island' ||\n      hydrationMode === 'route-and-layout-islands' ||\n      pageData.layoutShouldHydrate === true,\n    shouldHydrate: pageData.shouldHydrate === true,\n    islandStrategy: renderPlan?.islandStrategy || pageData.islandStrategy || 'load',\n    loadingModulePath: pageData.loadingModulePath,\n  };\n  const params = pageData.props?.params || {};\n  const nextLayoutPatterns = Array.isArray(pageData.fragment?.layoutPatterns)\n    ? pageData.fragment.layoutPatterns\n    : [];\n  const layouts = (pageData.layoutModules || []).map((modulePath, index) => ({\n    modulePath,\n    pattern: nextLayoutPatterns[index] || (index === 0 ? '/' : modulePath),\n  }));\n  const path = window.location.pathname + window.location.search;\n\n  // A legacy server may omit the fragment. Keep one compatibility fallback,\n  // but current servers send HTML in the page-data response and avoid this\n  // second network round trip.\n  const fetchAndSwapHTML = async () => {\n    let fragmentHtml = pageData.fragment?.html;\n    let layoutPatterns = nextLayoutPatterns;\n\n    if (typeof fragmentHtml !== 'string') {\n      const deploymentId = window.__FARM_DEPLOYMENT_ID__;\n      const response = await fetch(path, {\n        headers: createFarmDeploymentRequestHeaders(deploymentId, { 'Accept': 'text/html' }),\n      });\n      if (isFarmDeploymentMismatchResponse(response, deploymentId)) {\n        const error = createFarmDeploymentMismatchError(response, deploymentId || 'unknown');\n        window.dispatchEvent(new CustomEvent('farm:deployment-mismatch', { detail: error }));\n        window.location.assign(path);\n        return false;\n      }\n      const documentHtml = await response.text();\n      const doc = new DOMParser().parseFromString(documentHtml, 'text/html');\n      const nextRoot = doc.getElementById('root');\n      if (!nextRoot) return false;\n      fragmentHtml = nextRoot.innerHTML;\n      layoutPatterns = Array.from(\n        nextRoot.querySelectorAll('[data-farm-layout-boundary=\"true\"]'),\n      ).map((element) => element.getAttribute('data-farm-layout-pattern')).filter(Boolean);\n    }\n\n    const fragment = parseNavigationFragment(fragmentHtml);\n    const nextPage = fragment.querySelector('#__farm_page__');\n    const pageShouldHydrate = route.pageShouldHydrate || route.isClientComponent;\n    const layoutShouldHydrate = route.layoutShouldHydrate;\n    ${\n      isolatedHydrationEnabled\n        ? `const hasIsolatedClientBoundaries = Boolean(\n      fragment.querySelector('farm-client-boundary[data-farm-client-boundary]'),\n    );\n    const shouldHydrate =\n      pageShouldHydrate || layoutShouldHydrate || (route.shouldHydrate && !hasIsolatedClientBoundaries);`\n        : \"const shouldHydrate = route.shouldHydrate || pageShouldHydrate || layoutShouldHydrate;\"\n    }\n\n    // A React-owned layout can update in place. Rendering the same layout\n    // component chain preserves its state while changing only the route child.\n    if (activeLayoutShouldHydrate && layoutShouldHydrate && (appRoot || reactRoot)) {\n      await tryHydrateImportedPage(\n        container,\n        route,\n        params,\n        layouts,\n        false,\n        pageData.props,\n        null,\n        {\n          pageShouldHydrate,\n          layoutShouldHydrate,\n          islandStrategy: route.islandStrategy,\n          serverHtml: nextPage ? nextPage.innerHTML : '',\n          loadingModulePath: route.loadingModulePath,\n        },\n      );\n    } else {\n      ${isolatedHydrationEnabled ? \"let isolatedHydrationScope = container;\" : \"\"}\n      if (activeLayoutShouldHydrate) {\n        ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(container);\" : \"\"}\n        if (appRoot) { try { appRoot.unmount(); } catch (error) {} appRoot = null; }\n        if (reactRoot) { try { reactRoot.unmount(); } catch (error) {} reactRoot = null; }\n        container.replaceChildren(fragment);\n        activateFragmentScripts(container);\n      } else {\n        if (appRoot) { try { appRoot.unmount(); } catch (error) {} appRoot = null; }\n        if (reactRoot) { try { reactRoot.unmount(); } catch (error) {} reactRoot = null; }\n        delete window.__FARM_REACT_ROOT__;\n        ${\n          isolatedHydrationEnabled\n            ? \"isolatedHydrationScope = replaceNavigationBoundary(container, fragment, activeLayoutPatterns, layoutPatterns) || container;\"\n            : \"replaceNavigationBoundary(container, fragment, activeLayoutPatterns, layoutPatterns);\"\n        }\n      }\n\n      const hydrationController = new AbortController();\n      if (\n        shouldHydrate${\n          isolatedHydrationEnabled\n            ? \" || (hasIsolatedClientBoundaries && !layoutShouldHydrate)\"\n            : \"\"\n        }\n      ) {\n        pendingPageHydrationController = hydrationController;\n      }\n      if (shouldHydrate) {\n        const hydrationContainer = layoutShouldHydrate\n          ? container\n          : document.getElementById('__farm_page__') || container;\n        const scheduledHydration = scheduleFarmIslandHydration({\n          container: hydrationContainer,\n          strategy: route.islandStrategy,\n          signal: hydrationController.signal,\n          hydrate: async () => {\n            await tryHydrateImportedPage(\n              hydrationContainer,\n              route,\n              params,\n              layouts,\n              true,\n              pageData.props,\n              hydrationController.signal,\n              {\n                pageShouldHydrate,\n                layoutShouldHydrate,\n                islandStrategy: route.islandStrategy,\n                loadingModulePath: route.loadingModulePath,\n              },\n            );\n          },\n        });\n        if (route.islandStrategy === 'load') {\n          await scheduledHydration;\n        } else {\n          void scheduledHydration.catch((error) => {\n            console.warn('[Farm.js] Deferred island hydration failed:', error);\n          });\n        }\n      }\n      ${\n        isolatedHydrationEnabled\n          ? `if (hasIsolatedClientBoundaries && !layoutShouldHydrate) {\n        await hydrateFarmIsolatedClientBoundaries(\n          isolatedHydrationScope,\n          hydrationController.signal,\n        );\n        if (hydrationController.signal.aborted) return;\n      }`\n          : \"\"\n      }\n    }\n\n    activeLayoutPatterns = layoutPatterns;\n    activeLayoutShouldHydrate = layoutShouldHydrate;\n    window.__FARM_LOADING_MODULE__ = route.loadingModulePath || null;\n    return true;\n  };\n\n  try {\n    await fetchAndSwapHTML();\n  } catch (error) {\n    console.error('[Farm.js] Render error:', error);\n    // Fallback to full navigation\n    window.location.href = path;\n  }\n}\n\n// Set up the navigation handler\nspaRouter.setNavigationHandler(renderPage);\n\nasync function hydrate() {\n  await farmClientRuntime.start();\n\n  if (isFarmDocsSearchPage()) {\n    await mountFarmDocsSearch();\n  }\n\n  if (await hydrateFarmDocsAdapterRuntime()) {\n    return;\n  }\n\n  const rootContainer = document.getElementById('root')\n  \n  if (!rootContainer) {\n    console.error('[Farm.js] Root container not found')\n    return\n  }\n\n  try {\n    // Check if this is a client component (set by SSR)\n    const isClientComponent = window.__FARM_IS_CLIENT__ === true;\n    const modulePath = window.__FARM_PAGE_MODULE__;\n    ${\n      isolatedHydrationEnabled\n        ? `const hasIsolatedClientBoundaries =\n      window.__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ === true ||\n      Boolean(rootContainer.querySelector('farm-client-boundary[data-farm-client-boundary]'));`\n        : \"\"\n    }\n\n    let pageProps = normalizeServerProps(window.__FARM_PROPS__);\n    applyCanonicalPathFromProps(pageProps);\n\n    const pageShouldHydrate =\n      typeof window.__FARM_PAGE_SHOULD_HYDRATE__ === 'boolean'\n        ? window.__FARM_PAGE_SHOULD_HYDRATE__\n        : isClientComponent ||\n          findRoute(window.location.pathname)?.route?.shouldHydrate === true;\n    const layoutShouldHydrate = window.__FARM_LAYOUT_SHOULD_HYDRATE__ === true;\n    const shouldHydrate =\n      window.__FARM_SHOULD_HYDRATE__ === true ||\n      pageShouldHydrate ||\n      layoutShouldHydrate;\n    const hydratedSlots = await hydrateInitialRouteSlots();\n    ${\n      isolatedHydrationEnabled\n        ? `if (hasIsolatedClientBoundaries && !pageShouldHydrate && !layoutShouldHydrate) {\n      const hydrationController = new AbortController();\n      pendingPageHydrationController = hydrationController;\n      await hydrateFarmIsolatedClientBoundaries(rootContainer, hydrationController.signal);\n      if (hydrationController.signal.aborted) return;\n      return;\n    }`\n        : \"\"\n    }\n    if (!shouldHydrate) {\n      if (hydratedSlots) replayPreHydrationClicks();\n      return\n    }\n    if (!modulePath) {\n      console.error('[Farm.js] No page module path found')\n      return\n    }\n\n    // Get props - either from server-injected props or by matching the current URL\n    if (!pageProps || !pageProps.params || Object.keys(pageProps.params).length === 0) {\n      // Extract params from URL using manifest route matching (fallback)\n      const pathname = window.location.pathname;\n      const foundRoute = findRoute(pathname);\n      pageProps = normalizeServerProps({\n        params: foundRoute?.params || {},\n        search: getCurrentSearchParams(),\n        searchParams: getCurrentSearchParams(),\n        path: pathname,\n      });\n    }\n    currentPageProps = pageProps;\n\n    // Prefer the exact root-to-leaf layout chain selected by the server. The\n    // manifest lookup remains a fallback for generated/static responses.\n    const layouts = Array.isArray(window.__FARM_LAYOUTS__)\n      ? window.__FARM_LAYOUTS__\n      : findLayouts(window.location.pathname);\n    const pageContainer = layoutShouldHydrate\n      ? rootContainer\n      : document.getElementById('__farm_page__') || rootContainer;\n\n    if (!pageContainer) {\n      return\n    }\n\n    const currentRoute = findRoute(window.location.pathname)?.route;\n    const islandStrategy = window.__FARM_ISLAND_STRATEGY__ || currentRoute?.islandStrategy || 'load';\n    pageContainer.dataset.farmIsland = 'page';\n    pageContainer.dataset.farmIslandStrategy = islandStrategy;\n\n    const hydrationPathname = window.location.pathname;\n    const hydrationController = new AbortController();\n    pendingPageHydrationController = hydrationController;\n    try {\n      const pageHydration = scheduleFarmIslandHydration({\n        container: pageContainer,\n        strategy: islandStrategy,\n        signal: hydrationController.signal,\n        hydrate: async () => {\n          if (\n            hydrationController.signal.aborted ||\n            !pageContainer.isConnected ||\n            window.location.pathname !== hydrationPathname\n          ) {\n            return;\n          }\n\n          const hydrationSession = await farmClientRuntime.beginHydration({\n            container: pageContainer,\n            mode: shouldHydrate ? 'hydrate' : 'render',\n          });\n\n          let hydrated = false;\n          try {\n            if (hydrationController.signal.aborted || !pageContainer.isConnected) {\n              await farmClientRuntime.failHydration(\n                hydrationSession,\n                new DOMException('Route hydration was cancelled', 'AbortError'),\n              );\n              return;\n            }\n            hydrated = await tryHydrateImportedPage(\n              pageContainer,\n              { modulePath },\n              currentPageProps.params || {},\n              layouts,\n              shouldHydrate,\n              currentPageProps,\n              hydrationController.signal,\n              {\n                pageShouldHydrate,\n                layoutShouldHydrate,\n                islandStrategy,\n              },\n            );\n            if (hydrationController.signal.aborted || !pageContainer.isConnected) {\n              await farmClientRuntime.failHydration(\n                hydrationSession,\n                new DOMException('Route hydration was cancelled', 'AbortError'),\n              );\n              return;\n            }\n            await farmClientRuntime.completeHydration(hydrationSession);\n          } catch (error) {\n            await farmClientRuntime.failHydration(hydrationSession, error);\n            throw error;\n          }\n\n          if (hydrated) {\n            // The scheduler owns queue draining and exactly-once click replay.\n            markFarmHydrated();\n            return;\n          }\n        },\n      });\n      ${\n        isolatedHydrationEnabled\n          ? `const isolatedHydration =\n        hasIsolatedClientBoundaries &&\n        !layoutShouldHydrate\n          ? hydrateFarmIsolatedClientBoundaries(rootContainer, hydrationController.signal)\n          : Promise.resolve();\n      await Promise.all([pageHydration, isolatedHydration]);`\n          : \"await pageHydration;\"\n      }\n    } finally {\n      if (pendingPageHydrationController === hydrationController) {\n        pendingPageHydrationController = null;\n      }\n    }\n  } catch (error) {\n    console.error('[Farm.js] Hydration error:', error)\n  }\n}\n\nif (document.readyState === 'loading') {\n  document.addEventListener('DOMContentLoaded', hydrate)\n} else {\n  hydrate()\n}\n\n// ====== EVENT DELEGATION FOR LINKS ======\n// This catches all link clicks even without React hydration\n// This is essential for server component pages where React doesn't hydrate\n\nfunction isModifierEvent(e) {\n  return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);\n}\n\nfunction hasAbsoluteNavigationHref(href) {\n  return /^[a-zA-Z][a-zA-Z\\\\d+.-]*:/.test(href) || href.startsWith('//');\n}\n\ndocument.addEventListener('click', function(event) {\n  if (document.documentElement.dataset.farmDocsRuntime === 'true') return;\n\n  // Find the closest anchor element\n  let target = event.target;\n  while (target && target.tagName !== 'A') {\n    target = target.parentElement;\n  }\n  \n  if (!target || target.tagName !== 'A') return;\n  \n  const href = target.getAttribute('href');\n  if (!href) return;\n  if (target.hasAttribute('download')) return;\n  \n  // Leave absolute URLs and non-HTTP schemes to the browser.\n  if (hasAbsoluteNavigationHref(href)) return;\n  \n  // Don't intercept hash-only links\n  if (href.startsWith('#')) return;\n  \n  // Don't intercept if target is set to open in new window\n  const linkTarget = target.getAttribute('target');\n  if (linkTarget && linkTarget !== '_self') return;\n  \n  // Don't intercept modifier clicks (Ctrl+Click = new tab)\n  if (isModifierEvent(event)) return;\n  \n  // Don't intercept non-left clicks\n  if (event.button !== 0) return;\n  \n  // Don't intercept if already prevented\n  if (event.defaultPrevented) return;\n  \n  // Use SPA router\n  event.preventDefault();\n  const replace = target.hasAttribute('data-replace');\n  const scroll = !target.hasAttribute('data-no-scroll');\n  const viewTransitionValue = target.getAttribute('data-view-transition');\n  const viewTransition = viewTransitionValue === 'auto'\n    ? 'auto'\n    : viewTransitionValue === 'true';\n  \n  spaRouter.navigate(href, { replace, scroll, viewTransition });\n});\n\nif (import.meta.hot) {\n  import.meta.hot.on('vite:beforeUpdate', () => {\n    // Clear module cache on HMR to pick up changes\n    pageModuleCache.clear();\n  })\n}\n`;\n}\n\nfunction generateServerCode(): string {\n  return `\nexport { FarmApp, createFarmApp } from './app'\nexport { ServerRenderer } from './server/renderer'\nexport { RouteManager } from './routing/route-manager'\nexport * from './types'\n`;\n}\n\nfunction generateClientManifest(bundle: any): Record<string, any> {\n  const manifest: Record<string, any> = {};\n\n  for (const [fileName, chunk] of Object.entries(bundle)) {\n    if ((chunk as any).type === \"chunk\") {\n      manifest[fileName] = {\n        id: fileName,\n        chunks: [fileName],\n        name: (chunk as any).name || fileName,\n      };\n    }\n  }\n\n  return manifest;\n}\n\nexport async function defineConfig(config: FarmVitePluginOptions = {}): Promise<UserConfig> {\n  const tailwindcss = (await import(\"@tailwindcss/vite\")).default;\n  const appRoot = path.resolve(config.root || process.cwd());\n  if (config.extends?.length) {\n    const { config: layeredConfig } = await import(\"./layers\").then(({ resolveFarmLayers }) =>\n      resolveFarmLayers(config, {\n        root: appRoot,\n        mode: process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n      }),\n    );\n    config = layeredConfig;\n  }\n  config.renderer = resolveFarmRenderer(config.renderer);\n  const rendererVitePlugins = await loadFarmRendererVitePlugins(config.renderer, appRoot, {\n    ssr: true,\n  });\n  // Node.js built-in module stubs for browser\n  const nodeBuiltinStubs: Record<string, string> = {\n    \"node:string_decoder\":\n      \"data:text/javascript,export class StringDecoder { write(buf) { return ''; } end() { return ''; } }; export default StringDecoder;\",\n    \"node:buffer\":\n      \"data:text/javascript,export const Buffer = { from: () => ({}), alloc: () => ({}), isBuffer: () => false }; export default { Buffer };\",\n    \"node:stream\":\n      \"data:text/javascript,export class Readable {}; export class Writable {}; export class Transform {}; export default { Readable, Writable, Transform };\",\n    \"node:util\":\n      \"data:text/javascript,export const promisify = (fn) => fn; export const inspect = (obj) => String(obj); export default { promisify, inspect };\",\n    \"node:events\":\n      \"data:text/javascript,export class EventEmitter { on() {} off() {} emit() {} }; export default EventEmitter;\",\n    \"node:path\":\n      \"data:text/javascript,export const join = (...args) => args.join('/'); export const resolve = (...args) => args.join('/'); export default { join, resolve };\",\n    \"node:fs\": \"data:text/javascript,export default {};\",\n    \"node:url\":\n      \"data:text/javascript,export const URL = globalThis.URL; export const URLSearchParams = globalThis.URLSearchParams; export default { URL, URLSearchParams };\",\n    \"node:crypto\":\n      \"data:text/javascript,export const randomUUID = () => crypto.randomUUID(); export default { randomUUID };\",\n    \"node:os\":\n      \"data:text/javascript,export const platform = () => 'browser'; export const homedir = () => '/'; export default { platform, homedir };\",\n    \"node:child_process\": \"data:text/javascript,export default {};\",\n    \"node:http\": \"data:text/javascript,export default {};\",\n    \"node:https\": \"data:text/javascript,export default {};\",\n    \"node:net\": \"data:text/javascript,export default {};\",\n    \"node:tls\": \"data:text/javascript,export default {};\",\n    \"node:zlib\": \"data:text/javascript,export default {};\",\n    \"node:async_hooks\":\n      \"data:text/javascript,export const AsyncLocalStorage = class {}; export default { AsyncLocalStorage };\",\n    \"node:worker_threads\": \"data:text/javascript,export default {};\",\n    \"node:perf_hooks\":\n      \"data:text/javascript,export const performance = globalThis.performance; export default { performance };\",\n    string_decoder:\n      \"data:text/javascript,export class StringDecoder { write(buf) { return ''; } end() { return ''; } }; export default StringDecoder;\",\n    buffer:\n      \"data:text/javascript,export const Buffer = { from: () => ({}), alloc: () => ({}), isBuffer: () => false }; export default { Buffer };\",\n    stream:\n      \"data:text/javascript,export class Readable {}; export class Writable {}; export class Transform {}; export default { Readable, Writable, Transform };\",\n    util: \"data:text/javascript,export const promisify = (fn) => fn; export const inspect = (obj) => String(obj); export default { promisify, inspect };\",\n    events:\n      \"data:text/javascript,export class EventEmitter { on() {} off() {} emit() {} }; export default EventEmitter;\",\n    path: \"data:text/javascript,export const join = (...args) => args.join('/'); export const resolve = (...args) => args.join('/'); export default { join, resolve };\",\n    fs: \"data:text/javascript,export default {};\",\n    url: \"data:text/javascript,export const URL = globalThis.URL; export const URLSearchParams = globalThis.URLSearchParams; export default { URL, URLSearchParams };\",\n    crypto:\n      \"data:text/javascript,export const randomUUID = () => crypto.randomUUID(); export default { randomUUID };\",\n    os: \"data:text/javascript,export const platform = () => 'browser'; export const homedir = () => '/'; export default { platform, homedir };\",\n    child_process: \"data:text/javascript,export default {};\",\n    http: \"data:text/javascript,export default {};\",\n    https: \"data:text/javascript,export default {};\",\n    net: \"data:text/javascript,export default {};\",\n    tls: \"data:text/javascript,export default {};\",\n    zlib: \"data:text/javascript,export default {};\",\n    async_hooks:\n      \"data:text/javascript,export const AsyncLocalStorage = class {}; export default { AsyncLocalStorage };\",\n    worker_threads: \"data:text/javascript,export default {};\",\n    perf_hooks:\n      \"data:text/javascript,export const performance = globalThis.performance; export default { performance };\",\n  };\n\n  // Plugin to intercept __vite-browser-external requests\n  const viteBrowserExternalPlugin = {\n    name: \"farm:browser-external-stub\",\n    enforce: \"pre\" as const,\n    resolveId(id: string) {\n      // Handle Vite's browser external markers\n      if (id.includes(\"__vite-browser-external:\")) {\n        const moduleName = id.replace(/__vite-browser-external:/, \"\");\n        const stub = nodeBuiltinStubs[moduleName];\n        if (stub) return stub;\n        // Generic stub for unknown node modules\n        return \"data:text/javascript,export default {};\";\n      }\n      // Handle direct node: imports\n      if (id.startsWith(\"node:\")) {\n        const stub = nodeBuiltinStubs[id];\n        if (stub) return stub;\n        return \"data:text/javascript,export default {};\";\n      }\n      return null;\n    },\n  };\n\n  // Custom logger to replace Vite's default logs with Farm.js branding\n  const pc = createCliColors();\n  let serverStarted = false;\n  let startTime = Date.now();\n\n  const farmLogger = {\n    info: (msg: string) => {\n      // Suppress ALL Vite startup messages - we print our own Farm.js branded output\n      if (\n        msg.includes(\"VITE\") ||\n        msg.includes(\"vite\") ||\n        msg.includes(\"ready in\") ||\n        msg.includes(\"Local:\") ||\n        msg.includes(\"Network:\") ||\n        msg.includes(\"➜\") ||\n        msg.includes(\"Port\") ||\n        msg.includes(\"trying another\")\n      ) {\n        return;\n      }\n      // Pass through other info messages\n      console.log(msg);\n    },\n    warn: (msg: string) => console.warn(pc.yellow(msg)),\n    warnOnce: (msg: string) => console.warn(pc.yellow(msg)),\n    error: (msg: string) => console.error(pc.red(msg)),\n    clearScreen: () => {},\n    hasErrorLogged: () => false,\n    hasWarned: false,\n  };\n\n  // Plugin to print Farm.js branding after server starts\n  const farmBrandingPlugin = {\n    name: \"farm:branding\",\n    enforce: \"pre\" as const,\n    configureServer(server: ViteDevServer) {\n      startTime = Date.now();\n\n      const originalListen = server.listen.bind(server);\n      server.listen = async (port?: number, ...args: any[]) => {\n        const result = await originalListen(port, ...args);\n        if (!serverStarted) {\n          serverStarted = true;\n          const elapsed = Date.now() - startTime;\n          const address = server.httpServer?.address();\n          const resolvedPort =\n            typeof address === \"object\" && address\n              ? address.port\n              : server.config.server.port || port || 3000;\n          const hostConfig = server.config.server.host;\n          const isExposed = hostConfig === true || hostConfig === \"0.0.0.0\";\n\n          console.log(\"\");\n          console.log(\n            `  ${pc.bold(pc.green(\"Farm.js\"))} ${pc.dim(`v${FARM_VERSION}`)} ${pc.dim(`ready in ${elapsed}ms`)}`,\n          );\n          console.log(\"\");\n          console.log(\n            `  ${pc.dim(\"➜\")}  ${pc.bold(\"Local:\")}   ${pc.cyan(`http://localhost:${resolvedPort}/`)}`,\n          );\n          if (isExposed) {\n            // Get actual network address\n            const os = require(\"os\");\n            const interfaces = os.networkInterfaces();\n            for (const name of Object.keys(interfaces)) {\n              for (const iface of interfaces[name] || []) {\n                if (iface.family === \"IPv4\" && !iface.internal) {\n                  console.log(\n                    `  ${pc.dim(\"➜\")}  ${pc.bold(\"Network:\")} ${pc.cyan(`http://${iface.address}:${resolvedPort}/`)}`,\n                  );\n                  break;\n                }\n              }\n            }\n          } else {\n            console.log(\n              `  ${pc.dim(\"➜\")}  ${pc.bold(\"Network:\")} ${pc.dim(\"use --host to expose\")}`,\n            );\n          }\n          console.log(\"\");\n        }\n        return result;\n      };\n    },\n  };\n\n  return {\n    plugins: [\n      createFarmThemeCssPlugin(config.theme, config.basePath),\n      tailwindcss(),\n      ...(rendererVitePlugins as any[]),\n      viteBrowserExternalPlugin,\n      farmI18nClientBridgePlugin(),\n      farmPlugin(config),\n      farmEnvironmentFunctionsPlugin(),\n      farmBrandingPlugin,\n    ],\n    customLogger: farmLogger,\n    clearScreen: false,\n    optimizeDeps: {\n      ...createFarmClientOptimizeDepsConfig(\n        createFarmClientOptimizeDepsEntries(\n          appRoot,\n          getFarmAppDirectories({ ...config, root: appRoot }),\n        ),\n        config.renderer,\n      ),\n      // Pre-bundle every framework client-runtime entry with the renderer. Without\n      // this, Vite can discover a linked Farm entry after the page has loaded,\n      // regenerate the optimizer browser hash, and leave the browser runtime\n      // holding a different renderer instance from a client component.\n      // Exclude server-side packages from browser bundling\n      exclude: [\n        \"@farm.js/core/server\",\n        \"@farm.js/core/api\",\n        \"@farm.js/core/middleware\",\n        \"@farm.js/core/config\",\n        \"nitro\",\n        \"h3\",\n        \"vite\",\n        \"esbuild\",\n        \"rollup\",\n        \"fsevents\",\n        \"nf3\",\n        \"better-call\",\n        \"zod\",\n        \"supports-color\",\n        \"node-fetch\",\n        \"consola\",\n        \"mock-aws-s3\",\n        \"aws-sdk\",\n        \"nock\",\n      ],\n    },\n    ssr: {\n      noExternal: [\"farm\", \"@farm.js/core\"],\n      // Externalize the renderer to prevent multiple runtime instances during SSR.\n      external: [...(config.renderer.dedupe || [])],\n    },\n    resolve: {\n      // Ensure one renderer instance across application and framework modules.\n      dedupe: [...(config.renderer.dedupe || [])],\n      // Stub out problematic server-only modules during dev mode\n      alias: {\n        ...getFarmLayerAliases(config.layers),\n        ...createFarmSourceAlias(appRoot, config.srcDir),\n        // Nitro internals that should not be resolved in browser\n        \"supports-color\":\n          \"data:text/javascript,export default false; export const supportsColor = false; export const stdout = false; export const stderr = false;\",\n        \"@poppinss/dumper\": \"data:text/javascript,export default {};\",\n        \"@poppinss/dumper/html\":\n          \"data:text/javascript,export const createScript = () => ''; export const createStyleSheet = () => '';\",\n        \"consola/basic\":\n          \"data:text/javascript,export default { log: console.log, info: console.info, warn: console.warn, error: console.error };\",\n        youch:\n          \"data:text/javascript,export default class Youch { toJSON() { return {}; } toHTML() { return ''; } };\",\n        // Add all node stubs to alias as well\n        ...nodeBuiltinStubs,\n      },\n    },\n    define: {\n      __FARM_DEV__: JSON.stringify(process.env.NODE_ENV === \"development\"),\n      __FARM_API_BASE_URL__: JSON.stringify(getFarmAPIBaseURLDefine(config)),\n      __FARM_PUBLIC_ENV__: JSON.stringify(getPublicEnvDefine(config)),\n    },\n  };\n}\n","import type { PluginRoutes, PluginRoutesFactory } from \"./api/route\";\n// Plugin factories must emit declarations through public exports, never bundled\n// declaration chunk paths, even when they only import @farm.js/core/plugin.\nexport type { PluginRoutes, PluginRoutesFactory, RouteDefinition } from \"./api/route\";\nimport type { FarmConfig, FarmRequest, FarmResponse } from \"./types\";\nimport type { ViteDevServer } from \"vite\";\nimport type { FarmClientPlugin } from \"./client/plugin\";\nimport { getResolvedEnv, type ResolvedFarmEnv } from \"./env\";\nimport {\n  clearRequestContext,\n  deleteRequestContext,\n  getRequestContext,\n  getRequestContextSnapshot,\n  hasRequestContext,\n  setRequestContext,\n} from \"./request-context\";\nimport { getFarmPluginIntegrationContext } from \"./plugin-integration-context\";\n\ntype MaybePromise<T> = T | Promise<T>;\n/** @internal Marks a Node response whose intercepted end is awaiting response hooks. */\nexport const FARM_NODE_RESPONSE_END_PENDING = Symbol.for(\"farm.nodeResponseEndPending\");\ndeclare const FARM_PLUGIN_INTEGRATION_INSTANCE: unique symbol;\ndeclare const FARM_PLUGIN_INTEGRATION_BOUND: unique symbol;\n\nexport interface FarmPluginIntegrationContext<TInstance = unknown> {\n  /** Key used to register the integration in farm.config.ts. */\n  readonly key: string;\n  readonly category: string;\n  readonly type: string;\n  readonly instance: TInstance;\n  readonly serverRuntime: boolean;\n}\n\nexport class FarmRuntimeShutdownError extends Error {\n  readonly errors: readonly unknown[];\n\n  constructor(message: string, errors: readonly unknown[]) {\n    super(message);\n    this.name = \"FarmRuntimeShutdownError\";\n    this.errors = errors;\n  }\n}\n\nexport interface PluginRequestContext {\n  set: (\n    target: FarmRequest | Request,\n    key: string,\n    value: any,\n    options?: { exposeToPage?: boolean },\n  ) => void;\n  get: <T = any>(target: FarmRequest | Request, key: string) => T | undefined;\n  has: (target: FarmRequest | Request, key: string) => boolean;\n  delete: (target: FarmRequest | Request, key: string) => boolean;\n  clear: (target: FarmRequest | Request) => void;\n  getAll: (target: FarmRequest | Request, options?: { exposedOnly?: boolean }) => Map<string, any>;\n}\n\nexport interface FarmRequestStore {\n  set(key: string, value: unknown, options?: { exposeToPage?: boolean }): void;\n  get<T = unknown>(key: string): T | undefined;\n  has(key: string): boolean;\n  delete(key: string): boolean;\n  clear(): void;\n  snapshot(options?: { exposedOnly?: boolean }): Map<string, unknown>;\n}\n\nexport interface FarmPluginContext<TIntegrationInstance = unknown> {\n  config: FarmConfig;\n  viteServer?: ViteDevServer;\n  isDev: boolean;\n  isProd: boolean;\n  /** The owning integration when this plugin is contributed through `integration.plugins`. */\n  readonly integration?: Readonly<FarmPluginIntegrationContext<TIntegrationInstance>>;\n  /** Register resource cleanup that must run when the application runtime closes. */\n  lifecycle: FarmPluginLifecycle;\n  /** @deprecated Use `ctx.req` inside request hooks. */\n  requestContext: PluginRequestContext;\n}\n\ntype FarmPluginHookContext<\n  TContext,\n  TIntegrationInstance,\n  TIntegrationBound extends boolean,\n> = TIntegrationBound extends true\n  ? Omit<TContext, \"integration\"> & {\n      /** The owning integration bound by `definePlugin.forIntegration<T>()`. */\n      readonly integration: Readonly<FarmPluginIntegrationContext<TIntegrationInstance>>;\n    }\n  : TContext;\n\nexport interface FarmPluginLifecycle {\n  /**\n   * Register a database, storage, queue, or other resource disposer.\n   * Disposers run once in reverse registration order after plugin shutdown hooks.\n   */\n  onShutdown(dispose: () => void | Promise<void>): () => void;\n}\n\nexport interface FarmRequestPluginContext<\n  TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n  /** Request-scoped values for the current hook invocation. */\n  readonly req: FarmRequestStore;\n}\n\nexport interface RouteDiscoveredPayload {\n  kind: \"page\" | \"layout\";\n  pattern: string;\n  modulePath: string;\n}\n\nexport interface RoutesGeneratedPayload {\n  routes: RouteDiscoveredPayload[];\n  pageCount: number;\n  layoutCount: number;\n}\n\nexport interface MiddlewareDiscoveredPayload {\n  path: string;\n  filePath: string;\n  handlerCount: number;\n}\n\nexport interface APIRouteDiscoveredPayload {\n  path: string;\n  filePath: string;\n  methods: string[];\n}\n\nexport interface RouteMatchPayload {\n  pathname: string;\n  method?: string;\n}\n\nexport interface RouteMatchResultPayload {\n  pathname: string;\n  matched: boolean;\n  routePattern: string | null;\n  params: Record<string, string>;\n  layoutPatterns: string[];\n}\n\nexport interface RenderLifecyclePayload {\n  pathname: string;\n  method: string;\n  routePattern: string | null;\n  params: Record<string, string>;\n}\n\nexport interface APIHandlerLifecyclePayload {\n  pathname: string;\n  method: string;\n  routePath?: string;\n}\n\nexport interface ErrorLifecyclePayload {\n  phase: string;\n  error: unknown;\n  meta?: Record<string, unknown>;\n}\n\nexport interface HMRUpdatePayload {\n  file: string;\n  modules: string[];\n}\n\nexport interface BundleLifecyclePayload {\n  root: string;\n  preset: string;\n  universal: boolean;\n  distDir: string;\n  outputDir?: string;\n}\n\nexport interface BundleResultPayload extends BundleLifecyclePayload {\n  success: boolean;\n}\n\nexport interface NitroBuildLifecyclePayload {\n  root: string;\n  preset: string;\n  distDir: string;\n  outputDir: string;\n}\n\nexport interface ShutdownPayload {\n  reason: string;\n}\n\nexport type FarmPluginRuntimeKind =\n  | \"request\"\n  | \"page\"\n  | \"api\"\n  | \"action\"\n  | \"integration\"\n  | \"docs\"\n  | \"asset\"\n  | (string & {});\n\nexport interface FarmPluginRouteRuntimePayload {\n  pathname: string;\n  pattern?: string | null;\n  params?: Record<string, string>;\n}\n\nexport interface FarmPluginSetupContext<\n  TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n  env: ResolvedFarmEnv;\n}\n\nexport interface FarmPluginStateContext<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n  state: TState;\n}\n\nexport interface FarmPluginRuntimeBaseEvent<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n> extends FarmPluginStateContext<TState, TIntegrationInstance> {\n  request: Request;\n  /** Request-scoped values shared by plugin hooks. */\n  req: FarmRequestStore;\n  kind: FarmPluginRuntimeKind;\n  route?: FarmPluginRouteRuntimePayload;\n  signal: AbortSignal;\n  waitUntil(promise: Promise<unknown>): void;\n}\n\nexport type FarmPluginRuntimeContextEvent<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n> = FarmPluginRuntimeBaseEvent<TState, TIntegrationInstance>;\n\nexport interface FarmPluginRuntimeBeforeEvent<\n  TState = unknown,\n  TRequestContext extends object = Record<string, unknown>,\n  TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBaseEvent<TState, TIntegrationInstance> {\n  ctx: Readonly<TRequestContext>;\n}\n\nexport interface FarmPluginRuntimeAfterEvent<\n  TState = unknown,\n  TRequestContext extends object = Record<string, unknown>,\n  TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance> {\n  response: Response;\n  durationMs: number;\n}\n\nexport interface FarmPluginRuntimeErrorEvent<\n  TState = unknown,\n  TRequestContext extends object = Record<string, unknown>,\n  TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance> {\n  error: unknown;\n  durationMs: number;\n}\n\nexport type FarmPluginRuntimeStartEvent<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n> = FarmPluginStateContext<TState, TIntegrationInstance>;\n\nexport interface FarmPluginRuntimeCloseEvent<TState = unknown, TIntegrationInstance = unknown>\n  extends FarmPluginStateContext<TState, TIntegrationInstance>, ShutdownPayload {}\n\ntype FarmPluginContextFor<\n  TIntegrationInstance,\n  TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n  FarmPluginContext<TIntegrationInstance>,\n  TIntegrationInstance,\n  TIntegrationBound\n>;\n\ntype FarmRequestPluginContextFor<\n  TIntegrationInstance,\n  TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n  FarmRequestPluginContext<TIntegrationInstance>,\n  TIntegrationInstance,\n  TIntegrationBound\n>;\n\ntype FarmPluginSetupContextFor<\n  TIntegrationInstance,\n  TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n  FarmPluginSetupContext<TIntegrationInstance>,\n  TIntegrationInstance,\n  TIntegrationBound\n>;\n\ntype FarmPluginStateContextFor<\n  TState,\n  TIntegrationInstance,\n  TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n  FarmPluginStateContext<TState, TIntegrationInstance>,\n  TIntegrationInstance,\n  TIntegrationBound\n>;\n\ntype FarmPluginRuntimeEventFor<\n  TEvent,\n  TIntegrationInstance,\n  TIntegrationBound extends boolean,\n> = FarmPluginHookContext<TEvent, TIntegrationInstance, TIntegrationBound>;\n\nexport interface FarmPluginRuntimeHooks<\n  TState = unknown,\n  TRequestContext extends object = Record<string, unknown>,\n  TIntegrationInstance = unknown,\n  TIntegrationBound extends boolean = false,\n> {\n  start?(\n    event: FarmPluginRuntimeEventFor<\n      FarmPluginRuntimeStartEvent<TState, TIntegrationInstance>,\n      TIntegrationInstance,\n      TIntegrationBound\n    >,\n  ): MaybePromise<void>;\n  context?(\n    event: FarmPluginRuntimeEventFor<\n      FarmPluginRuntimeContextEvent<TState, TIntegrationInstance>,\n      TIntegrationInstance,\n      TIntegrationBound\n    >,\n  ): MaybePromise<TRequestContext>;\n  before?(\n    event: FarmPluginRuntimeEventFor<\n      FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance>,\n      TIntegrationInstance,\n      TIntegrationBound\n    >,\n  ): MaybePromise<Request | Response | void>;\n  after?(\n    event: FarmPluginRuntimeEventFor<\n      FarmPluginRuntimeAfterEvent<TState, TRequestContext, TIntegrationInstance>,\n      TIntegrationInstance,\n      TIntegrationBound\n    >,\n  ): MaybePromise<Response | void>;\n  error?(\n    event: FarmPluginRuntimeEventFor<\n      FarmPluginRuntimeErrorEvent<TState, TRequestContext, TIntegrationInstance>,\n      TIntegrationInstance,\n      TIntegrationBound\n    >,\n  ): MaybePromise<void>;\n  close?(\n    event: FarmPluginRuntimeEventFor<\n      FarmPluginRuntimeCloseEvent<TState, TIntegrationInstance>,\n      TIntegrationInstance,\n      TIntegrationBound\n    >,\n  ): MaybePromise<void>;\n}\n\nexport interface FarmPluginRuntimeRequestOptions {\n  kind?: FarmPluginRuntimeKind;\n  route?: FarmPluginRouteRuntimePayload;\n  waitUntil?: (promise: Promise<unknown>) => void;\n}\n\nexport type FarmPluginRuntimeRequestHandler = (request: Request) => MaybePromise<Response>;\n\nexport interface FarmPluginRuntimeSession {\n  request: Request;\n  response?: Response;\n  ctx: Readonly<Record<string, unknown>>;\n  startedAt: number;\n  options: FarmPluginRuntimeRequestOptions;\n  waitUntil(promise: Promise<unknown>): void;\n}\n\nexport type FarmPluginDiscoveredRoute =\n  | RouteDiscoveredPayload\n  | ({ kind: \"middleware\" } & MiddlewareDiscoveredPayload)\n  | ({ kind: \"api\" } & APIRouteDiscoveredPayload);\n\nexport interface FarmPluginRouterHooks<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n  TIntegrationBound extends boolean = false,\n> {\n  discovered?(\n    route: FarmPluginDiscoveredRoute,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n  generated?(\n    routes: RoutesGeneratedPayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n  before?(\n    route: RouteMatchPayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n  after?(\n    result: RouteMatchResultPayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n}\n\nexport interface FarmPluginRenderHooks<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n  TIntegrationBound extends boolean = false,\n> {\n  before?(\n    render: RenderLifecyclePayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n  html?(\n    html: string,\n    render: RenderLifecyclePayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<string | void>;\n}\n\nexport interface FarmPluginBuildHooks<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n  TIntegrationBound extends boolean = false,\n> {\n  before?(\n    bundle: BundleLifecyclePayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n  configure?(\n    buildConfig: any,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<any>;\n  after?(\n    result: BundleResultPayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n}\n\nexport interface FarmPluginDevHooks<\n  TState = unknown,\n  TIntegrationInstance = unknown,\n  TIntegrationBound extends boolean = false,\n> {\n  server?(\n    viteServer: ViteDevServer,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n  update?(\n    update: HMRUpdatePayload,\n    context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n  ): MaybePromise<void>;\n}\n\nexport interface FarmPluginClientConfig<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientPlugin<TState, TPublic> {\n  /** Explicitly public, JSON-safe data embedded in the browser bundle. */\n  public?: TPublic;\n}\n\nexport interface FarmPlugin<\n  TState = any,\n  TRequestContext extends object = Record<string, unknown>,\n  TClientState = any,\n  TClientPublic = any,\n  TIntegrationInstance = unknown,\n  TIntegrationBound extends boolean = false,\n  TRoutes extends PluginRoutes = PluginRoutes,\n> {\n  name: string;\n  version?: string;\n  enforce?: \"pre\" | \"post\";\n  /** Declarative API routes, mounted through the normal dev and production API pipeline. */\n  routes?: PluginRoutesFactory<TRoutes>;\n\n  /** Transform Farm config before the development or production pipeline is created. */\n  configure?: (\n    config: FarmConfig,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => MaybePromise<FarmConfig | void>;\n  /** Initialize private plugin state once for this plugin manager. */\n  setup?: (\n    context: FarmPluginSetupContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => MaybePromise<TState>;\n\n  runtime?: FarmPluginRuntimeHooks<\n    TState,\n    TRequestContext,\n    TIntegrationInstance,\n    TIntegrationBound\n  >;\n  router?: FarmPluginRouterHooks<TState, TIntegrationInstance, TIntegrationBound>;\n  render?: FarmPluginRenderHooks<TState, TIntegrationInstance, TIntegrationBound>;\n  build?: FarmPluginBuildHooks<TState, TIntegrationInstance, TIntegrationBound>;\n  dev?: FarmPluginDevHooks<TState, TIntegrationInstance, TIntegrationBound>;\n  /** Optional browser lifecycle for this logical plugin. */\n  client?: FarmPluginClientConfig<TClientState, TClientPublic>;\n\n  /** @internal Carries the expected integration instance type without runtime data. */\n  readonly [FARM_PLUGIN_INTEGRATION_INSTANCE]?: (instance: TIntegrationInstance) => void;\n  /** @internal Prevents integration-bound plugins from being registered globally. */\n  readonly [FARM_PLUGIN_INTEGRATION_BOUND]?: TIntegrationBound;\n\n  /** @deprecated Use `setup` instead. */\n  init?: (\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `runtime.start` instead. */\n  ready?: (\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `dev.server` instead. */\n  devServerCreated?: (\n    viteServer: ViteDevServer,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n\n  /** @deprecated Use `configure` instead. */\n  config?: (\n    config: FarmConfig,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => FarmConfig | Promise<FarmConfig>;\n  configResolved?: (\n    config: FarmConfig,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `build.before` instead. */\n  buildStart?: (\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `build.after` instead. */\n  buildEnd?: (\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n\n  /** @deprecated Use `router.discovered` instead. */\n  routeDiscovered?: (\n    route: RouteDiscoveredPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `router.generated` instead. */\n  routesGenerated?: (\n    routes: RoutesGeneratedPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `router.discovered` instead. */\n  middlewareDiscovered?: (\n    middleware: MiddlewareDiscoveredPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `router.discovered` instead. */\n  apiRouteDiscovered?: (\n    route: APIRouteDiscoveredPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `router.before` instead. */\n  beforeRouteMatch?: (\n    route: RouteMatchPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `router.after` instead. */\n  afterRouteMatch?: (\n    result: RouteMatchResultPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `render.before` instead. */\n  beforeRender?: (\n    render: RenderLifecyclePayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `render.html` instead. */\n  afterRender?: (\n    html: string,\n    render: RenderLifecyclePayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => string | Promise<string> | void | Promise<void>;\n  /** @deprecated Use `runtime.before` instead. */\n  beforeApiHandler?: (\n    request: Request,\n    api: APIHandlerLifecyclePayload,\n    context: FarmRequestPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => Request | Promise<Request> | void | Promise<void>;\n  /** @deprecated Use `runtime.after` instead. */\n  afterApiHandler?: (\n    response: Response,\n    api: APIHandlerLifecyclePayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => Response | Promise<Response> | void | Promise<void>;\n  onError?: (\n    error: ErrorLifecyclePayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `dev.update` instead. */\n  hmrUpdate?: (\n    update: HMRUpdatePayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `build.before` instead. */\n  beforeBundle?: (\n    bundle: BundleLifecyclePayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `build.after` instead. */\n  afterBundle?: (\n    result: BundleResultPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `build.configure` instead. */\n  beforeNitroBuild?: (\n    nitroConfig: any,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => any | Promise<any>;\n  afterNitroBuild?: (\n    payload: NitroBuildLifecyclePayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use `runtime.close` instead. */\n  shutdown?: (\n    payload: ShutdownPayload,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n\n  /** @deprecated Use the Web Request based `runtime.before` hook instead. */\n  beforeRequest?: (\n    req: FarmRequest,\n    res: FarmResponse,\n    context: FarmRequestPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n  /** @deprecated Use the Web Response based `runtime.after` hook instead. */\n  afterResponse?: (\n    req: FarmRequest,\n    res: FarmResponse,\n    context: FarmRequestPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => void | Promise<void>;\n\n  // Transform hooks\n  /** @deprecated Use `render.html` instead. */\n  transformHTML?: (\n    html: string,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => string | Promise<string>;\n  /** @deprecated Use `render.before` or `render.html` instead. */\n  transformPage?: (\n    component: any,\n    context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n  ) => any | Promise<any>;\n}\n\nexport class PluginManager {\n  private plugins: FarmPlugin[] = [];\n  private hookPresence = new Map<keyof FarmPlugin, boolean>();\n  private runtimeHookPresence = new Map<\"context\" | \"before\" | \"after\" | \"error\", boolean>();\n  private context: FarmPluginContext;\n  private pluginStates = new Map<FarmPlugin, unknown>();\n  private setupComplete = false;\n  private initialized = false;\n  private runtimeReady = false;\n  private runtimeClosed = false;\n  private runtimeStartPromise?: Promise<void>;\n  private runtimeClosePromise?: Promise<void>;\n  private runtimeShutdownHooksRunning = false;\n  private runtimeDisposers: Array<() => void | Promise<void>> = [];\n  private runtimeRequestContexts = new WeakMap<Request, Readonly<Record<string, unknown>>>();\n  private failedRuntimeSessions = new WeakSet<FarmPluginRuntimeSession>();\n\n  constructor(context: Omit<FarmPluginContext, \"requestContext\" | \"lifecycle\">) {\n    this.context = {\n      ...context,\n      lifecycle: {\n        onShutdown: (dispose) => {\n          if (typeof dispose !== \"function\") {\n            throw new TypeError(\"Farm lifecycle.onShutdown requires a cleanup function\");\n          }\n          // Shutdown never waits for startup, because a plugin whose\n          // runtime.start() hangs still has to be able to stop. Setup can\n          // therefore finish after the runtime is already closed, and the only\n          // way not to leak what it just opened is to release it now. This is\n          // what the disposer would have done moments earlier.\n          if (this.runtimeClosed) {\n            void (async () => {\n              try {\n                await dispose();\n              } catch (error) {\n                console.error(\"Farm runtime cleanup registered after shutdown failed:\", error);\n              }\n            })();\n            return () => {};\n          }\n\n          this.runtimeDisposers.push(dispose);\n          let registered = true;\n          return () => {\n            if (!registered) return;\n            registered = false;\n            const index = this.runtimeDisposers.indexOf(dispose);\n            if (index >= 0) this.runtimeDisposers.splice(index, 1);\n          };\n        },\n      },\n      requestContext: {\n        set(target, key, value, options) {\n          setRequestContext(target as object, key, value, options);\n        },\n        get(target, key) {\n          return getRequestContext(target as object, key);\n        },\n        has(target, key) {\n          return hasRequestContext(target as object, key);\n        },\n        delete(target, key) {\n          return deleteRequestContext(target as object, key);\n        },\n        clear(target) {\n          clearRequestContext(target as object);\n        },\n        getAll(target, options) {\n          return getRequestContextSnapshot(target as object, options);\n        },\n      },\n    };\n  }\n\n  private createPluginHookContext(\n    plugin: FarmPlugin,\n    context: FarmPluginContext = this.context,\n  ): FarmPluginContext {\n    const integration = getFarmPluginIntegrationContext(plugin);\n    return integration ? { ...context, integration } : context;\n  }\n\n  private createRequestHookContext(\n    target: FarmRequest | Request,\n    plugin: FarmPlugin,\n  ): FarmRequestPluginContext {\n    const requestContext = this.context.requestContext;\n\n    return {\n      ...this.createPluginHookContext(plugin),\n      req: {\n        set(key, value, options) {\n          requestContext.set(target, key, value, options);\n        },\n        get(key) {\n          return requestContext.get(target, key);\n        },\n        has(key) {\n          return requestContext.has(target, key);\n        },\n        delete(key) {\n          return requestContext.delete(target, key);\n        },\n        clear() {\n          requestContext.clear(target);\n        },\n        snapshot(options) {\n          return requestContext.getAll(target, options);\n        },\n      },\n    };\n  }\n\n  private copyRequestStore(source: FarmRequest | Request, target: FarmRequest | Request): void {\n    const requestContext = this.context.requestContext;\n    const values = requestContext.getAll(source);\n    const exposed = requestContext.getAll(source, { exposedOnly: true });\n\n    for (const [key, value] of values) {\n      requestContext.set(target, key, value, {\n        exposeToPage: exposed.has(key),\n      });\n    }\n  }\n\n  private copyRuntimeRequestContext(source: Request, target: Request): void {\n    const runtimeContext = this.runtimeRequestContexts.get(source);\n    if (runtimeContext) {\n      this.runtimeRequestContexts.set(target, runtimeContext);\n    }\n  }\n\n  private createRuntimeBaseEvent(\n    plugin: FarmPlugin,\n    request: Request,\n    options: FarmPluginRuntimeRequestOptions,\n    waitUntil: (promise: Promise<unknown>) => void,\n  ): FarmPluginRuntimeBaseEvent {\n    return {\n      ...this.createStateHookContext(plugin),\n      request,\n      req: this.createRequestHookContext(request, plugin).req,\n      kind: options.kind ?? \"request\",\n      route: options.route,\n      signal: request.signal,\n      waitUntil,\n    };\n  }\n\n  private async createRuntimeRequestContext(\n    request: Request,\n    options: FarmPluginRuntimeRequestOptions,\n    waitUntil: (promise: Promise<unknown>) => void,\n  ): Promise<Readonly<Record<string, unknown>>> {\n    const values: Record<string, unknown> = {};\n    const owners = new Map<string, string>();\n\n    for (const plugin of this.getSortedPlugins()) {\n      const createContext = plugin.runtime?.context;\n      if (!createContext) continue;\n\n      const result = await createContext(\n        this.createRuntimeBaseEvent(plugin, request, options, waitUntil),\n      );\n      if (result === undefined) continue;\n      if (!result || typeof result !== \"object\" || Array.isArray(result)) {\n        throw new TypeError(`Farm plugin \"${plugin.name}\" runtime.context must return an object`);\n      }\n\n      for (const [key, value] of Object.entries(result)) {\n        const owner = owners.get(key);\n        if (owner) {\n          throw new Error(\n            `Farm plugin context key \"${key}\" from \"${plugin.name}\" conflicts with \"${owner}\"`,\n          );\n        }\n        owners.set(key, plugin.name);\n        values[key] = value;\n      }\n    }\n\n    const runtimeContext = Object.freeze(values);\n    this.runtimeRequestContexts.set(request, runtimeContext);\n    return runtimeContext;\n  }\n\n  private async runRuntimeErrorHooks(\n    request: Request,\n    error: unknown,\n    ctx: Readonly<Record<string, unknown>>,\n    durationMs: number,\n    options: FarmPluginRuntimeRequestOptions,\n    waitUntil: (promise: Promise<unknown>) => void,\n  ): Promise<void> {\n    for (const plugin of this.getSortedPlugins()) {\n      const onError = plugin.runtime?.error;\n      if (!onError) continue;\n\n      try {\n        await onError({\n          ...this.createRuntimeBaseEvent(plugin, request, options, waitUntil),\n          ctx,\n          error,\n          durationMs,\n        });\n      } catch (hookError) {\n        console.error(`Farm plugin \"${plugin.name}\" runtime.error failed:`, hookError);\n      }\n    }\n\n    try {\n      await this.runHookParallel(\"onError\", {\n        phase: \"runtime\",\n        error,\n        meta: {\n          kind: options.kind ?? \"request\",\n          pathname: new URL(request.url).pathname,\n          durationMs,\n        },\n      });\n    } catch (hookError) {\n      console.error(\"Farm plugin onError hook failed:\", hookError);\n    }\n  }\n\n  private createStateHookContext(\n    plugin: FarmPlugin,\n    context: FarmPluginContext = this.context,\n  ): FarmPluginStateContext {\n    return {\n      ...this.createPluginHookContext(plugin, context),\n      state: this.pluginStates.get(plugin),\n    };\n  }\n\n  private getPluginHooks(\n    plugin: FarmPlugin,\n    hookName: keyof FarmPlugin,\n  ): Array<(...args: any[]) => any> {\n    const hooks: Array<(...args: any[]) => any> = [];\n    const legacyHook = plugin[hookName];\n    if (typeof legacyHook === \"function\") {\n      hooks.push(legacyHook);\n    }\n\n    const withState = (context: FarmPluginContext) => this.createStateHookContext(plugin, context);\n\n    switch (hookName) {\n      case \"config\":\n        if (plugin.configure) {\n          hooks.push((config: FarmConfig, context: FarmPluginContext) =>\n            plugin.configure?.(config, context),\n          );\n        }\n        break;\n      case \"ready\":\n        if (plugin.runtime?.start) {\n          hooks.push((context: FarmPluginContext) => plugin.runtime?.start?.(withState(context)));\n        }\n        break;\n      case \"shutdown\":\n        if (plugin.runtime?.close) {\n          hooks.push((payload: ShutdownPayload, context: FarmPluginContext) =>\n            plugin.runtime?.close?.({\n              ...withState(context),\n              reason: payload.reason,\n            }),\n          );\n        }\n        break;\n      case \"routeDiscovered\":\n        if (plugin.router?.discovered) {\n          hooks.push((route: RouteDiscoveredPayload, context: FarmPluginContext) =>\n            plugin.router?.discovered?.(route, withState(context)),\n          );\n        }\n        break;\n      case \"middlewareDiscovered\":\n        if (plugin.router?.discovered) {\n          hooks.push((route: MiddlewareDiscoveredPayload, context: FarmPluginContext) =>\n            plugin.router?.discovered?.({ kind: \"middleware\", ...route }, withState(context)),\n          );\n        }\n        break;\n      case \"apiRouteDiscovered\":\n        if (plugin.router?.discovered) {\n          hooks.push((route: APIRouteDiscoveredPayload, context: FarmPluginContext) =>\n            plugin.router?.discovered?.({ kind: \"api\", ...route }, withState(context)),\n          );\n        }\n        break;\n      case \"routesGenerated\":\n        if (plugin.router?.generated) {\n          hooks.push((routes: RoutesGeneratedPayload, context: FarmPluginContext) =>\n            plugin.router?.generated?.(routes, withState(context)),\n          );\n        }\n        break;\n      case \"beforeRouteMatch\":\n        if (plugin.router?.before) {\n          hooks.push((route: RouteMatchPayload, context: FarmPluginContext) =>\n            plugin.router?.before?.(route, withState(context)),\n          );\n        }\n        break;\n      case \"afterRouteMatch\":\n        if (plugin.router?.after) {\n          hooks.push((result: RouteMatchResultPayload, context: FarmPluginContext) =>\n            plugin.router?.after?.(result, withState(context)),\n          );\n        }\n        break;\n      case \"beforeRender\":\n        if (plugin.render?.before) {\n          hooks.push((render: RenderLifecyclePayload, context: FarmPluginContext) =>\n            plugin.render?.before?.(render, withState(context)),\n          );\n        }\n        break;\n      case \"afterRender\":\n        if (plugin.render?.html) {\n          hooks.push((html: string, render: RenderLifecyclePayload, context: FarmPluginContext) =>\n            plugin.render?.html?.(html, render, withState(context)),\n          );\n        }\n        break;\n      case \"beforeBundle\":\n        if (plugin.build?.before) {\n          hooks.push((bundle: BundleLifecyclePayload, context: FarmPluginContext) =>\n            plugin.build?.before?.(bundle, withState(context)),\n          );\n        }\n        break;\n      case \"beforeNitroBuild\":\n        if (plugin.build?.configure) {\n          hooks.push((buildConfig: any, context: FarmPluginContext) =>\n            plugin.build?.configure?.(buildConfig, withState(context)),\n          );\n        }\n        break;\n      case \"afterBundle\":\n        if (plugin.build?.after) {\n          hooks.push((result: BundleResultPayload, context: FarmPluginContext) =>\n            plugin.build?.after?.(result, withState(context)),\n          );\n        }\n        break;\n      case \"devServerCreated\":\n        if (plugin.dev?.server) {\n          hooks.push((server: ViteDevServer, context: FarmPluginContext) =>\n            plugin.dev?.server?.(server, withState(context)),\n          );\n        }\n        break;\n      case \"hmrUpdate\":\n        if (plugin.dev?.update) {\n          hooks.push((update: HMRUpdatePayload, context: FarmPluginContext) =>\n            plugin.dev?.update?.(update, withState(context)),\n          );\n        }\n        break;\n    }\n\n    return hooks;\n  }\n\n  private getHookContext(\n    plugin: FarmPlugin,\n    hookName: keyof FarmPlugin,\n    args: any[],\n  ): FarmPluginContext {\n    if (\n      hookName === \"beforeRequest\" ||\n      hookName === \"afterResponse\" ||\n      hookName === \"beforeApiHandler\"\n    ) {\n      const target = args[0];\n      if (target && typeof target === \"object\") {\n        return this.createRequestHookContext(target, plugin);\n      }\n    }\n\n    return this.createPluginHookContext(plugin);\n  }\n\n  addPlugin(plugin: FarmPlugin) {\n    this.plugins.push(plugin);\n    this.hookPresence.clear();\n    this.runtimeHookPresence.clear();\n  }\n\n  addPlugins(plugins: FarmPlugin[]) {\n    for (const plugin of plugins) {\n      this.addPlugin(plugin);\n    }\n  }\n\n  getPlugins(): FarmPlugin[] {\n    return [...this.plugins];\n  }\n\n  getSortedPlugins(): FarmPlugin[] {\n    const pre = this.plugins.filter((p) => p.enforce === \"pre\");\n    const normal = this.plugins.filter((p) => !p.enforce);\n    const post = this.plugins.filter((p) => p.enforce === \"post\");\n    return [...pre, ...normal, ...post];\n  }\n\n  hasHook(hookName: keyof FarmPlugin): boolean {\n    const cached = this.hookPresence.get(hookName);\n    if (cached !== undefined) return cached;\n\n    const present = this.plugins.some((plugin) => this.getPluginHooks(plugin, hookName).length > 0);\n    this.hookPresence.set(hookName, present);\n    return present;\n  }\n\n  hasRuntimeHook(hookName: \"context\" | \"before\" | \"after\" | \"error\"): boolean {\n    const cached = this.runtimeHookPresence.get(hookName);\n    if (cached !== undefined) return cached;\n\n    const present = this.plugins.some((plugin) => typeof plugin.runtime?.[hookName] === \"function\");\n    this.runtimeHookPresence.set(hookName, present);\n    return present;\n  }\n\n  hasRuntimeRequestHooks(): boolean {\n    return (\n      this.hasRuntimeHook(\"context\") ||\n      this.hasRuntimeHook(\"before\") ||\n      this.hasRuntimeHook(\"after\") ||\n      this.hasRuntimeHook(\"error\")\n    );\n  }\n\n  copyRequestContext(source: FarmRequest | Request, target: FarmRequest | Request): void {\n    this.copyRequestStore(source, target);\n    if (source instanceof Request && target instanceof Request) {\n      this.copyRuntimeRequestContext(source, target);\n    }\n  }\n\n  async setupPlugins(): Promise<void> {\n    if (this.setupComplete) return;\n\n    for (const plugin of this.getSortedPlugins()) {\n      if (!plugin.setup) continue;\n      const state = await plugin.setup({\n        ...this.createPluginHookContext(plugin),\n        env: getResolvedEnv(),\n      });\n      this.pluginStates.set(plugin, state);\n    }\n\n    this.setupComplete = true;\n  }\n\n  async startRuntime(): Promise<void> {\n    if (this.runtimeReady) return;\n    if (this.runtimeStartPromise) return this.runtimeStartPromise;\n\n    this.runtimeStartPromise = (async () => {\n      if (!this.initialized) {\n        await this.runHookParallel(\"init\");\n      }\n      await this.setupPlugins();\n      if (!this.runtimeReady) {\n        await this.runHookParallel(\"ready\");\n      }\n    })();\n\n    try {\n      await this.runtimeStartPromise;\n    } catch (error) {\n      this.runtimeStartPromise = undefined;\n      throw error;\n    }\n  }\n\n  async closeRuntime(reason = \"runtime-closed\"): Promise<void> {\n    if (this.runtimeClosePromise) return this.runtimeClosePromise;\n    if (this.runtimeClosed) return;\n\n    this.runtimeClosePromise = (async () => {\n      const errors: unknown[] = [];\n      this.runtimeShutdownHooksRunning = true;\n      try {\n        await this.runHookParallel(\"shutdown\", { reason });\n      } catch (error) {\n        if (error instanceof FarmRuntimeShutdownError) errors.push(...error.errors);\n        else errors.push(error);\n      } finally {\n        this.runtimeShutdownHooksRunning = false;\n      }\n\n      // Shutdown deliberately does not wait for startup: a plugin whose\n      // runtime.start() never resolves still has to be able to stop. Setup can\n      // therefore finish while disposal is already running, so keep draining\n      // until nothing new is registered instead of splicing once and stranding\n      // whatever arrived late.\n      while (this.runtimeDisposers.length > 0) {\n        const batch = this.runtimeDisposers.splice(0).reverse();\n        for (const dispose of batch) {\n          try {\n            await dispose();\n          } catch (error) {\n            errors.push(error);\n          }\n        }\n      }\n\n      this.runtimeClosed = true;\n      if (errors.length > 0) {\n        throw new FarmRuntimeShutdownError(\"Farm runtime shutdown failed\", errors);\n      }\n    })();\n    return this.runtimeClosePromise;\n  }\n\n  async beginRuntimeRequest(\n    request: Request,\n    options: FarmPluginRuntimeRequestOptions = {},\n  ): Promise<FarmPluginRuntimeSession> {\n    await this.startRuntime();\n\n    const startedAt = Date.now();\n    const waitUntil = options.waitUntil\n      ? (promise: Promise<unknown>) => options.waitUntil?.(Promise.resolve(promise))\n      : (promise: Promise<unknown>) => {\n          void Promise.resolve(promise).catch(() => {});\n        };\n    let activeRequest = request;\n    let runtimeContext: Readonly<Record<string, unknown>> = Object.freeze({});\n\n    try {\n      runtimeContext = await this.createRuntimeRequestContext(activeRequest, options, waitUntil);\n\n      let response: Response | undefined;\n      for (const plugin of this.getSortedPlugins()) {\n        const before = plugin.runtime?.before;\n        if (!before) continue;\n\n        const result = await before({\n          ...this.createRuntimeBaseEvent(plugin, activeRequest, options, waitUntil),\n          ctx: runtimeContext,\n        });\n\n        if (result instanceof Request) {\n          this.copyRequestStore(activeRequest, result);\n          this.copyRuntimeRequestContext(activeRequest, result);\n          activeRequest = result;\n          continue;\n        }\n        if (result instanceof Response) {\n          response = result;\n          break;\n        }\n        if (result !== undefined) {\n          throw new TypeError(\n            `Farm plugin \"${plugin.name}\" runtime.before must return a Request, Response, or undefined`,\n          );\n        }\n      }\n\n      return {\n        request: activeRequest,\n        response,\n        ctx: runtimeContext,\n        startedAt,\n        options,\n        waitUntil,\n      };\n    } catch (error) {\n      await this.runRuntimeErrorHooks(\n        activeRequest,\n        error,\n        runtimeContext,\n        Date.now() - startedAt,\n        options,\n        waitUntil,\n      );\n      throw error;\n    }\n  }\n\n  async endRuntimeRequest(\n    session: FarmPluginRuntimeSession,\n    initialResponse: Response,\n  ): Promise<Response> {\n    let response = initialResponse;\n\n    try {\n      for (const plugin of this.getSortedPlugins()) {\n        const after = plugin.runtime?.after;\n        if (!after) continue;\n\n        const result = await after({\n          ...this.createRuntimeBaseEvent(\n            plugin,\n            session.request,\n            session.options,\n            session.waitUntil,\n          ),\n          ctx: session.ctx,\n          response,\n          durationMs: Date.now() - session.startedAt,\n        });\n        if (result !== undefined) {\n          if (!(result instanceof Response)) {\n            throw new TypeError(\n              `Farm plugin \"${plugin.name}\" runtime.after must return a Response or undefined`,\n            );\n          }\n          response = result;\n        }\n      }\n\n      return response;\n    } catch (error) {\n      await this.failRuntimeRequest(session, error);\n      throw error;\n    }\n  }\n\n  async failRuntimeRequest(session: FarmPluginRuntimeSession, error: unknown): Promise<void> {\n    if (this.failedRuntimeSessions.has(session)) return;\n    this.failedRuntimeSessions.add(session);\n    await this.runRuntimeErrorHooks(\n      session.request,\n      error,\n      session.ctx,\n      Date.now() - session.startedAt,\n      session.options,\n      session.waitUntil,\n    );\n  }\n\n  async runRuntimeRequest(\n    request: Request,\n    handler: FarmPluginRuntimeRequestHandler,\n    options: FarmPluginRuntimeRequestOptions = {},\n  ): Promise<Response> {\n    const session = await this.beginRuntimeRequest(request, options);\n    try {\n      const response = session.response ?? (await handler(session.request));\n      if (!(response instanceof Response)) {\n        throw new TypeError(\"Farm plugin runtime handlers must return a Response\");\n      }\n      return await this.endRuntimeRequest(session, response);\n    } catch (error) {\n      await this.failRuntimeRequest(session, error);\n      throw error;\n    }\n  }\n\n  async runHook<K extends keyof FarmPlugin>(hookName: K, ...args: any[]): Promise<any> {\n    const plugins = this.getSortedPlugins();\n\n    for (const plugin of plugins) {\n      for (const hook of this.getPluginHooks(plugin, hookName)) {\n        const hookContext = this.getHookContext(plugin, hookName, args);\n        const result = await (hook as any).apply(plugin, [...args, hookContext]);\n        if (result !== undefined) {\n          return result;\n        }\n      }\n    }\n  }\n\n  async runHookSerial<K extends keyof FarmPlugin>(\n    hookName: K,\n    initialValue: any,\n    ...args: any[]\n  ): Promise<any> {\n    const plugins = this.getSortedPlugins();\n    let value = initialValue;\n\n    for (const plugin of plugins) {\n      for (const hook of this.getPluginHooks(plugin, hookName)) {\n        const hookArgs = [value, ...args];\n        const hookContext = this.getHookContext(plugin, hookName, hookArgs);\n        const result = await (hook as any).apply(plugin, [...hookArgs, hookContext]);\n        if (result !== undefined) {\n          if (\n            hookName === \"beforeApiHandler\" &&\n            result !== value &&\n            value &&\n            result &&\n            typeof value === \"object\" &&\n            typeof result === \"object\"\n          ) {\n            this.copyRequestStore(value as FarmRequest | Request, result as FarmRequest | Request);\n          }\n          value = result;\n        }\n      }\n    }\n\n    return value;\n  }\n\n  async runHookParallel<K extends keyof FarmPlugin>(hookName: K, ...args: any[]): Promise<boolean> {\n    return this.runHookParallelFiltered(hookName, () => true, ...args);\n  }\n\n  /** @internal Runs hooks for only the plugins selected by the runtime adapter. */\n  async runHookParallelFiltered<K extends keyof FarmPlugin>(\n    hookName: K,\n    include: (plugin: FarmPlugin) => boolean,\n    ...args: any[]\n  ): Promise<boolean> {\n    if (hookName === \"shutdown\" && !this.runtimeShutdownHooksRunning) {\n      await this.closeRuntime(args[0]?.reason);\n      return false;\n    }\n\n    const plugins = this.getSortedPlugins().filter(include);\n\n    // Run selected hooks sequentially for deterministic execution and short-circuiting.\n    const sequentialHooks = new Set<keyof FarmPlugin>([\n      \"ready\",\n      \"shutdown\",\n      \"beforeRequest\",\n      \"afterResponse\",\n      \"beforeApiHandler\",\n      \"afterApiHandler\",\n      \"beforeRouteMatch\",\n      \"afterRouteMatch\",\n      \"beforeRender\",\n      \"afterRender\",\n    ]);\n\n    if (sequentialHooks.has(hookName)) {\n      const shutdownErrors: unknown[] = [];\n      for (const plugin of plugins) {\n        for (const hook of this.getPluginHooks(plugin, hookName)) {\n          // Check if response is already sent (only for beforeRequest)\n          if (hookName === \"beforeRequest\") {\n            const res = args[1];\n            if (res && (res.writableEnded || res[FARM_NODE_RESPONSE_END_PENDING])) {\n              return true;\n            }\n          }\n\n          const hookContext = this.getHookContext(plugin, hookName, args);\n          try {\n            await (hook as any).apply(plugin, [...args, hookContext]);\n          } catch (error) {\n            if (hookName !== \"shutdown\") throw error;\n            shutdownErrors.push(error);\n          }\n\n          // Check again after plugin execution (only for beforeRequest)\n          if (hookName === \"beforeRequest\") {\n            const res = args[1];\n            if (res && res.writableEnded) {\n              return true;\n            }\n          }\n        }\n      }\n      if (hookName === \"shutdown\" && shutdownErrors.length > 0) {\n        throw new FarmRuntimeShutdownError(\"Farm plugin shutdown hooks failed\", shutdownErrors);\n      }\n    } else {\n      // Run other hooks in parallel\n      const promises: Promise<any>[] = [];\n      for (const plugin of plugins) {\n        for (const hook of this.getPluginHooks(plugin, hookName)) {\n          const hookContext = this.getHookContext(plugin, hookName, args);\n          promises.push((hook as any).apply(plugin, [...args, hookContext]));\n        }\n      }\n      await Promise.all(promises);\n    }\n\n    if (hookName === \"init\") this.initialized = true;\n    if (hookName === \"ready\") this.runtimeReady = true;\n\n    return false;\n  }\n\n  updateContext(updates: Partial<FarmPluginContext>) {\n    this.context = {\n      ...this.context,\n      ...updates,\n      requestContext: this.context.requestContext,\n    };\n  }\n}\n\nexport function definePlugin<\n  TState = undefined,\n  TRequestContext extends object = Record<string, never>,\n  TClientState = unknown,\n  TClientPublic = undefined,\n  TIntegrationInstance = unknown,\n  const TRoutes extends PluginRoutes = PluginRoutes,\n>(\n  plugin: FarmPlugin<\n    TState,\n    TRequestContext,\n    TClientState,\n    TClientPublic,\n    TIntegrationInstance,\n    false,\n    TRoutes\n  >,\n): FarmPlugin<\n  TState,\n  TRequestContext,\n  TClientState,\n  TClientPublic,\n  TIntegrationInstance,\n  false,\n  TRoutes\n> {\n  return plugin;\n}\n\nexport namespace definePlugin {\n  /** Bind an integration instance type while preserving inference for plugin state and context. */\n  export function forIntegration<TIntegrationInstance>() {\n    return function defineBoundPlugin<\n      TState = undefined,\n      TRequestContext extends object = Record<string, never>,\n      TClientState = unknown,\n      TClientPublic = undefined,\n    >(\n      plugin: FarmPlugin<\n        TState,\n        TRequestContext,\n        TClientState,\n        TClientPublic,\n        TIntegrationInstance,\n        true\n      >,\n    ): FarmPlugin<\n      TState,\n      TRequestContext,\n      TClientState,\n      TClientPublic,\n      TIntegrationInstance,\n      true\n    > {\n      return plugin;\n    };\n  }\n}\nexport { farmPlugin } from \"./vite\";\n","import type { NitroConfig } from \"nitro/config\";\nimport type { ResolvedFarmConfig } from \"../config\";\nimport type { RouteManager } from \"../routing/route-manager\";\nimport type { APIRouteManager } from \"../api/route-manager\";\nimport type { ServerRenderer } from \"../server/renderer\";\nimport { createNitroAPIHandler } from \"./api-handler\";\nimport { createNitroSSRHandler } from \"./ssr-handler\";\nimport path from \"path\";\nimport { prepareFarmWorkflowsForNitro } from \"../workflows\";\nimport {\n  createFarmCronCloudflareConfig,\n  mergeScheduledTasks,\n  prepareFarmCronForNitro,\n} from \"../cron\";\nimport { routeRulesToNitroRouteRules } from \"../route-rules\";\nimport { resolveFarmAPIServerBasePath } from \"../api/server-path\";\n\n/**\n * Create Nitro configuration for Farm.js\n * Based on https://nitro.build/config\n */\nexport async function createNitroConfig(\n  config: ResolvedFarmConfig,\n  routeManager: RouteManager,\n  apiRouteManager: APIRouteManager,\n  serverRenderer: ServerRenderer,\n  preset = \"node-server\",\n): Promise<NitroConfig> {\n  const root = config.root || process.cwd();\n  const apiBasePath = resolveFarmAPIServerBasePath(config.api);\n  const srcDir = config.srcDir || \"src\";\n  const distDir = \".farm\";\n  // Nitro build directory - where Nitro does its work (temporary)\n  // We use .nitro as a working directory, but ensure output goes to .farm/.output\n  const nitroBuildDir = path.join(root, distDir, \".nitro\");\n  // Final output directory - where the deployable output goes\n  // This MUST be .farm/.output (not .nitro/.output) for consistency\n  const outputDir = path.join(root, distDir, \".output\");\n  // Server directory for handlers (inside build dir, will be copied to output)\n  const serverDir = path.join(nitroBuildDir, \"server\");\n\n  // Ensure Nitro doesn't create its own .output inside .nitro\n  // By explicitly setting output.dir, Nitro will use our specified directory\n\n  // Create server directory structure for Nitro to discover routes\n  // According to Nitro docs: https://nitro.build/deploy/providers/vercel\n  // Routes should be in server/api/[...].ts and server/routes/[...].ts\n  const { mkdir, writeFile } = await import(\"fs/promises\");\n  await mkdir(serverDir, { recursive: true });\n  await mkdir(path.join(serverDir, \"api\"), { recursive: true });\n  await mkdir(path.join(serverDir, \"routes\"), { recursive: true });\n  const farmWorkflows = await prepareFarmWorkflowsForNitro({\n    ...config,\n    distDir,\n  });\n  const farmCron = await prepareFarmCronForNitro({\n    ...config,\n    distDir,\n  });\n  const scheduledTasks = mergeScheduledTasks(farmWorkflows.scheduledTasks, farmCron.scheduledTasks);\n  const cloudflareCronConfig = createFarmCronCloudflareConfig(farmCron.jobs);\n\n  // Create a runtime registry file to store route managers\n  // This will be populated at runtime through Nitro hooks\n  const registryFile = path.join(serverDir, \"farm-registry.ts\");\n\n  // Serialize route paths for SSR module loading\n  const routePaths: Record<string, string> = {};\n  for (const [pattern, entry] of routeManager.getRoutes()) {\n    const bundledPath = entry.modulePath\n      .replace(/.*\\/src\\/app\\//, \"\")\n      .replace(/\\.(tsx?|jsx?)$/, \".js\");\n    routePaths[pattern] = bundledPath;\n  }\n\n  // Load client manifest path for reference\n  const clientManifestPath = path.join(root, distDir, \"client\", \"farm-client-manifest.json\");\n\n  await writeFile(\n    registryFile,\n    `\n// Auto-generated by Farm.js\n// Runtime registry for route managers and renderers\nexport const farmRegistry: {\n  apiRouteManager?: any;\n  routeManager?: any;\n  serverRenderer?: any;\n  env?: any;\n  deploymentId?: string;\n  basePath?: string;\n  apiBasePath?: string;\n  clientManifest?: any;\n  routePaths?: Record<string, string>;\n} = {\n  env: ${JSON.stringify(config.env || { server: {}, public: {} }, null, 2)},\n  deploymentId: ${JSON.stringify(config.deploymentId)},\n  basePath: ${JSON.stringify(config.basePath)},\n  apiBasePath: ${JSON.stringify(apiBasePath)},\n  routePaths: ${JSON.stringify(routePaths, null, 2)},\n};\n`,\n    \"utf-8\",\n  );\n\n  // Create API route handler file\n  // For Vercel, Nitro expects routes in server/api/[...].ts format\n  // This catch-all will handle all /api/* requests\n  const apiHandlerFile = path.join(serverDir, \"api\", \"[...].ts\");\n  await mkdir(path.dirname(apiHandlerFile), { recursive: true });\n  await writeFile(\n    apiHandlerFile,\n    `\n// Auto-generated by Farm.js\n// This handler intercepts all /api/* requests\nimport { defineEventHandler, getHeaders, readRawBody, sendWebResponse, setResponseStatus, getRequestURL } from 'h3';\nimport type { H3Event } from 'h3';\nimport { farmRegistry } from '../farm-registry';\nimport { createFarmLegacyRequest } from '@farm.js/core/internal/production-runtime';\n\nexport default defineEventHandler(async (event: H3Event) => {\n  // Get URL using H3's abstraction (works in all environments)\n  const url = getRequestURL(event);\n  const urlPath = url.pathname;\n  const apiBasePath = farmRegistry.apiBasePath || '/api';\n  const isAPIPath = apiBasePath !== '/' &&\n    (urlPath === apiBasePath || urlPath.startsWith(apiBasePath + '/'));\n  \n  // Only handle API routes - for Vercel, Nitro routes /api/* to this handler\n  // According to https://nitro.build/deploy/providers/vercel\n  // This handler should process all /api/* routes\n  if (!isAPIPath) {\n    // Return undefined to let Nitro's routing system handle non-API routes\n    return undefined;\n  }\n  \n  // Ensure registry is populated (lazy initialization)\n  // In serverless environments, the registry needs to be initialized at runtime\n  if (!farmRegistry.apiRouteManager) {\n    // Try to initialize from global if available (set during build)\n    if (typeof globalThis !== 'undefined' && (globalThis as any).__FARM_REGISTRY__) {\n      Object.assign(farmRegistry, (globalThis as any).__FARM_REGISTRY__);\n    }\n    // If still not available, try the init function (if it exists)\n    if (!farmRegistry.apiRouteManager && (farmRegistry as any).__INIT__) {\n      (farmRegistry as any).__INIT__();\n    }\n  }\n  \n  const apiRouteManager = farmRegistry.apiRouteManager;\n  if (!apiRouteManager) {\n    console.error('API route manager not initialized. Registry keys:', Object.keys(farmRegistry));\n    setResponseStatus(event, 500);\n    return { error: 'API route manager not initialized. Please check server logs.' };\n  }\n  \n  const startTime = Date.now();\n  const method = event.method || 'GET';\n  const host = url.host || 'localhost';\n  \n  // Log API request (only in development)\n  if (process.env.NODE_ENV === 'development' || !process.env.NODE_ENV) {\n    try {\n      const pc = await import('picocolors');\n      const log = [\n        pc.default.dim('[') + pc.default.bold(pc.default.blue('FARM')) + pc.default.dim(']'),\n        pc.default.dim('[') + pc.default.bold(pc.default.white(method.padEnd(3))) + pc.default.dim(']'),\n        pc.default.cyan('[API]'),\n        pc.default.gray(\\`\\${url.protocol}//\\${host}\\${urlPath}\\`),\n      ].join(' ');\n      console.log(log);\n    } catch {\n      // picocolors not available, use simple log\n      console.log(\\`[FARM] [\\${method}] [API] \\${urlPath}\\`);\n    }\n  }\n  \n  try {\n    // Convert H3 event to Web Request using H3 abstractions\n    const protocol = url.protocol.replace(':', '') || 'http';\n    const host = url.host || 'localhost';\n    const fullUrl = url.toString();\n    \n    const headers = new Headers();\n    const h3Headers = getHeaders(event);\n    \n    for (const [key, value] of Object.entries(h3Headers)) {\n      if (value) {\n        headers.set(key, Array.isArray(value) ? value.join(', ') : String(value));\n      }\n    }\n    \n    const request = await createFarmLegacyRequest(event, fullUrl, headers, readRawBody);\n    \n    // Call better-call handler\n    const betterCallHandler = apiRouteManager.getHandler();\n    if (!betterCallHandler) {\n      setResponseStatus(event, 404);\n      return { error: 'API handler not found' };\n    }\n    \n    const response = await betterCallHandler(request);\n    \n    // Log API response (only in development)\n    if (process.env.NODE_ENV === 'development' || !process.env.NODE_ENV) {\n      const duration = Date.now() - startTime;\n      const status = response.status;\n      try {\n        const pc = await import('picocolors');\n        let statusColor = pc.default.green;\n        if (status >= 500) statusColor = pc.default.red;\n        else if (status >= 400) statusColor = pc.default.yellow;\n        else if (status >= 300) statusColor = pc.default.cyan;\n\n        const log = [\n          pc.default.dim('[') + pc.default.bold(pc.default.blue('FARM')) + pc.default.dim(']'),\n          status >= 400 ? pc.default.red('✗') : pc.default.green('✓'),\n          pc.default.cyan('[API]'),\n          pc.default.gray(urlPath),\n          pc.default.dim('-'),\n          statusColor(status.toString()),\n          pc.default.dim(\\`(\\${duration}ms)\\`),\n        ].join(' ');\n        console.log(log);\n      } catch {\n        // picocolors not available, use simple log\n        console.log(\\`[FARM] [\\${method}] [API] \\${urlPath} - \\${response.status} (\\${duration}ms)\\`);\n      }\n    }\n    \n    return sendWebResponse(response);\n  } catch (error: any) {\n    console.error('API handler error:', error);\n    setResponseStatus(event, 500);\n    return {\n      error: error.message || 'Internal Server Error',\n    };\n  }\n});\n`,\n    \"utf-8\",\n  );\n\n  // Create SSR catch-all route handler\n  // For Vercel, Nitro expects routes in server/routes/[...].ts format\n  const ssrHandlerFile = path.join(serverDir, \"routes\", \"[...].ts\");\n  await mkdir(path.dirname(ssrHandlerFile), { recursive: true });\n  await writeFile(\n    ssrHandlerFile,\n    `\n// Auto-generated by Farm.js\n// This handler handles all page routes (SSR)\nimport { defineEventHandler, setResponseStatus, getRequestURL, setHeader, getHeaders, readRawBody, sendWebResponse, setCookie } from 'h3';\nimport type { H3Event } from 'h3';\nimport { farmRegistry } from '../farm-registry';\nimport React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { searchParamsToObject } from '@farm.js/core/internal/production-runtime';\nimport { createFarmLegacyRequest, renderFarmLegacyErrorHtml, renderFarmLegacyHtml } from '@farm.js/core/internal/production-runtime';\n\nexport default defineEventHandler(async (event: H3Event) => {\n  try {\n    // Ensure registry is populated (lazy initialization)\n    // In serverless environments, the registry needs to be initialized at runtime\n    if (!farmRegistry.routeManager || !farmRegistry.serverRenderer) {\n      // Try to initialize from global if available (set during build)\n      if (typeof globalThis !== 'undefined' && (globalThis as any).__FARM_REGISTRY__) {\n        Object.assign(farmRegistry, (globalThis as any).__FARM_REGISTRY__);\n      }\n      // If still not available, try the init function (if it exists)\n      if ((!farmRegistry.routeManager || !farmRegistry.serverRenderer) && (farmRegistry as any).__INIT__) {\n        (farmRegistry as any).__INIT__();\n      }\n    }\n    \n    const routeManager = farmRegistry.routeManager;\n    const serverRenderer = farmRegistry.serverRenderer;\n    \n    if (!routeManager || !serverRenderer) {\n      console.error('Route manager or renderer not initialized. Registry keys:', Object.keys(farmRegistry));\n      setResponseStatus(event, 500);\n      setHeader(event, 'Content-Type', 'text/html; charset=utf-8');\n      return '<!DOCTYPE html><html><head><title>Error</title></head><body><h1>500 Internal Server Error</h1><p>Route manager or renderer not initialized. Please check server logs.</p></body></html>';\n    }\n    \n    // Get URL from H3 event\n    const url = getRequestURL(event);\n    const pathname = url.pathname;\n    const apiBasePath = farmRegistry.apiBasePath || '/api';\n    const isAPIPath = apiBasePath !== '/' &&\n      (pathname === apiBasePath || pathname.startsWith(apiBasePath + '/'));\n    const redirectMatch = routeManager.matchRedirect(pathname, url.search);\n    if (redirectMatch) {\n      setResponseStatus(event, redirectMatch.statusCode);\n      setHeader(event, 'Location', redirectMatch.destination);\n      return \\`Redirecting to \\${redirectMatch.destination}\\`;\n    }\n    const apiRouteManager = farmRegistry.apiRouteManager;\n\n    if (apiRouteManager?.matchRoute(pathname)) {\n      const handler = apiRouteManager.getHandler();\n      if (!handler) {\n        setResponseStatus(event, 404);\n        return { error: 'API handler not found' };\n      }\n\n      const headers = new Headers();\n      const h3Headers = getHeaders(event);\n      for (const [key, value] of Object.entries(h3Headers)) {\n        if (value) {\n          headers.set(key, Array.isArray(value) ? value.join(', ') : String(value));\n        }\n      }\n\n      const request = await createFarmLegacyRequest(event, url, headers, readRawBody);\n      const response = await handler(request);\n\n      return sendWebResponse(response);\n    }\n\n    // Skip API routes - let the API handler process them\n    if (isAPIPath) {\n      // Return undefined to let Nitro's API handler process\n      return undefined;\n    }\n    \n    // Skip static assets - let Nitro serve them\n    // Only skip if it's clearly a static file (has extension and not in root)\n    if (pathname.startsWith('/assets/') || (pathname.includes('.') && !isAPIPath)) {\n      // Check if it's a static file by extension\n      const staticExtensions = ['.js', '.css', '.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico', '.woff', '.woff2', '.ttf', '.eot'];\n      const hasStaticExtension = staticExtensions.some(ext => pathname.toLowerCase().endsWith(ext));\n      if (hasStaticExtension) {\n        return; // Let Nitro's static file handler process\n      }\n    }\n    \n    // Try to use Node.js req/res if available (for node-server preset)\n    if (event.node && event.node.req && event.node.res) {\n      await serverRenderer.renderPage(event.node.req as any, event.node.res as any);\n      return undefined; // Response already sent\n    }\n\n    if (farmRegistry.deploymentId) {\n      setHeader(event, 'x-farm-deployment-id', farmRegistry.deploymentId);\n      setCookie(event, '__farm_deployment', farmRegistry.deploymentId, {\n        httpOnly: true,\n        sameSite: 'lax',\n        secure: url.protocol === 'https:',\n        path: farmRegistry.basePath || '/',\n      });\n    }\n    \n    // For serverless (Vercel), render to string and send HTML\n    try {\n      // Match route\n      const { route, params, layouts } = routeManager.matchRoute(pathname);\n      \n      if (!route) {\n        setResponseStatus(event, 404);\n        setHeader(event, 'Content-Type', 'text/html; charset=utf-8');\n        return '<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>404 Not Found</h1></body></html>';\n      }\n      \n      // Get search params\n      const searchParamsObject = searchParamsToObject(url.searchParams);\n      \n      // Load route module - in production, use bundled SSR output\n      // Get bundled path from registry or construct it\n      let routeModule;\n      const routePaths = farmRegistry.routePaths || {};\n      const bundledPath = routePaths[pathname] || route.modulePath\n        .replace(/.*\\\\/src\\\\/app\\\\//, '')\n        .replace(/\\\\.(tsx?|jsx?)$/, '.js');\n      \n      try {\n        // Try to load from bundled SSR output (copied to Nitro's server/farm directory)\n        // Nitro bundles everything, so we need to use the correct import path\n        routeModule = await import('./farm/' + bundledPath);\n      } catch (importError) {\n        // Fallback: try route manager's load method (for node-server preset)\n        try {\n          routeModule = await routeManager.loadRouteModule(route.modulePath);\n        } catch (loadError) {\n          // Last resort: try just the filename\n          const bundledName = bundledPath.split('/').pop() || 'page.js';\n          try {\n            routeModule = await import('./farm/' + bundledName);\n          } catch {\n            throw new Error(\\`Failed to load route module: \\${route.modulePath}. Tried: ./farm/\\${bundledPath}, ./farm/\\${bundledName}\\`);\n          }\n        }\n      }\n      \n      if (!routeModule.default) {\n        throw new Error(\\`Route module \\${route.modulePath} does not export a default component\\`);\n      }\n      \n      // Load layout modules\n      const layoutModules = await Promise.all(\n        layouts.map(async (layout) => {\n          const bundledPath = layout.modulePath\n            .replace(/.*\\\\/src\\\\/app\\\\//, '')\n            .replace(/\\\\.(tsx?|jsx?)$/, '.js');\n          \n          try {\n            // Try to load from bundled SSR output\n            return await import('./farm/' + bundledPath);\n          } catch {\n            // Fallback to route manager's load method\n            try {\n              return await routeManager.loadLayoutModule(layout.modulePath);\n            } catch {\n              // Last resort: try just the filename\n              const bundledName = bundledPath.split('/').pop() || 'layout.js';\n              try {\n                return await import('./farm/' + bundledName);\n              } catch {\n                // Return a dummy layout if all fails\n                return { default: ({ children }: any) => children };\n              }\n            }\n          }\n        })\n      );\n      \n      // Create page props\n      const rawPageProps = {\n        params,\n        searchParams: Promise.resolve(searchParamsObject),\n        path: pathname,\n      };\n      const pageProps = routeModule.__farmResolveRouteProps\n        ? await routeModule.__farmResolveRouteProps(rawPageProps)\n        : (() => {\n            const routeSchemas = routeModule.__farmRouteParsesProps\n              ? {}\n              : routeModule.__farmRouteSchemas || {};\n            const parsedParams = routeSchemas.params?.parse\n              ? routeSchemas.params.parse(params)\n              : params;\n            const parsedSearch = routeSchemas.search?.parse\n              ? routeSchemas.search.parse(searchParamsObject)\n              : searchParamsObject;\n            return {\n              ...rawPageProps,\n              params: parsedParams,\n              search: parsedSearch,\n              searchParams: Promise.resolve(parsedSearch),\n            };\n          })();\n      \n      // Create page element\n      const PageComponent = routeModule.default;\n      let pageElement;\n      if (typeof PageComponent === \"function\" && PageComponent.constructor.name === \"AsyncFunction\") {\n        pageElement = await PageComponent(pageProps);\n      } else {\n        pageElement = React.createElement(PageComponent, pageProps);\n      }\n      \n      // Wrap with layouts\n      for (let i = layoutModules.length - 1; i >= 0; i--) {\n        const layoutModule = layoutModules[i];\n        const LayoutComponent = layoutModule.default;\n        pageElement = React.createElement(LayoutComponent, {\n          children: pageElement,\n          params,\n        } as any);\n      }\n      \n      // Render to string\n      const html = renderToString(pageElement);\n      \n      // Get client script path from manifest\n      const clientManifest = farmRegistry.clientManifest || {};\n      // Find the client script for this route - check manifest structure\n      let clientScript = '/assets/page-wbYjx1yQ.js'; // Default fallback\n      if (clientManifest && typeof clientManifest === 'object') {\n        // Manifest structure: { \"assets/page-xxx.js\": { ... } }\n        const manifestEntry = Object.values(clientManifest).find((entry: any) => \n          entry && entry.name === 'page'\n        ) as any;\n        if (manifestEntry && manifestEntry.chunks && manifestEntry.chunks[0]) {\n          clientScript = '/' + manifestEntry.chunks[0];\n        } else if (Object.keys(clientManifest).length > 0) {\n          // Fallback to first asset in manifest\n          clientScript = '/' + Object.keys(clientManifest)[0];\n        }\n      }\n      \n      // Build full HTML\n      const fullHtml = renderFarmLegacyHtml({\n        deploymentId: farmRegistry.deploymentId || '',\n        pageProps,\n        pathname,\n        html,\n        clientScript,\n      });\n      \n      setHeader(event, 'Content-Type', 'text/html; charset=utf-8');\n      return fullHtml;\n      \n    } catch (renderError: any) {\n      console.error('SSR render error:', renderError);\n      setResponseStatus(event, 500);\n      setHeader(event, 'Content-Type', 'text/html; charset=utf-8');\n      return renderFarmLegacyErrorHtml();\n    }\n  } catch (error: any) {\n    console.error('SSR handler error:', error);\n    setResponseStatus(event, 500);\n    setHeader(event, 'Content-Type', 'text/html; charset=utf-8');\n    return renderFarmLegacyErrorHtml();\n  }\n});\n`,\n    \"utf-8\",\n  );\n\n  // Create Nitro config according to https://nitro.build/config\n  // Compatibility date is required in Nitro v3\n  const nitroConfig: NitroConfig = {\n    preset,\n    // rootDir must be the project root for Nitro to correctly resolve paths\n    rootDir: root,\n    // srcDir should point to where source files are (for scanning)\n    // But we're using scanDirs to point to our server directory\n    srcDir: root,\n    // buildDir is where Nitro builds (temporary working directory)\n    buildDir: nitroBuildDir,\n    // output.dir is where the final deployable output goes\n    // This ensures everything ends up in .farm/.output\n    compatibilityDate: \"2024-12-01\",\n    // Vercel-specific configuration\n    ...(preset === \"vercel\"\n      ? {\n          vercel: {\n            // Ensure proper function configuration\n            config: {},\n          },\n        }\n      : {}),\n    // Tell Nitro to scan the server directory we created\n    // This ensures our handlers are discovered by Nitro\n    scanDirs: [serverDir],\n    tasks: {\n      ...farmWorkflows.tasks,\n      ...farmCron.tasks,\n    },\n    scheduledTasks,\n    ...(preset === \"cloudflare-module\" && cloudflareCronConfig\n      ? {\n          cloudflare: cloudflareCronConfig,\n        }\n      : {}),\n    handlers: farmWorkflows.handlerPath\n      ? [\n          {\n            route: `${config.workflows.route}/**`,\n            handler: farmWorkflows.handlerPath,\n          },\n        ]\n      : [],\n    // Route rules for Vercel\n    routeRules: {\n      ...(apiBasePath === \"/\"\n        ? {}\n        : {\n            [`${apiBasePath}/**`]: {\n              cors: true,\n              headers: {\n                \"Access-Control-Allow-Origin\": \"*\",\n                \"Access-Control-Allow-Methods\": \"*\",\n                \"Access-Control-Allow-Headers\": \"*\",\n              },\n            },\n          }),\n      \"/**\": {\n        prerender: false,\n      },\n      ...routeRulesToNitroRouteRules(config.routeRules),\n    },\n\n    // // Exclude certain directories from scanning\n    // scanDirsExclude: [\n    //   '**/node_modules/**',\n    //   '**/.git/**',\n    //   '**/.output/**',\n    //   '**/.nitro/**',\n    // ],\n    output: {\n      // CRITICAL: All output MUST go to .farm/.output (NOT .nitro/.output)\n      // This ensures consistency and that deployment always uses .farm/.output\n      // By explicitly setting dir, serverDir, and publicDir, we prevent Nitro\n      // from creating its own .output directory inside .nitro\n      dir: outputDir, // .farm/.output\n      serverDir: path.join(outputDir, \"server\"), // .farm/.output/server\n      publicDir: path.join(outputDir, \"public\"), // .farm/.output/public\n    },\n    // Use Nitro hooks to populate the runtime registry\n    // This allows us to pass complex objects (route managers, renderers) at runtime\n    hooks: {\n      \"build:before\": async (nitro: any) => {\n        // Import and populate the registry at build time\n        const registryPath = path.join(serverDir, \"farm-registry.ts\");\n        const { farmRegistry } = await import(/* @vite-ignore */ registryPath);\n\n        // Store route paths (serializable)\n        const routePaths: Record<string, string> = {};\n        for (const [pattern, entry] of routeManager.getRoutes()) {\n          const bundledPath = entry.modulePath\n            .replace(/.*\\/src\\/app\\//, \"\")\n            .replace(/\\.(tsx?|jsx?)$/, \".js\");\n          routePaths[pattern] = bundledPath;\n        }\n        farmRegistry.routePaths = routePaths;\n\n        // Load and store client manifest for SSR\n        try {\n          const clientManifestPath = path.join(\n            root,\n            distDir,\n            \"client\",\n            \"farm-client-manifest.json\",\n          );\n          const { readFile } = await import(\"fs/promises\");\n          const manifestContent = await readFile(clientManifestPath, \"utf-8\");\n          farmRegistry.clientManifest = JSON.parse(manifestContent);\n        } catch (error) {\n          // Manifest not critical, continue without it\n          farmRegistry.clientManifest = {};\n        }\n\n        // CRITICAL: Store managers in a way that persists to runtime\n        // In serverless, we can't serialize complex objects, so we store them\n        // in a module-level variable that will be available at runtime\n        // The handlers will access them through the registry\n        // We use a closure to capture the managers\n        (farmRegistry as any).__INIT__ = () => {\n          farmRegistry.apiRouteManager = apiRouteManager;\n          farmRegistry.routeManager = routeManager;\n          farmRegistry.serverRenderer = serverRenderer;\n          farmRegistry.env = config.env || { server: {}, public: {} };\n          farmRegistry.deploymentId = config.deploymentId;\n          farmRegistry.basePath = config.basePath;\n        };\n\n        // Also store in global for runtime access (works in serverless)\n        // This ensures they're available even if module state is reset\n        if (typeof globalThis !== \"undefined\") {\n          (globalThis as any).__FARM_REGISTRY__ = {\n            apiRouteManager,\n            routeManager,\n            serverRenderer,\n            env: farmRegistry.env,\n            deploymentId: farmRegistry.deploymentId,\n            basePath: farmRegistry.basePath,\n            clientManifest: farmRegistry.clientManifest,\n            routePaths: farmRegistry.routePaths,\n          };\n        }\n      },\n    },\n    // API base URL (default is /api)\n    apiBaseURL: \"/api\",\n    // Include public directory and client build\n    publicAssets: [\n      {\n        baseURL: \"/\",\n        dir: path.join(root, \"public\"),\n      },\n      // Include client build assets\n      {\n        baseURL: \"/\",\n        dir: path.join(root, distDir, \"client\"),\n      },\n    ],\n    // Build configuration\n    minify: process.env.NODE_ENV === \"production\",\n    sourceMap: true,\n    // Bundle all dependencies to avoid workspace issues on Vercel\n    // This ensures all farm package code is bundled into the serverless function\n    // so it doesn't need to resolve workspace dependencies at runtime\n    // This is similar to how Next.js and Nuxt bundle their core packages\n    // bundle: true,\n    // External dependencies that should NOT be bundled (provided by runtime)\n    // We exclude React/ReactDOM to reduce bundle size (they're in node_modules)\n    externals: {\n      external: [\"react\", \"react-dom\"],\n      // Keep React external - it's in the serverless function's node_modules\n      // This reduces bundle size significantly\n    },\n    // Runtime config\n    runtimeConfig: {\n      public: {},\n    },\n    // Experimental features\n    experimental: {\n      tasks: farmWorkflows.workflows.length > 0 || farmCron.jobs.length > 0,\n      wasm: false, // Disable for now to avoid issues\n    },\n  };\n\n  return nitroConfig;\n}\n\n/**\n * Get Nitro preset from config\n */\nexport function getNitroPreset(preset?: string): string {\n  return preset || \"node-server\";\n}\n","export * from \"./types\";\nexport type { FarmAgentUserConfig, FarmAgentJsonLd } from \"./agent-config\";\nexport { defineRenderer, REACT_RENDERER } from \"./renderer\";\nexport type {\n  FarmRenderer,\n  FarmRendererCapabilities,\n  FarmRendererCapabilitiesInput,\n  FarmRendererStreamingCapabilities,\n} from \"./renderer\";\nexport * from \"./utils\";\nexport * from \"./storage\";\nexport * from \"./schema\";\nexport * from \"./schema-sql\";\nexport * from \"./schema-migrate\";\nexport * from \"./schema-tables\";\nexport * from \"./integrations\";\nexport * from \"./integration-orm\";\nexport * from \"./integration-api\";\nexport { createFarmApp } from \"./app\";\nexport { FarmProvider } from \"./provider\";\nexport { getCurrentRequest } from \"./server/request\";\nexport { definePlugin, FarmRuntimeShutdownError, PluginManager } from \"./plugin\";\nexport {\n  defineConfig,\n  defineFarmConfig,\n  resolveConfig,\n  loadConfig,\n  resolveDeployConfig,\n  resolveMigrationsConfig,\n  resolveDeployOutputPath,\n  normalizeDeployTarget,\n  getDeployTargetForPreset,\n  getPresetForDeployTarget,\n} from \"./config\";\nexport type { FarmLayerConfig } from \"./config\";\nexport type {\n  FarmPerformanceConfig,\n  FarmPreloadMode,\n  FarmPreloadUserConfig,\n  ResolvedFarmPerformanceConfig,\n  ResolvedFarmPreloadConfig,\n} from \"./preload\";\nexport type {\n  FarmCspConfig,\n  FarmCspDirectives,\n  FarmCspDirectiveValue,\n  FarmCspOptions,\n  FarmSecurityConfig,\n  ResolvedFarmCspConfig,\n  ResolvedFarmSecurityConfig,\n} from \"./security\";\nexport type { FarmIslandStrategy } from \"./island\";\nexport type { FarmLayerEntry, ResolvedFarmLayer } from \"./layers\";\nexport {\n  getFarmAppDirectories,\n  getFarmLayerAliases,\n  getFarmSourceRoots,\n  resolveFarmLayers,\n} from \"./layers\";\nexport { HMRManager } from \"./hmr\";\nexport * from \"./plugins\";\nexport * from \"./api\";\nexport { APITypeGenerator } from \"./type-generator\";\nexport * from \"./openapi\";\nexport * from \"./query\";\nexport * from \"./middleware\";\nexport * from \"./router\";\nexport * from \"./route-rules\";\nexport * from \"./route-runtime\";\nexport type { MetadataRoute, MetadataRouteContext } from \"./metadata-route\";\nexport {\n  createLayoutModuleFromProgrammaticLayout,\n  createRoute,\n  createProgrammaticRouteModuleId,\n  createRouteModuleFromProgrammaticPage,\n  defineRoutes,\n  getProgrammaticRouteManifest,\n  isProgrammaticRouteManifest,\n  isProgrammaticRoutesFileName,\n  layout,\n  page,\n  parseProgrammaticRouteModuleId,\n  parseProgrammaticRoutePath,\n  routesBuilder,\n  scanProgrammaticPagePaths,\n} from \"./routes\";\nexport type {\n  ProgrammaticApiRoute,\n  ProgrammaticApiRouteOptions,\n  ProgrammaticLayoutRoute,\n  ProgrammaticPageRoute,\n  ProgrammaticRouteAction,\n  ProgrammaticRouteActionContract,\n  ProgrammaticRouteActions,\n  ProgrammaticRouteDefaultAction,\n  ProgrammaticRouteWithActions,\n  ProgrammaticRedirectRoute,\n  ProgrammaticRouteComponentProps,\n  ProgrammaticRouteDataCacheContext,\n  ProgrammaticRouteDataCacheKeys,\n  ProgrammaticRouteDataContext,\n  ProgrammaticRouteDataHooks,\n  ProgrammaticRouteDataStaleTime,\n  ProgrammaticRouteErrorComponentProps,\n  ProgrammaticRouteGuard,\n  ProgrammaticRouteGuardContext,\n  ProgrammaticRoutePendingComponentProps,\n  ProgrammaticRouteBuilder,\n  ProgrammaticRouteContext,\n  ProgrammaticRouteDefinition,\n  ProgrammaticRouteFactory,\n  ProgrammaticRouteManifest,\n  ProgrammaticRouteMaybePromise,\n  ProgrammaticRouteMethod,\n  ProgrammaticRoutePrimitive,\n  ProgrammaticRouteRenderMode,\n  ProgrammaticRouteParamsFallback,\n  ProgrammaticRouteSchema,\n  ProgrammaticRouteSearchClientOptions,\n  ProgrammaticRouteSearchConfig,\n  ProgrammaticRouteSearchOptions,\n  ProgrammaticRouteSearchFallback,\n  ProgrammaticStaticPath,\n  ProgrammaticStaticPathParams,\n  ProgrammaticStaticPaths,\n  InferProgrammaticRouteData,\n  InferProgrammaticRouteSchema,\n  CreateRouteOptions,\n} from \"./routes\";\nexport * from \"./docs\";\nexport * from \"./markdown\";\nexport * from \"./app-markdown\";\nexport * from \"./observability\";\nexport * from \"./devtools-config\";\nexport type { FarmDevtoolsSnapshot, FarmDevtoolsDiagnostic, FarmDevtoolsRuntime } from \"./devtools\";\nexport * from \"./dev-indicators\";\nexport * from \"./workflows\";\nexport * from \"./cron\";\nexport * from \"./env\";\nexport * from \"./env-types\";\nexport * from \"./theme\";\nexport * from \"./environment\";\nexport * from \"./font\";\nexport * from \"./type-artifacts\";\nexport { createFarmImageTypeDeclarations, generateFarmImageTypes } from \"./image-types\";\nexport type { GenerateFarmImageTypesOptions } from \"./image-types\";\nexport * from \"./server-fn\";\nexport * from \"./server-fn-client\";\nexport * from \"./server-query\";\nexport * from \"./server-query-client\";\nexport * from \"./server-action-security\";\nexport * from \"./deployment\";\nexport type {\n  FarmImageConfig,\n  FarmImageFormat,\n  FarmImageLocalPattern,\n  FarmImageProvider,\n  FarmImageRemotePattern,\n  ResolvedFarmImageConfig,\n} from \"./image-config\";\nexport { generateRouteTypes } from \"./routing/generate-route-types\";\nexport type { GenerateRouteTypesOptions } from \"./routing/generate-route-types\";\nexport * from \"./build/index\";\nexport * from \"./client\";\nexport * from \"./ssg\";\nexport * from \"./cache\";\nexport type {\n  FarmAuthConfig,\n  FarmAuthDatabaseConfig,\n  FarmAuthEmailAndPasswordConfig,\n  FarmAuthSessionConfig,\n  FarmAuthUserConfig,\n  ResolvedFarmAuthConfig,\n} from \"./auth-config\";\nexport * from \"./deferred\";\nexport * from \"./after\";\nexport {\n  getFarmRedirectError,\n  isFarmNotFoundError,\n  isFarmRedirectError,\n  notFound,\n  permanentRedirect,\n  redirect,\n  usePathname,\n  useSearchParams,\n} from \"./navigation\";\nexport type { FarmRedirectSignal, FarmRedirectStatus } from \"./navigation\";\nexport { cookies, headers } from \"./headers\";\nexport type { ReadonlyHeaders, ReadonlyRequestCookies, RequestCookie } from \"./headers\";\nexport type {\n  PluginRequestContext,\n  FarmPlugin,\n  FarmPluginContext,\n  FarmPluginIntegrationContext,\n  FarmPluginLifecycle,\n  FarmRequestPluginContext,\n  FarmRequestStore,\n  FarmPluginRuntimeKind,\n  FarmPluginRouteRuntimePayload,\n  FarmPluginSetupContext,\n  FarmPluginStateContext,\n  FarmPluginRuntimeBaseEvent,\n  FarmPluginRuntimeContextEvent,\n  FarmPluginRuntimeBeforeEvent,\n  FarmPluginRuntimeAfterEvent,\n  FarmPluginRuntimeErrorEvent,\n  FarmPluginRuntimeStartEvent,\n  FarmPluginRuntimeCloseEvent,\n  FarmPluginRuntimeHooks,\n  FarmPluginRuntimeRequestOptions,\n  FarmPluginRuntimeRequestHandler,\n  FarmPluginRuntimeSession,\n  FarmPluginDiscoveredRoute,\n  FarmPluginRouterHooks,\n  FarmPluginRenderHooks,\n  FarmPluginBuildHooks,\n  FarmPluginDevHooks,\n  FarmPluginClientConfig,\n  RouteDiscoveredPayload,\n  RoutesGeneratedPayload,\n  MiddlewareDiscoveredPayload,\n  APIRouteDiscoveredPayload,\n  RouteMatchPayload,\n  RouteMatchResultPayload,\n  RenderLifecyclePayload,\n  APIHandlerLifecyclePayload,\n  ErrorLifecyclePayload,\n  HMRUpdatePayload,\n  BundleLifecyclePayload,\n  BundleResultPayload,\n  NitroBuildLifecyclePayload,\n  ShutdownPayload,\n} from \"./plugin\";\nexport type { MiddlewareProps, PagePropsWithMiddleware, PageProps } from \"./types\";\nexport type {\n  FarmUserConfig,\n  ResolvedFarmConfig,\n  RedirectConfig,\n  HeaderConfig,\n  RewriteConfig,\n  ImageConfig,\n  I18nConfig,\n  FarmI18nCookieConfig,\n  FarmI18nDetectionSignal,\n  FarmI18nDirection,\n  FarmI18nRouting,\n  FarmI18nUserConfig,\n  ResolvedFarmI18nConfig,\n  FarmServerActionsConfig,\n  ResolvedFarmServerActionsConfig,\n  FarmServerConfig,\n  FarmServerDuration,\n  FarmServerHealthConfig,\n  ResolvedFarmServerConfig,\n  ResolvedFarmServerHealthConfig,\n  OpenAPIConfig,\n  MiddlewareConfig,\n  FarmDeployConfig,\n  ResolvedFarmDeployConfig,\n  FarmDeployTarget,\n  FarmMigrationCommand,\n  FarmMigrationsConfig,\n  FarmMigrationsUserConfig,\n  ResolvedFarmMigrationsConfig,\n  FarmWorkflowsUserConfig,\n  FarmWorkflowsResolvedConfig,\n  FarmDocsResolvedConfig,\n  FarmDocsUserConfig,\n  FarmMarkdownResolvedConfig,\n  FarmMarkdownUserConfig,\n} from \"./config\";\n\nexport type { ComponentType, ReactNode, ReactElement, FC, PropsWithChildren } from \"react\";\n","import type { FarmSchema, FarmSchemaField, FarmSchemaModel } from \"./schema\";\n\nexport type FarmSqlDialect = \"postgres\" | \"mysql\" | \"sqlite\";\n\nexport type ResolvedSchemaField = FarmSchemaField & {\n  name: string;\n};\n\nexport type ResolvedSchemaModel = Omit<FarmSchemaModel, \"fields\"> & {\n  name: string;\n  fields: Record<string, ResolvedSchemaField>;\n};\n\nexport type CollectedSchemaModel = {\n  /** Namespace that owns the model: an integration key or a plugin name. */\n  ownerKey: string;\n  modelKey: string;\n  modelName: string;\n  exportName: string;\n  prismaModelName: string;\n  model: ResolvedSchemaModel;\n};\n\n/**\n * Resolve a schema's extensions, overrides, and name mappings.\n *\n * Table and column names fall back to the schema's own keys, which is what the\n * runtime orm uses (`createIntegrationOrm` reads `model.name ?? modelKey`). Any\n * other default would generate artifacts describing tables the app cannot\n * actually read.\n */\nexport function resolveSchemaModels(\n  ownerKey: string,\n  schema: FarmSchema,\n): Record<string, ResolvedSchemaModel> {\n  const models: Record<string, FarmSchemaModel> = Object.fromEntries(\n    Object.entries(schema.models).map(([modelKey, model]) => [modelKey, cloneSchemaModel(model)]),\n  );\n\n  for (const [modelKey, extension] of Object.entries(schema.extend || {})) {\n    const existing = models[modelKey];\n    models[modelKey] = {\n      ...(existing || { fields: {} }),\n      ...(extension.name ? { name: extension.name } : {}),\n      ...(extension.description ? { description: extension.description } : {}),\n      fields: {\n        ...existing?.fields,\n        ...extension.fields,\n      },\n      constraints: [...(existing?.constraints || []), ...(extension.constraints || [])],\n      meta: {\n        ...existing?.meta,\n        ...extension.meta,\n      },\n    };\n  }\n\n  for (const [modelKey, override] of Object.entries(schema.override || {})) {\n    const existing = models[modelKey];\n\n    if (!existing) {\n      throw new Error(\n        `Schema override for \"${ownerKey}.${modelKey}\" is invalid because that model does not exist.`,\n      );\n    }\n\n    const fields = {\n      ...existing.fields,\n    };\n\n    for (const [fieldKey, fieldOverride] of Object.entries(override.fields || {})) {\n      const existingField = fields[fieldKey];\n\n      if (!existingField && !fieldOverride.type) {\n        throw new Error(\n          `Schema override for \"${ownerKey}.${modelKey}.${fieldKey}\" is missing a field type.`,\n        );\n      }\n\n      fields[fieldKey] = {\n        ...existingField,\n        ...fieldOverride,\n      } as FarmSchemaField;\n    }\n\n    models[modelKey] = {\n      ...existing,\n      ...(override.name ? { name: override.name } : {}),\n      ...(override.description ? { description: override.description } : {}),\n      fields,\n      constraints: override.constraints || existing.constraints,\n      meta: {\n        ...existing.meta,\n        ...override.meta,\n      },\n    };\n  }\n\n  const resolvedModels: Record<string, ResolvedSchemaModel> = {};\n\n  for (const [modelKey, model] of Object.entries(models)) {\n    const modelName = model.name || modelKey;\n    const fieldNames = new Set<string>();\n    const resolvedFields: Record<string, ResolvedSchemaField> = {};\n\n    for (const [fieldKey, field] of Object.entries(model.fields)) {\n      const fieldName = field.name || fieldKey;\n\n      if (fieldNames.has(fieldName)) {\n        throw new Error(\n          `Schema model \"${ownerKey}.${modelKey}\" contains duplicate field name \"${fieldName}\".`,\n        );\n      }\n\n      fieldNames.add(fieldName);\n      resolvedFields[fieldKey] = {\n        ...field,\n        name: fieldName,\n      };\n    }\n\n    resolvedModels[modelKey] = {\n      ...model,\n      name: modelName,\n      fields: resolvedFields,\n    };\n  }\n\n  return resolvedModels;\n}\n\nfunction cloneSchemaModel(model: FarmSchemaModel): FarmSchemaModel {\n  return {\n    ...model,\n    fields: Object.fromEntries(\n      Object.entries(model.fields).map(([fieldKey, field]) => [fieldKey, { ...field }]),\n    ),\n    constraints: model.constraints ? [...model.constraints] : undefined,\n    meta: model.meta ? { ...model.meta } : undefined,\n  };\n}\n\n/**\n * Flatten owners' schemas into one list, rejecting two models that would\n * resolve to the same table.\n *\n * `only` narrows an owner to the models it actually controls; an owner handed a\n * schema it shares with the rest of the app should not claim all of it.\n */\nexport function collectSchemaModels(\n  entries: ReadonlyArray<readonly [string, FarmSchema, (readonly string[])?]>,\n): CollectedSchemaModel[] {\n  const collectedModels: CollectedSchemaModel[] = [];\n  const seenModelNames = new Map<string, string>();\n\n  for (const [ownerKey, schema, only] of entries) {\n    const resolvedModels = resolveSchemaModels(ownerKey, schema);\n\n    for (const [modelKey, model] of Object.entries(resolvedModels)) {\n      if (only && !only.includes(modelKey)) continue;\n\n      const collisionKey = model.name.toLowerCase();\n      const previousOwner = seenModelNames.get(collisionKey);\n\n      if (previousOwner && previousOwner !== `${ownerKey}.${modelKey}`) {\n        throw new Error(\n          `Schema model \"${ownerKey}.${modelKey}\" resolves to \"${model.name}\", which conflicts with \"${previousOwner}\". Rename one of the models with schema.models.<model>.name.`,\n        );\n      }\n\n      seenModelNames.set(collisionKey, `${ownerKey}.${modelKey}`);\n\n      collectedModels.push({\n        ownerKey,\n        modelKey,\n        modelName: model.name,\n        exportName: toCamelCase(`${ownerKey}_${modelKey}`),\n        prismaModelName: toPascalCase(`${ownerKey}_${modelKey}`),\n        model,\n      });\n    }\n  }\n\n  return collectedModels;\n}\n\nexport type FarmSqlStatement = {\n  kind: \"table\" | \"index\";\n  /** The object this statement creates, for drift reporting. */\n  target: string;\n  sql: string;\n};\n\n/**\n * Emit create statements for a set of models.\n *\n * Everything here is derivable from the schema: nothing is inferred from a live\n * database, so the output is stable and reviewable before it is applied.\n */\nexport function generateSqlStatements(\n  models: readonly CollectedSchemaModel[],\n  dialect: FarmSqlDialect,\n): FarmSqlStatement[] {\n  const modelLookup = createModelLookup(models);\n  const statements: FarmSqlStatement[] = [];\n\n  for (const model of models) {\n    statements.push({\n      kind: \"table\",\n      target: model.modelName,\n      sql: renderSqlTable(model, dialect, modelLookup),\n    });\n\n    for (const index of renderSqlIndexes(model, dialect)) {\n      statements.push(index);\n    }\n  }\n\n  return statements;\n}\n\n/** Render models as a standalone `.sql` file. */\nexport function renderSqlSchemaFile(\n  models: readonly CollectedSchemaModel[],\n  dialect: FarmSqlDialect,\n): string {\n  const lines = [\"-- Generated by Farm.js CLI. Review before applying.\", \"\"];\n  const modelLookup = createModelLookup(models);\n\n  for (const model of models) {\n    lines.push(\n      `-- Owner \"${model.ownerKey}\" model \"${model.modelKey}\"`,\n      renderSqlTable(model, dialect, modelLookup),\n      \"\",\n    );\n\n    for (const statement of renderSqlIndexes(model, dialect)) {\n      lines.push(statement.sql, \"\");\n    }\n  }\n\n  return lines.join(\"\\n\").trimEnd() + \"\\n\";\n}\n\nfunction renderSqlTable(\n  model: CollectedSchemaModel,\n  dialect: FarmSqlDialect,\n  modelLookup: Map<string, CollectedSchemaModel>,\n) {\n  const tableName = quoteSqlIdentifier(dialect, model.modelName);\n  const lines = [`CREATE TABLE IF NOT EXISTS ${tableName} (`];\n  const columns: string[] = [];\n  const internalReferences = createInternalReferenceLookup(model, dialect, modelLookup);\n\n  for (const [fieldKey, field] of Object.entries(model.model.fields)) {\n    const parts = [\n      `  ${quoteSqlIdentifier(dialect, field.name)}`,\n      getSqlColumnType(field, dialect),\n    ];\n\n    if (field.primaryKey) {\n      parts.push(\"PRIMARY KEY\");\n    } else if (!isNullableField(field)) {\n      parts.push(\"NOT NULL\");\n    }\n\n    if (!field.primaryKey && field.unique) {\n      parts.push(\"UNIQUE\");\n    }\n\n    const defaultValue = getSqlDefaultExpression(field, dialect);\n    if (defaultValue) {\n      parts.push(`DEFAULT ${defaultValue}`);\n    }\n\n    const reference = internalReferences.get(fieldKey);\n    if (reference) {\n      parts.push(reference);\n    } else if (field.reference) {\n      parts.push(\n        `/* references ${field.reference.model}.${field.reference.field}${field.reference.onDelete ? ` on delete ${field.reference.onDelete}` : \"\"} */`,\n      );\n    }\n\n    columns.push(parts.join(\" \"));\n  }\n\n  lines.push(columns.join(\",\\n\"));\n  lines.push(\");\");\n  return lines.join(\"\\n\");\n}\n\nfunction renderSqlIndexes(\n  model: CollectedSchemaModel,\n  dialect: FarmSqlDialect,\n): FarmSqlStatement[] {\n  const statements: FarmSqlStatement[] = [];\n  const tableName = quoteSqlIdentifier(dialect, model.modelName);\n\n  for (const field of Object.values(model.model.fields)) {\n    if (!field.index) {\n      continue;\n    }\n\n    const indexName = `${model.modelName}_${field.name}_idx`;\n    statements.push({\n      kind: \"index\",\n      target: indexName,\n      sql: `CREATE INDEX IF NOT EXISTS ${quoteSqlIdentifier(dialect, indexName)} ON ${tableName} (${quoteSqlIdentifier(dialect, field.name)});`,\n    });\n  }\n\n  for (const constraint of model.model.constraints || []) {\n    const indexName =\n      constraint.name ||\n      `${model.modelName}_${constraint.fields.map((fieldKey) => model.model.fields[fieldKey]?.name || fieldKey).join(\"_\")}_${constraint.type}`;\n    const fields = constraint.fields\n      .map((fieldKey) =>\n        quoteSqlIdentifier(dialect, model.model.fields[fieldKey]?.name || fieldKey),\n      )\n      .join(\", \");\n\n    const kind = constraint.type === \"unique\" ? \"CREATE UNIQUE INDEX\" : \"CREATE INDEX\";\n    statements.push({\n      kind: \"index\",\n      target: indexName,\n      sql: `${kind} IF NOT EXISTS ${quoteSqlIdentifier(dialect, indexName)} ON ${tableName} (${fields});`,\n    });\n  }\n\n  return statements;\n}\n\nfunction createInternalReferenceLookup(\n  model: CollectedSchemaModel,\n  dialect: FarmSqlDialect,\n  modelLookup: Map<string, CollectedSchemaModel>,\n) {\n  const lookup = new Map<string, string>();\n\n  for (const [fieldKey, field] of Object.entries(model.model.fields)) {\n    if (!field.reference) {\n      continue;\n    }\n\n    const referencedModel = modelLookup.get(`${model.ownerKey}.${field.reference.model}`);\n\n    if (referencedModel) {\n      const referencedField = field.reference.field;\n      const pieces = [\n        `REFERENCES ${quoteSqlIdentifier(dialect, referencedModel.modelName)} (${quoteSqlIdentifier(dialect, referencedModel.model.fields[referencedField]?.name || referencedField)})`,\n      ];\n\n      if (field.reference.onDelete) {\n        pieces.push(`ON DELETE ${field.reference.onDelete.toUpperCase()}`);\n      }\n\n      lookup.set(fieldKey, pieces.join(\" \"));\n    }\n  }\n\n  return lookup;\n}\n\nexport function getSqlColumnType(field: ResolvedSchemaField, dialect: FarmSqlDialect) {\n  if (dialect === \"postgres\") {\n    switch (field.type) {\n      case \"boolean\":\n        return \"BOOLEAN\";\n      case \"integer\":\n        return \"INTEGER\";\n      case \"number\":\n        return \"DOUBLE PRECISION\";\n      case \"datetime\":\n        return \"TIMESTAMPTZ\";\n      case \"json\":\n        return \"JSONB\";\n      default:\n        return \"TEXT\";\n    }\n  }\n\n  if (dialect === \"mysql\") {\n    switch (field.type) {\n      case \"boolean\":\n        return \"BOOLEAN\";\n      case \"integer\":\n        return \"INT\";\n      case \"number\":\n        return \"DOUBLE\";\n      case \"datetime\":\n        return \"DATETIME\";\n      case \"json\":\n        return \"JSON\";\n      case \"text\":\n        return \"TEXT\";\n      default:\n        return \"VARCHAR(255)\";\n    }\n  }\n\n  switch (field.type) {\n    case \"boolean\":\n    case \"integer\":\n      return \"INTEGER\";\n    case \"number\":\n      return \"REAL\";\n    default:\n      return \"TEXT\";\n  }\n}\n\nexport function getSqlDefaultExpression(field: ResolvedSchemaField, dialect: FarmSqlDialect) {\n  if (field.default === undefined) {\n    return null;\n  }\n\n  if (field.type === \"datetime\" && field.default === \"now\") {\n    return \"CURRENT_TIMESTAMP\";\n  }\n\n  if (typeof field.default === \"string\") {\n    return `'${escapeSqlString(field.default)}'`;\n  }\n\n  if (typeof field.default === \"number\") {\n    return String(field.default);\n  }\n\n  if (typeof field.default === \"boolean\") {\n    if (dialect === \"sqlite\") {\n      return field.default ? \"1\" : \"0\";\n    }\n    return field.default ? \"TRUE\" : \"FALSE\";\n  }\n\n  return null;\n}\n\nexport function isNullableField(field: ResolvedSchemaField) {\n  return field.nullable === true || field.required === false;\n}\n\nexport function quoteSqlIdentifier(dialect: FarmSqlDialect, value: string) {\n  if (dialect === \"mysql\") {\n    return `\\`${value.replace(/`/g, \"``\")}\\``;\n  }\n\n  return `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\n\nfunction createModelLookup(models: readonly CollectedSchemaModel[]) {\n  return new Map(models.map((model) => [`${model.ownerKey}.${model.modelKey}`, model]));\n}\n\nexport function toSnakeCase(value: string) {\n  return value\n    .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n    .replace(/[\\s.-]+/g, \"_\")\n    .replace(/__+/g, \"_\")\n    .toLowerCase();\n}\n\nexport function toPascalCase(value: string) {\n  return value\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/[\\s._-]+/g, \" \")\n    .split(\" \")\n    .filter(Boolean)\n    .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n    .join(\"\");\n}\n\nexport function toCamelCase(value: string) {\n  const pascal = toPascalCase(value);\n  return pascal ? pascal.charAt(0).toLowerCase() + pascal.slice(1) : pascal;\n}\n\nexport function escapeSqlString(value: string) {\n  // Standard-conforming SQL string literal: only quote doubling; backslashes\n  // are literal characters.\n  return value.replace(/'/g, \"''\");\n}\n","import {\n  generateSqlStatements,\n  type CollectedSchemaModel,\n  type FarmSqlDialect,\n  type FarmSqlStatement,\n} from \"./schema-sql\";\n\n/** The subset of a database client this needs: run a statement, read a result. */\nexport type FarmSchemaExecutor = {\n  /** Run a statement that returns nothing. */\n  execute(sql: string): Promise<void>;\n  /** Run a query and return its rows. */\n  query(sql: string, params?: unknown[]): Promise<Record<string, unknown>[]>;\n};\n\nexport type FarmSchemaDrift = {\n  table: string;\n  /** Declared in the schema but absent from the table. */\n  missingColumns: string[];\n  /** Present in the table but not declared. Reported, never dropped. */\n  extraColumns: string[];\n};\n\nexport type FarmSchemaMigratePlan = {\n  dialect: FarmSqlDialect;\n  /** Statements for tables that do not exist yet. */\n  statements: FarmSqlStatement[];\n  /** Tables that exist and already match the schema. */\n  upToDate: string[];\n  /** Tables that exist but differ. Never altered automatically. */\n  drift: FarmSchemaDrift[];\n};\n\n/**\n * Compare resolved models against the live database and plan what to create.\n *\n * Creation is derivable from the schema alone, so it is safe to emit. Changing\n * an existing table is not: a rename and a drop-plus-add look identical here,\n * and one of them destroys data. Differences are reported for a human instead.\n */\nexport async function planSchemaMigration(\n  models: readonly CollectedSchemaModel[],\n  dialect: FarmSqlDialect,\n  executor: FarmSchemaExecutor,\n): Promise<FarmSchemaMigratePlan> {\n  const statements: FarmSqlStatement[] = [];\n  const upToDate: string[] = [];\n  const drift: FarmSchemaDrift[] = [];\n\n  // Emitted once over the whole set so cross-model references resolve, then\n  // grouped: a table statement opens a group and its indexes follow it.\n  const byTable = new Map<string, FarmSqlStatement[]>();\n  let currentTable: FarmSqlStatement[] | undefined;\n  for (const statement of generateSqlStatements(models, dialect)) {\n    if (statement.kind === \"table\") {\n      currentTable = [];\n      byTable.set(statement.target, currentTable);\n    }\n    currentTable?.push(statement);\n  }\n\n  for (const model of models) {\n    const existing = await describeTable(executor, dialect, model.modelName);\n\n    if (!existing) {\n      statements.push(...(byTable.get(model.modelName) ?? []));\n      continue;\n    }\n\n    const declared = Object.values(model.model.fields).map((field) => field.name);\n    const missingColumns = declared.filter((column) => !existing.has(column.toLowerCase()));\n    const extraColumns = [...existing].filter(\n      (column) => !declared.some((declaredColumn) => declaredColumn.toLowerCase() === column),\n    );\n\n    if (missingColumns.length === 0 && extraColumns.length === 0) upToDate.push(model.modelName);\n    else drift.push({ table: model.modelName, missingColumns, extraColumns });\n  }\n\n  return { dialect, statements, upToDate, drift };\n}\n\n/** Column names of a table, lowercased, or undefined when it does not exist. */\nasync function describeTable(\n  executor: FarmSchemaExecutor,\n  dialect: FarmSqlDialect,\n  table: string,\n): Promise<Set<string> | undefined> {\n  if (dialect === \"sqlite\") {\n    const rows = await executor.query(`pragma table_info('${table.split(\"'\").join(\"''\")}')`);\n    if (rows.length === 0) return undefined;\n    return new Set(rows.map((row) => String(row.name).toLowerCase()));\n  }\n\n  const rows = await executor.query(\n    \"select column_name from information_schema.columns where table_name = ?\",\n    [table],\n  );\n  if (rows.length === 0) return undefined;\n  return new Set(rows.map((row) => String(row.column_name ?? row.COLUMN_NAME).toLowerCase()));\n}\n\nexport type FarmSchemaMigrateResult = {\n  applied: string[];\n  skipped: FarmSchemaDrift[];\n};\n\n/**\n * Run the plan's create statements. Drift is never applied: a plan that reports\n * differences leaves those tables untouched and says so.\n */\nexport async function applySchemaMigration(\n  plan: FarmSchemaMigratePlan,\n  executor: FarmSchemaExecutor,\n): Promise<FarmSchemaMigrateResult> {\n  const applied: string[] = [];\n  for (const statement of plan.statements) {\n    await executor.execute(statement.sql);\n    applied.push(statement.target);\n  }\n  return { applied, skipped: plan.drift };\n}\n\n/** Render a plan as a reviewable SQL file. */\nexport function formatSchemaMigration(plan: FarmSchemaMigratePlan, owner: string): string {\n  const header = [\n    `-- Generated by \\`farm ${owner} migrate\\` from the ${owner} schema.`,\n    `-- Dialect: ${plan.dialect}`,\n    \"-- Review before applying. Farm never alters existing tables.\",\n  ];\n\n  if (plan.statements.length === 0) {\n    header.push(\"--\", \"-- Nothing to create: every declared model already has a table.\");\n    return `${header.join(\"\\n\")}\\n`;\n  }\n\n  return `${header.join(\"\\n\")}\\n\\n${plan.statements.map((statement) => statement.sql).join(\"\\n\\n\")}\\n`;\n}\n\n/** Human-readable summary of tables that exist but no longer match the schema. */\nexport function describeSchemaDrift(drift: readonly FarmSchemaDrift[]): string {\n  return drift\n    .map((entry) => {\n      const lines = [`  ${entry.table}`];\n      if (entry.missingColumns.length > 0) {\n        lines.push(`    missing in the database: ${entry.missingColumns.join(\", \")}`);\n      }\n      if (entry.extraColumns.length > 0) {\n        lines.push(`    not in the schema: ${entry.extraColumns.join(\", \")}`);\n      }\n      return lines.join(\"\\n\");\n    })\n    .join(\"\\n\");\n}\n\n/**\n * Adapt a raw database client to the executor the planner needs.\n *\n * Each client reports rows differently, so the shape is detected rather than\n * configured: `pg` returns `{ rows }`, `mysql2` returns `[rows]`, and\n * `node:sqlite` exposes prepare/exec. A key-value storage mount has no tables,\n * which is reported as `null` rather than an error.\n */\nexport function createSchemaExecutor(\n  client: unknown,\n  owner: string,\n): { executor: FarmSchemaExecutor; dialect: FarmSqlDialect } | null {\n  const candidate = client as Record<string, any>;\n\n  if (\n    candidate &&\n    typeof candidate.getItem === \"function\" &&\n    typeof candidate.setItem === \"function\"\n  ) {\n    return null;\n  }\n\n  if (typeof candidate?.prepare === \"function\" && typeof candidate?.exec === \"function\") {\n    return {\n      dialect: \"sqlite\",\n      executor: {\n        async execute(sql) {\n          candidate.exec(sql);\n        },\n        async query(sql) {\n          return candidate.prepare(sql).all() as Record<string, unknown>[];\n        },\n      },\n    };\n  }\n\n  if (typeof candidate?.query === \"function\") {\n    return {\n      // Postgres and MySQL are told apart by what `query` resolves to, which is\n      // only knowable at call time, so the dialect is settled on first use.\n      dialect: \"postgres\",\n      executor: {\n        async execute(sql) {\n          await candidate.query(sql);\n        },\n        async query(sql, params) {\n          const result = await candidate.query(sql, params);\n          if (Array.isArray(result)) return (result[0] ?? []) as Record<string, unknown>[];\n          return (result?.rows ?? []) as Record<string, unknown>[];\n        },\n      },\n    };\n  }\n\n  throw new Error(\n    `${owner}: the configured client cannot run migrations. Pass a pg, mysql, or sqlite ` +\n      \"connection, or create the tables with your own migration tooling.\",\n  );\n}\n","import type { FarmSchema } from \"./schema\";\nimport {\n  applySchemaMigration,\n  createSchemaExecutor,\n  describeSchemaDrift,\n  formatSchemaMigration,\n  planSchemaMigration,\n  type FarmSchemaMigratePlan,\n} from \"./schema-migrate\";\nimport { collectSchemaModels, type CollectedSchemaModel, type FarmSqlDialect } from \"./schema-sql\";\n\n/**\n * Attached to a plugin or integration to say \"I own these tables\".\n *\n * Read by tooling so it can reach an already-resolved schema and connection\n * instead of re-reading and re-validating configuration.\n */\nexport const FARM_SCHEMA_TABLES = Symbol.for(\"farm.schema-tables\");\n\nexport interface FarmSchemaTablesDeclaration {\n  /** Command namespace: this is the `<name>` in `farm <name> migrate`. */\n  name: string;\n  /** The schema whose models this owner stores. */\n  schema: FarmSchema;\n  /**\n   * Model keys this owner actually controls. Defaults to every model in the\n   * schema; narrow it when an app shares one schema with the rest of its code.\n   */\n  models?: readonly string[];\n  /**\n   * Resolves the configured database client, or the storage mount behind it.\n   *\n   * The app's resolved config is passed because an owner may read its\n   * connection from there rather than from its own options — an integration\n   * configured through `storage.client`, for example.\n   */\n  resolveClient(config: FarmSchemaOwnerConfig): Promise<unknown>;\n  /** Set explicitly when the client's dialect cannot be detected. */\n  dialect?: FarmSqlDialect;\n}\n\n/**\n * Declare that a plugin owns tables, so `farm <name> migrate` can create them\n * and `farm generate` can include them in schema artifacts.\n *\n * ```ts\n * const plugin = definePlugin({ name: \"farm:jobs\", ... });\n *\n * return declareSchemaTables(plugin, {\n *   name: \"jobs\",\n *   schema: options.schema,\n *   models: [\"jobs\", \"jobRuns\"],\n *   resolveClient: () => resolveClient(options),\n * });\n * ```\n *\n * The declaration is non-enumerable, so it never reaches a config serializer or\n * a plugin's own option spreading.\n */\nexport function declareSchemaTables<TTarget extends object>(\n  target: TTarget,\n  declaration: FarmSchemaTablesDeclaration,\n): TTarget {\n  Object.defineProperty(target, FARM_SCHEMA_TABLES, {\n    value: declaration,\n    enumerable: false,\n    configurable: true,\n  });\n  return target;\n}\n\n/** The declaration on a plugin, when it has one. */\nexport function readSchemaTables(candidate: unknown): FarmSchemaTablesDeclaration | undefined {\n  if (!candidate || (typeof candidate !== \"object\" && typeof candidate !== \"function\")) {\n    return undefined;\n  }\n  return (candidate as Record<symbol, FarmSchemaTablesDeclaration>)[FARM_SCHEMA_TABLES];\n}\n\n/**\n * Every table owner an app has configured.\n *\n * Plugins and integrations are both searched, because either can own storage.\n */\nexport function findSchemaTableOwners(config: {\n  plugins?: readonly unknown[];\n  integrations?: Record<string, unknown> | readonly unknown[];\n}): FarmSchemaTablesDeclaration[] {\n  const integrations = config.integrations;\n  const candidates = [\n    ...(config.plugins ?? []),\n    ...(Array.isArray(integrations) ? integrations : Object.values(integrations ?? {})),\n  ];\n\n  const owners: FarmSchemaTablesDeclaration[] = [];\n  for (const candidate of candidates) {\n    const declaration = readSchemaTables(candidate);\n    // An integration may contribute plugins; its tables can be declared on\n    // either, so both are checked and duplicates collapse by name.\n    if (declaration && !owners.some((owner) => owner.name === declaration.name)) {\n      owners.push(declaration);\n    }\n  }\n  return owners;\n}\n\n/** Resolve one owner's declaration into the models tooling works with. */\nexport function collectOwnerModels(owner: FarmSchemaTablesDeclaration): CollectedSchemaModel[] {\n  return collectSchemaModels([[owner.name, owner.schema, owner.models]]);\n}\n\n/** What an owner may read when resolving its client. */\nexport type FarmSchemaOwnerConfig = {\n  storage?: unknown;\n  integrations?: Record<string, unknown> | readonly unknown[];\n  [key: string]: unknown;\n};\n\nexport interface MigrateSchemaTablesOptions {\n  /** The app's resolved config, handed to the owner's `resolveClient`. */\n  config?: FarmSchemaOwnerConfig;\n  /** Write the plan to this path instead of applying it. */\n  write?: string;\n  /** Execute the plan. */\n  apply?: boolean;\n  log?: (message: string) => void;\n}\n\nexport interface MigrateSchemaTablesResult {\n  plan: FarmSchemaMigratePlan;\n  sql: string;\n  applied: string[];\n}\n\n/**\n * Plan, and optionally apply, the tables one owner needs.\n *\n * Nothing is executed unless `apply` is set: the default is to hand back sql a\n * person can read before it touches a database.\n */\nexport async function migrateSchemaTables(\n  owner: FarmSchemaTablesDeclaration,\n  options: MigrateSchemaTablesOptions = {},\n): Promise<MigrateSchemaTablesResult> {\n  const log = options.log ?? (() => {});\n  const client = await owner.resolveClient(options.config ?? {});\n  const adapter = createSchemaExecutor(client, owner.name);\n\n  if (!adapter) {\n    log(\n      `Nothing to create: ${owner.name} stores data through a storage mount, which has no tables.`,\n    );\n    return {\n      plan: { dialect: \"sqlite\", statements: [], upToDate: [], drift: [] },\n      sql: \"\",\n      applied: [],\n    };\n  }\n\n  const { executor, dialect } = adapter;\n  const models = collectOwnerModels(owner);\n  const plan = await planSchemaMigration(models, owner.dialect ?? dialect, executor);\n  const sql = formatSchemaMigration(plan, owner.name);\n\n  if (plan.upToDate.length > 0) {\n    log(`Already up to date: ${plan.upToDate.join(\", \")}`);\n  }\n  if (plan.drift.length > 0) {\n    log(\n      `These tables exist but no longer match the schema. Farm will not change them:\\n${describeSchemaDrift(plan.drift)}`,\n    );\n  }\n  if (plan.statements.length === 0) {\n    log(\"Nothing to create.\");\n    return { plan, sql, applied: [] };\n  }\n\n  if (options.write) {\n    const { writeFile, mkdir } = await import(\"node:fs/promises\");\n    const { dirname } = await import(\"node:path\");\n    await mkdir(dirname(options.write), { recursive: true });\n    await writeFile(options.write, sql, \"utf8\");\n    log(`Wrote ${plan.statements.length} statement(s) to ${options.write}`);\n    return { plan, sql, applied: [] };\n  }\n\n  if (!options.apply) {\n    log(sql);\n    return { plan, sql, applied: [] };\n  }\n\n  const applied = await applySchemaMigration(plan, executor);\n  log(`Created: ${applied.applied.join(\", \")}`);\n  return { plan, sql, applied: applied.applied };\n}\n","import React, { createContext, useContext, type ReactNode } from \"react\";\nimport type { FarmConfig } from \"./types\";\nimport { normalizeFarmBasePath } from \"./base-path\";\n\ninterface FarmContextValue {\n  config: FarmConfig;\n  basePath: string;\n}\n\nconst FarmContext = createContext<FarmContextValue | null>(null);\n\ninterface FarmProviderProps {\n  children: ReactNode;\n  config: FarmConfig;\n}\n\n/**\n * Farm.js context provider for client-side components\n */\nexport function FarmProvider({ children, config }: FarmProviderProps) {\n  const value: FarmContextValue = {\n    config,\n    basePath: normalizeFarmBasePath(config.basePath),\n  };\n\n  return <FarmContext.Provider value={value}>{children}</FarmContext.Provider>;\n}\n\n/**\n * Hook to access Farm.js configuration and utilities\n */\nexport function useFarm(): FarmContextValue {\n  const context = useContext(FarmContext);\n\n  if (!context) {\n    throw new Error(\"useFarm must be used within a FarmProvider\");\n  }\n\n  return context;\n}\n\n/** @internal Read Farm context when a component can also use a runtime fallback. */\nexport function useOptionalFarm(): FarmContextValue | null {\n  return useContext(FarmContext);\n}\n\n/**\n * Hook to get the current base path\n */\nexport function useBasePath(): string {\n  const { basePath } = useFarm();\n  return basePath;\n}\n","import type { ViteDevServer, ModuleNode } from \"vite\";\nimport { toPosixPath } from \"./utils\";\n\nexport class HMRManager {\n  private server: ViteDevServer;\n\n  constructor(server: ViteDevServer) {\n    this.server = server;\n  }\n\n  /**\n   * Send HMR update to client\n   */\n  async send(payload: any) {\n    this.server.ws.send(payload);\n  }\n\n  /**\n   * Trigger full page reload\n   */\n  async reloadPage() {\n    this.server.ws.send({\n      type: \"full-reload\",\n      path: \"*\",\n    });\n  }\n\n  /**\n   * Handle file change and trigger HMR\n   */\n  async handleFileChange(file: string) {\n    const module = await this.server.moduleGraph.getModuleByUrl(file);\n    const normalizedFile = toPosixPath(file);\n\n    if (!module) {\n      return;\n    }\n\n    // Invalidate module\n    this.server.moduleGraph.invalidateModule(module);\n\n    // Get affected modules\n    const affectedModules = this.getAffectedModules(module);\n\n    if (affectedModules.size === 0) {\n      return;\n    }\n\n    if (\n      normalizedFile.includes(\"/app/\") &&\n      /\\/page\\.(?:tsx?|jsx?|vue|svelte)$/.test(normalizedFile)\n    ) {\n      await this.reloadPage();\n      return;\n    }\n\n    if (\n      normalizedFile.includes(\"/app/\") &&\n      /\\/layout\\.(?:tsx?|jsx?|vue|svelte)$/.test(normalizedFile)\n    ) {\n      await this.reloadPage();\n      return;\n    }\n    // Send update for other files\n    this.send({\n      type: \"update\",\n      updates: Array.from(affectedModules).map((m) => ({\n        type: m.type === \"css\" ? \"css-update\" : \"js-update\",\n        path: m.url,\n        acceptedPath: m.url,\n        timestamp: Date.now(),\n      })),\n    });\n  }\n\n  /**\n   * Get all affected modules in the dependency graph\n   */\n  private getAffectedModules(module: ModuleNode): Set<ModuleNode> {\n    const affected = new Set<ModuleNode>();\n    const seen = new Set<ModuleNode>();\n\n    const traverse = (mod: ModuleNode) => {\n      if (seen.has(mod)) return;\n      seen.add(mod);\n      affected.add(mod);\n\n      // A self-accepting module is the HMR boundary: it re-runs with the\n      // update, so nothing above it is affected.\n      if (mod.isSelfAccepting) return;\n\n      for (const importer of mod.importers) {\n        // An importer that accepts this dependency is likewise a boundary:\n        // it receives the update, but its own importers do not. Accepting is\n        // per-edge, so the importer stays traversable via other dependencies.\n        if (importer.acceptedHmrDeps?.has(mod)) {\n          affected.add(importer);\n          continue;\n        }\n        traverse(importer);\n      }\n    };\n\n    traverse(module);\n    return affected;\n  }\n\n  /**\n   * Handle custom HMR events from client\n   */\n  onClientMessage(event: string, callback: (data: any) => void) {\n    // Vite handles this via ws.on\n  }\n}\n\n/**\n * Create HMR client code for injection\n */\nexport function createHMRClientCode(): string {\n  return `\n// Farm.js HMR Client\nif (import.meta.hot) {\n  // Accept HMR updates for this module\n  import.meta.hot.accept((newModule) => {\n    if (newModule) {\n      // Module updated, trigger re-render\n      window.location.reload();\n    }\n  });\n\n  // Listen for custom Farm.js events\n  import.meta.hot.on('farm:route-update', (data) => {\n    console.log('Route updated:', data.path);\n    window.location.reload();\n  });\n\n  // Handle CSS updates\n  import.meta.hot.on('vite:beforeUpdate', () => {\n    console.log('[Farm.js] HMR update incoming...');\n  });\n\n  import.meta.hot.on('vite:afterUpdate', () => {\n    console.log('[Farm.js] HMR update applied ✓');\n  });\n\n  // Handle errors\n  import.meta.hot.on('vite:error', (err) => {\n    console.error('[Farm.js] HMR error:', err);\n  });\n}\n`;\n}\n","import type { FarmPlugin, FarmPluginContext } from \"../plugin\";\nimport type { RedirectConfig } from \"../config\";\nimport type { FarmRequest, FarmResponse } from \"../types\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { isFarmRedirectStatus } from \"../navigation-errors\";\nimport { appendFarmRedirectQuery } from \"../redirect-query\";\nimport { resolveFarmRequestURL } from \"../server/request\";\nimport {\n  compileConfigRoutePattern,\n  interpolateConfigRouteDestination,\n  localizeConfigRouteDestination,\n  resolveConfigRoutePathname,\n} from \"./route-pattern\";\n\nexport function createRedirectsPlugin(\n  redirects: RedirectConfig[],\n  {\n    beforeRequest: overrideBeforeRequest,\n    afterResponse: overrideAfterResponse,\n    i18n,\n  }: {\n    beforeRequest?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n    afterResponse?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n    i18n?: ResolvedFarmI18nConfig;\n  } = {},\n): FarmPlugin {\n  for (const redirect of redirects) {\n    if (redirect.statusCode !== undefined && !isFarmRedirectStatus(redirect.statusCode)) {\n      throw new RangeError(\n        `Redirect \"${redirect.source}\" statusCode must be one of 301, 302, 303, 307, or 308.`,\n      );\n    }\n  }\n  const compiledRedirects = redirects.map((redirect) => ({\n    redirect,\n    pattern: compileConfigRoutePattern(redirect.source),\n  }));\n\n  return {\n    name: \"farm:redirects\",\n    enforce: \"pre\",\n    async beforeRequest(req, res, context) {\n      if (overrideBeforeRequest) {\n        await overrideBeforeRequest(req, res, context);\n      }\n      const url = resolveFarmRequestURL(req);\n      const routePath = resolveConfigRoutePathname(url.pathname, i18n);\n      const pathname = routePath.pathname;\n\n      for (const { redirect, pattern } of compiledRedirects) {\n        const match = pathname.match(pattern.regex);\n        if (match) {\n          const localizedDestination = localizeConfigRouteDestination(\n            interpolateConfigRouteDestination(redirect.destination, match, pattern.tokens),\n            routePath.locale,\n            i18n,\n          );\n          const destination = appendFarmRedirectQuery(localizedDestination, url.search);\n\n          const statusCode = redirect.statusCode ?? (redirect.permanent ? 308 : 307);\n\n          res.writeHead(statusCode, {\n            Location: destination,\n          });\n          res.end();\n          return;\n        }\n      }\n    },\n\n    async afterResponse(req, res, context) {\n      if (overrideAfterResponse) {\n        await overrideAfterResponse(req, res, context);\n      }\n    },\n  };\n}\n","import type { FarmPlugin, FarmPluginContext } from \"../plugin\";\nimport type { HeaderConfig } from \"../config\";\nimport type { FarmRequest, FarmResponse } from \"../types\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { resolveFarmRequestURL } from \"../server/request\";\nimport { compileConfigRoutePattern, resolveConfigRoutePathname } from \"./route-pattern\";\n\nconst FARM_CONFIG_HEADERS_FINALIZER = Symbol.for(\"farm.configHeadersFinalizer\");\n\nfunction appendConfiguredLinkHeader(res: FarmResponse, value: string): void {\n  const current = res.getHeader(\"Link\");\n  if (current === undefined) {\n    res.setHeader(\"Link\", value);\n    return;\n  }\n\n  const currentValue = Array.isArray(current) ? current.join(\", \") : String(current);\n  if (currentValue !== value && !currentValue.endsWith(`, ${value}`)) {\n    res.setHeader(\"Link\", `${currentValue}, ${value}`);\n  }\n}\n\nfunction appendConfiguredSetCookieHeader(res: FarmResponse, value: string): void {\n  const current = res.getHeader(\"Set-Cookie\");\n  if (current === undefined) {\n    res.setHeader(\"Set-Cookie\", value);\n    return;\n  }\n\n  const values = (Array.isArray(current) ? current : [current]).map(String);\n  if (!values.includes(value)) {\n    res.setHeader(\"Set-Cookie\", [...values, value]);\n  }\n}\n\nfunction applyResponseHeaders(\n  res: FarmResponse,\n  matchedHeaders: readonly HeaderConfig[\"headers\"][],\n): void {\n  for (const headers of matchedHeaders) {\n    for (const header of headers) {\n      const key = header.key.toLowerCase();\n      if (key === \"link\") {\n        appendConfiguredLinkHeader(res, header.value);\n      } else if (key === \"set-cookie\") {\n        appendConfiguredSetCookieHeader(res, header.value);\n      } else {\n        res.setHeader(header.key, header.value);\n      }\n    }\n  }\n}\n\nfunction applyWriteHeadHeaders(res: FarmResponse, headers: unknown): void {\n  if (Array.isArray(headers)) {\n    let setCookieWritten = false;\n    for (let index = 0; index + 1 < headers.length; index += 2) {\n      const key = String(headers[index]);\n      const value = headers[index + 1] as string | number | readonly string[];\n      if (key.toLowerCase() === \"set-cookie\" && setCookieWritten) {\n        const current = res.getHeader(\"Set-Cookie\");\n        const values = (Array.isArray(current) ? current : [current]).filter(\n          (entry) => entry !== undefined,\n        );\n        res.setHeader(\"Set-Cookie\", [...values, ...(Array.isArray(value) ? value : [value])]);\n      } else {\n        res.setHeader(key, value);\n        if (key.toLowerCase() === \"set-cookie\") setCookieWritten = true;\n      }\n    }\n    return;\n  }\n\n  if (!headers || typeof headers !== \"object\") return;\n  for (const [key, value] of Object.entries(headers)) {\n    if (value !== undefined) res.setHeader(key, value);\n  }\n}\n\nexport function createHeadersPlugin(\n  headers: HeaderConfig[],\n  {\n    beforeRequest: overrideBeforeRequest,\n    afterResponse: overrideAfterResponse,\n    i18n,\n  }: {\n    beforeRequest?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n    afterResponse?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n    i18n?: ResolvedFarmI18nConfig;\n  } = {},\n): FarmPlugin {\n  const compiledHeaders = headers.map((config) => ({\n    config,\n    pattern: compileConfigRoutePattern(config.source),\n  }));\n\n  return {\n    name: \"farm:headers\",\n    enforce: \"pre\",\n\n    async beforeRequest(req, res, context) {\n      if (overrideBeforeRequest) {\n        await overrideBeforeRequest(req, res, context);\n      }\n      const url = resolveFarmRequestURL(req);\n      const pathname = resolveConfigRoutePathname(url.pathname, i18n).pathname;\n      const matchedHeaders = compiledHeaders\n        .filter(({ pattern }) => pattern.regex.test(pathname))\n        .map(({ config }) => config.headers);\n\n      applyResponseHeaders(res, matchedHeaders);\n\n      const responseWithFinalizer = res as FarmResponse & {\n        [FARM_CONFIG_HEADERS_FINALIZER]?: boolean;\n      };\n      if (matchedHeaders.length === 0 || responseWithFinalizer[FARM_CONFIG_HEADERS_FINALIZER]) {\n        return;\n      }\n\n      responseWithFinalizer[FARM_CONFIG_HEADERS_FINALIZER] = true;\n      const writeHead = res.writeHead;\n      res.writeHead = ((statusCode: number, ...args: unknown[]) => {\n        const statusMessage = typeof args[0] === \"string\" ? (args.shift() as string) : undefined;\n        applyWriteHeadHeaders(res, args[0]);\n        applyResponseHeaders(res, matchedHeaders);\n        return statusMessage === undefined\n          ? (writeHead as any).call(res, statusCode)\n          : (writeHead as any).call(res, statusCode, statusMessage);\n      }) as FarmResponse[\"writeHead\"];\n    },\n\n    async afterResponse(req, res, context) {\n      if (overrideAfterResponse) {\n        await overrideAfterResponse(req, res, context);\n      }\n    },\n  };\n}\n","export { createRedirectsPlugin } from \"./redirects\";\nexport { createHeadersPlugin } from \"./headers\";\nexport { createRewritesPlugin } from \"./rewrites\";\nexport { createEnvPlugin } from \"./env\";\nexport { createCompressionPlugin } from \"./compression\";\nexport { createLoggerPlugin } from \"./logger\";\nexport type { FarmPlugin } from \"../plugin\";\n","import type { FarmPlugin, FarmPluginContext } from \"../plugin\";\nimport type { FarmRequest, FarmResponse } from \"../types\";\n\nexport function createEnvPlugin(\n  env: Record<string, string>,\n  {\n    beforeRequest: overrideBeforeRequest,\n    afterResponse: overrideAfterResponse,\n  }: {\n    beforeRequest?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n    afterResponse?: (\n      req: FarmRequest,\n      res: FarmResponse,\n      context: FarmPluginContext,\n    ) => void | Promise<void>;\n  } = {},\n): FarmPlugin {\n  return {\n    name: \"farm:env\",\n\n    configResolved(config, context) {\n      for (const [key, value] of Object.entries(env)) {\n        process.env[key] = value;\n      }\n    },\n\n    async beforeRequest(req, res, context) {\n      if (overrideBeforeRequest) {\n        await overrideBeforeRequest(req, res, context);\n      }\n    },\n\n    async afterResponse(req, res, context) {\n      if (overrideAfterResponse) {\n        await overrideAfterResponse(req, res, context);\n      }\n    },\n  };\n}\n","import type { FarmPlugin, FarmPluginContext } from \"../plugin\";\nimport type { FarmRequest, FarmResponse } from \"../types\";\nimport { pipeline, Readable } from \"node:stream\";\nimport { constants, createBrotliCompress, createGzip } from \"node:zlib\";\n\ntype SupportedEncoding = \"br\" | \"gzip\";\n\nconst Q_VALUE = /^(?:0(?:\\.\\d{0,3})?|1(?:\\.0{0,3})?)$/;\n\nfunction parseEncodingQuality(header: string): Map<string, number> {\n  const qualities = new Map<string, number>();\n\n  for (const item of header.split(\",\")) {\n    const [rawEncoding, ...parameters] = item.trim().split(\";\");\n    const encoding = rawEncoding?.trim().toLowerCase();\n    if (!encoding) continue;\n\n    let quality = 1;\n    for (const parameter of parameters) {\n      const [rawName, rawValue] = parameter.split(\"=\", 2);\n      if (rawName?.trim().toLowerCase() !== \"q\") continue;\n      const value = rawValue?.trim() ?? \"\";\n      quality = Q_VALUE.test(value) ? Number(value) : 0;\n    }\n\n    qualities.set(encoding, Math.max(qualities.get(encoding) ?? 0, quality));\n  }\n\n  return qualities;\n}\n\nfunction selectEncoding(header: string): SupportedEncoding | undefined {\n  if (!header.trim()) return undefined;\n\n  const qualities = parseEncodingQuality(header);\n  const wildcard = qualities.get(\"*\") ?? 0;\n  const quality = (encoding: SupportedEncoding) => qualities.get(encoding) ?? wildcard;\n  const brotli = quality(\"br\");\n  const gzip = quality(\"gzip\");\n\n  if (brotli <= 0 && gzip <= 0) return undefined;\n  return brotli >= gzip ? \"br\" : \"gzip\";\n}\n\nfunction isCompressionEligible(request: Request, response: Response): boolean {\n  if (\n    (request.method !== \"HEAD\" && !response.body) ||\n    response.status === 204 ||\n    response.status === 205 ||\n    response.status === 304 ||\n    response.headers.has(\"content-encoding\") ||\n    response.headers.has(\"content-range\") ||\n    response.headers.get(\"cache-control\")?.toLowerCase().includes(\"no-transform\")\n  ) {\n    return false;\n  }\n\n  const mediaType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n  return mediaType !== \"text/event-stream\";\n}\n\nfunction appendVary(headers: Headers, value: string): void {\n  const current = headers.get(\"vary\");\n  const values = current\n    ? current\n        .split(\",\")\n        .map((item) => item.trim())\n        .filter(Boolean)\n    : [];\n  if (values.includes(\"*\")) return;\n  if (!values.some((item) => item.toLowerCase() === value.toLowerCase())) {\n    values.push(value);\n  }\n  headers.set(\"vary\", values.join(\", \"));\n}\n\nfunction compressResponse(response: Response, encoding: SupportedEncoding): Response {\n  // Both compressors must flush per chunk. Without an explicit flush mode brotli\n  // buffers until its 4 MB window fills or the source ends, so a streaming SSR,\n  // RSC, or NDJSON response delivers nothing to the client until it completes -\n  // and `selectEncoding` prefers brotli on every tie, so that is the default\n  // path for an ordinary browser.\n  const compressor =\n    encoding === \"br\"\n      ? createBrotliCompress({ flush: constants.BROTLI_OPERATION_FLUSH })\n      : createGzip({ flush: constants.Z_SYNC_FLUSH });\n  const input = Readable.fromWeb(response.body as any);\n  const output = pipeline(input, compressor, () => {\n    // pipeline forwards source failures to the compressed body and destroys\n    // the source when the response consumer cancels it. The web stream owns\n    // observing the resulting destination error.\n  });\n  const headers = new Headers(response.headers);\n\n  headers.set(\"content-encoding\", encoding);\n  headers.delete(\"content-length\");\n  appendVary(headers, \"Accept-Encoding\");\n\n  const etag = headers.get(\"etag\");\n  if (etag && !etag.startsWith(\"W/\")) {\n    headers.set(\"etag\", `W/${etag}`);\n  }\n\n  return new Response(Readable.toWeb(output) as ReadableStream<Uint8Array>, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nfunction varyIdentityResponse(response: Response): Response {\n  const headers = new Headers(response.headers);\n  appendVary(headers, \"Accept-Encoding\");\n\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nexport function createCompressionPlugin({\n  beforeRequest: overrideBeforeRequest,\n  afterResponse: overrideAfterResponse,\n}: {\n  beforeRequest?: (\n    req: FarmRequest,\n    res: FarmResponse,\n    context: FarmPluginContext,\n  ) => void | Promise<void>;\n  afterResponse?: (\n    req: FarmRequest,\n    res: FarmResponse,\n    context: FarmPluginContext,\n  ) => void | Promise<void>;\n} = {}): FarmPlugin {\n  return {\n    name: \"farm:compression\",\n    enforce: \"post\",\n\n    runtime: {\n      after({ request, response, isProd }) {\n        if (!isProd || !isCompressionEligible(request, response)) return;\n\n        if (request.method === \"HEAD\") return varyIdentityResponse(response);\n\n        const encoding = selectEncoding(request.headers.get(\"accept-encoding\") ?? \"\");\n        if (!encoding) return varyIdentityResponse(response);\n        return compressResponse(response, encoding);\n      },\n    },\n\n    async beforeRequest(req, res, context) {\n      if (overrideBeforeRequest) {\n        await overrideBeforeRequest(req, res, context);\n      }\n    },\n\n    async afterResponse(req, res, context) {\n      if (overrideAfterResponse) {\n        await overrideAfterResponse(req, res, context);\n      }\n    },\n  };\n}\n","import type { FarmPlugin, FarmPluginContext } from \"../plugin\";\nimport type { FarmResponse } from \"../types\";\nimport type { FarmRequest } from \"../types\";\n\nexport function createLoggerPlugin({\n  beforeRequest,\n  afterResponse,\n}: {\n  beforeRequest?: (\n    req: FarmRequest,\n    res: FarmResponse,\n    context: FarmPluginContext,\n  ) => void | Promise<void>;\n  afterResponse?: (\n    req: FarmRequest,\n    res: FarmResponse,\n    context: FarmPluginContext,\n  ) => void | Promise<void>;\n} = {}): FarmPlugin {\n  const plugin: FarmPlugin = {\n    name: \"farm:logger\",\n    enforce: \"post\",\n  };\n\n  if (beforeRequest) {\n    plugin.beforeRequest = async (req, res, context) => {\n      await beforeRequest(req, res, context);\n    };\n  }\n  if (afterResponse) {\n    plugin.afterResponse = async (req, res, context) => {\n      await afterResponse(req, res, context);\n    };\n  }\n\n  return plugin;\n}\n","export * from \"./endpoint\";\nexport * from \"./route-manager\";\nexport * from \"./client\";\nexport * from \"./config\";\nexport { resolveFarmAPIServerBasePath } from \"./server-path\";\nexport * from \"./transport\";\nexport * from \"./vite-plugin\";\nexport * from \"./route\";\n","import type {\n  FarmIntegrationAPI,\n  FarmIntegrationAPIBodyFormat,\n  FarmIntegrationAPIOperation,\n} from \"./integration-api\";\nimport type { FarmIntegration as FarmIntegrationDefinition } from \"./integrations\";\nimport { resolveFarmAPIRequestURL } from \"./api/config\";\nimport { resolveClientHeaders, type ClientHeaders } from \"./client-headers\";\nimport { createClientCancellation } from \"./client-cancellation\";\nimport {\n  notifyClientObserver,\n  type ClientLifecycleHooks,\n  type ClientRequestEvent,\n  type ClientResponseEvent,\n} from \"./client-observers\";\n\n/**\n * Small per-call integration metadata. When sent from a browser, values are\n * client-controlled and should be validated before authorization decisions.\n */\nexport type IntegrationClientData = Record<string, unknown>;\n\nexport type IntegrationClientOptions = ClientLifecycleHooks & {\n  baseURL?: string;\n  headers?: ClientHeaders;\n  credentials?: RequestCredentials;\n  /** Whole-call deadline in milliseconds; 0 disables it. */\n  timeoutMs?: number;\n  /** HTTP transport, including server fallback; never replaces local dispatch. */\n  fetch?: typeof globalThis.fetch;\n  data?: IntegrationClientData;\n  isServer?: false | undefined;\n};\n\ntype IntegrationRequestOptionsBase<TData = unknown> = ClientLifecycleHooks<TData> & {\n  headers?: Record<string, string>;\n  signal?: AbortSignal;\n  timeoutMs?: number;\n  credentials?: RequestCredentials;\n  data?: IntegrationClientData;\n};\n\nexport type IntegrationClientRequestOptions<TData = unknown> = IntegrationRequestOptionsBase<TData>;\n\nexport type IntegrationServerRequestLike =\n  | Request\n  | {\n      url?: string;\n      headers?: HeadersInit;\n    };\n\nexport type IntegrationServerClientOptions = Omit<IntegrationClientOptions, \"isServer\"> & {\n  isServer: true;\n  request?: IntegrationServerRequestLike;\n  forwardHeaders?: boolean | readonly string[];\n};\n\nexport type IntegrationServerClientRequestOptions<TData = unknown> =\n  IntegrationRequestOptionsBase<TData> & {\n    baseURL?: string;\n    request?: IntegrationServerRequestLike;\n    forwardHeaders?: boolean | readonly string[];\n  };\n\nexport class IntegrationClientError<TData = unknown> extends Error {\n  readonly status: number;\n  readonly response: Response;\n  readonly data: TData | undefined;\n\n  constructor(message: string, response: Response, data?: TData) {\n    super(message);\n    this.name = \"IntegrationClientError\";\n    this.status = response.status;\n    this.response = response;\n    this.data = data;\n  }\n}\n\nexport type IntegrationOperationResult<\n  TData = unknown,\n  TError = IntegrationClientError<unknown> | Error,\n> = {\n  data: TData | null;\n  error: TError | null;\n};\n\ntype ExtractOperationBody<T> = T extends {\n  __types?: { body: infer TBody };\n}\n  ? TBody\n  : never;\n\ntype ExtractOperationQuery<T> = T extends {\n  __types?: { query: infer TQuery };\n}\n  ? TQuery\n  : never;\n\ntype ExtractOperationResponse<T> = T extends {\n  __types?: { response: infer TResponse };\n}\n  ? TResponse\n  : unknown;\n\nexport type InferIntegrationOperationBody<T> = ExtractOperationBody<T>;\nexport type InferIntegrationOperationQuery<T> = ExtractOperationQuery<T>;\nexport type InferIntegrationOperationResponse<T> = ExtractOperationResponse<T>;\n\ntype IsNever<T> = [T] extends [never] ? true : false;\n\ntype OperationInput<T> =\n  IsNever<ExtractOperationBody<T>> extends true\n    ? IsNever<ExtractOperationQuery<T>> extends true\n      ? {}\n      : { query?: ExtractOperationQuery<T> }\n    : IsNever<ExtractOperationQuery<T>> extends true\n      ? { body: ExtractOperationBody<T> }\n      : { body: ExtractOperationBody<T>; query?: ExtractOperationQuery<T> };\n\ntype ClientOperation<T> = (\n  options?: OperationInput<T>,\n  requestOptions?: IntegrationClientRequestOptions<ExtractOperationResponse<T>>,\n) => Promise<IntegrationOperationResult<ExtractOperationResponse<T>>>;\n\ntype ServerOperation<T> = (\n  options?: OperationInput<T>,\n  requestOptions?: IntegrationServerClientRequestOptions<ExtractOperationResponse<T>>,\n) => Promise<IntegrationOperationResult<ExtractOperationResponse<T>>>;\n\ntype IsUnion<T, U = T> = T extends any ? ([U] extends [T] ? false : true) : never;\n\ntype SingleKey<T> = [T] extends [never] ? never : IsUnion<T> extends true ? never : T;\n\ntype ExtractAPIFromSource<TSource> = TSource extends { api?: infer TAPI }\n  ? NonNullable<TAPI> extends FarmIntegrationAPI\n    ? NonNullable<TAPI>\n    : never\n  : TSource extends FarmIntegrationAPI\n    ? TSource\n    : never;\n\ntype SourceKeysWithAPI<TSources extends Record<string, any>> = {\n  [K in keyof TSources]: [ExtractAPIFromSource<TSources[K]>] extends [never] ? never : K;\n}[keyof TSources];\n\ntype IsServerRegisteredOperation<T> = T extends { isServer: true } ? true : false;\n\ntype ClientOperationKeys<TAPI> = {\n  [K in keyof TAPI]: TAPI[K] extends FarmIntegrationAPIOperation<any, any, any, any>\n    ? IsServerRegisteredOperation<TAPI[K]> extends true\n      ? never\n      : K\n    : never;\n}[keyof TAPI];\n\ntype ClientNamespaceShape<TAPI> = {\n  [K in keyof TAPI as TAPI[K] extends FarmIntegrationAPIOperation<any, any, any, any>\n    ? IsServerRegisteredOperation<TAPI[K]> extends true\n      ? never\n      : K\n    : K]: TAPI[K] extends FarmIntegrationAPIOperation<any, any, any, any>\n    ? ClientOperation<TAPI[K]>\n    : TAPI[K] extends Record<string, any>\n      ? IntegrationAPIToClient<TAPI[K]>\n      : never;\n};\n\ntype SingleClientOperationKey<TAPI> =\n  Exclude<keyof TAPI, ClientOperationKeys<TAPI>> extends never\n    ? SingleKey<ClientOperationKeys<TAPI>>\n    : never;\n\ntype IntegrationAPIToClient<TAPI> =\n  TAPI extends FarmIntegrationAPIOperation<any, any, any, any>\n    ? ClientOperation<TAPI>\n    : TAPI extends Record<string, any>\n      ? [SingleClientOperationKey<TAPI>] extends [never]\n        ? ClientNamespaceShape<TAPI>\n        : SingleClientOperationKey<TAPI> extends keyof TAPI\n          ? ClientOperation<TAPI[SingleClientOperationKey<TAPI>]> & ClientNamespaceShape<TAPI>\n          : ClientNamespaceShape<TAPI>\n      : never;\n\nexport type IntegrationClient<TSources extends Record<string, any>> = {\n  [K in SourceKeysWithAPI<TSources>]: IntegrationAPIToClient<ExtractAPIFromSource<TSources[K]>>;\n};\n\nexport type IntegrationClientRoot<TSources extends Record<string, any>> = {\n  integrations: IntegrationClient<TSources>;\n};\n\ntype ServerOperationKeys<TAPI> = {\n  [K in keyof TAPI]: TAPI[K] extends FarmIntegrationAPIOperation<any, any, any> ? K : never;\n}[keyof TAPI];\n\ntype ServerNamespaceShape<TAPI> = {\n  [K in keyof TAPI]: TAPI[K] extends FarmIntegrationAPIOperation<any, any, any>\n    ? ServerOperation<TAPI[K]>\n    : TAPI[K] extends Record<string, any>\n      ? IntegrationAPIToServerClient<TAPI[K]>\n      : never;\n};\n\ntype SingleServerOperationKey<TAPI> =\n  Exclude<keyof TAPI, ServerOperationKeys<TAPI>> extends never\n    ? SingleKey<ServerOperationKeys<TAPI>>\n    : never;\n\ntype IntegrationAPIToServerClient<TAPI> =\n  TAPI extends FarmIntegrationAPIOperation<any, any, any>\n    ? ServerOperation<TAPI>\n    : TAPI extends Record<string, any>\n      ? [SingleServerOperationKey<TAPI>] extends [never]\n        ? ServerNamespaceShape<TAPI>\n        : SingleServerOperationKey<TAPI> extends keyof TAPI\n          ? ServerOperation<TAPI[SingleServerOperationKey<TAPI>]> & ServerNamespaceShape<TAPI>\n          : ServerNamespaceShape<TAPI>\n      : never;\n\nexport type IntegrationServerClient<TSources extends Record<string, any>> = {\n  [K in SourceKeysWithAPI<TSources>]: IntegrationAPIToServerClient<\n    ExtractAPIFromSource<TSources[K]>\n  >;\n};\n\nexport type IntegrationServerClientRoot<TSources extends Record<string, any>> = {\n  integrations: IntegrationServerClient<TSources>;\n};\n\nexport type IntegrationClientAliases<TSources extends Record<string, any>> =\n  IntegrationClient<TSources> & {\n    integrations: IntegrationClient<TSources>;\n  };\n\nexport type IntegrationServerClientAliases<TSources extends Record<string, any>> =\n  IntegrationServerClient<TSources> & {\n    integrations: IntegrationServerClient<TSources>;\n  };\n\nexport type IntegrationAPI<TSources extends Record<string, any>> =\n  IntegrationClientAliases<TSources> & {\n    server: (\n      options: Omit<IntegrationServerClientOptions, \"isServer\">,\n    ) => IntegrationServerClientAliases<TSources>;\n  };\n\nexport type IntegrationClients<TSources extends Record<string, any>> = {\n  api: IntegrationServerClientAliases<TSources>;\n  apiClient: IntegrationClientAliases<TSources>;\n};\n\ntype ResolvedIntegrationNamespace = readonly [\n  string,\n  FarmIntegrationAPI,\n  FarmIntegrationDefinition | FarmIntegrationAPI,\n];\n\ntype RegisteredIntegrationRuntime = {\n  integration: FarmIntegrationDefinition;\n  config: unknown;\n  isDev: boolean;\n  isProd: boolean;\n};\n\nconst INTEGRATION_RUNTIME_REGISTRY_KEY = Symbol.for(\"farm.integrationRuntimeRegistry\");\nconst CURRENT_REQUEST_RESOLVER_KEY = Symbol.for(\"farm.currentRequestResolver\");\nconst INTEGRATION_REQUEST_DISPATCHER_KEY = Symbol.for(\"farm.integrationRequestDispatcher\");\n\ntype IntegrationRequestDispatcher = (\n  runtime: RegisteredIntegrationRuntime,\n  request: Request,\n  options?: { currentRequest?: Request; data?: IntegrationClientData; internal?: boolean },\n) => Promise<Response | null>;\n\ntype GlobalWithIntegrationRuntimeRegistry = typeof globalThis & {\n  [INTEGRATION_RUNTIME_REGISTRY_KEY]?: Map<string, RegisteredIntegrationRuntime>;\n  [CURRENT_REQUEST_RESOLVER_KEY]?: () => Request | undefined;\n  [INTEGRATION_REQUEST_DISPATCHER_KEY]?: IntegrationRequestDispatcher;\n};\n\ntype GlobalWithIntegrationAPIManifest = typeof globalThis & {\n  __FARM_INTEGRATION_API_MANIFEST__?: Record<string, FarmIntegrationAPI>;\n  window?: {\n    __FARM_INTEGRATION_API_MANIFEST__?: Record<string, FarmIntegrationAPI>;\n  };\n};\n\nfunction isOperation(value: unknown): value is FarmIntegrationAPIOperation<any, any, any, any> {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    (value as FarmIntegrationAPIOperation<any, any, any, any>).kind ===\n      \"farm-integration-api-operation\"\n  );\n}\n\nfunction resolveSourceAPI(\n  source: FarmIntegrationDefinition | FarmIntegrationAPI,\n): FarmIntegrationAPI {\n  if (\"kind\" in source && source.kind === \"farm-integration\") {\n    if (!source.api) {\n      throw new Error(`Integration \"${source.type}\" does not expose a client API definition.`);\n    }\n\n    return source.api as FarmIntegrationAPI;\n  }\n\n  return source as FarmIntegrationAPI;\n}\n\nfunction tryResolveSourceAPI(\n  source: FarmIntegrationDefinition | FarmIntegrationAPI,\n): FarmIntegrationAPI | null {\n  if (\"kind\" in source && source.kind === \"farm-integration\") {\n    if (!source.api) {\n      return null;\n    }\n\n    return source.api as FarmIntegrationAPI;\n  }\n\n  return source as FarmIntegrationAPI;\n}\n\nfunction getIntegrationRuntimeRegistry() {\n  const globalState = globalThis as GlobalWithIntegrationRuntimeRegistry;\n  return (\n    globalState[INTEGRATION_RUNTIME_REGISTRY_KEY] || new Map<string, RegisteredIntegrationRuntime>()\n  );\n}\n\nfunction getRegisteredIntegrationRuntimeLocal(\n  key: string,\n): RegisteredIntegrationRuntime | undefined {\n  return getIntegrationRuntimeRegistry().get(key);\n}\n\nfunction getRegisteredIntegrationsLocal(): Record<string, FarmIntegrationDefinition> {\n  return Object.fromEntries(\n    Array.from(getIntegrationRuntimeRegistry().entries()).map(([key, runtime]) => [\n      key,\n      runtime.integration,\n    ]),\n  );\n}\n\nfunction resolveCurrentRequestLocal(): Request | undefined {\n  const globalState = globalThis as GlobalWithIntegrationRuntimeRegistry;\n  return globalState[CURRENT_REQUEST_RESOLVER_KEY]?.();\n}\n\nfunction resolveIntegrationRequestDispatcherLocal(): IntegrationRequestDispatcher | undefined {\n  const globalState = globalThis as GlobalWithIntegrationRuntimeRegistry;\n  return globalState[INTEGRATION_REQUEST_DISPATCHER_KEY];\n}\n\nconst INTEGRATION_DATA_HEADER = \"x-farm-integration-data\";\nconst INTEGRATION_DATA_HEADER_MAX_LENGTH = 16 * 1024;\nconst BLOCKED_INTEGRATION_DATA_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nfunction isIntegrationClientData(value: unknown): value is IntegrationClientData {\n  return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPlainIntegrationDataObject(value: unknown): value is Record<string, unknown> {\n  if (!isIntegrationClientData(value)) {\n    return false;\n  }\n\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction sanitizeIntegrationClientDataValue(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map((item) => sanitizeIntegrationClientDataValue(item));\n  }\n\n  if (!isPlainIntegrationDataObject(value)) {\n    return value;\n  }\n\n  const sanitized: Record<string, unknown> = {};\n  for (const [key, item] of Object.entries(value)) {\n    if (BLOCKED_INTEGRATION_DATA_KEYS.has(key)) {\n      continue;\n    }\n\n    sanitized[key] = sanitizeIntegrationClientDataValue(item);\n  }\n\n  return sanitized;\n}\n\nfunction normalizeIntegrationClientData(\n  value: IntegrationClientData | undefined,\n): IntegrationClientData | undefined {\n  if (!isIntegrationClientData(value)) {\n    return undefined;\n  }\n\n  const sanitized = sanitizeIntegrationClientDataValue(value);\n  return isIntegrationClientData(sanitized) && Object.keys(sanitized).length > 0\n    ? sanitized\n    : undefined;\n}\n\nfunction getIntegrationDataHeaderByteLength(value: string): number {\n  return new TextEncoder().encode(value).byteLength;\n}\n\nfunction mergeIntegrationClientData(\n  ...values: Array<IntegrationClientData | undefined>\n): IntegrationClientData | undefined {\n  let merged: IntegrationClientData | undefined;\n\n  for (const value of values) {\n    const data = normalizeIntegrationClientData(value);\n    if (!data) {\n      continue;\n    }\n\n    merged = {\n      ...merged,\n      ...data,\n    };\n  }\n\n  return merged && Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nfunction serializeIntegrationClientData(data: IntegrationClientData): string {\n  const serialized = JSON.stringify(data);\n  if (getIntegrationDataHeaderByteLength(serialized) > INTEGRATION_DATA_HEADER_MAX_LENGTH) {\n    throw new Error(\n      `Integration client data must be smaller than ${INTEGRATION_DATA_HEADER_MAX_LENGTH} bytes when sent over HTTP headers.`,\n    );\n  }\n\n  return serialized;\n}\n\nfunction appendIntegrationClientDataHeader(\n  headers: Headers,\n  data: IntegrationClientData | undefined,\n) {\n  if (!data) {\n    return;\n  }\n\n  headers.set(INTEGRATION_DATA_HEADER, serializeIntegrationClientData(data));\n}\n\nfunction resolveAutomaticClientNamespaces(): ResolvedIntegrationNamespace[] {\n  const globalState = globalThis as GlobalWithIntegrationAPIManifest;\n  const manifest =\n    globalState.window?.__FARM_INTEGRATION_API_MANIFEST__ ||\n    globalState.__FARM_INTEGRATION_API_MANIFEST__ ||\n    {};\n\n  return Object.entries(manifest).map(([key, api]) => [key, api, api] as const);\n}\n\nfunction resolveAutomaticServerNamespaces(): ResolvedIntegrationNamespace[] {\n  return Object.entries(getRegisteredIntegrationsLocal()).flatMap(([key, source]) => {\n    const api = tryResolveSourceAPI(source);\n    return api ? [[key, api, source] as ResolvedIntegrationNamespace] : [];\n  });\n}\n\nfunction appendQuery(url: URL, query: Record<string, unknown> | undefined) {\n  if (!query) {\n    return;\n  }\n\n  for (const [key, value] of Object.entries(query)) {\n    if (value == null) {\n      continue;\n    }\n\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        if (item != null) {\n          url.searchParams.append(key, String(item));\n        }\n      }\n      continue;\n    }\n\n    url.searchParams.set(key, String(value));\n  }\n}\n\nfunction appendHeaders(target: Headers, source: HeadersInit | undefined) {\n  if (!source) {\n    return;\n  }\n\n  const headers = new Headers(source);\n  headers.forEach((value, key) => {\n    target.set(key, value);\n  });\n}\n\nconst DEFAULT_FORWARDED_HEADERS = [\n  \"authorization\",\n  \"cookie\",\n  \"x-client-ip\",\n  \"x-forwarded-for\",\n  \"x-forwarded-host\",\n  \"x-forwarded-proto\",\n  \"x-real-ip\",\n] as const;\n\nfunction resolveRequestLike(request: IntegrationServerRequestLike | undefined) {\n  if (!request) {\n    return undefined;\n  }\n\n  if (request instanceof Request) {\n    return {\n      url: request.url,\n      headers: request.headers,\n    };\n  }\n\n  return {\n    url: request.url,\n    headers: request.headers ? new Headers(request.headers) : undefined,\n  };\n}\n\nfunction resolveServerBaseURL(\n  explicitBaseURL: string | undefined,\n  request: ReturnType<typeof resolveRequestLike>,\n) {\n  if (explicitBaseURL) {\n    return explicitBaseURL;\n  }\n\n  if (request?.url) {\n    try {\n      return new URL(request.url).origin;\n    } catch {\n      // Fall back to forwarded headers below.\n    }\n  }\n\n  const headers = request?.headers;\n  const host = headers?.get(\"x-forwarded-host\") || headers?.get(\"host\");\n  if (host) {\n    const proto = headers?.get(\"x-forwarded-proto\") || \"http\";\n    return `${proto}://${host}`;\n  }\n\n  return \"http://localhost:3000\";\n}\n\nfunction resolveForwardHeaders(\n  request: ReturnType<typeof resolveRequestLike>,\n  forwardHeaders: boolean | readonly string[] | undefined,\n) {\n  if (!request?.headers || forwardHeaders === false) {\n    return new Headers();\n  }\n\n  const allowed =\n    Array.isArray(forwardHeaders) && forwardHeaders.length > 0\n      ? new Set(forwardHeaders.map((item) => item.toLowerCase()))\n      : new Set<string>(DEFAULT_FORWARDED_HEADERS);\n\n  const headers = new Headers();\n  request.headers.forEach((value, key) => {\n    if (allowed.has(key.toLowerCase())) {\n      headers.set(key, value);\n    }\n  });\n\n  return headers;\n}\n\nfunction createBody(\n  format: FarmIntegrationAPIBodyFormat | undefined,\n  body: unknown,\n  headers: Headers,\n): BodyInit | undefined {\n  if (body == null || format === \"none\") {\n    return undefined;\n  }\n\n  if (format === \"form\") {\n    if (body instanceof FormData || body instanceof URLSearchParams) {\n      return body;\n    }\n\n    const form = new URLSearchParams();\n    for (const [key, value] of Object.entries(body as Record<string, unknown>)) {\n      if (value == null) {\n        continue;\n      }\n\n      if (Array.isArray(value)) {\n        for (const item of value) {\n          if (item != null) {\n            form.append(key, String(item));\n          }\n        }\n        continue;\n      }\n\n      form.set(key, String(value));\n    }\n\n    headers.set(\"content-type\", \"application/x-www-form-urlencoded;charset=UTF-8\");\n    return form;\n  }\n\n  headers.set(\"content-type\", \"application/json\");\n  return JSON.stringify(body);\n}\n\nfunction createOperationBody(\n  operation: Pick<FarmIntegrationAPIOperation<any, any, any>, \"bodyFormat\" | \"method\">,\n  body: unknown,\n  headers: Headers,\n): BodyInit | undefined {\n  const requestBody = createBody(operation.bodyFormat, body, headers);\n\n  if (operation.method === \"QUERY\" && requestBody === undefined && !headers.has(\"content-type\")) {\n    headers.set(\n      \"content-type\",\n      operation.bodyFormat === \"form\"\n        ? \"application/x-www-form-urlencoded;charset=UTF-8\"\n        : \"application/json\",\n    );\n  }\n\n  return requestBody;\n}\n\nasync function parseResponseData(response: Response): Promise<unknown> {\n  if (response.status === 204 || response.status === 205) {\n    return undefined;\n  }\n\n  const contentType = response.headers.get(\"content-type\") || \"\";\n\n  if (isJSONMediaType(contentType)) {\n    return await response.json();\n  }\n\n  return await response.text();\n}\n\nfunction isJSONMediaType(contentType: string): boolean {\n  const mediaType = contentType.split(\";\", 1)[0].trim().toLowerCase();\n  return mediaType === \"application/json\" || mediaType.endsWith(\"+json\");\n}\n\nasync function safeParseResponseData(response: Response): Promise<unknown> {\n  try {\n    return await parseResponseData(response);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction createResponseError(response: Response, errorData: unknown) {\n  const message =\n    typeof errorData === \"string\"\n      ? errorData\n      : typeof errorData === \"object\" && errorData\n        ? String(\n            (errorData as { error?: string; message?: string }).error ||\n              (errorData as { error?: string; message?: string }).message ||\n              response.statusText,\n          )\n        : response.statusText || \"Integration request failed.\";\n\n  return new IntegrationClientError(message, response, errorData);\n}\n\nfunction normalizeExecutionError(error: unknown): Error {\n  if (error instanceof Error) {\n    return error;\n  }\n\n  if (typeof error === \"string\" && error.length > 0) {\n    return new Error(error);\n  }\n\n  return new Error(\"Integration request failed.\");\n}\n\nasync function finalizeOperationResponse(\n  operation: FarmIntegrationAPIOperation<any, any, any>,\n  response: Response,\n) {\n  if (!response.ok) {\n    const errorData = await safeParseResponseData(response);\n    return {\n      data: null,\n      error: createResponseError(response, errorData),\n    };\n  }\n\n  if (operation.responseFormat === \"response\") {\n    return {\n      data: response,\n      error: null,\n    };\n  }\n\n  return {\n    data: (await parseResponseData(response)) as unknown,\n    error: null,\n  };\n}\n\nlet integrationRequestCounter = 0;\nconst noIntegrationObservers = {\n  response(_response: Response) {},\n  finish<T extends IntegrationOperationResult>(result: T): T {\n    return result;\n  },\n};\n\nfunction createIntegrationObservers(\n  operation: FarmIntegrationAPIOperation<any, any, any>,\n  options: ClientLifecycleHooks,\n  requestOptions?: ClientLifecycleHooks,\n) {\n  if (\n    !options.onRequest &&\n    !options.onResponse &&\n    !options.onError &&\n    !requestOptions?.onRequest &&\n    !requestOptions?.onResponse &&\n    !requestOptions?.onError\n  ) {\n    return noIntegrationObservers;\n  }\n  const requestEvent: ClientRequestEvent = {\n    requestId: `integration-${Date.now()}-${++integrationRequestCounter}`,\n    method: operation.method,\n    path: operation.path ?? \"\",\n    attempt: 0,\n    timestamp: Date.now(),\n  };\n  let response: Response | undefined;\n  notifyClientObserver(options.onRequest, [requestEvent]);\n  notifyClientObserver(requestOptions?.onRequest, [requestEvent]);\n  return {\n    response(value: Response) {\n      response = value;\n    },\n    finish<T extends IntegrationOperationResult>(result: T): T {\n      const data = result.error ? undefined : result.data;\n      const event: ClientResponseEvent = {\n        ...requestEvent,\n        timestamp: Date.now(),\n        response,\n        data,\n        error: result.error ?? undefined,\n        ok: !result.error,\n        status: response?.status,\n      };\n      notifyClientObserver(options.onResponse, [data, result.error, event]);\n      notifyClientObserver(requestOptions?.onResponse, [data, result.error, event]);\n      if (result.error) {\n        notifyClientObserver(options.onError, [result.error]);\n        notifyClientObserver(requestOptions?.onError, [result.error]);\n      }\n      return result;\n    },\n  };\n}\n\nasync function executeClientOperation(\n  operation: FarmIntegrationAPIOperation<any, any, any>,\n  input: Record<string, unknown>,\n  options: IntegrationClientOptions,\n  requestOptions?: IntegrationClientRequestOptions,\n) {\n  const cancellation = createClientCancellation(\n    requestOptions?.signal,\n    requestOptions?.timeoutMs ?? options.timeoutMs,\n  );\n  const observers = createIntegrationObservers(operation, options, requestOptions);\n  try {\n    const result = await cancellation.run(async () => {\n      if (!operation.path) {\n        return {\n          data: null,\n          error: new Error(\n            \"Integration API operation path is missing. Pass a path to api.get/post/... or wrap pathless methods with api.route(path, { ... }).\",\n          ),\n        };\n      }\n\n      const baseURL =\n        options.baseURL ||\n        (typeof window !== \"undefined\" ? window.location.origin : \"http://localhost:3000\");\n      const url = resolveFarmAPIRequestURL(operation.path, baseURL);\n      appendQuery(url, input.query as Record<string, unknown> | undefined);\n\n      const resolved = resolveClientHeaders(options.headers);\n      const headers = resolved instanceof Headers ? resolved : await resolved;\n      cancellation.check();\n      appendHeaders(headers, operation.headers);\n      appendHeaders(headers, requestOptions?.headers);\n      headers.set(\"x-farm-integration-client\", \"1\");\n\n      if (operation.responseFormat !== \"response\") {\n        headers.set(\"accept\", \"application/json\");\n      }\n\n      appendIntegrationClientDataHeader(\n        headers,\n        mergeIntegrationClientData(options.data, requestOptions?.data),\n      );\n\n      const body = createOperationBody(operation, input.body, headers);\n      const response = await (options.fetch ?? fetch)(url.toString(), {\n        method: operation.method,\n        headers,\n        body,\n        credentials:\n          requestOptions?.credentials ?? operation.credentials ?? options.credentials ?? \"include\",\n        signal: cancellation.signal,\n      });\n      cancellation.check();\n\n      observers.response(response);\n      if (!response.ok) {\n        const errorData = await safeParseResponseData(response);\n        return {\n          data: null,\n          error: createResponseError(response, errorData),\n        };\n      }\n\n      if (operation.responseFormat === \"response\") {\n        return {\n          data: response,\n          error: null,\n        };\n      }\n\n      return {\n        data: (await parseResponseData(response)) as unknown,\n        error: null,\n      };\n    });\n    return observers.finish(result);\n  } catch (error) {\n    return observers.finish({\n      data: null,\n      error: normalizeExecutionError(error),\n    });\n  } finally {\n    cancellation.dispose();\n  }\n}\n\nasync function executeServerOperation(\n  operation: FarmIntegrationAPIOperation<any, any, any>,\n  input: Record<string, unknown>,\n  options: Omit<IntegrationServerClientOptions, \"isServer\">,\n  requestOptions?: IntegrationServerClientRequestOptions,\n  integrationKey?: string,\n  source?: FarmIntegrationDefinition | FarmIntegrationAPI,\n) {\n  // Capture the request before any asynchronous work (including header resolvers).\n  const currentRequest =\n    requestOptions?.request instanceof Request\n      ? requestOptions.request\n      : options.request instanceof Request\n        ? options.request\n        : resolveCurrentRequestLocal();\n  const cancellation = createClientCancellation(\n    requestOptions?.signal,\n    requestOptions?.timeoutMs ?? options.timeoutMs,\n    currentRequest?.signal,\n  );\n  const observers = createIntegrationObservers(operation, options, requestOptions);\n  try {\n    const result = await cancellation.run(async () => {\n      if (!operation.path) {\n        return {\n          data: null,\n          error: new Error(\n            \"Integration API operation path is missing. Pass a path to api.get/post/... or wrap pathless methods with api.route(path, { ... }).\",\n          ),\n        };\n      }\n\n      const serverRequestOptions =\n        requestOptions &&\n        (\"request\" in requestOptions ||\n          \"baseURL\" in requestOptions ||\n          \"forwardHeaders\" in requestOptions)\n          ? requestOptions\n          : undefined;\n      const request = resolveRequestLike(\n        serverRequestOptions?.request ?? options.request ?? currentRequest,\n      );\n      const baseURL = resolveServerBaseURL(\n        serverRequestOptions?.baseURL ?? options.baseURL,\n        request,\n      );\n      const origin = resolveServerBaseURL(undefined, request);\n      // Registered handlers use their canonical path, not an HTTP gateway prefix.\n      const url = new URL(operation.path, new URL(baseURL, origin));\n      appendQuery(url, input.query as Record<string, unknown> | undefined);\n\n      const headers = new Headers();\n      appendHeaders(\n        headers,\n        resolveForwardHeaders(\n          request,\n          serverRequestOptions?.forwardHeaders ?? options.forwardHeaders,\n        ),\n      );\n      const resolved = resolveClientHeaders(options.headers);\n      appendHeaders(headers, resolved instanceof Headers ? resolved : await resolved);\n      cancellation.check();\n      appendHeaders(headers, operation.headers);\n      appendHeaders(headers, requestOptions?.headers);\n      headers.set(\"x-farm-integration-client\", \"1\");\n\n      if (operation.responseFormat !== \"response\") {\n        headers.set(\"accept\", \"application/json\");\n      }\n\n      const data = mergeIntegrationClientData(options.data, requestOptions?.data);\n\n      if (integrationKey) {\n        const runtime =\n          \"kind\" in (source || {}) &&\n          (source as FarmIntegrationDefinition).kind === \"farm-integration\"\n            ? getRegisteredIntegrationRuntimeLocal(integrationKey) || {\n                integration: source as FarmIntegrationDefinition,\n                config: {},\n                isDev: process.env.NODE_ENV !== \"production\",\n                isProd: process.env.NODE_ENV === \"production\",\n              }\n            : getRegisteredIntegrationRuntimeLocal(integrationKey);\n\n        if (runtime) {\n          const dispatchIntegrationRequest = resolveIntegrationRequestDispatcherLocal();\n          const body = createOperationBody(operation, input.body, headers);\n          const directResponse = dispatchIntegrationRequest\n            ? await dispatchIntegrationRequest(\n                runtime,\n                new Request(url.toString(), {\n                  method: operation.method,\n                  headers,\n                  body,\n                  signal: cancellation.signal,\n                }),\n                {\n                  currentRequest,\n                  data,\n                  internal: true,\n                },\n              )\n            : null;\n\n          cancellation.check();\n\n          if (directResponse) {\n            observers.response(directResponse);\n            return await finalizeOperationResponse(operation, directResponse);\n          }\n        }\n      }\n\n      appendIntegrationClientDataHeader(headers, data);\n\n      const body = createOperationBody(operation, input.body, headers);\n      const httpURL = resolveFarmAPIRequestURL(operation.path, baseURL, origin);\n      appendQuery(httpURL, input.query as Record<string, unknown> | undefined);\n      const response = await (options.fetch ?? fetch)(httpURL.toString(), {\n        method: operation.method,\n        headers,\n        body,\n        credentials:\n          requestOptions?.credentials ?? operation.credentials ?? options.credentials ?? \"include\",\n        signal: cancellation.signal,\n      });\n      cancellation.check();\n\n      observers.response(response);\n      return await finalizeOperationResponse(operation, response);\n    });\n    return observers.finish(result);\n  } catch (error) {\n    return observers.finish({\n      data: null,\n      error: normalizeExecutionError(error),\n    });\n  } finally {\n    cancellation.dispose();\n  }\n}\n\nexport function createIntegrationClient<TSources extends Record<string, any>>(\n  sources: { integrations: TSources },\n  options: IntegrationServerClientOptions,\n): IntegrationServerClientAliases<TSources>;\nexport function createIntegrationClient<TSources extends Record<string, any>>(\n  sources: { integrations: TSources },\n  options?: IntegrationClientOptions,\n): IntegrationClientAliases<TSources>;\nexport function createIntegrationClient<TSources extends Record<string, any>>(\n  sources: TSources,\n  options: IntegrationServerClientOptions,\n): IntegrationServerClient<TSources>;\nexport function createIntegrationClient<TSources extends Record<string, any>>(\n  sources: TSources,\n  options?: IntegrationClientOptions,\n): IntegrationClient<TSources>;\nexport function createIntegrationClient<TSources extends Record<string, any>>(\n  sources: TSources | { integrations: TSources },\n  options: IntegrationClientOptions | IntegrationServerClientOptions = {},\n):\n  | IntegrationClient<TSources>\n  | IntegrationClientAliases<TSources>\n  | IntegrationServerClient<TSources>\n  | IntegrationServerClientAliases<TSources> {\n  const rawSources = \"integrations\" in sources ? sources.integrations : sources;\n  const isServer = options.isServer === true;\n\n  const namespaces = Object.entries(rawSources)\n    .map(([key, source]) => {\n      const api = tryResolveSourceAPI(source as FarmIntegrationDefinition | FarmIntegrationAPI);\n      if (!api) {\n        return null;\n      }\n      return [key, api, source as FarmIntegrationDefinition | FarmIntegrationAPI] as const;\n    })\n    .filter(\n      (\n        value,\n      ): value is readonly [\n        string,\n        FarmIntegrationAPI,\n        FarmIntegrationDefinition | FarmIntegrationAPI,\n      ] => value !== null,\n    );\n\n  const cache = new Map<string, any>();\n\n  const integrationNamespaces = new Proxy(\n    {},\n    {\n      get(target, property) {\n        if (typeof property !== \"string\") {\n          return undefined;\n        }\n\n        if (Reflect.has(target, property)) {\n          return Reflect.get(target, property);\n        }\n\n        if (cache.has(property)) {\n          return cache.get(property);\n        }\n\n        const match = namespaces.find(([key]) => key === property);\n        if (!match) {\n          return undefined;\n        }\n\n        const namespace = isServer\n          ? createServerNamespaceProxy(\n              match[0],\n              match[2],\n              match[1],\n              options as IntegrationServerClientOptions,\n            )\n          : createNamespaceProxy(match[1], options);\n        cache.set(property, namespace);\n        return namespace;\n      },\n    },\n  ) as\n    | IntegrationClient<TSources>\n    | IntegrationClientAliases<TSources>\n    | IntegrationServerClient<TSources>\n    | IntegrationServerClientAliases<TSources>;\n\n  if (\"integrations\" in sources) {\n    Object.defineProperty(integrationNamespaces, \"integrations\", {\n      value: integrationNamespaces,\n      enumerable: false,\n      configurable: false,\n      writable: false,\n    });\n\n    return integrationNamespaces as\n      | IntegrationClientAliases<TSources>\n      | IntegrationServerClientAliases<TSources>;\n  }\n\n  return integrationNamespaces as IntegrationClient<TSources> | IntegrationServerClient<TSources>;\n}\n\nfunction createAutomaticIntegrationAliases<TSources extends Record<string, any>>(\n  isServer: boolean,\n  options: IntegrationClientOptions | IntegrationServerClientOptions = {},\n): IntegrationClientAliases<TSources> | IntegrationServerClientAliases<TSources> {\n  const cache = isServer ? new Map<string, any>() : null;\n\n  const integrationNamespaces = new Proxy(\n    {},\n    {\n      get(_target, property) {\n        if (typeof property !== \"string\") {\n          return undefined;\n        }\n\n        if (property === \"integrations\") {\n          return integrationNamespaces;\n        }\n\n        if (cache?.has(property)) {\n          return cache.get(property);\n        }\n\n        const namespaces = isServer\n          ? resolveAutomaticServerNamespaces()\n          : resolveAutomaticClientNamespaces();\n        const match = namespaces.find(([key]) => key === property);\n        if (!match) {\n          return undefined;\n        }\n\n        const namespace = isServer\n          ? createServerNamespaceProxy(\n              match[0],\n              match[2],\n              match[1],\n              options as IntegrationServerClientOptions,\n            )\n          : createNamespaceProxy(match[1], options as IntegrationClientOptions);\n\n        cache?.set(property, namespace);\n        return namespace;\n      },\n    },\n  ) as IntegrationClientAliases<TSources> | IntegrationServerClientAliases<TSources>;\n\n  Object.defineProperty(integrationNamespaces, \"integrations\", {\n    value: integrationNamespaces,\n    enumerable: false,\n    configurable: false,\n    writable: false,\n  });\n\n  return integrationNamespaces;\n}\n\nexport function integrationsClient<\n  TSources extends Record<string, any>,\n>(): IntegrationClientAliases<TSources>;\nexport function integrationsClient<TSources extends Record<string, any>>(\n  options: IntegrationClientOptions,\n): IntegrationClientAliases<TSources>;\nexport function integrationsClient<TSources extends Record<string, any>>(\n  options: IntegrationClientOptions = {},\n): IntegrationClientAliases<TSources> {\n  return createAutomaticIntegrationAliases<TSources>(\n    false,\n    options,\n  ) as IntegrationClientAliases<TSources>;\n}\n\nexport function integrationsServer<\n  TSources extends Record<string, any>,\n>(): IntegrationServerClientAliases<TSources>;\nexport function integrationsServer<TSources extends Record<string, any>>(\n  options: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationServerClientAliases<TSources>;\nexport function integrationsServer<TSources extends Record<string, any>>(\n  options: Omit<IntegrationServerClientOptions, \"isServer\"> = {},\n): IntegrationServerClientAliases<TSources> {\n  return createAutomaticIntegrationAliases<TSources>(true, {\n    ...options,\n    isServer: true,\n  }) as IntegrationServerClientAliases<TSources>;\n}\n\nexport function createIntegrationServerClient<TSources extends Record<string, any>>(sources: {\n  integrations: TSources;\n}): IntegrationServerClientAliases<TSources>;\nexport function createIntegrationServerClient<TSources extends Record<string, any>>(\n  sources: TSources,\n): IntegrationServerClient<TSources>;\nexport function createIntegrationServerClient<TSources extends Record<string, any>>(\n  sources: { integrations: TSources },\n  options: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationServerClientAliases<TSources>;\nexport function createIntegrationServerClient<TSources extends Record<string, any>>(\n  sources: TSources,\n  options: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationServerClient<TSources>;\nexport function createIntegrationServerClient<TSources extends Record<string, any>>(\n  sources: TSources | { integrations: TSources },\n  options: Omit<IntegrationServerClientOptions, \"isServer\"> = {},\n): IntegrationServerClient<TSources> | IntegrationServerClientAliases<TSources> {\n  return createIntegrationClient(sources, {\n    ...options,\n    isServer: true,\n  }) as IntegrationServerClient<TSources> | IntegrationServerClientAliases<TSources>;\n}\n\nexport function createIntegrationApi<TSources extends Record<string, any>>(\n  sources: { integrations: TSources },\n  options: IntegrationClientOptions = {},\n): IntegrationAPI<TSources> {\n  const client = createIntegrationClient(sources, options);\n\n  return {\n    ...client,\n    server(serverOptions = {}) {\n      return createIntegrationServerClient(sources, {\n        ...options,\n        ...serverOptions,\n      });\n    },\n  };\n}\n\nfunction isIntegrationClientOptionsInput(value: unknown): value is IntegrationClientOptions {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    !Array.isArray(value) &&\n    (\"baseURL\" in value ||\n      \"headers\" in value ||\n      \"credentials\" in value ||\n      \"timeoutMs\" in value ||\n      \"fetch\" in value ||\n      \"onRequest\" in value ||\n      \"onResponse\" in value ||\n      \"onError\" in value ||\n      \"data\" in value ||\n      \"isServer\" in value)\n  );\n}\n\nfunction resolveIntegrationServerOptions(\n  clientOptions: IntegrationClientOptions = {},\n  serverOptions: Omit<IntegrationServerClientOptions, \"isServer\"> = {},\n): Omit<IntegrationServerClientOptions, \"isServer\"> {\n  const data = mergeIntegrationClientData(clientOptions.data, serverOptions.data);\n\n  return {\n    baseURL: clientOptions.baseURL,\n    headers: clientOptions.headers,\n    credentials: clientOptions.credentials,\n    timeoutMs: clientOptions.timeoutMs,\n    fetch: clientOptions.fetch,\n    onRequest: clientOptions.onRequest,\n    onResponse: clientOptions.onResponse,\n    onError: clientOptions.onError,\n    ...serverOptions,\n    ...(data ? { data } : {}),\n  };\n}\n\nexport function createIntegrationClients<TSources extends Record<string, any>>(\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function createIntegrationClients<TSources extends Record<string, any>>(\n  sources: TSources,\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function createIntegrationClients<TSources extends Record<string, any>>(\n  sources: { integrations: TSources },\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function createIntegrationClients<TSources extends Record<string, any>>(\n  sources?: TSources | { integrations: TSources },\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources> {\n  if (arguments.length === 0 || isIntegrationClientOptionsInput(sources)) {\n    const automaticClientOptions = isIntegrationClientOptionsInput(sources) ? sources : {};\n    const automaticServerOptions = arguments.length > 1 ? clientOptions : undefined;\n\n    return {\n      api: integrationsServer<TSources>(\n        resolveIntegrationServerOptions(\n          automaticClientOptions,\n          automaticServerOptions as Omit<IntegrationServerClientOptions, \"isServer\"> | undefined,\n        ),\n      ),\n      apiClient: integrationsClient<TSources>(automaticClientOptions),\n    };\n  }\n\n  const explicitSources =\n    sources && \"integrations\" in sources ? sources.integrations : (sources as TSources);\n\n  return {\n    api: createIntegrationServerClient(\n      {\n        integrations: explicitSources,\n      },\n      resolveIntegrationServerOptions(clientOptions, serverOptions),\n    ) as IntegrationServerClientAliases<TSources>,\n    apiClient: createIntegrationClient(\n      {\n        integrations: explicitSources,\n      },\n      clientOptions,\n    ) as IntegrationClientAliases<TSources>,\n  };\n}\n\nexport function createIntegrations<TSources extends Record<string, any>>(\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function createIntegrations<TSources extends Record<string, any>>(\n  sources: TSources,\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function createIntegrations<TSources extends Record<string, any>>(\n  sources: { integrations: TSources },\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function createIntegrations<TSources extends Record<string, any>>(\n  sources?: TSources | { integrations: TSources } | IntegrationClientOptions,\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources> {\n  if (arguments.length === 0) {\n    return createIntegrationClients<TSources>();\n  }\n\n  return createIntegrationClients<TSources>(\n    sources as TSources,\n    clientOptions,\n    serverOptions,\n  ) as IntegrationClients<TSources>;\n}\n\nfunction createClientSafeIntegrationAPI(\n  api: FarmIntegrationAPI | undefined,\n): FarmIntegrationAPI | undefined {\n  if (!api) {\n    return undefined;\n  }\n\n  const entries = Object.entries(api as Record<string, unknown>).map(([key, value]) => {\n    if (isOperation(value)) {\n      return [\n        key,\n        {\n          kind: value.kind,\n          path: value.path,\n          method: value.method,\n          bodyFormat: value.bodyFormat,\n          responseFormat: value.responseFormat,\n          credentials: value.credentials,\n          isServer: value.isServer,\n          __pathless: value.__pathless,\n        },\n      ];\n    }\n\n    if (value && typeof value === \"object\") {\n      return [key, createClientSafeIntegrationAPI(value as FarmIntegrationAPI)];\n    }\n\n    return [key, value];\n  });\n\n  return Object.fromEntries(entries) as FarmIntegrationAPI;\n}\n\nexport function getIntegrationAPIManifest(): Record<string, FarmIntegrationAPI> {\n  const manifestEntries = Object.entries(getRegisteredIntegrationsLocal())\n    .map(([key, integration]) => {\n      const api = createClientSafeIntegrationAPI(integration.api);\n      return api ? ([key, api] as const) : null;\n    })\n    .filter((value): value is readonly [string, FarmIntegrationAPI] => value !== null);\n\n  return Object.fromEntries(manifestEntries);\n}\n\nexport function integrationClients<TSources extends Record<string, any>>(\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function integrationClients<TSources extends Record<string, any>>(\n  sources: TSources,\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function integrationClients<TSources extends Record<string, any>>(\n  sources: { integrations: TSources },\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources>;\nexport function integrationClients<TSources extends Record<string, any>>(\n  sources?: TSources | { integrations: TSources },\n  clientOptions?: IntegrationClientOptions,\n  serverOptions?: Omit<IntegrationServerClientOptions, \"isServer\">,\n): IntegrationClients<TSources> {\n  if (arguments.length === 0) {\n    return createIntegrationClients<TSources>();\n  }\n\n  return createIntegrationClients<TSources>(\n    sources as TSources,\n    clientOptions,\n    serverOptions,\n  ) as IntegrationClients<TSources>;\n}\n\nfunction resolveSingleNamespaceOperation(api: FarmIntegrationAPI) {\n  const entries = Object.entries(api as Record<string, unknown>);\n  if (entries.length !== 1) {\n    return null;\n  }\n\n  const [, value] = entries[0]!;\n  return isOperation(value) ? value : null;\n}\n\nfunction createClientOperationCaller(\n  operation: FarmIntegrationAPIOperation<any, any, any, any>,\n  property: string,\n  options: IntegrationClientOptions,\n) {\n  if (operation.isServer === true) {\n    return async () => {\n      throw new Error(\n        `Integration method \"${property}\" is registered with isServer: true and is only available from a server integration client.`,\n      );\n    };\n  }\n\n  return async (\n    input: Record<string, unknown> = {},\n    requestOptions?: IntegrationClientRequestOptions,\n  ) => {\n    if (typeof window === \"undefined\") {\n      throw new Error(\n        \"Client integration API cannot be called on the server. Pass { isServer: true } to createIntegrationClient(...) during server rendering, or provide { isServer: true, request } outside it.\",\n      );\n    }\n\n    return executeClientOperation(operation, input, options, requestOptions);\n  };\n}\n\nfunction createServerOperationCaller(\n  operation: FarmIntegrationAPIOperation<any, any, any, any>,\n  options: IntegrationServerClientOptions,\n  integrationKey: string,\n  source: FarmIntegrationDefinition | FarmIntegrationAPI,\n) {\n  return async (\n    input: Record<string, unknown> = {},\n    requestOptions?: IntegrationServerClientRequestOptions,\n  ) => {\n    if (typeof window !== \"undefined\") {\n      throw new Error(\n        \"Server integration API cannot be called in the browser. Remove { isServer: true } and create a client integration API instead.\",\n      );\n    }\n\n    return executeServerOperation(\n      operation,\n      input,\n      options,\n      requestOptions,\n      integrationKey,\n      source,\n    );\n  };\n}\n\nfunction createNamespaceProxy(api: FarmIntegrationAPI, options: IntegrationClientOptions) {\n  const cache = new Map<string, any>();\n  const directOperation = resolveSingleNamespaceOperation(api);\n  const target = directOperation\n    ? createClientOperationCaller(directOperation, directOperation.method.toLowerCase(), options)\n    : {};\n\n  return new Proxy(target, {\n    get(targetObject, property, receiver) {\n      if (typeof property !== \"string\") {\n        return Reflect.get(targetObject, property, receiver);\n      }\n\n      if (cache.has(property)) {\n        return cache.get(property);\n      }\n\n      const value = (api as Record<string, unknown>)[property];\n      if (!value) {\n        return Reflect.get(targetObject, property, receiver);\n      }\n\n      if (isOperation(value)) {\n        const caller = createClientOperationCaller(value, property, options);\n        cache.set(property, caller);\n        return caller;\n      }\n\n      const namespace = createNamespaceProxy(value as FarmIntegrationAPI, options);\n      cache.set(property, namespace);\n      return namespace;\n    },\n  });\n}\n\nfunction createServerNamespaceProxy(\n  integrationKey: string,\n  source: FarmIntegrationDefinition | FarmIntegrationAPI,\n  api: FarmIntegrationAPI,\n  options: IntegrationServerClientOptions,\n) {\n  const cache = new Map<string, any>();\n  const directOperation = resolveSingleNamespaceOperation(api);\n  const target = directOperation\n    ? createServerOperationCaller(directOperation, options, integrationKey, source)\n    : {};\n\n  return new Proxy(target, {\n    get(targetObject, property, receiver) {\n      if (typeof property !== \"string\") {\n        return Reflect.get(targetObject, property, receiver);\n      }\n\n      if (cache.has(property)) {\n        return cache.get(property);\n      }\n\n      const value = (api as Record<string, unknown>)[property];\n      if (!value) {\n        return Reflect.get(targetObject, property, receiver);\n      }\n\n      if (isOperation(value)) {\n        const caller = createServerOperationCaller(value, options, integrationKey, source);\n        cache.set(property, caller);\n        return caller;\n      }\n\n      const namespace = createServerNamespaceProxy(\n        integrationKey,\n        source,\n        value as FarmIntegrationAPI,\n        options,\n      );\n      cache.set(property, namespace);\n      return namespace;\n    },\n  });\n}\n","/** Instance defaults, resolved once per call before cache lookup or dispatch. */\nexport type ClientHeaders =\n  | Record<string, string>\n  | (() => Record<string, string> | Promise<Record<string, string>>);\n\n/** Snapshot synchronous defaults immediately; keep async resolvers local to the call. */\nexport function resolveClientHeaders(source?: ClientHeaders): Headers | Promise<Headers> {\n  const value = typeof source === \"function\" ? source() : source;\n  if (value && typeof (value as Promise<Record<string, string>>).then === \"function\") {\n    return Promise.resolve(value).then((headers) => new Headers(headers));\n  }\n  return new Headers(value as Record<string, string> | undefined);\n}\n","/** One call budget, shared by header resolution, dispatch, decoding, and retry waits. */\nexport function createClientCancellation(\n  signal?: AbortSignal,\n  timeoutMs = 0,\n  parent?: AbortSignal,\n) {\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  let invalid: Error | undefined;\n  let timeoutReason: DOMException | undefined;\n  const signals = [signal, parent].filter((value): value is AbortSignal => !!value);\n  if (!Number.isInteger(timeoutMs) || timeoutMs < 0 || timeoutMs > 2_147_483_647) {\n    invalid = new RangeError(\n      \"timeoutMs must be an integer between 0 and 2147483647 (0 disables the deadline).\",\n    );\n  } else if (timeoutMs > 0) {\n    const controller = new AbortController();\n    signals.push(controller.signal);\n    timer = setTimeout(() => {\n      timeoutReason = new DOMException(\"Client request timed out\", \"TimeoutError\");\n      controller.abort(timeoutReason);\n    }, timeoutMs);\n  }\n  const combined = signals.length > 1 ? AbortSignal.any(signals) : signals[0];\n  let active = 0;\n  let closed = false;\n  const cleanup = () => {\n    if (closed && active === 0 && timer !== undefined) {\n      clearTimeout(timer);\n      timer = undefined;\n    }\n  };\n  const check = () => {\n    if (invalid) throw invalid;\n    combined?.throwIfAborted();\n  };\n  return {\n    signal: combined,\n    get timedOut() {\n      return timeoutReason !== undefined && combined?.reason === timeoutReason;\n    },\n    check,\n    hold() {\n      active++;\n      return () => {\n        active--;\n        cleanup();\n      };\n    },\n    // A race also bounds cooperative local dispatch and custom HTTP implementations.\n    // Late completion is consumed, but cannot turn a cancelled result into success.\n    async run<T>(work: () => T | PromiseLike<T>): Promise<T> {\n      check();\n      active++;\n      let abort: (() => void) | undefined;\n      try {\n        if (!combined) return await work();\n        return await new Promise<T>((resolve, reject) => {\n          abort = () => reject(combined.reason);\n          combined.addEventListener(\"abort\", abort, { once: true });\n          Promise.resolve()\n            .then(() => {\n              check();\n              return work();\n            })\n            .then(resolve, reject);\n        });\n      } finally {\n        if (abort) combined?.removeEventListener(\"abort\", abort);\n        active--;\n        cleanup();\n      }\n    },\n    async delay(ms: number) {\n      let retryTimer: ReturnType<typeof setTimeout> | undefined;\n      try {\n        await this.run(\n          () =>\n            new Promise<void>((resolve) => {\n              retryTimer = setTimeout(resolve, ms);\n            }),\n        );\n      } finally {\n        if (retryTimer !== undefined) clearTimeout(retryTimer);\n      }\n    },\n    dispose() {\n      closed = true;\n      cleanup();\n    },\n  };\n}\n","/** Metadata shared by app-route and integration execution attempts. */\nexport type ClientRequestEvent = {\n  requestId: string;\n  method: string;\n  path: string;\n  attempt: number;\n  timestamp: number;\n};\n\nexport type ClientResponseEvent<TData = unknown> = ClientRequestEvent & {\n  response?: Response;\n  data?: TData;\n  error?: Error;\n  ok?: boolean;\n  status?: number;\n};\n\n/** Observers compose with per-call hooks; return values never replace the result. */\nexport type ClientLifecycleHooks<TData = unknown> = {\n  onRequest?: (event: ClientRequestEvent) => void;\n  onResponse?: (\n    data: TData | undefined,\n    error: Error | null,\n    event: ClientResponseEvent<TData>,\n  ) => void;\n  onError?: (error: Error) => void;\n};\n\nexport function notifyClientObserver(\n  observer: ((...args: any[]) => unknown) | undefined,\n  args: unknown[],\n  label = \"Client lifecycle\",\n): void {\n  if (!observer) return;\n  const report = (error: unknown) => {\n    const reportError = (\n      globalThis as typeof globalThis & { reportError?: (error: unknown) => void }\n    ).reportError;\n    if (typeof reportError === \"function\") {\n      try {\n        reportError.call(globalThis, error);\n        return;\n      } catch {\n        /* Try the console fallback. */\n      }\n    }\n    try {\n      console.error(`[Farm.js] ${label} callback failed:`, error);\n    } catch {\n      /* Reporting must not affect a call. */\n    }\n  };\n  try {\n    const result = observer(...args);\n    if (result && typeof (result as PromiseLike<unknown>).then === \"function\")\n      void Promise.resolve(result).catch(report);\n  } catch (error) {\n    report(error);\n  }\n}\n","/// <reference lib=\"es2021.weakref\" />\nimport { createRouteDataCacheKey, type RouteDataCacheKey } from \"./cache\";\nimport { subscribeFarmCacheInvalidation } from \"./cache-invalidation\";\n\nexport type FarmClientCacheKey = RouteDataCacheKey;\n\nexport type FarmClientCacheStatus = \"idle\" | \"pending\" | \"success\" | \"error\";\n\nexport type FarmClientCacheEntry<TData = unknown> = {\n  data: TData;\n  updatedAt: number;\n  staleAt: number;\n  gcAt?: number;\n  invalidatedAt?: number;\n  status?: FarmClientCacheStatus;\n  error?: Error | null;\n  fetching?: boolean;\n  /** Marks an entry the persistence layer may write to its adapter. */\n  persist?: boolean;\n};\n\n/** @internal Observation seam for the client cache persistence engine. */\nexport type FarmClientCachePersistenceSink = {\n  onSet(key: string, entry: FarmClientCacheEntry): void;\n  onDelete(key: string): void;\n  onClear(): void;\n};\n\ntype FarmClientCacheListener = (event?: \"invalidate\") => void;\n\nconst invalidationTrackers = new WeakMap<FarmClientDataCache, Set<Set<string>>>();\n\n/** Internal request-lifetime tracking, including keys learned only from a response. */\nexport function trackFarmClientCacheInvalidations(cache: FarmClientDataCache) {\n  let trackers = invalidationTrackers.get(cache);\n  if (!trackers) {\n    trackers = new Set();\n    invalidationTrackers.set(cache, trackers);\n  }\n  const keys = new Set<string>();\n  trackers.add(keys);\n  return {\n    has(key: string) {\n      const resolved = cache.resolveKey(key);\n      for (const invalidated of keys) {\n        if (cache.resolveKey(invalidated) === resolved) return true;\n      }\n      return false;\n    },\n    dispose() {\n      if (!trackers.delete(keys)) return;\n      keys.clear();\n      if (trackers.size === 0) invalidationTrackers.delete(cache);\n    },\n  };\n}\n\nconst cacheFinalizer =\n  typeof FinalizationRegistry === \"function\"\n    ? new FinalizationRegistry<() => void>((unsubscribe) => unsubscribe())\n    : undefined;\n\n// This closure must only capture a weak reference, never the cache itself.\nfunction subscribeWeakCache(reference: WeakRef<FarmClientDataCache>): () => void {\n  const unsubscribe = subscribeFarmCacheInvalidation((key) => {\n    const cache = reference.deref();\n    if (cache) cache.invalidate(key);\n    else dispose();\n  });\n  function dispose() {\n    unsubscribe();\n    cacheFinalizer?.unregister(reference);\n  }\n  return dispose;\n}\n\nconst DEFAULT_GC_SWEEP_INTERVAL_MS = 30_000;\n\nexport class FarmClientDataCache {\n  private entries = new Map<string, FarmClientCacheEntry>();\n  private aliases = new Map<string, string>();\n  private invalidatedAt = new Map<string, number>();\n  private listeners = new Map<string, Set<FarmClientCacheListener>>();\n  private inflight = new Map<string, Promise<unknown>>();\n  private unsubscribeInvalidation: (() => void) | undefined;\n  private gcTimer: ReturnType<typeof setTimeout> | undefined;\n  private readonly gcSweepIntervalMs: number | false;\n  private persistence: FarmClientCachePersistenceSink | undefined;\n\n  constructor(\n    options: { subscribeToInvalidation?: boolean; gcSweepIntervalMs?: number | false } = {},\n  ) {\n    this.gcSweepIntervalMs = options.gcSweepIntervalMs ?? DEFAULT_GC_SWEEP_INTERVAL_MS;\n    if (options.subscribeToInvalidation !== false) {\n      if (typeof WeakRef === \"function\") {\n        const reference = new WeakRef(this);\n        const unsubscribe = subscribeWeakCache(reference);\n        cacheFinalizer?.register(this, unsubscribe, reference);\n        this.unsubscribeInvalidation = unsubscribe;\n      } else {\n        // Keep invalidation working on older runtimes without weak references.\n        this.unsubscribeInvalidation = subscribeFarmCacheInvalidation((key) =>\n          this.invalidate(key),\n        );\n      }\n    }\n  }\n\n  get size(): number {\n    return this.entries.size;\n  }\n\n  /** @internal Attach or detach the persistence engine's observation sink. */\n  attachPersistence(sink: FarmClientCachePersistenceSink | undefined): void {\n    this.persistence = sink;\n  }\n\n  resolveKey(key: string): string {\n    let resolved = key;\n    const seen = new Set<string>();\n\n    while (this.aliases.has(resolved) && !seen.has(resolved)) {\n      seen.add(resolved);\n      resolved = this.aliases.get(resolved)!;\n    }\n\n    return resolved;\n  }\n\n  get<TData = unknown>(key: string, now = Date.now()): FarmClientCacheEntry<TData> | undefined {\n    const resolved = this.resolveKey(key);\n    const entry = this.entries.get(resolved) as FarmClientCacheEntry<TData> | undefined;\n    if (!entry) return undefined;\n\n    if (entry.gcAt !== undefined && now >= entry.gcAt) {\n      this.entries.delete(resolved);\n      this.persistence?.onDelete(resolved);\n      this.emit(resolved);\n      return undefined;\n    }\n\n    return entry;\n  }\n\n  set<TData>(key: string, entry: FarmClientCacheEntry<TData>): this {\n    const resolved = this.resolveKey(key);\n    const invalidatedAt = this.invalidatedAt.get(resolved);\n    const nextEntry =\n      invalidatedAt !== undefined && invalidatedAt > entry.updatedAt\n        ? { ...entry, staleAt: 0, invalidatedAt }\n        : { ...entry, invalidatedAt: undefined };\n\n    if (invalidatedAt === undefined || entry.updatedAt >= invalidatedAt) {\n      this.invalidatedAt.delete(resolved);\n    }\n\n    this.entries.set(resolved, nextEntry);\n    if (nextEntry.gcAt !== undefined) this.scheduleGcSweep();\n    this.persistence?.onSet(resolved, nextEntry);\n    this.emit(resolved);\n    return this;\n  }\n\n  delete(key: string): boolean {\n    const resolved = this.resolveKey(key);\n    const deleted = this.entries.delete(resolved);\n    this.inflight.delete(resolved);\n    if (deleted) this.persistence?.onDelete(resolved);\n    this.emit(resolved);\n    return deleted;\n  }\n\n  clear(): void {\n    const keys = new Set([...this.entries.keys(), ...this.listeners.keys()]);\n    this.entries.clear();\n    this.aliases.clear();\n    this.invalidatedAt.clear();\n    this.inflight.clear();\n    this.persistence?.onClear();\n    for (const key of keys) this.emit(key);\n  }\n\n  dispose(): void {\n    this.unsubscribeInvalidation?.();\n    this.unsubscribeInvalidation = undefined;\n    if (this.gcTimer !== undefined) {\n      clearTimeout(this.gcTimer);\n      this.gcTimer = undefined;\n    }\n    this.clear();\n  }\n\n  isStale(key: string, now = Date.now()): boolean {\n    const entry = this.get(key, now);\n    return !entry || entry.invalidatedAt !== undefined || now >= entry.staleAt;\n  }\n\n  invalidate(key: string, now = Date.now()): void {\n    const resolved = this.resolveKey(key);\n    for (const keys of invalidationTrackers.get(this) ?? []) keys.add(resolved);\n    this.invalidatedAt.set(resolved, now);\n\n    const entry = this.entries.get(resolved);\n    if (entry) {\n      this.entries.set(resolved, {\n        ...entry,\n        staleAt: 0,\n        invalidatedAt: now,\n      });\n    }\n\n    this.emit(resolved, \"invalidate\");\n  }\n\n  alias(alias: string, key: string): void {\n    const resolved = this.resolveKey(key);\n    if (alias === resolved) return;\n\n    const aliasEntry = this.entries.get(alias);\n    const aliasInvalidatedAt = this.invalidatedAt.get(alias) ?? aliasEntry?.invalidatedAt;\n    const resolvedInvalidatedAt = this.invalidatedAt.get(resolved);\n    if (aliasEntry && !this.entries.has(resolved)) {\n      this.entries.set(resolved, aliasEntry);\n      this.persistence?.onSet(resolved, aliasEntry);\n    }\n\n    if (this.entries.delete(alias)) this.persistence?.onDelete(alias);\n    this.invalidatedAt.delete(alias);\n    const invalidatedAt = [aliasInvalidatedAt, resolvedInvalidatedAt].reduce<number | undefined>(\n      (latest, value) =>\n        value === undefined ? latest : latest === undefined ? value : Math.max(latest, value),\n      undefined,\n    );\n    const resolvedEntry = this.entries.get(resolved);\n    if (\n      invalidatedAt !== undefined &&\n      (!resolvedEntry || invalidatedAt > resolvedEntry.updatedAt)\n    ) {\n      this.invalidatedAt.set(resolved, invalidatedAt);\n      if (resolvedEntry) {\n        this.entries.set(resolved, {\n          ...resolvedEntry,\n          staleAt: 0,\n          invalidatedAt,\n        });\n      }\n    } else if (invalidatedAt !== undefined) {\n      this.invalidatedAt.delete(resolved);\n      if (resolvedEntry?.invalidatedAt !== undefined) {\n        this.entries.set(resolved, { ...resolvedEntry, invalidatedAt: undefined });\n      }\n    }\n\n    const aliasInflight = this.inflight.get(alias);\n    if (aliasInflight && !this.inflight.has(resolved)) {\n      this.inflight.set(resolved, aliasInflight);\n    }\n    this.inflight.delete(alias);\n    this.aliases.set(alias, resolved);\n    this.emit(alias);\n    this.emit(resolved, this.invalidatedAt.has(resolved) ? \"invalidate\" : undefined);\n  }\n\n  subscribe(key: string, listener: FarmClientCacheListener): () => void {\n    let listeners = this.listeners.get(key);\n    if (!listeners) {\n      listeners = new Set();\n      this.listeners.set(key, listeners);\n    }\n\n    listeners.add(listener);\n    return () => {\n      listeners!.delete(listener);\n      // Only drop the map entry if it still holds this exact set. A repeated or\n      // stale unsubscribe (called after the key was drained and resubscribed)\n      // must not evict a newer subscriber's live listener set.\n      if (listeners!.size === 0 && this.listeners.get(key) === listeners) {\n        this.listeners.delete(key);\n      }\n    };\n  }\n\n  getInflight<TData>(key: string): Promise<TData> | undefined {\n    return this.inflight.get(this.resolveKey(key)) as Promise<TData> | undefined;\n  }\n\n  setInflight<TData>(key: string, promise: Promise<TData>): void {\n    this.inflight.set(this.resolveKey(key), promise);\n  }\n\n  deleteInflight(key: string): void {\n    this.inflight.delete(this.resolveKey(key));\n  }\n\n  private scheduleGcSweep(): void {\n    if (this.gcSweepIntervalMs === false || this.gcTimer !== undefined) return;\n    const timer = setTimeout(() => {\n      this.gcTimer = undefined;\n      this.sweepExpiredEntries();\n    }, this.gcSweepIntervalMs);\n    // Cache cleanup must never keep a Node.js process (SSR, tests) alive.\n    (timer as unknown as { unref?: () => void }).unref?.();\n    this.gcTimer = timer;\n  }\n\n  private sweepExpiredEntries(now = Date.now()): void {\n    const watched = new Set<string>();\n    for (const key of this.listeners.keys()) watched.add(this.resolveKey(key));\n\n    let remaining = false;\n    const swept = new Set<string>();\n    for (const [key, entry] of this.entries) {\n      if (entry.gcAt === undefined) continue;\n      if (now < entry.gcAt || entry.fetching || this.inflight.has(key) || watched.has(key)) {\n        remaining = true;\n        continue;\n      }\n      // Only unwatched entries are swept, so eviction is unobservable: a read\n      // of this key would already evict it lazily before returning data.\n      this.entries.delete(key);\n      this.persistence?.onDelete(key);\n      swept.add(key);\n    }\n\n    if (swept.size > 0) this.sweepEntryMetadata(swept);\n    if (remaining) this.scheduleGcSweep();\n  }\n\n  /**\n   * Entry eviction alone leaves the per-key metadata behind. `invalidatedAt`\n   * marks and provisional aliases are created per query invocation, so with\n   * dynamic keys they accumulate for the lifetime of the page even though the\n   * entries they describe are long gone.\n   */\n  private sweepEntryMetadata(swept: Set<string>): void {\n    for (const key of swept) this.invalidatedAt.delete(key);\n\n    for (const [alias, target] of this.aliases) {\n      // Keep any alias that is still addressable: one that has its own entry,\n      // that something is subscribed to, or whose target is still live.\n      if (this.entries.has(alias) || this.listeners.has(alias)) continue;\n      const resolved = this.resolveKey(target);\n      if (!swept.has(resolved)) continue;\n      if (this.entries.has(resolved) || this.listeners.has(resolved)) continue;\n      this.aliases.delete(alias);\n      this.invalidatedAt.delete(alias);\n    }\n  }\n\n  private emit(key: string, event?: \"invalidate\"): void {\n    this.notifyListeners(key, event);\n    for (const [alias, target] of this.aliases) {\n      if (this.resolveKey(target) === key) {\n        this.notifyListeners(alias, event);\n      }\n    }\n  }\n\n  private notifyListeners(key: string, event?: \"invalidate\"): void {\n    for (const listener of this.listeners.get(key) ?? []) {\n      // One subscriber must not be able to break the others, or to make an\n      // ordinary cache write or invalidation throw in its caller. This matches\n      // the isolation the global invalidation bus already provides.\n      try {\n        listener(event);\n      } catch (error) {\n        const detail = error instanceof Error ? (error.stack ?? error.message) : String(error);\n        console.warn(`[farm:client-cache] cache listener failed: ${detail}`);\n      }\n    }\n  }\n}\n\nconst FARM_CLIENT_DATA_CACHE = Symbol.for(\"farm.clientDataCache\");\nconst clientCacheGlobal = globalThis as typeof globalThis & {\n  [FARM_CLIENT_DATA_CACHE]?: FarmClientDataCache;\n};\nconst sharedFarmClientDataCache = (clientCacheGlobal[FARM_CLIENT_DATA_CACHE] ??=\n  new FarmClientDataCache());\n\nexport function getFarmClientDataCache(): FarmClientDataCache {\n  return sharedFarmClientDataCache;\n}\n\nexport function normalizeFarmClientCacheKey(key: FarmClientCacheKey): string {\n  return typeof key === \"string\" ? key : createRouteDataCacheKey(key);\n}\n","import {\n  integrationsClient,\n  integrationsServer,\n  type IntegrationClientOptions,\n  type IntegrationClientRoot,\n  type IntegrationServerClientOptions,\n  type IntegrationServerClientRoot,\n} from \"../integration-client\";\nimport {\n  FarmClientDataCache,\n  getFarmClientDataCache,\n  normalizeFarmClientCacheKey,\n  type FarmClientCacheEntry,\n  type FarmClientCacheKey,\n} from \"../client-cache\";\nimport {\n  applyFarmCacheInvalidations,\n  decodeFarmCacheInvalidations,\n  FARM_CACHE_INVALIDATION_HEADER,\n} from \"../cache-invalidation\";\nimport type { DefinedCacheKey, InferCacheKeyData, RouteDataCacheKey } from \"../cache\";\nimport { getFarmAPIBaseURL, resolveFarmAPIRequestURL } from \"./config\";\nimport { ClientRouteManifest, type APIRouteManifest, type BoundRouteParams } from \"./client-routes\";\nimport type { RoutePathParams } from \"./route\";\nimport { _resolveCurrentRequest } from \"../server/request-bridge\";\nimport { resolveClientHeaders, type ClientHeaders } from \"../client-headers\";\nimport { createClientCancellation } from \"../client-cancellation\";\nimport { notifyClientObserver, type ClientLifecycleHooks } from \"../client-observers\";\nimport { resolveAPIRequestRuntime, type APIRequestRuntime } from \"./server-client-bridge\";\nexport type { APIRouteManifest } from \"./client-routes\";\nimport {\n  isFarmAPIStream,\n  isJSONStreamResponse,\n  readJSONStream,\n  type FarmAPIStream,\n} from \"./transport\";\n\nexport const FARM_API_ROUTE_REF_SYMBOL: unique symbol = Symbol.for(\"farm.api.route-ref\") as any;\nexport const FARM_API_ROUTE_META_SYMBOL: unique symbol = Symbol.for(\"farm.api.route-meta\") as any;\n\nexport type APIRouteRefMetadata = {\n  path: string;\n  method: string;\n  baseURL: string;\n  sameOrigin: boolean;\n};\n\nexport type APIClientOptions = ClientLifecycleHooks & {\n  /** Generated path/method metadata required for dynamic shorthand and $params scopes. */\n  routes?: APIRouteManifest;\n  baseURL?: string;\n  headers?: ClientHeaders;\n  credentials?: RequestCredentials;\n  /** Whole-call deadline in milliseconds. 0 (default) disables it. */\n  timeoutMs?: number;\n  /** HTTP transport only; local server dispatch does not use it. */\n  fetch?: typeof globalThis.fetch;\n  cacheDefaults?: CacheOptions;\n  integrations?: IntegrationClientOptions;\n};\n\nexport type APIClientWithoutIntegrationsOptions = Omit<APIClientOptions, \"integrations\"> & {\n  integrations: false;\n};\n\nexport type ServerAPIClientOptions = {\n  integrations?: Omit<IntegrationServerClientOptions, \"isServer\">;\n};\n\nexport type ServerAPIClientWithoutIntegrationsOptions = Omit<\n  ServerAPIClientOptions,\n  \"integrations\"\n> & {\n  integrations: false;\n};\n\nexport type StatusPhase = \"idle\" | \"pending\" | \"success\" | \"error\" | \"revalidating\" | \"invalidated\";\n\nexport type StatusEvent<TData = unknown, TError = unknown> = {\n  phase: StatusPhase;\n  requestId: string;\n  method: \"GET\" | \"HEAD\" | \"QUERY\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"OPTIONS\";\n  key: string;\n  input?: unknown;\n  data?: TData;\n  error?: TError;\n  isBackground?: boolean;\n  timestamp: number;\n};\n\nexport type CacheKey<TData = unknown> = string & {\n  readonly __farmCacheData?: TData;\n};\n\nexport type APIResult<TData = unknown, TError = Error> = {\n  data: TData | undefined;\n  error: TError | null;\n  key: CacheKey<TData>;\n};\n\nexport class APIClientError<\n  TCode extends string = string,\n  TData = unknown,\n  TStatus extends number = number,\n> extends Error {\n  readonly code: TCode;\n  readonly data: TData;\n  readonly status: TStatus;\n  readonly response?: Response;\n\n  constructor(\n    code: TCode,\n    data: TData,\n    options: {\n      status: TStatus;\n      message: string;\n      response?: Response;\n    },\n  ) {\n    super(options.message);\n    this.name = \"APIClientError\";\n    this.code = code;\n    this.data = data;\n    this.status = options.status;\n    this.response = options.response;\n  }\n}\n\nexport type APIClientSystemError =\n  | APIClientError<\"http_error\", unknown, number>\n  | APIClientError<\"aborted\" | \"timeout\", unknown, 0>\n  | APIClientError<\"network_error\", unknown, 0>;\n\nexport type RequestEvent = {\n  requestId: string;\n  method: StatusEvent[\"method\"];\n  key: string;\n  path: string;\n  input?: unknown;\n  attempt: number;\n  timestamp: number;\n};\n\nexport type ResponseEvent<TData = unknown, TError = Error> = {\n  requestId: string;\n  method: StatusEvent[\"method\"];\n  key: string;\n  path: string;\n  input?: unknown;\n  attempt: number;\n  timestamp: number;\n  response?: Response;\n  data?: TData;\n  error?: TError;\n  ok?: boolean;\n  status?: number;\n};\n\nexport type CachePolicy = \"cache-first\" | \"network-only\" | \"stale-while-revalidate\";\nexport type CacheScope = \"client\" | \"shared\";\n\nexport type CacheOptions = {\n  key?: FarmClientCacheKey;\n  policy?: CachePolicy;\n  /** Select client-local or public shared storage. Identity-carrying requests always stay local. */\n  scope?: CacheScope;\n  staleTime?: number;\n  gcTime?: number;\n  dedupeMs?: number;\n  /** Allow the configured client cache persistence adapter to store this read. */\n  persist?: boolean;\n};\n\nexport type RetryAttemptContext = {\n  /** Zero-based index of the attempt that just failed. */\n  attempt: number;\n  /** Upper-case HTTP method of the request. */\n  method: string;\n  /** Response status, or undefined when the request never produced a response. */\n  status?: number;\n  error: Error;\n};\n\nexport type RetryOptions = {\n  count?: number;\n  delay?: number | ((attempt: number) => number);\n  /**\n   * Decide whether a failed attempt should be retried.\n   *\n   * Defaults to transient failures of idempotent requests only: replaying a\n   * POST or PATCH whose response was lost duplicates the write it performed.\n   * Supply this to opt a specific call in or out.\n   */\n  shouldRetry?: (context: RetryAttemptContext) => boolean;\n};\n\n/**\n * Methods whose replay has the same effect as a single call, so a retry cannot\n * duplicate work: the idempotent set from RFC 9110, plus QUERY, which Farm\n * supports as a read that carries a body.\n */\nconst FARM_IDEMPOTENT_METHODS = new Set([\"GET\", \"HEAD\", \"OPTIONS\", \"PUT\", \"DELETE\", \"QUERY\"]);\n\n/** Statuses that represent a transient condition worth another attempt. */\nconst FARM_RETRYABLE_STATUSES = new Set([408, 425, 429]);\n\nfunction isFarmRetryableFailure(context: RetryAttemptContext): boolean {\n  // A non-idempotent request may already have been applied by the server even\n  // when the client never saw the response, so it is never retried by default.\n  if (!FARM_IDEMPOTENT_METHODS.has(context.method)) return false;\n  // No response at all: a transport failure, which is the transient case retries\n  // exist for.\n  if (context.status === undefined) return true;\n  return context.status >= 500 || FARM_RETRYABLE_STATUSES.has(context.status);\n}\n\nexport type InvalidateTarget =\n  | FarmClientCacheKey\n  | {\n      key: FarmClientCacheKey;\n    }\n  | {\n      path: string;\n      method?: \"GET\" | \"HEAD\" | \"QUERY\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\" | \"OPTIONS\";\n      input?: unknown;\n    }\n  | [CallableRouteRef<any>, unknown?];\n\nexport type InvalidateOptions =\n  | InvalidateTarget[]\n  | {\n      targets: InvalidateTarget[];\n      refetch?: boolean;\n    };\n\nexport type OptimisticUpdate =\n  | [CallableRouteRef<any>, unknown, (prev: any) => any]\n  | [CacheKey<any> | DefinedCacheKey<any> | string, (prev: any) => any];\n\nexport type OptimisticOptions<TUpdates extends readonly unknown[] = readonly OptimisticUpdate[]> = {\n  update: TUpdates & NormalizeOptimisticUpdates<TUpdates>;\n  rollbackOnError?: boolean;\n};\n\nexport type ClientOptions<\n  TData = unknown,\n  TError = unknown,\n  TUpdates extends readonly unknown[] = readonly OptimisticUpdate[],\n> = {\n  key?: CacheKey<TData> | FarmClientCacheKey;\n  signal?: AbortSignal;\n  /** Override the instance deadline; 0 disables it for this call. */\n  timeoutMs?: number;\n  cache?: CacheOptions;\n  retry?: RetryOptions;\n  invalidate?: InvalidateOptions;\n  optimistic?: OptimisticOptions<TUpdates>;\n  onRequest?: (event: RequestEvent) => void;\n  onResponse?: (\n    data: TData | undefined,\n    error: TError | null,\n    event: ResponseEvent<TData, TError>,\n  ) => void;\n  onSuccess?: (data: TData) => void;\n  onError?: (err: TError) => void;\n  onSettled?: (data?: TData, err?: TError | null) => void;\n  onStatus?: (event: StatusEvent<TData, TError>) => void;\n};\n\ntype AnyRouteRef = (...args: any[]) => any;\ntype RouteRef<TData = any, TInput = any> = {\n  readonly __farmRouteInput: TInput;\n  readonly __farmRouteData: TData;\n};\ntype CallableRouteRef<TData = any, TInput = any> = AnyRouteRef & RouteRef<TData, TInput>;\n\ntype InferRouteInput<TRoute> = TRoute extends { readonly __farmRouteInput: infer TInput }\n  ? TInput\n  : never;\ntype InferRouteData<TRoute> = TRoute extends { readonly __farmRouteData: infer TData }\n  ? TData\n  : never;\n\ntype NormalizeOptimisticUpdate<TUpdate> = TUpdate extends readonly [\n  infer TRoute,\n  unknown,\n  (prev: any) => any,\n]\n  ? TRoute extends RouteRef<any, any>\n    ? [\n        TRoute,\n        InferRouteInput<TRoute> | undefined,\n        (prev: InferRouteData<TRoute> | undefined) => InferRouteData<TRoute>,\n      ]\n    : never\n  : TUpdate extends readonly [infer TKey, (prev: any) => any]\n    ? TKey extends DefinedCacheKey<any, RouteDataCacheKey>\n      ? [TKey, (prev: InferCacheKeyData<TKey> | undefined) => InferCacheKeyData<TKey>]\n      : TKey extends CacheKey<infer TData>\n        ? [TKey, (prev: TData | undefined) => TData]\n        : TKey extends string\n          ? [TKey, (prev: unknown) => unknown]\n          : never\n    : never;\n\ntype NormalizeOptimisticUpdates<TUpdates extends readonly unknown[]> = {\n  [K in keyof TUpdates]: NormalizeOptimisticUpdate<TUpdates[K]>;\n};\n\ntype TypedEndpointLike = {\n  __types: {\n    body: any;\n    query: any;\n    response: any;\n    errors?: any;\n  };\n};\n\ntype Simplify<T> = {\n  [K in keyof T]: T[K];\n} & {};\n\ntype IsNever<T> = [T] extends [never] ? true : false;\ntype IsAny<T> = 0 extends 1 & T ? true : false;\ntype RequiredKeys<T> = T extends object\n  ? {\n      [K in keyof T]-?: {} extends Pick<T, K> ? never : K;\n    }[keyof T]\n  : never;\n\ntype BodyInputProp<TValue> =\n  IsNever<TValue> extends true\n    ? {}\n    : IsAny<TValue> extends true\n      ? { body?: TValue }\n      : undefined extends TValue\n        ? { body?: TValue }\n        : { body: TValue };\n\ntype QueryInputProp<TValue> =\n  IsNever<TValue> extends true\n    ? {}\n    : IsAny<TValue> extends true\n      ? { query?: TValue }\n      : undefined extends TValue\n        ? { query?: TValue }\n        : RequiredKeys<TValue> extends never\n          ? { query?: TValue }\n          : { query: TValue };\n\ntype HasRequiredKeys<T> = RequiredKeys<T> extends never ? false : true;\n\n// Type utilities to extract endpoint input/output types from TypedEndpoint\ntype InferEndpointBody<T> = T extends {\n  __types: {\n    inputBody: infer TInputBody;\n  };\n}\n  ? TInputBody\n  : T extends {\n        __types: {\n          body: infer TBody;\n        };\n      }\n    ? TBody\n    : never;\n\ntype InferEndpointInput<T> = T extends {\n  __types: {\n    query: infer TQuery;\n  };\n}\n  ? Simplify<\n      BodyInputProp<InferEndpointBody<T>> &\n        QueryInputProp<T extends { __types: { inputQuery: infer I } } ? I : TQuery> &\n        (T extends { __routeParams: infer P }\n          ? keyof P extends never\n            ? { params?: never }\n            : { params: P }\n          : {}) &\n        (T extends { __types: { inputHeaders: infer H } }\n          ? IsNever<H> extends true\n            ? {}\n            : RequiredKeys<H> extends never\n              ? { headers?: H }\n              : { headers: H }\n          : {})\n    >\n  : T extends { __routeParams: infer P }\n    ? keyof P extends never\n      ? { params?: never }\n      : { params: P }\n    : {};\n\ntype InferEndpointOutput<T> = T extends {\n  __types: {\n    response: infer R;\n  };\n}\n  ? R extends { readonly __farmStreamItem: infer TItem }\n    ? FarmAPIStream<TItem>\n    : R\n  : any;\n\ntype InferEndpointError<T> = T extends {\n  __types: {\n    errors: infer TErrors;\n  };\n}\n  ? keyof TErrors extends never\n    ? Error\n    :\n        | {\n            [TCode in keyof TErrors]: TErrors[TCode] extends {\n              data: infer TData;\n              status: infer TStatus extends number;\n            }\n              ? APIClientError<TCode & string, TData, TStatus>\n              : never;\n          }[keyof TErrors]\n        | APIClientSystemError\n  : Error;\n\n// Type for a single endpoint method\ntype EndpointCall<T = any> = <TUpdates extends readonly unknown[] = readonly OptimisticUpdate[]>(\n  ...args: HasRequiredKeys<InferEndpointInput<T>> extends true\n    ? [\n        options: InferEndpointInput<T>,\n        clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>,\n      ]\n    : [\n        options?: InferEndpointInput<T>,\n        clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>,\n      ]\n) => Promise<APIResult<InferEndpointOutput<T>, InferEndpointError<T>>>;\ntype EndpointMethod<T = any> = EndpointCall<T> &\n  RouteRef<InferEndpointOutput<T>, InferEndpointInput<T>>;\n\ntype DynamicKeys<T> = Extract<keyof T, `[${string}]`>;\ntype MethodKeys = \"get\" | \"head\" | \"query\" | \"post\" | \"put\" | \"patch\" | \"delete\" | \"options\";\ntype OwnMethodKeys<T> = {\n  [K in Extract<keyof T, MethodKeys>]: T[K] extends TypedEndpointLike | ((...args: any[]) => any)\n    ? K\n    : never;\n}[Extract<keyof T, MethodKeys>];\ntype WithRouteParams<T, P> = T & { __routeParams: P };\ntype UnionToIntersection<U> = (U extends unknown ? (v: U) => void : never) extends (\n  v: infer I,\n) => void\n  ? I\n  : never;\ntype ChildMethods<T> = { [K in DynamicKeys<T>]: OwnMethodKeys<T[K]> }[DynamicKeys<T>];\ntype MethodEndpoints<T, M extends PropertyKey, P> =\n  | (M extends OwnMethodKeys<T> ? WithRouteParams<T[M], P> : never)\n  | {\n      [K in DynamicKeys<T>]: M extends keyof T[K]\n        ? WithRouteParams<T[K][M], P & RoutePathParams<K>>\n        : never;\n    }[DynamicKeys<T>];\ntype DistributedCall<T> = T extends unknown ? EndpointCall<T> : never;\ntype ScopedMethod<T> = UnionToIntersection<DistributedCall<T>> &\n  EndpointCall<T> &\n  RouteRef<InferEndpointOutput<T>, InferEndpointInput<T>>;\n\n// Keep bracket access for compatibility; explicit binding preserves intermediate segments.\ntype RouterToClient<T, P = {}> = {\n  [K in Exclude<keyof T, OwnMethodKeys<T>>]: T[K] extends TypedEndpointLike\n    ? EndpointMethod<WithRouteParams<T[K], P>>\n    : T[K] extends Record<string, any>\n      ? RouterToClient<T[K], P & (K extends string ? RoutePathParams<K> : {})>\n      : EndpointMethod<WithRouteParams<T[K], P>>;\n} & {\n  [M in OwnMethodKeys<T> | ChildMethods<T>]: M extends ChildMethods<T>\n    ? ScopedMethod<MethodEndpoints<T, M, P>>\n    : M extends keyof T\n      ? EndpointMethod<WithRouteParams<T[M], P>>\n      : never;\n} & ([DynamicKeys<T>] extends [never]\n    ? {}\n    : {\n        $params: UnionToIntersection<\n          {\n            [K in DynamicKeys<T>]: (params: RoutePathParams<K>) => RouterToClient<T[K], P>;\n          }[DynamicKeys<T>]\n        >;\n      });\n\nexport type RouteAPIClient<TRouter extends Record<string, any>> = RouterToClient<TRouter>;\n\nexport type APIClient<\n  TRouter extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n> = RouteAPIClient<TRouter> & IntegrationClientRoot<TIntegrations>;\n\nexport type ServerAPIClient<\n  TEndpoints extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n> = TEndpoints & IntegrationServerClientRoot<TIntegrations>;\n\nexport type ApiClients<\n  TRouter extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n> = {\n  api: RouteAPIClient<TRouter> & IntegrationServerClientRoot<TIntegrations>;\n  apiClient: APIClient<TRouter, TIntegrations>;\n};\n\n/**\n * Define one shared pair of typed callers. Import only generated route metadata\n * here, not endpoint modules. `api` dispatches locally during a Farm request;\n * `apiClient` uses HTTP. Both return the same app-route APIResult shape.\n */\nexport function createApiClients<TRouter extends Record<string, any>>(\n  options: APIClientWithoutIntegrationsOptions,\n): { api: RouteAPIClient<TRouter>; apiClient: RouteAPIClient<TRouter> };\nexport function createApiClients<\n  TRouter extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n>(options?: APIClientOptions): ApiClients<TRouter, TIntegrations>;\nexport function createApiClients<\n  TRouter extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n>(\n  options: APIClientOptions | APIClientWithoutIntegrationsOptions = {},\n): ApiClients<TRouter, TIntegrations> {\n  // A module-level pair is safe across requests. No cache, credentials, or\n  // dispatcher from one request is retained by another request's caller.\n  const localScopes = new WeakMap<APIRequestRuntime, WeakMap<Request, { request: APICall }>>();\n  const routeMeta = new WeakMap<AnyRouteRef, RouteMeta>();\n  const api = createNestedProxy(\n    [],\n    async (path: string, method: string, input: any, clientOptions?: ClientOptions<any, any>) => {\n      if (typeof window !== \"undefined\") {\n        throw new Error(\n          \"api is server-only. Use apiClient from createApiClients() in the browser.\",\n        );\n      }\n      const currentRequest = _resolveCurrentRequest();\n      const runtime = resolveAPIRequestRuntime();\n      if (!currentRequest || !runtime) {\n        throw new Error(\n          \"api requires an active Farm server request. Call it from a server page, query, action, or API handler; use apiClient with an absolute baseURL for standalone HTTP calls.\",\n        );\n      }\n      let localClients = localScopes.get(runtime);\n      if (!localClients) {\n        localClients = new WeakMap();\n        localScopes.set(runtime, localClients);\n      }\n      let local = localClients.get(currentRequest);\n      if (!local) {\n        const origin = new URL(currentRequest.url).origin;\n        const headers = new Headers();\n        // Only identity/content negotiation headers are inherited. In\n        // particular, never copy the outer request's body or hop-by-hop fields.\n        for (const name of [\"cookie\", \"authorization\", \"accept-language\"]) {\n          const value = currentRequest.headers.get(name);\n          if (value !== null) headers.set(name, value);\n        }\n        local = createAPIClientRuntime(\n          {\n            ...options,\n            integrations: false,\n            baseURL: new URL(runtime.basePath, origin).toString(),\n          },\n          {\n            headers,\n            signal: currentRequest.signal,\n            cache: new FarmClientDataCache({ subscribeToInvalidation: false }),\n            routeMeta,\n            fetch: (url, init) => {\n              if (new URL(url).origin !== origin) {\n                throw new Error(\n                  \"api can only dispatch to this Farm app. Use apiClient for HTTP calls.\",\n                );\n              }\n              currentRequest.signal.throwIfAborted();\n              return runtime.dispatch(new Request(url, init));\n            },\n          },\n        );\n        localClients.set(currentRequest, local);\n      }\n      return local.request(path, method, input, clientOptions);\n    },\n    routeMeta,\n    \"/api\",\n    true,\n    options.integrations === false\n      ? undefined\n      : {\n          integrations: integrationsServer<TIntegrations>({\n            baseURL: options.baseURL,\n            headers: options.headers,\n            credentials: options.credentials,\n            timeoutMs: options.timeoutMs,\n            fetch: options.fetch,\n            onRequest: options.onRequest,\n            onResponse: options.onResponse,\n            onError: options.onError,\n            ...options.integrations,\n          }),\n        },\n    options.routes ? new ClientRouteManifest(options.routes) : undefined,\n  );\n  return {\n    api: api as ApiClients<TRouter, TIntegrations>[\"api\"],\n    apiClient: createAPIClient<TRouter, TIntegrations>(options as APIClientOptions),\n  };\n}\n\n/**\n * Create a typed RPC client for Farm.js API routes\n *\n * Returns a nested proxy that supports:\n * - api.hello.get({ query: { name: 'World' } })\n * - api['auth/login'].post({ body: { email: '...', password: '...' } })\n * - api.users.get({ query: { limit: '10' } })\n * - api.integrations.billing.checkout({ body: { priceId: 'price_...' } })\n *\n * @example\n * ```typescript\n * import { createAPIClient } from 'farm/client';\n * import type { APIRouter } from '@/api';\n * import type { AppIntegrations } from '@/lib/integrations';\n *\n * export const api = createAPIClient<APIRouter, AppIntegrations>();\n *\n * // Use it (nested property access)\n * const result = await api.hello.get({ query: { name: 'World' } });\n * if (result.error) console.error(result.error);\n * else console.log(result.data);\n *\n * // Or with string keys for nested paths\n * const result = await api['auth/login'].post({\n *   body: { email: 'test@example.com', password: 'pass123' }\n * });\n *\n * // Integration APIs live under a reserved namespace.\n * const checkout = await api.integrations.billing.checkout({\n *   body: { priceId: 'price_123' }\n * });\n * ```\n */\nexport function createAPIClient<TRouter extends Record<string, any>>(\n  options: APIClientWithoutIntegrationsOptions,\n): RouteAPIClient<TRouter>;\nexport function createAPIClient<\n  TRouter extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n>(options?: APIClientOptions): APIClient<TRouter, TIntegrations>;\nexport function createAPIClient<\n  TRouter extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n>(\n  options: APIClientOptions | APIClientWithoutIntegrationsOptions = {},\n): RouteAPIClient<TRouter> | APIClient<TRouter, TIntegrations> {\n  return createAPIClientRuntime<TRouter, TIntegrations>(options).client;\n}\n\ntype APICall = (\n  path: string,\n  method: string,\n  input?: any,\n  options?: ClientOptions<any, any>,\n) => Promise<APIResult<any, Error>>;\n\nfunction createAPIClientRuntime<\n  TRouter extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n>(\n  options: APIClientOptions | APIClientWithoutIntegrationsOptions = {},\n  transport?: {\n    headers?: HeadersInit;\n    signal?: AbortSignal;\n    fetch(url: string, init: RequestInit): Promise<Response>;\n    cache: FarmClientDataCache;\n    routeMeta: WeakMap<AnyRouteRef, RouteMeta>;\n  },\n): { client: APIClient<TRouter, TIntegrations>; request: APICall } {\n  options ??= {};\n  const baseURL = options.baseURL || getFarmAPIBaseURL();\n  const httpFetch = options.fetch;\n  const integrationOptions =\n    options.integrations === false\n      ? false\n      : {\n          baseURL: options.baseURL,\n          headers: options.headers,\n          credentials: options.credentials,\n          timeoutMs: options.timeoutMs,\n          fetch: httpFetch,\n          onRequest: options.onRequest,\n          onResponse: options.onResponse,\n          onError: options.onError,\n          ...(typeof options.integrations === \"object\" ? options.integrations : {}),\n        };\n  const rootAliases =\n    integrationOptions === false\n      ? undefined\n      : {\n          integrations: integrationsClient<TIntegrations>(integrationOptions),\n        };\n\n  const sharedCacheState = transport?.cache ?? getFarmClientDataCache();\n  const localCaches = transport ? new Set([sharedCacheState]) : undefined;\n  const sharedInflightState = new Map<string, InflightEntry>();\n  let scopedRequestState: ScopedRequestState | undefined;\n  const routeMeta = transport?.routeMeta ?? new WeakMap<AnyRouteRef, RouteMeta>();\n  let requestCounter = 0;\n\n  // Create a simple fetch-based client (browser compatible)\n  const fetchClient = async (\n    path: string,\n    requestOptions: any,\n    defaultHeaders: Headers,\n    cancellation: ReturnType<typeof createClientCancellation>,\n  ) => {\n    const url = resolveFarmAPIRequestURL(path, baseURL);\n    const method = String(requestOptions.method || \"GET\").toUpperCase();\n\n    // Handle query parameters\n    if (requestOptions.query) {\n      Object.entries(requestOptions.query).forEach(([key, value]) => {\n        if (value === undefined || value === null) return;\n        url.searchParams.delete(key);\n        const values = Array.isArray(value) ? value : [value];\n        for (const item of values) {\n          if (item !== undefined && item !== null) url.searchParams.append(key, String(item));\n        }\n      });\n    }\n\n    // Prepare fetch options\n    const headers = new Headers(defaultHeaders);\n    new Headers(requestOptions.headers).forEach((value, key) => headers.set(key, value));\n    const fetchOptions: RequestInit = {\n      method,\n      headers,\n      credentials: options.credentials,\n      signal: cancellation.signal,\n    };\n    if (method === \"QUERY\" && !headers.has(\"content-type\")) {\n      headers.set(\"content-type\", \"application/json\");\n    }\n\n    // Handle body\n    if (requestOptions.body !== undefined) {\n      if (isFormData(requestOptions.body)) {\n        headers.delete(\"content-type\");\n        fetchOptions.body = requestOptions.body;\n      } else {\n        if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n        fetchOptions.body = JSON.stringify(requestOptions.body);\n      }\n    }\n\n    cancellation.check();\n    const response = await (transport?.fetch ?? httpFetch ?? fetch)(url.toString(), fetchOptions);\n    cancellation.check();\n    const invalidations = decodeFarmCacheInvalidations(\n      response.headers?.get?.(FARM_CACHE_INVALIDATION_HEADER),\n    );\n    if (transport) {\n      for (const cache of localCaches!) {\n        for (const key of invalidations) cache.invalidate(key);\n      }\n    } else {\n      applyFarmCacheInvalidations(invalidations);\n    }\n    let data: unknown;\n    try {\n      data = await readAPIResponseData(response, method);\n      cancellation.check();\n    } catch (decodeError) {\n      if (!(decodeError instanceof APIResponseDecodeError)) throw decodeError;\n      if (response.ok) throw decodeError.cause;\n      return { response, data: undefined, decodeError: decodeError.cause };\n    }\n\n    return { response, data };\n  };\n\n  const request = async (\n    path: string,\n    method: string,\n    input: any = {},\n    clientOptions?: ClientOptions<any, any>,\n  ): Promise<APIResult<any, Error>> => {\n    const cancellation = createClientCancellation(\n      clientOptions?.signal,\n      clientOptions?.timeoutMs ?? options.timeoutMs,\n      transport?.signal,\n    );\n    const normalizeCallError = (error: unknown): Error => {\n      if (!cancellation.signal?.aborted) return normalizeError(error);\n      const normalized = new APIClientError(\n        cancellation.timedOut ? \"timeout\" : \"aborted\",\n        undefined,\n        {\n          status: 0,\n          message: cancellation.timedOut ? \"Client request timed out\" : \"Client request aborted\",\n        },\n      );\n      (normalized as Error & { cause?: unknown }).cause = cancellation.signal.reason;\n      return normalized;\n    };\n    try {\n      const methodUpper = method.toUpperCase() as StatusEvent[\"method\"];\n      const requestId = `${Date.now()}-${++requestCounter}`;\n      const defaultHeaders = new Headers(transport?.headers);\n      let requestContextError: Error | undefined;\n      try {\n        cancellation.check();\n        const resolved = resolveClientHeaders(options.headers);\n        const headers =\n          resolved instanceof Headers ? resolved : await cancellation.run(() => resolved);\n        cancellation.check();\n        headers.forEach((value, name) => defaultHeaders.set(name, value));\n      } catch (error) {\n        requestContextError = normalizeCallError(error);\n      }\n      const cacheOptions = clientOptions?.cache\n        ? {\n            ...options.cacheDefaults,\n            ...clientOptions.cache,\n          }\n        : undefined;\n      const configuredCacheKey = clientOptions?.key ?? cacheOptions?.key;\n      const cacheKey = normalizeFarmClientCacheKey(\n        configuredCacheKey ?? buildCacheKey(methodUpper, path, input, baseURL, defaultHeaders),\n      ) as CacheKey<any>;\n      const now = Date.now();\n\n      const emitStatus = (phase: StatusPhase, payload?: Partial<StatusEvent>) => {\n        clientOptions?.onStatus?.({\n          phase,\n          requestId,\n          method: methodUpper,\n          key: cacheKey,\n          input,\n          timestamp: Date.now(),\n          ...payload,\n        });\n      };\n\n      const policy = cacheOptions?.policy ?? (cacheOptions ? \"cache-first\" : \"network-only\");\n      const staleTime = cacheOptions?.staleTime ?? 0;\n      const hasReliableDefaultCacheKey =\n        methodUpper !== \"QUERY\" || !isFormData(input?.body) || configuredCacheKey !== undefined;\n      const isCacheEnabled =\n        Boolean(cacheOptions) &&\n        (methodUpper === \"GET\" || methodUpper === \"QUERY\") &&\n        hasReliableDefaultCacheKey;\n      const needsCacheState =\n        isCacheEnabled ||\n        Boolean(clientOptions?.optimistic?.update?.length) ||\n        Boolean(clientOptions?.invalidate);\n      let requestCacheContext: string | undefined = undefined;\n      if (needsCacheState && !requestContextError) {\n        try {\n          requestCacheContext = getRequestCacheContext(\n            { headers: defaultHeaders, credentials: options.credentials },\n            input,\n            // Custom transports can inject an identity outside visible headers.\n            // Never share their cached data with other client instances.\n            httpFetch ? \"client\" : cacheOptions?.scope,\n          );\n        } catch (error) {\n          requestContextError = normalizeError(error);\n        }\n      }\n\n      let cacheState = sharedCacheState;\n      let inflightState = sharedInflightState;\n      let requestScopedState: ScopedRequestState | undefined;\n      if (requestCacheContext !== undefined) {\n        if (scopedRequestState && scopedRequestState.context !== requestCacheContext) {\n          scopedRequestState.retired = true;\n          if (scopedRequestState.inflight.size === 0) scopedRequestState.cache.dispose();\n          scopedRequestState = undefined;\n        }\n        scopedRequestState ??= {\n          context: requestCacheContext,\n          cache: new FarmClientDataCache({ subscribeToInvalidation: !transport }),\n          inflight: new Map(),\n          retired: false,\n        };\n        requestScopedState = scopedRequestState;\n        cacheState = requestScopedState.cache;\n        localCaches?.add(cacheState);\n        inflightState = requestScopedState.inflight;\n      }\n      const optimisticState = getOptimisticState(cacheState);\n\n      const entry = getValidCacheEntry(cacheState, cacheKey, now);\n      const isStale = entry ? isEntryStale(entry, now) : true;\n\n      const applyOptimisticUpdates = () => {\n        if (!clientOptions?.optimistic?.update?.length) return [] as OptimisticSnapshot[];\n\n        const snapshots = new Map<string, OptimisticSnapshot>();\n        for (const update of clientOptions.optimistic.update) {\n          const [target, targetInput, updater] =\n            update.length === 2\n              ? [update[0], undefined, update[1]]\n              : [update[0], update[1], update[2]];\n          const targetKey = resolveTargetKey(\n            routeMeta,\n            target,\n            targetInput,\n            baseURL,\n            defaultHeaders,\n            transport ? baseURL : undefined,\n          );\n          if (!targetKey) continue;\n\n          const targetEntry = getValidCacheEntry(cacheState, targetKey, now);\n          const currentEntry = cacheState.get(targetKey);\n          let stack = optimisticState.get(targetKey);\n          if (stack && !reconcileOptimisticInvalidation(cacheState, targetKey, stack)) {\n            stack = undefined;\n          }\n          if (!stack) {\n            stack = {\n              entry: targetEntry ? { ...targetEntry } : undefined,\n              layers: [],\n              renderedEntry: currentEntry,\n            };\n            optimisticState.set(targetKey, stack);\n          }\n\n          let snapshot = snapshots.get(targetKey);\n          if (!snapshot) {\n            const previousEntry = stack.layers.length === 0 ? stack.entry : stack.renderedEntry;\n            const layer: OptimisticLayer = {\n              updaters: [],\n              updatedAt: now,\n              staleAt:\n                targetEntry?.staleAt ??\n                now + (cacheOptions?.staleTime ?? options.cacheDefaults?.staleTime ?? 0),\n              gcAt:\n                targetEntry?.gcAt ??\n                getGcAt(now, cacheOptions?.gcTime ?? options.cacheDefaults?.gcTime),\n            };\n            stack.layers.push(layer);\n            snapshot = {\n              key: targetKey,\n              stack,\n              layer,\n            };\n            snapshots.set(targetKey, snapshot);\n            snapshot.layer.updaters.push(updater);\n            const nextEntry = applyOptimisticLayer(previousEntry, {\n              ...snapshot.layer,\n              updaters: [updater],\n            });\n            storeOptimisticEntry(cacheState, targetKey, stack, nextEntry);\n            continue;\n          }\n          snapshot.layer.updaters.push(updater);\n          const nextEntry = applyOptimisticLayer(stack.renderedEntry, {\n            ...snapshot.layer,\n            updaters: [updater],\n          });\n          storeOptimisticEntry(cacheState, targetKey, stack, nextEntry);\n        }\n\n        return Array.from(snapshots.values());\n      };\n\n      const rollbackOptimisticUpdates = (snapshots: OptimisticSnapshot[]) => {\n        if (!clientOptions?.optimistic?.rollbackOnError) return;\n        settleOptimisticUpdates(cacheState, optimisticState, snapshots, \"rollback\");\n      };\n\n      const invalidateUncommittedOptimisticUpdates = (snapshots: OptimisticSnapshot[]) => {\n        if (clientOptions?.optimistic?.rollbackOnError) return;\n        for (const key of settleOptimisticUpdates(\n          cacheState,\n          optimisticState,\n          snapshots,\n          \"invalidate\",\n        )) {\n          emitStatus(\"invalidated\", { key });\n        }\n      };\n\n      const executeNetwork = async (opts?: { isBackground?: boolean; callCallbacks?: boolean }) => {\n        const release = cancellation.hold();\n        let unsubscribeInvalidation: (() => void) | undefined;\n        let readOwners: Map<string, object> | undefined;\n        let readOwner: object | undefined;\n        const resolvedCacheKey = cacheState.resolveKey(cacheKey);\n        try {\n          const dedupeMs = cacheOptions?.dedupeMs ?? 0;\n          const inflight = inflightState.get(cacheKey);\n          const allowDedupe =\n            isCacheEnabled && dedupeMs > 0 && !cancellation.signal && !requestContextError;\n\n          if (\n            allowDedupe &&\n            inflight &&\n            !inflight.cancellable &&\n            now - inflight.startedAt < dedupeMs\n          ) {\n            emitStatus(\"pending\", { isBackground: opts?.isBackground, data: entry?.data });\n            const result = await inflight.promise;\n\n            if (result.error) {\n              emitStatus(\"error\", { error: result.error, isBackground: opts?.isBackground });\n              notifyClientObserver(options.onError, [result.error]);\n              if (opts?.callCallbacks !== false) {\n                clientOptions?.onError?.(result.error);\n              }\n            } else {\n              emitStatus(\"success\", { data: result.data, isBackground: opts?.isBackground });\n              if (opts?.callCallbacks !== false) {\n                clientOptions?.onSuccess?.(result.data as any);\n              }\n            }\n\n            return result;\n          }\n\n          // Observe ordering, not wall-clock timestamps: invalidation can happen in the\n          // same millisecond, or be cleared by another client's newer cache write.\n          let invalidatedDuringRequest = false;\n          if (isCacheEnabled) {\n            // Transport deduplication is caller-local, but cache ownership must\n            // span every caller writing to the same cache instance.\n            readOwners = getCacheReadOwners(cacheState);\n            readOwner = {};\n            readOwners.set(resolvedCacheKey, readOwner);\n            unsubscribeInvalidation = cacheState.subscribe(cacheKey, (event) => {\n              if (event === \"invalidate\") invalidatedDuringRequest = true;\n            });\n          }\n          emitStatus(opts?.isBackground ? \"revalidating\" : \"pending\", {\n            isBackground: opts?.isBackground,\n          });\n\n          const promise = (async () => {\n            const maxRetries = Math.max(0, clientOptions?.retry?.count ?? 0);\n            const shouldRetryFailure = clientOptions?.retry?.shouldRetry ?? isFarmRetryableFailure;\n            let attempt = 0;\n\n            // eslint-disable-next-line no-constant-condition\n            while (true) {\n              if (options.onRequest || clientOptions?.onRequest) {\n                const requestEvent: RequestEvent = {\n                  requestId,\n                  method: methodUpper,\n                  key: cacheKey,\n                  path,\n                  input,\n                  attempt,\n                  timestamp: Date.now(),\n                };\n                notifyClientObserver(options.onRequest, [requestEvent]);\n                clientOptions?.onRequest?.(requestEvent);\n              }\n\n              try {\n                if (requestContextError) throw requestContextError;\n                const { response, data, decodeError } = await cancellation.run(() =>\n                  fetchClient(\n                    path,\n                    {\n                      ...input,\n                      method: methodUpper,\n                    },\n                    defaultHeaders,\n                    cancellation,\n                  ),\n                );\n\n                const error = response.ok ? null : createResponseError(response, data, decodeError);\n\n                const responseEvent: ResponseEvent<any, Error> = {\n                  requestId,\n                  method: methodUpper,\n                  key: cacheKey,\n                  path,\n                  input,\n                  attempt,\n                  timestamp: Date.now(),\n                  response,\n                  data: response.ok ? data : undefined,\n                  error: error ?? undefined,\n                  ok: response.ok,\n                  status: response.status,\n                };\n\n                notifyClientObserver(options.onResponse, [\n                  response.ok ? data : undefined,\n                  error,\n                  responseEvent,\n                ]);\n                notifyResponseObserver(\n                  clientOptions?.onResponse,\n                  response.ok ? data : undefined,\n                  error,\n                  responseEvent,\n                );\n\n                if (!error) {\n                  return { data, error: null, key: cacheKey } as APIResult<any, Error>;\n                }\n\n                if (\n                  attempt >= maxRetries ||\n                  !shouldRetryFailure({\n                    attempt,\n                    method: methodUpper,\n                    status: response.status,\n                    error,\n                  })\n                ) {\n                  return { data: undefined, error, key: cacheKey } as APIResult<any, Error>;\n                }\n              } catch (err: any) {\n                const error = normalizeCallError(err);\n                const responseEvent: ResponseEvent<any, Error> = {\n                  requestId,\n                  method: methodUpper,\n                  key: cacheKey,\n                  path,\n                  input,\n                  attempt,\n                  timestamp: Date.now(),\n                  error,\n                  ok: false,\n                };\n\n                notifyClientObserver(options.onResponse, [undefined, error, responseEvent]);\n                notifyResponseObserver(clientOptions?.onResponse, undefined, error, responseEvent);\n\n                if (\n                  attempt >= maxRetries ||\n                  requestContextError ||\n                  cancellation.signal?.aborted ||\n                  !shouldRetryFailure({ attempt, method: methodUpper, error })\n                ) {\n                  return { data: undefined, error, key: cacheKey } as APIResult<any, Error>;\n                }\n              }\n\n              attempt += 1;\n              const delay =\n                typeof clientOptions?.retry?.delay === \"function\"\n                  ? clientOptions.retry.delay(attempt)\n                  : (clientOptions?.retry?.delay ?? 0);\n\n              if (delay > 0) {\n                try {\n                  await cancellation.delay(delay);\n                } catch (error) {\n                  return { data: undefined, error: normalizeCallError(error), key: cacheKey };\n                }\n              }\n            }\n          })();\n\n          const inflightEntry = {\n            promise,\n            startedAt: now,\n            cancellable: !!cancellation.signal || !!requestContextError,\n          };\n          inflightState.set(cacheKey, inflightEntry);\n\n          try {\n            const result = await promise;\n\n            if (\n              inflightState.get(cacheKey) === inflightEntry &&\n              readOwners?.get(resolvedCacheKey) === readOwner &&\n              !invalidatedDuringRequest &&\n              !result.error &&\n              isCacheEnabled &&\n              !isFarmAPIStream(result.data)\n            ) {\n              const updatedAt = Date.now();\n              const cached: CacheEntry = {\n                data: result.data,\n                updatedAt,\n                staleAt: updatedAt + staleTime,\n                gcAt: getGcAt(updatedAt, cacheOptions?.gcTime),\n                invalidatedAt: undefined,\n                persist: cacheOptions?.persist === true ? true : undefined,\n                [API_CACHE_REFETCH]: createCacheRefetch(\n                  request,\n                  path,\n                  method,\n                  input,\n                  cacheKey,\n                  cacheOptions!,\n                  clientOptions,\n                  options.onError,\n                ),\n              };\n              cacheState.set(cacheKey, cached);\n            }\n\n            if (result.error) {\n              emitStatus(\"error\", { error: result.error, isBackground: opts?.isBackground });\n              notifyClientObserver(options.onError, [result.error]);\n              if (opts?.callCallbacks !== false) {\n                clientOptions?.onError?.(result.error);\n              }\n            } else {\n              emitStatus(\"success\", { data: result.data, isBackground: opts?.isBackground });\n              if (opts?.callCallbacks !== false) {\n                clientOptions?.onSuccess?.(result.data as any);\n              }\n            }\n\n            return result;\n          } finally {\n            if (inflightState.get(cacheKey) === inflightEntry) {\n              inflightState.delete(cacheKey);\n            }\n            if (requestContextError && requestScopedState) {\n              requestScopedState.retired = true;\n              if (scopedRequestState === requestScopedState) scopedRequestState = undefined;\n            }\n            if (requestScopedState?.retired && requestScopedState.inflight.size === 0) {\n              requestScopedState.cache.dispose();\n            }\n          }\n        } finally {\n          if (readOwner && readOwners?.get(resolvedCacheKey) === readOwner) {\n            readOwners.delete(resolvedCacheKey);\n          }\n          unsubscribeInvalidation?.();\n          release();\n        }\n      };\n\n      const invalidateTargets = async () => {\n        if (!clientOptions?.invalidate) return;\n\n        const invalidateOptions = Array.isArray(clientOptions.invalidate)\n          ? { targets: clientOptions.invalidate, refetch: false }\n          : {\n              targets: clientOptions.invalidate.targets,\n              refetch: clientOptions.invalidate.refetch ?? false,\n            };\n\n        const refetches = new Set<() => void>();\n        for (const target of invalidateOptions.targets) {\n          const targetKey = resolveTargetKey(\n            routeMeta,\n            target,\n            undefined,\n            baseURL,\n            defaultHeaders,\n            transport ? baseURL : undefined,\n          );\n          if (!targetKey) continue;\n\n          const existing = cacheState.get(targetKey);\n          const invalidatedAt = Date.now();\n          // The first read may still be in flight with no stored entry yet.\n          // Notify its invalidation listener before it can cache an old result.\n          cacheState.invalidate(targetKey, invalidatedAt);\n          if (existing) {\n            const stack = optimisticState.get(targetKey);\n            if (stack?.renderedEntry === existing) {\n              stack.invalidatedAt = invalidatedAt;\n              stack.renderedEntry = cacheState.get(targetKey);\n            }\n          }\n\n          emitStatus(\"invalidated\", { key: targetKey });\n\n          const refetch = (existing as CacheEntry | undefined)?.[API_CACHE_REFETCH];\n          if (invalidateOptions.refetch && refetch) {\n            refetches.add(refetch);\n          }\n        }\n        // Invalidate every alias before starting work; never replay this mutation.\n        for (const refetch of refetches) refetch();\n      };\n\n      const optimisticSnapshots = requestContextError ? [] : applyOptimisticUpdates();\n\n      if (isCacheEnabled && !requestContextError && !cancellation.signal?.aborted) {\n        if (entry && !isStale && policy !== \"network-only\") {\n          emitStatus(\"success\", { data: entry.data });\n          clientOptions?.onSuccess?.(entry.data);\n          clientOptions?.onSettled?.(entry.data, null);\n          return { data: entry.data, error: null, key: cacheKey };\n        }\n\n        if (entry && isStale && policy === \"stale-while-revalidate\") {\n          emitStatus(\"success\", { data: entry.data });\n          clientOptions?.onSuccess?.(entry.data);\n          clientOptions?.onSettled?.(entry.data, null);\n\n          void executeNetwork({ isBackground: true, callCallbacks: false });\n          return { data: entry.data, error: null, key: cacheKey };\n        }\n      }\n\n      const result = await executeNetwork();\n      if (result.error) {\n        if (cancellation.signal?.aborted) {\n          settleOptimisticUpdates(cacheState, optimisticState, optimisticSnapshots, \"rollback\");\n        } else {\n          rollbackOptimisticUpdates(optimisticSnapshots);\n          invalidateUncommittedOptimisticUpdates(optimisticSnapshots);\n        }\n      } else {\n        settleOptimisticUpdates(cacheState, optimisticState, optimisticSnapshots, \"commit\");\n        await invalidateTargets();\n      }\n      clientOptions?.onSettled?.(result.data, result.error);\n      return result;\n    } finally {\n      cancellation.dispose();\n    }\n  };\n\n  // Return nested proxy (starts with empty path, user adds to it)\n  const client = createNestedProxy(\n    [],\n    request,\n    routeMeta,\n    baseURL,\n    isSameOriginAPIBaseURL(baseURL),\n    rootAliases,\n    options.routes ? new ClientRouteManifest(options.routes) : undefined,\n  ) as APIClient<TRouter, TIntegrations>;\n  return { client, request };\n}\n\nasync function readAPIResponseData(response: Response, method: string): Promise<unknown> {\n  if (\n    method === \"HEAD\" ||\n    response.status === 204 ||\n    response.status === 205 ||\n    response.status === 304\n  ) {\n    return undefined;\n  }\n\n  // Keep lightweight fetch-compatible adapters working when they expose the\n  // traditional json() contract without a complete Web Response implementation.\n  if (!response.headers?.get && typeof response.json === \"function\") {\n    return readResponseJSON(response);\n  }\n\n  if (response.body === null) return undefined;\n\n  if (isJSONStreamResponse(response)) {\n    return readJSONStream(response);\n  }\n\n  const contentType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n  if (typeof response.arrayBuffer === \"function\") {\n    const data = await response.arrayBuffer();\n    if (data.byteLength === 0) return undefined;\n\n    if (!contentType || contentType === \"application/json\" || contentType.endsWith(\"+json\")) {\n      return parseResponseJSON(new TextDecoder().decode(data));\n    }\n\n    if (\n      contentType.startsWith(\"text/\") ||\n      contentType === \"application/xml\" ||\n      contentType === \"application/xhtml+xml\" ||\n      contentType === \"application/graphql\"\n    ) {\n      return new TextDecoder().decode(data);\n    }\n\n    return data;\n  }\n\n  if (\n    (!contentType || contentType === \"application/json\" || contentType.endsWith(\"+json\")) &&\n    typeof response.json === \"function\"\n  ) {\n    return readResponseJSON(response);\n  }\n\n  if (\n    (contentType?.startsWith(\"text/\") ||\n      contentType === \"application/xml\" ||\n      contentType === \"application/xhtml+xml\" ||\n      contentType === \"application/graphql\") &&\n    typeof response.text === \"function\"\n  ) {\n    return response.text();\n  }\n\n  // Some fetch-compatible adapters expose headers but still only implement\n  // the traditional json() reader.\n  if (typeof response.json === \"function\") {\n    return readResponseJSON(response);\n  }\n\n  return undefined;\n}\n\nclass APIResponseDecodeError extends Error {\n  readonly cause: unknown;\n\n  constructor(cause: unknown) {\n    super(cause instanceof Error ? cause.message : \"Failed to decode JSON response\");\n    this.name = \"APIResponseDecodeError\";\n    this.cause = cause;\n  }\n}\n\nfunction parseResponseJSON(value: string): unknown {\n  try {\n    return JSON.parse(value);\n  } catch (error) {\n    throw new APIResponseDecodeError(error);\n  }\n}\n\nasync function readResponseJSON(response: Pick<Response, \"json\">): Promise<unknown> {\n  try {\n    return await response.json();\n  } catch (error) {\n    if (error instanceof SyntaxError) throw new APIResponseDecodeError(error);\n    throw error;\n  }\n}\n\n/**\n * Create a nested proxy that builds up the path\n *\n * Flow:\n * 1. api.hello       -> Proxy(['hello'])\n * 2. api.hello.get   -> Proxy(['hello', 'get'])\n * 3. api.hello.get({ query: {...} })\n *    -> fetch('/api/hello', { method: 'GET', ... })\n *\n * For routes with single method:\n * 1. api.hello       -> Proxy(['hello'])\n * 2. api.hello({ query: {...} })\n *    -> fetch('/api/hello', ...)\n */\nfunction createNestedProxy(\n  path: string[],\n  client: any,\n  routeMeta: WeakMap<AnyRouteRef, RouteMeta>,\n  baseURL: string,\n  sameOrigin: boolean,\n  rootAliases?: Record<string, unknown>,\n  manifest?: ClientRouteManifest,\n  bound: BoundRouteParams = {},\n): any {\n  const target = () => {};\n  const proxy = new Proxy(target, {\n    // When accessing a property (api.hello)\n    get(_target, prop: string | symbol) {\n      if (prop === \"$params\") {\n        return (params: unknown) => {\n          if (!manifest)\n            throw new TypeError(\n              \"$params requires createAPIClient({ routes: apiRoutes }) from the generated API manifest.\",\n            );\n          const scope = manifest.bind(buildProxyRoutePath(path), params);\n          return createNestedProxy(\n            [...path, scope.segment],\n            client,\n            routeMeta,\n            baseURL,\n            sameOrigin,\n            rootAliases,\n            manifest,\n            Object.freeze({ ...bound, ...scope.params }),\n          );\n        };\n      }\n      if (prop === FARM_API_ROUTE_REF_SYMBOL) {\n        return path.length > 0;\n      }\n      if (prop === FARM_API_ROUTE_META_SYMBOL) {\n        let metadata;\n        try {\n          metadata = resolveRouteMeta({ path, baseURL, manifest, bound });\n        } catch {\n          return null;\n        } // An unbound/overloaded route has no single URL yet.\n        const requestURL = resolveFarmAPIRequestURL(metadata.routePath, baseURL);\n        return Object.freeze({\n          path: `${requestURL.pathname}${requestURL.search}${requestURL.hash}`,\n          method: metadata.method,\n          baseURL: requestURL.origin,\n          sameOrigin,\n        });\n      }\n\n      if (path.length === 0 && typeof prop === \"string\" && rootAliases && prop in rootAliases) {\n        return rootAliases[prop];\n      }\n\n      if (typeof prop !== \"string\") {\n        return Reflect.get(_target, prop);\n      }\n\n      // Add prop to path and return new proxy\n      return createNestedProxy(\n        [...path, prop],\n        client,\n        routeMeta,\n        baseURL,\n        sameOrigin,\n        rootAliases,\n        manifest,\n        bound,\n      );\n    },\n\n    // When calling as a function\n    apply(_target, _thisArg, args) {\n      // Check if the last part is an HTTP method\n      const lastPart = path[path.length - 1];\n      const httpMethods = [\"get\", \"head\", \"query\", \"post\", \"put\", \"delete\", \"patch\", \"options\"];\n\n      if (httpMethods.includes(lastPart)) {\n        // Method is explicitly called: api.users.get() or api['auth/login'].post()\n        // Remove the method from path and use it as the HTTP method\n        const routePath = buildProxyRoutePath(path.slice(0, -1));\n        const method = lastPart.toUpperCase();\n\n        // Extract options from arguments\n        const [options, clientOptions] = args;\n\n        // Call fetch client with explicit method\n        const resolved = manifest ? manifest.resolve(routePath, method, bound, options) : routePath;\n        if (!manifest && options?.params)\n          throw new TypeError(\"Dynamic params require the generated routes manifest.\");\n        return client(resolved, method, options, clientOptions);\n      } else {\n        // Direct call without method: api.hello()\n        // Use the full path and let the server determine the method (usually GET)\n        const routePath = buildProxyRoutePath(path);\n\n        // Extract options from arguments\n        const [options, clientOptions] = args;\n\n        // Call fetch client (default method will be GET)\n        const method = options?.method || \"GET\";\n        const resolved = manifest ? manifest.resolve(routePath, method, bound, options) : routePath;\n        return client(resolved, method, options, clientOptions);\n      }\n    },\n  });\n\n  routeMeta.set(proxy, { path: [...path], baseURL, manifest, bound });\n  return proxy;\n}\n\nfunction buildProxyRoutePath(path: string[]): string {\n  return \"/api/\" + path.join(\"/\").replace(/^\\/+/, \"\");\n}\n\nexport function isAPIRouteRef(value: unknown): value is CallableRouteRef {\n  return (\n    typeof value === \"function\" &&\n    (value as { [FARM_API_ROUTE_REF_SYMBOL]?: unknown })[FARM_API_ROUTE_REF_SYMBOL] === true\n  );\n}\n\nexport function getAPIRouteRefMetadata(value: unknown): APIRouteRefMetadata | null {\n  if (!isAPIRouteRef(value)) return null;\n  const metadata = (value as { [FARM_API_ROUTE_META_SYMBOL]?: unknown })[\n    FARM_API_ROUTE_META_SYMBOL\n  ];\n  if (!metadata || typeof metadata !== \"object\") return null;\n\n  const candidate = metadata as Partial<APIRouteRefMetadata>;\n  if (\n    typeof candidate.path !== \"string\" ||\n    typeof candidate.method !== \"string\" ||\n    typeof candidate.baseURL !== \"string\" ||\n    typeof candidate.sameOrigin !== \"boolean\"\n  ) {\n    return null;\n  }\n\n  return {\n    path: candidate.path,\n    method: candidate.method,\n    baseURL: candidate.baseURL,\n    sameOrigin: candidate.sameOrigin,\n  };\n}\n\n/**\n * Server-side API client that calls endpoints directly as functions\n * No HTTP overhead for app endpoints, and registered integration routes can be exposed at\n * api.integrations.* where Farm can dispatch them directly to the integration handler.\n *\n * @example\n * ```typescript\n * import { createServerAPIClient } from 'farm/client';\n * import type { AppIntegrations } from '@/lib/integrations';\n *\n * export const api = createServerAPIClient<{}, AppIntegrations>({});\n *\n * const result = await api.integrations.billing.status();\n * ```\n */\nexport function createServerAPIClient<TEndpoints extends Record<string, any>>(\n  endpoints: TEndpoints,\n): TEndpoints;\nexport function createServerAPIClient<TEndpoints extends Record<string, any>>(\n  endpoints: TEndpoints,\n  options: ServerAPIClientWithoutIntegrationsOptions,\n): TEndpoints;\nexport function createServerAPIClient<\n  TEndpoints extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n>(\n  endpoints: TEndpoints,\n  options?: ServerAPIClientOptions,\n): ServerAPIClient<TEndpoints, TIntegrations>;\nexport function createServerAPIClient<\n  TEndpoints extends Record<string, any>,\n  TIntegrations extends Record<string, any> = {},\n>(\n  endpoints: TEndpoints,\n  options: ServerAPIClientOptions | ServerAPIClientWithoutIntegrationsOptions = {},\n): TEndpoints | ServerAPIClient<TEndpoints, TIntegrations> {\n  if (\n    options.integrations === false ||\n    Object.prototype.hasOwnProperty.call(endpoints, \"integrations\")\n  ) {\n    return endpoints;\n  }\n\n  Object.defineProperty(endpoints, \"integrations\", {\n    get() {\n      return integrationsServer<TIntegrations>(\n        typeof options.integrations === \"object\" ? options.integrations : {},\n      );\n    },\n    enumerable: false,\n    configurable: true,\n  });\n\n  return endpoints as ServerAPIClient<TEndpoints, TIntegrations>;\n}\n\nconst API_CACHE_REFETCH = Symbol.for(\"farm.api.cache-refetch\");\ntype CacheEntry = FarmClientCacheEntry<any> & {\n  [API_CACHE_REFETCH]?: () => void;\n};\n\n// Keep the read recipe on its cache entry, so deletion/GC also releases it.\n// This separate closure must not retain the original request's entry or signal.\nfunction createCacheRefetch(\n  request: APICall,\n  path: string,\n  method: string,\n  input: unknown,\n  key: string,\n  cache: CacheOptions,\n  options: ClientOptions<any, any> | undefined,\n  onError: APIClientOptions[\"onError\"],\n): () => void {\n  const readOptions: ClientOptions<any, any> = {\n    cache: { ...cache, key, policy: \"network-only\", dedupeMs: 0 },\n    retry: options?.retry,\n    timeoutMs: options?.timeoutMs,\n  };\n  return () => {\n    // A new call resolves current defaults and owns a fresh deadline. Do not\n    // retain prior signals, mutation options, or per-call completion callbacks.\n    void request(path, method, input, readOptions).catch((error) => {\n      notifyClientObserver(onError, [normalizeError(error)]);\n    });\n  };\n}\n\ntype InflightEntry = {\n  cancellable?: boolean;\n  promise: Promise<APIResult<any, Error>>;\n  startedAt: number;\n};\n\ntype ScopedRequestState = {\n  context: string;\n  cache: FarmClientDataCache;\n  inflight: Map<string, InflightEntry>;\n  retired: boolean;\n};\n\ntype RouteMeta = {\n  path: string[];\n  baseURL: string;\n  manifest?: ClientRouteManifest;\n  bound?: BoundRouteParams;\n};\n\ntype OptimisticSnapshot = {\n  key: string;\n  stack: OptimisticStack;\n  layer: OptimisticLayer;\n};\n\ntype OptimisticStack = {\n  entry?: CacheEntry;\n  layers: OptimisticLayer[];\n  renderedEntry?: CacheEntry;\n  invalidatedAt?: number;\n};\n\ntype OptimisticLayer = {\n  updaters: Array<(prev: any) => any>;\n  updatedAt: number;\n  staleAt: number;\n  gcAt?: number;\n  committed?: boolean;\n};\n\nconst optimisticStates = new WeakMap<FarmClientDataCache, Map<string, OptimisticStack>>();\nconst cacheReadOwners = new WeakMap<FarmClientDataCache, Map<string, object>>();\n\nfunction getCacheReadOwners(cache: FarmClientDataCache): Map<string, object> {\n  let owners = cacheReadOwners.get(cache);\n  if (!owners) {\n    owners = new Map();\n    cacheReadOwners.set(cache, owners);\n  }\n  return owners;\n}\n\nfunction getOptimisticState(cache: FarmClientDataCache): Map<string, OptimisticStack> {\n  let state = optimisticStates.get(cache);\n  if (!state) {\n    state = new Map();\n    optimisticStates.set(cache, state);\n  }\n  return state;\n}\n\nfunction applyOptimisticLayer(entry: CacheEntry | undefined, layer: OptimisticLayer): CacheEntry {\n  let data = entry?.data;\n  for (const updater of layer.updaters) data = updater(data);\n\n  return {\n    data,\n    updatedAt: layer.updatedAt,\n    staleAt: entry?.staleAt ?? layer.staleAt,\n    gcAt: entry?.gcAt ?? layer.gcAt,\n    invalidatedAt: entry?.invalidatedAt,\n    [API_CACHE_REFETCH]: entry?.[API_CACHE_REFETCH],\n  };\n}\n\nfunction storeOptimisticEntry(\n  cacheState: FarmClientDataCache,\n  key: string,\n  stack: OptimisticStack,\n  entry: CacheEntry | undefined,\n): void {\n  if (!entry) {\n    cacheState.delete(key);\n    stack.renderedEntry = undefined;\n    return;\n  }\n\n  cacheState.set(key, entry);\n  if (stack.invalidatedAt !== undefined) {\n    cacheState.invalidate(key, stack.invalidatedAt);\n  }\n  stack.renderedEntry = cacheState.get(key);\n}\n\nfunction reconcileOptimisticInvalidation(\n  cacheState: FarmClientDataCache,\n  key: string,\n  stack: OptimisticStack,\n): boolean {\n  const current = cacheState.get(key);\n  const rendered = stack.renderedEntry;\n  if (current === rendered) return true;\n  if (\n    !current ||\n    !rendered ||\n    current.data !== rendered.data ||\n    current.updatedAt !== rendered.updatedAt ||\n    current.gcAt !== rendered.gcAt ||\n    current.status !== rendered.status ||\n    current.error !== rendered.error ||\n    current.fetching !== rendered.fetching ||\n    current.staleAt !== 0 ||\n    current.invalidatedAt === undefined\n  ) {\n    return false;\n  }\n\n  stack.invalidatedAt = current.invalidatedAt;\n  stack.renderedEntry = current;\n  return true;\n}\n\nfunction renderOptimisticStack(\n  cacheState: FarmClientDataCache,\n  key: string,\n  stack: OptimisticStack,\n): void {\n  let entry = stack.entry ? { ...stack.entry } : undefined;\n  for (const layer of stack.layers) entry = applyOptimisticLayer(entry, layer);\n  storeOptimisticEntry(cacheState, key, stack, entry);\n}\n\nfunction settleOptimisticUpdates(\n  cacheState: FarmClientDataCache,\n  optimisticState: Map<string, OptimisticStack>,\n  snapshots: OptimisticSnapshot[],\n  outcome: \"commit\" | \"rollback\" | \"invalidate\",\n): string[] {\n  const settledKeys: string[] = [];\n  for (const snapshot of snapshots) {\n    const stack = optimisticState.get(snapshot.key);\n    if (stack !== snapshot.stack) continue;\n    if (!reconcileOptimisticInvalidation(cacheState, snapshot.key, stack)) {\n      optimisticState.delete(snapshot.key);\n      continue;\n    }\n\n    if (outcome === \"rollback\") {\n      stack.layers = stack.layers.filter((layer) => layer !== snapshot.layer);\n    } else {\n      snapshot.layer.committed = true;\n      if (outcome === \"invalidate\") stack.invalidatedAt = Date.now();\n    }\n\n    while (stack.layers[0]?.committed) {\n      stack.entry = applyOptimisticLayer(stack.entry, stack.layers.shift()!);\n    }\n\n    renderOptimisticStack(cacheState, snapshot.key, stack);\n    if (stack.layers.length === 0) optimisticState.delete(snapshot.key);\n    settledKeys.push(snapshot.key);\n  }\n  return settledKeys;\n}\n\n/**\n * @internal Apply key-targeted optimistic updates to the shared client cache\n * for a server-function mutation. Route-reference update tuples need an API\n * caller's route metadata and are skipped here; use structured cache keys.\n */\nexport function applyServerFnOptimisticUpdates(\n  updates: readonly OptimisticUpdate[],\n  now = Date.now(),\n): OptimisticSnapshot[] {\n  const cacheState = getFarmClientDataCache();\n  const optimisticState = getOptimisticState(cacheState);\n  const snapshots = new Map<string, OptimisticSnapshot>();\n\n  for (const update of updates) {\n    if (update.length !== 2) continue;\n    const [target, updater] = update;\n    if (typeof updater !== \"function\") continue;\n    const targetKey =\n      typeof target === \"string\" || Array.isArray(target)\n        ? normalizeFarmClientCacheKey(target as FarmClientCacheKey)\n        : null;\n    if (!targetKey) continue;\n\n    const targetEntry = getValidCacheEntry(cacheState, targetKey, now);\n    const currentEntry = cacheState.get(targetKey);\n    let stack = optimisticState.get(targetKey);\n    if (stack && !reconcileOptimisticInvalidation(cacheState, targetKey, stack)) {\n      stack = undefined;\n    }\n    if (!stack) {\n      stack = {\n        entry: targetEntry ? { ...targetEntry } : undefined,\n        layers: [],\n        renderedEntry: currentEntry,\n      };\n      optimisticState.set(targetKey, stack);\n    }\n\n    let snapshot = snapshots.get(targetKey);\n    if (!snapshot) {\n      const previousEntry = stack.layers.length === 0 ? stack.entry : stack.renderedEntry;\n      const layer: OptimisticLayer = {\n        updaters: [],\n        updatedAt: now,\n        // A server function has no cache policy of its own; preserve the\n        // target read's freshness metadata when it exists.\n        staleAt: targetEntry?.staleAt ?? now,\n        gcAt: targetEntry?.gcAt,\n      };\n      stack.layers.push(layer);\n      snapshot = { key: targetKey, stack, layer };\n      snapshots.set(targetKey, snapshot);\n      snapshot.layer.updaters.push(updater);\n      const nextEntry = applyOptimisticLayer(previousEntry, {\n        ...snapshot.layer,\n        updaters: [updater],\n      });\n      storeOptimisticEntry(cacheState, targetKey, stack, nextEntry);\n      continue;\n    }\n    snapshot.layer.updaters.push(updater);\n    const nextEntry = applyOptimisticLayer(stack.renderedEntry, {\n      ...snapshot.layer,\n      updaters: [updater],\n    });\n    storeOptimisticEntry(cacheState, targetKey, stack, nextEntry);\n  }\n\n  return Array.from(snapshots.values());\n}\n\n/**\n * @internal Settle a server-function mutation's optimistic snapshots with the\n * API client's semantics: commit on success, rollback on failure with\n * `rollbackOnError`, and mark-stale on failure without it.\n */\nexport function settleServerFnOptimisticUpdates(\n  snapshots: OptimisticSnapshot[],\n  outcome: \"commit\" | \"rollback\" | \"invalidate\",\n): void {\n  if (snapshots.length === 0) return;\n  const cacheState = getFarmClientDataCache();\n  settleOptimisticUpdates(cacheState, getOptimisticState(cacheState), snapshots, outcome);\n}\n\n/**\n * @internal Resolve a server-function mutation's invalidate targets to cache\n * keys. Route-reference and path targets need an API caller's identity and are\n * skipped; use structured cache keys. Keys are applied through the shared\n * invalidation bus, matching server-declared `invalidates`.\n */\nexport function resolveServerFnInvalidateTargets(invalidate: InvalidateOptions): string[] {\n  const targets = Array.isArray(invalidate) ? invalidate : invalidate.targets;\n  const keys: string[] = [];\n  for (const target of targets) {\n    if (typeof target === \"string\" || Array.isArray(target)) {\n      if (Array.isArray(target) && typeof target[0] === \"function\") continue;\n      keys.push(normalizeFarmClientCacheKey(target as FarmClientCacheKey));\n    } else if (target && typeof target === \"object\" && \"key\" in target) {\n      keys.push(normalizeFarmClientCacheKey(target.key));\n    }\n  }\n  return keys;\n}\n\nfunction buildCacheKey(\n  method: string,\n  path: string,\n  input: any,\n  baseURL: string,\n  defaultHeaders?: HeadersInit,\n): string {\n  const keyInput =\n    input && typeof input === \"object\"\n      ? {\n          query: input.query,\n          body: input.body,\n          ...(method === \"QUERY\"\n            ? {\n                contentType:\n                  getHeader(input.headers, \"content-type\") ??\n                  getHeader(defaultHeaders, \"content-type\") ??\n                  \"application/json\",\n                contentEncoding:\n                  getHeader(input.headers, \"content-encoding\") ??\n                  getHeader(defaultHeaders, \"content-encoding\"),\n              }\n            : {}),\n        }\n      : input;\n  const url = resolveFarmAPIRequestURL(path, baseURL);\n  return `${method}:${url.origin}${url.pathname}:${stableStringify(keyInput ?? {})}`;\n}\n\nfunction isSameOriginAPIBaseURL(baseURL: string): boolean {\n  if (typeof window === \"undefined\") return baseURL.startsWith(\"/\");\n  return resolveFarmAPIRequestURL(\"/api\", baseURL).origin === window.location.origin;\n}\n\nfunction stableStringify(value: any): string {\n  if (value === null || value === undefined) return String(value);\n  if (value instanceof Date) return value.toISOString();\n  if (typeof value !== \"object\") return JSON.stringify(value);\n  if (Array.isArray(value)) {\n    return `[${value.map((item) => stableStringify(item)).join(\",\")}]`;\n  }\n\n  const keys = Object.keys(value).sort();\n  const entries = keys.map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`);\n  return `{${entries.join(\",\")}}`;\n}\n\nfunction getHeader(headers: unknown, name: string): string | undefined {\n  if (!headers || typeof headers !== \"object\") return undefined;\n\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers) {\n    return headers.get(name) ?? undefined;\n  }\n\n  const entry = Object.entries(headers).find(([key]) => key.toLowerCase() === name);\n  return entry?.[1] === undefined ? undefined : String(entry[1]);\n}\n\nfunction getRequestCacheContext(\n  options: { headers?: HeadersInit; credentials?: RequestCredentials },\n  input: unknown,\n  scope: CacheScope | undefined,\n): string | undefined {\n  const credentials = options.credentials ?? \"same-origin\";\n  const headers = new Headers(options.headers);\n  const requestHeaders =\n    input && typeof input === \"object\" && \"headers\" in input ? input.headers : undefined;\n\n  if (requestHeaders) {\n    new Headers(requestHeaders as HeadersInit).forEach((value, key) => headers.set(key, value));\n  }\n\n  const carriesBrowserIdentity = credentials !== \"omit\" || [...headers].length > 0;\n  if (scope !== \"client\" && !carriesBrowserIdentity) return undefined;\n\n  return stableStringify({\n    credentials,\n    headers: [...headers].sort(([left], [right]) => left.localeCompare(right)),\n  });\n}\n\nfunction getGcAt(now: number, gcTime?: number): number | undefined {\n  if (gcTime === undefined) return undefined;\n  if (!Number.isFinite(gcTime) || gcTime <= 0) return now;\n  return now + gcTime;\n}\n\nfunction getValidCacheEntry(\n  cacheState: FarmClientDataCache,\n  key: string,\n  now: number,\n): CacheEntry | undefined {\n  const entry = cacheState.get(key);\n  if (!entry) return undefined;\n\n  if (entry.gcAt !== undefined && now >= entry.gcAt) {\n    cacheState.delete(key);\n    return undefined;\n  }\n\n  return entry;\n}\n\nfunction isEntryStale(entry: CacheEntry, now: number): boolean {\n  if (entry.invalidatedAt !== undefined) return true;\n  return now >= entry.staleAt;\n}\n\nfunction resolveTargetKey(\n  routeMeta: WeakMap<AnyRouteRef, RouteMeta>,\n  target: InvalidateTarget | AnyRouteRef,\n  input?: unknown,\n  baseURL = \"http://localhost:3000\",\n  defaultHeaders?: HeadersInit,\n  localBaseURL?: string,\n): string | null {\n  if (!target) return null;\n\n  if (typeof target === \"string\") return target;\n\n  if (typeof target === \"function\") {\n    const meta = routeMeta.get(target);\n    if (!meta) return null;\n\n    const { method, routePath } = resolveRouteMeta(meta, input);\n    return buildCacheKey(\n      method,\n      routePath,\n      input ?? {},\n      localBaseURL ?? meta.baseURL,\n      defaultHeaders,\n    );\n  }\n\n  if (Array.isArray(target)) {\n    const [route, routeInput] = target;\n    if (typeof route === \"function\") {\n      return resolveTargetKey(routeMeta, route, routeInput, baseURL, defaultHeaders, localBaseURL);\n    }\n    return normalizeFarmClientCacheKey(target);\n  }\n\n  if (\"key\" in target) return normalizeFarmClientCacheKey(target.key);\n\n  if (\"path\" in target) {\n    const method = target.method ?? \"GET\";\n    return buildCacheKey(method, target.path, target.input ?? {}, baseURL, defaultHeaders);\n  }\n\n  return null;\n}\n\nfunction resolveRouteMeta(meta: RouteMeta, input?: any): { routePath: string; method: string } {\n  const httpMethods = [\"get\", \"head\", \"query\", \"post\", \"put\", \"delete\", \"patch\", \"options\"];\n  const lastPart = meta.path[meta.path.length - 1];\n  if (lastPart && httpMethods.includes(lastPart)) {\n    return {\n      routePath: meta.manifest\n        ? meta.manifest.resolve(\n            buildProxyRoutePath(meta.path.slice(0, -1)),\n            lastPart.toUpperCase(),\n            meta.bound ?? {},\n            input,\n          )\n        : buildProxyRoutePath(meta.path.slice(0, -1)),\n      method: lastPart.toUpperCase(),\n    };\n  }\n\n  return {\n    routePath: meta.manifest\n      ? meta.manifest.resolve(buildProxyRoutePath(meta.path), \"GET\", meta.bound ?? {}, input)\n      : buildProxyRoutePath(meta.path),\n    method: \"GET\",\n  };\n}\n\nfunction normalizeError(error: unknown): Error {\n  if (error instanceof APIClientError) return error;\n\n  const normalized = new APIClientError(\"network_error\", undefined, {\n    status: 0,\n    message:\n      error instanceof Error\n        ? error.message\n        : typeof error === \"string\"\n          ? error\n          : \"Network request failed\",\n  });\n  (normalized as Error & { cause?: unknown }).cause = error;\n  return normalized;\n}\n\nfunction notifyResponseObserver(\n  observer: ClientOptions<any, any>[\"onResponse\"],\n  data: unknown,\n  error: unknown,\n  event: ResponseEvent<any, any>,\n): void {\n  notifyClientObserver(observer, [data, error, event], \"API client onResponse\");\n}\n\nfunction isFormData(value: unknown): value is FormData {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    ((typeof FormData !== \"undefined\" && value instanceof FormData) ||\n      (Object.prototype.toString.call(value) === \"[object FormData]\" &&\n        typeof (value as { entries?: unknown }).entries === \"function\"))\n  );\n}\n\nfunction createResponseError(response: Response, data: any, cause?: unknown): Error {\n  const expected = readEndpointErrorEnvelope(data);\n  if (expected) {\n    return new APIClientError(expected.code, expected.data, {\n      status: response.status,\n      message: expected.message,\n      response,\n    });\n  }\n\n  const error = new APIClientError(\"http_error\", data, {\n    status: response.status,\n    message: `HTTP ${response.status}: ${response.statusText}`,\n    response,\n  });\n  if (cause !== undefined) (error as Error & { cause?: unknown }).cause = cause;\n  return error;\n}\n\nfunction readEndpointErrorEnvelope(data: unknown): {\n  code: string;\n  message: string;\n  data: unknown;\n} | null {\n  if (!data || typeof data !== \"object\") return null;\n  const error = (data as { error?: unknown }).error;\n  if (!error || typeof error !== \"object\") return null;\n\n  const code = (error as { code?: unknown }).code;\n  const message = (error as { message?: unknown }).message;\n  if (typeof code !== \"string\" || typeof message !== \"string\") return null;\n\n  return {\n    code,\n    message,\n    data: (error as { data?: unknown }).data,\n  };\n}\n","import { matchAPIRoute, parseDynamicSegment } from \"./route-pattern\";\n\nexport type APIRouteManifest = readonly {\n  readonly path: string;\n  readonly methods: readonly string[];\n}[];\nexport type BoundRouteParams = Readonly<Record<string, string | readonly string[]>>;\n\n/** A schema-free lookup shared by every immutable scope of one API client. */\nexport class ClientRouteManifest {\n  readonly routes: Map<string, APIRouteManifest[number]>;\n  constructor(routes: APIRouteManifest) {\n    this.routes = new Map(\n      routes.map((route) => [\n        route.path.replace(/\\/$/, \"\"),\n        {\n          path: route.path.replace(/\\/$/, \"\"),\n          methods: [...route.methods],\n        },\n      ]),\n    );\n  }\n\n  bind(path: string, input: unknown): { segment: string; params: BoundRouteParams } {\n    const params = readParams(input);\n    const prefix = `${path.replace(/\\/$/, \"\")}/`;\n    const candidates = new Set(\n      [...this.routes.keys()]\n        .filter((route) => route.startsWith(prefix))\n        .map((route) => route.slice(prefix.length).split(\"/\")[0])\n        .filter((segment) => {\n          const dynamic = parseDynamicSegment(segment);\n          return (\n            dynamic &&\n            Object.keys(params).every((key) => key === dynamic.name) &&\n            (Object.prototype.hasOwnProperty.call(params, dynamic.name) || dynamic.optional)\n          );\n        }),\n    );\n    if (candidates.size !== 1)\n      throw new TypeError(\n        `Cannot bind route params at ${path}: supply exactly the next dynamic segment's parameter.`,\n      );\n    const segment = [...candidates][0]!;\n    const dynamic = parseDynamicSegment(segment)!;\n    encodeParameter(dynamic, params[dynamic.name]);\n    return {\n      segment,\n      params: Object.freeze(\n        Object.fromEntries(\n          Object.entries(params).map(([key, value]) => [\n            key,\n            Array.isArray(value) ? Object.freeze([...value]) : value,\n          ]),\n        ),\n      ),\n    };\n  }\n\n  resolve(\n    path: string,\n    method: string,\n    bound: BoundRouteParams,\n    input?: { params?: unknown },\n  ): string {\n    const normalized = path.replace(/\\/$/, \"\");\n    const supplied = readParams(input?.params);\n    const candidates = [...this.routes.values()].filter((route) => {\n      if (route.path === normalized) return true;\n      if (!route.path.startsWith(`${normalized}/`)) return false;\n      const tail = route.path.slice(normalized.length + 1);\n      return (\n        !tail.includes(\"/\") && Boolean(parseDynamicSegment(tail)) && input?.params !== undefined\n      );\n    });\n    const selected = candidates.filter((route) => {\n      const unbound = route.path\n        .split(\"/\")\n        .map(parseDynamicSegment)\n        .filter((part) => part && !Object.prototype.hasOwnProperty.call(bound, part.name));\n      return (\n        Object.keys(supplied).every((key) => unbound.some((part) => part!.name === key)) &&\n        unbound.every(\n          (part) => part!.optional || Object.prototype.hasOwnProperty.call(supplied, part!.name),\n        )\n      );\n    });\n    if (selected.length !== 1)\n      throw new TypeError(\n        `Cannot resolve ${method} ${normalized}: missing, unexpected, or ambiguous route params.`,\n      );\n    const route = selected[0]!;\n    if (!route.methods.includes(method) && !(method === \"HEAD\" && route.methods.includes(\"GET\"))) {\n      throw new TypeError(`${method} is not registered for ${route.path}.`);\n    }\n    const params = { ...bound, ...supplied };\n    const resolved = route.path\n      .split(\"/\")\n      .map((segment) => {\n        const dynamic = parseDynamicSegment(segment);\n        return dynamic ? encodeParameter(dynamic, params[dynamic.name]) : segment;\n      })\n      .filter(Boolean)\n      .join(\"/\");\n    const pathname = `/${resolved}`;\n    const winner = matchAPIRoute(this.routes, pathname);\n    if (winner?.route.path !== route.path) {\n      throw new TypeError(\n        `Route ${route.path} resolves to ${pathname}, which is shadowed by ${winner?.route.path ?? \"another route\"}.`,\n      );\n    }\n    return pathname;\n  }\n}\n\nfunction readParams(input: unknown): Record<string, string | readonly string[]> {\n  if (input === undefined) return {};\n  if (\n    !input ||\n    typeof input !== \"object\" ||\n    Array.isArray(input) ||\n    ![Object.prototype, null].includes(Object.getPrototypeOf(input))\n  ) {\n    throw new TypeError(\"Route params must be a plain object.\");\n  }\n  for (const key of Object.keys(input)) {\n    if ([\"__proto__\", \"constructor\", \"prototype\"].includes(key))\n      throw new TypeError(`Unsafe route parameter ${key}.`);\n  }\n  return input as Record<string, string | readonly string[]>;\n}\n\nfunction encodeParameter(\n  parameter: { name: string; catchAll: boolean; optional: boolean },\n  value: unknown,\n): string {\n  if (parameter.optional && value === undefined) return \"\";\n  const parts = parameter.catchAll ? value : [value];\n  if (!Array.isArray(parts) || (!parts.length && !parameter.optional)) {\n    throw new TypeError(\n      `Route parameter ${parameter.name} must be ${parameter.catchAll ? \"a non-empty array of strings\" : \"a string\"}.`,\n    );\n  }\n  return Array.from(parts, (part) => {\n    if (\n      typeof part !== \"string\" ||\n      !part ||\n      part === \".\" ||\n      part === \"..\" ||\n      Array.from(part).some(\n        (character) =>\n          character.charCodeAt(0) <= 31 ||\n          (character.charCodeAt(0) >= 127 && character.charCodeAt(0) <= 159),\n      )\n    ) {\n      throw new TypeError(`Invalid value for route parameter ${parameter.name}.`);\n    }\n    return encodeURIComponent(part);\n  }).join(\"/\");\n}\n","/**\n * Farm.js API Routes Vite Plugin\n *\n * Standalone API route support that works with any Vite setup.\n * Discovers and handles route.ts files in the api directory.\n * Also supports root routes.ts for custom route definitions.\n *\n * @example\n * ```ts\n * import { farmApiPlugin } from '@farm.js/core'\n *\n * export default defineConfig({\n *   plugins: [farmApiPlugin({ srcDir: 'src' })],\n * })\n * ```\n */\n\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport {\n  APIRouteConflictError,\n  API_ROUTE_METHODS,\n  getAllowedAPIRouteMethods,\n  invokeAPIRouteEndpoint,\n  resolveAPIRouteEndpoint,\n} from \"./route-manager\";\nimport { matchAPIRouteAtBasePath } from \"./runtime\";\nimport { sendWebResponse } from \"../server/response\";\nimport { isFarmAPIRouteFileName } from \"./route-files\";\nimport { _withAfterNodeMiddleware } from \"../after\";\nimport { _runWithAPIRequestRuntime } from \"./server-context\";\nimport { isProgrammaticRoutesFileName } from \"../routes-shared\";\nimport { findProgrammaticRouteFilesInDir } from \"../routes.server\";\nimport { toPosixPath, toViteModuleId } from \"../utils\";\nimport {\n  createFarmRequestBodyErrorResponse,\n  readNodeRequestBody,\n  resolveFarmServerConfig,\n} from \"../server-http\";\nimport { createCliColors } from \"../cli-colors\";\nimport {\n  AmbiguousRouteError,\n  assertUniqueRouteParameters,\n  getRoutePatternShape,\n} from \"../routing/specificity\";\n\nexport interface FarmApiPluginOptions {\n  /** Source directory containing the api folder (default: 'src') */\n  srcDir?: string;\n  /** Enable debug logging */\n  debug?: boolean;\n  /** Maximum request body size, for example `\"10mb\"`. */\n  bodySizeLimit?: number | string;\n  /** Same-origin path where canonical `/api` routes are served. @default \"/api\" */\n  basePath?: string;\n}\n\nexport interface ApiRoute {\n  path: string;\n  filePath: string;\n  methods: string[];\n  endpoints: Record<string, any>;\n}\n\n/**\n * Farm.js API Routes Vite Plugin\n */\nexport function farmApiPlugin(options: FarmApiPluginOptions = {}): Plugin {\n  const srcDir = options.srcDir ?? \"src\";\n  const debug = options.debug ?? false;\n  const bodySizeLimit = resolveFarmServerConfig({\n    bodySizeLimit: options.bodySizeLimit,\n  }).bodySizeLimit;\n  const basePath = options.basePath;\n\n  // API routes cache\n  let apiRoutesCache: Map<string, ApiRoute> = new Map();\n  let apiRouterHandler: ((req: Request) => Promise<Response>) | null = null;\n  let discoveryComplete = false;\n  let discoveryPromise: Promise<void> | null = null;\n  let discoveryError: unknown;\n  let recoverFailedDiscovery: (() => Promise<boolean>) | undefined;\n  const endpointSources = new Map<string, Map<string, string>>();\n  const routeShapes = new Map<string, { routePath: string; filePath: string }>();\n\n  const log = (_message: string) => {};\n  const logResponse = (method: string, urlPath: string, status: number, duration: number) => {\n    const pc = createCliColors();\n    let statusColor = pc.green;\n    if (status >= 500) statusColor = pc.red;\n    else if (status >= 400) statusColor = pc.yellow;\n    else if (status >= 300) statusColor = pc.cyan;\n\n    const logMsg = [\n      pc.dim(\"[\") + pc.bold(pc.blue(\"FARM\")) + pc.dim(\"]\"),\n      pc.dim(\"[\") + pc.bold(pc.cyan(\"API\")) + pc.dim(\"]\"),\n      pc.dim(\"[\") + pc.bold(pc.white(method.padEnd(3))) + pc.dim(\"]\"),\n      pc.gray(urlPath),\n      pc.dim(\"-\"),\n      statusColor(status.toString()),\n      pc.dim(`(${duration}ms)`),\n    ].join(\" \");\n    console.log(logMsg);\n  };\n\n  const registerRouteShape = (routePath: string, filePath: string): void => {\n    assertUniqueRouteParameters(routePath, \"api\");\n    const shape = getRoutePatternShape(routePath, \"api\");\n    const existing = routeShapes.get(shape);\n    if (existing && existing.routePath !== routePath) {\n      throw new AmbiguousRouteError(\n        `Ambiguous API routes \"${existing.routePath}\" and \"${routePath}\" match the same URLs. Found ${existing.filePath} and ${filePath}. Keep only one route for this URL shape.`,\n      );\n    }\n    routeShapes.set(shape, { routePath, filePath });\n  };\n\n  const addEndpoint = (\n    routePath: string,\n    filePath: string,\n    method: string,\n    endpoint: any,\n  ): void => {\n    registerRouteShape(routePath, filePath);\n    const normalizedMethod = method.toUpperCase();\n    const existing = apiRoutesCache.get(routePath);\n    const existingFile = endpointSources.get(routePath)?.get(normalizedMethod);\n\n    if (existingFile) {\n      throw new APIRouteConflictError(routePath, normalizedMethod, existingFile, filePath);\n    }\n\n    if (existing) {\n      if (!existing.methods.includes(normalizedMethod)) {\n        existing.methods.push(normalizedMethod);\n      }\n      existing.endpoints[normalizedMethod] = endpoint;\n      const sources = endpointSources.get(routePath) ?? new Map();\n      sources.set(normalizedMethod, filePath);\n      endpointSources.set(routePath, sources);\n      return;\n    }\n\n    apiRoutesCache.set(routePath, {\n      path: routePath,\n      filePath,\n      methods: [normalizedMethod],\n      endpoints: { [normalizedMethod]: endpoint },\n    });\n    endpointSources.set(routePath, new Map([[normalizedMethod, filePath]]));\n  };\n\n  const removeEndpointsFromFile = (filePath: string): void => {\n    for (const [routePath, sources] of endpointSources) {\n      const route = apiRoutesCache.get(routePath);\n      if (!route) continue;\n\n      for (const [method, sourceFile] of sources) {\n        if (sourceFile !== filePath) continue;\n        sources.delete(method);\n        route.methods = route.methods.filter((candidate) => candidate !== method);\n        delete route.endpoints[method];\n      }\n\n      if (route.methods.length === 0) {\n        apiRoutesCache.delete(routePath);\n        endpointSources.delete(routePath);\n        routeShapes.delete(getRoutePatternShape(routePath, \"api\"));\n      } else {\n        const currentSource = sources.values().next().value;\n        if (route.filePath === filePath && currentSource) {\n          route.filePath = currentSource;\n        }\n        routeShapes.set(getRoutePatternShape(routePath, \"api\"), {\n          routePath,\n          filePath: currentSource ?? route.filePath,\n        });\n      }\n    }\n  };\n\n  const snapshotRouteState = () => ({\n    routes: new Map(\n      [...apiRoutesCache].map(([routePath, route]) => [\n        routePath,\n        {\n          ...route,\n          methods: [...route.methods],\n          endpoints: { ...route.endpoints },\n        },\n      ]),\n    ),\n    sources: new Map(\n      [...endpointSources].map(([routePath, sources]) => [routePath, new Map(sources)]),\n    ),\n    shapes: new Map(routeShapes),\n  });\n\n  const restoreRouteState = (snapshot: ReturnType<typeof snapshotRouteState>): void => {\n    apiRoutesCache = snapshot.routes;\n    endpointSources.clear();\n    for (const [routePath, sources] of snapshot.sources) {\n      endpointSources.set(routePath, sources);\n    }\n    routeShapes.clear();\n    for (const [shape, route] of snapshot.shapes) {\n      routeShapes.set(shape, route);\n    }\n  };\n\n  // Create API router handler\n  const createRouter = async (): Promise<void> => {\n    const totalEndpoints = Array.from(apiRoutesCache.values()).reduce(\n      (sum, route) => sum + route.methods.length,\n      0,\n    );\n\n    apiRouterHandler = null;\n\n    if (totalEndpoints > 0) {\n      apiRouterHandler = async (request: Request): Promise<Response> => {\n        const url = new URL(request.url);\n        const method = request.method.toUpperCase();\n        const pathname = url.pathname;\n\n        const match = matchAPIRouteAtBasePath(apiRoutesCache, pathname, basePath);\n        if (!match) {\n          return new Response(JSON.stringify({ error: \"Not Found\" }), {\n            status: 404,\n            headers: { \"Content-Type\": \"application/json\" },\n          });\n        }\n\n        const { route, params } = match;\n        const endpoint = resolveAPIRouteEndpoint(route, method);\n        if (!endpoint) {\n          return new Response(JSON.stringify({ error: \"Method Not Allowed\" }), {\n            status: 405,\n            headers: {\n              Allow: getAllowedAPIRouteMethods(route).join(\", \"),\n              \"Content-Type\": \"application/json\",\n            },\n          });\n        }\n\n        try {\n          return await invokeAPIRouteEndpoint(endpoint, request, params, bodySizeLimit);\n        } catch (error: any) {\n          return new Response(JSON.stringify({ error: error.message || \"Internal Server Error\" }), {\n            status: 500,\n            headers: { \"Content-Type\": \"application/json\" },\n          });\n        }\n      };\n\n      log(`API router created with ${totalEndpoints} endpoints`);\n    }\n  };\n\n  return {\n    name: \"@farm.js/core:api\",\n    enforce: \"pre\",\n\n    configureServer(server: ViteDevServer) {\n      // Discover API routes in /api directory\n      const discoverFileRoutes = async (apiDir: string): Promise<void> => {\n        const fs = await import(\"fs\");\n        const path = await import(\"path\");\n\n        if (!fs.existsSync(apiDir)) {\n          log(\"No api directory found\");\n          return;\n        }\n\n        const findRouteFiles = (dir: string): string[] => {\n          const files: string[] = [];\n          if (!fs.existsSync(dir)) return files;\n          const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n          for (const entry of entries) {\n            const fullPath = path.join(dir, entry.name);\n            if (entry.isDirectory()) {\n              files.push(...findRouteFiles(fullPath));\n            } else if (isFarmAPIRouteFileName(entry.name)) {\n              files.push(fullPath);\n            }\n          }\n          return files;\n        };\n\n        const routeFiles = findRouteFiles(apiDir);\n        apiRoutesCache.clear();\n        endpointSources.clear();\n        routeShapes.clear();\n\n        for (const filePath of routeFiles) {\n          try {\n            const relativePath = path.relative(apiDir, path.dirname(filePath));\n            const routePath =\n              \"/api/\" + (relativePath === \".\" ? \"\" : relativePath.replace(/\\\\/g, \"/\"));\n\n            const routeModule = await server.ssrLoadModule(filePath);\n            const endpoints: Record<string, any> = {};\n            const availableMethods: string[] = [];\n\n            for (const method of API_ROUTE_METHODS) {\n              if (routeModule[method]) {\n                availableMethods.push(method);\n                endpoints[method] = routeModule[method];\n              }\n            }\n\n            if (availableMethods.length > 0) {\n              for (const method of availableMethods) {\n                addEndpoint(routePath, filePath, method, endpoints[method]);\n              }\n              log(`API route discovered: ${availableMethods.join(\", \")} ${routePath}`);\n            }\n          } catch (e: any) {\n            if (e instanceof APIRouteConflictError || e instanceof AmbiguousRouteError) throw e;\n            log(`API route load failed at ${filePath}: ${e.message}`);\n          }\n        }\n      };\n\n      // Discover routes from root routes.ts file\n      const discoverRootRoutes = async (): Promise<void> => {\n        const fs = await import(\"fs\");\n        const path = await import(\"path\");\n\n        const routesFiles = [\n          path.join(server.config.root, srcDir, \"routes.ts\"),\n          path.join(server.config.root, srcDir, \"routes.tsx\"),\n          path.join(server.config.root, srcDir, \"routes.js\"),\n        ];\n\n        for (const routesFile of routesFiles) {\n          if (fs.existsSync(routesFile)) {\n            try {\n              const routesModule = await server.ssrLoadModule(routesFile);\n\n              for (const [exportName, exportValue] of Object.entries(routesModule)) {\n                const endpoint = exportValue as any;\n\n                if (endpoint && endpoint.__path) {\n                  const routePath = endpoint.__path;\n                  const method = String(endpoint.__method || \"GET\").toUpperCase();\n\n                  addEndpoint(routePath, routesFile, method, endpoint);\n                  log(`Root route discovered: ${method} ${routePath}`);\n                }\n              }\n            } catch (e: any) {\n              if (e instanceof APIRouteConflictError || e instanceof AmbiguousRouteError) throw e;\n              log(`Root routes.ts load failed: ${e.message}`);\n            }\n            break;\n          }\n        }\n      };\n\n      const discoverProgrammaticRoutes = async (): Promise<void> => {\n        const path = await import(\"path\");\n        const srcRoot = path.join(server.config.root, srcDir);\n        const routeFiles = findProgrammaticRouteFilesInDir(srcRoot);\n        if (routeFiles.length === 0) return;\n        const { getProgrammaticRouteManifest } = await import(\"../routes\");\n\n        for (const routeFile of routeFiles) {\n          try {\n            const routesModule = await server.ssrLoadModule(\n              toViteModuleId(routeFile, server.config.root),\n            );\n            const manifest = getProgrammaticRouteManifest(routesModule);\n            if (!manifest) continue;\n\n            for (const definition of manifest.routes) {\n              if (definition.kind !== \"api\") continue;\n\n              for (const [method, endpoint] of Object.entries(definition.methods)) {\n                if (endpoint) {\n                  addEndpoint(definition.path, routeFile, method, endpoint);\n                  log(`Programmatic route discovered: ${method} ${definition.path}`);\n                }\n              }\n            }\n          } catch (e: any) {\n            if (e instanceof APIRouteConflictError || e instanceof AmbiguousRouteError) throw e;\n            log(`Programmatic routes file load failed at ${routeFile}: ${e.message}`);\n          }\n        }\n      };\n\n      // Initialize discovery\n      const initializeDiscovery = async () => {\n        const path = await import(\"path\");\n        const apiDir = path.join(server.config.root, srcDir, \"api\");\n        log(`Discovering API routes in: ${apiDir}`);\n\n        await discoverFileRoutes(apiDir);\n        await discoverRootRoutes();\n        await discoverProgrammaticRoutes();\n        await createRouter();\n\n        discoveryComplete = true;\n        log(`API discovery complete: ${apiRoutesCache.size} routes found`);\n      };\n\n      discoveryPromise = initializeDiscovery().catch((e) => {\n        discoveryError = e;\n        console.error(\"[FARM] API discovery error:\", e);\n      });\n\n      const waitForDiscovery = async () => {\n        await discoveryPromise;\n        if (discoveryError) throw discoveryError;\n      };\n\n      recoverFailedDiscovery = async (): Promise<boolean> => {\n        if (!discoveryError) return false;\n\n        const previousState = snapshotRouteState();\n        try {\n          await initializeDiscovery();\n          discoveryError = undefined;\n          discoveryPromise = Promise.resolve();\n        } catch (error) {\n          restoreRouteState(previousState);\n          discoveryError = error;\n          discoveryComplete = false;\n          discoveryPromise = Promise.resolve();\n          throw error;\n        }\n\n        return true;\n      };\n\n      // Expose API router for other plugins\n      (server as any).__farmApi__ = {\n        getHandler: () => apiRouterHandler,\n        getRoutes: () => apiRoutesCache,\n        isReady: () => discoveryComplete,\n        waitForDiscovery,\n      };\n\n      // Add middleware to handle API requests\n      return () => {\n        const apiMiddleware = _withAfterNodeMiddleware(async (req, res, next) => {\n          const url = req.url || \"/\";\n          const pathname = url.split(\"?\")[0];\n          const method = req.method || \"GET\";\n\n          if (discoveryPromise) await waitForDiscovery();\n\n          if (!matchAPIRouteAtBasePath(apiRoutesCache, pathname, basePath)) {\n            return next();\n          }\n\n          if (!apiRouterHandler) {\n            return next();\n          }\n\n          const startTime = Date.now();\n\n          try {\n            // Execute middleware if available\n            const farmMiddleware = (server as any).__farmMiddleware__;\n            if (farmMiddleware) {\n              await farmMiddleware.waitForDiscovery?.();\n              const middlewareData = new Map<string, any>();\n              const handled = await farmMiddleware.execute(req, res, pathname, middlewareData);\n              if (handled) {\n                const duration = Date.now() - startTime;\n                logResponse(method, pathname, res.statusCode || 200, duration);\n                return;\n              }\n            }\n\n            // ctx.rewrite() mutates req.url; dispatch from the current\n            // value so dev matches production, where the rewritten request\n            // reaches the API router.\n            const currentUrl = req.url || url;\n            const currentPathname = currentUrl.split(\"?\")[0];\n            if (\n              currentPathname !== pathname &&\n              !matchAPIRouteAtBasePath(apiRoutesCache, currentPathname, basePath)\n            ) {\n              // Rewritten off the API surface; let the page pipeline serve it.\n              return next();\n            }\n\n            // Convert Node request to Web Request\n            const fullUrl = `http://${req.headers.host || \"localhost:3000\"}${currentUrl}`;\n            const headers = new Headers();\n            for (const [key, value] of Object.entries(req.headers)) {\n              if (value) {\n                headers.set(key, Array.isArray(value) ? value.join(\", \") : value);\n              }\n            }\n\n            let body: Buffer | undefined;\n            if (method !== \"GET\" && method !== \"HEAD\") {\n              body = await readNodeRequestBody(req as any, bodySizeLimit);\n            }\n\n            const request = new Request(fullUrl, {\n              method,\n              headers,\n              body: body\n                ? (body.buffer.slice(\n                    body.byteOffset,\n                    body.byteOffset + body.byteLength,\n                  ) as ArrayBuffer)\n                : undefined,\n            });\n\n            const response = await apiRouterHandler(request);\n\n            const duration = Date.now() - startTime;\n            logResponse(method, currentPathname, response.status, duration);\n\n            await sendWebResponse(res, response);\n          } catch (error: any) {\n            const bodyErrorResponse = createFarmRequestBodyErrorResponse(error);\n            if (bodyErrorResponse) {\n              await sendWebResponse(res, bodyErrorResponse);\n              return;\n            }\n            const duration = Date.now() - startTime;\n            logResponse(method, pathname, 500, duration);\n            console.error(\"[FARM] API error:\", error);\n            res.statusCode = 500;\n            res.setHeader(\"Content-Type\", \"application/json\");\n            res.end(JSON.stringify({ error: \"Internal server error\" }));\n          }\n        });\n        server.middlewares.use((req, res, next) => {\n          const result = _runWithAPIRequestRuntime(\n            {\n              basePath: basePath ?? \"/api\",\n              dispatch: async (request) =>\n                apiRouterHandler\n                  ? apiRouterHandler(request)\n                  : Response.json({ error: \"Not Found\" }, { status: 404 }),\n            },\n            () => apiMiddleware(req, res, next),\n          );\n          return Promise.resolve(result).catch((error) => {\n            console.error(\n              `[FARM] Unhandled API error while handling ${req.method || \"GET\"} ${req.url || \"/\"}:`,\n              error,\n            );\n            if (res.writableEnded) return;\n            if (res.headersSent) {\n              res.destroy?.(error instanceof Error ? error : new Error(String(error)));\n              return;\n            }\n            res.statusCode = 500;\n            res.setHeader(\"Content-Type\", \"application/json\");\n            res.end(JSON.stringify({ error: \"Internal server error\" }));\n          });\n        });\n      };\n    },\n\n    async handleHotUpdate({ file, server, modules }) {\n      const normalizedFile = toPosixPath(file);\n      const fileName = normalizedFile.split(\"/\").pop() || \"\";\n\n      // Handle root routes.ts updates\n      if (\n        fileName === \"routes.ts\" ||\n        fileName === \"routes.tsx\" ||\n        fileName === \"routes.js\" ||\n        isProgrammaticRoutesFileName(fileName)\n      ) {\n        log(`Root routes file updated: ${fileName}`);\n\n        for (const mod of modules) {\n          server.moduleGraph.invalidateModule(mod);\n        }\n\n        if (await recoverFailedDiscovery?.()) return [];\n\n        const previousState = snapshotRouteState();\n\n        try {\n          const routesModule = await server.ssrLoadModule(file);\n          removeEndpointsFromFile(file);\n\n          for (const [exportName, exportValue] of Object.entries(routesModule)) {\n            const endpoint = exportValue as any;\n\n            if (endpoint && endpoint.__path) {\n              const routePath = endpoint.__path;\n              const method = String(endpoint.__method || \"GET\").toUpperCase();\n\n              addEndpoint(routePath, file, method, endpoint);\n              log(`Root route reloaded: ${method} ${routePath}`);\n            }\n          }\n\n          const { getProgrammaticRouteManifest } = await import(\"../routes\");\n          const manifest = getProgrammaticRouteManifest(routesModule);\n          if (manifest) {\n            for (const definition of manifest.routes) {\n              if (definition.kind !== \"api\") continue;\n\n              for (const [method, endpoint] of Object.entries(definition.methods)) {\n                if (endpoint) {\n                  addEndpoint(definition.path, file, method, endpoint);\n                  log(`Programmatic route reloaded: ${method} ${definition.path}`);\n                }\n              }\n            }\n          }\n\n          await createRouter();\n          log(`API router recreated`);\n        } catch (e: any) {\n          restoreRouteState(previousState);\n          if (e instanceof APIRouteConflictError || e instanceof AmbiguousRouteError) throw e;\n          log(`Root routes.ts HMR failed: ${e.message}`);\n        }\n\n        return [];\n      }\n\n      // Handle file-based route updates\n      if (normalizedFile.includes(\"/api/\") && fileName.startsWith(\"route.\")) {\n        const shortPath = normalizedFile.split(\"/api/\")[1] || normalizedFile;\n        log(`API route updated: ${shortPath}`);\n\n        for (const mod of modules) {\n          server.moduleGraph.invalidateModule(mod);\n        }\n\n        if (await recoverFailedDiscovery?.()) return [];\n\n        const previousState = snapshotRouteState();\n        try {\n          const path = await import(\"path\");\n          const apiDir = path.join(server.config.root, srcDir, \"api\");\n          const relativePath = path.relative(apiDir, path.dirname(file));\n          const routePath =\n            \"/api/\" + (relativePath === \".\" ? \"\" : relativePath.replace(/\\\\/g, \"/\"));\n          const fs = await import(\"fs\");\n          if (!fs.existsSync(file)) {\n            removeEndpointsFromFile(file);\n            await createRouter();\n            log(`API route file removed: ${routePath}`);\n            return [];\n          }\n          const routeModule = await server.ssrLoadModule(file);\n\n          removeEndpointsFromFile(file);\n          const availableMethods: string[] = [];\n          for (const method of API_ROUTE_METHODS) {\n            if (!routeModule[method]) continue;\n            availableMethods.push(method);\n            addEndpoint(routePath, file, method, routeModule[method]);\n          }\n\n          await createRouter();\n          log(`API route reloaded: ${availableMethods.join(\", \")} ${routePath}`);\n          log(`API router recreated`);\n        } catch (e: any) {\n          restoreRouteState(previousState);\n          if (e instanceof APIRouteConflictError || e instanceof AmbiguousRouteError) throw e;\n          log(`API route HMR failed: ${e.message}`);\n        }\n\n        return [];\n      }\n    },\n  };\n}\n","export { OpenAPIGenerator } from \"./generator\";\nexport { OpenAPIManager } from \"./manager\";\nexport { ScalarAPIDocumentation } from \"./scalar-component\";\nexport { DocsRoute } from \"./docs-route\";\nexport type { OpenAPISpec } from \"./generator\";\n","import React from \"react\";\n\ninterface ScalarAPIDocumentationProps {\n  spec: any;\n  config?: {\n    theme?: \"default\" | \"purple\" | \"blue\" | \"green\" | \"red\" | \"yellow\";\n    layout?: \"modern\" | \"classic\";\n    showSidebar?: boolean;\n    hideDownloadButton?: boolean;\n    hideTryItPanel?: boolean;\n  };\n}\n\nexport function ScalarAPIDocumentation({ spec, config = {} }: ScalarAPIDocumentationProps) {\n  const [isLoaded, setIsLoaded] = React.useState(false);\n\n  React.useEffect(() => {\n    // Dynamically import Scalar components\n    const loadScalar = async () => {\n      try {\n        // Load Scalar CSS\n        const cssLink = document.createElement(\"link\");\n        cssLink.rel = \"stylesheet\";\n        cssLink.href = \"https://cdn.jsdelivr.net/npm/@scalar/api-reference@latest/dist/style.css\";\n        document.head.appendChild(cssLink);\n\n        // Load Scalar JS\n        const script = document.createElement(\"script\");\n        script.src =\n          \"https://cdn.jsdelivr.net/npm/@scalar/api-reference@latest/dist/browser/standalone.js\";\n        script.onload = () => setIsLoaded(true);\n        document.head.appendChild(script);\n      } catch (error) {\n        console.error(\"Failed to load Scalar:\", error);\n      }\n    };\n\n    loadScalar();\n  }, []);\n\n  React.useEffect(() => {\n    if (isLoaded && window.ScalarApiReference) {\n      // Initialize Scalar\n      const container = document.getElementById(\"scalar-api-reference\");\n      if (container) {\n        window.ScalarApiReference({\n          spec,\n          theme: config.theme || \"default\",\n          layout: config.layout || \"modern\",\n          showSidebar: config.showSidebar !== false,\n          hideDownloadButton: config.hideDownloadButton || false,\n          hideTryItPanel: config.hideTryItPanel || false,\n        });\n      }\n    }\n  }, [isLoaded, spec, config]);\n\n  return (\n    <div className=\"scalar-container\">\n      <div id=\"scalar-api-reference\" style={{ height: \"100vh\", width: \"100%\" }} />\n    </div>\n  );\n}\n\n// Extend window type for Scalar\ndeclare global {\n  interface Window {\n    ScalarApiReference: (config: any) => void;\n  }\n}\n","import React from \"react\";\nimport { ScalarAPIDocumentation } from \"./scalar-component\";\n\ninterface DocsRouteProps {\n  spec: any;\n  config?: any;\n}\n\nexport function DocsRoute({ spec, config }: DocsRouteProps) {\n  return (\n    <html lang=\"en\">\n      <head>\n        <meta charSet=\"utf-8\" />\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n        <link rel=\"icon\" href=\"data:,\" />\n        <title>{config?.title || \"API Documentation\"}</title>\n        <style>{`\n          body {\n            margin: 0;\n            padding: 0;\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;\n          }\n          .scalar-container {\n            height: 100vh;\n            width: 100%;\n          }\n        `}</style>\n      </head>\n      <body>\n        <ScalarAPIDocumentation spec={spec} config={config} />\n      </body>\n    </html>\n  );\n}\n","/**\n * Farm.js Query State Parsers\n *\n * Shared parsers that can be used in both client and server contexts\n */\n\nexport interface Parser<T> {\n  parse: (value: string) => T | null;\n  serialize: (value: T) => string;\n  withDefault?: (defaultValue: T) => Parser<T>;\n}\n\nconst INTEGER_PATTERN = /^[+-]?\\d+$/;\nconst FLOAT_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/;\nconst ISO_DATE_PATTERN = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst ISO_DATE_TIME_PATTERN =\n  /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/;\n\nfunction parseInteger(value: string): number | null {\n  if (!INTEGER_PATTERN.test(value)) return null;\n  const parsed = Number(value);\n  return Number.isSafeInteger(parsed) ? parsed : null;\n}\n\nfunction parseFloatValue(value: string): number | null {\n  if (!FLOAT_PATTERN.test(value)) return null;\n  const parsed = Number(value);\n  return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction isValidCalendarDate(year: number, month: number, day: number): boolean {\n  if (month < 1 || month > 12 || day < 1) return false;\n  const leapYear = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n  const daysInMonth = [31, leapYear ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n  return day <= daysInMonth[month - 1];\n}\n\nfunction parseIsoDate(value: string): Date | null {\n  const match = value.match(ISO_DATE_PATTERN);\n  if (!match) return null;\n\n  const year = Number(match[1]);\n  const month = Number(match[2]);\n  const day = Number(match[3]);\n  if (!isValidCalendarDate(year, month, day)) return null;\n\n  const date = new Date(0);\n  date.setUTCHours(0, 0, 0, 0);\n  date.setUTCFullYear(year, month - 1, day);\n  return date;\n}\n\nfunction parseIsoDateTime(value: string): Date | null {\n  const match = value.match(ISO_DATE_TIME_PATTERN);\n  if (!match) return null;\n\n  const year = Number(match[1]);\n  const month = Number(match[2]);\n  const day = Number(match[3]);\n  const hour = Number(match[4]);\n  const minute = Number(match[5]);\n  const second = Number(match[6]);\n  const timezone = match[7];\n  if (!isValidCalendarDate(year, month, day) || hour > 23 || minute > 59 || second > 59) {\n    return null;\n  }\n\n  if (timezone !== \"Z\") {\n    const [offsetHour, offsetMinute] = timezone.slice(1).split(\":\").map(Number);\n    if (offsetHour > 23 || offsetMinute > 59) return null;\n  }\n\n  const date = new Date(value);\n  return Number.isFinite(date.getTime()) ? date : null;\n}\n\n// String parser\nexport const asString: Parser<string> = {\n  parse: (value: string) => (value && value.trim()) || null,\n  serialize: (value: string) => value,\n  withDefault: (defaultValue: string) => ({\n    parse: (value: string) => (value && value.trim()) || defaultValue,\n    serialize: (value: string) => value || defaultValue,\n  }),\n};\n\n// Integer parser\nexport const asInteger: Parser<number> = {\n  parse: parseInteger,\n  serialize: (value: number) => value.toString(),\n  withDefault: (defaultValue: number) => ({\n    parse: (value: string) => parseInteger(value) ?? defaultValue,\n    serialize: (value: number) => value.toString(),\n  }),\n};\n\n// Float parser\nexport const asFloat: Parser<number> = {\n  parse: parseFloatValue,\n  serialize: (value: number) => value.toString(),\n  withDefault: (defaultValue: number) => ({\n    parse: (value: string) => parseFloatValue(value) ?? defaultValue,\n    serialize: (value: number) => value.toString(),\n  }),\n};\n\n// Boolean parser\nexport const asBoolean: Parser<boolean> = {\n  parse: (value: string) => {\n    if (value === \"true\") return true;\n    if (value === \"false\") return false;\n    return null;\n  },\n  serialize: (value: boolean) => value.toString(),\n  withDefault: (defaultValue: boolean) => ({\n    parse: (value: string) => {\n      if (value === \"true\") return true;\n      if (value === \"false\") return false;\n      return defaultValue;\n    },\n    serialize: (value: boolean) => value.toString(),\n  }),\n};\n\n// Array parser\nconst STRUCTURED_ARRAY_PREFIX = \"~farm-array:v1:\";\nexport interface ArrayParserOptions {\n  /** Preserve comma URLs by default; opt in when item delimiters must round-trip. */\n  format?: \"comma\" | \"structured\";\n}\n\nfunction parseArrayItems(value: string, structured: boolean): string[] {\n  if (structured && value.startsWith(STRUCTURED_ARRAY_PREFIX)) {\n    try {\n      const parsed = JSON.parse(value.slice(STRUCTURED_ARRAY_PREFIX.length));\n      if (Array.isArray(parsed) && parsed.every((item) => typeof item === \"string\")) {\n        return parsed;\n      }\n    } catch {\n      // Keep accepting legacy values that happen to begin with the prefix.\n    }\n  }\n\n  return value\n    .split(\",\")\n    .filter(Boolean)\n    .map((item) => item.trim());\n}\n\nfunction serializeArrayItems(values: string[], structured: boolean): string {\n  if (!structured) return values.join(\",\");\n\n  const needsStructuredEncoding = values.some(\n    (value, index) =>\n      value === \"\" ||\n      value.trim() !== value ||\n      value.includes(\",\") ||\n      (index === 0 && value.startsWith(STRUCTURED_ARRAY_PREFIX)),\n  );\n  return needsStructuredEncoding\n    ? `${STRUCTURED_ARRAY_PREFIX}${JSON.stringify(values)}`\n    : values.join(\",\");\n}\n\nexport function asArrayOf<T>(itemParser: Parser<T>, options: ArrayParserOptions = {}): Parser<T[]> {\n  const structured = options.format === \"structured\";\n  const parse = (value: string): T[] | null => {\n    if (!value) return null;\n    return parseArrayItems(value, structured)\n      .map((item) => itemParser.parse(item))\n      .filter((item) => item !== null) as T[];\n  };\n  const serialize = (value: T[]) =>\n    serializeArrayItems(\n      value.map((item) => itemParser.serialize(item)),\n      structured,\n    );\n\n  return {\n    parse,\n    serialize,\n    withDefault: (defaultValue: T[]) => ({\n      parse: (value: string) => parse(value) ?? defaultValue,\n      serialize,\n    }),\n  };\n}\n\n// JSON parser\nexport function asJson<T>(): Parser<T> {\n  return {\n    parse: (value: string) => {\n      try {\n        return JSON.parse(value);\n      } catch {\n        return null;\n      }\n    },\n    serialize: (value: T) => JSON.stringify(value),\n    withDefault: (defaultValue: T) => ({\n      parse: (value: string) => {\n        try {\n          return JSON.parse(value);\n        } catch {\n          return defaultValue;\n        }\n      },\n      serialize: (value: T) => JSON.stringify(value),\n    }),\n  };\n}\n\n// ISO Date parser\nexport const asIsoDate: Parser<Date> = {\n  parse: parseIsoDate,\n  serialize: (value: Date) => value.toISOString().slice(0, 10),\n  withDefault: (defaultValue: Date) => ({\n    parse: (value: string) => parseIsoDate(value) ?? defaultValue,\n    serialize: (value: Date) => value.toISOString().slice(0, 10),\n  }),\n};\n\n// ISO DateTime parser\nexport const asIsoDateTime: Parser<Date> = {\n  parse: parseIsoDateTime,\n  serialize: (value: Date) => value.toISOString(),\n  withDefault: (defaultValue: Date) => ({\n    parse: (value: string) => parseIsoDateTime(value) ?? defaultValue,\n    serialize: (value: Date) => value.toISOString(),\n  }),\n};\n\n// Custom parser creator\nexport function createParser<T>(config: {\n  parse: (value: string) => T | null;\n  serialize: (value: T) => string;\n}): Parser<T> {\n  return {\n    parse: config.parse,\n    serialize: config.serialize,\n    withDefault: (defaultValue: T) => ({\n      parse: (value: string) => config.parse(value) ?? defaultValue,\n      serialize: config.serialize,\n    }),\n  };\n}\n\n// Type inference helper\nexport type inferParserType<T> = T extends Parser<infer U> ? U : never;\n","import type { Parser } from \"./parsers\";\n\nexport type RouteParamsInput =\n  | Record<string, string | undefined>\n  | URLSearchParams\n  | Promise<Record<string, string | undefined> | URLSearchParams>;\n\nfunction normalizeParams(input: Record<string, string | undefined> | URLSearchParams) {\n  if (input instanceof URLSearchParams) {\n    const params: Record<string, string | undefined> = {};\n    input.forEach((value, key) => {\n      params[key] = value;\n    });\n    return params;\n  }\n  return input;\n}\n\nexport async function loadRouteParams<T extends Record<string, Parser<any>>>(\n  input: RouteParamsInput,\n  parsers: T,\n  options: { strict?: boolean } = {},\n): Promise<{ [K in keyof T]: ReturnType<T[K][\"parse\"]> }> {\n  const resolved = await Promise.resolve(input);\n  const params = normalizeParams(resolved);\n  const result = {} as { [K in keyof T]: ReturnType<T[K][\"parse\"]> };\n\n  for (const [key, parser] of Object.entries(parsers)) {\n    const raw = params[key] ?? \"\";\n    const parsed = parser.parse(raw);\n    if (parsed === null && options.strict) {\n      throw new Error(`Failed to parse route param \"${key}\" with value \"${raw}\"`);\n    }\n    result[key as keyof T] = parsed as ReturnType<T[typeof key][\"parse\"]>;\n  }\n\n  return result;\n}\n\nexport function parseRouteParams<T extends Record<string, Parser<any>>>(\n  input: Record<string, string | undefined> | URLSearchParams,\n  parsers: T,\n  options: { strict?: boolean } = {},\n): { [K in keyof T]: ReturnType<T[K][\"parse\"]> } {\n  const params = normalizeParams(input);\n  const result = {} as { [K in keyof T]: ReturnType<T[K][\"parse\"]> };\n\n  for (const [key, parser] of Object.entries(parsers)) {\n    const raw = params[key] ?? \"\";\n    const parsed = parser.parse(raw);\n    if (parsed === null && options.strict) {\n      throw new Error(`Failed to parse route param \"${key}\" with value \"${raw}\"`);\n    }\n    result[key as keyof T] = parsed as ReturnType<T[typeof key][\"parse\"]>;\n  }\n\n  return result;\n}\n","/**\n * Middleware Chain Builder\n */\n\nimport type {\n  MiddlewareChain,\n  MiddlewareFunction,\n  MiddlewareContext,\n  MiddlewareConfig,\n  RateLimitConfig,\n  RateLimitStorage,\n  RateLimitStatus,\n  RateLimitIncrementResult,\n  MemoryRateLimitStorageOptions,\n  MiddlewareResult,\n} from \"./types\";\n\nconst DEFAULT_MEMORY_RATE_LIMIT_ENTRIES = 100_000;\n\nexport class UnsupportedRateLimitStorageError extends TypeError {\n  constructor() {\n    super(\n      \"RateLimitStorage must implement atomic increment(key, windowMs). Legacy get/set adapters can lose increments under concurrency. Use memoryRateLimitStorage() for one process or redisRateLimitStorage() from @farm.js/cache-redis for production.\",\n    );\n    this.name = \"UnsupportedRateLimitStorageError\";\n  }\n}\n\n/** Create an atomic, process-local fixed-window rate-limit store. */\nexport function memoryRateLimitStorage(\n  options: MemoryRateLimitStorageOptions = {},\n): RateLimitStorage {\n  const maxEntries = options.maxEntries ?? DEFAULT_MEMORY_RATE_LIMIT_ENTRIES;\n  if (!Number.isSafeInteger(maxEntries) || maxEntries <= 0) {\n    throw new TypeError(\"memoryRateLimitStorage maxEntries must be a positive safe integer.\");\n  }\n\n  const records = new Map<string, RateLimitIncrementResult>();\n\n  function read(key: string, now: number): RateLimitIncrementResult | null {\n    const record = records.get(key);\n    if (!record) return null;\n    if (record.resetAt <= now) {\n      records.delete(key);\n      return null;\n    }\n    return record;\n  }\n\n  function pruneExpired(now: number): void {\n    for (const [key, record] of records) {\n      if (record.resetAt <= now) records.delete(key);\n    }\n  }\n\n  return {\n    increment(key, windowMs) {\n      if (!Number.isSafeInteger(windowMs) || windowMs <= 0) {\n        throw new TypeError(\"Rate-limit windowMs must be a positive safe integer.\");\n      }\n      const now = Date.now();\n      const current = read(key, now);\n      if (current) {\n        const next = { count: current.count + 1, resetAt: current.resetAt };\n        records.set(key, next);\n        return next;\n      }\n\n      if (records.size >= maxEntries) pruneExpired(now);\n      if (records.size >= maxEntries) {\n        throw new Error(\n          `Process-local rate-limit storage reached its ${maxEntries} active-key capacity. Configure a shared production adapter or increase maxEntries.`,\n        );\n      }\n\n      const next = { count: 1, resetAt: now + windowMs };\n      records.set(key, next);\n      return next;\n    },\n    get(key) {\n      const record = read(key, Date.now());\n      return record ? { ...record } : null;\n    },\n  };\n}\n\nconst defaultRateLimitStorage = memoryRateLimitStorage();\n\nfunction parseTimeWindow(window: string): number {\n  const match = window.match(/^(\\d+)(ms|s|m|h|d)$/);\n  if (!match) throw new Error(`Invalid time window: ${window}`);\n\n  const [, amount, unit] = match;\n  const value = Number.parseInt(amount, 10);\n\n  const multipliers: Record<string, number> = {\n    ms: 1,\n    s: 1000,\n    m: 60 * 1000,\n    h: 60 * 60 * 1000,\n    d: 24 * 60 * 60 * 1000,\n  };\n\n  const windowMs = value * multipliers[unit];\n  if (!Number.isSafeInteger(windowMs) || windowMs <= 0) {\n    throw new Error(`Invalid time window: ${window}`);\n  }\n  return windowMs;\n}\n\nfunction createRateLimitMiddleware(config: RateLimitConfig): MiddlewareFunction {\n  if (!Number.isSafeInteger(config.requests) || config.requests <= 0) {\n    throw new TypeError(\"Rate limit requests must be a positive safe integer.\");\n  }\n  const windowMs = parseTimeWindow(config.window);\n  const storage = config.storage || defaultRateLimitStorage;\n  assertAtomicRateLimitStorage(storage);\n\n  return async (ctx: MiddlewareContext, next) => {\n    const key = config.keyGenerator\n      ? config.keyGenerator(ctx)\n      : `${ctx.request.socket.remoteAddress}:${ctx.pathname}`;\n\n    const current = await storage.increment(key, windowMs);\n    assertRateLimitIncrementResult(current);\n    const now = Date.now();\n    const resetIn = Math.max(1, Math.ceil((current.resetAt - now) / 1000));\n    const remaining = Math.max(0, config.requests - current.count);\n    setRateLimitHeaders(ctx, config.requests, remaining, resetIn, Math.ceil(windowMs / 1000));\n\n    if (current.count > config.requests) {\n      setMiddlewareResponseHeader(ctx, \"Retry-After\", String(resetIn));\n      if (config.onLimit) {\n        const result = await config.onLimit(ctx);\n        if (result) return result;\n      }\n\n      ctx.json(\n        {\n          error: \"Rate limit exceeded\",\n          retryAfter: resetIn,\n        },\n        429,\n      );\n      return;\n    }\n\n    return next();\n  };\n}\n\nfunction assertAtomicRateLimitStorage(storage: RateLimitStorage): void {\n  if (!storage || typeof storage.increment !== \"function\") {\n    throw new UnsupportedRateLimitStorageError();\n  }\n}\n\nfunction assertRateLimitIncrementResult(\n  result: RateLimitIncrementResult,\n): asserts result is RateLimitIncrementResult {\n  if (\n    !result ||\n    !Number.isSafeInteger(result.count) ||\n    result.count <= 0 ||\n    !Number.isFinite(result.resetAt) ||\n    result.resetAt <= 0\n  ) {\n    throw new TypeError(\n      \"RateLimitStorage.increment() must return a positive integer count and a resetAt timestamp.\",\n    );\n  }\n}\n\nfunction setRateLimitHeaders(\n  ctx: MiddlewareContext,\n  limit: number,\n  remaining: number,\n  resetIn: number,\n  windowSeconds: number,\n): void {\n  setMiddlewareResponseHeader(ctx, \"RateLimit-Policy\", `\"farm\";q=${limit};w=${windowSeconds}`);\n  setMiddlewareResponseHeader(ctx, \"RateLimit\", `\"farm\";r=${remaining};t=${resetIn}`);\n}\n\nfunction setMiddlewareResponseHeader(ctx: MiddlewareContext, name: string, value: string): void {\n  ctx.headers.set(name, value);\n  if (!ctx.response.headersSent && !ctx.response.writableEnded) {\n    ctx.response.setHeader(name, value);\n  }\n}\n\nfunction matchPattern(pattern: string | RegExp, pathname: string): boolean {\n  if (pattern instanceof RegExp) {\n    return pattern.test(pathname);\n  }\n\n  // Protect glob stars, escape every regex metacharacter, then restore the\n  // globs — otherwise \"/promo.html\" also matches \"/promoXhtml\" and a pattern\n  // containing \"(\" throws at request time.\n  const regexPattern = pattern\n    .replace(/\\*\\*/g, \"__DOUBLE_STAR__\")\n    .replace(/\\*/g, \"__SINGLE_STAR__\")\n    .replace(/[.+?^${}()|[\\]\\\\/]/g, \"\\\\$&\")\n    .replace(/__DOUBLE_STAR__/g, \".*\")\n    .replace(/__SINGLE_STAR__/g, \"[^/]+\");\n\n  const regex = new RegExp(`^${regexPattern}$`);\n  return regex.test(pathname);\n}\n\nclass MiddlewareChainImpl implements MiddlewareChain {\n  private handlers: MiddlewareFunction[] = [];\n  public config?: MiddlewareConfig;\n  private basePath: string;\n\n  constructor(basePath = \"/\") {\n    this.basePath =\n      basePath === \"/\" ? \"/\" : basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n  }\n\n  /**\n   * Set the base path for this middleware chain (called by manager when loading)\n   */\n  setBasePath(path: string): void {\n    this.basePath = path === \"/\" ? \"/\" : path.endsWith(\"/\") ? path.slice(0, -1) : path;\n  }\n\n  use(fn: MiddlewareFunction): MiddlewareChain {\n    this.handlers.push(fn);\n    return this;\n  }\n\n  /**\n   * Normalize a path pattern - auto-scope to middleware route\n   * If middleware is in /contact, then \"/api\" becomes \"/contact/api\"\n   */\n  private normalizePattern(pattern: string): string {\n    // If we're at root middleware, use pattern as-is\n    if (this.basePath === \"/\") {\n      // Ensure it starts with /\n      return pattern.startsWith(\"/\") ? pattern : `/${pattern}`;\n    }\n\n    // For route-specific middleware, always scope the pattern\n    // Remove leading / from pattern if present, then join with basePath\n    const cleanPattern = pattern.startsWith(\"/\") ? pattern.slice(1) : pattern;\n    return `${this.basePath}/${cleanPattern}`;\n  }\n\n  /**\n   * Conditionally run middleware based on a condition.\n   * Only supports boolean values or functions that evaluate to boolean.\n   * Route-based string matching has been removed - use function conditions instead.\n   *\n   * @example\n   * .when(true, (ctx, next) => { ... })  // Always run\n   * .when((ctx) => ctx.data.get('flag'), (ctx, next) => { ... })  // Conditional\n   * .when((ctx) => ctx.pathname === '/contact', (ctx, next) => { ... })  // Path-based condition\n   */\n  when(\n    condition: boolean | ((ctx: MiddlewareContext) => boolean),\n    fn: MiddlewareFunction | ((chain: MiddlewareChain) => void),\n  ): MiddlewareChain {\n    const conditionalMiddleware: MiddlewareFunction = async (ctx, next) => {\n      // Evaluate condition - boolean or function\n      const shouldRun = typeof condition === \"function\" ? condition(ctx) : condition;\n\n      if (!shouldRun) {\n        return next();\n      }\n\n      if (typeof fn === \"function\" && fn.length === 2) {\n        return (fn as MiddlewareFunction)(ctx, next);\n      } else {\n        const subChain = middleware(this.basePath);\n        (fn as (chain: MiddlewareChain) => void)(subChain);\n        const { handlers } = subChain.build();\n\n        let index = 0;\n        let returnedResponse: Response | undefined;\n        const executeNext = async (): Promise<MiddlewareResult> => {\n          if (index < handlers.length) {\n            const handler = handlers[index++];\n            const result = await handler(ctx, executeNext);\n            if (result instanceof Response) {\n              returnedResponse = result;\n              return result;\n            }\n          } else {\n            const result = await next();\n            if (result instanceof Response) {\n              returnedResponse = result;\n              return result;\n            }\n          }\n          return returnedResponse;\n        };\n\n        return executeNext();\n      }\n    };\n    this.handlers.push(conditionalMiddleware);\n    return this;\n  }\n\n  rateLimit(config: RateLimitConfig): MiddlewareChain {\n    this.handlers.push(createRateLimitMiddleware(config));\n    return this;\n  }\n\n  redirect(source: string, destination: string, permanent = false): MiddlewareChain {\n    const redirectMiddleware: MiddlewareFunction = async (ctx, next) => {\n      // Auto-scope source pattern to the middleware route\n      const normalizedSource = this.normalizePattern(source);\n      if (matchPattern(normalizedSource, ctx.pathname)) {\n        ctx.redirect(destination, permanent ? 308 : 307);\n        return;\n      }\n      return next();\n    };\n\n    this.handlers.push(redirectMiddleware);\n    return this;\n  }\n\n  /**\n   * Rewrite the current middleware route to a new destination.\n   * Since each middleware file is route-specific, the source is automatically\n   * the middleware's route, so you only need to specify the destination.\n   *\n   * @param destination - The destination path to rewrite to\n   * @param condition - Optional boolean or function that evaluates to boolean.\n   *                    If provided and evaluates to false, rewrite is skipped.\n   *                    If not provided, rewrite always happens.\n   *\n   * @example\n   * // In /contact/middleware.ts\n   * .rewrite('/about')  // Always rewrites /contact to /about\n   * .rewrite('/about', true)  // Always rewrites\n   * .rewrite('/about', false)  // Never rewrites\n   * .rewrite('/about', (ctx) => ctx.data.get('shouldRewrite'))  // Conditional rewrite\n   */\n  rewrite(\n    destination: string,\n    condition?: boolean | ((ctx: MiddlewareContext) => boolean),\n  ): MiddlewareChain {\n    const rewriteMiddleware: MiddlewareFunction = async (ctx, next) => {\n      // Check condition if provided\n      if (condition !== undefined) {\n        const shouldRewrite = typeof condition === \"function\" ? condition(ctx) : condition;\n        if (!shouldRewrite) {\n          return next();\n        }\n      }\n\n      // If this middleware is route-specific (not root)\n      if (this.basePath !== \"/\") {\n        // Rewrite when the pathname exactly matches this middleware's route\n        // This rewrites the entire route (e.g., /contact -> /about)\n        if (ctx.pathname === this.basePath) {\n          ctx.rewrite(destination);\n        }\n        // Also handle sub-routes: rewrite /contact/something to /destination/something\n        else if (ctx.pathname.startsWith(this.basePath + \"/\")) {\n          const subPath = ctx.pathname.slice(this.basePath.length);\n          const newPath = destination + subPath;\n          ctx.rewrite(newPath);\n        }\n      } else {\n        // For root middleware, this is less common\n        // Only rewrite if pathname matches exactly (edge case)\n        ctx.rewrite(destination);\n      }\n      return next();\n    };\n\n    this.handlers.push(rewriteMiddleware);\n    return this;\n  }\n\n  build() {\n    return {\n      handlers: this.handlers,\n      config: this.config,\n    };\n  }\n}\n\n/**\n * Get rate limit status for a key\n * @example\n * const status = await getRateLimitStatus('user:123', 100, storage);\n */\nexport async function getRateLimitStatus(\n  key: string,\n  limit: number,\n  storage: RateLimitStorage = defaultRateLimitStorage,\n): Promise<RateLimitStatus> {\n  if (!Number.isSafeInteger(limit) || limit <= 0) {\n    throw new TypeError(\"Rate limit must be a positive safe integer.\");\n  }\n  assertAtomicRateLimitStorage(storage);\n  if (typeof storage.get !== \"function\") {\n    throw new TypeError(\n      \"getRateLimitStatus() requires a RateLimitStorage adapter that implements get(key).\",\n    );\n  }\n  const record = await storage.get(key);\n\n  if (!record) {\n    return {\n      requests: 0,\n      limit,\n      remaining: limit,\n      resetIn: null,\n      resetAt: null,\n      isLimited: false,\n    };\n  }\n  assertRateLimitIncrementResult(record);\n\n  const now = Date.now();\n\n  if (record.resetAt && now > record.resetAt) {\n    return {\n      requests: 0,\n      limit,\n      remaining: limit,\n      resetIn: null,\n      resetAt: null,\n      isLimited: false,\n    };\n  }\n\n  const requests = record.count || 0;\n  const remaining = Math.max(0, limit - requests);\n  const isLimited = requests >= limit;\n\n  let resetIn: number | null = null;\n  let resetAt: Date | null = null;\n\n  if (record.resetAt) {\n    const remainingMs = record.resetAt - now;\n    resetIn = remainingMs > 0 ? Math.ceil(remainingMs / 1000) : null;\n    resetAt = new Date(record.resetAt);\n  }\n\n  return {\n    requests,\n    limit,\n    remaining,\n    resetIn,\n    resetAt,\n    isLimited,\n  };\n}\n\nexport function middleware(basePath = \"/\"): MiddlewareChain {\n  return new MiddlewareChainImpl(basePath);\n}\n","/**\n * Farm.js Middleware System\n *\n * Export public API\n */\n\nexport {\n  middleware,\n  getRateLimitStatus,\n  memoryRateLimitStorage,\n  UnsupportedRateLimitStorageError,\n} from \"./chain\";\nexport { createContext } from \"./context\";\nexport { MiddlewareManager } from \"./manager\";\nexport {\n  getMiddlewareContext,\n  getMiddlewareData,\n  getMiddlewareValue,\n  _runWithMiddlewareContext,\n  _runWithMiddlewareData,\n} from \"./server\";\nexport { unwrapMiddleware, getFromMiddleware, hasMiddlewareData } from \"./helpers\";\nexport {\n  createProductionMiddlewareRunner,\n  applyProductionMiddlewareHeaders,\n  matchesMiddlewareConfig,\n} from \"./production-runtime\";\nexport * from \"./vite-plugin\";\n\nexport type {\n  MiddlewareContext,\n  MiddlewareFunction,\n  RequestMiddleware,\n  RequestMiddlewareContext,\n  MiddlewareStore,\n  ReadonlyMiddlewareStore,\n  MiddlewareChain,\n  MiddlewareConfig,\n  CookieJar,\n  CookieOptions,\n  RateLimitConfig,\n  RateLimitIncrementResult,\n  RateLimitStorage,\n  RateLimitStatus,\n  MemoryRateLimitStorageOptions,\n  NextFunction,\n  MiddlewareResult,\n  FarmMiddlewareConfig,\n} from \"./types\";\n","/**\n * Middleware helper utilities for pages\n */\n\nimport type { MiddlewareProps } from \"../types\";\n\n/**\n * Unwrap middleware data from PageProps\n *\n * @example\n * ```tsx\n * export default async function Page(props: PageProps) {\n *   const { user, stats } = await unwrapMiddleware(props.middleware, {\n *     user: null,\n *     stats: { views: 0, clicks: 0 }\n *   });\n *\n *   return <div>Welcome {user?.name}</div>;\n * }\n * ```\n */\nexport function unwrapMiddleware<T extends Record<string, any>>(\n  middleware: MiddlewareProps | undefined,\n  defaults?: Partial<T>,\n): Partial<T> {\n  if (!middleware) {\n    return (defaults || {}) as Partial<T>;\n  }\n\n  const result: any = { ...defaults };\n\n  for (const [key, value] of middleware.data) {\n    result[key] = value;\n  }\n\n  return result as Partial<T>;\n}\n\n/**\n * Get a single value from middleware with a default\n *\n * @example\n * ```tsx\n * export default async function Page(props: PageProps) {\n *   const user = await getMiddlewareValue(props.middleware, 'user', null);\n *   return <div>Welcome {user?.name || 'Guest'}</div>;\n * }\n * ```\n */\nexport function getFromMiddleware<T = any>(\n  middleware: MiddlewareProps | undefined,\n  key: string,\n  defaultValue?: T,\n): T | undefined {\n  if (!middleware) {\n    return defaultValue;\n  }\n\n  const value = middleware.data.get(key);\n  return value !== undefined ? value : defaultValue;\n}\n\n/**\n * Check if middleware data exists\n */\nexport function hasMiddlewareData(middleware: MiddlewareProps | undefined): boolean {\n  if (!middleware) return false;\n  return middleware.data.size > 0;\n}\n","import type {\n  CookieJar,\n  CookieOptions,\n  FarmMiddlewareConfig,\n  MiddlewareConfig,\n  MiddlewareContext,\n  MiddlewareFunction,\n  MiddlewareMatcher,\n  MiddlewareModule,\n  MiddlewareResult,\n} from \"./types\";\nimport { emitFarmEvent } from \"../observability\";\nimport { decodeRouteSegment } from \"../utils/decode\";\nimport { normalizeMiddlewareModule } from \"./module\";\nimport { stripFarmLocaleFromPathname } from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport type { ResolvedFarmServerConfig } from \"../server-http\";\nimport {\n  parseMiddlewareCookieHeader,\n  serializeMiddlewareCookie as serializeCookie,\n  serializeMiddlewareCookieDeletion,\n} from \"./cookie-header\";\n\nexport interface ProductionMiddlewareModuleEntry {\n  path: string;\n  filePath?: string;\n  module: MiddlewareModule | Record<string, any>;\n}\n\nexport interface ProductionMiddlewareRunnerOptions {\n  config?: FarmMiddlewareConfig | null;\n  modules?: ProductionMiddlewareModuleEntry[];\n  i18n?: ResolvedFarmI18nConfig;\n  server?: Pick<ResolvedFarmServerConfig, \"trustProxy\">;\n}\n\nexport interface ProductionMiddlewareResult {\n  request: Request;\n  response: Response | null;\n  data: Map<string, any>;\n  context: Map<string, any>;\n  headers: Headers;\n  handled: boolean;\n}\n\ninterface ProductionMiddlewareEntry {\n  path: string;\n  filePath: string;\n  handlers: MiddlewareFunction[];\n  config?: MiddlewareConfig;\n  source: \"config\" | \"file\";\n}\n\ninterface WebMiddlewareContextState {\n  ctx: MiddlewareContext;\n  headers: WebResponseHeaderMap;\n  getRequest(): Request;\n  getResponse(): Response | null;\n}\n\ninterface WebResponseShimState {\n  response: Record<string, any>;\n  getResponse(method: string): Response | null;\n}\n\nconst FARM_SET_COOKIE_HEADERS = Symbol(\"farm.setCookieHeaders\");\n\ntype InternalMiddlewareParent = MiddlewareContext[\"parent\"] & {\n  [FARM_SET_COOKIE_HEADERS]?: string[];\n};\n\nclass WebResponseHeaderMap extends Map<string, string> {\n  private setCookies: string[] = [];\n\n  override set(key: string, value: string): this {\n    if (key.toLowerCase() === \"set-cookie\") {\n      this.setCookies = [value];\n      super.set(\"Set-Cookie\", value);\n      return this;\n    }\n    return super.set(key, value);\n  }\n\n  override delete(key: string): boolean {\n    if (key.toLowerCase() === \"set-cookie\") {\n      this.setCookies = [];\n      return super.delete(\"Set-Cookie\") || super.delete(\"set-cookie\");\n    }\n    return super.delete(key);\n  }\n\n  override clear(): void {\n    this.setCookies = [];\n    super.clear();\n  }\n\n  appendSetCookie(value: string): void {\n    this.setCookies.push(value);\n    super.set(\"Set-Cookie\", value);\n  }\n\n  replaceSetCookies(values: readonly string[]): void {\n    this.setCookies = [...values];\n    super.delete(\"Set-Cookie\");\n    super.delete(\"set-cookie\");\n    if (this.setCookies.length > 0) {\n      super.set(\"Set-Cookie\", this.setCookies[this.setCookies.length - 1]);\n    }\n  }\n\n  getSetCookies(): readonly string[] {\n    return this.setCookies;\n  }\n}\n\nclass WebCookieJar implements CookieJar {\n  private cookies: Record<string, string>;\n\n  constructor(\n    request: Request,\n    private headers: WebResponseHeaderMap,\n  ) {\n    this.cookies = parseMiddlewareCookieHeader(request.headers.get(\"cookie\"));\n  }\n\n  get(name: string): string | undefined {\n    return this.cookies[name];\n  }\n\n  set(name: string, value: string, options: CookieOptions = {}): void {\n    this.cookies[name] = value;\n    const cookieString = serializeCookie(name, value, options);\n    this.headers.appendSetCookie(cookieString);\n  }\n\n  delete(name: string, options: CookieOptions = {}): void {\n    delete this.cookies[name];\n    // Path and Domain must match the cookie that was set, or the tombstone\n    // addresses a different cookie and the original survives.\n    this.headers.appendSetCookie(serializeMiddlewareCookieDeletion(name, options));\n  }\n\n  getAll(): Record<string, string> {\n    return { ...this.cookies };\n  }\n}\n\nfunction mapToHeaders(map: WebResponseHeaderMap): Headers {\n  const headers = new Headers();\n  for (const [key, value] of map) {\n    if (key.toLowerCase() === \"set-cookie\") continue;\n    headers.set(key, value);\n  }\n  for (const cookie of map.getSetCookies()) {\n    headers.append(\"Set-Cookie\", cookie);\n  }\n  return headers;\n}\n\nfunction headersToRecord(headers: Map<string, string>): Record<string, string> {\n  return Object.fromEntries(headers);\n}\n\nfunction isMiddlewareResponse(value: unknown): value is Response {\n  return value instanceof Response;\n}\n\nfunction findHeaderName(headers: WebResponseHeaderMap, name: string): string | undefined {\n  const normalizedName = name.toLowerCase();\n  return [...headers.keys()].find((key) => key.toLowerCase() === normalizedName);\n}\n\nfunction createResponseShim(headers: WebResponseHeaderMap): WebResponseShimState {\n  const bodyChunks: Uint8Array[] = [];\n  const encoder = new TextEncoder();\n\n  const response = {\n    headersSent: false,\n    writableEnded: false,\n    statusCode: 200,\n    statusMessage: \"\",\n    setHeader(name: string, value: string | number | readonly string[]) {\n      const existingName = findHeaderName(headers, name);\n      if (existingName) headers.delete(existingName);\n      if (name.toLowerCase() === \"set-cookie\") {\n        headers.replaceSetCookies(Array.isArray(value) ? value.map(String) : [String(value)]);\n      } else {\n        headers.set(name, Array.isArray(value) ? value.join(\", \") : String(value));\n      }\n      return this;\n    },\n    getHeader(name: string) {\n      if (name.toLowerCase() === \"set-cookie\") {\n        const cookies = headers.getSetCookies();\n        return cookies.length > 0 ? [...cookies] : undefined;\n      }\n      const existingName = findHeaderName(headers, name);\n      return existingName ? headers.get(existingName) : undefined;\n    },\n    hasHeader(name: string) {\n      return name.toLowerCase() === \"set-cookie\"\n        ? headers.getSetCookies().length > 0\n        : findHeaderName(headers, name) !== undefined;\n    },\n    getHeaderNames() {\n      return [...headers.keys()].map((name) => name.toLowerCase());\n    },\n    getHeaders() {\n      return Object.fromEntries(\n        [...headers.keys()].map((name) => [name.toLowerCase(), this.getHeader(name)]),\n      );\n    },\n    removeHeader(name: string) {\n      const existingName = findHeaderName(headers, name);\n      if (existingName) headers.delete(existingName);\n    },\n    appendHeader(name: string, value: string | readonly string[]) {\n      const values = Array.isArray(value) ? value.map(String) : [String(value)];\n      if (name.toLowerCase() === \"set-cookie\") {\n        for (const item of values) headers.appendSetCookie(item);\n        return this;\n      }\n      const existing = this.getHeader(name);\n      return this.setHeader(name, existing ? `${String(existing)}, ${values.join(\", \")}` : values);\n    },\n    writeHead(\n      status: number,\n      statusMessageOrHeaders?: string | Record<string, string | number | readonly string[]>,\n      responseHeaders?: Record<string, string | number | readonly string[]>,\n    ) {\n      this.statusCode = status;\n      const nextHeaders =\n        typeof statusMessageOrHeaders === \"string\" ? responseHeaders : statusMessageOrHeaders;\n      if (typeof statusMessageOrHeaders === \"string\") {\n        this.statusMessage = statusMessageOrHeaders;\n      }\n      if (nextHeaders) {\n        for (const [key, value] of Object.entries(nextHeaders)) {\n          this.setHeader(key, value);\n        }\n      }\n      this.headersSent = true;\n      return this;\n    },\n    flushHeaders() {\n      this.headersSent = true;\n    },\n    write(\n      chunk: string | Uint8Array,\n      encodingOrCallback?: string | (() => void),\n      callback?: () => void,\n    ) {\n      bodyChunks.push(typeof chunk === \"string\" ? encoder.encode(chunk) : new Uint8Array(chunk));\n      this.headersSent = true;\n      const done = typeof encodingOrCallback === \"function\" ? encodingOrCallback : callback;\n      done?.();\n      return true;\n    },\n    end(\n      chunk?: string | Uint8Array | (() => void),\n      encodingOrCallback?: string | (() => void),\n      callback?: () => void,\n    ) {\n      if (typeof chunk === \"string\" || chunk instanceof Uint8Array) {\n        bodyChunks.push(typeof chunk === \"string\" ? encoder.encode(chunk) : new Uint8Array(chunk));\n      }\n      this.headersSent = true;\n      this.writableEnded = true;\n      const done =\n        typeof chunk === \"function\"\n          ? chunk\n          : typeof encodingOrCallback === \"function\"\n            ? encodingOrCallback\n            : callback;\n      done?.();\n      return this;\n    },\n  };\n\n  return {\n    response,\n    getResponse(method: string) {\n      if (!response.headersSent && !response.writableEnded) return null;\n\n      const bodyLength = bodyChunks.reduce((total, chunk) => total + chunk.byteLength, 0);\n      const body = new Uint8Array(bodyLength);\n      let offset = 0;\n      for (const chunk of bodyChunks) {\n        body.set(chunk, offset);\n        offset += chunk.byteLength;\n      }\n\n      const bodyAllowed =\n        method.toUpperCase() !== \"HEAD\" &&\n        response.statusCode !== 204 &&\n        response.statusCode !== 205 &&\n        response.statusCode !== 304;\n      return new Response(bodyAllowed && bodyLength > 0 ? body : null, {\n        status: response.statusCode,\n        statusText: response.statusMessage || undefined,\n        headers: mapToHeaders(headers),\n      });\n    },\n  };\n}\n\nfunction withNodeRequestShape(request: Request, trustProxy: boolean): Request {\n  const requestWithShape = request as Request & {\n    socket?: { remoteAddress?: string };\n  };\n\n  if (!requestWithShape.socket) {\n    const forwardedFor = trustProxy\n      ? request.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim()\n      : undefined;\n    try {\n      requestWithShape.socket = {\n        remoteAddress: forwardedFor || \"127.0.0.1\",\n      };\n    } catch {\n      // Some Request implementations may not be extensible.\n    }\n  }\n\n  return requestWithShape;\n}\n\nfunction createHandledResponse(\n  body: BodyInit | null,\n  init: ResponseInit,\n  headers: WebResponseHeaderMap,\n): Response {\n  const responseHeaders = new Headers();\n  for (const [key, value] of headers) {\n    if (key.toLowerCase() === \"set-cookie\") continue;\n    responseHeaders.set(key, value);\n  }\n  for (const [key, value] of new Headers(init.headers)) {\n    responseHeaders.set(key, value);\n  }\n  for (const cookie of headers.getSetCookies()) {\n    responseHeaders.append(\"Set-Cookie\", cookie);\n  }\n  return new Response(body, { ...init, headers: responseHeaders });\n}\n\nfunction createWebMiddlewareContext(\n  request: Request,\n  parent?: MiddlewareContext[\"parent\"],\n  trustProxy = false,\n): WebMiddlewareContextState {\n  let currentRequest = withNodeRequestShape(request, trustProxy);\n  let handledResponse: Response | null = null;\n  const url = new URL(currentRequest.url);\n  const data = parent?.data ? new Map(parent.data) : new Map<string, any>();\n  const locals = parent?.locals ? new Map(parent.locals) : new Map<string, any>();\n  const headers = new WebResponseHeaderMap();\n\n  if (parent?.headers) {\n    for (const [key, value] of Object.entries(parent.headers)) {\n      if (key.toLowerCase() === \"set-cookie\") continue;\n      headers.set(key, value);\n    }\n  }\n  const parentCookies = (parent as InternalMiddlewareParent | undefined)?.[FARM_SET_COOKIE_HEADERS];\n  if (parentCookies) headers.replaceSetCookies(parentCookies);\n  const responseShim = createResponseShim(headers);\n\n  const ctx = {\n    request: currentRequest as any,\n    response: responseShim.response as any,\n    url,\n    pathname: url.pathname,\n    searchParams: url.searchParams,\n    method: currentRequest.method || \"GET\",\n    params: {},\n    route: url.pathname,\n    parent,\n    vite: {\n      isDev: false,\n      hmr: false,\n    },\n    data,\n    locals,\n    headers,\n    cookies: new WebCookieJar(currentRequest, headers),\n    _handled: false as boolean,\n    _redirectUrl: undefined as string | undefined,\n    _rewriteUrl: undefined as string | undefined,\n\n    redirect(redirectUrl: string, status = 307): void {\n      ctx._redirectUrl = redirectUrl;\n      ctx._handled = true;\n      handledResponse = createHandledResponse(\n        `Redirecting to ${redirectUrl}`,\n        {\n          status,\n          headers: {\n            Location: redirectUrl,\n            \"Content-Type\": \"text/plain\",\n          },\n        },\n        headers,\n      );\n    },\n\n    rewrite(rewriteUrl: string): void {\n      ctx._rewriteUrl = rewriteUrl;\n      const nextUrl = new URL(rewriteUrl, currentRequest.url);\n      currentRequest = withNodeRequestShape(new Request(nextUrl, currentRequest), trustProxy);\n      ctx.request = currentRequest as any;\n      ctx.url = nextUrl;\n      ctx.pathname = nextUrl.pathname;\n      ctx.searchParams = nextUrl.searchParams;\n      ctx.route = nextUrl.pathname;\n    },\n\n    json(jsonData: any, status = 200): void {\n      ctx._handled = true;\n      handledResponse = createHandledResponse(\n        JSON.stringify(jsonData),\n        {\n          status,\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n        },\n        headers,\n      );\n    },\n\n    text(content: string, status = 200): void {\n      ctx._handled = true;\n      handledResponse = createHandledResponse(\n        content,\n        {\n          status,\n          headers: {\n            \"Content-Type\": \"text/plain\",\n          },\n        },\n        headers,\n      );\n    },\n\n    html(content: string, status = 200): void {\n      ctx._handled = true;\n      handledResponse = createHandledResponse(\n        content,\n        {\n          status,\n          headers: {\n            \"Content-Type\": \"text/html\",\n          },\n        },\n        headers,\n      );\n    },\n  } satisfies MiddlewareContext;\n\n  return {\n    ctx,\n    headers,\n    getRequest: () => currentRequest,\n    getResponse: () => handledResponse || responseShim.getResponse(currentRequest.method),\n  };\n}\n\nfunction toMatcherList(matcher: MiddlewareConfig[\"matcher\"]): MiddlewareMatcher[] {\n  if (!matcher) return [];\n  return Array.isArray(matcher) ? matcher : [matcher];\n}\n\nfunction escapeRegex(value: string): string {\n  return value.replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\");\n}\n\nfunction parseColonParam(segment: string): { name: string; modifier?: string } {\n  const raw = segment.slice(1);\n  const last = raw[raw.length - 1];\n  const modifier = last === \"*\" || last === \"+\" || last === \"?\" ? last : undefined;\n  return {\n    name: modifier ? raw.slice(0, -1) : raw,\n    modifier,\n  };\n}\n\nfunction compilePathPattern(pattern: string): { regex: RegExp; params: string[] } {\n  const params: string[] = [];\n  const segments = pattern.split(\"/\").filter(Boolean);\n\n  if (segments.length === 0) {\n    return { regex: /^\\/$/, params };\n  }\n\n  const parts = segments.map((segment) => {\n    if (segment === \"**\") {\n      return \"(?:/.*)?\";\n    }\n\n    if (segment === \"*\") {\n      return \"/[^/]+\";\n    }\n\n    if (segment.startsWith(\":\")) {\n      const { name, modifier } = parseColonParam(segment);\n      params.push(name);\n\n      if (modifier === \"*\") {\n        return \"(?:/(.*))?\";\n      }\n      if (modifier === \"+\") {\n        return \"/(.+)\";\n      }\n      return \"/([^/]+)\";\n    }\n\n    if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n      params.push(segment.slice(4, -1));\n      return \"(?:/(.*))?\";\n    }\n\n    if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n      params.push(segment.slice(1, -1));\n      return \"/([^/]+)\";\n    }\n\n    return `/${escapeRegex(segment).replace(/\\\\\\*/g, \"[^/]*\")}`;\n  });\n\n  return {\n    regex: new RegExp(`^${parts.join(\"\")}$`),\n    params,\n  };\n}\n\nfunction matchPattern(\n  pattern: string | RegExp,\n  pathname: string,\n): { matched: boolean; params?: Record<string, string> } {\n  if (pattern instanceof RegExp) {\n    pattern.lastIndex = 0;\n    const match = pattern.exec(pathname);\n    return {\n      matched: !!match,\n      params: match?.groups ? { ...match.groups } : undefined,\n    };\n  }\n\n  if (pattern === \"*\" || pattern === \"/(.*)\") {\n    return { matched: true };\n  }\n\n  if (pattern.endsWith(\"(.*)\")) {\n    // Strip a trailing slash before the wildcard so `/admin/(.*)` matches the\n    // `/admin` subtree like `/admin/**` does. Without this the prefix keeps its\n    // slash and the check becomes startsWith(\"/admin//\"), which no path\n    // satisfies, so the matcher silently matches nothing — an auth gate written\n    // that way would never run.\n    const prefix = pattern.slice(0, -4).replace(/\\/$/, \"\");\n    return { matched: pathname === prefix || pathname.startsWith(`${prefix}/`) };\n  }\n\n  const { regex, params } = compilePathPattern(pattern);\n  const match = regex.exec(pathname);\n  if (!match) {\n    return { matched: false };\n  }\n\n  const values: Record<string, string> = {};\n  params.forEach((param, index) => {\n    values[param] = decodeRouteSegment(match[index + 1] || \"\");\n  });\n\n  return {\n    matched: true,\n    params: Object.keys(values).length > 0 ? values : undefined,\n  };\n}\n\n/**\n * Decide whether a middleware entry's `export const config` applies to a path.\n *\n * Exported so the standalone dev plugin matches exactly what the production\n * runner does instead of maintaining a parallel implementation.\n */\nexport function matchesMiddlewareConfig(\n  pathname: string,\n  config: MiddlewareConfig,\n  ctx: MiddlewareContext,\n): { matched: boolean; params?: Record<string, string> } {\n  if (config.exclude) {\n    for (const pattern of config.exclude) {\n      if (matchPattern(pattern, pathname).matched) {\n        return { matched: false };\n      }\n    }\n  }\n\n  if (config.matcher) {\n    for (const matcher of toMatcherList(config.matcher)) {\n      if (typeof matcher === \"string\" || matcher instanceof RegExp) {\n        const result = matchPattern(matcher, pathname);\n        if (result.matched) {\n          return result;\n        }\n      } else if (typeof matcher === \"function\" && matcher(ctx)) {\n        return { matched: true };\n      }\n    }\n    return { matched: false };\n  }\n\n  return { matched: true };\n}\n\nfunction matchRoutePath(\n  pathname: string,\n  middlewarePath: string,\n): { matched: boolean; params?: Record<string, string> } {\n  if (middlewarePath === \"/\") return { matched: true };\n\n  const exactMatch = matchPattern(middlewarePath, pathname);\n  if (exactMatch.matched) {\n    return exactMatch;\n  }\n\n  const nestedMatch = matchPattern(`${middlewarePath}/:__farmRest*`, pathname);\n  if (!nestedMatch.matched) {\n    return { matched: false };\n  }\n\n  const params = { ...nestedMatch.params };\n  delete params.__farmRest;\n  return {\n    matched: true,\n    params: Object.keys(params).length > 0 ? params : undefined,\n  };\n}\n\nfunction getConfigHandlers(\n  entry: MiddlewareConfig & {\n    handler?: MiddlewareFunction;\n    handlers?: MiddlewareFunction[];\n  },\n): MiddlewareFunction[] {\n  const handlers: MiddlewareFunction[] = [];\n  if (\"handler\" in entry && typeof entry.handler === \"function\") {\n    handlers.push(entry.handler);\n  }\n  if (\"handlers\" in entry && Array.isArray(entry.handlers)) {\n    handlers.push(...entry.handlers.filter((handler) => typeof handler === \"function\"));\n  }\n  return handlers;\n}\n\nfunction toMiddlewareConfig(\n  entry: MiddlewareConfig & {\n    handler?: MiddlewareFunction;\n    handlers?: MiddlewareFunction[];\n  },\n): MiddlewareConfig {\n  const { matcher, exclude, runtime } = entry;\n  return { matcher, exclude, runtime };\n}\n\nfunction normalizeConfigMiddleware(config?: FarmMiddlewareConfig | null): {\n  entries: ProductionMiddlewareEntry[];\n  globalConfig?: MiddlewareConfig;\n} {\n  const entries: ProductionMiddlewareEntry[] = [];\n  let globalConfig: MiddlewareConfig | undefined;\n\n  if (!config) {\n    return { entries, globalConfig };\n  }\n\n  const configEntries = Array.isArray(config) ? config : [config];\n  for (const [index, entry] of configEntries.entries()) {\n    const handlers = getConfigHandlers(entry);\n    const middlewareConfig = toMiddlewareConfig(entry);\n\n    if (handlers.length === 0) {\n      globalConfig = middlewareConfig;\n      continue;\n    }\n\n    entries.push({\n      path: \"/\",\n      filePath: `farm.config.ts#middleware-${index}`,\n      handlers,\n      config: middlewareConfig,\n      source: \"config\",\n    });\n  }\n\n  return { entries, globalConfig };\n}\n\nfunction normalizeFileMiddleware(\n  modules: ProductionMiddlewareModuleEntry[] = [],\n): ProductionMiddlewareEntry[] {\n  const entries: ProductionMiddlewareEntry[] = [];\n\n  for (const moduleEntry of modules) {\n    const normalized = normalizeMiddlewareModule(moduleEntry.module, moduleEntry.path);\n    if (!normalized) {\n      continue;\n    }\n\n    entries.push({\n      path: moduleEntry.path,\n      filePath: moduleEntry.filePath || moduleEntry.path,\n      handlers: normalized.handlers,\n      config: normalized.config,\n      source: \"file\",\n    });\n  }\n\n  return entries;\n}\n\nasync function executeHandlers(\n  handlers: MiddlewareFunction[],\n  ctx: MiddlewareContext,\n): Promise<Response | undefined> {\n  let handlerIndex = 0;\n  let returnedResponse: Response | undefined;\n  const executeNext = async (): Promise<MiddlewareResult> => {\n    if (handlerIndex < handlers.length) {\n      const handler = handlers[handlerIndex++];\n      const result = await handler(ctx, executeNext);\n      if (isMiddlewareResponse(result)) {\n        returnedResponse = result;\n        return result;\n      }\n    }\n    return returnedResponse;\n  };\n\n  const result = await executeNext();\n  return isMiddlewareResponse(result) ? result : returnedResponse;\n}\n\nfunction emptyResult(request: Request): ProductionMiddlewareResult {\n  return {\n    request,\n    response: null,\n    data: new Map(),\n    context: new Map(),\n    headers: new Headers(),\n    handled: false,\n  };\n}\n\nexport function createProductionMiddlewareRunner(options: ProductionMiddlewareRunnerOptions = {}) {\n  const configMiddleware = normalizeConfigMiddleware(options.config);\n  const fileMiddleware = normalizeFileMiddleware(options.modules);\n  const entries = [...configMiddleware.entries, ...fileMiddleware];\n  const globalConfig = configMiddleware.globalConfig;\n\n  return async function runProductionMiddleware(\n    request: Request,\n  ): Promise<ProductionMiddlewareResult> {\n    if (!globalConfig && entries.length === 0) {\n      return emptyResult(request);\n    }\n\n    let contextState = createWebMiddlewareContext(\n      request,\n      undefined,\n      options.server?.trustProxy === true,\n    );\n    let ctx = contextState.ctx;\n    let currentRequest = contextState.getRequest();\n    const initialPathname = options.i18n?.enabled\n      ? stripFarmLocaleFromPathname(ctx.pathname, options.i18n)\n      : ctx.pathname;\n    let parentData: MiddlewareContext[\"parent\"] | undefined;\n\n    if (globalConfig) {\n      const globalMatch = matchesMiddlewareConfig(initialPathname, globalConfig, ctx);\n      if (!globalMatch.matched) {\n        return emptyResult(request);\n      }\n      if (globalMatch.params) {\n        ctx.params = { ...ctx.params, ...globalMatch.params };\n      }\n    }\n\n    const applicable = entries\n      .map((entry) => ({\n        entry,\n        routeMatch:\n          entry.source === \"config\"\n            ? { matched: true }\n            : matchRoutePath(initialPathname, entry.path),\n      }))\n      .filter((candidate) => candidate.routeMatch.matched);\n\n    if (applicable.length === 0) {\n      return {\n        request: currentRequest,\n        response: null,\n        data: new Map(ctx.data),\n        context: new Map(ctx.locals),\n        headers: mapToHeaders(contextState.headers),\n        handled: false,\n      };\n    }\n\n    for (const candidate of applicable) {\n      const { entry, routeMatch } = candidate;\n      const configMatch = entry.config\n        ? matchesMiddlewareConfig(initialPathname, entry.config, ctx)\n        : { matched: true };\n      if (!configMatch.matched) {\n        continue;\n      }\n\n      if (parentData) {\n        contextState = createWebMiddlewareContext(\n          currentRequest,\n          parentData,\n          options.server?.trustProxy === true,\n        );\n        ctx = contextState.ctx;\n      }\n\n      if (routeMatch.params) {\n        ctx.params = { ...ctx.params, ...routeMatch.params };\n      }\n      if (configMatch.params) {\n        ctx.params = { ...ctx.params, ...configMatch.params };\n      }\n\n      const middlewareStartTime = Date.now();\n      const middlewareEvent = {\n        route: entry.path,\n        pathname: initialPathname,\n        name: entry.filePath,\n      };\n      emitFarmEvent({ type: \"middleware.start\", ...middlewareEvent });\n\n      try {\n        const returnedResponse = await executeHandlers(entry.handlers, ctx);\n        currentRequest = contextState.getRequest();\n\n        if (returnedResponse) {\n          const response = applyProductionMiddlewareHeaders(\n            returnedResponse,\n            mapToHeaders(contextState.headers),\n          );\n          emitFarmEvent({\n            type: \"middleware.shortCircuit\",\n            ...middlewareEvent,\n            status: response.status,\n          });\n          return {\n            request: currentRequest,\n            response,\n            data: new Map(ctx.data),\n            context: new Map(ctx.locals),\n            headers: mapToHeaders(contextState.headers),\n            handled: true,\n          };\n        }\n\n        if (ctx._handled || ctx.response.headersSent || ctx.response.writableEnded) {\n          const response = contextState.getResponse() || new Response(null);\n          emitFarmEvent({\n            type: \"middleware.shortCircuit\",\n            ...middlewareEvent,\n            status: response.status,\n          });\n          return {\n            request: currentRequest,\n            response,\n            data: new Map(ctx.data),\n            context: new Map(ctx.locals),\n            headers: mapToHeaders(contextState.headers),\n            handled: true,\n          };\n        }\n\n        emitFarmEvent({\n          type: \"middleware.complete\",\n          ...middlewareEvent,\n          durationMs: Date.now() - middlewareStartTime,\n        });\n      } catch (error) {\n        emitFarmEvent({\n          type: \"middleware.error\",\n          ...middlewareEvent,\n          error,\n        });\n        throw error;\n      }\n\n      parentData = {\n        data: new Map(ctx.data),\n        locals: new Map(ctx.locals),\n        headers: headersToRecord(contextState.headers),\n        [FARM_SET_COOKIE_HEADERS]: [...contextState.headers.getSetCookies()],\n      } as InternalMiddlewareParent;\n    }\n\n    return {\n      request: currentRequest,\n      response: null,\n      data: new Map(ctx.data),\n      context: new Map(ctx.locals),\n      headers: mapToHeaders(contextState.headers),\n      handled: false,\n    };\n  };\n}\n\nexport function applyProductionMiddlewareHeaders(\n  response: Response,\n  middlewareHeaders?: Headers | null,\n): Response {\n  if (!middlewareHeaders || Array.from(middlewareHeaders.keys()).length === 0) {\n    return response;\n  }\n\n  const headers = new Headers(response.headers);\n  const getSetCookie = (middlewareHeaders as Headers & { getSetCookie?: () => string[] })\n    .getSetCookie;\n  const setCookies = getSetCookie\n    ? getSetCookie.call(middlewareHeaders)\n    : middlewareHeaders.get(\"set-cookie\")\n      ? [middlewareHeaders.get(\"set-cookie\")!]\n      : [];\n  for (const [key, value] of middlewareHeaders) {\n    if (key.toLowerCase() === \"set-cookie\") continue;\n    // A returned Response's headers are authoritative and preserved (matching\n    // the dev runtime, where the Response is applied after ctx.headers). ctx\n    // headers only add keys the Response did not already set.\n    if (headers.has(key)) continue;\n    headers.set(key, value);\n  }\n  for (const cookie of setCookies) {\n    headers.append(\"Set-Cookie\", cookie);\n  }\n\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n","/**\n * Standalone Vite middleware support used by Farm's RSC and API plugins.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { Plugin, ViteDevServer } from \"vite\";\nimport { MiddlewareManager } from \"./manager\";\n\nexport interface FarmMiddlewarePluginOptions {\n  /** Source directory (default: `src`). */\n  srcDir?: string;\n  /** Enable debug logging. */\n  debug?: boolean;\n}\n\nfunction getMiddlewareAppDirectory(root: string, srcDir: string): string {\n  const sourceDirectory = path.join(root, srcDir);\n  const appDirectory = path.join(sourceDirectory, \"app\");\n  return fs.existsSync(appDirectory) ? appDirectory : sourceDirectory;\n}\n\nexport function farmMiddlewarePlugin(options: FarmMiddlewarePluginOptions = {}): Plugin {\n  const srcDir = options.srcDir ?? \"src\";\n  let manager: MiddlewareManager | null = null;\n  let discoveryComplete = false;\n  let discoveryPromise: Promise<void> | null = null;\n\n  const discover = async (server: ViteDevServer): Promise<void> => {\n    manager = new MiddlewareManager(getMiddlewareAppDirectory(server.config.root, srcDir), server);\n    await manager.discover();\n    discoveryComplete = true;\n  };\n\n  return {\n    name: \"@farm.js/core:middleware\",\n    enforce: \"pre\",\n\n    configureServer(server) {\n      discoveryPromise = discover(server);\n      void discoveryPromise.catch((error) => {\n        console.error(\"[FARM] Middleware discovery error:\", error);\n      });\n\n      const execute = async (\n        req: IncomingMessage,\n        res: ServerResponse,\n        _pathname?: string,\n        sharedData?: Map<string, any>,\n      ): Promise<boolean> => {\n        if (discoveryPromise) {\n          await discoveryPromise;\n        }\n\n        if (!manager) {\n          return false;\n        }\n\n        const handled = await manager.execute(req, res);\n        const middlewareData = (req as any).__FARM_MIDDLEWARE_DATA__;\n        if (sharedData && middlewareData instanceof Map) {\n          for (const [key, value] of middlewareData) {\n            sharedData.set(key, value);\n          }\n        }\n        return handled;\n      };\n\n      (server as any).__farmMiddleware__ = {\n        execute,\n        getMiddlewares: () => manager?.getMiddlewares() ?? [],\n        isReady: () => discoveryComplete,\n        waitForDiscovery: () => discoveryPromise,\n      };\n    },\n\n    async handleHotUpdate({ file, server, modules }) {\n      if (!/^middleware\\.[tj]sx?$/.test(path.basename(file))) {\n        return;\n      }\n\n      for (const module of modules) {\n        server.moduleGraph.invalidateModule(module);\n      }\n\n      await manager?.reload();\n      server.ws.send({ type: \"full-reload\", path: \"*\" });\n      return [];\n    },\n  };\n}\n","import {\n  AmbiguousRouteError,\n  assertTerminalCatchAll,\n  assertUniqueRouteParameters,\n  compareRouteSpecificity,\n  getRoutePatternShape,\n  type RouteSegmentSpecificity,\n} from \"./routing/specificity\";\n\nexport type FarmRouterPrimitiveParam = string | number | boolean;\nexport type FarmRouterPathParam =\n  | FarmRouterPrimitiveParam\n  | readonly FarmRouterPrimitiveParam[]\n  | null\n  | undefined;\nexport type FarmRouterPathParams = Record<string, FarmRouterPathParam>;\nexport type FarmRouterParams = Record<string, string>;\n\nexport interface FarmRouterRoute<TMeta = unknown> {\n  path: string;\n  name?: string;\n  meta?: TMeta;\n}\n\nexport type FarmRouterRouteInput<TMeta = unknown> = string | FarmRouterRoute<TMeta>;\n\nexport interface FarmRouterMatch<TMeta = unknown> {\n  route: FarmRouterRoute<TMeta>;\n  pathname: string;\n  params: FarmRouterParams;\n}\n\nexport type FarmRouterQueryValue =\n  | FarmRouterPrimitiveParam\n  | readonly FarmRouterPrimitiveParam[]\n  | null\n  | undefined;\n\nexport interface FarmRouterBuildOptions {\n  query?: URLSearchParams | Record<string, FarmRouterQueryValue>;\n  hash?: string;\n  trailingSlash?: boolean;\n}\n\nexport interface FarmRouterActiveOptions {\n  exact?: boolean;\n}\n\nexport interface FarmRouter<TMeta = unknown> {\n  routes: FarmRouterRoute<TMeta>[];\n  match(pathname: string): FarmRouterMatch<TMeta> | null;\n  build(pattern: string, params?: FarmRouterPathParams, options?: FarmRouterBuildOptions): string;\n  isActive(pattern: string, pathname: string, options?: FarmRouterActiveOptions): boolean;\n}\n\ntype RouterSegment =\n  | {\n      type: \"static\";\n      value: string;\n    }\n  | {\n      type: \"dynamic\";\n      name: string;\n      catchAll: boolean;\n      optional: boolean;\n    };\n\ninterface NormalizedRouterRoute<TMeta> {\n  route: FarmRouterRoute<TMeta>;\n  segments: RouterSegment[];\n  specificity: RouteSegmentSpecificity[];\n  index: number;\n}\n\nexport function createFarmRouter<TMeta = unknown>(\n  routes: FarmRouterRouteInput<TMeta>[],\n): FarmRouter<TMeta> {\n  const normalizedRoutes = routes.map(normalizeRouteInput);\n  const patternsByShape = new Map<string, string>();\n  for (const entry of normalizedRoutes) {\n    const shape = getRoutePatternShape(entry.route.path, \"router\");\n    const existingPattern = patternsByShape.get(shape);\n    if (existingPattern) {\n      throw new AmbiguousRouteError(\n        `Ambiguous route patterns \"${existingPattern}\" and \"${entry.route.path}\" match the same URLs. Keep only one route for this URL shape.`,\n      );\n    }\n    patternsByShape.set(shape, entry.route.path);\n  }\n  normalizedRoutes.sort(compareRoutes);\n\n  return {\n    routes: normalizedRoutes.map((entry) => entry.route),\n    match(pathname) {\n      const normalizedPathname = normalizePathname(pathname);\n\n      for (const entry of normalizedRoutes) {\n        const params = matchSegments(entry.segments, normalizedPathname);\n        if (params) {\n          return {\n            route: entry.route,\n            pathname: normalizedPathname,\n            params,\n          };\n        }\n      }\n\n      return null;\n    },\n    build: buildFarmRoutePath,\n    isActive: isFarmRouteActive,\n  };\n}\n\nexport function matchFarmRoute(pattern: string, pathname: string): FarmRouterParams | null {\n  return matchSegments(parseRoutePattern(pattern), normalizePathname(pathname));\n}\n\nexport function buildFarmRoutePath(\n  pattern: string,\n  params: FarmRouterPathParams = {},\n  options: FarmRouterBuildOptions = {},\n): string {\n  const parts: string[] = [];\n\n  for (const segment of parseRoutePattern(pattern)) {\n    if (segment.type === \"static\") {\n      parts.push(encodePathSegment(segment.value));\n      continue;\n    }\n\n    const value = params[segment.name];\n    const values = Array.isArray(value) ? value : value == null ? [] : [value];\n\n    if (values.length === 0) {\n      if (segment.optional) continue;\n      throw new Error(`Missing route param \"${segment.name}\" for ${pattern}.`);\n    }\n\n    if (!segment.catchAll && values.length > 1) {\n      throw new Error(`Route param \"${segment.name}\" for ${pattern} expects a single value.`);\n    }\n\n    const encodedValues = values.map((item) => {\n      const value = String(item);\n      if (!value) {\n        throw new Error(\n          `Route param \"${segment.name}\" for ${pattern} cannot contain an empty path segment.`,\n        );\n      }\n      return encodePathSegment(value);\n    });\n    parts.push(...encodedValues);\n  }\n\n  let pathname = parts.length ? `/${parts.join(\"/\")}` : \"/\";\n\n  if (options.trailingSlash && pathname !== \"/\") {\n    pathname = `${pathname}/`;\n  }\n\n  return appendQueryAndHash(pathname, options);\n}\n\nexport function isFarmRouteActive(\n  pattern: string,\n  pathname: string,\n  options: FarmRouterActiveOptions = {},\n): boolean {\n  const normalizedPathname = normalizePathname(pathname);\n  if (matchFarmRoute(pattern, normalizedPathname)) return true;\n  if (options.exact !== false) return false;\n\n  const segments = parseRoutePattern(pattern);\n  if (segments.length === 0) return normalizedPathname === \"/\";\n  return matchSegments(segments, normalizedPathname, true) !== null;\n}\n\nfunction normalizeRouteInput<TMeta>(\n  input: FarmRouterRouteInput<TMeta>,\n  index: number,\n): NormalizedRouterRoute<TMeta> {\n  const route = typeof input === \"string\" ? { path: input } : input;\n  const path = normalizeRoutePattern(route.path);\n  const segments = parseRoutePattern(path);\n\n  return {\n    route: {\n      ...route,\n      path,\n    },\n    segments,\n    specificity: segments.map(getRouterSegmentSpecificity),\n    index,\n  };\n}\n\nfunction parseRoutePattern(pattern: string): RouterSegment[] {\n  assertTerminalCatchAll(pattern, \"router\");\n  assertUniqueRouteParameters(pattern, \"router\");\n  return splitRoutePattern(pattern)\n    .filter((part) => !isRouteGroup(part))\n    .map((part) => {\n      const optionalCatchAll = part.match(/^\\[\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]\\]$/);\n      if (optionalCatchAll) {\n        return {\n          type: \"dynamic\",\n          name: optionalCatchAll[1],\n          catchAll: true,\n          optional: true,\n        };\n      }\n\n      const catchAll = part.match(/^\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]$/);\n      if (catchAll) {\n        return {\n          type: \"dynamic\",\n          name: catchAll[1],\n          catchAll: true,\n          optional: false,\n        };\n      }\n\n      const dynamic = part.match(/^\\[([A-Za-z0-9_$-]+)\\]$/) || part.match(/^:([A-Za-z0-9_$-]+)$/);\n      if (dynamic) {\n        return {\n          type: \"dynamic\",\n          name: dynamic[1],\n          catchAll: false,\n          optional: false,\n        };\n      }\n\n      const star = part.match(/^\\*([A-Za-z0-9_$-]+)(\\?)?$/);\n      if (star) {\n        return {\n          type: \"dynamic\",\n          name: star[1],\n          catchAll: true,\n          optional: !!star[2],\n        };\n      }\n\n      return {\n        type: \"static\",\n        value: decodePathSegment(part),\n      };\n    });\n}\n\nfunction matchSegments(\n  segments: RouterSegment[],\n  pathname: string,\n  allowTrailingSegments = false,\n): FarmRouterParams | null {\n  const parts = splitPathname(pathname);\n  const params: FarmRouterParams = {};\n\n  if (segments.length === 0) {\n    return parts.length === 0 ? params : null;\n  }\n\n  let pathIndex = 0;\n\n  for (const segment of segments) {\n    if (segment.type === \"static\") {\n      if (decodePathSegment(parts[pathIndex] || \"\") !== segment.value) return null;\n      pathIndex++;\n      continue;\n    }\n\n    if (segment.catchAll) {\n      const remaining = parts.slice(pathIndex).map(decodePathSegment);\n      if (remaining.length === 0 && !segment.optional) return null;\n      params[segment.name] = remaining.join(\"/\");\n      pathIndex = parts.length;\n      continue;\n    }\n\n    const value = parts[pathIndex];\n    if (!value) return null;\n    params[segment.name] = decodePathSegment(value);\n    pathIndex++;\n  }\n\n  return allowTrailingSegments || pathIndex === parts.length ? params : null;\n}\n\nfunction compareRoutes<TMeta>(\n  left: NormalizedRouterRoute<TMeta>,\n  right: NormalizedRouterRoute<TMeta>,\n) {\n  const specificity = compareRouteSpecificity(left.specificity, right.specificity);\n  if (specificity !== 0) return specificity;\n  return left.index - right.index;\n}\n\nfunction getRouterSegmentSpecificity(segment: RouterSegment): RouteSegmentSpecificity {\n  if (segment.type === \"static\") return \"static\";\n  if (!segment.catchAll) return \"dynamic\";\n  return segment.optional ? \"optional-catch-all\" : \"catch-all\";\n}\n\nfunction normalizePathname(value: string) {\n  const raw = value || \"/\";\n  let pathname = raw;\n\n  try {\n    pathname = new URL(raw, \"http://farm.local\").pathname;\n  } catch {\n    pathname = raw.split(/[?#]/, 1)[0] || \"/\";\n  }\n\n  pathname = pathname.replace(/\\\\/g, \"/\").replace(/\\/+/g, \"/\");\n  if (!pathname.startsWith(\"/\")) pathname = `/${pathname}`;\n  if (pathname.length > 1) pathname = pathname.replace(/\\/+$/, \"\");\n  return pathname || \"/\";\n}\n\nfunction splitPathname(pathname: string) {\n  return normalizePathname(pathname).split(\"/\").filter(Boolean);\n}\n\nfunction normalizeRoutePattern(value: string) {\n  let pathname = (value || \"/\").replace(/\\\\/g, \"/\").replace(/\\/+/g, \"/\");\n  if (!pathname.startsWith(\"/\")) pathname = `/${pathname}`;\n  if (pathname.length > 1) pathname = pathname.replace(/\\/+$/, \"\");\n  return pathname || \"/\";\n}\n\nfunction splitRoutePattern(pattern: string) {\n  return normalizeRoutePattern(pattern).split(\"/\").filter(Boolean);\n}\n\nfunction isRouteGroup(part: string) {\n  return part.startsWith(\"(\") && part.endsWith(\")\");\n}\n\nfunction decodePathSegment(value: string) {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return value;\n  }\n}\n\nfunction encodePathSegment(value: string) {\n  return encodeURIComponent(value);\n}\n\nfunction appendQueryAndHash(pathname: string, options: FarmRouterBuildOptions) {\n  const search = createSearchParams(options.query);\n  const hash = options.hash ? `#${options.hash.replace(/^#/, \"\")}` : \"\";\n  const query = search.toString();\n  return `${pathname}${query ? `?${query}` : \"\"}${hash}`;\n}\n\nfunction createSearchParams(query: FarmRouterBuildOptions[\"query\"]) {\n  if (query instanceof URLSearchParams) return query;\n\n  const search = new URLSearchParams();\n  if (!query) return search;\n\n  for (const [key, value] of Object.entries(query)) {\n    const values = Array.isArray(value) ? value : [value];\n    for (const item of values) {\n      if (item == null) continue;\n      search.append(key, String(item));\n    }\n  }\n\n  return search;\n}\n","export { resolveFarmThemeConfig } from \"./config\";\nexport type {\n  FarmResolvedTheme,\n  FarmThemeConfig,\n  FarmThemePreference,\n  FarmThemeSnapshot,\n  ResolvedFarmThemeConfig,\n} from \"./types\";\n","type AnyEnvironmentFunction = (...args: never[]) => unknown;\n\nexport type FarmEnvironment = \"server\" | \"client\";\n\nexport interface FarmIsomorphicFnOptions<TArgs extends unknown[], TServerResult, TClientResult> {\n  server: (...args: TArgs) => TServerResult;\n  client: (...args: TArgs) => TClientResult;\n}\n\nexport class FarmEnvironmentError extends Error {\n  readonly code = \"FARM_ENVIRONMENT_MISMATCH\";\n\n  constructor(\n    readonly api: \"createServerOnlyFn\" | \"createClientOnlyFn\",\n    readonly expected: FarmEnvironment,\n    readonly actual: FarmEnvironment,\n  ) {\n    super(`${api}() can only be called on the ${expected}. It was called on the ${actual}.`);\n    this.name = \"FarmEnvironmentError\";\n  }\n}\n\nexport function createServerOnlyFn<TFunction extends AnyEnvironmentFunction>(\n  implementation: TFunction,\n): TFunction;\nexport function createServerOnlyFn(\n  implementation: AnyEnvironmentFunction | undefined,\n  compiledActualEnvironment?: FarmEnvironment,\n): AnyEnvironmentFunction {\n  if (compiledActualEnvironment) {\n    return createMismatchFunction(\"createServerOnlyFn\", \"server\", compiledActualEnvironment);\n  }\n  if (getRuntimeEnvironment() !== \"server\") {\n    return createMismatchFunction(\"createServerOnlyFn\", \"server\");\n  }\n\n  assertFunction(implementation, \"createServerOnlyFn\");\n  return implementation;\n}\n\nexport function createClientOnlyFn<TFunction extends AnyEnvironmentFunction>(\n  implementation: TFunction,\n): TFunction;\nexport function createClientOnlyFn(\n  implementation: AnyEnvironmentFunction | undefined,\n  compiledActualEnvironment?: FarmEnvironment,\n): AnyEnvironmentFunction {\n  if (compiledActualEnvironment) {\n    return createMismatchFunction(\"createClientOnlyFn\", \"client\", compiledActualEnvironment);\n  }\n  if (getRuntimeEnvironment() !== \"client\") {\n    return createMismatchFunction(\"createClientOnlyFn\", \"client\");\n  }\n\n  assertFunction(implementation, \"createClientOnlyFn\");\n  return implementation;\n}\n\nexport function createIsomorphicFn<TArgs extends unknown[], TServerResult, TClientResult>(\n  options: FarmIsomorphicFnOptions<TArgs, TServerResult, TClientResult>,\n): (...args: TArgs) => TServerResult | TClientResult {\n  if (!options || typeof options !== \"object\") {\n    throw new TypeError(\"createIsomorphicFn requires server and client functions\");\n  }\n\n  assertFunction(options.server, \"createIsomorphicFn server\");\n  assertFunction(options.client, \"createIsomorphicFn client\");\n\n  return getRuntimeEnvironment() === \"server\" ? options.server : options.client;\n}\n\nfunction getRuntimeEnvironment(): FarmEnvironment {\n  return typeof window === \"undefined\" ? \"server\" : \"client\";\n}\n\nfunction createMismatchFunction(\n  api: \"createServerOnlyFn\" | \"createClientOnlyFn\",\n  expected: FarmEnvironment,\n  actual: FarmEnvironment = expected === \"server\" ? \"client\" : \"server\",\n) {\n  return function farmEnvironmentBoundary(): never {\n    throw new FarmEnvironmentError(api, expected, actual);\n  };\n}\n\nfunction assertFunction(value: unknown, label: string): asserts value is AnyEnvironmentFunction {\n  if (typeof value !== \"function\") {\n    throw new TypeError(`${label} must be a function`);\n  }\n}\n","import { getServerActionExecutionContext, getServerActionSignal } from \"./server-action-security\";\nimport { _resolveCurrentRequest } from \"./server/request-bridge\";\nimport { applyFarmCacheInvalidationTargets, type FarmCacheInvalidationTarget } from \"./cache\";\nimport { ServerActionError, ServerFnFailure } from \"./server-fn-error\";\n\nexport {\n  FARM_SERVER_FN_FAILURE_SYMBOL,\n  ServerActionError,\n  ServerFnFailure,\n  createServerFnTransportError,\n  isServerFnFailure,\n} from \"./server-fn-error\";\nexport type { SerializedServerFnFailure } from \"./server-fn-error\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\n// Generic schema type that works with Zod v3/v4 and similar validator APIs.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type ServerFnSchema = {\n  _input?: any;\n  _output?: any;\n  parse?: (data: unknown) => any;\n  parseAsync?: (data: unknown) => Promise<any>;\n  safeParse?: (data: unknown) => any;\n  safeParseAsync?: (data: unknown) => Promise<any>;\n};\n\nexport type InferServerFnSchemaInput<T> = T extends { _input: infer I } ? I : unknown;\nexport type InferServerFnSchemaOutput<T> = T extends { _output: infer O }\n  ? O\n  : T extends { parse: (data: unknown) => infer R }\n    ? R\n    : unknown;\n\nexport type ServerFnErrorSchema = ServerFnSchema &\n  ({ parse: (data: unknown) => unknown } | { safeParse: (data: unknown) => unknown });\n\nexport type ServerFnErrorDefinition<\n  TSchema extends ServerFnErrorSchema = ServerFnErrorSchema,\n  TStatus extends number = number,\n> = {\n  status: TStatus;\n  /** Schema for the public error payload exposed to callers. */\n  data: TSchema;\n  /** Public message safe to expose to callers. */\n  message?: string;\n};\n\nexport type ServerFnErrorDefinitions = Record<\n  string,\n  ServerFnErrorDefinition<ServerFnErrorSchema, number>\n>;\n\nexport type ServerFnDeclaredError<TErrors extends ServerFnErrorDefinitions> = {\n  [TCode in keyof TErrors]: ServerFnFailure<\n    TCode & string,\n    InferServerFnSchemaOutput<TErrors[TCode][\"data\"]>,\n    TErrors[TCode][\"status\"]\n  >;\n}[keyof TErrors];\n\nexport type ServerFnError<TErrors extends ServerFnErrorDefinitions> = keyof TErrors extends never\n  ? Error\n  : ServerActionError | ServerFnDeclaredError<TErrors>;\n\nexport type ServerFnErrorHandler<TErrors extends ServerFnErrorDefinitions> = <\n  TCode extends keyof TErrors & string,\n>(\n  code: TCode,\n  data: InferServerFnSchemaInput<TErrors[TCode][\"data\"]>,\n) => never;\n\nexport type ServerFnFormInput = FormData;\n\ntype Simplify<T> = { [TKey in keyof T]: T[TKey] } & {};\ntype AssignContext<TCurrent extends object, TNext extends object> = Simplify<\n  Omit<TCurrent, keyof TNext> & TNext\n>;\ntype MiddlewareContext<TMiddleware> =\n  TMiddleware extends ServerFnMiddleware<infer TContext> ? TContext : {};\n\nexport type ServerFnMiddlewareContext<\n  TMiddlewares extends readonly AnyServerFnMiddleware[],\n  TContext extends object = {},\n> = TMiddlewares extends readonly [infer TMiddleware, ...infer TRest]\n  ? TMiddleware extends AnyServerFnMiddleware\n    ? TRest extends readonly AnyServerFnMiddleware[]\n      ? ServerFnMiddlewareContext<TRest, AssignContext<TContext, MiddlewareContext<TMiddleware>>>\n      : TContext\n    : TContext\n  : number extends TMiddlewares[\"length\"]\n    ? Simplify<TContext & MiddlewareContext<TMiddlewares[number]>>\n    : Simplify<TContext>;\n\ndeclare const SERVER_FN_MIDDLEWARE_CONTEXT: unique symbol;\n\nexport type ServerFnMiddlewareContinuation<TContext extends object = {}> = {\n  readonly [SERVER_FN_MIDDLEWARE_CONTEXT]: TContext;\n};\n\nexport type ServerFnMiddlewareNext = <TContext extends object = {}>(options?: {\n  context?: TContext;\n}) => Promise<ServerFnMiddlewareContinuation<TContext>>;\n\nexport type ServerFnContext<TInput, TContext extends object = {}> = {\n  input: TInput;\n  rawInput: unknown;\n  formData?: FormData;\n  /** The action request when invoked across the network. Undefined for direct server calls. */\n  request?: Request;\n  /** Aborts when the underlying action request is cancelled. */\n  signal: AbortSignal;\n  /** Context produced by this server function's middleware chain. */\n  context: Readonly<TContext>;\n};\n\nexport type ServerFnHandlerContext<\n  TInput,\n  TContext extends object = {},\n  TErrors extends ServerFnErrorDefinitions = {},\n> = ServerFnContext<TInput, TContext> & {\n  /** Return a declared, validated error from this server function. */\n  error: ServerFnErrorHandler<TErrors>;\n};\n\nexport type ServerFnHandler<\n  TInput,\n  TResult,\n  TContext extends object = {},\n  TErrors extends ServerFnErrorDefinitions = {},\n> = (ctx: ServerFnHandlerContext<TInput, TContext, TErrors>) => MaybePromise<TResult>;\n\nexport type ServerFnInvalidationContext<\n  TInput,\n  TResult,\n  TContext extends object = {},\n> = ServerFnContext<TInput, TContext> & {\n  /** Parsed value returned by the successful server function. */\n  result: TResult;\n};\n\nexport type ServerFnInvalidations<TInput, TResult, TContext extends object = {}> =\n  | readonly FarmCacheInvalidationTarget[]\n  | ((\n      context: ServerFnInvalidationContext<TInput, TResult, TContext>,\n    ) => readonly FarmCacheInvalidationTarget[] | Promise<readonly FarmCacheInvalidationTarget[]>);\n\nexport type ServerFnMiddlewareHandlerContext<TContext extends object = {}> = ServerFnContext<\n  unknown,\n  TContext\n> & {\n  next: ServerFnMiddlewareNext;\n};\n\nexport type ServerFnMiddlewareHandler<\n  TContext extends object = {},\n  TProvidedContext extends object = {},\n> = (\n  ctx: ServerFnMiddlewareHandlerContext<TContext>,\n) => MaybePromise<ServerFnMiddlewareContinuation<TProvidedContext>>;\n\nexport type ServerFnMiddleware<TContext extends object = {}> = {\n  readonly __farmServerFnMiddleware: true;\n  readonly __farmServerFnMiddlewareContext?: TContext;\n  readonly middleware: readonly AnyServerFnMiddleware[];\n  readonly handler: ServerFnMiddlewareHandler<any, any>;\n};\n\nexport type AnyServerFnMiddleware = ServerFnMiddleware<any>;\n\nexport type ServerFnMiddlewareOptions<\n  TMiddlewares extends readonly AnyServerFnMiddleware[],\n  TProvidedContext extends object,\n> = {\n  middleware?: TMiddlewares;\n  handler: ServerFnMiddlewareHandler<ServerFnMiddlewareContext<TMiddlewares>, TProvidedContext>;\n};\n\nexport type ServerFnOptions<\n  TSchema extends ServerFnSchema | undefined,\n  TResult,\n  TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  TErrors extends ServerFnErrorDefinitions = {},\n> = {\n  input?: TSchema;\n  output?: undefined;\n  middleware?: TMiddlewares;\n  errors?: TErrors;\n  invalidates?: ServerFnInvalidations<\n    TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown,\n    Awaited<TResult>,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n  handler: ServerFnHandler<\n    TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown,\n    TResult,\n    ServerFnMiddlewareContext<TMiddlewares>,\n    TErrors\n  >;\n};\n\nexport type ServerFnOutputOptions<\n  TInputSchema extends ServerFnSchema | undefined,\n  TOutputSchema extends ServerFnSchema,\n  TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  TErrors extends ServerFnErrorDefinitions = {},\n> = {\n  input?: TInputSchema;\n  output: TOutputSchema;\n  middleware?: TMiddlewares;\n  errors?: TErrors;\n  invalidates?: ServerFnInvalidations<\n    TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown,\n    Awaited<InferServerFnSchemaOutput<TOutputSchema>>,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n  handler: ServerFnHandler<\n    TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown,\n    unknown,\n    ServerFnMiddlewareContext<TMiddlewares>,\n    TErrors\n  >;\n};\n\nexport type ServerFn<TInput, TResult, TError extends Error = Error> = ([unknown] extends [TInput]\n  ? (input?: TInput | FormData) => Promise<TResult>\n  : (input: TInput | FormData) => Promise<TResult>) & {\n  readonly __farmServerFn: true;\n  readonly __farmServerFnInput?: unknown;\n  readonly __farmServerFnOutput?: unknown;\n  readonly __farmServerFnError: TError;\n};\n\nexport type InferServerFnError<TServerFn> =\n  TServerFn extends ServerFn<any, any, infer TError> ? TError : Error;\n\nexport const FARM_SERVER_FN_SYMBOL = Symbol.for(\"farm.server-fn\");\n\nconst UNSAFE_FORM_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function createServerMiddleware<\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  TProvidedContext extends object = {},\n>(\n  options: ServerFnMiddlewareOptions<TMiddlewares, TProvidedContext>,\n): ServerFnMiddleware<AssignContext<ServerFnMiddlewareContext<TMiddlewares>, TProvidedContext>>;\nexport function createServerMiddleware(options: {\n  middleware?: readonly AnyServerFnMiddleware[];\n  handler: ServerFnMiddlewareHandler<any, any>;\n}): ServerFnMiddleware<any> {\n  if (!options || typeof options.handler !== \"function\") {\n    throw new TypeError(\"createServerMiddleware requires a handler function\");\n  }\n\n  const middleware = Object.freeze([...(options.middleware ?? [])]);\n  for (const entry of middleware) {\n    assertServerFnMiddleware(entry);\n  }\n\n  return Object.freeze({\n    __farmServerFnMiddleware: true as const,\n    middleware,\n    handler: options.handler,\n  });\n}\n\nexport function createServerFn<\n  TInputSchema extends ServerFnSchema,\n  TOutputSchema extends ServerFnSchema,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOutputOptions<TInputSchema, TOutputSchema, TMiddlewares, TErrors>,\n): ServerFn<\n  InferServerFnSchemaInput<TInputSchema>,\n  Awaited<InferServerFnSchemaOutput<TOutputSchema>>,\n  ServerFnError<TErrors>\n>;\nexport function createServerFn<\n  TOutputSchema extends ServerFnSchema,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOutputOptions<undefined, TOutputSchema, TMiddlewares, TErrors>,\n): ServerFn<unknown, Awaited<InferServerFnSchemaOutput<TOutputSchema>>, ServerFnError<TErrors>>;\nexport function createServerFn<\n  TSchema extends ServerFnSchema,\n  TResult,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOptions<TSchema, TResult, TMiddlewares, TErrors>,\n): ServerFn<InferServerFnSchemaInput<TSchema>, Awaited<TResult>, ServerFnError<TErrors>>;\nexport function createServerFn<\n  TResult,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n  const TErrors extends ServerFnErrorDefinitions = {},\n>(\n  options: ServerFnOptions<undefined, TResult, TMiddlewares, TErrors>,\n): ServerFn<unknown, Awaited<TResult>, ServerFnError<TErrors>>;\nexport function createServerFn(options: {\n  input?: ServerFnSchema;\n  output?: ServerFnSchema;\n  middleware?: readonly AnyServerFnMiddleware[];\n  errors?: ServerFnErrorDefinitions;\n  invalidates?: ServerFnInvalidations<any, any, any>;\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  handler: ServerFnHandler<any, any, any, any>;\n}) {\n  if (!options || typeof options.handler !== \"function\") {\n    throw new TypeError(\"createServerFn requires a handler function\");\n  }\n\n  const middleware = resolveServerFnMiddleware(options.middleware);\n  const errors = normalizeServerFnErrors(options.errors);\n  const error = createServerFnErrorHandler(errors);\n  const serverFn = async (value: unknown) => {\n    const formData = isFormData(value) ? value : undefined;\n    const rawInput = formData ? formDataToObject(formData) : value;\n    const input = await _parseServerFnSchema(options.input, rawInput, \"input\");\n    const executionContext = getServerActionExecutionContext();\n    const request = executionContext?.request ?? _resolveCurrentRequest();\n    const signal = executionContext?.signal ?? request?.signal ?? getServerActionSignal();\n    const handlerContext = {\n      input,\n      rawInput,\n      formData,\n      request,\n      signal,\n    };\n    let resolvedContext: Readonly<object> = Object.freeze(Object.create(null));\n    const result = await runServerFnMiddleware(middleware, handlerContext, async (context) => {\n      resolvedContext = context.context;\n      return options.handler({ ...context, error });\n    });\n    const parsedResult = await _parseServerFnSchema(options.output, result, \"output\");\n\n    if (options.invalidates) {\n      const declaration =\n        typeof options.invalidates === \"function\"\n          ? await options.invalidates({\n              ...handlerContext,\n              context: resolvedContext,\n              result: parsedResult,\n            })\n          : options.invalidates;\n      await applyFarmCacheInvalidationTargets(declaration);\n    }\n\n    return parsedResult;\n  };\n\n  Object.defineProperties(serverFn, {\n    [FARM_SERVER_FN_SYMBOL]: {\n      value: true,\n      enumerable: false,\n    },\n    __farmServerFn: {\n      value: true,\n      enumerable: false,\n    },\n    __farmServerFnInput: {\n      value: options.input,\n      enumerable: false,\n    },\n    __farmServerFnOutput: {\n      value: options.output,\n      enumerable: false,\n    },\n    __farmServerFnError: {\n      value: undefined,\n      enumerable: false,\n    },\n    __farmServerFnMiddleware: {\n      value: middleware,\n      enumerable: false,\n    },\n    __farmServerFnInvalidates: {\n      value: options.invalidates,\n      enumerable: false,\n    },\n  });\n\n  return serverFn as ServerFn<unknown, unknown, Error>;\n}\n\ntype ServerFnBaseContext = Omit<ServerFnContext<unknown, {}>, \"context\">;\n\nasync function runServerFnMiddleware(\n  middleware: readonly AnyServerFnMiddleware[],\n  handlerContext: ServerFnBaseContext,\n  handler: (context: ServerFnContext<any, any>) => MaybePromise<unknown>,\n) {\n  const dispatch = async (index: number, context: Readonly<object>): Promise<unknown> => {\n    const current = middleware[index];\n    if (!current) {\n      return handler({ ...handlerContext, context });\n    }\n\n    let nextCalled = false;\n    const result = await current.handler({\n      ...handlerContext,\n      context,\n      next: async (nextOptions) => {\n        if (nextCalled) {\n          throw new Error(\"Server function middleware next() can only be called once\");\n        }\n        nextCalled = true;\n\n        return dispatch(index + 1, mergeServerFnContext(context, nextOptions?.context)) as Promise<\n          ServerFnMiddlewareContinuation<any>\n        >;\n      },\n    });\n\n    if (!nextCalled) {\n      throw new Error(\"Server function middleware must call next()\");\n    }\n\n    return result;\n  };\n\n  return dispatch(0, Object.freeze(Object.create(null)));\n}\n\nfunction normalizeServerFnErrors(\n  definitions: ServerFnErrorDefinitions | undefined,\n): Readonly<ServerFnErrorDefinitions> {\n  if (definitions === undefined) return Object.freeze({});\n  if (!isPlainServerFnObject(definitions)) {\n    throw new TypeError(\"createServerFn errors must be an object\");\n  }\n\n  const normalized: ServerFnErrorDefinitions = Object.create(null);\n  for (const [code, definition] of Object.entries(definitions)) {\n    if (!code.trim()) {\n      throw new TypeError(\"Server function error codes cannot be empty\");\n    }\n    if (!definition || typeof definition !== \"object\") {\n      throw new TypeError(`Server function error \"${code}\" must be an object`);\n    }\n    if (\n      !Number.isInteger(definition.status) ||\n      definition.status < 400 ||\n      definition.status > 599\n    ) {\n      throw new TypeError(\n        `Server function error \"${code}\" status must be an integer between 400 and 599`,\n      );\n    }\n    if (\n      !definition.data ||\n      (typeof definition.data.parse !== \"function\" &&\n        typeof definition.data.safeParse !== \"function\")\n    ) {\n      throw new TypeError(\n        `Server function error \"${code}\" data must provide synchronous parse() or safeParse()`,\n      );\n    }\n    if (definition.message !== undefined && typeof definition.message !== \"string\") {\n      throw new TypeError(`Server function error \"${code}\" message must be a string`);\n    }\n\n    normalized[code] = Object.freeze({ ...definition });\n  }\n\n  return Object.freeze(normalized);\n}\n\nfunction createServerFnErrorHandler(\n  definitions: Readonly<ServerFnErrorDefinitions>,\n): ServerFnErrorHandler<ServerFnErrorDefinitions> {\n  return ((code: string, data: unknown): never => {\n    const definition = definitions[code];\n    if (!definition) {\n      throw new TypeError(`Server function error \"${code}\" is not declared`);\n    }\n\n    const parsed = parseServerFnFailureData(code, definition.data, data);\n    throw new ServerFnFailure(code, parsed, {\n      status: definition.status,\n      message: definition.message ?? \"Server function failed\",\n    });\n  }) as ServerFnErrorHandler<ServerFnErrorDefinitions>;\n}\n\nfunction parseServerFnFailureData(code: string, schema: ServerFnSchema, value: unknown) {\n  if (typeof schema.safeParse === \"function\") {\n    const result = schema.safeParse(value);\n    if (isPromiseLike(result)) {\n      throw new TypeError(`Server function error \"${code}\" data schema must parse synchronously`);\n    }\n    return unwrapSafeParseResult(result);\n  }\n\n  const result = schema.parse!(value);\n  if (isPromiseLike(result)) {\n    throw new TypeError(`Server function error \"${code}\" data schema must parse synchronously`);\n  }\n  return result;\n}\n\nfunction isPlainServerFnObject(value: unknown): value is Record<string, unknown> {\n  if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n  return Boolean(\n    value &&\n    (typeof value === \"object\" || typeof value === \"function\") &&\n    \"then\" in value &&\n    typeof (value as PromiseLike<unknown>).then === \"function\",\n  );\n}\n\nfunction resolveServerFnMiddleware(\n  middleware: readonly AnyServerFnMiddleware[] | undefined,\n): readonly AnyServerFnMiddleware[] {\n  const resolved: AnyServerFnMiddleware[] = [];\n  const seen = new Set<AnyServerFnMiddleware>();\n  const visiting = new Set<AnyServerFnMiddleware>();\n\n  const visit = (entry: AnyServerFnMiddleware) => {\n    assertServerFnMiddleware(entry);\n    if (seen.has(entry)) return;\n    if (visiting.has(entry)) {\n      throw new Error(\"Server function middleware dependencies cannot contain a cycle\");\n    }\n\n    visiting.add(entry);\n    for (const dependency of entry.middleware) {\n      visit(dependency);\n    }\n    visiting.delete(entry);\n    seen.add(entry);\n    resolved.push(entry);\n  };\n\n  for (const entry of middleware ?? []) {\n    visit(entry);\n  }\n\n  return Object.freeze(resolved);\n}\n\nfunction assertServerFnMiddleware(value: unknown): asserts value is AnyServerFnMiddleware {\n  if (\n    !value ||\n    typeof value !== \"object\" ||\n    (value as { __farmServerFnMiddleware?: unknown }).__farmServerFnMiddleware !== true ||\n    typeof (value as { handler?: unknown }).handler !== \"function\" ||\n    !Array.isArray((value as { middleware?: unknown }).middleware)\n  ) {\n    throw new TypeError(\"createServerFn middleware must be created with createServerMiddleware\");\n  }\n}\n\nfunction mergeServerFnContext(current: Readonly<object>, added: object | undefined) {\n  if (\n    added !== undefined &&\n    (added === null || typeof added !== \"object\" || Array.isArray(added))\n  ) {\n    throw new TypeError(\"Server function middleware context must be an object\");\n  }\n\n  return Object.freeze(Object.assign(Object.create(null), current, added));\n}\n\nexport async function _parseServerFnSchema(\n  schema: ServerFnSchema | undefined,\n  value: unknown,\n  contract: \"input\" | \"output\",\n  owner = \"createServerFn\",\n) {\n  if (!schema) return value;\n\n  if (typeof schema.safeParseAsync === \"function\") {\n    const result = await schema.safeParseAsync(value);\n    return unwrapSafeParseResult(result);\n  }\n\n  if (typeof schema.safeParse === \"function\") {\n    const result = schema.safeParse(value);\n    return unwrapSafeParseResult(await result);\n  }\n\n  if (typeof schema.parseAsync === \"function\") {\n    return schema.parseAsync(value);\n  }\n\n  if (typeof schema.parse === \"function\") {\n    return schema.parse(value);\n  }\n\n  throw new TypeError(`${owner} ${contract} must provide parse, parseAsync, or safeParse`);\n}\n\nfunction unwrapSafeParseResult(result: unknown) {\n  if (\n    result &&\n    typeof result === \"object\" &&\n    \"success\" in result &&\n    (result as { success: boolean }).success === false\n  ) {\n    throw (result as { error?: unknown }).error;\n  }\n\n  if (\n    result &&\n    typeof result === \"object\" &&\n    \"success\" in result &&\n    (result as { success: boolean }).success === true\n  ) {\n    return (result as unknown as { data: unknown }).data;\n  }\n\n  return result;\n}\n\nfunction formDataToObject(formData: FormData) {\n  const output: Record<string, FormDataEntryValue | FormDataEntryValue[]> = Object.create(null);\n\n  for (const [key, value] of formData.entries()) {\n    if (!isSafeFormKey(key)) continue;\n\n    const existing = output[key];\n    if (existing === undefined) {\n      output[key] = value;\n    } else if (Array.isArray(existing)) {\n      existing.push(value);\n    } else {\n      output[key] = [existing, value];\n    }\n  }\n\n  return output;\n}\n\nfunction isSafeFormKey(key: string) {\n  return !key.startsWith(\"$ACTION_\") && !UNSAFE_FORM_KEYS.has(key);\n}\n\nfunction isFormData(value: unknown): value is FormData {\n  if (!value || typeof value !== \"object\") return false;\n\n  if (typeof FormData !== \"undefined\" && value instanceof FormData) {\n    return true;\n  }\n\n  return (\n    Object.prototype.toString.call(value) === \"[object FormData]\" &&\n    typeof (value as { entries?: unknown }).entries === \"function\"\n  );\n}\n","\"use client\";\n\nimport {\n  createElement,\n  useCallback,\n  useMemo,\n  useRef,\n  useState,\n  type ComponentType,\n  type FormHTMLAttributes,\n} from \"react\";\nimport type { ServerFn } from \"./server-fn\";\nimport type { RetryOptions } from \"./api/client\";\nimport { notifyClientObserver } from \"./client-observers\";\nimport { invokeMutationWithRetry } from \"./mutation-retry\";\n\nexport type ServerFnActionStatus = \"idle\" | \"pending\" | \"success\" | \"error\";\n\nexport type ServerFnSubmit<TInput, TResult> = [unknown] extends [TInput]\n  ? (input?: TInput | FormData) => Promise<TResult>\n  : (input: TInput | FormData) => Promise<TResult>;\n\nexport type ServerFnOptimisticContext<TInput, TResult> = {\n  input: TInput | FormData | undefined;\n  formData?: FormData;\n  current: TResult | null;\n};\n\nexport type UseServerFnOptions<TResult, TError extends Error = Error, TInput = unknown> = {\n  initialResult?: TResult | null;\n  resetOnSubmit?: boolean;\n  throwOnFormError?: boolean;\n  optimistic?: (context: ServerFnOptimisticContext<TInput, TResult>) => TResult | null | undefined;\n  rollbackOnError?: boolean;\n  /** Retry failed submissions with the API client's retry shape. Defaults to no retries. */\n  retry?: RetryOptions;\n  onSuccess?: (result: TResult) => void;\n  onError?: (error: TError) => void;\n  onSettled?: (result: TResult | null, error: TError | null) => void;\n};\n\nexport type UseServerFnReturn<TInput, TResult, TError extends Error = Error> = {\n  pending: boolean;\n  status: ServerFnActionStatus;\n  result: TResult | null;\n  error: TError | null;\n  submit: ServerFnSubmit<TInput, TResult>;\n  formAction: (formData: FormData) => Promise<void>;\n  reset: () => void;\n};\n\nexport type UseActionFormProps = Omit<FormHTMLAttributes<HTMLFormElement>, \"action\">;\n\nexport type RouteActionTarget<TServerFn extends ServerFn<any, any, any>> = {\n  readonly action: TServerFn;\n};\n\nexport type UseActionReturn<TInput, TResult, TError extends Error = Error> = ServerFnSubmit<\n  TInput,\n  TResult\n> & {\n  pending: boolean;\n  status: ServerFnActionStatus;\n  data: TResult | null;\n  result: TResult | null;\n  error: TError | null;\n  formAction: (formData: FormData) => Promise<void>;\n  Form: ComponentType<UseActionFormProps>;\n  reset: () => void;\n};\n\ntype ServerFnActionState<TResult, TError extends Error> = {\n  pendingCount: number;\n  status: ServerFnActionStatus;\n  result: TResult | null;\n  error: TError | null;\n};\n\ntype ServerFnActionCallbacks<TResult, TError extends Error> = Pick<\n  UseServerFnOptions<TResult, TError, unknown>,\n  \"onError\" | \"onSettled\" | \"onSuccess\" | \"throwOnFormError\"\n>;\n\nexport function useServerFn<TInput, TResult, TError extends Error = Error>(\n  serverFn: ServerFn<TInput, TResult, TError>,\n  options: UseServerFnOptions<TResult, TError, TInput> = {},\n): UseServerFnReturn<TInput, TResult, TError> {\n  const { initialResult = null, resetOnSubmit = true } = options;\n  const callbacksRef = useRef<ServerFnActionCallbacks<TResult, TError>>({});\n  const requestIdRef = useRef(0);\n  const lastResetIdRef = useRef(0);\n  const initialState: ServerFnActionState<TResult, TError> = {\n    pendingCount: 0,\n    status: \"idle\",\n    result: initialResult,\n    error: null,\n  };\n  const stateRef = useRef<ServerFnActionState<TResult, TError>>(initialState);\n  const [state, setState] = useState<ServerFnActionState<TResult, TError>>(initialState);\n  const setActionState = useCallback(\n    (\n      value:\n        | ServerFnActionState<TResult, TError>\n        | ((current: ServerFnActionState<TResult, TError>) => ServerFnActionState<TResult, TError>),\n    ) => {\n      // Later submissions in the same React batch must see this transition.\n      const next = typeof value === \"function\" ? value(stateRef.current) : value;\n      stateRef.current = next;\n      setState(next);\n    },\n    [],\n  );\n\n  callbacksRef.current = {\n    onError: options.onError,\n    onSettled: options.onSettled,\n    onSuccess: options.onSuccess,\n    throwOnFormError: options.throwOnFormError,\n  };\n\n  const submit = useCallback(\n    async (input?: TInput | FormData) => {\n      const requestId = ++requestIdRef.current;\n      const formData = isFormData(input) ? input : undefined;\n      const previousResult = stateRef.current.result;\n      const optimisticResult = options.optimistic?.({\n        input,\n        formData,\n        current: previousResult,\n      });\n      const hasOptimisticResult = optimisticResult !== undefined;\n\n      setActionState((current) => {\n        // Optimistic callbacks are app code and may reset or submit again.\n        if (requestId < lastResetIdRef.current) return current;\n        const pendingCount = current.pendingCount + 1;\n        if (requestId !== requestIdRef.current) return { ...current, pendingCount };\n        return {\n          pendingCount,\n          status: \"pending\",\n          result: hasOptimisticResult ? optimisticResult : resetOnSubmit ? null : current.result,\n          error: null,\n        };\n      });\n\n      try {\n        const result = await invokeMutationWithRetry(\n          () => serverFn(input as TInput | FormData),\n          options.retry,\n          // A reset disowns this submission; stop scheduling retries then.\n          () => requestId >= lastResetIdRef.current,\n        );\n        const isLatestRequest = requestId === requestIdRef.current;\n\n        setActionState((current) => {\n          // Reset starts a new pending-count generation, not just a new result.\n          if (requestId < lastResetIdRef.current) return current;\n          const pendingCount = Math.max(0, current.pendingCount - 1);\n\n          if (!isLatestRequest) {\n            return {\n              ...current,\n              pendingCount,\n            };\n          }\n\n          return {\n            pendingCount,\n            status: \"success\",\n            result,\n            error: null,\n          };\n        });\n\n        if (isLatestRequest) {\n          notifyClientObserver(callbacksRef.current.onSuccess, [result], \"Action onSuccess\");\n          if (requestId === requestIdRef.current) {\n            notifyClientObserver(\n              callbacksRef.current.onSettled,\n              [result, null],\n              \"Action onSettled\",\n            );\n          }\n        }\n\n        return result;\n      } catch (cause) {\n        const error = normalizeServerFnError(cause) as TError;\n        const isLatestRequest = requestId === requestIdRef.current;\n\n        setActionState((current) => {\n          if (requestId < lastResetIdRef.current) return current;\n          const pendingCount = Math.max(0, current.pendingCount - 1);\n\n          if (!isLatestRequest) {\n            return {\n              ...current,\n              pendingCount,\n            };\n          }\n\n          return {\n            pendingCount,\n            status: \"error\",\n            result:\n              hasOptimisticResult && options.rollbackOnError\n                ? previousResult\n                : resetOnSubmit\n                  ? null\n                  : current.result,\n            error,\n          };\n        });\n\n        if (isLatestRequest) {\n          notifyClientObserver(callbacksRef.current.onError, [error], \"Action onError\");\n          if (requestId === requestIdRef.current) {\n            notifyClientObserver(callbacksRef.current.onSettled, [null, error], \"Action onSettled\");\n          }\n        }\n\n        throw error;\n      }\n    },\n    [\n      options.optimistic,\n      options.retry,\n      options.rollbackOnError,\n      resetOnSubmit,\n      serverFn,\n      setActionState,\n    ],\n  ) as ServerFnSubmit<TInput, TResult>;\n\n  const formAction = useCallback(\n    async (formData: FormData) => {\n      try {\n        await submit(formData as TInput | FormData);\n      } catch (error) {\n        if (callbacksRef.current.throwOnFormError) {\n          throw error;\n        }\n      }\n    },\n    [submit],\n  );\n\n  const reset = useCallback(() => {\n    lastResetIdRef.current = ++requestIdRef.current;\n    setActionState({\n      pendingCount: 0,\n      status: \"idle\",\n      result: initialResult,\n      error: null,\n    });\n  }, [initialResult, setActionState]);\n\n  return useMemo(\n    () => ({\n      pending: state.pendingCount > 0,\n      status: state.status,\n      result: state.result,\n      error: state.error,\n      submit,\n      formAction,\n      reset,\n    }),\n    [formAction, reset, state.error, state.pendingCount, state.result, state.status, submit],\n  );\n}\n\n/**\n * Wrap a server function, or a route's default server function, as a callable\n * RPC with React mutation state.\n */\nexport function useAction<TInput, TResult, TError extends Error = Error>(\n  route: RouteActionTarget<ServerFn<TInput, TResult, TError>>,\n  options?: UseServerFnOptions<TResult, TError, TInput>,\n): UseActionReturn<TInput, TResult, TError>;\nexport function useAction<TInput, TResult, TError extends Error = Error>(\n  serverFn: ServerFn<TInput, TResult, TError>,\n  options?: UseServerFnOptions<TResult, TError, TInput>,\n): UseActionReturn<TInput, TResult, TError>;\nexport function useAction<TInput, TResult, TError extends Error = Error>(\n  target: ServerFn<TInput, TResult, TError> | RouteActionTarget<ServerFn<TInput, TResult, TError>>,\n  options: UseServerFnOptions<TResult, TError, TInput> = {},\n): UseActionReturn<TInput, TResult, TError> {\n  const serverFn = resolveServerFnTarget(target);\n  const action = useServerFn(serverFn, options);\n  const formActionRef = useRef(action.formAction);\n  formActionRef.current = action.formAction;\n\n  const Form = useMemo(() => {\n    // Keep both the component and its action stable, even when a parent caches\n    // the form element. Resolve the latest target/options at submission time.\n    const submitForm = (formData: FormData) => formActionRef.current(formData);\n    const ActionForm = (props: UseActionFormProps) =>\n      createElement(\"form\", {\n        ...props,\n        action: submitForm,\n      });\n\n    ActionForm.displayName = \"FarmActionForm\";\n    return ActionForm;\n  }, []);\n\n  return useMemo(() => {\n    const call = ((input?: TInput | FormData) =>\n      action.submit(input as TInput | FormData)) as ServerFnSubmit<TInput, TResult>;\n\n    return Object.assign(call, {\n      pending: action.pending,\n      status: action.status,\n      data: action.result,\n      result: action.result,\n      error: action.error,\n      formAction: action.formAction,\n      Form,\n      reset: action.reset,\n    });\n  }, [\n    Form,\n    action.error,\n    action.formAction,\n    action.pending,\n    action.reset,\n    action.result,\n    action.status,\n    action.submit,\n  ]);\n}\n\nfunction resolveServerFnTarget<TInput, TResult, TError extends Error>(\n  target: ServerFn<TInput, TResult, TError> | RouteActionTarget<ServerFn<TInput, TResult, TError>>,\n): ServerFn<TInput, TResult, TError> {\n  if (typeof target === \"function\") return target;\n  if (target && typeof target.action === \"function\") return target.action;\n\n  throw new TypeError(\n    \"useAction requires a server function or a route with at least one declared action\",\n  );\n}\n\nfunction normalizeServerFnError(error: unknown) {\n  if (error instanceof Error) return error;\n\n  const normalized = new Error(typeof error === \"string\" ? error : \"Server function failed\");\n  (normalized as Error & { cause?: unknown }).cause = error;\n  return normalized;\n}\n\nfunction isFormData(value: unknown): value is FormData {\n  if (!value || typeof value !== \"object\") return false;\n\n  if (typeof FormData !== \"undefined\" && value instanceof FormData) {\n    return true;\n  }\n\n  return (\n    Object.prototype.toString.call(value) === \"[object FormData]\" &&\n    typeof (value as { entries?: unknown }).entries === \"function\"\n  );\n}\n","import type { RetryOptions } from \"./api/client\";\n\n/**\n * Retry a server-function mutation with the API client's retry shape.\n *\n * Attempts run until success, until `count` retries are exhausted, or until\n * `shouldContinue` reports that the owning lifecycle was reset. The delay\n * callback receives the upcoming attempt number starting at 1, matching the\n * API client. Defaults to zero retries so existing behavior is unchanged.\n */\nexport async function invokeMutationWithRetry<T>(\n  invoke: () => Promise<T>,\n  retry: RetryOptions | undefined,\n  shouldContinue: () => boolean,\n): Promise<T> {\n  const maxRetries = Math.max(0, retry?.count ?? 0);\n  let attempt = 0;\n\n  while (true) {\n    try {\n      return await invoke();\n    } catch (error) {\n      if (attempt >= maxRetries || !shouldContinue()) throw error;\n\n      attempt += 1;\n      const delay = typeof retry?.delay === \"function\" ? retry.delay(attempt) : (retry?.delay ?? 0);\n      if (delay > 0) {\n        await new Promise<void>((resolve) => setTimeout(resolve, delay));\n        // The lifecycle may have been reset while this attempt waited.\n        if (!shouldContinue()) throw error;\n      }\n    }\n  }\n}\n","import {\n  createFarmCacheKey,\n  createRouteDataCacheKey,\n  createRouteDataCacheTag,\n  getFarmDataCache,\n  type RouteDataCacheKey,\n} from \"./cache\";\nimport { getServerActionExecutionContext } from \"./server-action-security\";\nimport {\n  createServerFn,\n  type AnyServerFnMiddleware,\n  type InferServerFnSchemaInput,\n  type InferServerFnSchemaOutput,\n  type ServerFn,\n  type ServerFnContext,\n  type ServerFnHandler,\n  type ServerFnHandlerContext,\n  type ServerFnMiddlewareContext,\n  type ServerFnSchema,\n  _parseServerFnSchema,\n} from \"./server-fn\";\nimport { createFarmServerQueryResult, type FarmServerQueryResult } from \"./server-query-protocol\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type ServerQueryStaleTime = number | false | `${number}${\"ms\" | \"s\" | \"m\" | \"h\"}`;\n\nexport type ServerQueryKey<TInput, TContext extends object = {}> = (\n  context: ServerFnContext<TInput, TContext>,\n) => MaybePromise<RouteDataCacheKey>;\n\nexport type ServerQueryOptions<\n  TSchema extends ServerFnSchema | undefined,\n  TResult,\n  TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n> = {\n  input?: TSchema;\n  output?: undefined;\n  middleware?: TMiddlewares;\n  key: ServerQueryKey<\n    TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n  /** Milliseconds, a duration string such as \"30s\", or false for no expiry. */\n  staleTime?: ServerQueryStaleTime;\n  /** Allow the configured client cache persistence adapter to store results on the device. */\n  persist?: boolean;\n  handler: ServerFnHandler<\n    TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown,\n    TResult,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n};\n\nexport type ServerQueryOutputOptions<\n  TInputSchema extends ServerFnSchema | undefined,\n  TOutputSchema extends ServerFnSchema,\n  TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n> = {\n  input?: TInputSchema;\n  output: TOutputSchema;\n  middleware?: TMiddlewares;\n  key: ServerQueryKey<\n    TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n  /** Milliseconds, a duration string such as \"30s\", or false for no expiry. */\n  staleTime?: ServerQueryStaleTime;\n  /** Allow the configured client cache persistence adapter to store results on the device. */\n  persist?: boolean;\n  handler: ServerFnHandler<\n    TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown,\n    unknown,\n    ServerFnMiddlewareContext<TMiddlewares>\n  >;\n};\n\nexport type ServerQuery<TInput, TResult> = ([unknown] extends [TInput]\n  ? (input?: TInput) => Promise<TResult>\n  : (input: TInput) => Promise<TResult>) & {\n  readonly __farmServerQuery: true;\n  readonly __farmServerQueryInput?: unknown;\n  readonly __farmServerQueryOutput?: unknown;\n};\n\nexport const FARM_SERVER_QUERY_SYMBOL = Symbol.for(\"farm.server-query\");\n\ntype AnyServerQueryOptions = {\n  input?: ServerFnSchema;\n  output?: ServerFnSchema;\n  middleware?: readonly AnyServerFnMiddleware[];\n  key: ServerQueryKey<any, any>;\n  staleTime?: ServerQueryStaleTime;\n  persist?: boolean;\n  handler: ServerFnHandler<any, any, any>;\n};\n\nconst requestInflight = new WeakMap<Request, Map<string, Promise<unknown>>>();\nconst detachedInflight = new Map<string, Promise<unknown>>();\n\nexport function createServerQuery<\n  TInputSchema extends ServerFnSchema,\n  TOutputSchema extends ServerFnSchema,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n>(\n  options: ServerQueryOutputOptions<TInputSchema, TOutputSchema, TMiddlewares>,\n): ServerQuery<\n  InferServerFnSchemaInput<TInputSchema>,\n  Awaited<InferServerFnSchemaOutput<TOutputSchema>>\n>;\nexport function createServerQuery<\n  TOutputSchema extends ServerFnSchema,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n>(\n  options: ServerQueryOutputOptions<undefined, TOutputSchema, TMiddlewares>,\n): ServerQuery<unknown, Awaited<InferServerFnSchemaOutput<TOutputSchema>>>;\nexport function createServerQuery<\n  TSchema extends ServerFnSchema,\n  TResult,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n>(\n  options: ServerQueryOptions<TSchema, TResult, TMiddlewares>,\n): ServerQuery<InferServerFnSchemaInput<TSchema>, Awaited<TResult>>;\nexport function createServerQuery<\n  TResult,\n  const TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly [],\n>(\n  options: ServerQueryOptions<undefined, TResult, TMiddlewares>,\n): ServerQuery<unknown, Awaited<TResult>>;\nexport function createServerQuery(options: AnyServerQueryOptions): ServerQuery<unknown, unknown> {\n  if (!options || typeof options.handler !== \"function\") {\n    throw new TypeError(\"createServerQuery requires a handler function\");\n  }\n  if (typeof options.key !== \"function\") {\n    throw new TypeError(\"createServerQuery requires a key function\");\n  }\n\n  const staleTime = normalizeServerQueryStaleTime(options.staleTime);\n  const execute = (\n    createServerFn as (options: any) => ServerFn<unknown, FarmServerQueryResult<any>>\n  )({\n    input: options.input,\n    middleware: options.middleware,\n    handler: async (context: ServerFnHandlerContext<any, any>) => {\n      const routeKey = await options.key(context);\n      assertServerQueryKey(routeKey);\n\n      const clientKey = createRouteDataCacheKey(routeKey);\n      const cacheKey = createFarmCacheKey([\"route-data\", routeKey]);\n      const producer = async () => {\n        const value = await options.handler(context);\n        return _parseServerFnSchema(options.output, value, \"output\", \"createServerQuery\");\n      };\n\n      let data: unknown;\n      let updatedAt: number;\n\n      if (staleTime === 0) {\n        data = await dedupeServerQueryRequest(cacheKey, context.request, producer);\n        updatedAt = Date.now();\n      } else {\n        const cache = getFarmDataCache();\n        data = await cache.getOrSet(cacheKey, producer, {\n          tags: [createRouteDataCacheTag(routeKey)],\n          revalidate: staleTime === false ? false : staleTime / 1000,\n        });\n        updatedAt =\n          (await cache.getEntryAsync(cacheKey, { allowStale: true }))?.createdAt ?? Date.now();\n      }\n\n      return createFarmServerQueryResult(data, {\n        key: clientKey,\n        staleTime,\n        updatedAt,\n        ...(options.persist === true ? { persist: true } : {}),\n      });\n    },\n  });\n\n  const query = async (input?: unknown) => {\n    const result = await execute(input);\n    return getServerActionExecutionContext() ? result : result.data;\n  };\n\n  Object.defineProperties(query, {\n    [FARM_SERVER_QUERY_SYMBOL]: {\n      value: true,\n      enumerable: false,\n    },\n    __farmServerQuery: {\n      value: true,\n      enumerable: false,\n    },\n    __farmServerQueryInput: {\n      value: options.input,\n      enumerable: false,\n    },\n    __farmServerQueryOutput: {\n      value: options.output,\n      enumerable: false,\n    },\n  });\n\n  return query as ServerQuery<unknown, unknown>;\n}\n\nasync function dedupeServerQueryRequest<TData>(\n  key: string,\n  request: Request | undefined,\n  producer: () => Promise<TData>,\n): Promise<TData> {\n  let inflight: Map<string, Promise<unknown>>;\n  if (request) {\n    inflight = requestInflight.get(request) ?? new Map();\n    requestInflight.set(request, inflight);\n  } else {\n    inflight = detachedInflight;\n  }\n\n  const existing = inflight.get(key) as Promise<TData> | undefined;\n  if (existing) return existing;\n\n  const promise = Promise.resolve().then(producer);\n  inflight.set(key, promise);\n\n  try {\n    return await promise;\n  } finally {\n    inflight.delete(key);\n  }\n}\n\nfunction normalizeServerQueryStaleTime(value: ServerQueryStaleTime | undefined): number | false {\n  if (value === false) return false;\n  if (value === undefined) return 0;\n\n  if (typeof value === \"number\") {\n    if (!Number.isFinite(value) || value < 0) {\n      throw new TypeError(\"createServerQuery staleTime must be a non-negative duration\");\n    }\n    return value;\n  }\n\n  const match = value.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h)$/);\n  if (!match) {\n    throw new TypeError('createServerQuery staleTime must look like \"250ms\", \"30s\", \"5m\", or \"1h\"');\n  }\n\n  const amount = Number(match[1]);\n  const unit = match[2];\n  const multiplier = unit === \"ms\" ? 1 : unit === \"s\" ? 1000 : unit === \"m\" ? 60_000 : 3_600_000;\n  return amount * multiplier;\n}\n\nfunction assertServerQueryKey(key: unknown): asserts key is RouteDataCacheKey {\n  if (typeof key === \"string\") {\n    if (key.trim().length > 0) return;\n  } else if (Array.isArray(key)) {\n    return;\n  }\n\n  throw new TypeError(\"createServerQuery key must return a non-empty string or an array\");\n}\n","export const FARM_SERVER_QUERY_RESULT_VERSION = 1 as const;\n\nexport type FarmServerQueryResult<TData> = {\n  __farmServerQuery: {\n    version: typeof FARM_SERVER_QUERY_RESULT_VERSION;\n    key: string;\n    staleTime: number | false;\n    updatedAt: number;\n    /** Declared by the query; allows the client persistence adapter to store the entry. */\n    persist?: boolean;\n  };\n  data: TData;\n};\n\nexport function createFarmServerQueryResult<TData>(\n  data: TData,\n  metadata: Omit<FarmServerQueryResult<TData>[\"__farmServerQuery\"], \"version\">,\n): FarmServerQueryResult<TData> {\n  return {\n    __farmServerQuery: {\n      version: FARM_SERVER_QUERY_RESULT_VERSION,\n      ...metadata,\n    },\n    data,\n  };\n}\n\nexport function isFarmServerQueryResult(value: unknown): value is FarmServerQueryResult<unknown> {\n  if (!value || typeof value !== \"object\") return false;\n\n  const metadata = (value as Partial<FarmServerQueryResult<unknown>>).__farmServerQuery;\n  return (\n    metadata?.version === FARM_SERVER_QUERY_RESULT_VERSION &&\n    typeof metadata.key === \"string\" &&\n    (metadata.staleTime === false || typeof metadata.staleTime === \"number\") &&\n    typeof metadata.updatedAt === \"number\" &&\n    \"data\" in value\n  );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useSyncExternalStore } from \"react\";\nimport { getFarmClientDataCache, type FarmClientCacheStatus } from \"./client-cache\";\nimport { attachRevalidationListeners } from \"./client-revalidation\";\nimport type { ServerQuery } from \"./server-query\";\nimport {\n  createServerQueryCallKey,\n  fetchServerQuery,\n  type ServerQueryFetchOptions,\n} from \"./server-query-runtime\";\n\nexport {\n  beginFarmServerQueryAction,\n  completeFarmServerQueryAction,\n  fetchServerQuery,\n  prefetchServerQuery,\n  shouldApplyFarmServerQueryActionResult,\n} from \"./server-query-runtime\";\nexport type {\n  FarmServerQueryActionInvocation,\n  ServerQueryFetchOptions,\n} from \"./server-query-runtime\";\n\nexport type UseServerQueryOptions = ServerQueryFetchOptions & {\n  enabled?: boolean;\n  refetchOnWindowFocus?: boolean;\n  refetchOnReconnect?: boolean;\n};\n\nexport type UseServerQueryResult<TData> = {\n  data: TData | undefined;\n  error: Error | null;\n  status: FarmClientCacheStatus;\n  pending: boolean;\n  fetching: boolean;\n  stale: boolean;\n  refetch: () => Promise<TData>;\n};\n\nexport function useServerQuery<TInput, TData>(\n  query: ServerQuery<TInput, TData>,\n  input: TInput,\n  options: UseServerQueryOptions = {},\n): UseServerQueryResult<TData> {\n  const cache = getFarmClientDataCache();\n  const key = createServerQueryCallKey(query, input);\n  const inputRef = useRef(input);\n  const optionsRef = useRef(options);\n  const mountedKeyRef = useRef<string | undefined>(undefined);\n  const pendingInvalidationRef = useRef(false);\n  inputRef.current = input;\n  optionsRef.current = options;\n\n  const subscribe = useCallback(\n    (listener: () => void) =>\n      cache.subscribe(key, (event) => {\n        if (event === \"invalidate\") pendingInvalidationRef.current = true;\n        else if (cache.get(key)?.fetching) {\n          // A shared read consumes this invalidation for every subscriber, even\n          // when React batches its pending and error snapshots into one render.\n          pendingInvalidationRef.current = false;\n        }\n        listener();\n      }),\n    [cache, key],\n  );\n  const getSnapshot = useCallback(() => cache.get<TData>(key), [cache, key]);\n  const entry = useSyncExternalStore(subscribe, getSnapshot, () => undefined);\n\n  const run = useCallback(\n    (force = false) => {\n      pendingInvalidationRef.current = false;\n      return fetchServerQuery(query, inputRef.current, {\n        ...optionsRef.current,\n        force,\n      });\n    },\n    [query],\n  );\n\n  useEffect(() => {\n    if (options.enabled === false) {\n      // Re-enabling is a new read, even when the query/input key is unchanged.\n      mountedKeyRef.current = undefined;\n      return;\n    }\n\n    const firstReadForKey = mountedKeyRef.current !== key;\n    if (firstReadForKey) mountedKeyRef.current = key;\n    if (\n      (firstReadForKey && (!entry || cache.isStale(key))) ||\n      (pendingInvalidationRef.current && entry?.invalidatedAt !== undefined && !entry.fetching)\n    ) {\n      void run().catch(() => undefined);\n    }\n  }, [cache, entry, key, options.enabled, run]);\n\n  useEffect(() => {\n    if (options.enabled === false) return;\n\n    return attachRevalidationListeners(\n      () => {\n        if (cache.isStale(key)) void run().catch(() => undefined);\n      },\n      {\n        refetchOnWindowFocus: options.refetchOnWindowFocus,\n        refetchOnReconnect: options.refetchOnReconnect,\n      },\n    );\n  }, [cache, key, options.enabled, options.refetchOnReconnect, options.refetchOnWindowFocus, run]);\n\n  const status = entry?.status ?? (entry ? \"success\" : \"idle\");\n  const fetching = entry?.fetching ?? false;\n\n  return {\n    data: entry?.data,\n    error: entry?.error ?? null,\n    status,\n    pending: status === \"pending\" && (entry?.updatedAt ?? 0) === 0,\n    fetching,\n    stale: cache.isStale(key),\n    refetch: () => run(true),\n  };\n}\n","export type FarmRevalidationListenerOptions = {\n  refetchOnWindowFocus?: boolean;\n  refetchOnReconnect?: boolean;\n};\n\n/**\n * Attach the shared window focus/reconnect revalidation listeners used by every\n * query consumer (React `useServerQuery` and the renderer-neutral\n * `createRendererQuery`). Connectivity-driven refresh behavior must live here\n * so all renderers observe the same triggers.\n *\n * Returns a disposer; a no-op outside the browser.\n */\nexport function attachRevalidationListeners(\n  refresh: () => void,\n  options: FarmRevalidationListenerOptions = {},\n): () => void {\n  if (typeof window === \"undefined\") return () => {};\n\n  const onFocus = options.refetchOnWindowFocus === false ? undefined : refresh;\n  const onOnline = options.refetchOnReconnect === false ? undefined : refresh;\n\n  if (onFocus) window.addEventListener(\"focus\", onFocus);\n  if (onOnline) window.addEventListener(\"online\", onOnline);\n  return () => {\n    if (onFocus) window.removeEventListener(\"focus\", onFocus);\n    if (onOnline) window.removeEventListener(\"online\", onOnline);\n  };\n}\n","\"use client\";\n\nimport { createFarmCacheKey } from \"./cache\";\nimport { getFarmClientDataCache, trackFarmClientCacheInvalidations } from \"./client-cache\";\nimport type { ServerQuery } from \"./server-query\";\nimport { isFarmServerQueryResult, type FarmServerQueryResult } from \"./server-query-protocol\";\n\nexport type ServerQueryFetchOptions = {\n  /** Used only when a non-Farm transport returns plain data. Farm transports use the declaration. */\n  staleTime?: number | false;\n  /** Return stale data immediately while refreshing it in the background. Default true. */\n  swr?: boolean;\n  /** Always wait for a new result. */\n  force?: boolean;\n};\n\nexport type FarmServerQueryActionInvocation = {\n  actionId: string;\n  args: readonly unknown[];\n  provisionalKey?: string;\n  owner?: object;\n};\n\ntype ActiveServerQueryInvocation = {\n  provisionalKey: string;\n  owner: object;\n};\n\ntype ServerQueryOwner = {\n  invalidations: ReturnType<typeof trackFarmClientCacheInvalidations>;\n  supersededKeys: Set<string>;\n};\n\ntype ServerQueryClientState = {\n  functionIds: WeakMap<Function, number>;\n  nextFunctionId: number;\n  active: ActiveServerQueryInvocation[];\n  latestOwners: Map<string, object>;\n  owners: Set<ServerQueryOwner>;\n};\n\nconst FARM_SERVER_QUERY_CLIENT_STATE = Symbol.for(\"farm.serverQueryClientState\");\nconst serverQueryClientGlobal = globalThis as typeof globalThis & {\n  [FARM_SERVER_QUERY_CLIENT_STATE]?: ServerQueryClientState;\n};\nconst serverQueryClientState: ServerQueryClientState = (serverQueryClientGlobal[\n  FARM_SERVER_QUERY_CLIENT_STATE\n] ??= {\n  functionIds: new WeakMap(),\n  nextFunctionId: 0,\n  active: [],\n  latestOwners: new Map(),\n  owners: new Set(),\n});\nserverQueryClientState.latestOwners ??= new Map();\nserverQueryClientState.owners ??= new Set();\n\nfunction isServerQueryOwnerSuperseded(owner: ServerQueryOwner, key: string): boolean {\n  const cache = getFarmClientDataCache();\n  const resolved = cache.resolveKey(key);\n  for (const superseded of owner.supersededKeys ?? []) {\n    if (cache.resolveKey(superseded) === resolved) return true;\n  }\n  return false;\n}\n\nfunction claimServerQueryKey(owner: ServerQueryOwner, key: string): boolean {\n  if (isServerQueryOwnerSuperseded(owner, key)) return false;\n  const resolved = getFarmClientDataCache().resolveKey(key);\n  // Set iteration follows request start order, not response timestamps. Record\n  // the claim on older live requests so it survives this owner's completion,\n  // even when an older reference only learns its canonical key afterward.\n  for (const older of serverQueryClientState.owners) {\n    if (older === owner) break;\n    older.supersededKeys.add(resolved);\n  }\n  return true;\n}\n\n// Global symbol registry key set on raw server query implementations by\n// createServerQuery. Referenced via Symbol.for instead of importing\n// server-query.ts, which would pull the server handler pipeline into the\n// client bundle.\nconst RAW_SERVER_QUERY_SYMBOL = Symbol.for(\"farm.server-query\");\n\n/**\n * A query reaching the browser should be a transformed server reference. The\n * raw implementation carries the server query symbol; executing it here would\n * run the server handler in the browser (#408). During SSR the raw\n * implementation is expected and runs directly.\n */\nfunction assertNotRawServerQueryInBrowser(query: unknown): void {\n  if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n  if (!(query as Record<symbol, unknown> | null)?.[RAW_SERVER_QUERY_SYMBOL]) return;\n  throw new Error(\n    [\n      \"useServerQuery received a raw server query implementation in the browser.\",\n      \"Server query handlers run only on the server. Enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,\",\n      \"or call the query from server code / an API route (createAPIClient) instead.\",\n    ].join(\"\\n\"),\n  );\n}\n\nexport function beginFarmServerQueryAction(\n  actionId: string,\n  args: readonly unknown[],\n): FarmServerQueryActionInvocation {\n  const active = serverQueryClientState.active.at(-1);\n  return {\n    actionId,\n    args,\n    provisionalKey: active?.provisionalKey,\n    owner: active?.owner,\n  };\n}\n\nexport function completeFarmServerQueryAction<TData>(\n  invocation: FarmServerQueryActionInvocation,\n  value: TData | FarmServerQueryResult<TData>,\n): TData {\n  if (!isFarmServerQueryResult(value)) return value as TData;\n\n  const cache = getFarmClientDataCache();\n  const metadata = value.__farmServerQuery;\n  if (!shouldApplyFarmServerQueryActionResult(invocation)) {\n    return value.data as TData;\n  }\n  if (invocation.provisionalKey) {\n    cache.alias(invocation.provisionalKey, metadata.key);\n  }\n  const owner = invocation.owner as ServerQueryOwner | undefined;\n  if (\n    owner &&\n    serverQueryClientState.owners.has(owner) &&\n    !claimServerQueryKey(owner, metadata.key)\n  ) {\n    return value.data as TData;\n  }\n  const invalidated = (invocation.owner as ServerQueryOwner | undefined)?.invalidations?.has(\n    metadata.key,\n  );\n\n  cache.set(metadata.key, {\n    data: value.data,\n    updatedAt: metadata.updatedAt,\n    staleAt: invalidated\n      ? 0\n      : metadata.staleTime === false\n        ? Number.POSITIVE_INFINITY\n        : metadata.updatedAt + metadata.staleTime,\n    status: \"success\",\n    error: null,\n    fetching: false,\n    persist: metadata.persist === true ? true : undefined,\n  });\n\n  return value.data as TData;\n}\n\nexport function shouldApplyFarmServerQueryActionResult(\n  invocation: FarmServerQueryActionInvocation,\n): boolean {\n  if (!invocation.provisionalKey || !invocation.owner) return true;\n  return isCurrentServerQueryOwner(invocation.provisionalKey, invocation.owner);\n}\n\nfunction isCurrentServerQueryOwner(provisionalKey: string, owner: object): boolean {\n  return (\n    serverQueryClientState.latestOwners.get(provisionalKey) === owner &&\n    !isServerQueryOwnerSuperseded(owner as ServerQueryOwner, provisionalKey)\n  );\n}\n\nexport function createServerQueryCallKey<TInput, TData>(\n  query: ServerQuery<TInput, TData>,\n  input: TInput,\n): string {\n  let id = serverQueryClientState.functionIds.get(query);\n  if (!id) {\n    id = ++serverQueryClientState.nextFunctionId;\n    serverQueryClientState.functionIds.set(query, id);\n  }\n  return createFarmCacheKey([\"server-query-call\", id, input]);\n}\n\nexport async function fetchServerQuery<TInput, TData>(\n  query: ServerQuery<TInput, TData>,\n  input: TInput,\n  options: ServerQueryFetchOptions = {},\n): Promise<TData> {\n  const cache = getFarmClientDataCache();\n  const provisionalKey = createServerQueryCallKey(query, input);\n  const entry = cache.get<TData>(provisionalKey);\n  const stale = cache.isStale(provisionalKey);\n  const inflight = cache.getInflight<TData>(provisionalKey);\n\n  if (\n    !options.force &&\n    entry &&\n    stale &&\n    (entry.status !== \"pending\" || entry.updatedAt !== 0) &&\n    entry.status !== \"error\" &&\n    (options.swr ?? true)\n  ) {\n    // Every SWR reader can use the previous value, including while another\n    // reader owns the refresh. Initial pending reads still wait below.\n    if (!inflight) {\n      void executeServerQuery(query, input, provisionalKey, options).catch(() => undefined);\n    }\n    return entry.data;\n  }\n\n  if (inflight && !options.force) return inflight;\n  if (!options.force && entry && !stale && entry.status !== \"error\") return entry.data;\n\n  return executeServerQuery(query, input, provisionalKey, options);\n}\n\nexport function prefetchServerQuery<TInput, TData>(\n  query: ServerQuery<TInput, TData>,\n  input: TInput,\n  options: Omit<ServerQueryFetchOptions, \"force\"> = {},\n): Promise<TData> {\n  return fetchServerQuery(query, input, options);\n}\n\nasync function executeServerQuery<TInput, TData>(\n  query: ServerQuery<TInput, TData>,\n  input: TInput,\n  provisionalKey: string,\n  options: ServerQueryFetchOptions,\n): Promise<TData> {\n  assertNotRawServerQueryInBrowser(query);\n  const cache = getFarmClientDataCache();\n  const inflight = cache.getInflight<TData>(provisionalKey);\n  if (inflight && !options.force) return inflight;\n\n  const owner: ServerQueryOwner = {\n    invalidations: trackFarmClientCacheInvalidations(cache),\n    supersededKeys: new Set(),\n  };\n  serverQueryClientState.latestOwners.set(provisionalKey, owner);\n  serverQueryClientState.owners.add(owner);\n  claimServerQueryKey(owner, provisionalKey);\n\n  const previous = cache.get<TData>(provisionalKey);\n  cache.set(provisionalKey, {\n    data: previous?.data as TData,\n    updatedAt: previous?.updatedAt ?? 0,\n    staleAt: previous?.staleAt ?? 0,\n    gcAt: previous?.gcAt,\n    invalidatedAt: previous?.invalidatedAt,\n    status: \"pending\",\n    error: null,\n    fetching: true,\n  });\n\n  let promise!: Promise<TData>;\n  promise = (async () => {\n    // Let the promise be assigned and registered before a query implementation\n    // can throw synchronously and enter the cleanup path.\n    await Promise.resolve();\n    try {\n      serverQueryClientState.active.push({ provisionalKey, owner });\n      let pending: Promise<TData>;\n      try {\n        pending = query(input);\n      } finally {\n        serverQueryClientState.active.pop();\n      }\n\n      const data = await pending;\n      const transported = cache.get<TData>(provisionalKey);\n      if (\n        isCurrentServerQueryOwner(provisionalKey, owner) &&\n        (!transported || transported.fetching)\n      ) {\n        const updatedAt = Date.now();\n        cache.set(provisionalKey, {\n          data,\n          updatedAt,\n          staleAt: owner.invalidations.has(provisionalKey)\n            ? 0\n            : options.staleTime === false\n              ? Number.POSITIVE_INFINITY\n              : updatedAt + (options.staleTime ?? 0),\n          status: \"success\",\n          error: null,\n          fetching: false,\n        });\n      }\n      return data;\n    } catch (cause) {\n      const error = normalizeServerQueryError(cause);\n      if (isCurrentServerQueryOwner(provisionalKey, owner)) {\n        const current = cache.get<TData>(provisionalKey);\n        cache.set(provisionalKey, {\n          data: current?.data as TData,\n          updatedAt: current?.updatedAt ?? 0,\n          staleAt: current?.staleAt ?? 0,\n          gcAt: current?.gcAt,\n          invalidatedAt: current?.invalidatedAt,\n          status: \"error\",\n          error,\n          fetching: false,\n        });\n      }\n      throw error;\n    } finally {\n      const invalidated =\n        isCurrentServerQueryOwner(provisionalKey, owner) && owner.invalidations.has(provisionalKey);\n      owner.invalidations.dispose();\n      serverQueryClientState.owners.delete(owner);\n      owner.supersededKeys.clear();\n      if (cache.getInflight(provisionalKey) === promise) {\n        cache.deleteInflight(provisionalKey);\n      }\n      if (serverQueryClientState.latestOwners.get(provisionalKey) === owner) {\n        serverQueryClientState.latestOwners.delete(provisionalKey);\n      }\n      // Notify only after retiring old work: mounted consumers must start a new\n      // read, not rejoin the promise whose result has just been invalidated.\n      if (invalidated) cache.invalidate(provisionalKey);\n    }\n  })();\n\n  cache.setInflight(provisionalKey, promise);\n  return promise;\n}\n\nfunction normalizeServerQueryError(cause: unknown): Error {\n  if (cause instanceof Error) return cause;\n  const error = new Error(typeof cause === \"string\" ? cause : \"Server query failed\");\n  (error as Error & { cause?: unknown }).cause = cause;\n  return error;\n}\n","import type { ResolvedFarmConfig } from \"../config\";\nimport {\n  getDefaultDeployOutputDir,\n  getDeployTargetForPreset,\n  resolveDeployOutputPath,\n} from \"../config\";\nimport type { ViteDevServer } from \"vite\";\nimport path from \"path\";\nimport { existsSync } from \"node:fs\";\nimport { logger } from \"../utils\";\nimport { createFarmApp } from \"../app\";\nimport { APIRouteManager } from \"../api/route-manager\";\nimport { resolveFarmAPIServerBasePath } from \"../api/server-path\";\nimport { getFarmAppDirectories } from \"../layers\";\nimport { buildUniversal } from \"../nitro/universal-build\";\nimport { getFarmDocsRouteTypeEntries } from \"../docs\";\nimport { generateFarmTypeArtifacts } from \"../type-artifacts\";\nimport { PluginManager } from \"../plugin\";\nimport { farmEnvironmentFunctionsPlugin } from \"../environment-vite\";\nimport { farmFontImportsPlugin } from \"../font-vite\";\nimport { createFarmSourceAlias, mergeFarmViteConfig } from \"../server/vite-config\";\nimport { getFarmRendererComponentExtensions, loadFarmRendererVitePlugins } from \"../renderer\";\nimport {\n  canUseRolldownForRouteDiscovery,\n  loadFarmProductionVite,\n  type FarmProductionViteRuntime,\n} from \"./production-vite\";\nimport { withProductionNodeEnv } from \"./production-node-env\";\n\ninterface BuildOptions {\n  preset?: string;\n  root?: string;\n  universal?: boolean; // Use universal build pattern (TanStack Start style)\n  /** @internal Production Vite preload started by the CLI. */\n  productionVite?: FarmProductionViteRuntime | Promise<FarmProductionViteRuntime>;\n}\n\ninterface BuildTargetBaseline {\n  preset: string;\n  distDir: string;\n  outputDir: string;\n  outputWasDerived: boolean;\n}\n\n/**\n * Build Farm.js application for production\n */\nexport async function build(config: ResolvedFarmConfig, options: BuildOptions = {}) {\n  return withProductionNodeEnv(() => buildWithProductionNodeEnv(config, options));\n}\n\n/** Every build path derived from config, recomputed once plugins have transformed it. */\nfunction createBuildTargetBaseline(config: ResolvedFarmConfig): BuildTargetBaseline {\n  const preset = config.preset || \"node-server\";\n  const distDir = config.distDir || \".farm\";\n  const outputDir = config.deploy.outputDir;\n  return {\n    preset,\n    distDir,\n    outputDir,\n    outputWasDerived:\n      outputDir === getDefaultDeployOutputDir(config.deploy.target, preset, distDir),\n  };\n}\n\nfunction resolveBuildTargets(\n  config: ResolvedFarmConfig,\n  options: BuildOptions,\n  baseline: BuildTargetBaseline,\n) {\n  const root = options.root || config.root || process.cwd();\n  const preset = options.preset || config.preset || \"node-server\";\n  const distDir = config.distDir || \".farm\";\n  const outputWasReplaced = config.deploy.outputDir !== baseline.outputDir;\n  const shouldRefreshDerivedOutput =\n    baseline.outputWasDerived &&\n    !outputWasReplaced &&\n    (preset !== baseline.preset || distDir !== baseline.distDir);\n  const deployTarget =\n    preset === config.deploy.preset ? config.deploy.target : getDeployTargetForPreset(preset);\n  const outputDir = shouldRefreshDerivedOutput\n    ? getDefaultDeployOutputDir(deployTarget, preset, distDir)\n    : config.deploy.outputDir;\n\n  return {\n    root,\n    preset,\n    srcDir: config.srcDir || \"src\",\n    distDir,\n    deployTarget,\n    outputDir,\n    deployOutputDir: resolveDeployOutputPath(root, outputDir),\n  };\n}\n\nasync function buildWithProductionNodeEnv(inputConfig: ResolvedFarmConfig, options: BuildOptions) {\n  let config = inputConfig;\n  const targetBaseline = createBuildTargetBaseline(config);\n  let targets: ReturnType<typeof resolveBuildTargets> | undefined;\n  const productionViteResultPromise =\n    options.universal === false\n      ? undefined\n      : Promise.allSettled([Promise.resolve(options.productionVite ?? loadFarmProductionVite())]);\n\n  const pluginManager = new PluginManager({\n    config,\n    isDev: false,\n    isProd: true,\n  });\n  pluginManager.addPlugins(config.plugins || []);\n  let projectModuleServer: ViteDevServer | undefined;\n\n  try {\n    await pluginManager.runHookParallel(\"init\");\n\n    // Settle plugin config before deriving the paths and deployment plan used\n    // by the production pipeline. Otherwise the build can report the returned\n    // config while still writing to the original locations.\n    config = await pluginManager.runHookSerial(\"config\", config);\n    if (options.universal === false && config.plugins.some((plugin) => plugin.routes)) {\n      throw new Error(\n        \"Plugin API routes require the default universal production build. Remove universal: false.\",\n      );\n    }\n    targets = resolveBuildTargets(config, options, targetBaseline);\n    config = {\n      ...config,\n      preset: targets.preset,\n      deploy: {\n        ...config.deploy,\n        target: targets.deployTarget,\n        preset: targets.preset,\n        outputDir: targets.outputDir,\n      },\n    };\n    pluginManager.updateContext({ config });\n    const { root, preset, srcDir, distDir, deployOutputDir } = targets;\n\n    logger.info(`🚜 Building Farm.js application with preset: ${preset}...`);\n\n    await pluginManager.setupPlugins();\n    await pluginManager.runHookParallel(\"beforeBundle\", {\n      root,\n      preset,\n      universal: options.universal !== false,\n      distDir,\n      outputDir: deployOutputDir,\n    });\n\n    // Step 1: Initialize Farm app to get route managers\n    logger.info(\"🔍 Discovering routes and API endpoints...\");\n    const productionViteResult = productionViteResultPromise\n      ? (await productionViteResultPromise)[0]\n      : undefined;\n    if (productionViteResult?.status === \"rejected\") throw productionViteResult.reason;\n    const productionVite = productionViteResult?.value;\n    const useProductionViteForDiscovery =\n      productionVite && canUseRolldownForRouteDiscovery(config.vite);\n    if (productionVite?.builder === \"rolldown\" && !useProductionViteForDiscovery) {\n      logger.info(\"🔌 Using Vite Rollup for route discovery with custom Vite configuration\");\n    }\n    const createViteServer = useProductionViteForDiscovery\n      ? productionVite.createServer\n      : (await import(\"vite\")).createServer;\n    projectModuleServer = await createProjectModuleServer(createViteServer, config, root);\n    const farmApp = createFarmApp(config, projectModuleServer);\n    await farmApp.initialize();\n\n    const routeManager = farmApp.getRouteManager();\n    const serverRenderer = farmApp.getServerRenderer();\n\n    const typeArtifacts = generateFarmTypeArtifacts({\n      root,\n      srcDir,\n      layers: config.layers,\n      plugins: config.plugins,\n      extraRoutes: [\n        ...(config.openapi?.enabled && config.openapi.route ? [config.openapi.route] : []),\n        ...getFarmDocsRouteTypeEntries(config.docs),\n      ],\n      suppressLintOnLink: config.suppressLintOnLink,\n      componentExtensions: config.renderer.componentExtensions,\n      i18nConfig: config.i18n,\n    }).catch((error: unknown) => {\n      // Non-fatal; type generation is for DX only. But say so: a silently\n      // skipped run leaves src/farm.d.ts describing routes that no longer\n      // exist, which reads as the framework having gone stale.\n      const message = error instanceof Error ? error.message : String(error);\n      logger.warn(`Route type generation failed (farm.d.ts may be stale): ${message}`);\n    });\n\n    // Type artifacts and API discovery scan independent inputs, so keep them\n    // off the critical path by running both after app initialization.\n    const apiRouteManager = new APIRouteManager(\n      getFarmAppDirectories(config),\n      projectModuleServer,\n      {\n        throwOnLoadError: true,\n        plugins: config.plugins,\n        i18n: farmApp.getI18nRuntime(),\n        bodySizeLimit: config.server.bodySizeLimit,\n        basePath: resolveFarmAPIServerBasePath(config.api),\n      },\n    );\n    const [, apiDiscovery] = await Promise.allSettled([\n      typeArtifacts,\n      apiRouteManager.discoverRoutes(),\n    ]);\n    if (apiDiscovery.status === \"rejected\") throw apiDiscovery.reason;\n\n    // Use universal build pattern if enabled\n    if (options.universal !== false) {\n      // Default to universal build (new pattern)\n      await buildUniversal(config, routeManager, apiRouteManager, serverRenderer, {\n        preset,\n        root,\n        pluginManager,\n        productionVite,\n      });\n    } else {\n      const { build: legacyViteBuild } = await import(\"vite\");\n      // Legacy build pattern (for backward compatibility)\n      // Step 1: Build client bundle with Vite\n      logger.info(\"📦 Building client bundle...\");\n      await buildClient(legacyViteBuild, config, root, srcDir, path.join(root, distDir, \"client\"));\n\n      // Step 2: Build SSR bundle with Vite\n      logger.info(\"📦 Building SSR bundle...\");\n      await buildSSR(legacyViteBuild, config, root, srcDir, path.join(root, distDir, \"server\"));\n\n      // Step 3: Build with Nitro\n      logger.info(`🚀 Building server with Nitro (preset: ${preset})...`);\n      await buildNitro(\n        config,\n        routeManager,\n        apiRouteManager,\n        serverRenderer,\n        preset,\n        root,\n        distDir,\n        pluginManager,\n      );\n    }\n\n    await pluginManager.runHookParallel(\"buildEnd\");\n    await pluginManager.runHookParallel(\"afterBundle\", {\n      root,\n      preset,\n      universal: options.universal !== false,\n      distDir,\n      outputDir: deployOutputDir,\n      success: true,\n    });\n\n    // The one completion summary for the whole pipeline: inner stages and the\n    // CLI stay quiet so success is reported exactly once, and the line that\n    // names the output directory also names the preset that chose it.\n    logger.success(`✅ Build completed successfully! (preset: ${preset})`);\n    logger.info(`📁 Output directory: ${deployOutputDir}`);\n  } catch (error) {\n    const { root, preset, distDir, deployOutputDir } =\n      targets ?? resolveBuildTargets(config, options, targetBaseline);\n    await pluginManager.runHookParallel(\"onError\", {\n      phase: \"build\",\n      error,\n      meta: {\n        root,\n        preset,\n      },\n    });\n    await pluginManager.runHookParallel(\"afterBundle\", {\n      root,\n      preset,\n      universal: options.universal !== false,\n      distDir,\n      outputDir: deployOutputDir,\n      success: false,\n    });\n    logger.error(`❌ Build failed: ${error}`);\n    throw error;\n  } finally {\n    await projectModuleServer?.close();\n  }\n}\n\nasync function createProjectModuleServer(\n  createViteServer: FarmProductionViteRuntime[\"createServer\"],\n  config: ResolvedFarmConfig,\n  root: string,\n): Promise<ViteDevServer> {\n  const rendererVitePlugins = await loadFarmRendererVitePlugins(config.renderer, root, {\n    ssr: true,\n  });\n  const viteConfig = mergeFarmViteConfig(\n    {\n      root,\n      appType: \"custom\",\n      mode: \"production\",\n      css: {\n        postcss: {\n          plugins: [],\n        },\n      },\n      plugins: [\n        ...(rendererVitePlugins as any[]),\n        farmFontImportsPlugin({\n          root,\n          basePath: config.basePath,\n          publicDir: config.publicDir,\n        }),\n        farmEnvironmentFunctionsPlugin(),\n      ],\n      server: {\n        middlewareMode: true,\n        hmr: false,\n      },\n      resolve: {\n        alias: createFarmSourceAlias(root, config.srcDir),\n        dedupe: [...(config.renderer.dedupe || [])],\n      },\n      optimizeDeps: {\n        noDiscovery: true,\n      },\n      logLevel: \"silent\",\n    },\n    config.vite,\n  );\n\n  return createViteServer({\n    ...viteConfig,\n    root,\n    configFile: false,\n    appType: \"custom\",\n    mode: \"production\",\n    esbuild: {\n      ...(typeof viteConfig.esbuild === \"object\" ? viteConfig.esbuild : {}),\n      jsxDev: false,\n    },\n    server: {\n      ...viteConfig.server,\n      middlewareMode: true,\n      hmr: false,\n      // This server only loads modules for a single build. HMR alone does not\n      // disable filesystem watching, which can race with generated output.\n      watch: null,\n    },\n    optimizeDeps: {\n      ...viteConfig.optimizeDeps,\n      noDiscovery: true,\n    },\n  });\n}\n\n/**\n * Build client bundle\n */\nasync function buildClient(\n  viteBuild: (typeof import(\"vite\"))[\"build\"],\n  config: ResolvedFarmConfig,\n  root: string,\n  srcDir: string,\n  outputDir: string,\n) {\n  const { farmI18nClientBridgePlugin, farmPlugin } = await import(\"../vite\");\n  const { PluginManager } = await import(\"../plugin\");\n\n  const pluginManager = new PluginManager({\n    config,\n    isDev: false,\n    isProd: true,\n  });\n  pluginManager.addPlugins(config.plugins || []);\n\n  await viteBuild({\n    root,\n    build: {\n      outDir: outputDir,\n      emptyOutDir: true,\n      rollupOptions: {\n        input: resolveLegacyPageEntry(config, root, srcDir),\n      },\n    },\n    plugins: [\n      farmI18nClientBridgePlugin(),\n      farmPlugin(config, pluginManager),\n      farmEnvironmentFunctionsPlugin(),\n    ],\n    mode: \"production\",\n  });\n}\n\n/**\n * Build SSR bundle\n */\nasync function buildSSR(\n  viteBuild: (typeof import(\"vite\"))[\"build\"],\n  config: ResolvedFarmConfig,\n  root: string,\n  srcDir: string,\n  outputDir: string,\n) {\n  const { farmI18nClientBridgePlugin, farmPlugin } = await import(\"../vite\");\n  const { PluginManager } = await import(\"../plugin\");\n\n  const pluginManager = new PluginManager({\n    config,\n    isDev: false,\n    isProd: true,\n  });\n  pluginManager.addPlugins(config.plugins || []);\n\n  const ssrEntry = resolveLegacyPageEntry(config, root, srcDir);\n\n  await viteBuild({\n    root,\n    build: {\n      ssr: true,\n      outDir: outputDir,\n      emptyOutDir: true,\n      rollupOptions: {\n        input: ssrEntry,\n      },\n    },\n    define: {\n      __FARM_API_BASE_URL__: JSON.stringify(config.api.baseURL),\n      __FARM_ENV__: JSON.stringify(config.env || { server: {}, public: {} }),\n      __FARM_PUBLIC_ENV__: JSON.stringify(config.env?.public || {}),\n    },\n    plugins: [\n      farmI18nClientBridgePlugin(),\n      farmPlugin(config, pluginManager),\n      farmEnvironmentFunctionsPlugin(),\n    ],\n    mode: \"production\",\n  });\n}\n\nfunction resolveLegacyPageEntry(config: ResolvedFarmConfig, root: string, srcDir: string): string {\n  const appDir = path.join(root, srcDir, \"app\");\n  for (const extension of getFarmRendererComponentExtensions(config.renderer)) {\n    const candidate = path.join(appDir, `page${extension}`);\n    if (existsSync(candidate)) return candidate;\n  }\n  return path.join(appDir, \"page.tsx\");\n}\n\n/**\n * Build with Nitro\n */\nasync function buildNitro(\n  config: ResolvedFarmConfig,\n  routeManager: any,\n  apiRouteManager: APIRouteManager,\n  serverRenderer: any,\n  preset: string,\n  root: string,\n  distDir: string,\n  pluginManager?: PluginManager,\n) {\n  const [{ createNitroConfig }, { createNitro, build: nitroBuild }] = await Promise.all([\n    import(\"../nitro\"),\n    import(\"nitro\"),\n  ]);\n  let nitroConfig = await createNitroConfig(\n    config,\n    routeManager,\n    apiRouteManager,\n    serverRenderer,\n    preset,\n  );\n\n  if (pluginManager) {\n    nitroConfig = await pluginManager.runHookSerial(\"beforeNitroBuild\", nitroConfig);\n  }\n\n  // Directory structure:\n  // .farm/\n  //   ├── client/          - Client-side build output (Vite)\n  //   ├── server/          - SSR build output (Vite)\n  //   ├── .nitro/          - Nitro's build directory (temporary, where it does its work)\n  //   │   └── server/      - Handlers and source files for Nitro\n  //   └── .output/         - Final deployable output (this is what gets deployed)\n  //       ├── server/      - Serverless function bundles\n  //       ├── public/      - Static assets\n  //       └── config.json  - Vercel routing config\n  //\n  // IMPORTANT: Nitro is configured to output to .farm/.output (NOT .nitro/.output)\n  // This is ensured by explicitly setting output.dir in the Nitro config\n  //\n  // Build flow:\n  // 1. Vite builds client → .farm/client\n  // 2. Vite builds SSR → .farm/server\n  // 3. Copy client assets → .farm/.output/public\n  // 4. Copy SSR bundles → .farm/.nitro/server/farm\n  // 5. Nitro builds from .farm/.nitro → outputs to .farm/.output (via output.dir config)\n  // 6. Deploy from .farm/.output\n\n  // Ensure output directory exists before building\n  const outputDir = resolveDeployOutputPath(root, config.deploy.outputDir);\n  const serverOutputDir = path.join(outputDir, \"server\");\n  const publicOutputDir = path.join(outputDir, \"public\");\n  const { mkdir, cp } = await import(\"fs/promises\");\n  await mkdir(serverOutputDir, { recursive: true });\n  await mkdir(publicOutputDir, { recursive: true });\n\n  // Copy client assets to public directory for Nitro to serve\n  // This ensures Vercel can serve static files from the public directory\n  const clientDir = path.join(root, distDir, \"client\");\n  try {\n    // Ensure public directory exists\n    await mkdir(publicOutputDir, { recursive: true });\n\n    // Copy all client assets including manifest\n    await cp(clientDir, publicOutputDir, { recursive: true });\n    logger.info(\"📦 Copied client assets to public directory\");\n\n    // Verify important files are present\n    const manifestPath = path.join(publicOutputDir, \"farm-client-manifest.json\");\n    const assetsDir = path.join(publicOutputDir, \"assets\");\n    const manifestExists = await import(\"fs/promises\").then((fs) =>\n      fs\n        .access(manifestPath)\n        .then(() => true)\n        .catch(() => false),\n    );\n    const assetsExist = await import(\"fs/promises\").then((fs) =>\n      fs\n        .access(assetsDir)\n        .then(() => true)\n        .catch(() => false),\n    );\n\n    if (manifestExists && assetsExist) {\n      logger.info(\"✅ Verified client assets are present\");\n    } else {\n      logger.warn(\"⚠️  Some client assets may be missing\");\n    }\n  } catch (error) {\n    logger.error(`❌ Failed to copy client assets: ${error}`);\n    throw error;\n  }\n\n  // Copy SSR bundles to Nitro server directory so they're included in the build\n  // These go into .farm/.nitro/server/farm (build directory)\n  // Nitro will then bundle them and output to .farm/.output/server\n  const serverDir = path.join(root, distDir, \"server\");\n  const nitroServerDir = path.join(root, distDir, \".nitro\", \"server\", \"farm\");\n  try {\n    await mkdir(nitroServerDir, { recursive: true });\n    await cp(serverDir, nitroServerDir, { recursive: true });\n    logger.info(\"📦 Copied SSR bundles to Nitro server directory\");\n  } catch (error) {\n    logger.warn(`Could not copy SSR bundles: ${error}`);\n  }\n\n  // Create Nitro instance - this handles preset loading and config preparation\n  // The createNitro function loads the preset and normalizes the config\n  const nitro = await createNitro(nitroConfig);\n\n  // Populate the runtime registry before building\n  // This ensures route managers are available at runtime\n  // Note: The registry will be populated again in the build:before hook\n  // but we also populate it here to ensure it's available\n  // Registry file is in .farm/.nitro/server (build directory)\n  // But will be bundled and available in .farm/.output/server (output directory)\n  const registryPath = path.join(root, distDir, \".nitro\", \"server\", \"farm-registry.ts\");\n  try {\n    const { farmRegistry } = await import(/* @vite-ignore */ registryPath);\n    farmRegistry.apiRouteManager = apiRouteManager;\n    farmRegistry.routeManager = routeManager;\n    farmRegistry.serverRenderer = serverRenderer;\n    farmRegistry.env = config.env || { server: {}, public: {} };\n\n    // Store route paths for SSR module loading\n    const routePaths: Record<string, string> = {};\n    for (const [pattern, entry] of routeManager.getRoutes()) {\n      const bundledPath = entry.modulePath\n        .replace(/.*\\/src\\/app\\//, \"\")\n        .replace(/\\.(tsx?|jsx?)$/, \".js\");\n      routePaths[pattern] = bundledPath;\n    }\n    farmRegistry.routePaths = routePaths;\n\n    // Load client manifest\n    try {\n      const clientManifestPath = path.join(root, distDir, \"client\", \"farm-client-manifest.json\");\n      const { readFile } = await import(\"fs/promises\");\n      const manifestContent = await readFile(clientManifestPath, \"utf-8\");\n      farmRegistry.clientManifest = JSON.parse(manifestContent);\n    } catch {\n      farmRegistry.clientManifest = {};\n    }\n  } catch (error) {\n    logger.warn(`Could not populate registry: ${error}`);\n  }\n\n  // Build Nitro with the prepared instance\n  await nitroBuild(nitro);\n\n  if (pluginManager) {\n    await pluginManager.runHookParallel(\"afterNitroBuild\", {\n      root,\n      preset,\n      distDir,\n      outputDir: resolveDeployOutputPath(root, config.deploy.outputDir),\n    });\n  }\n}\n","import type { RedirectConfig, ResolvedFarmConfig, RewriteConfig } from \"../config\";\nimport { hasCustomFarmRouteContext, resolveDeployOutputPath } from \"../config\";\nimport {\n  FARM_CLIENT_CSS_HREF_PLACEHOLDER,\n  FARM_CLIENT_JS_SRC_PLACEHOLDER,\n  findFingerprintedClientEntry,\n  resolveHashedClientCssHref,\n  resolveHashedClientJsSrc,\n} from \"./client-css-href\";\nimport type { RouteManager } from \"../routing/route-manager\";\nimport type { APIRouteManager } from \"../api/route-manager\";\nimport { resolveFarmAPIServerBasePath } from \"../api/server-path\";\nimport type { ServerRenderer } from \"../server/renderer\";\nimport type { FarmPlugin, PluginManager } from \"../plugin\";\nimport {\n  generateFarmClientPluginEntryCode,\n  type FarmClientPluginEntryCode,\n} from \"../client-plugin-build\";\nimport {\n  generateClientCachePersistenceCode,\n  resolveFarmClientCacheAdapterEntry,\n  type ClientCachePersistenceEntryCode,\n} from \"../client-cache-persistence-build\";\nimport type { Rollup } from \"vite\";\nimport os from \"os\";\nimport path from \"path\";\nimport { constants as fsConstants, existsSync, readFileSync } from \"fs\";\nimport { fileURLToPath } from \"url\";\nimport { builtinModules, createRequire } from \"module\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport { logger, toPosixPath, toViteModuleId } from \"../utils\";\nimport {\n  enforceFarmIsolatedHydrationRouteBudget,\n  getClientModuleHydrationPlan,\n  getClientModuleMetadata,\n  resolveFarmIsolatedClientHydrationMode,\n  type ClientModuleHydrationPlan,\n  type IsolatedClientBoundaryReference,\n} from \"../utils/client-component\";\nimport type { FarmIsolatedClientHydrationMode } from \"../types\";\nimport { isFarmMarkdownPageFile } from \"../app-markdown\";\nimport type { ProgrammaticRedirectRoute } from \"../routes\";\nimport type { NitroConfig } from \"nitro/config\";\nimport {\n  applyFarmWorkflowVercelCrons,\n  prepareFarmWorkflowsForNitro,\n  type PreparedFarmWorkflows,\n} from \"../workflows\";\nimport {\n  applyFarmCronVercelCrons,\n  createFarmCronCloudflareConfig,\n  mergeScheduledTasks,\n  prepareFarmCronForNitro,\n} from \"../cron\";\nimport { routeRulesToNitroRouteRules } from \"../route-rules\";\nimport { getFarmAppDirectories } from \"../layers\";\nimport { farmEnvironmentFunctionsPlugin } from \"../environment-vite\";\nimport {\n  createFarmDocsLastModifiedManifest,\n  FARM_DOCS_LAST_MODIFIED_MANIFEST,\n} from \"../docs/last-modified\";\nimport {\n  generateFarmDocsSearchClientRuntime,\n  isFarmDocsSearchEnabled,\n  resolveFarmDocsSearchClientModule,\n} from \"../docs/search-client\";\nimport { resolveFarmDocsFontAssets, toFarmDocsPublicFontAssets } from \"../docs/fonts\";\nimport {\n  createFarmRouteRuntimeManifest,\n  validateFarmRouteRuntimeDeployment,\n  writeFarmRouteRuntimeManifest,\n} from \"../route-runtime-manifest\";\nimport type { FarmRouteRuntimeManifest, FarmRouteRuntimeManifestEntry } from \"../route-runtime\";\nimport { createFarmVercelRouteRuntimeFunctions } from \"./vercel-route-runtime\";\nimport { buildFarmVercelRoutes } from \"./vercel-assets\";\nimport { createFarmNodeServerEntry } from \"./node-server-entry\";\nimport { resolveFarmNotFoundComponentPath } from \"../not-found\";\nimport { readFarmI18nCatalogs } from \"../i18n/catalog\";\nimport type { FarmI18nCatalogs } from \"../i18n/types\";\nimport { getFarmIntegrationPluginServerRuntime, getIntegrationProviders } from \"../integrations\";\nimport {\n  generateFarmIntegrationProviderClientCode,\n  generateFarmIntegrationProviderServerModules,\n} from \"../integration-provider-build\";\nimport type { TransformOptions } from \"esbuild\";\nimport { loadFarmProductionVite, type FarmProductionViteRuntime } from \"../build/production-vite\";\nimport { adaptTailwindVitePlugin } from \"../build/vite-plugin-compat\";\nimport { mergeFarmFontCss } from \"../font-vite\";\nimport type { FarmIslandStrategy } from \"../island\";\nimport { createFarmSourceAlias } from \"../server/vite-config\";\nimport { DEFAULT_NOT_FOUND_STYLES } from \"../components/not-found-styles\";\nimport { createFarmThemeCssPlugin } from \"../theme/vite\";\nimport { resolveFarmInstrumentationFile } from \"../instrumentation\";\nimport { isReactRenderer, loadFarmRendererVitePlugins, REACT_RENDERER } from \"../renderer\";\nimport { appendMiddlewareRoutePath } from \"../middleware/path\";\nimport type { FarmRenderer } from \"../renderer\";\n\n// Type alias for OutputBundle\ntype OutputBundle = Rollup.OutputBundle;\ntype NitroEsbuildOptions = NonNullable<NonNullable<NitroConfig[\"esbuild\"]>[\"options\"]>;\ntype FarmNitroRuntime = typeof import(\"nitro\");\ntype UniversalPageRoute = {\n  pattern: string;\n  modulePath: string;\n  source?: string;\n  markdownSourcePath?: string;\n};\ntype UniversalBoundaryRoute = {\n  pattern: string;\n  modulePath: string;\n};\ntype UniversalRouteSlot = {\n  name: string;\n  ownerPattern: string;\n  pattern: string;\n  modulePath: string;\n  containerId: string;\n  interception: boolean;\n  fallback: boolean;\n};\ntype UniversalConfiguredHeaderRoute = {\n  source: string;\n  headers: Array<{ key: string; value: string }>;\n};\ntype UniversalMetadataImageRoute = {\n  pattern: string;\n  kind: \"opengraph\" | \"twitter\";\n  fileName: \"opengraph-image\" | \"twitter-image\";\n  sourceType: \"module\" | \"static\";\n  modulePath?: string;\n  staticInfo?: {\n    contentType: string;\n    width: number;\n    height: number;\n    alt?: string;\n    hash: string;\n    byteLength: number;\n  };\n  data?: string;\n};\ntype UniversalApplicationMetadataRoute = {\n  pattern: string;\n  kind: \"sitemap\" | \"robots\" | \"manifest\";\n  outputName: \"sitemap.xml\" | \"robots.txt\" | \"manifest.webmanifest\";\n  modulePath: string;\n};\ntype UniversalMiddlewareRoute = {\n  path: string;\n  filePath: string;\n};\n\nfunction preloadFarmNitroRuntime(): Promise<PromiseSettledResult<FarmNitroRuntime>> {\n  return import(\"nitro\").then(\n    (value) => ({ status: \"fulfilled\", value }),\n    (reason) => ({ status: \"rejected\", reason }),\n  );\n}\n\n// Get __dirname equivalent for ESM\nconst _filename = typeof import.meta.url !== \"undefined\" ? fileURLToPath(import.meta.url) : \"\";\nconst _dirname = path.dirname(_filename);\nconst NODE_BUILTIN_MODULES = new Set([\n  ...builtinModules,\n  ...builtinModules.map((moduleName) => `node:${moduleName}`),\n]);\nconst NITRO_EXTERNAL_MODULES = new Set([\n  \"react\",\n  \"react-dom\",\n  \"react-dom/server\",\n  \"@prisma/client\",\n  \"@prisma/client/default\",\n  \"@prisma/client/default.js\",\n  \".prisma/client\",\n  \".prisma/client/default\",\n  \"better-sqlite3\",\n  \"fsevents\",\n  \"esbuild\",\n  \"lightningcss\",\n  \"rollup\",\n  \"vite\",\n  \"vite-rolldown\",\n  \"nitro\",\n  \"nitropack\",\n  \"sharp\",\n]);\nconst FARM_SSR_PACKAGE_IMPORT = \"#farm-ssr-entry\";\nconst FARM_SSR_OUTPUT_DIR = \"farm-ssr\";\nconst FARM_CLIENT_BUILD_TARGET = [\"es2020\", \"edge88\", \"firefox78\", \"chrome87\", \"safari14\"];\n\nfunction resolveNitroRuntimeDependency(root: string, specifier: string): string {\n  return createRequire(resolveNitroPackageEntry(root)).resolve(specifier).split(path.sep).join(\"/\");\n}\n\n/**\n * Rollup fallback resolver for the temporary prerender server. Bare ids that\n * the regular pipeline cannot resolve (Nitro virtual modules import Nitro's\n * runtime dependencies without a real importer) are retried from Nitro's own\n * package location, where pnpm's strict layout can supply them.\n */\nexport function createPrerenderRuntimeResolverPlugin(\n  root: string,\n  resolveNitroEntry: (projectRoot: string) => string = resolveNitroPackageEntry,\n): Rollup.Plugin {\n  let nitroEntry: string | null | undefined;\n\n  return {\n    name: \"farm-prerender-runtime-resolver\",\n    async resolveId(id, _importer, options) {\n      if (options.custom?.farmPrerenderRuntimeResolve) return null;\n      if (\n        id.startsWith(\"\\0\") ||\n        id.startsWith(\".\") ||\n        id.startsWith(\"#\") ||\n        id.startsWith(\"virtual:\") ||\n        path.isAbsolute(id) ||\n        NODE_BUILTIN_MODULES.has(id)\n      ) {\n        return null;\n      }\n\n      if (nitroEntry === undefined) {\n        try {\n          nitroEntry = resolveNitroEntry(root);\n        } catch {\n          nitroEntry = null;\n        }\n      }\n      if (!nitroEntry) return null;\n\n      return this.resolve(id, nitroEntry, {\n        ...options,\n        skipSelf: true,\n        custom: { ...options.custom, farmPrerenderRuntimeResolve: true },\n      });\n    },\n  };\n}\n\nfunction resolveNitroPackageEntry(root: string): string {\n  const projectRequire = createRequire(path.join(root, \"package.json\"));\n  let runtimeRequire = projectRequire;\n  try {\n    runtimeRequire = createRequire(projectRequire.resolve(\"@farm.js/core\"));\n  } catch {\n    // Source-only framework builds can resolve Nitro directly from the project.\n  }\n  return runtimeRequire.resolve(\"nitro\");\n}\n\nfunction cloneConfigValue<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n  if (value === null || typeof value !== \"object\") return value;\n  if (seen.has(value)) return seen.get(value) as T;\n  if (value instanceof RegExp) return new RegExp(value.source, value.flags) as T;\n  if (value instanceof Date) return new Date(value) as T;\n\n  if (Array.isArray(value)) {\n    const clone: unknown[] = [];\n    seen.set(value, clone);\n    for (const entry of value) clone.push(cloneConfigValue(entry, seen));\n    return clone as T;\n  }\n\n  const clone: Record<PropertyKey, unknown> = {};\n  seen.set(value, clone);\n  for (const key of Reflect.ownKeys(value)) {\n    clone[key] = cloneConfigValue((value as Record<PropertyKey, unknown>)[key], seen);\n  }\n  return clone as T;\n}\n\nfunction snapshotSSRRebundleOptions(config: NitroConfig) {\n  return cloneConfigValue({\n    alias: config.alias,\n    commonJS: config.commonJS,\n    entry: config.entry,\n    externals: config.externals,\n    exportConditions: config.exportConditions,\n    imports: config.imports,\n    inlineDynamicImports: config.inlineDynamicImports,\n    moduleSideEffects: config.moduleSideEffects,\n    noExternals: config.noExternals,\n    node: config.node,\n    nodeModulesDirs: config.nodeModulesDirs,\n    plugins: config.plugins,\n    replace: config.replace,\n    serverEntry: config.serverEntry,\n    typescript: config.typescript,\n    unenv: config.unenv,\n    virtual: config.virtual,\n    wasm: config.experimental?.wasm,\n    bundleRuntimeDependencies: config.experimental?.bundleRuntimeDependencies,\n  });\n}\n\nasync function canUseRolldownBuilder(): Promise<boolean> {\n  const [major = 0, minor = 0] = process.versions.node.split(\".\").map(Number);\n  const isSupportedNode = major > 22 || (major === 22 && minor >= 12);\n  if (!isSupportedNode) {\n    return false;\n  }\n\n  try {\n    await import(\"rolldown\");\n    return true;\n  } catch {\n    // Rolldown is optional so --no-optional installs retain Rollup.\n    return false;\n  }\n}\n\nfunction isCloudflareImagePreset(preset: string): boolean {\n  return preset === \"cloudflare\" || preset === \"cloudflare-pages\" || preset === \"cloudflare-module\";\n}\n\nfunction shouldUseExternalMetadataImageRuntime(\n  preset: string,\n  hasGeneratedMetadataImages: boolean,\n): boolean {\n  return hasGeneratedMetadataImages && preset !== \"vercel-edge\" && !isCloudflareImagePreset(preset);\n}\n\nfunction resolveImageRuntime(\n  config: ResolvedFarmConfig,\n  preset: string,\n): \"none\" | \"node\" | \"cloudflare\" {\n  if (config.images.provider === \"none\") return \"none\";\n  const cloudflarePreset = isCloudflareImagePreset(preset);\n  if (config.images.provider === \"node\" && cloudflarePreset) {\n    throw new Error('images.provider \"node\" cannot run in a Cloudflare deployment');\n  }\n  if (config.images.provider === \"cloudflare\" && !cloudflarePreset) {\n    throw new Error('images.provider \"cloudflare\" requires a Cloudflare deployment preset');\n  }\n  return config.images.provider === \"cloudflare\" ||\n    (config.images.provider === \"auto\" && cloudflarePreset)\n    ? \"cloudflare\"\n    : \"node\";\n}\n\nfunction isNitroRollupExternal(id: string): boolean {\n  const normalizedId = id.replace(/\\\\/g, \"/\");\n\n  return (\n    NODE_BUILTIN_MODULES.has(id) ||\n    NITRO_EXTERNAL_MODULES.has(id) ||\n    normalizedId.startsWith(\".prisma/\") ||\n    normalizedId.includes(\"/node_modules/@prisma/client/\") ||\n    normalizedId.includes(\"/node_modules/.prisma/client/\")\n  );\n}\n\nconst FARM_METADATA_IMAGE_WASM_PREFIX = \"\\0farm-metadata-image-wasm:\";\n\nfunction createMetadataImageWasmPlugin(): Rollup.Plugin {\n  return {\n    name: \"farm-metadata-image-wasm\",\n    resolveId(source, importer) {\n      if (\n        !source.endsWith(\".wasm?module\") ||\n        !importer?.replace(/\\\\/g, \"/\").includes(\"/@vercel/og/\")\n      ) {\n        return null;\n      }\n\n      const requestPath = source.slice(0, -\"?module\".length);\n      const resolvedPath = path.isAbsolute(requestPath)\n        ? requestPath\n        : path.resolve(path.dirname(importer.split(\"?\", 1)[0]), requestPath);\n      return `${FARM_METADATA_IMAGE_WASM_PREFIX}${resolvedPath}`;\n    },\n    load(id) {\n      if (!id.startsWith(FARM_METADATA_IMAGE_WASM_PREFIX)) return null;\n      const wasmPath = id.slice(FARM_METADATA_IMAGE_WASM_PREFIX.length);\n      const encoded = readFileSync(wasmPath).toString(\"base64\");\n      return `\nconst encoded = ${JSON.stringify(encoded)};\nconst bytes = Uint8Array.from(atob(encoded), (character) => character.charCodeAt(0));\nexport default new WebAssembly.Module(bytes);\n`;\n    },\n  };\n}\n\nfunction collectSSRExternalPackages(ssrBundle: OutputBundle): Set<string> {\n  const emittedFiles = new Set(\n    Object.keys(ssrBundle).map((fileName) => fileName.replace(/^\\.\\//, \"\")),\n  );\n  const externalPackages = new Set<string>();\n\n  for (const [fileName, output] of Object.entries(ssrBundle)) {\n    if (output.type !== \"chunk\") continue;\n\n    for (const importId of [...output.imports, ...output.dynamicImports]) {\n      const normalizedImportId = importId.replace(/\\\\/g, \"/\");\n      const normalizedId = normalizedImportId.replace(/^\\.\\//, \"\");\n      const resolvedRelativeId =\n        normalizedImportId.startsWith(\"./\") || normalizedImportId.startsWith(\"../\")\n          ? path.posix.normalize(path.posix.join(path.posix.dirname(fileName), normalizedImportId))\n          : null;\n      if (\n        emittedFiles.has(normalizedId) ||\n        (resolvedRelativeId !== null && emittedFiles.has(resolvedRelativeId)) ||\n        NODE_BUILTIN_MODULES.has(importId) ||\n        importId.startsWith(\"node:\")\n      ) {\n        continue;\n      }\n\n      if (\n        path.isAbsolute(importId) ||\n        /^[A-Za-z]:[\\\\/]/.test(importId) ||\n        importId.startsWith(\"#\") ||\n        importId.startsWith(\"\\0\")\n      ) {\n        externalPackages.add(importId);\n        continue;\n      }\n\n      const segments = importId.split(\"/\");\n      const packageName = importId.startsWith(\"@\") ? segments.slice(0, 2).join(\"/\") : segments[0];\n      if (packageName) externalPackages.add(packageName);\n    }\n  }\n\n  return externalPackages;\n}\n\nfunction createExternalSSRBundlePlugin(\n  nitroEntryPath: string,\n  ssrOutputDir: string,\n  ssrEntryFile: string,\n): Rollup.Plugin {\n  const resolvedNitroEntry = path.resolve(nitroEntryPath);\n  const resolvedSSREntry = path.resolve(ssrOutputDir, ssrEntryFile);\n\n  return {\n    name: \"farm-externalize-prebuilt-ssr\",\n    resolveId(source, importer) {\n      if (!importer || path.resolve(importer) !== resolvedNitroEntry) {\n        return null;\n      }\n\n      const resolvedImport = path.resolve(path.dirname(importer), source);\n      if (resolvedImport !== resolvedSSREntry) return null;\n\n      // A package import remains valid even when Nitro moves its adapter into a\n      // nested chunk. A relative external import would be resolved from that\n      // adapter chunk and can point at the wrong location.\n      return { id: FARM_SSR_PACKAGE_IMPORT, external: true };\n    },\n  };\n}\n\nfunction hasRollupPlugins(plugins: unknown): boolean {\n  if (Array.isArray(plugins)) {\n    return plugins.some((plugin) => hasRollupPlugins(plugin));\n  }\n  return Boolean(plugins);\n}\n\nexport function hasFarmRuntimeConfigModule(\n  config: Pick<ResolvedFarmConfig, \"layers\">,\n  configModulePath: string | null,\n): boolean {\n  return Boolean(configModulePath || (config.layers || []).some((layer) => layer.configFile));\n}\n\nfunction createEsbuildTransformOptions(\n  configuredEsbuildOptions: NitroEsbuildOptions,\n  minify: boolean,\n  defaultTarget: string,\n): TransformOptions {\n  const {\n    include: _include,\n    exclude: _exclude,\n    sourceMap: _sourceMap,\n    loaders: _loaders,\n    ...configuredTransformOptions\n  } = configuredEsbuildOptions;\n  const configuredTarget = Array.isArray(configuredTransformOptions.target)\n    ? configuredTransformOptions.target.filter(\n        (target): target is string => typeof target === \"string\",\n      )\n    : configuredTransformOptions.target;\n  const transformTarget =\n    Array.isArray(configuredTarget) && configuredTarget.length === 0\n      ? defaultTarget\n      : (configuredTarget ?? defaultTarget);\n  const transformSupported = configuredTransformOptions.supported\n    ? Object.fromEntries(\n        Object.entries(configuredTransformOptions.supported).filter(\n          (entry): entry is [string, boolean] => typeof entry[1] === \"boolean\",\n        ),\n      )\n    : undefined;\n\n  return {\n    ...(configuredTransformOptions as TransformOptions),\n    format: \"esm\",\n    target: transformTarget,\n    loader: \"js\",\n    sourcemap: false,\n    minify,\n    keepNames: configuredTransformOptions.keepNames ?? true,\n    legalComments: configuredTransformOptions.legalComments ?? \"none\",\n    supported: transformSupported,\n  };\n}\n\nfunction createEsbuildChunkMinifyPlugin(\n  configuredEsbuildOptions: NitroEsbuildOptions,\n): Rollup.Plugin {\n  const configuredTransformOptions = createEsbuildTransformOptions(\n    configuredEsbuildOptions,\n    true,\n    \"esnext\",\n  );\n  // Nitro already applies the configured esbuild transform to every module.\n  // Keep this final chunk pass limited to minification controls so options such\n  // as banner, footer, define, drop, and property mangling are not applied twice.\n  const transformOptions: TransformOptions = {\n    format: \"esm\",\n    target: configuredTransformOptions.target,\n    loader: \"js\",\n    sourcemap: false,\n    minify: true,\n    keepNames: configuredTransformOptions.keepNames,\n    legalComments: configuredTransformOptions.legalComments,\n    charset: configuredTransformOptions.charset,\n  };\n\n  return {\n    name: \"farm-esbuild-minify\",\n    async renderChunk(code, chunk) {\n      const { transform } = await import(\"esbuild\");\n      const result = await transform(code, {\n        ...transformOptions,\n        sourcefile: chunk.fileName,\n      });\n      if (!result.code) return null;\n      return {\n        code: result.code,\n        map: result.map || null,\n      };\n    },\n  };\n}\n\nfunction trimSlashes(value: string): string {\n  return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction resolveBuildDocsContentDir(config: ResolvedFarmConfig, root: string): string | null {\n  if (!config.docs?.enabled) return null;\n\n  const configuredContentDir = config.docs.contentDir || config.docs.config.contentDir;\n  if (typeof configuredContentDir === \"string\" && configuredContentDir.trim()) {\n    const contentDir = path.isAbsolute(configuredContentDir)\n      ? configuredContentDir\n      : path.join(root, configuredContentDir);\n    return existsSync(contentDir) ? contentDir : null;\n  }\n\n  const entryDir = config.docs.config.entry || trimSlashes(config.docs.entry) || \"docs\";\n  const appDocsDir = path.join(root, config.srcDir || \"src\", \"app\", entryDir);\n  if (existsSync(appDocsDir)) return appDocsDir;\n\n  const rootDocsDir = path.join(root, entryDir);\n  return existsSync(rootDocsDir) ? rootDocsDir : null;\n}\n\nfunction hasProjectPostcssConfig(root: string): boolean {\n  const candidates = [\n    \"postcss.config.js\",\n    \"postcss.config.cjs\",\n    \"postcss.config.mjs\",\n    \"postcss.config.ts\",\n    \"postcss.config.json\",\n    \".postcssrc\",\n    \".postcssrc.json\",\n    \".postcssrc.js\",\n    \".postcssrc.cjs\",\n    \".postcssrc.mjs\",\n    \".postcssrc.ts\",\n  ];\n\n  const projectRequire = createRequire(path.join(root, \"package.json\"));\n  return candidates.some((file) => {\n    try {\n      projectRequire.resolve(`./${file}`);\n      return true;\n    } catch {\n      return false;\n    }\n  });\n}\n\nasync function findFarmConfigPath(root: string): Promise<string | null> {\n  const fs = await import(\"fs/promises\");\n  const candidates = [\n    \"farm.config.ts\",\n    \"farm.config.mts\",\n    \"farm.config.js\",\n    \"farm.config.mjs\",\n    \"config.ts\",\n    \"config.mts\",\n    \"config.js\",\n    \"config.mjs\",\n  ];\n\n  for (const candidate of candidates) {\n    const resolvedPath = path.join(root, candidate);\n    try {\n      await fs.access(resolvedPath);\n      return resolvedPath;\n    } catch {\n      // Continue checking the next supported config path.\n    }\n  }\n\n  return null;\n}\n\nfunction hasFarmMiddlewareConfig(config: ResolvedFarmConfig[\"middleware\"]): boolean {\n  if (!config) return false;\n  if (Array.isArray(config)) return config.length > 0;\n\n  const configRecord = config as Record<string, unknown>;\n  return Boolean(\n    configRecord.matcher ||\n    configRecord.exclude ||\n    configRecord.runtime ||\n    configRecord.handler ||\n    (Array.isArray(configRecord.handlers) && configRecord.handlers.length > 0),\n  );\n}\n\nfunction hasFarmServerRuntimePlugins(config: ResolvedFarmConfig): boolean {\n  return (config.plugins || []).some((plugin) => {\n    if (getFarmIntegrationPluginServerRuntime(plugin) === false) return false;\n\n    return Boolean(\n      plugin.setup ||\n      plugin.init ||\n      plugin.ready ||\n      plugin.shutdown ||\n      plugin.runtime ||\n      plugin.router ||\n      plugin.render ||\n      plugin.beforeRouteMatch ||\n      plugin.afterRouteMatch ||\n      plugin.beforeRender ||\n      plugin.afterRender ||\n      plugin.onError ||\n      plugin.transformHTML,\n    );\n  });\n}\n\nexport async function discoverMiddlewareRoutes(\n  appDir: string | readonly string[],\n): Promise<UniversalMiddlewareRoute[]> {\n  const fs = await import(\"fs/promises\");\n  const appDirs = Array.isArray(appDir) ? [...appDir] : [appDir as string];\n  const routes = new Map<string, UniversalMiddlewareRoute>();\n\n  async function walk(\n    dir: string,\n    routePath: string,\n    discovered: UniversalMiddlewareRoute[],\n  ): Promise<void> {\n    let entries: import(\"fs\").Dirent[];\n    try {\n      entries = await fs.readdir(dir, { withFileTypes: true });\n    } catch {\n      return;\n    }\n\n    const middlewareFile = entries.find(\n      (entry) => entry.isFile() && /^middleware\\.(tsx?|jsx?)$/.test(entry.name),\n    );\n\n    if (middlewareFile) {\n      discovered.push({\n        path: routePath,\n        filePath: path.join(dir, middlewareFile.name),\n      });\n    }\n\n    for (const entry of entries) {\n      if (!entry.isDirectory() || entry.name.startsWith(\".\") || entry.name.startsWith(\"_\")) {\n        continue;\n      }\n\n      const childRoutePath = appendMiddlewareRoutePath(routePath, entry.name);\n      await walk(path.join(dir, entry.name), childRoutePath, discovered);\n    }\n  }\n\n  for (const sourceAppDir of appDirs) {\n    const discovered: UniversalMiddlewareRoute[] = [];\n    await walk(sourceAppDir, \"/\", discovered);\n    for (const route of discovered) {\n      routes.set(route.path, route);\n    }\n  }\n\n  return Array.from(routes.values()).sort((a, b) => {\n    const depthA = a.path.split(\"/\").filter(Boolean).length;\n    const depthB = b.path.split(\"/\").filter(Boolean).length;\n    return depthA - depthB || a.path.localeCompare(b.path);\n  });\n}\n\n/**\n * Universal build using TanStack Start pattern\n * - Builds SSR bundle in memory\n * - Uses virtual bundle plugin to expose to Nitro\n * - Creates virtual entry wrapping Web Standard handler\n */\nexport async function buildUniversal(\n  config: ResolvedFarmConfig,\n  routeManager: RouteManager,\n  apiRouteManager: APIRouteManager,\n  serverRenderer: ServerRenderer,\n  options: {\n    preset?: string;\n    root?: string;\n    pluginManager?: PluginManager;\n    routeRuntimeManifest?: FarmRouteRuntimeManifest;\n    productionVite?: FarmProductionViteRuntime | Promise<FarmProductionViteRuntime>;\n  } = {},\n): Promise<void> {\n  const root = options.root || config.root || process.cwd();\n  const preset = options.preset || config.preset || \"node-server\";\n  const srcDir = config.srcDir || \"src\";\n  const distDir = config.distDir || \".farm\";\n  const deployOutputDir = resolveDeployOutputPath(root, config.deploy.outputDir);\n  const lifecyclePluginManager = options.pluginManager;\n  // Attach all-settled handlers immediately so an earlier discovery failure\n  // cannot leave a rejected preload unobserved.\n  const productionViteResultPromise = Promise.allSettled([\n    Promise.resolve(options.productionVite ?? loadFarmProductionVite()),\n  ]);\n  // Nitro is guaranteed to be needed for every universal production build.\n  // Start resolving it while route metadata and the client/SSR bundles are\n  // prepared, then consume the settled result at the adapter stage.\n  const nitroRuntimeResultPromise = preloadFarmNitroRuntime();\n\n  logger.info(`🚜 Building Farm.js application (universal) with preset: ${preset}...`);\n\n  try {\n    const routeRuntimeManifestPromise = options.routeRuntimeManifest\n      ? Promise.resolve(options.routeRuntimeManifest)\n      : createFarmRouteRuntimeManifest({\n          config,\n          routeManager,\n          apiRouteManager,\n          root,\n        });\n    const routeRuntimeManifestResultPromise = Promise.allSettled([routeRuntimeManifestPromise]);\n\n    // Get page routes first (needed for both client and SSR builds)\n    const pageRoutes: UniversalPageRoute[] = [];\n    for (const [pattern, entry] of routeManager.getRoutes()) {\n      const markdownSourcePath =\n        entry.markdownSourcePath ||\n        (isFarmMarkdownPageFile(entry.modulePath) ? entry.modulePath : undefined);\n      pageRoutes.push({\n        pattern,\n        modulePath: entry.modulePath,\n        ...(markdownSourcePath\n          ? {\n              source: readFileSync(markdownSourcePath, \"utf8\"),\n              markdownSourcePath,\n            }\n          : {}),\n      });\n    }\n    const routeSlots: UniversalRouteSlot[] = Array.from(\n      routeManager.getRouteSlots().values(),\n      (entry) => ({\n        name: entry.name,\n        ownerPattern: entry.ownerPattern,\n        pattern: entry.pattern,\n        modulePath: entry.modulePath,\n        containerId: entry.containerId,\n        interception: entry.interception,\n        fallback: entry.fallback,\n      }),\n    );\n    logger.info(`📋 Found ${pageRoutes.length} page routes`);\n\n    // Discover layout files early (needed for client CSS scanning)\n    const fs = await import(\"fs/promises\");\n    const layoutRoutes: Array<{ pattern: string; modulePath: string }> = [];\n    const appDir = path.join(root, srcDir, \"app\");\n\n    async function findLayoutsForClient(dir: string, routePrefix: string = \"/\"): Promise<void> {\n      try {\n        const entries = await fs.readdir(dir, { withFileTypes: true });\n        for (const entry of entries) {\n          if (entry.isFile() && entry.name.match(/^layout\\.(tsx?|jsx?|vue|svelte)$/)) {\n            layoutRoutes.push({\n              pattern: routePrefix,\n              modulePath: path.join(dir, entry.name),\n            });\n          } else if (\n            entry.isDirectory() &&\n            !entry.name.startsWith(\".\") &&\n            !entry.name.startsWith(\"_\")\n          ) {\n            const childPrefix =\n              routePrefix === \"/\" ? `/${entry.name}` : `${routePrefix}/${entry.name}`;\n            await findLayoutsForClient(path.join(dir, entry.name), childPrefix);\n          }\n        }\n      } catch {\n        // Directory doesn't exist or can't be read\n      }\n    }\n    await findLayoutsForClient(appDir);\n    const seenLayoutPatterns = new Set(layoutRoutes.map((layout) => layout.pattern));\n    for (const [pattern, entry] of routeManager.getLayouts()) {\n      if (seenLayoutPatterns.has(pattern)) continue;\n      seenLayoutPatterns.add(pattern);\n      layoutRoutes.push({ pattern, modulePath: entry.modulePath });\n    }\n    logger.info(`📋 Found ${pageRoutes.length} page routes and ${layoutRoutes.length} layouts`);\n\n    const isolatedClientBoundaryModules = routeManager.getIsolatedClientBoundaryModules(root);\n    const hydrationPlanCache = new Map<string, ClientModuleHydrationPlan>();\n\n    const clientOutputDir = path.join(root, distDir, \"client\");\n    const [productionViteResult] = await productionViteResultPromise;\n    if (productionViteResult.status === \"rejected\") {\n      // Route evaluation may still be using the project module server. Drain it\n      // before the outer build cleanup closes that server.\n      await routeRuntimeManifestResultPromise;\n      throw productionViteResult.reason;\n    }\n    const productionVite = productionViteResult.value;\n    if (productionVite.builder === \"rolldown\") {\n      logger.info(\"⚡ Building application bundles with Vite Rolldown\");\n    }\n\n    const buildClientBundle = () =>\n      buildClient(\n        productionVite,\n        config,\n        root,\n        srcDir,\n        clientOutputDir,\n        pageRoutes,\n        layoutRoutes,\n        routeSlots,\n        isolatedClientBoundaryModules,\n        hydrationPlanCache,\n      );\n    const buildSSRBundle = () =>\n      buildSSRInMemory(\n        productionVite,\n        config,\n        root,\n        routeManager,\n        apiRouteManager,\n        serverRenderer,\n        preset,\n        pageRoutes,\n        layoutRoutes,\n        routeSlots,\n        isolatedClientBoundaryModules,\n        hydrationPlanCache,\n      );\n\n    // Route metadata and the client/SSR graphs read independent inputs. Drain\n    // every task before propagating a deterministic first failure so a rejected\n    // sibling cannot keep mutating build output in the background. Renderer\n    // compiler plugins with process-global caches can request serial graphs.\n    let clientBuildResult: PromiseSettledResult<Awaited<ReturnType<typeof buildClientBundle>>>;\n    let ssrBuildResult: PromiseSettledResult<Awaited<ReturnType<typeof buildSSRBundle>>>;\n    if (config.renderer.buildConcurrency === \"serial\") {\n      logger.info(`📦 Building client and SSR bundles serially for ${config.renderer.name}...`);\n      [clientBuildResult] = await Promise.allSettled([buildClientBundle()]);\n      [ssrBuildResult] = await Promise.allSettled([buildSSRBundle()]);\n    } else {\n      logger.info(\"📦 Building client and SSR bundles in parallel...\");\n      [clientBuildResult, ssrBuildResult] = await Promise.allSettled([\n        buildClientBundle(),\n        buildSSRBundle(),\n      ]);\n    }\n    const [routeRuntimeManifestResult] = await routeRuntimeManifestResultPromise;\n    if (routeRuntimeManifestResult.status === \"rejected\") {\n      throw routeRuntimeManifestResult.reason;\n    }\n    if (ssrBuildResult.status === \"rejected\") throw ssrBuildResult.reason;\n    if (clientBuildResult.status === \"rejected\") {\n      if (\n        productionVite.builder !== \"rolldown\" ||\n        !(clientBuildResult.reason instanceof IncompleteClientBuildOutputError)\n      ) {\n        throw clientBuildResult.reason;\n      }\n\n      // Rolldown can very rarely complete a parallel client build without\n      // traversing its entry graph. Preserve the fast parallel path, then\n      // recover only that invalid result once the SSR graph is fully drained.\n      logger.warn(\"Client bundle was incomplete; retrying after the SSR build...\");\n      await buildClient(\n        productionVite,\n        config,\n        root,\n        srcDir,\n        clientOutputDir,\n        pageRoutes,\n        layoutRoutes,\n        routeSlots,\n        isolatedClientBoundaryModules,\n        hydrationPlanCache,\n      );\n    }\n\n    const ssrResult = ssrBuildResult.value;\n    const routeRuntimeManifest = routeRuntimeManifestResult.value;\n\n    const runtimeValidation = validateFarmRouteRuntimeDeployment(routeRuntimeManifest, preset);\n    for (const warning of runtimeValidation.warnings) {\n      logger.warn(warning);\n    }\n\n    const { bundle: ssrBundle, entryFile: ssrEntryFile, configuredHeaderRoutes } = ssrResult;\n    await writeSSRAssetsToClient(ssrBundle, clientOutputDir);\n    if (config.docs.enabled) {\n      await copyFarmDocsFontAssetsToClient(root, clientOutputDir);\n    }\n\n    // Step 3: Build with Nitro using virtual bundle\n    logger.info(`🚀 Building server with Nitro (preset: ${preset})...`);\n    await buildNitroUniversal(\n      config,\n      routeManager,\n      apiRouteManager,\n      serverRenderer,\n      preset,\n      root,\n      distDir,\n      ssrBundle,\n      ssrEntryFile,\n      clientOutputDir,\n      routeRuntimeManifest,\n      configuredHeaderRoutes,\n      nitroRuntimeResultPromise,\n      lifecyclePluginManager,\n    );\n\n    const runtimeManifestPath = await writeFarmRouteRuntimeManifest(\n      path.join(root, distDir),\n      routeRuntimeManifest,\n    );\n    logger.info(`📋 Route runtime manifest: ${path.relative(root, runtimeManifestPath)}`);\n    // The completion summary is printed once, by the build orchestrator.\n  } catch (error) {\n    if (lifecyclePluginManager) {\n      await lifecyclePluginManager.runHookParallel(\"onError\", {\n        phase: \"buildUniversal\",\n        error,\n        meta: {\n          root,\n          preset,\n        },\n      });\n    }\n    logger.error(`❌ Build failed: ${error}`);\n    throw error;\n  }\n}\n\nasync function writeSSRAssetsToClient(bundle: OutputBundle, outputDir: string): Promise<void> {\n  const fs = await import(\"fs/promises\");\n  for (const [fileName, output] of Object.entries(bundle)) {\n    if (output.type !== \"asset\") continue;\n    if (fileName === \"farm-fonts.css\") {\n      await mergeBuiltFontCss(outputDir, output.source);\n      continue;\n    }\n    const filePath = path.join(outputDir, fileName);\n    await fs.mkdir(path.dirname(filePath), { recursive: true });\n    await fs.writeFile(filePath, output.source);\n  }\n}\n\nasync function copyFarmDocsFontAssetsToClient(root: string, outputDir: string): Promise<void> {\n  const fs = await import(\"fs/promises\");\n  await Promise.all(\n    resolveFarmDocsFontAssets(root).map(async ({ sourcePath, url }) => {\n      const targetPath = path.join(outputDir, url.replace(/^\\/+/, \"\"));\n      await fs.mkdir(path.dirname(targetPath), { recursive: true });\n      await fs.copyFile(sourcePath, targetPath);\n    }),\n  );\n}\n\nasync function mergeBuiltFontCss(\n  outputDir: string,\n  fontCssSource?: string | Uint8Array,\n): Promise<void> {\n  const fs = await import(\"fs/promises\");\n  const fontCssPath = path.join(outputDir, \"farm-fonts.css\");\n  let fontCss = fontCssSource;\n  if (fontCss === undefined) {\n    try {\n      fontCss = await fs.readFile(fontCssPath);\n    } catch {\n      return;\n    }\n  }\n\n  const clientCssPath = path.join(outputDir, \"farm-client.css\");\n  let clientCss = \"\";\n  try {\n    clientCss = await fs.readFile(clientCssPath, \"utf8\");\n  } catch {\n    // A font-only app may not have produced a stylesheet yet.\n  }\n  const normalizedFontCss =\n    typeof fontCss === \"string\" ? fontCss : Buffer.from(fontCss).toString(\"utf8\");\n  await fs.writeFile(fontCssPath, normalizedFontCss);\n  await fs.writeFile(clientCssPath, mergeFarmFontCss(clientCss, normalizedFontCss));\n}\n\nclass IncompleteClientBuildOutputError extends Error {\n  constructor(detail: string) {\n    super(`Farm client build produced incomplete output: ${detail}`);\n    this.name = \"IncompleteClientBuildOutputError\";\n  }\n}\n\nasync function validateClientBuildOutput(\n  root: string,\n  srcDir: string,\n  outputDir: string,\n): Promise<void> {\n  const fs = await import(\"fs/promises\");\n  const fingerprinted = await findFingerprintedClientEntry(outputDir);\n  const clientEntryPath = path.join(outputDir, fingerprinted ?? \"farm-client.js\");\n  let clientEntrySize = 0;\n\n  try {\n    const clientEntry = await fs.stat(clientEntryPath);\n    if (clientEntry.isFile()) clientEntrySize = clientEntry.size;\n  } catch {\n    // Report the missing entry through the shared incomplete-output diagnostic.\n  }\n\n  if (clientEntrySize === 0) {\n    throw new IncompleteClientBuildOutputError(\"farm-client.js is missing or empty\");\n  }\n\n  const clientCssPath = path.join(outputDir, \"farm-client.css\");\n  const globalsCssPath = path.join(root, srcDir, \"app\", \"globals.css\");\n  let expectsCss = false;\n  try {\n    const globalsCss = await fs.readFile(globalsCssPath, \"utf8\");\n    expectsCss = globalsCss.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\").trim().length > 0;\n  } catch {\n    // Vite reports a missing imported stylesheet before output validation.\n  }\n\n  try {\n    const clientCss = await fs.stat(clientCssPath);\n    if (expectsCss && (!clientCss.isFile() || clientCss.size === 0)) {\n      throw new IncompleteClientBuildOutputError(\"farm-client.css is empty\");\n    }\n  } catch (error) {\n    if (error instanceof IncompleteClientBuildOutputError) throw error;\n    if (expectsCss) {\n      throw new IncompleteClientBuildOutputError(\"farm-client.css is missing\");\n    }\n\n    // Farm's HTML always references this stable path. Keep intentionally\n    // style-free applications from receiving an unnecessary 404.\n    await fs.writeFile(clientCssPath, \"\");\n  }\n}\n\n/**\n * Build client bundle (to disk) with hydration for \"use client\" components\n */\nfunction getCachedClientModuleHydrationPlan(\n  modulePath: string,\n  root: string,\n  mode: FarmIsolatedClientHydrationMode,\n  cache: Map<string, ClientModuleHydrationPlan>,\n): ClientModuleHydrationPlan {\n  const key = `${path.resolve(root)}\\0${mode}\\0${path.resolve(modulePath)}`;\n  let plan = cache.get(key);\n  if (!plan) {\n    plan = getClientModuleHydrationPlan(modulePath, root, mode);\n    cache.set(key, plan);\n  }\n  return { ...plan, isolatedBoundaries: [...plan.isolatedBoundaries] };\n}\n\nasync function buildClient(\n  productionVite: FarmProductionViteRuntime,\n  config: ResolvedFarmConfig,\n  root: string,\n  srcDir: string,\n  outputDir: string,\n  pageRoutes: UniversalPageRoute[],\n  layoutRoutes: Array<{ pattern: string; modulePath: string }> = [],\n  routeSlots: UniversalRouteSlot[] = [],\n  isolatedClientBoundaryModules: ReadonlySet<string> = new Set(),\n  hydrationPlanCache: Map<string, ClientModuleHydrationPlan> = new Map(),\n) {\n  const viteBuild = productionVite.build;\n  const { farmPlugin } = await import(\"../vite\");\n  const { PluginManager } = await import(\"../plugin\");\n  const fs = await import(\"fs/promises\");\n\n  const pluginManager = new PluginManager({\n    config,\n    isDev: false,\n    isProd: true,\n  });\n  pluginManager.addPlugins(config.plugins || []);\n\n  // Detect which pages should hydrate on the client.\n  const clientPages: Array<{\n    pattern: string;\n    modulePath: string;\n    relativePath: string;\n    pageShouldHydrate: boolean;\n    islandStrategy: FarmIslandStrategy;\n    hasIsolatedClientBoundaries: boolean;\n    isolatedBoundaries: IsolatedClientBoundaryReference[];\n  }> = [];\n\n  const integrationProviders = getIntegrationProviders(config.integrations).filter(\n    (provider) => provider.component || provider.type === \"clerk\",\n  );\n  const unsupportedIntegrationProvider = integrationProviders.find(\n    (provider) => provider.supportsIsolatedHydration !== true,\n  );\n  if (\n    config.experimental?.isolatedClientHydration === \"enabled\" &&\n    config.experimental?.serverComponents !== true &&\n    unsupportedIntegrationProvider\n  ) {\n    logger.warn(\n      `[Farm.js] isolated hydration kept route-wide because integration provider \"${unsupportedIntegrationProvider.name}\" does not declare supportsIsolatedHydration: true.`,\n    );\n  }\n  const isolatedMode = resolveFarmIsolatedClientHydrationMode(\n    config.experimental?.isolatedClientHydration,\n    {\n      serverComponents: config.experimental?.serverComponents === true,\n      hasUnsupportedIntegrationProvider: Boolean(unsupportedIntegrationProvider),\n    },\n  );\n\n  const clientLayouts = layoutRoutes.map((layout) => {\n    try {\n      const metadata = getCachedClientModuleHydrationPlan(\n        layout.modulePath,\n        root,\n        isolatedMode,\n        hydrationPlanCache,\n      );\n      return {\n        ...layout,\n        shouldHydrate: metadata.shouldHydrate,\n        islandStrategy: metadata.islandStrategy,\n        legacyShouldHydrate: metadata.legacyShouldHydrate,\n        legacyIslandStrategy: metadata.legacyIslandStrategy,\n        mode: metadata.mode,\n        estimatedIsolatedRootCount: metadata.estimatedIsolatedRootCount,\n        hasIsolatedClientBoundaries: metadata.hasIsolatedClientBoundaries,\n        isolatedHydrationEligible: metadata.isolatedHydrationEligible,\n        isolatedBoundaries: metadata.isolatedBoundaries,\n      };\n    } catch (error) {\n      logger.warn(`⚠️  Could not inspect layout file ${layout.modulePath}: ${error}`);\n      return {\n        ...layout,\n        shouldHydrate: false,\n        islandStrategy: null,\n        legacyShouldHydrate: false,\n        legacyIslandStrategy: null,\n        mode: isolatedMode,\n        estimatedIsolatedRootCount: 0,\n        hasIsolatedClientBoundaries: false,\n        isolatedHydrationEligible: false,\n        isolatedBoundaries: [],\n      };\n    }\n  });\n\n  const layoutAppliesToRoute = (layoutPattern: string, routePattern: string) =>\n    layoutPattern === \"/\" ||\n    routePattern === layoutPattern ||\n    routePattern.startsWith(`${layoutPattern}/`);\n\n  const adapterOwnsDocsRuntime = Boolean(\n    isReactRenderer(config.renderer) &&\n    config.docs?.enabled &&\n    config.docs.adapter?.server &&\n    config.docs.adapter.react,\n  );\n  const adapterDocsEntry = config.docs?.enabled\n    ? `/${config.docs.entry || \"docs\"}`.replace(/\\/+/g, \"/\").replace(/\\/$/, \"\") || \"/\"\n    : null;\n  const isAdapterDocsRoute = (routePattern: string) =>\n    Boolean(\n      adapterOwnsDocsRuntime &&\n      adapterDocsEntry &&\n      (adapterDocsEntry === \"/\" ||\n        routePattern === adapterDocsEntry ||\n        routePattern.startsWith(`${adapterDocsEntry}/`)),\n    );\n\n  const routePlans = pageRoutes.map((route) => ({\n    route,\n    metadata: isFarmMarkdownPageFile(route.modulePath)\n      ? {\n          isClientComponent: false,\n          shouldHydrate: false,\n          islandStrategy: null,\n          legacyShouldHydrate: false,\n          legacyIslandStrategy: null,\n          mode: isolatedMode,\n          estimatedIsolatedRootCount: 0,\n          hasIsolatedClientBoundaries: false,\n          isolatedBoundaries: [] as IsolatedClientBoundaryReference[],\n          suppressedAsyncHydration: undefined,\n        }\n      : getCachedClientModuleHydrationPlan(\n          route.modulePath,\n          root,\n          isolatedMode,\n          hydrationPlanCache,\n        ),\n  }));\n\n  enforceFarmIsolatedHydrationRouteBudget(\n    clientLayouts.map((layout) => ({\n      pattern: layout.pattern,\n      depth: layout.pattern.split(\"/\").filter(Boolean).length,\n      metadata: layout,\n    })),\n    routePlans.map(({ route, metadata }) => ({\n      pattern: route.pattern,\n      depth: route.pattern.split(\"/\").filter(Boolean).length,\n      metadata,\n    })),\n    layoutAppliesToRoute,\n  );\n\n  if (isolatedMode === \"analyze\") {\n    for (const { entry, metadata } of [\n      ...clientLayouts.map((layout) => ({ entry: layout, metadata: layout })),\n      ...routePlans.map(({ route, metadata }) => ({ entry: route, metadata })),\n    ]) {\n      if (!(\"isolatedHydrationEligible\" in metadata) || !metadata.isolatedHydrationEligible) {\n        continue;\n      }\n      logger.info(\n        `📊 Isolated hydration analysis: ${entry.modulePath} can exclude its server owner and hydrate ${metadata.isolatedBoundaries.length} client ${metadata.isolatedBoundaries.length === 1 ? \"boundary\" : \"boundaries\"}.`,\n      );\n    }\n  }\n\n  for (const { route, metadata } of routePlans) {\n    // The adapter imports and hydrates its compiled MDX modules itself. Keeping\n    // the same files in Farm's generic route table duplicates the docs runtime\n    // and can pull server-only Markdown dependencies into the browser bundle.\n    if (isAdapterDocsRoute(route.pattern)) continue;\n\n    try {\n      const applicableClientLayouts = clientLayouts.filter(\n        (layout) =>\n          (layout.shouldHydrate || layout.hasIsolatedClientBoundaries) &&\n          layoutAppliesToRoute(layout.pattern, route.pattern),\n      );\n      if (metadata.suppressedAsyncHydration) {\n        logger.warn(\n          `⚠️  ${route.pattern} is an async server component that imports client components; ` +\n            `React cannot hydrate async components, so the route stays server-rendered ` +\n            `and its client imports are not interactive.`,\n        );\n      }\n      if (\n        metadata.shouldHydrate ||\n        metadata.hasIsolatedClientBoundaries ||\n        applicableClientLayouts.length > 0\n      ) {\n        const relativePath = route.modulePath.replace(root, \"\").replace(/^\\//, \"\");\n        const hydrationStrategies = [\n          ...(metadata.islandStrategy ? [metadata.islandStrategy] : []),\n          ...applicableClientLayouts.flatMap((layout) =>\n            layout.islandStrategy ? [layout.islandStrategy] : [],\n          ),\n        ];\n        const islandStrategy = hydrationStrategies.every(\n          (strategy) => strategy === hydrationStrategies[0],\n        )\n          ? (hydrationStrategies[0] ?? \"load\")\n          : \"load\";\n        clientPages.push({\n          ...route,\n          relativePath,\n          pageShouldHydrate: metadata.shouldHydrate,\n          islandStrategy,\n          hasIsolatedClientBoundaries:\n            metadata.hasIsolatedClientBoundaries ||\n            applicableClientLayouts.some((layout) => layout.hasIsolatedClientBoundaries),\n          isolatedBoundaries: [\n            ...(metadata.hasIsolatedClientBoundaries ? metadata.isolatedBoundaries : []),\n            ...applicableClientLayouts\n              .filter((layout) => layout.hasIsolatedClientBoundaries)\n              .flatMap((layout) => layout.isolatedBoundaries),\n          ],\n        });\n        logger.info(`📱 Found hydratable route: ${route.pattern} -> ${route.modulePath}`);\n      }\n    } catch (error) {\n      logger.warn(`⚠️  Could not inspect route file ${route.modulePath}: ${error}`);\n    }\n  }\n\n  if (config.docs?.enabled && !adapterOwnsDocsRuntime) {\n    const docsEntry =\n      `/${config.docs.entry || \"docs\"}`.replace(/\\/+/g, \"/\").replace(/\\/$/, \"\") || \"/\";\n    const applicableClientLayouts = clientLayouts.filter(\n      (layout) => layout.shouldHydrate && layoutAppliesToRoute(layout.pattern, docsEntry),\n    );\n    if (applicableClientLayouts.length > 0) {\n      const hydrationStrategies = applicableClientLayouts.flatMap((layout) =>\n        layout.islandStrategy ? [layout.islandStrategy] : [],\n      );\n      const islandStrategy = hydrationStrategies.every(\n        (strategy) => strategy === hydrationStrategies[0],\n      )\n        ? (hydrationStrategies[0] ?? \"load\")\n        : \"load\";\n      const docsPatterns =\n        docsEntry === \"/\" ? [\"/\", \"/[...slug]\"] : [docsEntry, `${docsEntry}/[...slug]`];\n      const docsClientRoutes = docsPatterns.map((pattern) => ({\n        pattern,\n        modulePath: \"\",\n        relativePath: \"\",\n        pageShouldHydrate: false,\n        islandStrategy,\n        hasIsolatedClientBoundaries: false,\n        isolatedBoundaries: [] as IsolatedClientBoundaryReference[],\n      }));\n\n      // Docs requests take precedence over app page routes on the server, so\n      // their synthetic layout-only entries must take precedence in the client\n      // route table as well.\n      clientPages.unshift(...docsClientRoutes);\n    }\n  }\n\n  const clientRouteSlots = routeSlots.filter((slot) => {\n    try {\n      return getClientModuleMetadata(slot.modulePath, root).shouldHydrate;\n    } catch (error) {\n      logger.warn(`⚠️  Could not inspect route slot ${slot.modulePath}: ${error}`);\n      return false;\n    }\n  });\n\n  logger.info(\n    `📱 Total hydratable routes detected: ${clientPages.length} pages, ${clientLayouts.filter((layout) => layout.shouldHydrate).length} layouts, and ${clientRouteSlots.length} slots`,\n  );\n\n  // Generate client hydration entry code\n  // Keep generated entries under the project so bare imports resolve through the\n  // application's node_modules, including isolated production-build fixtures.\n  const clientEntryRoot = path.join(root, \".farm\", \"tmp\");\n  await fs.mkdir(clientEntryRoot, { recursive: true });\n  const clientEntryDir = await fs.mkdtemp(path.join(clientEntryRoot, \"client-entry-\"));\n  const clientEntryPath = path.join(clientEntryDir, \"farm-client-entry.tsx\");\n  const clientHydrationCode = generateClientHydrationEntry(\n    clientPages,\n    clientLayouts,\n    clientRouteSlots,\n    root,\n    srcDir,\n    adapterOwnsDocsRuntime ? false : isFarmDocsSearchEnabled(config.docs),\n    adapterOwnsDocsRuntime ? undefined : resolveFarmDocsSearchClientModule(root),\n    config.docs?.enabled ? config.docs.entry : undefined,\n    adapterOwnsDocsRuntime ? config.docs.adapter?.react : undefined,\n    config.i18n,\n    config.plugins,\n    config.renderer,\n    config.publicRuntimeConfig,\n    config.trailingSlash,\n    getIntegrationProviders(config.integrations),\n    config.basePath,\n    generateClientCachePersistenceCode(resolveFarmClientCacheAdapterEntry(root, config.cache)),\n  );\n\n  // Write the client entry to a temporary file\n  await fs.writeFile(clientEntryPath, clientHydrationCode);\n\n  // Tailwind support:\n  // - If project has explicit PostCSS config, respect it.\n  // - Otherwise enable built-in @tailwindcss/vite (out of the box).\n  const hasScopedPostcssConfig = hasProjectPostcssConfig(root);\n  let postcssSearchPath: string | undefined;\n  let tailwindVitePlugin: any = undefined;\n  const rendererVitePlugins = await loadFarmRendererVitePlugins(config.renderer, root, {\n    ssr: false,\n  });\n  if (hasScopedPostcssConfig) {\n    logger.info(\"📦 Using project PostCSS/Tailwind configuration\");\n  } else {\n    const postcssConfigPath = path.join(clientEntryDir, \"postcss.config.cjs\");\n    await fs.writeFile(postcssConfigPath, \"module.exports = { plugins: [] };\\n\");\n    postcssSearchPath = clientEntryDir;\n    try {\n      const tailwindVite = (await import(\"@tailwindcss/vite\")).default;\n      tailwindVitePlugin = adaptTailwindVitePlugin(tailwindVite(), productionVite.builder);\n      logger.info(\"📦 Enabled built-in Tailwind support (@tailwindcss/vite)\");\n    } catch (error) {\n      logger.warn(\n        `Tailwind plugin auto-enable failed; continuing without it: ${(error as Error).message}`,\n      );\n    }\n  }\n\n  try {\n    await viteBuild({\n      root,\n      // Vite otherwise falls back to <root>/public, silently dropping every\n      // asset in a custom config.publicDir from the production client output.\n      publicDir: config.publicDir,\n      esbuild: {\n        jsxDev: false,\n      },\n      build: {\n        // Preserve Farm's Vite 5 browser baseline when the production builder\n        // uses Vite 8, whose default target only covers newer browsers.\n        target: FARM_CLIENT_BUILD_TARGET,\n        outDir: outputDir,\n        emptyOutDir: true,\n        assetsInlineLimit: 0,\n        cssCodeSplit: false, // Bundle all CSS into one file\n        rollupOptions: {\n          input: {\n            \"farm-client\": clientEntryPath,\n          },\n          output: {\n            entryFileNames: \"[name]-h[hash].js\",\n            chunkFileNames: \"chunks/[name]-h[hash].js\",\n            hashCharacters: \"hex\",\n            // Use predictable name for CSS so we can reference it in SSR HTML\n            assetFileNames: (assetInfo) => {\n              if (assetInfo.name?.endsWith(\".css\")) {\n                return \"farm-client.css\";\n              }\n              return \"assets/[name]-h[hash][extname]\";\n            },\n          },\n          // Externalize Node.js built-ins and server-side modules for client build\n          external: (id) => {\n            // Externalize Node.js built-ins\n            if (\n              id.startsWith(\"node:\") ||\n              [\n                \"path\",\n                \"url\",\n                \"fs\",\n                \"fs/promises\",\n                \"os\",\n                \"crypto\",\n                \"http\",\n                \"https\",\n                \"net\",\n                \"stream\",\n                \"util\",\n                \"events\",\n                \"child_process\",\n                \"module\",\n                \"tty\",\n                \"dns\",\n              ].includes(id)\n            ) {\n              return true;\n            }\n            // Externalize native modules that can't be bundled for browser\n            if (id === \"fsevents\" || id.includes(\"fsevents\") || id.endsWith(\".node\")) {\n              return true;\n            }\n            return false;\n          },\n        },\n      },\n      plugins: [\n        createFarmThemeCssPlugin(config.theme, config.basePath),\n        ...(tailwindVitePlugin ? [tailwindVitePlugin] : []),\n        ...(rendererVitePlugins as any[]),\n        ...(config.vite.plugins || []),\n        // Plugin to redirect @farm.js/core imports to client-only exports\n        {\n          name: \"farm-client-only-imports\",\n          enforce: \"pre\" as const,\n          resolveId(id) {\n            // Redirect @farm.js/core to just export client-safe parts\n            // Don't redirect @farm.js/core/client - that's already client-safe\n            if (id === \"@farm.js/core\") {\n              return { id: \"\\0farm-client-exports\", external: false };\n            }\n            if (id === \"@farm.js/core/i18n/server\") {\n              return { id: \"\\0farm-i18n-client-bridge\", external: false };\n            }\n            // Block server-only imports completely\n            if (\n              id === \"@farm.js/core/server\" ||\n              id === \"@farm.js/core/api\" ||\n              id === \"@farm.js/core/middleware\" ||\n              id === \"@farm.js/core/headers\" ||\n              id === \"@farm.js/core/config\" ||\n              id.includes(\"@farm.js/core/middleware\") ||\n              id.includes(\"@farm.js/core/query/server\")\n            ) {\n              return { id: \"\\0empty-module\", external: false };\n            }\n            // Block API route imports (they come from type-only imports in api.generated.ts)\n            if (id.includes(\"/api/\") && id.includes(\"/route\")) {\n              return { id: \"\\0empty-api-route\", external: false };\n            }\n            // Block problematic node modules\n            if (\n              id === \"fsevents\" ||\n              id.includes(\"fsevents\") ||\n              id.endsWith(\".node\") ||\n              id === \"nitro\" ||\n              id === \"vite\" ||\n              id === \"vite-rolldown\" ||\n              id === \"esbuild\" ||\n              id === \"rollup\" ||\n              id.startsWith(\"nitro/\") ||\n              id.includes(\"node-pre-gyp\") ||\n              id.includes(\"nf3\")\n            ) {\n              return { id: \"\\0empty-module\", external: false };\n            }\n            return null;\n          },\n          load(id) {\n            if (id === \"\\0empty-module\") {\n              return \"const emptyMiddlewareStore = new Map(); export default {}; export const getMiddlewareContext = () => emptyMiddlewareStore; export const getMiddlewareData = () => emptyMiddlewareStore; export const getMiddlewareValue = () => undefined; export const middleware = () => ({});\";\n            }\n            if (id === \"\\0empty-api-route\") {\n              // Stub for API routes - only used in type context, provide empty exports\n              return \"export const GET = () => {}; export const HEAD = () => {}; export const QUERY = () => {}; export const POST = () => {}; export const PUT = () => {}; export const DELETE = () => {}; export const PATCH = () => {}; export const OPTIONS = () => {}; export default {};\";\n            }\n            if (id === \"\\0farm-i18n-client-bridge\") {\n              return 'export { createTranslator, format, getLocale, getLocaleSource, t } from \"@farm.js/core/i18n/client\";';\n            }\n            if (id === \"\\0farm-client-exports\") {\n              // Only export client-safe parts (no type exports - they're erased at compile time)\n              return [\n                \"// Farm.js Client Exports - Safe for browser bundling\",\n                'export { Link } from \"@farm.js/core/client\";',\n                'export { useRouter } from \"@farm.js/core/client\";',\n                'export { usePathname, useSearchParams } from \"@farm.js/core/navigation\";',\n                'export { createAPIClient } from \"@farm.js/core/client\";',\n                'export { localFont, remoteFont } from \"@farm.js/core/font\";',\n              ].join(\"\\n\");\n            }\n            return null;\n          },\n        },\n        farmPlugin({ ...config, isolatedClientBoundaryModules }, pluginManager),\n        farmEnvironmentFunctionsPlugin(),\n      ],\n      mode: \"production\",\n      css: postcssSearchPath\n        ? {\n            postcss: postcssSearchPath,\n          }\n        : undefined,\n      // Ensure React is bundled for client\n      resolve: {\n        alias: createFarmSourceAlias(root, config.srcDir),\n        dedupe: [...(config.renderer.dedupe || [])],\n      },\n      // Optimize dependencies - exclude server-side code from client bundle\n      optimizeDeps: {\n        exclude: [\n          \"@farm.js/core/server\",\n          \"@farm.js/core/api\",\n          \"@farm.js/core/middleware\",\n          \"@farm.js/core/headers\",\n        ],\n      },\n    });\n    await mergeBuiltFontCss(outputDir);\n    await validateClientBuildOutput(root, srcDir, outputDir);\n  } finally {\n    // Clean up temporary entry file\n    try {\n      await fs.rm(clientEntryDir, { recursive: true, force: true });\n    } catch {\n      // Ignore cleanup errors\n    }\n  }\n}\n\n/**\n * Generate client hydration entry that imports and hydrates client components\n */\nexport function generateUniversalRouterStateRuntime(): string {\n  return `\nconst FARM_PAGE_STATE_KEY = \"__farmPageState\";\nconst FARM_HISTORY_INDEX_KEY = \"__farmHistoryIndex\";\nconst IDLE_NAVIGATION_STATE = {\n  state: \"idle\",\n  pending: false,\n  from: null,\n  to: null,\n  action: null,\n  startedAt: null,\n};\n\nfunction createNavigationLocation(url) {\n  return {\n    href: url.href,\n    pathname: url.pathname,\n    search: url.search,\n    hash: url.hash,\n  };\n}\n\nfunction scrollElementStorageKey(pathname, key) {\n  return \"farm-scroll-\" + pathname + \":\" + key;\n}\n\nfunction createHistoryState(path, pageState, currentState) {\n  const base = currentState && typeof currentState === \"object\" ? { ...currentState } : {};\n  return {\n    ...base,\n    path,\n    [FARM_PAGE_STATE_KEY]: pageState,\n  };\n}\n\nasync function fetchFarmNavigationDocument(url, headers, recover = true, signal) {\n  const deploymentId = window.__FARM_DEPLOYMENT_ID__;\n  const response = await fetch(url, {\n    headers: createFarmDeploymentRequestHeaders(deploymentId, headers),\n    signal,\n  });\n  if (isFarmDeploymentMismatchResponse(response, deploymentId)) {\n    const error = createFarmDeploymentMismatchError(response, deploymentId || \"unknown\");\n    window.dispatchEvent(new CustomEvent(\"farm:deployment-mismatch\", { detail: error }));\n    if (recover) window.location.assign(url);\n    throw error;\n  }\n  return response;\n}\n\nfunction clearFarmPrefetchCacheOnDeploymentMismatch(router, error) {\n  if (error?.name === \"FarmDeploymentMismatchError\") {\n    router.prefetchCache.clear();\n  }\n}\n\nfunction readHistoryIndex(state) {\n  if (!state || typeof state !== \"object\") return null;\n  const value = state[FARM_HISTORY_INDEX_KEY];\n  return Number.isSafeInteger(value) ? value : null;\n}\n\nfunction hasAbsoluteNavigationHref(href) {\n  return /^[a-zA-Z][a-zA-Z\\\\d+.-]*:/.test(href) || href.startsWith(\"//\");\n}\n`.trim();\n}\n\n/**\n * Path matcher emitted into the production runtime. Extracted so tests can\n * assert the emitted source decodes segments through the guarded helper;\n * a bare decodeURIComponent here throws URIError on malformed\n * percent-encoding out of route matching in deployed apps (#502).\n */\nexport function generateRuntimePathMatcherSource(): string {\n  return `\nfunction normalizeRuntimePath(pathname) {\n  if (!pathname || pathname === \"/\") return \"/\";\n  return pathname.endsWith(\"/\") ? pathname.replace(/\\\\/+$/, \"\") : pathname;\n}\n\nfunction splitRuntimePath(pathname) {\n  return normalizeRuntimePath(pathname).split(\"/\").filter(Boolean);\n}\n\nfunction decodeRouteSegment(segment) {\n  try {\n    return decodeURIComponent(segment);\n  } catch {\n    // Request paths are not guaranteed to be validly percent-encoded; a\n    // malformed segment must not throw out of route matching.\n    return segment;\n  }\n}\n\nconst farmCatchAllParamSegments = Symbol(\"farm.catch-all-param-segments\");\n\nfunction matchRuntimePathPattern(pattern, pathname) {\n  const patternSegments = splitRuntimePath(pattern);\n  const pathnameSegments = splitRuntimePath(pathname);\n  const failedStates = new Set();\n\n  function matchFrom(patternIndex, pathIndex, params, catchAllParamSegments) {\n    const stateKey = patternIndex + \":\" + pathIndex;\n    if (failedStates.has(stateKey)) return null;\n    const matched = matchFromUncached(patternIndex, pathIndex, params, catchAllParamSegments);\n    if (!matched) failedStates.add(stateKey);\n    return matched;\n  }\n\n  function matchFromUncached(patternIndex, pathIndex, params, catchAllParamSegments) {\n    while (patternIndex < patternSegments.length) {\n      const segment = patternSegments[patternIndex];\n      const optionalCatchAll = segment.match(/^\\\\[\\\\[\\\\.\\\\.\\\\.(.+)\\\\]\\\\]$/);\n      const catchAll = segment.match(/^\\\\[\\\\.\\\\.\\\\.(.+)\\\\]$/);\n      const dynamic = segment.match(/^\\\\[(.+)\\\\]$/);\n      const namedCatchAll = segment.match(/^:([^/]+)\\\\*$/);\n      const namedDynamic = segment.match(/^:([^/]+)$/);\n      const starCatchAll = segment.match(/^\\\\*([^?]+)(\\\\?)?$/);\n      const wildcard = segment === \"*\";\n\n      if (optionalCatchAll || catchAll || namedCatchAll || starCatchAll || wildcard) {\n        const name = wildcard\n          ? \"wildcard\"\n          : (optionalCatchAll || catchAll || namedCatchAll || starCatchAll)[1];\n        const required = !!(catchAll || (starCatchAll && !starCatchAll[2]));\n\n        if (patternIndex === patternSegments.length - 1) {\n          const remainingSegments = pathnameSegments.slice(pathIndex).map(decodeRouteSegment);\n          const remaining = remainingSegments.join(\"/\");\n          if (!remaining && required) return null;\n          params[name] = remaining;\n          catchAllParamSegments[name] = remainingSegments;\n          pathIndex = pathnameSegments.length;\n          patternIndex += 1;\n          continue;\n        }\n\n        const maxConsume = pathnameSegments.length - pathIndex;\n        const minConsume = required ? 1 : 0;\n        for (let consume = maxConsume; consume >= minConsume; consume--) {\n          const consumedSegments = pathnameSegments\n            .slice(pathIndex, pathIndex + consume)\n            .map(decodeRouteSegment);\n          const remaining = consumedSegments.join(\"/\");\n          const trialParams = Object.assign({}, params);\n          const trialCatchAll = Object.assign({}, catchAllParamSegments);\n          trialParams[name] = remaining;\n          trialCatchAll[name] = consumedSegments;\n          const matched = matchFrom(\n            patternIndex + 1,\n            pathIndex + consume,\n            trialParams,\n            trialCatchAll,\n          );\n          if (matched) return matched;\n        }\n        return null;\n      }\n\n      const pathnameSegment = pathnameSegments[pathIndex];\n      if (pathnameSegment === undefined) return null;\n\n      if (dynamic || namedDynamic) {\n        params[(dynamic || namedDynamic)[1]] = decodeRouteSegment(pathnameSegment);\n        pathIndex += 1;\n        patternIndex += 1;\n        continue;\n      }\n\n      if (segment !== decodeRouteSegment(pathnameSegment)) return null;\n      pathIndex += 1;\n      patternIndex += 1;\n    }\n\n    if (pathIndex !== pathnameSegments.length) return null;\n    Object.defineProperty(params, farmCatchAllParamSegments, {\n      value: catchAllParamSegments,\n    });\n    return params;\n  }\n\n  return matchFrom(0, 0, {}, {});\n}\n`.trim();\n}\n\nexport function generateRedirectInterpolationSource(): string {\n  // Interpolates redirect/rewrite destinations from the params produced by\n  // matchRuntimePathPattern. Must stay in parity with the development path in\n  // packages/farm/src/plugins/route-pattern.ts: named captures (:name, [name],\n  // catch-alls), a positional * for the wildcard param, and numbered captures\n  // ($1-based, in pattern order). Depends on farmCatchAllParamSegments from\n  // generateRuntimePathMatcherSource(), so emit that source alongside this one.\n  return `\nfunction encodeRuntimePathSegment(value) {\n  return encodeURIComponent(String(value)).replace(\n    /[!'()*]/g,\n    function(character) {\n      return \"%\" + character.charCodeAt(0).toString(16).toUpperCase();\n    },\n  );\n}\n\nfunction interpolateRedirectDestination(destination, params) {\n  let result = destination;\n  const catchAllParamSegments = params[farmCatchAllParamSegments] || {};\n  const orderedCaptures = [];\n  for (const [key, value] of Object.entries(params)) {\n    const segments = catchAllParamSegments[key];\n    const encodedValue = Array.isArray(segments)\n      ? segments.map(encodeRuntimePathSegment).join(\"/\")\n      : encodeRuntimePathSegment(value);\n    orderedCaptures.push(encodedValue);\n    result = result.split(\"[[...\" + key + \"]]\").join(encodedValue);\n    result = result.split(\"[...\" + key + \"]\").join(encodedValue);\n    result = result.split(\"[\" + key + \"]\").join(encodedValue);\n    result = result.split(\":\" + key + \"*\").join(encodedValue);\n    result = result.split(\":\" + key).join(encodedValue);\n    if (key === \"wildcard\") result = result.split(\"*\").join(encodedValue);\n  }\n  // Numbered captures resolve after the named substitutions. Encoded values\n  // never contain \"$\", so this cannot rewrite an already-injected value. An\n  // out-of-range index resolves to \"\", matching the development path.\n  result = result.replace(/\\\\$(\\\\d+)/g, function(_whole, group) {\n    const captured = orderedCaptures[Number(group) - 1];\n    return captured === undefined ? \"\" : captured;\n  });\n  return result;\n}\n`.trim();\n}\n\nexport function generateUniversalRouterStateProperties(): string {\n  return `\n  blockers: new Set(),\n  unloadBlockers: new Map(),\n  navigationListeners: new Set(),\n  navigationState: IDLE_NAVIGATION_STATE,\n  navigationSequence: 0,\n  activeNavigation: null,\n  observers: new Map(),\n  scrollElements: new Map(),\n  currentPath: window.location.pathname + window.location.search,\n  currentHistoryIndex: null,\n  currentHistoryState: null,\n\n  initializeHistory: function() {\n    const existingIndex = readHistoryIndex(window.history.state);\n    if (existingIndex != null) {\n      this.currentHistoryIndex = existingIndex;\n      this.currentHistoryState = window.history.state;\n      return;\n    }\n    try {\n      const initialState = {\n        ...(window.history.state && typeof window.history.state === \"object\"\n          ? window.history.state\n          : {}),\n        [FARM_HISTORY_INDEX_KEY]: 0,\n      };\n      window.history.replaceState(initialState, \"\", window.location.href);\n      this.currentHistoryIndex = 0;\n      this.currentHistoryState = initialState;\n    } catch {\n      this.currentHistoryIndex = null;\n      this.currentHistoryState = null;\n    }\n  },\n\n  getNavigationState: function() {\n    return this.navigationState;\n  },\n\n  subscribeNavigation: function(listener) {\n    this.navigationListeners.add(listener);\n    listener(this.navigationState);\n    return () => this.navigationListeners.delete(listener);\n  },\n\n  addBlocker: function(blocker, shouldBlockUnload) {\n    this.blockers.add(blocker);\n    this.unloadBlockers.set(blocker, shouldBlockUnload || (() => {\n      const result = blocker({ from: this.currentPath, to: this.currentPath, action: \"replace\" });\n      if (result && typeof result.then === \"function\") {\n        result.catch(() => undefined);\n        return true;\n      }\n      return result === true;\n    }));\n    return () => {\n      this.blockers.delete(blocker);\n      this.unloadBlockers.delete(blocker);\n    };\n  },\n\n  shouldBlockNavigation: async function(context) {\n    for (const blocker of this.blockers) {\n      if (await blocker(context)) return true;\n    }\n    return false;\n  },\n\n  shouldBlockUnload: function() {\n    for (const blocker of this.blockers) {\n      try {\n        if (this.unloadBlockers.get(blocker)?.()) return true;\n      } catch {\n        return true;\n      }\n    }\n    return false;\n  },\n\n  handlePopState: function(event) {\n    if (document.documentElement.dataset.farmDocsRuntime === \"true\") return;\n    return this.navigate(window.location.href, {\n      action: \"pop\",\n      scroll: false,\n      popState: event.state,\n    });\n  },\n\n  revertBlockedPopState: function(from) {\n    try {\n      const previousState = this.currentHistoryState;\n      const pageState = previousState && typeof previousState === \"object\"\n        ? previousState[FARM_PAGE_STATE_KEY]\n        : undefined;\n      const restoredState = createHistoryState(from, pageState, previousState);\n      if (this.currentHistoryIndex != null) {\n        restoredState[FARM_HISTORY_INDEX_KEY] = this.currentHistoryIndex;\n      }\n      window.history.pushState(restoredState, \"\", from);\n      this.currentHistoryState = restoredState;\n    } catch {}\n  },\n\n  startNavigation: function(from, to, action) {\n    this.activeNavigation?.controller.abort(\"superseded\");\n    const navigation = {\n      id: ++this.navigationSequence,\n      controller: new AbortController(),\n      clientNavigation: null,\n    };\n    this.activeNavigation = navigation;\n    this.setNavigationState({\n      state: \"loading\",\n      pending: true,\n      from,\n      to: createNavigationLocation(to),\n      action,\n      startedAt: Date.now(),\n    });\n    return navigation;\n  },\n\n  isCurrentNavigation: function(navigation, clientNavigation) {\n    return this.activeNavigation?.id === navigation.id &&\n      !navigation.controller.signal.aborted &&\n      !clientNavigation?.signal.aborted;\n  },\n\n  finishNavigation: function(navigation) {\n    if (this.activeNavigation?.id !== navigation.id) return;\n    this.activeNavigation = null;\n    this.setNavigationState(IDLE_NAVIGATION_STATE);\n  },\n\n  cancelActiveNavigation: function() {\n    if (!this.activeNavigation) return;\n    farmClientRuntime.cancelNavigation(\n      this.activeNavigation.clientNavigation || undefined,\n      \"superseded\",\n    );\n    this.activeNavigation.controller.abort(\"superseded\");\n    this.activeNavigation = null;\n    this.setNavigationState(IDLE_NAVIGATION_STATE);\n  },\n\n  clearPrefetchedPath: function(url) {\n    const interceptionPrefix = url + \"\\\\nintercept:\";\n    for (const key of this.prefetchCache.keys()) {\n      if (key === url || key.startsWith(interceptionPrefix)) {\n        this.prefetchCache.delete(key);\n      }\n    }\n  },\n\n  setNavigationState: function(state) {\n    this.navigationState = state;\n    for (const listener of this.navigationListeners) listener(state);\n  },\n\n  pushState: function(state, href) {\n    this.writePageState(\"push\", state, href);\n  },\n\n  replaceState: function(state, href) {\n    this.writePageState(\"replace\", state, href);\n  },\n\n  writePageState: function(action, state, href) {\n    const url = new URL(href || window.location.href, window.location.origin);\n    this.writeHistoryEntry(action, url.pathname + url.search + url.hash, state, url, \"page-state\");\n  },\n\n  writeURLSearch: function(action, href) {\n    const url = new URL(href || window.location.href, window.location.origin);\n    const currentState = window.history.state;\n    const pageState = currentState && typeof currentState === \"object\"\n      ? currentState[FARM_PAGE_STATE_KEY]\n      : undefined;\n    this.writeHistoryEntry(\n      action,\n      url.pathname + url.search + url.hash,\n      pageState,\n      url,\n      \"url-search\",\n      false,\n    );\n    this.currentPath = url.pathname + url.search;\n  },\n\n  writeHistoryEntry: function(action, path, pageState, url, changeKind = \"url-search\", notify = true) {\n    if (action === \"pop\") return;\n    const nextState = createHistoryState(path, pageState, window.history.state);\n    const nextIndex = this.currentHistoryIndex == null\n      ? null\n      : action === \"replace\"\n        ? this.currentHistoryIndex\n        : this.currentHistoryIndex + 1;\n    if (nextIndex != null) nextState[FARM_HISTORY_INDEX_KEY] = nextIndex;\n    if (action === \"replace\") window.history.replaceState(nextState, \"\", url);\n    else window.history.pushState(nextState, \"\", url);\n    this.currentHistoryIndex = nextIndex;\n    this.currentHistoryState = nextState;\n    // Announce programmatic history writes without synthesizing popstate,\n    // which the router reserves for real back/forward navigation.\n    if (notify) {\n      window.dispatchEvent(\n        new CustomEvent(\"farm:historychange\", { detail: { kind: changeKind } }),\n      );\n    }\n  },\n\n  registerScrollElement: function(key, element) {\n    this.scrollElements.set(key, element);\n    this.restoreScrollElement(window.location.pathname + window.location.search, key, element);\n    return () => {\n      if (this.scrollElements.get(key) === element) this.scrollElements.delete(key);\n    };\n  },\n\n  saveScrollPosition: function(pathname) {\n    try {\n      sessionStorage.setItem(\n        \"farm-scroll-\" + pathname,\n        JSON.stringify({ x: window.scrollX, y: window.scrollY }),\n      );\n      for (const [key, element] of this.scrollElements) {\n        sessionStorage.setItem(\n          scrollElementStorageKey(pathname, key),\n          JSON.stringify({ x: element.scrollLeft, y: element.scrollTop }),\n        );\n      }\n    } catch {}\n  },\n\n  restoreScrollPosition: function(pathname) {\n    try {\n      const saved = sessionStorage.getItem(\"farm-scroll-\" + pathname);\n      if (saved) {\n        const position = JSON.parse(saved);\n        setTimeout(() => window.scrollTo(position.x, position.y), 0);\n      }\n      for (const [key, element] of this.scrollElements) {\n        this.restoreScrollElement(pathname, key, element);\n      }\n    } catch {}\n  },\n\n  restoreScrollElement: function(pathname, key, element) {\n    try {\n      const saved = sessionStorage.getItem(scrollElementStorageKey(pathname, key));\n      if (!saved) return;\n      const position = JSON.parse(saved);\n      setTimeout(() => {\n        element.scrollLeft = position.x;\n        element.scrollTop = position.y;\n      }, 0);\n    } catch {}\n  },\n\n  runViewTransition: async function(enabled, callback) {\n    const startViewTransition = document.startViewTransition;\n    if (!enabled || typeof startViewTransition !== \"function\") {\n      await callback();\n      return;\n    }\n    const transition = startViewTransition.call(document, () => callback());\n    await transition.finished;\n  },\n`.trim();\n}\n\nfunction generateClientHydrationEntry(\n  clientPages: Array<{\n    pattern: string;\n    modulePath: string;\n    relativePath: string;\n    pageShouldHydrate: boolean;\n    islandStrategy: FarmIslandStrategy;\n    hasIsolatedClientBoundaries: boolean;\n    isolatedBoundaries: IsolatedClientBoundaryReference[];\n  }>,\n  layoutRoutes: Array<{\n    pattern: string;\n    modulePath: string;\n    shouldHydrate: boolean;\n    islandStrategy: FarmIslandStrategy | null;\n    hasIsolatedClientBoundaries: boolean;\n    isolatedBoundaries: IsolatedClientBoundaryReference[];\n  }>,\n  clientRouteSlots: UniversalRouteSlot[],\n  root: string,\n  srcDir: string,\n  docsSearchEnabled: boolean,\n  docsSearchModuleId: string | undefined,\n  docsEntryPath: string | undefined,\n  docsAdapterReact: string | undefined,\n  i18nConfig: ResolvedFarmConfig[\"i18n\"] = {\n    enabled: false,\n    basePath: \"/\",\n    locales: [\"en\"],\n    defaultLocale: \"en\",\n    messages: \"\",\n    routing: \"none\",\n    detection: [],\n    fallbackLocale: \"en\",\n    strict: false,\n    cookie: {\n      name: \"farm_locale\",\n      maxAge: 0,\n      path: \"/\",\n      sameSite: \"lax\",\n      secure: false,\n    },\n    direction: {},\n  },\n  plugins: readonly FarmPlugin[] = [],\n  renderer: FarmRenderer = REACT_RENDERER,\n  publicRuntimeConfig: Record<string, unknown> | undefined = undefined,\n  trailingSlash = false,\n  integrationProviders: ReturnType<typeof getIntegrationProviders> = [],\n  basePath = \"/\",\n  clientCachePersistence: ClientCachePersistenceEntryCode = { imports: \"\", init: \"\" },\n): string {\n  const toImportPath = (targetPath: string) => targetPath.replace(/\\\\/g, \"/\");\n  const clientPluginEntry: FarmClientPluginEntryCode = generateFarmClientPluginEntryCode(\n    plugins,\n    root,\n    srcDir,\n    publicRuntimeConfig,\n  );\n  const rendererClientImports = isReactRenderer(renderer)\n    ? `import React from \"react\";\\nimport { createRoot, hydrateRoot } from \"react-dom/client\";`\n    : `import React, { createRoot, hydrateRoot } from ${JSON.stringify(renderer.client)};`;\n  const providerClientCode = generateFarmIntegrationProviderClientCode(integrationProviders, root);\n\n  // Import global CSS (the Tailwind entry) only when the app ships one; an\n  // unconditional import of a missing file fails the client build with\n  // UNRESOLVED_IMPORT. Output validation already treats a missing globals.css\n  // as an intentionally style-free application.\n  const globalsCssPath = path.join(root, srcDir, \"app\", \"globals.css\");\n  const cssImport = existsSync(globalsCssPath)\n    ? `import ${JSON.stringify(toImportPath(globalsCssPath))};`\n    : \"\";\n\n  // Import layouts for wrapping client components\n  const layoutImportStatements: string[] = [];\n  const layoutRegistrations: string[] = [];\n\n  layoutRoutes.forEach((layout, index) => {\n    const relativePath = toImportPath(layout.modulePath);\n    if (!layout.hasIsolatedClientBoundaries) {\n      layoutImportStatements.push(`import Layout${index} from \"${relativePath}\";`);\n    }\n    layoutRegistrations.push(\n      `  { pattern: ${JSON.stringify(layout.pattern)}, Component: ${layout.hasIsolatedClientBoundaries ? \"null\" : `Layout${index}`}, shouldHydrate: ${JSON.stringify(layout.shouldHydrate)}, islandStrategy: ${JSON.stringify(layout.islandStrategy)} }`,\n    );\n  });\n\n  const layoutImports = layoutImportStatements.join(\"\\n\");\n  const i18nRoutingConfig = {\n    locales: i18nConfig.locales,\n    defaultLocale: i18nConfig.defaultLocale,\n    routing: i18nConfig.routing,\n  };\n  const i18nClientRuntime = i18nConfig.enabled\n    ? `\nimport { stripFarmLocaleFromPathname } from \"@farm.js/core/i18n\";\nimport { _setFarmI18nClientSnapshot } from \"@farm.js/core/i18n/client\";\n\nconst farmI18nConfig = ${JSON.stringify(i18nRoutingConfig)};\nif (window.__FARM_I18N__) {\n  _setFarmI18nClientSnapshot(window.__FARM_I18N__);\n}\n\nfunction getFarmRoutePathname(pathname) {\n  return stripFarmLocaleFromPathname(stripFarmBasePath(pathname), farmI18nConfig);\n}\n\nfunction isFarmLocaleDocumentChange(doc) {\n  const currentLocale = window.__FARM_I18N__?.locale || document.documentElement.lang;\n  const nextLocale = doc.documentElement?.lang;\n  return Boolean(currentLocale && nextLocale && currentLocale !== nextLocale);\n}\n`\n    : `\nfunction getFarmRoutePathname(pathname) {\n  return stripFarmBasePath(pathname);\n}\n\nfunction isFarmLocaleDocumentChange() {\n  return false;\n}\n`;\n  const docsNavigationRuntime = docsEntryPath\n    ? `\nconst farmDocsEntryPath = ${JSON.stringify(docsEntryPath)};\nfunction isFarmDocsPath(pathname) {\n  const routePathname = getFarmRoutePathname(pathname);\n  const normalizedPath = routePathname.length > 1 ? routePathname.replace(/\\\\/+$/, \"\") : routePathname;\n  return normalizedPath === farmDocsEntryPath || normalizedPath.startsWith(farmDocsEntryPath + \"/\");\n}\n`\n    : `\nfunction isFarmDocsPath() {\n  return false;\n}\n`;\n  const docsAdapterRuntime = docsAdapterReact\n    ? `\nimport * as FarmDocsAdapterReact from ${JSON.stringify(docsAdapterReact)};\n\nasync function hydrateFarmDocsAdapterRuntime() {\n  const runtime = window.__FARM_DOCS_ADAPTER__;\n  if (!runtime) return false;\n  if (typeof FarmDocsAdapterReact.hydrateFarmDocs !== \"function\") {\n    throw new Error(\"The configured Farm docs adapter does not export hydrateFarmDocs().\");\n  }\n  FarmDocsAdapterReact.hydrateFarmDocs({\n    config: runtime.config || {},\n    data: runtime.data,\n  });\n  return true;\n}\n`\n    : `\nasync function hydrateFarmDocsAdapterRuntime() {\n  return false;\n}\n`;\n\n  if (\n    clientPages.length === 0 &&\n    clientRouteSlots.length === 0 &&\n    !providerClientCode.hasProviders\n  ) {\n    // No client pages - just basic runtime with CSS and SPA navigation\n    return `\n// Farm.js Client Runtime (no client components)\n${cssImport}\n${layoutImports}\nimport { createClientPluginManager, getHashTargetElement, installChunkErrorRecovery, isFarmExternalNavigationURL, reconcileFarmDocumentHead, setFarmBasePath, setFarmTrailingSlashPreference, stripFarmBasePath } from \"@farm.js/core/internal/client-runtime\";\nimport { createFarmDeploymentMismatchError, createFarmDeploymentRequestHeaders, isFarmDeploymentMismatchResponse } from \"@farm.js/core/deployment\";\n${clientPluginEntry.imports}\n${clientCachePersistence.imports}\n${i18nClientRuntime}\n${docsNavigationRuntime}\n${docsAdapterRuntime}\n${generateFarmDocsSearchClientRuntime(docsSearchEnabled, docsSearchModuleId)}\n\nsetFarmBasePath(${JSON.stringify(basePath)});\nsetFarmTrailingSlashPreference(${JSON.stringify(trailingSlash)});\ninstallChunkErrorRecovery();\n${clientCachePersistence.init}\nmountFarmDocsSearch();\n\n${generateUniversalRouterStateRuntime()}\n\n// SPA Router for server-rendered pages (HTML swap)\nconst spaRouter = {\n${generateUniversalRouterStateProperties()}\n  prefetchCache: new Map(),\n  \n  navigate: async function(href, options = {}) {\n    const url = new URL(href, window.location.origin);\n    if (isFarmExternalNavigationURL(url, window.location.origin)) {\n      this.cancelActiveNavigation();\n      if (options.replace || options.action === \"replace\") window.location.replace(href);\n      else window.location.href = href;\n      return;\n    }\n    if (isFarmDocsPath(url.pathname)) {\n      this.cancelActiveNavigation();\n      if (options.replace || options.action === \"replace\") window.location.replace(href);\n      else window.location.href = href;\n      return;\n    }\n\n    const action = options.action || (options.replace ? \"replace\" : \"push\");\n    const to = url.pathname + url.search;\n    if (!options.refresh && action !== \"pop\" && to === this.currentPath) {\n      this.cancelActiveNavigation();\n      if (url.hash === window.location.hash) return;\n      const pageState = options.state === undefined\n        ? window.history.state?.[FARM_PAGE_STATE_KEY]\n        : options.state;\n      this.writeHistoryEntry(action, to, pageState, url);\n      if (options.scroll !== false) {\n        if (url.hash) getHashTargetElement(url.hash)?.scrollIntoView();\n        else window.scrollTo(0, 0);\n      }\n      return;\n    }\n    if (action === \"pop\" && to === this.currentPath) {\n      this.cancelActiveNavigation();\n      this.currentHistoryIndex = readHistoryIndex(options.popState);\n      this.currentHistoryState = options.popState;\n      return;\n    }\n\n    const from = this.currentPath;\n    if (await this.shouldBlockNavigation({ from, to, action })) {\n      if (action === \"pop\") this.revertBlockedPopState(from);\n      return;\n    }\n    if (action === \"pop\") {\n      this.currentHistoryIndex = readHistoryIndex(options.popState);\n      this.currentHistoryState = options.popState;\n    }\n\n    this.saveScrollPosition(window.location.pathname + window.location.search);\n    const navigation = this.startNavigation(from, url, action);\n    let clientNavigation;\n    try {\n      clientNavigation = await farmClientRuntime.beginNavigation({\n        from: action === \"pop\" ? null : window.location.href,\n        to: url,\n        action,\n      });\n      navigation.clientNavigation = clientNavigation;\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      const html = await this.fetchPage(\n        url.pathname + url.search,\n        options.refresh === true,\n        true,\n        navigation.controller.signal,\n      );\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      await farmClientRuntime.markNavigationLoaded(clientNavigation, html);\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      await this.runViewTransition(options.viewTransition, async () => {\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n        if (!this.swapContent(html)) {\n          throw new Error(\"Farm could not swap the target document\");\n        }\n        this.writeHistoryEntry(action, url.pathname + url.search, options.state, url);\n        this.currentPath = to;\n        if (options.scroll !== false) {\n          if (url.hash) getHashTargetElement(url.hash)?.scrollIntoView();\n          else window.scrollTo(0, 0);\n        } else {\n          this.restoreScrollPosition(to);\n        }\n      });\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      await farmClientRuntime.resolveNavigation(clientNavigation);\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      void farmClientRuntime.scheduleNavigationRendered(clientNavigation);\n      this.finishNavigation(navigation);\n    } catch (error) {\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      if (clientNavigation) {\n        await farmClientRuntime.failNavigation(clientNavigation, error);\n      }\n      this.finishNavigation(navigation);\n      if (error?.name === \"FarmDeploymentMismatchError\") return;\n      console.error(\"[Farm.js] Navigation error:\", error);\n      if (action === \"pop\") window.location.reload();\n      else window.location.href = href;\n    }\n  },\n\n  refresh: function(options = {}) {\n    return this.navigate(window.location.href, {\n      ...options,\n      action: \"replace\",\n      replace: true,\n      refresh: true,\n      scroll: options.scroll === undefined ? false : options.scroll,\n    });\n  },\n  \n  fetchPage: async function(url, fresh = false, recover = true, signal) {\n    if (fresh) this.clearPrefetchedPath(url);\n    const cached = fresh ? undefined : this.prefetchCache.get(url);\n    if (cached) return cached;\n    \n    const response = await fetchFarmNavigationDocument(\n      url,\n      { \"Accept\": \"text/html\" },\n      recover,\n      signal,\n    );\n    if (!response.ok) throw new Error(\"Failed to fetch page\");\n    return response.text();\n  },\n  \n  swapContent: function(html) {\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(html, \"text/html\");\n    if (isFarmLocaleDocumentChange(doc)) return false;\n    if (doc.getElementById(\"nd-docs-layout\")) return false;\n    \n    reconcileFarmDocumentHead(doc);\n    \n    // Swap root content\n    const newRoot = doc.getElementById(\"root\");\n    const currentRoot = document.getElementById(\"root\");\n    if (!newRoot || !currentRoot) return this.swapDocument(doc);\n    currentRoot.innerHTML = newRoot.innerHTML;\n    return true;\n  },\n\n  swapDocument: function(doc) {\n    if (!doc.documentElement || !doc.body) return false;\n\n    Array.from(document.documentElement.attributes).forEach(function(attr) {\n      if (!doc.documentElement.hasAttribute(attr.name)) {\n        document.documentElement.removeAttribute(attr.name);\n      }\n    });\n    Array.from(doc.documentElement.attributes).forEach(function(attr) {\n      document.documentElement.setAttribute(attr.name, attr.value);\n    });\n\n    document.head.innerHTML = doc.head ? doc.head.innerHTML : \"\";\n    document.body.innerHTML = doc.body.innerHTML;\n    delete window.__farmDocsRuntime;\n    delete window.__farmDocsPageActionsRuntime;\n\n    setTimeout(function() {\n      Array.from(document.querySelectorAll(\"script\")).forEach(function(script) {\n        const freshScript = document.createElement(\"script\");\n        Array.from(script.attributes).forEach(function(attr) {\n          freshScript.setAttribute(attr.name, attr.value);\n        });\n        freshScript.textContent = script.textContent || \"\";\n        script.replaceWith(freshScript);\n      });\n    }, 0);\n\n    return true;\n  },\n  prefetch: function(href) {\n    const url = new URL(href, window.location.origin);\n    if (isFarmExternalNavigationURL(url, window.location.origin)) return;\n    if (isFarmDocsPath(url.pathname)) return;\n    \n    const pathname = url.pathname + url.search;\n    if (this.prefetchCache.has(pathname)) return;\n    \n    this.fetchPage(pathname, false, false)\n      .then(function(html) { spaRouter.prefetchCache.set(pathname, html); })\n      .catch(function(error) {\n        clearFarmPrefetchCacheOnDeploymentMismatch(spaRouter, error);\n      });\n  },\n\n  clearCache: function() {\n    this.prefetchCache.clear();\n  },\n  \n  observeForPrefetch: function(element) {\n    if (!(\"IntersectionObserver\" in window)) return;\n\n    const href = element.getAttribute(\"href\");\n    if (!href) return;\n\n    const observer = new IntersectionObserver(function(entries) {\n      entries.forEach(function(entry) {\n        if (entry.isIntersecting) {\n          spaRouter.prefetch(href);\n          observer.disconnect();\n          spaRouter.observers.delete(element);\n        }\n      });\n    }, { rootMargin: \"50px\" });\n\n    observer.observe(element);\n    this.observers.set(element, observer);\n  },\n\n  unobserveForPrefetch: function(element) {\n    const observer = this.observers.get(element);\n    if (!observer) return;\n    observer.unobserve(element);\n    observer.disconnect();\n    this.observers.delete(element);\n  }\n};\n\nconst farmClientRuntime = createClientPluginManager(\n  ${clientPluginEntry.registrations},\n  {\n    router: spaRouter,\n    isDev: false,\n    isProd: true,\n    deploymentId: window.__FARM_DEPLOYMENT_ID__,\n  },\n);\nwindow.__FARM_CLIENT_RUNTIME__ = farmClientRuntime;\nvoid farmClientRuntime.start();\n\n// Expose router globally\nspaRouter.initializeHistory();\nwindow.__FARM_SPA_ROUTER__ = spaRouter;\n\nvoid hydrateFarmDocsAdapterRuntime();\n\nwindow.addEventListener(\"beforeunload\", function(event) {\n  if (spaRouter.shouldBlockUnload()) {\n    event.preventDefault();\n    event.returnValue = \"\";\n  }\n  spaRouter.saveScrollPosition(window.location.pathname + window.location.search);\n});\n\n// Handle popstate (back/forward)\nwindow.addEventListener(\"popstate\", function(event) {\n  void spaRouter.handlePopState(event);\n});\n\n// Intercept link clicks\ndocument.addEventListener(\"click\", function(e) {\n  const target = e.target;\n  const anchor = target.closest ? target.closest(\"a\") : null;\n  if (!anchor) return;\n  \n  const href = anchor.getAttribute(\"href\");\n  if (!href) return;\n  if (anchor.hasAttribute(\"download\")) return;\n  if (hasAbsoluteNavigationHref(href)) return;\n  if (href.startsWith(\"#\")) return;\n  if (anchor.target && anchor.target !== \"_self\") return;\n  if (document.documentElement.dataset.farmDocsRuntime === \"true\") return;\n  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;\n  if (e.button !== 0) return;\n  if (e.defaultPrevented) return;\n  \n  e.preventDefault();\n  spaRouter.navigate(href);\n});\n`.trim();\n  }\n\n  // Generate imports for client components\n  const imports: string[] = [];\n  const routeEntries: string[] = [];\n  const routeSlotEntries: string[] = [];\n  const isolatedBoundaryModules = new Map<string, string>();\n\n  clientPages.forEach((page) => {\n    for (const boundary of page.isolatedBoundaries) {\n      isolatedBoundaryModules.set(\n        toViteModuleId(boundary.modulePath, root),\n        toImportPath(boundary.modulePath),\n      );\n    }\n    const load = page.pageShouldHydrate\n      ? `() => import(${JSON.stringify(toImportPath(page.modulePath))}).then((module) => module.default)`\n      : \"null\";\n    routeEntries.push(`  {\n    pattern: ${JSON.stringify(page.pattern)},\n    pageShouldHydrate: ${JSON.stringify(page.pageShouldHydrate)},\n    ${page.hasIsolatedClientBoundaries ? \"hasIsolatedClientBoundaries: true,\" : \"\"}\n    islandStrategy: ${JSON.stringify(page.islandStrategy)},\n    navigation: \"html-fragment\",\n    load: ${load},\n  }`);\n  });\n  const isolatedHydrationEnabled = isolatedBoundaryModules.size > 0;\n  const isolatedHydrationImport = isolatedHydrationEnabled\n    ? `import { createFarmIsolatedHydrationRuntime, wrapFarmIsolatedClientGraph } from \"@farm.js/core/internal/isolated-boundary\";`\n    : \"\";\n  const isolatedHydrationRuntime = isolatedHydrationEnabled\n    ? `const farmIsolatedBoundaryLoaders = {\n${Array.from(isolatedBoundaryModules.entries())\n  .map(\n    ([reference, modulePath]) =>\n      `  ${JSON.stringify(reference)}: () => import(${JSON.stringify(modulePath)}),`,\n  )\n  .join(\"\\n\")}\n};\nconst farmIsolatedHydrationRuntime = createFarmIsolatedHydrationRuntime({\n  ReactRuntime: React,\n  hydrateRoot,\n  load: async function(reference) {\n    const loader = farmIsolatedBoundaryLoaders[reference];\n    if (!loader) throw new Error(\"isolated client boundary loader was not found: \" + reference);\n    return loader();\n  },\n  schedule: scheduleFarmIslandHydration,\n  wrap: wrapWithIntegrationProviders,\n});\n\nfunction disposeFarmIsolatedClientBoundaries(scope) {\n  farmIsolatedHydrationRuntime.dispose(scope);\n}\n\nasync function hydrateFarmIsolatedClientBoundaries(scope = document, signal) {\n  await farmIsolatedHydrationRuntime.hydrate(scope, signal);\n}`\n    : \"\";\n  const routeClientGraphRuntime = isolatedHydrationEnabled\n    ? `function wrapFarmRouteClientGraph(element) {\n  return wrapFarmIsolatedClientGraph(React, element);\n}`\n    : `function wrapFarmRouteClientGraph(element) { return element; }`;\n  clientRouteSlots.forEach((slot, index) => {\n    const importPath = toImportPath(slot.modulePath);\n    imports.push(`import RouteSlot${index} from \"${importPath}\";`);\n    routeSlotEntries.push(`  {\n    name: ${JSON.stringify(slot.name)},\n    ownerPattern: ${JSON.stringify(slot.ownerPattern)},\n    pattern: ${JSON.stringify(slot.pattern)},\n    containerId: ${JSON.stringify(slot.containerId)},\n    interception: ${JSON.stringify(slot.interception)},\n    fallback: ${JSON.stringify(slot.fallback)},\n    Component: RouteSlot${index},\n  }`);\n  });\n\n  // Full SPA client with hydration for client components\n  return `\n// Farm.js Client Runtime - SPA with Hydration\n${cssImport}\n${layoutImports}\n${rendererClientImports}\n${isolatedHydrationImport}\n${providerClientCode.imports}\nimport { createClientPluginManager, getHashTargetElement, installChunkErrorRecovery, isFarmExternalNavigationURL, reconcileFarmDocumentHead, scheduleFarmIslandHydration, searchParamsToObject, setFarmBasePath, setFarmTrailingSlashPreference, stripFarmBasePath } from \"@farm.js/core/internal/client-runtime\";\nimport { createFarmDeploymentMismatchError, createFarmDeploymentRequestHeaders, isFarmDeploymentMismatchResponse } from \"@farm.js/core/deployment\";\nimport { isFarmRouteActive, matchFarmRoute } from \"@farm.js/core/router\";\n${clientPluginEntry.imports}\n${clientCachePersistence.imports}\n${i18nClientRuntime}\n${docsNavigationRuntime}\n${docsAdapterRuntime}\n\n${imports.join(\"\\n\")}\n${generateFarmDocsSearchClientRuntime(docsSearchEnabled, docsSearchModuleId)}\n\n${providerClientCode.runtime}\n\nsetFarmBasePath(${JSON.stringify(basePath)});\nsetFarmTrailingSlashPreference(${JSON.stringify(trailingSlash)});\ninstallChunkErrorRecovery();\n${clientCachePersistence.init}\n\n// Client component routes\nconst clientRoutes = [\n${routeEntries.join(\",\\n\")}\n];\n\n${isolatedHydrationRuntime}\n${routeClientGraphRuntime}\n\nconst clientRouteSlots = [\n${routeSlotEntries.join(\",\\n\")}\n];\n\n// Layout routes for wrapping client components\nconst layoutRoutes = [\n${layoutRegistrations.join(\",\\n\")}\n];\n\n// Get applicable layouts for a pathname (sorted by depth, root first)\nfunction getApplicableLayouts(pathname) {\n  const applicable = [];\n  const normalizedPath = getFarmRoutePathname(pathname).replace(/\\\\/$/, '') || '/';\n  \n  for (const layout of layoutRoutes) {\n    if (layout.pattern === '/' || isFarmRouteActive(layout.pattern, normalizedPath, { exact: false })) {\n      applicable.push(layout);\n    }\n  }\n  \n  // Sort by depth (root first)\n  applicable.sort(function(a, b) {\n    const depthA = a.pattern.split('/').filter(Boolean).length;\n    const depthB = b.pattern.split('/').filter(Boolean).length;\n    return depthA - depthB;\n  });\n  \n  return applicable;\n}\n\nfunction hasHydratableLayout(pathname) {\n  return getApplicableLayouts(pathname).some(function(layout) {\n    return layout.shouldHydrate === true;\n  });\n}\n\n// Wrap a page element with applicable layouts\nfunction wrapWithLayouts(pageElement, pathname, params) {\n  const layouts = getApplicableLayouts(pathname);\n  let wrapped = pageElement;\n  \n  // Wrap from innermost to outermost (reverse order since layouts are root-first)\n  for (let i = layouts.length - 1; i >= 0; i--) {\n    const layout = layouts[i];\n    const LayoutComponent = layout.Component;\n    if (LayoutComponent) {\n      wrapped = React.createElement(LayoutComponent, { children: wrapped, params: params });\n      wrapped = React.createElement(\n        \"div\",\n        {\n          \"data-farm-layout-boundary\": \"true\",\n          \"data-farm-layout-pattern\": layout.pattern,\n          style: { display: \"contents\" },\n        },\n        wrapped,\n      );\n    }\n  }\n  \n  return wrapped;\n}\n\nfunction createLayoutPageBoundary(route, pageElement, serverHtml) {\n  const props = {\n    id: \"__farm_page__\",\n    \"data-farm-client\": route.pageShouldHydrate ? \"true\" : \"false\",\n    \"data-farm-layout-client\": \"true\",\n    \"data-farm-island\": \"page\",\n    \"data-farm-island-strategy\": route.islandStrategy || \"load\",\n  };\n  if (typeof serverHtml === \"string\") {\n    props.suppressHydrationWarning = true;\n    props.dangerouslySetInnerHTML = { __html: serverHtml };\n    return React.createElement(\"div\", props);\n  }\n  return React.createElement(\"div\", props, pageElement);\n}\n\n// Match pathname to client route\nfunction matchRoute(pathname) {\n  pathname = getFarmRoutePathname(pathname);\n  for (const route of clientRoutes) {\n    const params = matchFarmRoute(route.pattern, pathname);\n    if (params !== null) return { route: route, params: params };\n  }\n  return null;\n}\n\nasync function loadRouteComponent(route) {\n  if (!route.load) return null;\n  if (route.Component) return route.Component;\n  route.Component = await route.load();\n  return route.Component;\n}\n\nasync function createMatchedHydrationElement(matched, pathname, searchParams, serverHtml) {\n  const hydrateLayouts = hasHydratableLayout(pathname);\n  const params = matched.params;\n  let pageElement = null;\n\n  if (matched.route.pageShouldHydrate) {\n    const Component = await loadRouteComponent(matched.route);\n    if (!Component) return null;\n    if (typeof Component === \"function\" && Component.constructor && Component.constructor.name === \"AsyncFunction\") {\n      console.warn(\n        \"[Farm.js] Skipping hydration for \" + pathname +\n        \": async server components cannot run in the browser. Server-rendered HTML is preserved.\"\n      );\n      return null;\n    }\n    const props = { params: params, searchParams: Promise.resolve(searchParams) };\n    pageElement = React.createElement(Component, props);\n  } else if (hydrateLayouts) {\n    const serverPage = document.getElementById(\"__farm_page__\");\n    pageElement = createLayoutPageBoundary(\n      matched.route,\n      null,\n      typeof serverHtml === \"string\" ? serverHtml : serverPage ? serverPage.innerHTML : \"\",\n    );\n  }\n\n  if (!pageElement) return null;\n  if (!hydrateLayouts) {\n    return wrapFarmRouteClientGraph(wrapWithIntegrationProviders(pageElement));\n  }\n  if (matched.route.pageShouldHydrate) {\n    pageElement = createLayoutPageBoundary(matched.route, pageElement);\n  }\n  return wrapFarmRouteClientGraph(\n    wrapWithIntegrationProviders(wrapWithLayouts(pageElement, pathname, params)),\n  );\n}\n\nfunction matchesRoutePrefix(pathname, pattern) {\n  return pattern === \"/\" ||\n    isFarmRouteActive(pattern, getFarmRoutePathname(pathname), { exact: false });\n}\n\nfunction matchInterceptedRouteSlot(pathname, from) {\n  for (const slot of clientRouteSlots) {\n    if (!slot.interception || !matchesRoutePrefix(from, slot.ownerPattern)) continue;\n    const params = matchFarmRoute(slot.pattern, getFarmRoutePathname(pathname));\n    if (params !== null) return { slot: slot, params: params };\n  }\n  return null;\n}\n\nfunction routeSlotKey(slot) {\n  return slot.ownerPattern + \":\" + slot.name;\n}\n\nfunction findClientRouteSlot(slot) {\n  return clientRouteSlots.find(function(candidate) {\n    return candidate.name === slot.name &&\n      candidate.ownerPattern === slot.ownerPattern &&\n      candidate.pattern === slot.pattern &&\n      candidate.interception === slot.interception &&\n      candidate.fallback === slot.fallback;\n  });\n}\n\nfunction readRouteSlotPayload(doc) {\n  const script = doc.getElementById(\"__farm_route_slots_data__\");\n  if (!script?.textContent) return [];\n  try {\n    const parsed = JSON.parse(script.textContent);\n    return Array.isArray(parsed) ? parsed : [];\n  } catch {\n    return [];\n  }\n}\n\nconst routeSlotRoots = new Map();\nlet activeRouteInterception = null;\n\nfunction resetRouteSlotRoots() {\n  for (const root of routeSlotRoots.values()) {\n    try { root.unmount(); } catch {}\n  }\n  routeSlotRoots.clear();\n  activeRouteInterception = null;\n}\n\nfunction renderClientRouteSlot(slot, registration, mode) {\n  const container = document.getElementById(slot.containerId);\n  if (!container || !registration?.Component) return false;\n  const key = routeSlotKey(slot);\n  const existingRoot = routeSlotRoots.get(key);\n  const props = slot.props && typeof slot.props === \"object\" ? slot.props : {};\n  const element = wrapFarmRouteClientGraph(\n    wrapWithIntegrationProviders(React.createElement(registration.Component, props)),\n  );\n\n  if (mode === \"hydrate\") {\n    if (existingRoot) return true;\n    const root = hydrateRoot(container, element);\n    routeSlotRoots.set(key, root);\n    return true;\n  }\n\n  if (existingRoot) {\n    try { existingRoot.unmount(); } catch {}\n    routeSlotRoots.delete(key);\n  } else {\n    container.replaceChildren();\n  }\n  const root = createRoot(container);\n  root.render(element);\n  routeSlotRoots.set(key, root);\n  return true;\n}\n\nfunction hydrateInitialRouteSlots() {\n  const slots = Array.isArray(window.__FARM_ROUTE_SLOTS__)\n    ? window.__FARM_ROUTE_SLOTS__\n    : [];\n  for (const slot of slots) {\n    const registration = findClientRouteSlot(slot);\n    if (!registration) continue;\n    try {\n      renderClientRouteSlot(slot, registration, \"hydrate\");\n    } catch (error) {\n      console.warn(\"[Farm.js] Could not hydrate route slot:\", slot.name, error);\n    }\n  }\n}\n\nfunction renderRouteInterception(slot, registration, from, nextDocument) {\n  const container = document.getElementById(slot.containerId);\n  if (!container || !registration?.Component) return false;\n  const key = routeSlotKey(slot);\n  const previousSlot = (window.__FARM_ROUTE_SLOTS__ || []).find(function(candidate) {\n    return routeSlotKey(candidate) === key;\n  }) || null;\n  const previousHtml = container.innerHTML;\n\n  reconcileFarmDocumentHead(nextDocument);\n  if (!renderClientRouteSlot(slot, registration, \"render\")) return false;\n  activeRouteInterception = {\n    from: from,\n    key: key,\n    slot: slot,\n    previousSlot: previousSlot,\n    previousHtml: previousHtml,\n  };\n  return true;\n}\n\nfunction clearRouteInterception(destination) {\n  if (!activeRouteInterception) return false;\n  const active = activeRouteInterception;\n  activeRouteInterception = null;\n  const root = routeSlotRoots.get(active.key);\n  if (root) {\n    try { root.unmount(); } catch {}\n    routeSlotRoots.delete(active.key);\n  }\n  const container = document.getElementById(active.slot.containerId);\n  if (container) {\n    container.innerHTML = active.previousHtml;\n    if (active.previousSlot) {\n      const registration = findClientRouteSlot(active.previousSlot);\n      if (registration) {\n        try {\n          renderClientRouteSlot(active.previousSlot, registration, \"hydrate\");\n        } catch {}\n      }\n    }\n  }\n  return destination === active.from;\n}\n\n// State\nlet reactRoot = null;\nlet reactRootContainer = null;\nlet currentPathname = null;\nlet isHydrated = false;\nlet pendingPageHydrationController = null;\n\n${generateUniversalRouterStateRuntime()}\n\nfunction cancelPendingPageHydration() {\n  pendingPageHydrationController?.abort();\n  pendingPageHydrationController = null;\n}\n\nfunction resetReactRoot() {\n  cancelPendingPageHydration();\n  if (!reactRoot) return;\n  reactRoot.unmount();\n  reactRoot = null;\n  reactRootContainer = null;\n  isHydrated = false;\n}\n\n// Hydrate client components\nasync function hydrate() {\n  await farmClientRuntime.start();\n\n  if (await hydrateFarmDocsAdapterRuntime()) {\n    return;\n  }\n\n  const pathname = window.location.pathname;\n  const matched = matchRoute(pathname);\n  hydrateInitialRouteSlots();\n\n  if (!matched) {\n    return;\n  }\n\n  ${\n    isolatedHydrationEnabled\n      ? `if (\n    matched.route.hasIsolatedClientBoundaries &&\n    !matched.route.pageShouldHydrate &&\n    !hasHydratableLayout(pathname)\n  ) {\n    const hydrationController = new AbortController();\n    pendingPageHydrationController = hydrationController;\n    await hydrateFarmIsolatedClientBoundaries(document, hydrationController.signal);\n    return;\n  }`\n      : \"\"\n  }\n  \n  const rootContainer = document.getElementById(\"root\");\n  const container = hasHydratableLayout(pathname)\n    ? rootContainer\n    : document.getElementById(\"__farm_page__\") || rootContainer;\n  if (!container) {\n    console.error(\"[Farm.js] No root element found\");\n    return;\n  }\n  \n  container.dataset.farmIsland = \"page\";\n  container.dataset.farmIslandStrategy = matched.route.islandStrategy || \"load\";\n\n  const hydrationController = new AbortController();\n  pendingPageHydrationController = hydrationController;\n  try {\n    const pageHydration = scheduleFarmIslandHydration({\n      container,\n      strategy: matched.route.islandStrategy,\n      signal: hydrationController.signal,\n      hydrate: async function() {\n        if (\n          hydrationController.signal.aborted ||\n          !container.isConnected ||\n          window.location.pathname !== pathname\n        ) {\n          return;\n        }\n        const searchParams = searchParamsToObject(new URLSearchParams(window.location.search));\n        const wrappedElement = await createMatchedHydrationElement(\n          matched,\n          pathname,\n          searchParams,\n        );\n        if (!wrappedElement) return;\n        const shouldHydrate = !isHydrated && Boolean(container.innerHTML.trim());\n        const hydrationSession = await farmClientRuntime.beginHydration({\n          container,\n          mode: shouldHydrate ? \"hydrate\" : \"render\",\n        });\n\n        try {\n          if (hydrationController.signal.aborted || !container.isConnected) {\n            await farmClientRuntime.failHydration(\n              hydrationSession,\n              new DOMException(\"Route hydration was cancelled\", \"AbortError\"),\n            );\n            return;\n          }\n          if (shouldHydrate) {\n            reactRoot = hydrateRoot(container, wrappedElement);\n            reactRootContainer = container;\n            isHydrated = true;\n          } else {\n            if (!reactRoot) {\n              reactRoot = createRoot(container);\n              reactRootContainer = container;\n            }\n            reactRoot.render(wrappedElement);\n          }\n          currentPathname = pathname;\n          await farmClientRuntime.completeHydration(hydrationSession);\n        } catch (error) {\n          await farmClientRuntime.failHydration(hydrationSession, error);\n          console.error(\"[Farm.js] Hydration error:\", error);\n        }\n      },\n    });\n    ${\n      isolatedHydrationEnabled\n        ? `const isolatedHydration =\n      !hasHydratableLayout(pathname) &&\n      document.querySelector('farm-client-boundary[data-farm-client-boundary]')\n        ? hydrateFarmIsolatedClientBoundaries(document, hydrationController.signal)\n        : Promise.resolve();\n    await Promise.all([pageHydration, isolatedHydration]);`\n        : \"await pageHydration;\"\n    }\n  } finally {\n    if (pendingPageHydrationController === hydrationController) {\n      pendingPageHydrationController = null;\n    }\n  }\n}\n\nfunction findLayoutBoundary(root, pattern) {\n  const boundaries = root?.querySelectorAll?.('[data-farm-layout-boundary=\"true\"]') || [];\n  for (const boundary of boundaries) {\n    if (boundary.getAttribute(\"data-farm-layout-pattern\") === pattern) return boundary;\n  }\n  return null;\n}\n\nfunction getLayoutPatterns(root) {\n  return Array.from(root?.querySelectorAll?.('[data-farm-layout-boundary=\"true\"]') || [])\n    .map(function(element) { return element.getAttribute(\"data-farm-layout-pattern\"); })\n    .filter(Boolean);\n}\n\nfunction activateNavigationScripts(root) {\n  for (const script of Array.from(root?.querySelectorAll?.(\"script\") || [])) {\n    const freshScript = document.createElement(\"script\");\n    for (const attribute of Array.from(script.attributes)) {\n      freshScript.setAttribute(attribute.name, attribute.value);\n    }\n    freshScript.textContent = script.textContent || \"\";\n    script.replaceWith(freshScript);\n  }\n}\n\nfunction replaceSharedLayoutBoundary(currentRoot, nextRoot) {\n  const currentPatterns = getLayoutPatterns(currentRoot);\n  const nextPatterns = getLayoutPatterns(nextRoot);\n  let sharedCount = 0;\n  while (\n    sharedCount < currentPatterns.length &&\n    sharedCount < nextPatterns.length &&\n    currentPatterns[sharedCount] === nextPatterns[sharedCount]\n  ) sharedCount++;\n\n  const nextTreeRoot = nextPatterns.length\n    ? findLayoutBoundary(nextRoot, nextPatterns[0])\n    : nextRoot.querySelector(\"#__farm_page__\");\n  const currentTarget = sharedCount < currentPatterns.length\n    ? findLayoutBoundary(currentRoot, currentPatterns[sharedCount])\n    : currentRoot.querySelector(\"#__farm_page__\");\n  const nextTarget = sharedCount < nextPatterns.length\n    ? findLayoutBoundary(nextRoot, nextPatterns[sharedCount])\n    : nextRoot.querySelector(\"#__farm_page__\");\n\n  if (!currentTarget || !nextTarget) return false;\n  ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(currentTarget);\" : \"\"}\n  currentTarget.replaceWith(nextTarget);\n  activateNavigationScripts(nextTarget);\n  if (nextTreeRoot && nextTreeRoot !== nextTarget) nextTreeRoot.remove();\n\n  if (nextRoot.childNodes.length) {\n    const support = document.createElement(\"div\");\n    support.hidden = true;\n    support.dataset.farmFragmentSupport = \"true\";\n    while (nextRoot.firstChild) support.appendChild(nextRoot.firstChild);\n    document.body.appendChild(support);\n    activateNavigationScripts(support);\n    setTimeout(function() { support.remove(); }, 0);\n  }\n  return nextTarget;\n}\n\n// SPA Router\nconst spaRouter = {\n${generateUniversalRouterStateProperties()}\n  prefetchCache: new Map(),\n  \n  navigate: async function(href, options = {}) {\n    const url = new URL(href, window.location.origin);\n    if (isFarmExternalNavigationURL(url, window.location.origin)) {\n      this.cancelActiveNavigation();\n      if (options.replace || options.action === \"replace\") window.location.replace(href);\n      else window.location.href = href;\n      return;\n    }\n    if (isFarmDocsPath(url.pathname)) {\n      this.cancelActiveNavigation();\n      if (options.replace || options.action === \"replace\") window.location.replace(href);\n      else window.location.href = href;\n      return;\n    }\n\n    const action = options.action || (options.replace ? \"replace\" : \"push\");\n    const to = url.pathname + url.search;\n    if (!options.refresh && action !== \"pop\" && to === this.currentPath) {\n      this.cancelActiveNavigation();\n      if (url.hash === window.location.hash) return;\n      const pageState = options.state === undefined\n        ? window.history.state?.[FARM_PAGE_STATE_KEY]\n        : options.state;\n      this.writeHistoryEntry(action, to, pageState, url);\n      if (options.scroll !== false) {\n        if (url.hash) getHashTargetElement(url.hash)?.scrollIntoView();\n        else window.scrollTo(0, 0);\n      }\n      return;\n    }\n    if (action === \"pop\" && to === this.currentPath) {\n      this.cancelActiveNavigation();\n      this.currentHistoryIndex = readHistoryIndex(options.popState);\n      this.currentHistoryState = options.popState;\n      return;\n    }\n    \n    const pathname = url.pathname;\n    const matched = matchRoute(pathname);\n    const from = this.currentPath;\n    if (await this.shouldBlockNavigation({ from, to, action })) {\n      if (action === \"pop\") this.revertBlockedPopState(from);\n      return;\n    }\n    if (action === \"pop\") {\n      this.currentHistoryIndex = readHistoryIndex(options.popState);\n      this.currentHistoryState = options.popState;\n    }\n\n    // A route transition invalidates any trigger waiting on the previous DOM boundary.\n    cancelPendingPageHydration();\n    this.saveScrollPosition(window.location.pathname + window.location.search);\n    const navigation = this.startNavigation(from, url, action);\n    let clientNavigation;\n\n    try {\n      clientNavigation = await farmClientRuntime.beginNavigation({\n        from: action === \"pop\" ? null : window.location.href,\n        to: url,\n        action,\n        route: matched\n          ? { pattern: matched.route.pattern, params: matched.params }\n          : undefined,\n      });\n      navigation.clientNavigation = clientNavigation;\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n\n      if (!options.refresh && activeRouteInterception && clearRouteInterception(to)) {\n        this.currentPath = to;\n        await farmClientRuntime.markNavigationLoaded(clientNavigation, {\n          routeSlots: \"restored\",\n        });\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n        await farmClientRuntime.resolveNavigation(clientNavigation);\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n        void farmClientRuntime.scheduleNavigationRendered(clientNavigation);\n        this.finishNavigation(navigation);\n        return;\n      }\n      if (activeRouteInterception) {\n        clearRouteInterception(to);\n      }\n\n      const intercepted = options.refresh ? null : matchInterceptedRouteSlot(pathname, from);\n      if (intercepted) {\n        const html = await this.fetchPage(to, from, false, true, navigation.controller.signal);\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n        const doc = new DOMParser().parseFromString(html, \"text/html\");\n        const slotPayload = readRouteSlotPayload(doc);\n        const selectedSlot = slotPayload.find(function(slot) {\n          return slot.interception &&\n            slot.name === intercepted.slot.name &&\n            slot.ownerPattern === intercepted.slot.ownerPattern;\n        });\n\n        if (selectedSlot) {\n          await farmClientRuntime.markNavigationLoaded(clientNavigation, {\n            route: intercepted.slot.pattern,\n            params: intercepted.params,\n          });\n          if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n          if (renderRouteInterception(selectedSlot, intercepted.slot, from, doc)) {\n            this.writeHistoryEntry(action, to, options.state, url);\n            this.currentPath = to;\n            await farmClientRuntime.resolveNavigation(clientNavigation);\n            if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n            void farmClientRuntime.scheduleNavigationRendered(clientNavigation);\n            this.finishNavigation(navigation);\n            return;\n          }\n        }\n      }\n\n      if (!options.refresh && matched?.route.navigation === \"client-render\") {\n        // Navigation itself signals intent, so destination routes load eagerly even\n        // when their initial document hydration strategy is deferred.\n        const Component = await loadRouteComponent(matched.route);\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n        const params = matched.params;\n        const searchParams = searchParamsToObject(url.searchParams);\n        const props = { params: params, searchParams: Promise.resolve(searchParams) };\n        let pageElement = React.createElement(Component, props);\n        if (hasHydratableLayout(pathname)) {\n          pageElement = createLayoutPageBoundary(matched.route, pageElement);\n        }\n        const wrappedElement = wrapFarmRouteClientGraph(\n          wrapWithIntegrationProviders(wrapWithLayouts(pageElement, pathname, params)),\n        );\n\n        await farmClientRuntime.markNavigationLoaded(clientNavigation, {\n          route: matched.route.pattern,\n          params,\n        });\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n\n        await this.runViewTransition(options.viewTransition, async () => {\n          if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n          this.writeHistoryEntry(action, url.pathname + url.search, options.state, url);\n\n          const container = document.getElementById(\"root\");\n          if (container) {\n            if (reactRoot && reactRootContainer !== container) resetReactRoot();\n            if (!reactRoot) {\n              reactRoot = createRoot(container);\n              reactRootContainer = container;\n            }\n            reactRoot.render(wrappedElement);\n            currentPathname = pathname;\n          }\n          this.currentPath = to;\n        });\n      } else {\n        const html = await this.fetchPage(\n          url.pathname + url.search,\n          undefined,\n          options.refresh === true,\n          true,\n          navigation.controller.signal,\n        );\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n        await farmClientRuntime.markNavigationLoaded(clientNavigation, html);\n        if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n        await this.runViewTransition(options.viewTransition, async () => {\n          if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n          const swapped = await this.swapContent(\n            html,\n            url.pathname + url.search,\n            navigation,\n            clientNavigation,\n          );\n          if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n          if (!swapped) {\n            throw new Error(\"Farm could not swap the target document\");\n          }\n          this.writeHistoryEntry(action, url.pathname + url.search, options.state, url);\n          currentPathname = pathname;\n          this.currentPath = to;\n        });\n      }\n\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      if (options.scroll !== false) {\n        if (url.hash) getHashTargetElement(url.hash)?.scrollIntoView();\n        else window.scrollTo(0, 0);\n      } else {\n        this.restoreScrollPosition(to);\n      }\n      await farmClientRuntime.resolveNavigation(clientNavigation);\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      void farmClientRuntime.scheduleNavigationRendered(clientNavigation);\n      this.finishNavigation(navigation);\n    } catch (error) {\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      if (clientNavigation) {\n        await farmClientRuntime.failNavigation(clientNavigation, error);\n      }\n      this.finishNavigation(navigation);\n      if (error?.name === \"FarmDeploymentMismatchError\") return;\n      console.error(\"[Farm.js] Navigation error:\", error);\n      if (action === \"pop\") window.location.reload();\n      else window.location.href = href;\n    }\n  },\n\n  refresh: function(options = {}) {\n    return this.navigate(window.location.href, {\n      ...options,\n      action: \"replace\",\n      replace: true,\n      refresh: true,\n      scroll: options.scroll === undefined ? false : options.scroll,\n    });\n  },\n  \n  fetchPage: async function(url, interceptFrom, fresh = false, recover = true, signal) {\n    const cacheKey = interceptFrom ? url + \"\\\\nintercept:\" + interceptFrom : url;\n    if (fresh) this.clearPrefetchedPath(url);\n    const cached = fresh ? undefined : this.prefetchCache.get(cacheKey);\n    if (cached) return cached;\n    \n    const response = await fetchFarmNavigationDocument(\n      url,\n      {\n        \"Accept\": \"text/html\",\n        ...(interceptFrom ? { \"X-Farm-Intercept-From\": interceptFrom } : {}),\n      },\n      recover,\n      signal,\n    );\n    if (!response.ok) throw new Error(\"Failed to fetch page\");\n    const html = await response.text();\n    this.prefetchCache.set(cacheKey, html);\n    return html;\n  },\n  \n  swapContent: async function(html, targetPath, navigation, clientNavigation) {\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(html, \"text/html\");\n    if (isFarmLocaleDocumentChange(doc)) return false;\n    if (doc.getElementById(\"nd-docs-layout\")) return false;\n    const nextRouteSlots = readRouteSlotPayload(doc);\n    const isNavigationCurrent = () =>\n      this.isCurrentNavigation(navigation, clientNavigation);\n    \n    reconcileFarmDocumentHead(doc);\n    \n    // Swap root content\n    const newRoot = doc.getElementById(\"root\");\n    const currentRoot = document.getElementById(\"root\");\n    if (!newRoot || !currentRoot) {\n      if (!isNavigationCurrent()) return false;\n      return this.swapDocument(doc);\n    }\n    const targetUrl = new URL(targetPath || window.location.href, window.location.origin);\n    const newPathname = targetUrl.pathname;\n    const matched = matchRoute(newPathname);\n    const hydrateLayouts = hasHydratableLayout(newPathname);\n    const nextPage = newRoot.querySelector(\"#__farm_page__\");\n\n    // If React already owns the shared layout, update that root. React keeps\n    // matching layout component instances and their state mounted.\n    if (matched && hydrateLayouts && reactRoot && reactRootContainer === currentRoot) {\n      const searchParams = searchParamsToObject(targetUrl.searchParams);\n      const wrappedElement = await createMatchedHydrationElement(\n        matched,\n        newPathname,\n        searchParams,\n        nextPage ? nextPage.innerHTML : \"\",\n      );\n      if (!isNavigationCurrent()) return false;\n      if (wrappedElement) {\n        reactRoot.render(wrappedElement);\n        window.__FARM_ROUTE_SLOTS__ = nextRouteSlots;\n        isHydrated = true;\n        return true;\n      }\n    }\n\n    const rootWasReactOwned = reactRootContainer === currentRoot;\n    resetReactRoot();\n    resetRouteSlotRoots();\n    const replacedSharedBoundary = rootWasReactOwned\n      ? null\n      : replaceSharedLayoutBoundary(currentRoot, newRoot);\n    let isolatedHydrationScope = replacedSharedBoundary || currentRoot;\n    if (!replacedSharedBoundary) {\n      ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(currentRoot);\" : \"\"}\n      currentRoot.innerHTML = newRoot.innerHTML;\n      activateNavigationScripts(currentRoot);\n      isolatedHydrationScope = currentRoot;\n    }\n    window.__FARM_ROUTE_SLOTS__ = nextRouteSlots;\n    hydrateInitialRouteSlots();\n\n    // Check if the new HTML contains an interactive route boundary.\n    if (matched) {\n      const searchParams = searchParamsToObject(targetUrl.searchParams);\n      const pageContainer =\n        hydrateLayouts ? currentRoot : document.getElementById(\"__farm_page__\") || currentRoot;\n      const wrappedElement = await createMatchedHydrationElement(\n        matched,\n        newPathname,\n        searchParams,\n      );\n      if (!isNavigationCurrent()) return false;\n      if (wrappedElement) {\n        reactRoot = hydrateRoot(pageContainer, wrappedElement);\n        reactRootContainer = pageContainer;\n        isHydrated = true;\n      }\n      ${\n        isolatedHydrationEnabled\n          ? `if (matched.route.hasIsolatedClientBoundaries && !hydrateLayouts) {\n        await hydrateFarmIsolatedClientBoundaries(\n          isolatedHydrationScope,\n          navigation.controller.signal,\n        );\n        if (!isNavigationCurrent()) return false;\n      }`\n          : \"\"\n      }\n    }\n    return true;\n  },\n\n  swapDocument: function(doc) {\n    if (!doc.documentElement || !doc.body) return false;\n\n    resetReactRoot();\n    resetRouteSlotRoots();\n    ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(document);\" : \"\"}\n\n    Array.from(document.documentElement.attributes).forEach(function(attr) {\n      if (!doc.documentElement.hasAttribute(attr.name)) {\n        document.documentElement.removeAttribute(attr.name);\n      }\n    });\n    Array.from(doc.documentElement.attributes).forEach(function(attr) {\n      document.documentElement.setAttribute(attr.name, attr.value);\n    });\n\n    document.head.innerHTML = doc.head ? doc.head.innerHTML : \"\";\n    document.body.innerHTML = doc.body.innerHTML;\n    delete window.__farmDocsRuntime;\n    delete window.__farmDocsPageActionsRuntime;\n\n    setTimeout(function() {\n      Array.from(document.querySelectorAll(\"script\")).forEach(function(script) {\n        const freshScript = document.createElement(\"script\");\n        Array.from(script.attributes).forEach(function(attr) {\n          freshScript.setAttribute(attr.name, attr.value);\n        });\n        freshScript.textContent = script.textContent || \"\";\n        script.replaceWith(freshScript);\n      });\n    }, 0);\n\n    return true;\n  },\n  prefetch: function(href) {\n    const url = new URL(href, window.location.origin);\n    if (isFarmExternalNavigationURL(url, window.location.origin)) return;\n    if (isFarmDocsPath(url.pathname)) return;\n    \n    const pathname = url.pathname + url.search;\n    const interceptFrom = this.currentPath;\n    const cacheKey = pathname + \"\\\\nintercept:\" + interceptFrom;\n    if (this.prefetchCache.has(cacheKey)) return;\n    \n    this.fetchPage(pathname, interceptFrom, false, false)\n      .then(function(html) { spaRouter.prefetchCache.set(cacheKey, html); })\n      .catch(function(error) {\n        clearFarmPrefetchCacheOnDeploymentMismatch(spaRouter, error);\n      });\n  },\n  \n  observeForPrefetch: function(element) {\n    if (!(\"IntersectionObserver\" in window)) return;\n\n    const href = element.getAttribute(\"href\");\n    if (!href) return;\n\n    const observer = new IntersectionObserver(function(entries) {\n      entries.forEach(function(entry) {\n        if (entry.isIntersecting) {\n          spaRouter.prefetch(href);\n          observer.disconnect();\n          spaRouter.observers.delete(element);\n        }\n      });\n    }, { rootMargin: \"50px\" });\n\n    observer.observe(element);\n    this.observers.set(element, observer);\n  },\n\n  unobserveForPrefetch: function(element) {\n    const observer = this.observers.get(element);\n    if (!observer) return;\n    observer.unobserve(element);\n    observer.disconnect();\n    this.observers.delete(element);\n  }\n};\n\nconst farmClientRuntime = createClientPluginManager(\n  ${clientPluginEntry.registrations},\n  {\n    router: spaRouter,\n    isDev: false,\n    isProd: true,\n    deploymentId: window.__FARM_DEPLOYMENT_ID__,\n  },\n);\nwindow.__FARM_CLIENT_RUNTIME__ = farmClientRuntime;\nvoid farmClientRuntime.start();\n\n// Expose router globally\nspaRouter.initializeHistory();\nwindow.__FARM_SPA_ROUTER__ = spaRouter;\n\nwindow.addEventListener(\"beforeunload\", function(event) {\n  if (spaRouter.shouldBlockUnload()) {\n    event.preventDefault();\n    event.returnValue = \"\";\n  }\n  spaRouter.saveScrollPosition(window.location.pathname + window.location.search);\n});\n\n// Handle popstate (back/forward)\nwindow.addEventListener(\"popstate\", function(event) {\n  void spaRouter.handlePopState(event);\n});\n\n// Intercept link clicks\ndocument.addEventListener(\"click\", function(e) {\n  const target = e.target;\n  const anchor = target.closest ? target.closest(\"a\") : null;\n  if (!anchor) return;\n  \n  const href = anchor.getAttribute(\"href\");\n  if (!href) return;\n  if (anchor.hasAttribute(\"download\")) return;\n  if (hasAbsoluteNavigationHref(href)) return;\n  if (href.startsWith(\"#\")) return;\n  if (anchor.target && anchor.target !== \"_self\") return;\n  if (document.documentElement.dataset.farmDocsRuntime === \"true\") return;\n  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) return;\n  if (e.button !== 0) return;\n  if (e.defaultPrevented) return;\n  \n  e.preventDefault();\n  spaRouter.navigate(href);\n});\n\n// Initial hydration\nif (isFarmDocsSearchPage()) {\n  mountFarmDocsSearch();\n}\nvoid hydrate();\n`.trim();\n}\n\n/**\n * Build SSR bundle in memory (write: false)\n * Creates a virtual entry that bundles all API routes and page routes\n * Managers are created at runtime from the bundled code\n */\nasync function buildSSRInMemory(\n  productionVite: FarmProductionViteRuntime,\n  config: ResolvedFarmConfig,\n  root: string,\n  routeManager: RouteManager,\n  apiRouteManager: APIRouteManager,\n  serverRenderer: ServerRenderer,\n  preset: string,\n  collectedPageRoutes: readonly UniversalPageRoute[],\n  collectedLayoutRoutes: ReadonlyArray<{ pattern: string; modulePath: string }>,\n  collectedRouteSlots: readonly UniversalRouteSlot[],\n  isolatedClientBoundaryModules: ReadonlySet<string>,\n  hydrationPlanCache: Map<string, ClientModuleHydrationPlan>,\n): Promise<{\n  bundle: OutputBundle;\n  entryFile: string;\n  configuredHeaderRoutes: UniversalConfiguredHeaderRoute[];\n}> {\n  const viteBuild = productionVite.build;\n  const { farmPlugin } = await import(\"../vite\");\n  const { PluginManager } = await import(\"../plugin\");\n  const fs = await import(\"fs/promises\");\n\n  const pluginManager = new PluginManager({\n    config,\n    isDev: false,\n    isProd: true,\n  });\n  pluginManager.addPlugins(config.plugins || []);\n  const hasScopedPostcssConfig = hasProjectPostcssConfig(root);\n  let postcssConfigDir: string | undefined;\n  let tailwindVitePlugin: any = undefined;\n  const rendererVitePlugins = await loadFarmRendererVitePlugins(config.renderer, root, {\n    ssr: true,\n  });\n  if (!hasScopedPostcssConfig) {\n    postcssConfigDir = await fs.mkdtemp(path.join(os.tmpdir(), \"farm-postcss-\"));\n    await fs.writeFile(\n      path.join(postcssConfigDir, \"postcss.config.cjs\"),\n      \"module.exports = { plugins: [] };\\n\",\n    );\n    try {\n      const tailwindVite = (await import(\"@tailwindcss/vite\")).default;\n      tailwindVitePlugin = adaptTailwindVitePlugin(tailwindVite(), productionVite.builder);\n    } catch (error) {\n      logger.warn(\n        `Tailwind plugin auto-enable failed for SSR; continuing without it: ${(error as Error).message}`,\n      );\n    }\n  }\n\n  let ssrBundle: OutputBundle;\n  let ssrEntryFile: string;\n\n  // Reuse the route and layout manifests already collected for the parallel\n  // client build instead of rescanning the same project tree.\n  const pageRoutes = collectedPageRoutes.map((route) => ({ ...route }));\n  const layoutRoutes = collectedLayoutRoutes.map((route) => ({ ...route }));\n  const routeSlots = collectedRouteSlots.map((slot) => ({ ...slot }));\n\n  const metadataImageRoutes: UniversalMetadataImageRoute[] = [];\n  for (const entry of routeManager.getMetadataImages().values()) {\n    if (entry.sourceType === \"static\") {\n      if (!entry.staticInfo) {\n        throw new Error(`Static metadata image ${entry.modulePath} is missing file info`);\n      }\n      metadataImageRoutes.push({\n        pattern: entry.pattern,\n        kind: entry.kind,\n        fileName: entry.fileName,\n        sourceType: \"static\",\n        staticInfo: entry.staticInfo,\n        data: (await fs.readFile(entry.modulePath)).toString(\"base64\"),\n      });\n      continue;\n    }\n\n    metadataImageRoutes.push({\n      pattern: entry.pattern,\n      kind: entry.kind,\n      fileName: entry.fileName,\n      sourceType: \"module\",\n      modulePath: entry.modulePath,\n    });\n  }\n\n  const applicationMetadataRoutes: UniversalApplicationMetadataRoute[] = Array.from(\n    routeManager.getMetadataRoutes().values(),\n    (entry) => ({\n      pattern: entry.pattern,\n      kind: entry.kind,\n      outputName: entry.outputName,\n      modulePath: entry.modulePath,\n    }),\n  );\n\n  // Generate API route manifest\n  const apiRoutes: Array<{\n    path: string;\n    filePath: string;\n    methods: string[];\n    pluginMethods?: string[];\n  }> = [];\n  for (const [routePath, route] of apiRouteManager.getRoutes()) {\n    apiRoutes.push({\n      path: routePath,\n      filePath: route.filePath,\n      methods: route.methods,\n      pluginMethods: route.pluginMethods,\n    });\n  }\n  const [configuredRedirects, configuredRewrites, configuredHeaderRoutes] = await Promise.all([\n    config.redirects(),\n    config.rewrites(),\n    config.headers(),\n  ]);\n  const redirectRoutes: ProgrammaticRedirectRoute[] = [\n    ...routeManager.getRedirects(),\n    ...configuredRedirects.map((redirect: RedirectConfig) => ({\n      source: redirect.source,\n      destination: redirect.destination,\n      permanent: redirect.permanent,\n      statusCode: redirect.statusCode,\n    })),\n  ];\n  const errorRoutes: UniversalBoundaryRoute[] = Array.from(\n    routeManager.getErrors().values(),\n    (entry) => ({\n      pattern: entry.pattern,\n      modulePath: entry.modulePath,\n    }),\n  );\n  const i18nCatalogs = config.i18n.enabled\n    ? (await readFarmI18nCatalogs(config.i18n)).catalogs\n    : {};\n\n  const appDirs = getFarmAppDirectories(config);\n  let openAPIReference: {\n    route: string;\n    html: string;\n    spec: unknown;\n    specRoute: string | null;\n  } | null = null;\n  if (config.openapi.enabled && config.openapi.route) {\n    const { OpenAPIManager, renderOpenAPIReferenceHTML } = await import(\"../openapi/manager\");\n    const openAPIManager = new OpenAPIManager(appDirs, config.openapi);\n    const spec = await openAPIManager.generateSpec();\n    if (!spec) {\n      throw new Error(\"Failed to generate the OpenAPI specification for the production build.\");\n    }\n    openAPIReference = {\n      route: config.openapi.route,\n      html: renderOpenAPIReferenceHTML(spec, config.openapi),\n      spec,\n      specRoute: config.openapi.specRoute || null,\n    };\n  }\n  const middlewareRoutes = await discoverMiddlewareRoutes(appDirs);\n  const instrumentationPath = resolveFarmInstrumentationFile(root, config.srcDir || \"src\");\n\n  // Check for custom not-found page\n  const notFoundPath = resolveFarmNotFoundComponentPath(config, appDirs);\n  if (notFoundPath) logger.info(`📋 Found custom 404 page: ${notFoundPath}`);\n\n  // Sort layouts by depth (root first)\n  layoutRoutes.sort((a, b) => {\n    const depthA = a.pattern.split(\"/\").filter(Boolean).length;\n    const depthB = b.pattern.split(\"/\").filter(Boolean).length;\n    return depthA - depthB;\n  });\n\n  logger.info(\n    `📋 Found ${pageRoutes.length} page routes, ${layoutRoutes.length} layouts, ${apiRoutes.length} API routes, ${applicationMetadataRoutes.length} metadata routes, and ${middlewareRoutes.length} middleware files`,\n  );\n\n  const configuredIntegrationValues = Object.values(config.integrations || {});\n  const hasAnyConfiguredIntegrations = configuredIntegrationValues.some(\n    (integration) => typeof integration === \"object\" && integration !== null,\n  );\n  const hasServerRuntimeIntegrations = configuredIntegrationValues.some(\n    (integration) =>\n      typeof integration === \"object\" &&\n      integration !== null &&\n      (!(\"serverRuntime\" in integration) || integration.serverRuntime !== false),\n  );\n  const hasIntegrationProviders = getIntegrationProviders(config.integrations).some(\n    (provider) => provider.component || provider.type === \"clerk\",\n  );\n  const hasObservabilityHandler =\n    !!config.observability &&\n    typeof config.observability === \"object\" &&\n    \"onEvent\" in config.observability;\n  const hasMdxComponentConfig = Boolean(config.mdx?.components);\n  const hasMiddlewareConfig = hasFarmMiddlewareConfig(config.middleware);\n  const hasRouteContextConfig = hasCustomFarmRouteContext(config);\n  const hasServerRuntimePlugins = hasFarmServerRuntimePlugins(config);\n  const configModulePath =\n    hasServerRuntimeIntegrations ||\n    hasObservabilityHandler ||\n    hasMdxComponentConfig ||\n    hasMiddlewareConfig ||\n    hasRouteContextConfig ||\n    hasServerRuntimePlugins ||\n    hasIntegrationProviders\n      ? await findFarmConfigPath(root)\n      : null;\n  const hasRuntimeConfigModule = hasFarmRuntimeConfigModule(config, configModulePath);\n  const hasRuntimeIntegrationConfig = hasRuntimeConfigModule && hasAnyConfiguredIntegrations;\n  const hasConfiguredRuntimePlugins = Boolean(\n    hasRuntimeConfigModule && (config.plugins || []).length > 0,\n  );\n\n  // Generate virtual entry code that imports and bundles all routes\n  // This ensures all route handlers are captured in the bundle closure\n  const virtualEntryCode = generateVirtualEntryCode(\n    apiRoutes,\n    pageRoutes,\n    layoutRoutes,\n    routeSlots,\n    errorRoutes,\n    metadataImageRoutes,\n    applicationMetadataRoutes,\n    middlewareRoutes,\n    redirectRoutes,\n    configuredRewrites,\n    configuredHeaderRoutes,\n    openAPIReference,\n    notFoundPath,\n    instrumentationPath,\n    config,\n    configModulePath,\n    hasServerRuntimeIntegrations,\n    hasRuntimeIntegrationConfig,\n    hasConfiguredRuntimePlugins,\n    preset,\n    i18nCatalogs,\n    isolatedClientBoundaryModules,\n    hydrationPlanCache,\n  );\n\n  // Find a temporary file path for the virtual entry\n  // We'll use a plugin to intercept this\n  const virtualEntryId = \"\\0virtual:farm-ssr-entry\";\n  const useExternalMetadataImageRuntime = shouldUseExternalMetadataImageRuntime(\n    preset,\n    metadataImageRoutes.some((image) => image.sourceType === \"module\"),\n  );\n  const rendererOptionalExternals = isReactRenderer(config.renderer)\n    ? []\n    : [\n        \"react\",\n        \"react/jsx-runtime\",\n        \"react/jsx-dev-runtime\",\n        \"react-dom\",\n        \"react-dom/client\",\n        \"react-dom/server\",\n      ];\n\n  try {\n    await viteBuild({\n      root,\n      build: {\n        target: \"esnext\",\n        ssr: true,\n        write: false, // ⭐ Keep in memory\n        ssrEmitAssets: true,\n        assetsInlineLimit: 0,\n        minify: false, // Skip minification for SSR (faster build, Nitro will minify)\n        sourcemap: false, // Skip sourcemaps for faster SSR build\n        rollupOptions: {\n          input: virtualEntryId,\n          // Externalize native modules and Node.js built-ins\n          external: [\n            \"fsevents\",\n            \"sharp\",\n            ...rendererOptionalExternals,\n            ...(useExternalMetadataImageRuntime ? [\"@vercel/og\"] : []),\n            \"@prisma/client\",\n            \"@prisma/client/default\",\n            \"@prisma/client/default.js\",\n            \".prisma/client\",\n            \".prisma/client/default\",\n            /^\\.prisma\\//,\n            /\\.node$/,\n            /^node:/,\n          ],\n          // Optimize tree-shaking\n          treeshake: {\n            moduleSideEffects: false,\n          },\n        },\n      },\n      // Use esbuild for faster transforms\n      esbuild: {\n        target: \"node18\",\n        // Adapters can render provider scripts by serializing function source.\n        // keepNames injects helper calls into those functions; after Nitro\n        // minifies the server chunk the helper is no longer in script scope.\n        keepNames: !(config.docs?.enabled && config.docs.adapter?.server),\n        jsxDev: false,\n      },\n      // SSR configuration to externalize problematic modules\n      ssr: {\n        // Externalize native modules and build tools that can't be bundled\n        // These have native binaries that won't work in serverless environments\n        external: [\n          \"fsevents\",\n          \"sharp\",\n          ...rendererOptionalExternals,\n          ...(useExternalMetadataImageRuntime ? [\"@vercel/og\"] : []),\n          \"esbuild\",\n          \"lightningcss\",\n          \"rollup\",\n          \"@rollup/rollup-darwin-arm64\",\n          \"@rollup/rollup-darwin-x64\",\n          \"@rollup/rollup-linux-x64-gnu\",\n          \"@rollup/rollup-linux-x64-musl\",\n          \"@rollup/rollup-linux-arm64-gnu\",\n          \"@rollup/rollup-linux-arm64-musl\",\n          \"@rollup/rollup-win32-x64-msvc\",\n          \"@rollup/rollup-win32-arm64-msvc\",\n          \"@rollup/rollup-win32-ia32-msvc\",\n          \"vite\",\n          \"vite-rolldown\",\n          \"nitro\",\n          \"nitropack\",\n          \"@prisma/client\",\n          \"@prisma/client/default\",\n          \"@prisma/client/default.js\",\n          \".prisma/client\",\n          \".prisma/client/default\",\n        ],\n        // Node deployments must bundle application dependencies with Farm's\n        // React runtime. Leaving a React component package external can make it\n        // resolve a second React instance at runtime and break hooks during SSR.\n        // Native and build-only packages above remain explicitly external.\n        noExternal:\n          preset === \"cloudflare-module\"\n            ? [\n                \"@farm.js/core\",\n                \"@farm.js/core/image\",\n                \"better-call\",\n                ...(metadataImageRoutes.some((image) => image.sourceType === \"module\")\n                  ? [\"@vercel/og\"]\n                  : []),\n              ]\n            : true,\n      },\n      define: {\n        __FARM_API_BASE_URL__: JSON.stringify(config.api.baseURL),\n        __FARM_ENV__: JSON.stringify(config.env || { server: {}, public: {} }),\n        __FARM_PUBLIC_ENV__: JSON.stringify(config.env?.public || {}),\n      },\n      plugins: [\n        createFarmThemeCssPlugin(config.theme, config.basePath),\n        ...(tailwindVitePlugin ? [tailwindVitePlugin] : []),\n        ...(rendererVitePlugins as any[]),\n        ...(config.vite.plugins || []),\n        ...(!useExternalMetadataImageRuntime &&\n        metadataImageRoutes.some((image) => image.sourceType === \"module\")\n          ? [createMetadataImageWasmPlugin()]\n          : []),\n        {\n          name: \"farm-react-production-mode\",\n          enforce: \"pre\",\n          transform(code, id) {\n            const normalizedId = id.replace(/\\\\/g, \"/\");\n            const isReactRuntime =\n              normalizedId.includes(\"/node_modules/react/\") ||\n              normalizedId.includes(\"/node_modules/react-dom/\");\n            const nodeEnvExpression = [\"process\", \"env\", \"NODE_ENV\"].join(\".\");\n\n            if (!isReactRuntime || !code.includes(nodeEnvExpression)) return null;\n\n            return {\n              code: code.split(nodeEnvExpression).join('\"production\"'),\n              map: null,\n            };\n          },\n        },\n        farmPlugin({ ...config, isolatedClientBoundaryModules }, pluginManager),\n        farmEnvironmentFunctionsPlugin(),\n        {\n          name: \"farm-virtual-ssr-entry\",\n          resolveId(id) {\n            if (id === virtualEntryId || id === \"\\0virtual:farm-ssr-entry\") {\n              return virtualEntryId;\n            }\n            return null;\n          },\n          load(id) {\n            if (id === virtualEntryId) {\n              return virtualEntryCode;\n            }\n            return null;\n          },\n        },\n        {\n          name: \"capture-ssr-bundle\",\n          generateBundle(_options, bundle) {\n            ssrBundle = bundle;\n\n            // Find entry file\n            for (const [fileName, file] of Object.entries(bundle)) {\n              if (file.type === \"chunk\" && file.isEntry) {\n                ssrEntryFile = fileName;\n                break;\n              }\n            }\n\n            if (!ssrEntryFile) {\n              throw new Error(\"No entry point found in SSR bundle\");\n            }\n          },\n        },\n      ],\n      mode: \"production\",\n      css: postcssConfigDir\n        ? {\n            postcss: postcssConfigDir,\n          }\n        : undefined,\n      resolve: {\n        alias: createFarmSourceAlias(root, config.srcDir),\n        // Route modules and the renderer adapter must share one runtime instance.\n        dedupe: [...(config.renderer.dedupe || [])],\n      },\n    });\n  } finally {\n    if (postcssConfigDir) {\n      try {\n        await fs.rm(postcssConfigDir, { recursive: true, force: true });\n      } catch {\n        // Ignore cleanup errors.\n      }\n    }\n  }\n\n  return {\n    bundle: ssrBundle!,\n    entryFile: ssrEntryFile!,\n    configuredHeaderRoutes,\n  };\n}\n\n/**\n * Generate virtual entry code that bundles all routes\n * This creates managers at runtime from bundled code\n */\nexport function generateFarmDocsRuntimeConfigExpression(docs: ResolvedFarmConfig[\"docs\"]): string {\n  if (!docs.enabled) return \"null\";\n\n  const baseConfig = {\n    ...docs,\n    contentDir: undefined,\n    config: undefined,\n  };\n  const nestedConfig = {\n    ...docs.config,\n    contentDir: undefined,\n  };\n\n  return `farmDocsBundledContentDir\n  ? {\n      ...${JSON.stringify(baseConfig)},\n      contentDir: farmDocsBundledContentDir,\n      config: {\n        ...${JSON.stringify(nestedConfig)},\n        contentDir: farmDocsBundledContentDir,\n      },\n    }\n  : ${JSON.stringify(docs)}`;\n}\n\n/**\n * Quote a filesystem path for use as an import specifier in generated code.\n * Windows paths contain backslashes, which JavaScript string literals treat\n * as escape sequences (e.g. `\\f` in `E:\\farm`), producing specifiers the\n * bundler cannot resolve. Normalize to forward slashes and JSON-quote.\n */\nexport function toVirtualEntryImportSpecifier(modulePath: string): string {\n  return JSON.stringify(modulePath.replace(/\\\\/g, \"/\"));\n}\n\n/**\n * Runtime source that remounts the native `auth` integration in a built server.\n *\n * `resolveConfig` turns a top-level `auth` config into `integrations.auth`, but\n * the generated production entry never calls `resolveConfig`: it rebuilds its\n * integration map by re-evaluating the raw user config module, where auth only\n * exists as `auth: true`. Without this the auth routes are absent from every\n * production build and each one 404s while dev serves them.\n *\n * The import is literal so the bundler traces `@farm.js/auth` into the server\n * output, and both pieces are empty when auth is disabled so nothing is pulled\n * in for apps that do not use it.\n */\nexport function generateNativeAuthIntegrationSource(auth: ResolvedFarmConfig[\"auth\"] | undefined): {\n  importSource: string;\n  registerSource: string;\n} {\n  if (auth?.enabled !== true) {\n    return { importSource: \"\", registerSource: \"\" };\n  }\n\n  return {\n    importSource: `import { createFarmAuthIntegration as __farmCreateAuthIntegration } from \"@farm.js/auth/internal\";`,\n    // resolveConfig rejects configuring both `auth` and `integrations.auth`,\n    // so this never overwrites a user-supplied integration.\n    registerSource: `configuredIntegrations.auth = __farmCreateAuthIntegration(${JSON.stringify(auth)}, {\n  root: process.cwd(),\n  mode: \"production\",\n});`,\n  };\n}\n\nexport function generateConfiguredResponseHeadersRuntimeSource(): string {\n  return `\nfunction getConfiguredSetCookieHeaders(headers) {\n  const getSetCookie = headers.getSetCookie;\n  if (typeof getSetCookie === \"function\") return getSetCookie.call(headers);\n  const value = headers.get(\"set-cookie\");\n  return value ? [value] : [];\n}\n\nfunction applyConfiguredResponseHeaders(response, pathname) {\n  let headers;\n  for (const headerRoute of configuredHeaderRoutes) {\n    if (!matchRuntimePathPattern(headerRoute.source, pathname)) continue;\n    for (const header of headerRoute.headers) {\n      const currentHeaders = headers || response.headers;\n      const normalizedKey = header.key.toLowerCase();\n      if (normalizedKey === \"set-cookie\") {\n        if (getConfiguredSetCookieHeaders(currentHeaders).includes(header.value)) continue;\n        if (!headers) headers = new Headers(response.headers);\n        headers.append(\"Set-Cookie\", header.value);\n      } else {\n        const currentValue = currentHeaders.get(header.key);\n        if (currentValue === header.value) continue;\n        if (!headers) headers = new Headers(response.headers);\n        if (normalizedKey === \"link\") {\n          appendFarmLinkHeader(headers, header.value);\n        } else {\n          headers.set(header.key, header.value);\n        }\n      }\n    }\n  }\n\n  if (!headers) return response;\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n`.trim();\n}\n\nfunction generateVirtualEntryCode(\n  apiRoutes: Array<{ path: string; filePath: string; methods: string[]; pluginMethods?: string[] }>,\n  pageRoutes: UniversalPageRoute[],\n  layoutRoutes: Array<{ pattern: string; modulePath: string }>,\n  routeSlots: UniversalRouteSlot[],\n  errorRoutes: UniversalBoundaryRoute[],\n  metadataImageRoutes: UniversalMetadataImageRoute[],\n  applicationMetadataRoutes: UniversalApplicationMetadataRoute[],\n  middlewareRoutes: UniversalMiddlewareRoute[],\n  redirectRoutes: ProgrammaticRedirectRoute[],\n  configuredRewriteRoutes: RewriteConfig[],\n  configuredHeaderRoutes: UniversalConfiguredHeaderRoute[],\n  openAPIReference: { route: string; html: string; spec: unknown; specRoute: string | null } | null,\n  notFoundPath: string | null,\n  instrumentationPath: string | null,\n  config: ResolvedFarmConfig,\n  configModulePath: string | null,\n  hasServerRuntimeIntegrations: boolean,\n  hasRuntimeIntegrationConfig: boolean,\n  hasConfiguredRuntimePlugins: boolean,\n  preset: string,\n  i18nCatalogs: FarmI18nCatalogs,\n  isolatedClientBoundaryModules: ReadonlySet<string>,\n  hydrationPlanCache: Map<string, ClientModuleHydrationPlan>,\n): string {\n  const hasPluginRuntime = hasRuntimeIntegrationConfig || hasConfiguredRuntimePlugins;\n  const adapterOwnsDocsRuntime = Boolean(\n    isReactRenderer(config.renderer) &&\n    config.docs?.enabled &&\n    config.docs.adapter?.server &&\n    config.docs.adapter.react,\n  );\n  const hasIsolatedClientGraphRuntime =\n    isReactRenderer(config.renderer) && isolatedClientBoundaryModules.size > 0;\n  const rendererServerImports = isReactRenderer(config.renderer)\n    ? `import * as React from \"react\";\\nimport * as ReactDOMServer from \"react-dom/server\";${\n        hasIsolatedClientGraphRuntime\n          ? '\\nimport { wrapFarmIsolatedClientGraph } from \"@farm.js/core/internal/isolated-boundary\";'\n          : \"\"\n      }`\n    : `import React, * as ReactDOMServer from ${JSON.stringify(config.renderer.server)};`;\n  const routeClientGraphServerRuntime = hasIsolatedClientGraphRuntime\n    ? `function wrapFarmRouteClientGraph(element) {\n  return wrapFarmIsolatedClientGraph(React, element);\n}`\n    : `function wrapFarmRouteClientGraph(element) { return element; }`;\n  const hasGeneratedMetadataImages = metadataImageRoutes.some(\n    (image) => image.sourceType === \"module\",\n  );\n  const hasMiddlewareRuntime =\n    middlewareRoutes.length > 0 || hasFarmMiddlewareConfig(config.middleware);\n  const farmDocsFontAssets = config.docs?.enabled\n    ? toFarmDocsPublicFontAssets(resolveFarmDocsFontAssets(config.root))\n    : [];\n  const integrationProviders = getIntegrationProviders(config.integrations);\n  const renderedIntegrationProviders = integrationProviders.filter(\n    (provider) => provider.component || provider.type === \"clerk\",\n  );\n  if (renderedIntegrationProviders.length > 0 && !isReactRenderer(config.renderer)) {\n    throw new Error(\"Integration provider components currently require the React renderer.\");\n  }\n  const providerServerModules = generateFarmIntegrationProviderServerModules(\n    renderedIntegrationProviders,\n    config.root,\n  );\n  const resolvedIntegrationProviderFallback = Object.fromEntries(\n    Object.entries(config.integrations).flatMap(([name, integration]) => {\n      const configuredProviders = (integration as { providers?: unknown } | null)?.providers;\n      const providers = Array.isArray(configuredProviders) ? configuredProviders : [];\n      if (providers.some((provider) => typeof provider?.component === \"function\")) {\n        throw new Error(\n          `Integration provider components in production must use an importable component reference, for example component: { module: \"@/components/provider\" }.`,\n        );\n      }\n      return providers.length > 0 ? [[name, { providers }]] : [];\n    }),\n  );\n  const unsupportedIntegrationProvider = renderedIntegrationProviders.find(\n    (provider) => provider.supportsIsolatedHydration !== true,\n  );\n  const isolatedHydrationMode = resolveFarmIsolatedClientHydrationMode(\n    config.experimental?.isolatedClientHydration,\n    {\n      serverComponents: config.experimental?.serverComponents === true,\n      hasUnsupportedIntegrationProvider: Boolean(unsupportedIntegrationProvider),\n    },\n  );\n  const layoutAppliesToRoute = (layoutPattern: string, routePattern: string) =>\n    layoutPattern === \"/\" ||\n    routePattern === layoutPattern ||\n    routePattern.startsWith(`${layoutPattern}/`);\n  const layoutHydrationPlans = layoutRoutes.map((layout) => ({\n    ...layout,\n    hydration: getCachedClientModuleHydrationPlan(\n      layout.modulePath,\n      config.root,\n      isolatedHydrationMode,\n      hydrationPlanCache,\n    ),\n  }));\n  const pageHydrationPlans = new Map(\n    pageRoutes\n      .filter((route) => !isFarmMarkdownPageFile(route.modulePath))\n      .map((route) => [\n        route.modulePath,\n        getCachedClientModuleHydrationPlan(\n          route.modulePath,\n          config.root,\n          isolatedHydrationMode,\n          hydrationPlanCache,\n        ),\n      ]),\n  );\n\n  enforceFarmIsolatedHydrationRouteBudget(\n    layoutHydrationPlans.map((layout) => ({\n      pattern: layout.pattern,\n      depth: layout.pattern.split(\"/\").filter(Boolean).length,\n      metadata: layout.hydration,\n    })),\n    pageRoutes\n      .filter((route) => !isFarmMarkdownPageFile(route.modulePath))\n      .map((route) => ({\n        pattern: route.pattern,\n        depth: route.pattern.split(\"/\").filter(Boolean).length,\n        metadata: pageHydrationPlans.get(route.modulePath)!,\n      })),\n    layoutAppliesToRoute,\n  );\n  const providerServerImports = [\n    providerServerModules.hasClerkProvider\n      ? `import { ClerkProvider as FarmClerkProvider } from \"@clerk/react\";`\n      : \"\",\n    providerServerModules.imports,\n  ]\n    .filter(Boolean)\n    .join(\"\\n\");\n\n  // Generate imports for all API routes\n  const apiImports: string[] = [];\n  const apiRegistrations: string[] = [];\n\n  apiRoutes.forEach((route, index) => {\n    if (!route.filePath) return;\n    const varName = `apiRoute${index}`;\n    apiImports.push(\n      `import * as ${varName} from ${toVirtualEntryImportSpecifier(route.filePath)};`,\n    );\n    apiRegistrations.push(`\n  {\n    path: ${JSON.stringify(route.path)},\n    methods: ${JSON.stringify(route.methods.filter((method) => !route.pluginMethods?.includes(method)))},\n    endpoints: ${varName},\n  }`);\n  });\n\n  // Generate imports for all page routes\n  const pageImports: string[] = [];\n  const pageRegistrations: string[] = [];\n  const hasMarkdownPages = pageRoutes.some((route) => route.source !== undefined);\n  const orderedPageRoutes = pageRoutes\n    .map((route, index) => ({ route, index }))\n    .sort(\n      (left, right) =>\n        routePatternSpecificity(right.route.pattern) -\n          routePatternSpecificity(left.route.pattern) || left.index - right.index,\n    )\n    .map(({ route }) => route);\n\n  orderedPageRoutes.forEach((route, index) => {\n    const varName = `pageRoute${index}`;\n    if (isFarmMarkdownPageFile(route.modulePath)) {\n      pageRegistrations.push(`\n  {\n    pattern: ${JSON.stringify(route.pattern)},\n    module: createFarmMarkdownRouteModule({\n      source: ${JSON.stringify(route.source ?? \"\")},\n      filePath: ${JSON.stringify(route.modulePath)},\n      components: farmMdxComponents,\n      config: farmMdxConfig,\n    }),\n    markdownSource: {\n      source: ${JSON.stringify(route.source ?? \"\")},\n      filePath: ${JSON.stringify(route.markdownSourcePath ?? route.modulePath)},\n    },\n  }`);\n      return;\n    }\n\n    pageImports.push(\n      `import * as ${varName} from ${toVirtualEntryImportSpecifier(route.modulePath)};`,\n    );\n    const clientMetadata = pageHydrationPlans.get(route.modulePath)!;\n    pageRegistrations.push(`\n  {\n    pattern: ${JSON.stringify(route.pattern)},\n    module: ${varName},\n    shouldHydrate: ${JSON.stringify(clientMetadata.shouldHydrate)},\n    islandStrategy: ${JSON.stringify(clientMetadata.islandStrategy)},\n    ${\n      route.source !== undefined\n        ? `markdownSource: {\n      source: ${JSON.stringify(route.source)},\n      filePath: ${JSON.stringify(route.markdownSourcePath)},\n    },`\n        : \"\"\n    }\n  }`);\n  });\n\n  // Generate imports for all layouts\n  const layoutImports: string[] = [];\n  const layoutRegistrations: string[] = [];\n\n  layoutHydrationPlans.forEach((layout, index) => {\n    const varName = `layoutRoute${index}`;\n    const clientMetadata = layout.hydration;\n    layoutImports.push(\n      `import * as ${varName} from ${toVirtualEntryImportSpecifier(layout.modulePath)};`,\n    );\n    layoutRegistrations.push(`\n  {\n    pattern: ${JSON.stringify(layout.pattern)},\n    module: ${varName},\n    shouldHydrate: ${JSON.stringify(clientMetadata.shouldHydrate)},\n    islandStrategy: ${JSON.stringify(clientMetadata.islandStrategy)},\n  }`);\n  });\n\n  const routeSlotImports: string[] = [];\n  const routeSlotRegistrations: string[] = [];\n  routeSlots.forEach((slot, index) => {\n    const varName = `routeSlot${index}`;\n    routeSlotImports.push(\n      `import * as ${varName} from ${toVirtualEntryImportSpecifier(slot.modulePath)};`,\n    );\n    routeSlotRegistrations.push(`\n  {\n    name: ${JSON.stringify(slot.name)},\n    ownerPattern: ${JSON.stringify(slot.ownerPattern)},\n    pattern: ${JSON.stringify(slot.pattern)},\n    containerId: ${JSON.stringify(slot.containerId)},\n    interception: ${JSON.stringify(slot.interception)},\n    fallback: ${JSON.stringify(slot.fallback)},\n    module: ${varName},\n  }`);\n  });\n\n  // Generate imports for route-level error boundaries.\n  const errorImports: string[] = [];\n  const errorRegistrations: string[] = [];\n\n  errorRoutes.forEach((errorRoute, index) => {\n    const varName = `errorRoute${index}`;\n    errorImports.push(\n      `import * as ${varName} from ${toVirtualEntryImportSpecifier(errorRoute.modulePath)};`,\n    );\n    errorRegistrations.push(`\n  {\n    pattern: ${JSON.stringify(errorRoute.pattern)},\n    module: ${varName},\n  }`);\n  });\n\n  const metadataImageImports: string[] = [];\n  const metadataImageRegistrations: string[] = [];\n\n  metadataImageRoutes.forEach((image, index) => {\n    if (image.sourceType === \"module\" && image.modulePath) {\n      const varName = `metadataImageRoute${index}`;\n      metadataImageImports.push(\n        `import * as ${varName} from ${toVirtualEntryImportSpecifier(image.modulePath)};`,\n      );\n      metadataImageRegistrations.push(`\n  {\n    pattern: ${JSON.stringify(image.pattern)},\n    kind: ${JSON.stringify(image.kind)},\n    fileName: ${JSON.stringify(image.fileName)},\n    sourceType: \"module\",\n    module: ${varName},\n  }`);\n      return;\n    }\n\n    metadataImageRegistrations.push(`  ${JSON.stringify(image)}`);\n  });\n\n  const applicationMetadataImports: string[] = [];\n  const applicationMetadataRegistrations: string[] = [];\n  applicationMetadataRoutes.forEach((metadata, index) => {\n    const varName = `applicationMetadataRoute${index}`;\n    applicationMetadataImports.push(\n      `import * as ${varName} from ${toVirtualEntryImportSpecifier(metadata.modulePath)};`,\n    );\n    applicationMetadataRegistrations.push(`\n  {\n    pattern: ${JSON.stringify(metadata.pattern)},\n    kind: ${JSON.stringify(metadata.kind)},\n    outputName: ${JSON.stringify(metadata.outputName)},\n    module: ${varName},\n  }`);\n  });\n\n  // Generate imports for all app middleware files\n  const middlewareImports: string[] = [];\n  const middlewareRegistrations: string[] = [];\n\n  middlewareRoutes.forEach((middlewareRoute, index) => {\n    const varName = `fileMiddleware${index}`;\n    middlewareImports.push(\n      `import * as ${varName} from ${toVirtualEntryImportSpecifier(middlewareRoute.filePath)};`,\n    );\n    middlewareRegistrations.push(`\n  {\n    path: ${JSON.stringify(middlewareRoute.path)},\n    filePath: ${JSON.stringify(middlewareRoute.filePath)},\n    module: ${varName},\n  }`);\n  });\n\n  // Generate import for custom not-found page if exists\n  const notFoundImport = notFoundPath\n    ? `import * as CustomNotFound from ${toVirtualEntryImportSpecifier(notFoundPath)};`\n    : \"\";\n  const apiRouteHelpersImport =\n    apiRoutes.length > 0\n      ? `import { mergePluginAPIRoutes, getAllowedAPIRouteMethods, invokeAPIRouteEndpoint, matchAPIRouteAtBasePath, resolveAPIRouteEndpoint } from \"@farm.js/core/api/runtime\";`\n      : \"\";\n  const productionRuntimeImport = `import {\n  _runWithAfterRequest,\n  _runWithCurrentRequest,\n  _runWithAPIRequestRuntime,\n  _runWithMiddlewareContext,\n  _runWithMiddlewareData,\n  _setDefaultFarmThemeConfig,\n  addMetadataImageReference,\n  appendFarmRedirectQuery,\n  applyFarmBasePath,\n  applyFarmThemeDocument,\n  appendFarmLinkHeader,\n  applyProductionMiddlewareHeaders,\n  configureFarmCache,\n  configureFarmObservability,\n  createDefaultErrorMarkup,\n  createFarmInstrumentationLifecycle,\n  createFarmCacheKey,\n  createFarmMetadataRouteResponse,\n  createFarmThemeDocumentParts,\n  createFarmLocaleCookie,\n  createFarmProductionLifecycle,\n  createFarmNodeRequestAbortSignal,\n  createProductionMiddlewareRunner,\n  getTheme as getFarmTheme,\n  emitFarmEvent,\n  getFarmDataCache,\n  getFarmLocaleVaryHeaders,\n  getFarmRedirectError,\n  getDefaultErrorStatusText,\n  isFarmNotFoundError,\n  isFarmRedirectError,\n  localizeFarmHref,\n  localizeFarmPathname,\n  manageFarmDocumentPreloads,\n  manageFarmLinkHeaderPreloads,\n  mergeMetadata,\n  matchesFarmIfNoneMatch,\n  normalizeRevalidatePath,\n  reportFarmPreloadWarnings,\n  renderMetadataHead,\n  resolveFarmRouteContext,\n  resolveFarmTrailingSlashRedirect,\n  resolveDefaultErrorStatus,\n  resolveFarmInstrumentationRuntime,\n  runWithFarmRequestSpan,\n  searchParamsToObject,\n  setFarmBasePath,\n  setFarmTrailingSlashPreference,\n  stripFarmBasePath,\n  stripFarmLocaleFromPathname,\n  withFarmRouteContext,\n} from \"@farm.js/core/internal/production-runtime\";`;\n  const productionSiteTelemetryImport = config.telemetry\n    ? `import { createFarmProductionSiteReporter } from \"@farm.js/core/internal/product-telemetry-runtime\";`\n    : \"\";\n  const metadataImageRuntimeImport = hasGeneratedMetadataImages\n    ? `import { createFarmMetadataImageResponse } from \"@farm.js/core/internal/metadata-image-runtime\";`\n    : \"\";\n  const pluginRuntimeImport = hasPluginRuntime\n    ? `import { PluginManager } from \"@farm.js/core/plugin\";`\n    : \"\";\n  const i18nServerImport = config.i18n.enabled\n    ? `import { _runWithFarmI18nRequest, _setDefaultFarmI18nRuntime, createFarmI18nRuntime, getFarmI18nClientSnapshot } from \"@farm.js/core/i18n/server\";`\n    : \"\";\n  const docsHandlerImport = config.docs?.enabled\n    ? adapterOwnsDocsRuntime\n      ? `import { isFarmDocsAPIRequest } from \"@farm.js/core/docs\";\nimport { createFarmDocsRuntimeHandler as createFarmDocsAdapterRuntimeHandler } from ${JSON.stringify(config.docs.adapter!.server)};\nimport * as FarmDocsAdapterReact from ${JSON.stringify(config.docs.adapter!.react)};`\n      : `import { createFarmDocsAPIHandler, createFarmDocsHandler, isFarmDocsAPIRequest } from \"@farm.js/core/docs\";`\n    : \"\";\n  const docsFontImport = config.docs?.enabled\n    ? `import { resolveFarmLayoutFonts } from \"@farm.js/core/font\";`\n    : \"\";\n  const docsRuntimeImport = config.docs?.enabled\n    ? `import { existsSync as farmDocsExistsSync } from \"node:fs\";\nimport { dirname as farmDocsDirname, join as farmDocsJoin } from \"node:path\";\nimport { fileURLToPath as farmDocsFileURLToPath } from \"node:url\";`\n    : \"\";\n  const markdownHandlerImport = config.md?.enabled\n    ? `import { applyMarkdownNegotiationHeaders, createMarkdownMirrorResponse } from \"@farm.js/core/markdown\";`\n    : \"\";\n  const appMarkdownImport = hasMarkdownPages\n    ? `import { createFarmMarkdownRouteModule, createFarmMarkdownSourceResponse } from \"@farm.js/core/app-markdown\";`\n    : \"const createFarmMarkdownSourceResponse = null;\";\n  // Always available: agents can request Markdown on any route, so the\n  // Markdown error body is not gated on the app having Markdown page files.\n  const markdownErrorImport = `import { FARM_MARKDOWN_CONTENT_TYPE, createFarmMarkdownErrorBody, farmRequestWantsMarkdown } from \"@farm.js/core/app-markdown\";`;\n  const mdxComponentsPath =\n    typeof config.mdx?.components === \"string\"\n      ? path.isAbsolute(config.mdx.components)\n        ? config.mdx.components\n        : path.join(config.root, config.mdx.components)\n      : null;\n  const mdxComponentsImport = mdxComponentsPath\n    ? `import * as FarmMdxComponentsModule from ${toVirtualEntryImportSpecifier(mdxComponentsPath)};`\n    : \"\";\n  const layerConfigPaths = (config.layers || [])\n    .map((layer) => layer.configFile)\n    .filter((configFile): configFile is string => Boolean(configFile))\n    .filter((configFile) => configFile !== configModulePath);\n  const layerConfigImports = layerConfigPaths\n    .map(\n      (configFile, index) =>\n        `import * as FarmLayerConfigModule${index} from ${toVirtualEntryImportSpecifier(configFile)};`,\n    )\n    .join(\"\\n\");\n  const layerConfigValues = layerConfigPaths.map(\n    (_configFile, index) =>\n      `(FarmLayerConfigModule${index}.default || FarmLayerConfigModule${index})`,\n  );\n  const integrationRuntimeExports = Array.from(\n    new Set([\n      ...(hasServerRuntimeIntegrations\n        ? [\"dispatchIntegrationRequest\", \"matchIntegrationRoute\"]\n        : []),\n      ...(hasRuntimeIntegrationConfig\n        ? [\"getRegisteredIntegrationAPIManifest\", \"resolveIntegrationPlugins\"]\n        : []),\n    ]),\n  );\n  const integrationRuntimeImport = integrationRuntimeExports.length\n    ? `import { ${integrationRuntimeExports.join(\", \")} } from \"@farm.js/core/integrations\";`\n    : \"\";\n  const instrumentationImport = instrumentationPath\n    ? `import * as FarmInstrumentationModule from ${toVirtualEntryImportSpecifier(instrumentationPath)};`\n    : \"\";\n  const nativeAuth = generateNativeAuthIntegrationSource(config.auth);\n  const integrationImports = `\n${configModulePath ? `import * as FarmUserConfigModule from ${toVirtualEntryImportSpecifier(configModulePath)};` : \"\"}\n${layerConfigImports}\n${integrationRuntimeImport}\n${nativeAuth.importSource}\n`;\n  const imageRuntime = resolveImageRuntime(config, preset);\n  const imageRuntimeImport =\n    imageRuntime === \"none\"\n      ? \"\"\n      : `import { createCloudflareImageTransformer, createFarmImageHandler } from \"@farm.js/core/image/server\";`;\n  const imageNodeRuntimeImport =\n    imageRuntime === \"node\"\n      ? `import { createNodeImageFetcher, createNodeImageUrlValidator, createSharpImageTransformer } from \"@farm.js/core/image/sharp\";`\n      : \"\";\n  const apiHandlerCode =\n    apiRoutes.length > 0\n      ? `\nconst apiRouteMap = new Map(apiRoutes.map((route) => [route.path, route]));\n\nfunction matchLocalAPIRequest(request) {\n  return matchAPIRouteAtBasePath(\n    apiRouteMap,\n    new URL(request.url).pathname,\n    farmLocalAPIBasePath\n  );\n}\n\nasync function handleAPIRequest(request) {\n  const url = new URL(request.url);\n  const method = request.method.toUpperCase();\n  const match = matchLocalAPIRequest(request);\n\n  if (!match) {\n    return null;\n  }\n\n  const { route, params } = match;\n  const startedAt = Date.now();\n  emitFarmEvent({ type: \"route.matched\", pathname: url.pathname, route: route.path });\n  emitFarmEvent({\n    type: \"api.request.start\",\n    pathname: url.pathname,\n    route: route.path,\n    method,\n  });\n  const endpoint = resolveAPIRouteEndpoint(route, method);\n  if (!endpoint) {\n    const response = new Response(\n      JSON.stringify({ error: \"Method Not Allowed\" }),\n      {\n        status: 405,\n        headers: {\n          \"Allow\": getAllowedAPIRouteMethods(route).join(\", \"),\n          \"Content-Type\": \"application/json\",\n        },\n      }\n    );\n    emitFarmEvent({\n      type: \"api.request.complete\",\n      pathname: url.pathname,\n      route: route.path,\n      method,\n      status: response.status,\n      durationMs: Date.now() - startedAt,\n    });\n    return response;\n  }\n\n  try {\n    const response = await invokeAPIRouteEndpoint(\n      endpoint,\n      request,\n      params,\n      farmServerConfig.bodySizeLimit,\n    );\n    emitFarmEvent({\n      type: \"api.request.complete\",\n      pathname: url.pathname,\n      route: route.path,\n      method,\n      status: response.status,\n      durationMs: Date.now() - startedAt,\n    });\n    return response;\n  } catch (error) {\n    emitFarmEvent({\n      type: \"api.error\",\n      pathname: url.pathname,\n      route: route.path,\n      method,\n      durationMs: Date.now() - startedAt,\n      error,\n    });\n    console.error(\\`[API Error] \\${url.pathname}:\\`, error);\n    return new Response(\n      JSON.stringify({ error: \"Internal Server Error\" }),\n      { status: 500, headers: { \"Content-Type\": \"application/json\" } }\n    );\n  }\n}\n`\n      : `\nfunction matchLocalAPIRequest(_request) {\n  return null;\n}\n\nasync function handleAPIRequest(request) {\n  return null;\n}\n`;\n\n  return `\n// Farm.js SSR Entry - Generated at build time\n// All routes are bundled here, managers are created at runtime\n\n${apiImports.join(\"\\n\")}\n${pageImports.join(\"\\n\")}\n${layoutImports.join(\"\\n\")}\n${routeSlotImports.join(\"\\n\")}\n${errorImports.join(\"\\n\")}\n${metadataImageImports.join(\"\\n\")}\n${applicationMetadataImports.join(\"\\n\")}\n${middlewareImports.join(\"\\n\")}\n${notFoundImport}\n${apiRouteHelpersImport}\n${productionRuntimeImport}\n${productionSiteTelemetryImport}\n${metadataImageRuntimeImport}\n${pluginRuntimeImport}\n${i18nServerImport}\n${docsHandlerImport}\n${docsFontImport}\n${docsRuntimeImport}\n${markdownHandlerImport}\n${appMarkdownImport}\n${markdownErrorImport}\n${mdxComponentsImport}\n${integrationImports}\n${providerServerImports}\n${instrumentationImport}\n${imageRuntimeImport}\n${imageNodeRuntimeImport}\nimport { farmFontPreloadHeader } from \"virtual:farm-font-runtime\";\nimport { isFarmRouteActive } from \"@farm.js/core/router\";\n${rendererServerImports}\n\n${routeClientGraphServerRuntime}\n\nconst farmPreloadConfig = ${JSON.stringify(config.performance.preload)};\nconst farmProductionSiteTelemetry = ${\n    config.telemetry\n      ? `createFarmProductionSiteReporter({\n  renderer: ${JSON.stringify(config.renderer.name)},\n  deployTarget: ${JSON.stringify(config.deploy.target || \"custom\")},\n})`\n      : \"null\"\n  };\n\n// Custom 404 page component (if provided)\nconst hasCustomNotFound = ${notFoundPath ? \"true\" : \"false\"};\nconst CustomNotFoundComponent = ${notFoundPath ? \"CustomNotFound.default || CustomNotFound\" : \"null\"};\nconst farmUserConfig = ${\n    configModulePath ? \"(FarmUserConfigModule.default || FarmUserConfigModule)\" : \"null\"\n  };\nconst farmRuntimeConfigs = [${[...layerConfigValues, \"farmUserConfig\"].join(\", \")}].filter(Boolean);\nconst farmResolvedRuntimeConfig = Object.assign({}, ...farmRuntimeConfigs);\nsetFarmBasePath(${JSON.stringify(config.basePath)});\nsetFarmTrailingSlashPreference(${JSON.stringify(config.trailingSlash)});\nconst hasConfiguredRouteContext = typeof farmResolvedRuntimeConfig.context === \"function\";\nconst configuredIntegrations = ${JSON.stringify(resolvedIntegrationProviderFallback)};\nfor (const runtimeConfig of farmRuntimeConfigs) {\n  for (const [name, integration] of Object.entries(runtimeConfig.integrations || {})) {\n    const fallback = configuredIntegrations[name];\n    configuredIntegrations[name] =\n      fallback?.providers &&\n      integration &&\n      typeof integration === \"object\" &&\n      integration.providers === undefined\n        ? { ...integration, providers: fallback.providers }\n        : integration;\n  }\n}\n${nativeAuth.registerSource}\nconst farmIntegrationProviderModuleComponents = new Map([\n${providerServerModules.entries}\n]);\n\nfunction wrapWithFarmIntegrationProviders(element) {\n  const providers = Object.values(configuredIntegrations).flatMap(function(integration) {\n    return Array.isArray(integration?.providers) ? integration.providers : [];\n  });\n  let wrapped = element;\n  for (let index = providers.length - 1; index >= 0; index--) {\n    const provider = providers[index];\n    let Component = null;\n    if (typeof provider.component === \"function\") {\n      Component = provider.component;\n    } else if (provider.component?.module) {\n      const componentKey = provider.component.module + \"\\\\0\" + (provider.component.export || \"default\");\n      Component = farmIntegrationProviderModuleComponents.get(componentKey);\n    } else if (provider.type === \"clerk\") {\n      Component = ${providerServerModules.hasClerkProvider ? \"FarmClerkProvider\" : \"null\"};\n    }\n    if (!Component) {\n      if (!provider.component && provider.type !== \"clerk\") continue;\n      throw new Error(\"Integration provider \" + provider.name + \" did not export its configured component.\");\n    }\n    wrapped = React.createElement(Component, provider.props || {}, wrapped);\n  }\n  return wrapped;\n}\nconst serverRuntimeIntegrations = Object.fromEntries(\n  Object.entries(configuredIntegrations).filter(([, integration]) =>\n    integration && typeof integration === \"object\" && integration.serverRuntime !== false\n  ),\n);\nconst integrationRuntimeConfig = Object.assign({}, ...farmRuntimeConfigs, {\n  integrations: configuredIntegrations,\n});\nconst configuredPlugins = [\n  ${hasRuntimeIntegrationConfig ? \"...resolveIntegrationPlugins(serverRuntimeIntegrations),\" : \"\"}\n  ${\n    hasConfiguredRuntimePlugins\n      ? `...farmRuntimeConfigs.flatMap((runtimeConfig) =>\n    Array.isArray(runtimeConfig.plugins) ? runtimeConfig.plugins : [],\n  ),`\n      : \"\"\n  }\n];\nconst farmPluginRuntime = ${\n    hasPluginRuntime\n      ? `configuredPlugins.length > 0\n  ? (() => {\n      const manager = new PluginManager({\n        config: farmUserConfig || {},\n        isDev: false,\n        isProd: true,\n      });\n      manager.addPlugins(configuredPlugins);\n      return manager;\n    })()\n  : null`\n      : \"null\"\n  };\nconst hasFarmPluginHTMLTransforms = configuredPlugins.some(\n  (plugin) => plugin.render?.html || plugin.afterRender || plugin.transformHTML,\n);\nconst farmImageHandler = ${\n    imageRuntime === \"none\"\n      ? \"null\"\n      : imageRuntime === \"cloudflare\"\n        ? `createFarmImageHandler(${JSON.stringify(config.images)}, {\n  transform: createCloudflareImageTransformer(),\n  onError(error) { console.error(\"[Farm Image]\", error); },\n})`\n        : `createFarmImageHandler(${JSON.stringify(config.images)}, {\n  transform: createSharpImageTransformer(),\n  fetchRemote: createNodeImageFetcher(${JSON.stringify(config.images)}),\n  validateRemoteUrl: createNodeImageUrlValidator(${JSON.stringify(config.images)}),\n  onError(error) { console.error(\"[Farm Image]\", error); },\n})`\n  };\nconst farmMarkdownConfig = ${JSON.stringify(config.md)};\nconst farmMdxConfig = ${JSON.stringify({\n    ...config.mdx,\n    components: typeof config.mdx?.components === \"string\" ? config.mdx.components : undefined,\n  })};\nconst configuredFarmMdxComponents = farmUserConfig?.mdx?.components;\nconst farmMdxComponents = ${\n    mdxComponentsPath\n      ? `(FarmMdxComponentsModule.components || Reflect.get(FarmMdxComponentsModule, \"default\") || {})`\n      : `(configuredFarmMdxComponents && typeof configuredFarmMdxComponents === \"object\" ? configuredFarmMdxComponents : {})`\n  };\nconst farmObservabilityConfig = farmUserConfig?.observability ?? ${JSON.stringify(\n    config.observability ?? false,\n  )};\nconfigureFarmObservability(farmObservabilityConfig);\nconfigureFarmCache(farmResolvedRuntimeConfig.cache);\nconst farmI18nConfig = ${JSON.stringify(config.i18n)};\nconst farmServerConfig = ${JSON.stringify(config.server)};\nconst farmThemeConfig = ${JSON.stringify(config.theme)};\n_setDefaultFarmThemeConfig(farmThemeConfig);\nconst farmInstrumentationLifecycle = createFarmInstrumentationLifecycle(\n  ${instrumentationPath ? \"FarmInstrumentationModule\" : \"null\"},\n  {\n    root:\n      typeof globalThis.process?.cwd === \"function\" ? globalThis.process.cwd() : \".\",\n    mode: \"production\",\n    runtime: resolveFarmInstrumentationRuntime(${JSON.stringify(preset)}),\n  },\n);\nexport const farmProductionLifecycle = createFarmProductionLifecycle({\n  server: farmServerConfig,\n  start: async () => {\n    await farmInstrumentationLifecycle.start();\n    try {\n      await farmPluginRuntime?.startRuntime();\n    } catch (error) {\n      await farmInstrumentationLifecycle.shutdown();\n      throw error;\n    }\n  },\n  close: async (reason) => {\n    try {\n      await farmPluginRuntime?.closeRuntime(reason);\n    } finally {\n      await farmInstrumentationLifecycle.shutdown();\n    }\n  },\n});\nconst farmI18nRuntime = ${\n    config.i18n.enabled\n      ? `createFarmI18nRuntime(farmI18nConfig, ${JSON.stringify(i18nCatalogs)})`\n      : \"null\"\n  };\n${config.i18n.enabled ? \"_setDefaultFarmI18nRuntime(farmI18nRuntime);\" : \"\"}\nconst farmDocsBundledContentDir = ${\n    config.docs?.enabled\n      ? `(() => {\n  try {\n    const currentDir = farmDocsDirname(farmDocsFileURLToPath(import.meta.url));\n    const candidates = [\n      farmDocsJoin(currentDir, \"farm-docs-content\"),\n      farmDocsJoin(currentDir, \"..\", \"farm-docs-content\"),\n      farmDocsJoin(currentDir, \"..\", \"..\", \"farm-docs-content\"),\n    ];\n    return candidates.find((candidate) => farmDocsExistsSync(candidate)) || null;\n  } catch {\n    return null;\n  }\n})()`\n      : \"null\"\n  };\nconst farmDocsResolvedConfig = ${generateFarmDocsRuntimeConfigExpression(config.docs)};\nconst farmDocsRuntimeRoot = farmDocsBundledContentDir || ${JSON.stringify(config.root)};\nglobalThis.__FARM_DOCS_RUNTIME_CONFIG__ = {\n  root: farmDocsRuntimeRoot,\n  srcDir: ${JSON.stringify(config.srcDir)},\n  docs: farmDocsResolvedConfig,\n};\nconst farmDocsHandler = ${\n    config.docs?.enabled\n      ? adapterOwnsDocsRuntime\n        ? `createFarmDocsAdapterRuntimeHandler({\n  ...farmDocsResolvedConfig.config,\n  entry: farmDocsResolvedConfig.config?.entry || String(farmDocsResolvedConfig.entry || \"/docs\").replace(/^\\\\/+|\\\\/+$/g, \"\") || \"docs\",\n  docsPath: farmDocsResolvedConfig.entry,\n  contentDir: farmDocsResolvedConfig.contentDir || farmDocsResolvedConfig.config?.contentDir,\n}, {\n  rootDir: farmDocsRuntimeRoot,\n  clientEntry: \"/__farm_client_js_src__\",\n  stylesheets: [\"/farm-fonts.css\", \"/__farm_client_css_href__\"],\n  resolveLayoutFonts: (pathname) =>\n    resolveFarmLayoutFonts(\n      getApplicableLayouts(getFarmRoutePathname(pathname)).map((layout) => layout.module),\n    ),\n  loadReactModule: async () => FarmDocsAdapterReact,\n})`\n        : `createFarmDocsHandler(farmDocsResolvedConfig, {\n  root: farmDocsRuntimeRoot,\n  srcDir: ${JSON.stringify(config.srcDir)},\n  clientEntry: \"/__farm_client_js_src__\",\n  fontAssets: ${JSON.stringify(farmDocsFontAssets)},\n  resolveLayoutFonts: (pathname) =>\n    resolveFarmLayoutFonts(\n      getApplicableLayouts(getFarmRoutePathname(pathname)).map((layout) => layout.module),\n    ),\n  fontStylesheetHref: \"/farm-fonts.css\",\n  globalStylesheetHref: \"/assets/globals.css\",\n})`\n      : \"null\"\n  };\nconst farmDocsAPIHandler = ${\n    config.docs?.enabled\n      ? adapterOwnsDocsRuntime\n        ? \"null\"\n        : `createFarmDocsAPIHandler({ rootDir: farmDocsRuntimeRoot, srcDir: ${JSON.stringify(config.srcDir)}, docs: farmDocsResolvedConfig })`\n      : \"null\"\n  };\n\n// API routes bundled at build time\nconst apiRoutes = ${apiRoutes.length > 0 ? \"mergePluginAPIRoutes(\" : \"\"}[${apiRegistrations.join(\",\")}\n]${apiRoutes.length > 0 ? `, configuredPlugins, ${JSON.stringify(apiRoutes.map(({ path, methods }) => ({ path, methods })))})` : \"\"};\nconst farmLocalAPIBasePath = ${JSON.stringify(resolveFarmAPIServerBasePath(config.api))};\nconst farmOpenAPIReference = ${JSON.stringify(openAPIReference)};\n\nfunction isFarmLocalAPIPathname(pathname) {\n  return farmLocalAPIBasePath !== \"/\" &&\n    (pathname === farmLocalAPIBasePath ||\n      pathname.startsWith(farmLocalAPIBasePath + \"/\"));\n}\n\n// Page routes bundled at build time\nconst pageRoutes = [${pageRegistrations.join(\",\")}\n];\nconst exactPageRoutes = new Map();\nconst patternPageRoutes = [];\nfor (const route of pageRoutes) {\n  if (/[\\\\[\\\\]*:]/.test(route.pattern)) {\n    patternPageRoutes.push(route);\n  } else {\n    const exactPath = normalizeRuntimePath(route.pattern);\n    if (!exactPageRoutes.has(exactPath)) exactPageRoutes.set(exactPath, route);\n  }\n}\n\n// Layout routes bundled at build time (sorted by depth, root first)\nconst layoutRoutes = [${layoutRegistrations.join(\",\")}\n];\n\nconst routeSlots = [${routeSlotRegistrations.join(\",\")}\n];\n\n// Route-level error boundaries bundled at build time.\nconst errorRoutes = [${errorRegistrations.join(\",\")}\n];\n\n// Metadata image routes bundled at build time\nconst metadataImageRoutes = [${metadataImageRegistrations.join(\",\")}\n];\n\n// sitemap.ts, robots.ts, and manifest.ts routes bundled at build time\nconst applicationMetadataRoutes = [${applicationMetadataRegistrations.join(\",\")}\n];\n\n// Redirect routes bundled at build time\nconst redirectRoutes = ${JSON.stringify(redirectRoutes, null, 2)};\n\n// Legacy rewrites() entries resolved at build time for standalone parity.\nconst configuredRewriteRoutes = ${JSON.stringify(configuredRewriteRoutes, null, 2)};\n\n// Legacy headers() entries resolved at build time for standalone parity.\nconst configuredHeaderRoutes = ${JSON.stringify(configuredHeaderRoutes, null, 2)};\n\nfunction getFarmI18nSnapshot() {\n  return ${config.i18n.enabled ? \"getFarmI18nClientSnapshot()\" : \"undefined\"};\n}\n\nfunction getFarmRoutePathname(pathname) {\n  return farmI18nRuntime\n    ? stripFarmLocaleFromPathname(stripFarmBasePath(pathname), farmI18nConfig)\n    : stripFarmBasePath(pathname);\n}\n\nfunction serializeFarmInlineValue(value) {\n  return JSON.stringify(value)\n    .replace(/</g, \"\\\\\\\\u003c\")\n    .replace(/\\\\u2028/g, \"\\\\\\\\u2028\")\n    .replace(/\\\\u2029/g, \"\\\\\\\\u2029\");\n}\n\nfunction renderFarmClientBootstrapScript(canonicalPath, selectedRouteSlots, pageProps) {\n  const integrationManifest = ${\n    hasRuntimeIntegrationConfig ? \"getRegisteredIntegrationAPIManifest()\" : \"{}\"\n  };\n  const serializedRouteSlots = serializeFarmInlineValue(selectedRouteSlots || []);\n  const serializedPageProps = serializeFarmInlineValue(pageProps || {});\n  let source = 'window.__FARM_PROPS__=' + serializedPageProps +\n    ';window.__FARM_INTEGRATION_API_MANIFEST__=' +\n    serializeFarmInlineValue(integrationManifest) +\n    ';window.__FARM_ROUTE_SLOTS__=' + serializedRouteSlots + ';';\n  if (typeof canonicalPath === \"string\" && canonicalPath.startsWith(\"/\")) {\n    const serializedPath = serializeFarmInlineValue(canonicalPath);\n    source += 'if(location.pathname+location.search!==' + serializedPath + '){' +\n      'history.replaceState(Object.assign({},history.state||{},{path:' + serializedPath + '}),\"\",' +\n      serializedPath + ');}';\n  }\n  return '<script id=\"__farm_route_slots_data__\" type=\"application/json\">' +\n    serializedRouteSlots +\n    '</script><script>' + source + '</script>';\n}\n\nfunction renderFarmRendererHydrationScript() {\n  return typeof ReactDOMServer.generateHydrationScript === \"function\"\n    ? ReactDOMServer.generateHydrationScript()\n    : \"\";\n}\n\nfunction escapeFarmHtmlAttribute(value) {\n  return String(value)\n    .replace(/&/g, \"&amp;\")\n    .replace(/\"/g, \"&quot;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\");\n}\n\nasync function renderFarmElement(ReactDOMServer, element) {\n  const streamErrors = [];\n  const encoder = new TextEncoder();\n  const decoder = new TextDecoder();\n  const normalizeChunk = function(chunk) {\n    if (typeof chunk === \"string\") return encoder.encode(chunk);\n    if (chunk instanceof Uint8Array) return chunk;\n    return new Uint8Array(chunk);\n  };\n  const decodeChunks = function(chunks) {\n    let html = \"\";\n    for (const chunk of chunks) {\n      html += decoder.decode(chunk, { stream: true });\n    }\n    return html + decoder.decode();\n  };\n  const throwStreamError = function() {\n    if (streamErrors.length > 0) throw streamErrors[0];\n  };\n\n  if (typeof ReactDOMServer.renderToReadableStream === \"function\") {\n    const stream = await ReactDOMServer.renderToReadableStream(element, {\n      onError(error) {\n        // redirect()/notFound() are control flow, not render failures: the\n        // request handler must still receive them to map the response status,\n        // but they should not produce a misleading SSR failure log.\n        streamErrors.push(error);\n        if (isFarmRedirectError(error) || isFarmNotFoundError(error)) return;\n        console.error(\"[Farm SSR stream]\", error);\n      },\n    });\n    const reader = stream.getReader();\n    const firstResult = await reader.read();\n    if (firstResult.done) {\n      throwStreamError();\n      return { html: \"\", shellHtml: \"\", streamErrors };\n    }\n\n    const firstChunk = normalizeChunk(firstResult.value);\n    let allReady = false;\n    const allReadyPromise = stream.allReady;\n    if (allReadyPromise && typeof allReadyPromise.then === \"function\") {\n      Promise.resolve(allReadyPromise).then(\n        function() {\n          allReady = true;\n        },\n        function() {},\n      );\n      // React resolves allReady in the same turn for a synchronous tree. A\n      // suspended tree remains pending, so its already-produced shell can be\n      // returned without rendering the element a second time.\n      await Promise.resolve();\n    }\n\n    if (allReady) {\n      const chunks = [firstChunk];\n      while (true) {\n        const result = await reader.read();\n        if (result.done) break;\n        chunks.push(normalizeChunk(result.value));\n      }\n      throwStreamError();\n      const html = decodeChunks(chunks);\n      return { html, shellHtml: html, streamErrors };\n    }\n\n    let replayFirstChunk = true;\n    const replayStream = new ReadableStream({\n      pull(controller) {\n        if (replayFirstChunk) {\n          replayFirstChunk = false;\n          controller.enqueue(firstChunk);\n          return;\n        }\n        return reader.read().then(\n          function(result) {\n            if (result.done) controller.close();\n            else controller.enqueue(normalizeChunk(result.value));\n          },\n          function(error) {\n            controller.error(error);\n          },\n        );\n      },\n      cancel(reason) {\n        return reader.cancel(reason);\n      },\n    });\n    return {\n      stream: replayStream,\n      shellHtml: new TextDecoder().decode(firstChunk),\n      streamErrors,\n    };\n  }\n\n  if (typeof ReactDOMServer.renderToPipeableStream === \"function\") {\n    let pipeableStream;\n    let streamController;\n    let streamClosed = false;\n    let streamStarted = false;\n    let allReady = false;\n    let decisionState = \"pending\";\n    let settleDecision;\n    let rejectDecision;\n    let settleComplete;\n    let rejectComplete;\n    const chunks = [];\n    const decision = new Promise(function(resolve, reject) {\n      settleDecision = resolve;\n      rejectDecision = reject;\n    });\n    const complete = new Promise(function(resolve, reject) {\n      settleComplete = resolve;\n      rejectComplete = reject;\n    });\n    const stream = new ReadableStream({\n      start(controller) {\n        streamController = controller;\n      },\n      cancel(reason) {\n        if (pipeableStream && typeof pipeableStream.abort === \"function\") {\n          pipeableStream.abort(reason);\n        }\n      },\n    });\n    const fail = function(error) {\n      if (!streamClosed) {\n        streamClosed = true;\n        if (decisionState === \"stream\") streamController.error(error);\n      }\n      if (decisionState === \"complete\") rejectComplete(error);\n      else if (decisionState === \"pending\") rejectDecision(error);\n    };\n    const destination = {\n      write(chunk) {\n        if (streamClosed) return false;\n        const normalized = normalizeChunk(chunk);\n        if (streamStarted) streamController.enqueue(normalized);\n        else chunks.push(normalized);\n        return true;\n      },\n      end() {\n        if (streamClosed) return;\n        streamClosed = true;\n        if (streamStarted) streamController.close();\n        settleComplete();\n      },\n      on() {\n        return destination;\n      },\n      destroy(error) {\n        fail(error || new Error(\"React server render stream was destroyed\"));\n      },\n    };\n    pipeableStream = ReactDOMServer.renderToPipeableStream(element, {\n      onShellReady() {\n        try {\n          pipeableStream.pipe(destination);\n          queueMicrotask(function() {\n            decisionState = allReady ? \"complete\" : \"stream\";\n            settleDecision(decisionState);\n          });\n        } catch (error) {\n          fail(error);\n        }\n      },\n      onAllReady() {\n        allReady = true;\n      },\n      onShellError: fail,\n      onError(error) {\n        // Same control-flow guard as the readable-stream path above.\n        streamErrors.push(error);\n        if (isFarmRedirectError(error) || isFarmNotFoundError(error)) return;\n        console.error(\"[Farm SSR stream]\", error);\n      },\n    });\n\n    if ((await decision) === \"complete\") {\n      await complete;\n      throwStreamError();\n      const html = decodeChunks(chunks);\n      return { html, shellHtml: html, streamErrors };\n    }\n\n    streamStarted = true;\n    for (const chunk of chunks) streamController.enqueue(chunk);\n    if (streamClosed) streamController.close();\n    return {\n      stream,\n      shellHtml: chunks.length > 0 ? new TextDecoder().decode(chunks[0]) : \"\",\n      streamErrors,\n    };\n  }\n\n  if (ReactDOMServer.renderToStringWithHead) {\n    const rendered = await ReactDOMServer.renderToStringWithHead(element);\n    return {\n      html: rendered.html,\n      head: rendered.head || \"\",\n      shellHtml: rendered.html,\n      streamErrors,\n    };\n  }\n  const html = await ReactDOMServer.renderToString(element);\n  return { html, head: \"\", shellHtml: html, streamErrors };\n}\n\nasync function renderFarmElementToString(ReactDOMServer, element) {\n  const rendered = await renderFarmElement(ReactDOMServer, element);\n  if (rendered.html !== undefined) return rendered.html;\n  const html = await new Response(rendered.stream).text();\n  if (rendered.streamErrors.length > 0) throw rendered.streamErrors[0];\n  return html;\n}\n\nfunction createFarmDocumentStream(contentStream, prefix, suffix, onComplete) {\n  const encoder = new TextEncoder();\n  const reader = contentStream.getReader();\n  return new ReadableStream({\n    start(controller) {\n      controller.enqueue(encoder.encode(prefix));\n    },\n    async pull(controller) {\n      try {\n        const result = await reader.read();\n        if (result.done) {\n          controller.enqueue(encoder.encode(suffix));\n          if (onComplete) onComplete();\n          controller.close();\n          return;\n        }\n        controller.enqueue(result.value);\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    cancel(reason) {\n      return reader.cancel(reason);\n    },\n  });\n}\n\nfunction stripFarmDocumentWrappers(markup) {\n  let output = markup.replace(/^\\\\s+/, \"\");\n  const wrapper = /^<div\\\\b[^>]*style=[\"']display\\\\s*:\\\\s*contents[\"'][^>]*>/i;\n  let match;\n  while ((match = wrapper.exec(output))) {\n    output = output.slice(match[0].length).replace(/^\\\\s+/, \"\");\n  }\n  return output;\n}\n\nfunction opensFarmFullDocument(markup) {\n  const inner = stripFarmDocumentWrappers(markup);\n  return /^<!doctype/i.test(inner) || /^<html[\\\\s>]/i.test(inner);\n}\n\nfunction extractFarmFullDocument(markup) {\n  if (!opensFarmFullDocument(markup)) return null;\n  const start = markup.search(/<!doctype|<html[\\\\s>]/i);\n  const closeIndex = markup.toLowerCase().lastIndexOf(\"</html>\");\n  if (start < 0 || closeIndex < 0) return null;\n  return markup.slice(start, closeIndex + \"</html>\".length);\n}\n\nfunction ensureFarmDocumentHead(markup) {\n  if (/<head[\\\\s>]/i.test(markup)) return markup;\n  return markup.replace(/<html([^>]*)>/i, function(_match, attributes) {\n    return \"<html\" + attributes + \"><head></head>\";\n  });\n}\n\nfunction createFarmErrorDocument(html, title) {\n  const escapedTitle = escapeFarmHtmlAttribute(title || \"Application Error\");\n  const fullDocument = extractFarmFullDocument(html);\n  const hasFullDocument = fullDocument !== null;\n\n  if (!hasFullDocument) {\n    return '<!DOCTYPE html>\\\\n<html lang=\"en\">\\\\n<head>\\\\n' +\n      '  <meta charset=\"utf-8\">\\\\n' +\n      '  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\\\\n' +\n      '  <link rel=\"icon\" href=\"data:,\">\\\\n' +\n      '  <title>' + escapedTitle + '</title>\\\\n' +\n      '  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">\\\\n' +\n      renderFarmRendererHydrationScript() + '\\\\n' +\n      '</head>\\\\n<body>\\\\n' +\n      '  <div id=\"root\">' + html + '</div>\\\\n' +\n      '  ' + renderFarmClientBootstrapScript() + '\\\\n' +\n      '  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\\\\n' +\n      '</body>\\\\n</html>';\n  }\n\n  let fullHtml = ensureFarmDocumentHead(fullDocument);\n  if (!/\\\\sid=[\"']root[\"']/.test(fullHtml)) {\n    fullHtml = fullHtml\n      .replace(/<body([^>]*)>/i, '<body$1><div id=\"root\">')\n      .replace(/<\\\\/body>/i, '</div></body>');\n  }\n  fullHtml = fullHtml\n    .replace(/<head([^>]*)>/i, '<head$1>\\\\n  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">')\n    // Function replacements: dynamic markup may contain $-sequences ($&, $', $$)\n    // that a string replacement would expand, corrupting the document.\n    .replace(/<\\\\/head>/i, function() { return renderFarmRendererHydrationScript() + '\\\\n</head>'; })\n    .replace(/<head([^>]*)>([\\\\s\\\\S]*?)<\\\\/head>/i, function(match, attrs, headContent) {\n      return headContent.includes(\"<title\")\n        ? match\n        : '<head' + attrs + '>' + headContent + '\\\\n  <title>' + escapedTitle + '</title>\\\\n</head>';\n    })\n    .replace(\n      /<\\\\/body>/i,\n      function() {\n        return '  ' + renderFarmClientBootstrapScript() + '\\\\n' +\n          '  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\\\\n</body>';\n      },\n    );\n  return fullHtml.trim().startsWith(\"<!DOCTYPE\")\n    ? fullHtml\n    : \"<!DOCTYPE html>\\\\n\" + fullHtml;\n}\n\nfunction renderFarmI18nAlternateLinks(requestPath, snapshot) {\n  if (!snapshot || snapshot.routing === \"none\") return \"\";\n  const url = new URL(requestPath, \"http://farm.local\");\n  const routePathname = stripFarmLocaleFromPathname(url.pathname, snapshot);\n  const links = snapshot.locales.map(function(locale) {\n    const href = localizeFarmPathname(routePathname, locale, snapshot);\n    return '<link rel=\"alternate\" hreflang=\"' + escapeFarmHtmlAttribute(locale) +\n      '\" href=\"' + escapeFarmHtmlAttribute(href) + '\">';\n  });\n  links.push(\n    '<link rel=\"alternate\" hreflang=\"x-default\" href=\"' +\n      escapeFarmHtmlAttribute(\n        localizeFarmPathname(routePathname, snapshot.defaultLocale, snapshot)\n      ) +\n      '\">'\n  );\n  return links.join(\"\");\n}\n\nfunction applyFarmI18nDocument(html, requestPath, snapshot) {\n  if (!snapshot) return html;\n  const locale = escapeFarmHtmlAttribute(snapshot.locale);\n  const direction = escapeFarmHtmlAttribute(snapshot.direction);\n  let nextHtml = html.replace(/<html([^>]*)>/i, function(_match, attributes) {\n    const cleaned = attributes.replace(\n      /\\\\s+(?:lang|dir)=(?:\"[^\"]*\"|'[^']*'|[^\\\\s>]+)/gi,\n      \"\"\n    );\n    return '<html' + cleaned + ' lang=\"' + locale + '\" dir=\"' + direction + '\">';\n  });\n  const runtimeMarkup =\n    renderFarmI18nAlternateLinks(requestPath, snapshot) +\n    '<script>window.__FARM_I18N__ = ' + serializeFarmInlineValue(snapshot) + ';</script>';\n  nextHtml = nextHtml.replace(/<head([^>]*)>/i, function(_match, attributes) {\n    // Function replacement: runtimeMarkup may contain $-sequences ($&, $', $$).\n    return '<head' + attributes + '>' + runtimeMarkup;\n  });\n  return nextHtml;\n}\n\nfunction appendFarmVary(headers, value) {\n  const existing = headers.get(\"Vary\");\n  const values = new Set(\n    (existing ? existing.split(\",\") : []).map(function(entry) { return entry.trim(); }).filter(Boolean)\n  );\n  values.add(value);\n  headers.set(\"Vary\", Array.from(values).join(\", \"));\n}\n\nfunction applyFarmI18nResponse(response, resolution) {\n  if (!farmI18nRuntime || !resolution) return response;\n  const headers = new Headers(response.headers);\n  if (resolution.persist) {\n    headers.append(\"Set-Cookie\", createFarmLocaleCookie(resolution.locale, farmI18nConfig));\n  }\n  const varyHeaders = getFarmLocaleVaryHeaders(farmI18nConfig, resolution);\n  for (const header of varyHeaders) appendFarmVary(headers, header);\n  if (varyHeaders.length > 0) {\n    headers.set(\"Cache-Control\", \"private, no-store\");\n  }\n  return new Response(response.body, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nfunction hasOnlyValidFarmLocaleCookie(cookieHeader) {\n  if (!farmI18nRuntime || !cookieHeader) return false;\n  const parts = cookieHeader.split(\";\");\n  if (parts.length !== 1) return false;\n\n  const cookie = parts[0].trim();\n  const separator = cookie.indexOf(\"=\");\n  if (separator <= 0) return false;\n\n  let name;\n  let value;\n  try {\n    name = decodeURIComponent(cookie.slice(0, separator).trim());\n    value = decodeURIComponent(cookie.slice(separator + 1).trim());\n  } catch {\n    return false;\n  }\n\n  return (\n    name === farmI18nConfig.cookie.name &&\n    farmI18nConfig.locales.includes(value)\n  );\n}\n\nfunction hasPrivateFarmRequestHeaders(request, farmLocaleResolution) {\n  if (request.headers.get(\"authorization\")) return true;\n  const cookieHeader = request.headers.get(\"cookie\");\n  if (!cookieHeader) return false;\n\n  return !(\n    farmLocaleResolution?.source === \"url\" &&\n    hasOnlyValidFarmLocaleCookie(cookieHeader)\n  );\n}\n\n${generateRuntimePathMatcherSource()}\n\nfunction getMatchingErrorBoundary(pathname) {\n  const pathSegments = splitRuntimePath(pathname);\n  let bestMatch = null;\n\n  for (const errorRoute of errorRoutes) {\n    const patternDepth = splitRuntimePath(errorRoute.pattern).length;\n    if (patternDepth > pathSegments.length) continue;\n    const candidatePath = patternDepth === 0\n      ? \"/\"\n      : \"/\" + pathSegments.slice(0, patternDepth).join(\"/\");\n    const params = matchRuntimePathPattern(errorRoute.pattern, candidatePath);\n    if (params === null) continue;\n\n    if (!bestMatch || patternDepth > bestMatch.depth) {\n      bestMatch = { route: errorRoute, params, depth: patternDepth };\n    }\n  }\n\n  return bestMatch;\n}\n\nfunction getMatchingMetadataImage(pathname, kind) {\n  const pathSegments = splitRuntimePath(pathname);\n  let bestMatch = null;\n\n  for (const image of metadataImageRoutes) {\n    if (image.kind !== kind) continue;\n    const patternDepth = splitRuntimePath(image.pattern).length;\n    if (patternDepth > pathSegments.length) continue;\n\n    const pagePath = patternDepth === 0\n      ? \"/\"\n      : \"/\" + pathSegments.slice(0, patternDepth).join(\"/\");\n    const params = matchRuntimePathPattern(image.pattern, pagePath);\n    if (params === null) continue;\n\n    if (!bestMatch || patternDepth > bestMatch.depth) {\n      bestMatch = { image, params, pagePath, depth: patternDepth };\n    }\n  }\n\n  return bestMatch;\n}\n\nfunction matchMetadataImageRequest(pathname) {\n  const normalizedPath = normalizeRuntimePath(pathname);\n  let kind;\n  let fileName;\n\n  if (normalizedPath === \"/opengraph-image\" || normalizedPath.endsWith(\"/opengraph-image\")) {\n    kind = \"opengraph\";\n    fileName = \"opengraph-image\";\n  } else if (normalizedPath === \"/twitter-image\" || normalizedPath.endsWith(\"/twitter-image\")) {\n    kind = \"twitter\";\n    fileName = \"twitter-image\";\n  } else {\n    return null;\n  }\n\n  const pagePath = normalizedPath.slice(0, -fileName.length - 1) || \"/\";\n  for (const image of metadataImageRoutes) {\n    if (image.kind !== kind) continue;\n    const params = matchRuntimePathPattern(image.pattern, pagePath);\n    if (params !== null) return { image, params, pagePath };\n  }\n\n  return null;\n}\n\nfunction createMetadataImageReference(match, locale) {\n  const image = match.image;\n  const metadata = image.sourceType === \"static\" ? image.staticInfo : image.module;\n  const basePath = match.pagePath === \"/\" ? \"\" : match.pagePath;\n  const version = image.sourceType === \"static\" ? \"?v=\" + image.staticInfo.hash : \"\";\n  const href = basePath + \"/\" + image.fileName + version;\n  const localizedHref = locale ? localizeFarmHref(href, locale, farmI18nConfig) : href;\n\n  return {\n    kind: image.kind,\n    href: applyFarmBasePath(localizedHref),\n    width: metadata?.width ?? metadata?.size?.width,\n    height: metadata?.height ?? metadata?.size?.height,\n    alt: metadata?.alt,\n    contentType: metadata?.contentType,\n  };\n}\n\nfunction decodeMetadataImage(data) {\n  const binary = atob(data);\n  const bytes = new Uint8Array(binary.length);\n  for (let index = 0; index < binary.length; index++) {\n    bytes[index] = binary.charCodeAt(index);\n  }\n  return bytes;\n}\n\nasync function handleMetadataImageRequest(request, routePathname) {\n  const url = new URL(request.url);\n  const match = matchMetadataImageRequest(routePathname || url.pathname);\n  if (!match) return null;\n\n  const method = request.method.toUpperCase();\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    return new Response(null, { status: 405, headers: { Allow: \"GET, HEAD\" } });\n  }\n\n  const image = match.image;\n  if (image.sourceType === \"static\") {\n    const etag = '\"' + image.staticInfo.hash + '\"';\n    const isVersioned = url.searchParams.get(\"v\") === image.staticInfo.hash;\n    const headers = new Headers({\n      \"Content-Type\": image.staticInfo.contentType,\n      \"Content-Length\": String(image.staticInfo.byteLength),\n      \"Cache-Control\": isVersioned\n        ? \"public, max-age=31536000, immutable\"\n        : \"public, max-age=0, must-revalidate\",\n      \"ETag\": etag,\n      \"X-Content-Type-Options\": \"nosniff\",\n    });\n\n    if (matchesFarmIfNoneMatch(request.headers.get(\"if-none-match\"), etag)) {\n      return new Response(null, { status: 304, headers });\n    }\n\n    if (!image.bytes) image.bytes = decodeMetadataImage(image.data);\n    return new Response(method === \"HEAD\" ? null : image.bytes, { status: 200, headers });\n  }\n\n  try {\n    const imageModule = image.module;\n    if (!imageModule?.default) {\n      throw new Error(\"Metadata image module does not export a default component or handler\");\n    }\n\n    const searchParams = searchParamsToObject(url.searchParams);\n    const props = {\n      params: match.params,\n      searchParams: Promise.resolve(searchParams),\n      path: match.pagePath,\n    };\n    const value = typeof imageModule.default === \"function\"\n      ? await imageModule.default(props)\n      : imageModule.default;\n\n    ${\n      hasGeneratedMetadataImages\n        ? `return createFarmMetadataImageResponse(value, imageModule, {\n      method,\n      ifNoneMatch: request.headers.get(\"if-none-match\"),\n    });`\n        : 'throw new Error(\"Generated metadata image runtime is unavailable\");'\n    }\n  } catch (error) {\n    console.error(\"Metadata image render failed:\", error);\n    return new Response(\"Internal Server Error\", {\n      status: 500,\n      headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n    });\n  }\n}\n\nfunction matchApplicationMetadataRouteRequest(pathname) {\n  const normalizedPath = normalizeRuntimePath(pathname);\n  for (const metadata of applicationMetadataRoutes) {\n    const suffix = \"/\" + metadata.outputName;\n    if (normalizedPath !== suffix && !normalizedPath.endsWith(suffix)) continue;\n    const routePath = normalizedPath.slice(0, -suffix.length) || \"/\";\n    const params = matchRuntimePathPattern(metadata.pattern, routePath);\n    if (params !== null) return { metadata, params, routePath };\n  }\n  return null;\n}\n\nfunction getMatchingApplicationMetadataRoute(pathname, kind) {\n  const normalizedPath = normalizeRuntimePath(pathname);\n  const pathSegments = splitRuntimePath(normalizedPath);\n  let bestMatch = null;\n\n  for (const metadata of applicationMetadataRoutes) {\n    if (metadata.kind !== kind) continue;\n    const patternDepth = splitRuntimePath(metadata.pattern).length;\n    if (patternDepth > pathSegments.length) continue;\n    const routePath = patternDepth === 0\n      ? \"/\"\n      : \"/\" + pathSegments.slice(0, patternDepth).join(\"/\");\n    const params = matchRuntimePathPattern(metadata.pattern, routePath);\n    if (params === null) continue;\n    if (!bestMatch || patternDepth > bestMatch.depth) {\n      bestMatch = { metadata, params, routePath, depth: patternDepth };\n    }\n  }\n\n  return bestMatch;\n}\n\nfunction createApplicationMetadataHref(match, locale) {\n  const basePath = match.routePath === \"/\" ? \"\" : match.routePath;\n  const href = basePath + \"/\" + match.metadata.outputName;\n  const localizedHref = locale ? localizeFarmHref(href, locale, farmI18nConfig) : href;\n  return applyFarmBasePath(localizedHref);\n}\n\nasync function handleApplicationMetadataRouteRequest(request, routePathname) {\n  const url = new URL(request.url);\n  const match = matchApplicationMetadataRouteRequest(routePathname || url.pathname);\n  if (!match) return null;\n\n  const method = request.method.toUpperCase();\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    return new Response(null, { status: 405, headers: { Allow: \"GET, HEAD\" } });\n  }\n\n  try {\n    const routeModule = match.metadata.module;\n    if (routeModule?.default === undefined) {\n      throw new Error(\"Metadata route module does not export a default value or handler\");\n    }\n    const value = typeof routeModule.default === \"function\"\n      ? await routeModule.default({\n          request,\n          params: match.params,\n          searchParams: url.searchParams,\n          path: match.routePath,\n        })\n      : routeModule.default;\n    return createFarmMetadataRouteResponse(match.metadata.kind, value, routeModule, { method });\n  } catch (error) {\n    console.error(\"Metadata route render failed:\", error);\n    return new Response(\"Internal Server Error\", {\n      status: 500,\n      headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n    });\n  }\n}\n\n${generateRedirectInterpolationSource()}\n\nfunction matchRedirectRoute(pathname, locale, search) {\n  for (const redirect of redirectRoutes) {\n    const params = matchRuntimePathPattern(redirect.source, pathname);\n    if (!params) continue;\n    const destination = interpolateRedirectDestination(redirect.destination, params);\n    const localizedDestination =\n      locale && destination.startsWith(\"/\") && !destination.startsWith(\"//\")\n        ? localizeFarmHref(destination, locale, farmI18nConfig)\n        : destination;\n    return {\n      destination: appendFarmRedirectQuery(localizedDestination, search),\n      statusCode: redirect.statusCode ?? (redirect.permanent ? 308 : 307),\n    };\n  }\n  return null;\n}\n\nfunction matchRewriteRoute(pathname, locale) {\n  for (const rewrite of configuredRewriteRoutes) {\n    const params = matchRuntimePathPattern(rewrite.source, pathname);\n    if (!params) continue;\n    const destination = interpolateRedirectDestination(rewrite.destination, params);\n    return locale && destination.startsWith(\"/\") && !destination.startsWith(\"//\")\n      ? localizeFarmHref(destination, locale, farmI18nConfig)\n      : destination;\n  }\n  return null;\n}\n\nfunction createRewrittenRequest(request, destination) {\n  const sourceUrl = new URL(request.url);\n  const destinationUrl = new URL(destination, sourceUrl);\n  if (!destinationUrl.search && sourceUrl.search) {\n    destinationUrl.search = sourceUrl.search;\n  }\n  return new Request(destinationUrl, request);\n}\n\n${generateConfiguredResponseHeadersRuntimeSource()}\n\n// App middleware files bundled at build time (sorted by depth, root first)\nconst fileMiddlewareModules = [${middlewareRegistrations.join(\",\")}\n];\n\nconst farmMiddlewareRunner = ${\n    hasMiddlewareRuntime\n      ? `createProductionMiddlewareRunner({\n  config: farmUserConfig?.middleware,\n  modules: fileMiddlewareModules,\n  i18n: farmI18nConfig,\n  server: farmServerConfig,\n})`\n      : \"null\"\n  };\n\n${apiHandlerCode}\n\nfunction matchLocalIntegrationRequest(request) {\n  ${\n    hasServerRuntimeIntegrations\n      ? `return matchIntegrationRoute(serverRuntimeIntegrations, {\n    pathname: new URL(request.url).pathname,\n    method: request.method,\n  });`\n      : \"return null;\"\n  }\n}\n\nasync function handleIntegrationRequest(request) {\n  const matchedIntegrationRoute = matchLocalIntegrationRequest(request);\n  if (!matchedIntegrationRoute) {\n    return null;\n  }\n\n  ${\n    hasServerRuntimeIntegrations\n      ? `\n  return dispatchIntegrationRequest(\n    {\n      integration: matchedIntegrationRoute.integration,\n      config: integrationRuntimeConfig,\n      isDev: false,\n      isProd: true,\n    },\n    request,\n  );`\n      : \"return null;\"\n  }\n}\n\n/**\n * Match URL to page route pattern\n */\nfunction matchPageRoute(pathname) {\n  const exactRoute = exactPageRoutes.get(normalizeRuntimePath(pathname));\n  if (exactRoute) return { route: exactRoute, params: {} };\n\n  for (const route of patternPageRoutes) {\n    const params = matchRuntimePathPattern(route.pattern, pathname);\n    if (params !== null) return { route, params };\n  }\n  return null;\n}\n\nfunction matchesRoutePrefix(pathname, pattern) {\n  return pattern === \"/\" ||\n    isFarmRouteActive(pattern, normalizeRuntimePath(pathname), { exact: false });\n}\n\nfunction routeSlotSpecificity(slot) {\n  return slot.pattern.split(\"/\").reduce(function(score, segment) {\n    if (!segment) return score;\n    // Optional catch-alls rank below their parent path (mirrors routeSpecificity).\n    if (segment.startsWith(\"[[...\")) return score - 1;\n    if (segment.startsWith(\"[...\")) return score + 2;\n    if (segment.startsWith(\"[\")) return score + 3;\n    return score + 10;\n  }, 0);\n}\n\nfunction matchRouteSlots(pathname, interceptFrom) {\n  const groups = new Map();\n  for (const slot of routeSlots) {\n    if (!matchesRoutePrefix(pathname, slot.ownerPattern)) continue;\n    const key = slot.ownerPattern + \":\" + slot.name;\n    const entries = groups.get(key) || [];\n    entries.push(slot);\n    groups.set(key, entries);\n  }\n\n  const normalizedFrom =\n    typeof interceptFrom === \"string\" && interceptFrom.startsWith(\"/\")\n      ? new URL(interceptFrom, \"http://farm.local\").pathname\n      : null;\n  const matches = [];\n\n  for (const entries of groups.values()) {\n    const candidates = entries\n      .filter(function(entry) { return !entry.fallback; })\n      .filter(function(entry) {\n        return !entry.interception ||\n          (normalizedFrom && matchesRoutePrefix(normalizedFrom, entry.ownerPattern));\n      })\n      .map(function(entry) {\n        return {\n          entry: entry,\n          params: matchRuntimePathPattern(entry.pattern, pathname),\n        };\n      })\n      .filter(function(candidate) { return candidate.params !== null; })\n      .sort(function(left, right) {\n        if (left.entry.interception !== right.entry.interception) {\n          return left.entry.interception ? -1 : 1;\n        }\n        return routeSlotSpecificity(right.entry) - routeSlotSpecificity(left.entry);\n      });\n\n    if (candidates[0]) {\n      matches.push({ ...candidates[0].entry, params: candidates[0].params });\n      continue;\n    }\n\n    const fallback = entries.find(function(entry) { return entry.fallback; });\n    if (fallback) matches.push({ ...fallback, params: {} });\n  }\n\n  return matches.sort(function(left, right) {\n    const ownerDepth =\n      left.ownerPattern.split(\"/\").filter(Boolean).length -\n      right.ownerPattern.split(\"/\").filter(Boolean).length;\n    return ownerDepth || left.name.localeCompare(right.name);\n  });\n}\n\nfunction hasLocalRequestRoute(request, routePathname) {\n  const pathname = new URL(request.url).pathname;\n  if (\n    farmOpenAPIReference &&\n    normalizeRuntimePath(pathname) === normalizeRuntimePath(farmOpenAPIReference.route)\n  ) {\n    return true;\n  }\n  if (matchLocalAPIRequest(request) || matchLocalIntegrationRequest(request)) {\n    return true;\n  }\n  if (\n    matchPageRoute(routePathname) ||\n    matchMetadataImageRequest(routePathname) ||\n    matchApplicationMetadataRouteRequest(routePathname)\n  ) {\n    return true;\n  }\n  if (${imageRuntime === \"none\" ? \"false\" : `pathname === ${JSON.stringify(config.images.path)}`}) {\n    return true;\n  }\n  ${\n    config.docs?.enabled\n      ? `const docsPath = normalizeRuntimePath(farmDocsResolvedConfig?.entry || \"/docs\");\n  if (\n    isFarmDocsAPIRequest(pathname) ||\n    docsPath === \"/\" ||\n    pathname === docsPath ||\n    pathname.startsWith(docsPath + \"/\")\n  ) {\n    return true;\n  }`\n      : \"\"\n  }\n  return false;\n}\n\nfunction getFarmPluginRequestOptions(request) {\n  const url = new URL(request.url);\n  const pathname = url.pathname;\n  const routePathname = getFarmRoutePathname(pathname);\n  const route = { pathname };\n  if (\n    farmOpenAPIReference &&\n    normalizeRuntimePath(pathname) === normalizeRuntimePath(farmOpenAPIReference.route)\n  ) {\n    return {\n      kind: \"docs\",\n      route: { ...route, pattern: normalizeRuntimePath(farmOpenAPIReference.route) },\n    };\n  }\n  const isDocsAPIRequest = ${config.docs?.enabled ? \"isFarmDocsAPIRequest(pathname)\" : \"false\"};\n  const integrationMatch = ${\n    hasServerRuntimeIntegrations\n      ? `matchIntegrationRoute(serverRuntimeIntegrations, {\n    pathname,\n    method: request.method,\n  })`\n      : \"null\"\n  };\n\n  if (integrationMatch) {\n    return {\n      kind: \"integration\",\n      route: {\n        ...route,\n        pattern: integrationMatch.route.path,\n        params: integrationMatch.params,\n      },\n    };\n  }\n\n  const docsPath = normalizeRuntimePath(farmDocsResolvedConfig?.entry || \"/docs\");\n  if (\n    isDocsAPIRequest ||\n    (farmDocsHandler && (pathname === docsPath || pathname.startsWith(docsPath + \"/\")))\n  ) {\n    return { kind: \"docs\", route: { ...route, pattern: docsPath } };\n  }\n\n  const apiMatch = ${apiRoutes.length > 0 ? \"matchLocalAPIRequest(request)\" : \"null\"};\n  if (apiMatch) {\n    return {\n      kind: \"api\",\n      route: { ...route, pattern: apiMatch.route.path, params: apiMatch.params },\n    };\n  }\n\n  const metadataImageMatch = matchMetadataImageRequest(routePathname);\n  if (metadataImageMatch) {\n    return {\n      kind: \"asset\",\n      route: {\n        ...route,\n        pattern: metadataImageMatch.image.pattern,\n        params: metadataImageMatch.params,\n      },\n    };\n  }\n\n  const applicationMetadataMatch = matchApplicationMetadataRouteRequest(routePathname);\n  if (applicationMetadataMatch) {\n    return {\n      kind: \"asset\",\n      route: {\n        ...route,\n        pattern: applicationMetadataMatch.metadata.pattern,\n        params: applicationMetadataMatch.params,\n      },\n    };\n  }\n\n  const pageMatch = matchPageRoute(routePathname);\n  if (pageMatch) {\n    return {\n      kind: \"page\",\n      route: {\n        ...route,\n        pattern: pageMatch.route.pattern,\n        params: pageMatch.params,\n      },\n    };\n  }\n\n  if (isFarmLocalAPIPathname(pathname)) {\n    return { kind: \"api\", route };\n  }\n\n  if (request.method === \"GET\" || request.method === \"HEAD\") {\n    return { kind: \"page\", route };\n  }\n\n  return { kind: \"request\", route };\n}\n\n/**\n * Get applicable layouts for a page path (from root to most specific)\n */\nfunction getApplicableLayouts(pathname) {\n  const applicable = [];\n  const normalizedPath = pathname.replace(/\\\\/$/, '') || '/';\n  \n  for (const layout of layoutRoutes) {\n    // Root layout (/) applies to everything\n    // Other layouts apply to their path and sub-paths\n    if (layout.pattern === '/' || isFarmRouteActive(layout.pattern, normalizedPath, { exact: false })) {\n      applicable.push(layout);\n    }\n  }\n  \n  // Sort by depth (root first, then nested)\n  applicable.sort((a, b) => {\n    const depthA = a.pattern.split('/').filter(Boolean).length;\n    const depthB = b.pattern.split('/').filter(Boolean).length;\n    return depthA - depthB;\n  });\n  \n  return applicable;\n}\n\n${\n  config.docs?.enabled\n    ? `async function wrapFarmDocsResponseWithLayouts(request, response) {\n  if (request.method === \"HEAD\") return response;\n  if (response.headers.get(\"x-farm-docs-adapter\")) return response;\n\n  const pathname = getFarmRoutePathname(new URL(request.url).pathname);\n  const applicableLayouts = getApplicableLayouts(pathname);\n  if (!applicableLayouts.some((layout) => layout.shouldHydrate === true)) {\n    return response;\n  }\n\n  const source = await response.text();\n  const bodyMatch = source.match(/<body([^>]*)>([\\\\s\\\\S]*?)<\\\\/body>/i);\n  if (!bodyMatch) {\n    return new Response(source, {\n      status: response.status,\n      statusText: response.statusText,\n      headers: response.headers,\n    });\n  }\n\n  const matchedRoute = matchPageRoute(pathname);\n  const params = matchedRoute?.params || {};\n  const hydrationStrategies = applicableLayouts.flatMap((layout) =>\n    layout.shouldHydrate && layout.islandStrategy ? [layout.islandStrategy] : [],\n  );\n  const islandStrategy = hydrationStrategies.every(\n    (strategy) => strategy === hydrationStrategies[0],\n  )\n    ? (hydrationStrategies[0] || \"load\")\n    : \"load\";\n  let wrappedElement = React.createElement(\"div\", {\n    id: \"__farm_page__\",\n    \"data-farm-client\": \"false\",\n    \"data-farm-layout-client\": \"true\",\n    \"data-farm-island\": \"page\",\n    \"data-farm-island-strategy\": islandStrategy,\n    dangerouslySetInnerHTML: { __html: bodyMatch[2] },\n  });\n\n  for (let index = applicableLayouts.length - 1; index >= 0; index--) {\n    const LayoutComponent = applicableLayouts[index].module.default;\n    if (LayoutComponent) {\n      wrappedElement = React.createElement(LayoutComponent, {\n        children: wrappedElement,\n        params,\n      });\n    }\n  }\n\n  const renderedRoot = await renderFarmElement(\n    ReactDOMServer,\n    React.createElement(\n      \"div\",\n      { id: \"root\" },\n      wrapFarmRouteClientGraph(wrapWithFarmIntegrationProviders(wrappedElement)),\n    ),\n  );\n  let rootMarkup = renderedRoot.html;\n  if (rootMarkup === undefined) {\n    rootMarkup = await new Response(renderedRoot.stream).text();\n    if (renderedRoot.streamErrors.length > 0) throw renderedRoot.streamErrors[0];\n  }\n  let html = source.replace(\n    bodyMatch[0],\n    // Function replacement: rendered markup may contain $-sequences ($&, $', $$).\n    function() { return \"<body\" + bodyMatch[1] + \">\" + rootMarkup + \"</body>\"; },\n  );\n  if (renderedRoot.head) {\n    // Renderer-emitted head markup (e.g. <svelte:head>). First <title> wins,\n    // so the prebuilt shell's fallback title yields when the renderer\n    // supplies one; explicit titles are left in place.\n    if (/<title[\\\\s>]/i.test(renderedRoot.head)) {\n      html = html.replace(/<title>Farm\\\\.js App<[/]title>/i, \"\");\n    }\n    html = html.replace(/<[/]head>/i, function() { return renderedRoot.head + \"\\\\n</head>\"; });\n  }\n  if (!html.includes('href=\"/__farm_client_css_href__\"')) {\n    const clientStylesheet = '  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">\\\\n';\n    const firstStyleIndex = html.search(/<style(?:\\\\s|>)/i);\n    html =\n      firstStyleIndex >= 0\n        ? html.slice(0, firstStyleIndex) + clientStylesheet + html.slice(firstStyleIndex)\n        : html.replace(/<[/]head>/i, clientStylesheet + \"</head>\");\n  }\n  if (!html.includes('id=\"__farm_route_slots_data__\"')) {\n    html = html.replace(/<[/]body>/i, function() { return renderFarmClientBootstrapScript() + \"\\\\n</body>\"; });\n  }\n  if (!html.includes('src=\"/__farm_client_js_src__\"')) {\n    html = html.replace(\n      /<[/]body>/i,\n      '  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\\\\n</body>',\n    );\n  }\n  if (!html.includes('window._$HY')) {\n    html = html.replace(/<[/]head>/i, function() { return renderFarmRendererHydrationScript() + \"\\\\n</head>\"; });\n  }\n  const headers = new Headers(response.headers);\n  headers.delete(\"content-length\");\n  headers.delete(\"etag\");\n  return new Response(html, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}`\n    : \"\"\n}\n\nconst pprShellCache = getFarmDataCache();\nconst experimentalPPREnabled = ${JSON.stringify(config.experimental?.ppr === true)};\n\nfunction resolvePPRConfig(routeModule) {\n  if (!experimentalPPREnabled || !routeModule || routeModule.dynamic === \"force-dynamic\") {\n    return { enabled: false };\n  }\n\n  if (routeModule.dynamic === \"force-static\" || routeModule.dynamic === \"error\") {\n    return { enabled: false };\n  }\n\n  const enabled = routeModule.ppr === true || routeModule.experimental_ppr === true;\n  const revalidate =\n    typeof routeModule.revalidate === \"number\" && routeModule.revalidate > 0\n      ? routeModule.revalidate\n      : undefined;\n\n  return { enabled, revalidate };\n}\n\nfunction getPPRShellBypassReason(request, middlewareData, middlewareContext) {\n  const method = request.method.toUpperCase();\n  if (method !== \"GET\" && method !== \"HEAD\") return \"method\";\n  if (request.headers.get(\"cookie\")) return \"cookie\";\n  if (request.headers.get(\"authorization\")) return \"authorization\";\n  if (request.headers.get(\"x-farm-intercept-from\")) return \"route-interception\";\n  if (request.headers.get(\"x-farm-ppr-refresh\")) return \"refresh\";\n  if (hasConfiguredRouteContext) return \"route-context\";\n  if (middlewareData?.size) return \"middleware-data\";\n  if (middlewareContext?.size) return \"middleware-context\";\n  return undefined;\n}\n\nfunction getPPRShellCacheKey(url, locale) {\n  return createFarmCacheKey([\n    \"ppr\",\n    locale || \"\",\n    normalizeRevalidatePath(url.pathname),\n    url.search,\n  ]);\n}\n\nfunction getPPRHeaders(status, config) {\n  const headers = {\n    \"X-Farm-PPR\": status,\n  };\n\n  if (status === \"bypass\") {\n    headers[\"Cache-Control\"] = \"private, no-store\";\n    return headers;\n  }\n\n  if (typeof config.revalidate === \"number\" && config.revalidate > 0) {\n    headers[\"Cache-Control\"] = \\`s-maxage=\\${config.revalidate}, stale-while-revalidate\\`;\n  }\n\n  return headers;\n}\n\nfunction getRouteSharedCacheControl(routeModule, pprCanCache) {\n  if (!routeModule || routeModule.dynamic === \"force-dynamic\") {\n    return null;\n  }\n\n  const isStaticRoute =\n    routeModule.ssg === true ||\n    routeModule.dynamic === \"force-static\" ||\n    routeModule.dynamic === \"error\";\n  if (!isStaticRoute && !pprCanCache) {\n    return null;\n  }\n\n  const revalidate =\n    typeof routeModule.revalidate === \"number\" && routeModule.revalidate > 0\n      ? routeModule.revalidate\n      : 60;\n  return \"public, s-maxage=\" + revalidate + \", stale-while-revalidate=300\";\n}\n\nasync function getCachedPPRShell(cacheKey) {\n  const entry = await pprShellCache.getEntryAsync(cacheKey);\n  if (!entry) {\n    return null;\n  }\n\n  return entry.value.html;\n}\n\n/**\n * Main request handler - created at runtime with bundled routes\n */\nasync function handleFarmRequest(request) {\n  const response = await ${\n    config.i18n.enabled\n      ? `_runWithFarmI18nRequest(\n    farmI18nRuntime,\n    request,\n    async function(farmLocaleResolution) {\n      if (\n        farmLocaleResolution.redirect &&\n        (request.method === \"GET\" || request.method === \"HEAD\")\n      ) {\n        return applyFarmI18nResponse(\n          new Response(null, {\n            status: 307,\n            headers: { Location: farmLocaleResolution.redirect },\n          }),\n          farmLocaleResolution\n        );\n      }\n      const response = await handleFarmRequestInContext(request, farmLocaleResolution);\n      return applyFarmI18nResponse(response, farmLocaleResolution);\n    },\n    { redirect: !isFarmLocalAPIPathname(new URL(request.url).pathname) }\n  )`\n      : \"handleFarmRequestInContext(request, null)\"\n  };\n  ${\n    config.md?.enabled\n      ? `const pathname = getFarmRoutePathname(new URL(request.url).pathname);\n  if (matchPageRoute(pathname)) {\n    return applyMarkdownNegotiationHeaders(response, {\n      config: farmMarkdownConfig,\n      pathname,\n    });\n  }`\n      : \"\"\n  }\n  return response;\n}\n\nasync function handleFarmRequestInContext(\n  request,\n  farmLocaleResolution,\n  configuredRewriteApplied = false,\n  requestStartTime = Date.now(),\n) {\n  let url = new URL(request.url);\n  let pathname = url.pathname;\n  let routePathname = getFarmRoutePathname(pathname);\n\n  // Redirects have precedence over local routes. Configured rewrites use\n  // after-files semantics so emitted page, API, integration, docs, image, and\n  // metadata routes keep their normal method/status handling. Internal rewrite\n  // targets re-enter this handler so middleware and request-local state observe\n  // the rewritten URL; external destinations are proxied transparently.\n  if (!configuredRewriteApplied) {\n    const redirectMatch = matchRedirectRoute(\n      routePathname,\n      farmLocaleResolution?.locale,\n      url.search,\n    );\n    if (redirectMatch) {\n      return new Response(\"Redirecting to \" + redirectMatch.destination, {\n        status: redirectMatch.statusCode,\n        headers: { Location: redirectMatch.destination },\n      });\n    }\n\n    if (\n      configuredRewriteRoutes.length > 0 &&\n      !hasLocalRequestRoute(request, routePathname)\n    ) {\n      const rewriteDestination = matchRewriteRoute(\n        routePathname,\n        farmLocaleResolution?.locale,\n      );\n      if (rewriteDestination) {\n        const rewrittenRequest = createRewrittenRequest(request, rewriteDestination);\n        if (new URL(rewrittenRequest.url).origin !== url.origin) {\n          return globalThis.fetch(rewrittenRequest);\n        }\n        return _runWithCurrentRequest(rewrittenRequest, () =>\n          handleFarmRequestInContext(\n            rewrittenRequest,\n            farmLocaleResolution,\n            true,\n            requestStartTime,\n          )\n        );\n      }\n    }\n  }\n\n  if (farmImageHandler && pathname === ${JSON.stringify(config.images.path)}) {\n    const imageResponse = await farmImageHandler(request);\n    if (imageResponse) {\n      return imageResponse;\n    }\n  }\n\n  ${\n    hasServerRuntimeIntegrations\n      ? `\n  const integrationResponse = await handleIntegrationRequest(request.clone());\n  if (integrationResponse) {\n    return integrationResponse;\n  }\n  `\n      : \"\"\n  }\n\n  ${\n    hasMiddlewareRuntime\n      ? `\n  const requestBeforeMiddleware = request;\n  const middlewareResult = await farmMiddlewareRunner(request);\n  if (middlewareResult.response) {\n    return middlewareResult.response;\n  }\n  request = middlewareResult.request;\n  const middlewareData = middlewareResult.data;\n  const middlewareContext = middlewareResult.context;\n  const middlewareHeaders = middlewareResult.headers;\n  url = new URL(request.url);\n  pathname = url.pathname;\n  routePathname = getFarmRoutePathname(pathname);\n\n  // Middleware may replace the Request when it rewrites a URL. Re-enter the\n  // request store so pages, layouts, and route context observe that rewritten\n  // request instead of the original outer-handler value.\n  const runResolvedRequest = async () => {\n  `\n      : `\n  const middlewareData = undefined;\n  const middlewareContext = undefined;\n  const middlewareHeaders = undefined;\n  `\n  }\n\n  ${\n    config.docs?.enabled\n      ? `\n  // Docs responses are served after app middleware so route guards and\n  // middleware headers apply to the docs engine like any other page content.\n  if (farmDocsHandler) {\n    const docsResponse = await farmDocsHandler(request.clone());\n    if (docsResponse) {\n      if (!docsResponse.headers.get(\"content-type\")?.toLowerCase().includes(\"text/html\")) {\n        return applyProductionMiddlewareHeaders(docsResponse, middlewareHeaders);\n      }\n      const wrappedDocsResponse = await wrapFarmDocsResponseWithLayouts(\n        request,\n        docsResponse,\n      );\n      const docsHeaders = new Headers(wrappedDocsResponse.headers);\n      docsHeaders.set(\"x-farm-preload-buffered\", \"1\");\n      return applyProductionMiddlewareHeaders(new Response(wrappedDocsResponse.body, {\n        status: wrappedDocsResponse.status,\n        statusText: wrappedDocsResponse.statusText,\n        headers: docsHeaders,\n      }), middlewareHeaders);\n    }\n  }\n  `\n      : \"\"\n  }\n\n  ${\n    hasMarkdownPages\n      ? `\n  // The raw markdown source of a page route is the page's content in another\n  // representation; middleware guarding the route must run before serving it.\n  const markdownSourceResponse = await createFarmMarkdownSourceResponse?.({\n    request: request.clone(),\n    config: farmMdxConfig,\n    resolveSource: (targetPathname) => {\n      const match = matchPageRoute(getFarmRoutePathname(targetPathname));\n      return match?.route?.markdownSource || null;\n    },\n  });\n  if (markdownSourceResponse) {\n    return applyProductionMiddlewareHeaders(markdownSourceResponse, middlewareHeaders);\n  }\n  `\n      : \"\"\n  }\n\n  ${\n    config.md?.enabled\n      ? `\n  if (farmMarkdownConfig?.enabled) {\n    const markdownResponse = await createMarkdownMirrorResponse({\n      request: request.clone(),\n      config: farmMarkdownConfig,\n      routeExists: (targetPathname) =>\n        Boolean(matchPageRoute(getFarmRoutePathname(targetPathname))),\n      renderPage: (targetRequest) => handleFarmRequest(targetRequest),\n    });\n    if (markdownResponse) {\n      return applyProductionMiddlewareHeaders(markdownResponse, middlewareHeaders);\n    }\n  }\n  `\n      : \"\"\n  }\n\n  ${\n    apiRoutes.length > 0\n      ? `\n  const apiResponse = await handleAPIRequest(request.clone());\n  if (apiResponse) {\n    return applyProductionMiddlewareHeaders(apiResponse, middlewareHeaders);\n  }\n  `\n      : \"\"\n  }\n\n  if (\n    farmOpenAPIReference &&\n    farmOpenAPIReference.specRoute &&\n    normalizeRuntimePath(pathname) === normalizeRuntimePath(farmOpenAPIReference.specRoute)\n  ) {\n    const method = request.method.toUpperCase();\n    const specResponse = method === \"GET\" || method === \"HEAD\"\n      ? new Response(method === \"HEAD\" ? null : JSON.stringify(farmOpenAPIReference.spec), {\n          status: 200,\n          headers: {\n            \"Content-Type\": \"application/json; charset=utf-8\",\n            \"Cache-Control\": \"public, max-age=0, must-revalidate\",\n            \"X-Content-Type-Options\": \"nosniff\",\n          },\n        })\n      : new Response(\"Method Not Allowed\", {\n          status: 405,\n          headers: {\n            \"Allow\": \"GET, HEAD\",\n            \"Content-Type\": \"text/plain; charset=utf-8\",\n          },\n        });\n    return applyProductionMiddlewareHeaders(specResponse, middlewareHeaders);\n  }\n\n  if (\n    farmOpenAPIReference &&\n    normalizeRuntimePath(pathname) === normalizeRuntimePath(farmOpenAPIReference.route)\n  ) {\n    const method = request.method.toUpperCase();\n    const response = method === \"GET\" || method === \"HEAD\"\n      ? new Response(method === \"HEAD\" ? null : farmOpenAPIReference.html, {\n          status: 200,\n          headers: {\n            \"Content-Type\": \"text/html; charset=utf-8\",\n            \"Cache-Control\": \"public, max-age=0, must-revalidate\",\n            \"X-Content-Type-Options\": \"nosniff\",\n          },\n        })\n      : new Response(\"Method Not Allowed\", {\n          status: 405,\n          headers: {\n            \"Allow\": \"GET, HEAD\",\n            \"Content-Type\": \"text/plain; charset=utf-8\",\n          },\n        });\n    return applyProductionMiddlewareHeaders(response, middlewareHeaders);\n  }\n\n  ${\n    metadataImageRoutes.length > 0\n      ? `\n  const metadataImageResponse = await handleMetadataImageRequest(\n    request.clone(),\n    routePathname\n  );\n  if (metadataImageResponse) {\n    return applyProductionMiddlewareHeaders(metadataImageResponse, middlewareHeaders);\n  }\n  `\n      : \"\"\n  }\n\n  ${\n    applicationMetadataRoutes.length > 0\n      ? `\n  const applicationMetadataResponse = await handleApplicationMetadataRouteRequest(\n    request.clone(),\n    routePathname\n  );\n  if (applicationMetadataResponse) {\n    return applyProductionMiddlewareHeaders(applicationMetadataResponse, middlewareHeaders);\n  }\n  `\n      : \"\"\n  }\n\n  ${\n    config.docs?.enabled\n      ? `if (farmDocsAPIHandler && isFarmDocsAPIRequest(pathname)) {\n    const docsAPIResponse = await farmDocsAPIHandler(request.clone());\n    if (docsAPIResponse) {\n      return applyProductionMiddlewareHeaders(docsAPIResponse, middlewareHeaders);\n    }\n  }`\n      : \"\"\n  }\n\n  // Preserve the explicit JSON 404 for misses below the configured local API path.\n  if (isFarmLocalAPIPathname(pathname)) {\n    return applyProductionMiddlewareHeaders(new Response(\n      JSON.stringify({ error: \"API route not found\", pathname }),\n      { status: 404, headers: { \"Content-Type\": \"application/json\" } }\n    ), middlewareHeaders);\n  }\n\n  // Handle page routes (SSR)\n  emitFarmEvent({ type: \"render.start\", route: pathname, pathname });\n  const matchedRoute = matchPageRoute(routePathname);\n  if (matchedRoute) {\n    const trailingSlashLocation = resolveFarmTrailingSlashRedirect(\n      url,\n      ${JSON.stringify(config.trailingSlash)}\n    );\n    if (trailingSlashLocation) {\n      return applyProductionMiddlewareHeaders(\n        new Response(null, {\n          status: 308,\n          headers: { Location: trailingSlashLocation },\n        }),\n        middlewareHeaders\n      );\n    }\n    const { route, params } = matchedRoute;\n    emitFarmEvent({ type: \"route.matched\", pathname, route: route.pattern, params });\n    \n    try {\n      const pprConfig = resolvePPRConfig(route.module);\n      const pprBypassReason = pprConfig.enabled\n        ? getPPRShellBypassReason(request, middlewareData, middlewareContext)\n        : undefined;\n      let pprCanCache = pprConfig.enabled && !pprBypassReason;\n      const pprCacheKey = pprCanCache\n        ? getPPRShellCacheKey(url, farmLocaleResolution?.locale)\n        : null;\n      if (pprConfig.enabled && pprBypassReason) {\n        emitFarmEvent({ type: \"ppr.shell.bypass\", route: pathname, reason: pprBypassReason });\n        emitFarmEvent({ type: \"cache.bypass\", route: pathname, reason: pprBypassReason });\n        if (pprBypassReason === \"refresh\") {\n          emitFarmEvent({ type: \"ppr.refresh.start\", route: pathname });\n        }\n      }\n      if (pprCacheKey) {\n        const cachedPPRShell = await getCachedPPRShell(pprCacheKey);\n        if (cachedPPRShell) {\n          emitFarmEvent({ type: \"ppr.shell.hit\", route: pathname, key: pprCacheKey });\n          emitFarmEvent({\n            type: \"render.complete\",\n            route: pathname,\n            pathname,\n            status: 200,\n            durationMs: Date.now() - requestStartTime,\n          });\n          return applyProductionMiddlewareHeaders(new Response(cachedPPRShell, {\n            status: 200,\n            headers: {\n              \"Content-Type\": \"text/html; charset=utf-8\",\n              \"x-farm-preload-buffered\": \"1\",\n              ...(farmFontPreloadHeader ? { \"Link\": farmFontPreloadHeader } : {}),\n              ...getPPRHeaders(\"hit\", pprConfig),\n            },\n          }), middlewareHeaders);\n        }\n        emitFarmEvent({ type: \"ppr.shell.miss\", route: pathname, key: pprCacheKey });\n      }\n\n      // Get the page component and metadata\n      let PageComponent = route.module.default;\n      let pageStatus = 200;\n      const pageMetadata = route.module.metadata || {};\n      \n      // Get applicable layouts for this page\n      const applicableLayouts = getApplicableLayouts(routePathname);\n      const shouldHydrateLayout = applicableLayouts.some(\n        (layout) => layout.shouldHydrate === true,\n      );\n      const hydrationStrategies = [\n        ...(route.shouldHydrate && route.islandStrategy ? [route.islandStrategy] : []),\n        ...applicableLayouts.flatMap((layout) =>\n          layout.shouldHydrate && layout.islandStrategy ? [layout.islandStrategy] : [],\n        ),\n      ];\n      const hydrationIslandStrategy = hydrationStrategies.every(\n        (strategy) => strategy === hydrationStrategies[0],\n      )\n        ? (hydrationStrategies[0] || \"load\")\n        : \"load\";\n      const selectedRouteSlots = matchRouteSlots(\n        routePathname,\n        request.headers.get(\"x-farm-intercept-from\"),\n      );\n      \n      if (PageComponent) {\n        // Parse search params - make it a resolved Promise for async components\n        const searchParamsObj = searchParamsToObject(url.searchParams);\n        \n        // Render the page component\n        const routeContext = hasConfiguredRouteContext\n          ? await resolveFarmRouteContext(farmResolvedRuntimeConfig, {\n              request,\n              params,\n              search: searchParamsObj,\n              path: pathname,\n            })\n          : undefined;\n        const rawPageProps = withFarmRouteContext(\n          {\n            params,\n            searchParams: Promise.resolve(searchParamsObj),\n            path: pathname,\n            ...(middlewareData?.size ? { middleware: { data: middlewareData } } : {}),\n          },\n          routeContext,\n        );\n        // Generated programmatic route modules consume app context from the\n        // public context prop while source-created modules read the symbol\n        // carrier above. Expose it only while resolving server route data.\n        if (route.module.__farmResolveRouteProps && routeContext !== undefined) {\n          Object.defineProperty(rawPageProps, \"context\", {\n            value: routeContext,\n            enumerable: true,\n            configurable: true,\n          });\n        }\n        let pageProps;\n        try {\n          // Resolve top-level route state before starting the HTTP stream so\n          // redirects, notFound(), and failures keep their real status. Route\n          // data may still contain explicit defer() values for nested Suspense.\n          pageProps = route.module.__farmResolveRouteProps\n            ? await route.module.__farmResolveRouteProps(rawPageProps)\n            : (() => {\n              const routeSchemas = route.module.__farmRouteParsesProps\n                ? {}\n                : route.module.__farmRouteSchemas || {};\n              const parsedParams = routeSchemas.params?.parse\n                ? routeSchemas.params.parse(params)\n                : params;\n              const parsedSearch = routeSchemas.search?.parse\n                ? routeSchemas.search.parse(searchParamsObj)\n                : searchParamsObj;\n              return {\n                ...rawPageProps,\n                params: parsedParams,\n                search: parsedSearch,\n                searchParams: Promise.resolve(parsedSearch),\n              };\n            })();\n          if (\n            route.module.__farmResolveRouteProps &&\n            routeContext !== undefined &&\n            pageProps.context === routeContext\n          ) {\n            const { context: _routeContext, ...renderPageProps } = pageProps;\n            pageProps = renderPageProps;\n          }\n        } catch (routeStateError) {\n          if (isFarmRedirectError(routeStateError)) throw routeStateError;\n\n          const routeComponents = route.module.__farmRouteComponents;\n          const routeStateProps = {\n            ...rawPageProps,\n            search: searchParamsObj,\n            searchParams: Promise.resolve(searchParamsObj),\n            error: routeStateError,\n          };\n          if (isFarmNotFoundError(routeStateError) && routeComponents?.notFound) {\n            pageStatus = 404;\n            PageComponent = routeComponents.notFound;\n            pageProps = routeStateProps;\n          } else if (routeComponents?.error) {\n            pageStatus = 500;\n            PageComponent = routeComponents.error;\n            pageProps = routeStateProps;\n          } else {\n            throw routeStateError;\n          }\n        }\n\n        const renderedRouteSlots = await Promise.all(\n          selectedRouteSlots.map(async function(slot) {\n            const slotContext = hasConfiguredRouteContext\n              ? await resolveFarmRouteContext(farmResolvedRuntimeConfig, {\n                  request,\n                  params: slot.params,\n                  search: searchParamsObj,\n                  path: pathname,\n                })\n              : undefined;\n            const rawSlotProps = withFarmRouteContext(\n              {\n                params: slot.params,\n                searchParams: Promise.resolve(searchParamsObj),\n                path: pathname,\n                ...(middlewareData?.size ? { middleware: { data: middlewareData } } : {}),\n              },\n              slotContext,\n            );\n            if (slot.module.__farmResolveRouteProps && slotContext !== undefined) {\n              Object.defineProperty(rawSlotProps, \"context\", {\n                value: slotContext,\n                enumerable: true,\n                configurable: true,\n              });\n            }\n\n            const slotSchemas = slot.module.__farmRouteParsesProps\n              ? {}\n              : slot.module.__farmRouteSchemas || {};\n            let slotProps = slot.module.__farmResolveRouteProps\n              ? await slot.module.__farmResolveRouteProps(rawSlotProps)\n              : {\n                  ...rawSlotProps,\n                  params: slotSchemas.params?.parse\n                    ? slotSchemas.params.parse(slot.params)\n                    : slot.params,\n                  search: slotSchemas.search?.parse\n                    ? slotSchemas.search.parse(searchParamsObj)\n                    : searchParamsObj,\n                  searchParams: Promise.resolve(\n                    slotSchemas.search?.parse\n                      ? slotSchemas.search.parse(searchParamsObj)\n                      : searchParamsObj,\n                  ),\n                };\n            if (\n              slot.module.__farmResolveRouteProps &&\n              slotContext !== undefined &&\n              slotProps.context === slotContext\n            ) {\n              const { context: _slotContext, ...renderSlotProps } = slotProps;\n              slotProps = renderSlotProps;\n            }\n\n            return { ...slot, props: slotProps };\n          }),\n        );\n        const clientMiddleware = middlewareData?.size\n          ? { data: Object.fromEntries(middlewareData) }\n          : undefined;\n        const clientPageProps = {\n          params: pageProps.params,\n          search: pageProps.search ?? searchParamsObj,\n          searchParams: pageProps.search ?? searchParamsObj,\n          ...(\"data\" in pageProps ? { data: pageProps.data } : {}),\n          ...(pageProps.__farmCanonicalPath\n            ? { __farmCanonicalPath: pageProps.__farmCanonicalPath }\n            : {}),\n          ...(pageProps.__farmRoutePropsResolved\n            ? { __farmRoutePropsResolved: true }\n            : {}),\n          path: pathname,\n          ...(clientMiddleware ? { middleware: clientMiddleware } : {}),\n        };\n        const routeSlotPayload = renderedRouteSlots.map(function(slot) {\n          return {\n            name: slot.name,\n            ownerPattern: slot.ownerPattern,\n            pattern: slot.pattern,\n            containerId: slot.containerId,\n            interception: slot.interception,\n            fallback: slot.fallback,\n            props: {\n              params: slot.props.params,\n              search: slot.props.search || searchParamsObj,\n              searchParams: slot.props.search || searchParamsObj,\n              ...(\"data\" in slot.props ? { data: slot.props.data } : {}),\n              path: pathname,\n              ...(clientMiddleware ? { middleware: clientMiddleware } : {}),\n            },\n          };\n        });\n        \n        const renderPageElement = async () => {\n            // First, render the page content\n            let pageElement;\n\n            // Only genuinely async components are executed directly; source\n            // sniffing is unsound because any sync component whose source\n            // contains \"async\" (e.g. an async event handler) would be called\n            // outside React, breaking hooks and re-running side effects.\n            // Errors, including redirect/notFound controls, propagate to the\n            // outer request handler exactly like sync render errors.\n            if (typeof PageComponent === \"function\" && PageComponent.constructor.name === \"AsyncFunction\") {\n              const result = await PageComponent(pageProps);\n              if (React.isValidElement(result)) {\n                pageElement = result;\n              } else {\n                pageElement = React.createElement(\"div\", null, String(result));\n              }\n            } else {\n              // Sync component - create element directly\n              pageElement = React.createElement(PageComponent, pageProps);\n            }\n\n            if (route.shouldHydrate && !shouldHydrateLayout) {\n              pageElement = wrapFarmRouteClientGraph(pageElement);\n            }\n\n            pageElement = React.createElement(\n              \"div\",\n              {\n                id: \"__farm_page__\",\n                \"data-farm-segment\": \"page\",\n                \"data-farm-client\": route.shouldHydrate ? \"true\" : \"false\",\n                ...(shouldHydrateLayout\n                  ? { \"data-farm-layout-client\": \"true\" }\n                  : {}),\n                \"data-farm-island\": \"page\",\n                \"data-farm-island-strategy\": hydrationIslandStrategy,\n              },\n              pageElement,\n            );\n\n            // Wrap with layouts (from innermost to outermost)\n            // Layouts are sorted by depth (root first), so we process in reverse\n            let wrappedElement = pageElement;\n            for (let i = applicableLayouts.length - 1; i >= 0; i--) {\n              const layout = applicableLayouts[i];\n              const LayoutComponent = layout.module.default;\n              if (LayoutComponent) {\n                const slotProps = {};\n                for (const slot of renderedRouteSlots) {\n                  if (slot.ownerPattern !== layout.pattern) continue;\n                  slotProps[slot.name] = React.createElement(\n                    \"div\",\n                    {\n                      id: slot.containerId,\n                      \"data-farm-route-slot\": slot.name,\n                      \"data-farm-slot-owner\": slot.ownerPattern,\n                    },\n                    wrapFarmRouteClientGraph(\n                      React.createElement(slot.module.default, slot.props),\n                    ),\n                  );\n                }\n                wrappedElement = React.createElement(LayoutComponent, {\n                  children: wrappedElement,\n                  params,\n                  ...slotProps,\n                });\n                wrappedElement = React.createElement(\n                  \"div\",\n                  {\n                    \"data-farm-layout-boundary\": \"true\",\n                    \"data-farm-layout-pattern\": layout.pattern,\n                    style: { display: \"contents\" },\n                  },\n                  wrappedElement,\n                );\n              }\n            }\n\n          if (shouldHydrateLayout) {\n            wrappedElement = wrapFarmRouteClientGraph(wrappedElement);\n          }\n\n          wrappedElement = wrapWithFarmIntegrationProviders(wrappedElement);\n          return renderFarmElement(ReactDOMServer, wrappedElement);\n        };\n        const renderedPage = ${\n          hasMiddlewareRuntime\n            ? `await _runWithMiddlewareData(middlewareData, () =>\n          _runWithMiddlewareContext(middlewareContext, renderPageElement)\n        )`\n            : \"await renderPageElement()\"\n        };\n\n        // A completed document is not a reusable PPR shell: it already contains\n        // the request's resolved Suspense content. Until the production runtime\n        // can persist and resume the partial shell itself, buffer streamed PPR\n        // responses for late status errors but do not cache their dynamic HTML.\n        const shouldCachePPRShell = Boolean(pprCacheKey && !renderedPage.stream);\n        if (!shouldCachePPRShell && pprCacheKey) {\n          pprCanCache = false;\n          emitFarmEvent({\n            type: \"ppr.shell.bypass\",\n            route: pathname,\n            reason: \"suspense-stream\",\n          });\n          emitFarmEvent({ type: \"cache.bypass\", route: pathname, reason: \"suspense-stream\" });\n        }\n        \n        // Collect static and generated metadata from layouts and page.\n        // Later entries override earlier entries, matching the development renderer.\n        let mergedMetadata = {};\n        for (const layout of applicableLayouts) {\n          mergedMetadata = mergeMetadata(mergedMetadata, layout.module.metadata);\n          if (typeof layout.module.generateMetadata === \"function\") {\n            mergedMetadata = mergeMetadata(\n              mergedMetadata,\n              await layout.module.generateMetadata({ params: pageProps.params }),\n            );\n          }\n        }\n        mergedMetadata = mergeMetadata(mergedMetadata, pageMetadata);\n        if (typeof route.module.generateMetadata === \"function\") {\n          mergedMetadata = mergeMetadata(\n            mergedMetadata,\n            await route.module.generateMetadata(pageProps),\n          );\n        }\n\n        if (!mergedMetadata.manifest) {\n          const manifestMatch = getMatchingApplicationMetadataRoute(routePathname, \"manifest\");\n          if (manifestMatch) {\n            mergedMetadata.manifest = createApplicationMetadataHref(\n              manifestMatch,\n              farmLocaleResolution?.locale,\n            );\n          }\n        }\n\n        for (const kind of [\"opengraph\", \"twitter\"]) {\n          const imageMatch = getMatchingMetadataImage(routePathname, kind);\n          if (imageMatch) {\n            mergedMetadata = addMetadataImageReference(\n              mergedMetadata,\n              createMetadataImageReference(imageMatch, farmLocaleResolution?.locale),\n            );\n          }\n        }\n\n        const renderedMetadata = renderMetadataHead(mergedMetadata, { pathname, jsonLd: ${JSON.stringify(config.agent?.jsonLd ?? false)} });\n        const title = renderedMetadata.title;\n        const metaTags = renderedMetadata.tags;\n        const hasFavicon = renderedMetadata.hasFavicon;\n\n        const hasPrivateRequestHeaders = hasPrivateFarmRequestHeaders(\n          request,\n          farmLocaleResolution,\n        );\n        const hasRequestScopedRender = Boolean(\n          pageStatus >= 400 ||\n          request.headers.get(\"x-farm-intercept-from\") ||\n          hasPrivateRequestHeaders ||\n          hasConfiguredRouteContext ||\n          middlewareData?.size ||\n          middlewareContext?.size\n        );\n        const sharedCacheControl = getRouteSharedCacheControl(route.module, pprCanCache);\n        const responseHeaders = {\n          \"Content-Type\": \"text/html; charset=utf-8\",\n          \"Cache-Control\": renderedPage.stream || hasRequestScopedRender || !sharedCacheControl\n            ? \"private, no-store\"\n            : sharedCacheControl,\n          ...(farmFontPreloadHeader ? { \"Link\": farmFontPreloadHeader } : {}),\n          ...(pprConfig.enabled ? getPPRHeaders(pprCanCache ? \"miss\" : \"bypass\", pprConfig) : {}),\n        };\n        const farmI18nSnapshot = getFarmI18nSnapshot();\n        let html = renderedPage.html;\n        \n        // Check if the layout already rendered a full HTML document\n        const initialHtml = html !== undefined ? html : renderedPage.shellHtml || \"\";\n        const hasFullDocument = opensFarmFullDocument(initialHtml);\n\n        // Stream a suspended body as soon as React's shell is ready. Full-document\n        // layouts, localized documents, and cacheable PPR shells still use the\n        // buffered path because they require whole-document transformation.\n        if (\n          pageStatus === 200 &&\n          renderedPage.stream &&\n          !hasFullDocument &&\n          !farmI18nSnapshot &&\n          !pprCacheKey\n        ) {\n          const farmThemeDocument = createFarmThemeDocumentParts(\n            farmThemeConfig,\n            farmResolvedRuntimeConfig.basePath,\n            getFarmTheme(request)\n          );\n          const streamPrefix = '<!DOCTYPE html>\\\\n<html lang=\"en\">\\\\n<head>\\\\n' +\n            farmThemeDocument.head + '\\\\n' +\n            '  <meta charset=\"utf-8\">\\\\n' +\n            '  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\\\\n' +\n            (hasFavicon ? '' : '  <link rel=\"icon\" href=\"data:,\">\\\\n') +\n            '  <title>' + title + '</title>' + metaTags + '\\\\n' +\n            '  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">\\\\n' +\n            '  <link rel=\"modulepreload\" href=\"/__farm_client_js_src__\">\\\\n' +\n            renderFarmRendererHydrationScript() + '\\\\n' +\n            '</head>\\\\n<body>\\\\n  <div id=\"root\">';\n          const streamSuffix = '</div>\\\\n' +\n            '  ' + renderFarmClientBootstrapScript(\n              pageProps.__farmCanonicalPath,\n              routeSlotPayload,\n              clientPageProps\n            ) + '\\\\n' +\n            '  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\\\\n' +\n            '</body>\\\\n</html>';\n          const themedStreamPrefix = streamPrefix.replace(\n            '<html lang=\"en\">',\n            () => '<html lang=\"en\"' + farmThemeDocument.attributes + '>'\n          );\n          const streamedDocument = createFarmDocumentStream(\n            renderedPage.stream,\n            themedStreamPrefix,\n            streamSuffix,\n            function() {\n              if (pprBypassReason === \"refresh\") {\n                emitFarmEvent({\n                  type: \"ppr.refresh.complete\",\n                  route: pathname,\n                  durationMs: Date.now() - requestStartTime,\n                });\n              }\n              emitFarmEvent({\n                type: \"render.complete\",\n                route: pathname,\n                pathname,\n                status: pageStatus,\n                durationMs: Date.now() - requestStartTime,\n              });\n            }\n          );\n          return applyProductionMiddlewareHeaders(new Response(streamedDocument, {\n            status: pageStatus,\n            headers: { ...responseHeaders, \"x-farm-preload-streaming\": \"1\" },\n          }), middlewareHeaders);\n        }\n\n        if (html === undefined) {\n          html = await new Response(renderedPage.stream).text();\n          if (renderedPage.streamErrors.length > 0) {\n            throw renderedPage.streamErrors[0];\n          }\n        }\n        \n        const rendererHead = renderedPage.head || \"\";\n        const rendererHasTitle = /<title[\\\\s>]/i.test(rendererHead);\n        // First <title> wins: the fallback framework title yields to a\n        // renderer-emitted one; explicit metadata titles still come first.\n        const suppressDefaultTitle =\n          !renderedMetadata.hasExplicitTitle && rendererHasTitle;\n        let fullHtml;\n        if (hasFullDocument) {\n          // Layout provides full HTML structure - inject CSS and client script\n          html = ensureFarmDocumentHead(extractFarmFullDocument(html) || html);\n          fullHtml = html\n            // Inject CSS link after opening head tag or first meta tag\n            .replace(/<head([^>]*)>/i, '<head$1>\\\\n  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">')\n            .replace(/<\\\\/head>/i, () => renderFarmRendererHydrationScript() + '\\\\n</head>')\n            // Explicit metadata wins over renderer and layout titles. Without\n            // explicit metadata, a renderer title wins over the layout title.\n            .replace(/<head([^>]*)>([\\\\s\\\\S]*?)<\\\\/head>/i, (match, attrs, headContent) => {\n              const hasAuthoritativeTitle = renderedMetadata.hasExplicitTitle || rendererHasTitle;\n              let nextHeadContent = hasAuthoritativeTitle\n                ? headContent.replace(/<title\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/title>\\\\s*/gi, \"\")\n                : headContent;\n              if (renderedMetadata.hasExplicitTitle) {\n                nextHeadContent += \"\\\\n  <title>\" + title + \"</title>\";\n              }\n              if (metaTags) nextHeadContent += metaTags;\n              // Renderer-emitted head markup (e.g. <svelte:head>). Function\n              // replacement below keeps $-sequences literal.\n              const effectiveRendererHead = renderedMetadata.hasExplicitTitle\n                ? rendererHead.replace(/<title\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/title>\\\\s*/gi, \"\")\n                : rendererHead;\n              if (effectiveRendererHead) nextHeadContent += \"\\\\n  \" + effectiveRendererHead;\n              return nextHeadContent === headContent\n                ? match\n                : \"<head\" + attrs + \">\" + nextHeadContent + \"\\\\n</head>\";\n            })\n            // Inject client script before closing body tag. Function replacement:\n            // serialized page props may contain $-sequences ($&, $', $$) that a\n            // string replacement would expand into surrounding document markup,\n            // corrupting the inline bootstrap script.\n            .replace(\n              /<\\\\/body>/i,\n              () => '  ' + renderFarmClientBootstrapScript(\n                pageProps.__farmCanonicalPath,\n                routeSlotPayload,\n                clientPageProps\n              ) + '\\\\n' +\n                '  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\\\\n</body>',\n            );\n          \n          // Add DOCTYPE if not present\n          if (!fullHtml.trim().startsWith('<!DOCTYPE')) {\n            fullHtml = '<!DOCTYPE html>\\\\n' + fullHtml;\n          }\n        } else {\n          // No layout with full document - wrap in HTML structure\n          fullHtml = \\`<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  \\${hasFavicon ? \"\" : '<link rel=\"icon\" href=\"data:,\">'}\n  \\${suppressDefaultTitle ? \"\" : \"<title>\" + title + \"</title>\"}\\${metaTags}\\${rendererHead ? \"\\\\n  \" + rendererHead : \"\"}\n  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">\n  \\${renderFarmRendererHydrationScript()}\n</head>\n<body>\n  <div id=\"root\">\\${html}</div>\n  \\${renderFarmClientBootstrapScript(pageProps.__farmCanonicalPath, routeSlotPayload, clientPageProps)}\n  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\n</body>\n</html>\\`;\n        }\n        fullHtml = applyFarmI18nDocument(fullHtml, pathname, farmI18nSnapshot);\n        fullHtml = applyFarmThemeDocument(\n          fullHtml,\n          farmThemeConfig,\n          farmResolvedRuntimeConfig.basePath,\n          getFarmTheme(request)\n        );\n\n        if (\n          pageStatus === 200 &&\n          shouldCachePPRShell &&\n          pprCacheKey &&\n          request.method.toUpperCase() !== \"HEAD\"\n        ) {\n          await pprShellCache.setAsync(\n            pprCacheKey,\n            { html: fullHtml },\n            {\n              paths: [pathname],\n              tags: [\"ppr\"],\n              revalidate: pprConfig.revalidate ?? false,\n            }\n          );\n          emitFarmEvent({\n            type: \"ppr.shell.cached\",\n            route: pathname,\n            key: pprCacheKey,\n            revalidate: pprConfig.revalidate,\n          });\n        }\n\n        if (pprBypassReason === \"refresh\") {\n          emitFarmEvent({\n            type: \"ppr.refresh.complete\",\n            route: pathname,\n            durationMs: Date.now() - requestStartTime,\n          });\n        }\n\n        emitFarmEvent({\n          type: \"render.complete\",\n          route: pathname,\n          pathname,\n          status: pageStatus,\n          durationMs: Date.now() - requestStartTime,\n        });\n\n        return applyProductionMiddlewareHeaders(new Response(\n          fullHtml,\n          { \n            status: pageStatus,\n            headers: { ...responseHeaders, \"x-farm-preload-buffered\": \"1\" }\n          }\n        ), middlewareHeaders);\n      }\n    } catch (error) {\n      if (isFarmRedirectError(error)) {\n        const redirect = getFarmRedirectError(error);\n        const redirectUrl =\n          farmLocaleResolution?.locale &&\n          redirect.url.startsWith(\"/\") &&\n          !redirect.url.startsWith(\"//\")\n            ? localizeFarmHref(\n                redirect.url,\n                farmLocaleResolution.locale,\n                farmI18nConfig\n              )\n            : redirect.url;\n        emitFarmEvent({\n          type: \"route.redirect\",\n          from: pathname,\n          to: redirectUrl,\n          status: redirect.status,\n        });\n        emitFarmEvent({\n          type: \"render.complete\",\n          route: pathname,\n          pathname,\n          status: redirect.status,\n          durationMs: Date.now() - requestStartTime,\n        });\n        return applyProductionMiddlewareHeaders(new Response(null, {\n          status: redirect.status,\n          headers: {\n            Location: redirectUrl,\n          },\n        }), middlewareHeaders);\n      }\n\n      if (isFarmNotFoundError(error)) {\n        emitFarmEvent({ type: \"route.notFound\", pathname });\n        emitFarmEvent({\n          type: \"render.complete\",\n          route: pathname,\n          pathname,\n          status: 404,\n          durationMs: Date.now() - requestStartTime,\n        });\n        return applyProductionMiddlewareHeaders(new Response(\"Not Found\", {\n          status: 404,\n          headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n        }), middlewareHeaders);\n      }\n\n      emitFarmEvent({ type: \"render.error\", route: pathname, error });\n      console.error(\"SSR Error:\", error);\n      const errorStatus = resolveDefaultErrorStatus(error);\n      const errorStatusText = getDefaultErrorStatusText(errorStatus);\n\n      const errorBoundaryMatch = getMatchingErrorBoundary(routePathname);\n      if (errorBoundaryMatch?.route.module?.default) {\n        try {\n          const searchParamsObj = searchParamsToObject(url.searchParams);\n          const ErrorComponent = errorBoundaryMatch.route.module.default;\n          let errorElement = React.createElement(ErrorComponent, {\n            error,\n            reset: function() {},\n            params,\n            search: searchParamsObj,\n            searchParams: Promise.resolve(searchParamsObj),\n            path: pathname,\n            ...(middlewareData?.size ? { middleware: { data: middlewareData } } : {}),\n          });\n\n          const applicableLayouts = getApplicableLayouts(routePathname);\n          for (let i = applicableLayouts.length - 1; i >= 0; i--) {\n            const LayoutComponent = applicableLayouts[i].module.default;\n            if (LayoutComponent) {\n              errorElement = React.createElement(LayoutComponent, {\n                children: errorElement,\n                params,\n              });\n            }\n          }\n\n          errorElement = wrapWithFarmIntegrationProviders(errorElement);\n\n          const renderErrorElement = () =>\n            renderFarmElementToString(ReactDOMServer, errorElement);\n          const errorHtml = ${\n            hasMiddlewareRuntime\n              ? `await _runWithMiddlewareData(middlewareData, () =>\n            _runWithMiddlewareContext(middlewareContext, renderErrorElement)\n          )`\n              : \"await renderErrorElement()\"\n          };\n          const errorDocument = applyFarmThemeDocument(\n            applyFarmI18nDocument(\n              createFarmErrorDocument(errorHtml, \"Application Error\"),\n              pathname,\n              getFarmI18nSnapshot()\n            ),\n            farmThemeConfig,\n            farmResolvedRuntimeConfig.basePath,\n            getFarmTheme(request)\n          );\n          emitFarmEvent({\n            type: \"render.complete\",\n            route: pathname,\n            pathname,\n            status: errorStatus,\n            durationMs: Date.now() - requestStartTime,\n          });\n          return applyProductionMiddlewareHeaders(new Response(errorDocument, {\n            status: errorStatus,\n            headers: {\n              \"Content-Type\": \"text/html; charset=utf-8\",\n              \"Cache-Control\": \"private, no-store\",\n              \"x-farm-preload-buffered\": \"1\",\n            },\n          }), middlewareHeaders);\n        } catch (boundaryError) {\n          console.error(\"Route error boundary failed:\", boundaryError);\n        }\n      }\n\n      const fallbackHtml = createDefaultErrorMarkup({\n        statusCode: errorStatus,\n        statusText: errorStatusText,\n        requestPath: pathname,\n        method: request.method,\n        development: false,\n        mode: \"production\",\n      });\n      const fallbackDocument = applyFarmThemeDocument(\n        applyFarmI18nDocument(\n          createFarmErrorDocument(\n            fallbackHtml,\n            errorStatus + \" - \" + errorStatusText\n          ),\n          pathname,\n          getFarmI18nSnapshot()\n        ),\n        farmThemeConfig,\n        farmResolvedRuntimeConfig.basePath,\n        getFarmTheme(request)\n      );\n      return applyProductionMiddlewareHeaders(new Response(\n        fallbackDocument,\n        {\n          status: errorStatus,\n          headers: {\n            \"Content-Type\": \"text/html; charset=utf-8\",\n            \"Cache-Control\": \"private, no-store\",\n            \"x-farm-preload-buffered\": \"1\",\n          },\n        }\n      ), middlewareHeaders);\n    }\n  }\n\n  // 404 fallback - render proper HTML page\n  emitFarmEvent({ type: \"route.notFound\", pathname });\n\n  // Agents that navigate in Markdown (a \\`.md\\` URL or \\`Accept: text/markdown\\`)\n  // get a Markdown error body instead of the HTML not-found shell.\n  if (farmRequestWantsMarkdown(pathname, request.headers.get(\"accept\"))) {\n    emitFarmEvent({\n      type: \"render.complete\",\n      route: pathname,\n      pathname,\n      status: 404,\n      durationMs: Date.now() - requestStartTime,\n    });\n    return applyProductionMiddlewareHeaders(new Response(\n      createFarmMarkdownErrorBody(404, pathname, applyFarmBasePath(\"/\", farmResolvedRuntimeConfig.basePath)),\n      {\n        status: 404,\n        headers: {\n          \"Content-Type\": FARM_MARKDOWN_CONTENT_TYPE,\n          \"X-Farm-Markdown-Error\": \"404\",\n          \"Cache-Control\": \"no-store\",\n        },\n      }\n    ), middlewareHeaders);\n  }\n\n  try {\n    const defaultNotFoundHomeHref = applyFarmBasePath(\"/\", farmResolvedRuntimeConfig.basePath);\n    // Default 404 page component\n    function Default404Page() {\n      return React.createElement(React.Fragment, null,\n        React.createElement(\"style\", null, ${JSON.stringify(DEFAULT_NOT_FOUND_STYLES)}),\n        React.createElement(\"main\", {\n          className: \"farm-default-not-found\",\n          \"aria-labelledby\": \"farm-default-not-found-title\",\n          \"aria-describedby\": \"farm-default-not-found-description\",\n        },\n          React.createElement(\"div\", { className: \"farm-default-not-found__content\" },\n            React.createElement(\"h1\", {\n              id: \"farm-default-not-found-title\",\n              className: \"farm-default-not-found__code\",\n            }, \"404\"),\n            React.createElement(\"p\", {\n              id: \"farm-default-not-found-description\",\n              className: \"farm-default-not-found__description\",\n            }, \"Not found\"),\n            React.createElement(\"a\", {\n              className: \"farm-default-not-found__home\",\n              href: defaultNotFoundHomeHref,\n            }, \"GO HOME\")\n          )\n        )\n      );\n    }\n    \n    // Use custom 404 page if provided, otherwise use default\n    const NotFoundPage = hasCustomNotFound && CustomNotFoundComponent ? CustomNotFoundComponent : Default404Page;\n    \n    // Wrap 404 page with root layout if available\n    let notFoundElement = React.createElement(NotFoundPage, { pathname: pathname });\n    const applicableLayouts = getApplicableLayouts(\"/\");\n    \n    // Wrap with layouts (from innermost to outermost)\n    for (let i = applicableLayouts.length - 1; i >= 0; i--) {\n      const layout = applicableLayouts[i];\n      const LayoutComponent = layout.module.default;\n      if (LayoutComponent) {\n        notFoundElement = React.createElement(LayoutComponent, { children: notFoundElement, params: {} });\n      }\n    }\n    notFoundElement = wrapWithFarmIntegrationProviders(notFoundElement);\n    \n    const html = await ReactDOMServer.renderToString(notFoundElement);\n    \n    // Check if layout provides full HTML document\n    const fullDocument = extractFarmFullDocument(html);\n    const hasFullDocument = fullDocument !== null;\n    \n    let fullHtml;\n    if (hasFullDocument) {\n      fullHtml = ensureFarmDocumentHead(fullDocument)\n        .replace(/<head([^>]*)>/i, '<head$1>\\\\n  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">')\n        .replace(/<\\\\/head>/i, () => renderFarmRendererHydrationScript() + '\\\\n</head>')\n        .replace(\n          /<\\\\/body>/i,\n          () => '  ' + renderFarmClientBootstrapScript() + '\\\\n' +\n            '  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\\\\n</body>',\n        );\n      if (!fullHtml.trim().startsWith('<!DOCTYPE')) {\n        fullHtml = '<!DOCTYPE html>\\\\n' + fullHtml;\n      }\n    } else {\n      fullHtml = \\`<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <link rel=\"icon\" href=\"data:,\">\n  <link rel=\"stylesheet\" href=\"/__farm_client_css_href__\">\n  <title>404 - Page Not Found</title>\n  \\${renderFarmRendererHydrationScript()}\n</head>\n<body>\n  <div id=\"root\">\\${html}</div>\n  \\${renderFarmClientBootstrapScript()}\n  <script type=\"module\" src=\"/__farm_client_js_src__\"></script>\n</body>\n</html>\\`;\n    }\n    fullHtml = applyFarmI18nDocument(fullHtml, pathname, getFarmI18nSnapshot());\n    fullHtml = applyFarmThemeDocument(\n      fullHtml,\n      farmThemeConfig,\n      farmResolvedRuntimeConfig.basePath,\n      getFarmTheme(request)\n    );\n    \n    emitFarmEvent({\n      type: \"render.complete\",\n      route: pathname,\n      pathname,\n      status: 404,\n      durationMs: Date.now() - requestStartTime,\n    });\n\n    return applyProductionMiddlewareHeaders(new Response(fullHtml, {\n      status: 404,\n      headers: {\n        \"Content-Type\": \"text/html; charset=utf-8\",\n        \"x-farm-preload-buffered\": \"1\",\n      }\n    }), middlewareHeaders);\n  } catch (error) {\n    console.error(\"404 render error:\", error);\n    const fallbackDocument = applyFarmThemeDocument(\n      \\`<!DOCTYPE html><html><head><title>404</title></head><body><h1>404 - Page Not Found</h1><p>The page \\${pathname} doesn't exist.</p><a href=\"\\${escapeFarmHtmlAttribute(applyFarmBasePath(\"/\", farmResolvedRuntimeConfig.basePath))}\">Go Home</a></body></html>\\`,\n      farmThemeConfig,\n      farmResolvedRuntimeConfig.basePath,\n      getFarmTheme(request)\n    );\n    return applyProductionMiddlewareHeaders(new Response(\n      fallbackDocument,\n      {\n        status: 404,\n        headers: { \"Content-Type\": \"text/html\", \"x-farm-preload-buffered\": \"1\" },\n      }\n    ), middlewareHeaders);\n  }\n  ${\n    hasMiddlewareRuntime\n      ? `\n  };\n  return request === requestBeforeMiddleware\n    ? runResolvedRequest()\n    : _runWithCurrentRequest(request, runResolvedRequest);\n  `\n      : \"\"\n  }\n}\n\nasync function handleFarmPluginRequest(request, runtimeOptions) {\n  if (!farmPluginRuntime || runtimeOptions.kind !== \"page\") {\n    return handleFarmRequest(request);\n  }\n\n  const pathname = runtimeOptions.route?.pathname || new URL(request.url).pathname;\n  const routePattern = runtimeOptions.route?.pattern || null;\n  const params = runtimeOptions.route?.params || {};\n  const layouts = getApplicableLayouts(getFarmRoutePathname(pathname));\n\n  await farmPluginRuntime.runHookParallel(\"beforeRouteMatch\", {\n    pathname,\n    method: request.method,\n  });\n  await farmPluginRuntime.runHookParallel(\"afterRouteMatch\", {\n    pathname,\n    matched: Boolean(routePattern),\n    routePattern,\n    params,\n    layoutPatterns: layouts.map((layout) => layout.pattern),\n  });\n\n  const renderPayload = {\n    pathname,\n    method: request.method,\n    routePattern,\n    params,\n  };\n  await farmPluginRuntime.runHookParallel(\"beforeRender\", renderPayload);\n\n  const response = await handleFarmRequest(request);\n  if (\n    !hasFarmPluginHTMLTransforms ||\n    !response.headers.get(\"content-type\")?.toLowerCase().includes(\"text/html\")\n  ) {\n    return response;\n  }\n\n  let html = await response.text();\n  html = await farmPluginRuntime.runHookSerial(\"transformHTML\", html);\n  html = await farmPluginRuntime.runHookSerial(\"afterRender\", html, renderPayload);\n\n  const headers = new Headers(response.headers);\n  headers.delete(\"content-length\");\n  headers.delete(\"x-farm-preload-streaming\");\n  headers.set(\"x-farm-preload-buffered\", \"1\");\n  return new Response(html, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\nasync function applyFarmPreloadBudget(response, pathname) {\n  const headers = new Headers(response.headers);\n  const linkHeader = headers.get(\"Link\") || \"\";\n  const isHtml = headers.get(\"Content-Type\")?.toLowerCase().includes(\"text/html\");\n  const isStreaming = headers.get(\"x-farm-preload-streaming\") === \"1\";\n  const isBuffered = headers.get(\"x-farm-preload-buffered\") === \"1\";\n  headers.delete(\"x-farm-preload-streaming\");\n  headers.delete(\"x-farm-preload-buffered\");\n\n  if (!isHtml) {\n    if (!isStreaming && !isBuffered) return response;\n    return new Response(response.body, {\n      status: response.status,\n      statusText: response.statusText,\n      headers,\n    });\n  }\n\n  if (isStreaming || !isBuffered || response.body === null) {\n    const managed = manageFarmLinkHeaderPreloads(linkHeader, farmPreloadConfig);\n    if (managed.value) headers.set(\"Link\", managed.value);\n    else headers.delete(\"Link\");\n    reportFarmPreloadWarnings(managed.warnings, \"route \" + pathname);\n    return new Response(response.body, {\n      status: response.status,\n      statusText: response.statusText,\n      headers,\n    });\n  }\n\n  const html = await response.text();\n  const managed = manageFarmDocumentPreloads(html, linkHeader, farmPreloadConfig);\n  if (managed.linkHeader) headers.set(\"Link\", managed.linkHeader);\n  else headers.delete(\"Link\");\n  if (managed.html !== html) headers.delete(\"Content-Length\");\n  reportFarmPreloadWarnings(managed.warnings, \"route \" + pathname);\n  return new Response(managed.html, {\n    status: response.status,\n    statusText: response.statusText,\n    headers,\n  });\n}\n\n// Export as Web Standard fetch API\nexport async function fetch(request, context) {\n  return _runWithAPIRequestRuntime({\n    basePath: farmLocalAPIBasePath,\n    dispatch: async (localRequest) =>\n      (await handleAPIRequest(localRequest)) ?? Response.json({ error: \"Not Found\" }, { status: 404 }),\n  }, () => handleFarmFetch(request, context));\n}\n\nasync function handleFarmFetch(request, context) {\n  const healthResponse = await farmProductionLifecycle.handleHealthRequest(request);\n  if (healthResponse) return healthResponse;\n\n  const productionSiteAttestation = farmProductionSiteTelemetry?.handleAttestation(request);\n  if (productionSiteAttestation) return productionSiteAttestation;\n\n  farmProductionSiteTelemetry?.report(\n    request.url,\n    typeof context?.waitUntil === \"function\" ? context.waitUntil.bind(context) : undefined,\n  );\n\n  return farmProductionLifecycle.runRequest(\n    () =>\n      runWithFarmRequestSpan(request, async () => {\n        const runtimeOptions = farmPluginRuntime ? getFarmPluginRequestOptions(request) : null;\n        const runRequest = () => farmPluginRuntime\n          ? farmPluginRuntime.runRuntimeRequest(\n              request,\n              (runtimeRequest) =>\n                _runWithCurrentRequest(runtimeRequest, () =>\n                  handleFarmPluginRequest(runtimeRequest, runtimeOptions)\n                ),\n              {\n                ...runtimeOptions,\n                waitUntil: typeof context?.waitUntil === \"function\"\n                  ? context.waitUntil.bind(context)\n                  : undefined,\n              },\n            )\n          : handleFarmRequest(request);\n\n        const response = await _runWithCurrentRequest(request, () =>\n          _runWithAfterRequest(request, runRequest, context),\n        );\n        const pathname = new URL(request.url).pathname;\n        const routePathname = getFarmRoutePathname(pathname);\n        return applyFarmPreloadBudget(\n          applyConfiguredResponseHeaders(response, routePathname),\n          routePathname,\n        );\n      }),\n    {\n      onResponseFinished: typeof context?.onResponseFinished === \"function\"\n        ? context.onResponseFinished\n        : undefined,\n    },\n  );\n}\nexport { createFarmNodeRequestAbortSignal };\nexport default { fetch, lifecycle: farmProductionLifecycle };\n  `.trim();\n}\n\n/**\n * Build with Nitro using virtual bundle\n * Routes are now bundled in the SSR entry, so we just need to wrap the handler\n */\nfunction matchesConfiguredRoute(source: string, pathname: string): boolean {\n  const sourceSegments = source.split(\"/\").filter(Boolean);\n  const pathnameSegments = pathname.split(\"/\").filter(Boolean);\n  let pathnameIndex = 0;\n\n  for (const sourceSegment of sourceSegments) {\n    if (sourceSegment === \"*\" || /^:[^/]+\\*$/.test(sourceSegment)) return true;\n\n    const pathnameSegment = pathnameSegments[pathnameIndex];\n    if (/^:[^/]+\\?$/.test(sourceSegment)) {\n      if (pathnameSegment !== undefined) pathnameIndex++;\n      continue;\n    }\n    if (pathnameSegment === undefined) return false;\n    if (!sourceSegment.startsWith(\":\") && sourceSegment !== pathnameSegment) return false;\n    pathnameIndex++;\n  }\n\n  return pathnameIndex === pathnameSegments.length;\n}\n\nfunction getPrerenderRouteHeaders(\n  pathname: string,\n  configuredHeaderRoutes: UniversalConfiguredHeaderRoute[],\n): Record<string, string> {\n  const headers: Record<string, string> = {\n    \"cache-control\": \"public, max-age=0, must-revalidate\",\n  };\n  for (const route of configuredHeaderRoutes) {\n    if (!matchesConfiguredRoute(route.source, pathname)) continue;\n    for (const header of route.headers) headers[header.key.toLowerCase()] = header.value;\n  }\n  return headers;\n}\n\nfunction escapeRoutePattern(value: string): string {\n  return value.replace(/[|\\\\{}()[\\]^$+?.*]/g, \"\\\\$&\");\n}\n\nfunction middlewarePatternMatches(pattern: string | RegExp, pathname: string): boolean {\n  if (pattern instanceof RegExp) {\n    pattern.lastIndex = 0;\n    return pattern.test(pathname);\n  }\n\n  if (pattern === \"*\" || pattern === \"/(.*)\") return true;\n  if (pattern.endsWith(\"(.*)\")) {\n    const prefix = pattern.slice(0, -4);\n    return pathname === prefix || pathname.startsWith(`${prefix}/`);\n  }\n\n  const segments = pattern.split(\"/\").filter(Boolean);\n  if (segments.length === 0) return pathname === \"/\";\n  const expression = segments\n    .map((segment) => {\n      if (segment === \"**\") return \"(?:/.*)?\";\n      if (segment === \"*\") return \"/[^/]+\";\n      if (\n        /^:[^/]+\\*$/.test(segment) ||\n        /^\\[\\.\\.\\..+\\]$/.test(segment) ||\n        /^\\[\\[\\.\\.\\..+\\]\\]$/.test(segment)\n      ) {\n        return \"(?:/.*)?\";\n      }\n      if (/^:[^/]+\\+$/.test(segment)) return \"/.+\";\n      if (/^:[^/]+\\?$/.test(segment)) return \"(?:/[^/]+)?\";\n      if (segment.startsWith(\":\") || /^\\[.+\\]$/.test(segment)) return \"/[^/]+\";\n      return `/${escapeRoutePattern(segment).replace(/\\\\\\*/g, \"[^/]*\")}`;\n    })\n    .join(\"\");\n  return new RegExp(`^${expression}/?$`).test(pathname);\n}\n\nfunction configMiddlewareMayHandlePath(\n  config: ResolvedFarmConfig[\"middleware\"],\n  pathname: string,\n): boolean {\n  if (!hasFarmMiddlewareConfig(config)) return false;\n\n  const entries = (Array.isArray(config) ? config : [config]) as Array<{\n    matcher?: unknown | unknown[];\n    exclude?: Array<string | RegExp>;\n  }>;\n  return entries.some((entry) => {\n    if (entry.exclude?.some((pattern) => middlewarePatternMatches(pattern, pathname))) {\n      return false;\n    }\n\n    if (!entry.matcher) return true;\n    const matchers = Array.isArray(entry.matcher) ? entry.matcher : [entry.matcher];\n    return matchers.some((matcher) => {\n      // A request-aware matcher cannot be proven safe at build time.\n      if (typeof matcher === \"function\") return true;\n      return (\n        (typeof matcher === \"string\" || matcher instanceof RegExp) &&\n        middlewarePatternMatches(matcher, pathname)\n      );\n    });\n  });\n}\n\nfunction appMiddlewareMayHandlePath(\n  middlewareRoutes: readonly UniversalMiddlewareRoute[],\n  pathname: string,\n): boolean {\n  return middlewareRoutes.some((route) => {\n    if (route.path === \"/\") return true;\n    return (\n      middlewarePatternMatches(route.path, pathname) ||\n      middlewarePatternMatches(`${route.path}/**`, pathname)\n    );\n  });\n}\n\nfunction routePatternSpecificity(pattern: string): number {\n  return pattern\n    .split(\"/\")\n    .filter(Boolean)\n    .reduce((score, segment) => {\n      if (segment === \"**\" || segment.startsWith(\"[[...\")) return score + 1;\n      if (segment === \"*\" || segment.startsWith(\"[...\") || /:\\w+\\*$/.test(segment)) {\n        return score + 10;\n      }\n      if (/^\\[.+\\]$/.test(segment) || segment.startsWith(\":\")) return score + 50;\n      return score + 100;\n    }, 0);\n}\n\nfunction getEffectiveRouteRule(config: ResolvedFarmConfig, pathname: string) {\n  return Object.entries(config.routeRules)\n    .filter(([pattern]) => middlewarePatternMatches(pattern, pathname))\n    .sort(([left], [right]) => routePatternSpecificity(left) - routePatternSpecificity(right))\n    .reduce<Record<string, unknown>>((resolved, [, rule]) => Object.assign(resolved, rule), {});\n}\n\nfunction getManifestPageEntry(\n  manifest: FarmRouteRuntimeManifest,\n  pathname: string,\n): FarmRouteRuntimeManifestEntry | undefined {\n  return manifest.routes\n    .filter((entry) => entry.kind === \"page\" && middlewarePatternMatches(entry.pattern, pathname))\n    .sort(\n      (left, right) =>\n        routePatternSpecificity(right.pattern) - routePatternSpecificity(left.pattern),\n    )[0];\n}\n\nfunction getPhysicalPrerenderBypassReason(options: {\n  config: ResolvedFarmConfig;\n  middlewareRoutes: readonly UniversalMiddlewareRoute[];\n  routeRuntimeManifest: FarmRouteRuntimeManifest;\n  redirectSources: readonly string[];\n  rewriteSources: readonly string[];\n  pathname: string;\n}): string | undefined {\n  const {\n    config,\n    middlewareRoutes,\n    routeRuntimeManifest,\n    redirectSources,\n    rewriteSources,\n    pathname,\n  } = options;\n  if (config.i18n.enabled) return \"request-sensitive i18n\";\n  if (redirectSources.some((source) => middlewarePatternMatches(source, pathname))) {\n    return \"redirect\";\n  }\n  if (rewriteSources.some((source) => middlewarePatternMatches(source, pathname))) {\n    return \"rewrite\";\n  }\n  if (appMiddlewareMayHandlePath(middlewareRoutes, pathname)) return \"app middleware\";\n  if (configMiddlewareMayHandlePath(config.middleware, pathname)) return \"configured middleware\";\n  if (hasCustomFarmRouteContext(config)) return \"request context\";\n  if (hasFarmServerRuntimePlugins(config)) return \"server runtime plugin\";\n\n  const manifestEntry = getManifestPageEntry(routeRuntimeManifest, pathname);\n  if (manifestEntry?.rendering === \"dynamic\") return \"dynamic runtime manifest\";\n  if (\n    manifestEntry &&\n    (manifestEntry.runtime !== \"auto\" ||\n      Boolean(manifestEntry.regions?.length) ||\n      manifestEntry.maxDuration !== undefined)\n  ) {\n    return \"route runtime controls\";\n  }\n\n  const routeRule = getEffectiveRouteRule(config, pathname);\n  if (routeRule.prerender === false || routeRule.render === \"dynamic\" || routeRule.ssr === true) {\n    return \"dynamic route rule\";\n  }\n  if (\n    (routeRule.swr !== undefined && routeRule.swr !== false) ||\n    (routeRule.isr !== undefined && routeRule.isr !== false)\n  ) {\n    return \"runtime cache route rule\";\n  }\n\n  return undefined;\n}\n\nasync function buildNitroUniversal(\n  config: ResolvedFarmConfig,\n  routeManager: RouteManager,\n  apiRouteManager: APIRouteManager,\n  serverRenderer: ServerRenderer,\n  preset: string,\n  root: string,\n  distDir: string,\n  ssrBundle: OutputBundle,\n  ssrEntryFile: string,\n  clientOutputDir: string,\n  routeRuntimeManifest: FarmRouteRuntimeManifest,\n  configuredHeaderRoutes: UniversalConfiguredHeaderRoute[],\n  nitroRuntimeResultPromise: Promise<PromiseSettledResult<FarmNitroRuntime>>,\n  pluginManager?: PluginManager,\n) {\n  // Nitro is only needed while producing the deployment artifact. Keeping the\n  // import lazy prevents this build-only dependency from leaking into an\n  // application's standalone server bundle through @farm.js/core's root entry.\n  const [fs, nitroRuntimeResult] = await Promise.all([\n    import(\"fs/promises\"),\n    nitroRuntimeResultPromise,\n  ]);\n  if (nitroRuntimeResult.status === \"rejected\") throw nitroRuntimeResult.reason;\n  const nitro = nitroRuntimeResult.value;\n\n  const isVercel = preset === \"vercel\" || preset === \"vercel-edge\";\n  const isCloudflareWorker = preset === \"cloudflare-module\";\n  const outputDir = resolveDeployOutputPath(root, config.deploy.outputDir);\n  const ssrOutputDir = path.join(root, distDir, \"ssr\");\n  const imageRuntime = resolveImageRuntime(config, preset);\n  const hasGeneratedMetadataImages = Array.from(routeManager.getMetadataImages().values()).some(\n    (image) => image.sourceType === \"module\",\n  );\n  const useExternalMetadataImageRuntime = shouldUseExternalMetadataImageRuntime(\n    preset,\n    hasGeneratedMetadataImages,\n  );\n  const nitroRollupExternal = (id: string) =>\n    (useExternalMetadataImageRuntime && id === \"@vercel/og\") || isNitroRollupExternal(id);\n  const ssrExternalPackages = collectSSRExternalPackages(ssrBundle);\n  const copiedRuntimePackages = new Set([\n    ...(imageRuntime === \"node\" ? [\"sharp\"] : []),\n    ...(useExternalMetadataImageRuntime ? [\"@vercel/og\"] : []),\n  ]);\n  // Nitro normally rebundles the Vite SSR graph so its bare dependencies are\n  // deployable. Skip that duplicate pass only when Farm already knows how to\n  // package every remaining external; otherwise retain Nitro's proven path.\n  const isPrebuiltSSRCandidate =\n    preset === \"node-server\" &&\n    [...ssrExternalPackages].every((packageName) => copiedRuntimePackages.has(packageName));\n\n  logger.info(`📦 Nitro output directory: ${outputDir}`);\n  logger.info(`📦 SSR entry file: ${ssrEntryFile}`);\n  logger.info(`📦 Preset: ${preset}`);\n\n  const ssgCollectionPromise = routeManager.collectSSGPages();\n  const middlewareRoutesPromise = discoverMiddlewareRoutes(getFarmAppDirectories(config));\n  // Resolved config callbacks close over already-loaded arrays, so this does\n  // not re-run user discovery or fetch mutable external configuration.\n  const configuredResponseRoutesPromise = Promise.all([config.redirects(), config.rewrites()]);\n  const farmWorkflows = await prepareFarmWorkflowsForNitro(config);\n  const farmCron = await prepareFarmCronForNitro(config);\n  const [{ ssg: ssgPages }, middlewareRoutes, [configuredRedirects, configuredRewrites]] =\n    await Promise.all([\n      ssgCollectionPromise,\n      middlewareRoutesPromise,\n      configuredResponseRoutesPromise,\n    ]);\n  const redirectSources = [\n    ...routeManager.getRedirects().map((route) => route.source),\n    ...configuredRedirects.map((route: RedirectConfig) => route.source),\n  ];\n  const rewriteSources = configuredRewrites.map((route: RewriteConfig) => route.source);\n  const prerenderRoutes: string[] = [];\n  const skippedPrerenderRoutes: Array<{ pathname: string; reason: string }> = [];\n  for (const page of ssgPages) {\n    // Revalidated pages keep their runtime/CDN stale-while-revalidate\n    // behavior. Emitting them as public files would prevent the server from\n    // ever regenerating them.\n    if (page.revalidate !== undefined) continue;\n    if (prerenderRoutes.includes(page.urlPath)) continue;\n\n    const reason = getPhysicalPrerenderBypassReason({\n      config,\n      middlewareRoutes,\n      routeRuntimeManifest,\n      redirectSources,\n      rewriteSources,\n      pathname: page.urlPath,\n    });\n    if (reason) {\n      skippedPrerenderRoutes.push({ pathname: page.urlPath, reason });\n      continue;\n    }\n    prerenderRoutes.push(page.urlPath);\n  }\n  for (const skipped of skippedPrerenderRoutes) {\n    logger.info(`↪ Keeping SSG route ${skipped.pathname} server-handled (${skipped.reason})`);\n  }\n  if (farmWorkflows.workflows.length > 0) {\n    logger.info(`⏱️  Found ${farmWorkflows.workflows.length} Farm workflow task(s)`);\n  }\n  if (farmCron.jobs.length > 0) {\n    logger.info(`⏱️  Configured ${farmCron.jobs.length} Farm cron route(s)`);\n  }\n  if (preset === \"cloudflare-pages\" && farmCron.jobs.length > 0) {\n    logger.warn(\n      \"Cloudflare Pages does not install Cron Triggers. Use the cloudflare-module preset or an external scheduler with .farm/cron-manifest.json.\",\n    );\n  }\n\n  const scheduledTasks = mergeScheduledTasks(farmWorkflows.scheduledTasks, farmCron.scheduledTasks);\n  const cloudflareCronConfig = createFarmCronCloudflareConfig(farmCron.jobs);\n\n  // The client build has fully settled by now (fonts merged, output\n  // validated), so the stylesheet href baked into server code can carry the\n  // content hash of the bytes browsers will actually receive. Substituting in\n  // memory, before any consumer, covers the disk write below as well as the\n  // prebuilt-SSR copies and prerendering that reuse this bundle directly.\n  const [clientCssHref, clientJsSrc] = await Promise.all([\n    resolveHashedClientCssHref(clientOutputDir),\n    resolveHashedClientJsSrc(clientOutputDir),\n  ]);\n  for (const output of Object.values(ssrBundle)) {\n    if (output.type !== \"chunk\") continue;\n    // split/join rather than replaceAll: the package's lib target predates\n    // ES2021, and a fixed token needs no regex escaping either way.\n    if (output.code.includes(FARM_CLIENT_CSS_HREF_PLACEHOLDER)) {\n      output.code = output.code.split(FARM_CLIENT_CSS_HREF_PLACEHOLDER).join(clientCssHref);\n    }\n    if (output.code.includes(FARM_CLIENT_JS_SRC_PLACEHOLDER)) {\n      output.code = output.code.split(FARM_CLIENT_JS_SRC_PLACEHOLDER).join(clientJsSrc);\n    }\n  }\n\n  // Write SSR bundle to disk\n  await fs.mkdir(ssrOutputDir, { recursive: true });\n\n  for (const [fileName, output] of Object.entries(ssrBundle)) {\n    const filePath = path.join(ssrOutputDir, fileName);\n    // Ensure parent directory exists for nested chunks and emitted assets.\n    await fs.mkdir(path.dirname(filePath), { recursive: true });\n    await fs.writeFile(filePath, output.type === \"chunk\" ? output.code : output.source);\n  }\n\n  // Create the Nitro event handler adapter. Nitro accepts plain event handler\n  // functions, so keep this entry dependency-free for standalone output.\n  const nitroEntryPath = path.join(ssrOutputDir, \"nitro-entry.mjs\");\n\n  const nitroEntryCode = `\n// Farm.js Nitro Entry\n// This file adapts Farm's Web fetch handler to Nitro's event handler contract.\n\nimport { useNitroApp } from 'nitro/runtime'\nimport handler, { farmProductionLifecycle, createFarmNodeRequestAbortSignal } from './${ssrEntryFile}'\n\nexport { farmProductionLifecycle }\n\nconst farmNitroApp = useNitroApp()\nfarmNitroApp.hooks.hook('close', () =>\n  farmProductionLifecycle.close('production-server-closed')\n)\n\nfunction mergeVaryHeaders(target, source) {\n  const values = new Set(\n    [target.get('Vary'), source]\n      .filter(Boolean)\n      .flatMap((value) => value.split(','))\n      .map((value) => value.trim())\n      .filter(Boolean),\n  )\n\n  if (values.size > 0) target.set('Vary', Array.from(values).join(', '))\n}\n\nfunction createResponseFinishedHook(event) {\n  const nodeResponse = event.node?.res\n  if (!nodeResponse || typeof nodeResponse.once !== 'function') return undefined\n\n  return (callback) => {\n    if (nodeResponse.writableEnded || nodeResponse.writableFinished) {\n      queueMicrotask(callback)\n      return\n    }\n\n    let finished = false\n    const finish = () => {\n      if (finished) return\n      finished = true\n      nodeResponse.off('finish', finish)\n      nodeResponse.off('close', finish)\n      callback()\n    }\n    nodeResponse.once('finish', finish)\n    nodeResponse.once('close', finish)\n  }\n}\n\n// Export the event handler for Nitro\nexport default async function farmNitroEventHandler(event) {\n  // Some Node adapters abort their Request on normal IncomingMessage close.\n  // Use the same actual disconnect events as Farm's development server.\n  const node = event.node\n  const request = node?.req && node?.res\n    ? new Request(event.req, { signal: createFarmNodeRequestAbortSignal(node.req, node.res) })\n    : event.req\n  const response = await handler.fetch(request, {\n    waitUntil: (promise) => event.waitUntil(promise),\n    onResponseFinished: createResponseFinishedHook(event),\n  })\n\n  // Nitro records asset compression negotiation on the event response. Merge\n  // Farm's cache signals there so H3 preserves both sets of Vary values.\n  const farmVary = response.headers.get('Vary')\n  if (farmVary) mergeVaryHeaders(event.res.headers, farmVary)\n  return response\n}\n  `.trim();\n\n  await fs.writeFile(nitroEntryPath, nitroEntryCode);\n  const farmNodeServerEntryPath =\n    preset === \"node-server\" ? path.join(ssrOutputDir, \"farm-node-server-entry.mjs\") : null;\n  if (farmNodeServerEntryPath) {\n    await fs.writeFile(\n      farmNodeServerEntryPath,\n      createFarmNodeServerEntry({\n        nitroEntryFile: path.basename(nitroEntryPath),\n        nodeHandlerModule: resolveNitroRuntimeDependency(root, \"srvx/node\"),\n        server: config.server,\n        websocketAdapterModule: resolveNitroRuntimeDependency(root, \"crossws/adapters/node\"),\n      }),\n    );\n  }\n  const prebuiltSSRPlugin = createExternalSSRBundlePlugin(\n    nitroEntryPath,\n    ssrOutputDir,\n    ssrEntryFile,\n  );\n  const configuredNitroRouteRules = routeRulesToNitroRouteRules(config.routeRules);\n  const prerenderNitroRouteRules = Object.fromEntries(\n    prerenderRoutes.map((route) => {\n      const configuredRule = configuredNitroRouteRules[route] || {};\n      return [\n        route,\n        {\n          ...configuredRule,\n          prerender: true,\n          headers: {\n            ...getPrerenderRouteHeaders(route, configuredHeaderRoutes),\n            ...configuredRule.headers,\n          },\n        },\n      ];\n    }),\n  );\n\n  let nitroConfig: NitroConfig = {\n    preset,\n    ...(farmNodeServerEntryPath ? { entry: farmNodeServerEntryPath } : {}),\n    rootDir: root,\n    srcDir: root,\n    buildDir: path.join(root, distDir, \".nitro\"),\n    compatibilityDate: \"2024-12-01\",\n    output: {\n      dir: outputDir,\n      serverDir: path.join(outputDir, \"server\"),\n      publicDir: path.join(outputDir, \"public\"),\n    },\n    publicAssets: [\n      {\n        dir: clientOutputDir,\n        maxAge: 31536000,\n        baseURL: \"/\",\n      },\n    ],\n    ...(prerenderRoutes.length > 0\n      ? {\n          prerender: {\n            crawlLinks: false,\n            failOnError: true,\n            routes: prerenderRoutes,\n          },\n        }\n      : {}),\n    experimental: {\n      tasks: farmWorkflows.workflows.length > 0 || farmCron.jobs.length > 0,\n    },\n    tasks: {\n      ...farmWorkflows.tasks,\n      ...farmCron.tasks,\n    },\n    scheduledTasks: isVercel ? farmWorkflows.scheduledTasks : scheduledTasks,\n    ...(isCloudflareWorker && cloudflareCronConfig\n      ? {\n          cloudflare: cloudflareCronConfig,\n        }\n      : {}),\n    // Use serverHandlers to define our workflow handler first, then the catch-all handler.\n    handlers: [\n      ...(farmWorkflows.handlerPath\n        ? [\n            {\n              route: `${config.workflows.route}/**`,\n              handler: farmWorkflows.handlerPath,\n            },\n          ]\n        : []),\n      {\n        route: \"/**\",\n        handler: toPosixPath(nitroEntryPath),\n      },\n    ],\n    routeRules: {\n      ...(resolveFarmAPIServerBasePath(config.api) === \"/\"\n        ? {}\n        : {\n            [`${resolveFarmAPIServerBasePath(config.api)}/**`]: {\n              cors: true,\n              headers: {\n                \"Access-Control-Allow-Origin\": \"*\",\n                \"Access-Control-Allow-Methods\": \"*\",\n                \"Access-Control-Allow-Headers\": \"*\",\n              },\n            },\n          }),\n      \"/**\": {\n        prerender: false,\n      },\n      ...configuredNitroRouteRules,\n      // Exact user rules must retain their runtime settings without replacing\n      // the headers and prerender marker generated for a safe physical page.\n      ...prerenderNitroRouteRules,\n    },\n    externals: {\n      external: [\n        \"react\",\n        \"react-dom\",\n        \"@prisma/client\",\n        \"@prisma/client/default\",\n        \"@prisma/client/default.js\",\n        \".prisma/client\",\n        \".prisma/client/default\",\n        \"better-sqlite3\",\n        \"sharp\",\n        ...(useExternalMetadataImageRuntime ? [\"@vercel/og\"] : []),\n      ],\n    },\n    rollupConfig: {\n      external: nitroRollupExternal,\n      plugins:\n        hasGeneratedMetadataImages && !useExternalMetadataImageRuntime\n          ? [createMetadataImageWasmPlugin()]\n          : [],\n    },\n    // Keep the public Nitro boolean intact for build hooks. It is translated to\n    // Nitro's existing esbuild pass after hooks run, avoiding a second Terser pass.\n    minify: true,\n    sourceMap: false, // Skip sourcemaps for faster build\n  };\n  const initialSSRRebundleOptions = snapshotSSRRebundleOptions(nitroConfig);\n\n  if (pluginManager) {\n    nitroConfig = await pluginManager.runHookSerial(\"beforeNitroBuild\", nitroConfig);\n  }\n\n  const expectedServerDir = path.join(outputDir, \"server\");\n  const customRollupKeys = Object.keys(nitroConfig.rollupConfig || {}).filter(\n    (key) => key !== \"external\" && key !== \"plugins\",\n  );\n  const configuredEsbuild = nitroConfig.esbuild?.options;\n  const hasUnsupportedEsbuildOverrides = Boolean(\n    configuredEsbuild?.include !== undefined ||\n    configuredEsbuild?.exclude !== undefined ||\n    configuredEsbuild?.loaders !== undefined ||\n    configuredEsbuild?.sourceMap,\n  );\n  const hasLateBuildMutationConfig = Boolean(\n    Object.keys(nitroConfig.hooks || {}).length > 0 ||\n    (Array.isArray(nitroConfig.modules) ? nitroConfig.modules.some(Boolean) : nitroConfig.modules),\n  );\n  const hasUnsupportedSSRRebundleOverrides = !isDeepStrictEqual(\n    initialSSRRebundleOptions,\n    snapshotSSRRebundleOptions(nitroConfig),\n  );\n  const requestedBuilder = nitroConfig.builder ?? process.env.NITRO_BUILDER;\n  const canReusePrebuiltSSR =\n    isPrebuiltSSRCandidate &&\n    nitroConfig.preset === \"node-server\" &&\n    (requestedBuilder === undefined ||\n      requestedBuilder === \"rollup\" ||\n      requestedBuilder === \"rolldown\") &&\n    nitroConfig.sourceMap === false &&\n    !hasUnsupportedEsbuildOverrides &&\n    !hasLateBuildMutationConfig &&\n    !hasUnsupportedSSRRebundleOverrides &&\n    nitroConfig.rollupConfig?.external === nitroRollupExternal &&\n    !hasRollupPlugins(nitroConfig.rollupConfig?.plugins) &&\n    customRollupKeys.length === 0 &&\n    path.resolve(nitroConfig.output?.serverDir || \"\") === path.resolve(expectedServerDir) &&\n    Boolean(\n      nitroConfig.handlers?.some(\n        (handler) => path.resolve(handler?.handler || \"\") === nitroEntryPath,\n      ),\n    );\n  const selectRolldownBuilder =\n    canReusePrebuiltSSR && requestedBuilder === undefined && (await canUseRolldownBuilder());\n  if (selectRolldownBuilder) nitroConfig.builder = \"rolldown\";\n  const useRolldownBuilder =\n    canReusePrebuiltSSR && (nitroConfig.builder ?? process.env.NITRO_BUILDER) === \"rolldown\";\n\n  const shouldMinify = nitroConfig.minify !== false;\n  const configuredEsbuildOptions = nitroConfig.esbuild?.options || {};\n  const resolvedEsbuildOptions = {\n    ...configuredEsbuildOptions,\n    // Function-name helpers are unsafe for provider scripts that serialize a\n    // function with toString(); the helper is outside the emitted script scope.\n    keepNames:\n      config.docs?.enabled && config.docs.adapter?.server\n        ? false\n        : (configuredEsbuildOptions.keepNames ?? true),\n  };\n  const prebuiltSSREsbuildOptions =\n    config.docs?.enabled && config.docs.adapter?.server\n      ? resolvedEsbuildOptions\n      : configuredEsbuildOptions;\n  const effectiveMinify = configuredEsbuildOptions.minify ?? shouldMinify;\n  const useFarmEsbuildMinifier =\n    effectiveMinify &&\n    nitroConfig.sourceMap === false &&\n    !hasUnsupportedEsbuildOverrides &&\n    !hasLateBuildMutationConfig;\n  const esbuildChunkMinifier = useFarmEsbuildMinifier\n    ? createEsbuildChunkMinifyPlugin(resolvedEsbuildOptions)\n    : null;\n  if (canReusePrebuiltSSR) {\n    const configuredRollupPlugins = nitroConfig.rollupConfig?.plugins;\n    nitroConfig.rollupConfig = {\n      ...nitroConfig.rollupConfig,\n      plugins: [\n        ...(Array.isArray(configuredRollupPlugins)\n          ? configuredRollupPlugins\n          : configuredRollupPlugins\n            ? [configuredRollupPlugins]\n            : []),\n        prebuiltSSRPlugin,\n      ],\n    };\n  }\n\n  nitroConfig.minify = useFarmEsbuildMinifier ? false : shouldMinify;\n  nitroConfig.esbuild = {\n    ...nitroConfig.esbuild,\n    options: {\n      ...resolvedEsbuildOptions,\n      minify: useFarmEsbuildMinifier ? false : configuredEsbuildOptions.minify,\n      keepNames: resolvedEsbuildOptions.keepNames,\n      legalComments: configuredEsbuildOptions.legalComments ?? \"none\",\n    },\n  };\n\n  // Build with Nitro\n  const nitroInstance = await nitro.createNitro(nitroConfig);\n  if (farmNodeServerEntryPath) {\n    // The custom entry is only for the final long-running Node server. Nitro\n    // derives its prerenderer config from this config, so remove the override\n    // and let the nitro-prerender preset provide appFetch/closePrerenderer.\n    nitroInstance.hooks.hook(\"prerender:config\", (prerendererConfig) => {\n      delete prerendererConfig.entry;\n    });\n  }\n  nitroInstance.hooks.hook(\"prerender:init\", (prerenderer) => {\n    prerenderer.hooks.hook(\"rollup:before\", (_prerenderNitro, rollupConfig) => {\n      // Nitro's virtual modules (storage, tasks, ...) emit bare imports of\n      // Nitro's own runtime dependencies (unstorage, h3, ...). Their virtual\n      // importer is discarded during resolution, so under pnpm's strict\n      // node_modules layout these transitive dependencies cannot be resolved,\n      // and rollup silently leaves them as bare imports in the temporary\n      // prerender server. Importing that server from the output directory\n      // then fails with ERR_MODULE_NOT_FOUND (#403). Retry unresolved bare\n      // ids from Nitro's own package context so they bundle like the rest.\n      const configuredPlugins = rollupConfig.plugins;\n      rollupConfig.plugins = [\n        ...(Array.isArray(configuredPlugins)\n          ? configuredPlugins\n          : configuredPlugins\n            ? [configuredPlugins]\n            : []),\n        createPrerenderRuntimeResolverPlugin(config.root),\n      ];\n    });\n  });\n  await nitro.prepare(nitroInstance);\n  await nitro.copyPublicAssets(nitroInstance);\n  if (prerenderRoutes.length > 0 && canReusePrebuiltSSR) {\n    // The prerenderer builds and immediately imports a temporary server before\n    // the final Node adapter exists. Materialize the same prebuilt SSR package\n    // import for that temporary server so it can render the static routes.\n    nitroInstance.hooks.hook(\"prerender:init\", (prerenderer) => {\n      if (useRolldownBuilder) {\n        prerenderer.hooks.hook(\"rollup:before\", (_nitro, rollupConfig) => {\n          const rolldownConfig = rollupConfig as typeof rollupConfig & {\n            inject?: unknown;\n            jsx?: unknown;\n          };\n          delete rolldownConfig.inject;\n          delete rolldownConfig.jsx;\n        });\n      }\n      prerenderer.hooks.hook(\"compiled\", async () => {\n        const prerenderServerDir = path.join(outputDir, \"server\");\n        await copyPrebuiltSSRBundle(\n          ssrBundle,\n          path.join(prerenderServerDir, FARM_SSR_OUTPUT_DIR),\n          {},\n          false,\n          fs,\n        );\n        await registerPrebuiltSSRPackageImport(prerenderServerDir, ssrEntryFile, fs);\n      });\n    });\n  }\n  if (esbuildChunkMinifier || useRolldownBuilder) {\n    // Register after Nitro and user hooks are prepared so the minifier is the\n    // final renderChunk transform, matching Nitro's Terser ordering.\n    nitroInstance.hooks.hook(\"rollup:before\", (_nitro, rollupConfig) => {\n      if (useRolldownBuilder) {\n        // Nitro 3 alpha still emits transform options that this Rolldown API\n        // rejects. The generated native Node adapter contains neither JSX nor\n        // browser-global injections, so omit both without changing its output.\n        const rolldownConfig = rollupConfig as typeof rollupConfig & {\n          inject?: unknown;\n          jsx?: unknown;\n        };\n        delete rolldownConfig.inject;\n        delete rolldownConfig.jsx;\n      }\n      if (esbuildChunkMinifier) {\n        const configuredPlugins = rollupConfig.plugins;\n        rollupConfig.plugins = [\n          ...(Array.isArray(configuredPlugins)\n            ? configuredPlugins\n            : configuredPlugins\n              ? [configuredPlugins]\n              : []),\n          esbuildChunkMinifier,\n        ];\n      }\n    });\n  }\n  if (prerenderRoutes.length > 0) {\n    logger.info(`📄 Pre-rendering ${prerenderRoutes.length} SSG page(s)`);\n    await nitro.prerender(nitroInstance);\n  }\n  await nitro.build(nitroInstance);\n  await nitroInstance.close();\n\n  const copyResults = await Promise.allSettled([\n    canReusePrebuiltSSR\n      ? copyPrebuiltSSRBundle(\n          ssrBundle,\n          path.join(outputDir, \"server\", FARM_SSR_OUTPUT_DIR),\n          prebuiltSSREsbuildOptions,\n          effectiveMinify,\n          fs,\n        )\n      : Promise.resolve(),\n    imageRuntime === \"node\"\n      ? copySharpRuntime(config, root, path.join(outputDir, \"server\"), fs)\n      : Promise.resolve(),\n    useExternalMetadataImageRuntime\n      ? copyMetadataImageRuntime(root, path.join(outputDir, \"server\"), fs)\n      : Promise.resolve(),\n  ]);\n  const failedCopy = copyResults.find(\n    (result): result is PromiseRejectedResult => result.status === \"rejected\",\n  );\n  if (failedCopy) throw failedCopy.reason;\n\n  if (canReusePrebuiltSSR) {\n    await registerPrebuiltSSRPackageImport(path.join(outputDir, \"server\"), ssrEntryFile, fs);\n    logger.info(\"⚡ Reused Farm's prebuilt SSR bundle for the Node output\");\n  }\n  if (useRolldownBuilder) {\n    logger.info(\"⚡ Built the Node adapter with Rolldown\");\n  }\n\n  if (pluginManager) {\n    await pluginManager.runHookParallel(\"afterNitroBuild\", {\n      root,\n      preset,\n      distDir,\n      outputDir,\n    });\n  }\n\n  // Post-process for Vercel Build Output API v3\n  // Move server/ to functions/__nitro.func/ and update config.json\n  if (isVercel) {\n    await postProcessVercelOutput(root, outputDir, fs, config, farmWorkflows, routeRuntimeManifest);\n  }\n\n  logger.success(`✅ Nitro build completed with preset: ${preset}`);\n}\n\nasync function copyPrebuiltSSRBundle(\n  ssrBundle: OutputBundle,\n  targetDir: string,\n  configuredEsbuildOptions: NitroEsbuildOptions,\n  minify: boolean,\n  fs: typeof import(\"fs/promises\"),\n): Promise<void> {\n  const {\n    include: _include,\n    exclude: _exclude,\n    sourceMap: _sourceMap,\n    loaders: _loaders,\n    ...configuredTransformOptions\n  } = configuredEsbuildOptions;\n  const hasConfiguredTransforms = Object.keys(configuredTransformOptions).some(\n    (option) => option !== \"minify\",\n  );\n  const transformOptions = createEsbuildTransformOptions(\n    configuredEsbuildOptions,\n    minify,\n    \"node18\",\n  );\n  const transform = minify || hasConfiguredTransforms ? (await import(\"esbuild\")).transform : null;\n\n  await fs.rm(targetDir, { recursive: true, force: true });\n  await Promise.all(\n    Object.entries(ssrBundle).map(async ([fileName, output]) => {\n      const targetPath = path.join(targetDir, fileName);\n      await fs.mkdir(path.dirname(targetPath), { recursive: true });\n\n      if (output.type === \"asset\") {\n        await fs.writeFile(targetPath, output.source);\n        return;\n      }\n\n      let code = output.code;\n      if (transform) {\n        const result = await transform(code, {\n          ...transformOptions,\n          sourcefile: fileName,\n        });\n        code = result.code;\n      }\n\n      await fs.writeFile(targetPath, code);\n    }),\n  );\n}\n\nasync function registerPrebuiltSSRPackageImport(\n  serverDir: string,\n  ssrEntryFile: string,\n  fs: typeof import(\"fs/promises\"),\n): Promise<void> {\n  const packagePath = path.join(serverDir, \"package.json\");\n  const packageJSON = await fs\n    .readFile(packagePath, \"utf8\")\n    .then((contents) => JSON.parse(contents))\n    .catch((error: NodeJS.ErrnoException) => {\n      if (error.code === \"ENOENT\") return { type: \"module\" };\n      throw error;\n    });\n  const existingImports =\n    packageJSON.imports && typeof packageJSON.imports === \"object\" ? packageJSON.imports : {};\n  const outputEntry = `${FARM_SSR_OUTPUT_DIR}/${ssrEntryFile}`.replace(/\\\\/g, \"/\");\n\n  packageJSON.imports = {\n    ...existingImports,\n    [FARM_SSR_PACKAGE_IMPORT]: `./${outputEntry}`,\n  };\n  await fs.mkdir(serverDir, { recursive: true });\n  await fs.writeFile(packagePath, `${JSON.stringify(packageJSON, null, 2)}\\n`);\n}\n\n/**\n * Move a file or directory, falling back to copy-and-remove when rename is\n * not permitted. On Windows, fs.rename fails with EPERM/EACCES when another\n * process (antivirus, indexing, a running dev server) holds a handle on the\n * directory, and with EXDEV across drives; a copy is slower but succeeds.\n */\nexport async function moveVercelOutputPath(\n  src: string,\n  dest: string,\n  fs: typeof import(\"fs/promises\"),\n): Promise<void> {\n  try {\n    await fs.rename(src, dest);\n    return;\n  } catch (error) {\n    const code = (error as NodeJS.ErrnoException)?.code;\n    if (code !== \"EPERM\" && code !== \"EACCES\" && code !== \"EXDEV\" && code !== \"ENOTEMPTY\") {\n      throw error;\n    }\n  }\n  await fs.cp(src, dest, { recursive: true, force: true });\n  await fs.rm(src, { recursive: true, force: true });\n}\n\n/**\n * Post-process Vercel output to match Build Output API v3\n * Moves server/ to functions/__nitro.func/ and updates routes\n */\nasync function postProcessVercelOutput(\n  root: string,\n  outputDir: string,\n  fs: typeof import(\"fs/promises\"),\n  config: ResolvedFarmConfig,\n  farmWorkflows: PreparedFarmWorkflows,\n  routeRuntimeManifest: FarmRouteRuntimeManifest,\n) {\n  const serverDir = path.join(outputDir, \"server\");\n  const functionsDir = path.join(outputDir, \"functions\");\n  const nitroFuncDir = path.join(functionsDir, \"__nitro.func\");\n  const staticDir = path.join(outputDir, \"static\");\n  const publicDir = path.join(outputDir, \"public\");\n\n  // Create functions directory\n  await fs.mkdir(nitroFuncDir, { recursive: true });\n\n  // Move server contents to functions/__nitro.func/\n  const serverContents = await fs.readdir(serverDir);\n  for (const file of serverContents) {\n    const src = path.join(serverDir, file);\n    const dest = path.join(nitroFuncDir, file);\n    await moveVercelOutputPath(src, dest, fs);\n  }\n\n  // Remove the emptied server directory\n  await fs.rm(serverDir, { recursive: true, force: true });\n\n  // Rename public to static (Vercel expects static files in static/)\n  try {\n    await moveVercelOutputPath(publicDir, staticDir, fs);\n  } catch (error) {\n    // public might not exist\n    if ((error as NodeJS.ErrnoException)?.code !== \"ENOENT\") throw error;\n  }\n\n  // Add runtime assets before cloning route-specific functions.\n  await copyFarmDocsContentForVercel(config, root, nitroFuncDir, fs);\n  await copyPrismaClientForVercel(root, nitroFuncDir, fs);\n\n  // Update config.json routes to point to the function\n  const configPath = path.join(outputDir, \"config.json\");\n  const configContent = await fs.readFile(configPath, \"utf-8\");\n  const vercelConfig = JSON.parse(configContent);\n\n  const runtimeRoutes = await createFarmVercelRouteRuntimeFunctions(\n    outputDir,\n    routeRuntimeManifest,\n    fs,\n  );\n\n  // Rebuild the routes around Farm's `__nitro` function while preserving the\n  // preset's redirect and header routes (previously discarded). See\n  // buildFarmVercelRoutes for the full merge contract.\n  vercelConfig.routes = buildFarmVercelRoutes({\n    presetRoutes: Array.isArray(vercelConfig.routes) ? vercelConfig.routes : [],\n    runtimeRoutes,\n    apiBasePath: resolveFarmAPIServerBasePath(config.api),\n  });\n\n  const vercelConfigWithWorkflowCrons = applyFarmWorkflowVercelCrons(\n    vercelConfig,\n    farmWorkflows.workflows,\n  );\n  const vercelConfigWithCrons = applyFarmCronVercelCrons(\n    vercelConfigWithWorkflowCrons,\n    config.cron.jobs,\n  );\n\n  await fs.writeFile(configPath, JSON.stringify(vercelConfigWithCrons, null, 2));\n\n  logger.info(\"✅ Post-processed Vercel output for Build Output API v3\");\n}\n\nasync function copyFarmDocsContentForVercel(\n  config: ResolvedFarmConfig,\n  root: string,\n  nitroFuncDir: string,\n  fs: typeof import(\"fs/promises\"),\n) {\n  const docsContentDir = resolveBuildDocsContentDir(config, root);\n  if (!docsContentDir) return;\n\n  const bundledContentDir = path.join(nitroFuncDir, \"chunks\", \"nitro\", \"farm-docs-content\");\n  const lastModifiedManifest = createFarmDocsLastModifiedManifest(docsContentDir, {\n    fallback: \"now\",\n  });\n  await fs.rm(bundledContentDir, { recursive: true, force: true });\n  await fs.mkdir(path.dirname(bundledContentDir), { recursive: true });\n  await fs.cp(docsContentDir, bundledContentDir, {\n    recursive: true,\n    force: true,\n  });\n  await fs.writeFile(\n    path.join(bundledContentDir, FARM_DOCS_LAST_MODIFIED_MANIFEST),\n    `${JSON.stringify(lastModifiedManifest, null, 2)}\\n`,\n  );\n\n  logger.info(`📚 Bundled docs content for Vercel: ${path.relative(root, docsContentDir)}`);\n}\n\nasync function copySharpRuntime(\n  config: ResolvedFarmConfig,\n  root: string,\n  nitroFuncDir: string,\n  fs: typeof import(\"fs/promises\"),\n): Promise<void> {\n  if (config.images.provider === \"none\") return;\n\n  const projectRequire = createRequire(path.join(root, \"package.json\"));\n  let sharpRequire = projectRequire;\n  if (!resolvePackageJson(projectRequire, \"sharp\")) {\n    try {\n      // Applications are not required to depend on Sharp directly. Resolve\n      // Farm's optional dependency from the installed framework entry when the\n      // project dependency tree does not expose it.\n      sharpRequire = createRequire(projectRequire.resolve(\"@farm.js/core\"));\n    } catch {\n      // The existing missing-Sharp diagnostic below remains authoritative.\n    }\n  }\n  const copiedPackages = new Map<string, string>();\n  const packageCopies = new Map<string, Promise<void>>();\n  const targetNodeModules = path.join(nitroFuncDir, \"node_modules\");\n\n  function copyPackage(packageName: string, parentRequire: NodeJS.Require): Promise<void> {\n    const activeCopy = packageCopies.get(packageName);\n    if (activeCopy) return activeCopy;\n\n    const packageCopy = copyPackageOnce(packageName, parentRequire);\n    packageCopies.set(packageName, packageCopy);\n    return packageCopy;\n  }\n\n  async function copyPackageOnce(\n    packageName: string,\n    parentRequire: NodeJS.Require,\n  ): Promise<void> {\n    const packageJsonPath = resolvePackageJson(parentRequire, packageName);\n    if (!packageJsonPath) return;\n    const packageJson = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\"));\n    const packageDir = path.dirname(packageJsonPath);\n    const targetDir = path.join(targetNodeModules, ...packageName.split(\"/\"));\n    copiedPackages.set(packageName, String(packageJson.version || \"*\"));\n\n    await fs.mkdir(path.dirname(targetDir), { recursive: true });\n    const packageRequire = createRequire(packageJsonPath);\n    const dependencies = {\n      ...packageJson.dependencies,\n      ...packageJson.optionalDependencies,\n    };\n    await Promise.all([\n      fs.cp(packageDir, targetDir, {\n        recursive: true,\n        force: true,\n        dereference: true,\n        // Reflinks make native runtime packaging nearly metadata-only on\n        // supporting filesystems and transparently fall back to byte copies.\n        mode: fsConstants.COPYFILE_FICLONE,\n      }),\n      ...Object.keys(dependencies).map((dependency) => copyPackage(dependency, packageRequire)),\n    ]);\n  }\n\n  await copyPackage(\"sharp\", sharpRequire);\n  if (!copiedPackages.has(\"sharp\")) {\n    throw new Error(\n      \"Farm image optimization requires sharp. Reinstall dependencies without omitting optional packages.\",\n    );\n  }\n\n  const functionPackagePath = path.join(nitroFuncDir, \"package.json\");\n  const functionPackage = JSON.parse(await fs.readFile(functionPackagePath, \"utf8\"));\n  functionPackage.dependencies = {\n    ...functionPackage.dependencies,\n    ...Object.fromEntries([...copiedPackages].sort(([left], [right]) => left.localeCompare(right))),\n  };\n  await fs.writeFile(functionPackagePath, JSON.stringify(functionPackage, null, 2));\n  logger.info(`🖼️  Bundled Sharp image runtime (${copiedPackages.size} packages)`);\n}\n\nasync function copyMetadataImageRuntime(\n  root: string,\n  nitroFuncDir: string,\n  fs: typeof import(\"fs/promises\"),\n): Promise<void> {\n  const projectRequire = createRequire(path.join(root, \"package.json\"));\n  let runtimeRequire = projectRequire;\n  let packageJsonPath = resolvePackageJson(runtimeRequire, \"@vercel/og\");\n\n  if (!packageJsonPath) {\n    try {\n      runtimeRequire = createRequire(projectRequire.resolve(\"@farm.js/core\"));\n      packageJsonPath = resolvePackageJson(runtimeRequire, \"@vercel/og\");\n    } catch {\n      // The missing-runtime diagnostic below remains authoritative.\n    }\n  }\n\n  if (!packageJsonPath) {\n    throw new Error(\n      \"Generated metadata images require @vercel/og. Reinstall @farm.js/core with production dependencies.\",\n    );\n  }\n\n  const packageJson = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\"));\n  const packageDir = path.dirname(packageJsonPath);\n  const targetDir = path.join(nitroFuncDir, \"node_modules\", \"@vercel\", \"og\");\n  await fs.mkdir(path.dirname(targetDir), { recursive: true });\n  await fs.cp(packageDir, targetDir, {\n    recursive: true,\n    force: true,\n    dereference: true,\n    mode: fsConstants.COPYFILE_FICLONE,\n  });\n\n  const functionPackagePath = path.join(nitroFuncDir, \"package.json\");\n  const functionPackage = JSON.parse(await fs.readFile(functionPackagePath, \"utf8\"));\n  functionPackage.dependencies = {\n    ...functionPackage.dependencies,\n    \"@vercel/og\": String(packageJson.version || \"0.11.1\"),\n  };\n  await fs.writeFile(functionPackagePath, JSON.stringify(functionPackage, null, 2));\n  logger.info(\"🖼️  Bundled generated metadata image runtime\");\n}\n\nfunction resolvePackageJson(parentRequire: NodeJS.Require, packageName: string): string | null {\n  for (const request of [`${packageName}/package.json`, `${packageName}/package`]) {\n    try {\n      return parentRequire.resolve(request);\n    } catch {\n      // Try the next package metadata export.\n    }\n  }\n  return null;\n}\n\nasync function copyPrismaClientForVercel(\n  root: string,\n  nitroFuncDir: string,\n  fs: typeof import(\"fs/promises\"),\n) {\n  const projectRequire = createRequire(path.join(root, \"package.json\"));\n\n  let prismaClientDir: string;\n  try {\n    prismaClientDir = path.dirname(projectRequire.resolve(\"@prisma/client/default.js\"));\n  } catch {\n    return;\n  }\n\n  const generatedClientDir = path.join(prismaClientDir, \"..\", \"..\", \".prisma\", \"client\");\n\n  try {\n    await fs.access(generatedClientDir);\n  } catch {\n    return;\n  }\n\n  const targetNodeModules = path.join(nitroFuncDir, \"node_modules\");\n  const targetPrismaScopeDir = path.join(targetNodeModules, \"@prisma\");\n  const targetGeneratedDir = path.join(targetNodeModules, \".prisma\", \"client\");\n  const targetClientDir = path.join(targetPrismaScopeDir, \"client\");\n\n  await fs.mkdir(targetPrismaScopeDir, { recursive: true });\n  await fs.cp(prismaClientDir, targetClientDir, {\n    recursive: true,\n    force: true,\n  });\n  await fs.cp(generatedClientDir, targetGeneratedDir, {\n    recursive: true,\n    force: true,\n  });\n\n  const functionPackagePath = path.join(nitroFuncDir, \"package.json\");\n  const clientPackagePath = path.join(prismaClientDir, \"package.json\");\n  const [functionPackageContent, clientPackageContent] = await Promise.all([\n    fs.readFile(functionPackagePath, \"utf-8\"),\n    fs.readFile(clientPackagePath, \"utf-8\"),\n  ]);\n  const functionPackage = JSON.parse(functionPackageContent);\n  const clientPackage = JSON.parse(clientPackageContent);\n\n  functionPackage.dependencies = {\n    ...functionPackage.dependencies,\n    \"@prisma/client\": clientPackage.version,\n  };\n\n  await fs.writeFile(functionPackagePath, JSON.stringify(functionPackage, null, 2));\n}\n","import path from \"path\";\n\n/**\n * Stand-ins for the client asset URLs inside generated server code.\n * The client and SSR graphs build in parallel, so the final asset bytes\n * (fonts are merged into the stylesheet after Vite emits it) do not exist\n * yet when server code is generated. buildNitroUniversal substitutes the\n * real, content-hashed URLs once the client build has settled.\n */\nexport const FARM_CLIENT_CSS_HREF_PLACEHOLDER = \"/__farm_client_css_href__\";\nexport const FARM_CLIENT_JS_SRC_PLACEHOLDER = \"/__farm_client_js_src__\";\n\nasync function hashAndCopy(\n  sourcePath: string,\n  destinationDir: string,\n  hashedName: (hash: string) => string,\n): Promise<string | null> {\n  const fs = await import(\"fs/promises\");\n  try {\n    const bytes = await fs.readFile(sourcePath);\n    if (bytes.length === 0) return null;\n    const { createHash } = await import(\"node:crypto\");\n    const hash = createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 8);\n    const name = hashedName(hash);\n    await fs.mkdir(destinationDir, { recursive: true });\n    await fs.writeFile(path.join(destinationDir, name), bytes);\n    return name;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Content-hash the final client stylesheet and return the href generated\n * server code should reference.\n *\n * The hash is taken after font CSS has been merged in, so any change to the\n * bytes a browser would receive changes the URL. The hashed copy lives under\n * assets/, where the -h fingerprint already qualifies for immutable caching;\n * the stable farm-client.css stays in place for anything that hardcoded it.\n * A missing or empty stylesheet falls back to the stable name, matching the\n * empty file written for intentionally style-free applications.\n */\nexport async function resolveHashedClientCssHref(clientOutputDir: string): Promise<string> {\n  const name = await hashAndCopy(\n    path.join(clientOutputDir, \"farm-client.css\"),\n    path.join(clientOutputDir, \"assets\"),\n    (hash) => `farm-client-h${hash}.css`,\n  );\n  return name ? `/assets/${name}` : \"/farm-client.css\";\n}\n\n/**\n * The client entry emitted by the current build, if it carries a content\n * fingerprint. Vite names it farm-client-h<hash>.js so its code-split chunks\n * import the fingerprinted name natively; emptyOutDir keeps stale builds from\n * leaving older fingerprints behind.\n */\nexport async function findFingerprintedClientEntry(\n  clientOutputDir: string,\n): Promise<string | null> {\n  const fs = await import(\"fs/promises\");\n  try {\n    const entries = await fs.readdir(clientOutputDir);\n    return entries.find((name) => /^farm-client-h[0-9a-f]+\\.js$/.test(name)) ?? null;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Resolve the src generated server code should reference for the client\n * entry, and keep the stable name working.\n *\n * The entry cannot be duplicated under a second name: its chunks import back\n * into it (it is the shared runtime), so a copy would be instantiated twice\n * and React would see two instances. Instead the bundler emits the\n * fingerprinted name directly, and the stable farm-client.js becomes a\n * re-export shim — anything that hardcoded the old path still executes the\n * one real module.\n */\nexport async function resolveHashedClientJsSrc(clientOutputDir: string): Promise<string> {\n  const entryName = await findFingerprintedClientEntry(clientOutputDir);\n  if (!entryName) return \"/farm-client.js\";\n  const fs = await import(\"fs/promises\");\n  const shim = `export * from \"./${entryName}\";\\n`;\n  await fs.writeFile(path.join(clientOutputDir, \"farm-client.js\"), shim);\n  return `/${entryName}`;\n}\n","import path from \"path\";\nimport type { APIRouteManager } from \"./api/route-manager\";\nimport { resolveFarmAPIServerBasePath, resolveFarmAPIServerRoutePath } from \"./api/server-path\";\nimport type { ResolvedFarmConfig } from \"./config\";\nimport { getFarmPresetRuntime, type FarmPresetRuntime } from \"./deployment\";\nimport {\n  getFarmRouteRuntimeConfig,\n  hasFarmRouteRuntimeControls,\n  mergeFarmRouteRuntimeConfigs,\n  normalizeFarmRouteRuntimeConfig,\n  resolveFarmRouteRuleRuntimeConfig,\n  resolveFarmRouteRuntimeConfig,\n  type FarmRouteRuntimeManifest,\n  type FarmRouteRuntimeManifestEntry,\n} from \"./route-runtime\";\nimport type { RouteManager } from \"./routing/route-manager\";\nimport { resolveRouteRenderingConfigFromFile } from \"./ssg\";\n\nexport const FARM_ROUTE_RUNTIME_MANIFEST = \"route-runtime-manifest.json\";\n\nexport interface FarmRouteRuntimeDeploymentValidation {\n  runtime: FarmPresetRuntime;\n  warnings: string[];\n}\n\nexport async function createFarmRouteRuntimeManifest(options: {\n  config: ResolvedFarmConfig;\n  routeManager: RouteManager;\n  apiRouteManager: APIRouteManager;\n  root?: string;\n}): Promise<FarmRouteRuntimeManifest> {\n  const root = path.resolve(options.root || options.config.root || process.cwd());\n  const routes: FarmRouteRuntimeManifestEntry[] = [];\n\n  for (const [pattern, entry] of options.routeManager.getRoutes()) {\n    const routeModule = await options.routeManager.loadRouteModule(entry.modulePath);\n    const rendering = await resolveRouteRenderingConfigFromFile(routeModule, entry.modulePath);\n    const runtimeConfig = await options.routeManager.resolveRouteRuntimeConfig(pattern);\n\n    routes.push({\n      kind: \"page\",\n      pattern,\n      rendering: rendering.ssg ? \"static\" : \"dynamic\",\n      source: normalizeManifestSource(root, entry.modulePath),\n      ...runtimeConfig,\n    });\n  }\n\n  for (const [pattern, route] of options.apiRouteManager.getRoutes()) {\n    const publicPattern = resolveFarmAPIServerRoutePath(\n      pattern,\n      resolveFarmAPIServerBasePath(options.config.api),\n    );\n    const inherited = resolveFarmRouteRuleRuntimeConfig(publicPattern, options.config.routeRules);\n    const own = normalizeFarmRouteRuntimeConfig(\n      getFarmRouteRuntimeConfig(route),\n      `API route \"${pattern}\"`,\n    );\n\n    routes.push({\n      kind: \"api\",\n      pattern: publicPattern,\n      rendering: \"dynamic\",\n      source: normalizeManifestSource(root, route.filePath),\n      ...resolveFarmRouteRuntimeConfig(\n        mergeFarmRouteRuntimeConfigs(inherited, own),\n        `API route \"${pattern}\"`,\n      ),\n    });\n  }\n\n  for (const entry of options.routeManager.getMetadataRoutes().values()) {\n    const routeModule = await options.routeManager.loadRouteModule(entry.modulePath);\n    const pattern =\n      entry.pattern === \"/\" ? `/${entry.outputName}` : `${entry.pattern}/${entry.outputName}`;\n    const inherited = resolveFarmRouteRuleRuntimeConfig(pattern, options.config.routeRules);\n    const own = normalizeFarmRouteRuntimeConfig(\n      getFarmRouteRuntimeConfig(routeModule),\n      `Metadata route \"${pattern}\"`,\n    );\n\n    routes.push({\n      kind: \"metadata\",\n      pattern,\n      rendering: \"dynamic\",\n      source: normalizeManifestSource(root, entry.modulePath),\n      ...resolveFarmRouteRuntimeConfig(\n        mergeFarmRouteRuntimeConfigs(inherited, own),\n        `Metadata route \"${pattern}\"`,\n      ),\n    });\n  }\n\n  for (const [pattern, rule] of Object.entries(options.config.routeRules)) {\n    if (!hasFarmRouteRuntimeControls(rule)) continue;\n\n    routes.push({\n      kind: \"rule\",\n      pattern,\n      rendering: rule.prerender || rule.render === \"static\" ? \"static\" : \"dynamic\",\n      ...resolveFarmRouteRuntimeConfig(rule, `Route rule \"${pattern}\"`),\n    });\n  }\n\n  return {\n    version: 1,\n    routes,\n  };\n}\n\nexport async function writeFarmRouteRuntimeManifest(\n  directory: string,\n  manifest: FarmRouteRuntimeManifest,\n): Promise<string> {\n  const fs = await import(\"fs/promises\");\n  const manifestPath = path.join(directory, FARM_ROUTE_RUNTIME_MANIFEST);\n  await fs.mkdir(directory, { recursive: true });\n  await fs.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n  return manifestPath;\n}\n\nexport function validateFarmRouteRuntimeDeployment(\n  manifest: FarmRouteRuntimeManifest,\n  preset: string,\n): FarmRouteRuntimeDeploymentValidation {\n  const runtime = getFarmPresetRuntime(preset);\n  const warnings = new Set<string>();\n\n  for (const route of manifest.routes) {\n    if (route.rendering === \"static\") continue;\n\n    if (runtime === \"unknown\" && route.runtime !== \"auto\") {\n      warnings.add(\n        `Preset \"${preset}\" has an unknown runtime, so Farm could not verify routes that explicitly require node or edge.`,\n      );\n    }\n\n    if (runtime !== \"unknown\" && route.runtime !== \"auto\" && route.runtime !== runtime) {\n      throw new Error(\n        `Route \"${route.pattern}\" requires the ${route.runtime} runtime, but preset \"${preset}\" emits ${runtime} functions. Choose a compatible preset or change the route runtime.`,\n      );\n    }\n\n    if (route.regions?.length && preset !== \"vercel\" && preset !== \"vercel-edge\") {\n      warnings.add(\n        `Preset \"${preset}\" does not map per-route regions; Farm kept them in ${FARM_ROUTE_RUNTIME_MANIFEST} for deployment adapters.`,\n      );\n    }\n\n    if (route.maxDuration && preset !== \"vercel\") {\n      warnings.add(\n        `Preset \"${preset}\" does not map per-route maxDuration; Farm kept it in ${FARM_ROUTE_RUNTIME_MANIFEST} for deployment adapters.`,\n      );\n    }\n  }\n\n  return { runtime, warnings: Array.from(warnings) };\n}\n\nfunction normalizeManifestSource(root: string, modulePath: string): string {\n  const queryIndex = modulePath.indexOf(\"?\");\n  const filePath = queryIndex === -1 ? modulePath : modulePath.slice(0, queryIndex);\n  const query = queryIndex === -1 ? \"\" : modulePath.slice(queryIndex);\n  const relativePath = path.isAbsolute(filePath) ? path.relative(root, filePath) : filePath;\n  return `${relativePath.replace(/\\\\/g, \"/\")}${query}`;\n}\n","import path from \"path\";\nimport {\n  createFarmRouteRuntimeKey,\n  type FarmRouteRuntimeManifest,\n  type FarmRouteRuntimeManifestEntry,\n  type ResolvedFarmRouteRuntimeConfig,\n} from \"../route-runtime\";\n\nexport interface FarmVercelRuntimeRoute {\n  src: string;\n  dest: string;\n  headers?: Record<string, string>;\n}\n\ntype FileSystemPromises = typeof import(\"fs/promises\");\n\n/** Materialize one Node function per distinct region/duration policy. */\nexport async function createFarmVercelRouteRuntimeFunctions(\n  outputDir: string,\n  manifest: FarmRouteRuntimeManifest,\n  fs: FileSystemPromises,\n): Promise<FarmVercelRuntimeRoute[]> {\n  const dynamicRoutes = manifest.routes.filter(\n    (route) => route.rendering === \"dynamic\" && route.runtime !== \"edge\",\n  );\n  if (!dynamicRoutes.some(hasVercelFunctionControls)) return [];\n\n  const configuredRoutes = dynamicRoutes\n    .filter((route) => route.kind !== \"rule\" || hasVercelFunctionControls(route))\n    .sort(compareRuntimeRoutes);\n  if (configuredRoutes.length === 0) return [];\n\n  const groups = new Map<\n    string,\n    { config: ResolvedFarmRouteRuntimeConfig; routes: FarmRouteRuntimeManifestEntry[] }\n  >();\n\n  for (const route of configuredRoutes) {\n    const config = {\n      runtime: route.runtime === \"auto\" ? \"node\" : route.runtime,\n      regions: route.regions,\n      maxDuration: route.maxDuration,\n    } satisfies ResolvedFarmRouteRuntimeConfig;\n    const key = createFarmRouteRuntimeKey(config);\n    const group = groups.get(key) || { config, routes: [] };\n    group.routes.push(route);\n    groups.set(key, group);\n  }\n\n  const functionsDir = path.join(outputDir, \"functions\");\n  const baseFunctionDir = path.join(functionsDir, \"__nitro.func\");\n  const destinations = new Map<string, string>();\n  let groupIndex = 0;\n\n  for (const [key, group] of groups) {\n    if (!group.config.regions?.length && !group.config.maxDuration) {\n      destinations.set(key, \"/__nitro\");\n      continue;\n    }\n\n    groupIndex += 1;\n    const functionName = `__farm_runtime_${groupIndex}`;\n    const functionDir = path.join(functionsDir, `${functionName}.func`);\n    await fs.cp(baseFunctionDir, functionDir, { recursive: true, force: true });\n    await configureVercelFunction(functionDir, group.config, fs);\n    destinations.set(key, `/${functionName}`);\n  }\n\n  const routes: FarmVercelRuntimeRoute[] = [];\n  const seenSources = new Set<string>();\n  for (const route of configuredRoutes) {\n    const src = farmRoutePatternToVercelSource(route.pattern);\n    if (seenSources.has(src)) continue;\n    seenSources.add(src);\n    const key = createFarmRouteRuntimeKey({\n      runtime: route.runtime === \"auto\" ? \"node\" : route.runtime,\n      regions: route.regions,\n      maxDuration: route.maxDuration,\n    });\n    routes.push({\n      src,\n      dest: destinations.get(key) || \"/__nitro\",\n      ...(route.kind === \"api\" || route.pattern.startsWith(\"/api/\")\n        ? {\n            headers: {\n              \"Access-Control-Allow-Origin\": \"*\",\n              \"Access-Control-Allow-Methods\": \"*\",\n              \"Access-Control-Allow-Headers\": \"*\",\n            },\n          }\n        : {}),\n    });\n  }\n\n  return routes;\n}\n\nexport function farmRoutePatternToVercelSource(pattern: string): string {\n  const normalized = normalizePattern(pattern);\n  if (normalized === \"/\") return \"/\";\n\n  let source = \"\";\n  for (const segment of normalized.split(\"/\").filter(Boolean)) {\n    if (segment === \"**\" || /^\\[\\[\\.\\.\\..+\\]\\]$/.test(segment)) {\n      source += \"(?:/(.*))?\";\n    } else if (/^\\[\\.\\.\\..+\\]$/.test(segment)) {\n      source += \"/(.+)\";\n    } else if (segment === \"*\" || /^\\[.+\\]$/.test(segment)) {\n      source += \"/([^/]+)\";\n    } else {\n      source += `/${escapeRegExp(segment)}`;\n    }\n  }\n\n  return source || \"/\";\n}\n\nasync function configureVercelFunction(\n  functionDir: string,\n  config: ResolvedFarmRouteRuntimeConfig,\n  fs: FileSystemPromises,\n): Promise<void> {\n  const configPath = path.join(functionDir, \".vc-config.json\");\n  const current = JSON.parse(await fs.readFile(configPath, \"utf8\"));\n  const next = {\n    ...current,\n    ...(config.regions?.length ? { regions: config.regions } : {}),\n    ...(config.maxDuration ? { maxDuration: config.maxDuration } : {}),\n  };\n  await fs.writeFile(configPath, `${JSON.stringify(next, null, 2)}\\n`);\n}\n\nfunction hasVercelFunctionControls(route: FarmRouteRuntimeManifestEntry): boolean {\n  return Boolean(route.regions?.length || route.maxDuration);\n}\n\nfunction compareRuntimeRoutes(\n  left: FarmRouteRuntimeManifestEntry,\n  right: FarmRouteRuntimeManifestEntry,\n): number {\n  const kindOrder = { page: 0, api: 0, metadata: 0, rule: 1 };\n  const kindDifference = kindOrder[left.kind] - kindOrder[right.kind];\n  if (kindDifference !== 0) return kindDifference;\n\n  const specificityDifference =\n    getPatternSpecificity(right.pattern) - getPatternSpecificity(left.pattern);\n  return specificityDifference || left.pattern.localeCompare(right.pattern);\n}\n\nfunction getPatternSpecificity(pattern: string): number {\n  return normalizePattern(pattern)\n    .split(\"/\")\n    .filter(Boolean)\n    .reduce((score, segment) => {\n      if (segment === \"**\" || segment.startsWith(\"[[...\")) return score + 1;\n      if (segment === \"*\" || segment.startsWith(\"[...\")) return score + 10;\n      if (/^\\[.+\\]$/.test(segment)) return score + 50;\n      return score + 100;\n    }, 0);\n}\n\nfunction normalizePattern(value: string): string {\n  const trimmed = value.trim();\n  const withSlash = trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n  return withSlash.length > 1 ? withSlash.replace(/\\/+$/, \"\") : withSlash;\n}\n\nfunction escapeRegExp(value: string): string {\n  return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","export const FARM_IMMUTABLE_ASSET_CACHE_CONTROL = \"public, max-age=31536000, immutable\" as const;\n\nexport interface FarmVercelImmutableAssetRoute {\n  src: string;\n  headers: { \"Cache-Control\": typeof FARM_IMMUTABLE_ASSET_CACHE_CONTROL };\n  continue: true;\n  caseSensitive: true;\n}\n\n/**\n * Apply immutable caching only to Farm/Vite filenames carrying Farm's `-h`\n * content-fingerprint marker. Stable entry filenames and HTML are deliberately\n * excluded because they can change between deployments. The fingerprinted\n * client entry lives at the public root — its relative chunk imports pin it\n * there — so root-level farm-client-h files qualify alongside assets/chunks.\n *\n * Hashed client assets are emitted and served at the root even when a\n * basePath is configured — the client build sets no Vite `base` and Nitro\n * mounts the client output at \"/\" — so the route matches root paths\n * unconditionally.\n */\nexport function createFarmVercelImmutableAssetRoute(): FarmVercelImmutableAssetRoute {\n  const fingerprint = \"-h(?:[a-fA-F0-9]{8}|[a-fA-F0-9]{12}|[a-fA-F0-9]{16})\";\n\n  return {\n    src: `^/(?:(?:assets|chunks)/(?:.+/)*[^/]+|farm-client)${fingerprint}\\\\.(?!(?:[hH][tT][mM][lL]?)$)[^/]+$`,\n    headers: {\n      \"Cache-Control\": FARM_IMMUTABLE_ASSET_CACHE_CONTROL,\n    },\n    continue: true,\n    caseSensitive: true,\n  };\n}\n\nexport function isFarmVercelImmutableAssetPath(pathname: string): boolean {\n  return new RegExp(createFarmVercelImmutableAssetRoute().src).test(pathname);\n}\n\nexport interface FarmVercelRoute {\n  handle?: string;\n  src?: string;\n  dest?: string;\n  status?: number;\n  headers?: Record<string, string>;\n  continue?: boolean;\n  caseSensitive?: boolean;\n}\n\n/**\n * Rebuild the Vercel Build Output `routes` array around Farm's serverless\n * function while preserving the preset-generated source routes.\n *\n * Nitro's Vercel builder emits, before the `filesystem` handler, the redirect\n * and header routes declared through `routeRules` (this is how Farm ships its\n * configured `headers()` and per-prerendered-route cache policy on Vercel), then\n * a blanket immutable public-asset route. Farm previously discarded the whole\n * array, which silently dropped those redirect and header routes on Vercel while\n * they kept working on every other target.\n *\n * We keep the redirect/header source routes, replace the preset's blanket\n * immutable asset route (`continue: true`) with Farm's fingerprint-precise one so\n * stable filenames and HTML are not over-cached, and re-point Farm's runtime,\n * API, and catch-all routes at the `__nitro` function this post-processing\n * creates. Routes after the `filesystem` handler (ISR invocations, observability,\n * the preset's own `/__fallback` catch-all) are intentionally not carried over:\n * Farm keeps ISR routes server-handled, and the preset's catch-all targets a\n * function name Farm does not emit.\n */\nexport function buildFarmVercelRoutes(options: {\n  presetRoutes: FarmVercelRoute[];\n  runtimeRoutes: FarmVercelRoute[];\n  apiBasePath: string;\n}): FarmVercelRoute[] {\n  const { presetRoutes, runtimeRoutes, apiBasePath } = options;\n  const filesystemIndex = presetRoutes.findIndex((route) => route.handle === \"filesystem\");\n  const sourceRoutes = filesystemIndex >= 0 ? presetRoutes.slice(0, filesystemIndex) : [];\n  // Drop the preset's blanket immutable public-asset routes (the only\n  // pre-filesystem routes marked `continue: true`); Farm supplies its own\n  // precise immutable route below. Everything else here is a redirect or header\n  // route from routeRules and must be preserved.\n  const preservedSourceRoutes = sourceRoutes.filter((route) => route.continue !== true);\n\n  return [\n    ...preservedSourceRoutes,\n    createFarmVercelImmutableAssetRoute(),\n    { handle: \"filesystem\" },\n    ...runtimeRoutes,\n    ...(apiBasePath === \"/\"\n      ? []\n      : [\n          {\n            src: `${apiBasePath}/(.*)`,\n            dest: \"/__nitro\",\n            headers: {\n              \"Access-Control-Allow-Origin\": \"*\",\n              \"Access-Control-Allow-Methods\": \"*\",\n              \"Access-Control-Allow-Headers\": \"*\",\n            },\n          },\n        ]),\n    {\n      src: \"/(.*)\",\n      dest: \"/__nitro\",\n    },\n  ];\n}\n","import type { ResolvedFarmServerConfig } from \"../server-http\";\n\nexport interface FarmNodeServerEntryOptions {\n  nitroEntryFile: string;\n  nodeHandlerModule: string;\n  server: ResolvedFarmServerConfig;\n  websocketAdapterModule: string;\n}\n\n/** Generate the long-running Node adapter entry while retaining Nitro's routing runtime. */\nexport function createFarmNodeServerEntry(options: FarmNodeServerEntryOptions): string {\n  const serverConfig = JSON.stringify(options.server);\n  const nitroEntryImport = `./${options.nitroEntryFile.replace(/^\\.\\//, \"\")}`;\n\n  return `\nimport \"#nitro-internal-pollyfills\";\nimport { Server as HttpServer } from \"node:http\";\nimport { Server as HttpsServer } from \"node:https\";\nimport wsAdapter from ${JSON.stringify(options.websocketAdapterModule)};\nimport { toNodeHandler } from ${JSON.stringify(options.nodeHandlerModule)};\nimport { useNitroApp, useRuntimeConfig } from \"nitro/runtime\";\nimport {\n  getGracefulShutdownConfig,\n  setupGracefulShutdown,\n  startScheduleRunner,\n  trapUnhandledNodeErrors,\n} from \"nitro/runtime/internal\";\nimport { farmProductionLifecycle } from ${JSON.stringify(nitroEntryImport)};\n\nconst farmServerConfig = ${serverConfig};\nif (!process.env.NITRO_SHUTDOWN_TIMEOUT) {\n  process.env.NITRO_SHUTDOWN_TIMEOUT = String(farmServerConfig.gracefulShutdownTimeout);\n}\nconst shutdownConfig = getGracefulShutdownConfig();\n\nconst nitroApp = useNitroApp();\nnitroApp.hooks.hook(\"close\", async () => {\n  try {\n    await farmProductionLifecycle.close(\"production-server-closed\");\n  } catch (error) {\n    process.exitCode = 1;\n    throw error;\n  }\n});\n\nlet startupSignal;\nlet resolveStartupSignal;\nconst startupSignalPromise = new Promise((resolve) => {\n  resolveStartupSignal = resolve;\n});\nconst startupSignalListeners = new Map();\nif (!shutdownConfig.disabled) {\n  for (const signal of shutdownConfig.signals) {\n    const listener = (receivedSignal) => {\n      if (!startupSignal) {\n        startupSignal = receivedSignal;\n        resolveStartupSignal(receivedSignal);\n      }\n      farmProductionLifecycle.beginDrain(receivedSignal);\n    };\n    startupSignalListeners.set(signal, listener);\n    process.once(signal, listener);\n  }\n}\n\ntry {\n  await Promise.race([\n    Promise.resolve().then(() => farmProductionLifecycle.start()),\n    startupSignalPromise,\n  ]);\n} catch (error) {\n  await farmProductionLifecycle.close(\"production-start-failed\").catch((closeError) => {\n    console.error(\"[Farm] Runtime cleanup after startup failure failed:\", closeError);\n  });\n  throw error;\n} finally {\n  for (const [signal, listener] of startupSignalListeners) {\n    process.removeListener(signal, listener);\n  }\n}\n\nif (startupSignal) {\n  let startupCloseTimer;\n  const startupCloseCompleted = await Promise.race([\n    Promise.resolve()\n      .then(() => farmProductionLifecycle.close(startupSignal))\n      .then(\n        () => true,\n        (error) => {\n          console.error(\"[Farm] Runtime shutdown during startup failed:\", error);\n          process.exitCode = 1;\n          return true;\n        },\n      ),\n    new Promise((resolve) => {\n      startupCloseTimer = setTimeout(() => resolve(false), farmServerConfig.gracefulShutdownTimeout);\n    }),\n  ]);\n  clearTimeout(startupCloseTimer);\n  if (!startupCloseCompleted) {\n    console.warn(\"[Farm] Runtime startup did not settle before shutdown; forcing cleanup\");\n    let forcedCloseTimer;\n    const forcedCloseCompleted = await Promise.race([\n      Promise.resolve()\n        .then(() => farmProductionLifecycle.forceClose(startupSignal))\n        .then(\n          () => true,\n          (error) => {\n            console.error(\"[Farm] Forced runtime shutdown during startup failed:\", error);\n            process.exitCode = 1;\n            return true;\n          },\n        ),\n      new Promise((resolve) => {\n        forcedCloseTimer = setTimeout(\n          () => resolve(false),\n          farmServerConfig.gracefulShutdownTimeout,\n        );\n      }),\n    ]);\n    clearTimeout(forcedCloseTimer);\n    if (!forcedCloseCompleted) {\n      console.error(\"[Farm] Forced runtime shutdown during startup timed out\");\n      process.exitCode = 1;\n    }\n  }\n  process.exit(process.exitCode || 0);\n}\n\nconst cert = process.env.NITRO_SSL_CERT;\nconst key = process.env.NITRO_SSL_KEY;\nconst server = cert && key\n  ? new HttpsServer({ key, cert }, toNodeHandler(nitroApp.fetch))\n  : new HttpServer(toNodeHandler(nitroApp.fetch));\n\nserver.headersTimeout = farmServerConfig.headersTimeout;\nserver.requestTimeout = farmServerConfig.requestTimeout;\nserver.keepAliveTimeout = farmServerConfig.keepAliveTimeout;\n\nif (!shutdownConfig.disabled) {\n  for (const signal of shutdownConfig.signals) {\n    process.once(signal, () => farmProductionLifecycle.beginDrain(signal));\n  }\n}\n\nconst configuredPort = Number(process.env.NITRO_PORT || process.env.PORT);\nconst port = Number.isFinite(configuredPort) && configuredPort > 0 ? configuredPort : 3000;\nconst host = process.env.NITRO_HOST || process.env.HOST;\nconst socketPath = process.env.NITRO_UNIX_SOCKET;\nconst listener = server.listen(socketPath ? { path: socketPath } : { port, host }, () => {\n  const protocol = cert && key ? \"https\" : \"http\";\n  const addressInfo = listener.address();\n  if (typeof addressInfo === \"string\") {\n    console.log(\\`Listening on unix socket \\${addressInfo}\\`);\n    return;\n  }\n  if (!addressInfo) return;\n  const configuredBaseURL = useRuntimeConfig().app.baseURL || \"\";\n  const baseURL = configuredBaseURL.endsWith(\"/\") ? configuredBaseURL.slice(0, -1) : configuredBaseURL;\n  const address = addressInfo.family === \"IPv6\" ? \\`[\\${addressInfo.address}]\\` : addressInfo.address;\n  console.log(\\`Listening on \\${protocol}://\\${address}:\\${addressInfo.port}\\${baseURL}\\`);\n});\n\nserver.once(\"error\", async (error) => {\n  console.error(error);\n  process.exitCode = 1;\n  await farmProductionLifecycle.close(\"production-listen-error\").catch((closeError) => {\n    console.error(\"[Farm] Runtime cleanup after listen failure failed:\", closeError);\n  });\n});\n\ntrapUnhandledNodeErrors();\nsetupGracefulShutdown(listener, nitroApp);\n\nif (import.meta._websocket) {\n  const { handleUpgrade } = wsAdapter(nitroApp.h3App.websocket);\n  server.on(\"upgrade\", handleUpgrade);\n}\nif (import.meta._tasks) {\n  startScheduleRunner();\n}\n\nexport default {};\n  `.trim();\n}\n","import type {\n  build as viteBuild,\n  createServer as createViteServer,\n  loadEnv as viteLoadEnv,\n} from \"vite\";\n\nexport type FarmProductionViteBuilder = \"rollup\" | \"rolldown\";\n\nexport interface FarmProductionViteRuntime {\n  build: typeof viteBuild;\n  createServer: typeof createViteServer;\n  loadEnv: typeof viteLoadEnv;\n  builder: FarmProductionViteBuilder;\n}\n\nexport function canUseRolldownForRouteDiscovery(viteConfig: object | undefined): boolean {\n  return !viteConfig || Object.keys(viteConfig).length === 0;\n}\n\nexport function supportsRolldownVite(nodeVersion = process.versions.node): boolean {\n  const [major = 0, minor = 0] = nodeVersion.split(\".\").map(Number);\n  return major > 22 || (major === 22 && minor >= 12);\n}\n\nfunction requestedProductionViteBuilder(): FarmProductionViteBuilder | undefined {\n  const requested = process.env.FARM_VITE_BUILDER?.trim().toLowerCase();\n  if (!requested) return undefined;\n  if (requested === \"rollup\" || requested === \"rolldown\") return requested;\n  throw new Error('FARM_VITE_BUILDER must be either \"rolldown\" or \"rollup\"');\n}\n\nasync function loadRollupVite(): Promise<FarmProductionViteRuntime> {\n  const runtime = await import(\"vite\");\n  return {\n    build: runtime.build,\n    createServer: runtime.createServer,\n    loadEnv: runtime.loadEnv,\n    builder: \"rollup\",\n  };\n}\n\n/**\n * Prefer Vite's Rolldown-powered production builder on supported Node releases.\n * Vite 5 remains the compatibility path for unsupported runtimes, --no-optional installs,\n * and projects that explicitly request Rollup.\n */\nexport async function loadFarmProductionVite(): Promise<FarmProductionViteRuntime> {\n  const requested = requestedProductionViteBuilder();\n  if (requested === \"rollup\" || !supportsRolldownVite()) {\n    if (requested === \"rolldown\") {\n      throw new Error(\"FARM_VITE_BUILDER=rolldown requires Node 22.12 or newer\");\n    }\n    return loadRollupVite();\n  }\n\n  try {\n    const runtime = (await import(\"vite-rolldown\")) as unknown as typeof import(\"vite\");\n    return {\n      build: runtime.build,\n      createServer: runtime.createServer,\n      loadEnv: runtime.loadEnv,\n      builder: \"rolldown\",\n    };\n  } catch (error) {\n    if (requested === \"rolldown\") {\n      const detail = error instanceof Error ? `: ${error.message}` : \"\";\n      throw new Error(\n        `FARM_VITE_BUILDER=rolldown was requested, but the optional Vite Rolldown runtime could not be loaded${detail}`,\n      );\n    }\n    return loadRollupVite();\n  }\n}\n","import type { FarmProductionViteBuilder } from \"./production-vite\";\n\ntype VitePluginLike = {\n  name?: string;\n  transform?: unknown;\n};\n\ntype VitePluginHook = (...args: any[]) => any;\n\n/**\n * Tailwind 4.1 supports Farm's Node baseline, but its Vite plugin resolves\n * against Farm's Vite 5 compatibility dependency. When that plugin runs in\n * Vite 8 it mistakes the active environment for its own Vite environment and\n * calls an API that Vite 5 does not export. Keep its documented Vite 5 hook\n * path while Farm uses the Rolldown production builder.\n */\nexport function adaptTailwindVitePlugin<T>(pluginOption: T, builder: FarmProductionViteBuilder): T {\n  if (builder !== \"rolldown\") return pluginOption;\n  return adaptPluginOption(pluginOption) as T;\n}\n\nfunction adaptPluginOption(pluginOption: unknown): unknown {\n  if (Array.isArray(pluginOption)) return pluginOption.map(adaptPluginOption);\n  if (!pluginOption || typeof pluginOption !== \"object\") return pluginOption;\n\n  const plugin = pluginOption as VitePluginLike;\n  if (!plugin.name?.startsWith(\"@tailwindcss/vite:generate:\")) return pluginOption;\n\n  if (isVitePluginHook(plugin.transform)) {\n    return {\n      ...plugin,\n      transform: withVite5TransformContext(plugin.transform),\n    };\n  }\n\n  if (\n    plugin.transform &&\n    typeof plugin.transform === \"object\" &&\n    \"handler\" in plugin.transform &&\n    isVitePluginHook(plugin.transform.handler)\n  ) {\n    return {\n      ...plugin,\n      transform: {\n        ...plugin.transform,\n        handler: withVite5TransformContext(plugin.transform.handler),\n      },\n    };\n  }\n\n  return pluginOption;\n}\n\nfunction isVitePluginHook(value: unknown): value is VitePluginHook {\n  return typeof value === \"function\";\n}\n\nfunction withVite5TransformContext<T extends (...args: any[]) => any>(handler: T): T {\n  return function (this: object, ...args: Parameters<T>): ReturnType<T> {\n    const context = new Proxy(this, {\n      get(target, property, receiver) {\n        if (property === \"environment\") return undefined;\n        return Reflect.get(target, property, receiver);\n      },\n    });\n    return handler.apply(context, args);\n  } as T;\n}\n","import { build } from \"esbuild\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmInstrumentationModule } from \"./instrumentation-runtime\";\n\nexport * from \"./instrumentation-runtime\";\n\nconst INSTRUMENTATION_EXTENSIONS = [\"ts\", \"mts\", \"js\", \"mjs\"] as const;\n\nexport function resolveFarmInstrumentationFile(root: string, srcDir = \"src\"): string | null {\n  const candidates = [\n    ...INSTRUMENTATION_EXTENSIONS.map((extension) =>\n      path.join(root, srcDir, `instrumentation.${extension}`),\n    ),\n    ...INSTRUMENTATION_EXTENSIONS.map((extension) =>\n      path.join(root, `instrumentation.${extension}`),\n    ),\n  ].filter((candidate) => fs.existsSync(candidate));\n\n  if (candidates.length > 1) {\n    throw new Error(\n      `Farm.js found multiple instrumentation files:\\n${candidates\n        .map((candidate) => `- ${path.relative(root, candidate)}`)\n        .join(\"\\n\")}\\nKeep only one instrumentation file in the project root or ${srcDir}/.`,\n    );\n  }\n\n  return candidates[0] ?? null;\n}\n\nexport async function loadFarmInstrumentation(\n  filePath: string | null,\n  root: string,\n): Promise<FarmInstrumentationModule | null> {\n  if (!filePath) return null;\n\n  const outputDirectory = path.join(root, \".farm\", \".instrumentation-loader\");\n  const outputFile = path.join(outputDirectory, \"instrumentation.mjs\");\n  await fs.promises.mkdir(outputDirectory, { recursive: true });\n  await build({\n    entryPoints: [filePath],\n    outfile: outputFile,\n    bundle: true,\n    format: \"esm\",\n    platform: \"node\",\n    target: \"node20\",\n    packages: \"external\",\n    sourcemap: \"inline\",\n  });\n\n  const url = pathToFileURL(outputFile);\n  url.searchParams.set(\"t\", String(Date.now()));\n  return (await import(url.href)) as FarmInstrumentationModule;\n}\n","const productionNodeEnvStateKey = Symbol.for(\"@farm.js/core/production-node-env-state\");\n\ninterface ProductionNodeEnvState {\n  depth: number;\n  original: string | undefined;\n}\n\nfunction getProductionNodeEnvState(): ProductionNodeEnvState | undefined {\n  return Reflect.get(globalThis, productionNodeEnvStateKey) as ProductionNodeEnvState | undefined;\n}\n\n/**\n * Keep overlapping production operations on the production condition.\n *\n * The state lives on `globalThis` so independently loaded CJS/ESM copies of\n * Farm share one refcount. The first entrant captures the caller's value and\n * only the last operation to settle restores it.\n *\n * @internal\n */\nexport async function withProductionNodeEnv<T>(operation: () => T | PromiseLike<T>): Promise<T> {\n  let state = getProductionNodeEnvState();\n\n  if (state) {\n    state.depth += 1;\n  } else {\n    state = {\n      depth: 1,\n      original: process.env.NODE_ENV,\n    };\n    Reflect.set(globalThis, productionNodeEnvStateKey, state);\n  }\n\n  process.env.NODE_ENV = \"production\";\n\n  try {\n    return await operation();\n  } finally {\n    state.depth -= 1;\n\n    if (state.depth > 0) {\n      // A nested operation may have changed NODE_ENV. Keep the remaining\n      // production scopes pinned until the final scope settles.\n      process.env.NODE_ENV = \"production\";\n    } else {\n      Reflect.deleteProperty(globalThis, productionNodeEnvStateKey);\n      if (state.original === undefined) {\n        delete process.env.NODE_ENV;\n      } else {\n        process.env.NODE_ENV = state.original;\n      }\n    }\n  }\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n  applyServerFnOptimisticUpdates,\n  isAPIRouteRef,\n  resolveServerFnInvalidateTargets,\n  settleServerFnOptimisticUpdates,\n  type APIResult,\n  type ClientOptions,\n} from \"./api/client\";\nimport { notifyFarmCacheInvalidation } from \"./cache-invalidation\";\nimport { isNavigatorOnline, subscribeOnline } from \"./client-network-status\";\nimport { notifyClientObserver } from \"./client-observers\";\nimport { invokeMutationWithRetry } from \"./mutation-retry\";\n\nexport type MutationStatus = \"idle\" | \"pending\" | \"success\" | \"error\";\n\nexport type AnyMutationTarget = (...args: any[]) => Promise<any>;\n\nexport type InferMutationVariables<TTarget extends AnyMutationTarget> =\n  Parameters<TTarget> extends [] ? undefined : Parameters<TTarget>[0];\n\nexport type InferMutationData<TTarget extends AnyMutationTarget> = TTarget extends {\n  readonly __farmRouteData: infer TData;\n}\n  ? TData\n  : Awaited<ReturnType<TTarget>>;\n\nexport type InferMutationError<TTarget extends AnyMutationTarget> = TTarget extends {\n  readonly __farmServerFnError: infer TError;\n}\n  ? TError\n  : TTarget extends (...args: any[]) => Promise<APIResult<any, infer TError>>\n    ? TError\n    : Error;\n\nexport type MutationOptimisticContext<TVariables, TData> = {\n  variables: TVariables | undefined;\n  current: TData | null;\n};\n\nexport type MutationNetworkMode = \"always\" | \"online\";\n\nexport type UseMutationOptions<TVariables, TData, TError = Error> = {\n  initialData?: TData | null;\n  resetOnMutate?: boolean;\n  /**\n   * `\"always\"` (default) dispatches regardless of connectivity, preserving\n   * existing behavior. `\"online\"` pauses a submission while the browser is\n   * offline — including one whose dispatch failed while offline — and resumes\n   * it on the `online` event instead of failing it.\n   */\n  networkMode?: MutationNetworkMode;\n  optimistic?: (context: MutationOptimisticContext<TVariables, TData>) => TData | null | undefined;\n  rollbackOnError?: boolean;\n  /**\n   * Options forwarded to generated `api.route.method` clients.\n   * Server-function targets honor `request.retry`, key-targeted\n   * `request.optimistic` updates, and key-targeted `request.invalidate`;\n   * the remaining request options apply to API routes only.\n   */\n  request?: ClientOptions<TData, TError>;\n  onSuccess?: (data: TData, variables: TVariables | undefined) => void;\n  onError?: (error: TError, variables: TVariables | undefined) => void;\n  onSettled?: (data: TData | null, error: TError | null, variables: TVariables | undefined) => void;\n};\n\ntype MutationInput<TTarget extends AnyMutationTarget> = InferMutationVariables<TTarget>;\n\ntype MutationData<TTarget extends AnyMutationTarget> = InferMutationData<TTarget>;\n\ntype MutationError<TTarget extends AnyMutationTarget> = InferMutationError<TTarget>;\n\nexport type MutationAsync<TTarget extends AnyMutationTarget, TData = MutationData<TTarget>> =\n  [] extends Parameters<TTarget>\n    ? (variables?: MutationInput<TTarget>) => Promise<TData>\n    : (variables: MutationInput<TTarget>) => Promise<TData>;\n\nexport type MutationTrigger<TTarget extends AnyMutationTarget> =\n  [] extends Parameters<TTarget>\n    ? (variables?: MutationInput<TTarget>) => void\n    : (variables: MutationInput<TTarget>) => void;\n\nexport type UseMutationReturn<\n  TTarget extends AnyMutationTarget,\n  TData = MutationData<TTarget>,\n  TError = MutationError<TTarget>,\n> = {\n  pending: boolean;\n  /** True while a submission is waiting for the browser to come back online. */\n  paused: boolean;\n  status: MutationStatus;\n  data: TData | null;\n  error: TError | null;\n  variables: MutationInput<TTarget> | undefined;\n  mutate: MutationTrigger<TTarget>;\n  mutateAsync: MutationAsync<TTarget, TData>;\n  reset: () => void;\n};\n\ntype MutationState<TVariables, TData, TError> = {\n  pendingCount: number;\n  pausedCount: number;\n  status: MutationStatus;\n  data: TData | null;\n  error: TError | null;\n  variables: TVariables | undefined;\n};\n\n/**\n * Track a generated API route mutation or a Farm server function with one\n * React lifecycle.\n *\n * API routes keep using their existing fetch transport and request options.\n * Server functions keep using their configured server-function transport.\n */\nexport function useMutation<TTarget extends AnyMutationTarget>(\n  target: TTarget,\n  options: UseMutationOptions<\n    MutationInput<TTarget>,\n    MutationData<TTarget>,\n    MutationError<TTarget>\n  > = {},\n): UseMutationReturn<TTarget> {\n  return useMutationLifecycle(target, options).mutation;\n}\n\n/** Internal shared lifecycle: fetchers prepare form input before dispatch. */\nexport function useMutationLifecycle<\n  TTarget extends AnyMutationTarget,\n  TError = MutationError<TTarget>,\n>(\n  target: TTarget,\n  options: Omit<\n    UseMutationOptions<MutationInput<TTarget>, MutationData<TTarget>, TError>,\n    \"request\"\n  > & {\n    request?: ClientOptions<MutationData<TTarget>, MutationError<TTarget>>;\n  } = {},\n) {\n  type TVariables = MutationInput<TTarget>;\n  type TData = MutationData<TTarget>;\n\n  const initialData = options.initialData ?? null;\n  const optionsRef = useRef(options);\n  const targetRef = useRef(target);\n  const requestIdRef = useRef(0);\n  const lastResetIdRef = useRef(0);\n  const initialState: MutationState<TVariables, TData, TError> = {\n    pendingCount: 0,\n    pausedCount: 0,\n    status: \"idle\",\n    data: initialData,\n    error: null,\n    variables: undefined,\n  };\n  const stateRef = useRef(initialState);\n  const resetWakersRef = useRef(new Set<() => void>());\n  const [state, setState] = useState<MutationState<TVariables, TData, TError>>(initialState);\n\n  optionsRef.current = options;\n  targetRef.current = target;\n\n  const setMutationState = useCallback(\n    (\n      value:\n        | MutationState<TVariables, TData, TError>\n        | ((\n            current: MutationState<TVariables, TData, TError>,\n          ) => MutationState<TVariables, TData, TError>),\n    ) => {\n      // Advance the authoritative snapshot before React processes its queue.\n      // A second submission in this batch must see the preceding transition.\n      const next = typeof value === \"function\" ? value(stateRef.current) : value;\n      stateRef.current = next;\n      setState(next);\n    },\n    [],\n  );\n\n  const waitForReconnect = useCallback(\n    async (requestId: number) => {\n      while (!isNavigatorOnline()) {\n        if (requestId < lastResetIdRef.current) return;\n        setMutationState((current) => ({ ...current, pausedCount: current.pausedCount + 1 }));\n        try {\n          await new Promise<void>((resolve) => {\n            const wake = () => {\n              unsubscribe();\n              resetWakersRef.current.delete(wake);\n              resolve();\n            };\n            const unsubscribe = subscribeOnline(wake);\n            resetWakersRef.current.add(wake);\n          });\n        } finally {\n          setMutationState((current) => ({\n            ...current,\n            pausedCount: Math.max(0, current.pausedCount - 1),\n          }));\n        }\n      }\n    },\n    [setMutationState],\n  );\n\n  const mutatePreparedAsync = useCallback(\n    async (prepare: () => TVariables | undefined) => {\n      const requestId = ++requestIdRef.current;\n      const currentOptions = optionsRef.current;\n      const previousData = stateRef.current.data;\n      let variables: TVariables | undefined;\n      let preparationFailed = false;\n      let preparationError: unknown;\n      try {\n        variables = prepare();\n      } catch (error) {\n        preparationFailed = true;\n        preparationError = error;\n      }\n      const optimisticData = preparationFailed\n        ? undefined\n        : currentOptions.optimistic?.({ variables, current: previousData });\n      const hasOptimisticData = optimisticData !== undefined;\n\n      setMutationState((current) => {\n        // Preparation is app code and may reset or submit again synchronously.\n        if (requestId < lastResetIdRef.current) return current;\n        const pendingCount = current.pendingCount + 1;\n        if (requestId !== requestIdRef.current) return { ...current, pendingCount };\n        return {\n          pendingCount,\n          pausedCount: current.pausedCount,\n          status: \"pending\",\n          data: hasOptimisticData\n            ? optimisticData\n            : currentOptions.resetOnMutate === false\n              ? current.data\n              : null,\n          error: null,\n          variables,\n        };\n      });\n\n      const mutationTarget = targetRef.current;\n      const isAPITarget = isAPIRouteRef(mutationTarget);\n      // API routes run their own cache-layered optimistic engine; server\n      // functions apply key-targeted updates to the shared cache here.\n      const sharedOptimistic =\n        !preparationFailed && !isAPITarget ? currentOptions.request?.optimistic : undefined;\n      const sharedSnapshots = sharedOptimistic?.update?.length\n        ? applyServerFnOptimisticUpdates(sharedOptimistic.update)\n        : [];\n\n      try {\n        if (preparationFailed) throw preparationError;\n        let data!: TData;\n        while (true) {\n          if (currentOptions.networkMode === \"online\") {\n            await waitForReconnect(requestId);\n            if (requestId < lastResetIdRef.current) {\n              throw new Error(\"Mutation reset while waiting for reconnection\");\n            }\n          }\n          try {\n            const rawResult = isAPITarget\n              ? await mutationTarget(variables, currentOptions.request)\n              : await invokeMutationWithRetry(\n                  () => targetRef.current(variables),\n                  currentOptions.request?.retry,\n                  // A reset disowns this submission; stop scheduling retries then.\n                  () => requestId >= lastResetIdRef.current,\n                );\n            data = unwrapMutationResult<TData, TError>(rawResult, isAPITarget);\n            break;\n          } catch (cause) {\n            // A dispatch that failed *because of connectivity* while offline\n            // pauses and rides the next reconnect. An application error (a\n            // typed business failure from a request that reached the server)\n            // must surface instead, or it would be swallowed and the payload\n            // silently re-submitted on reconnect, duplicating a non-idempotent\n            // write.\n            if (\n              currentOptions.networkMode === \"online\" &&\n              !isNavigatorOnline() &&\n              requestId >= lastResetIdRef.current &&\n              isConnectivityFailure(cause)\n            ) {\n              continue;\n            }\n            throw cause;\n          }\n        }\n\n        settleServerFnOptimisticUpdates(sharedSnapshots, \"commit\");\n        if (!isAPITarget && currentOptions.request?.invalidate) {\n          // Server-function invalidations travel the shared bus, matching\n          // server-declared `invalidates`, so every subscribed cache observes them.\n          for (const key of resolveServerFnInvalidateTargets(currentOptions.request.invalidate)) {\n            notifyFarmCacheInvalidation(key);\n          }\n        }\n\n        const isLatestRequest = requestId === requestIdRef.current;\n\n        setMutationState((current) => {\n          if (requestId < lastResetIdRef.current) return current;\n          const pendingCount = Math.max(0, current.pendingCount - 1);\n          if (!isLatestRequest) {\n            return {\n              ...current,\n              pendingCount,\n            };\n          }\n\n          return {\n            pendingCount,\n            pausedCount: current.pausedCount,\n            status: \"success\",\n            data,\n            error: null,\n            variables,\n          };\n        });\n\n        if (isLatestRequest) {\n          notifyClientObserver(currentOptions.onSuccess, [data, variables], \"Mutation onSuccess\");\n          if (requestId === requestIdRef.current) {\n            notifyClientObserver(\n              currentOptions.onSettled,\n              [data, null, variables],\n              \"Mutation onSettled\",\n            );\n          }\n        }\n\n        return data;\n      } catch (cause) {\n        settleServerFnOptimisticUpdates(\n          sharedSnapshots,\n          sharedOptimistic?.rollbackOnError ? \"rollback\" : \"invalidate\",\n        );\n        const error = normalizeMutationError(cause) as TError;\n        const isLatestRequest = requestId === requestIdRef.current;\n\n        setMutationState((current) => {\n          if (requestId < lastResetIdRef.current) return current;\n          const pendingCount = Math.max(0, current.pendingCount - 1);\n          if (!isLatestRequest) {\n            return {\n              ...current,\n              pendingCount,\n            };\n          }\n\n          return {\n            pendingCount,\n            pausedCount: current.pausedCount,\n            status: \"error\",\n            data:\n              hasOptimisticData && currentOptions.rollbackOnError\n                ? previousData\n                : currentOptions.resetOnMutate === false\n                  ? current.data\n                  : null,\n            error,\n            variables,\n          };\n        });\n\n        if (isLatestRequest) {\n          notifyClientObserver(currentOptions.onError, [error, variables], \"Mutation onError\");\n          if (requestId === requestIdRef.current) {\n            notifyClientObserver(\n              currentOptions.onSettled,\n              [null, error, variables],\n              \"Mutation onSettled\",\n            );\n          }\n        }\n\n        throw error;\n      }\n    },\n    [setMutationState, waitForReconnect],\n  );\n\n  const mutateAsync = useCallback(\n    (variables?: TVariables) => mutatePreparedAsync(() => variables),\n    [mutatePreparedAsync],\n  ) as MutationAsync<TTarget, TData>;\n\n  const mutate = useCallback(\n    (variables?: TVariables) => {\n      void mutateAsync(variables as never).catch(() => {});\n    },\n    [mutateAsync],\n  ) as MutationTrigger<TTarget>;\n\n  const reset = useCallback(() => {\n    // Pre-reset requests no longer own any of the current pending count.\n    lastResetIdRef.current = ++requestIdRef.current;\n    setMutationState({\n      pendingCount: 0,\n      pausedCount: 0,\n      status: \"idle\",\n      data: optionsRef.current.initialData ?? null,\n      error: null,\n      variables: undefined,\n    });\n    // Wake paused submissions so they reject instead of waiting for `online`.\n    const wakers = Array.from(resetWakersRef.current);\n    resetWakersRef.current.clear();\n    for (const wake of wakers) wake();\n  }, [setMutationState]);\n\n  const mutation: UseMutationReturn<TTarget, TData, TError> = useMemo(\n    () => ({\n      pending: state.pendingCount > 0,\n      paused: state.pausedCount > 0,\n      status: state.status,\n      data: state.data,\n      error: state.error,\n      variables: state.variables,\n      mutate,\n      mutateAsync,\n      reset,\n    }),\n    [\n      mutate,\n      mutateAsync,\n      reset,\n      state.data,\n      state.error,\n      state.pausedCount,\n      state.pendingCount,\n      state.status,\n      state.variables,\n    ],\n  );\n  return { mutation, mutatePreparedAsync };\n}\n\n/**\n * Whether a thrown value represents a connectivity failure (as opposed to an\n * application/business error). Only connectivity failures are safe to pause and\n * retry on reconnect; an application error means the request reached the server\n * and produced a real result. The client tags transport failures with an\n * `APIClientError` code of `network_error` or `timeout`; a raw fetch/transport\n * failure surfaces as a `TypeError`.\n */\nfunction isConnectivityFailure(error: unknown): boolean {\n  if (error instanceof TypeError) return true;\n  const code = (error as { code?: unknown } | null | undefined)?.code;\n  return code === \"network_error\" || code === \"timeout\";\n}\n\nfunction unwrapMutationResult<TData, TError>(result: unknown, apiRoute: boolean): TData {\n  if (!apiRoute) return result as TData;\n\n  const apiResult = result as APIResult<TData, TError>;\n  if (apiResult.error) {\n    throw apiResult.error;\n  }\n\n  return apiResult.data as TData;\n}\n\nfunction normalizeMutationError(error: unknown): Error {\n  if (error instanceof Error) return error;\n\n  const normalized = new Error(typeof error === \"string\" ? error : \"Mutation failed\");\n  (normalized as Error & { cause?: unknown }).cause = error;\n  return normalized;\n}\n","/**\n * Connectivity observation for the client data layer. Environments without a\n * navigator (server rendering, tests) report online so nothing ever pauses\n * there.\n */\nexport function isNavigatorOnline(): boolean {\n  if (typeof navigator === \"undefined\" || typeof navigator.onLine !== \"boolean\") return true;\n  return navigator.onLine;\n}\n\n/** Subscribe to the browser `online` event. Returns a disposer; no-op outside the browser. */\nexport function subscribeOnline(listener: () => void): () => void {\n  if (typeof window === \"undefined\") return () => {};\n  window.addEventListener(\"online\", listener);\n  return () => window.removeEventListener(\"online\", listener);\n}\n","\"use client\";\n\nimport {\n  createElement,\n  useCallback,\n  useMemo,\n  useRef,\n  useState,\n  type ComponentType,\n  type FormEvent,\n  type FormHTMLAttributes,\n} from \"react\";\nimport { getAPIRouteRefMetadata, isAPIRouteRef } from \"./api/client\";\nimport {\n  useMutationLifecycle,\n  type AnyMutationTarget,\n  type InferMutationData,\n  type InferMutationError,\n  type InferMutationVariables,\n  type MutationStatus,\n  type UseMutationOptions,\n} from \"./mutation-client\";\n\nexport type FetcherState = \"idle\" | \"submitting\";\n\n/** Local form conversion failed before the target was called. */\nexport class FetcherInputError extends Error {\n  readonly name = \"FetcherInputError\" as const;\n  readonly code = \"input_error\" as const;\n  readonly status = 0 as const;\n  readonly data = undefined;\n  readonly cause: unknown;\n\n  constructor(cause: unknown) {\n    super(\n      cause instanceof Error\n        ? cause.message\n        : typeof cause === \"string\"\n          ? cause\n          : \"Could not prepare form input\",\n    );\n    this.cause = cause;\n  }\n}\n\nexport type FetcherFormDataContext = {\n  form: HTMLFormElement | null;\n  submitter: HTMLElement | null;\n};\n\nexport type UseFetcherOptions<TTarget extends AnyMutationTarget> = Omit<\n  UseMutationOptions<\n    InferMutationVariables<TTarget>,\n    InferMutationData<TTarget>,\n    InferMutationError<TTarget> | FetcherInputError\n  >,\n  \"request\"\n> & {\n  request?: UseMutationOptions<\n    InferMutationVariables<TTarget>,\n    InferMutationData<TTarget>,\n    InferMutationError<TTarget>\n  >[\"request\"];\n  /**\n   * Convert browser FormData into the target's typed variables.\n   *\n   * Generated API routes preserve multipart forms and file values as a FormData\n   * body; text-only submissions default to a JSON object (or query for GET/HEAD).\n   * Server functions receive FormData directly. This mapper overrides defaults.\n   */\n  mapFormData?: (\n    formData: FormData,\n    context: FetcherFormDataContext,\n  ) => InferMutationVariables<TTarget>;\n};\n\nexport type FetcherFormProps = Omit<FormHTMLAttributes<HTMLFormElement>, \"action\" | \"onSubmit\"> & {\n  /**\n   * Override the native form fallback. By default server functions remain the\n   * action and generated GET/POST API routes use their real URL.\n   */\n  action?: string | ((formData: FormData) => void | Promise<void>);\n  onSubmit?: (event: FormEvent<HTMLFormElement>) => void;\n};\n\ntype FetcherInput<TTarget extends AnyMutationTarget> = InferMutationVariables<TTarget> | FormData;\n\nexport type FetcherSubmitAsync<TTarget extends AnyMutationTarget> =\n  [] extends Parameters<TTarget>\n    ? (input?: FetcherInput<TTarget>) => Promise<InferMutationData<TTarget>>\n    : (input: FetcherInput<TTarget>) => Promise<InferMutationData<TTarget>>;\n\nexport type FetcherSubmit<TTarget extends AnyMutationTarget> =\n  [] extends Parameters<TTarget>\n    ? (input?: FetcherInput<TTarget>) => void\n    : (input: FetcherInput<TTarget>) => void;\n\nexport type UseFetcherReturn<TTarget extends AnyMutationTarget> = {\n  state: FetcherState;\n  status: MutationStatus;\n  pending: boolean;\n  /** True while a submission is waiting for the browser to come back online. */\n  paused: boolean;\n  data: InferMutationData<TTarget> | null;\n  error: InferMutationError<TTarget> | FetcherInputError | null;\n  variables: InferMutationVariables<TTarget> | undefined;\n  formData: FormData | null;\n  submit: FetcherSubmit<TTarget>;\n  submitAsync: FetcherSubmitAsync<TTarget>;\n  Form: ComponentType<FetcherFormProps>;\n  reset: () => void;\n};\n\nconst formDataContexts = new WeakMap<FormData, FetcherFormDataContext>();\n\n/**\n * Run a typed server function or generated API operation without navigating.\n *\n * `fetcher.Form` progressively keeps a server function as the native form\n * action, while hydration intercepts submissions into this fetcher lifecycle.\n */\nexport function useFetcher<TTarget extends AnyMutationTarget>(\n  target: TTarget,\n  options: UseFetcherOptions<TTarget> = {},\n): UseFetcherReturn<TTarget> {\n  const targetRef = useRef(target);\n  const optionsRef = useRef(options);\n  const submissionIdRef = useRef(0);\n  const [formData, setFormData] = useState<FormData | null>(null);\n  const { mutation, mutatePreparedAsync } = useMutationLifecycle<\n    TTarget,\n    InferMutationError<TTarget> | FetcherInputError\n  >(target, options);\n\n  targetRef.current = target;\n  optionsRef.current = options;\n\n  const submitAsync = useCallback(\n    async (input?: FetcherInput<TTarget>) => {\n      const submissionId = ++submissionIdRef.current;\n      const submittedFormData = isFormData(input) ? input : null;\n      setFormData(submittedFormData);\n\n      try {\n        return await mutatePreparedAsync(() => {\n          try {\n            return (\n              submittedFormData\n                ? mapFetcherFormData(targetRef.current, submittedFormData, optionsRef.current)\n                : input\n            ) as InferMutationVariables<TTarget>;\n          } catch (error) {\n            throw new FetcherInputError(error);\n          }\n        });\n      } finally {\n        if (submissionId === submissionIdRef.current) {\n          setFormData(null);\n        }\n      }\n    },\n    [mutatePreparedAsync],\n  ) as FetcherSubmitAsync<TTarget>;\n\n  const submit = useCallback(\n    (input?: FetcherInput<TTarget>) => {\n      void submitAsync(input as never).catch(() => {});\n    },\n    [submitAsync],\n  ) as FetcherSubmit<TTarget>;\n\n  const Form = useMemo(() => {\n    const FetcherForm = ({ action, method, encType, onSubmit, ...props }: FetcherFormProps) => {\n      const targetValue = targetRef.current;\n      const metadata = getAPIRouteRefMetadata(targetValue);\n      const nativeAction = action ?? resolveFetcherFormAction(targetValue, metadata);\n      const nativeMethod =\n        method ??\n        (metadata && (metadata.method === \"GET\" || metadata.method === \"POST\")\n          ? metadata.method.toLowerCase()\n          : metadata\n            ? \"post\"\n            : undefined);\n      const functionAction = typeof nativeAction === \"function\";\n\n      const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n        onSubmit?.(event);\n        if (event.defaultPrevented) return;\n\n        event.preventDefault();\n        const submitter = getSubmitter(event);\n        const nextFormData = createSubmitterFormData(event.currentTarget, submitter);\n        formDataContexts.set(nextFormData, {\n          form: event.currentTarget,\n          submitter,\n        });\n        void submitAsync(nextFormData as never).catch(() => {});\n      };\n\n      return createElement(\"form\", {\n        ...props,\n        action: nativeAction as FormHTMLAttributes<HTMLFormElement>[\"action\"],\n        method: functionAction ? undefined : nativeMethod,\n        encType: functionAction ? undefined : encType,\n        onSubmit: handleSubmit,\n      });\n    };\n\n    FetcherForm.displayName = \"FetcherForm\";\n    return FetcherForm;\n  }, [submitAsync]);\n\n  const reset = useCallback(() => {\n    submissionIdRef.current += 1;\n    setFormData(null);\n    mutation.reset();\n  }, [mutation.reset]);\n\n  return useMemo(\n    () => ({\n      state: mutation.pending ? \"submitting\" : \"idle\",\n      status: mutation.status,\n      pending: mutation.pending,\n      paused: mutation.paused,\n      data: mutation.data,\n      error: mutation.error,\n      variables: mutation.variables,\n      formData,\n      submit,\n      submitAsync,\n      Form,\n      reset,\n    }),\n    [\n      Form,\n      formData,\n      mutation.data,\n      mutation.error,\n      mutation.paused,\n      mutation.pending,\n      mutation.status,\n      mutation.variables,\n      reset,\n      submit,\n      submitAsync,\n    ],\n  );\n}\n\nfunction mapFetcherFormData<TTarget extends AnyMutationTarget>(\n  target: TTarget,\n  formData: FormData,\n  options: UseFetcherOptions<TTarget>,\n): InferMutationVariables<TTarget> | FormData {\n  const context = formDataContexts.get(formData) ?? { form: null, submitter: null };\n  if (options.mapFormData) {\n    return options.mapFormData(formData, context);\n  }\n  if (!isAPIRouteRef(target)) {\n    return formData;\n  }\n\n  const method = getAPIRouteRefMetadata(target)?.method;\n  const query = method === \"GET\" || method === \"HEAD\";\n  const encoding = context.submitter?.getAttribute(\"formenctype\") ?? context.form?.enctype;\n  if (\n    !query &&\n    (encoding?.toLowerCase() === \"multipart/form-data\" ||\n      Array.from(formData.values()).some((value) => typeof value !== \"string\"))\n  ) {\n    // Keep files and duplicate fields intact without changing the caller's input\n    // or bypassing the unsafe-key filtering used by the JSON mapping path.\n    const body = new FormData();\n    for (const [key, value] of formData) {\n      if (!isUnsafeFormKey(key)) body.append(key, value);\n    }\n    return { body } as InferMutationVariables<TTarget>;\n  }\n\n  const values = formDataToObject(formData);\n  return (query ? { query: values } : { body: values }) as InferMutationVariables<TTarget>;\n}\n\nfunction resolveFetcherFormAction(\n  target: AnyMutationTarget,\n  metadata: ReturnType<typeof getAPIRouteRefMetadata>,\n): string | AnyMutationTarget | undefined {\n  if (!metadata) return isProgressiveFormAction(target) ? target : undefined;\n  if (metadata.sameOrigin) return metadata.path;\n\n  return new URL(metadata.path, metadata.baseURL).href;\n}\n\nfunction formDataToObject(\n  formData: FormData,\n): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n  const output: Record<string, FormDataEntryValue | FormDataEntryValue[]> = Object.create(null);\n  for (const [key, value] of formData.entries()) {\n    if (isUnsafeFormKey(key)) continue;\n    const current = output[key];\n    if (current === undefined) {\n      output[key] = value;\n    } else if (Array.isArray(current)) {\n      current.push(value);\n    } else {\n      output[key] = [current, value];\n    }\n  }\n  return output;\n}\n\nfunction isUnsafeFormKey(key: string): boolean {\n  return key === \"__proto__\" || key === \"constructor\" || key === \"prototype\";\n}\n\nfunction createSubmitterFormData(form: HTMLFormElement, submitter: HTMLElement | null): FormData {\n  try {\n    return new FormData(form, submitter as HTMLElement | undefined);\n  } catch {\n    const formData = new FormData(form);\n    const candidate = submitter as\n      | (HTMLElement & { disabled?: boolean; name?: string; value?: string })\n      | null;\n    if (candidate && !candidate.disabled && candidate.name) {\n      formData.append(candidate.name, candidate.value ?? \"\");\n    }\n    return formData;\n  }\n}\n\nfunction getSubmitter(event: FormEvent<HTMLFormElement>): HTMLElement | null {\n  const nativeEvent = event.nativeEvent as SubmitEvent;\n  return nativeEvent.submitter instanceof HTMLElement ? nativeEvent.submitter : null;\n}\n\nfunction isProgressiveFormAction(target: AnyMutationTarget): boolean {\n  const candidate = target as AnyMutationTarget & {\n    __farmServerFn?: unknown;\n    $$FORM_ACTION?: unknown;\n    $$typeof?: unknown;\n  };\n  return (\n    candidate.__farmServerFn === true ||\n    typeof candidate.$$FORM_ACTION === \"function\" ||\n    candidate.$$typeof === Symbol.for(\"react.server.reference\")\n  );\n}\n\nfunction isFormData(value: unknown): value is FormData {\n  if (!value || typeof value !== \"object\") return false;\n  return (\n    (typeof FormData !== \"undefined\" && value instanceof FormData) ||\n    (Object.prototype.toString.call(value) === \"[object FormData]\" &&\n      typeof (value as { entries?: unknown }).entries === \"function\")\n  );\n}\n","import {\n  decodeFarmCacheInvalidations,\n  encodeFarmCacheInvalidations,\n  notifyFarmCacheInvalidation,\n  subscribeFarmCacheInvalidation,\n} from \"./cache-invalidation\";\n\nexport const FARM_CACHE_INVALIDATION_CHANNEL = \"farm:cache-invalidation\";\n\nexport type CrossTabCacheInvalidationOptions = {\n  /** Override the BroadcastChannel name, e.g. to isolate multiple apps on one origin. */\n  channelName?: string;\n};\n\ntype ActiveBridge = {\n  channelName: string;\n  refCount: number;\n  teardown: () => void;\n};\n\n// One bridge per tab regardless of how many callers enable it: a second\n// BroadcastChannel in the same tab would receive this tab's own posts and\n// re-apply every local invalidation as if it were remote.\n//\n// The guard lives on globalThis under the same registry the invalidation bus\n// uses, so duplicate copies of this module share it. A module-local guard only\n// protects the copy that declares it, while the bus underneath is global, so a\n// second copy would build its own bridge and the two would echo one local\n// invalidation between them without end (each bridge's applyingRemote flag is\n// private to its own closure and cannot suppress the other's replay).\nconst FARM_CACHE_INVALIDATION_BRIDGE = Symbol.for(\"farm.cacheInvalidationBridge\");\nconst bridgeGlobal = globalThis as typeof globalThis & {\n  [FARM_CACHE_INVALIDATION_BRIDGE]?: ActiveBridge;\n};\n\n/**\n * Bridge the cache invalidation bus across tabs of the same origin.\n *\n * Local invalidations are posted to a BroadcastChannel and applied in every\n * other tab through the normal invalidation path, so mounted stale queries\n * there refetch on their own. Only invalidation keys cross the channel, never\n * cached data, which keeps private and credentialed cache scoping untouched.\n *\n * Opt-in and idempotent. Returns a disposer; a no-op where BroadcastChannel\n * is unavailable (server rendering, older browsers).\n */\nexport function enableCrossTabCacheInvalidation(\n  options: CrossTabCacheInvalidationOptions = {},\n): () => void {\n  if (typeof BroadcastChannel !== \"function\") return () => {};\n\n  const channelName = options.channelName ?? FARM_CACHE_INVALIDATION_CHANNEL;\n  const existing = bridgeGlobal[FARM_CACHE_INVALIDATION_BRIDGE];\n  let bridge: ActiveBridge;\n  if (existing) {\n    if (existing.channelName !== channelName) {\n      throw new Error(\n        `Cross-tab cache invalidation is already enabled on channel \"${existing.channelName}\".`,\n      );\n    }\n    existing.refCount += 1;\n    bridge = existing;\n  } else {\n    bridge = createBridge(channelName);\n    bridgeGlobal[FARM_CACHE_INVALIDATION_BRIDGE] = bridge;\n  }\n\n  let disposed = false;\n  return () => {\n    if (disposed) return;\n    disposed = true;\n    // Release the bridge this caller actually claimed, so a disposer that\n    // outlives a teardown/re-enable cycle cannot decrement a later bridge.\n    bridge.refCount -= 1;\n    if (bridge.refCount === 0) {\n      bridge.teardown();\n      if (bridgeGlobal[FARM_CACHE_INVALIDATION_BRIDGE] === bridge) {\n        bridgeGlobal[FARM_CACHE_INVALIDATION_BRIDGE] = undefined;\n      }\n    }\n  };\n}\n\nfunction createBridge(channelName: string): ActiveBridge {\n  const channel = new BroadcastChannel(channelName);\n  let applyingRemote = false;\n  let pending: string[] = [];\n  let flushScheduled = false;\n  let closed = false;\n\n  const flush = () => {\n    flushScheduled = false;\n    if (closed || pending.length === 0) return;\n    const encoded = encodeFarmCacheInvalidations(pending);\n    pending = [];\n    if (encoded !== null) channel.postMessage(encoded);\n  };\n\n  const unsubscribe = subscribeFarmCacheInvalidation((key) => {\n    if (applyingRemote || closed) return;\n    // A mutation can invalidate several keys back to back; batch them into\n    // one message per microtask instead of one post per key.\n    pending.push(key);\n    if (!flushScheduled) {\n      flushScheduled = true;\n      queueMicrotask(flush);\n    }\n  });\n\n  channel.onmessage = (event: MessageEvent) => {\n    const keys = decodeFarmCacheInvalidations(\n      typeof event.data === \"string\" ? event.data : undefined,\n    );\n    if (keys.length === 0) return;\n    applyingRemote = true;\n    try {\n      for (const key of keys) notifyFarmCacheInvalidation(key);\n    } finally {\n      applyingRemote = false;\n    }\n  };\n\n  return {\n    channelName,\n    refCount: 1,\n    teardown() {\n      closed = true;\n      pending = [];\n      unsubscribe();\n      channel.onmessage = null;\n      channel.close();\n    },\n  };\n}\n","import {\n  getFarmClientDataCache,\n  type FarmClientCacheEntry,\n  type FarmClientCachePersistenceSink,\n  type FarmClientDataCache,\n} from \"./client-cache\";\n\n/**\n * Protocol version stamped into every persisted entry. Bump when the\n * persisted shape changes; mismatched entries are dropped on load.\n */\nexport const FARM_CLIENT_CACHE_PERSIST_VERSION = \"1\";\n\n/** Snapshot of a confirmed cache entry as stored by an adapter. */\nexport type PersistedEntry = {\n  data: unknown;\n  updatedAt: number;\n  staleAt: number;\n  gcAt?: number;\n  version: string;\n};\n\n/**\n * Storage contract for client cache persistence. Implement these callbacks\n * over any storage: IndexedDB, localStorage, OPFS, a native bridge. Farm owns\n * every policy decision (what, when, and whether to persist); the adapter is\n * plain keyed storage. `set` is an upsert.\n */\nexport type FarmClientCacheAdapter = {\n  keys(): Promise<string[]>;\n  get(key: string): Promise<PersistedEntry | null>;\n  set(key: string, entry: PersistedEntry): Promise<void>;\n  delete(key: string): Promise<void>;\n  clear(): Promise<void>;\n  /** Optional batch fast paths; the engine prefers them when present. */\n  getMany?(keys: string[]): Promise<Array<PersistedEntry | null>>;\n  setMany?(entries: Array<[string, PersistedEntry]>): Promise<void>;\n};\n\n/** Key-value client shape accepted by {@link storageClientCacheAdapter}. */\nexport type FarmClientCacheStorage = {\n  getItem<T = unknown>(key: string): Promise<T | null>;\n  setItem<T = unknown>(key: string, value: T): Promise<unknown>;\n  removeItem(key: string): Promise<unknown>;\n  getKeys?(base?: string): Promise<string[]>;\n  keys?(base?: string): Promise<string[]>;\n  clear?(base?: string): Promise<unknown>;\n};\n\nexport type ClientCachePersistenceOptions = {\n  /**\n   * Extra version salt, typically an app build or deploy id. Entries written\n   * under a different value are dropped on load.\n   */\n  version?: string;\n  /** Coarse additional filter on top of per-declaration `persist: true`. */\n  persistKey?: (key: string) => boolean;\n  /** Debounce for write-behind flushes. */\n  flushDelayMs?: number;\n};\n\n/**\n * Validate and type an adapter definition. Identity at runtime beyond shape\n * checking, mirroring `defineConfig`-style helpers.\n */\nexport function defineClientCacheAdapter(adapter: FarmClientCacheAdapter): FarmClientCacheAdapter {\n  for (const method of [\"keys\", \"get\", \"set\", \"delete\", \"clear\"] as const) {\n    if (typeof adapter?.[method] !== \"function\") {\n      throw new TypeError(\n        `defineClientCacheAdapter expects a \"${method}\" method. ` +\n          \"Implement keys/get/set/delete/clear over your storage.\",\n      );\n    }\n  }\n  return adapter;\n}\n\n/**\n * Adapt any Farm/unstorage-compatible key-value client to the client cache\n * adapter contract, mirroring the server's `storageCacheAdapter`. Without a\n * key enumeration method the adapter still persists but cannot warm-start.\n */\nexport function storageClientCacheAdapter(\n  storage: FarmClientCacheStorage,\n  options: { base?: string } = {},\n): FarmClientCacheAdapter {\n  if (\n    !storage ||\n    typeof storage.getItem !== \"function\" ||\n    typeof storage.setItem !== \"function\" ||\n    typeof storage.removeItem !== \"function\"\n  ) {\n    throw new TypeError(\"storageClientCacheAdapter expects a compatible key-value client.\");\n  }\n\n  const base = options.base ?? \"farm-client-cache\";\n  const entryKey = (key: string) => `${base}:${key}`;\n  const enumerate = storage.getKeys?.bind(storage) ?? storage.keys?.bind(storage);\n\n  return {\n    async keys() {\n      if (!enumerate) return [];\n      const keys = await enumerate(base);\n      const prefix = `${base}:`;\n      return keys.filter((key) => key.startsWith(prefix)).map((key) => key.slice(prefix.length));\n    },\n    async get(key) {\n      return (await storage.getItem<PersistedEntry>(entryKey(key))) ?? null;\n    },\n    async set(key, entry) {\n      await storage.setItem(entryKey(key), entry);\n    },\n    async delete(key) {\n      await storage.removeItem(entryKey(key));\n    },\n    async clear() {\n      if (storage.clear) {\n        await storage.clear(base);\n        return;\n      }\n      if (!enumerate) return;\n      const prefix = `${base}:`;\n      for (const key of await enumerate(base)) {\n        if (key.startsWith(prefix)) await storage.removeItem(key);\n      }\n    },\n  };\n}\n\ntype PersistenceEngine = {\n  adapter: FarmClientCacheAdapter;\n  cache: FarmClientDataCache;\n  version: string;\n  persistKey?: (key: string) => boolean;\n  flushDelayMs: number;\n  pendingSets: Map<string, PersistedEntry>;\n  pendingDeletes: Set<string>;\n  flushTimer: ReturnType<typeof setTimeout> | undefined;\n  hydrating: boolean;\n  disabled: boolean;\n  clearing: boolean;\n  /** The in-flight flush, so overlapping flushes serialize instead of racing. */\n  flushing: Promise<void> | undefined;\n};\n\nlet activeEngine: PersistenceEngine | undefined;\n\nfunction reportPersistenceFailure(error: unknown): void {\n  const report =\n    typeof reportError === \"function\" ? reportError : (console.error as (value: unknown) => void);\n  if (error instanceof Error) {\n    report(error);\n    return;\n  }\n  const normalized = new Error(\"Client cache persistence failed\");\n  (normalized as Error & { cause?: unknown }).cause = error;\n  report(normalized);\n}\n\nfunction disableEngine(engine: PersistenceEngine, error: unknown): void {\n  if (engine.disabled) return;\n  // The cache is disposable: on any adapter failure fall back to memory-only\n  // for the rest of the session instead of failing reads or writes.\n  engine.disabled = true;\n  engine.pendingSets.clear();\n  engine.pendingDeletes.clear();\n  if (engine.flushTimer !== undefined) {\n    clearTimeout(engine.flushTimer);\n    engine.flushTimer = undefined;\n  }\n  reportPersistenceFailure(error);\n}\n\nfunction scheduleFlush(engine: PersistenceEngine): void {\n  if (engine.disabled || engine.flushTimer !== undefined) return;\n  const timer = setTimeout(() => {\n    engine.flushTimer = undefined;\n    void flushEngine(engine);\n  }, engine.flushDelayMs);\n  (timer as unknown as { unref?: () => void }).unref?.();\n  engine.flushTimer = timer;\n}\n\nasync function flushEngine(engine: PersistenceEngine): Promise<void> {\n  // Serialize: a second flush scheduled while one is mid-await must not run its\n  // own adapter writes in parallel, or the two can resolve out of order and\n  // persist a stale value over a fresher one. Await the in-flight flush instead;\n  // its drain loop picks up whatever this caller queued.\n  if (engine.flushing) return engine.flushing;\n  if (engine.disabled || engine.clearing) return;\n  if (engine.pendingSets.size === 0 && engine.pendingDeletes.size === 0) return;\n\n  const run = (async () => {\n    // Drain until empty so entries queued during an await still flush, without a\n    // second concurrent loop. Re-check disabled/clearing after every await: a\n    // clear() that started mid-flush must stop further writes.\n    while (\n      !engine.disabled &&\n      !engine.clearing &&\n      (engine.pendingSets.size > 0 || engine.pendingDeletes.size > 0)\n    ) {\n      const sets = Array.from(engine.pendingSets.entries());\n      const deletes = Array.from(engine.pendingDeletes);\n      engine.pendingSets.clear();\n      engine.pendingDeletes.clear();\n      try {\n        if (sets.length > 0) {\n          if (engine.adapter.setMany) await engine.adapter.setMany(sets);\n          else for (const [key, entry] of sets) await engine.adapter.set(key, entry);\n        }\n        for (const key of deletes) await engine.adapter.delete(key);\n      } catch (error) {\n        disableEngine(engine, error);\n        return;\n      }\n    }\n  })();\n  engine.flushing = run;\n  try {\n    await run;\n  } finally {\n    engine.flushing = undefined;\n  }\n}\n\nasync function hydrateEngine(engine: PersistenceEngine): Promise<void> {\n  const now = Date.now();\n  const keys = await engine.adapter.keys();\n  if (keys.length === 0) return;\n\n  const persisted = engine.adapter.getMany\n    ? await engine.adapter.getMany(keys)\n    : await Promise.all(keys.map((key) => engine.adapter.get(key)));\n\n  engine.hydrating = true;\n  try {\n    for (let index = 0; index < keys.length; index += 1) {\n      const key = keys[index]!;\n      const entry = persisted[index];\n      if (engine.disabled) return;\n\n      if (\n        !entry ||\n        entry.version !== engine.version ||\n        (entry.gcAt !== undefined && now >= entry.gcAt)\n      ) {\n        engine.pendingDeletes.add(key);\n        continue;\n      }\n\n      // A live entry came from this session's server work and always wins.\n      if (engine.cache.get(key, now)) continue;\n\n      // Stale-but-visible: render the persisted data immediately and let the\n      // normal SWR path revalidate it on first read.\n      engine.cache.set(key, {\n        data: entry.data,\n        updatedAt: entry.updatedAt,\n        staleAt: 0,\n        gcAt: entry.gcAt,\n        status: \"success\",\n        error: null,\n        persist: true,\n      });\n    }\n  } finally {\n    engine.hydrating = false;\n  }\n  if (engine.pendingDeletes.size > 0) scheduleFlush(engine);\n}\n\nfunction createSink(engine: PersistenceEngine): FarmClientCachePersistenceSink {\n  return {\n    onSet(key, entry: FarmClientCacheEntry) {\n      if (engine.disabled || engine.hydrating) return;\n      if (!entry.persist || entry.fetching || entry.error || entry.status === \"pending\") return;\n      if (engine.persistKey && !engine.persistKey(key)) return;\n      engine.pendingDeletes.delete(key);\n      engine.pendingSets.set(key, {\n        data: entry.data,\n        updatedAt: entry.updatedAt,\n        staleAt: entry.staleAt,\n        gcAt: entry.gcAt,\n        version: engine.version,\n      });\n      scheduleFlush(engine);\n    },\n    onDelete(key) {\n      if (engine.disabled) return;\n      engine.pendingSets.delete(key);\n      engine.pendingDeletes.add(key);\n      scheduleFlush(engine);\n    },\n    onClear() {\n      // clearPersistedCache awaits the adapter itself; skip the fire-and-forget\n      // clear so one logout does not race two clears (and two error reports).\n      if (engine.disabled || engine.clearing) return;\n      engine.pendingSets.clear();\n      engine.pendingDeletes.clear();\n      void engine.adapter.clear().catch((error) => disableEngine(engine, error));\n    },\n  };\n}\n\n/**\n * @internal Wire an adapter to the shared client cache. Called by the\n * generated client entry from the `cache.client.adapter` configuration; not\n * part of the public API. Returns a disposer.\n */\nexport function initPersistedClientCache(\n  adapter: FarmClientCacheAdapter,\n  options: ClientCachePersistenceOptions = {},\n): () => void {\n  defineClientCacheAdapter(adapter);\n  disposePersistedClientCache();\n\n  const engine: PersistenceEngine = {\n    adapter,\n    cache: getFarmClientDataCache(),\n    version: options.version\n      ? `${FARM_CLIENT_CACHE_PERSIST_VERSION}:${options.version}`\n      : FARM_CLIENT_CACHE_PERSIST_VERSION,\n    persistKey: options.persistKey,\n    flushDelayMs: options.flushDelayMs ?? 300,\n    pendingSets: new Map(),\n    pendingDeletes: new Set(),\n    flushTimer: undefined,\n    hydrating: false,\n    disabled: false,\n    clearing: false,\n    flushing: undefined,\n  };\n\n  activeEngine = engine;\n  engine.cache.attachPersistence(createSink(engine));\n  void hydrateEngine(engine).catch((error) => disableEngine(engine, error));\n\n  return () => {\n    if (activeEngine !== engine) return;\n    disposePersistedClientCache();\n  };\n}\n\n/**\n * @internal Entry point used by the generated client entries for the\n * `cache.client.adapter` configuration. Accepts the imported module namespace\n * and reports a misconfigured adapter without breaking application startup:\n * persistence is optional capability and must never block hydration.\n */\nexport function initConfiguredClientCachePersistence(\n  adapterModule: unknown,\n  options: ClientCachePersistenceOptions = {},\n): void {\n  try {\n    const adapter = (adapterModule as { default?: unknown } | null | undefined)?.default;\n    if (!adapter) {\n      throw new Error(\n        \"cache.client.adapter must default-export an adapter. \" +\n          \"Export defineClientCacheAdapter({ keys, get, set, delete, clear }) as the module default.\",\n      );\n    }\n    initPersistedClientCache(adapter as FarmClientCacheAdapter, options);\n  } catch (error) {\n    reportPersistenceFailure(error);\n  }\n}\n\n/** @internal Detach the active engine, flushing nothing further. */\nexport function disposePersistedClientCache(): void {\n  const engine = activeEngine;\n  if (!engine) return;\n  activeEngine = undefined;\n  // Hydration is asynchronous and may already be parked on an adapter read.\n  // Marking the engine disabled makes that in-flight pass stop before it writes,\n  // so a disposed engine cannot repopulate the shared cache after logout — or\n  // push the previous user's entries into whichever adapter is attached next.\n  engine.disabled = true;\n  engine.cache.attachPersistence(undefined);\n  if (engine.flushTimer !== undefined) {\n    clearTimeout(engine.flushTimer);\n    engine.flushTimer = undefined;\n  }\n  engine.pendingSets.clear();\n  engine.pendingDeletes.clear();\n}\n\n/**\n * Remove every persisted cache entry. Call on logout or any session change so\n * the next visitor on this device cannot warm-start into another user's data.\n * Safe to call when persistence is not configured.\n */\nexport async function clearPersistedCache(): Promise<void> {\n  const engine = activeEngine;\n  if (!engine) {\n    // Persistence is optional, but logout must mean the same thing with or\n    // without an adapter: the previous session's data stops being readable.\n    getFarmClientDataCache().clear();\n    return;\n  }\n  // Hold `clearing` for the whole operation. It both suppresses re-persist from\n  // the in-memory cache.clear() below and makes flushEngine bail, so no flush\n  // scheduled during the clear can write the signed-out user's data back.\n  engine.clearing = true;\n  try {\n    engine.pendingSets.clear();\n    engine.pendingDeletes.clear();\n    // Clearing the persisted copy alone leaves the in-memory cache holding the\n    // signed-out user's data, which a single-page app keeps serving to whoever\n    // uses the tab next. Drop both.\n    engine.cache.clear();\n    engine.pendingSets.clear();\n    engine.pendingDeletes.clear();\n    // Let an in-flight flush finish its current adapter write before wiping.\n    // Otherwise a write parked in `await adapter.set(...)` resolves after\n    // adapter.clear() and resurrects the data for the next visitor.\n    await engine.flushing;\n    engine.pendingSets.clear();\n    engine.pendingDeletes.clear();\n    await engine.adapter.clear();\n  } catch (error) {\n    disableEngine(engine, error);\n  } finally {\n    engine.clearing = false;\n  }\n}\n\n/** @internal Test hook: flush pending writes immediately. */\nexport async function flushPersistedClientCache(): Promise<void> {\n  const engine = activeEngine;\n  if (!engine) return;\n  if (engine.flushTimer !== undefined) {\n    clearTimeout(engine.flushTimer);\n    engine.flushTimer = undefined;\n  }\n  await flushEngine(engine);\n}\n","export {\n  APIClientError,\n  createApiClients,\n  createAPIClient,\n  createServerAPIClient,\n} from \"./api/client\";\nexport type {\n  ApiClients,\n  APIClient,\n  APIClientOptions,\n  APIClientSystemError,\n  APIClientWithoutIntegrationsOptions,\n  RouteAPIClient,\n  ServerAPIClient,\n  ServerAPIClientOptions,\n  ServerAPIClientWithoutIntegrationsOptions,\n} from \"./api/client\";\nexport type { FarmAPIStream } from \"./api/transport\";\nexport type { ClientHeaders } from \"./client-headers\";\nexport type {\n  ClientLifecycleHooks,\n  ClientRequestEvent,\n  ClientResponseEvent,\n} from \"./client-observers\";\nexport { useMutation } from \"./mutation-client\";\nexport type {\n  AnyMutationTarget,\n  InferMutationData,\n  InferMutationError,\n  InferMutationVariables,\n  MutationAsync,\n  MutationOptimisticContext,\n  MutationNetworkMode,\n  MutationStatus,\n  MutationTrigger,\n  UseMutationOptions,\n  UseMutationReturn,\n} from \"./mutation-client\";\nexport { useFetcher, FetcherInputError } from \"./fetcher-client\";\nexport type {\n  FetcherFormDataContext,\n  FetcherFormProps,\n  FetcherState,\n  FetcherSubmit,\n  FetcherSubmitAsync,\n  UseFetcherOptions,\n  UseFetcherReturn,\n} from \"./fetcher-client\";\nexport { useAction } from \"./server-fn-client\";\nexport type {\n  RouteActionTarget,\n  UseActionFormProps,\n  UseActionReturn,\n  UseServerFnOptions,\n} from \"./server-fn-client\";\nexport { fetchServerQuery, prefetchServerQuery, useServerQuery } from \"./server-query-client\";\nexport type {\n  ServerQueryFetchOptions,\n  UseServerQueryOptions,\n  UseServerQueryResult,\n} from \"./server-query-client\";\nexport {\n  enableCrossTabCacheInvalidation,\n  FARM_CACHE_INVALIDATION_CHANNEL,\n} from \"./cache-invalidation-broadcast\";\nexport type { CrossTabCacheInvalidationOptions } from \"./cache-invalidation-broadcast\";\nexport {\n  clearPersistedCache,\n  defineClientCacheAdapter,\n  FARM_CLIENT_CACHE_PERSIST_VERSION,\n  // The generated client entry imports this by name when `cache.client.adapter`\n  // is configured, so it has to be reachable from this entry point.\n  initConfiguredClientCachePersistence,\n  initPersistedClientCache,\n  storageClientCacheAdapter,\n} from \"./client-cache-persistence\";\n// The shared browser store. Features that keep their own rows (for example\n// `@farm.js/sync`) persist through it rather than opening a second store.\nexport { getFarmClientDataCache, normalizeFarmClientCacheKey } from \"./client-cache\";\nexport type {\n  FarmClientCacheEntry,\n  FarmClientCacheKey,\n  FarmClientCacheStatus,\n} from \"./client-cache\";\nexport type {\n  ClientCachePersistenceOptions,\n  FarmClientCacheAdapter,\n  FarmClientCacheStorage,\n  PersistedEntry,\n} from \"./client-cache-persistence\";\nexport {\n  api,\n  endpoint,\n  defineIntegrationAPI,\n  defineIntegrationAPIOperation,\n} from \"./integration-api\";\nexport type {\n  FarmIntegrationAPI,\n  FarmIntegrationAPIBodyFormat,\n  FarmIntegrationAPIMethod,\n  FarmIntegrationAPIOperation,\n  FarmIntegrationAPIResponseFormat,\n} from \"./integration-api\";\nexport { createIntegrationClient, IntegrationClientError } from \"./integration-client\";\nexport {\n  createIntegrationApi,\n  createIntegrationClients,\n  createIntegrations,\n  createIntegrationServerClient,\n  getIntegrationAPIManifest,\n  integrationClients,\n  integrationsClient,\n  integrationsServer,\n} from \"./integration-client\";\nexport type {\n  IntegrationClient,\n  IntegrationClientAliases,\n  IntegrationClientRoot,\n  IntegrationClientOptions,\n  IntegrationClientRequestOptions,\n  IntegrationAPI,\n  IntegrationClients,\n  IntegrationClientData,\n  IntegrationOperationResult,\n  InferIntegrationOperationBody,\n  InferIntegrationOperationQuery,\n  InferIntegrationOperationResponse,\n  IntegrationServerClient,\n  IntegrationServerClientAliases,\n  IntegrationServerClientOptions,\n  IntegrationServerClientRequestOptions,\n  IntegrationServerClientRoot,\n  IntegrationServerRequestLike,\n} from \"./integration-client\";\nexport { createStore } from \"./store\";\nexport { getTheme, setTheme, toggleTheme, useTheme } from \"./theme/client\";\nexport type { UseThemeResult } from \"./theme/client\";\nexport type {\n  Store,\n  StoreApi,\n  StoreFields,\n  StoreListener,\n  StoreKeyListener,\n  StoreKeysListener,\n  StorePatch,\n  StoreState,\n  StoreValueUpdater,\n} from \"./store\";\n\n// SPA Navigation exports\nexport { Link } from \"./client/link\";\nexport {\n  useBlocker,\n  useNavigation,\n  usePageState,\n  useRouter,\n  useScrollRestoration,\n} from \"./client/router\";\nexport {\n  SPARouter,\n  getRouter,\n  navigateTo,\n  prefetch,\n  pushState,\n  readPageState,\n  replaceState,\n} from \"./client/spa-router\";\nexport { installChunkErrorRecovery, isChunkLoadError } from \"./client/chunk-recovery\";\nexport { createClientPluginManager, FarmClientPluginManager } from \"./client/plugin\";\nexport type {\n  LinkProps,\n  PrefetchBehavior,\n  LinkDefaultRoute,\n  DefaultRoutePath,\n  DefaultRoutePattern,\n  DefaultRouteHref,\n  ExternalHref,\n  LinkExternalUriSchemes,\n  RouteHref,\n  RouteParamValue,\n  RouteOptionalParamValue,\n  RouteParams,\n} from \"./client/link\";\nexport type { FarmChunkRecoveryOptions } from \"./client/chunk-recovery\";\nexport type {\n  FarmClientHydrationCompleteEvent,\n  FarmClientHydrationEvent,\n  FarmClientHydrationMode,\n  FarmClientHydrationSession,\n  FarmClientLocation,\n  FarmClientNavigationAction,\n  FarmClientNavigationErrorEvent,\n  FarmClientNavigationEvent,\n  FarmClientNavigationLoadedEvent,\n  FarmClientNavigationResolvedEvent,\n  FarmClientNavigationSession,\n  FarmClientPerformanceEvent,\n  FarmClientPlugin,\n  FarmClientPluginCloseEvent,\n  FarmClientPluginEnforce,\n  FarmClientPluginErrorEvent,\n  FarmClientPluginErrorPhase,\n  FarmClientPluginManagerOptions,\n  FarmClientPluginMetadata,\n  FarmClientPluginRegistration,\n  FarmClientPluginRouter,\n  FarmClientPluginSetupEvent,\n  FarmClientPluginStateEvent,\n} from \"./client/plugin\";\nexport type { UseBlockerOptions, UseBlockerReturn, UseRouterOptions } from \"./client/router\";\nexport type {\n  FarmNavigateOptions,\n  FarmNavigationBlocker,\n  FarmNavigationBlockerContext,\n  FarmNavigationListener,\n  FarmNavigationLocation,\n  FarmNavigationState,\n  FarmViewTransitionMode,\n} from \"./client/spa-router\";\n","import { useSyncExternalStore } from \"react\";\n\nexport type StoreState = Record<string, any>;\nexport type StoreValueUpdater<T> = T | ((previous: T) => T);\nexport type StorePatch<T extends StoreState> = Partial<T> | ((state: T) => Partial<T>);\nexport type StoreListener<T extends StoreState> = (state: T, previousState: T) => void;\nexport type StoreKeyListener<T extends StoreState, K extends keyof T> = (\n  value: T[K],\n  previousValue: T[K],\n) => void;\nexport type StoreKeysListener<T extends StoreState, K extends keyof T> = (\n  value: Pick<T, K>,\n  previousValue: Pick<T, K>,\n) => void;\n\ntype StoreSubscription<T extends StoreState> = {\n  keys: readonly PropertyKey[] | null;\n  notify: (state: T, previousState: T) => void;\n};\n\ntype ReservedStoreKey = \"use\" | \"get\" | \"set\" | \"replace\" | \"reset\" | \"subscribe\";\n\ntype FieldAccessor<T extends StoreState, K extends keyof T> = {\n  (): T[K];\n  get(): T[K];\n  set(value: StoreValueUpdater<T[K]>): T[K];\n  subscribe(listener: StoreKeyListener<T, K>): () => void;\n};\n\nexport type StoreFields<T extends StoreState> = {\n  [K in keyof T]: FieldAccessor<T, K>;\n};\n\nexport interface StoreApi<T extends StoreState> {\n  use(): T;\n  use<K extends keyof T>(key: K): T[K];\n  use<K extends keyof T>(keys: readonly K[]): Pick<T, K>;\n  get(): T;\n  get<K extends keyof T>(key: K): T[K];\n  set<K extends keyof T>(key: K, value: StoreValueUpdater<T[K]>): T[K];\n  set(patch: StorePatch<T>): T;\n  replace(nextState: T | ((state: T) => T)): T;\n  reset(): T;\n  subscribe(listener: StoreListener<T>): () => void;\n  subscribe<K extends keyof T>(key: K, listener: StoreKeyListener<T, K>): () => void;\n  subscribe<K extends keyof T>(keys: readonly K[], listener: StoreKeysListener<T, K>): () => void;\n}\n\nexport type Store<T extends StoreState, TMethods extends Record<string, any> = {}> = StoreApi<T> &\n  StoreFields<T> &\n  TMethods;\n\nconst RESERVED_STORE_KEYS = new Set<ReservedStoreKey>([\n  \"use\",\n  \"get\",\n  \"set\",\n  \"replace\",\n  \"reset\",\n  \"subscribe\",\n]);\n\nfunction cloneState<T extends StoreState>(state: T): T {\n  return { ...state };\n}\n\nfunction pickState<T extends StoreState, K extends keyof T>(\n  state: T,\n  keys: readonly K[],\n): Pick<T, K> {\n  const slice = {} as Pick<T, K>;\n\n  for (const key of keys) {\n    slice[key] = state[key];\n  }\n\n  return slice;\n}\n\nfunction getEnumerableKeys<T extends StoreState>(state: T): (keyof T)[] {\n  return Reflect.ownKeys(state).filter((key) =>\n    Object.prototype.propertyIsEnumerable.call(state, key),\n  ) as (keyof T)[];\n}\n\nfunction getChangedKeys<T extends StoreState>(state: T, previousState: T): (keyof T)[] {\n  const keys = new Set<keyof T>([...getEnumerableKeys(state), ...getEnumerableKeys(previousState)]);\n\n  return [...keys].filter((key) => !Object.is(state[key], previousState[key]));\n}\n\nfunction normalizeKeys<T extends StoreState, K extends keyof T>(keys: readonly K[]): readonly K[] {\n  return Array.from(new Set(keys));\n}\n\nfunction resolveValue<T>(value: StoreValueUpdater<T>, previousValue: T): T {\n  return typeof value === \"function\" ? (value as (previousValue: T) => T)(previousValue) : value;\n}\n\nfunction isStoreKey(value: unknown): value is string | number | symbol {\n  return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"symbol\";\n}\n\nexport function createStore<T extends StoreState, TMethods extends Record<string, any> = {}>(\n  initialState: T,\n  extend?: (store: Store<T>) => TMethods,\n): Store<T, TMethods> {\n  const initialSnapshot = cloneState(initialState);\n  let state = cloneState(initialState);\n  const subscriptions = new Set<StoreSubscription<T>>();\n\n  const addSubscription = (\n    keys: readonly (keyof T)[] | null,\n    notify: (state: T, previousState: T) => void,\n  ) => {\n    const subscription: StoreSubscription<T> = {\n      // Object property enumeration returns numeric keys as strings.\n      keys: keys?.map((key) => (typeof key === \"number\" ? String(key) : key)) ?? null,\n      notify,\n    };\n    subscriptions.add(subscription);\n    return () => {\n      subscriptions.delete(subscription);\n    };\n  };\n\n  const emit = (nextState: T, previousState: T) => {\n    const changedKeys = getChangedKeys(nextState, previousState);\n\n    if (changedKeys.length === 0) {\n      return;\n    }\n\n    const changedKeySet = new Set<PropertyKey>(changedKeys);\n\n    for (const subscription of subscriptions) {\n      if (subscription.keys === null || subscription.keys.some((key) => changedKeySet.has(key))) {\n        subscription.notify(nextState, previousState);\n      }\n    }\n  };\n\n  const getState = (key?: keyof T) => {\n    return key === undefined ? state : state[key];\n  };\n\n  const replaceState = (nextState: T | ((state: T) => T)) => {\n    const previousState = state;\n    const resolvedState =\n      typeof nextState === \"function\" ? (nextState as (state: T) => T)(previousState) : nextState;\n    state = resolvedState;\n    emit(state, previousState);\n    return state;\n  };\n\n  const setState = (keyOrPatch: keyof T | StorePatch<T>, value?: StoreValueUpdater<T[keyof T]>) => {\n    const previousState = state;\n    let nextState: T;\n\n    if (isStoreKey(keyOrPatch)) {\n      const key = keyOrPatch as keyof T;\n      const nextValue = resolveValue(value as StoreValueUpdater<T[keyof T]>, previousState[key]);\n\n      if (Object.is(previousState[key], nextValue)) {\n        return nextValue;\n      }\n\n      nextState = {\n        ...previousState,\n        [key]: nextValue,\n      };\n      state = nextState;\n      emit(nextState, previousState);\n      return nextValue;\n    }\n\n    const patch: Partial<T> =\n      typeof keyOrPatch === \"function\"\n        ? (keyOrPatch as (state: T) => Partial<T>)(previousState)\n        : (keyOrPatch as Partial<T>);\n\n    nextState = {\n      ...previousState,\n      ...patch,\n    };\n    state = nextState;\n    emit(nextState, previousState);\n    return nextState;\n  };\n\n  const subscribeState = (\n    keyOrListener: keyof T | readonly (keyof T)[] | StoreListener<T>,\n    listener?: StoreKeyListener<T, keyof T> | StoreKeysListener<T, keyof T>,\n  ) => {\n    if (typeof keyOrListener === \"function\") {\n      return addSubscription(null, (nextState, previousState) => {\n        (keyOrListener as StoreListener<T>)(nextState, previousState);\n      });\n    }\n\n    if (Array.isArray(keyOrListener)) {\n      const keys = normalizeKeys(keyOrListener);\n      return addSubscription(keys, (nextState, previousState) => {\n        (listener as StoreKeysListener<T, keyof T>)(\n          pickState(nextState, keys),\n          pickState(previousState, keys),\n        );\n      });\n    }\n\n    const key = keyOrListener as keyof T;\n    return addSubscription([key], (nextState, previousState) => {\n      (listener as StoreKeyListener<T, keyof T>)(nextState[key], previousState[key]);\n    });\n  };\n\n  const useStateValue = <K extends keyof T>(keyOrKeys?: K | readonly K[]) => {\n    if (Array.isArray(keyOrKeys)) {\n      const keys = normalizeKeys(keyOrKeys);\n      let lastState = state;\n      let lastSlice = pickState(state, keys);\n      const getSnapshot = () => {\n        if (lastState !== state) {\n          lastState = state;\n          lastSlice = pickState(state, keys);\n        }\n\n        return lastSlice;\n      };\n\n      return useSyncExternalStore(\n        (notify) => addSubscription(keys, () => notify()),\n        getSnapshot,\n        getSnapshot,\n      );\n    }\n\n    if (isStoreKey(keyOrKeys)) {\n      return useSyncExternalStore(\n        (notify) => addSubscription([keyOrKeys], () => notify()),\n        () => state[keyOrKeys],\n        () => state[keyOrKeys],\n      );\n    }\n\n    return useSyncExternalStore(\n      (notify) => addSubscription(null, () => notify()),\n      () => state,\n      () => state,\n    );\n  };\n\n  const store = {\n    use: useStateValue,\n    get: getState,\n    set: setState,\n    replace: replaceState,\n    reset: () => replaceState(cloneState(initialSnapshot)),\n    subscribe: subscribeState,\n  } as Store<T>;\n\n  for (const key of getEnumerableKeys(initialSnapshot)) {\n    if (RESERVED_STORE_KEYS.has(key as ReservedStoreKey)) {\n      throw new Error(\n        `createStore does not allow the reserved key \"${String(key)}\" in the initial state.`,\n      );\n    }\n\n    const field = (() => useStateValue(key)) as FieldAccessor<T, typeof key>;\n    field.get = () => state[key];\n    field.set = (value) => setState(key, value) as T[typeof key];\n    field.subscribe = (listener) => subscribeState(key, listener as StoreKeyListener<T, keyof T>);\n\n    Object.defineProperty(store, key, {\n      configurable: false,\n      enumerable: true,\n      value: field,\n      writable: false,\n    });\n  }\n\n  if (extend) {\n    const methods = extend(store);\n\n    for (const [name, method] of Object.entries(methods)) {\n      if (name in store) {\n        throw new Error(\n          `createStore cannot attach the method \"${name}\" because it already exists.`,\n        );\n      }\n\n      Object.defineProperty(store, name, {\n        configurable: false,\n        enumerable: true,\n        value: method,\n        writable: false,\n      });\n    }\n  }\n\n  return store as Store<T, TMethods>;\n}\n","\"use client\";\n\nimport { useSyncExternalStore } from \"react\";\nimport { getFarmThemeServerSnapshot } from \"./bridge\";\nimport { getTheme, setTheme, subscribeTheme, toggleTheme } from \"./runtime\";\nimport type { FarmThemePreference, FarmThemeSnapshot, FarmResolvedTheme } from \"./types\";\n\nexport { getTheme, setTheme, toggleTheme } from \"./runtime\";\n\nfunction getHydrationSnapshot(): FarmThemeSnapshot {\n  if (typeof window !== \"undefined\" && window.__FARM_THEME__?.serverSnapshot) {\n    return window.__FARM_THEME__.serverSnapshot;\n  }\n  return getFarmThemeServerSnapshot();\n}\n\nexport interface UseThemeResult extends FarmThemeSnapshot {\n  setTheme(theme: FarmThemePreference): void;\n  toggleTheme(): FarmResolvedTheme;\n}\n\nexport function useTheme(): UseThemeResult {\n  const snapshot = useSyncExternalStore(subscribeTheme, getTheme, getHydrationSnapshot);\n  return {\n    ...snapshot,\n    setTheme,\n    toggleTheme,\n  };\n}\n","\"use client\";\n\nimport type {\n  FarmResolvedTheme,\n  FarmThemePreference,\n  FarmThemeRuntime,\n  FarmThemeSnapshot,\n} from \"./types\";\n\ndeclare global {\n  interface Window {\n    __FARM_THEME__?: FarmThemeRuntime;\n  }\n}\n\nconst FALLBACK_CLIENT_SNAPSHOT: FarmThemeSnapshot = Object.freeze({\n  theme: \"system\",\n  resolvedTheme: \"light\",\n  mounted: true,\n});\n\nlet cachedClientSnapshot = FALLBACK_CLIENT_SNAPSHOT;\n\nfunction snapshotsMatch(left: FarmThemeSnapshot, right: FarmThemeSnapshot): boolean {\n  return (\n    left.theme === right.theme &&\n    left.resolvedTheme === right.resolvedTheme &&\n    left.mounted === right.mounted\n  );\n}\n\nexport function getTheme(): FarmThemeSnapshot {\n  const next =\n    typeof window === \"undefined\" ? FALLBACK_CLIENT_SNAPSHOT : window.__FARM_THEME__?.snapshot;\n  if (!next) return cachedClientSnapshot;\n  if (!snapshotsMatch(cachedClientSnapshot, next)) cachedClientSnapshot = next;\n  return cachedClientSnapshot;\n}\n\nexport function setTheme(theme: FarmThemePreference): void {\n  const runtime = typeof window === \"undefined\" ? undefined : window.__FARM_THEME__;\n  if (!runtime) {\n    throw new Error(\"The FARMJS theme runtime is not enabled. Add `theme` to farm.config.ts.\");\n  }\n  runtime.setTheme(theme);\n}\n\nexport function toggleTheme(): FarmResolvedTheme {\n  const next = getTheme().resolvedTheme === \"dark\" ? \"light\" : \"dark\";\n  setTheme(next);\n  return next;\n}\n\nexport function subscribeTheme(listener: () => void): () => void {\n  if (typeof window === \"undefined\") return () => {};\n  const handleThemeChange = () => {\n    getTheme();\n    listener();\n  };\n  window.addEventListener(\"farm:themechange\", handleThemeChange);\n  return () => window.removeEventListener(\"farm:themechange\", handleThemeChange);\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { forwardRef, useEffect, useRef, useCallback, type AnchorHTMLAttributes } from \"react\";\nimport {\n  buildFarmRoutePath,\n  type FarmRouterBuildOptions,\n  type FarmRouterPathParam,\n  type FarmRouterPathParams,\n} from \"../router\";\nimport { resolveFarmNavigationURL } from \"./navigation-url\";\nimport type { FarmViewTransitionMode } from \"./spa-router\";\nimport { isFarmLocaleChangeHref, localizeActiveFarmHref } from \"../i18n/client-runtime\";\nimport type { FarmI18nLocale } from \"../i18n/types\";\nimport { getFarmTrailingSlashPreference } from \"../trailing-slash\";\nimport { applyFarmBasePath, getFarmBasePath } from \"../base-path\";\nimport { useOptionalFarm } from \"../provider\";\n\n/**\n * Prefetch strategy (TanStack Router–style):\n * - \"intent\": prefetch on hover and touchstart (with prefetchDelay)\n * - \"viewport\": prefetch when link enters viewport (IntersectionObserver)\n * - \"render\": prefetch as soon as the link is mounted\n * - \"none\" | false: no prefetch\n */\nexport type PrefetchBehavior = false | \"intent\" | \"viewport\" | \"render\" | \"none\";\n\n/** @internal Legacy prefetch mode for backward compatibility */\ntype PrefetchLegacy = boolean | \"hover\" | \"viewport\" | \"none\";\n\n/**\n * Augment this interface via the generated farm.d.ts so Link href is typed\n * without passing a generic. Defaults to string when not augmented.\n */\nexport interface LinkDefaultRoute {}\n\nexport type DefaultRoutePath = LinkDefaultRoute extends { _: infer TRoute extends string }\n  ? TRoute\n  : string;\n\nexport type DefaultRoutePattern = LinkDefaultRoute extends {\n  pattern: infer TRoute extends string;\n}\n  ? TRoute\n  : DefaultRoutePath;\n\nexport type DefaultRouteHref = DefaultRoutePath | DefaultRoutePattern;\n\nexport type RouteHref<TRoute extends string> =\n  | TRoute\n  | `${TRoute}?${string}`\n  | `${TRoute}#${string}`\n  | `${TRoute}?${string}#${string}`;\n\n/** A generated route with params already filled into its pathname. */\nexport type ResolvedRouteHref = RouteHref<DefaultRoutePath>;\n\nexport type RouteParamValue = Exclude<FarmRouterPathParam, null | undefined>;\nexport type RouteOptionalParamValue = FarmRouterPathParam;\nexport type RouteParams<TRoute extends string> = string extends TRoute\n  ? FarmRouterPathParams\n  : ExtractRouteParams<StripRouteSuffix<TRoute>>;\n\n/** URI schemes recognized as typed external Link targets. Apps may augment this interface. */\nexport interface LinkExternalUriSchemes {\n  about: true;\n  blob: true;\n  data: true;\n  file: true;\n  ftp: true;\n  ftps: true;\n  geo: true;\n  git: true;\n  http: true;\n  https: true;\n  im: true;\n  intent: true;\n  irc: true;\n  ircs: true;\n  magnet: true;\n  mailto: true;\n  market: true;\n  sms: true;\n  ssh: true;\n  tel: true;\n  urn: true;\n  vscode: true;\n  webcal: true;\n  ws: true;\n  wss: true;\n}\n\ntype ExternalUriScheme = Extract<keyof LinkExternalUriSchemes, string>;\n\ntype UriSchemeLetter =\n  | \"a\"\n  | \"b\"\n  | \"c\"\n  | \"d\"\n  | \"e\"\n  | \"f\"\n  | \"g\"\n  | \"h\"\n  | \"i\"\n  | \"j\"\n  | \"k\"\n  | \"l\"\n  | \"m\"\n  | \"n\"\n  | \"o\"\n  | \"p\"\n  | \"q\"\n  | \"r\"\n  | \"s\"\n  | \"t\"\n  | \"u\"\n  | \"v\"\n  | \"w\"\n  | \"x\"\n  | \"y\"\n  | \"z\";\ntype UriSchemeStart = UriSchemeLetter | Uppercase<UriSchemeLetter>;\ntype UriSchemeCharacter =\n  | UriSchemeStart\n  | \"0\"\n  | \"1\"\n  | \"2\"\n  | \"3\"\n  | \"4\"\n  | \"5\"\n  | \"6\"\n  | \"7\"\n  | \"8\"\n  | \"9\"\n  | \"+\"\n  | \"-\"\n  | \".\";\ntype IsUriSchemeTail<TValue extends string> = TValue extends \"\"\n  ? true\n  : TValue extends `${infer First}${infer Rest}`\n    ? First extends UriSchemeCharacter\n      ? IsUriSchemeTail<Rest>\n      : false\n    : false;\ntype IsUriScheme<TValue extends string> = TValue extends `${infer First}${infer Rest}`\n  ? First extends UriSchemeStart\n    ? IsUriSchemeTail<Rest>\n    : false\n  : false;\n\ntype KnownExternalHref = `//${string}` | `${ExternalUriScheme}:${string}`;\n\n/** External URLs; these are never type-checked as routes. */\nexport type ExternalHref<THref extends string = string> = string extends THref\n  ? KnownExternalHref\n  : THref extends `//${string}`\n    ? THref\n    : THref extends `${infer Scheme}:${string}`\n      ? IsUriScheme<Scheme> extends true\n        ? THref\n        : never\n      : never;\n\ntype StripRouteSuffix<TRoute extends string> = TRoute extends `${infer Path}?${string}`\n  ? StripRouteSuffix<Path>\n  : TRoute extends `${infer Path}#${string}`\n    ? StripRouteSuffix<Path>\n    : TRoute;\n\ntype ExtractRouteParams<TRoute extends string> = Simplify<\n  ExtractOptionalCatchAllParams<TRoute> &\n    ExtractCatchAllParams<TRoute> &\n    ExtractDynamicParams<TRoute>\n>;\n\ntype ExtractOptionalCatchAllParams<TRoute extends string> =\n  TRoute extends `${string}[[...${infer Param}]]${infer Rest}`\n    ? { [Key in Param]?: RouteOptionalParamValue } & ExtractOptionalCatchAllParams<Rest>\n    : {};\n\ntype ExtractCatchAllParams<TRoute extends string> =\n  TRoute extends `${string}[...${infer Param}]${infer Rest}`\n    ? Param extends `[...${string}`\n      ? ExtractCatchAllParams<Rest>\n      : { [Key in Param]: RouteParamValue } & ExtractCatchAllParams<Rest>\n    : {};\n\ntype ExtractDynamicParams<TRoute extends string> =\n  TRoute extends `${string}[${infer Param}]${infer Rest}`\n    ? Param extends `...${string}` | `[...${string}`\n      ? ExtractDynamicParams<Rest>\n      : { [Key in Param]: RouteParamValue } & ExtractDynamicParams<Rest>\n    : {};\n\ntype Simplify<T> = { [Key in keyof T]: T[Key] } & {};\n\ntype HasRouteParams<TRoute extends string> = keyof RouteParams<TRoute> extends never ? false : true;\n\ntype RoutesWithRequiredParams<TRoute extends string> = TRoute extends string\n  ? HasRouteParams<TRoute> extends true\n    ? TRoute\n    : never\n  : never;\n\ntype LinkRouteParamsProps<TRoute extends string> = string extends TRoute\n  ? { params?: FarmRouterPathParams }\n  : HasRouteParams<TRoute> extends true\n    ? { params: RouteParams<TRoute> }\n    : { params?: FarmRouterPathParams };\n\ntype LinkRouteTargetProps<TRoute extends string> = [RoutesWithRequiredParams<TRoute>] extends [\n  never,\n]\n  ? {\n      /** Internal route path with all params already resolved. */\n      href: RouteHref<TRoute>;\n      params?: FarmRouterPathParams;\n    }\n  : TRoute extends string\n    ? {\n        /** Internal route path or route pattern. */\n        href: RouteHref<TRoute>;\n      } & LinkRouteParamsProps<TRoute>\n    : never;\n\ntype LinkExternalTargetProps<THref extends string = string> = {\n  /** External URL; these are never type-checked as app routes. */\n  href: ExternalHref<THref>;\n  params?: never;\n};\n\ntype LinkTargetProps<TRoute extends string, THref extends string> =\n  | LinkExternalTargetProps<THref>\n  | LinkRouteTargetProps<TRoute>;\n\nexport type LinkProps<\n  TRoute extends string = DefaultRouteHref,\n  THref extends string = string,\n> = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, \"href\"> &\n  LinkTargetProps<TRoute, THref> & {\n    /**\n     * When to prefetch. TanStack-style: \"intent\" (hover+touch), \"viewport\", \"render\", or \"none\".\n     * Legacy: true (intent+viewport), \"hover\" (intent), \"viewport\", false/\"none\".\n     */\n    prefetch?: PrefetchBehavior | PrefetchLegacy;\n    /** Search params appended after route params are resolved. */\n    query?: FarmRouterBuildOptions[\"query\"];\n    /** Hash appended after route params and search params are resolved. */\n    hash?: string;\n    /** Add a trailing slash to the generated internal href. */\n    trailingSlash?: boolean;\n    /** Delay in ms before intent-based prefetch (hover/touch). Default 50. */\n    prefetchDelay?: number;\n    /** Replace current history entry instead of pushing */\n    replace?: boolean;\n    /** Scroll to top after navigation (default: true) */\n    scroll?: boolean;\n    /** Wrap this SPA navigation in a browser View Transition when supported. */\n    viewTransition?: FarmViewTransitionMode;\n    /** Preserve the active locale by default, or navigate using this locale. */\n    locale?: FarmI18nLocale;\n  };\n\nfunction isModifierEvent(e: React.MouseEvent): boolean {\n  return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);\n}\n\nfunction isExternalUrl(href: string): boolean {\n  return href.startsWith(\"//\") || /^[a-zA-Z][a-zA-Z\\d+.-]*:/.test(href);\n}\n\nfunction getRouter(): {\n  prefetch(href: string): Promise<void>;\n  observeForPrefetch(el: HTMLAnchorElement): void;\n  unobserveForPrefetch(el: HTMLAnchorElement): void;\n  navigate(\n    href: string,\n    opts: { replace?: boolean; scroll?: boolean; viewTransition?: FarmViewTransitionMode },\n  ): void;\n} | null {\n  if (typeof window !== \"undefined\" && (window as any).__FARM_SPA_ROUTER__) {\n    return (window as any).__FARM_SPA_ROUTER__;\n  }\n  return null;\n}\n\nfunction normalizePrefetch(prefetch: LinkProps[\"prefetch\"]): {\n  intent: boolean;\n  viewport: boolean;\n  render: boolean;\n} {\n  if (prefetch === false || prefetch === \"none\") {\n    return { intent: false, viewport: false, render: false };\n  }\n  if (prefetch === true) {\n    return { intent: true, viewport: true, render: false };\n  }\n  if (prefetch === \"hover\") {\n    return { intent: true, viewport: false, render: false };\n  }\n  if (prefetch === \"intent\") {\n    return { intent: true, viewport: false, render: false };\n  }\n  if (prefetch === \"viewport\") {\n    return { intent: false, viewport: true, render: false };\n  }\n  if (prefetch === \"render\") {\n    return { intent: false, viewport: false, render: true };\n  }\n  return { intent: false, viewport: false, render: false };\n}\n\nfunction LinkInner<TRoute extends string = DefaultRouteHref, THref extends string = string>(\n  {\n    href,\n    params,\n    query,\n    hash,\n    trailingSlash,\n    prefetch = true,\n    prefetchDelay = 50,\n    replace = false,\n    scroll = true,\n    viewTransition = false,\n    locale,\n    onClick,\n    target,\n    onMouseEnter,\n    onMouseLeave,\n    onFocus,\n    onBlur,\n    onTouchStart,\n    ...props\n  }: LinkProps<TRoute, THref>,\n  ref: React.ForwardedRef<HTMLAnchorElement>,\n) {\n  const elementRef = useRef<HTMLAnchorElement | null>(null);\n  const intentTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const activePrefetch = useRef<symbol | null>(null);\n  const farm = useOptionalFarm();\n\n  const { intent, viewport, render } = normalizePrefetch(prefetch);\n  const baseHref = resolveLinkHref(href, params, {\n    query,\n    hash,\n    trailingSlash: trailingSlash ?? getFarmTrailingSlashPreference(),\n  });\n  const localizedHref = localizeActiveFarmHref(baseHref, locale);\n  const resolvedHref = isExternalUrl(localizedHref)\n    ? localizedHref\n    : applyFarmBasePath(localizedHref, farm?.basePath ?? getFarmBasePath());\n  const isExternal = isExternalUrl(resolvedHref);\n\n  const doPrefetch = useCallback(() => {\n    if (isExternal || activePrefetch.current) return;\n    const router = getRouter();\n    if (!router) return;\n    const token = Symbol(resolvedHref);\n    activePrefetch.current = token;\n    const reset = () => {\n      if (activePrefetch.current === token) activePrefetch.current = null;\n    };\n    try {\n      void router.prefetch(resolvedHref).then(reset, reset);\n    } catch {\n      reset();\n    }\n  }, [resolvedHref, isExternal]);\n\n  useEffect(() => {\n    activePrefetch.current = null;\n  }, [resolvedHref]);\n\n  useEffect(() => {\n    const element = elementRef.current;\n    if (!element || isExternal) return;\n\n    const router = getRouter();\n    if (!router) return;\n\n    if (viewport) {\n      router.observeForPrefetch(element);\n      return () => router.unobserveForPrefetch(element);\n    }\n  }, [resolvedHref, viewport, isExternal]);\n\n  useEffect(() => {\n    if (!render || isExternal) return;\n\n    let cancelled = false;\n    let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n    const tryRenderPrefetch = () => {\n      if (cancelled || activePrefetch.current) return;\n\n      const router = getRouter();\n      if (!router) {\n        timeoutId = setTimeout(tryRenderPrefetch, 30);\n        return;\n      }\n\n      doPrefetch();\n    };\n\n    tryRenderPrefetch();\n\n    return () => {\n      cancelled = true;\n      if (timeoutId) {\n        clearTimeout(timeoutId);\n      }\n    };\n  }, [render, isExternal, resolvedHref, doPrefetch]);\n\n  useEffect(() => {\n    return () => {\n      if (intentTimeoutRef.current) {\n        clearTimeout(intentTimeoutRef.current);\n        intentTimeoutRef.current = null;\n      }\n    };\n  }, []);\n\n  const cancelIntent = useCallback(() => {\n    if (intentTimeoutRef.current) {\n      clearTimeout(intentTimeoutRef.current);\n      intentTimeoutRef.current = null;\n    }\n  }, []);\n\n  const scheduleIntentPrefetch = useCallback(() => {\n    if (isExternal || !intent || activePrefetch.current) return;\n    cancelIntent();\n    intentTimeoutRef.current = setTimeout(() => {\n      intentTimeoutRef.current = null;\n      doPrefetch();\n    }, prefetchDelay);\n  }, [intent, isExternal, prefetchDelay, doPrefetch, cancelIntent]);\n\n  const handleMouseEnter = useCallback(\n    (event: React.MouseEvent<HTMLAnchorElement>) => {\n      onMouseEnter?.(event);\n      scheduleIntentPrefetch();\n    },\n    [onMouseEnter, scheduleIntentPrefetch],\n  );\n\n  const handleMouseLeave = useCallback(\n    (event: React.MouseEvent<HTMLAnchorElement>) => {\n      onMouseLeave?.(event);\n      cancelIntent();\n    },\n    [onMouseLeave, cancelIntent],\n  );\n\n  const handleTouchStart = useCallback(\n    (event: React.TouchEvent<HTMLAnchorElement>) => {\n      onTouchStart?.(event);\n      scheduleIntentPrefetch();\n    },\n    [onTouchStart, scheduleIntentPrefetch],\n  );\n\n  const handleFocus = useCallback(\n    (event: React.FocusEvent<HTMLAnchorElement>) => {\n      onFocus?.(event);\n      scheduleIntentPrefetch();\n    },\n    [onFocus, scheduleIntentPrefetch],\n  );\n\n  const handleBlur = useCallback(\n    (event: React.FocusEvent<HTMLAnchorElement>) => {\n      onBlur?.(event);\n      cancelIntent();\n    },\n    [onBlur, cancelIntent],\n  );\n\n  const handleClick = useCallback(\n    (event: React.MouseEvent<HTMLAnchorElement>) => {\n      onClick?.(event);\n      if (event.defaultPrevented) return;\n      if (isExternal) return;\n      if (event.currentTarget.hasAttribute(\"download\")) return;\n      if (target && target !== \"_self\") return;\n      if (isModifierEvent(event)) return;\n      if (event.button !== 0) return;\n\n      if (typeof window !== \"undefined\") {\n        event.preventDefault();\n        if (isFarmLocaleChangeHref(localizedHref)) {\n          window.location.assign(resolvedHref);\n          return;\n        }\n        const router = getRouter();\n        if (router) {\n          router.navigate(resolvedHref, { replace, scroll, viewTransition });\n        } else {\n          if (replace) window.location.replace(resolvedHref);\n          else window.location.href = resolvedHref;\n        }\n      }\n    },\n    [localizedHref, resolvedHref, replace, scroll, viewTransition, target, isExternal, onClick],\n  );\n\n  const setRefs = useCallback(\n    (node: HTMLAnchorElement | null) => {\n      elementRef.current = node;\n      if (typeof ref === \"function\") ref(node);\n      else if (ref) (ref as React.MutableRefObject<HTMLAnchorElement | null>).current = node;\n    },\n    [ref],\n  );\n\n  return (\n    <a\n      ref={setRefs}\n      href={resolvedHref}\n      target={target}\n      onClick={handleClick}\n      onMouseEnter={handleMouseEnter}\n      onMouseLeave={handleMouseLeave}\n      onFocus={handleFocus}\n      onBlur={handleBlur}\n      onTouchStart={handleTouchStart}\n      {...props}\n      data-farm-link=\"\"\n      data-replace={replace ? \"\" : undefined}\n      data-no-scroll={!scroll ? \"\" : undefined}\n      data-view-transition={\n        viewTransition === \"auto\" ? \"auto\" : viewTransition ? \"true\" : undefined\n      }\n    />\n  );\n}\n\nconst LinkWithRef = forwardRef(LinkInner);\nLinkWithRef.displayName = \"Link\";\n\ntype LinkComponentType = <TRoute extends string = DefaultRouteHref, THref extends string = string>(\n  props: LinkProps<TRoute, THref> & { ref?: React.ForwardedRef<HTMLAnchorElement> },\n) => React.ReactElement;\n\nexport const Link = LinkWithRef as unknown as LinkComponentType;\n\nfunction resolveLinkHref(\n  href: string,\n  params: FarmRouterPathParams | undefined,\n  options: FarmRouterBuildOptions,\n) {\n  if (isExternalUrl(href)) return href;\n\n  const { pathname, query, hash } = splitInternalHref(href);\n\n  const resolvedHref = buildFarmRoutePath(pathname, params, {\n    query: mergeQueryParams(query, options.query),\n    hash: options.hash ?? hash,\n    trailingSlash: options.trailingSlash,\n  });\n\n  return applyPreservedSearchParams(resolvedHref);\n}\n\nfunction splitInternalHref(href: string) {\n  try {\n    const url = new URL(href, \"http://farm.local\");\n    return {\n      pathname: url.pathname || \"/\",\n      query: url.searchParams,\n      hash: url.hash ? url.hash.slice(1) : undefined,\n    };\n  } catch {\n    const [withoutHash, rawHash] = href.split(\"#\", 2);\n    const [pathname, rawQuery] = withoutHash.split(\"?\", 2);\n    return {\n      pathname: pathname || \"/\",\n      query: new URLSearchParams(rawQuery || \"\"),\n      hash: rawHash,\n    };\n  }\n}\n\nfunction mergeQueryParams(\n  current: URLSearchParams,\n  next: FarmRouterBuildOptions[\"query\"],\n): URLSearchParams | undefined {\n  const merged = new URLSearchParams(current);\n\n  if (next instanceof URLSearchParams) {\n    for (const [key, value] of next.entries()) {\n      merged.append(key, value);\n    }\n  } else if (next) {\n    for (const [key, value] of Object.entries(next)) {\n      const values = Array.isArray(value) ? value : [value];\n      for (const item of values) {\n        if (item == null) continue;\n        merged.append(key, String(item));\n      }\n    }\n  }\n\n  return merged.toString() ? merged : undefined;\n}\n\nfunction applyPreservedSearchParams(href: string): string {\n  if (typeof window === \"undefined\") return href;\n\n  const manifest = (window as any).__FARM_MANIFEST__;\n  const routes =\n    manifest?.routes && typeof manifest.routes === \"object\" ? Object.values(manifest.routes) : [];\n  if (routes.length === 0) return href;\n\n  const url = resolveFarmNavigationURL(href, window.location.href);\n  const route = routes.find((candidate: any) => matchManifestRoute(url.pathname, candidate));\n  const preserve = Array.isArray((route as any)?.search?.preserve)\n    ? ((route as any).search.preserve as string[])\n    : [];\n  if (preserve.length === 0) return href;\n\n  const current = new URLSearchParams(window.location.search);\n  let changed = false;\n\n  for (const key of preserve) {\n    if (url.searchParams.has(key) || !current.has(key)) continue;\n    for (const value of current.getAll(key)) {\n      url.searchParams.append(key, value);\n      changed = true;\n    }\n  }\n\n  if (!changed) return href;\n  return `${url.pathname}${url.search}${url.hash}`;\n}\n\nfunction matchManifestRoute(pathname: string, route: any): boolean {\n  if (!route || !Array.isArray(route.segments)) return false;\n  const routeSegments = route.segments;\n  const normalized = pathname === \"/\" ? \"\" : pathname.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\");\n  const pathSegments = normalized ? normalized.split(\"/\") : [];\n  const hasCatchAll = routeSegments.some((segment: any) => segment.isCatchAll);\n\n  if (!hasCatchAll && pathSegments.length !== routeSegments.length) {\n    return false;\n  }\n\n  for (let index = 0; index < routeSegments.length; index++) {\n    const routeSegment = routeSegments[index];\n    const pathSegment = pathSegments[index];\n\n    if (routeSegment.isCatchAll) {\n      return true;\n    }\n\n    if (pathSegment === undefined) {\n      if (routeSegment.isOptional) continue;\n      return false;\n    }\n\n    if (!routeSegment.isDynamic && routeSegment.segment !== pathSegment) {\n      return false;\n    }\n  }\n\n  return pathSegments.length === routeSegments.length || hasCatchAll;\n}\n","export function isFarmExternalNavigationURL(url: URL, currentOrigin: string): boolean {\n  return (url.protocol !== \"http:\" && url.protocol !== \"https:\") || url.origin !== currentOrigin;\n}\n\n/**\n * Resolve a navigation target the way the platform does.\n *\n * Relative references resolve against the *document's* URL, not the origin.\n * Basing on the origin turns `?tab=2` into `/?tab=2` and `details` into\n * `/details`, discarding the directory the user is actually on, so every\n * navigation entry point has to resolve through here.\n *\n * Absolute paths and absolute URLs are unaffected by the choice of base.\n */\nexport function resolveFarmNavigationURL(href: string, documentUrl: string): URL {\n  return new URL(href, documentUrl);\n}\n","import IntlMessageFormat from \"intl-messageformat\";\nimport { getActiveFarmI18nSnapshot } from \"./bridge\";\nimport { localizeFarmHref, resolveFarmLocalePath } from \"./routing\";\nimport type {\n  FarmI18nClientSnapshot,\n  FarmI18nLocale,\n  FarmI18nMessageArgs,\n  FarmI18nMessageKey,\n  FarmTranslator,\n} from \"./types\";\n\ntype Listener = () => void;\n\nconst listeners = new Set<Listener>();\nconst compiled = new Map<string, IntlMessageFormat>();\nlet currentSnapshot: FarmI18nClientSnapshot | undefined;\n\nexport function getFarmI18nClientState(): FarmI18nClientSnapshot | undefined {\n  return currentSnapshot || getActiveFarmI18nSnapshot();\n}\n\nexport function subscribeFarmI18n(listener: Listener): () => void {\n  listeners.add(listener);\n  return () => listeners.delete(listener);\n}\n\nexport function _hydrateFarmI18n(snapshot: FarmI18nClientSnapshot | undefined): void {\n  if (!snapshot) return;\n  const changed = currentSnapshot?.locale !== snapshot.locale;\n  currentSnapshot = snapshot;\n  if (typeof window !== \"undefined\") window.__FARM_I18N__ = snapshot;\n  if (typeof document !== \"undefined\") {\n    document.documentElement.lang = snapshot.locale;\n    document.documentElement.dir = snapshot.direction;\n  }\n  if (changed) compiled.clear();\n  for (const listener of listeners) listener();\n}\n\n// Only own catalog entries count. `snapshot.messages` is a spread object that\n// inherits Object.prototype, so a bare lookup for a key like \"toString\" or\n// \"constructor\" would resolve to a native method. The server side guards the\n// same way (readOwnMessage), so without this the client diverges: the server\n// renders the literal key while the client feeds a function to IntlMessageFormat\n// and throws during hydration.\nconst readOwnMessage = (messages: Record<string, string>, key: string): string | undefined =>\n  Object.prototype.hasOwnProperty.call(messages, key) ? messages[key] : undefined;\n\nconst translate = (key: string, values?: Record<string, unknown>, rich = false): unknown => {\n  const snapshot = requireSnapshot();\n  const message = readOwnMessage(snapshot.messages, key);\n  if (message === undefined) return key;\n  const cacheKey = `${snapshot.locale}\\u0000${key}\\u0000${message}`;\n  let formatter = compiled.get(cacheKey);\n  if (!formatter) {\n    formatter = new IntlMessageFormat(message, snapshot.locale);\n    compiled.set(cacheKey, formatter);\n  }\n  const result = formatter.format(values as any);\n  if (rich) return Array.isArray(result) && result.length === 1 ? result[0] : result;\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\nexport const t = ((key: string, values?: Record<string, unknown>) =>\n  translate(key, values)) as FarmTranslator;\nt.rich = (key: string, values?: Record<string, unknown>) => translate(key, values, true);\nt.raw = (key: string) => readOwnMessage(requireSnapshot().messages, key) ?? key;\nt.has = (key: string) => Object.prototype.hasOwnProperty.call(requireSnapshot().messages, key);\n\nexport function localizeActiveFarmHref(href: string, locale?: FarmI18nLocale): string {\n  const snapshot = getFarmI18nClientState();\n  if (!snapshot) return href;\n  return localizeFarmHref(href, locale || snapshot.locale, snapshot);\n}\n\nexport function isFarmLocaleChangeHref(href: string): boolean {\n  const snapshot = getFarmI18nClientState();\n  if (!snapshot || typeof window === \"undefined\") return false;\n  if (snapshot.routing === \"none\") return false;\n  const target = new URL(href, window.location.origin);\n  const match = resolveFarmLocalePath(target.pathname, snapshot);\n  const targetLocale = match.locale || snapshot.defaultLocale;\n  return targetLocale !== snapshot.locale;\n}\n\nexport function createFarmClientTranslator(): FarmTranslator {\n  return (<TKey extends FarmI18nMessageKey>(key: TKey, ...args: FarmI18nMessageArgs<TKey>) =>\n    t(key, ...args)) as FarmTranslator;\n}\n\nfunction requireSnapshot(): FarmI18nClientSnapshot {\n  const snapshot = getFarmI18nClientState();\n  if (!snapshot) {\n    throw new Error(\"Farm i18n is not configured or has not been hydrated.\");\n  }\n  return snapshot;\n}\n","import { useEffect, useMemo, useRef, useState, type RefObject } from \"react\";\nimport { createFarmRouter, type FarmRouter, type FarmRouterRouteInput } from \"../router\";\nimport {\n  getInstalledFarmSPARouter,\n  getRouter as getSPARouter,\n  readPageState,\n  type FarmNavigationBlockerContext,\n  type FarmNavigationState,\n} from \"./spa-router\";\nimport { notifyHistoryChange, subscribeHistoryChange } from \"./history-sync\";\nimport { getFarmI18nClientState } from \"../i18n/client-runtime\";\nimport { _resolveCurrentRequest } from \"../server/request-bridge\";\nimport { stripFarmLocaleFromPathname } from \"../i18n/routing\";\nimport {\n  applyFarmBasePath,\n  getFarmBasePath,\n  normalizeFarmBasePath,\n  stripFarmBasePath,\n} from \"../base-path\";\n\ninterface RouterState {\n  pathname: string;\n  searchParams: URLSearchParams;\n  params: Record<string, string>;\n  pageState: unknown;\n}\n\nexport interface UseRouterOptions {\n  basePath?: string;\n  routes?: FarmRouterRouteInput[];\n}\n\nexport interface UseBlockerOptions {\n  when: boolean | ((context: FarmNavigationBlockerContext) => boolean);\n  message?: string;\n  shouldBlock?: (context: FarmNavigationBlockerContext) => boolean | Promise<boolean>;\n}\n\nexport interface UseBlockerReturn {\n  active: boolean;\n}\n\nfunction shouldBlockUnload(options: UseBlockerOptions): boolean {\n  const path = window.location.pathname + window.location.search;\n  const context: FarmNavigationBlockerContext = {\n    from: path,\n    to: path,\n    action: \"replace\",\n  };\n  const when = typeof options.when === \"function\" ? options.when(context) : options.when;\n  if (!when) return false;\n  if (!options.shouldBlock) return true;\n\n  try {\n    const result = options.shouldBlock(context);\n    if (typeof result === \"boolean\") return result;\n    void result.catch(() => undefined);\n    return true;\n  } catch {\n    return true;\n  }\n}\n\n/**\n * Hook for accessing router state and navigation\n */\n/**\n * Imperative navigation for useRouter. Delegates to the installed SPA router\n * so blockers run before the URL changes, history state is written by the\n * router, and the action is labelled push/replace rather than pop. Without a\n * Farm router (embedded usage) the URL is written directly and announced on\n * the shared history channel, whose no-router fallback is the nuqs-style\n * synthetic popstate this code previously hand-rolled.\n */\nfunction navigateViaRouter(href: string, basePath: string, replace: boolean): void {\n  if (typeof window === \"undefined\") return;\n\n  const url = applyFarmBasePath(href, basePath);\n  const spaRouter = getInstalledFarmSPARouter();\n  if (spaRouter) {\n    void spaRouter.navigate(url, { replace });\n    return;\n  }\n\n  if (replace) {\n    window.history.replaceState(null, \"\", url);\n  } else {\n    window.history.pushState(null, \"\", url);\n  }\n  notifyHistoryChange(\"url-search\");\n}\n\nexport function useRouter(options: UseRouterOptions = {}) {\n  const basePath =\n    options.basePath === undefined ? getFarmBasePath() : normalizeFarmBasePath(options.basePath);\n  const routes = options.routes;\n  const routeKey =\n    routes?.map((route) => (typeof route === \"string\" ? route : route.path)).join(\"\\n\") || \"\";\n  const routeMatcher = useMemo(\n    () => (routeKey ? createFarmRouter(routeKey.split(\"\\n\")) : null),\n    [routeKey],\n  );\n  const [state, setState] = useState<RouterState>(() => {\n    return readRouterState(basePath, routeMatcher);\n  });\n\n  useEffect(() => {\n    if (typeof window === \"undefined\") return;\n\n    const handlePopState = () => {\n      setState(readRouterState(basePath, routeMatcher));\n    };\n\n    handlePopState();\n    const unsubscribe = subscribeHistoryChange(handlePopState);\n    return unsubscribe;\n  }, [basePath, routeMatcher]);\n\n  const push = (href: string) => {\n    navigateViaRouter(href, basePath, false);\n  };\n\n  const replace = (href: string) => {\n    navigateViaRouter(href, basePath, true);\n  };\n\n  const pushState = <TState>(pageState: TState, href?: string) => {\n    if (typeof window === \"undefined\") return;\n    getSPARouter().pushState(pageState, resolveClientHref(href, basePath));\n  };\n\n  const replaceState = <TState>(pageState: TState, href?: string) => {\n    if (typeof window === \"undefined\") return;\n    getSPARouter().replaceState(pageState, resolveClientHref(href, basePath));\n  };\n\n  const back = () => {\n    if (typeof window !== \"undefined\") {\n      window.history.back();\n    }\n  };\n\n  const forward = () => {\n    if (typeof window !== \"undefined\") {\n      window.history.forward();\n    }\n  };\n\n  return {\n    ...state,\n    push,\n    replace,\n    pushState,\n    replaceState,\n    back,\n    forward,\n  };\n}\n\nexport function usePageState<TState = unknown>(): TState | null {\n  const [state, setState] = useState<TState | null>(() => readPageState<TState>());\n\n  useEffect(() => {\n    if (typeof window === \"undefined\") return;\n\n    const handlePopState = () => {\n      setState(readPageState<TState>());\n    };\n\n    handlePopState();\n    return subscribeHistoryChange(handlePopState);\n  }, []);\n\n  return state;\n}\n\nexport function useNavigation(): FarmNavigationState {\n  const [state, setState] = useState<FarmNavigationState>(() =>\n    getSPARouter().getNavigationState(),\n  );\n\n  useEffect(() => {\n    if (typeof window === \"undefined\") return;\n    return getSPARouter().subscribeNavigation(setState);\n  }, []);\n\n  return state;\n}\n\nexport function useBlocker(options: UseBlockerOptions): UseBlockerReturn {\n  const optionsRef = useRef(options);\n  optionsRef.current = options;\n  const active = Boolean(options.when);\n\n  useEffect(() => {\n    if (typeof window === \"undefined\" || !active) {\n      return;\n    }\n\n    return getSPARouter().addBlocker(\n      async (context) => {\n        const current = optionsRef.current;\n        const when = typeof current.when === \"function\" ? current.when(context) : current.when;\n\n        if (!when) return false;\n\n        if (current.shouldBlock && !(await current.shouldBlock(context))) {\n          return false;\n        }\n\n        if (current.message && typeof window.confirm === \"function\") {\n          return !window.confirm(current.message);\n        }\n\n        return true;\n      },\n      () => shouldBlockUnload(optionsRef.current),\n    );\n  }, [active]);\n\n  return { active };\n}\n\nexport function useScrollRestoration<TElement extends HTMLElement = HTMLElement>(\n  key: string,\n): RefObject<TElement | null> {\n  const ref = useRef<TElement>(null);\n\n  useEffect(() => {\n    const element = ref.current;\n    if (!element) return;\n    return getSPARouter().registerScrollElement(key, element);\n  }, [key]);\n\n  return ref;\n}\n\nfunction readRouterState(basePath: string, routeMatcher: FarmRouter | null): RouterState {\n  const url = readCurrentUrl();\n  if (!url) {\n    return {\n      pathname: \"/\",\n      searchParams: new URLSearchParams(),\n      params: {},\n      pageState: null,\n    };\n  }\n\n  const pathname = normalizeClientPathname(url.pathname, basePath);\n  const i18n = getFarmI18nClientState();\n  const routePathname = i18n ? stripFarmLocaleFromPathname(pathname, i18n) : pathname;\n  return {\n    pathname,\n    searchParams: url.searchParams,\n    params: routeMatcher?.match(routePathname)?.params || {},\n    pageState: typeof window === \"undefined\" ? null : readPageState(),\n  };\n}\n\n/**\n * The URL being rendered, on either side of hydration.\n *\n * On the server this came back as `/` with no search params, so a component\n * reading the path or the query string rendered one thing on the server and\n * another in the browser, which React reports as a hydration mismatch and\n * leaves the route without useful server rendered markup.\n */\nfunction readCurrentUrl(): URL | undefined {\n  if (typeof window !== \"undefined\") {\n    try {\n      return new URL(window.location.href);\n    } catch {\n      return undefined;\n    }\n  }\n\n  const request = _resolveCurrentRequest();\n  if (!request) return undefined;\n  try {\n    return new URL(request.url);\n  } catch {\n    return undefined;\n  }\n}\n\nfunction normalizeClientPathname(pathname: string, basePath: string) {\n  return stripFarmBasePath(pathname, basePath);\n}\n\nfunction resolveClientHref(href: string | undefined, basePath: string): string | undefined {\n  if (!href) return undefined;\n  return applyFarmBasePath(href, basePath);\n}\n","\"use client\";\n\nimport { readDeferredDataResponse } from \"../deferred\";\nimport { notifyHistoryChange, notifyRouterHistoryChange } from \"./history-sync\";\nimport {\n  createFarmDeploymentMismatchError,\n  createFarmDeploymentRequestHeaders,\n  isFarmDeploymentMismatchResponse,\n} from \"../deployment\";\nimport { getHashTargetElement } from \"./hash-target\";\nimport { isFarmExternalNavigationURL, resolveFarmNavigationURL } from \"./navigation-url\";\nimport { applyFarmMetadataToDocument, type NavigationMetadata } from \"./metadata-reconciler\";\nimport type { FarmClientNavigationSession, FarmClientPluginManager } from \"./plugin\";\nimport { _hydrateFarmI18n, isFarmLocaleChangeHref } from \"../i18n/client-runtime\";\nimport type { FarmI18nClientSnapshot } from \"../i18n/types\";\nimport type { FarmIslandStrategy } from \"../island\";\nimport type { FarmRouteRenderPlan } from \"../navigation/render-plan\";\n\nexport { getHashTargetElement } from \"./hash-target\";\nexport { isFarmExternalNavigationURL } from \"./navigation-url\";\n\n/**\n * Farm.js SPA Router\n *\n * Provides client-side navigation without full page reloads.\n * Features:\n * - Prefetch on viewport intersection\n * - Prefetch on hover\n * - Page caching\n * - History API integration\n * - Scroll restoration\n */\n\ninterface PageData {\n  props: Record<string, any>;\n  modulePath: string;\n  loadingModulePath?: string | null;\n  canonicalPath?: string;\n  isClientComponent?: boolean;\n  shouldHydrate?: boolean;\n  islandStrategy?: FarmIslandStrategy | null;\n  renderPlan?: FarmRouteRenderPlan;\n  fragment?: {\n    html: string;\n    layoutPatterns: string[];\n  };\n  metadata?: NavigationMetadata;\n  layoutModules?: string[];\n  routeSlots?: RouteSlotPageData[];\n  interception?: {\n    from?: string;\n    slots: string[];\n  };\n  i18n?: FarmI18nClientSnapshot;\n}\n\ninterface RouteSlotPageData {\n  name: string;\n  ownerPattern: string;\n  containerId: string;\n  interception: boolean;\n  fallback: boolean;\n  modulePath: string;\n  isClientComponent: boolean;\n  shouldHydrate: boolean;\n  props: Record<string, any>;\n}\n\nexport interface RouterOptions {\n  prefetchTimeout?: number;\n  cacheMaxAge?: number;\n  scrollRestoration?: boolean;\n  shouldUseDocumentNavigation?: (pathname: string) => boolean;\n  deploymentId?: string;\n}\n\ninterface CacheEntry {\n  data: PageData;\n  timestamp: number;\n}\n\nexport interface FarmNavigationBlockerContext {\n  from: string;\n  to: string;\n  action: \"push\" | \"replace\" | \"pop\";\n}\n\nexport type FarmNavigationBlocker = (\n  context: FarmNavigationBlockerContext,\n) => boolean | void | Promise<boolean | void>;\n\nexport type FarmViewTransitionMode = boolean | \"auto\";\n\nexport interface FarmNavigateOptions {\n  replace?: boolean;\n  scroll?: boolean;\n  state?: unknown;\n  viewTransition?: FarmViewTransitionMode;\n  /** Re-fetch the current route even when its URL has not changed. */\n  refresh?: boolean;\n}\n\nexport interface FarmNavigationLocation {\n  href: string;\n  pathname: string;\n  search: string;\n  hash: string;\n}\n\nexport interface FarmNavigationState {\n  state: \"idle\" | \"loading\";\n  pending: boolean;\n  from: string | null;\n  to: FarmNavigationLocation | null;\n  action: FarmNavigationBlockerContext[\"action\"] | null;\n  startedAt: number | null;\n}\n\nexport type FarmNavigationListener = (state: FarmNavigationState) => void;\n\nconst FARM_PAGE_STATE_KEY = \"__farmPageState\";\nconst FARM_INTERCEPT_FROM_KEY = \"__farmInterceptFrom\";\nconst FARM_HISTORY_INDEX_KEY = \"__farmHistoryIndex\";\n\nfunction readHistoryIndex(state: unknown): number | null {\n  if (!state || typeof state !== \"object\") return null;\n  const value = (state as Record<string, unknown>)[FARM_HISTORY_INDEX_KEY];\n  return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\nconst IDLE_NAVIGATION_STATE: FarmNavigationState = {\n  state: \"idle\",\n  pending: false,\n  from: null,\n  to: null,\n  action: null,\n  startedAt: null,\n};\n\nfunction getActiveLayoutChainHeader(): string | undefined {\n  if (typeof document === \"undefined\") return undefined;\n  const patterns = Array.from(\n    document.querySelectorAll<HTMLElement>('[data-farm-layout-boundary=\"true\"]'),\n  )\n    .map((element) => element.dataset.farmLayoutPattern)\n    .filter((pattern): pattern is string => Boolean(pattern));\n  return patterns.length > 0 ? JSON.stringify(patterns) : undefined;\n}\n\n// Global router instance\nlet routerInstance: SPARouter | null = null;\n\nexport class SPARouter {\n  private cache: Map<string, CacheEntry> = new Map();\n  private prefetchingUrls: Set<string> = new Set();\n  private observers: Map<Element, IntersectionObserver> = new Map();\n  private prefetchTimers: Map<Element, ReturnType<typeof setTimeout>> = new Map();\n  private blockers: Set<FarmNavigationBlocker> = new Set();\n  private unloadBlockers: Map<FarmNavigationBlocker, () => boolean> = new Map();\n  private navigationListeners: Set<FarmNavigationListener> = new Set();\n  private navigationState: FarmNavigationState = IDLE_NAVIGATION_STATE;\n  private currentHistoryPath: string | null = null;\n  private currentHistoryIndex: number | null = null;\n  private suppressNextPopState = false;\n  private navigationSequence = 0;\n  private activeNavigation?: {\n    id: number;\n    controller: AbortController;\n  };\n  private scrollElements: Map<string, HTMLElement> = new Map();\n  private options: Required<Omit<RouterOptions, \"deploymentId\">> &\n    Pick<RouterOptions, \"deploymentId\">;\n  private onNavigate?: (data: PageData) => Promise<void>;\n  private clientPlugins?: Pick<\n    FarmClientPluginManager,\n    | \"beginNavigation\"\n    | \"markNavigationLoaded\"\n    | \"resolveNavigation\"\n    | \"scheduleNavigationRendered\"\n    | \"failNavigation\"\n  >;\n\n  private readonly onPopState = (event: PopStateEvent) => {\n    void this.handlePopState(event);\n  };\n\n  private readonly onBeforeUnload = (event: BeforeUnloadEvent) => {\n    if (this.shouldBlockUnload()) {\n      event.preventDefault();\n      event.returnValue = \"\";\n    }\n    this.saveScrollPosition(window.location.pathname + window.location.search);\n  };\n\n  constructor(options: RouterOptions = {}) {\n    this.options = {\n      prefetchTimeout: options.prefetchTimeout ?? 100,\n      cacheMaxAge: options.cacheMaxAge ?? 30000, // 30 seconds\n      scrollRestoration: options.scrollRestoration ?? true,\n      shouldUseDocumentNavigation: options.shouldUseDocumentNavigation ?? (() => false),\n      deploymentId: options.deploymentId ?? readBrowserDeploymentId(),\n    };\n\n    if (typeof window !== \"undefined\") {\n      // Listen for popstate (back/forward navigation)\n      window.addEventListener(\"popstate\", this.onPopState);\n\n      // Save scroll position before unload\n      window.addEventListener(\"beforeunload\", this.onBeforeUnload);\n\n      // Track the rendered location and its position in the history stack so\n      // popstate can report a real `from` and revert blocked traversals.\n      this.currentHistoryPath = window.location.pathname + window.location.search;\n      const existingIndex = readHistoryIndex(window.history.state);\n      if (existingIndex == null) {\n        try {\n          window.history.replaceState(\n            {\n              ...((window.history.state as object | null) ?? {}),\n              [FARM_HISTORY_INDEX_KEY]: 0,\n            },\n            \"\",\n            window.location.href,\n          );\n          this.currentHistoryIndex = 0;\n        } catch {\n          this.currentHistoryIndex = null;\n        }\n      } else {\n        this.currentHistoryIndex = existingIndex;\n      }\n    }\n  }\n\n  /** Remove global listeners. Intended for tests and teardown. */\n  destroy(): void {\n    if (typeof window === \"undefined\") return;\n    this.cancelActiveNavigation();\n    for (const observer of this.observers.values()) observer.disconnect();\n    for (const timer of this.prefetchTimers.values()) clearTimeout(timer);\n    this.observers.clear();\n    this.prefetchTimers.clear();\n    window.removeEventListener(\"popstate\", this.onPopState);\n    window.removeEventListener(\"beforeunload\", this.onBeforeUnload);\n  }\n\n  /**\n   * Set the navigation handler that updates React\n   */\n  setNavigationHandler(handler: (data: PageData) => Promise<void>) {\n    this.onNavigate = handler;\n  }\n\n  /**\n   * Connect Farm's browser plugin lifecycle to SPA navigation.\n   */\n  setClientPluginManager(manager: FarmClientPluginManager) {\n    this.clientPlugins = manager;\n  }\n\n  /**\n   * Navigate to a new URL\n   */\n  async navigate(href: string, options: FarmNavigateOptions = {}): Promise<void> {\n    const {\n      replace = false,\n      scroll = true,\n      state,\n      viewTransition = false,\n      refresh = false,\n    } = options;\n\n    // Relative targets resolve against the current document, not the origin.\n    const url = resolveFarmNavigationURL(href, window.location.href);\n    const pathname = url.pathname;\n    const search = url.search;\n    const fullPath = pathname + search;\n\n    if (\n      isFarmExternalNavigationURL(url, window.location.origin) ||\n      isFarmLocaleChangeHref(url.toString()) ||\n      this.options.shouldUseDocumentNavigation(pathname)\n    ) {\n      this.cancelActiveNavigation();\n      if (replace) window.location.replace(url.toString());\n      else window.location.assign(url.toString());\n      return;\n    }\n\n    // Same page navigation - update fragment history without fetching route data.\n    if (!refresh && pathname === window.location.pathname && search === window.location.search) {\n      this.cancelActiveNavigation();\n      if (url.hash === window.location.hash) return;\n\n      this.writePageState(\n        replace ? \"replace\" : \"push\",\n        state === undefined ? readPageState() : state,\n        url.toString(),\n      );\n      if (scroll) {\n        if (url.hash) {\n          getHashTargetElement(url.hash)?.scrollIntoView();\n        } else {\n          window.scrollTo(0, 0);\n        }\n      }\n      return;\n    }\n\n    const from = window.location.pathname + window.location.search;\n    if (\n      await this.shouldBlockNavigation({\n        from,\n        to: fullPath,\n        action: replace ? \"replace\" : \"push\",\n      })\n    ) {\n      return;\n    }\n\n    // Save current scroll position\n    if (this.options.scrollRestoration) {\n      this.saveScrollPosition(window.location.pathname + window.location.search);\n    }\n\n    const navigation = this.startNavigation({\n      from,\n      to: createNavigationLocation(url),\n      action: replace ? \"replace\" : \"push\",\n    });\n\n    let clientNavigation: FarmClientNavigationSession | undefined;\n    try {\n      clientNavigation = await this.clientPlugins?.beginNavigation({\n        from,\n        to: url,\n        action: replace ? \"replace\" : \"push\",\n      });\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n\n      // Fetch page data (from cache or server)\n      const pageData = await this.fetchPageData(\n        fullPath,\n        true,\n        from,\n        refresh,\n        navigation.controller.signal,\n      );\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      if (clientNavigation) {\n        await this.clientPlugins?.markNavigationLoaded(clientNavigation, pageData);\n      }\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n\n      await this.runViewTransition(viewTransition, () =>\n        this.isCurrentNavigation(navigation, clientNavigation)\n          ? this.commitNavigation({\n              fullPath,\n              pageData,\n              pathname,\n              replace,\n              scroll,\n              state,\n              url,\n            })\n          : Promise.resolve(),\n      );\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n\n      if (clientNavigation) {\n        await this.clientPlugins?.resolveNavigation(clientNavigation);\n        void this.clientPlugins?.scheduleNavigationRendered(clientNavigation);\n      }\n      this.finishNavigation(navigation);\n    } catch (error) {\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      if (clientNavigation) {\n        await this.clientPlugins?.failNavigation(clientNavigation, error);\n      }\n      this.finishNavigation(navigation);\n      console.error(\"[Farm.js] Navigation error:\", error);\n      // Fall back to full page navigation\n      window.location.href = href;\n    }\n  }\n\n  /**\n   * Re-render the active route from the server while preserving the document,\n   * shared layouts, client runtime, and browser history entry.\n   */\n  refresh(options: Omit<FarmNavigateOptions, \"replace\" | \"refresh\"> = {}): Promise<void> {\n    return this.navigate(window.location.href, {\n      ...options,\n      replace: true,\n      refresh: true,\n      scroll: options.scroll ?? false,\n    });\n  }\n\n  /**\n   * Prefetch a URL\n   */\n  async prefetch(href: string): Promise<void> {\n    if (isFarmLocaleChangeHref(href)) return;\n    const url = resolveFarmNavigationURL(href, window.location.href);\n    if (isFarmExternalNavigationURL(url, window.location.origin)) return;\n    if (this.options.shouldUseDocumentNavigation(url.pathname)) return;\n    const fullPath = url.pathname + url.search;\n    const interceptFrom = window.location.pathname + window.location.search;\n\n    // Skip if already prefetching or cached\n    if (this.prefetchingUrls.has(fullPath)) return;\n    if (this.isCached(fullPath, interceptFrom)) return;\n\n    this.prefetchingUrls.add(fullPath);\n\n    try {\n      await this.fetchPageData(fullPath, false, interceptFrom);\n    } catch (error) {\n      console.warn(\"[Farm.js] Prefetch failed:\", href, error);\n    } finally {\n      this.prefetchingUrls.delete(fullPath);\n    }\n  }\n\n  /**\n   * Observe an element for viewport intersection (prefetch when visible)\n   */\n  observeForPrefetch(element: HTMLAnchorElement): void {\n    if (typeof IntersectionObserver === \"undefined\") return;\n\n    const href = element.getAttribute(\"href\");\n    if (!href || this.isExternalUrl(href)) return;\n    this.unobserveForPrefetch(element);\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          if (entry.isIntersecting) {\n            if (this.observers.get(element) !== observer) continue;\n            // Delay prefetch slightly to avoid prefetching during scroll\n            const timer = setTimeout(() => {\n              if (this.prefetchTimers.get(element) !== timer) return;\n              this.prefetchTimers.delete(element);\n              void this.prefetch(href);\n            }, this.options.prefetchTimeout);\n            this.prefetchTimers.set(element, timer);\n\n            // Stop observing after first intersection\n            observer.unobserve(element);\n            this.observers.delete(element);\n          }\n        }\n      },\n      { rootMargin: \"200px\" }, // Start prefetching when 200px from viewport\n    );\n\n    observer.observe(element);\n    this.observers.set(element, observer);\n  }\n\n  /**\n   * Stop observing an element\n   */\n  unobserveForPrefetch(element: HTMLAnchorElement): void {\n    const observer = this.observers.get(element);\n    if (observer) {\n      observer.unobserve(element);\n      this.observers.delete(element);\n    }\n    const timer = this.prefetchTimers.get(element);\n    if (timer !== undefined) {\n      clearTimeout(timer);\n      this.prefetchTimers.delete(element);\n    }\n  }\n\n  addBlocker(blocker: FarmNavigationBlocker, shouldBlockUnload?: () => boolean): () => void {\n    this.blockers.add(blocker);\n    this.unloadBlockers.set(\n      blocker,\n      shouldBlockUnload ?? (() => this.evaluateBlockerForUnload(blocker)),\n    );\n    return () => {\n      this.blockers.delete(blocker);\n      this.unloadBlockers.delete(blocker);\n    };\n  }\n\n  getNavigationState(): FarmNavigationState {\n    return this.navigationState;\n  }\n\n  subscribeNavigation(listener: FarmNavigationListener): () => void {\n    this.navigationListeners.add(listener);\n    listener(this.navigationState);\n    return () => {\n      this.navigationListeners.delete(listener);\n    };\n  }\n\n  registerScrollElement(key: string, element: HTMLElement): () => void {\n    this.scrollElements.set(key, element);\n    this.restoreScrollElement(window.location.pathname + window.location.search, key, element);\n    return () => {\n      if (this.scrollElements.get(key) === element) {\n        this.scrollElements.delete(key);\n      }\n    };\n  }\n\n  pushState(state: unknown, href?: string): void {\n    this.writePageState(\"push\", state, href);\n  }\n\n  replaceState(state: unknown, href?: string): void {\n    this.writePageState(\"replace\", state, href);\n  }\n\n  /** @internal Keep shallow URL-search writes inside the router's history bookkeeping. */\n  writeURLSearch(action: \"push\" | \"replace\", href: string): void {\n    this.writePageState(action, readPageState(), href, false);\n  }\n\n  private async commitNavigation(options: {\n    fullPath: string;\n    pageData: PageData;\n    pathname: string;\n    replace: boolean;\n    scroll: boolean;\n    state: unknown;\n    url: URL;\n  }): Promise<void> {\n    const historyUrl = resolveFarmNavigationURL(\n      options.pageData.canonicalPath || options.fullPath,\n      window.location.href,\n    );\n    historyUrl.hash = options.url.hash;\n    const historyPath = historyUrl.pathname + historyUrl.search + historyUrl.hash;\n    const historyState = createHistoryState(\n      historyPath,\n      options.state,\n      options.replace ? window.history.state : undefined,\n      options.pageData.interception?.from ?? null,\n    ) as Record<string, unknown>;\n    const nextHistoryIndex =\n      this.currentHistoryIndex == null\n        ? null\n        : options.replace\n          ? this.currentHistoryIndex\n          : this.currentHistoryIndex + 1;\n    if (nextHistoryIndex != null) {\n      historyState[FARM_HISTORY_INDEX_KEY] = nextHistoryIndex;\n    }\n    if (options.replace) {\n      window.history.replaceState(historyState, \"\", historyPath);\n    } else {\n      window.history.pushState(historyState, \"\", historyPath);\n    }\n    this.currentHistoryIndex = nextHistoryIndex;\n    const resolvedHistoryUrl = resolveFarmNavigationURL(historyPath, window.location.href);\n    this.currentHistoryPath = resolvedHistoryUrl.pathname + resolvedHistoryUrl.search;\n    notifyRouterHistoryChange();\n\n    this.updateDocumentMetadata(options.pageData.metadata);\n\n    _hydrateFarmI18n(options.pageData.i18n);\n\n    if (this.onNavigate) {\n      await this.onNavigate(options.pageData);\n    }\n\n    if (options.scroll) {\n      if (options.url.hash) {\n        const element = getHashTargetElement(options.url.hash);\n        if (element) {\n          element.scrollIntoView();\n        }\n      } else {\n        window.scrollTo(0, 0);\n      }\n    } else if (this.options.scrollRestoration) {\n      const restorePath = this.currentHistoryPath ?? options.fullPath;\n      this.restoreWindowScroll(restorePath);\n      this.restoreScrollElements(restorePath);\n    }\n  }\n\n  private async runViewTransition(\n    mode: FarmViewTransitionMode,\n    callback: () => Promise<void>,\n  ): Promise<void> {\n    if (!mode || typeof document === \"undefined\") {\n      await callback();\n      return;\n    }\n\n    const startViewTransition = (document as any).startViewTransition;\n    if (typeof startViewTransition !== \"function\") {\n      await callback();\n      return;\n    }\n\n    const transition = startViewTransition.call(document, () => callback());\n    const updateDone = transition?.updateCallbackDone || transition?.ready;\n    if (updateDone && typeof updateDone.then === \"function\") {\n      await updateDone;\n    }\n    transition?.finished?.catch?.(() => undefined);\n  }\n\n  /**\n   * Fetch page data from cache or server\n   */\n  private async fetchPageData(\n    path: string,\n    recover = true,\n    interceptFrom?: string,\n    fresh = false,\n    signal?: AbortSignal,\n  ): Promise<PageData> {\n    const cacheKey = getPageDataCacheKey(path, interceptFrom);\n    // Check cache first\n    const cached = fresh ? undefined : this.cache.get(cacheKey);\n    if (cached && Date.now() - cached.timestamp < this.options.cacheMaxAge) {\n      return cached.data;\n    }\n\n    // Fetch from server. The active layout chain lets the server omit shared\n    // shell HTML from the fragment without inspecting component source.\n    const activeLayoutChain = getActiveLayoutChainHeader();\n    const response = await fetch(`/__farm/page-data?path=${encodeURIComponent(path)}`, {\n      signal,\n      headers: createFarmDeploymentRequestHeaders(this.options.deploymentId, {\n        Accept: \"application/x-farm-deferred+json, application/json\",\n        \"X-Farm-SPA\": \"1\",\n        ...(activeLayoutChain ? { \"X-Farm-Layout-Chain\": activeLayoutChain } : {}),\n        ...(interceptFrom ? { \"X-Farm-Intercept-From\": interceptFrom } : {}),\n      }),\n    });\n\n    if (isFarmDeploymentMismatchResponse(response, this.options.deploymentId)) {\n      const error = createFarmDeploymentMismatchError(\n        response,\n        this.options.deploymentId || \"unknown\",\n      );\n      dispatchDeploymentMismatch(error);\n      if (recover) {\n        window.location.assign(path);\n      }\n      throw error;\n    }\n\n    if (!response.ok) {\n      throw new Error(`Failed to fetch page data: ${response.status}`);\n    }\n\n    const data = await readDeferredDataResponse<PageData>(response);\n\n    // Cache the result. Expiry was previously only consulted on read, so a\n    // long-lived tab that navigates or prefetches many distinct routes grew\n    // this map without bound; sweeping on write bounds it to entries touched\n    // within the cacheMaxAge window.\n    const now = Date.now();\n    for (const [key, entry] of this.cache) {\n      if (now - entry.timestamp >= this.options.cacheMaxAge) this.cache.delete(key);\n    }\n    this.cache.set(cacheKey, {\n      data,\n      timestamp: now,\n    });\n\n    return data;\n  }\n\n  /**\n   * Put the browser URL back on the rendered page after a blocked pop. When\n   * both entries carry a Farm history index the traversal is reversed\n   * exactly; otherwise the current path is pushed again, which restores the\n   * address bar at the cost of one extra history entry.\n   */\n  private revertBlockedPopState(event: PopStateEvent, from: string): void {\n    const eventIndex = readHistoryIndex(event.state);\n    if (eventIndex != null && this.currentHistoryIndex != null) {\n      const delta = eventIndex - this.currentHistoryIndex;\n      if (delta !== 0) {\n        this.suppressNextPopState = true;\n        window.history.go(-delta);\n        return;\n      }\n    }\n\n    try {\n      const restoredState: Record<string, unknown> = {\n        path: from,\n      };\n      if (this.currentHistoryIndex != null && eventIndex != null) {\n        restoredState[FARM_HISTORY_INDEX_KEY] = eventIndex + 1;\n        this.currentHistoryIndex = eventIndex + 1;\n      }\n      window.history.pushState(restoredState, \"\", from);\n    } catch {\n      // Leave the URL as-is if the history API rejects the write; the\n      // rendered page is still the blocked-from page.\n    }\n  }\n\n  /**\n   * Handle browser back/forward navigation\n   */\n  private async handlePopState(event: PopStateEvent): Promise<void> {\n    if (document.documentElement.dataset.farmDocsRuntime === \"true\") return;\n\n    if (this.suppressNextPopState) {\n      // This traversal is our own revert of a blocked pop; the rendered page\n      // never changed.\n      this.suppressNextPopState = false;\n      return;\n    }\n\n    const path = window.location.pathname + window.location.search;\n    // The browser has already moved to the destination entry, so its state\n    // describes `to`; the page still rendered is the tracked current path.\n    const from = this.currentHistoryPath ?? path;\n\n    if (\n      await this.shouldBlockNavigation({\n        from,\n        to: path,\n        action: \"pop\",\n      })\n    ) {\n      this.revertBlockedPopState(event, from);\n      return;\n    }\n\n    this.currentHistoryPath = path;\n    this.currentHistoryIndex = readHistoryIndex(event.state);\n\n    const navigation = this.startNavigation({\n      from,\n      to: createNavigationLocation(new URL(window.location.href)),\n      action: \"pop\",\n    });\n\n    let clientNavigation: FarmClientNavigationSession | undefined;\n    try {\n      clientNavigation = await this.clientPlugins?.beginNavigation({\n        from: null,\n        to: window.location.href,\n        action: \"pop\",\n      });\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      const interceptFrom =\n        typeof event.state?.[FARM_INTERCEPT_FROM_KEY] === \"string\"\n          ? event.state[FARM_INTERCEPT_FROM_KEY]\n          : undefined;\n      const pageData = await this.fetchPageData(\n        path,\n        true,\n        interceptFrom,\n        false,\n        navigation.controller.signal,\n      );\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      if (clientNavigation) {\n        await this.clientPlugins?.markNavigationLoaded(clientNavigation, pageData);\n      }\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n\n      this.updateDocumentMetadata(pageData.metadata);\n\n      _hydrateFarmI18n(pageData.i18n);\n\n      // Call the navigation handler to update React\n      if (this.onNavigate) {\n        await this.onNavigate(pageData);\n      }\n\n      // A fragment in the destination URL is an explicit scroll target for the\n      // window and takes precedence over the saved *window* scroll position,\n      // matching forward navigation and native browser back/forward. Element\n      // scroll positions are keyed without the hash (see\n      // getScrollElementStorageKey), so registered scroll containers are\n      // restored regardless of whether a fragment is present, even when the\n      // anchor resolves, so a persistent-layout scroll element is not left at\n      // the prior route's offset on a hash-destination popstate.\n      const destinationPath = window.location.pathname + window.location.search;\n      if (window.location.hash) {\n        const target = getHashTargetElement(window.location.hash);\n        if (target) {\n          target.scrollIntoView();\n        } else if (this.options.scrollRestoration) {\n          this.restoreWindowScroll(destinationPath);\n        }\n      } else if (this.options.scrollRestoration) {\n        this.restoreWindowScroll(destinationPath);\n      }\n      if (this.options.scrollRestoration) {\n        this.restoreScrollElements(destinationPath);\n      }\n\n      if (clientNavigation) {\n        await this.clientPlugins?.resolveNavigation(clientNavigation);\n        void this.clientPlugins?.scheduleNavigationRendered(clientNavigation);\n      }\n      this.finishNavigation(navigation);\n    } catch (error) {\n      if (!this.isCurrentNavigation(navigation, clientNavigation)) return;\n      if (clientNavigation) {\n        await this.clientPlugins?.failNavigation(clientNavigation, error);\n      }\n      this.finishNavigation(navigation);\n      console.error(\"[Farm.js] Popstate navigation error:\", error);\n      // Reload the page as fallback\n      window.location.reload();\n    }\n  }\n\n  /**\n   * Check if URL is cached\n   */\n  private isCached(path: string, interceptFrom?: string): boolean {\n    const cached = this.cache.get(getPageDataCacheKey(path, interceptFrom));\n    return cached !== undefined && Date.now() - cached.timestamp < this.options.cacheMaxAge;\n  }\n\n  /**\n   * Check if URL is external\n   */\n  private isExternalUrl(href: string): boolean {\n    return href.startsWith(\"http://\") || href.startsWith(\"https://\") || href.startsWith(\"//\");\n  }\n\n  private async shouldBlockNavigation(context: FarmNavigationBlockerContext): Promise<boolean> {\n    for (const blocker of this.blockers) {\n      if (await blocker(context)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private evaluateBlockerForUnload(blocker: FarmNavigationBlocker): boolean {\n    const path = window.location.pathname + window.location.search;\n    const result = blocker({ from: path, to: path, action: \"replace\" });\n    if (result && typeof result !== \"boolean\") {\n      void result.catch(() => undefined);\n      return true;\n    }\n    return result === true;\n  }\n\n  private shouldBlockUnload(): boolean {\n    for (const blocker of this.blockers) {\n      try {\n        if (this.unloadBlockers.get(blocker)?.()) return true;\n      } catch {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private updateDocumentMetadata(metadata: PageData[\"metadata\"]): void {\n    // Both call sites run after the history entry is committed, so the current\n    // pathname is the navigated-to page and drives the default canonical.\n    applyFarmMetadataToDocument(metadata, window.location.pathname);\n  }\n\n  private startNavigation(options: {\n    from: string;\n    to: FarmNavigationLocation;\n    action: FarmNavigationBlockerContext[\"action\"];\n  }): { id: number; controller: AbortController } {\n    this.activeNavigation?.controller.abort(\"superseded\");\n    const navigation = {\n      id: ++this.navigationSequence,\n      controller: new AbortController(),\n    };\n    this.activeNavigation = navigation;\n    this.setNavigationState({\n      state: \"loading\",\n      pending: true,\n      from: options.from,\n      to: options.to,\n      action: options.action,\n      startedAt: Date.now(),\n    });\n    return navigation;\n  }\n\n  private isCurrentNavigation(\n    navigation: { id: number; controller: AbortController },\n    clientNavigation?: FarmClientNavigationSession,\n  ): boolean {\n    return (\n      this.activeNavigation?.id === navigation.id &&\n      !navigation.controller.signal.aborted &&\n      !clientNavigation?.signal.aborted\n    );\n  }\n\n  private finishNavigation(navigation: { id: number; controller: AbortController }): void {\n    if (this.activeNavigation?.id !== navigation.id) return;\n    this.activeNavigation = undefined;\n    this.setNavigationState(IDLE_NAVIGATION_STATE);\n  }\n\n  private cancelActiveNavigation(): void {\n    if (!this.activeNavigation) return;\n    this.activeNavigation.controller.abort(\"superseded\");\n    this.activeNavigation = undefined;\n    this.setNavigationState(IDLE_NAVIGATION_STATE);\n  }\n\n  private setNavigationState(state: FarmNavigationState): void {\n    this.navigationState = state;\n    for (const listener of this.navigationListeners) {\n      listener(state);\n    }\n  }\n\n  private writePageState(\n    action: \"push\" | \"replace\",\n    state: unknown,\n    href?: string,\n    notify = true,\n  ): void {\n    if (typeof window === \"undefined\") return;\n\n    const url = href\n      ? resolveFarmNavigationURL(href, window.location.href).toString()\n      : window.location.href;\n    const parsedUrl = new URL(url);\n    const nextPath = parsedUrl.pathname + parsedUrl.search;\n    const historyPath = nextPath + parsedUrl.hash;\n    const nextState = createHistoryState(historyPath, state, window.history.state) as Record<\n      string,\n      unknown\n    >;\n\n    if (action === \"replace\") {\n      window.history.replaceState(nextState, \"\", url);\n    } else {\n      if (this.currentHistoryIndex != null) {\n        nextState[FARM_HISTORY_INDEX_KEY] = this.currentHistoryIndex + 1;\n      }\n      window.history.pushState(nextState, \"\", url);\n      this.currentHistoryIndex =\n        this.currentHistoryIndex == null ? null : this.currentHistoryIndex + 1;\n    }\n    this.currentHistoryPath = nextPath;\n\n    if (notify) notifyHistoryChange(\"page-state\");\n  }\n\n  /**\n   * Save scroll position for a path\n   */\n  private saveScrollPosition(path: string): void {\n    try {\n      sessionStorage.setItem(\n        `farm-scroll-${path}`,\n        JSON.stringify({ x: window.scrollX, y: window.scrollY }),\n      );\n      for (const [key, element] of this.scrollElements) {\n        sessionStorage.setItem(\n          getScrollElementStorageKey(path, key),\n          JSON.stringify({ x: element.scrollLeft, y: element.scrollTop }),\n        );\n      }\n    } catch {\n      // Ignore storage errors\n    }\n  }\n\n  /**\n   * Restore the saved window scroll position for a path.\n   */\n  private restoreWindowScroll(path: string): void {\n    try {\n      const saved = sessionStorage.getItem(`farm-scroll-${path}`);\n      if (saved) {\n        const { x, y } = JSON.parse(saved);\n        setTimeout(() => window.scrollTo(x, y), 0);\n      }\n    } catch {\n      // Ignore storage errors\n    }\n  }\n\n  /**\n   * Restore saved scroll positions for every registered scroll element. Keys\n   * are hash-stripped (see getScrollElementStorageKey), so this runs regardless\n   * of whether the destination URL carries a fragment.\n   */\n  private restoreScrollElements(path: string): void {\n    try {\n      for (const [key, element] of this.scrollElements) {\n        this.restoreScrollElement(path, key, element);\n      }\n    } catch {\n      // Ignore storage errors\n    }\n  }\n\n  private restoreScrollElement(path: string, key: string, element: HTMLElement): void {\n    try {\n      const saved = sessionStorage.getItem(getScrollElementStorageKey(path, key));\n      if (!saved) return;\n      const { x, y } = JSON.parse(saved);\n      setTimeout(() => {\n        element.scrollLeft = x;\n        element.scrollTop = y;\n      }, 0);\n    } catch {\n      // Ignore storage errors\n    }\n  }\n\n  /**\n   * Clear the page cache\n   */\n  clearCache(): void {\n    this.cache.clear();\n  }\n}\n\nfunction readBrowserDeploymentId(): string | undefined {\n  if (typeof window === \"undefined\") return undefined;\n\n  const runtimeId = (window as Window & { __FARM_DEPLOYMENT_ID__?: unknown })\n    .__FARM_DEPLOYMENT_ID__;\n  if (typeof runtimeId === \"string\" && runtimeId) return runtimeId;\n\n  return document.querySelector<HTMLMetaElement>('meta[name=\"farm-deployment-id\"]')?.content;\n}\n\nfunction dispatchDeploymentMismatch(error: Error): void {\n  if (typeof window === \"undefined\" || typeof CustomEvent === \"undefined\") return;\n  window.dispatchEvent(new CustomEvent(\"farm:deployment-mismatch\", { detail: error }));\n}\n\n/**\n * Get or create the global router instance\n */\nexport function getInstalledFarmSPARouter(): SPARouter | undefined {\n  if (typeof window === \"undefined\") return undefined;\n  return (window as Window & { __FARM_SPA_ROUTER__?: SPARouter }).__FARM_SPA_ROUTER__;\n}\n\nexport function getRouter(): SPARouter {\n  if (typeof window === \"undefined\") {\n    // Return a no-op router for SSR\n    return new SPARouter();\n  }\n\n  const installedRouter = getInstalledFarmSPARouter();\n  if (installedRouter) {\n    routerInstance = installedRouter;\n    return installedRouter;\n  }\n\n  if (!routerInstance) {\n    routerInstance = new SPARouter();\n  }\n\n  return routerInstance;\n}\n\n/**\n * Navigate to a URL using the SPA router\n */\nexport function navigateTo(href: string, options?: FarmNavigateOptions): Promise<void> {\n  return getRouter().navigate(href, options);\n}\n\n/**\n * Prefetch a URL\n */\nexport function prefetch(href: string): Promise<void> {\n  return getRouter().prefetch(href);\n}\n\nexport function pushState(state: unknown, href?: string): void {\n  getRouter().pushState(state, href);\n}\n\nexport function replaceState(state: unknown, href?: string): void {\n  getRouter().replaceState(state, href);\n}\n\nexport function readPageState<TState = unknown>(): TState | null {\n  if (typeof window === \"undefined\") return null;\n  const state = window.history.state;\n  if (!state || typeof state !== \"object\") return null;\n  return ((state as Record<string, unknown>)[FARM_PAGE_STATE_KEY] as TState | undefined) ?? null;\n}\n\nfunction createHistoryState(\n  path: string,\n  pageState: unknown,\n  currentState?: unknown,\n  interceptFrom?: string | null,\n) {\n  const base =\n    currentState && typeof currentState === \"object\" ? { ...(currentState as object) } : {};\n  const nextState: Record<string, unknown> = {\n    ...base,\n    path,\n    [FARM_PAGE_STATE_KEY]: pageState,\n  };\n  if (interceptFrom === null) {\n    delete nextState[FARM_INTERCEPT_FROM_KEY];\n  } else if (interceptFrom) {\n    nextState[FARM_INTERCEPT_FROM_KEY] = interceptFrom;\n  }\n  return nextState;\n}\n\nfunction getPageDataCacheKey(path: string, interceptFrom?: string): string {\n  return interceptFrom ? `${path}\\nintercept:${interceptFrom}` : path;\n}\n\nfunction createNavigationLocation(url: URL): FarmNavigationLocation {\n  return {\n    href: url.href,\n    pathname: url.pathname,\n    search: url.search,\n    hash: url.hash,\n  };\n}\n\nfunction getScrollElementStorageKey(path: string, key: string): string {\n  return `farm-scroll-${path}:${key}`;\n}\n","import { getInstalledFarmSPARouter, type SPARouter } from \"./spa-router\";\n\n/** Fired after programmatic history writes that must not start a navigation. */\nexport const FARM_HISTORY_CHANGE_EVENT = \"farm:historychange\";\n\nexport type FarmHistoryChangeKind = \"url-search\" | \"page-state\";\n\nexport interface FarmHistoryChangeDetail {\n  kind: FarmHistoryChangeKind;\n}\n\n/** Write shallow URL history through the installed SPA router when available. */\nexport function writeFarmURLSearchHistory(action: \"push\" | \"replace\", href: string): boolean {\n  const router = getInstalledFarmSPARouter();\n  if (!router) return false;\n  const writeURLSearch = (router as { writeURLSearch?: SPARouter[\"writeURLSearch\"] })\n    .writeURLSearch;\n  if (typeof writeURLSearch !== \"function\") return false;\n  if (window.history.state !== null && typeof window.history.state !== \"object\") return false;\n  writeURLSearch.call(router, action, href);\n  return true;\n}\n\nfunction dispatchHistoryChange(kind: FarmHistoryChangeKind): void {\n  window.dispatchEvent(\n    new CustomEvent<FarmHistoryChangeDetail>(FARM_HISTORY_CHANGE_EVENT, {\n      detail: { kind },\n    }),\n  );\n}\n\n/**\n * Notify history observers after pushState/replaceState.\n *\n * Farm's SPA router treats `popstate` as real back/forward navigation, so a\n * dedicated event is used instead. `url-search` keeps the nuqs-style synthetic\n * `popstate` when no Farm router is installed, so standalone `useQueryState`\n * consumers still resync; `page-state` is Farm-internal and never falls back.\n */\nexport function notifyHistoryChange(kind: FarmHistoryChangeKind): void {\n  if (typeof window === \"undefined\") return;\n\n  setTimeout(() => {\n    if (kind === \"url-search\" && !getInstalledFarmSPARouter()) {\n      window.dispatchEvent(new PopStateEvent(\"popstate\"));\n      return;\n    }\n\n    dispatchHistoryChange(kind);\n  }, 0);\n}\n\n/** Notify observers after a Farm router commit without simulating traversal. */\nexport function notifyRouterHistoryChange(): void {\n  if (typeof window === \"undefined\") return;\n  setTimeout(() => dispatchHistoryChange(\"url-search\"), 0);\n}\n\nexport function subscribeHistoryChange(listener: () => void): () => void {\n  if (typeof window === \"undefined\") return () => {};\n\n  window.addEventListener(\"popstate\", listener);\n  window.addEventListener(FARM_HISTORY_CHANGE_EVENT, listener);\n\n  return () => {\n    window.removeEventListener(\"popstate\", listener);\n    window.removeEventListener(FARM_HISTORY_CHANGE_EVENT, listener);\n  };\n}\n","export function getHashTargetElement(hash: string): Element | null {\n  // A fragment is not a CSS selector. Match by decoded id, raw id, then the\n  // legacy anchor name so SPA navigation follows native browser semantics.\n  const fragment = hash.startsWith(\"#\") ? hash.slice(1) : hash;\n  if (!fragment) return null;\n\n  let decoded = fragment;\n  try {\n    decoded = decodeURIComponent(fragment);\n  } catch {\n    // Keep the raw fragment when its percent-encoding is malformed.\n  }\n\n  return (\n    document.getElementById(decoded) ||\n    document.getElementById(fragment) ||\n    document.getElementsByName(decoded)[0] ||\n    null\n  );\n}\n","import { renderMetadataHead, resolveMetadataTitle } from \"../metadata\";\nimport type { Metadata } from \"../types\";\n\nexport type NavigationMetadata = (Metadata & Record<string, any>) | undefined;\n\n/** Marks head elements this reconciler inserted, so they can be replaced. */\nconst MANAGED_ATTRIBUTE = \"data-farm-metadata\";\n\n/**\n * Head tags the metadata system owns outright. These are swept on every\n * navigation whether or not they carry the managed marker, because the tags\n * rendered by the server for the first page have no marker and must not\n * survive into the next page's head.\n */\nconst OWNED_SELECTORS = [\n  'meta[name=\"description\"]',\n  'meta[name=\"keywords\"]',\n  'meta[name=\"author\"]',\n  'meta[name=\"creator\"]',\n  'meta[name=\"publisher\"]',\n  'meta[name=\"robots\"]',\n  'link[rel=\"author\"]',\n  'link[rel=\"canonical\"]',\n  'link[rel=\"alternate\"]',\n  'meta[property^=\"og:\"]',\n  'meta[name^=\"twitter:\"]',\n].join(\", \");\n\n/**\n * Icons and the web-app manifest have document-level defaults that exist\n * outside page metadata (the default favicon, a discovered manifest route), so\n * an absent value means \"keep what the document has\", not \"remove it\". They\n * are only swept when the next page defines its own.\n */\nconst ICON_SELECTORS = [\n  'link[rel=\"icon\"]',\n  'link[rel=\"shortcut icon\"]',\n  'link[rel=\"apple-touch-icon\"]',\n].join(\", \");\nconst MANIFEST_SELECTOR = 'link[rel=\"manifest\"]';\n\nfunction removeAll(selector: string): void {\n  for (const element of Array.from(document.head.querySelectorAll(selector))) {\n    element.remove();\n  }\n}\n\n/**\n * Make the document head for a client-side navigation match what a full-page\n * load of the target route renders: same title resolution and the same managed\n * tag set, produced by the same `renderMetadataHead` the server uses.\n *\n * JSON-LD is deliberately untouched: the agent JSON-LD script is site identity\n * rather than page metadata, and sweeping ld+json scripts could remove ones the\n * application authored itself.\n */\nexport function applyFarmMetadataToDocument(metadata: NavigationMetadata, pathname: string): void {\n  document.title = resolveMetadataTitle(metadata?.title) || \"Farm.js App\";\n\n  const rendered = renderMetadataHead(metadata, { pathname });\n  const template = document.createElement(\"template\");\n  template.innerHTML = rendered.tags;\n\n  removeAll(OWNED_SELECTORS);\n  if (metadata?.icons) removeAll(ICON_SELECTORS);\n  if (metadata?.manifest) removeAll(MANIFEST_SELECTOR);\n\n  for (const element of Array.from(template.content.children)) {\n    element.setAttribute(MANAGED_ATTRIBUTE, \"\");\n    document.head.appendChild(element);\n  }\n}\n","\"use client\";\n\nexport interface FarmChunkRecoveryOptions {\n  /**\n   * How long a page is considered already recovered before another chunk\n   * failure may trigger a reload. Defaults to 30 seconds.\n   */\n  maxAgeMs?: number;\n  /**\n   * Override the storage key. Mostly useful for tests and embedded runtimes.\n   */\n  storageKey?: string;\n  /**\n   * Called right before Farm reloads the page.\n   */\n  onRecover?: (error: unknown) => void;\n  /**\n   * Test hooks for browser globals.\n   */\n  reload?: () => void;\n  storage?: Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\"> | null;\n  location?: Pick<Location, \"pathname\" | \"search\" | \"reload\">;\n  now?: () => number;\n}\n\nconst DEFAULT_MAX_AGE_MS = 30_000;\nconst STORAGE_KEY_PREFIX = \"farm:chunk-recovery:\";\nconst CHUNK_ERROR_PATTERNS = [\n  /ChunkLoadError/i,\n  /Loading chunk [\\w-]+ failed/i,\n  /Loading CSS chunk [\\w-]+ failed/i,\n  /CSS_CHUNK_LOAD_FAILED/i,\n  /failed to fetch dynamically imported module/i,\n  /error loading dynamically imported module/i,\n  /importing a module script failed/i,\n  /unable to preload CSS/i,\n  /module script failed/i,\n];\n\nexport function isChunkLoadError(errorLike: unknown): boolean {\n  const values = collectErrorText(errorLike);\n  if (values.some((value) => CHUNK_ERROR_PATTERNS.some((pattern) => pattern.test(value)))) {\n    return true;\n  }\n\n  // Only treat same-origin script/style failures as chunk errors. A blocked\n  // or missing third-party asset (analytics, embeds) is not fixable by\n  // reloading, and reloading for it would loop for as long as it keeps\n  // failing.\n  const targetUrl = getEventTargetAssetUrl(errorLike);\n  return Boolean(\n    targetUrl && /\\.(?:m?js|css)(?:[?#].*)?$/i.test(targetUrl) && isSameOriginAssetUrl(targetUrl),\n  );\n}\n\nfunction isSameOriginAssetUrl(url: string): boolean {\n  if (typeof window === \"undefined\" || !window.location) {\n    return false;\n  }\n\n  try {\n    return new URL(url, window.location.href).origin === window.location.origin;\n  } catch {\n    return false;\n  }\n}\n\nexport function installChunkErrorRecovery(options: FarmChunkRecoveryOptions = {}): () => void {\n  if (typeof window === \"undefined\") {\n    return () => {};\n  }\n\n  const recover = (errorLike: unknown) => {\n    if (!isChunkLoadError(errorLike)) {\n      return;\n    }\n    if (!markRecovered(options)) {\n      return;\n    }\n\n    options.onRecover?.(errorLike);\n    getReload(options)();\n  };\n\n  const onError = (event: Event | ErrorEvent) => {\n    recover(getErrorEventPayload(event));\n  };\n  const onUnhandledRejection = (event: PromiseRejectionEvent) => {\n    recover(event.reason);\n  };\n\n  window.addEventListener(\"error\", onError, true);\n  window.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n\n  return () => {\n    window.removeEventListener(\"error\", onError, true);\n    window.removeEventListener(\"unhandledrejection\", onUnhandledRejection);\n  };\n}\n\nfunction markRecovered(options: FarmChunkRecoveryOptions): boolean {\n  const now = getNow(options);\n  const maxAgeMs = options.maxAgeMs ?? DEFAULT_MAX_AGE_MS;\n  const storage = getStorage(options);\n  const key = getStorageKey(options);\n\n  if (!storage) {\n    return false;\n  }\n\n  try {\n    const previous = Number(storage.getItem(key));\n    if (Number.isFinite(previous) && previous > 0 && now - previous < maxAgeMs) {\n      return false;\n    }\n    storage.setItem(key, String(now));\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nfunction getErrorEventPayload(event: Event | ErrorEvent): unknown {\n  if (\"error\" in event && event.error) {\n    return event.error;\n  }\n  if (\"message\" in event && event.message) {\n    return event.message;\n  }\n  return event;\n}\n\nfunction collectErrorText(value: unknown, seen = new Set<unknown>()): string[] {\n  if (value == null || seen.has(value)) {\n    return [];\n  }\n  seen.add(value);\n\n  if (typeof value === \"string\") {\n    return [value];\n  }\n  if (typeof value === \"number\" || typeof value === \"boolean\") {\n    return [String(value)];\n  }\n  if (typeof value !== \"object\") {\n    return [];\n  }\n\n  const record = value as Record<string, unknown>;\n  const output: string[] = [];\n\n  for (const key of [\"name\", \"message\", \"code\", \"type\", \"request\", \"src\", \"href\"]) {\n    const candidate = record[key];\n    if (typeof candidate === \"string\") {\n      output.push(candidate);\n    }\n  }\n\n  if (\"reason\" in record) {\n    output.push(...collectErrorText(record.reason, seen));\n  }\n  if (\"error\" in record) {\n    output.push(...collectErrorText(record.error, seen));\n  }\n\n  return output;\n}\n\nfunction getEventTargetAssetUrl(value: unknown): string | undefined {\n  if (!value || typeof value !== \"object\") {\n    return undefined;\n  }\n\n  const target = (value as Event).target as\n    | (EventTarget & { src?: string; href?: string; tagName?: string })\n    | null\n    | undefined;\n  if (!target || typeof target !== \"object\") {\n    return undefined;\n  }\n\n  const tagName = typeof target.tagName === \"string\" ? target.tagName.toLowerCase() : \"\";\n  if (tagName !== \"script\" && tagName !== \"link\") {\n    return undefined;\n  }\n\n  return typeof target.src === \"string\" && target.src\n    ? target.src\n    : typeof target.href === \"string\" && target.href\n      ? target.href\n      : undefined;\n}\n\nfunction getStorage(options: FarmChunkRecoveryOptions) {\n  if (\"storage\" in options) {\n    return options.storage;\n  }\n\n  try {\n    return window.sessionStorage;\n  } catch {\n    return null;\n  }\n}\n\nfunction getStorageKey(options: FarmChunkRecoveryOptions): string {\n  if (options.storageKey) {\n    return options.storageKey;\n  }\n\n  const location = getLocation(options);\n  return `${STORAGE_KEY_PREFIX}${location.pathname}${location.search}`;\n}\n\nfunction getLocation(options: FarmChunkRecoveryOptions) {\n  return options.location ?? window.location;\n}\n\nfunction getReload(options: FarmChunkRecoveryOptions): () => void {\n  if (options.reload) {\n    return options.reload;\n  }\n\n  const location = getLocation(options);\n  return () => location.reload();\n}\n\nfunction getNow(options: FarmChunkRecoveryOptions): number {\n  return options.now ? options.now() : Date.now();\n}\n","\"use client\";\n\nimport {\n  originalPositionFor,\n  sourceContentFor,\n  TraceMap,\n  type SourceMapInput,\n} from \"@jridgewell/trace-mapping\";\nimport { DEFAULT_ERROR_STYLES } from \"../components/error-styles\";\nimport { FARM_VERSION } from \"../version\";\nimport { isChunkLoadError } from \"./chunk-recovery\";\n\nexport interface FarmRuntimeErrorLocation {\n  href: string;\n  pathname: string;\n  search: string;\n  hash: string;\n}\n\nexport interface FarmRuntimeErrorOverlayContext {\n  phase: string;\n  location: FarmRuntimeErrorLocation;\n  sourceEvent?: Event;\n}\n\nexport interface FarmRuntimeErrorOverlayOptions {\n  window: Window;\n  farmVersion?: string;\n  reload?: () => void;\n  fetch?: typeof fetch;\n}\n\nexport interface FarmRuntimeErrorOverlay {\n  show(error: unknown, context: FarmRuntimeErrorOverlayContext): void;\n  dismiss(): void;\n  destroy(): void;\n}\n\ninterface NormalizedRuntimeError {\n  name: string;\n  message: string;\n  stack?: string;\n}\n\ninterface BrowserSourceLocation {\n  url: string;\n  displayPath: string;\n  line: number;\n  column: number;\n  stackLine?: string;\n}\n\ninterface BrowserSourceLine {\n  number?: number;\n  content: string;\n  highlight?: boolean;\n}\n\ninterface BrowserSourceFrame {\n  path: string;\n  line?: number;\n  column?: number;\n  lines: BrowserSourceLine[];\n  unavailable?: boolean;\n}\n\ninterface RuntimeErrorRecord {\n  error: NormalizedRuntimeError;\n  context: FarmRuntimeErrorOverlayContext;\n  fingerprint: string;\n  occurrences: number;\n  sourceLocation?: BrowserSourceLocation;\n  sourceFrame: BrowserSourceFrame;\n}\n\nconst OVERLAY_STYLES = `\n:host {\n  position: fixed;\n  inset: 0;\n  z-index: 2147483647;\n  display: block;\n  width: 100%;\n  height: 100%;\n  /* Owned by the overlay: the default error page's source marker is a neutral\n     accent, but the overlay uses this to mark the expression that threw. */\n  --farm-runtime-error-inline-code: #f87171;\n}\n\n@media (prefers-color-scheme: light) {\n  :host {\n    --farm-runtime-error-inline-code: #b91c1c;\n  }\n}\n\n:host([hidden]) {\n  display: none;\n}\n\n.farm-runtime-error__viewport {\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n  overscroll-behavior: contain;\n}\n\n.farm-runtime-error__viewport .farm-default-error {\n  min-height: 100%;\n  padding: clamp(22px, 4vh, 36px) 24px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__code {\n  font-size: clamp(96px, 10vw, 120px);\n  line-height: 0.92;\n}\n\n.farm-runtime-error__viewport .farm-default-error__eyebrow {\n  margin-top: 22px;\n  margin-bottom: 18px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__summary {\n  margin-bottom: 20px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__row {\n  min-height: 48px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__details {\n  padding-top: 16px;\n  padding-bottom: 14px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__details-header {\n  margin-bottom: 8px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__source-path {\n  padding-top: 9px;\n  padding-bottom: 9px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__source-code {\n  padding-top: 6px;\n  padding-bottom: 6px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__meta {\n  margin-top: 10px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__actions {\n  margin-top: 20px;\n}\n\n.farm-runtime-error__occurrences {\n  display: inline-flex;\n  align-items: center;\n  min-height: 24px;\n  margin-right: auto;\n  padding: 0 8px;\n  border: 1px solid var(--farm-error-line);\n  color: var(--farm-error-muted);\n  font-family: var(--farm-error-font-mono);\n  font-size: 10px;\n  font-weight: 600;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n}\n\n.farm-runtime-error__occurrences[hidden],\n.farm-runtime-error__action[hidden] {\n  display: none;\n}\n\n.farm-runtime-error__copy {\n  min-width: 166px;\n}\n\n.farm-runtime-error__action:focus {\n  outline: 1px solid var(--farm-error-fg);\n  outline-offset: 2px;\n}\n\n.farm-runtime-error__viewport .farm-default-error__panel {\n  border: 0;\n  box-shadow: inset 0 0 0 0.5px var(--farm-error-line-strong);\n}\n\n.farm-runtime-error__github-icon {\n  display: block;\n  width: 18px;\n  height: 18px;\n  flex: 0 0 auto;\n  margin-right: 10px;\n  color: currentColor;\n}\n\n.farm-runtime-error__message-value {\n  font-family: var(--farm-error-font-sans);\n}\n\n.farm-runtime-error__inline-code {\n  color: var(--farm-runtime-error-inline-code);\n  font-family: var(--farm-error-font-mono);\n  font-size: 0.94em;\n  font-weight: 600;\n  line-height: inherit;\n  overflow-wrap: anywhere;\n}\n\n@media (max-width: 620px) {\n  .farm-runtime-error__occurrences {\n    margin-right: 0;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__content,\n  .farm-runtime-error__viewport .farm-default-error__panel,\n  .farm-runtime-error__viewport .farm-default-error__details,\n  .farm-runtime-error__viewport .farm-default-error__source,\n  .farm-runtime-error__viewport .farm-default-error__actions {\n    min-width: 0;\n    max-width: 100%;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__actions {\n    width: 100%;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__action {\n    min-width: 0;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__code {\n    font-size: 80px;\n  }\n}\n\n@media (max-height: 760px) {\n  .farm-runtime-error__viewport .farm-default-error {\n    place-items: start center;\n    padding-top: 12px;\n    padding-bottom: 12px;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__code {\n    font-size: 88px;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__eyebrow {\n    margin-top: 14px;\n    margin-bottom: 12px;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__summary {\n    margin-bottom: 14px;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__row {\n    min-height: 42px;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__details {\n    padding-top: 12px;\n    padding-bottom: 10px;\n  }\n\n  .farm-runtime-error__viewport .farm-default-error__actions {\n    /* The redesigned page is taller than a short window. Rather than shrink it\n       until it is unreadable, keep the recovery controls pinned to the bottom\n       so they stay reachable while the rest of the report scrolls under them. */\n    position: sticky;\n    bottom: 0;\n    z-index: 1;\n    margin-top: 10px;\n    padding: 10px 0;\n    background: var(--farm-error-bg);\n  }\n}\n`;\n\nconst OVERLAY_MARKUP = `\n<div class=\"farm-runtime-error__viewport\" data-farm-runtime-error-viewport>\n  <main class=\"farm-default-error\" data-farm-runtime-error role=\"alertdialog\" aria-modal=\"true\" aria-labelledby=\"farm-runtime-error-title\" aria-describedby=\"farm-runtime-error-description\">\n    <div class=\"farm-default-error__content\">\n      <p class=\"farm-default-error__code\" aria-hidden=\"true\">500</p>\n      <p class=\"farm-default-error__eyebrow\">Runtime error</p>\n      <header class=\"farm-default-error__summary\">\n        <h1 id=\"farm-runtime-error-title\" class=\"farm-default-error__title\">Application failed in the browser</h1>\n      </header>\n      <section class=\"farm-default-error__panel\" aria-label=\"Error information\">\n        <div class=\"farm-default-error__row\">\n          <span class=\"farm-default-error__label\">Error type</span>\n          <span class=\"farm-default-error__value\" data-farm-runtime-error-type></span>\n        </div>\n        <div class=\"farm-default-error__row\">\n          <span class=\"farm-default-error__label\">Error message</span>\n          <span id=\"farm-runtime-error-description\" class=\"farm-default-error__value farm-runtime-error__message-value\" data-farm-runtime-error-message></span>\n        </div>\n        <div class=\"farm-default-error__row\">\n          <span class=\"farm-default-error__label\">Location</span>\n          <span class=\"farm-default-error__value\" data-farm-runtime-error-location></span>\n        </div>\n        <section class=\"farm-default-error__details\" aria-labelledby=\"farm-runtime-error-details-title\">\n          <div class=\"farm-default-error__details-header\">\n            <h2 id=\"farm-runtime-error-details-title\" class=\"farm-default-error__details-title\">Details</h2>\n            <span class=\"farm-runtime-error__occurrences\" data-farm-runtime-error-occurrences hidden></span>\n            <button class=\"farm-default-error__copy farm-runtime-error__copy\" type=\"button\" data-farm-runtime-error-copy>\n              <span data-farm-runtime-error-copy-label>Copy debug report</span>\n              <span class=\"farm-default-error__sr-only\" aria-live=\"polite\" data-farm-runtime-error-copy-status></span>\n            </button>\n          </div>\n          <div data-farm-runtime-error-source></div>\n          <p class=\"farm-default-error__meta\" data-farm-runtime-error-meta></p>\n        </section>\n      </section>\n      <div class=\"farm-default-error__actions\">\n        <a class=\"farm-default-error__action farm-default-error__action--primary farm-runtime-error__action\" data-farm-runtime-error-issue target=\"_blank\" rel=\"noopener noreferrer\"><svg class=\"farm-runtime-error__github-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 .7a11.5 11.5 0 0 0-3.64 22.41c.58.1.79-.25.79-.56v-2.23c-3.22.7-3.9-1.37-3.9-1.37-.52-1.34-1.28-1.69-1.28-1.69-1.05-.72.08-.7.08-.7 1.16.08 1.77 1.19 1.77 1.19 1.03 1.77 2.7 1.26 3.36.96.1-.75.4-1.26.73-1.55-2.57-.29-5.27-1.29-5.27-5.68 0-1.26.45-2.28 1.18-3.09-.12-.29-.51-1.47.11-3.05 0 0 .96-.31 3.16 1.18A10.95 10.95 0 0 1 12 6.1c.98 0 1.95.13 2.87.39 2.2-1.49 3.16-1.18 3.16-1.18.62 1.58.23 2.76.11 3.05.74.81 1.18 1.83 1.18 3.09 0 4.4-2.71 5.38-5.29 5.67.42.36.79 1.07.79 2.16v3.27c0 .31.21.67.8.56A11.5 11.5 0 0 0 12 .7Z\" /></svg><span>Open GitHub issue</span></a>\n        <button class=\"farm-default-error__action farm-runtime-error__action\" type=\"button\" data-farm-runtime-error-reload>Reload page</button>\n        <button class=\"farm-default-error__action farm-runtime-error__action\" type=\"button\" data-farm-runtime-error-dismiss>Dismiss</button>\n      </div>\n    </div>\n  </main>\n</div>\n`;\n\nclass DefaultFarmRuntimeErrorOverlay implements FarmRuntimeErrorOverlay {\n  private readonly options: FarmRuntimeErrorOverlayOptions;\n  private readonly document: Document;\n  private readonly host: HTMLDivElement;\n  private readonly shadow: ShadowRoot;\n  private readonly dismissedFingerprints = new Set<string>();\n  private readonly themeObserver: MutationObserver;\n  private readonly colorSchemeQuery?: MediaQueryList;\n  private current?: RuntimeErrorRecord;\n  private previousFocus?: Element | null;\n  private renderSequence = 0;\n  private copyResetTimer?: number;\n  private destroyed = false;\n\n  constructor(options: FarmRuntimeErrorOverlayOptions) {\n    this.options = options;\n    this.document = options.window.document;\n    this.host = this.document.createElement(\"div\");\n    this.host.dataset.farmRuntimeErrorOverlay = \"\";\n    this.host.hidden = true;\n    this.shadow = this.host.attachShadow({ mode: \"open\" });\n    this.shadow.innerHTML = `<style>${DEFAULT_ERROR_STYLES}${OVERLAY_STYLES}</style>${OVERLAY_MARKUP}`;\n\n    this.getElement<HTMLButtonElement>(\"[data-farm-runtime-error-reload]\").addEventListener(\n      \"click\",\n      this.handleReload,\n    );\n    this.getElement<HTMLButtonElement>(\"[data-farm-runtime-error-dismiss]\").addEventListener(\n      \"click\",\n      this.handleDismiss,\n    );\n    this.getElement<HTMLButtonElement>(\"[data-farm-runtime-error-copy]\").addEventListener(\n      \"click\",\n      this.handleCopy,\n    );\n    this.shadow.addEventListener(\"keydown\", this.handleKeyDown);\n\n    this.themeObserver = new MutationObserver(this.updateTheme);\n    this.themeObserver.observe(this.document.documentElement, {\n      attributes: true,\n      attributeFilter: [\"class\", \"data-theme\", \"data-color-scheme\", \"style\"],\n    });\n    if (this.document.body) {\n      this.themeObserver.observe(this.document.body, {\n        attributes: true,\n        attributeFilter: [\"class\", \"data-theme\", \"data-color-scheme\", \"style\"],\n      });\n    }\n\n    this.colorSchemeQuery = options.window.matchMedia?.(\"(prefers-color-scheme: dark)\");\n    this.colorSchemeQuery?.addEventListener?.(\"change\", this.updateTheme);\n    this.updateTheme();\n  }\n\n  show(errorLike: unknown, context: FarmRuntimeErrorOverlayContext): void {\n    if (this.destroyed || isChunkLoadError(errorLike) || isChunkLoadError(context.sourceEvent)) {\n      return;\n    }\n\n    const error = normalizeRuntimeError(errorLike);\n    const sourceLocation = resolveBrowserSourceLocation(\n      error,\n      context.sourceEvent,\n      this.options.window,\n    );\n    if (sourceLocation && isBrowserExtensionUrl(sourceLocation.url)) return;\n    if (isRecoverableReactHydrationError(error, context, sourceLocation)) return;\n\n    const fingerprint = createErrorFingerprint(error, context, sourceLocation);\n    if (this.dismissedFingerprints.has(fingerprint)) return;\n\n    if (this.current?.fingerprint === fingerprint) {\n      this.current.occurrences += 1;\n      this.renderOccurrences(this.current.occurrences);\n      return;\n    }\n\n    const record: RuntimeErrorRecord = {\n      error,\n      context,\n      fingerprint,\n      occurrences: 1,\n      sourceLocation,\n      sourceFrame: createFallbackSourceFrame(error, sourceLocation),\n    };\n    this.current = record;\n    const sequence = ++this.renderSequence;\n    this.render(record);\n    this.mount();\n\n    if (sourceLocation) {\n      void loadBrowserSourceFrame(sourceLocation, this.options)\n        .then((sourceFrame) => {\n          if (\n            !sourceFrame ||\n            this.destroyed ||\n            sequence !== this.renderSequence ||\n            this.current !== record\n          ) {\n            return;\n          }\n          record.sourceFrame = sourceFrame;\n          this.renderSourceFrame(sourceFrame);\n          this.renderIssueLink(record);\n        })\n        .catch(() => {});\n    }\n  }\n\n  dismiss(): void {\n    if (this.destroyed || this.host.hidden) return;\n    if (this.current) this.dismissedFingerprints.add(this.current.fingerprint);\n    this.host.hidden = true;\n    this.renderSequence += 1;\n    if (this.previousFocus instanceof HTMLElement && this.previousFocus.isConnected) {\n      this.previousFocus.focus();\n    }\n    this.previousFocus = undefined;\n  }\n\n  destroy(): void {\n    if (this.destroyed) return;\n    this.destroyed = true;\n    this.renderSequence += 1;\n    this.themeObserver.disconnect();\n    this.colorSchemeQuery?.removeEventListener?.(\"change\", this.updateTheme);\n    this.shadow.removeEventListener(\"keydown\", this.handleKeyDown);\n    if (this.copyResetTimer !== undefined) {\n      this.options.window.clearTimeout(this.copyResetTimer);\n    }\n    this.host.remove();\n    this.current = undefined;\n  }\n\n  private mount(): void {\n    if (!this.host.isConnected) {\n      (this.document.body || this.document.documentElement).appendChild(this.host);\n    }\n    const wasHidden = this.host.hidden;\n    this.host.hidden = false;\n    if (wasHidden) {\n      this.previousFocus = this.document.activeElement;\n      this.options.window.setTimeout(() => {\n        if (!this.host.hidden && !this.destroyed) {\n          this.getElement<HTMLAnchorElement>(\"[data-farm-runtime-error-issue]\").focus({\n            preventScroll: true,\n          });\n        }\n      }, 0);\n    }\n  }\n\n  private render(record: RuntimeErrorRecord): void {\n    this.getElement(\"[data-farm-runtime-error-type]\").textContent = formatErrorType(\n      record.error,\n      record.context.phase,\n    );\n    renderErrorMessage(\n      this.getElement(\"[data-farm-runtime-error-message]\"),\n      record.error.message,\n      this.document,\n    );\n    this.getElement(\"[data-farm-runtime-error-location]\").textContent =\n      `${record.context.location.pathname}${record.context.location.search}` || \"/\";\n    this.getElement(\"[data-farm-runtime-error-meta]\").textContent =\n      `Farm.js v${this.options.farmVersion || FARM_VERSION} · development · browser`;\n    this.renderIssueLink(record);\n    this.renderOccurrences(record.occurrences);\n    this.renderSourceFrame(record.sourceFrame);\n    this.resetCopyStatus();\n  }\n\n  private renderOccurrences(occurrences: number): void {\n    const badge = this.getElement<HTMLElement>(\"[data-farm-runtime-error-occurrences]\");\n    badge.hidden = occurrences < 2;\n    badge.textContent = occurrences < 2 ? \"\" : `Repeated ×${occurrences}`;\n  }\n\n  private renderIssueLink(record: RuntimeErrorRecord): void {\n    this.getElement<HTMLAnchorElement>(\"[data-farm-runtime-error-issue]\").href =\n      createGithubIssueUrl(record, this.options.window, this.options.farmVersion || FARM_VERSION);\n  }\n\n  private renderSourceFrame(sourceFrame: BrowserSourceFrame): void {\n    const container = this.getElement<HTMLElement>(\"[data-farm-runtime-error-source]\");\n    container.replaceChildren();\n\n    const source = this.document.createElement(\"div\");\n    source.className = \"farm-default-error__source\";\n\n    const path = this.document.createElement(\"p\");\n    path.className = \"farm-default-error__source-path\";\n    path.textContent = formatSourcePath(sourceFrame);\n    source.appendChild(path);\n\n    const pre = this.document.createElement(\"pre\");\n    pre.className = \"farm-default-error__source-code\";\n    pre.tabIndex = 0;\n    const code = this.document.createElement(\"code\");\n    for (const line of sourceFrame.lines) {\n      const row = this.document.createElement(\"span\");\n      row.className = `farm-default-error__source-line${line.highlight ? \" farm-default-error__source-line--active\" : \"\"}`;\n\n      const gutter = this.document.createElement(\"span\");\n      gutter.className = \"farm-default-error__source-gutter\";\n      gutter.textContent = `${line.highlight ? \">\" : \" \"} ${line.number ?? \"\"}`;\n\n      const text = this.document.createElement(\"span\");\n      text.className = \"farm-default-error__source-text\";\n      text.textContent = line.content || \" \";\n\n      row.append(gutter, text);\n      code.appendChild(row);\n    }\n    pre.appendChild(code);\n    source.appendChild(pre);\n    container.appendChild(source);\n  }\n\n  private readonly handleReload = () => {\n    (this.options.reload || (() => this.options.window.location.reload()))();\n  };\n\n  private readonly handleDismiss = () => {\n    this.dismiss();\n  };\n\n  private readonly handleCopy = async () => {\n    if (!this.current) return;\n    const report = createFarmRuntimeErrorDebugReport(\n      this.current,\n      this.options.window,\n      this.options.farmVersion || FARM_VERSION,\n    );\n    const label = this.getElement<HTMLElement>(\"[data-farm-runtime-error-copy-label]\");\n    const status = this.getElement<HTMLElement>(\"[data-farm-runtime-error-copy-status]\");\n\n    try {\n      await copyText(report, this.options.window, this.document);\n      label.textContent = \"Copied\";\n      status.textContent = \"Debug report copied\";\n      if (this.copyResetTimer !== undefined) {\n        this.options.window.clearTimeout(this.copyResetTimer);\n      }\n      this.copyResetTimer = this.options.window.setTimeout(() => this.resetCopyStatus(), 1800);\n    } catch {\n      status.textContent = \"Unable to copy the debug report\";\n    }\n  };\n\n  private readonly handleKeyDown = (event: Event) => {\n    const keyboardEvent = event as KeyboardEvent;\n    if (keyboardEvent.key === \"Escape\") {\n      keyboardEvent.preventDefault();\n      this.dismiss();\n      return;\n    }\n    if (keyboardEvent.key !== \"Tab\") return;\n\n    const controls = Array.from(\n      this.shadow.querySelectorAll<HTMLElement>(\"a[href], button:not([hidden]):not([disabled])\"),\n    );\n    if (controls.length === 0) return;\n    const first = controls[0];\n    const last = controls[controls.length - 1];\n    const active = this.shadow.activeElement;\n\n    if (keyboardEvent.shiftKey && active === first) {\n      keyboardEvent.preventDefault();\n      last.focus();\n    } else if (!keyboardEvent.shiftKey && active === last) {\n      keyboardEvent.preventDefault();\n      first.focus();\n    }\n  };\n\n  private readonly updateTheme = () => {\n    this.getElement<HTMLElement>(\"[data-farm-runtime-error-viewport]\").dataset.theme =\n      resolveDocumentTheme(this.document, this.options.window);\n  };\n\n  private resetCopyStatus(): void {\n    this.getElement(\"[data-farm-runtime-error-copy-label]\").textContent = \"Copy debug report\";\n    this.getElement(\"[data-farm-runtime-error-copy-status]\").textContent = \"\";\n  }\n\n  private getElement<T extends Element = HTMLElement>(selector: string): T {\n    const element = this.shadow.querySelector<T>(selector);\n    if (!element) throw new Error(`Farm runtime error overlay is missing ${selector}`);\n    return element;\n  }\n}\n\nexport function createFarmRuntimeErrorOverlay(\n  options: FarmRuntimeErrorOverlayOptions,\n): FarmRuntimeErrorOverlay {\n  return new DefaultFarmRuntimeErrorOverlay(options);\n}\n\nfunction normalizeRuntimeError(errorLike: unknown): NormalizedRuntimeError {\n  if (errorLike instanceof Error) {\n    return {\n      name: errorLike.name || \"Error\",\n      message: errorLike.message || \"An unknown browser error occurred.\",\n      stack: errorLike.stack,\n    };\n  }\n\n  if (errorLike && typeof errorLike === \"object\") {\n    const error = errorLike as Record<string, unknown>;\n    const name = typeof error.name === \"string\" && error.name ? error.name : \"Error\";\n    const message =\n      typeof error.message === \"string\" && error.message\n        ? error.message\n        : typeof error.reason === \"string\" && error.reason\n          ? error.reason\n          : stringifyUnknown(errorLike);\n    return {\n      name,\n      message: message || \"An unknown browser error occurred.\",\n      stack: typeof error.stack === \"string\" ? error.stack : undefined,\n    };\n  }\n\n  return {\n    name: \"Error\",\n    message: stringifyUnknown(errorLike) || \"An unknown browser error occurred.\",\n  };\n}\n\nfunction stringifyUnknown(value: unknown): string {\n  if (typeof value === \"string\") return value;\n  if (value == null) return \"\";\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n}\n\nfunction resolveBrowserSourceLocation(\n  error: NormalizedRuntimeError,\n  sourceEvent: Event | undefined,\n  clientWindow: Window,\n): BrowserSourceLocation | undefined {\n  if (sourceEvent && \"filename\" in sourceEvent) {\n    const event = sourceEvent as ErrorEvent;\n    if (event.filename && event.lineno) {\n      return createSourceLocation(event.filename, event.lineno, event.colno || 1, clientWindow);\n    }\n  }\n\n  if (!error.stack) return undefined;\n  for (const stackLine of error.stack.split(\"\\n\").slice(1)) {\n    const match = stackLine\n      .trim()\n      .match(/\\(?((?:[a-z][a-z\\d+.-]*):\\/\\/[^)\\s]+|\\/[^)\\s]+):(\\d+):(\\d+)\\)?$/i);\n    if (!match) continue;\n    return {\n      ...createSourceLocation(match[1], Number(match[2]), Number(match[3]), clientWindow),\n      stackLine: stackLine.trim(),\n    };\n  }\n  return undefined;\n}\n\nfunction createSourceLocation(\n  url: string,\n  line: number,\n  column: number,\n  clientWindow: Window,\n): BrowserSourceLocation {\n  let displayPath = url;\n  try {\n    const parsed = new URL(url, clientWindow.location.href);\n    displayPath = parsed.origin === clientWindow.location.origin ? parsed.pathname : parsed.href;\n  } catch {}\n\n  return { url, displayPath, line, column };\n}\n\nfunction createFallbackSourceFrame(\n  error: NormalizedRuntimeError,\n  location?: BrowserSourceLocation,\n): BrowserSourceFrame {\n  const firstStackLine =\n    location?.stackLine || error.stack?.split(\"\\n\").find((line) => line.trim().startsWith(\"at \"));\n  return {\n    path: location?.displayPath || \"Browser stack\",\n    line: location?.line,\n    column: location?.column,\n    unavailable: true,\n    lines: [\n      {\n        number: location?.line,\n        content: firstStackLine?.trim() || error.message,\n        highlight: true,\n      },\n    ],\n  };\n}\n\nasync function loadBrowserSourceFrame(\n  location: BrowserSourceLocation,\n  options: FarmRuntimeErrorOverlayOptions,\n): Promise<BrowserSourceFrame | undefined> {\n  const request = options.fetch || options.window.fetch?.bind(options.window);\n  if (!request) return undefined;\n\n  let sourceUrl: URL;\n  try {\n    sourceUrl = new URL(location.url, options.window.location.href);\n  } catch {\n    return undefined;\n  }\n  if (\n    sourceUrl.origin !== options.window.location.origin ||\n    (sourceUrl.protocol !== \"http:\" && sourceUrl.protocol !== \"https:\")\n  ) {\n    return undefined;\n  }\n\n  try {\n    const response = await request(sourceUrl.href, {\n      headers: { Accept: \"text/plain, application/javascript\" },\n    });\n    if (!response.ok) return undefined;\n    const source = await response.text();\n    if (source.length > 1_000_000) return undefined;\n\n    const mappedFrame = await createMappedSourceFrame(\n      source,\n      sourceUrl,\n      location,\n      request,\n      options.window,\n    );\n    if (mappedFrame) return mappedFrame;\n\n    return createSourceFrame(source, location.displayPath, location.line, location.column);\n  } catch {\n    return undefined;\n  }\n}\n\nasync function createMappedSourceFrame(\n  generatedSource: string,\n  generatedUrl: URL,\n  location: BrowserSourceLocation,\n  request: typeof fetch,\n  clientWindow: Window,\n): Promise<BrowserSourceFrame | undefined> {\n  const traceMap = await loadTraceMap(generatedSource, generatedUrl, request, clientWindow);\n  if (!traceMap) return undefined;\n\n  const original = originalPositionFor(traceMap, {\n    line: location.line,\n    column: Math.max(0, location.column - 1),\n  });\n  if (!original.source || original.line == null) return undefined;\n\n  const originalSource = sourceContentFor(traceMap, original.source);\n  if (originalSource == null) return undefined;\n\n  const originalLines = originalSource.split(/\\r?\\n/);\n  const generatedLine = generatedSource.split(/\\r?\\n/)[location.line - 1] || \"\";\n  const line = refineOriginalLine(generatedLine, originalLines, original.line);\n  const lineContent = originalLines[line - 1] || \"\";\n  const trimmedGeneratedLine = generatedLine.trim();\n  const column =\n    line !== original.line && trimmedGeneratedLine && lineContent.includes(trimmedGeneratedLine)\n      ? lineContent.indexOf(trimmedGeneratedLine) + 1\n      : (original.column ?? 0) + 1;\n\n  return createSourceFrame(\n    originalSource,\n    formatDisplaySourceUrl(original.source, clientWindow),\n    line,\n    column,\n  );\n}\n\nasync function loadTraceMap(\n  generatedSource: string,\n  generatedUrl: URL,\n  request: typeof fetch,\n  clientWindow: Window,\n): Promise<TraceMap | undefined> {\n  const matches = Array.from(generatedSource.matchAll(/\\/\\/[#@]\\s*sourceMappingURL=([^\\s]+)/g));\n  const reference = matches[matches.length - 1]?.[1];\n  if (!reference) return undefined;\n\n  let sourceMapJson: string;\n  if (reference.startsWith(\"data:\")) {\n    sourceMapJson = decodeSourceMapDataUrl(reference, clientWindow);\n  } else {\n    const sourceMapUrl = new URL(reference, generatedUrl);\n    if (sourceMapUrl.origin !== clientWindow.location.origin) return undefined;\n    const response = await request(sourceMapUrl.href, {\n      headers: { Accept: \"application/json, text/plain\" },\n    });\n    if (!response.ok) return undefined;\n    sourceMapJson = await response.text();\n    if (sourceMapJson.length > 2_000_000) return undefined;\n  }\n\n  return new TraceMap(JSON.parse(sourceMapJson) as SourceMapInput, generatedUrl.href);\n}\n\nfunction decodeSourceMapDataUrl(value: string, clientWindow: Window): string {\n  const separator = value.indexOf(\",\");\n  if (separator < 0) throw new Error(\"Invalid inline source map\");\n  const metadata = value.slice(0, separator);\n  const payload = value.slice(separator + 1);\n  if (!metadata.includes(\";base64\")) return decodeURIComponent(payload);\n\n  const binary = clientWindow.atob(payload);\n  const bytes = new Uint8Array(binary.length);\n  for (let index = 0; index < binary.length; index += 1) {\n    bytes[index] = binary.charCodeAt(index);\n  }\n  return new TextDecoder().decode(bytes);\n}\n\nfunction refineOriginalLine(\n  generatedLine: string,\n  originalLines: string[],\n  mappedLine: number,\n): number {\n  const normalizedGeneratedLine = normalizeSourceLine(generatedLine);\n  if (normalizedGeneratedLine.length < 8) return mappedLine;\n\n  let bestMatch = mappedLine;\n  let bestDistance = Number.POSITIVE_INFINITY;\n  for (let index = 0; index < originalLines.length; index += 1) {\n    if (normalizeSourceLine(originalLines[index]) !== normalizedGeneratedLine) continue;\n    const line = index + 1;\n    const distance = Math.abs(line - mappedLine);\n    if (distance < bestDistance) {\n      bestMatch = line;\n      bestDistance = distance;\n    }\n  }\n  return bestMatch;\n}\n\nfunction normalizeSourceLine(value: string): string {\n  return value.trim().replace(/\\s+/g, \" \");\n}\n\nfunction createSourceFrame(\n  source: string,\n  path: string,\n  line: number,\n  column: number,\n): BrowserSourceFrame | undefined {\n  const lines = source.split(/\\r?\\n/);\n  if (line < 1 || line > lines.length) return undefined;\n  const start = Math.max(1, line - 2);\n  const end = Math.min(lines.length, line + 2);\n  const frameLines: BrowserSourceLine[] = [];\n  for (let number = start; number <= end; number += 1) {\n    frameLines.push({\n      number,\n      content: lines[number - 1] || \" \",\n      highlight: number === line,\n    });\n  }\n\n  return { path, line, column, lines: frameLines };\n}\n\nfunction formatDisplaySourceUrl(url: string, clientWindow: Window): string {\n  try {\n    const parsed = new URL(url, clientWindow.location.href);\n    return parsed.origin === clientWindow.location.origin ? parsed.pathname : parsed.href;\n  } catch {\n    return url.replace(/[?#].*$/, \"\");\n  }\n}\n\nfunction isBrowserExtensionUrl(url: string): boolean {\n  try {\n    return [\n      \"chrome-extension:\",\n      \"moz-extension:\",\n      \"safari-web-extension:\",\n      \"ms-browser-extension:\",\n    ].includes(new URL(url).protocol);\n  } catch {\n    return /^(?:chrome|moz|safari-web|ms-browser)-extension:\\/\\//i.test(url);\n  }\n}\n\nfunction isRecoverableReactHydrationError(\n  error: NormalizedRuntimeError,\n  context: FarmRuntimeErrorOverlayContext,\n  location?: BrowserSourceLocation,\n): boolean {\n  if (context.phase !== \"window\") return false;\n\n  const isKnownRecoverableMessage = [\n    /^Hydration failed because the server rendered (?:text|HTML) didn't match the client\\b/i,\n    /^Text content does not match server-rendered HTML\\b/i,\n    /^There was an error while hydrating but React was able to recover\\b/i,\n  ].some((pattern) => pattern.test(error.message));\n  if (!isKnownRecoverableMessage) return false;\n\n  return /(?:react-dom(?:_client)?(?:\\.development)?\\.js|react-dom\\/|throwOnHydrationMismatch|onRecoverableError)/i.test(\n    `${location?.url || \"\"}\\n${error.stack || \"\"}`,\n  );\n}\n\nfunction renderErrorMessage(container: Element, message: string, document: Document): void {\n  const fragments: Node[] = [];\n  const codePattern = /`([^`\\n]+)`|\\b[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*){2,}\\b/g;\n  let offset = 0;\n\n  for (const match of message.matchAll(codePattern)) {\n    const index = match.index ?? 0;\n    if (index > offset) fragments.push(document.createTextNode(message.slice(offset, index)));\n\n    const code = document.createElement(\"code\");\n    code.className = \"farm-runtime-error__inline-code\";\n    code.textContent = match[1] || match[0];\n    fragments.push(code);\n    offset = index + match[0].length;\n  }\n\n  if (offset < message.length) fragments.push(document.createTextNode(message.slice(offset)));\n  container.replaceChildren(...fragments);\n}\n\nfunction createErrorFingerprint(\n  error: NormalizedRuntimeError,\n  context: FarmRuntimeErrorOverlayContext,\n  location?: BrowserSourceLocation,\n): string {\n  return [\n    context.phase,\n    context.location.pathname,\n    error.name,\n    error.message,\n    location?.displayPath || \"\",\n    location?.line || \"\",\n    error.stack?.split(\"\\n\")[1]?.trim() || \"\",\n  ].join(\"\\u0000\");\n}\n\nfunction formatPhase(phase: string): string {\n  return phase\n    .replace(/^plugin:/, \"Plugin · \")\n    .replace(/-/g, \" \")\n    .replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction formatErrorType(error: NormalizedRuntimeError, phase: string): string {\n  const category =\n    phase === \"hydration\"\n      ? \"Hydration\"\n      : phase === \"navigation\"\n        ? \"Navigation\"\n        : phase === \"setup\" || phase.startsWith(\"plugin:\")\n          ? \"Plugin\"\n          : phase === \"performance\"\n            ? \"Performance\"\n            : \"Runtime\";\n  const name = error.name.trim() || \"Error\";\n  return `${category} ${name}`;\n}\n\nfunction formatSourcePath(sourceFrame: BrowserSourceFrame): string {\n  if (!sourceFrame.line) return sourceFrame.path;\n  return `${sourceFrame.path}:${sourceFrame.line}:${sourceFrame.column || 1}${\n    sourceFrame.unavailable ? \" · source preview unavailable\" : \"\"\n  }`;\n}\n\nfunction resolveDocumentTheme(document: Document, clientWindow: Window): \"light\" | \"dark\" {\n  for (const element of [document.documentElement, document.body]) {\n    if (!element) continue;\n    const explicit =\n      element.getAttribute(\"data-theme\") || element.getAttribute(\"data-color-scheme\");\n    if (explicit === \"dark\" || element.classList.contains(\"dark\")) return \"dark\";\n    if (explicit === \"light\" || element.classList.contains(\"light\")) return \"light\";\n  }\n\n  const colorScheme = clientWindow.getComputedStyle?.(document.documentElement).colorScheme;\n  if (colorScheme?.includes(\"dark\") && !colorScheme.includes(\"light\")) return \"dark\";\n  return clientWindow.matchMedia?.(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nfunction createFarmRuntimeErrorDebugReport(\n  record: RuntimeErrorRecord,\n  clientWindow: Window,\n  farmVersion: string,\n): string {\n  const source = record.sourceFrame.lines\n    .map(\n      (line) =>\n        `${line.highlight ? \">\" : \" \"} ${line.number ? String(line.number).padStart(4, \" \") : \"    \"} | ${line.content}`,\n    )\n    .join(\"\\n\");\n  const viewport = `${clientWindow.innerWidth}×${clientWindow.innerHeight}`;\n\n  return [\n    \"# Farm.js client runtime debug report\",\n    \"\",\n    \"## Error\",\n    `- Type: ${formatErrorType(record.error, record.context.phase)}`,\n    `- Message: ${record.error.message}`,\n    `- Phase: ${formatPhase(record.context.phase)}`,\n    `- Page: ${record.context.location.href}`,\n    `- Occurrences: ${record.occurrences}`,\n    \"\",\n    \"## Browser runtime\",\n    `- Farm.js: ${farmVersion}`,\n    `- User agent: ${clientWindow.navigator.userAgent}`,\n    `- Viewport: ${viewport}`,\n    `- Online: ${clientWindow.navigator.onLine === false ? \"no\" : \"yes\"}`,\n    \"\",\n    \"## Source\",\n    `\\`${formatSourcePath(record.sourceFrame)}\\``,\n    \"\",\n    \"```text\",\n    source,\n    \"```\",\n    \"\",\n    \"## Stack trace\",\n    \"```text\",\n    record.error.stack || \"Stack trace unavailable.\",\n    \"```\",\n    \"\",\n    \"## Diagnostic request\",\n    \"Identify the most likely root cause from the message, source frame, and stack trace. Explain the smallest safe fix and how to verify it.\",\n  ].join(\"\\n\");\n}\n\nfunction createGithubIssueUrl(\n  record: RuntimeErrorRecord,\n  clientWindow: Window,\n  farmVersion: string,\n): string {\n  const source = record.sourceFrame.lines\n    .map(\n      (line) =>\n        `${line.highlight ? \">\" : \" \"} ${line.number ? String(line.number).padStart(4, \" \") : \"    \"} | ${line.content}`,\n    )\n    .join(\"\\n\");\n  const body = truncateText(\n    [\n      \"## Runtime error report\",\n      \"\",\n      \"> This report was prefilled by the Farm.js development error overlay. Review it and remove sensitive information before submitting.\",\n      \"\",\n      \"### Error\",\n      `- Type: ${formatErrorType(record.error, record.context.phase)}`,\n      `- Message: ${record.error.message}`,\n      `- Phase: ${formatPhase(record.context.phase)}`,\n      `- Page path: ${record.context.location.pathname}`,\n      `- Occurrences: ${record.occurrences}`,\n      `- Farm.js: ${farmVersion}`,\n      `- Browser: ${clientWindow.navigator.userAgent}`,\n      `- Viewport: ${clientWindow.innerWidth}×${clientWindow.innerHeight}`,\n      `- Online: ${clientWindow.navigator.onLine === false ? \"no\" : \"yes\"}`,\n      \"\",\n      \"### Source\",\n      `\\`${formatSourcePath(record.sourceFrame)}\\``,\n      \"\",\n      \"```text\",\n      source,\n      \"```\",\n      \"\",\n      \"### Stack trace\",\n      \"```text\",\n      record.error.stack || \"Stack trace unavailable.\",\n      \"```\",\n      \"\",\n      \"### Expected behavior\",\n      \"Describe what you expected to happen and the steps needed to reproduce the failure.\",\n      \"\",\n      \"### Diagnostic request\",\n      \"Identify the most likely root cause from the message, source frame, and stack trace. Explain the smallest safe fix and how to verify it.\",\n    ].join(\"\\n\"),\n    6_000,\n  );\n  const issueUrl = new URL(\"https://github.com/farming-labs/farm.js/issues/new\");\n  issueUrl.searchParams.set(\"title\", truncateText(`[runtime error] ${record.error.message}`, 120));\n  issueUrl.searchParams.set(\"body\", body);\n  return issueUrl.href;\n}\n\nfunction truncateText(value: string, maxLength: number): string {\n  if (value.length <= maxLength) return value;\n  return `${value.slice(0, maxLength - 24)}\\n\\n[report truncated]`;\n}\n\nasync function copyText(value: string, clientWindow: Window, document: Document): Promise<void> {\n  if (clientWindow.navigator.clipboard && clientWindow.isSecureContext) {\n    await clientWindow.navigator.clipboard.writeText(value);\n    return;\n  }\n\n  const area = document.createElement(\"textarea\");\n  area.value = value;\n  area.readOnly = true;\n  area.style.position = \"fixed\";\n  area.style.opacity = \"0\";\n  document.body.appendChild(area);\n  area.select();\n  const copied = document.execCommand(\"copy\");\n  area.remove();\n  if (!copied) throw new Error(\"Copy command was rejected\");\n}\n","\"use client\";\n\nimport {\n  createFarmRuntimeErrorOverlay,\n  type FarmRuntimeErrorOverlay,\n} from \"./runtime-error-overlay\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type FarmClientPluginEnforce = \"pre\" | \"post\";\nexport type FarmClientNavigationAction = \"push\" | \"replace\" | \"pop\";\nexport type FarmClientHydrationMode = \"hydrate\" | \"render\";\n\nexport interface FarmClientLocation {\n  href: string;\n  pathname: string;\n  search: string;\n  hash: string;\n}\n\nexport interface FarmClientPluginRouter {\n  navigate(href: string, options?: Record<string, unknown>): MaybePromise<void>;\n  /** Re-render the current URL from fresh server data without replacing the document shell. */\n  refresh?(options?: Record<string, unknown>): MaybePromise<void>;\n  prefetch?(href: string): MaybePromise<void>;\n  clearCache?(): void;\n  getNavigationState?(): unknown;\n}\n\nexport interface FarmClientPluginMetadata {\n  name: string;\n  version?: string;\n}\n\nexport interface FarmClientPluginSetupEvent<TPublic = undefined> {\n  plugin: FarmClientPluginMetadata;\n  public: Readonly<TPublic>;\n  router: FarmClientPluginRouter;\n  isDev: boolean;\n  isProd: boolean;\n  deploymentId?: string;\n}\n\nexport interface FarmClientPluginStateEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientPluginSetupEvent<TPublic> {\n  state: TState;\n}\n\nexport interface FarmClientHydrationSession {\n  container: Element;\n  location: FarmClientLocation;\n  mode: FarmClientHydrationMode;\n  startedAt: number;\n}\n\nexport interface FarmClientHydrationEvent<TState = unknown, TPublic = undefined>\n  extends FarmClientPluginStateEvent<TState, TPublic>, FarmClientHydrationSession {}\n\nexport interface FarmClientHydrationCompleteEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientHydrationEvent<TState, TPublic> {\n  durationMs: number;\n  recovered: boolean;\n}\n\nexport interface FarmClientNavigationSession {\n  id: string;\n  from: FarmClientLocation | null;\n  to: FarmClientLocation;\n  action: FarmClientNavigationAction;\n  signal: AbortSignal;\n  startedAt: number;\n  route?: {\n    pattern?: string | null;\n    params?: Record<string, string>;\n  };\n}\n\nexport interface FarmClientNavigationEvent<TState = unknown, TPublic = undefined>\n  extends FarmClientPluginStateEvent<TState, TPublic>, FarmClientNavigationSession {}\n\nexport interface FarmClientNavigationLoadedEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientNavigationEvent<TState, TPublic> {\n  durationMs: number;\n  data?: unknown;\n}\n\nexport interface FarmClientNavigationResolvedEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientNavigationEvent<TState, TPublic> {\n  durationMs: number;\n}\n\nexport interface FarmClientNavigationErrorEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientNavigationResolvedEvent<TState, TPublic> {\n  error: unknown;\n}\n\nexport type FarmClientPluginErrorPhase =\n  | \"setup\"\n  | \"hydration\"\n  | \"navigation\"\n  | \"window\"\n  | \"unhandled-rejection\"\n  | \"performance\"\n  | `plugin:${string}`\n  | (string & {});\n\nexport interface FarmClientPluginErrorEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientPluginStateEvent<TState, TPublic> {\n  error: unknown;\n  phase: FarmClientPluginErrorPhase;\n  location: FarmClientLocation;\n  navigation?: FarmClientNavigationSession;\n}\n\nexport interface FarmClientPerformanceEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientPluginStateEvent<TState, TPublic> {\n  entry: PerformanceEntry;\n  location: FarmClientLocation;\n}\n\nexport interface FarmClientPluginCloseEvent<\n  TState = unknown,\n  TPublic = undefined,\n> extends FarmClientPluginStateEvent<TState, TPublic> {\n  reason: \"pagehide\" | \"hmr\" | \"manual\" | (string & {});\n}\n\nexport interface FarmClientPlugin<TState = unknown, TPublic = undefined> {\n  setup?(event: FarmClientPluginSetupEvent<TPublic>): MaybePromise<TState>;\n  hydration?: {\n    before?(event: FarmClientHydrationEvent<TState, TPublic>): MaybePromise<void>;\n    after?(event: FarmClientHydrationCompleteEvent<TState, TPublic>): MaybePromise<void>;\n  };\n  navigation?: {\n    before?(event: FarmClientNavigationEvent<TState, TPublic>): MaybePromise<void>;\n    loaded?(event: FarmClientNavigationLoadedEvent<TState, TPublic>): MaybePromise<void>;\n    resolved?(event: FarmClientNavigationResolvedEvent<TState, TPublic>): MaybePromise<void>;\n    rendered?(event: FarmClientNavigationResolvedEvent<TState, TPublic>): MaybePromise<void>;\n    error?(event: FarmClientNavigationErrorEvent<TState, TPublic>): MaybePromise<void>;\n  };\n  error?(event: FarmClientPluginErrorEvent<TState, TPublic>): MaybePromise<void>;\n  performance?(event: FarmClientPerformanceEvent<TState, TPublic>): MaybePromise<void>;\n  close?(event: FarmClientPluginCloseEvent<TState, TPublic>): MaybePromise<void>;\n}\n\nexport interface FarmClientPluginRegistration<TPublic = undefined> {\n  name: string;\n  version?: string;\n  enforce?: FarmClientPluginEnforce;\n  definition: FarmClientPlugin<any, TPublic>;\n  public?: TPublic;\n}\n\n/**\n * Define the lifecycle for an application's auto-discovered `src/client.ts`\n * entry. The identity helper preserves state inference while keeping the\n * module entirely in the browser bundle.\n */\nexport function defineClient<TState = unknown, TPublic = undefined>(\n  definition: FarmClientPlugin<TState, TPublic>,\n): FarmClientPlugin<TState, TPublic> {\n  return definition;\n}\n\nexport interface FarmClientPluginManagerOptions {\n  router: FarmClientPluginRouter;\n  isDev?: boolean;\n  isProd?: boolean;\n  deploymentId?: string;\n  window?: Window;\n}\n\ninterface FarmClientPluginInstance {\n  registration: FarmClientPluginRegistration<any>;\n  plugin: FarmClientPlugin<any, any>;\n  state: unknown;\n}\n\nconst PERFORMANCE_ENTRY_TYPES = [\n  \"navigation\",\n  \"paint\",\n  \"largest-contentful-paint\",\n  \"layout-shift\",\n  \"event\",\n];\n\nexport class FarmClientPluginManager {\n  private readonly registrations: FarmClientPluginRegistration[];\n  private readonly options: FarmClientPluginManagerOptions;\n  private readonly instances: FarmClientPluginInstance[] = [];\n  private readonly performanceObservers: PerformanceObserver[] = [];\n  private startPromise?: Promise<void>;\n  private closePromise?: Promise<void>;\n  private currentNavigation?: {\n    controller: AbortController;\n    session: FarmClientNavigationSession;\n  };\n  private navigationSequence = 0;\n  private starting = false;\n  private started = false;\n  private closed = false;\n  private readonly reportedErrors = new WeakSet<object>();\n  private readonly runtimeErrorOverlay?: FarmRuntimeErrorOverlay;\n\n  private readonly handleWindowError = (event: ErrorEvent) => {\n    const error = event.error ?? new Error(event.message || \"Unknown browser error\");\n    void this.reportError(error, \"window\", undefined, this.getLocation(), event);\n  };\n\n  private readonly handleUnhandledRejection = (event: PromiseRejectionEvent) => {\n    void this.reportError(\n      event.reason,\n      \"unhandled-rejection\",\n      undefined,\n      this.getLocation(),\n      event,\n    );\n  };\n\n  private readonly handlePageHide = (event: PageTransitionEvent) => {\n    // A persisted pagehide means the page is entering the back/forward cache and\n    // may be restored. close() is terminal — start() refuses to run again once\n    // closed — so tearing down here would hand the restored page dead scripts,\n    // PWA, and observability plugins with nothing able to revive them.\n    if (event.persisted) return;\n    void this.close(\"pagehide\");\n  };\n\n  constructor(\n    registrations: readonly FarmClientPluginRegistration[],\n    options: FarmClientPluginManagerOptions,\n  ) {\n    this.registrations = sortRegistrations(registrations);\n    this.options = {\n      ...options,\n      isDev: options.isDev ?? false,\n      isProd: options.isProd ?? !options.isDev,\n      window: options.window ?? (typeof window !== \"undefined\" ? window : undefined),\n    };\n    if (this.options.isDev && this.options.window) {\n      this.runtimeErrorOverlay = createFarmRuntimeErrorOverlay({\n        window: this.options.window,\n      });\n    }\n  }\n\n  start(): Promise<void> {\n    if (this.startPromise) return this.startPromise;\n\n    this.startPromise = Promise.resolve().then(() => this.startInternal());\n    return this.startPromise;\n  }\n\n  async beginHydration(input: {\n    container: Element;\n    mode: FarmClientHydrationMode;\n  }): Promise<FarmClientHydrationSession> {\n    await this.start();\n    const session: FarmClientHydrationSession = {\n      ...input,\n      location: this.getLocation(),\n      startedAt: now(),\n    };\n\n    await this.runHook(\"hydration.before\", (instance) =>\n      instance.plugin.hydration?.before?.({\n        ...this.createStateEvent(instance),\n        ...session,\n      }),\n    );\n\n    return session;\n  }\n\n  async completeHydration(\n    session: FarmClientHydrationSession,\n    options: { recovered?: boolean } = {},\n  ): Promise<void> {\n    await this.runHook(\"hydration.after\", (instance) =>\n      instance.plugin.hydration?.after?.({\n        ...this.createStateEvent(instance),\n        ...session,\n        durationMs: now() - session.startedAt,\n        recovered: options.recovered ?? false,\n      }),\n    );\n  }\n\n  async failHydration(session: FarmClientHydrationSession, error: unknown): Promise<void> {\n    await this.reportError(error, \"hydration\", undefined, session.location);\n  }\n\n  async beginNavigation(input: {\n    from?: string | URL | FarmClientLocation | null;\n    to: string | URL | FarmClientLocation;\n    action: FarmClientNavigationAction;\n    route?: FarmClientNavigationSession[\"route\"];\n  }): Promise<FarmClientNavigationSession> {\n    await this.start();\n    this.currentNavigation?.controller.abort(\"superseded\");\n\n    const controller = new AbortController();\n    const session: FarmClientNavigationSession = {\n      id: `navigation:${++this.navigationSequence}`,\n      from:\n        input.from === null\n          ? null\n          : toClientLocation(input.from ?? this.getLocation().href, this.getBaseUrl()),\n      to: toClientLocation(input.to, this.getBaseUrl()),\n      action: input.action,\n      signal: controller.signal,\n      startedAt: now(),\n      route: input.route,\n    };\n\n    this.currentNavigation = { controller, session };\n    await this.runHook(\"navigation.before\", (instance) =>\n      instance.plugin.navigation?.before?.({\n        ...this.createStateEvent(instance),\n        ...session,\n      }),\n    );\n\n    return session;\n  }\n\n  async markNavigationLoaded(session: FarmClientNavigationSession, data?: unknown): Promise<void> {\n    if (session.signal.aborted) return;\n    await this.runHook(\"navigation.loaded\", (instance) =>\n      instance.plugin.navigation?.loaded?.({\n        ...this.createStateEvent(instance),\n        ...session,\n        data,\n        durationMs: now() - session.startedAt,\n      }),\n    );\n  }\n\n  cancelNavigation(session?: FarmClientNavigationSession, reason: unknown = \"canceled\"): void {\n    const current = this.currentNavigation;\n    if (!current || (session && current.session !== session)) return;\n    current.controller.abort(reason);\n    this.currentNavigation = undefined;\n  }\n\n  async resolveNavigation(session: FarmClientNavigationSession): Promise<void> {\n    if (session.signal.aborted) return;\n    await this.runHook(\"navigation.resolved\", (instance) =>\n      instance.plugin.navigation?.resolved?.({\n        ...this.createStateEvent(instance),\n        ...session,\n        durationMs: now() - session.startedAt,\n      }),\n    );\n  }\n\n  scheduleNavigationRendered(session: FarmClientNavigationSession): Promise<void> {\n    if (session.signal.aborted) return Promise.resolve();\n    const clientWindow = this.options.window;\n    const schedule = clientWindow?.requestAnimationFrame\n      ? (callback: () => void) =>\n          clientWindow.requestAnimationFrame(() => clientWindow.requestAnimationFrame(callback))\n      : (callback: () => void) => setTimeout(callback, 0);\n\n    return new Promise((resolve) => {\n      schedule(() => {\n        if (session.signal.aborted || this.closed) {\n          resolve();\n          return;\n        }\n        void this.runHook(\"navigation.rendered\", (instance) =>\n          instance.plugin.navigation?.rendered?.({\n            ...this.createStateEvent(instance),\n            ...session,\n            durationMs: now() - session.startedAt,\n          }),\n        ).finally(() => {\n          if (this.currentNavigation?.session === session) {\n            this.currentNavigation = undefined;\n          }\n          resolve();\n        });\n      });\n    });\n  }\n\n  async failNavigation(session: FarmClientNavigationSession, error: unknown): Promise<void> {\n    if (!session.signal.aborted) {\n      await this.runHook(\"navigation.error\", (instance) =>\n        instance.plugin.navigation?.error?.({\n          ...this.createStateEvent(instance),\n          ...session,\n          durationMs: now() - session.startedAt,\n          error,\n        }),\n      );\n      await this.reportError(error, \"navigation\", session, session.to);\n    }\n\n    if (this.currentNavigation?.session === session) {\n      this.currentNavigation = undefined;\n    }\n  }\n\n  async reportError(\n    error: unknown,\n    phase: FarmClientPluginErrorPhase,\n    navigation?: FarmClientNavigationSession,\n    location = this.getLocation(),\n    sourceEvent?: Event,\n  ): Promise<void> {\n    if (this.closed) return;\n    if (isObject(error)) {\n      if (this.reportedErrors.has(error)) return;\n      this.reportedErrors.add(error);\n    }\n\n    if (!this.started && !this.starting) await this.start();\n    await this.runErrorHooks({ error, phase, navigation, location }, undefined, sourceEvent);\n  }\n\n  close(reason: FarmClientPluginCloseEvent[\"reason\"] = \"manual\"): Promise<void> {\n    if (this.closePromise) return this.closePromise;\n    this.closePromise = this.closeInternal(reason);\n    return this.closePromise;\n  }\n\n  getPlugins(): readonly FarmClientPluginMetadata[] {\n    return this.instances.map(({ registration }) => ({\n      name: registration.name,\n      version: registration.version,\n    }));\n  }\n\n  private async startInternal(): Promise<void> {\n    if (this.started || this.closed) return;\n    this.starting = true;\n\n    try {\n      for (const registration of this.registrations) {\n        try {\n          const definition = registration.definition;\n          if (!definition || typeof definition !== \"object\") {\n            throw new TypeError(\n              `Client plugin \"${registration.name}\" does not define a lifecycle object`,\n            );\n          }\n\n          const instance: FarmClientPluginInstance = {\n            registration,\n            plugin: definition,\n            state: undefined,\n          };\n          instance.state = await definition.setup?.(this.createSetupEvent(instance));\n          this.instances.push(instance);\n        } catch (error) {\n          this.logHookError(registration.name, \"setup\", error);\n          await this.runErrorHooks({\n            error,\n            phase: \"setup\",\n            location: this.getLocation(),\n          });\n        }\n      }\n\n      this.started = true;\n      this.installBrowserListeners();\n      this.installPerformanceObservers();\n    } finally {\n      this.starting = false;\n    }\n  }\n\n  private installBrowserListeners(): void {\n    const clientWindow = this.options.window;\n    if (!clientWindow) return;\n\n    if (this.runtimeErrorOverlay || this.instances.some(({ plugin }) => plugin.error)) {\n      clientWindow.addEventListener(\"error\", this.handleWindowError);\n      clientWindow.addEventListener(\"unhandledrejection\", this.handleUnhandledRejection);\n    }\n    // Not `once`: a persisted pagehide is ignored above, and the page can be\n    // restored and then genuinely unloaded later. close() is idempotent, so\n    // keeping the listener costs nothing and never disposes twice.\n    clientWindow.addEventListener(\"pagehide\", this.handlePageHide);\n  }\n\n  private installPerformanceObservers(): void {\n    if (!this.instances.some(({ plugin }) => plugin.performance)) return;\n    const Observer = typeof PerformanceObserver !== \"undefined\" ? PerformanceObserver : undefined;\n    if (!Observer) return;\n\n    const supported = new Set(Observer.supportedEntryTypes || []);\n    for (const type of PERFORMANCE_ENTRY_TYPES) {\n      if (!supported.has(type)) continue;\n      try {\n        const observer = new Observer((list: PerformanceObserverEntryList) => {\n          for (const entry of list.getEntries()) {\n            void this.runHook(\"performance\", (instance) =>\n              instance.plugin.performance?.({\n                ...this.createStateEvent(instance),\n                entry,\n                location: this.getLocation(),\n              }),\n            );\n          }\n        });\n        observer.observe({ type, buffered: true });\n        this.performanceObservers.push(observer);\n      } catch (error) {\n        void this.reportError(error, \"performance\");\n      }\n    }\n  }\n\n  private async closeInternal(reason: FarmClientPluginCloseEvent[\"reason\"]): Promise<void> {\n    if (this.closed) return;\n    if (this.startPromise) await this.startPromise;\n    this.closed = true;\n    this.currentNavigation?.controller.abort(reason);\n    this.currentNavigation = undefined;\n\n    const clientWindow = this.options.window;\n    clientWindow?.removeEventListener(\"error\", this.handleWindowError);\n    clientWindow?.removeEventListener(\"unhandledrejection\", this.handleUnhandledRejection);\n    clientWindow?.removeEventListener(\"pagehide\", this.handlePageHide);\n    for (const observer of this.performanceObservers) observer.disconnect();\n    this.performanceObservers.length = 0;\n    this.runtimeErrorOverlay?.destroy();\n\n    for (const instance of [...this.instances].reverse()) {\n      try {\n        await instance.plugin.close?.({\n          ...this.createStateEvent(instance),\n          reason,\n        });\n      } catch (error) {\n        this.logHookError(instance.registration.name, \"close\", error);\n      }\n    }\n  }\n\n  private async runHook(\n    hook: string,\n    invoke: (instance: FarmClientPluginInstance) => MaybePromise<void> | undefined,\n  ): Promise<void> {\n    for (const instance of this.instances) {\n      try {\n        await invoke(instance);\n      } catch (error) {\n        this.logHookError(instance.registration.name, hook, error);\n        await this.runErrorHooks(\n          {\n            error,\n            phase: `plugin:${hook}`,\n            location: this.getLocation(),\n          },\n          instance,\n        );\n      }\n    }\n  }\n\n  private async runErrorHooks(\n    event: Pick<FarmClientPluginErrorEvent, \"error\" | \"phase\" | \"location\" | \"navigation\">,\n    excluded?: FarmClientPluginInstance,\n    sourceEvent?: Event,\n  ): Promise<void> {\n    this.runtimeErrorOverlay?.show(event.error, {\n      phase: event.phase,\n      location: event.location,\n      sourceEvent,\n    });\n    for (const instance of this.instances) {\n      if (instance === excluded || !instance.plugin.error) continue;\n      try {\n        await instance.plugin.error({\n          ...this.createStateEvent(instance),\n          ...event,\n        });\n      } catch (error) {\n        this.logHookError(instance.registration.name, \"error\", error);\n      }\n    }\n  }\n\n  private createSetupEvent(\n    instance: Pick<FarmClientPluginInstance, \"registration\">,\n  ): FarmClientPluginSetupEvent<any> {\n    return {\n      plugin: {\n        name: instance.registration.name,\n        version: instance.registration.version,\n      },\n      public: readonlyPublicData(instance.registration.public),\n      router: this.options.router,\n      isDev: Boolean(this.options.isDev),\n      isProd: Boolean(this.options.isProd),\n      deploymentId: this.options.deploymentId,\n    };\n  }\n\n  private createStateEvent(\n    instance: FarmClientPluginInstance,\n  ): FarmClientPluginStateEvent<any, any> {\n    return {\n      ...this.createSetupEvent(instance),\n      state: instance.state,\n    };\n  }\n\n  private getLocation(): FarmClientLocation {\n    const href = this.options.window?.location.href ?? \"http://localhost/\";\n    return toClientLocation(href, href);\n  }\n\n  private getBaseUrl(): string {\n    return this.options.window?.location.href ?? \"http://localhost/\";\n  }\n\n  private logHookError(name: string, hook: string, error: unknown): void {\n    console.error(`[Farm.js] Client plugin \"${name}\" failed in ${hook}:`, error);\n  }\n}\n\nexport function createClientPluginManager(\n  registrations: readonly FarmClientPluginRegistration[],\n  options: FarmClientPluginManagerOptions,\n): FarmClientPluginManager {\n  return new FarmClientPluginManager(registrations, options);\n}\n\nfunction sortRegistrations(\n  registrations: readonly FarmClientPluginRegistration[],\n): FarmClientPluginRegistration[] {\n  const rank = (enforce?: FarmClientPluginEnforce) =>\n    enforce === \"pre\" ? 0 : enforce === \"post\" ? 2 : 1;\n  return registrations\n    .map((registration, index) => ({ registration, index }))\n    .sort(\n      (left, right) =>\n        rank(left.registration.enforce) - rank(right.registration.enforce) ||\n        left.index - right.index,\n    )\n    .map(({ registration }) => registration);\n}\n\nfunction toClientLocation(\n  input: string | URL | FarmClientLocation,\n  base: string,\n): FarmClientLocation {\n  if (typeof input === \"object\" && \"href\" in input && \"pathname\" in input) {\n    return {\n      href: input.href,\n      pathname: input.pathname,\n      search: input.search,\n      hash: input.hash,\n    };\n  }\n\n  const url = new URL(input, base);\n  return {\n    href: url.href,\n    pathname: url.pathname,\n    search: url.search,\n    hash: url.hash,\n  };\n}\n\nfunction readonlyPublicData<T>(value: T | undefined): Readonly<T> {\n  if (value && typeof value === \"object\") {\n    return Object.freeze(value);\n  }\n  return value as Readonly<T>;\n}\n\nfunction now(): number {\n  return typeof performance !== \"undefined\" ? performance.now() : Date.now();\n}\n\nfunction isObject(value: unknown): value is object {\n  return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n","import { useRouter as useFarmRouter } from \"./client/router\";\nimport { getRouter as getFarmSPARouter } from \"./client/spa-router\";\nimport { applyFarmBasePath } from \"./base-path\";\n\nexport {\n  getFarmRedirectError,\n  isFarmNotFoundError,\n  isFarmRedirectError,\n  notFound,\n  permanentRedirect,\n  redirect,\n} from \"./navigation-errors\";\nexport type { FarmRedirectSignal, FarmRedirectStatus } from \"./navigation-errors\";\n\nexport function useRouter() {\n  const router = useFarmRouter();\n  return {\n    push: router.push,\n    replace: router.replace,\n    back: router.back,\n    forward: router.forward,\n    refresh() {\n      if (typeof window === \"undefined\") return Promise.resolve();\n      return getFarmSPARouter().refresh();\n    },\n    prefetch(href: string) {\n      if (typeof window === \"undefined\") return Promise.resolve();\n      return getFarmSPARouter().prefetch(applyFarmBasePath(href));\n    },\n  };\n}\n\nexport function usePathname(): string {\n  return useFarmRouter().pathname;\n}\n\nexport function useSearchParams(): URLSearchParams {\n  return useFarmRouter().searchParams;\n}\n","import { getCurrentRequest } from \"./server/request\";\n\nexport interface RequestCookie {\n  name: string;\n  value: string;\n}\n\nexport interface ReadonlyHeaders extends Iterable<[string, string]> {\n  get(name: string): string | null;\n  has(name: string): boolean;\n  forEach(callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any): void;\n  entries(): IterableIterator<[string, string]>;\n  keys(): IterableIterator<string>;\n  values(): IterableIterator<string>;\n}\n\nexport interface ReadonlyRequestCookies extends Iterable<RequestCookie> {\n  get(name: string): RequestCookie | undefined;\n  getAll(name?: string): RequestCookie[];\n  has(name: string): boolean;\n  toString(): string;\n}\n\nexport function headers(): ReadonlyHeaders {\n  return new Headers(getCurrentRequest().headers) as ReadonlyHeaders;\n}\n\nexport function cookies(): ReadonlyRequestCookies {\n  const cookieHeader = getCurrentRequest().headers.get(\"cookie\") || \"\";\n  const parsed = parseCookieHeader(cookieHeader);\n\n  return {\n    get(name) {\n      return parsed.find((cookie) => cookie.name === name);\n    },\n    getAll(name) {\n      return name ? parsed.filter((cookie) => cookie.name === name) : [...parsed];\n    },\n    has(name) {\n      return parsed.some((cookie) => cookie.name === name);\n    },\n    toString() {\n      return cookieHeader;\n    },\n    [Symbol.iterator]() {\n      return parsed[Symbol.iterator]();\n    },\n  };\n}\n\nfunction parseCookieHeader(header: string): RequestCookie[] {\n  if (!header.trim()) return [];\n\n  return header\n    .split(\";\")\n    .map((part) => part.trim())\n    .filter(Boolean)\n    .map((part) => {\n      const separatorIndex = part.indexOf(\"=\");\n      if (separatorIndex === -1) {\n        return {\n          name: decodeCookiePart(part),\n          value: \"\",\n        };\n      }\n\n      return {\n        name: decodeCookiePart(part.slice(0, separatorIndex).trim()),\n        value: decodeCookiePart(part.slice(separatorIndex + 1).trim()),\n      };\n    })\n    .filter((cookie) => cookie.name.length > 0);\n}\n\nfunction decodeCookiePart(value: string) {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return value;\n  }\n}\n"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAxC,IAMa;AANb;AAAA;AAAA;AAMO,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBxB,mBAAmB,OAAO;AAAA;AAAA;AAAA,EAG1B,2BAA2B,kGAAkG,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA8T7H,kBAAkB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsF/B,2BAA2B,2DAA2D,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgZxF,2BAA2B,yEAAyE,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuFpG,2BAA2B,oDAAoD,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMnF,2BAA2B,wDAAwD,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA,uBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsDA,2BAA2B,wDAAwD,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBvF,uCAAuC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAucA,iCAAiC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BA6VlC,uBACI;AAAA;AAAA,aAGA,2BACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0FAyDkF,KAAK,UAAU,OAAO,OAAO,UAAU,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BA4T3H,uBACI;AAAA;AAAA,eAGA,4BACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAiGmC,KAAK,UAAU,wBAAwB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsHjF,uBACI;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["path","name","path","relativePath","fs","memoryDriver","storage","name","module","resolveDriver","base","operation","api","path","route","globalState","listeners","resolve","cookies","headers","path","resolve","context","cookies","headers","path","globalState","endpoint","route","name","api","operation","env","middleware","response","text","resolveStorageRuntimeClient","createIntegrationOrm","route","headers","name","text","name","module","route","secretError","context","fs","path","isAbsolutePath","normalizePath","pathToFileURL","build","resolvePath","relativeFilePath","pathSeparator","text","import_node_path","name","fs","path","safeFileName","name","route","redirect","headers","headers","throwIfAborted","context","globalState","path","name","path","name","build","import_node_module","import_node_path","import_node_url","escapeRegExp","name","loadModule","route","page","import_promises","after","text","name","storage","name","resolve","serialized","now","context","PROGRAMMATIC_ROUTE_FILE_NAMES","api","createProgrammaticRouteModuleId","getProgrammaticRouteSearchClientOptions","isProgrammaticRoutesFileName","parseProgrammaticRouteModuleId","parseProgrammaticRoutePath","redirect","scanProgrammaticPagePaths","path","route","createElement","FarmProgrammaticPageContent","FarmProgrammaticPage","context","name","action","getProgrammaticRouteManifest","import_path","createElement","path","headers","import_promises","import_path","fs","path","name","route","layout","estimatedBoundaryCount","import_fs","import_path","import_url","path","import_promises","import_node_path","name","import_path","layout","path","createRouteModuleFromProgrammaticPage","module","createLayoutModuleFromProgrammaticLayout","route","page","name","context","storage","headers","import_node_async_hooks","path","fs","import_node_fs","import_node_path","context","initialTagCount","icon","name","context","headers","output","resolve","headers","path","name","path","name","import_node_path","isPlainObject","name","import_promises","headers","redirect","readCookie","locale","name","IntlMessageFormat","getRequestStore","import_node_async_hooks","init_server","path","relative","name","import_node_crypto","import_node_fs","import_promises","import_node_path","import_node_module","import_node_url","context","bytes","createElement","headers","isResponse","isRecord","resolveCacheControl","toArray","getFarmGlobalState","normalizeCookiePath","init_config","init_config","init_bridge","readCookie","name","init_server","init_bridge","init_config","relative","relativePath","fs","path","import_node_url","context","init_server","React","reactRenderToString","reactRenderToPipeableStream","page","name","serializeInlineValue","escapeHtmlAttribute","toMiddlewareMap","fs","path","import_node_url","init_renderer","init_server","capabilities","renderToPipeableStream","resolve","layout","headers","route","redirect","relativePath","findStaticShellBoundary","html","normalizeBasePath","path","route","import_node_module","import_node_path","import_node_url","name","context","url","path","route","name","init_config","import_path","init_renderer","init_server","init_config","path","env","isRecord","path","fs","import_node_fs","import_node_path","path","fs","import_node_fs","import_node_path","headers","path","middleware","endpoint","betterCallEndpoint","context","result","path","endpoint","route","route","path","init_config","normalizePathname","route","init_route_pattern","route","endpoint","response","searchParamsToObject","headers","isWebResponse","text","init_runtime","init_config","init_route_pattern","fs","path","init_route_manager","init_server","init_runtime","route","relativePath","endpoint","getProgrammaticRouteManifest","decodeCookieValue","cookies","name","createContext","headers","cookies","applyResponseHeaders","name","context","module","picocolors","fs","path","middleware","module","createContext","result","match","name","import_node_fs","import_fs","import_path","route","relativePath","exports","path","name","route","path","fs","DEFAULT_OUT_FILE","CONFIG_FILENAMES","relativePath","fs","path","path","import_node_fs","import_node_path","findConfigPath","toTypeImportPath","registries","CONFIG_FILENAMES","relativePath","fs","path","name","import_node_fs","import_node_path","init_type_generator","name","import_fs","import_path","init_type_generator","applyReplacements","context","isAstNode","walkAst","readPropertyName","name","isFunctionNode","MODULE_EXTENSION_RE","storage","reportError","resolve","context","import_node_async_hooks","import_node_async_hooks","fs","path","import_promises","import_node_path","import_image_size","layout","throwIfAborted","text","name","resolve","headers","path","import_node_path","path","import_node_crypto","import_node_fs","import_node_path","init_config","path","import_node_path","context","path","relativePath","import_node_fs","import_node_path","path","import_node_fs","import_node_module","import_node_path","page","escapeXml","name","route","import_node_crypto","trimSlashes","normalizeEntry","path","escapeAttribute","escapeHtml","relative","DOCS_FILE_EXTENSIONS","titleFromMarkdown","page","text","body","icon","renderedSections","headers","import_node_fs","import_node_path","path","import_promises","import_node_module","import_node_path","import_node_url","path","env","route","existsSync","isRecord","fs","pathToFileURL","build","relativePath","redirect","headers","api","import_path","init_config","isRecord","isResolvedDocsConfig","headers","getDocsTitle","getDocsDescription","getLoadedDocsPages","context","page","toDocsSitemapPage","toDocsLlmsPage","getDocsLlmsOptions","getDocsDiscoveryOptions","buildFarmingDocsDiagnostics","import_docs","init_config","route","path","operation","fs","init_manager","normalizePath","route","storage","env","middleware","path","import_node_path","init_config","name","escapeHtml","escapeAttribute","route","throwIfAborted","pipeline","Readable","headers","name","resolve","address","defineConfig","publicEnv","headers","middleware","name","isHtmlResponse","env","declaration","relative","context","createNodeImageFetcher","createNodeImageUrlValidator","createSharpImageTransformer","isStaticMetadataImageFile","route","createFarmWorkflowRequestHandler","discoverFarmWorkflows","OpenAPIManager","layout","now","handler","createFarmDevtoolsSnapshot","renderFarmDevtoolsHtml","pathname","startTime","duration","method","urlPath","routeManager","parseRouteModuleProps","options","page","React","renderToString","server","parseRouteModuleSchema","resolveFarmLayers","os","fs","path","import_node_url","init_vite","init_route_manager","init_config","init_runtime","init_server","init_vite","context","createContext","route","after","promises","definePlugin","path","mkdir","routePaths","clientManifestPath","readFile","import_path","build","createContext","createProgrammaticRouteModuleId","getRouter","getTheme","isProgrammaticRoutesFileName","isWebResponse","parseProgrammaticRouteModuleId","parseProgrammaticRoutePath","scanProgrammaticPagePaths","rows","mkdir","dirname","import_react","init_config","module","redirect","context","headers","context","env","context","import_node_stream","headers","context","context","init_route_manager","init_config","headers","resolve","reportError","INTEGRATION_RUNTIME_REGISTRY_KEY","CURRENT_REQUEST_RESOLVER_KEY","INTEGRATION_REQUEST_DISPATCHER_KEY","isOperation","getIntegrationRuntimeRegistry","globalState","INTEGRATION_RUNTIME_REGISTRY_KEY","CURRENT_REQUEST_RESOLVER_KEY","INTEGRATION_REQUEST_DISPATCHER_KEY","INTEGRATION_DATA_HEADER","INTEGRATION_DATA_HEADER_MAX_LENGTH","BLOCKED_INTEGRATION_DATA_KEYS","isPlainIntegrationDataObject","getIntegrationDataHeaderByteLength","headers","api","operation","dispatchIntegrationRequest","body","createClientSafeIntegrationAPI","isOperation","now","listeners","init_config","init_route_pattern","route","path","segment","dynamic","context","api","path","headers","name","now","nextEntry","result","createResponseError","delay","invalidate","route","init_config","init_route_manager","init_runtime","endpoint","route","fs","path","relativePath","getProgrammaticRouteManifest","duration","headers","init_manager","import_react","import_jsx_runtime","React","import_jsx_runtime","parse","now","next","window","storage","name","path","middleware","headers","name","isMiddlewareResponse","cookies","matchPattern","match","matchRoutePath","result","import_node_fs","import_node_path","path","fs","module","normalizePathname","encodePathSegment","value","route","path","normalizeRoutePattern","splitRoutePattern","decodePathSegment","createSearchParams","init_config","api","middleware","isFormData","formDataToObject","context","result","isPromiseLike","import_react","delay","resolve","isFormData","context","import_react","init_config","import_path","import_node_fs","init_route_manager","init_config","import_path","fs","createHash","name","path","import_path","import_fs","import_url","import_module","import_path","path","route","fs","relativePath","import_path","fs","route","path","escapeRegExp","route","context","import_node_fs","import_node_path","import_node_url","path","fs","path","clone","trimSlashes","fs","route","layout","farmPlugin","PluginManager","metadata","relativePath","page","os","redirect","OpenAPIManager","renderOpenAPIReferenceHTML","name","headers","fsConstants","operation","build","buildClient","path","farmI18nClientBridgePlugin","farmPlugin","PluginManager","createNitroConfig","mkdir","fs","readFile","import_react","resolve","import_react","isFormData","context","isUnsafeFormKey","formDataToObject","storage","now","import_react","getState","replaceState","name","import_react","init_bridge","getTheme","getTheme","import_react","import_intl_messageformat","IntlMessageFormat","t","import_jsx_runtime","prefetch","route","import_react","shouldBlockUnload","path","now","context","getRouter","path","context","route","pushState","getRouter","replaceState","now","storage","getStorage","context","path","text","name","createSourceFrame","document","resolve","name","name"]}