{"version":3,"sources":["../src/build/index.ts","../src/nitro/client-css-href.ts","../src/nitro/universal-build.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/vite-plugin-compat.ts"],"sourcesContent":["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 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 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\";\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 { 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"],"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA8NtC,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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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,EAiR/B,oCAAoC,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,IAiCnC,2BACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUA,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,MAsEI,2BACI;AAAA;AAAA;AAAA;AAAA;AAAA,8DAMA,sBACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAiSlC,2BAA2B,sDAAsD,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,QAyBnF,2BACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAOA,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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmJ9B,6BACI;AAAA;AAAA;AAAA,WAIA,qEACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoFF,oCAAoC,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;AAA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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,+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;A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","names":["path","existsSync","path","path","path","path","path","path","clone","PluginManager","metadata","buildClient","path","PluginManager","existsSync"]}