@farm.js/core 0.1.0-beta.97 → 0.1.0-beta.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/dist/after.cjs.map +1 -0
  2. package/dist/agent-runtime.cjs +7 -3
  3. package/dist/agent-runtime.cjs.map +1 -0
  4. package/dist/agent-runtime.d.mts +2 -2
  5. package/dist/agent-runtime.d.ts +2 -2
  6. package/dist/agent-runtime.mjs +2 -1
  7. package/dist/agent-runtime.mjs.map +1 -1
  8. package/dist/api/route-manager.cjs.map +1 -0
  9. package/dist/api/route-manager.d.mts +2 -2
  10. package/dist/api/route-manager.d.ts +2 -2
  11. package/dist/api/runtime.cjs.map +1 -0
  12. package/dist/api.cjs +26 -1
  13. package/dist/api.cjs.map +1 -0
  14. package/dist/api.d.mts +3 -3
  15. package/dist/api.d.ts +3 -3
  16. package/dist/api.mjs +2 -2
  17. package/dist/{app-CIOx3LvY.d.ts → app-CGjrKNoN.d.ts} +4 -4
  18. package/dist/{app-DBd6437H.d.mts → app-DOcLs_iq.d.mts} +4 -4
  19. package/dist/app-markdown.cjs +21 -0
  20. package/dist/app-markdown.cjs.map +1 -0
  21. package/dist/app-markdown.d.mts +19 -4
  22. package/dist/app-markdown.d.ts +19 -4
  23. package/dist/app-markdown.mjs +7 -1
  24. package/dist/cache.cjs.map +1 -0
  25. package/dist/{chunk-VMCHLH3Y.mjs → chunk-26BCDVJS.mjs} +19 -1
  26. package/dist/chunk-26BCDVJS.mjs.map +1 -0
  27. package/dist/{chunk-FP5Q67FO.mjs → chunk-2HYYZCCI.mjs} +308 -19
  28. package/dist/chunk-2HYYZCCI.mjs.map +1 -0
  29. package/dist/{chunk-WKDAA6V2.mjs → chunk-3BTAMIQE.mjs} +100 -41
  30. package/dist/chunk-3BTAMIQE.mjs.map +1 -0
  31. package/dist/{chunk-WD2EBM3I.mjs → chunk-3CQJV3NC.mjs} +2 -2
  32. package/dist/{chunk-I3OOUWO5.mjs → chunk-3GDRV7SG.mjs} +2 -2
  33. package/dist/{chunk-YIBV77KZ.mjs → chunk-4WLAVHCY.mjs} +2 -2
  34. package/dist/{chunk-KDP5ZSWP.mjs → chunk-7PS5NKOM.mjs} +26 -11
  35. package/dist/chunk-7PS5NKOM.mjs.map +1 -0
  36. package/dist/{chunk-X4SFHKFH.mjs → chunk-BU65A3LZ.mjs} +10 -6
  37. package/dist/chunk-BU65A3LZ.mjs.map +1 -0
  38. package/dist/{chunk-WMJGA32P.mjs → chunk-BXVOHG6B.mjs} +27 -2
  39. package/dist/{chunk-WMJGA32P.mjs.map → chunk-BXVOHG6B.mjs.map} +1 -1
  40. package/dist/{chunk-BZAIS65C.mjs → chunk-DIHNOVZZ.mjs} +40 -13
  41. package/dist/chunk-DIHNOVZZ.mjs.map +1 -0
  42. package/dist/{chunk-ISSFLGJ5.mjs → chunk-FDWECN3W.mjs} +8 -4
  43. package/dist/chunk-FDWECN3W.mjs.map +1 -0
  44. package/dist/chunk-FDWXXTWR.mjs +114 -0
  45. package/dist/chunk-FDWXXTWR.mjs.map +1 -0
  46. package/dist/{chunk-FSIXEIOB.mjs → chunk-L7FSTPGS.mjs} +2 -2
  47. package/dist/{chunk-J3MPQ4MQ.mjs → chunk-LG4XB6RN.mjs} +2 -2
  48. package/dist/{chunk-J3MPQ4MQ.mjs.map → chunk-LG4XB6RN.mjs.map} +1 -1
  49. package/dist/{chunk-AAC66ILR.mjs → chunk-LXXG3K2Y.mjs} +61 -2
  50. package/dist/chunk-LXXG3K2Y.mjs.map +1 -0
  51. package/dist/{chunk-GJ7W6LNK.mjs → chunk-N5RK4LK6.mjs} +3 -3
  52. package/dist/{chunk-D7F7YZ7L.mjs → chunk-NCVFPT67.mjs} +100 -40
  53. package/dist/{chunk-D7F7YZ7L.mjs.map → chunk-NCVFPT67.mjs.map} +1 -1
  54. package/dist/{chunk-UMUWR5XA.mjs → chunk-PURU7FXR.mjs} +2 -2
  55. package/dist/{chunk-2SKCXYLB.mjs → chunk-QQCCBMTH.mjs} +60 -6
  56. package/dist/chunk-QQCCBMTH.mjs.map +1 -0
  57. package/dist/chunk-RKUPOYQV.mjs +28 -0
  58. package/dist/chunk-RKUPOYQV.mjs.map +1 -0
  59. package/dist/{chunk-52BR7LTX.mjs → chunk-STSPSJUI.mjs} +3 -3
  60. package/dist/{chunk-EPDIF432.mjs → chunk-UOGX6UNO.mjs} +37 -17
  61. package/dist/chunk-UOGX6UNO.mjs.map +1 -0
  62. package/dist/{chunk-IZBX2TEU.mjs → chunk-VQG3QWWK.mjs} +2 -2
  63. package/dist/{chunk-35NPLKQJ.mjs → chunk-XWM2C267.mjs} +21 -105
  64. package/dist/chunk-XWM2C267.mjs.map +1 -0
  65. package/dist/{chunk-7ZVN3YZI.mjs → chunk-Z5ARESQG.mjs} +43 -1
  66. package/dist/chunk-Z5ARESQG.mjs.map +1 -0
  67. package/dist/client/lifecycle.cjs.map +1 -0
  68. package/dist/client/lifecycle.mjs +2 -2
  69. package/dist/{client-plugins-B6-07YmP.d.mts → client-plugins-BqtHoJ9C.d.mts} +91 -3
  70. package/dist/{client-plugins-By6MVUX-.d.ts → client-plugins-DYprkCKN.d.ts} +91 -3
  71. package/dist/client-plugins.cjs +1 -1
  72. package/dist/client-plugins.cjs.map +1 -0
  73. package/dist/client-plugins.d.mts +2 -2
  74. package/dist/client-plugins.d.ts +2 -2
  75. package/dist/client-plugins.mjs +2 -2
  76. package/dist/client.cjs +61 -16
  77. package/dist/client.cjs.map +1 -0
  78. package/dist/client.d.mts +5 -5
  79. package/dist/client.d.ts +5 -5
  80. package/dist/client.mjs +7 -7
  81. package/dist/config.cjs.map +1 -0
  82. package/dist/config.d.mts +2 -2
  83. package/dist/config.d.ts +2 -2
  84. package/dist/cron.cjs +48 -12
  85. package/dist/cron.cjs.map +1 -0
  86. package/dist/cron.mjs +2 -1
  87. package/dist/deferred.cjs.map +1 -0
  88. package/dist/deployment.cjs.map +1 -0
  89. package/dist/{devtools-XWZX6CCL.mjs → devtools-24N3U5IG.mjs} +9 -7
  90. package/dist/{devtools-XWZX6CCL.mjs.map → devtools-24N3U5IG.mjs.map} +1 -1
  91. package/dist/docs.cjs +7 -3
  92. package/dist/docs.cjs.map +1 -0
  93. package/dist/docs.mjs +9 -7
  94. package/dist/env-types.cjs.map +1 -0
  95. package/dist/env.cjs.map +1 -0
  96. package/dist/environment/vite.cjs.map +1 -0
  97. package/dist/environment.cjs.map +1 -0
  98. package/dist/font.cjs.map +1 -0
  99. package/dist/headers.cjs.map +1 -0
  100. package/dist/i18n/client.cjs.map +1 -0
  101. package/dist/i18n/index.cjs.map +1 -0
  102. package/dist/i18n/server.cjs.map +1 -0
  103. package/dist/image/server.cjs +99 -40
  104. package/dist/image/server.cjs.map +1 -0
  105. package/dist/image/server.d.mts +6 -0
  106. package/dist/image/server.d.ts +6 -0
  107. package/dist/image/server.mjs +1 -1
  108. package/dist/image/sharp.cjs +1 -0
  109. package/dist/image/sharp.cjs.map +1 -0
  110. package/dist/image/sharp.d.mts +1 -1
  111. package/dist/image/sharp.d.ts +1 -1
  112. package/dist/image/sharp.mjs +1 -1
  113. package/dist/image/sharp.mjs.map +1 -1
  114. package/dist/image.cjs.map +1 -0
  115. package/dist/index.cjs +943 -231
  116. package/dist/index.cjs.map +1 -0
  117. package/dist/index.d.mts +11 -11
  118. package/dist/index.d.ts +11 -11
  119. package/dist/index.mjs +38 -24
  120. package/dist/index.mjs.map +1 -1
  121. package/dist/instrumentation.cjs.map +1 -0
  122. package/dist/{integration-orm-LLW6WZNK.mjs → integration-orm-G5BPBT5X.mjs} +3 -3
  123. package/dist/integrations.cjs +168 -5
  124. package/dist/integrations.cjs.map +1 -0
  125. package/dist/integrations.d.mts +2 -2
  126. package/dist/integrations.d.ts +2 -2
  127. package/dist/integrations.mjs +10 -3
  128. package/dist/internal/build-runtime.cjs +745 -139
  129. package/dist/internal/build-runtime.cjs.map +1 -0
  130. package/dist/internal/build-runtime.d.mts +4 -4
  131. package/dist/internal/build-runtime.d.ts +4 -4
  132. package/dist/internal/build-runtime.mjs +16 -14
  133. package/dist/internal/client-runtime.cjs +7 -2
  134. package/dist/internal/client-runtime.cjs.map +1 -0
  135. package/dist/internal/client-runtime.mjs +8 -3
  136. package/dist/internal/client-runtime.mjs.map +1 -1
  137. package/dist/internal/config-runtime.cjs +59 -42
  138. package/dist/internal/config-runtime.cjs.map +1 -0
  139. package/dist/internal/config-runtime.d.mts +3 -3
  140. package/dist/internal/config-runtime.d.ts +3 -3
  141. package/dist/internal/config-runtime.mjs +8 -6
  142. package/dist/internal/isolated-boundary.cjs.map +1 -0
  143. package/dist/internal/metadata-image-runtime.cjs.map +1 -0
  144. package/dist/internal/product-telemetry-runtime.cjs +52 -5
  145. package/dist/internal/product-telemetry-runtime.cjs.map +1 -0
  146. package/dist/internal/product-telemetry-runtime.d.mts +12 -1
  147. package/dist/internal/product-telemetry-runtime.d.ts +12 -1
  148. package/dist/internal/product-telemetry-runtime.mjs +50 -5
  149. package/dist/internal/product-telemetry-runtime.mjs.map +1 -1
  150. package/dist/internal/production-node-env.cjs.map +1 -0
  151. package/dist/internal/production-runtime.cjs +56 -10
  152. package/dist/internal/production-runtime.cjs.map +1 -0
  153. package/dist/internal/production-runtime.d.mts +8 -8
  154. package/dist/internal/production-runtime.d.ts +8 -8
  155. package/dist/internal/production-runtime.mjs +2 -2
  156. package/dist/markdown.cjs.map +1 -0
  157. package/dist/{metadata-route-8_V3UonT.d.ts → metadata-route-D2be_0kC.d.ts} +17 -2
  158. package/dist/{metadata-route-CWP_HjGU.d.mts → metadata-route-Dw5CrDIZ.d.mts} +17 -2
  159. package/dist/middleware.cjs.map +1 -0
  160. package/dist/middleware.d.mts +4 -4
  161. package/dist/middleware.d.ts +4 -4
  162. package/dist/navigation.cjs.map +1 -0
  163. package/dist/{nitro-EGRNOB5P.mjs → nitro-YJEP3FWM.mjs} +4 -3
  164. package/dist/{nitro-EGRNOB5P.mjs.map → nitro-YJEP3FWM.mjs.map} +1 -1
  165. package/dist/observability.cjs.map +1 -0
  166. package/dist/plugin.cjs +599 -104
  167. package/dist/plugin.cjs.map +1 -0
  168. package/dist/plugin.d.mts +2 -2
  169. package/dist/plugin.d.ts +2 -2
  170. package/dist/plugin.mjs +13 -11
  171. package/dist/{production-runtime-CdmzsDax.d.ts → production-runtime-CTqpD1C8.d.ts} +2 -2
  172. package/dist/{production-runtime-BGRH1dKG.d.mts → production-runtime-HNqNZd4D.d.mts} +2 -2
  173. package/dist/query/client.cjs.map +1 -0
  174. package/dist/query/index.cjs.map +1 -0
  175. package/dist/query/parsers.cjs.map +1 -0
  176. package/dist/query/server.cjs.map +1 -0
  177. package/dist/{render-plan-DLxJYAA5.d.mts → render-plan-COscpW-i.d.mts} +1 -1
  178. package/dist/{render-plan-0GeHiGVZ.d.ts → render-plan-Z4kSxaT_.d.ts} +1 -1
  179. package/dist/renderer/react/client.cjs.map +1 -0
  180. package/dist/renderer/react/server.cjs.map +1 -0
  181. package/dist/renderer/react/vite.cjs.map +1 -0
  182. package/dist/renderer-client.cjs +26 -1
  183. package/dist/renderer-client.cjs.map +1 -0
  184. package/dist/renderer-client.d.mts +4 -4
  185. package/dist/renderer-client.d.ts +4 -4
  186. package/dist/renderer-client.mjs +2 -2
  187. package/dist/renderer.cjs.map +1 -0
  188. package/dist/{request-BstWbZ6O.d.ts → request-BEDb2jE9.d.ts} +1 -1
  189. package/dist/{request-BCNXSXLh.d.mts → request-CbIAqJY9.d.mts} +1 -1
  190. package/dist/request.cjs.map +1 -0
  191. package/dist/request.d.mts +3 -3
  192. package/dist/request.d.ts +3 -3
  193. package/dist/router.cjs.map +1 -0
  194. package/dist/routes.cjs.map +1 -0
  195. package/dist/routes.d.mts +2 -2
  196. package/dist/routes.d.ts +2 -2
  197. package/dist/server-action-security.cjs +117 -104
  198. package/dist/server-action-security.cjs.map +1 -0
  199. package/dist/server-action-security.mjs +2 -1
  200. package/dist/server-fn-client.cjs.map +1 -0
  201. package/dist/server-fn.cjs.map +1 -0
  202. package/dist/server-fn.mjs +3 -2
  203. package/dist/server-plugins.cjs.map +1 -0
  204. package/dist/server-plugins.d.mts +3 -3
  205. package/dist/server-plugins.d.ts +3 -3
  206. package/dist/server-query-client.cjs +26 -1
  207. package/dist/server-query-client.cjs.map +1 -0
  208. package/dist/server-query-client.mjs +3 -3
  209. package/dist/server-query.cjs.map +1 -0
  210. package/dist/server-query.mjs +4 -3
  211. package/dist/server.cjs +686 -170
  212. package/dist/server.cjs.map +1 -0
  213. package/dist/server.d.mts +8 -8
  214. package/dist/server.d.ts +8 -8
  215. package/dist/server.mjs +16 -14
  216. package/dist/server.mjs.map +1 -1
  217. package/dist/{spa-router-COgu4txb.d.ts → spa-router-CjeQites.d.ts} +1 -1
  218. package/dist/{spa-router-BeyAVSc6.d.mts → spa-router-FJbNou1a.d.mts} +1 -1
  219. package/dist/storage.cjs +7 -3
  220. package/dist/storage.cjs.map +1 -0
  221. package/dist/storage.mjs +1 -1
  222. package/dist/testing.cjs.map +1 -0
  223. package/dist/testing.d.mts +2 -2
  224. package/dist/testing.d.ts +2 -2
  225. package/dist/testing.mjs +2 -1
  226. package/dist/testing.mjs.map +1 -1
  227. package/dist/theme/client.cjs.map +1 -0
  228. package/dist/theme/index.cjs.map +1 -0
  229. package/dist/theme/runtime.cjs.map +1 -0
  230. package/dist/theme/server.cjs.map +1 -0
  231. package/dist/{utils-DL2VwDQl.d.mts → utils-BiMJv9Ys.d.mts} +1 -1
  232. package/dist/{utils-DkU2c_1B.d.ts → utils-BpnKRFv9.d.ts} +1 -1
  233. package/dist/version.cjs +1 -1
  234. package/dist/version.cjs.map +1 -0
  235. package/dist/version.mjs +1 -1
  236. package/dist/vite.cjs +599 -104
  237. package/dist/vite.cjs.map +1 -0
  238. package/dist/vite.d.mts +2 -2
  239. package/dist/vite.d.ts +2 -2
  240. package/dist/vite.mjs +13 -11
  241. package/dist/{workflows-ChyK_oTu.d.mts → workflows-BantWytQ.d.mts} +7 -0
  242. package/dist/{workflows-ChyK_oTu.d.ts → workflows-BantWytQ.d.ts} +7 -0
  243. package/dist/workflows.cjs +73 -5
  244. package/dist/workflows.cjs.map +1 -0
  245. package/dist/workflows.d.mts +1 -1
  246. package/dist/workflows.d.ts +1 -1
  247. package/dist/workflows.mjs +2 -1
  248. package/package.json +17 -17
  249. package/dist/chunk-2SKCXYLB.mjs.map +0 -1
  250. package/dist/chunk-35NPLKQJ.mjs.map +0 -1
  251. package/dist/chunk-7ZVN3YZI.mjs.map +0 -1
  252. package/dist/chunk-AAC66ILR.mjs.map +0 -1
  253. package/dist/chunk-BZAIS65C.mjs.map +0 -1
  254. package/dist/chunk-EPDIF432.mjs.map +0 -1
  255. package/dist/chunk-FP5Q67FO.mjs.map +0 -1
  256. package/dist/chunk-ISSFLGJ5.mjs.map +0 -1
  257. package/dist/chunk-KDP5ZSWP.mjs.map +0 -1
  258. package/dist/chunk-VMCHLH3Y.mjs.map +0 -1
  259. package/dist/chunk-WKDAA6V2.mjs.map +0 -1
  260. package/dist/chunk-X4SFHKFH.mjs.map +0 -1
  261. /package/dist/{chunk-WD2EBM3I.mjs.map → chunk-3CQJV3NC.mjs.map} +0 -0
  262. /package/dist/{chunk-I3OOUWO5.mjs.map → chunk-3GDRV7SG.mjs.map} +0 -0
  263. /package/dist/{chunk-YIBV77KZ.mjs.map → chunk-4WLAVHCY.mjs.map} +0 -0
  264. /package/dist/{chunk-FSIXEIOB.mjs.map → chunk-L7FSTPGS.mjs.map} +0 -0
  265. /package/dist/{chunk-GJ7W6LNK.mjs.map → chunk-N5RK4LK6.mjs.map} +0 -0
  266. /package/dist/{chunk-UMUWR5XA.mjs.map → chunk-PURU7FXR.mjs.map} +0 -0
  267. /package/dist/{chunk-52BR7LTX.mjs.map → chunk-STSPSJUI.mjs.map} +0 -0
  268. /package/dist/{chunk-IZBX2TEU.mjs.map → chunk-VQG3QWWK.mjs.map} +0 -0
  269. /package/dist/{integration-orm-LLW6WZNK.mjs.map → integration-orm-G5BPBT5X.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"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 params = {};\n const catchAllParamSegments = {};\n Object.defineProperty(params, farmCatchAllParamSegments, {\n value: catchAllParamSegments,\n });\n let pathIndex = 0;\n\n for (const segment of patternSegments) {\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 remainingSegments = pathnameSegments.slice(pathIndex).map(decodeRouteSegment);\n const remaining = remainingSegments.join(\"/\");\n if (!remaining && (catchAll || (starCatchAll && !starCatchAll[2]))) return null;\n params[name] = remaining;\n catchAllParamSegments[name] = remainingSegments;\n pathIndex = pathnameSegments.length;\n continue;\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++;\n continue;\n }\n\n if (segment !== decodeRouteSegment(pathnameSegment)) return null;\n pathIndex++;\n }\n\n return pathIndex === pathnameSegments.length ? params : null;\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: { route: string; html: string } | 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 };\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\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 } | 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 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 integrationImports = `\n${configModulePath ? `import * as FarmUserConfigModule from ${toVirtualEntryImportSpecifier(configModulePath)};` : \"\"}\n${layerConfigImports}\n${integrationRuntimeImport}\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${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}\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 createFarmErrorDocument(html, title) {\n const escapedTitle = escapeFarmHtmlAttribute(title || \"Application Error\");\n const trimmedHtml = html.trim();\n const hasFullDocument = trimmedHtml.startsWith(\"<html\") ||\n trimmedHtml.startsWith(\"<!DOCTYPE\");\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 = html;\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 config.docs?.enabled\n ? `\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 docsResponse;\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 new Response(wrappedDocsResponse.body, {\n status: wrappedDocsResponse.status,\n statusText: wrappedDocsResponse.statusText,\n headers: docsHeaders,\n });\n }\n }\n `\n : \"\"\n }\n\n ${\n hasMarkdownPages\n ? `\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 markdownSourceResponse;\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 markdownResponse;\n }\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 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 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);\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 trimmedHtml = (html !== undefined ? html : renderedPage.shellHtml || \"\").trim();\n const hasFullDocument = trimmedHtml.startsWith('<html') || trimmedHtml.startsWith('<!DOCTYPE');\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 // 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 && /<title[\\\\s>]/i.test(rendererHead);\n let fullHtml;\n if (hasFullDocument) {\n // Layout provides full HTML structure - inject CSS and client script\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 // Inject title if not present and we have one\n .replace(/<head([^>]*)>([\\\\s\\\\S]*?)<\\\\/head>/i, (match, attrs, headContent) => {\n let nextHeadContent = headContent;\n if (!headContent.includes('<title>') && title !== \"Farm.js App\") {\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 if (rendererHead) nextHeadContent += \"\\\\n \" + rendererHead;\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 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 trimmedHtml = html.trim();\n const hasFullDocument = trimmedHtml.startsWith('<html') || trimmedHtml.startsWith('<!DOCTYPE');\n \n let fullHtml;\n if (hasFullDocument) {\n fullHtml = html\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 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 return applyFarmPreloadBudget(applyConfiguredResponseHeaders(response, pathname), pathname);\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,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;AA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0aA,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;AA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AAA;AAAA;AAAA,OAMA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAgBM,KAAK,UAAU,OAAO,aAAa,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["path","existsSync","path","path","path","path","path","path","clone","PluginManager","metadata","buildClient","path","PluginManager","existsSync"]}
1
+ {"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 params = {};\n const catchAllParamSegments = {};\n Object.defineProperty(params, farmCatchAllParamSegments, {\n value: catchAllParamSegments,\n });\n let pathIndex = 0;\n\n for (const segment of patternSegments) {\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 remainingSegments = pathnameSegments.slice(pathIndex).map(decodeRouteSegment);\n const remaining = remainingSegments.join(\"/\");\n if (!remaining && (catchAll || (starCatchAll && !starCatchAll[2]))) return null;\n params[name] = remaining;\n catchAllParamSegments[name] = remainingSegments;\n pathIndex = pathnameSegments.length;\n continue;\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++;\n continue;\n }\n\n if (segment !== decodeRouteSegment(pathnameSegment)) return null;\n pathIndex++;\n }\n\n return pathIndex === pathnameSegments.length ? params : null;\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\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 integrationImports = `\n${configModulePath ? `import * as FarmUserConfigModule from ${toVirtualEntryImportSpecifier(configModulePath)};` : \"\"}\n${layerConfigImports}\n${integrationRuntimeImport}\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}\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 createFarmErrorDocument(html, title) {\n const escapedTitle = escapeFarmHtmlAttribute(title || \"Application Error\");\n const trimmedHtml = html.trim();\n const hasFullDocument = trimmedHtml.startsWith(\"<html\") ||\n trimmedHtml.startsWith(\"<!DOCTYPE\");\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 = html;\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 trimmedHtml = (html !== undefined ? html : renderedPage.shellHtml || \"\").trim();\n const hasFullDocument = trimmedHtml.startsWith('<html') || trimmedHtml.startsWith('<!DOCTYPE');\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 // 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 && /<title[\\\\s>]/i.test(rendererHead);\n let fullHtml;\n if (hasFullDocument) {\n // Layout provides full HTML structure - inject CSS and client script\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 // Inject title if not present and we have one\n .replace(/<head([^>]*)>([\\\\s\\\\S]*?)<\\\\/head>/i, (match, attrs, headContent) => {\n let nextHeadContent = headContent;\n if (!headContent.includes('<title>') && title !== \"Farm.js App\") {\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 if (rendererHead) nextHeadContent += \"\\\\n \" + rendererHead;\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 trimmedHtml = html.trim();\n const hasFullDocument = trimmedHtml.startsWith('<html') || trimmedHtml.startsWith('<!DOCTYPE');\n \n let fullHtml;\n if (hasFullDocument) {\n fullHtml = html\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 return applyFarmPreloadBudget(applyConfiguredResponseHeaders(response, pathname), pathname);\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,OAAOA,WAAU;AACjB,SAAS,cAAAC,mBAAkB;;;ACR3B,OAAO,UAAU;AASV,IAAM,mCAAmC;AACzC,IAAM,iCAAiC;AAE9C,eAAe,YACb,YACA,gBACA,YACwB;AACxB,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,MAAI;AACF,UAAM,QAAQ,MAAM,GAAG,SAAS,UAAU;AAC1C,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,UAAM,EAAE,WAAW,IAAI,MAAM,OAAO,QAAa;AACjD,UAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AACxE,UAAM,OAAO,WAAW,IAAI;AAC5B,UAAM,GAAG,MAAM,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAClD,UAAM,GAAG,UAAU,KAAK,KAAK,gBAAgB,IAAI,GAAG,KAAK;AACzD,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAlBe;AA+Bf,eAAsB,2BAA2B,iBAA0C;AACzF,QAAM,OAAO,MAAM;AAAA,IACjB,KAAK,KAAK,iBAAiB,iBAAiB;AAAA,IAC5C,KAAK,KAAK,iBAAiB,QAAQ;AAAA,IACnC,CAAC,SAAS,gBAAgB,IAAI;AAAA,EAChC;AACA,SAAO,OAAO,WAAW,IAAI,KAAK;AACpC;AAPsB;AAetB,eAAsB,6BACpB,iBACwB;AACxB,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,MAAI;AACF,UAAM,UAAU,MAAM,GAAG,QAAQ,eAAe;AAChD,WAAO,QAAQ,KAAK,CAAC,SAAS,+BAA+B,KAAK,IAAI,CAAC,KAAK;AAAA,EAC9E,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAVsB;AAuBtB,eAAsB,yBAAyB,iBAA0C;AACvF,QAAM,YAAY,MAAM,6BAA6B,eAAe;AACpE,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,QAAM,OAAO,oBAAoB,SAAS;AAAA;AAC1C,QAAM,GAAG,UAAU,KAAK,KAAK,iBAAiB,gBAAgB,GAAG,IAAI;AACrE,SAAO,IAAI,SAAS;AACtB;AAPsB;;;ACzDtB,OAAO,QAAQ;AACf,OAAOC,WAAU;AACjB,SAAS,aAAa,aAAa,YAAY,oBAAoB;AACnE,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,yBAAyB;;;AC7BlC,OAAOC,WAAU;AAkBV,IAAM,8BAA8B;AAO3C,eAAsB,+BAA+B,SAKf;AACpC,QAAM,OAAOC,MAAK,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,IAAI,CAAC;AAC9E,QAAM,SAA0C,CAAC;AAEjD,aAAW,CAAC,SAAS,KAAK,KAAK,QAAQ,aAAa,UAAU,GAAG;AAC/D,UAAM,cAAc,MAAM,QAAQ,aAAa,gBAAgB,MAAM,UAAU;AAC/E,UAAM,YAAY,MAAM,oCAAoC,aAAa,MAAM,UAAU;AACzF,UAAM,gBAAgB,MAAM,QAAQ,aAAa,0BAA0B,OAAO;AAElF,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,WAAW,UAAU,MAAM,WAAW;AAAA,MACtC,QAAQ,wBAAwB,MAAM,MAAM,UAAU;AAAA,MACtD,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAEA,aAAW,CAAC,SAAS,KAAK,KAAK,QAAQ,gBAAgB,UAAU,GAAG;AAClE,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA,6BAA6B,QAAQ,OAAO,GAAG;AAAA,IACjD;AACA,UAAM,YAAY,kCAAkC,eAAe,QAAQ,OAAO,UAAU;AAC5F,UAAM,MAAM;AAAA,MACV,0BAA0B,KAAK;AAAA,MAC/B,cAAc,OAAO;AAAA,IACvB;AAEA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ,wBAAwB,MAAM,MAAM,QAAQ;AAAA,MACpD,GAAG;AAAA,QACD,6BAA6B,WAAW,GAAG;AAAA,QAC3C,cAAc,OAAO;AAAA,MACvB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,aAAW,SAAS,QAAQ,aAAa,kBAAkB,EAAE,OAAO,GAAG;AACrE,UAAM,cAAc,MAAM,QAAQ,aAAa,gBAAgB,MAAM,UAAU;AAC/E,UAAM,UACJ,MAAM,YAAY,MAAM,IAAI,MAAM,UAAU,KAAK,GAAG,MAAM,OAAO,IAAI,MAAM,UAAU;AACvF,UAAM,YAAY,kCAAkC,SAAS,QAAQ,OAAO,UAAU;AACtF,UAAM,MAAM;AAAA,MACV,0BAA0B,WAAW;AAAA,MACrC,mBAAmB,OAAO;AAAA,IAC5B;AAEA,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,WAAW;AAAA,MACX,QAAQ,wBAAwB,MAAM,MAAM,UAAU;AAAA,MACtD,GAAG;AAAA,QACD,6BAA6B,WAAW,GAAG;AAAA,QAC3C,mBAAmB,OAAO;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,aAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,QAAQ,OAAO,UAAU,GAAG;AACvE,QAAI,CAAC,4BAA4B,IAAI,EAAG;AAExC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,WAAW,KAAK,aAAa,KAAK,WAAW,WAAW,WAAW;AAAA,MACnE,GAAG,8BAA8B,MAAM,eAAe,OAAO,GAAG;AAAA,IAClE,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAnFsB;AAqFtB,eAAsB,8BACpB,WACA,UACiB;AACjB,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,QAAM,eAAeA,MAAK,KAAK,WAAW,2BAA2B;AACrE,QAAM,GAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC7C,QAAM,GAAG,UAAU,cAAc,GAAG,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,CAAI;AACzE,SAAO;AACT;AATsB;AAWf,SAAS,mCACd,UACA,QACsC;AACtC,QAAM,UAAU,qBAAqB,MAAM;AAC3C,QAAM,WAAW,oBAAI,IAAY;AAEjC,aAAW,SAAS,SAAS,QAAQ;AACnC,QAAI,MAAM,cAAc,SAAU;AAElC,QAAI,YAAY,aAAa,MAAM,YAAY,QAAQ;AACrD,eAAS;AAAA,QACP,WAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAEA,QAAI,YAAY,aAAa,MAAM,YAAY,UAAU,MAAM,YAAY,SAAS;AAClF,YAAM,IAAI;AAAA,QACR,UAAU,MAAM,OAAO,kBAAkB,MAAM,OAAO,yBAAyB,MAAM,WAAW,OAAO;AAAA,MACzG;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,UAAU,WAAW,YAAY,WAAW,eAAe;AAC5E,eAAS;AAAA,QACP,WAAW,MAAM,uDAAuD,2BAA2B;AAAA,MACrG;AAAA,IACF;AAEA,QAAI,MAAM,eAAe,WAAW,UAAU;AAC5C,eAAS;AAAA,QACP,WAAW,MAAM,yDAAyD,2BAA2B;AAAA,MACvG;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,UAAU,MAAM,KAAK,QAAQ,EAAE;AACnD;AApCgB;AAsChB,SAAS,wBAAwB,MAAc,YAA4B;AACzE,QAAM,aAAa,WAAW,QAAQ,GAAG;AACzC,QAAM,WAAW,eAAe,KAAK,aAAa,WAAW,MAAM,GAAG,UAAU;AAChF,QAAM,QAAQ,eAAe,KAAK,KAAK,WAAW,MAAM,UAAU;AAClE,QAAM,eAAeA,MAAK,WAAW,QAAQ,IAAIA,MAAK,SAAS,MAAM,QAAQ,IAAI;AACjF,SAAO,GAAG,aAAa,QAAQ,OAAO,GAAG,CAAC,GAAG,KAAK;AACpD;AANS;;;AC/JT,OAAOC,WAAU;AAiBjB,eAAsB,sCACpB,WACA,UACA,IACmC;AACnC,QAAM,gBAAgB,SAAS,OAAO;AAAA,IACpC,CAAC,UAAU,MAAM,cAAc,aAAa,MAAM,YAAY;AAAA,EAChE;AACA,MAAI,CAAC,cAAc,KAAK,yBAAyB,EAAG,QAAO,CAAC;AAE5D,QAAM,mBAAmB,cACtB,OAAO,CAAC,UAAU,MAAM,SAAS,UAAU,0BAA0B,KAAK,CAAC,EAC3E,KAAK,oBAAoB;AAC5B,MAAI,iBAAiB,WAAW,EAAG,QAAO,CAAC;AAE3C,QAAM,SAAS,oBAAI,IAGjB;AAEF,aAAW,SAAS,kBAAkB;AACpC,UAAM,SAAS;AAAA,MACb,SAAS,MAAM,YAAY,SAAS,SAAS,MAAM;AAAA,MACnD,SAAS,MAAM;AAAA,MACf,aAAa,MAAM;AAAA,IACrB;AACA,UAAM,MAAM,0BAA0B,MAAM;AAC5C,UAAM,QAAQ,OAAO,IAAI,GAAG,KAAK,EAAE,QAAQ,QAAQ,CAAC,EAAE;AACtD,UAAM,OAAO,KAAK,KAAK;AACvB,WAAO,IAAI,KAAK,KAAK;AAAA,EACvB;AAEA,QAAM,eAAeC,MAAK,KAAK,WAAW,WAAW;AACrD,QAAM,kBAAkBA,MAAK,KAAK,cAAc,cAAc;AAC9D,QAAM,eAAe,oBAAI,IAAoB;AAC7C,MAAI,aAAa;AAEjB,aAAW,CAAC,KAAK,KAAK,KAAK,QAAQ;AACjC,QAAI,CAAC,MAAM,OAAO,SAAS,UAAU,CAAC,MAAM,OAAO,aAAa;AAC9D,mBAAa,IAAI,KAAK,UAAU;AAChC;AAAA,IACF;AAEA,kBAAc;AACd,UAAM,eAAe,kBAAkB,UAAU;AACjD,UAAM,cAAcA,MAAK,KAAK,cAAc,GAAG,YAAY,OAAO;AAClE,UAAM,GAAG,GAAG,iBAAiB,aAAa,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC1E,UAAM,wBAAwB,aAAa,MAAM,QAAQ,EAAE;AAC3D,iBAAa,IAAI,KAAK,IAAI,YAAY,EAAE;AAAA,EAC1C;AAEA,QAAM,SAAmC,CAAC;AAC1C,QAAM,cAAc,oBAAI,IAAY;AACpC,aAAW,SAAS,kBAAkB;AACpC,UAAM,MAAM,+BAA+B,MAAM,OAAO;AACxD,QAAI,YAAY,IAAI,GAAG,EAAG;AAC1B,gBAAY,IAAI,GAAG;AACnB,UAAM,MAAM,0BAA0B;AAAA,MACpC,SAAS,MAAM,YAAY,SAAS,SAAS,MAAM;AAAA,MACnD,SAAS,MAAM;AAAA,MACf,aAAa,MAAM;AAAA,IACrB,CAAC;AACD,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,aAAa,IAAI,GAAG,KAAK;AAAA,MAC/B,GAAI,MAAM,SAAS,SAAS,MAAM,QAAQ,WAAW,OAAO,IACxD;AAAA,QACE,SAAS;AAAA,UACP,+BAA+B;AAAA,UAC/B,gCAAgC;AAAA,UAChC,gCAAgC;AAAA,QAClC;AAAA,MACF,IACA,CAAC;AAAA,IACP,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AA9EsB;AAgFf,SAAS,+BAA+B,SAAyB;AACtE,QAAM,aAAa,iBAAiB,OAAO;AAC3C,MAAI,eAAe,IAAK,QAAO;AAE/B,MAAI,SAAS;AACb,aAAW,WAAW,WAAW,MAAM,GAAG,EAAE,OAAO,OAAO,GAAG;AAC3D,QAAI,YAAY,QAAQ,qBAAqB,KAAK,OAAO,GAAG;AAC1D,gBAAU;AAAA,IACZ,WAAW,iBAAiB,KAAK,OAAO,GAAG;AACzC,gBAAU;AAAA,IACZ,WAAW,YAAY,OAAO,WAAW,KAAK,OAAO,GAAG;AACtD,gBAAU;AAAA,IACZ,OAAO;AACL,gBAAU,IAAI,aAAa,OAAO,CAAC;AAAA,IACrC;AAAA,EACF;AAEA,SAAO,UAAU;AACnB;AAlBgB;AAoBhB,eAAe,wBACb,aACA,QACA,IACe;AACf,QAAM,aAAaA,MAAK,KAAK,aAAa,iBAAiB;AAC3D,QAAM,UAAU,KAAK,MAAM,MAAM,GAAG,SAAS,YAAY,MAAM,CAAC;AAChE,QAAM,OAAO;AAAA,IACX,GAAG;AAAA,IACH,GAAI,OAAO,SAAS,SAAS,EAAE,SAAS,OAAO,QAAQ,IAAI,CAAC;AAAA,IAC5D,GAAI,OAAO,cAAc,EAAE,aAAa,OAAO,YAAY,IAAI,CAAC;AAAA,EAClE;AACA,QAAM,GAAG,UAAU,YAAY,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,CAAI;AACrE;AAbe;AAef,SAAS,0BAA0B,OAA+C;AAChF,SAAO,QAAQ,MAAM,SAAS,UAAU,MAAM,WAAW;AAC3D;AAFS;AAIT,SAAS,qBACP,MACA,OACQ;AACR,QAAM,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,EAAE;AAC1D,QAAM,iBAAiB,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM,IAAI;AAClE,MAAI,mBAAmB,EAAG,QAAO;AAEjC,QAAM,wBACJ,sBAAsB,MAAM,OAAO,IAAI,sBAAsB,KAAK,OAAO;AAC3E,SAAO,yBAAyB,KAAK,QAAQ,cAAc,MAAM,OAAO;AAC1E;AAXS;AAaT,SAAS,sBAAsB,SAAyB;AACtD,SAAO,iBAAiB,OAAO,EAC5B,MAAM,GAAG,EACT,OAAO,OAAO,EACd,OAAO,CAAC,OAAO,YAAY;AAC1B,QAAI,YAAY,QAAQ,QAAQ,WAAW,OAAO,EAAG,QAAO,QAAQ;AACpE,QAAI,YAAY,OAAO,QAAQ,WAAW,MAAM,EAAG,QAAO,QAAQ;AAClE,QAAI,WAAW,KAAK,OAAO,EAAG,QAAO,QAAQ;AAC7C,WAAO,QAAQ;AAAA,EACjB,GAAG,CAAC;AACR;AAVS;AAYT,SAAS,iBAAiB,OAAuB;AAC/C,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,YAAY,QAAQ,WAAW,GAAG,IAAI,UAAU,IAAI,OAAO;AACjE,SAAO,UAAU,SAAS,IAAI,UAAU,QAAQ,QAAQ,EAAE,IAAI;AAChE;AAJS;AAMT,SAAS,aAAa,OAAuB;AAC3C,SAAO,MAAM,QAAQ,uBAAuB,MAAM;AACpD;AAFS;;;ACvKF,IAAM,qCAAqC;AAqB3C,SAAS,sCAAqE;AACnF,QAAM,cAAc;AAEpB,SAAO;AAAA,IACL,KAAK,oDAAoD,WAAW;AAAA,IACpE,SAAS;AAAA,MACP,iBAAiB;AAAA,IACnB;AAAA,IACA,UAAU;AAAA,IACV,eAAe;AAAA,EACjB;AACF;AAXgB;AA+CT,SAAS,sBAAsB,SAIhB;AACpB,QAAM,EAAE,cAAc,eAAe,YAAY,IAAI;AACrD,QAAM,kBAAkB,aAAa,UAAU,CAAC,UAAU,MAAM,WAAW,YAAY;AACvF,QAAM,eAAe,mBAAmB,IAAI,aAAa,MAAM,GAAG,eAAe,IAAI,CAAC;AAKtF,QAAM,wBAAwB,aAAa,OAAO,CAAC,UAAU,MAAM,aAAa,IAAI;AAEpF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,oCAAoC;AAAA,IACpC,EAAE,QAAQ,aAAa;AAAA,IACvB,GAAG;AAAA,IACH,GAAI,gBAAgB,MAChB,CAAC,IACD;AAAA,MACE;AAAA,QACE,KAAK,GAAG,WAAW;AAAA,QACnB,MAAM;AAAA,QACN,SAAS;AAAA,UACP,+BAA+B;AAAA,UAC/B,gCAAgC;AAAA,UAChC,gCAAgC;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,IACJ;AAAA,MACE,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AACF;AArCgB;;;AC1DT,SAAS,0BAA0B,SAA6C;AACrF,QAAM,eAAe,KAAK,UAAU,QAAQ,MAAM;AAClD,QAAM,mBAAmB,KAAK,QAAQ,eAAe,QAAQ,SAAS,EAAE,CAAC;AAEzE,SAAO;AAAA;AAAA;AAAA;AAAA,wBAIe,KAAK,UAAU,QAAQ,sBAAsB,CAAC;AAAA,gCACtC,KAAK,UAAU,QAAQ,iBAAiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAQ/B,KAAK,UAAU,gBAAgB,CAAC;AAAA;AAAA,2BAE/C,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0JnC,KAAK;AACT;AA9KgB;;;ACMT,SAAS,wBAA2B,cAAiB,SAAuC;AACjG,MAAI,YAAY,WAAY,QAAO;AACnC,SAAO,kBAAkB,YAAY;AACvC;AAHgB;AAKhB,SAAS,kBAAkB,cAAgC;AACzD,MAAI,MAAM,QAAQ,YAAY,EAAG,QAAO,aAAa,IAAI,iBAAiB;AAC1E,MAAI,CAAC,gBAAgB,OAAO,iBAAiB,SAAU,QAAO;AAE9D,QAAM,SAAS;AACf,MAAI,CAAC,OAAO,MAAM,WAAW,6BAA6B,EAAG,QAAO;AAEpE,MAAI,iBAAiB,OAAO,SAAS,GAAG;AACtC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,WAAW,0BAA0B,OAAO,SAAS;AAAA,IACvD;AAAA,EACF;AAEA,MACE,OAAO,aACP,OAAO,OAAO,cAAc,YAC5B,aAAa,OAAO,aACpB,iBAAiB,OAAO,UAAU,OAAO,GACzC;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,WAAW;AAAA,QACT,GAAG,OAAO;AAAA,QACV,SAAS,0BAA0B,OAAO,UAAU,OAAO;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AA9BS;AAgCT,SAAS,iBAAiB,OAAyC;AACjE,SAAO,OAAO,UAAU;AAC1B;AAFS;AAIT,SAAS,0BAA6D,SAAe;AACnF,SAAO,YAA2B,MAAoC;AACpE,UAAM,UAAU,IAAI,MAAM,MAAM;AAAA,MAC9B,IAAI,QAAQ,UAAU,UAAU;AAC9B,YAAI,aAAa,cAAe,QAAO;AACvC,eAAO,QAAQ,IAAI,QAAQ,UAAU,QAAQ;AAAA,MAC/C;AAAA,IACF,CAAC;AACD,WAAO,QAAQ,MAAM,SAAS,IAAI;AAAA,EACpC;AACF;AAVS;;;AL8FT,SAAS,0BAA2E;AAClF,SAAO,OAAO,OAAO,EAAE;AAAA,IACrB,CAAC,WAAW,EAAE,QAAQ,aAAa,MAAM;AAAA,IACzC,CAAC,YAAY,EAAE,QAAQ,YAAY,OAAO;AAAA,EAC5C;AACF;AALS;AAQT,IAAM,YAAY,OAAO,YAAY,QAAQ,cAAc,cAAc,YAAY,GAAG,IAAI;AAC5F,IAAM,WAAWC,MAAK,QAAQ,SAAS;AACvC,IAAM,uBAAuB,oBAAI,IAAI;AAAA,EACnC,GAAG;AAAA,EACH,GAAG,eAAe,IAAI,CAAC,eAAe,QAAQ,UAAU,EAAE;AAC5D,CAAC;AACD,IAAM,yBAAyB,oBAAI,IAAI;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,0BAA0B;AAChC,IAAM,sBAAsB;AAC5B,IAAM,2BAA2B,CAAC,UAAU,UAAU,aAAa,YAAY,UAAU;AAEzF,SAAS,8BAA8B,MAAc,WAA2B;AAC9E,SAAO,cAAc,yBAAyB,IAAI,CAAC,EAAE,QAAQ,SAAS,EAAE,MAAMA,MAAK,GAAG,EAAE,KAAK,GAAG;AAClG;AAFS;AAUF,SAAS,qCACd,MACA,oBAAqD,0BACtC;AACf,MAAI;AAEJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,UAAU,IAAI,WAAW,SAAS;AACtC,UAAI,QAAQ,QAAQ,4BAA6B,QAAO;AACxD,UACE,GAAG,WAAW,IAAI,KAClB,GAAG,WAAW,GAAG,KACjB,GAAG,WAAW,GAAG,KACjB,GAAG,WAAW,UAAU,KACxBA,MAAK,WAAW,EAAE,KAClB,qBAAqB,IAAI,EAAE,GAC3B;AACA,eAAO;AAAA,MACT;AAEA,UAAI,eAAe,QAAW;AAC5B,YAAI;AACF,uBAAa,kBAAkB,IAAI;AAAA,QACrC,QAAQ;AACN,uBAAa;AAAA,QACf;AAAA,MACF;AACA,UAAI,CAAC,WAAY,QAAO;AAExB,aAAO,KAAK,QAAQ,IAAI,YAAY;AAAA,QAClC,GAAG;AAAA,QACH,UAAU;AAAA,QACV,QAAQ,EAAE,GAAG,QAAQ,QAAQ,6BAA6B,KAAK;AAAA,MACjE,CAAC;AAAA,IACH;AAAA,EACF;AACF;AArCgB;AAuChB,SAAS,yBAAyB,MAAsB;AACtD,QAAM,iBAAiB,cAAcA,MAAK,KAAK,MAAM,cAAc,CAAC;AACpE,MAAI,iBAAiB;AACrB,MAAI;AACF,qBAAiB,cAAc,eAAe,QAAQ,eAAe,CAAC;AAAA,EACxE,QAAQ;AAAA,EAER;AACA,SAAO,eAAe,QAAQ,OAAO;AACvC;AATS;AAWT,SAAS,iBAAoB,OAAU,OAAO,oBAAI,QAAyB,GAAM;AAC/E,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO;AACxD,MAAI,KAAK,IAAI,KAAK,EAAG,QAAO,KAAK,IAAI,KAAK;AAC1C,MAAI,iBAAiB,OAAQ,QAAO,IAAI,OAAO,MAAM,QAAQ,MAAM,KAAK;AACxE,MAAI,iBAAiB,KAAM,QAAO,IAAI,KAAK,KAAK;AAEhD,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAMC,SAAmB,CAAC;AAC1B,SAAK,IAAI,OAAOA,MAAK;AACrB,eAAW,SAAS,MAAO,CAAAA,OAAM,KAAK,iBAAiB,OAAO,IAAI,CAAC;AACnE,WAAOA;AAAA,EACT;AAEA,QAAM,QAAsC,CAAC;AAC7C,OAAK,IAAI,OAAO,KAAK;AACrB,aAAW,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxC,UAAM,GAAG,IAAI,iBAAkB,MAAuC,GAAG,GAAG,IAAI;AAAA,EAClF;AACA,SAAO;AACT;AAnBS;AAqBT,SAAS,2BAA2B,QAAqB;AACvD,SAAO,iBAAiB;AAAA,IACtB,OAAO,OAAO;AAAA,IACd,UAAU,OAAO;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,WAAW,OAAO;AAAA,IAClB,kBAAkB,OAAO;AAAA,IACzB,SAAS,OAAO;AAAA,IAChB,sBAAsB,OAAO;AAAA,IAC7B,mBAAmB,OAAO;AAAA,IAC1B,aAAa,OAAO;AAAA,IACpB,MAAM,OAAO;AAAA,IACb,iBAAiB,OAAO;AAAA,IACxB,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,aAAa,OAAO;AAAA,IACpB,YAAY,OAAO;AAAA,IACnB,OAAO,OAAO;AAAA,IACd,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO,cAAc;AAAA,IAC3B,2BAA2B,OAAO,cAAc;AAAA,EAClD,CAAC;AACH;AAtBS;AAwBT,eAAe,wBAA0C;AACvD,QAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,QAAQ,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,MAAM;AAC1E,QAAM,kBAAkB,QAAQ,MAAO,UAAU,MAAM,SAAS;AAChE,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,OAAO,UAAU;AACvB,WAAO;AAAA,EACT,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAde;AAgBf,SAAS,wBAAwB,QAAyB;AACxD,SAAO,WAAW,gBAAgB,WAAW,sBAAsB,WAAW;AAChF;AAFS;AAIT,SAAS,sCACP,QACA,4BACS;AACT,SAAO,8BAA8B,WAAW,iBAAiB,CAAC,wBAAwB,MAAM;AAClG;AALS;AAOT,SAAS,oBACP,QACA,QACgC;AAChC,MAAI,OAAO,OAAO,aAAa,OAAQ,QAAO;AAC9C,QAAM,mBAAmB,wBAAwB,MAAM;AACvD,MAAI,OAAO,OAAO,aAAa,UAAU,kBAAkB;AACzD,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,MAAI,OAAO,OAAO,aAAa,gBAAgB,CAAC,kBAAkB;AAChE,UAAM,IAAI,MAAM,sEAAsE;AAAA,EACxF;AACA,SAAO,OAAO,OAAO,aAAa,gBAC/B,OAAO,OAAO,aAAa,UAAU,mBACpC,eACA;AACN;AAhBS;AAkBT,SAAS,sBAAsB,IAAqB;AAClD,QAAM,eAAe,GAAG,QAAQ,OAAO,GAAG;AAE1C,SACE,qBAAqB,IAAI,EAAE,KAC3B,uBAAuB,IAAI,EAAE,KAC7B,aAAa,WAAW,UAAU,KAClC,aAAa,SAAS,+BAA+B,KACrD,aAAa,SAAS,+BAA+B;AAEzD;AAVS;AAYT,IAAM,kCAAkC;AAExC,SAAS,gCAA+C;AACtD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,QAAQ,UAAU;AAC1B,UACE,CAAC,OAAO,SAAS,cAAc,KAC/B,CAAC,UAAU,QAAQ,OAAO,GAAG,EAAE,SAAS,cAAc,GACtD;AACA,eAAO;AAAA,MACT;AAEA,YAAM,cAAc,OAAO,MAAM,GAAG,CAAC,UAAU,MAAM;AACrD,YAAM,eAAeD,MAAK,WAAW,WAAW,IAC5C,cACAA,MAAK,QAAQA,MAAK,QAAQ,SAAS,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW;AACrE,aAAO,GAAG,+BAA+B,GAAG,YAAY;AAAA,IAC1D;AAAA,IACA,KAAK,IAAI;AACP,UAAI,CAAC,GAAG,WAAW,+BAA+B,EAAG,QAAO;AAC5D,YAAM,WAAW,GAAG,MAAM,gCAAgC,MAAM;AAChE,YAAM,UAAU,aAAa,QAAQ,EAAE,SAAS,QAAQ;AACxD,aAAO;AAAA,kBACK,KAAK,UAAU,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,IAIrC;AAAA,EACF;AACF;AA5BS;AA8BT,SAAS,2BAA2B,WAAsC;AACxE,QAAM,eAAe,IAAI;AAAA,IACvB,OAAO,KAAK,SAAS,EAAE,IAAI,CAAC,aAAa,SAAS,QAAQ,SAAS,EAAE,CAAC;AAAA,EACxE;AACA,QAAM,mBAAmB,oBAAI,IAAY;AAEzC,aAAW,CAAC,UAAU,MAAM,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC1D,QAAI,OAAO,SAAS,QAAS;AAE7B,eAAW,YAAY,CAAC,GAAG,OAAO,SAAS,GAAG,OAAO,cAAc,GAAG;AACpE,YAAM,qBAAqB,SAAS,QAAQ,OAAO,GAAG;AACtD,YAAM,eAAe,mBAAmB,QAAQ,SAAS,EAAE;AAC3D,YAAM,qBACJ,mBAAmB,WAAW,IAAI,KAAK,mBAAmB,WAAW,KAAK,IACtEA,MAAK,MAAM,UAAUA,MAAK,MAAM,KAAKA,MAAK,MAAM,QAAQ,QAAQ,GAAG,kBAAkB,CAAC,IACtF;AACN,UACE,aAAa,IAAI,YAAY,KAC5B,uBAAuB,QAAQ,aAAa,IAAI,kBAAkB,KACnE,qBAAqB,IAAI,QAAQ,KACjC,SAAS,WAAW,OAAO,GAC3B;AACA;AAAA,MACF;AAEA,UACEA,MAAK,WAAW,QAAQ,KACxB,kBAAkB,KAAK,QAAQ,KAC/B,SAAS,WAAW,GAAG,KACvB,SAAS,WAAW,IAAI,GACxB;AACA,yBAAiB,IAAI,QAAQ;AAC7B;AAAA,MACF;AAEA,YAAM,WAAW,SAAS,MAAM,GAAG;AACnC,YAAM,cAAc,SAAS,WAAW,GAAG,IAAI,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,SAAS,CAAC;AAC1F,UAAI,YAAa,kBAAiB,IAAI,WAAW;AAAA,IACnD;AAAA,EACF;AAEA,SAAO;AACT;AA1CS;AA4CT,SAAS,8BACP,gBACA,cACA,cACe;AACf,QAAM,qBAAqBA,MAAK,QAAQ,cAAc;AACtD,QAAM,mBAAmBA,MAAK,QAAQ,cAAc,YAAY;AAEhE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,QAAQ,UAAU;AAC1B,UAAI,CAAC,YAAYA,MAAK,QAAQ,QAAQ,MAAM,oBAAoB;AAC9D,eAAO;AAAA,MACT;AAEA,YAAM,iBAAiBA,MAAK,QAAQA,MAAK,QAAQ,QAAQ,GAAG,MAAM;AAClE,UAAI,mBAAmB,iBAAkB,QAAO;AAKhD,aAAO,EAAE,IAAI,yBAAyB,UAAU,KAAK;AAAA,IACvD;AAAA,EACF;AACF;AAxBS;AA0BT,SAAS,iBAAiB,SAA2B;AACnD,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,WAAO,QAAQ,KAAK,CAAC,WAAW,iBAAiB,MAAM,CAAC;AAAA,EAC1D;AACA,SAAO,QAAQ,OAAO;AACxB;AALS;AAOF,SAAS,2BACd,QACA,kBACS;AACT,SAAO,QAAQ,qBAAqB,OAAO,UAAU,CAAC,GAAG,KAAK,CAAC,UAAU,MAAM,UAAU,CAAC;AAC5F;AALgB;AAOhB,SAAS,8BACP,0BACA,QACA,eACkB;AAClB,QAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,mBAAmB,MAAM,QAAQ,2BAA2B,MAAM,IACpE,2BAA2B,OAAO;AAAA,IAChC,CAAC,WAA6B,OAAO,WAAW;AAAA,EAClD,IACA,2BAA2B;AAC/B,QAAM,kBACJ,MAAM,QAAQ,gBAAgB,KAAK,iBAAiB,WAAW,IAC3D,gBACC,oBAAoB;AAC3B,QAAM,qBAAqB,2BAA2B,YAClD,OAAO;AAAA,IACL,OAAO,QAAQ,2BAA2B,SAAS,EAAE;AAAA,MACnD,CAAC,UAAsC,OAAO,MAAM,CAAC,MAAM;AAAA,IAC7D;AAAA,EACF,IACA;AAEJ,SAAO;AAAA,IACL,GAAI;AAAA,IACJ,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX;AAAA,IACA,WAAW,2BAA2B,aAAa;AAAA,IACnD,eAAe,2BAA2B,iBAAiB;AAAA,IAC3D,WAAW;AAAA,EACb;AACF;AAxCS;AA0CT,SAAS,+BACP,0BACe;AACf,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAIA,QAAM,mBAAqC;AAAA,IACzC,QAAQ;AAAA,IACR,QAAQ,2BAA2B;AAAA,IACnC,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,WAAW,2BAA2B;AAAA,IACtC,eAAe,2BAA2B;AAAA,IAC1C,SAAS,2BAA2B;AAAA,EACtC;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,YAAY,MAAM,OAAO;AAC7B,YAAM,EAAE,UAAU,IAAI,MAAM,OAAO,SAAS;AAC5C,YAAM,SAAS,MAAM,UAAU,MAAM;AAAA,QACnC,GAAG;AAAA,QACH,YAAY,MAAM;AAAA,MACpB,CAAC;AACD,UAAI,CAAC,OAAO,KAAM,QAAO;AACzB,aAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,KAAK,OAAO,OAAO;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AArCS;AAuCT,SAAS,YAAY,OAAuB;AAC1C,SAAO,MAAM,QAAQ,cAAc,EAAE;AACvC;AAFS;AAIT,SAAS,2BAA2B,QAA4B,MAA6B;AAC3F,MAAI,CAAC,OAAO,MAAM,QAAS,QAAO;AAElC,QAAM,uBAAuB,OAAO,KAAK,cAAc,OAAO,KAAK,OAAO;AAC1E,MAAI,OAAO,yBAAyB,YAAY,qBAAqB,KAAK,GAAG;AAC3E,UAAM,aAAaA,MAAK,WAAW,oBAAoB,IACnD,uBACAA,MAAK,KAAK,MAAM,oBAAoB;AACxC,WAAO,WAAW,UAAU,IAAI,aAAa;AAAA,EAC/C;AAEA,QAAM,WAAW,OAAO,KAAK,OAAO,SAAS,YAAY,OAAO,KAAK,KAAK,KAAK;AAC/E,QAAM,aAAaA,MAAK,KAAK,MAAM,OAAO,UAAU,OAAO,OAAO,QAAQ;AAC1E,MAAI,WAAW,UAAU,EAAG,QAAO;AAEnC,QAAM,cAAcA,MAAK,KAAK,MAAM,QAAQ;AAC5C,SAAO,WAAW,WAAW,IAAI,cAAc;AACjD;AAjBS;AAmBT,SAAS,wBAAwB,MAAuB;AACtD,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,iBAAiB,cAAcA,MAAK,KAAK,MAAM,cAAc,CAAC;AACpE,SAAO,WAAW,KAAK,CAAC,SAAS;AAC/B,QAAI;AACF,qBAAe,QAAQ,KAAK,IAAI,EAAE;AAClC,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAxBS;AA0BT,eAAe,mBAAmB,MAAsC;AACtE,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,QAAM,aAAa;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,aAAa,YAAY;AAClC,UAAM,eAAeA,MAAK,KAAK,MAAM,SAAS;AAC9C,QAAI;AACF,YAAM,GAAG,OAAO,YAAY;AAC5B,aAAO;AAAA,IACT,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO;AACT;AAxBe;AA0Bf,SAAS,wBAAwB,QAAmD;AAClF,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,MAAM,QAAQ,MAAM,EAAG,QAAO,OAAO,SAAS;AAElD,QAAM,eAAe;AACrB,SAAO;AAAA,IACL,aAAa,WACb,aAAa,WACb,aAAa,WACb,aAAa,WACZ,MAAM,QAAQ,aAAa,QAAQ,KAAK,aAAa,SAAS,SAAS;AAAA,EAC1E;AACF;AAZS;AAcT,SAAS,4BAA4B,QAAqC;AACxE,UAAQ,OAAO,WAAW,CAAC,GAAG,KAAK,CAAC,WAAW;AAC7C,QAAI,sCAAsC,MAAM,MAAM,MAAO,QAAO;AAEpE,WAAO;AAAA,MACL,OAAO,SACP,OAAO,QACP,OAAO,SACP,OAAO,YACP,OAAO,WACP,OAAO,UACP,OAAO,UACP,OAAO,oBACP,OAAO,mBACP,OAAO,gBACP,OAAO,eACP,OAAO,WACP,OAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AApBS;AAsBT,eAAsB,yBACpB,QACqC;AACrC,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,QAAM,UAAU,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,MAAgB;AACvE,QAAM,SAAS,oBAAI,IAAsC;AAEzD,iBAAe,KACb,KACA,WACA,YACe;AACf,QAAI;AACJ,QAAI;AACF,gBAAU,MAAM,GAAG,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAAA,IACzD,QAAQ;AACN;AAAA,IACF;AAEA,UAAM,iBAAiB,QAAQ;AAAA,MAC7B,CAAC,UAAU,MAAM,OAAO,KAAK,4BAA4B,KAAK,MAAM,IAAI;AAAA,IAC1E;AAEA,QAAI,gBAAgB;AAClB,iBAAW,KAAK;AAAA,QACd,MAAM;AAAA,QACN,UAAUA,MAAK,KAAK,KAAK,eAAe,IAAI;AAAA,MAC9C,CAAC;AAAA,IACH;AAEA,eAAW,SAAS,SAAS;AAC3B,UAAI,CAAC,MAAM,YAAY,KAAK,MAAM,KAAK,WAAW,GAAG,KAAK,MAAM,KAAK,WAAW,GAAG,GAAG;AACpF;AAAA,MACF;AAEA,YAAM,iBAAiB,0BAA0B,WAAW,MAAM,IAAI;AACtE,YAAM,KAAKA,MAAK,KAAK,KAAK,MAAM,IAAI,GAAG,gBAAgB,UAAU;AAAA,IACnE;AAAA,EACF;AA/Be;AAiCf,aAAW,gBAAgB,SAAS;AAClC,UAAM,aAAyC,CAAC;AAChD,UAAM,KAAK,cAAc,KAAK,UAAU;AACxC,eAAW,SAAS,YAAY;AAC9B,aAAO,IAAI,MAAM,MAAM,KAAK;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AAChD,UAAM,SAAS,EAAE,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE;AACjD,UAAM,SAAS,EAAE,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE;AACjD,WAAO,SAAS,UAAU,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,EACvD,CAAC;AACH;AArDsB;AA6DtB,eAAsB,eACpB,QACA,cACA,iBACA,gBACA,UAMI,CAAC,GACU;AACf,QAAM,OAAO,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,IAAI;AACxD,QAAM,SAAS,QAAQ,UAAU,OAAO,UAAU;AAClD,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,kBAAkB,wBAAwB,MAAM,OAAO,OAAO,SAAS;AAC7E,QAAM,yBAAyB,QAAQ;AAGvC,QAAM,8BAA8B,QAAQ,WAAW;AAAA,IACrD,QAAQ,QAAQ,QAAQ,kBAAkB,uBAAuB,CAAC;AAAA,EACpE,CAAC;AAID,QAAM,4BAA4B,wBAAwB;AAE1D,SAAO,KAAK,mEAA4D,MAAM,KAAK;AAEnF,MAAI;AACF,UAAM,8BAA8B,QAAQ,uBACxC,QAAQ,QAAQ,QAAQ,oBAAoB,IAC5C,+BAA+B;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACL,UAAM,oCAAoC,QAAQ,WAAW,CAAC,2BAA2B,CAAC;AAG1F,UAAM,aAAmC,CAAC;AAC1C,eAAW,CAAC,SAAS,KAAK,KAAK,aAAa,UAAU,GAAG;AACvD,YAAM,qBACJ,MAAM,uBACL,uBAAuB,MAAM,UAAU,IAAI,MAAM,aAAa;AACjE,iBAAW,KAAK;AAAA,QACd;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,GAAI,qBACA;AAAA,UACE,QAAQ,aAAa,oBAAoB,MAAM;AAAA,UAC/C;AAAA,QACF,IACA,CAAC;AAAA,MACP,CAAC;AAAA,IACH;AACA,UAAM,aAAmC,MAAM;AAAA,MAC7C,aAAa,cAAc,EAAE,OAAO;AAAA,MACpC,CAAC,WAAW;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,cAAc,MAAM;AAAA,QACpB,SAAS,MAAM;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,aAAa,MAAM;AAAA,QACnB,cAAc,MAAM;AAAA,QACpB,UAAU,MAAM;AAAA,MAClB;AAAA,IACF;AACA,WAAO,KAAK,mBAAY,WAAW,MAAM,cAAc;AAGvD,UAAM,KAAK,MAAM,OAAO,aAAa;AACrC,UAAM,eAA+D,CAAC;AACtE,UAAM,SAASA,MAAK,KAAK,MAAM,QAAQ,KAAK;AAE5C,mBAAe,qBAAqB,KAAa,cAAsB,KAAoB;AACzF,UAAI;AACF,cAAM,UAAU,MAAM,GAAG,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAC7D,mBAAW,SAAS,SAAS;AAC3B,cAAI,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,kCAAkC,GAAG;AAC1E,yBAAa,KAAK;AAAA,cAChB,SAAS;AAAA,cACT,YAAYA,MAAK,KAAK,KAAK,MAAM,IAAI;AAAA,YACvC,CAAC;AAAA,UACH,WACE,MAAM,YAAY,KAClB,CAAC,MAAM,KAAK,WAAW,GAAG,KAC1B,CAAC,MAAM,KAAK,WAAW,GAAG,GAC1B;AACA,kBAAM,cACJ,gBAAgB,MAAM,IAAI,MAAM,IAAI,KAAK,GAAG,WAAW,IAAI,MAAM,IAAI;AACvE,kBAAM,qBAAqBA,MAAK,KAAK,KAAK,MAAM,IAAI,GAAG,WAAW;AAAA,UACpE;AAAA,QACF;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAtBe;AAuBf,UAAM,qBAAqB,MAAM;AACjC,UAAM,qBAAqB,IAAI,IAAI,aAAa,IAAI,CAAC,WAAW,OAAO,OAAO,CAAC;AAC/E,eAAW,CAAC,SAAS,KAAK,KAAK,aAAa,WAAW,GAAG;AACxD,UAAI,mBAAmB,IAAI,OAAO,EAAG;AACrC,yBAAmB,IAAI,OAAO;AAC9B,mBAAa,KAAK,EAAE,SAAS,YAAY,MAAM,WAAW,CAAC;AAAA,IAC7D;AACA,WAAO,KAAK,mBAAY,WAAW,MAAM,oBAAoB,aAAa,MAAM,UAAU;AAE1F,UAAM,gCAAgC,aAAa,iCAAiC,IAAI;AACxF,UAAM,qBAAqB,oBAAI,IAAuC;AAEtE,UAAM,kBAAkBA,MAAK,KAAK,MAAM,SAAS,QAAQ;AACzD,UAAM,CAAC,oBAAoB,IAAI,MAAM;AACrC,QAAI,qBAAqB,WAAW,YAAY;AAG9C,YAAM;AACN,YAAM,qBAAqB;AAAA,IAC7B;AACA,UAAM,iBAAiB,qBAAqB;AAC5C,QAAI,eAAe,YAAY,YAAY;AACzC,aAAO,KAAK,wDAAmD;AAAA,IACjE;AAEA,UAAM,oBAAoB,6BACxB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAZwB;AAa1B,UAAM,iBAAiB,6BACrB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GAdqB;AAoBvB,QAAI;AACJ,QAAI;AACJ,QAAI,OAAO,SAAS,qBAAqB,UAAU;AACjD,aAAO,KAAK,0DAAmD,OAAO,SAAS,IAAI,KAAK;AACxF,OAAC,iBAAiB,IAAI,MAAM,QAAQ,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACpE,OAAC,cAAc,IAAI,MAAM,QAAQ,WAAW,CAAC,eAAe,CAAC,CAAC;AAAA,IAChE,OAAO;AACL,aAAO,KAAK,0DAAmD;AAC/D,OAAC,mBAAmB,cAAc,IAAI,MAAM,QAAQ,WAAW;AAAA,QAC7D,kBAAkB;AAAA,QAClB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AACA,UAAM,CAAC,0BAA0B,IAAI,MAAM;AAC3C,QAAI,2BAA2B,WAAW,YAAY;AACpD,YAAM,2BAA2B;AAAA,IACnC;AACA,QAAI,eAAe,WAAW,WAAY,OAAM,eAAe;AAC/D,QAAI,kBAAkB,WAAW,YAAY;AAC3C,UACE,eAAe,YAAY,cAC3B,EAAE,kBAAkB,kBAAkB,mCACtC;AACA,cAAM,kBAAkB;AAAA,MAC1B;AAKA,aAAO,KAAK,+DAA+D;AAC3E,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,eAAe;AACjC,UAAM,uBAAuB,2BAA2B;AAExD,UAAM,oBAAoB,mCAAmC,sBAAsB,MAAM;AACzF,eAAW,WAAW,kBAAkB,UAAU;AAChD,aAAO,KAAK,OAAO;AAAA,IACrB;AAEA,UAAM,EAAE,QAAQ,WAAW,WAAW,cAAc,uBAAuB,IAAI;AAC/E,UAAM,uBAAuB,WAAW,eAAe;AACvD,QAAI,OAAO,KAAK,SAAS;AACvB,YAAM,+BAA+B,MAAM,eAAe;AAAA,IAC5D;AAGA,WAAO,KAAK,iDAA0C,MAAM,MAAM;AAClE,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,sBAAsB,MAAM;AAAA,MAChCA,MAAK,KAAK,MAAM,OAAO;AAAA,MACvB;AAAA,IACF;AACA,WAAO,KAAK,qCAA8BA,MAAK,SAAS,MAAM,mBAAmB,CAAC,EAAE;AAAA,EAEtF,SAAS,OAAO;AACd,QAAI,wBAAwB;AAC1B,YAAM,uBAAuB,gBAAgB,WAAW;AAAA,QACtD,OAAO;AAAA,QACP;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,MAAM,wBAAmB,KAAK,EAAE;AACvC,UAAM;AAAA,EACR;AACF;AAhQsB;AAkQtB,eAAe,uBAAuB,QAAsB,WAAkC;AAC5F,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,aAAW,CAAC,UAAU,MAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AACvD,QAAI,OAAO,SAAS,QAAS;AAC7B,QAAI,aAAa,kBAAkB;AACjC,YAAM,kBAAkB,WAAW,OAAO,MAAM;AAChD;AAAA,IACF;AACA,UAAM,WAAWA,MAAK,KAAK,WAAW,QAAQ;AAC9C,UAAM,GAAG,MAAMA,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAC1D,UAAM,GAAG,UAAU,UAAU,OAAO,MAAM;AAAA,EAC5C;AACF;AAZe;AAcf,eAAe,+BAA+B,MAAc,WAAkC;AAC5F,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,QAAM,QAAQ;AAAA,IACZ,0BAA0B,IAAI,EAAE,IAAI,OAAO,EAAE,YAAY,IAAI,MAAM;AACjE,YAAM,aAAaA,MAAK,KAAK,WAAW,IAAI,QAAQ,QAAQ,EAAE,CAAC;AAC/D,YAAM,GAAG,MAAMA,MAAK,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAC5D,YAAM,GAAG,SAAS,YAAY,UAAU;AAAA,IAC1C,CAAC;AAAA,EACH;AACF;AATe;AAWf,eAAe,kBACb,WACA,eACe;AACf,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,QAAM,cAAcA,MAAK,KAAK,WAAW,gBAAgB;AACzD,MAAI,UAAU;AACd,MAAI,YAAY,QAAW;AACzB,QAAI;AACF,gBAAU,MAAM,GAAG,SAAS,WAAW;AAAA,IACzC,QAAQ;AACN;AAAA,IACF;AAAA,EACF;AAEA,QAAM,gBAAgBA,MAAK,KAAK,WAAW,iBAAiB;AAC5D,MAAI,YAAY;AAChB,MAAI;AACF,gBAAY,MAAM,GAAG,SAAS,eAAe,MAAM;AAAA,EACrD,QAAQ;AAAA,EAER;AACA,QAAM,oBACJ,OAAO,YAAY,WAAW,UAAU,OAAO,KAAK,OAAO,EAAE,SAAS,MAAM;AAC9E,QAAM,GAAG,UAAU,aAAa,iBAAiB;AACjD,QAAM,GAAG,UAAU,eAAe,iBAAiB,WAAW,iBAAiB,CAAC;AAClF;AA1Be;AA4Bf,IAAM,oCAAN,MAAM,0CAAyC,MAAM;AAAA,EACnD,YAAY,QAAgB;AAC1B,UAAM,iDAAiD,MAAM,EAAE;AAC/D,SAAK,OAAO;AAAA,EACd;AACF;AALqD;AAArD,IAAM,mCAAN;AAOA,eAAe,0BACb,MACA,QACA,WACe;AACf,QAAM,KAAK,MAAM,OAAO,aAAa;AACrC,QAAM,gBAAgB,MAAM,6BAA6B,SAAS;AAClE,QAAM,kBAAkBA,MAAK,KAAK,WAAW,iBAAiB,gBAAgB;AAC9E,MAAI,kBAAkB;AAEtB,MAAI;AACF,UAAM,cAAc,MAAM,GAAG,KAAK,eAAe;AACjD,QAAI,YAAY,OAAO,EAAG,mBAAkB,YAAY;AAAA,EAC1D,QAAQ;AAAA,EAER;AAEA,MAAI,oBAAoB,GAAG;AACzB,UAAM,IAAI,iCAAiC,oCAAoC;AAAA,EACjF;AAEA,QAAM,gBAAgBA,MAAK,KAAK,WAAW,iBAAiB;AAC5D,QAAM,iBAAiBA,MAAK,KAAK,MAAM,QAAQ,OAAO,aAAa;AACnE,MAAI,aAAa;AACjB,MAAI;AACF,UAAM,aAAa,MAAM,GAAG,SAAS,gBAAgB,MAAM;AAC3D,iBAAa,WAAW,QAAQ,qBAAqB,EAAE,EAAE,KAAK,EAAE,SAAS;AAAA,EAC3E,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,UAAM,YAAY,MAAM,GAAG,KAAK,aAAa;AAC7C,QAAI,eAAe,CAAC,UAAU,OAAO,KAAK,UAAU,SAAS,IAAI;AAC/D,YAAM,IAAI,iCAAiC,0BAA0B;AAAA,IACvE;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,iCAAkC,OAAM;AAC7D,QAAI,YAAY;AACd,YAAM,IAAI,iCAAiC,4BAA4B;AAAA,IACzE;AAIA,UAAM,GAAG,UAAU,eAAe,EAAE;AAAA,EACtC;AACF;AA9Ce;AAmDf,SAAS,mCACP,YACA,MACA,MACA,OAC2B;AAC3B,QAAM,MAAM,GAAGA,MAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAKA,MAAK,QAAQ,UAAU,CAAC;AACvE,MAAI,OAAO,MAAM,IAAI,GAAG;AACxB,MAAI,CAAC,MAAM;AACT,WAAO,6BAA6B,YAAY,MAAM,IAAI;AAC1D,UAAM,IAAI,KAAK,IAAI;AAAA,EACrB;AACA,SAAO,EAAE,GAAG,MAAM,oBAAoB,CAAC,GAAG,KAAK,kBAAkB,EAAE;AACrE;AAbS;AAeT,eAAe,YACb,gBACA,QACA,MACA,QACA,WACA,YACA,eAA+D,CAAC,GAChE,aAAmC,CAAC,GACpC,gCAAqD,oBAAI,IAAI,GAC7D,qBAA6D,oBAAI,IAAI,GACrE;AACA,QAAM,YAAY,eAAe;AACjC,QAAM,EAAE,WAAW,IAAI,MAAM,OAAO,YAAS;AAC7C,QAAM,EAAE,eAAAE,eAAc,IAAI,MAAM,OAAO,cAAW;AAClD,QAAM,KAAK,MAAM,OAAO,aAAa;AAErC,QAAM,gBAAgB,IAAIA,eAAc;AAAA,IACtC;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AACD,gBAAc,WAAW,OAAO,WAAW,CAAC,CAAC;AAG7C,QAAM,cAQD,CAAC;AAEN,QAAM,uBAAuB,wBAAwB,OAAO,YAAY,EAAE;AAAA,IACxE,CAAC,aAAa,SAAS,aAAa,SAAS,SAAS;AAAA,EACxD;AACA,QAAM,iCAAiC,qBAAqB;AAAA,IAC1D,CAAC,aAAa,SAAS,8BAA8B;AAAA,EACvD;AACA,MACE,OAAO,cAAc,4BAA4B,aACjD,OAAO,cAAc,qBAAqB,QAC1C,gCACA;AACA,WAAO;AAAA,MACL,8EAA8E,+BAA+B,IAAI;AAAA,IACnH;AAAA,EACF;AACA,QAAM,eAAe;AAAA,IACnB,OAAO,cAAc;AAAA,IACrB;AAAA,MACE,kBAAkB,OAAO,cAAc,qBAAqB;AAAA,MAC5D,mCAAmC,QAAQ,8BAA8B;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,gBAAgB,aAAa,IAAI,CAAC,WAAW;AACjD,QAAI;AACF,YAAM,WAAW;AAAA,QACf,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,eAAe,SAAS;AAAA,QACxB,gBAAgB,SAAS;AAAA,QACzB,qBAAqB,SAAS;AAAA,QAC9B,sBAAsB,SAAS;AAAA,QAC/B,MAAM,SAAS;AAAA,QACf,4BAA4B,SAAS;AAAA,QACrC,6BAA6B,SAAS;AAAA,QACtC,2BAA2B,SAAS;AAAA,QACpC,oBAAoB,SAAS;AAAA,MAC/B;AAAA,IACF,SAAS,OAAO;AACd,aAAO,KAAK,+CAAqC,OAAO,UAAU,KAAK,KAAK,EAAE;AAC9E,aAAO;AAAA,QACL,GAAG;AAAA,QACH,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,qBAAqB;AAAA,QACrB,sBAAsB;AAAA,QACtB,MAAM;AAAA,QACN,4BAA4B;AAAA,QAC5B,6BAA6B;AAAA,QAC7B,2BAA2B;AAAA,QAC3B,oBAAoB,CAAC;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,uBAAuB,wBAAC,eAAuB,iBACnD,kBAAkB,OAClB,iBAAiB,iBACjB,aAAa,WAAW,GAAG,aAAa,GAAG,GAHhB;AAK7B,QAAM,yBAAyB;AAAA,IAC7B,gBAAgB,OAAO,QAAQ,KAC/B,OAAO,MAAM,WACb,OAAO,KAAK,SAAS,UACrB,OAAO,KAAK,QAAQ;AAAA,EACtB;AACA,QAAM,mBAAmB,OAAO,MAAM,UAClC,IAAI,OAAO,KAAK,SAAS,MAAM,GAAG,QAAQ,QAAQ,GAAG,EAAE,QAAQ,OAAO,EAAE,KAAK,MAC7E;AACJ,QAAM,qBAAqB,wBAAC,iBAC1B;AAAA,IACE,0BACA,qBACC,qBAAqB,OACpB,iBAAiB,oBACjB,aAAa,WAAW,GAAG,gBAAgB,GAAG;AAAA,EAClD,GAPyB;AAS3B,QAAM,aAAa,WAAW,IAAI,CAAC,WAAW;AAAA,IAC5C;AAAA,IACA,UAAU,uBAAuB,MAAM,UAAU,IAC7C;AAAA,MACE,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,MAAM;AAAA,MACN,4BAA4B;AAAA,MAC5B,6BAA6B;AAAA,MAC7B,oBAAoB,CAAC;AAAA,MACrB,0BAA0B;AAAA,IAC5B,IACA;AAAA,MACE,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACN,EAAE;AAEF;AAAA,IACE,cAAc,IAAI,CAAC,YAAY;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO,QAAQ,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE;AAAA,MACjD,UAAU;AAAA,IACZ,EAAE;AAAA,IACF,WAAW,IAAI,CAAC,EAAE,OAAO,SAAS,OAAO;AAAA,MACvC,SAAS,MAAM;AAAA,MACf,OAAO,MAAM,QAAQ,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE;AAAA,MAChD;AAAA,IACF,EAAE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,iBAAiB,WAAW;AAC9B,eAAW,EAAE,OAAO,SAAS,KAAK;AAAA,MAChC,GAAG,cAAc,IAAI,CAAC,YAAY,EAAE,OAAO,QAAQ,UAAU,OAAO,EAAE;AAAA,MACtE,GAAG,WAAW,IAAI,CAAC,EAAE,OAAO,UAAAC,UAAS,OAAO,EAAE,OAAO,OAAO,UAAAA,UAAS,EAAE;AAAA,IACzE,GAAG;AACD,UAAI,EAAE,+BAA+B,aAAa,CAAC,SAAS,2BAA2B;AACrF;AAAA,MACF;AACA,aAAO;AAAA,QACL,0CAAmC,MAAM,UAAU,6CAA6C,SAAS,mBAAmB,MAAM,WAAW,SAAS,mBAAmB,WAAW,IAAI,aAAa,YAAY;AAAA,MACnN;AAAA,IACF;AAAA,EACF;AAEA,aAAW,EAAE,OAAO,SAAS,KAAK,YAAY;AAI5C,QAAI,mBAAmB,MAAM,OAAO,EAAG;AAEvC,QAAI;AACF,YAAM,0BAA0B,cAAc;AAAA,QAC5C,CAAC,YACE,OAAO,iBAAiB,OAAO,gCAChC,qBAAqB,OAAO,SAAS,MAAM,OAAO;AAAA,MACtD;AACA,UAAI,SAAS,0BAA0B;AACrC,eAAO;AAAA,UACL,iBAAO,MAAM,OAAO;AAAA,QAGtB;AAAA,MACF;AACA,UACE,SAAS,iBACT,SAAS,+BACT,wBAAwB,SAAS,GACjC;AACA,cAAM,eAAe,MAAM,WAAW,QAAQ,MAAM,EAAE,EAAE,QAAQ,OAAO,EAAE;AACzE,cAAM,sBAAsB;AAAA,UAC1B,GAAI,SAAS,iBAAiB,CAAC,SAAS,cAAc,IAAI,CAAC;AAAA,UAC3D,GAAG,wBAAwB;AAAA,YAAQ,CAAC,WAClC,OAAO,iBAAiB,CAAC,OAAO,cAAc,IAAI,CAAC;AAAA,UACrD;AAAA,QACF;AACA,cAAM,iBAAiB,oBAAoB;AAAA,UACzC,CAAC,aAAa,aAAa,oBAAoB,CAAC;AAAA,QAClD,IACK,oBAAoB,CAAC,KAAK,SAC3B;AACJ,oBAAY,KAAK;AAAA,UACf,GAAG;AAAA,UACH;AAAA,UACA,mBAAmB,SAAS;AAAA,UAC5B;AAAA,UACA,6BACE,SAAS,+BACT,wBAAwB,KAAK,CAAC,WAAW,OAAO,2BAA2B;AAAA,UAC7E,oBAAoB;AAAA,YAClB,GAAI,SAAS,8BAA8B,SAAS,qBAAqB,CAAC;AAAA,YAC1E,GAAG,wBACA,OAAO,CAAC,WAAW,OAAO,2BAA2B,EACrD,QAAQ,CAAC,WAAW,OAAO,kBAAkB;AAAA,UAClD;AAAA,QACF,CAAC;AACD,eAAO,KAAK,qCAA8B,MAAM,OAAO,OAAO,MAAM,UAAU,EAAE;AAAA,MAClF;AAAA,IACF,SAAS,OAAO;AACd,aAAO,KAAK,8CAAoC,MAAM,UAAU,KAAK,KAAK,EAAE;AAAA,IAC9E;AAAA,EACF;AAEA,MAAI,OAAO,MAAM,WAAW,CAAC,wBAAwB;AACnD,UAAM,YACJ,IAAI,OAAO,KAAK,SAAS,MAAM,GAAG,QAAQ,QAAQ,GAAG,EAAE,QAAQ,OAAO,EAAE,KAAK;AAC/E,UAAM,0BAA0B,cAAc;AAAA,MAC5C,CAAC,WAAW,OAAO,iBAAiB,qBAAqB,OAAO,SAAS,SAAS;AAAA,IACpF;AACA,QAAI,wBAAwB,SAAS,GAAG;AACtC,YAAM,sBAAsB,wBAAwB;AAAA,QAAQ,CAAC,WAC3D,OAAO,iBAAiB,CAAC,OAAO,cAAc,IAAI,CAAC;AAAA,MACrD;AACA,YAAM,iBAAiB,oBAAoB;AAAA,QACzC,CAAC,aAAa,aAAa,oBAAoB,CAAC;AAAA,MAClD,IACK,oBAAoB,CAAC,KAAK,SAC3B;AACJ,YAAM,eACJ,cAAc,MAAM,CAAC,KAAK,YAAY,IAAI,CAAC,WAAW,GAAG,SAAS,YAAY;AAChF,YAAM,mBAAmB,aAAa,IAAI,CAAC,aAAa;AAAA,QACtD;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB;AAAA,QACA,6BAA6B;AAAA,QAC7B,oBAAoB,CAAC;AAAA,MACvB,EAAE;AAKF,kBAAY,QAAQ,GAAG,gBAAgB;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,mBAAmB,WAAW,OAAO,CAAC,SAAS;AACnD,QAAI;AACF,aAAO,wBAAwB,KAAK,YAAY,IAAI,EAAE;AAAA,IACxD,SAAS,OAAO;AACd,aAAO,KAAK,8CAAoC,KAAK,UAAU,KAAK,KAAK,EAAE;AAC3E,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,+CAAwC,YAAY,MAAM,WAAW,cAAc,OAAO,CAAC,WAAW,OAAO,aAAa,EAAE,MAAM,iBAAiB,iBAAiB,MAAM;AAAA,EAC5K;AAKA,QAAM,kBAAkBH,MAAK,KAAK,MAAM,SAAS,KAAK;AACtD,QAAM,GAAG,MAAM,iBAAiB,EAAE,WAAW,KAAK,CAAC;AACnD,QAAM,iBAAiB,MAAM,GAAG,QAAQA,MAAK,KAAK,iBAAiB,eAAe,CAAC;AACnF,QAAM,kBAAkBA,MAAK,KAAK,gBAAgB,uBAAuB;AACzE,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,yBAAyB,QAAQ,wBAAwB,OAAO,IAAI;AAAA,IACpE,yBAAyB,SAAY,kCAAkC,IAAI;AAAA,IAC3E,OAAO,MAAM,UAAU,OAAO,KAAK,QAAQ;AAAA,IAC3C,yBAAyB,OAAO,KAAK,SAAS,QAAQ;AAAA,IACtD,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,wBAAwB,OAAO,YAAY;AAAA,IAC3C,OAAO;AAAA,IACP,mCAAmC,mCAAmC,MAAM,OAAO,KAAK,CAAC;AAAA,EAC3F;AAGA,QAAM,GAAG,UAAU,iBAAiB,mBAAmB;AAKvD,QAAM,yBAAyB,wBAAwB,IAAI;AAC3D,MAAI;AACJ,MAAI,qBAA0B;AAC9B,QAAM,sBAAsB,MAAM,4BAA4B,OAAO,UAAU,MAAM;AAAA,IACnF,KAAK;AAAA,EACP,CAAC;AACD,MAAI,wBAAwB;AAC1B,WAAO,KAAK,wDAAiD;AAAA,EAC/D,OAAO;AACL,UAAM,oBAAoBA,MAAK,KAAK,gBAAgB,oBAAoB;AACxE,UAAM,GAAG,UAAU,mBAAmB,qCAAqC;AAC3E,wBAAoB;AACpB,QAAI;AACF,YAAM,gBAAgB,MAAM,OAAO,mBAAmB,GAAG;AACzD,2BAAqB,wBAAwB,aAAa,GAAG,eAAe,OAAO;AACnF,aAAO,KAAK,iEAA0D;AAAA,IACxE,SAAS,OAAO;AACd,aAAO;AAAA,QACL,8DAA+D,MAAgB,OAAO;AAAA,MACxF;AAAA,IACF;AAAA,EACF;AAEA,MAAI;AACF,UAAM,UAAU;AAAA,MACd;AAAA;AAAA;AAAA,MAGA,WAAW,OAAO;AAAA,MAClB,SAAS;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA;AAAA;AAAA,QAGL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,mBAAmB;AAAA,QACnB,cAAc;AAAA;AAAA,QACd,eAAe;AAAA,UACb,OAAO;AAAA,YACL,eAAe;AAAA,UACjB;AAAA,UACA,QAAQ;AAAA,YACN,gBAAgB;AAAA,YAChB,gBAAgB;AAAA,YAChB,gBAAgB;AAAA;AAAA,YAEhB,gBAAgB,wBAAC,cAAc;AAC7B,kBAAI,UAAU,MAAM,SAAS,MAAM,GAAG;AACpC,uBAAO;AAAA,cACT;AACA,qBAAO;AAAA,YACT,GALgB;AAAA,UAMlB;AAAA;AAAA,UAEA,UAAU,wBAAC,OAAO;AAEhB,gBACE,GAAG,WAAW,OAAO,KACrB;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,EAAE,SAAS,EAAE,GACb;AACA,qBAAO;AAAA,YACT;AAEA,gBAAI,OAAO,cAAc,GAAG,SAAS,UAAU,KAAK,GAAG,SAAS,OAAO,GAAG;AACxE,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT,GA9BU;AAAA,QA+BZ;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,yBAAyB,OAAO,OAAO,OAAO,QAAQ;AAAA,QACtD,GAAI,qBAAqB,CAAC,kBAAkB,IAAI,CAAC;AAAA,QACjD,GAAI;AAAA,QACJ,GAAI,OAAO,KAAK,WAAW,CAAC;AAAA;AAAA,QAE5B;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU,IAAI;AAGZ,gBAAI,OAAO,iBAAiB;AAC1B,qBAAO,EAAE,IAAI,yBAAyB,UAAU,MAAM;AAAA,YACxD;AACA,gBAAI,OAAO,6BAA6B;AACtC,qBAAO,EAAE,IAAI,6BAA6B,UAAU,MAAM;AAAA,YAC5D;AAEA,gBACE,OAAO,0BACP,OAAO,uBACP,OAAO,8BACP,OAAO,2BACP,OAAO,0BACP,GAAG,SAAS,0BAA0B,KACtC,GAAG,SAAS,4BAA4B,GACxC;AACA,qBAAO,EAAE,IAAI,kBAAkB,UAAU,MAAM;AAAA,YACjD;AAEA,gBAAI,GAAG,SAAS,OAAO,KAAK,GAAG,SAAS,QAAQ,GAAG;AACjD,qBAAO,EAAE,IAAI,qBAAqB,UAAU,MAAM;AAAA,YACpD;AAEA,gBACE,OAAO,cACP,GAAG,SAAS,UAAU,KACtB,GAAG,SAAS,OAAO,KACnB,OAAO,WACP,OAAO,UACP,OAAO,mBACP,OAAO,aACP,OAAO,YACP,GAAG,WAAW,QAAQ,KACtB,GAAG,SAAS,cAAc,KAC1B,GAAG,SAAS,KAAK,GACjB;AACA,qBAAO,EAAE,IAAI,kBAAkB,UAAU,MAAM;AAAA,YACjD;AACA,mBAAO;AAAA,UACT;AAAA,UACA,KAAK,IAAI;AACP,gBAAI,OAAO,kBAAkB;AAC3B,qBAAO;AAAA,YACT;AACA,gBAAI,OAAO,qBAAqB;AAE9B,qBAAO;AAAA,YACT;AACA,gBAAI,OAAO,6BAA6B;AACtC,qBAAO;AAAA,YACT;AACA,gBAAI,OAAO,yBAAyB;AAElC,qBAAO;AAAA,gBACL;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,EAAE,KAAK,IAAI;AAAA,YACb;AACA,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,QACA,WAAW,EAAE,GAAG,QAAQ,8BAA8B,GAAG,aAAa;AAAA,QACtE,+BAA+B;AAAA,MACjC;AAAA,MACA,MAAM;AAAA,MACN,KAAK,oBACD;AAAA,QACE,SAAS;AAAA,MACX,IACA;AAAA;AAAA,MAEJ,SAAS;AAAA,QACP,OAAO,sBAAsB,MAAM,OAAO,MAAM;AAAA,QAChD,QAAQ,CAAC,GAAI,OAAO,SAAS,UAAU,CAAC,CAAE;AAAA,MAC5C;AAAA;AAAA,MAEA,cAAc;AAAA,QACZ,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,kBAAkB,SAAS;AACjC,UAAM,0BAA0B,MAAM,QAAQ,SAAS;AAAA,EACzD,UAAE;AAEA,QAAI;AACF,YAAM,GAAG,GAAG,gBAAgB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAC9D,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AA5fe;AAigBR,SAAS,sCAA8C;AAC5D,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgEP,KAAK;AACP;AAlEgB;AA0ET,SAAS,mCAA2C;AACzD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqEP,KAAK;AACP;AAvEgB;AAyET,SAAS,sCAA8C;AAO5D,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCP,KAAK;AACP;AA5CgB;AA8CT,SAAS,yCAAiD;AAC/D,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6QP,KAAK;AACP;AA/QgB;AAiRhB,SAAS,6BACP,aASA,cAQA,kBACA,MACA,QACA,mBACA,oBACA,eACA,kBACA,aAAyC;AAAA,EACvC,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS,CAAC,IAAI;AAAA,EACd,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,WAAW,CAAC;AAAA,EACZ,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,WAAW,CAAC;AACd,GACA,UAAiC,CAAC,GAClC,WAAyB,gBACzB,sBAA2D,QAC3D,gBAAgB,OAChB,uBAAmE,CAAC,GACpE,WAAW,KACX,yBAA0D,EAAE,SAAS,IAAI,MAAM,GAAG,GAC1E;AACR,QAAM,eAAe,wBAAC,eAAuB,WAAW,QAAQ,OAAO,GAAG,GAArD;AACrB,QAAM,oBAA+C;AAAA,IACnD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,wBAAwB,gBAAgB,QAAQ,IAClD;AAAA,+DACA,kDAAkD,KAAK,UAAU,SAAS,MAAM,CAAC;AACrF,QAAM,qBAAqB,0CAA0C,sBAAsB,IAAI;AAM/F,QAAM,iBAAiBA,MAAK,KAAK,MAAM,QAAQ,OAAO,aAAa;AACnE,QAAM,YAAY,WAAW,cAAc,IACvC,UAAU,KAAK,UAAU,aAAa,cAAc,CAAC,CAAC,MACtD;AAGJ,QAAM,yBAAmC,CAAC;AAC1C,QAAM,sBAAgC,CAAC;AAEvC,eAAa,QAAQ,CAAC,QAAQ,UAAU;AACtC,UAAM,eAAe,aAAa,OAAO,UAAU;AACnD,QAAI,CAAC,OAAO,6BAA6B;AACvC,6BAAuB,KAAK,gBAAgB,KAAK,UAAU,YAAY,IAAI;AAAA,IAC7E;AACA,wBAAoB;AAAA,MAClB,gBAAgB,KAAK,UAAU,OAAO,OAAO,CAAC,gBAAgB,OAAO,8BAA8B,SAAS,SAAS,KAAK,EAAE,oBAAoB,KAAK,UAAU,OAAO,aAAa,CAAC,qBAAqB,KAAK,UAAU,OAAO,cAAc,CAAC;AAAA,IAChP;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,uBAAuB,KAAK,IAAI;AACtD,QAAM,oBAAoB;AAAA,IACxB,SAAS,WAAW;AAAA,IACpB,eAAe,WAAW;AAAA,IAC1B,SAAS,WAAW;AAAA,EACtB;AACA,QAAM,oBAAoB,WAAW,UACjC;AAAA;AAAA;AAAA;AAAA,yBAImB,KAAK,UAAU,iBAAiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAepD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASJ,QAAM,wBAAwB,gBAC1B;AAAA,4BACsB,KAAK,UAAU,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOnD;AAAA;AAAA;AAAA;AAAA;AAKJ,QAAM,qBAAqB,mBACvB;AAAA,wCACkC,KAAK,UAAU,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAelE;AAAA;AAAA;AAAA;AAAA;AAMJ,MACE,YAAY,WAAW,KACvB,iBAAiB,WAAW,KAC5B,CAAC,mBAAmB,cACpB;AAEA,WAAO;AAAA;AAAA,EAET,SAAS;AAAA,EACT,aAAa;AAAA;AAAA;AAAA,EAGb,kBAAkB,OAAO;AAAA,EACzB,uBAAuB,OAAO;AAAA,EAC9B,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,oCAAoC,mBAAmB,kBAAkB,CAAC;AAAA;AAAA,kBAE1D,KAAK,UAAU,QAAQ,CAAC;AAAA,iCACT,KAAK,UAAU,aAAa,CAAC;AAAA;AAAA,EAE5D,uBAAuB,IAAI;AAAA;AAAA;AAAA,EAG3B,oCAAoC,CAAC;AAAA;AAAA;AAAA;AAAA,EAIrC,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,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;AAAA;AAAA;AAAA;AAAA,EAkDjC,KAAK;AAAA,EACL;AAGA,QAAM,UAAoB,CAAC;AAC3B,QAAM,eAAyB,CAAC;AAChC,QAAM,mBAA6B,CAAC;AACpC,QAAM,0BAA0B,oBAAI,IAAoB;AAExD,cAAY,QAAQ,CAAC,SAAS;AAC5B,eAAW,YAAY,KAAK,oBAAoB;AAC9C,8BAAwB;AAAA,QACtB,eAAe,SAAS,YAAY,IAAI;AAAA,QACxC,aAAa,SAAS,UAAU;AAAA,MAClC;AAAA,IACF;AACA,UAAM,OAAO,KAAK,oBACd,gBAAgB,KAAK,UAAU,aAAa,KAAK,UAAU,CAAC,CAAC,uCAC7D;AACJ,iBAAa,KAAK;AAAA,eACP,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,yBAClB,KAAK,UAAU,KAAK,iBAAiB,CAAC;AAAA,MACzD,KAAK,8BAA8B,uCAAuC,EAAE;AAAA,sBAC5D,KAAK,UAAU,KAAK,cAAc,CAAC;AAAA;AAAA,YAE7C,IAAI;AAAA,IACZ;AAAA,EACF,CAAC;AACD,QAAM,2BAA2B,wBAAwB,OAAO;AAChE,QAAM,0BAA0B,2BAC5B,gIACA;AACJ,QAAM,2BAA2B,2BAC7B;AAAA,EACJ,MAAM,KAAK,wBAAwB,QAAQ,CAAC,EAC3C;AAAA,IACC,CAAC,CAAC,WAAW,UAAU,MACrB,KAAK,KAAK,UAAU,SAAS,CAAC,kBAAkB,KAAK,UAAU,UAAU,CAAC;AAAA,EAC9E,EACC,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAqBP;AACJ,QAAM,0BAA0B,2BAC5B;AAAA;AAAA,KAGA;AACJ,mBAAiB,QAAQ,CAAC,MAAM,UAAU;AACxC,UAAM,aAAa,aAAa,KAAK,UAAU;AAC/C,YAAQ,KAAK,mBAAmB,KAAK,UAAU,UAAU,IAAI;AAC7D,qBAAiB,KAAK;AAAA,YACd,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,oBACjB,KAAK,UAAU,KAAK,YAAY,CAAC;AAAA,eACtC,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,mBACxB,KAAK,UAAU,KAAK,WAAW,CAAC;AAAA,oBAC/B,KAAK,UAAU,KAAK,YAAY,CAAC;AAAA,gBACrC,KAAK,UAAU,KAAK,QAAQ,CAAC;AAAA,0BACnB,KAAK;AAAA,IAC3B;AAAA,EACF,CAAC;AAGD,SAAO;AAAA;AAAA,EAEP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,mBAAmB,OAAO;AAAA;AAAA;AAAA;AAAA,EAI1B,kBAAkB,OAAO;AAAA,EACzB,uBAAuB,OAAO;AAAA,EAC9B,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA;AAAA,EAElB,QAAQ,KAAK,IAAI,CAAC;AAAA,EAClB,oCAAoC,mBAAmB,kBAAkB,CAAC;AAAA;AAAA,EAE1E,mBAAmB,OAAO;AAAA;AAAA,kBAEV,KAAK,UAAU,QAAQ,CAAC;AAAA,iCACT,KAAK,UAAU,aAAa,CAAC;AAAA;AAAA,EAE5D,uBAAuB,IAAI;AAAA;AAAA;AAAA;AAAA,EAI3B,aAAa,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,EAGxB,wBAAwB;AAAA,EACxB,uBAAuB;AAAA;AAAA;AAAA,EAGvB,iBAAiB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAK5B,oBAAoB,KAAK,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,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;AA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0aA,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;AA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+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,8BAmT3H,uBACI;AAAA;AAAA,eAGA,4BACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6CAiGmC,KAAK,UAAU,wBAAwB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsHjF,uBACI;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA2JE,KAAK;AACT;AA38GS;AAi9GT,SAAS,uBAAuB,QAAgB,UAA2B;AACzE,QAAM,iBAAiB,OAAO,MAAM,GAAG,EAAE,OAAO,OAAO;AACvD,QAAM,mBAAmB,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAC3D,MAAI,gBAAgB;AAEpB,aAAW,iBAAiB,gBAAgB;AAC1C,QAAI,kBAAkB,OAAO,aAAa,KAAK,aAAa,EAAG,QAAO;AAEtE,UAAM,kBAAkB,iBAAiB,aAAa;AACtD,QAAI,aAAa,KAAK,aAAa,GAAG;AACpC,UAAI,oBAAoB,OAAW;AACnC;AAAA,IACF;AACA,QAAI,oBAAoB,OAAW,QAAO;AAC1C,QAAI,CAAC,cAAc,WAAW,GAAG,KAAK,kBAAkB,gBAAiB,QAAO;AAChF;AAAA,EACF;AAEA,SAAO,kBAAkB,iBAAiB;AAC5C;AAnBS;AAqBT,SAAS,yBACP,UACA,wBACwB;AACxB,QAAM,UAAkC;AAAA,IACtC,iBAAiB;AAAA,EACnB;AACA,aAAW,SAAS,wBAAwB;AAC1C,QAAI,CAAC,uBAAuB,MAAM,QAAQ,QAAQ,EAAG;AACrD,eAAW,UAAU,MAAM,QAAS,SAAQ,OAAO,IAAI,YAAY,CAAC,IAAI,OAAO;AAAA,EACjF;AACA,SAAO;AACT;AAZS;AAcT,SAAS,mBAAmB,OAAuB;AACjD,SAAO,MAAM,QAAQ,uBAAuB,MAAM;AACpD;AAFS;AAIT,SAAS,yBAAyB,SAA0B,UAA2B;AACrF,MAAI,mBAAmB,QAAQ;AAC7B,YAAQ,YAAY;AACpB,WAAO,QAAQ,KAAK,QAAQ;AAAA,EAC9B;AAEA,MAAI,YAAY,OAAO,YAAY,QAAS,QAAO;AACnD,MAAI,QAAQ,SAAS,MAAM,GAAG;AAC5B,UAAM,SAAS,QAAQ,MAAM,GAAG,EAAE;AAClC,WAAO,aAAa,UAAU,SAAS,WAAW,GAAG,MAAM,GAAG;AAAA,EAChE;AAEA,QAAM,WAAW,QAAQ,MAAM,GAAG,EAAE,OAAO,OAAO;AAClD,MAAI,SAAS,WAAW,EAAG,QAAO,aAAa;AAC/C,QAAM,aAAa,SAChB,IAAI,CAAC,YAAY;AAChB,QAAI,YAAY,KAAM,QAAO;AAC7B,QAAI,YAAY,IAAK,QAAO;AAC5B,QACE,aAAa,KAAK,OAAO,KACzB,iBAAiB,KAAK,OAAO,KAC7B,qBAAqB,KAAK,OAAO,GACjC;AACA,aAAO;AAAA,IACT;AACA,QAAI,aAAa,KAAK,OAAO,EAAG,QAAO;AACvC,QAAI,aAAa,KAAK,OAAO,EAAG,QAAO;AACvC,QAAI,QAAQ,WAAW,GAAG,KAAK,WAAW,KAAK,OAAO,EAAG,QAAO;AAChE,WAAO,IAAI,mBAAmB,OAAO,EAAE,QAAQ,SAAS,OAAO,CAAC;AAAA,EAClE,CAAC,EACA,KAAK,EAAE;AACV,SAAO,IAAI,OAAO,IAAI,UAAU,KAAK,EAAE,KAAK,QAAQ;AACtD;AAhCS;AAkCT,SAAS,8BACP,QACA,UACS;AACT,MAAI,CAAC,wBAAwB,MAAM,EAAG,QAAO;AAE7C,QAAM,UAAW,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAIzD,SAAO,QAAQ,KAAK,CAAC,UAAU;AAC7B,QAAI,MAAM,SAAS,KAAK,CAAC,YAAY,yBAAyB,SAAS,QAAQ,CAAC,GAAG;AACjF,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,MAAM,QAAS,QAAO;AAC3B,UAAM,WAAW,MAAM,QAAQ,MAAM,OAAO,IAAI,MAAM,UAAU,CAAC,MAAM,OAAO;AAC9E,WAAO,SAAS,KAAK,CAAC,YAAY;AAEhC,UAAI,OAAO,YAAY,WAAY,QAAO;AAC1C,cACG,OAAO,YAAY,YAAY,mBAAmB,WACnD,yBAAyB,SAAS,QAAQ;AAAA,IAE9C,CAAC;AAAA,EACH,CAAC;AACH;AA1BS;AA4BT,SAAS,2BACP,kBACA,UACS;AACT,SAAO,iBAAiB,KAAK,CAAC,UAAU;AACtC,QAAI,MAAM,SAAS,IAAK,QAAO;AAC/B,WACE,yBAAyB,MAAM,MAAM,QAAQ,KAC7C,yBAAyB,GAAG,MAAM,IAAI,OAAO,QAAQ;AAAA,EAEzD,CAAC;AACH;AAXS;AAaT,SAAS,wBAAwB,SAAyB;AACxD,SAAO,QACJ,MAAM,GAAG,EACT,OAAO,OAAO,EACd,OAAO,CAAC,OAAO,YAAY;AAC1B,QAAI,YAAY,QAAQ,QAAQ,WAAW,OAAO,EAAG,QAAO,QAAQ;AACpE,QAAI,YAAY,OAAO,QAAQ,WAAW,MAAM,KAAK,UAAU,KAAK,OAAO,GAAG;AAC5E,aAAO,QAAQ;AAAA,IACjB;AACA,QAAI,WAAW,KAAK,OAAO,KAAK,QAAQ,WAAW,GAAG,EAAG,QAAO,QAAQ;AACxE,WAAO,QAAQ;AAAA,EACjB,GAAG,CAAC;AACR;AAZS;AAcT,SAAS,sBAAsB,QAA4B,UAAkB;AAC3E,SAAO,OAAO,QAAQ,OAAO,UAAU,EACpC,OAAO,CAAC,CAAC,OAAO,MAAM,yBAAyB,SAAS,QAAQ,CAAC,EACjE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,wBAAwB,IAAI,IAAI,wBAAwB,KAAK,CAAC,EACxF,OAAgC,CAAC,UAAU,CAAC,EAAE,IAAI,MAAM,OAAO,OAAO,UAAU,IAAI,GAAG,CAAC,CAAC;AAC9F;AALS;AAOT,SAAS,qBACP,UACA,UAC2C;AAC3C,SAAO,SAAS,OACb,OAAO,CAAC,UAAU,MAAM,SAAS,UAAU,yBAAyB,MAAM,SAAS,QAAQ,CAAC,EAC5F;AAAA,IACC,CAAC,MAAM,UACL,wBAAwB,MAAM,OAAO,IAAI,wBAAwB,KAAK,OAAO;AAAA,EACjF,EAAE,CAAC;AACP;AAVS;AAYT,SAAS,iCAAiC,SAOnB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,MAAI,OAAO,KAAK,QAAS,QAAO;AAChC,MAAI,gBAAgB,KAAK,CAAC,WAAW,yBAAyB,QAAQ,QAAQ,CAAC,GAAG;AAChF,WAAO;AAAA,EACT;AACA,MAAI,eAAe,KAAK,CAAC,WAAW,yBAAyB,QAAQ,QAAQ,CAAC,GAAG;AAC/E,WAAO;AAAA,EACT;AACA,MAAI,2BAA2B,kBAAkB,QAAQ,EAAG,QAAO;AACnE,MAAI,8BAA8B,OAAO,YAAY,QAAQ,EAAG,QAAO;AACvE,MAAI,0BAA0B,MAAM,EAAG,QAAO;AAC9C,MAAI,4BAA4B,MAAM,EAAG,QAAO;AAEhD,QAAM,gBAAgB,qBAAqB,sBAAsB,QAAQ;AACzE,MAAI,eAAe,cAAc,UAAW,QAAO;AACnD,MACE,kBACC,cAAc,YAAY,UACzB,QAAQ,cAAc,SAAS,MAAM,KACrC,cAAc,gBAAgB,SAChC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,sBAAsB,QAAQ,QAAQ;AACxD,MAAI,UAAU,cAAc,SAAS,UAAU,WAAW,aAAa,UAAU,QAAQ,MAAM;AAC7F,WAAO;AAAA,EACT;AACA,MACG,UAAU,QAAQ,UAAa,UAAU,QAAQ,SACjD,UAAU,QAAQ,UAAa,UAAU,QAAQ,OAClD;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAnDS;AAqDT,eAAe,oBACb,QACA,cACA,iBACA,gBACA,QACA,MACA,SACA,WACA,cACA,iBACA,sBACA,wBACA,2BACA,eACA;AAIA,QAAM,CAAC,IAAI,kBAAkB,IAAI,MAAM,QAAQ,IAAI;AAAA,IACjD,OAAO,aAAa;AAAA,IACpB;AAAA,EACF,CAAC;AACD,MAAI,mBAAmB,WAAW,WAAY,OAAM,mBAAmB;AACvE,QAAM,QAAQ,mBAAmB;AAEjC,QAAM,WAAW,WAAW,YAAY,WAAW;AACnD,QAAM,qBAAqB,WAAW;AACtC,QAAM,YAAY,wBAAwB,MAAM,OAAO,OAAO,SAAS;AACvE,QAAM,eAAeA,MAAK,KAAK,MAAM,SAAS,KAAK;AACnD,QAAM,eAAe,oBAAoB,QAAQ,MAAM;AACvD,QAAM,6BAA6B,MAAM,KAAK,aAAa,kBAAkB,EAAE,OAAO,CAAC,EAAE;AAAA,IACvF,CAAC,UAAU,MAAM,eAAe;AAAA,EAClC;AACA,QAAM,kCAAkC;AAAA,IACtC;AAAA,IACA;AAAA,EACF;AACA,QAAM,sBAAsB,wBAAC,OAC1B,mCAAmC,OAAO,gBAAiB,sBAAsB,EAAE,GAD1D;AAE5B,QAAM,sBAAsB,2BAA2B,SAAS;AAChE,QAAM,wBAAwB,oBAAI,IAAI;AAAA,IACpC,GAAI,iBAAiB,SAAS,CAAC,OAAO,IAAI,CAAC;AAAA,IAC3C,GAAI,kCAAkC,CAAC,YAAY,IAAI,CAAC;AAAA,EAC1D,CAAC;AAID,QAAM,yBACJ,WAAW,iBACX,CAAC,GAAG,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,sBAAsB,IAAI,WAAW,CAAC;AAExF,SAAO,KAAK,qCAA8B,SAAS,EAAE;AACrD,SAAO,KAAK,6BAAsB,YAAY,EAAE;AAChD,SAAO,KAAK,qBAAc,MAAM,EAAE;AAElC,QAAM,uBAAuB,aAAa,gBAAgB;AAC1D,QAAM,0BAA0B,yBAAyB,sBAAsB,MAAM,CAAC;AAGtF,QAAM,kCAAkC,QAAQ,IAAI,CAAC,OAAO,UAAU,GAAG,OAAO,SAAS,CAAC,CAAC;AAC3F,QAAM,gBAAgB,MAAM,6BAA6B,MAAM;AAC/D,QAAM,WAAW,MAAM,wBAAwB,MAAM;AACrD,QAAM,CAAC,EAAE,KAAK,SAAS,GAAG,kBAAkB,CAAC,qBAAqB,kBAAkB,CAAC,IACnF,MAAM,QAAQ,IAAI;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,QAAM,kBAAkB;AAAA,IACtB,GAAG,aAAa,aAAa,EAAE,IAAI,CAAC,UAAU,MAAM,MAAM;AAAA,IAC1D,GAAG,oBAAoB,IAAI,CAAC,UAA0B,MAAM,MAAM;AAAA,EACpE;AACA,QAAM,iBAAiB,mBAAmB,IAAI,CAAC,UAAyB,MAAM,MAAM;AACpF,QAAM,kBAA4B,CAAC;AACnC,QAAM,yBAAsE,CAAC;AAC7E,aAAW,QAAQ,UAAU;AAI3B,QAAI,KAAK,eAAe,OAAW;AACnC,QAAI,gBAAgB,SAAS,KAAK,OAAO,EAAG;AAE5C,UAAM,SAAS,iCAAiC;AAAA,MAC9C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU,KAAK;AAAA,IACjB,CAAC;AACD,QAAI,QAAQ;AACV,6BAAuB,KAAK,EAAE,UAAU,KAAK,SAAS,OAAO,CAAC;AAC9D;AAAA,IACF;AACA,oBAAgB,KAAK,KAAK,OAAO;AAAA,EACnC;AACA,aAAW,WAAW,wBAAwB;AAC5C,WAAO,KAAK,4BAAuB,QAAQ,QAAQ,oBAAoB,QAAQ,MAAM,GAAG;AAAA,EAC1F;AACA,MAAI,cAAc,UAAU,SAAS,GAAG;AACtC,WAAO,KAAK,uBAAa,cAAc,UAAU,MAAM,wBAAwB;AAAA,EACjF;AACA,MAAI,SAAS,KAAK,SAAS,GAAG;AAC5B,WAAO,KAAK,4BAAkB,SAAS,KAAK,MAAM,qBAAqB;AAAA,EACzE;AACA,MAAI,WAAW,sBAAsB,SAAS,KAAK,SAAS,GAAG;AAC7D,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAAiB,oBAAoB,cAAc,gBAAgB,SAAS,cAAc;AAChG,QAAM,uBAAuB,+BAA+B,SAAS,IAAI;AAOzE,QAAM,CAAC,eAAe,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrD,2BAA2B,eAAe;AAAA,IAC1C,yBAAyB,eAAe;AAAA,EAC1C,CAAC;AACD,aAAW,UAAU,OAAO,OAAO,SAAS,GAAG;AAC7C,QAAI,OAAO,SAAS,QAAS;AAG7B,QAAI,OAAO,KAAK,SAAS,gCAAgC,GAAG;AAC1D,aAAO,OAAO,OAAO,KAAK,MAAM,gCAAgC,EAAE,KAAK,aAAa;AAAA,IACtF;AACA,QAAI,OAAO,KAAK,SAAS,8BAA8B,GAAG;AACxD,aAAO,OAAO,OAAO,KAAK,MAAM,8BAA8B,EAAE,KAAK,WAAW;AAAA,IAClF;AAAA,EACF;AAGA,QAAM,GAAG,MAAM,cAAc,EAAE,WAAW,KAAK,CAAC;AAEhD,aAAW,CAAC,UAAU,MAAM,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC1D,UAAM,WAAWA,MAAK,KAAK,cAAc,QAAQ;AAEjD,UAAM,GAAG,MAAMA,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAC1D,UAAM,GAAG,UAAU,UAAU,OAAO,SAAS,UAAU,OAAO,OAAO,OAAO,MAAM;AAAA,EACpF;AAIA,QAAM,iBAAiBA,MAAK,KAAK,cAAc,iBAAiB;AAEhE,QAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,wFAK+D,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA+DhG,KAAK;AAEP,QAAM,GAAG,UAAU,gBAAgB,cAAc;AACjD,QAAM,0BACJ,WAAW,gBAAgBA,MAAK,KAAK,cAAc,4BAA4B,IAAI;AACrF,MAAI,yBAAyB;AAC3B,UAAM,GAAG;AAAA,MACP;AAAA,MACA,0BAA0B;AAAA,QACxB,gBAAgBA,MAAK,SAAS,cAAc;AAAA,QAC5C,mBAAmB,8BAA8B,MAAM,WAAW;AAAA,QAClE,QAAQ,OAAO;AAAA,QACf,wBAAwB,8BAA8B,MAAM,uBAAuB;AAAA,MACrF,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,oBAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,4BAA4B,4BAA4B,OAAO,UAAU;AAC/E,QAAM,2BAA2B,OAAO;AAAA,IACtC,gBAAgB,IAAI,CAAC,UAAU;AAC7B,YAAM,iBAAiB,0BAA0B,KAAK,KAAK,CAAC;AAC5D,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,GAAG;AAAA,UACH,WAAW;AAAA,UACX,SAAS;AAAA,YACP,GAAG,yBAAyB,OAAO,sBAAsB;AAAA,YACzD,GAAG,eAAe;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,cAA2B;AAAA,IAC7B;AAAA,IACA,GAAI,0BAA0B,EAAE,OAAO,wBAAwB,IAAI,CAAC;AAAA,IACpE,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAUA,MAAK,KAAK,MAAM,SAAS,QAAQ;AAAA,IAC3C,mBAAmB;AAAA,IACnB,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,WAAWA,MAAK,KAAK,WAAW,QAAQ;AAAA,MACxC,WAAWA,MAAK,KAAK,WAAW,QAAQ;AAAA,IAC1C;AAAA,IACA,cAAc;AAAA,MACZ;AAAA,QACE,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,GAAI,gBAAgB,SAAS,IACzB;AAAA,MACE,WAAW;AAAA,QACT,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,QAAQ;AAAA,MACV;AAAA,IACF,IACA,CAAC;AAAA,IACL,cAAc;AAAA,MACZ,OAAO,cAAc,UAAU,SAAS,KAAK,SAAS,KAAK,SAAS;AAAA,IACtE;AAAA,IACA,OAAO;AAAA,MACL,GAAG,cAAc;AAAA,MACjB,GAAG,SAAS;AAAA,IACd;AAAA,IACA,gBAAgB,WAAW,cAAc,iBAAiB;AAAA,IAC1D,GAAI,sBAAsB,uBACtB;AAAA,MACE,YAAY;AAAA,IACd,IACA,CAAC;AAAA;AAAA,IAEL,UAAU;AAAA,MACR,GAAI,cAAc,cACd;AAAA,QACE;AAAA,UACE,OAAO,GAAG,OAAO,UAAU,KAAK;AAAA,UAChC,SAAS,cAAc;AAAA,QACzB;AAAA,MACF,IACA,CAAC;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,SAAS,YAAY,cAAc;AAAA,MACrC;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,GAAI,6BAA6B,OAAO,GAAG,MAAM,MAC7C,CAAC,IACD;AAAA,QACE,CAAC,GAAG,6BAA6B,OAAO,GAAG,CAAC,KAAK,GAAG;AAAA,UAClD,MAAM;AAAA,UACN,SAAS;AAAA,YACP,+BAA+B;AAAA,YAC/B,gCAAgC;AAAA,YAChC,gCAAgC;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,MACJ,OAAO;AAAA,QACL,WAAW;AAAA,MACb;AAAA,MACA,GAAG;AAAA;AAAA;AAAA,MAGH,GAAG;AAAA,IACL;AAAA,IACA,WAAW;AAAA,MACT,UAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAI,kCAAkC,CAAC,YAAY,IAAI,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,SACE,8BAA8B,CAAC,kCAC3B,CAAC,8BAA8B,CAAC,IAChC,CAAC;AAAA,IACT;AAAA;AAAA;AAAA,IAGA,QAAQ;AAAA,IACR,WAAW;AAAA;AAAA,EACb;AACA,QAAM,4BAA4B,2BAA2B,WAAW;AAExE,MAAI,eAAe;AACjB,kBAAc,MAAM,cAAc,cAAc,oBAAoB,WAAW;AAAA,EACjF;AAEA,QAAM,oBAAoBA,MAAK,KAAK,WAAW,QAAQ;AACvD,QAAM,mBAAmB,OAAO,KAAK,YAAY,gBAAgB,CAAC,CAAC,EAAE;AAAA,IACnE,CAAC,QAAQ,QAAQ,cAAc,QAAQ;AAAA,EACzC;AACA,QAAM,oBAAoB,YAAY,SAAS;AAC/C,QAAM,iCAAiC;AAAA,IACrC,mBAAmB,YAAY,UAC/B,mBAAmB,YAAY,UAC/B,mBAAmB,YAAY,UAC/B,mBAAmB;AAAA,EACrB;AACA,QAAM,6BAA6B;AAAA,IACjC,OAAO,KAAK,YAAY,SAAS,CAAC,CAAC,EAAE,SAAS,MAC7C,MAAM,QAAQ,YAAY,OAAO,IAAI,YAAY,QAAQ,KAAK,OAAO,IAAI,YAAY;AAAA,EACxF;AACA,QAAM,qCAAqC,CAAC;AAAA,IAC1C;AAAA,IACA,2BAA2B,WAAW;AAAA,EACxC;AACA,QAAM,mBAAmB,YAAY,WAAW,QAAQ,IAAI;AAC5D,QAAM,sBACJ,0BACA,YAAY,WAAW,kBACtB,qBAAqB,UACpB,qBAAqB,YACrB,qBAAqB,eACvB,YAAY,cAAc,SAC1B,CAAC,kCACD,CAAC,8BACD,CAAC,sCACD,YAAY,cAAc,aAAa,uBACvC,CAAC,iBAAiB,YAAY,cAAc,OAAO,KACnD,iBAAiB,WAAW,KAC5BA,MAAK,QAAQ,YAAY,QAAQ,aAAa,EAAE,MAAMA,MAAK,QAAQ,iBAAiB,KACpF;AAAA,IACE,YAAY,UAAU;AAAA,MACpB,CAAC,YAAYA,MAAK,QAAQ,SAAS,WAAW,EAAE,MAAM;AAAA,IACxD;AAAA,EACF;AACF,QAAM,wBACJ,uBAAuB,qBAAqB,UAAc,MAAM,sBAAsB;AACxF,MAAI,sBAAuB,aAAY,UAAU;AACjD,QAAM,qBACJ,wBAAwB,YAAY,WAAW,QAAQ,IAAI,mBAAmB;AAEhF,QAAM,eAAe,YAAY,WAAW;AAC5C,QAAM,2BAA2B,YAAY,SAAS,WAAW,CAAC;AAClE,QAAM,yBAAyB;AAAA,IAC7B,GAAG;AAAA;AAAA;AAAA,IAGH,WACE,OAAO,MAAM,WAAW,OAAO,KAAK,SAAS,SACzC,QACC,yBAAyB,aAAa;AAAA,EAC/C;AACA,QAAM,4BACJ,OAAO,MAAM,WAAW,OAAO,KAAK,SAAS,SACzC,yBACA;AACN,QAAM,kBAAkB,yBAAyB,UAAU;AAC3D,QAAM,yBACJ,mBACA,YAAY,cAAc,SAC1B,CAAC,kCACD,CAAC;AACH,QAAM,uBAAuB,yBACzB,+BAA+B,sBAAsB,IACrD;AACJ,MAAI,qBAAqB;AACvB,UAAM,0BAA0B,YAAY,cAAc;AAC1D,gBAAY,eAAe;AAAA,MACzB,GAAG,YAAY;AAAA,MACf,SAAS;AAAA,QACP,GAAI,MAAM,QAAQ,uBAAuB,IACrC,0BACA,0BACE,CAAC,uBAAuB,IACxB,CAAC;AAAA,QACP;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,cAAY,SAAS,yBAAyB,QAAQ;AACtD,cAAY,UAAU;AAAA,IACpB,GAAG,YAAY;AAAA,IACf,SAAS;AAAA,MACP,GAAG;AAAA,MACH,QAAQ,yBAAyB,QAAQ,yBAAyB;AAAA,MAClE,WAAW,uBAAuB;AAAA,MAClC,eAAe,yBAAyB,iBAAiB;AAAA,IAC3D;AAAA,EACF;AAGA,QAAM,gBAAgB,MAAM,MAAM,YAAY,WAAW;AACzD,MAAI,yBAAyB;AAI3B,kBAAc,MAAM,KAAK,oBAAoB,CAAC,sBAAsB;AAClE,aAAO,kBAAkB;AAAA,IAC3B,CAAC;AAAA,EACH;AACA,gBAAc,MAAM,KAAK,kBAAkB,CAAC,gBAAgB;AAC1D,gBAAY,MAAM,KAAK,iBAAiB,CAAC,iBAAiB,iBAAiB;AASzE,YAAM,oBAAoB,aAAa;AACvC,mBAAa,UAAU;AAAA,QACrB,GAAI,MAAM,QAAQ,iBAAiB,IAC/B,oBACA,oBACE,CAAC,iBAAiB,IAClB,CAAC;AAAA,QACP,qCAAqC,OAAO,IAAI;AAAA,MAClD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACD,QAAM,MAAM,QAAQ,aAAa;AACjC,QAAM,MAAM,iBAAiB,aAAa;AAC1C,MAAI,gBAAgB,SAAS,KAAK,qBAAqB;AAIrD,kBAAc,MAAM,KAAK,kBAAkB,CAAC,gBAAgB;AAC1D,UAAI,oBAAoB;AACtB,oBAAY,MAAM,KAAK,iBAAiB,CAAC,QAAQ,iBAAiB;AAChE,gBAAM,iBAAiB;AAIvB,iBAAO,eAAe;AACtB,iBAAO,eAAe;AAAA,QACxB,CAAC;AAAA,MACH;AACA,kBAAY,MAAM,KAAK,YAAY,YAAY;AAC7C,cAAM,qBAAqBA,MAAK,KAAK,WAAW,QAAQ;AACxD,cAAM;AAAA,UACJ;AAAA,UACAA,MAAK,KAAK,oBAAoB,mBAAmB;AAAA,UACjD,CAAC;AAAA,UACD;AAAA,UACA;AAAA,QACF;AACA,cAAM,iCAAiC,oBAAoB,cAAc,EAAE;AAAA,MAC7E,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,MAAI,wBAAwB,oBAAoB;AAG9C,kBAAc,MAAM,KAAK,iBAAiB,CAAC,QAAQ,iBAAiB;AAClE,UAAI,oBAAoB;AAItB,cAAM,iBAAiB;AAIvB,eAAO,eAAe;AACtB,eAAO,eAAe;AAAA,MACxB;AACA,UAAI,sBAAsB;AACxB,cAAM,oBAAoB,aAAa;AACvC,qBAAa,UAAU;AAAA,UACrB,GAAI,MAAM,QAAQ,iBAAiB,IAC/B,oBACA,oBACE,CAAC,iBAAiB,IAClB,CAAC;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,gBAAgB,SAAS,GAAG;AAC9B,WAAO,KAAK,2BAAoB,gBAAgB,MAAM,cAAc;AACpE,UAAM,MAAM,UAAU,aAAa;AAAA,EACrC;AACA,QAAM,MAAM,MAAM,aAAa;AAC/B,QAAM,cAAc,MAAM;AAE1B,QAAM,cAAc,MAAM,QAAQ,WAAW;AAAA,IAC3C,sBACI;AAAA,MACE;AAAA,MACAA,MAAK,KAAK,WAAW,UAAU,mBAAmB;AAAA,MAClD;AAAA,MACA;AAAA,MACA;AAAA,IACF,IACA,QAAQ,QAAQ;AAAA,IACpB,iBAAiB,SACb,iBAAiB,QAAQ,MAAMA,MAAK,KAAK,WAAW,QAAQ,GAAG,EAAE,IACjE,QAAQ,QAAQ;AAAA,IACpB,kCACI,yBAAyB,MAAMA,MAAK,KAAK,WAAW,QAAQ,GAAG,EAAE,IACjE,QAAQ,QAAQ;AAAA,EACtB,CAAC;AACD,QAAM,aAAa,YAAY;AAAA,IAC7B,CAAC,WAA4C,OAAO,WAAW;AAAA,EACjE;AACA,MAAI,WAAY,OAAM,WAAW;AAEjC,MAAI,qBAAqB;AACvB,UAAM,iCAAiCA,MAAK,KAAK,WAAW,QAAQ,GAAG,cAAc,EAAE;AACvF,WAAO,KAAK,8DAAyD;AAAA,EACvE;AACA,MAAI,oBAAoB;AACtB,WAAO,KAAK,6CAAwC;AAAA,EACtD;AAEA,MAAI,eAAe;AACjB,UAAM,cAAc,gBAAgB,mBAAmB;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAIA,MAAI,UAAU;AACZ,UAAM,wBAAwB,MAAM,WAAW,IAAI,QAAQ,eAAe,oBAAoB;AAAA,EAChG;AAEA,SAAO,QAAQ,6CAAwC,MAAM,EAAE;AACjE;AA3lBe;AA6lBf,eAAe,sBACb,WACA,WACA,0BACA,QACA,IACe;AACf,QAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,GAAG;AAAA,EACL,IAAI;AACJ,QAAM,0BAA0B,OAAO,KAAK,0BAA0B,EAAE;AAAA,IACtE,CAAC,WAAW,WAAW;AAAA,EACzB;AACA,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,YAAY,UAAU,2BAA2B,MAAM,OAAO,SAAS,GAAG,YAAY;AAE5F,QAAM,GAAG,GAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACvD,QAAM,QAAQ;AAAA,IACZ,OAAO,QAAQ,SAAS,EAAE,IAAI,OAAO,CAAC,UAAU,MAAM,MAAM;AAC1D,YAAM,aAAaA,MAAK,KAAK,WAAW,QAAQ;AAChD,YAAM,GAAG,MAAMA,MAAK,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAE5D,UAAI,OAAO,SAAS,SAAS;AAC3B,cAAM,GAAG,UAAU,YAAY,OAAO,MAAM;AAC5C;AAAA,MACF;AAEA,UAAI,OAAO,OAAO;AAClB,UAAI,WAAW;AACb,cAAM,SAAS,MAAM,UAAU,MAAM;AAAA,UACnC,GAAG;AAAA,UACH,YAAY;AAAA,QACd,CAAC;AACD,eAAO,OAAO;AAAA,MAChB;AAEA,YAAM,GAAG,UAAU,YAAY,IAAI;AAAA,IACrC,CAAC;AAAA,EACH;AACF;AA/Ce;AAiDf,eAAe,iCACb,WACA,cACA,IACe;AACf,QAAM,cAAcA,MAAK,KAAK,WAAW,cAAc;AACvD,QAAM,cAAc,MAAM,GACvB,SAAS,aAAa,MAAM,EAC5B,KAAK,CAAC,aAAa,KAAK,MAAM,QAAQ,CAAC,EACvC,MAAM,CAAC,UAAiC;AACvC,QAAI,MAAM,SAAS,SAAU,QAAO,EAAE,MAAM,SAAS;AACrD,UAAM;AAAA,EACR,CAAC;AACH,QAAM,kBACJ,YAAY,WAAW,OAAO,YAAY,YAAY,WAAW,YAAY,UAAU,CAAC;AAC1F,QAAM,cAAc,GAAG,mBAAmB,IAAI,YAAY,GAAG,QAAQ,OAAO,GAAG;AAE/E,cAAY,UAAU;AAAA,IACpB,GAAG;AAAA,IACH,CAAC,uBAAuB,GAAG,KAAK,WAAW;AAAA,EAC7C;AACA,QAAM,GAAG,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC7C,QAAM,GAAG,UAAU,aAAa,GAAG,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAAA,CAAI;AAC7E;AAvBe;AA+Bf,eAAsB,qBACpB,KACA,MACA,IACe;AACf,MAAI;AACF,UAAM,GAAG,OAAO,KAAK,IAAI;AACzB;AAAA,EACF,SAAS,OAAO;AACd,UAAM,OAAQ,OAAiC;AAC/C,QAAI,SAAS,WAAW,SAAS,YAAY,SAAS,WAAW,SAAS,aAAa;AACrF,YAAM;AAAA,IACR;AAAA,EACF;AACA,QAAM,GAAG,GAAG,KAAK,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACvD,QAAM,GAAG,GAAG,KAAK,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACnD;AAhBsB;AAsBtB,eAAe,wBACb,MACA,WACA,IACA,QACA,eACA,sBACA;AACA,QAAM,YAAYA,MAAK,KAAK,WAAW,QAAQ;AAC/C,QAAM,eAAeA,MAAK,KAAK,WAAW,WAAW;AACrD,QAAM,eAAeA,MAAK,KAAK,cAAc,cAAc;AAC3D,QAAM,YAAYA,MAAK,KAAK,WAAW,QAAQ;AAC/C,QAAM,YAAYA,MAAK,KAAK,WAAW,QAAQ;AAG/C,QAAM,GAAG,MAAM,cAAc,EAAE,WAAW,KAAK,CAAC;AAGhD,QAAM,iBAAiB,MAAM,GAAG,QAAQ,SAAS;AACjD,aAAW,QAAQ,gBAAgB;AACjC,UAAM,MAAMA,MAAK,KAAK,WAAW,IAAI;AACrC,UAAM,OAAOA,MAAK,KAAK,cAAc,IAAI;AACzC,UAAM,qBAAqB,KAAK,MAAM,EAAE;AAAA,EAC1C;AAGA,QAAM,GAAG,GAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAGvD,MAAI;AACF,UAAM,qBAAqB,WAAW,WAAW,EAAE;AAAA,EACrD,SAAS,OAAO;AAEd,QAAK,OAAiC,SAAS,SAAU,OAAM;AAAA,EACjE;AAGA,QAAM,6BAA6B,QAAQ,MAAM,cAAc,EAAE;AACjE,QAAM,0BAA0B,MAAM,cAAc,EAAE;AAGtD,QAAM,aAAaA,MAAK,KAAK,WAAW,aAAa;AACrD,QAAM,gBAAgB,MAAM,GAAG,SAAS,YAAY,OAAO;AAC3D,QAAM,eAAe,KAAK,MAAM,aAAa;AAE7C,QAAM,gBAAgB,MAAM;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAKA,eAAa,SAAS,sBAAsB;AAAA,IAC1C,cAAc,MAAM,QAAQ,aAAa,MAAM,IAAI,aAAa,SAAS,CAAC;AAAA,IAC1E;AAAA,IACA,aAAa,6BAA6B,OAAO,GAAG;AAAA,EACtD,CAAC;AAED,QAAM,gCAAgC;AAAA,IACpC;AAAA,IACA,cAAc;AAAA,EAChB;AACA,QAAM,wBAAwB;AAAA,IAC5B;AAAA,IACA,OAAO,KAAK;AAAA,EACd;AAEA,QAAM,GAAG,UAAU,YAAY,KAAK,UAAU,uBAAuB,MAAM,CAAC,CAAC;AAE7E,SAAO,KAAK,6DAAwD;AACtE;AAxEe;AA0Ef,eAAe,6BACb,QACA,MACA,cACA,IACA;AACA,QAAM,iBAAiB,2BAA2B,QAAQ,IAAI;AAC9D,MAAI,CAAC,eAAgB;AAErB,QAAM,oBAAoBA,MAAK,KAAK,cAAc,UAAU,SAAS,mBAAmB;AACxF,QAAM,uBAAuB,mCAAmC,gBAAgB;AAAA,IAC9E,UAAU;AAAA,EACZ,CAAC;AACD,QAAM,GAAG,GAAG,mBAAmB,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAC/D,QAAM,GAAG,MAAMA,MAAK,QAAQ,iBAAiB,GAAG,EAAE,WAAW,KAAK,CAAC;AACnE,QAAM,GAAG,GAAG,gBAAgB,mBAAmB;AAAA,IAC7C,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AACD,QAAM,GAAG;AAAA,IACPA,MAAK,KAAK,mBAAmB,gCAAgC;AAAA,IAC7D,GAAG,KAAK,UAAU,sBAAsB,MAAM,CAAC,CAAC;AAAA;AAAA,EAClD;AAEA,SAAO,KAAK,8CAAuCA,MAAK,SAAS,MAAM,cAAc,CAAC,EAAE;AAC1F;AAzBe;AA2Bf,eAAe,iBACb,QACA,MACA,cACA,IACe;AACf,MAAI,OAAO,OAAO,aAAa,OAAQ;AAEvC,QAAM,iBAAiB,cAAcA,MAAK,KAAK,MAAM,cAAc,CAAC;AACpE,MAAI,eAAe;AACnB,MAAI,CAAC,mBAAmB,gBAAgB,OAAO,GAAG;AAChD,QAAI;AAIF,qBAAe,cAAc,eAAe,QAAQ,eAAe,CAAC;AAAA,IACtE,QAAQ;AAAA,IAER;AAAA,EACF;AACA,QAAM,iBAAiB,oBAAI,IAAoB;AAC/C,QAAM,gBAAgB,oBAAI,IAA2B;AACrD,QAAM,oBAAoBA,MAAK,KAAK,cAAc,cAAc;AAEhE,WAAS,YAAY,aAAqB,eAA8C;AACtF,UAAM,aAAa,cAAc,IAAI,WAAW;AAChD,QAAI,WAAY,QAAO;AAEvB,UAAM,cAAc,gBAAgB,aAAa,aAAa;AAC9D,kBAAc,IAAI,aAAa,WAAW;AAC1C,WAAO;AAAA,EACT;AAPS;AAST,iBAAe,gBACb,aACA,eACe;AACf,UAAM,kBAAkB,mBAAmB,eAAe,WAAW;AACrE,QAAI,CAAC,gBAAiB;AACtB,UAAM,cAAc,KAAK,MAAM,MAAM,GAAG,SAAS,iBAAiB,MAAM,CAAC;AACzE,UAAM,aAAaA,MAAK,QAAQ,eAAe;AAC/C,UAAM,YAAYA,MAAK,KAAK,mBAAmB,GAAG,YAAY,MAAM,GAAG,CAAC;AACxE,mBAAe,IAAI,aAAa,OAAO,YAAY,WAAW,GAAG,CAAC;AAElE,UAAM,GAAG,MAAMA,MAAK,QAAQ,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAC3D,UAAM,iBAAiB,cAAc,eAAe;AACpD,UAAM,eAAe;AAAA,MACnB,GAAG,YAAY;AAAA,MACf,GAAG,YAAY;AAAA,IACjB;AACA,UAAM,QAAQ,IAAI;AAAA,MAChB,GAAG,GAAG,YAAY,WAAW;AAAA,QAC3B,WAAW;AAAA,QACX,OAAO;AAAA,QACP,aAAa;AAAA;AAAA;AAAA,QAGb,MAAM,YAAY;AAAA,MACpB,CAAC;AAAA,MACD,GAAG,OAAO,KAAK,YAAY,EAAE,IAAI,CAAC,eAAe,YAAY,YAAY,cAAc,CAAC;AAAA,IAC1F,CAAC;AAAA,EACH;AA5Be;AA8Bf,QAAM,YAAY,SAAS,YAAY;AACvC,MAAI,CAAC,eAAe,IAAI,OAAO,GAAG;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,sBAAsBA,MAAK,KAAK,cAAc,cAAc;AAClE,QAAM,kBAAkB,KAAK,MAAM,MAAM,GAAG,SAAS,qBAAqB,MAAM,CAAC;AACjF,kBAAgB,eAAe;AAAA,IAC7B,GAAG,gBAAgB;AAAA,IACnB,GAAG,OAAO,YAAY,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC,CAAC;AAAA,EAChG;AACA,QAAM,GAAG,UAAU,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAChF,SAAO,KAAK,iDAAqC,eAAe,IAAI,YAAY;AAClF;AA9Ee;AAgFf,eAAe,yBACb,MACA,cACA,IACe;AACf,QAAM,iBAAiB,cAAcA,MAAK,KAAK,MAAM,cAAc,CAAC;AACpE,MAAI,iBAAiB;AACrB,MAAI,kBAAkB,mBAAmB,gBAAgB,YAAY;AAErE,MAAI,CAAC,iBAAiB;AACpB,QAAI;AACF,uBAAiB,cAAc,eAAe,QAAQ,eAAe,CAAC;AACtE,wBAAkB,mBAAmB,gBAAgB,YAAY;AAAA,IACnE,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,KAAK,MAAM,MAAM,GAAG,SAAS,iBAAiB,MAAM,CAAC;AACzE,QAAM,aAAaA,MAAK,QAAQ,eAAe;AAC/C,QAAM,YAAYA,MAAK,KAAK,cAAc,gBAAgB,WAAW,IAAI;AACzE,QAAM,GAAG,MAAMA,MAAK,QAAQ,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AAC3D,QAAM,GAAG,GAAG,YAAY,WAAW;AAAA,IACjC,WAAW;AAAA,IACX,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM,YAAY;AAAA,EACpB,CAAC;AAED,QAAM,sBAAsBA,MAAK,KAAK,cAAc,cAAc;AAClE,QAAM,kBAAkB,KAAK,MAAM,MAAM,GAAG,SAAS,qBAAqB,MAAM,CAAC;AACjF,kBAAgB,eAAe;AAAA,IAC7B,GAAG,gBAAgB;AAAA,IACnB,cAAc,OAAO,YAAY,WAAW,QAAQ;AAAA,EACtD;AACA,QAAM,GAAG,UAAU,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAChF,SAAO,KAAK,2DAA+C;AAC7D;AA3Ce;AA6Cf,SAAS,mBAAmB,eAA+B,aAAoC;AAC7F,aAAW,WAAW,CAAC,GAAG,WAAW,iBAAiB,GAAG,WAAW,UAAU,GAAG;AAC/E,QAAI;AACF,aAAO,cAAc,QAAQ,OAAO;AAAA,IACtC,QAAQ;AAAA,IAER;AAAA,EACF;AACA,SAAO;AACT;AATS;AAWT,eAAe,0BACb,MACA,cACA,IACA;AACA,QAAM,iBAAiB,cAAcA,MAAK,KAAK,MAAM,cAAc,CAAC;AAEpE,MAAI;AACJ,MAAI;AACF,sBAAkBA,MAAK,QAAQ,eAAe,QAAQ,2BAA2B,CAAC;AAAA,EACpF,QAAQ;AACN;AAAA,EACF;AAEA,QAAM,qBAAqBA,MAAK,KAAK,iBAAiB,MAAM,MAAM,WAAW,QAAQ;AAErF,MAAI;AACF,UAAM,GAAG,OAAO,kBAAkB;AAAA,EACpC,QAAQ;AACN;AAAA,EACF;AAEA,QAAM,oBAAoBA,MAAK,KAAK,cAAc,cAAc;AAChE,QAAM,uBAAuBA,MAAK,KAAK,mBAAmB,SAAS;AACnE,QAAM,qBAAqBA,MAAK,KAAK,mBAAmB,WAAW,QAAQ;AAC3E,QAAM,kBAAkBA,MAAK,KAAK,sBAAsB,QAAQ;AAEhE,QAAM,GAAG,MAAM,sBAAsB,EAAE,WAAW,KAAK,CAAC;AACxD,QAAM,GAAG,GAAG,iBAAiB,iBAAiB;AAAA,IAC5C,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AACD,QAAM,GAAG,GAAG,oBAAoB,oBAAoB;AAAA,IAClD,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AAED,QAAM,sBAAsBA,MAAK,KAAK,cAAc,cAAc;AAClE,QAAM,oBAAoBA,MAAK,KAAK,iBAAiB,cAAc;AACnE,QAAM,CAAC,wBAAwB,oBAAoB,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvE,GAAG,SAAS,qBAAqB,OAAO;AAAA,IACxC,GAAG,SAAS,mBAAmB,OAAO;AAAA,EACxC,CAAC;AACD,QAAM,kBAAkB,KAAK,MAAM,sBAAsB;AACzD,QAAM,gBAAgB,KAAK,MAAM,oBAAoB;AAErD,kBAAgB,eAAe;AAAA,IAC7B,GAAG,gBAAgB;AAAA,IACnB,kBAAkB,cAAc;AAAA,EAClC;AAEA,QAAM,GAAG,UAAU,qBAAqB,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAClF;AApDe;;;AF7jRf,eAAsB,MAAM,QAA4B,UAAwB,CAAC,GAAG;AAClF,SAAO,sBAAsB,MAAM,2BAA2B,QAAQ,OAAO,CAAC;AAChF;AAFsB;AAKtB,SAAS,0BAA0B,QAAiD;AAClF,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,YAAY,OAAO,OAAO;AAChC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBACE,cAAc,0BAA0B,OAAO,OAAO,QAAQ,QAAQ,OAAO;AAAA,EACjF;AACF;AAXS;AAaT,SAAS,oBACP,QACA,SACA,UACA;AACA,QAAM,OAAO,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,IAAI;AACxD,QAAM,SAAS,QAAQ,UAAU,OAAO,UAAU;AAClD,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,oBAAoB,OAAO,OAAO,cAAc,SAAS;AAC/D,QAAM,6BACJ,SAAS,oBACT,CAAC,sBACA,WAAW,SAAS,UAAU,YAAY,SAAS;AACtD,QAAM,eACJ,WAAW,OAAO,OAAO,SAAS,OAAO,OAAO,SAAS,yBAAyB,MAAM;AAC1F,QAAM,YAAY,6BACd,0BAA0B,cAAc,QAAQ,OAAO,IACvD,OAAO,OAAO;AAElB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,UAAU;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,wBAAwB,MAAM,SAAS;AAAA,EAC1D;AACF;AA5BS;AA8BT,eAAe,2BAA2B,aAAiC,SAAuB;AAChG,MAAI,SAAS;AACb,QAAM,iBAAiB,0BAA0B,MAAM;AACvD,MAAI;AACJ,QAAM,8BACJ,QAAQ,cAAc,QAClB,SACA,QAAQ,WAAW,CAAC,QAAQ,QAAQ,QAAQ,kBAAkB,uBAAuB,CAAC,CAAC,CAAC;AAE9F,QAAM,gBAAgB,IAAI,cAAc;AAAA,IACtC;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AACD,gBAAc,WAAW,OAAO,WAAW,CAAC,CAAC;AAC7C,MAAI;AAEJ,MAAI;AACF,UAAM,cAAc,gBAAgB,MAAM;AAK1C,aAAS,MAAM,cAAc,cAAc,UAAU,MAAM;AAC3D,QAAI,QAAQ,cAAc,SAAS,OAAO,QAAQ,KAAK,CAAC,WAAW,OAAO,MAAM,GAAG;AACjF,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,cAAU,oBAAoB,QAAQ,SAAS,cAAc;AAC7D,aAAS;AAAA,MACP,GAAG;AAAA,MACH,QAAQ,QAAQ;AAAA,MAChB,QAAQ;AAAA,QACN,GAAG,OAAO;AAAA,QACV,QAAQ,QAAQ;AAAA,QAChB,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ;AAAA,MACrB;AAAA,IACF;AACA,kBAAc,cAAc,EAAE,OAAO,CAAC;AACtC,UAAM,EAAE,MAAM,QAAQ,QAAQ,SAAS,gBAAgB,IAAI;AAE3D,WAAO,KAAK,uDAAgD,MAAM,KAAK;AAEvE,UAAM,cAAc,aAAa;AACjC,UAAM,cAAc,gBAAgB,gBAAgB;AAAA,MAClD;AAAA,MACA;AAAA,MACA,WAAW,QAAQ,cAAc;AAAA,MACjC;AAAA,MACA,WAAW;AAAA,IACb,CAAC;AAGD,WAAO,KAAK,mDAA4C;AACxD,UAAM,uBAAuB,+BACxB,MAAM,6BAA6B,CAAC,IACrC;AACJ,QAAI,sBAAsB,WAAW,WAAY,OAAM,qBAAqB;AAC5E,UAAM,iBAAiB,sBAAsB;AAC7C,UAAM,gCACJ,kBAAkB,gCAAgC,OAAO,IAAI;AAC/D,QAAI,gBAAgB,YAAY,cAAc,CAAC,+BAA+B;AAC5E,aAAO,KAAK,gFAAyE;AAAA,IACvF;AACA,UAAM,mBAAmB,gCACrB,eAAe,gBACd,MAAM,OAAO,MAAM,GAAG;AAC3B,0BAAsB,MAAM,0BAA0B,kBAAkB,QAAQ,IAAI;AACpF,UAAM,UAAU,cAAc,QAAQ,mBAAmB;AACzD,UAAM,QAAQ,WAAW;AAEzB,UAAM,eAAe,QAAQ,gBAAgB;AAC7C,UAAM,iBAAiB,QAAQ,kBAAkB;AAEjD,UAAM,gBAAgB,0BAA0B;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO;AAAA,MAChB,aAAa;AAAA,QACX,GAAI,OAAO,SAAS,WAAW,OAAO,QAAQ,QAAQ,CAAC,OAAO,QAAQ,KAAK,IAAI,CAAC;AAAA,QAChF,GAAG,4BAA4B,OAAO,IAAI;AAAA,MAC5C;AAAA,MACA,oBAAoB,OAAO;AAAA,MAC3B,qBAAqB,OAAO,SAAS;AAAA,MACrC,YAAY,OAAO;AAAA,IACrB,CAAC,EAAE,MAAM,CAAC,UAAmB;AAI3B,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,aAAO,KAAK,0DAA0D,OAAO,EAAE;AAAA,IACjF,CAAC;AAID,UAAM,kBAAkB,IAAI;AAAA,MAC1B,sBAAsB,MAAM;AAAA,MAC5B;AAAA,MACA;AAAA,QACE,kBAAkB;AAAA,QAClB,SAAS,OAAO;AAAA,QAChB,MAAM,QAAQ,eAAe;AAAA,QAC7B,eAAe,OAAO,OAAO;AAAA,QAC7B,UAAU,6BAA6B,OAAO,GAAG;AAAA,MACnD;AAAA,IACF;AACA,UAAM,CAAC,EAAE,YAAY,IAAI,MAAM,QAAQ,WAAW;AAAA,MAChD;AAAA,MACA,gBAAgB,eAAe;AAAA,IACjC,CAAC;AACD,QAAI,aAAa,WAAW,WAAY,OAAM,aAAa;AAG3D,QAAI,QAAQ,cAAc,OAAO;AAE/B,YAAM,eAAe,QAAQ,cAAc,iBAAiB,gBAAgB;AAAA,QAC1E;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,YAAM,EAAE,OAAO,gBAAgB,IAAI,MAAM,OAAO,MAAM;AAGtD,aAAO,KAAK,qCAA8B;AAC1C,YAAMI,aAAY,iBAAiB,QAAQ,MAAM,QAAQC,MAAK,KAAK,MAAM,SAAS,QAAQ,CAAC;AAG3F,aAAO,KAAK,kCAA2B;AACvC,YAAM,SAAS,iBAAiB,QAAQ,MAAM,QAAQA,MAAK,KAAK,MAAM,SAAS,QAAQ,CAAC;AAGxF,aAAO,KAAK,iDAA0C,MAAM,MAAM;AAClE,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,gBAAgB,UAAU;AAC9C,UAAM,cAAc,gBAAgB,eAAe;AAAA,MACjD;AAAA,MACA;AAAA,MACA,WAAW,QAAQ,cAAc;AAAA,MACjC;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AAKD,WAAO,QAAQ,iDAA4C,MAAM,GAAG;AACpE,WAAO,KAAK,+BAAwB,eAAe,EAAE;AAAA,EACvD,SAAS,OAAO;AACd,UAAM,EAAE,MAAM,QAAQ,SAAS,gBAAgB,IAC7C,WAAW,oBAAoB,QAAQ,SAAS,cAAc;AAChE,UAAM,cAAc,gBAAgB,WAAW;AAAA,MAC7C,OAAO;AAAA,MACP;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,cAAc,gBAAgB,eAAe;AAAA,MACjD;AAAA,MACA;AAAA,MACA,WAAW,QAAQ,cAAc;AAAA,MACjC;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,IACX,CAAC;AACD,WAAO,MAAM,wBAAmB,KAAK,EAAE;AACvC,UAAM;AAAA,EACR,UAAE;AACA,UAAM,qBAAqB,MAAM;AAAA,EACnC;AACF;AA5Le;AA8Lf,eAAe,0BACb,kBACA,QACA,MACwB;AACxB,QAAM,sBAAsB,MAAM,4BAA4B,OAAO,UAAU,MAAM;AAAA,IACnF,KAAK;AAAA,EACP,CAAC;AACD,QAAM,aAAa;AAAA,IACjB;AAAA,MACE;AAAA,MACA,SAAS;AAAA,MACT,MAAM;AAAA,MACN,KAAK;AAAA,QACH,SAAS;AAAA,UACP,SAAS,CAAC;AAAA,QACZ;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,GAAI;AAAA,QACJ,sBAAsB;AAAA,UACpB;AAAA,UACA,UAAU,OAAO;AAAA,UACjB,WAAW,OAAO;AAAA,QACpB,CAAC;AAAA,QACD,+BAA+B;AAAA,MACjC;AAAA,MACA,QAAQ;AAAA,QACN,gBAAgB;AAAA,QAChB,KAAK;AAAA,MACP;AAAA,MACA,SAAS;AAAA,QACP,OAAO,sBAAsB,MAAM,OAAO,MAAM;AAAA,QAChD,QAAQ,CAAC,GAAI,OAAO,SAAS,UAAU,CAAC,CAAE;AAAA,MAC5C;AAAA,MACA,cAAc;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,IACA,OAAO;AAAA,EACT;AAEA,SAAO,iBAAiB;AAAA,IACtB,GAAG;AAAA,IACH;AAAA,IACA,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,GAAI,OAAO,WAAW,YAAY,WAAW,WAAW,UAAU,CAAC;AAAA,MACnE,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,GAAG,WAAW;AAAA,MACd,gBAAgB;AAAA,MAChB,KAAK;AAAA;AAAA;AAAA,MAGL,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,GAAG,WAAW;AAAA,MACd,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AACH;AAlEe;AAuEf,eAAeD,aACb,WACA,QACA,MACA,QACA,WACA;AACA,QAAM,EAAE,4BAA4B,WAAW,IAAI,MAAM,OAAO,YAAS;AACzE,QAAM,EAAE,eAAAE,eAAc,IAAI,MAAM,OAAO,cAAW;AAElD,QAAM,gBAAgB,IAAIA,eAAc;AAAA,IACtC;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AACD,gBAAc,WAAW,OAAO,WAAW,CAAC,CAAC;AAE7C,QAAM,UAAU;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACb,OAAO,uBAAuB,QAAQ,MAAM,MAAM;AAAA,MACpD;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,2BAA2B;AAAA,MAC3B,WAAW,QAAQ,aAAa;AAAA,MAChC,+BAA+B;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AACH;AAjCe,OAAAF,cAAA;AAsCf,eAAe,SACb,WACA,QACA,MACA,QACA,WACA;AACA,QAAM,EAAE,4BAA4B,WAAW,IAAI,MAAM,OAAO,YAAS;AACzE,QAAM,EAAE,eAAAE,eAAc,IAAI,MAAM,OAAO,cAAW;AAElD,QAAM,gBAAgB,IAAIA,eAAc;AAAA,IACtC;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AACD,gBAAc,WAAW,OAAO,WAAW,CAAC,CAAC;AAE7C,QAAM,WAAW,uBAAuB,QAAQ,MAAM,MAAM;AAE5D,QAAM,UAAU;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACb,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,uBAAuB,KAAK,UAAU,OAAO,IAAI,OAAO;AAAA,MACxD,cAAc,KAAK,UAAU,OAAO,OAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAAA,MACrE,qBAAqB,KAAK,UAAU,OAAO,KAAK,UAAU,CAAC,CAAC;AAAA,IAC9D;AAAA,IACA,SAAS;AAAA,MACP,2BAA2B;AAAA,MAC3B,WAAW,QAAQ,aAAa;AAAA,MAChC,+BAA+B;AAAA,IACjC;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AACH;AAzCe;AA2Cf,SAAS,uBAAuB,QAA4B,MAAc,QAAwB;AAChG,QAAM,SAASD,MAAK,KAAK,MAAM,QAAQ,KAAK;AAC5C,aAAW,aAAa,mCAAmC,OAAO,QAAQ,GAAG;AAC3E,UAAM,YAAYA,MAAK,KAAK,QAAQ,OAAO,SAAS,EAAE;AACtD,QAAIE,YAAW,SAAS,EAAG,QAAO;AAAA,EACpC;AACA,SAAOF,MAAK,KAAK,QAAQ,UAAU;AACrC;AAPS;AAYT,eAAe,WACb,QACA,cACA,iBACA,gBACA,QACA,MACA,SACA,eACA;AACA,QAAM,CAAC,EAAE,kBAAkB,GAAG,EAAE,aAAa,OAAO,WAAW,CAAC,IAAI,MAAM,QAAQ,IAAI;AAAA,IACpF,OAAO,sBAAU;AAAA,IACjB,OAAO,OAAO;AAAA,EAChB,CAAC;AACD,MAAI,cAAc,MAAM;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,eAAe;AACjB,kBAAc,MAAM,cAAc,cAAc,oBAAoB,WAAW;AAAA,EACjF;AAyBA,QAAM,YAAY,wBAAwB,MAAM,OAAO,OAAO,SAAS;AACvE,QAAM,kBAAkBA,MAAK,KAAK,WAAW,QAAQ;AACrD,QAAM,kBAAkBA,MAAK,KAAK,WAAW,QAAQ;AACrD,QAAM,EAAE,OAAO,GAAG,IAAI,MAAM,OAAO,aAAa;AAChD,QAAM,MAAM,iBAAiB,EAAE,WAAW,KAAK,CAAC;AAChD,QAAM,MAAM,iBAAiB,EAAE,WAAW,KAAK,CAAC;AAIhD,QAAM,YAAYA,MAAK,KAAK,MAAM,SAAS,QAAQ;AACnD,MAAI;AAEF,UAAM,MAAM,iBAAiB,EAAE,WAAW,KAAK,CAAC;AAGhD,UAAM,GAAG,WAAW,iBAAiB,EAAE,WAAW,KAAK,CAAC;AACxD,WAAO,KAAK,oDAA6C;AAGzD,UAAM,eAAeA,MAAK,KAAK,iBAAiB,2BAA2B;AAC3E,UAAM,YAAYA,MAAK,KAAK,iBAAiB,QAAQ;AACrD,UAAM,iBAAiB,MAAM,OAAO,aAAa,EAAE;AAAA,MAAK,CAAC,OACvD,GACG,OAAO,YAAY,EACnB,KAAK,MAAM,IAAI,EACf,MAAM,MAAM,KAAK;AAAA,IACtB;AACA,UAAM,cAAc,MAAM,OAAO,aAAa,EAAE;AAAA,MAAK,CAAC,OACpD,GACG,OAAO,SAAS,EAChB,KAAK,MAAM,IAAI,EACf,MAAM,MAAM,KAAK;AAAA,IACtB;AAEA,QAAI,kBAAkB,aAAa;AACjC,aAAO,KAAK,2CAAsC;AAAA,IACpD,OAAO;AACL,aAAO,KAAK,iDAAuC;AAAA,IACrD;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,wCAAmC,KAAK,EAAE;AACvD,UAAM;AAAA,EACR;AAKA,QAAM,YAAYA,MAAK,KAAK,MAAM,SAAS,QAAQ;AACnD,QAAM,iBAAiBA,MAAK,KAAK,MAAM,SAAS,UAAU,UAAU,MAAM;AAC1E,MAAI;AACF,UAAM,MAAM,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAC/C,UAAM,GAAG,WAAW,gBAAgB,EAAE,WAAW,KAAK,CAAC;AACvD,WAAO,KAAK,wDAAiD;AAAA,EAC/D,SAAS,OAAO;AACd,WAAO,KAAK,+BAA+B,KAAK,EAAE;AAAA,EACpD;AAIA,QAAM,QAAQ,MAAM,YAAY,WAAW;AAQ3C,QAAM,eAAeA,MAAK,KAAK,MAAM,SAAS,UAAU,UAAU,kBAAkB;AACpF,MAAI;AACF,UAAM,EAAE,aAAa,IAAI,MAAM;AAAA;AAAA,MAA0B;AAAA;AACzD,iBAAa,kBAAkB;AAC/B,iBAAa,eAAe;AAC5B,iBAAa,iBAAiB;AAC9B,iBAAa,MAAM,OAAO,OAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE;AAG1D,UAAM,aAAqC,CAAC;AAC5C,eAAW,CAAC,SAAS,KAAK,KAAK,aAAa,UAAU,GAAG;AACvD,YAAM,cAAc,MAAM,WACvB,QAAQ,kBAAkB,EAAE,EAC5B,QAAQ,kBAAkB,KAAK;AAClC,iBAAW,OAAO,IAAI;AAAA,IACxB;AACA,iBAAa,aAAa;AAG1B,QAAI;AACF,YAAM,qBAAqBA,MAAK,KAAK,MAAM,SAAS,UAAU,2BAA2B;AACzF,YAAM,EAAE,SAAS,IAAI,MAAM,OAAO,aAAa;AAC/C,YAAM,kBAAkB,MAAM,SAAS,oBAAoB,OAAO;AAClE,mBAAa,iBAAiB,KAAK,MAAM,eAAe;AAAA,IAC1D,QAAQ;AACN,mBAAa,iBAAiB,CAAC;AAAA,IACjC;AAAA,EACF,SAAS,OAAO;AACd,WAAO,KAAK,gCAAgC,KAAK,EAAE;AAAA,EACrD;AAGA,QAAM,WAAW,KAAK;AAEtB,MAAI,eAAe;AACjB,UAAM,cAAc,gBAAgB,mBAAmB;AAAA,MACrD;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,wBAAwB,MAAM,OAAO,OAAO,SAAS;AAAA,IAClE,CAAC;AAAA,EACH;AACF;AA9Je;","names":["path","existsSync","path","path","path","path","path","path","clone","PluginManager","metadata","buildClient","path","PluginManager","existsSync"]}