@farm.js/core 0.1.0-beta.95 → 0.1.0-beta.97
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.
- package/dist/after.cjs +1 -1
- package/dist/after.mjs +1 -1
- package/dist/agent-runtime.d.mts +3 -2
- package/dist/agent-runtime.d.ts +3 -2
- package/dist/api/route-manager.cjs +43 -4
- package/dist/api/route-manager.d.mts +4 -3
- package/dist/api/route-manager.d.ts +4 -3
- package/dist/api/route-manager.mjs +7 -7
- package/dist/api/runtime.cjs +43 -4
- package/dist/api/runtime.d.mts +1 -1
- package/dist/api/runtime.d.ts +1 -1
- package/dist/api/runtime.mjs +5 -5
- package/dist/api.cjs +352 -109
- package/dist/api.d.mts +7 -6
- package/dist/api.d.ts +7 -6
- package/dist/api.mjs +19 -12
- package/dist/{app-CIIEvA4r.d.ts → app-CIOx3LvY.d.ts} +4 -4
- package/dist/{app-O4AEC1OH.d.mts → app-DBd6437H.d.mts} +4 -4
- package/dist/app-markdown.d.mts +4 -3
- package/dist/app-markdown.d.ts +4 -3
- package/dist/cache.cjs +42 -4
- package/dist/cache.d.mts +68 -1
- package/dist/cache.d.ts +68 -1
- package/dist/cache.mjs +3 -3
- package/dist/{chunk-AXVJCMVF.mjs → chunk-2HDOV47R.mjs} +3 -3
- package/dist/chunk-2HDOV47R.mjs.map +1 -0
- package/dist/{chunk-RBRLLZL5.mjs → chunk-34IAPZBG.mjs} +16 -3
- package/dist/chunk-34IAPZBG.mjs.map +1 -0
- package/dist/{chunk-VV24CC42.mjs → chunk-35NPLKQJ.mjs} +2 -2
- package/dist/{chunk-D7QH7MDU.mjs → chunk-3TWQERDE.mjs} +5 -4
- package/dist/chunk-3TWQERDE.mjs.map +1 -0
- package/dist/{chunk-RWYRFCLG.mjs → chunk-4X57GXQA.mjs} +2 -2
- package/dist/{chunk-KOTSX5JH.mjs → chunk-52BR7LTX.mjs} +30 -21
- package/dist/chunk-52BR7LTX.mjs.map +1 -0
- package/dist/{chunk-SALMKQXH.mjs → chunk-6EJHNHH4.mjs} +80 -27
- package/dist/chunk-6EJHNHH4.mjs.map +1 -0
- package/dist/{chunk-ZFNK77WN.mjs → chunk-6JNGOC37.mjs} +2 -2
- package/dist/{after.cjs.map → chunk-6JNGOC37.mjs.map} +1 -1
- package/dist/{chunk-MOW47IF5.mjs → chunk-6UYVU46O.mjs} +2 -2
- package/dist/{chunk-7MABZJIM.mjs → chunk-7PYVLJ4J.mjs} +1 -1
- package/dist/chunk-7PYVLJ4J.mjs.map +1 -0
- package/dist/{chunk-FLHLPB57.mjs → chunk-D7F7YZ7L.mjs} +93 -67
- package/dist/chunk-D7F7YZ7L.mjs.map +1 -0
- package/dist/chunk-DU3PKDVQ.mjs +35 -0
- package/dist/chunk-DU3PKDVQ.mjs.map +1 -0
- package/dist/{chunk-SCFX4UTD.mjs → chunk-EHTUKVSW.mjs} +1 -1
- package/dist/chunk-EHTUKVSW.mjs.map +1 -0
- package/dist/{chunk-KWCNQUH5.mjs → chunk-EPDIF432.mjs} +526 -50
- package/dist/chunk-EPDIF432.mjs.map +1 -0
- package/dist/{chunk-A3636IHN.mjs → chunk-FP5Q67FO.mjs} +167 -96
- package/dist/chunk-FP5Q67FO.mjs.map +1 -0
- package/dist/{chunk-HHZAOTQD.mjs → chunk-GJ7W6LNK.mjs} +7 -6
- package/dist/chunk-GJ7W6LNK.mjs.map +1 -0
- package/dist/{chunk-RLGUZ3HS.mjs → chunk-I3OOUWO5.mjs} +3 -3
- package/dist/{chunk-75CGAL6E.mjs → chunk-IZBX2TEU.mjs} +217 -105
- package/dist/chunk-IZBX2TEU.mjs.map +1 -0
- package/dist/{chunk-22VG4DFJ.mjs → chunk-J3MPQ4MQ.mjs} +2 -2
- package/dist/{chunk-22VG4DFJ.mjs.map → chunk-J3MPQ4MQ.mjs.map} +1 -1
- package/dist/{chunk-2LS3KKE7.mjs → chunk-JV7JUD7Q.mjs} +4 -4
- package/dist/{chunk-Q3OX763A.mjs → chunk-LXDASSTE.mjs} +2 -2
- package/dist/{chunk-ZRBCBOEX.mjs → chunk-N2FY2QZ7.mjs} +28 -3
- package/dist/chunk-N2FY2QZ7.mjs.map +1 -0
- package/dist/{chunk-MRVJCLYQ.mjs → chunk-PSQ7N4XP.mjs} +4 -2
- package/dist/chunk-PSQ7N4XP.mjs.map +1 -0
- package/dist/{chunk-HVG3HLQZ.mjs → chunk-Q7WGOOAI.mjs} +3 -3
- package/dist/{chunk-WTYAPO5I.mjs → chunk-RCNWMEBT.mjs} +3 -2
- package/dist/{chunk-WTYAPO5I.mjs.map → chunk-RCNWMEBT.mjs.map} +1 -1
- package/dist/{chunk-3INDBMUU.mjs → chunk-TGDIACZT.mjs} +2 -2
- package/dist/{chunk-WB75GIX2.mjs → chunk-TQTB33JS.mjs} +14 -3
- package/dist/chunk-TQTB33JS.mjs.map +1 -0
- package/dist/{chunk-MH27UH72.mjs → chunk-TT3E2JOF.mjs} +3 -3
- package/dist/{chunk-UWRGX3J3.mjs → chunk-UMUWR5XA.mjs} +2 -2
- package/dist/{chunk-XTLLHCWU.mjs → chunk-V4VRLVLW.mjs} +52 -31
- package/dist/chunk-V4VRLVLW.mjs.map +1 -0
- package/dist/{chunk-EXCGBERG.mjs → chunk-WD2EBM3I.mjs} +79 -17
- package/dist/chunk-WD2EBM3I.mjs.map +1 -0
- package/dist/{chunk-DLBUAJTK.mjs → chunk-WMJGA32P.mjs} +74 -5
- package/dist/chunk-WMJGA32P.mjs.map +1 -0
- package/dist/{chunk-TKQCJMY7.mjs → chunk-X4SFHKFH.mjs} +7 -4
- package/dist/{chunk-TKQCJMY7.mjs.map → chunk-X4SFHKFH.mjs.map} +1 -1
- package/dist/{chunk-Q7GPJZCO.mjs → chunk-YIBV77KZ.mjs} +26 -7
- package/dist/chunk-YIBV77KZ.mjs.map +1 -0
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-mcMC334J.d.mts → client-DWoLZ3QU.d.mts} +52 -5
- package/dist/{client-d5ONQ-Pd.d.ts → client-DuQuQC1h.d.ts} +52 -5
- package/dist/client-cache-BMxuFqwH.d.ts +18 -0
- package/dist/client-cache-CCK-fCe0.d.mts +18 -0
- package/dist/{client-plugins-BvClItiL.d.mts → client-plugins-B6-07YmP.d.mts} +52 -99
- package/dist/{client-plugins-B9Sq-iMg.d.ts → client-plugins-By6MVUX-.d.ts} +52 -99
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.d.mts +3 -2
- package/dist/client-plugins.d.ts +3 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +1046 -211
- package/dist/client.d.mts +136 -18
- package/dist/client.d.ts +136 -18
- package/dist/client.mjs +32 -15
- package/dist/config.d.mts +3 -2
- package/dist/config.d.ts +3 -2
- package/dist/{devtools-S52RRRMN.mjs → devtools-XWZX6CCL.mjs} +5 -5
- package/dist/{devtools-client-3XRTBND5.mjs → devtools-client-Z7QQA3Q2.mjs} +56 -17
- package/dist/devtools-client-Z7QQA3Q2.mjs.map +1 -0
- package/dist/{devtools-ui-NJKFORTG.mjs → devtools-ui-2HG5M4EL.mjs} +3 -1
- package/dist/devtools-ui-2HG5M4EL.mjs.map +1 -0
- package/dist/docs.cjs +24 -5
- package/dist/docs.mjs +5 -5
- package/dist/i18n/server.cjs +13 -2
- package/dist/i18n/server.d.mts +2 -2
- package/dist/i18n/server.d.ts +2 -2
- package/dist/i18n/server.mjs +1 -1
- package/dist/index.cjs +1928 -894
- package/dist/index.d.mts +139 -21
- package/dist/index.d.ts +139 -21
- package/dist/index.mjs +57 -34
- package/dist/index.mjs.map +1 -1
- package/dist/integration-api-BT024nuJ.d.mts +97 -0
- package/dist/integration-api-BT024nuJ.d.ts +97 -0
- package/dist/integrations.d.mts +3 -2
- package/dist/integrations.d.ts +3 -2
- package/dist/internal/build-runtime.cjs +764 -547
- package/dist/internal/build-runtime.d.mts +5 -4
- package/dist/internal/build-runtime.d.ts +5 -4
- package/dist/internal/build-runtime.mjs +16 -16
- package/dist/internal/client-runtime.cjs +1 -1
- package/dist/internal/client-runtime.mjs +2 -2
- package/dist/internal/config-runtime.cjs +4 -1
- package/dist/internal/config-runtime.d.mts +4 -3
- package/dist/internal/config-runtime.d.ts +4 -3
- package/dist/internal/config-runtime.mjs +4 -4
- package/dist/internal/product-telemetry-runtime.cjs +1 -1
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +29 -3
- package/dist/internal/production-runtime.d.mts +8 -7
- package/dist/internal/production-runtime.d.ts +8 -7
- package/dist/internal/production-runtime.mjs +5 -5
- package/dist/{metadata-route-yV4U6X8h.d.ts → metadata-route-8_V3UonT.d.ts} +1 -1
- package/dist/{metadata-route-p4K1l92V.d.mts → metadata-route-CWP_HjGU.d.mts} +1 -1
- package/dist/middleware.cjs +28 -2
- package/dist/middleware.d.mts +5 -4
- package/dist/middleware.d.ts +5 -4
- package/dist/middleware.mjs +4 -4
- package/dist/navigation.cjs +3 -1
- package/dist/navigation.mjs +3 -3
- package/dist/observability.cjs +27 -2
- package/dist/observability.mjs +1 -1
- package/dist/plugin.cjs +528 -349
- package/dist/plugin.d.mts +3 -2
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.mjs +13 -13
- package/dist/{production-runtime-IkB0Qj4i.d.mts → production-runtime-BGRH1dKG.d.mts} +1 -1
- package/dist/{production-runtime-0JTch4_d.d.ts → production-runtime-CdmzsDax.d.ts} +1 -1
- package/dist/query/client.cjs +68 -29
- package/dist/query/client.mjs +69 -30
- package/dist/query/client.mjs.map +1 -1
- package/dist/{render-plan-Dc8CjNI7.d.ts → render-plan-0GeHiGVZ.d.ts} +1 -1
- package/dist/{render-plan-CU31j-Jk.d.mts → render-plan-DLxJYAA5.d.mts} +1 -1
- package/dist/renderer-client.cjs +169 -26
- package/dist/renderer-client.d.mts +7 -6
- package/dist/renderer-client.d.ts +7 -6
- package/dist/renderer-client.mjs +16 -19
- package/dist/renderer-client.mjs.map +1 -1
- package/dist/{request-BXa1KY8i.d.mts → request-BCNXSXLh.d.mts} +1 -1
- package/dist/{request-CUUBujZt.d.ts → request-BstWbZ6O.d.ts} +1 -1
- package/dist/request.d.mts +4 -3
- package/dist/request.d.ts +4 -3
- package/dist/{route-Y8lfz1wF.d.ts → route-4pd-EVtw.d.ts} +45 -50
- package/dist/{route-Cq3aObmj.d.mts → route-CvEr4Uc9.d.mts} +45 -50
- package/dist/routes.cjs +27 -2
- package/dist/routes.d.mts +3 -2
- package/dist/routes.d.ts +3 -2
- package/dist/routes.mjs +4 -4
- package/dist/{runtime-j1S3sDTh.d.ts → runtime-BgDQzBiu.d.ts} +1 -0
- package/dist/{runtime-DDwvDtS4.d.mts → runtime-CV2UCV-5.d.mts} +1 -0
- package/dist/server-action-security.mjs +2 -2
- package/dist/server-fn-client.cjs +102 -26
- package/dist/server-fn-client.d.mts +6 -0
- package/dist/server-fn-client.d.ts +6 -0
- package/dist/server-fn-client.mjs +2 -1
- package/dist/server-fn.cjs +42 -4
- package/dist/server-fn.mjs +5 -5
- package/dist/server-plugins.d.mts +4 -3
- package/dist/server-plugins.d.ts +4 -3
- package/dist/server-query-client.cjs +195 -34
- package/dist/server-query-client.d.mts +3 -3
- package/dist/server-query-client.d.ts +3 -3
- package/dist/server-query-client.mjs +7 -7
- package/dist/{server-query-runtime-3zAj77yv.d.ts → server-query-runtime-DXRNhX_3.d.ts} +2 -0
- package/dist/{server-query-runtime-B50KAcj5.d.mts → server-query-runtime-aP52iuL5.d.mts} +2 -0
- package/dist/server-query.cjs +44 -5
- package/dist/server-query.d.mts +4 -0
- package/dist/server-query.d.ts +4 -0
- package/dist/server-query.mjs +7 -7
- package/dist/server.cjs +553 -370
- package/dist/server.d.mts +11 -10
- package/dist/server.d.ts +11 -10
- package/dist/server.mjs +17 -17
- package/dist/{spa-router-CyLkwst6.d.mts → spa-router-BeyAVSc6.d.mts} +1 -1
- package/dist/{spa-router-BkqGXaV_.d.ts → spa-router-COgu4txb.d.ts} +1 -1
- package/dist/testing.cjs +27 -2
- package/dist/testing.d.mts +3 -2
- package/dist/testing.d.ts +3 -2
- package/dist/testing.mjs +9 -9
- package/dist/{utils-NKR6SoNv.d.mts → utils-DL2VwDQl.d.mts} +1 -1
- package/dist/{utils-B2OHrb9F.d.ts → utils-DkU2c_1B.d.ts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +536 -353
- package/dist/vite.d.mts +3 -2
- package/dist/vite.d.ts +3 -2
- package/dist/vite.mjs +17 -13
- package/package.json +17 -17
- package/types/client.d.ts +115 -10
- package/dist/agent-runtime.cjs.map +0 -1
- package/dist/api/route-manager.cjs.map +0 -1
- package/dist/api/runtime.cjs.map +0 -1
- package/dist/api.cjs.map +0 -1
- package/dist/app-markdown.cjs.map +0 -1
- package/dist/cache.cjs.map +0 -1
- package/dist/chunk-75CGAL6E.mjs.map +0 -1
- package/dist/chunk-7MABZJIM.mjs.map +0 -1
- package/dist/chunk-A3636IHN.mjs.map +0 -1
- package/dist/chunk-AXVJCMVF.mjs.map +0 -1
- package/dist/chunk-D7QH7MDU.mjs.map +0 -1
- package/dist/chunk-DLBUAJTK.mjs.map +0 -1
- package/dist/chunk-EXCGBERG.mjs.map +0 -1
- package/dist/chunk-FLHLPB57.mjs.map +0 -1
- package/dist/chunk-HHZAOTQD.mjs.map +0 -1
- package/dist/chunk-KOTSX5JH.mjs.map +0 -1
- package/dist/chunk-KWCNQUH5.mjs.map +0 -1
- package/dist/chunk-MRVJCLYQ.mjs.map +0 -1
- package/dist/chunk-Q7GPJZCO.mjs.map +0 -1
- package/dist/chunk-RBRLLZL5.mjs.map +0 -1
- package/dist/chunk-SALMKQXH.mjs.map +0 -1
- package/dist/chunk-SCFX4UTD.mjs.map +0 -1
- package/dist/chunk-WB75GIX2.mjs.map +0 -1
- package/dist/chunk-XTLLHCWU.mjs.map +0 -1
- package/dist/chunk-ZFNK77WN.mjs.map +0 -1
- package/dist/chunk-ZRBCBOEX.mjs.map +0 -1
- package/dist/client/lifecycle.cjs.map +0 -1
- package/dist/client-cache-CopR_MaI.d.mts +0 -6
- package/dist/client-cache-Djy_TlE8.d.ts +0 -6
- package/dist/client-plugins.cjs.map +0 -1
- package/dist/client.cjs.map +0 -1
- package/dist/config.cjs.map +0 -1
- package/dist/cron.cjs.map +0 -1
- package/dist/deferred.cjs.map +0 -1
- package/dist/deployment.cjs.map +0 -1
- package/dist/devtools-client-3XRTBND5.mjs.map +0 -1
- package/dist/devtools-ui-NJKFORTG.mjs.map +0 -1
- package/dist/docs.cjs.map +0 -1
- package/dist/env-types.cjs.map +0 -1
- package/dist/env.cjs.map +0 -1
- package/dist/environment/vite.cjs.map +0 -1
- package/dist/environment.cjs.map +0 -1
- package/dist/font.cjs.map +0 -1
- package/dist/headers.cjs.map +0 -1
- package/dist/i18n/client.cjs.map +0 -1
- package/dist/i18n/index.cjs.map +0 -1
- package/dist/i18n/server.cjs.map +0 -1
- package/dist/image/server.cjs.map +0 -1
- package/dist/image/sharp.cjs.map +0 -1
- package/dist/image.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/instrumentation.cjs.map +0 -1
- package/dist/integrations.cjs.map +0 -1
- package/dist/internal/build-runtime.cjs.map +0 -1
- package/dist/internal/client-runtime.cjs.map +0 -1
- package/dist/internal/config-runtime.cjs.map +0 -1
- package/dist/internal/isolated-boundary.cjs.map +0 -1
- package/dist/internal/metadata-image-runtime.cjs.map +0 -1
- package/dist/internal/product-telemetry-runtime.cjs.map +0 -1
- package/dist/internal/production-node-env.cjs.map +0 -1
- package/dist/internal/production-runtime.cjs.map +0 -1
- package/dist/markdown.cjs.map +0 -1
- package/dist/middleware.cjs.map +0 -1
- package/dist/navigation.cjs.map +0 -1
- package/dist/observability.cjs.map +0 -1
- package/dist/plugin.cjs.map +0 -1
- package/dist/query/client.cjs.map +0 -1
- package/dist/query/index.cjs.map +0 -1
- package/dist/query/parsers.cjs.map +0 -1
- package/dist/query/server.cjs.map +0 -1
- package/dist/renderer/react/client.cjs.map +0 -1
- package/dist/renderer/react/server.cjs.map +0 -1
- package/dist/renderer/react/vite.cjs.map +0 -1
- package/dist/renderer-client.cjs.map +0 -1
- package/dist/renderer.cjs.map +0 -1
- package/dist/request.cjs.map +0 -1
- package/dist/router.cjs.map +0 -1
- package/dist/routes.cjs.map +0 -1
- package/dist/server-action-security.cjs.map +0 -1
- package/dist/server-fn-client.cjs.map +0 -1
- package/dist/server-fn.cjs.map +0 -1
- package/dist/server-plugins.cjs.map +0 -1
- package/dist/server-query-client.cjs.map +0 -1
- package/dist/server-query.cjs.map +0 -1
- package/dist/server.cjs.map +0 -1
- package/dist/storage.cjs.map +0 -1
- package/dist/testing.cjs.map +0 -1
- package/dist/theme/client.cjs.map +0 -1
- package/dist/theme/index.cjs.map +0 -1
- package/dist/theme/runtime.cjs.map +0 -1
- package/dist/theme/server.cjs.map +0 -1
- package/dist/version.cjs.map +0 -1
- package/dist/vite.cjs.map +0 -1
- package/dist/workflows.cjs.map +0 -1
- /package/dist/{chunk-VV24CC42.mjs.map → chunk-35NPLKQJ.mjs.map} +0 -0
- /package/dist/{chunk-RWYRFCLG.mjs.map → chunk-4X57GXQA.mjs.map} +0 -0
- /package/dist/{chunk-MOW47IF5.mjs.map → chunk-6UYVU46O.mjs.map} +0 -0
- /package/dist/{chunk-RLGUZ3HS.mjs.map → chunk-I3OOUWO5.mjs.map} +0 -0
- /package/dist/{chunk-2LS3KKE7.mjs.map → chunk-JV7JUD7Q.mjs.map} +0 -0
- /package/dist/{chunk-Q3OX763A.mjs.map → chunk-LXDASSTE.mjs.map} +0 -0
- /package/dist/{chunk-HVG3HLQZ.mjs.map → chunk-Q7WGOOAI.mjs.map} +0 -0
- /package/dist/{chunk-3INDBMUU.mjs.map → chunk-TGDIACZT.mjs.map} +0 -0
- /package/dist/{chunk-MH27UH72.mjs.map → chunk-TT3E2JOF.mjs.map} +0 -0
- /package/dist/{chunk-UWRGX3J3.mjs.map → chunk-UMUWR5XA.mjs.map} +0 -0
- /package/dist/{devtools-S52RRRMN.mjs.map → devtools-XWZX6CCL.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ssg.ts","../src/routing/route-manager.ts","../src/utils/client-component.ts","../src/island.ts","../src/navigation/render-plan.ts","../src/static-metadata-image.ts","../src/routing/route-slots.ts","../src/server/renderer.ts","../src/server/dev-styles.ts","../src/server/full-document.ts","../src/not-found.ts","../src/font-vite.ts","../src/components/not-found-styles.ts","../src/server/error-diagnostics.ts","../src/app.ts","../src/default-styles.ts","../src/plugin.ts","../src/client-plugin-build.ts","../src/client-cache-persistence-build.ts","../src/type-artifacts.ts","../src/routing/generate-route-types.ts","../src/image-types.ts","../src/content-types.ts","../src/i18n/type-generator.ts","../src/vite.ts","../src/dev-static.ts","../src/server-query-boundary.ts","../src/image-vite.ts","../src/server/vite-config.ts","../src/theme/vite.ts","../src/integration-provider-build.ts","../src/navigation/page-data-error.ts","../src/openapi/dev-status.ts"],"sourcesContent":["/**\n * Farm.js SSG (Static Site Generation) Module\n *\n * Handles collection and pre-rendering of SSG pages at build time.\n *\n * SSR is the default - pages render on each request\n * SSG is opt-in via `export const ssg = true`, Next-compatible route\n * config exports, or a top-of-file rendering directive.\n *\n * @example\n * ```tsx\n * // SSG Page\n * export const ssg = true;\n * export default function AboutPage() {\n * return <h1>About</h1>;\n * }\n *\n * // SSG with ISR\n * export const ssg = true;\n * export const revalidate = 60;\n * export default async function ProductsPage() {\n * const products = await fetchProducts();\n * return <ProductList products={products} />;\n * }\n *\n * // Dynamic SSG\n * export const ssg = true;\n * export async function getStaticPaths() {\n * const posts = await fetchPosts();\n * return posts.map(post => ({ slug: post.slug }));\n * }\n * export default async function BlogPost({ params }) {\n * return <article>{params.slug}</article>;\n * }\n *\n * // Next-compatible route config\n * export const dynamic = \"force-static\";\n * export const revalidate = 60;\n *\n * // PPR/static-shell route\n * export const experimental_ppr = true;\n * export const revalidate = 60;\n *\n * // Directive config\n * \"use ssg; 60\";\n * export default function DocsPage() {\n * return <h1>Docs</h1>;\n * }\n * ```\n */\n\nimport { readFile } from \"fs/promises\";\nimport type {\n RouteModule,\n SSGPage,\n SSGCollectionResult,\n StaticPathParams,\n StaticPathPrimitive,\n} from \"./types\";\n\ninterface RouteEntry {\n path: string;\n filePath: string;\n isDynamic: boolean;\n pattern: string;\n}\n\nexport type RouteRenderingDynamic = NonNullable<RouteModule[\"dynamic\"]>;\n\nexport interface RouteRenderingConfig {\n ssg: boolean;\n ppr: boolean;\n revalidate?: number;\n dynamic?: RouteRenderingDynamic;\n directive?: string;\n}\n\nexport interface RouteRenderingOptions {\n /**\n * Whether `experimental.ppr` is enabled in the app config. Route-level PPR\n * opt-ins (`ppr`, `experimental_ppr`, `\"use ppr\"`) are inert without it.\n */\n experimentalPPR?: boolean;\n}\n\nexport interface StaticRouteCandidateAnalysis {\n candidate: boolean;\n blockers: string[];\n}\n\ninterface DirectiveRenderingConfig {\n ssg: boolean;\n ppr: boolean;\n revalidate?: number;\n dynamic?: RouteRenderingDynamic;\n directive: string;\n}\n\nconst OPTIONAL_CATCH_ALL_SEGMENT = /^\\[\\[\\.\\.\\.([^\\]]+)\\]\\]$/;\nconst REQUIRED_CATCH_ALL_SEGMENT = /^\\[\\.\\.\\.([^\\]]+)\\]$/;\nconst REQUIRED_DYNAMIC_SEGMENT = /^\\[([^\\]]+)\\]$/;\n\nconst REQUEST_API_LABELS = new Map<string, string>([\n [\"cookies\", \"request cookies\"],\n [\"headers\", \"request headers\"],\n [\"getCurrentRequest\", \"the current Request\"],\n [\"useSearchParams\", \"URL search parameters\"],\n [\"auth\", \"request authentication\"],\n [\"getServerSession\", \"request authentication\"],\n [\"getSession\", \"request authentication\"],\n [\"currentUser\", \"request authentication\"],\n]);\n\nconst ROUTE_PROP_LABELS = new Map<string, string>([\n [\"searchParams\", \"URL search parameters\"],\n [\"middleware\", \"middleware request data\"],\n [\"middlewareData\", \"middleware request data\"],\n [\"context\", \"request context\"],\n]);\n\n/**\n * Resolve route rendering from Farm exports, Next-compatible exports, and\n * top-of-file directives such as `\"use ssg\";` or `\"use ssg; 60\";`.\n */\nfunction resolveConfiguredRouteRenderingConfig(\n mod: RouteModule | null | undefined,\n source?: string,\n options?: RouteRenderingOptions,\n): RouteRenderingConfig {\n const pprEnabled = options?.experimentalPPR === true;\n const directiveConfig = parseRouteRenderingDirective(source);\n let ssg = directiveConfig?.ssg ?? false;\n let requestedPPR = directiveConfig?.ppr ?? false;\n let revalidate = directiveConfig?.revalidate;\n const moduleDynamic = normalizeDynamicMode(mod?.dynamic);\n const dynamic = moduleDynamic ?? directiveConfig?.dynamic;\n const hasExplicitSsg = typeof mod?.ssg === \"boolean\";\n const hasExplicitPPR =\n typeof mod?.ppr === \"boolean\" || typeof mod?.experimental_ppr === \"boolean\";\n\n if (hasExplicitSsg) {\n ssg = mod!.ssg === true;\n }\n\n if (hasExplicitPPR) {\n requestedPPR = mod?.ppr === true || mod?.experimental_ppr === true;\n }\n\n if (typeof mod?.revalidate === \"number\") {\n if (mod.revalidate > 0) {\n revalidate = mod.revalidate;\n // A PPR opt-in keeps the route dynamic even while experimental.ppr is\n // off: the page expects Suspense holes, so falling back to ISR would\n // bake request-time content into a shared static artifact.\n if (!hasExplicitSsg && !requestedPPR) {\n ssg = true;\n }\n } else {\n revalidate = undefined;\n if (!hasExplicitSsg) {\n ssg = false;\n }\n }\n } else if (mod?.revalidate === false) {\n revalidate = undefined;\n }\n\n if (moduleDynamic === \"force-static\" || moduleDynamic === \"error\") {\n ssg = true;\n requestedPPR = false;\n } else if (moduleDynamic === \"force-dynamic\") {\n ssg = false;\n requestedPPR = false;\n revalidate = undefined;\n }\n\n const ppr = pprEnabled && !ssg && requestedPPR;\n\n return {\n ssg,\n ppr,\n revalidate: ssg || ppr ? revalidate : undefined,\n dynamic,\n directive: directiveConfig?.directive,\n };\n}\n\n/**\n * Resolve the effective rendering mode. Direct request reads make an explicitly\n * static route dynamic so request-specific HTML cannot enter a shared artifact.\n */\nexport function resolveRouteRenderingConfig(\n mod: RouteModule | null | undefined,\n source?: string,\n options?: RouteRenderingOptions,\n): RouteRenderingConfig {\n const rendering = resolveConfiguredRouteRenderingConfig(mod, source, options);\n if (!rendering.ssg || !source) {\n return rendering;\n }\n\n const requestBlockers = findRequestBoundSourceBlockers(source);\n if (requestBlockers.length === 0) {\n return rendering;\n }\n\n return {\n ...rendering,\n ssg: false,\n revalidate: undefined,\n };\n}\n\nexport async function resolveRouteRenderingConfigFromFile(\n mod: RouteModule | null | undefined,\n filePath: string,\n options?: RouteRenderingOptions,\n): Promise<RouteRenderingConfig> {\n const source = await readFile(filePath, \"utf8\").catch(() => undefined);\n return resolveRouteRenderingConfig(mod, source, options);\n}\n\n/**\n * Conservatively identify a route that may be safe to pre-render.\n *\n * This intentionally produces a suggestion rather than changing rendering:\n * request-bound work can live in a transitive import, which source inspection\n * of the route module cannot prove safe. Explicit route config always wins.\n */\nexport function analyzeStaticRouteCandidate(\n mod: RouteModule | null | undefined,\n source: string | undefined,\n options: { isDynamic?: boolean } = {},\n): StaticRouteCandidateAnalysis {\n const blockers: string[] = [];\n\n if (!source) {\n blockers.push(\"route source is unavailable\");\n }\n\n if (options.isDynamic) {\n blockers.push(\"the route has dynamic path segments\");\n }\n\n if (hasExplicitRenderingConfig(mod, source)) {\n blockers.push(\"the route already has explicit rendering config\");\n }\n\n if (source) {\n blockers.push(...findRequestBoundSourceBlockers(source));\n }\n\n return {\n candidate: blockers.length === 0,\n blockers,\n };\n}\n\nfunction findRequestBoundSourceBlockers(source: string): string[] {\n const blockers = new Set<string>();\n const code = stripCommentsAndLiteralContents(source);\n\n const sourceWithoutComments = stripComments(source);\n for (const binding of readRequestApiImportBindings(sourceWithoutComments)) {\n if (new RegExp(`\\\\b${escapeRegExp(binding.local)}\\\\s*(?:\\\\?\\\\.\\\\s*)?\\\\(`).test(code)) {\n blockers.add(`the route reads ${binding.label}`);\n }\n }\n\n for (const namespace of readNamespaceImportBindings(sourceWithoutComments)) {\n for (const [name, label] of REQUEST_API_LABELS) {\n if (\n new RegExp(\n `\\\\b${escapeRegExp(namespace)}\\\\s*(?:\\\\?\\\\.\\\\s*|\\\\.\\\\s*)${name}\\\\s*(?:\\\\?\\\\.\\\\s*)?\\\\(`,\n ).test(code)\n ) {\n blockers.add(`the route reads ${label}`);\n }\n }\n }\n\n const params = readDefaultRouteParameters(code);\n if (params) {\n for (const [name, label] of ROUTE_PROP_LABELS) {\n if (new RegExp(`\\\\b${name}\\\\b`).test(params)) {\n blockers.add(`the route reads ${label}`);\n }\n }\n\n const propsName = params.match(/^\\s*([A-Za-z_$][\\w$]*)\\s*(?::|,|$)/)?.[1];\n if (propsName) {\n for (const [name, label] of ROUTE_PROP_LABELS) {\n if (new RegExp(`\\\\b${escapeRegExp(propsName)}\\\\s*\\\\.\\\\s*${name}\\\\b`).test(code)) {\n blockers.add(`the route reads ${label}`);\n }\n if (\n new RegExp(`\\\\{[^}]*\\\\b${name}\\\\b[^}]*\\\\}\\\\s*=\\\\s*${escapeRegExp(propsName)}\\\\b`).test(\n code,\n )\n ) {\n blockers.add(`the route reads ${label}`);\n }\n }\n }\n }\n\n return [...blockers];\n}\n\nfunction readRequestApiImportBindings(source: string): Array<{ local: string; label: string }> {\n const bindings: Array<{ local: string; label: string }> = [];\n for (const clause of readStaticImportClauses(source)) {\n const namedGroup = clause.match(/\\{([\\s\\S]*?)\\}/)?.[1];\n for (const rawSpecifier of (namedGroup ?? \"\").split(\",\")) {\n const specifier = rawSpecifier.trim().replace(/^type\\s+/, \"\");\n const imported = specifier.match(/^([A-Za-z_$][\\w$]*)(?:\\s+as\\s+([A-Za-z_$][\\w$]*))?$/);\n if (!imported?.[1]) continue;\n const label = REQUEST_API_LABELS.get(imported[1]);\n if (label) bindings.push({ local: imported[2] ?? imported[1], label });\n }\n\n const local = clause.match(/^\\s*([A-Za-z_$][\\w$]*)\\s*(?:,|$)/)?.[1];\n if (local) {\n const label = REQUEST_API_LABELS.get(local);\n if (label) bindings.push({ local, label });\n }\n }\n\n return bindings;\n}\n\nfunction readNamespaceImportBindings(source: string): string[] {\n return readStaticImportClauses(source)\n .map((clause) => clause.match(/\\*\\s*as\\s*([A-Za-z_$][\\w$]*)/)?.[1])\n .filter((binding): binding is string => Boolean(binding));\n}\n\nfunction readStaticImportClauses(source: string): string[] {\n return [...source.matchAll(/\\bimport\\s+(?!\\()([\\s\\S]*?)\\s+from\\s*[\"'][^\"']+[\"']/g)]\n .map((match) => match[1])\n .filter((clause): clause is string => Boolean(clause));\n}\n\nfunction readDefaultRouteParameters(code: string): string | undefined {\n const inlineParams =\n code.match(/\\bexport\\s+default\\s+(?:async\\s+)?function\\b[^(]*\\(([^)]*)\\)/)?.[1] ??\n code.match(/\\bexport\\s+default\\s+(?:async\\s+)?\\(([^)]*)\\)\\s*=>/)?.[1];\n if (inlineParams !== undefined) return inlineParams;\n\n const binding =\n code.match(/\\bexport\\s+default\\s+([A-Za-z_$][\\w$]*)\\s*;?/)?.[1] ??\n code.match(/\\bexport\\s*\\{\\s*([A-Za-z_$][\\w$]*)\\s+as\\s+default\\s*\\}/)?.[1];\n if (!binding) return undefined;\n const escapedBinding = escapeRegExp(binding);\n\n return (\n code.match(new RegExp(`\\\\bfunction\\\\s+${escapedBinding}\\\\s*\\\\(([^)]*)\\\\)`))?.[1] ??\n code.match(\n new RegExp(\n `\\\\b(?:const|let|var)\\\\s+${escapedBinding}\\\\s*=\\\\s*(?:async\\\\s+)?\\\\(([^)]*)\\\\)\\\\s*=>`,\n ),\n )?.[1] ??\n code.match(\n new RegExp(`\\\\b(?:const|let|var)\\\\s+${escapedBinding}\\\\s*=\\\\s*function\\\\s*\\\\(([^)]*)\\\\)`),\n )?.[1]\n );\n}\n\nfunction stripCommentsAndLiteralContents(source: string): string {\n return sanitizeSource(source, true);\n}\n\nfunction stripComments(source: string): string {\n return sanitizeSource(source, false);\n}\n\nfunction sanitizeSource(source: string, maskLiterals: boolean): string {\n const output = [...source];\n const mask = (index: number) => {\n if (output[index] !== \"\\n\" && output[index] !== \"\\r\") output[index] = \" \";\n };\n\n const scanQuoted = (start: number, quote: \"'\" | '\"'): number => {\n let index = start;\n if (maskLiterals) mask(index);\n index += 1;\n while (index < source.length) {\n if (source[index] === \"\\\\\") {\n if (maskLiterals) mask(index);\n if (index + 1 < source.length && maskLiterals) mask(index + 1);\n index += 2;\n continue;\n }\n const character = source[index];\n if (maskLiterals) mask(index);\n index += 1;\n if (character === quote) break;\n }\n return index;\n };\n\n const scanCode = (start: number, stopAtTemplateBrace: boolean): number => {\n let index = start;\n let braceDepth = 0;\n while (index < source.length) {\n const character = source[index];\n const next = source[index + 1];\n if (character === \"/\" && next === \"/\") {\n while (index < source.length && source[index] !== \"\\n\" && source[index] !== \"\\r\") {\n mask(index++);\n }\n continue;\n }\n if (character === \"/\" && next === \"*\") {\n mask(index++);\n mask(index++);\n while (index < source.length) {\n const closesComment = source[index] === \"*\" && source[index + 1] === \"/\";\n mask(index++);\n if (closesComment) {\n mask(index++);\n break;\n }\n }\n continue;\n }\n if (character === \"'\" || character === '\"') {\n index = scanQuoted(index, character);\n continue;\n }\n if (character === \"`\") {\n if (maskLiterals) mask(index);\n index += 1;\n while (index < source.length) {\n if (source[index] === \"\\\\\") {\n if (maskLiterals) mask(index);\n if (index + 1 < source.length && maskLiterals) mask(index + 1);\n index += 2;\n } else if (source[index] === \"`\") {\n if (maskLiterals) mask(index);\n index += 1;\n break;\n } else if (source[index] === \"$\" && source[index + 1] === \"{\") {\n if (maskLiterals) {\n mask(index);\n mask(index + 1);\n }\n index = scanCode(index + 2, true);\n } else {\n if (maskLiterals) mask(index);\n index += 1;\n }\n }\n continue;\n }\n if (character === \"{\") {\n braceDepth += 1;\n } else if (character === \"}\") {\n if (stopAtTemplateBrace && braceDepth === 0) {\n if (maskLiterals) mask(index);\n return index + 1;\n }\n braceDepth = Math.max(0, braceDepth - 1);\n }\n index += 1;\n }\n return index;\n };\n\n scanCode(0, false);\n return output.join(\"\");\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction hasExplicitRenderingConfig(\n mod: RouteModule | null | undefined,\n source: string | undefined,\n): boolean {\n return (\n typeof mod?.ssg === \"boolean\" ||\n typeof mod?.ppr === \"boolean\" ||\n typeof mod?.experimental_ppr === \"boolean\" ||\n typeof mod?.revalidate !== \"undefined\" ||\n typeof mod?.dynamic !== \"undefined\" ||\n typeof parseRouteRenderingDirective(source) !== \"undefined\"\n );\n}\n\nexport function parseRouteRenderingDirective(\n source: string | undefined,\n): DirectiveRenderingConfig | undefined {\n if (!source) {\n return undefined;\n }\n\n for (const directive of readDirectivePrologue(source)) {\n const config = parseKnownRenderingDirective(directive);\n if (config) {\n return config;\n }\n }\n\n return undefined;\n}\n\nfunction parseKnownRenderingDirective(directive: string): DirectiveRenderingConfig | undefined {\n const normalized = directive.trim().toLowerCase();\n const match = normalized.match(\n /^use\\s+(ssg|static|isr|ssr|dynamic|ppr)(?:\\s*[;:]\\s*(\\d+))?\\s*;?$/,\n );\n\n if (!match?.[1]) {\n return undefined;\n }\n\n const mode = match[1];\n const revalidate = match[2] ? Number(match[2]) : undefined;\n\n if (mode === \"ssr\" || mode === \"dynamic\") {\n return {\n ssg: false,\n ppr: false,\n dynamic: \"force-dynamic\",\n directive,\n };\n }\n\n if (mode === \"ppr\") {\n return {\n ssg: false,\n ppr: true,\n revalidate: typeof revalidate === \"number\" && revalidate > 0 ? revalidate : undefined,\n directive,\n };\n }\n\n return {\n ssg: true,\n ppr: false,\n dynamic: \"force-static\",\n revalidate: typeof revalidate === \"number\" && revalidate > 0 ? revalidate : undefined,\n directive,\n };\n}\n\nfunction normalizeDynamicMode(value: unknown): RouteRenderingDynamic | undefined {\n switch (value) {\n case \"auto\":\n case \"force-static\":\n case \"force-dynamic\":\n case \"error\":\n return value;\n default:\n return undefined;\n }\n}\n\nfunction readDirectivePrologue(source: string): string[] {\n const directives: string[] = [];\n let index = skipTrivia(source, 0);\n\n while (index < source.length) {\n const parsed = readStringStatement(source, index);\n if (!parsed) {\n break;\n }\n\n directives.push(parsed.value);\n index = skipTrivia(source, parsed.end);\n }\n\n return directives;\n}\n\nfunction skipTrivia(source: string, start: number): number {\n let index = start;\n\n while (index < source.length) {\n const char = source[index];\n\n if (char && /\\s/.test(char)) {\n index += 1;\n continue;\n }\n\n if (source.startsWith(\"//\", index)) {\n const nextLine = source.indexOf(\"\\n\", index + 2);\n index = nextLine === -1 ? source.length : nextLine + 1;\n continue;\n }\n\n if (source.startsWith(\"/*\", index)) {\n const end = source.indexOf(\"*/\", index + 2);\n index = end === -1 ? source.length : end + 2;\n continue;\n }\n\n break;\n }\n\n return index;\n}\n\nfunction readStringStatement(\n source: string,\n start: number,\n): { value: string; end: number } | undefined {\n const quote = source[start];\n if (quote !== '\"' && quote !== \"'\") {\n return undefined;\n }\n\n let value = \"\";\n let index = start + 1;\n\n while (index < source.length) {\n const char = source[index];\n if (char === \"\\\\\") {\n value += source.slice(index, index + 2);\n index += 2;\n continue;\n }\n\n if (char === quote) {\n index += 1;\n const semicolonIndex = skipHorizontalWhitespace(source, index);\n const end = source[semicolonIndex] === \";\" ? semicolonIndex + 1 : index;\n return { value, end };\n }\n\n value += char ?? \"\";\n index += 1;\n }\n\n return undefined;\n}\n\nfunction skipHorizontalWhitespace(source: string, start: number): number {\n let index = start;\n while (source[index] === \" \" || source[index] === \"\\t\" || source[index] === \"\\r\") {\n index += 1;\n }\n return index;\n}\n\n/**\n * Collect SSG pages from route modules\n *\n * Scans all routes and categorizes them into:\n * - SSG pages: Pre-rendered at build time\n * - SSR routes: Rendered on each request\n *\n * @param routes - Array of route entries\n * @param loadModule - Function to load a route module\n * @returns SSG pages and SSR routes\n */\nexport async function collectSSGPages(\n routes: RouteEntry[],\n loadModule: (filePath: string) => Promise<RouteModule>,\n options: { suggestStaticRendering?: boolean } = {},\n): Promise<SSGCollectionResult> {\n const ssgPages: SSGPage[] = [];\n const ssrRoutes: string[] = [];\n const staticCandidateRoutes: string[] = [];\n\n for (const route of routes) {\n try {\n const mod = await loadModule(route.filePath);\n\n if (!mod) {\n ssrRoutes.push(route.path);\n continue;\n }\n\n const source = await readFile(route.filePath, \"utf8\").catch(() => undefined);\n const configuredRendering = resolveConfiguredRouteRenderingConfig(mod, source);\n const rendering = resolveRouteRenderingConfig(mod, source);\n\n if (configuredRendering.ssg && !rendering.ssg && source) {\n const blockers = findRequestBoundSourceBlockers(source);\n console.warn(\n `[Farm.js] Static rendering disabled for \"${route.path}\" because ${blockers.join(\n \" and \",\n )}. Farm will render this route on each request instead.`,\n );\n }\n\n // Check if page is marked for SSG\n if (rendering.ssg) {\n if (route.isDynamic) {\n // Dynamic SSG route requires getStaticPaths\n const getStaticPaths = mod.getStaticPaths || mod.generateStaticParams;\n\n if (!getStaticPaths) {\n throw new Error(\n `Dynamic SSG route \"${route.path}\" requires getStaticPaths export. ` +\n `Add: export function getStaticPaths() { return [{ paramName: 'value' }]; }`,\n );\n }\n\n // Get all paths to pre-render\n const paths = await getStaticPaths();\n\n // Materialize every path before adding any of them. If one entry is\n // invalid, the outer error handler can safely fall the whole route\n // back to SSR without leaving a partial SSG manifest behind.\n const materializedPages = paths.map((params) => ({\n urlPath: materializeSSGRoutePath(route.path, params),\n filePath: route.filePath,\n params: normalizeStaticPathParams(params),\n revalidate: rendering.revalidate,\n }));\n\n ssgPages.push(...materializedPages);\n } else {\n // Static SSG page\n ssgPages.push({\n urlPath: route.path,\n filePath: route.filePath,\n params: {},\n revalidate: rendering.revalidate,\n });\n }\n } else {\n // SSR route (default)\n ssrRoutes.push(route.path);\n\n if (\n options.suggestStaticRendering !== false &&\n analyzeStaticRouteCandidate(mod, source, { isDynamic: route.isDynamic }).candidate\n ) {\n staticCandidateRoutes.push(route.path);\n }\n }\n } catch (error) {\n console.error(`Error processing route ${route.path}:`, error);\n // Fall back to SSR for problematic routes\n ssrRoutes.push(route.path);\n }\n }\n\n if (staticCandidateRoutes.length > 0) {\n const visibleRoutes = staticCandidateRoutes.slice(0, 10);\n const remainingCount = staticCandidateRoutes.length - visibleRoutes.length;\n const remainingSuffix = remainingCount > 0 ? `\\n …and ${remainingCount} more` : \"\";\n\n console.warn(\n `[Farm.js] ${staticCandidateRoutes.length} route${\n staticCandidateRoutes.length === 1 ? \" appears\" : \"s appear\"\n } eligible for static rendering:\\n ${visibleRoutes.join(\"\\n \")}${remainingSuffix}\\n` +\n `Add \\`export const dynamic = \"force-static\";\\` after verifying that imported code ` +\n `does not read cookies, headers, authentication, or other request data.`,\n );\n }\n\n return { ssg: ssgPages, ssr: ssrRoutes };\n}\n\nfunction materializeSSGRoutePath(routePattern: string, params: StaticPathParams): string {\n const outputSegments: string[] = [];\n\n for (const segment of routePattern.split(\"/\")) {\n if (!segment) {\n continue;\n }\n\n const optionalCatchAll = segment.match(OPTIONAL_CATCH_ALL_SEGMENT);\n if (optionalCatchAll) {\n const parameterName = optionalCatchAll[1]!;\n const value = params[parameterName];\n const values = readCatchAllSegments(value, {\n optional: true,\n parameterName,\n routePattern,\n });\n outputSegments.push(...values.map(encodePathSegment));\n continue;\n }\n\n const requiredCatchAll = segment.match(REQUIRED_CATCH_ALL_SEGMENT);\n if (requiredCatchAll) {\n const parameterName = requiredCatchAll[1]!;\n const value = params[parameterName];\n const values = readCatchAllSegments(value, {\n optional: false,\n parameterName,\n routePattern,\n });\n outputSegments.push(...values.map(encodePathSegment));\n continue;\n }\n\n const requiredDynamic = segment.match(REQUIRED_DYNAMIC_SEGMENT);\n if (requiredDynamic) {\n const parameterName = requiredDynamic[1]!;\n const value = params[parameterName];\n if (isStaticPathArray(value)) {\n throw new Error(\n `Cannot materialize SSG route \"${routePattern}\": parameter \"${parameterName}\" ` +\n \"must be a scalar value; arrays are only supported for catch-all segments.\",\n );\n }\n if (isMissingPathValue(value)) {\n throw missingRequiredParameterError(routePattern, parameterName);\n }\n outputSegments.push(encodePathSegment(value));\n continue;\n }\n\n outputSegments.push(segment);\n }\n\n return outputSegments.length > 0 ? `/${outputSegments.join(\"/\")}` : \"/\";\n}\n\nfunction readCatchAllSegments(\n value: StaticPathParams[string] | undefined,\n options: {\n optional: boolean;\n parameterName: string;\n routePattern: string;\n },\n): StaticPathPrimitive[] {\n if (isMissingPathValue(value) || (isStaticPathArray(value) && value.length === 0)) {\n if (options.optional) {\n return [];\n }\n throw missingRequiredParameterError(options.routePattern, options.parameterName);\n }\n\n const segments = isStaticPathArray(value) ? [...value] : [value as StaticPathPrimitive];\n if (segments.some(isMissingPathValue)) {\n throw new Error(\n `Cannot materialize SSG route \"${options.routePattern}\": catch-all parameter ` +\n `\"${options.parameterName}\" contains an empty path segment.`,\n );\n }\n\n return segments;\n}\n\nfunction normalizeStaticPathParams(params: StaticPathParams): Record<string, string> {\n return Object.fromEntries(\n Object.entries(params).map(([key, value]) => [\n key,\n isStaticPathArray(value) ? value.map(String).join(\"/\") : String(value),\n ]),\n );\n}\n\nfunction isMissingPathValue(value: unknown): value is \"\" | null | undefined {\n return value === \"\" || value === null || typeof value === \"undefined\";\n}\n\nfunction isStaticPathArray(\n value: StaticPathParams[string] | undefined,\n): value is readonly StaticPathPrimitive[] {\n return Array.isArray(value);\n}\n\nfunction missingRequiredParameterError(routePattern: string, parameterName: string): Error {\n return new Error(\n `Cannot materialize SSG route \"${routePattern}\": required parameter ` +\n `\"${parameterName}\" is missing or empty.`,\n );\n}\n\nfunction encodePathSegment(value: StaticPathPrimitive): string {\n const encoded = encodeURIComponent(String(value)).replace(\n /[!'()*]/g,\n (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,\n );\n\n // Dot-only URL segments are normalized as navigation by URL parsers and\n // filesystem joins. Pre-rendering them could therefore escape the intended\n // route directory or overwrite a parent artifact. They cannot faithfully be\n // represented as a static URL segment, so keep the route server-rendered.\n if (encoded === \".\" || encoded === \"..\") {\n throw new Error(\n `Cannot materialize SSG path segment \"${encoded}\": dot-only segments are unsafe to prerender.`,\n );\n }\n\n return encoded;\n}\n\n/**\n * Check if a route module is SSG\n */\nexport function isSSGModule(mod: RouteModule | null | undefined): boolean {\n return resolveRouteRenderingConfig(mod).ssg;\n}\n\n/**\n * Check if a route module has ISR (Incremental Static Regeneration)\n */\nexport function hasISR(mod: RouteModule | null | undefined): boolean {\n const rendering = resolveRouteRenderingConfig(mod);\n return rendering.ssg && typeof rendering.revalidate === \"number\" && rendering.revalidate > 0;\n}\n\n/**\n * Get revalidation interval for a module\n */\nexport function getRevalidateInterval(mod: RouteModule | null | undefined): number | undefined {\n return resolveRouteRenderingConfig(mod).revalidate;\n}\n\n/**\n * Check if a route module has PPR/static-shell caching enabled.\n */\nexport function hasPPR(\n mod: RouteModule | null | undefined,\n options?: RouteRenderingOptions,\n): boolean {\n return resolveRouteRenderingConfig(mod, undefined, options).ppr;\n}\n\n/**\n * Generate SSG manifest for production builds\n */\nexport function generateSSGManifest(pages: SSGPage[]): string {\n return JSON.stringify(\n pages.map((page) => ({\n urlPath: page.urlPath,\n params: page.params,\n revalidate: page.revalidate,\n })),\n null,\n 2,\n );\n}\n\n/**\n * Check if a URL path matches an SSG page\n */\nexport function matchSSGPage(urlPath: string, ssgPages: SSGPage[]): SSGPage | undefined {\n const normalizedPath = urlPath === \"/\" ? \"/\" : urlPath.replace(/\\/$/, \"\");\n return ssgPages.find((page) => page.urlPath === normalizedPath);\n}\n","import type {\n FarmConfig,\n ParsedRoute,\n RouteModule,\n LayoutModule,\n SSGCollectionResult,\n} from \"../types\";\nimport {\n parseRoutePath,\n matchRoute,\n matchRoutePrefix,\n resolveAppPath,\n globFiles,\n logger,\n toRootRelativeUrlPath,\n toViteModuleId,\n} from \"../utils\";\nimport { collectSSGPages, resolveRouteRenderingConfigFromFile } from \"../ssg\";\nimport type {\n ProgrammaticPageRoute,\n ProgrammaticLayoutRoute,\n ProgrammaticRedirectRoute,\n ProgrammaticRouteSearchClientOptions,\n} from \"../routes\";\nimport {\n createProgrammaticRouteModuleId,\n getProgrammaticRouteSearchClientOptions,\n parseProgrammaticRoutePath,\n} from \"../routes-shared\";\nimport { loadProgrammaticRouteManifests } from \"../routes.server\";\nimport {\n createFarmMarkdownRouteModuleFromFile,\n isFarmMarkdownPageFile,\n loadFarmMdxComponents,\n resolveMdxConfig,\n} from \"../app-markdown\";\nimport path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport {\n enforceFarmIsolatedHydrationRouteBudget,\n getClientModuleHydrationPlan,\n getClientModuleMetadata,\n resolveFarmIsolatedClientHydrationMode,\n type IsolatedClientBoundaryReference,\n} from \"../utils/client-component\";\nimport { getIntegrationProviders } from \"../integrations\";\nimport type { MetadataImageKind } from \"../metadata\";\nimport type { FarmIslandStrategy } from \"../island\";\nimport type { FarmServerRendererRuntime } from \"../renderer\";\nimport { createFarmRouteRenderPlan, type FarmRouteRenderPlan } from \"../navigation/render-plan\";\nimport { getFarmSourceRoots, type FarmSourceRoot } from \"../layers\";\nimport {\n inspectStaticMetadataImage,\n isStaticMetadataImageFile,\n type StaticMetadataImageInfo,\n} from \"../static-metadata-image\";\nimport {\n getFarmRouteRuntimeConfig,\n mergeFarmRouteRuntimeConfigs,\n normalizeFarmRouteRuntimeConfig,\n resolveFarmRouteRuleRuntimeConfig,\n resolveFarmRouteRuntimeConfig,\n type ResolvedFarmRouteRuntimeConfig,\n} from \"../route-runtime\";\nimport {\n localizeFarmHref,\n localizeFarmPathname,\n resolveFarmLocalePath,\n stripFarmLocaleFromPathname,\n} from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { appendFarmRedirectQuery } from \"../redirect-query\";\nimport { createRouteSlotContainerId, parseRouteSlotFile } from \"./route-slots\";\nimport { getFarmRendererComponentExtensions } from \"../renderer\";\nimport type { ApplicationMetadataRouteKind } from \"../metadata-route\";\nimport {\n AmbiguousRouteError,\n assertUniqueRouteParameters,\n compareRouteSpecificity,\n getRoutePatternShape,\n type RouteSegmentSpecificity,\n} from \"./specificity\";\n\ninterface RouteEntry {\n route: ParsedRoute;\n modulePath: string;\n markdownSourcePath?: string;\n pattern: string;\n source?: \"file\" | \"programmatic\";\n sourceRoot: string;\n}\n\nexport interface RouteSlotEntry extends RouteEntry {\n name: string;\n ownerPattern: string;\n interception: boolean;\n fallback: boolean;\n containerId: string;\n}\n\nexport interface MatchedRouteSlot {\n name: string;\n ownerPattern: string;\n containerId: string;\n interception: boolean;\n fallback: boolean;\n route: RouteSlotEntry;\n params: Record<string, string>;\n}\n\nexport interface FarmClientRouteManifest {\n routes: Array<{\n pattern: string;\n modulePath: string;\n shouldHydrate: boolean;\n isClientComponent: boolean;\n islandStrategy: FarmIslandStrategy | null;\n hasIsolatedClientBoundaries?: true;\n isolatedBoundaries?: IsolatedClientBoundaryReference[];\n renderPlan: FarmRouteRenderPlan;\n suppressedAsyncHydration?: true;\n search?: ProgrammaticRouteSearchClientOptions;\n segments: Array<{\n segment: string;\n isDynamic: boolean;\n isCatchAll?: boolean;\n isOptional?: boolean;\n }>;\n }>;\n layouts: Array<{\n pattern: string;\n modulePath: string;\n shouldHydrate: boolean;\n isClientComponent: boolean;\n islandStrategy: FarmIslandStrategy | null;\n hasIsolatedClientBoundaries?: true;\n isolatedBoundaries?: IsolatedClientBoundaryReference[];\n }>;\n slots: Array<{\n name: string;\n ownerPattern: string;\n pattern: string;\n modulePath: string;\n containerId: string;\n interception: boolean;\n fallback: boolean;\n shouldHydrate: boolean;\n isClientComponent: boolean;\n segments: RouteEntry[\"route\"][\"segments\"];\n }>;\n}\n\nexport function shouldSuggestStaticRenderingForI18n(\n i18n: Pick<ResolvedFarmI18nConfig, \"routing\" | \"detection\"> | undefined,\n): boolean {\n return (\n !i18n ||\n i18n.routing === \"prefix-always\" ||\n (i18n.routing === \"prefix-except-default\" && i18n.detection.every((signal) => signal === \"url\"))\n );\n}\n\ninterface MetadataImageEntry extends RouteEntry {\n kind: MetadataImageKind;\n fileName: \"opengraph-image\" | \"twitter-image\";\n sourceType: \"module\" | \"static\";\n staticInfo?: StaticMetadataImageInfo;\n}\n\nexport interface ApplicationMetadataRouteEntry extends RouteEntry {\n kind: ApplicationMetadataRouteKind;\n fileName: \"sitemap\" | \"robots\" | \"manifest\";\n outputName: \"sitemap.xml\" | \"robots.txt\" | \"manifest.webmanifest\";\n}\n\ninterface RedirectEntry {\n route: ParsedRoute;\n pattern: string;\n definition: ProgrammaticRedirectRoute;\n}\n\nfunction getRouteSpecificity(entry: RouteEntry): RouteSegmentSpecificity[] {\n return entry.route.segments.map((segment) => {\n if (!segment.isDynamic) return \"static\";\n if (!segment.isCatchAll) return \"dynamic\";\n return segment.isOptional ? \"optional-catch-all\" : \"catch-all\";\n });\n}\n\nfunction compareRouteEntries(left: RouteEntry, right: RouteEntry): number {\n return compareRouteSpecificity(getRouteSpecificity(left), getRouteSpecificity(right));\n}\n\n/**\n * Manages route discovery and matching for the Farm.js application\n */\nexport class RouteManager {\n private config: Required<FarmConfig>;\n private routes: Map<string, RouteEntry> = new Map();\n private pageRouteShapes: Map<string, RouteEntry> = new Map();\n private layouts: Map<string, RouteEntry> = new Map();\n private routeSlots: Map<string, RouteSlotEntry> = new Map();\n private loadings: Map<string, RouteEntry> = new Map();\n private errors: Map<string, RouteEntry> = new Map();\n private metadataImages: Map<string, MetadataImageEntry> = new Map();\n private metadataRoutes: Map<string, ApplicationMetadataRouteEntry> = new Map();\n private redirects: Map<string, RedirectEntry> = new Map();\n private programmaticPages: Map<string, ProgrammaticPageRoute> = new Map();\n private programmaticLayouts: Map<string, ProgrammaticLayoutRoute> = new Map();\n private rendererRuntime?: FarmServerRendererRuntime;\n private viteServer?: ViteDevServer;\n private clientManifestCache?: {\n projectRoot: string;\n manifest: FarmClientRouteManifest;\n isolatedClientBoundaryModules: ReadonlySet<string>;\n };\n\n constructor(config: Required<FarmConfig>, viteServer?: ViteDevServer) {\n this.config = config;\n this.viteServer = viteServer;\n }\n\n setRendererRuntime(rendererRuntime: FarmServerRendererRuntime): void {\n this.rendererRuntime = rendererRuntime;\n }\n\n /**\n * Discover all routes in the app directory\n */\n async discoverRoutes(): Promise<void> {\n this.invalidateClientManifest();\n this.routes.clear();\n this.pageRouteShapes.clear();\n this.layouts.clear();\n this.routeSlots.clear();\n this.loadings.clear();\n this.errors.clear();\n this.metadataImages.clear();\n this.metadataRoutes.clear();\n this.redirects.clear();\n this.programmaticPages.clear();\n this.programmaticLayouts.clear();\n\n for (const source of getFarmSourceRoots(this.config)) {\n await this.discoverFileRoutes(source);\n await this.discoverProgrammaticRoutes(source);\n }\n\n for (const slot of this.routeSlots.values()) {\n if (slot.interception && !this.pageRouteShapes.has(getRoutePatternShape(slot.pattern))) {\n throw new AmbiguousRouteError(\n `Intercepting route slot \"${slot.name}\" targets \"${slot.pattern}\", but no canonical page exists for that URL`,\n );\n }\n }\n\n this.routes = new Map(\n Array.from(this.routes.entries()).sort(([, left], [, right]) =>\n compareRouteEntries(left, right),\n ),\n );\n this.metadataRoutes = new Map(\n Array.from(this.metadataRoutes.entries()).sort(([, left], [, right]) =>\n compareRouteEntries(left, right),\n ),\n );\n\n // Silent discovery - only log if verbose mode enabled\n if (process.env.FARM_VERBOSE) {\n logger.info(\n `Discovered ${this.routes.size} pages, ${this.layouts.size} layouts, and ${this.metadataRoutes.size} metadata routes`,\n );\n }\n\n if (process.env.FARM_VERBOSE) {\n this.logRoutes();\n }\n }\n\n /**\n * Find matching route for a given URL path\n */\n matchRoute(\n pathname: string,\n options: {\n interceptFrom?: string;\n } = {},\n ): {\n route: RouteEntry | null;\n params: Record<string, string>;\n layouts: RouteEntry[];\n slots: MatchedRouteSlot[];\n } {\n // Remove trailing slash except for root\n const routePathname = this.toRoutePathname(pathname);\n const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n // Find matching page route\n let matchedRoute: RouteEntry | null = null;\n let params: Record<string, string> = {};\n\n for (const routeEntry of this.routes.values()) {\n const match = matchRoute(normalizedPath, routeEntry.route.segments);\n if (match.matches) {\n matchedRoute = routeEntry;\n params = match.params;\n break;\n }\n }\n\n // Find all matching layouts (from root to specific)\n const layouts = this.findMatchingLayouts(normalizedPath);\n const slots = this.findMatchingRouteSlots(normalizedPath, options.interceptFrom);\n\n return {\n route: matchedRoute,\n params,\n layouts,\n slots,\n };\n }\n\n /**\n * Get all registered routes\n */\n getRoutes(): Map<string, RouteEntry> {\n return new Map(this.routes);\n }\n\n /**\n * Get all registered layouts\n */\n getLayouts(): Map<string, RouteEntry> {\n return new Map(this.layouts);\n }\n\n getRouteSlots(): Map<string, RouteSlotEntry> {\n return new Map(this.routeSlots);\n }\n\n /** Resolve route rules, inherited layouts, and the page export in precedence order. */\n async resolveRouteRuntimeConfig(pattern: string): Promise<ResolvedFarmRouteRuntimeConfig> {\n const routeEntry = this.routes.get(pattern);\n if (!routeEntry) {\n throw new Error(`Cannot resolve runtime configuration for unknown route \"${pattern}\"`);\n }\n\n const inherited = resolveFarmRouteRuleRuntimeConfig(pattern, this.config.routeRules);\n const layouts = this.findMatchingLayouts(pattern);\n const layoutConfigs = [];\n\n for (const layout of layouts) {\n const layoutModule = await this.loadLayoutModule(layout.modulePath);\n layoutConfigs.push(\n normalizeFarmRouteRuntimeConfig(\n getFarmRouteRuntimeConfig(layoutModule),\n `Layout \"${layout.pattern}\"`,\n ),\n );\n }\n\n const routeModule = await this.loadRouteModule(routeEntry.modulePath);\n const routeConfig = normalizeFarmRouteRuntimeConfig(\n getFarmRouteRuntimeConfig(routeModule),\n `Route \"${pattern}\"`,\n );\n\n return resolveFarmRouteRuntimeConfig(\n mergeFarmRouteRuntimeConfigs(inherited, ...layoutConfigs, routeConfig),\n `Route \"${pattern}\"`,\n );\n }\n\n /**\n * Get all route-level loading boundaries.\n */\n getLoadings(): Map<string, RouteEntry> {\n return new Map(this.loadings);\n }\n\n /**\n * Get all route-level error boundaries.\n */\n getErrors(): Map<string, RouteEntry> {\n return new Map(this.errors);\n }\n\n getMetadataImages(): Map<string, MetadataImageEntry> {\n return new Map(this.metadataImages);\n }\n\n getMetadataRoutes(): Map<string, ApplicationMetadataRouteEntry> {\n return new Map(this.metadataRoutes);\n }\n\n getRedirects(): ProgrammaticRedirectRoute[] {\n return Array.from(this.redirects.values()).map((entry) => entry.definition);\n }\n\n matchRedirect(\n pathname: string,\n search = \"\",\n ): {\n redirect: ProgrammaticRedirectRoute;\n destination: string;\n statusCode: number;\n params: Record<string, string>;\n } | null {\n const i18n = this.getI18nConfig();\n const localeMatch = i18n ? resolveFarmLocalePath(pathname, i18n) : undefined;\n const routePathname = localeMatch?.pathname || pathname;\n const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n\n for (const redirectEntry of this.redirects.values()) {\n const match = matchRoute(normalizedPath, redirectEntry.route.segments);\n if (!match.matches) continue;\n\n const statusCode =\n redirectEntry.definition.statusCode || (redirectEntry.definition.permanent ? 308 : 307);\n\n return {\n redirect: redirectEntry.definition,\n destination: appendFarmRedirectQuery(\n this.localizeRedirectDestination(\n interpolateRedirectDestination(redirectEntry.definition.destination, match.params),\n localeMatch?.locale,\n ),\n search,\n ),\n statusCode,\n params: match.params,\n };\n }\n\n return null;\n }\n\n /**\n * Return the nearest matching loading boundary for a pathname.\n */\n getMatchingLoading(pathname: string): RouteEntry | null {\n return this.findNearestBoundary(this.toRoutePathname(pathname), this.loadings);\n }\n\n /**\n * Return the nearest matching error boundary for a pathname.\n */\n getMatchingError(pathname: string): RouteEntry | null {\n return this.findNearestBoundary(this.toRoutePathname(pathname), this.errors);\n }\n\n matchMetadataImage(pathname: string): {\n image: MetadataImageEntry;\n params: Record<string, string>;\n pagePath: string;\n } | null {\n const routePathname = this.toRoutePathname(pathname);\n const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n const suffix = getMetadataImageSuffix(normalizedPath);\n if (!suffix) return null;\n\n const pagePath = normalizedPath.slice(0, -suffix.fileName.length - 1) || \"/\";\n\n for (const imageEntry of this.metadataImages.values()) {\n if (imageEntry.kind !== suffix.kind) continue;\n\n const match = matchRoute(pagePath, imageEntry.route.segments);\n if (!match.matches) continue;\n\n return {\n image: imageEntry,\n params: match.params,\n pagePath,\n };\n }\n\n return null;\n }\n\n matchMetadataRoute(pathname: string): {\n metadata: ApplicationMetadataRouteEntry;\n params: Record<string, string>;\n routePath: string;\n } | null {\n const routePathname = this.toRoutePathname(pathname);\n const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n const suffix = getApplicationMetadataRouteSuffix(normalizedPath);\n if (!suffix) return null;\n\n const routePath = normalizedPath.slice(0, -suffix.outputName.length - 1) || \"/\";\n for (const metadata of this.metadataRoutes.values()) {\n if (metadata.kind !== suffix.kind) continue;\n const match = matchRoute(routePath, metadata.route.segments);\n if (!match.matches) continue;\n return { metadata, params: match.params, routePath };\n }\n\n return null;\n }\n\n getMatchingMetadataRoute(\n pathname: string,\n kind: ApplicationMetadataRouteKind,\n ): {\n metadata: ApplicationMetadataRouteEntry;\n params: Record<string, string>;\n routePath: string;\n } | null {\n const routePathname = this.toRoutePathname(pathname);\n const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n const pathSegments = normalizedPath.split(\"/\").filter(Boolean);\n let bestMatch: {\n metadata: ApplicationMetadataRouteEntry;\n params: Record<string, string>;\n routePath: string;\n } | null = null;\n\n for (const metadata of this.metadataRoutes.values()) {\n if (metadata.kind !== kind || metadata.route.segments.length > pathSegments.length) continue;\n const routePath =\n metadata.route.segments.length === 0\n ? \"/\"\n : `/${pathSegments.slice(0, metadata.route.segments.length).join(\"/\")}`;\n const match = matchRoute(routePath, metadata.route.segments);\n if (!match.matches) continue;\n if (!bestMatch || metadata.route.segments.length > bestMatch.metadata.route.segments.length) {\n bestMatch = { metadata, params: match.params, routePath };\n }\n }\n\n return bestMatch;\n }\n\n resolveMetadataRoutePath(\n metadata: ApplicationMetadataRouteEntry,\n params: Record<string, string> = {},\n ): string {\n const routePath = routeSegmentsToPath(metadata.route.segments, params);\n return routePath === \"/\" ? `/${metadata.outputName}` : `${routePath}/${metadata.outputName}`;\n }\n\n getMatchingMetadataImage(\n pathname: string,\n kind: MetadataImageKind,\n ): {\n image: MetadataImageEntry;\n params: Record<string, string>;\n } | null {\n const routePathname = this.toRoutePathname(pathname);\n const normalizedPath = routePathname === \"/\" ? \"/\" : routePathname.replace(/\\/$/, \"\");\n const pathSegments = normalizedPath.split(\"/\").filter(Boolean);\n let bestMatch: {\n image: MetadataImageEntry;\n params: Record<string, string>;\n } | null = null;\n\n for (const imageEntry of this.metadataImages.values()) {\n if (imageEntry.kind !== kind) continue;\n if (imageEntry.route.segments.length > pathSegments.length) continue;\n\n const candidatePath =\n imageEntry.route.segments.length === 0\n ? \"/\"\n : `/${pathSegments.slice(0, imageEntry.route.segments.length).join(\"/\")}`;\n const match = matchRoute(candidatePath, imageEntry.route.segments);\n if (!match.matches) continue;\n\n if (!bestMatch || imageEntry.route.segments.length > bestMatch.image.route.segments.length) {\n bestMatch = {\n image: imageEntry,\n params: match.params,\n };\n }\n }\n\n return bestMatch;\n }\n\n resolveMetadataImagePath(image: MetadataImageEntry, params: Record<string, string> = {}): string {\n const pagePath = routeSegmentsToPath(image.route.segments, params);\n const imagePath = pagePath === \"/\" ? `/${image.fileName}` : `${pagePath}/${image.fileName}`;\n return image.staticInfo ? `${imagePath}?v=${image.staticInfo.hash}` : imagePath;\n }\n\n /**\n * Generate the compiled route decisions consumed by SPA navigation.\n * Requests still fetch route data, but never inspect component source.\n */\n generateClientManifest(projectRoot: string = this.config.root): FarmClientRouteManifest {\n const normalizedProjectRoot = path.resolve(projectRoot);\n if (this.clientManifestCache?.projectRoot === normalizedProjectRoot) {\n return this.clientManifestCache.manifest;\n }\n\n const toUrlPath = (absolutePath: string) => {\n const rootRelative = toRootRelativeUrlPath(absolutePath, normalizedProjectRoot);\n if (rootRelative !== undefined) return rootRelative;\n if (path.isAbsolute(absolutePath)) {\n const normalized = absolutePath.replace(/\\\\/g, \"/\");\n return normalized.startsWith(\"/\") ? `/@fs${normalized}` : `/@fs/${normalized}`;\n }\n return absolutePath;\n };\n\n const integrationProviders = getIntegrationProviders(this.config.integrations).filter(\n (provider) => provider.component || provider.type === \"clerk\",\n );\n const unsupportedIntegrationProvider = integrationProviders.find(\n (provider) => provider.supportsIsolatedHydration !== true,\n );\n if (\n this.config.experimental?.isolatedClientHydration === \"enabled\" &&\n this.config.experimental?.serverComponents !== true &&\n unsupportedIntegrationProvider\n ) {\n logger.warn(\n `[Farm.js] isolated hydration kept route-wide because integration provider \"${unsupportedIntegrationProvider.name}\" does not declare supportsIsolatedHydration: true.`,\n );\n }\n const isolatedMode = resolveFarmIsolatedClientHydrationMode(\n this.config.experimental?.isolatedClientHydration,\n {\n serverComponents: this.config.experimental?.serverComponents === true,\n hasUnsupportedIntegrationProvider: Boolean(unsupportedIntegrationProvider),\n },\n );\n const layoutEntries = Array.from(this.layouts.values()).map((entry) => ({\n entry,\n metadata: getClientModuleHydrationPlan(entry.modulePath, normalizedProjectRoot, isolatedMode),\n }));\n\n const routeEntries = Array.from(this.routes.values()).map((entry) => ({\n entry,\n metadata: getClientModuleHydrationPlan(entry.modulePath, normalizedProjectRoot, isolatedMode),\n }));\n\n enforceFarmIsolatedHydrationRouteBudget(\n layoutEntries.map(({ entry, metadata }) => ({\n pattern: entry.pattern,\n depth: entry.route.segments.length,\n metadata,\n })),\n routeEntries.map(({ entry, metadata }) => ({\n pattern: entry.pattern,\n depth: entry.route.segments.length,\n metadata,\n })),\n (layoutPattern, routePattern) =>\n layoutPattern === \"/\" ||\n routePattern === layoutPattern ||\n routePattern.startsWith(`${layoutPattern.replace(/\\/$/, \"\")}/`),\n );\n\n for (const { entry, metadata } of [...layoutEntries, ...routeEntries]) {\n if (!metadata.costGuardExceeded) continue;\n logger.warn(\n `[Farm.js] isolated hydration kept route-wide for ${entry.modulePath}: ${metadata.fallbackReason}.`,\n );\n }\n if (isolatedMode === \"analyze\") {\n for (const { entry, metadata } of [...layoutEntries, ...routeEntries]) {\n if (!metadata.isolatedHydrationEligible) continue;\n logger.info(\n `[Farm.js] isolated hydration analysis: ${entry.modulePath} can keep ${metadata.isolatedBoundaries.length} client ${metadata.isolatedBoundaries.length === 1 ? \"boundary\" : \"boundaries\"} while excluding its server owner from the browser graph.`,\n );\n }\n }\n\n const routes = routeEntries.map(({ entry, metadata }) => {\n const programmaticPage = this.programmaticPages.get(entry.modulePath);\n const layoutShouldHydrate = layoutEntries.some(\n ({ entry: layout, metadata: layoutMetadata }) =>\n layoutMetadata.shouldHydrate &&\n (layout.pattern === \"/\" ||\n entry.pattern === layout.pattern ||\n entry.pattern.startsWith(`${layout.pattern.replace(/\\/$/, \"\")}/`)),\n );\n return {\n pattern: entry.pattern,\n modulePath: toUrlPath(entry.modulePath),\n shouldHydrate: metadata.shouldHydrate,\n isClientComponent: metadata.isClientComponent,\n islandStrategy: metadata.islandStrategy,\n ...(metadata.hasIsolatedClientBoundaries\n ? {\n hasIsolatedClientBoundaries: true as const,\n isolatedBoundaries: metadata.isolatedBoundaries.map((boundary) => ({\n ...boundary,\n modulePath: toUrlPath(boundary.modulePath),\n })),\n }\n : {}),\n renderPlan: createFarmRouteRenderPlan({\n pageShouldHydrate: metadata.shouldHydrate,\n layoutShouldHydrate,\n islandStrategy: metadata.islandStrategy,\n }),\n suppressedAsyncHydration: metadata.suppressedAsyncHydration,\n search: getProgrammaticRouteSearchClientOptions(programmaticPage?.search),\n segments: entry.route.segments.map((seg) => ({\n segment: seg.segment,\n isDynamic: seg.isDynamic,\n isCatchAll: seg.isCatchAll,\n isOptional: seg.isOptional,\n })),\n };\n });\n\n const layouts = layoutEntries.map(({ entry, metadata }) => ({\n pattern: entry.pattern,\n modulePath: toUrlPath(entry.modulePath),\n shouldHydrate: metadata.shouldHydrate,\n isClientComponent: metadata.isClientComponent,\n islandStrategy: metadata.islandStrategy,\n ...(metadata.hasIsolatedClientBoundaries\n ? {\n hasIsolatedClientBoundaries: true as const,\n isolatedBoundaries: metadata.isolatedBoundaries.map((boundary) => ({\n ...boundary,\n modulePath: toUrlPath(boundary.modulePath),\n })),\n }\n : {}),\n }));\n\n const slots = Array.from(this.routeSlots.values()).map((entry) => {\n const metadata = getClientModuleMetadata(entry.modulePath, normalizedProjectRoot);\n return {\n name: entry.name,\n ownerPattern: entry.ownerPattern,\n pattern: entry.pattern,\n modulePath: toUrlPath(entry.modulePath),\n containerId: entry.containerId,\n interception: entry.interception,\n fallback: entry.fallback,\n shouldHydrate: metadata.shouldHydrate,\n isClientComponent: metadata.isClientComponent,\n segments: entry.route.segments,\n };\n });\n\n const isolatedClientBoundaryModules = new Set<string>();\n for (const { metadata } of [...layoutEntries, ...routeEntries]) {\n if (!metadata.hasIsolatedClientBoundaries) continue;\n for (const boundary of metadata.isolatedBoundaries) {\n isolatedClientBoundaryModules.add(path.resolve(boundary.modulePath));\n }\n }\n\n const manifest = { routes, layouts, slots };\n this.clientManifestCache = {\n projectRoot: normalizedProjectRoot,\n manifest,\n isolatedClientBoundaryModules,\n };\n return manifest;\n }\n\n /** @internal Client modules selected by the compiled hydration ownership plan. */\n getIsolatedClientBoundaryModules(projectRoot: string = this.config.root): ReadonlySet<string> {\n const normalizedProjectRoot = path.resolve(projectRoot);\n this.generateClientManifest(normalizedProjectRoot);\n return this.clientManifestCache?.isolatedClientBoundaryModules ?? new Set();\n }\n\n /**\n * Invalidate build-time route metadata after a page or layout changes in dev.\n * Navigation requests reuse the cached manifest and never inspect source files.\n */\n invalidateClientManifest(): void {\n this.clientManifestCache = undefined;\n }\n\n /**\n * Load a route module dynamically\n */\n async loadRouteModule(modulePath: string): Promise<RouteModule> {\n try {\n const programmaticPage = this.programmaticPages.get(modulePath);\n if (programmaticPage) {\n const { createRouteModuleFromProgrammaticPage } = await import(\"../routes\");\n return createRouteModuleFromProgrammaticPage(programmaticPage, this.rendererRuntime);\n }\n\n if (isFarmMarkdownPageFile(modulePath)) {\n const mdxConfig = resolveMdxConfig(this.config.mdx);\n const components = await loadFarmMdxComponents(mdxConfig, {\n root: this.config.root,\n loadModule: this.viteServer\n ? (componentModulePath) => this.viteServer!.ssrLoadModule(componentModulePath)\n : undefined,\n });\n return await createFarmMarkdownRouteModuleFromFile(modulePath, {\n components,\n config: mdxConfig,\n });\n }\n\n if (this.viteServer) {\n const module = await this.viteServer.ssrLoadModule(modulePath);\n return module as RouteModule;\n } else {\n const module = await import(/* @vite-ignore */ modulePath);\n return module as RouteModule;\n }\n } catch (error) {\n logger.error(`Failed to load route module: ${modulePath}`);\n throw error;\n }\n }\n\n /**\n * Load a layout module dynamically\n */\n async loadLayoutModule(modulePath: string): Promise<LayoutModule> {\n try {\n const programmaticLayout = this.programmaticLayouts.get(modulePath);\n if (programmaticLayout) {\n const { createLayoutModuleFromProgrammaticLayout } = await import(\"../routes\");\n return createLayoutModuleFromProgrammaticLayout(programmaticLayout) as LayoutModule;\n }\n\n if (this.viteServer) {\n const module = await this.viteServer.ssrLoadModule(modulePath);\n return module as LayoutModule;\n } else {\n const module = await import(/* @vite-ignore */ modulePath);\n return module as LayoutModule;\n }\n } catch (error) {\n logger.error(`Failed to load layout module: ${modulePath}`);\n throw error;\n }\n }\n\n /**\n * Create a route pattern from parsed route\n */\n private createRoutePattern(route: ParsedRoute): string {\n if (route.segments.length === 0) return \"/\";\n\n return (\n \"/\" +\n route.segments\n .map((segment) => {\n if (!segment.isDynamic) return segment.segment;\n\n if (segment.isCatchAll) {\n return segment.isOptional ? `[[...${segment.segment}]]` : `[...${segment.segment}]`;\n }\n\n return `[${segment.segment}]`;\n })\n .join(\"/\")\n );\n }\n\n private registerPageRoute(entry: RouteEntry): void {\n assertUniqueRouteParameters(entry.pattern);\n const shape = getRoutePatternShape(entry.pattern);\n const existing = this.pageRouteShapes.get(shape);\n\n if (existing && existing.pattern !== entry.pattern) {\n if (existing.sourceRoot === entry.sourceRoot) {\n throw new Error(\n `Ambiguous page routes \"${existing.pattern}\" and \"${entry.pattern}\" match the same URLs. Found ${existing.modulePath} and ${entry.modulePath}. Keep only one route for this URL shape.`,\n );\n }\n this.routes.delete(existing.pattern);\n }\n\n this.routes.set(entry.pattern, entry);\n this.pageRouteShapes.set(shape, entry);\n }\n\n private async discoverFileRoutes(source: FarmSourceRoot): Promise<void> {\n const appDir = resolveAppPath(source.root, source.srcDir, \"app\");\n const componentExtensions = getFarmRendererComponentExtensions(this.config.renderer).map(\n (extension) => extension.slice(1),\n );\n const componentGlob = componentExtensions.join(\",\");\n const pageFiles = await safeGlobFiles(`**/page.{${componentGlob},md,mdx}`, appDir);\n const slotDefaultFiles = await safeGlobFiles(`**/@*/**/default.{${componentGlob}}`, appDir);\n const layoutFiles = await safeGlobFiles(`**/layout.{${componentGlob}}`, appDir);\n const loadingFiles = await safeGlobFiles(`**/loading.{${componentGlob}}`, appDir);\n const errorFiles = await safeGlobFiles(`**/error.{${componentGlob}}`, appDir);\n const metadataImageFiles = await safeGlobFiles(\n `**/{opengraph-image,twitter-image}.{${componentGlob},png,jpg,jpeg,gif,webp}`,\n appDir,\n );\n const metadataRouteFiles = await safeGlobFiles(\"**/{sitemap,robots,manifest}.{ts,js}\", appDir);\n\n const canonicalPageGroups = new Map<\n string,\n {\n route: ParsedRoute;\n files: string[];\n }\n >();\n for (const file of pageFiles.filter((candidate) => parseRouteSlotFile(candidate) === null)) {\n const route = parseRoutePath(file);\n const pattern = this.createRoutePattern(route);\n const group = canonicalPageGroups.get(pattern);\n if (group) {\n group.files.push(file);\n } else {\n canonicalPageGroups.set(pattern, {\n route,\n files: [file],\n });\n }\n }\n\n for (const [pattern, group] of canonicalPageGroups) {\n const componentFiles = group.files.filter((file) => !isFarmMarkdownPageFile(file));\n const markdownFiles = group.files.filter(isFarmMarkdownPageFile);\n if (componentFiles.length > 1) {\n throw new Error(\n `Duplicate page route \"${pattern}\". Found ${componentFiles\n .map((file) => path.join(appDir, file))\n .join(\" and \")}.`,\n );\n }\n if (markdownFiles.length > 1) {\n throw new Error(\n `Duplicate markdown representation for page route \"${pattern}\". Found ${markdownFiles\n .map((file) => path.join(appDir, file))\n .join(\" and \")}.`,\n );\n }\n\n const componentFile = componentFiles[0];\n const markdownFile = markdownFiles[0];\n const primaryFile = componentFile || markdownFile;\n if (!primaryFile) continue;\n\n const modulePath = path.join(appDir, primaryFile);\n const existing = this.routes.get(pattern);\n if (existing?.sourceRoot === source.root) {\n throw new Error(\n `Duplicate page route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}.`,\n );\n }\n this.registerPageRoute({\n route: group.route,\n modulePath,\n ...(markdownFile\n ? {\n markdownSourcePath: path.join(appDir, markdownFile),\n }\n : {}),\n pattern,\n source: \"file\",\n sourceRoot: source.root,\n });\n }\n\n for (const [kind, files, target] of [\n [\"layout\", layoutFiles, this.layouts],\n [\"loading\", loadingFiles, this.loadings],\n [\"error\", errorFiles, this.errors],\n ] as const) {\n for (const file of files) {\n const route = parseRoutePath(file);\n const modulePath = path.join(appDir, file);\n const pattern = this.createRoutePattern(route);\n const existing = target.get(pattern);\n if (existing?.sourceRoot === source.root) {\n throw new Error(\n `Duplicate ${kind} route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}.`,\n );\n }\n target.set(pattern, {\n route,\n modulePath,\n pattern,\n source: \"file\",\n sourceRoot: source.root,\n });\n }\n }\n\n for (const file of [...pageFiles, ...slotDefaultFiles]) {\n const slot = parseRouteSlotFile(file);\n if (!slot) continue;\n\n const modulePath = path.join(appDir, file);\n const pattern = this.createRoutePattern(slot.route);\n const ownerPattern = this.createRoutePattern(slot.ownerRoute);\n const key = `${ownerPattern}:${slot.name}:${slot.interception ? \"intercept\" : \"slot\"}:${\n slot.fallback ? \"default\" : pattern\n }`;\n const existing = this.routeSlots.get(key);\n if (existing?.sourceRoot === source.root) {\n throw new Error(\n `Duplicate route slot \"${slot.name}\" for \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}.`,\n );\n }\n\n this.routeSlots.set(key, {\n route: slot.route,\n modulePath,\n pattern,\n source: \"file\",\n sourceRoot: source.root,\n name: slot.name,\n ownerPattern,\n interception: slot.interception,\n fallback: slot.fallback,\n containerId: createRouteSlotContainerId(slot.name, ownerPattern),\n });\n }\n\n for (const file of metadataImageFiles) {\n const fileBase = path.basename(file, path.extname(file));\n const kind: MetadataImageKind = fileBase === \"twitter-image\" ? \"twitter\" : \"opengraph\";\n const fileName = kind === \"twitter\" ? \"twitter-image\" : \"opengraph-image\";\n const route = parseRoutePath(file);\n const modulePath = path.join(appDir, file);\n const pattern = this.createRoutePattern(route);\n const key = `${kind}:${pattern}`;\n const existing = this.metadataImages.get(key);\n const sourceType = isStaticMetadataImageFile(file) ? \"static\" : \"module\";\n\n if (existing?.sourceRoot === source.root) {\n throw new Error(\n `Duplicate ${fileName} route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}. Keep only one static image or module per route segment.`,\n );\n }\n\n const staticInfo =\n sourceType === \"static\" ? await inspectStaticMetadataImage(modulePath) : undefined;\n\n this.metadataImages.set(key, {\n route,\n modulePath,\n pattern,\n kind,\n fileName,\n sourceType,\n staticInfo,\n source: \"file\",\n sourceRoot: source.root,\n });\n }\n\n for (const file of metadataRouteFiles) {\n const descriptor = getApplicationMetadataRouteDescriptor(\n path.basename(file, path.extname(file)),\n );\n if (!descriptor) continue;\n const route = parseRoutePath(file);\n const modulePath = path.join(appDir, file);\n const pattern = this.createRoutePattern(route);\n const key = `${descriptor.kind}:${pattern}`;\n const existing = this.metadataRoutes.get(key);\n\n if (existing?.sourceRoot === source.root) {\n throw new Error(\n `Duplicate ${descriptor.fileName} route \"${pattern}\". Found both ${existing.modulePath} and ${modulePath}. Keep only one .ts or .js metadata route per segment.`,\n );\n }\n\n this.metadataRoutes.set(key, {\n route,\n modulePath,\n pattern,\n ...descriptor,\n source: \"file\",\n sourceRoot: source.root,\n });\n }\n }\n\n private async discoverProgrammaticRoutes(source: FarmSourceRoot): Promise<void> {\n const manifests = await loadProgrammaticRouteManifests({\n root: source.root,\n srcDir: source.srcDir,\n loadModule: (filePath) => this.loadProgrammaticRoutesModule(filePath),\n });\n\n for (const { filePath, manifest } of manifests) {\n for (const definition of manifest.routes) {\n if (definition.kind === \"page\") {\n const route = parseProgrammaticRoutePath(definition.path, \"page\");\n const pattern = this.createRoutePattern(route);\n const existing = this.routes.get(pattern);\n\n if (existing?.sourceRoot === source.root) {\n throw new Error(\n `Duplicate page route \"${pattern}\". Found both ${existing.modulePath} and programmatic route in ${filePath}.`,\n );\n }\n\n const modulePath = createProgrammaticRouteModuleId(filePath, \"page\", definition.path);\n this.programmaticPages.set(modulePath, definition);\n this.registerPageRoute({\n route,\n modulePath,\n pattern,\n source: \"programmatic\",\n sourceRoot: source.root,\n });\n }\n\n if (definition.kind === \"layout\") {\n const route = parseProgrammaticRoutePath(definition.path, \"layout\");\n const pattern = this.createRoutePattern(route);\n const existing = this.layouts.get(pattern);\n if (existing?.sourceRoot === source.root) {\n throw new Error(\n `Duplicate layout route \"${pattern}\". Found both ${existing.modulePath} and programmatic route in ${filePath}.`,\n );\n }\n const modulePath = createProgrammaticRouteModuleId(filePath, \"layout\", definition.path);\n this.programmaticLayouts.set(modulePath, definition);\n this.layouts.set(pattern, {\n route,\n modulePath,\n pattern,\n source: \"programmatic\",\n sourceRoot: source.root,\n });\n }\n\n if (definition.kind === \"redirect\") {\n const route = parseProgrammaticRoutePath(definition.source, \"page\");\n const pattern = this.createRoutePattern(route);\n this.redirects.set(pattern, {\n route,\n pattern,\n definition,\n });\n }\n }\n }\n }\n\n private async loadProgrammaticRoutesModule(filePath: string): Promise<Record<string, any>> {\n if (this.viteServer) {\n const viteRoot = this.viteServer.config?.root || this.config.root || process.cwd();\n return await this.viteServer.ssrLoadModule(toViteModuleId(filePath, viteRoot));\n }\n\n const fileUrl = `file://${filePath}`;\n return await import(/* @vite-ignore */ fileUrl);\n }\n\n /**\n * Find all layouts that should wrap a given path\n */\n private findMatchingLayouts(pathname: string): RouteEntry[] {\n const matchingLayouts: RouteEntry[] = [];\n\n const sortedLayouts = Array.from(this.layouts.values()).sort((a, b) => {\n return a.route.segments.length - b.route.segments.length;\n });\n\n for (const layoutEntry of sortedLayouts) {\n if (matchRoutePrefix(pathname, layoutEntry.route.segments)) {\n matchingLayouts.push(layoutEntry);\n }\n }\n\n return matchingLayouts;\n }\n\n private findMatchingRouteSlots(pathname: string, interceptFrom?: string): MatchedRouteSlot[] {\n const groups = new Map<string, RouteSlotEntry[]>();\n for (const entry of this.routeSlots.values()) {\n if (!this.matchesRoutePrefix(pathname, entry.ownerPattern)) continue;\n const key = `${entry.ownerPattern}:${entry.name}`;\n const entries = groups.get(key) ?? [];\n entries.push(entry);\n groups.set(key, entries);\n }\n\n const normalizedFrom = interceptFrom\n ? this.toRoutePathname(new URL(interceptFrom, \"http://farm.local\").pathname)\n : undefined;\n const matches: MatchedRouteSlot[] = [];\n\n for (const entries of groups.values()) {\n const candidates = entries\n .filter((entry) => !entry.fallback)\n .filter(\n (entry) =>\n !entry.interception ||\n (normalizedFrom !== undefined &&\n this.matchesRoutePrefix(normalizedFrom, entry.ownerPattern)),\n )\n .map((entry) => ({\n entry,\n match: matchRoute(pathname, entry.route.segments),\n }))\n .filter((candidate) => candidate.match.matches)\n .sort((left, right) => {\n if (left.entry.interception !== right.entry.interception) {\n return left.entry.interception ? -1 : 1;\n }\n return compareRouteEntries(left.entry, right.entry);\n });\n\n const selected = candidates[0];\n if (selected) {\n matches.push({\n name: selected.entry.name,\n ownerPattern: selected.entry.ownerPattern,\n containerId: selected.entry.containerId,\n interception: selected.entry.interception,\n fallback: false,\n route: selected.entry,\n params: selected.match.params,\n });\n continue;\n }\n\n const fallback = entries.find((entry) => entry.fallback);\n if (fallback) {\n matches.push({\n name: fallback.name,\n ownerPattern: fallback.ownerPattern,\n containerId: fallback.containerId,\n interception: false,\n fallback: true,\n route: fallback,\n params: {},\n });\n }\n }\n\n return matches.sort((left, right) => {\n const ownerDifference = left.route.route.segments.length - right.route.route.segments.length;\n return ownerDifference || left.name.localeCompare(right.name);\n });\n }\n\n private matchesRoutePrefix(pathname: string, pattern: string): boolean {\n if (pattern === \"/\") return true;\n const patternSegments = parseRoutePath(`${pattern}/page.tsx`).segments;\n return matchRoutePrefix(pathname, patternSegments);\n }\n\n private findNearestBoundary(\n pathname: string,\n boundaries: Map<string, RouteEntry>,\n ): RouteEntry | null {\n const normalizedPath = pathname === \"/\" ? \"/\" : pathname.replace(/\\/$/, \"\");\n let bestMatch: RouteEntry | null = null;\n\n for (const boundaryEntry of boundaries.values()) {\n if (!matchRoutePrefix(normalizedPath, boundaryEntry.route.segments)) continue;\n\n if (!bestMatch || boundaryEntry.route.segments.length > bestMatch.route.segments.length) {\n bestMatch = boundaryEntry;\n }\n }\n\n return bestMatch;\n }\n\n /**\n * Log discovered routes for debugging\n */\n private logRoutes(): void {\n if (this.routes.size > 0) {\n logger.info(\"Registered routes:\");\n for (const [pattern, entry] of this.routes) {\n console.log(` ${pattern} -> ${entry.modulePath}`);\n }\n }\n\n if (this.layouts.size > 0) {\n logger.info(\"Registered layouts:\");\n for (const [pattern, entry] of this.layouts) {\n console.log(` ${pattern} -> ${entry.modulePath}`);\n }\n }\n }\n\n /**\n * Collect SSG pages for static generation\n *\n * Returns all pages marked with `export const ssg = true` along with\n * their pre-computed paths (for dynamic routes using getStaticPaths)\n */\n async collectSSGPages(): Promise<SSGCollectionResult> {\n const routes = Array.from(this.routes.values()).map((entry) => ({\n path: entry.pattern,\n filePath: entry.modulePath,\n isDynamic: entry.route.segments.some((seg) => seg.isDynamic),\n pattern: entry.pattern,\n }));\n\n const i18n = this.getI18nConfig();\n const result = await collectSSGPages(routes, (filePath) => this.loadRouteModule(filePath), {\n suggestStaticRendering: shouldSuggestStaticRenderingForI18n(i18n),\n });\n if (!i18n) {\n return result;\n }\n\n // A single static URL cannot safely vary by cookie or Accept-Language.\n // Keep locale-without-prefix pages dynamic so caches never pin one language.\n if (i18n.routing === \"none\") {\n return {\n ssg: [],\n ssr: Array.from(new Set([...result.ssr, ...result.ssg.map((page) => page.urlPath)])),\n };\n }\n\n return {\n ssg: result.ssg.flatMap((page) =>\n i18n.locales.map((locale) => ({\n ...page,\n urlPath: localizeFarmPathname(page.urlPath, locale, i18n),\n })),\n ),\n ssr: result.ssr.flatMap((routePath) =>\n i18n.locales.map((locale) => localizeFarmPathname(routePath, locale, i18n)),\n ),\n };\n }\n\n private toRoutePathname(pathname: string): string {\n const i18n = this.getI18nConfig();\n return i18n ? stripFarmLocaleFromPathname(pathname, i18n) : pathname;\n }\n\n private localizeRedirectDestination(destination: string, locale?: string): string {\n if (!locale || !destination.startsWith(\"/\") || destination.startsWith(\"//\")) {\n return destination;\n }\n const i18n = this.getI18nConfig();\n return i18n ? localizeFarmHref(destination, locale, i18n) : destination;\n }\n\n private getI18nConfig(): ResolvedFarmI18nConfig | undefined {\n const i18n = this.config.i18n;\n return i18n && typeof i18n === \"object\" && \"enabled\" in i18n && i18n.enabled ? i18n : undefined;\n }\n\n /**\n * Check if a route is SSG\n */\n async isRouteSSG(modulePath: string): Promise<boolean> {\n try {\n const mod = await this.loadRouteModule(modulePath);\n const rendering = await resolveRouteRenderingConfigFromFile(mod, modulePath);\n return rendering.ssg;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if a route has ISR (Incremental Static Regeneration)\n */\n async hasRouteISR(modulePath: string): Promise<boolean> {\n try {\n const mod = await this.loadRouteModule(modulePath);\n const rendering = await resolveRouteRenderingConfigFromFile(mod, modulePath);\n return rendering.ssg && typeof rendering.revalidate === \"number\" && rendering.revalidate > 0;\n } catch {\n return false;\n }\n }\n\n /**\n * Get revalidation interval for a route\n */\n async getRouteRevalidateInterval(modulePath: string): Promise<number | undefined> {\n try {\n const mod = await this.loadRouteModule(modulePath);\n const rendering = await resolveRouteRenderingConfigFromFile(mod, modulePath);\n return rendering.revalidate;\n } catch {\n return undefined;\n }\n }\n}\n\nexport function interpolateRedirectDestination(\n destination: string,\n params: Record<string, string>,\n): string {\n let result = destination;\n\n for (const [key, value] of Object.entries(params)) {\n // Longest token first: [[...key]] contains [...key], which contains [key].\n result = replaceAll(result, `[[...${key}]]`, value);\n result = replaceAll(result, `[...${key}]`, value);\n result = replaceAll(result, `[${key}]`, value);\n result = replaceAll(result, `:${key}*`, value);\n result = replaceAll(result, `:${key}`, value);\n }\n\n return result;\n}\n\nfunction getMetadataImageSuffix(pathname: string): {\n kind: MetadataImageKind;\n fileName: MetadataImageEntry[\"fileName\"];\n} | null {\n if (pathname === \"/opengraph-image\" || pathname.endsWith(\"/opengraph-image\")) {\n return { kind: \"opengraph\", fileName: \"opengraph-image\" };\n }\n\n if (pathname === \"/twitter-image\" || pathname.endsWith(\"/twitter-image\")) {\n return { kind: \"twitter\", fileName: \"twitter-image\" };\n }\n\n return null;\n}\n\nfunction getApplicationMetadataRouteDescriptor(fileName: string): {\n kind: ApplicationMetadataRouteKind;\n fileName: ApplicationMetadataRouteEntry[\"fileName\"];\n outputName: ApplicationMetadataRouteEntry[\"outputName\"];\n} | null {\n if (fileName === \"sitemap\") {\n return { kind: \"sitemap\", fileName: \"sitemap\", outputName: \"sitemap.xml\" };\n }\n if (fileName === \"robots\") {\n return { kind: \"robots\", fileName: \"robots\", outputName: \"robots.txt\" };\n }\n if (fileName === \"manifest\") {\n return { kind: \"manifest\", fileName: \"manifest\", outputName: \"manifest.webmanifest\" };\n }\n return null;\n}\n\nfunction getApplicationMetadataRouteSuffix(pathname: string): {\n kind: ApplicationMetadataRouteKind;\n outputName: ApplicationMetadataRouteEntry[\"outputName\"];\n} | null {\n for (const fileName of [\"sitemap\", \"robots\", \"manifest\"] as const) {\n const descriptor = getApplicationMetadataRouteDescriptor(fileName)!;\n if (\n pathname === `/${descriptor.outputName}` ||\n pathname.endsWith(`/${descriptor.outputName}`)\n ) {\n return { kind: descriptor.kind, outputName: descriptor.outputName };\n }\n }\n return null;\n}\n\nfunction routeSegmentsToPath(\n segments: ParsedRoute[\"segments\"],\n params: Record<string, string>,\n): string {\n if (segments.length === 0) return \"/\";\n\n const parts: string[] = [];\n for (const segment of segments) {\n if (!segment.isDynamic) {\n parts.push(segment.segment);\n continue;\n }\n\n const value = params[segment.segment];\n if (!value && segment.isOptional) continue;\n if (!value) {\n parts.push(`[${segment.segment}]`);\n continue;\n }\n\n parts.push(...value.split(\"/\").map((part) => encodeURIComponent(part)));\n }\n\n return `/${parts.join(\"/\")}`;\n}\n\nfunction replaceAll(input: string, search: string, replacement: string): string {\n return input.split(search).join(replacement);\n}\n\nasync function safeGlobFiles(pattern: string, cwd: string): Promise<string[]> {\n try {\n return await globFiles(pattern, cwd);\n } catch {\n return [];\n }\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { isFarmIslandStrategy, type FarmIslandStrategy } from \"../island\";\nimport type { FarmIsolatedClientHydrationMode } from \"../types\";\n\nfunction readIfExists(filePath: string): string | null {\n try {\n if (!filePath || !fs.existsSync(filePath)) {\n return null;\n }\n return fs.readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nexport function resolveModuleSourcePath(modulePath: string, root?: string): string | null {\n const candidates = new Set<string>();\n const withoutQuery = modulePath.split(\"?\")[0];\n\n if (modulePath) {\n candidates.add(modulePath);\n candidates.add(withoutQuery);\n\n if (modulePath.startsWith(\"file://\")) {\n try {\n candidates.add(fileURLToPath(modulePath));\n } catch {\n // ignore invalid file urls\n }\n }\n\n if (modulePath.startsWith(\"/@fs/\")) {\n // Vite emits /@fs/C:/... on Windows, where the leading slash is not part of the path.\n const fsPath = withoutQuery.slice(\"/@fs/\".length);\n candidates.add(path.normalize(/^[A-Za-z]:/.test(fsPath) ? fsPath : `/${fsPath}`));\n }\n }\n\n if (root && modulePath) {\n const normalized = withoutQuery.replace(/^\\/+/, \"\");\n candidates.add(path.join(root, normalized));\n candidates.add(path.resolve(root, normalized));\n }\n\n if (withoutQuery?.startsWith(\"/src/\")) {\n const normalized = withoutQuery.replace(/^\\/+/, \"\");\n candidates.add(path.join(process.cwd(), normalized));\n candidates.add(path.resolve(process.cwd(), normalized));\n }\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\nexport interface ClientModuleMetadata {\n isClientComponent: boolean;\n shouldHydrate: boolean;\n islandStrategy: FarmIslandStrategy | null;\n /**\n * Set when the module would hydrate (client imports or an explicit hydrate\n * export) but its default export is an async server component, which React\n * cannot run in a client root. Hydration is suppressed so the\n * server-rendered HTML stays intact instead of crashing to a blank page.\n */\n suppressedAsyncHydration?: true;\n}\n\nexport interface IsolatedClientBoundaryReference {\n /** Absolute source path. Converted to a Vite URL only at the manifest edge. */\n modulePath: string;\n islandStrategy: FarmIslandStrategy;\n}\n\nexport interface ClientModuleHydrationPlan extends ClientModuleMetadata {\n mode: FarmIsolatedClientHydrationMode;\n legacyShouldHydrate: boolean;\n legacyIslandStrategy: FarmIslandStrategy | null;\n estimatedIsolatedRootCount: number;\n isolatedHydrationEligible: boolean;\n hasIsolatedClientBoundaries: boolean;\n isolatedBoundaries: IsolatedClientBoundaryReference[];\n costGuardExceeded?: true;\n fallbackReason?: string;\n}\n\n/** @internal Largest measured statically bounded independent-root plan. */\nexport const FARM_ISOLATED_HYDRATION_MAX_BOUNDARIES = 4;\n\nfunction isolatedHydrationBoundaryLimit(): number {\n const benchmarkRoot = process.env.FARM_INTERNAL_ISOLATED_HYDRATION_BENCHMARK_ROOT;\n const benchmarkLimit = Number(process.env.FARM_INTERNAL_ISOLATED_HYDRATION_BENCHMARK_LIMIT);\n const resolvedBenchmarkRoot = benchmarkRoot ? path.resolve(benchmarkRoot) : null;\n const isBenchmarkFixture =\n process.env.FARM_INTERNAL_BENCHMARK === \"isolated-hydration\" &&\n resolvedBenchmarkRoot !== null &&\n (process.cwd() === resolvedBenchmarkRoot ||\n process.cwd().startsWith(`${resolvedBenchmarkRoot}${path.sep}`));\n return isBenchmarkFixture &&\n Number.isSafeInteger(benchmarkLimit) &&\n benchmarkLimit > FARM_ISOLATED_HYDRATION_MAX_BOUNDARIES\n ? benchmarkLimit\n : FARM_ISOLATED_HYDRATION_MAX_BOUNDARIES;\n}\n\ninterface ParsedClientModuleMetadata {\n isClientComponent: boolean;\n hasHydrateExport: boolean;\n islandStrategy: FarmIslandStrategy | null;\n}\n\nconst RESOLVABLE_SOURCE_EXTENSIONS = [\n \".svelte\",\n \".vue\",\n \".tsx\",\n \".ts\",\n \".jsx\",\n \".js\",\n \".mts\",\n \".mjs\",\n \".cts\",\n \".cjs\",\n] as const;\n\nexport function resolveFarmIsolatedClientHydrationMode(\n mode: FarmIsolatedClientHydrationMode | undefined,\n options: {\n serverComponents?: boolean;\n hasUnsupportedIntegrationProvider?: boolean;\n } = {},\n): FarmIsolatedClientHydrationMode {\n if (options.serverComponents) return \"off\";\n if (mode === \"enabled\" && options.hasUnsupportedIntegrationProvider) return \"off\";\n return mode ?? \"off\";\n}\n\nexport function hasUseClientDirective(content: string | null): boolean {\n if (!content) {\n return false;\n }\n\n // Fast path: directive at the very start of the file.\n const normalized = content.trimStart();\n if (normalized.startsWith(\"'use client'\") || normalized.startsWith('\"use client\"')) {\n return true;\n }\n if (!normalized.includes(\"use client\")) {\n return false;\n }\n\n // Directive-prologue semantics allow comments and other directives (e.g.\n // \"use strict\") before \"use client\". Scan the leading string-literal\n // statements with the comment-aware tokenizer.\n for (const token of tokenizeModuleSource(content)) {\n if (token.kind === \"string\") {\n if (token.value === \"use client\") {\n return true;\n }\n continue;\n }\n if (token.kind === \"punctuation\" && token.value === \";\") {\n continue;\n }\n return false;\n }\n return false;\n}\n\nexport function hasHydrateExport(content: string | null): boolean {\n if (!content) {\n return false;\n }\n if (/\\bexport\\s+const\\s+hydrate\\s*=\\s*true\\b/.test(content)) {\n return true;\n }\n // Export lists may carry several specifiers and as-renames; the module\n // opts in when any specifier's *exported* name is hydrate.\n for (const match of content.matchAll(/\\bexport\\s*\\{([^}]*)\\}/g)) {\n for (const specifier of match[1].split(\",\")) {\n const parts = specifier.trim().split(/\\s+as\\s+/);\n const exportedName = (parts[1] ?? parts[0])?.trim();\n if (exportedName === \"hydrate\") {\n return true;\n }\n }\n }\n return false;\n}\n\ninterface ModuleSourceToken {\n kind: \"identifier\" | \"string\" | \"punctuation\";\n value: string;\n line: number;\n}\n\nconst REGEXP_PREFIX_PUNCTUATION = new Set([\n \"(\",\n \"[\",\n \"{\",\n \",\",\n \";\",\n \":\",\n \"=\",\n \"!\",\n \"?\",\n \"&\",\n \"|\",\n \"+\",\n \"-\",\n \"*\",\n \"%\",\n \"^\",\n \"~\",\n \">\",\n]);\nconst REGEXP_PREFIX_KEYWORDS = new Set([\n \"await\",\n \"case\",\n \"delete\",\n \"do\",\n \"else\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"of\",\n \"return\",\n \"throw\",\n \"typeof\",\n \"void\",\n \"yield\",\n]);\n\nfunction canStartRegularExpression(previous: ModuleSourceToken | undefined): boolean {\n if (!previous) return true;\n return previous.kind === \"identifier\"\n ? REGEXP_PREFIX_KEYWORDS.has(previous.value)\n : REGEXP_PREFIX_PUNCTUATION.has(previous.value);\n}\n\nfunction skipRegularExpression(content: string, startIndex: number): number | null {\n let index = startIndex + 1;\n let inCharacterClass = false;\n\n while (index < content.length) {\n const character = content[index];\n if (character === \"\\n\" || character === \"\\r\") return null;\n if (character === \"\\\\\") {\n index += 2;\n continue;\n }\n if (character === \"[\") {\n inCharacterClass = true;\n index++;\n continue;\n }\n if (character === \"]\" && inCharacterClass) {\n inCharacterClass = false;\n index++;\n continue;\n }\n if (character === \"/\" && !inCharacterClass) {\n index++;\n while (index < content.length && /[A-Za-z]/.test(content[index])) index++;\n return index;\n }\n index++;\n }\n\n return null;\n}\n\nfunction tokenizeModuleSource(content: string): ModuleSourceToken[] {\n const tokens: ModuleSourceToken[] = [];\n let index = 0;\n let line = 1;\n\n while (index < content.length) {\n const character = content[index];\n if (/\\s/.test(character)) {\n if (character === \"\\n\") line++;\n index++;\n continue;\n }\n\n if (character === \"/\" && content[index + 1] === \"/\") {\n index += 2;\n while (index < content.length && content[index] !== \"\\n\") index++;\n continue;\n }\n if (character === \"/\" && content[index + 1] === \"*\") {\n index += 2;\n while (index < content.length) {\n if (content[index] === \"\\n\") line++;\n if (content[index] === \"*\" && content[index + 1] === \"/\") {\n index += 2;\n break;\n }\n index++;\n }\n continue;\n }\n\n if (character === \"/\" && canStartRegularExpression(tokens[tokens.length - 1])) {\n const endIndex = skipRegularExpression(content, index);\n if (endIndex !== null) {\n index = endIndex;\n continue;\n }\n }\n\n if (character === '\"' || character === \"'\") {\n const quote = character;\n const tokenLine = line;\n let value = \"\";\n index++;\n while (index < content.length) {\n const next = content[index];\n if (next === \"\\\\\") {\n value += next;\n if (index + 1 < content.length) value += content[index + 1];\n index += 2;\n continue;\n }\n if (next === quote) {\n index++;\n break;\n }\n if (next === \"\\n\") line++;\n value += next;\n index++;\n }\n tokens.push({ kind: \"string\", value, line: tokenLine });\n continue;\n }\n\n if (character === \"`\") {\n index++;\n while (index < content.length) {\n const next = content[index];\n if (next === \"\\\\\") {\n index += 2;\n continue;\n }\n if (next === \"`\") {\n index++;\n break;\n }\n if (next === \"\\n\") line++;\n index++;\n }\n continue;\n }\n\n if (/[A-Za-z_$]/.test(character)) {\n const start = index++;\n while (index < content.length && /[\\w$]/.test(content[index])) index++;\n tokens.push({ kind: \"identifier\", value: content.slice(start, index), line });\n continue;\n }\n\n tokens.push({ kind: \"punctuation\", value: character, line });\n index++;\n }\n\n return tokens;\n}\n\nfunction isIslandExportStart(tokens: ModuleSourceToken[], index: number): boolean {\n const token = tokens[index];\n const previous = tokens[index - 1];\n const startsStatement =\n !previous ||\n previous.value === \";\" ||\n previous.value === \"{\" ||\n previous.value === \"}\" ||\n token.line > previous.line;\n return (\n startsStatement &&\n token.value === \"export\" &&\n tokens[index + 1]?.value === \"const\" &&\n tokens[index + 2]?.value === \"island\"\n );\n}\n\nexport function getIslandStrategyExport(content: string | null): FarmIslandStrategy | null {\n if (!content) return null;\n\n const tokens = tokenizeModuleSource(content);\n for (let index = 0; index < tokens.length - 2; index++) {\n if (!isIslandExportStart(tokens, index)) continue;\n\n let valueIndex = index + 3;\n if (tokens[valueIndex]?.value === \":\") {\n while (valueIndex < tokens.length && tokens[valueIndex].value !== \"=\") valueIndex++;\n }\n if (tokens[valueIndex]?.value !== \"=\") break;\n valueIndex++;\n\n const literal = tokens[valueIndex];\n if (!literal || literal.kind !== \"string\" || !isFarmIslandStrategy(literal.value)) break;\n\n let trailingIndex = valueIndex + 1;\n if (tokens[trailingIndex]?.value === \"as\" && tokens[trailingIndex + 1]?.value === \"const\") {\n trailingIndex += 2;\n }\n const trailing = tokens[trailingIndex];\n if (trailing && trailing.value !== \";\" && trailing.line === literal.line) break;\n return literal.value;\n }\n\n if (tokens.some((_token, index) => isIslandExportStart(tokens, index))) {\n throw new Error(\n 'Farm island configuration must be a static \"load\", \"interaction\", \"visible\", or \"idle\" string literal.',\n );\n }\n\n return null;\n}\n\nexport function stripUseClientDirective(content: string): string {\n // Comments (and other directives) may precede \"use client\"; keep them and\n // remove only the directive itself.\n return content.replace(\n /^((?:\\s|\\/\\/[^\\n]*(?:\\n|$)|\\/\\*[\\s\\S]*?\\*\\/|(?:\"[^\"\\n]*\"|'[^'\\n]*')\\s*;?)*)([\"'])use client\\2\\s*;?\\s*/,\n \"$1\",\n );\n}\n\n/**\n * Best-effort static detection of an async default export, e.g.\n * `export default async function Page() {}`. Covers direct async\n * function/arrow default exports and `export default X` where `X` is a local\n * `async function X` or `X = async ...` declaration. Wrapped exports such as\n * `export default withAuth(Page)` cannot be resolved statically; the client\n * runtime guards against those at hydration time.\n */\nexport function hasAsyncDefaultExport(content: string | null): boolean {\n if (!content) return false;\n\n const tokens = tokenizeModuleSource(content);\n for (let index = 0; index < tokens.length - 2; index++) {\n const token = tokens[index];\n if (token.kind !== \"identifier\" || token.value !== \"export\") continue;\n if (tokens[index - 1]?.value === \".\") continue;\n if (tokens[index + 1]?.value !== \"default\") continue;\n\n const exported = tokens[index + 2];\n if (exported.kind === \"identifier\" && exported.value === \"async\") {\n return true;\n }\n if (\n exported.kind === \"identifier\" &&\n ![\"function\", \"class\"].includes(exported.value) &&\n tokens[index + 3]?.value !== \"(\" &&\n isAsyncLocalDeclaration(tokens, exported.value)\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction isAsyncLocalDeclaration(tokens: ModuleSourceToken[], name: string): boolean {\n for (let index = 0; index < tokens.length - 2; index++) {\n if (\n tokens[index].value === \"async\" &&\n tokens[index + 1]?.value === \"function\" &&\n tokens[index + 2]?.value === name\n ) {\n return true;\n }\n if (\n tokens[index].value === name &&\n tokens[index + 1]?.value === \"=\" &&\n tokens[index + 2]?.value === \"async\"\n ) {\n return true;\n }\n }\n return false;\n}\n\nfunction parseClientModuleMetadata(\n content: string | null,\n inspectIslandExport: boolean,\n): ParsedClientModuleMetadata {\n if (!content) {\n return {\n isClientComponent: false,\n hasHydrateExport: false,\n islandStrategy: null,\n };\n }\n\n const isClientComponent = hasUseClientDirective(content);\n const hasHydrate = hasHydrateExport(content);\n return {\n isClientComponent,\n hasHydrateExport: hasHydrate,\n islandStrategy:\n inspectIslandExport || isClientComponent || hasHydrate\n ? getIslandStrategyExport(content)\n : null,\n };\n}\n\nexport function getClientModuleMetadata(modulePath: string, root?: string): ClientModuleMetadata {\n const resolvedPath = resolveModuleSourcePath(modulePath, root);\n return inspectClientModuleMetadata(resolvedPath, root, new Set(), true);\n}\n\n/**\n * Resolve hydration ownership without changing the legacy metadata contract.\n * The old metadata remains the conservative fallback; only an enabled and\n * completely supported graph moves ownership to leaf client modules.\n */\nexport function getClientModuleHydrationPlan(\n modulePath: string,\n root: string | undefined,\n mode: FarmIsolatedClientHydrationMode = \"off\",\n): ClientModuleHydrationPlan {\n const metadata = getClientModuleMetadata(modulePath, root);\n const resolvedPath = resolveModuleSourcePath(modulePath, root);\n const content = readIfExists(resolvedPath ?? \"\");\n const parsed = parseClientModuleMetadata(content, true);\n const emptyPlan = (\n fallbackReason?: string,\n costGuardExceeded = false,\n estimatedIsolatedRootCount = 0,\n ): ClientModuleHydrationPlan => ({\n ...metadata,\n mode,\n legacyShouldHydrate: metadata.shouldHydrate,\n legacyIslandStrategy: metadata.islandStrategy,\n estimatedIsolatedRootCount,\n isolatedHydrationEligible: false,\n hasIsolatedClientBoundaries: false,\n isolatedBoundaries: [],\n ...(costGuardExceeded ? { costGuardExceeded: true as const } : {}),\n ...(fallbackReason ? { fallbackReason } : {}),\n });\n\n if (mode === \"off\") return emptyPlan();\n if (!resolvedPath) return emptyPlan(\"the owner source could not be resolved\");\n if (parsed.isClientComponent) {\n return emptyPlan(\"the owner is already a client component\");\n }\n if (parsed.hasHydrateExport) {\n return emptyPlan(\"the owner explicitly exports `hydrate = true`\");\n }\n\n const inspection = collectIsolatedClientBoundaries(resolvedPath, root);\n if (inspection.boundaries.length === 0) {\n return emptyPlan(inspection.fallbackReason);\n }\n if (inspection.fallbackReason) {\n return emptyPlan(\n inspection.fallbackReason,\n inspection.costGuardExceeded,\n inspection.estimatedBoundaryCount,\n );\n }\n const boundaryLimit = isolatedHydrationBoundaryLimit();\n if (inspection.estimatedBoundaryCount > boundaryLimit) {\n return emptyPlan(\n `the client graph can create ${inspection.estimatedBoundaryCount} isolated roots, above the measured limit of ${boundaryLimit}`,\n true,\n inspection.estimatedBoundaryCount,\n );\n }\n\n const enabled = mode === \"enabled\";\n return {\n ...metadata,\n shouldHydrate: enabled ? false : metadata.shouldHydrate,\n islandStrategy: enabled ? null : metadata.islandStrategy,\n mode,\n legacyShouldHydrate: metadata.shouldHydrate,\n legacyIslandStrategy: metadata.islandStrategy,\n estimatedIsolatedRootCount: inspection.estimatedBoundaryCount,\n isolatedHydrationEligible: true,\n hasIsolatedClientBoundaries: enabled,\n isolatedBoundaries: inspection.boundaries,\n };\n}\n\ninterface FarmIsolatedHydrationRoutePlan {\n mode: FarmIsolatedClientHydrationMode;\n shouldHydrate: boolean;\n islandStrategy: FarmIslandStrategy | null;\n legacyShouldHydrate: boolean;\n legacyIslandStrategy: FarmIslandStrategy | null;\n estimatedIsolatedRootCount: number;\n hasIsolatedClientBoundaries: boolean;\n isolatedBoundaries: IsolatedClientBoundaryReference[];\n costGuardExceeded?: true;\n fallbackReason?: string;\n}\n\ninterface FarmIsolatedHydrationRouteOwner {\n pattern: string;\n depth: number;\n metadata: FarmIsolatedHydrationRoutePlan;\n}\n\nfunction restoreRouteWideHydration(\n metadata: FarmIsolatedHydrationRoutePlan,\n fallbackReason?: string,\n): void {\n metadata.shouldHydrate = metadata.legacyShouldHydrate;\n metadata.islandStrategy = metadata.legacyIslandStrategy;\n metadata.hasIsolatedClientBoundaries = false;\n metadata.isolatedBoundaries = [];\n if (fallbackReason) {\n metadata.costGuardExceeded = true;\n metadata.fallbackReason = fallbackReason;\n }\n}\n\n/** @internal Applies the measured root budget to each complete layout and page chain. */\nexport function enforceFarmIsolatedHydrationRouteBudget(\n layouts: FarmIsolatedHydrationRouteOwner[],\n routes: FarmIsolatedHydrationRouteOwner[],\n layoutAppliesToRoute: (layoutPattern: string, routePattern: string) => boolean,\n): void {\n const boundaryLimit = isolatedHydrationBoundaryLimit();\n const sortedLayouts = [...layouts].sort((left, right) => left.depth - right.depth);\n\n for (const route of routes) {\n if (route.metadata.mode !== \"enabled\") continue;\n const applicableLayouts = sortedLayouts.filter((layout) =>\n layoutAppliesToRoute(layout.pattern, route.pattern),\n );\n if (applicableLayouts.some((layout) => layout.metadata.shouldHydrate)) continue;\n\n const layoutRootCount = applicableLayouts.reduce(\n (count, layout) =>\n count +\n (layout.metadata.hasIsolatedClientBoundaries\n ? layout.metadata.estimatedIsolatedRootCount\n : 0),\n 0,\n );\n const routeRootCount = route.metadata.hasIsolatedClientBoundaries\n ? route.metadata.estimatedIsolatedRootCount\n : 0;\n const totalRootCount = layoutRootCount + routeRootCount;\n if (totalRootCount <= boundaryLimit) continue;\n\n let accumulatedLayoutRoots = 0;\n const overflowingLayout = applicableLayouts.find((layout) => {\n if (layout.metadata.hasIsolatedClientBoundaries) {\n accumulatedLayoutRoots += layout.metadata.estimatedIsolatedRootCount;\n }\n return accumulatedLayoutRoots > boundaryLimit;\n });\n const fallbackReason = `the matched route ${route.pattern} can create ${totalRootCount} isolated roots, above the measured limit of ${boundaryLimit}`;\n\n if (overflowingLayout) {\n restoreRouteWideHydration(overflowingLayout.metadata, fallbackReason);\n } else if (route.metadata.hasIsolatedClientBoundaries) {\n restoreRouteWideHydration(route.metadata, fallbackReason);\n }\n }\n\n for (const layout of sortedLayouts) {\n const hasRouteWideAncestor = sortedLayouts.some(\n (ancestor) =>\n ancestor !== layout &&\n ancestor.depth < layout.depth &&\n ancestor.metadata.shouldHydrate &&\n layoutAppliesToRoute(ancestor.pattern, layout.pattern),\n );\n if (hasRouteWideAncestor && layout.metadata.hasIsolatedClientBoundaries) {\n restoreRouteWideHydration(layout.metadata);\n }\n }\n\n for (const route of routes) {\n const hasRouteWideLayout = sortedLayouts.some(\n (layout) =>\n layout.metadata.shouldHydrate && layoutAppliesToRoute(layout.pattern, route.pattern),\n );\n if (hasRouteWideLayout && route.metadata.hasIsolatedClientBoundaries) {\n restoreRouteWideHydration(route.metadata);\n }\n }\n}\n\n/**\n * The first compiler pass intentionally accepts only statically named React\n * component exports. A rejected module retains route-wide hydration.\n */\nexport function isIsolatableClientBoundarySource(content: string | null): boolean {\n if (!content || !hasUseClientDirective(content)) return false;\n if (/\\bexport\\s*\\{/.test(content) || /\\bexport\\s*\\*/.test(content)) return false;\n return (\n /\\bexport\\s+default\\s+(?!(?:type|interface)\\b)/.test(content) ||\n /\\bexport\\s+(?:async\\s+)?function\\s+[A-Z][$\\w]*/.test(content) ||\n /\\bexport\\s+(?:const|let|var|class)\\s+[A-Z][$\\w]*/.test(content)\n );\n}\n\nfunction getStaticImportBindings(content: string | null): Map<string, string[]> {\n const bindings = new Map<string, string[]>();\n if (!content) return bindings;\n const tokens = tokenizeModuleSource(content);\n\n for (let index = 0; index < tokens.length; index++) {\n if (tokens[index].value !== \"import\" || tokens[index - 1]?.value === \".\") continue;\n const first = tokens[index + 1];\n if (!first || first.value === \"type\" || first.value === \"(\" || first.kind === \"string\") {\n continue;\n }\n\n let fromIndex = -1;\n for (let cursor = index + 1; cursor < tokens.length; cursor++) {\n if (tokens[cursor].value === \";\") break;\n if (tokens[cursor].value === \"from\" && tokens[cursor + 1]?.kind === \"string\") {\n fromIndex = cursor;\n break;\n }\n }\n if (fromIndex === -1) continue;\n const specifier = tokens[fromIndex + 1].value;\n const clause = tokens.slice(index + 1, fromIndex);\n const localNames: string[] = [];\n\n if (clause[0]?.kind === \"identifier\" && clause[0].value !== \"type\") {\n localNames.push(clause[0].value);\n }\n const namespaceAs = clause.findIndex(\n (token, clauseIndex) => token.value === \"*\" && clause[clauseIndex + 1]?.value === \"as\",\n );\n if (namespaceAs !== -1 && clause[namespaceAs + 2]?.kind === \"identifier\") {\n localNames.push(clause[namespaceAs + 2].value);\n }\n\n const openingBrace = clause.findIndex((token) => token.value === \"{\");\n const closingBrace = clause.findIndex(\n (token, clauseIndex) => clauseIndex > openingBrace && token.value === \"}\",\n );\n if (openingBrace !== -1 && closingBrace !== -1) {\n let entryStart = openingBrace + 1;\n for (let cursor = entryStart; cursor <= closingBrace; cursor++) {\n if (cursor !== closingBrace && clause[cursor]?.value !== \",\") continue;\n const entry = clause.slice(entryStart, cursor).filter((token) => token.value !== \"type\");\n const asIndex = entry.findIndex((token) => token.value === \"as\");\n const local = asIndex === -1 ? entry[0] : entry[asIndex + 1];\n if (local?.kind === \"identifier\") localNames.push(local.value);\n entryStart = cursor + 1;\n }\n }\n\n bindings.set(\n specifier,\n Array.from(new Set([...(bindings.get(specifier) ?? []), ...localNames])),\n );\n }\n\n return bindings;\n}\n\nfunction countStaticJsxUses(content: string | null, localBindings: string[]): number {\n if (!content || localBindings.length === 0) return 0;\n const names = new Set(localBindings);\n const tokens = tokenizeModuleSource(content);\n let count = 0;\n for (let index = 0; index < tokens.length - 1; index++) {\n if (tokens[index].value === \"<\" && names.has(tokens[index + 1].value)) count++;\n }\n return count;\n}\n\nfunction findMatchingToken(\n tokens: ModuleSourceToken[],\n openingIndex: number,\n opening: string,\n closing: string,\n): number {\n let depth = 0;\n for (let index = openingIndex; index < tokens.length; index++) {\n if (tokens[index].value === opening) depth++;\n if (tokens[index].value !== closing) continue;\n depth--;\n if (depth === 0) return index;\n }\n return tokens.length - 1;\n}\n\nfunction containsClientJsx(\n tokens: ModuleSourceToken[],\n start: number,\n end: number,\n clientBindings: Set<string>,\n): boolean {\n for (let index = start; index < end; index++) {\n if (tokens[index].value === \"<\" && clientBindings.has(tokens[index + 1]?.value)) return true;\n }\n return false;\n}\n\nfunction findStatementEnd(tokens: ModuleSourceToken[], start: number): number {\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n const statementStarters = new Set([\n \"class\",\n \"const\",\n \"export\",\n \"function\",\n \"import\",\n \"let\",\n \"var\",\n ]);\n for (let index = start; index < tokens.length; index++) {\n const value = tokens[index].value;\n if (\n index > start &&\n parentheses === 0 &&\n brackets === 0 &&\n braces === 0 &&\n tokens[index].line > tokens[index - 1].line &&\n statementStarters.has(value)\n ) {\n return index;\n }\n if (value === \";\" && parentheses === 0 && brackets === 0 && braces === 0) return index;\n if (value === \"(\") parentheses++;\n if (value === \")\") parentheses--;\n if (value === \"[\") brackets++;\n if (value === \"]\") brackets--;\n if (value === \"{\") braces++;\n if (value === \"}\") braces--;\n }\n return tokens.length;\n}\n\nfunction getClientRenderingHelpers(\n tokens: ModuleSourceToken[],\n clientBindings: Set<string>,\n): Set<string> {\n const helperBodies = new Map<string, [start: number, end: number]>();\n for (let index = 0; index < tokens.length; index++) {\n let helperName: string | undefined;\n let bodyStart = -1;\n let bodyEnd = -1;\n\n if (tokens[index].value === \"function\" && tokens[index + 1]?.kind === \"identifier\") {\n helperName = tokens[index + 1].value;\n const parametersStart = tokens.findIndex(\n (token, tokenIndex) => tokenIndex > index + 1 && token.value === \"(\",\n );\n const parametersEnd =\n parametersStart === -1 ? index + 1 : findMatchingToken(tokens, parametersStart, \"(\", \")\");\n bodyStart = tokens.findIndex(\n (token, tokenIndex) => tokenIndex > parametersEnd && token.value === \"{\",\n );\n if (bodyStart !== -1) bodyEnd = findMatchingToken(tokens, bodyStart, \"{\", \"}\");\n } else if (\n (tokens[index].value === \"const\" ||\n tokens[index].value === \"let\" ||\n tokens[index].value === \"var\") &&\n tokens[index + 1]?.kind === \"identifier\"\n ) {\n helperName = tokens[index + 1].value;\n let assignmentIndex = -1;\n let arrowIndex = -1;\n for (let cursor = index + 2; cursor < tokens.length; cursor++) {\n if (tokens[cursor].value === \";\") break;\n if (assignmentIndex === -1 && tokens[cursor].value === \"=\") assignmentIndex = cursor;\n if (tokens[cursor].value === \"=\" && tokens[cursor + 1]?.value === \">\") {\n arrowIndex = cursor;\n break;\n }\n }\n if (arrowIndex !== -1) {\n bodyStart = arrowIndex + 2;\n bodyEnd =\n tokens[bodyStart]?.value === \"{\"\n ? findMatchingToken(tokens, bodyStart, \"{\", \"}\")\n : findStatementEnd(tokens, bodyStart);\n } else if (assignmentIndex !== -1) {\n bodyStart = assignmentIndex + 1;\n bodyEnd = findStatementEnd(tokens, bodyStart);\n }\n }\n\n if (helperName && bodyStart !== -1 && bodyEnd !== -1) {\n helperBodies.set(helperName, [bodyStart, bodyEnd]);\n }\n }\n\n const helpers = new Set<string>();\n let addedHelper = true;\n while (addedHelper) {\n addedHelper = false;\n for (const [helperName, [bodyStart, bodyEnd]] of helperBodies) {\n if (helpers.has(helperName)) continue;\n const rendersClientBoundary =\n containsClientJsx(tokens, bodyStart, bodyEnd, clientBindings) ||\n tokens.slice(bodyStart, bodyEnd).some((token) => helpers.has(token.value));\n if (!rendersClientBoundary) continue;\n helpers.add(helperName);\n addedHelper = true;\n }\n }\n return helpers;\n}\n\nfunction hasDynamicJsxCardinality(content: string | null, localBindings: string[]): boolean {\n if (!content || localBindings.length === 0) return false;\n const clientBindings = new Set(localBindings);\n const tokens = tokenizeModuleSource(content);\n const renderingHelpers = getClientRenderingHelpers(tokens, clientBindings);\n const containsDynamicRenderer = (start: number, end: number) =>\n containsClientJsx(tokens, start, end, clientBindings) ||\n tokens.slice(start, end).some((token) => renderingHelpers.has(token.value));\n\n for (let index = 0; index < tokens.length; index++) {\n let callStart = -1;\n if (\n tokens[index].value === \".\" &&\n (tokens[index + 1]?.value === \"map\" || tokens[index + 1]?.value === \"flatMap\") &&\n tokens[index + 2]?.value === \"(\"\n ) {\n callStart = index + 2;\n } else if (\n tokens[index].value === \"Array\" &&\n tokens[index + 1]?.value === \".\" &&\n tokens[index + 2]?.value === \"from\" &&\n tokens[index + 3]?.value === \"(\"\n ) {\n callStart = index + 3;\n }\n if (callStart !== -1) {\n const callEnd = findMatchingToken(tokens, callStart, \"(\", \")\");\n if (containsDynamicRenderer(callStart + 1, callEnd)) return true;\n index = callEnd;\n continue;\n }\n\n if (\n (tokens[index].value === \"for\" || tokens[index].value === \"while\") &&\n tokens[index + 1]?.value === \"(\"\n ) {\n const conditionEnd = findMatchingToken(tokens, index + 1, \"(\", \")\");\n const bodyStart = conditionEnd + 1;\n const bodyEnd =\n tokens[bodyStart]?.value === \"{\"\n ? findMatchingToken(tokens, bodyStart, \"{\", \"}\")\n : tokens.findIndex((token, tokenIndex) => tokenIndex > bodyStart && token.value === \";\");\n if (containsDynamicRenderer(bodyStart, bodyEnd === -1 ? tokens.length : bodyEnd)) return true;\n }\n }\n\n return false;\n}\n\nfunction collectIsolatedClientBoundaries(\n ownerPath: string,\n root: string | undefined,\n): {\n boundaries: IsolatedClientBoundaryReference[];\n estimatedBoundaryCount: number;\n costGuardExceeded?: boolean;\n fallbackReason?: string;\n} {\n const boundaries = new Map<string, IsolatedClientBoundaryReference>();\n const estimates = new Map<string, number>();\n const visiting = new Set<string>();\n let fallbackReason: string | undefined;\n let costGuardExceeded = false;\n const projectRoot = root ? path.resolve(root) : undefined;\n\n const visit = (moduleSourcePath: string): number => {\n if (fallbackReason) return 0;\n const cached = estimates.get(moduleSourcePath);\n if (cached !== undefined) return cached;\n if (visiting.has(moduleSourcePath)) return 0;\n visiting.add(moduleSourcePath);\n const content = readIfExists(moduleSourcePath);\n const parsed = parseClientModuleMetadata(content, false);\n\n if (parsed.isClientComponent) {\n if (projectRoot && !path.resolve(moduleSourcePath).startsWith(`${projectRoot}${path.sep}`)) {\n fallbackReason = `client boundary ${moduleSourcePath} is outside the application root`;\n return 0;\n }\n if (!isIsolatableClientBoundarySource(content)) {\n fallbackReason = `client boundary ${moduleSourcePath} uses an unsupported export shape`;\n return 0;\n }\n boundaries.set(moduleSourcePath, {\n modulePath: moduleSourcePath,\n islandStrategy: parsed.islandStrategy ?? \"load\",\n });\n estimates.set(moduleSourcePath, 1);\n visiting.delete(moduleSourcePath);\n return 1;\n }\n\n if (parsed.hasHydrateExport) {\n fallbackReason = `imported module ${moduleSourcePath} explicitly exports hydrate = true`;\n return 0;\n }\n\n const importedBindings = getStaticImportBindings(content);\n let estimatedBoundaryCount = 0;\n for (const specifier of new Set(getImportSpecifiers(content))) {\n const importedPath = resolveImportedModuleSourcePath(moduleSourcePath, specifier, root);\n if (!importedPath) continue;\n if (!specifier.startsWith(\".\") && !specifier.startsWith(\"/\")) {\n const packageMetadata = inspectPackageClientBoundary(importedPath, root, new Set());\n if (packageMetadata.shouldHydrate) {\n fallbackReason = `package client boundary ${specifier} cannot yet be isolated`;\n return 0;\n }\n continue;\n }\n const importedBoundaryCount = visit(importedPath);\n if (fallbackReason || importedBoundaryCount === 0) continue;\n const localBindings = importedBindings.get(specifier) ?? [];\n const staticUses = countStaticJsxUses(content, localBindings);\n if (staticUses > 0 && hasDynamicJsxCardinality(content, localBindings)) {\n fallbackReason = `the client boundary count imported from ${specifier} is data-dependent`;\n costGuardExceeded = true;\n return 0;\n }\n estimatedBoundaryCount += importedBoundaryCount * Math.max(1, staticUses);\n }\n\n estimates.set(moduleSourcePath, estimatedBoundaryCount);\n visiting.delete(moduleSourcePath);\n return estimatedBoundaryCount;\n };\n\n const estimatedBoundaryCount = visit(ownerPath);\n return {\n boundaries: Array.from(boundaries.values()),\n estimatedBoundaryCount,\n costGuardExceeded,\n fallbackReason,\n };\n}\n\nexport function isClientComponentModule(modulePath: string, root?: string): boolean {\n return getClientModuleMetadata(modulePath, root).isClientComponent;\n}\n\nexport function shouldHydrateModule(modulePath: string, root?: string): boolean {\n return getClientModuleMetadata(modulePath, root).shouldHydrate;\n}\n\nfunction inspectClientModuleMetadata(\n resolvedPath: string | null,\n root: string | undefined,\n visited: Set<string>,\n inspectIslandExport: boolean,\n): ClientModuleMetadata {\n if (!resolvedPath || visited.has(resolvedPath)) {\n return {\n isClientComponent: false,\n shouldHydrate: false,\n islandStrategy: null,\n };\n }\n\n visited.add(resolvedPath);\n\n const content = readIfExists(resolvedPath);\n const parsed = parseClientModuleMetadata(content, inspectIslandExport);\n if (parsed.isClientComponent) {\n return {\n isClientComponent: true,\n shouldHydrate: true,\n islandStrategy: parsed.islandStrategy ?? \"load\",\n };\n }\n\n let importsClientBoundary = false;\n let importedIslandStrategy: FarmIslandStrategy | null = null;\n for (const specifier of getImportSpecifiers(content)) {\n const importedPath = resolveImportedModuleSourcePath(resolvedPath, specifier, root);\n const importedMetadata =\n !specifier.startsWith(\".\") && !specifier.startsWith(\"/\")\n ? inspectPackageClientBoundary(importedPath, root, visited)\n : inspectClientModuleMetadata(importedPath, root, visited, false);\n if (importedMetadata.isClientComponent || importedMetadata.shouldHydrate) {\n importsClientBoundary = true;\n if (importedIslandStrategy === null) {\n importedIslandStrategy = importedMetadata.islandStrategy;\n } else if (importedIslandStrategy !== importedMetadata.islandStrategy) {\n // One route-level React root cannot honor multiple schedules safely.\n // Fall back to eager hydration when its imported boundaries disagree.\n importedIslandStrategy = \"load\";\n }\n }\n }\n\n const shouldHydrate = parsed.hasHydrateExport || importsClientBoundary;\n\n // React cannot run an async component in a client root: hydrating the route\n // module would throw, blank the server-rendered HTML, and re-run the page's\n // data fetching in a loop. Keep async server pages server-only even when\n // they import client components.\n if (shouldHydrate && hasAsyncDefaultExport(content)) {\n return {\n isClientComponent: false,\n shouldHydrate: false,\n islandStrategy: null,\n suppressedAsyncHydration: true,\n };\n }\n\n return {\n isClientComponent: false,\n shouldHydrate,\n islandStrategy: shouldHydrate\n ? (parsed.islandStrategy ?? importedIslandStrategy ?? \"load\")\n : null,\n };\n}\n\nfunction inspectPackageClientBoundary(\n resolvedPath: string | null,\n root: string | undefined,\n visited: Set<string>,\n): ClientModuleMetadata {\n if (!resolvedPath || visited.has(resolvedPath)) {\n return {\n isClientComponent: false,\n shouldHydrate: false,\n islandStrategy: null,\n };\n }\n\n visited.add(resolvedPath);\n const content = readIfExists(resolvedPath);\n const parsed = parseClientModuleMetadata(content, false);\n let importsClientBoundary = false;\n let importedIslandStrategy: FarmIslandStrategy | null = null;\n\n // Package entry points commonly re-export their React implementation from a\n // relative file. Follow only files inside that package entry graph: scanning\n // bare dependencies here would incorrectly turn server package APIs into\n // client boundaries because of unrelated transitive imports.\n for (const specifier of getImportSpecifiers(content)) {\n if (!specifier.startsWith(\".\") && !specifier.startsWith(\"/\")) continue;\n const importedPath = resolveImportedModuleSourcePath(resolvedPath, specifier, root);\n const importedMetadata = inspectPackageClientBoundary(importedPath, root, visited);\n if (!importedMetadata.shouldHydrate) continue;\n importsClientBoundary = true;\n if (importedIslandStrategy === null) {\n importedIslandStrategy = importedMetadata.islandStrategy;\n } else if (importedIslandStrategy !== importedMetadata.islandStrategy) {\n importedIslandStrategy = \"load\";\n }\n }\n\n const shouldHydrate =\n parsed.isClientComponent || parsed.hasHydrateExport || importsClientBoundary;\n return {\n isClientComponent: parsed.isClientComponent,\n shouldHydrate,\n islandStrategy: shouldHydrate\n ? (parsed.islandStrategy ?? importedIslandStrategy ?? \"load\")\n : null,\n };\n}\n\nfunction getImportSpecifiers(content: string | null): string[] {\n if (!content) return [];\n\n const tokens = tokenizeModuleSource(content);\n const matches = new Set<string>();\n let braceDepth = 0;\n\n for (let index = 0; index < tokens.length; index++) {\n const keyword = tokens[index];\n if (keyword.value === \"{\") {\n braceDepth++;\n continue;\n }\n if (keyword.value === \"}\") {\n braceDepth = Math.max(0, braceDepth - 1);\n continue;\n }\n if (braceDepth !== 0) continue;\n if (keyword.kind !== \"identifier\" || ![\"import\", \"export\"].includes(keyword.value)) {\n continue;\n }\n\n const previous = tokens[index - 1];\n if (previous?.value === \".\") continue;\n\n const first = tokens[index + 1];\n if (!first || first.value === \"type\" || first.value === \"(\" || first.value === \".\") {\n continue;\n }\n\n let specifier: string | undefined;\n if (keyword.value === \"import\" && first.kind === \"string\") {\n specifier = first.value;\n } else {\n if (keyword.value === \"export\" && first.value !== \"{\" && first.value !== \"*\") {\n continue;\n }\n\n let fromIndex = -1;\n for (let cursor = index + 1; cursor < tokens.length; cursor++) {\n const token = tokens[cursor];\n if (token.value === \";\") break;\n if (token.value === \"from\" && tokens[cursor + 1]?.kind === \"string\") {\n fromIndex = cursor;\n break;\n }\n }\n if (fromIndex === -1 || isTypeOnlyNamedClause(tokens, index + 1, fromIndex)) {\n continue;\n }\n specifier = tokens[fromIndex + 1].value;\n }\n\n if (!specifier || specifier.startsWith(\"node:\") || specifier.includes(\"?\")) {\n continue;\n }\n matches.add(specifier);\n }\n\n return Array.from(matches);\n}\n\nfunction isTypeOnlyNamedClause(\n tokens: ModuleSourceToken[],\n startIndex: number,\n endIndex: number,\n): boolean {\n if (tokens[startIndex]?.value !== \"{\") return false;\n\n const closingBraceIndex = tokens.findIndex(\n (token, index) => index > startIndex && index < endIndex && token.value === \"}\",\n );\n if (closingBraceIndex === -1) return false;\n\n let entryStartsAt = startIndex + 1;\n for (let index = entryStartsAt; index <= closingBraceIndex; index++) {\n if (index !== closingBraceIndex && tokens[index]?.value !== \",\") continue;\n const entry = tokens.slice(entryStartsAt, index);\n if (entry.length > 0 && entry[0].value !== \"type\") return false;\n entryStartsAt = index + 1;\n }\n return true;\n}\n\nfunction resolveImportedModuleSourcePath(\n importerPath: string,\n specifier: string,\n root?: string,\n): string | null {\n if (!specifier.startsWith(\".\") && !specifier.startsWith(\"/\")) {\n return resolvePackageModuleSourcePath(importerPath, specifier, root);\n }\n\n const candidates = new Set<string>();\n const basePath = specifier.startsWith(\".\")\n ? path.resolve(path.dirname(importerPath), specifier)\n : root\n ? path.resolve(root, specifier.replace(/^\\/+/, \"\"))\n : path.resolve(specifier);\n\n candidates.add(basePath);\n return resolveSourceCandidate(candidates);\n}\n\nfunction resolvePackageModuleSourcePath(\n importerPath: string,\n specifier: string,\n root?: string,\n): string | null {\n const packageParts = specifier.split(\"/\");\n const packageName = specifier.startsWith(\"@\")\n ? packageParts.slice(0, 2).join(\"/\")\n : packageParts[0];\n const packageSubpath = packageParts.slice(packageName.startsWith(\"@\") ? 2 : 1).join(\"/\");\n const packageDirectory = findPackageDirectory(importerPath, packageName, root);\n if (!packageDirectory) return null;\n\n const packageJsonPath = path.join(packageDirectory, \"package.json\");\n const packageJson = readPackageJson(packageJsonPath);\n const exportKey = packageSubpath ? `./${packageSubpath}` : \".\";\n const exportTarget = resolvePackageExport(packageJson?.exports, exportKey);\n const candidates = new Set<string>();\n\n if (exportTarget?.startsWith(\"./\")) {\n candidates.add(path.resolve(packageDirectory, exportTarget));\n }\n if (packageSubpath) {\n candidates.add(path.join(packageDirectory, packageSubpath));\n } else {\n for (const entry of [packageJson?.browser, packageJson?.module, packageJson?.main]) {\n if (typeof entry === \"string\") candidates.add(path.resolve(packageDirectory, entry));\n }\n candidates.add(path.join(packageDirectory, \"index\"));\n }\n\n return resolveSourceCandidate(candidates);\n}\n\nfunction findPackageDirectory(\n importerPath: string,\n packageName: string,\n root?: string,\n): string | null {\n const searchRoots = new Set<string>();\n let current = path.dirname(importerPath);\n while (true) {\n searchRoots.add(current);\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n if (root) {\n current = path.resolve(root);\n while (true) {\n searchRoots.add(current);\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n }\n\n for (const searchRoot of searchRoots) {\n const packageDirectory = path.join(searchRoot, \"node_modules\", packageName);\n if (fs.existsSync(path.join(packageDirectory, \"package.json\"))) {\n return packageDirectory;\n }\n }\n return null;\n}\n\nfunction readPackageJson(packageJsonPath: string): Record<string, any> | null {\n try {\n return JSON.parse(fs.readFileSync(packageJsonPath, \"utf8\"));\n } catch {\n return null;\n }\n}\n\nfunction resolvePackageExport(exportsField: unknown, exportKey: string): string | null {\n if (typeof exportsField === \"string\") {\n return exportKey === \".\" ? exportsField : null;\n }\n if (Array.isArray(exportsField)) {\n for (const candidate of exportsField) {\n const resolved = resolvePackageExport(candidate, exportKey);\n if (resolved) return resolved;\n }\n return null;\n }\n if (!exportsField || typeof exportsField !== \"object\") return null;\n\n const entries = Object.entries(exportsField as Record<string, unknown>);\n const subpathExports = entries.some(([key]) => key.startsWith(\".\"));\n if (subpathExports) {\n const exact = (exportsField as Record<string, unknown>)[exportKey];\n if (exact !== undefined) return resolveConditionalExportTarget(exact);\n\n for (const [key, value] of entries) {\n const wildcardIndex = key.indexOf(\"*\");\n if (wildcardIndex === -1) continue;\n const prefix = key.slice(0, wildcardIndex);\n const suffix = key.slice(wildcardIndex + 1);\n if (!exportKey.startsWith(prefix) || !exportKey.endsWith(suffix)) continue;\n const wildcard = exportKey.slice(prefix.length, exportKey.length - suffix.length);\n const target = resolveConditionalExportTarget(value);\n return target?.replace(\"*\", wildcard) ?? null;\n }\n return null;\n }\n\n return exportKey === \".\" ? resolveConditionalExportTarget(exportsField) : null;\n}\n\nfunction resolveConditionalExportTarget(value: unknown): string | null {\n if (typeof value === \"string\") return value;\n if (Array.isArray(value)) {\n for (const candidate of value) {\n const resolved = resolveConditionalExportTarget(candidate);\n if (resolved) return resolved;\n }\n return null;\n }\n if (!value || typeof value !== \"object\") return null;\n\n const conditions = value as Record<string, unknown>;\n // This metadata controls browser hydration, so prefer client-facing exports\n // regardless of declaration order while retaining Node-only package support.\n for (const condition of [\"browser\", \"import\", \"module\", \"node\", \"default\", \"require\"]) {\n if (conditions[condition] === undefined) continue;\n const resolved = resolveConditionalExportTarget(conditions[condition]);\n if (resolved) return resolved;\n }\n return null;\n}\n\nfunction resolveSourceCandidate(candidates: Iterable<string>): string | null {\n for (const candidate of candidates) {\n const paths = [candidate];\n for (const extension of RESOLVABLE_SOURCE_EXTENSIONS) {\n paths.push(`${candidate}${extension}`, path.join(candidate, `index${extension}`));\n }\n for (const sourcePath of paths) {\n try {\n if (fs.statSync(sourcePath).isFile()) return sourcePath;\n } catch {\n // Continue to the next candidate.\n }\n }\n }\n return null;\n}\n","/**\n * Controls when Farm loads and hydrates a server-rendered client boundary.\n *\n * `load` is the compatibility-first default. The deferred strategies keep the\n * server-rendered HTML visible while postponing the boundary's JavaScript.\n */\nexport type FarmIslandStrategy = \"load\" | \"interaction\" | \"visible\" | \"idle\";\n\nexport const FARM_ISLAND_STRATEGIES = [\"load\", \"interaction\", \"visible\", \"idle\"] as const;\n\nexport function isFarmIslandStrategy(value: unknown): value is FarmIslandStrategy {\n return FARM_ISLAND_STRATEGIES.includes(value as FarmIslandStrategy);\n}\n","import type { FarmIslandStrategy } from \"../island\";\nimport type { RouteRenderingConfig } from \"../ssg\";\n\n/**\n * A build-time rendering decision consumed by the browser router.\n *\n * The browser never inspects module source to choose a rendering path. It\n * executes this compact plan and only evaluates request-specific cache keys at\n * runtime.\n */\nexport interface FarmRouteRenderPlan {\n version: 1;\n output: \"html\";\n navigation: \"html-fragment\";\n hydration: \"none\" | \"route-island\" | \"layout-island\" | \"route-and-layout-islands\";\n islandStrategy: FarmIslandStrategy | null;\n cache: {\n mode: \"static\" | \"revalidate\" | \"dynamic\";\n revalidate?: number;\n };\n}\n\nexport interface FarmRouteRenderPlanInput {\n pageShouldHydrate?: boolean;\n layoutShouldHydrate?: boolean;\n islandStrategy?: FarmIslandStrategy | null;\n rendering?: Pick<RouteRenderingConfig, \"ssg\" | \"ppr\" | \"revalidate\">;\n}\n\n/** Create a deterministic route plan during manifest generation. */\nexport function createFarmRouteRenderPlan(\n input: FarmRouteRenderPlanInput = {},\n): FarmRouteRenderPlan {\n const pageShouldHydrate = input.pageShouldHydrate === true;\n const layoutShouldHydrate = input.layoutShouldHydrate === true;\n const hydration = pageShouldHydrate\n ? layoutShouldHydrate\n ? \"route-and-layout-islands\"\n : \"route-island\"\n : layoutShouldHydrate\n ? \"layout-island\"\n : \"none\";\n\n const rendering = input.rendering;\n const cache = rendering?.ssg\n ? typeof rendering.revalidate === \"number\" && rendering.revalidate > 0\n ? { mode: \"revalidate\" as const, revalidate: rendering.revalidate }\n : { mode: \"static\" as const }\n : { mode: \"dynamic\" as const };\n\n return {\n version: 1,\n output: \"html\",\n navigation: \"html-fragment\",\n hydration,\n islandStrategy: hydration === \"none\" ? null : (input.islandStrategy ?? \"load\"),\n cache,\n };\n}\n\n/**\n * Cache policy for a fragment response. Explicit static rendering is safe to\n * share; dynamic output remains private even when the browser caches it.\n */\nexport function getFarmFragmentCacheControl(plan: FarmRouteRenderPlan): string {\n if (plan.cache.mode === \"static\") {\n return \"public, max-age=0, s-maxage=31536000, immutable\";\n }\n if (plan.cache.mode === \"revalidate\") {\n const seconds = Math.max(1, plan.cache.revalidate ?? 1);\n return `public, max-age=0, s-maxage=${seconds}, stale-while-revalidate=${seconds}`;\n }\n return \"private, max-age=0\";\n}\n\nexport function parseFarmLayoutChainHeader(value: string | null): string[] {\n if (!value || value.length > 8_192) return [];\n try {\n const parsed = JSON.parse(value);\n if (!Array.isArray(parsed) || parsed.length > 64) return [];\n return parsed.filter(\n (pattern): pattern is string =>\n typeof pattern === \"string\" && pattern.startsWith(\"/\") && pattern.length <= 512,\n );\n } catch {\n return [];\n }\n}\n\nexport function getSharedLayoutPrefixLength(current: string[], next: string[]): number {\n let index = 0;\n while (index < current.length && index < next.length && current[index] === next[index]) {\n index++;\n }\n return index;\n}\n","import { createHash } from \"node:crypto\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { imageSize } from \"image-size\";\n\nexport const STATIC_METADATA_IMAGE_EXTENSIONS = [\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\"] as const;\n\nexport type StaticMetadataImageExtension = (typeof STATIC_METADATA_IMAGE_EXTENSIONS)[number];\n\nexport interface StaticMetadataImageInfo {\n extension: StaticMetadataImageExtension;\n contentType: string;\n width: number;\n height: number;\n alt?: string;\n hash: string;\n byteLength: number;\n}\n\nconst CONTENT_TYPES: Record<StaticMetadataImageExtension, string> = {\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n};\n\nexport function isStaticMetadataImageFile(filePath: string): boolean {\n return getStaticMetadataImageExtension(filePath) !== null;\n}\n\nexport async function inspectStaticMetadataImage(\n filePath: string,\n): Promise<StaticMetadataImageInfo> {\n const extension = getStaticMetadataImageExtension(filePath);\n if (!extension) {\n throw new Error(`Unsupported static metadata image: ${filePath}`);\n }\n\n const bytes = await readFile(filePath);\n let dimensions: ReturnType<typeof imageSize>;\n\n try {\n dimensions = imageSize(bytes);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(`Could not read metadata image ${filePath}: ${reason}`);\n }\n\n if (!dimensions.width || !dimensions.height) {\n throw new Error(`Could not determine metadata image dimensions for ${filePath}`);\n }\n\n const alt = await readAltText(filePath);\n\n return {\n extension,\n contentType: CONTENT_TYPES[extension],\n width: dimensions.width,\n height: dimensions.height,\n alt,\n hash: createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 16),\n byteLength: bytes.byteLength,\n };\n}\n\nexport function getStaticMetadataImageAltPath(filePath: string): string {\n return path.join(\n path.dirname(filePath),\n `${path.basename(filePath, path.extname(filePath))}.alt.txt`,\n );\n}\n\nfunction getStaticMetadataImageExtension(filePath: string): StaticMetadataImageExtension | null {\n const extension = path.extname(filePath).slice(1).toLowerCase();\n return STATIC_METADATA_IMAGE_EXTENSIONS.includes(extension as StaticMetadataImageExtension)\n ? (extension as StaticMetadataImageExtension)\n : null;\n}\n\nasync function readAltText(filePath: string): Promise<string | undefined> {\n try {\n const value = (await readFile(getStaticMetadataImageAltPath(filePath), \"utf8\")).trim();\n return value || undefined;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n","import type { ParsedRoute } from \"../types\";\nimport { parseRoutePath } from \"../utils\";\n\nexport type RouteSlotConvention = {\n name: string;\n ownerRoute: ParsedRoute;\n route: ParsedRoute;\n interception: boolean;\n fallback: boolean;\n};\n\nconst SLOT_SEGMENT = /^@([A-Za-z][A-Za-z0-9_-]*)$/;\n\n/**\n * Parse a page nested below an `@slot` directory without adding the slot name\n * or interception marker to its public URL.\n */\nexport function parseRouteSlotFile(filePath: string): RouteSlotConvention | null {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const parts = normalized.split(\"/\").filter(Boolean);\n const fileName = parts.at(-1) ?? \"\";\n const baseName = fileName.replace(/\\.(tsx?|jsx?|vue|svelte)$/, \"\");\n if (baseName !== \"page\" && baseName !== \"default\") return null;\n\n const slotIndex = parts.findIndex((part) => SLOT_SEGMENT.test(part));\n if (slotIndex < 0) return null;\n if (parts.slice(slotIndex + 1, -1).some((part) => SLOT_SEGMENT.test(part))) {\n throw new Error(`Nested route slots are not supported in \"${filePath}\"`);\n }\n\n const slotMatch = parts[slotIndex]!.match(SLOT_SEGMENT);\n const name = slotMatch?.[1];\n if (!name) return null;\n\n const ownerParts = parts.slice(0, slotIndex);\n const contentParts = parts.slice(slotIndex + 1, -1);\n const marker = parseInterceptionMarker(contentParts[0]);\n let targetBase = ownerParts;\n let targetParts = contentParts;\n\n if (marker) {\n targetBase =\n marker.root === true ? [] : ownerParts.slice(0, Math.max(0, ownerParts.length - marker.up));\n targetParts = [...(marker.remainder ? [marker.remainder] : []), ...contentParts.slice(1)];\n }\n\n const ownerFile = [...ownerParts, \"layout.tsx\"].join(\"/\");\n const routeFile = [\n ...(baseName === \"default\" ? ownerParts : targetBase),\n ...(baseName === \"default\" ? [] : targetParts),\n \"page.tsx\",\n ].join(\"/\");\n\n return {\n name,\n ownerRoute: parseRoutePath(ownerFile || \"layout.tsx\"),\n route: parseRoutePath(routeFile || \"page.tsx\"),\n interception: marker !== null,\n fallback: baseName === \"default\",\n };\n}\n\nexport function createRouteSlotContainerId(name: string, ownerPattern: string): string {\n const owner =\n ownerPattern === \"/\"\n ? \"root\"\n : ownerPattern\n .replace(/^\\//, \"\")\n .replace(/[^A-Za-z0-9_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return `__farm_slot_${name}_${owner || \"root\"}__`;\n}\n\nfunction parseInterceptionMarker(\n segment: string | undefined,\n): { up: number; root?: boolean; remainder: string } | null {\n if (!segment) return null;\n if (segment.startsWith(\"(...)\")) {\n return {\n up: 0,\n root: true,\n remainder: segment.slice(5),\n };\n }\n if (segment.startsWith(\"(.)\")) {\n return {\n up: 0,\n remainder: segment.slice(3),\n };\n }\n\n let remainder = segment;\n let up = 0;\n while (remainder.startsWith(\"(..)\")) {\n up += 1;\n remainder = remainder.slice(4);\n }\n return up > 0 ? { up, remainder } : null;\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type {\n FarmConfig,\n FarmRequest,\n FarmResponse,\n LoadingProps,\n PageProps,\n RouteModule,\n SSGPage,\n} from \"../types\";\nimport type { MatchedRouteSlot, RouteManager } from \"../routing/route-manager\";\nimport { logger, toViteModuleId } from \"../utils\";\nimport { collectDevStylesheetUrls } from \"./dev-styles\";\nimport {\n composeFarmFullDocument,\n extractFarmFullDocument,\n opensFarmFullDocument,\n} from \"./full-document\";\nimport { getClientModuleMetadata } from \"../utils/client-component\";\nimport { Writable } from \"stream\";\nimport {\n _clearCurrentMiddlewareContext,\n _clearCurrentMiddlewareData,\n _runWithMiddlewareContext,\n _runWithMiddlewareData,\n} from \"../middleware/server\";\nimport { getRequestContextSnapshot } from \"../request-context\";\nimport { matchSSGPage, resolveRouteRenderingConfigFromFile } from \"../ssg\";\nimport {\n getIntegrationProviders,\n getRegisteredIntegrationAPIManifest,\n isFarmIntegrationProviderComponentReference,\n} from \"../integrations\";\nimport {\n _runWithCurrentRequest,\n createWebRequestFromFarmRequest,\n resolveFarmRequestURL,\n} from \"./request\";\nimport { createFarmCacheKey, getFarmDataCache, normalizeRevalidatePath } from \"../cache\";\nimport { resolveFarmNotFoundComponentPath } from \"../not-found\";\nimport { getFarmAppDirectories } from \"../layers\";\nimport { emitFarmEvent } from \"../observability\";\nimport {\n getFarmRedirectError,\n isFarmNotFoundError,\n isFarmRedirectError,\n} from \"../navigation-errors\";\nimport {\n addMetadataImageReference,\n mergeMetadata,\n renderMetadataHead,\n type FarmMetadataImageReference,\n type MetadataImageKind,\n} from \"../metadata\";\nimport { resolveFarmRouteContext, withFarmRouteContext } from \"../route-context\";\nimport { searchParamsToObject } from \"../search-params\";\nimport { prepareDeferredData, snapshotDeferredData, type DeferredRecord } from \"../deferred\";\nimport { createFarmDeploymentCookie, FARM_DEPLOYMENT_ID_HEADER } from \"../deployment\";\nimport type { StaticMetadataImageInfo } from \"../static-metadata-image\";\nimport {\n _runWithFarmI18nRequest,\n getFarmI18nClientSnapshot,\n type FarmI18nClientSnapshot,\n type FarmI18nRuntime,\n} from \"../i18n/server\";\nimport { createFarmLocaleCookie, getFarmLocaleVaryHeaders } from \"../i18n/resolver\";\nimport { localizeFarmHref, localizeFarmPathname } from \"../i18n/routing\";\nimport { sendWebResponse } from \"./response\";\nimport { matchesFarmIfNoneMatch } from \"../server-http\";\nimport { renderFarmFontDevHead } from \"../font-vite\";\nimport { createFarmMetadataImageResponse } from \"../metadata-image\";\nimport { createFarmMetadataRouteResponse } from \"../metadata-route\";\nimport {\n resolveFarmTrailingSlashRedirect,\n setFarmTrailingSlashPreference,\n} from \"../trailing-slash\";\nimport { applyFarmBasePath, setFarmBasePath } from \"../base-path\";\nimport { DEFAULT_NOT_FOUND_STYLES } from \"../components/not-found-styles\";\nimport {\n createDefaultErrorMarkup,\n getDefaultErrorStatusText,\n resolveDefaultErrorStatus,\n} from \"../components/error-page\";\nimport { createFarmThemeDocumentParts } from \"../theme/server-runtime\";\nimport { getTheme as getFarmTheme } from \"../theme/server\";\nimport { FARM_VERSION } from \"../version\";\nimport type { ViteDevServer } from \"vite\";\nimport {\n getFarmRendererCapabilities,\n getFarmRendererComponentExtensions,\n isReactRenderer,\n readFarmRendererWebStream,\n resolveFarmRendererModule,\n type FarmServerRendererRuntime,\n} from \"../renderer\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmIslandStrategy } from \"../island\";\nimport { createDefaultErrorDiagnostics } from \"./error-diagnostics\";\n\nlet cachedClerkProvider: { ClerkProvider: any } | null = null;\n\nconst importRuntimeModule = new Function(\"specifier\", \"return import(specifier);\") as (\n specifier: string,\n) => Promise<any>;\n\ninterface CachedSSGPage {\n html: string;\n document: boolean;\n}\n\ninterface CachedPPRShell {\n html: string;\n}\n\nexport function shouldServePrerenderedPage(\n nodeEnv: string | undefined,\n method: string | undefined,\n): boolean {\n if (nodeEnv !== \"production\") return false;\n const normalizedMethod = (method || \"GET\").toUpperCase();\n return normalizedMethod === \"GET\" || normalizedMethod === \"HEAD\";\n}\n\nfunction formatSSGManifestError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction parseSSGManifest(content: string, manifestPath: string): SSGPage[] {\n let manifest: unknown;\n\n try {\n manifest = JSON.parse(content);\n } catch (error) {\n throw new Error(\n `Failed to parse SSG manifest at ${manifestPath}: ${formatSSGManifestError(error)}`,\n );\n }\n\n if (!Array.isArray(manifest)) {\n throw new Error(`Invalid SSG manifest at ${manifestPath}: expected an array of pages.`);\n }\n\n for (const [index, page] of manifest.entries()) {\n if (!page || typeof page !== \"object\" || Array.isArray(page)) {\n throw new Error(`Invalid SSG manifest at ${manifestPath}: page ${index} must be an object.`);\n }\n\n const entry = page as Record<string, unknown>;\n if (typeof entry.urlPath !== \"string\") {\n throw new Error(\n `Invalid SSG manifest at ${manifestPath}: page ${index} must have a string urlPath.`,\n );\n }\n if (\n !entry.params ||\n typeof entry.params !== \"object\" ||\n Array.isArray(entry.params) ||\n Object.values(entry.params).some((value) => typeof value !== \"string\")\n ) {\n throw new Error(\n `Invalid SSG manifest at ${manifestPath}: page ${index} must have string params.`,\n );\n }\n if (\n entry.revalidate !== undefined &&\n (typeof entry.revalidate !== \"number\" ||\n !Number.isFinite(entry.revalidate) ||\n entry.revalidate <= 0)\n ) {\n throw new Error(\n `Invalid SSG manifest at ${manifestPath}: page ${index} revalidate must be a positive number.`,\n );\n }\n }\n\n return manifest as SSGPage[];\n}\n\ninterface PPRShellCacheOptions {\n pathname: string;\n search: string;\n /**\n * Locale the shell was rendered in, resolved once when these options are built.\n * The shell carries `lang`, `dir`, the message catalog and the alternate links, so\n * it cannot be shared across locales. It is captured rather than read at write\n * time because the shell is stored from a streaming `onComplete` callback, which\n * can run outside the request context that resolved the locale.\n */\n locale: string;\n revalidate?: number;\n}\n\nexport interface FarmNavigationFragmentLayout {\n pattern: string;\n module: { default?: any };\n}\n\nexport interface FarmNavigationFragmentSlot {\n name: string;\n ownerPattern: string;\n containerId: string;\n module: { default?: any };\n props: Record<string, unknown>;\n}\n\nexport interface FarmNavigationFragmentInput {\n PageComponent: any;\n LoadingComponent?: any;\n pageProps: Record<string, unknown>;\n params: Record<string, string>;\n layouts: FarmNavigationFragmentLayout[];\n /** First destination layout that changed compared with the active shell. */\n layoutStartIndex?: number;\n slots?: FarmNavigationFragmentSlot[];\n pageShouldHydrate: boolean;\n layoutShouldHydrate: boolean;\n islandStrategy?: FarmIslandStrategy | null;\n}\n\nconst warnedSuppressedAsyncHydrationModules = new Set<string>();\n\nfunction warnSuppressedAsyncHydrationOnce(modulePath: string): void {\n if (warnedSuppressedAsyncHydrationModules.has(modulePath)) return;\n warnedSuppressedAsyncHydrationModules.add(modulePath);\n logger.warn(\n `${modulePath} is an async server component that imports client components. ` +\n `React cannot hydrate async components in the browser, so this route stays ` +\n `server-rendered and its client imports are not interactive. Move the ` +\n `interactive UI into a \"use client\" child rendered by a synchronous page, ` +\n `or enable experimental server components support.`,\n );\n}\n\n// Routes whose layout was observed to render a full `<html>` document. The\n// streaming path can't rewrite a document after its shell is flushed, so once a\n// route is seen to be full-document it is served through the buffered path\n// (which composes the document correctly) on every subsequent request.\nconst fullDocumentRoutes = new Set<string>();\n\nlet warnedFullDocumentLayout = false;\n\nfunction warnFarmFullDocumentLayout(): void {\n if (warnedFullDocumentLayout) return;\n warnedFullDocumentLayout = true;\n logger.warn(\n `A root layout returned a full <html> document. Farm.js owns the document ` +\n `shell, so a layout should return a fragment (its children) — like the docs ` +\n `example — and let the framework provide <html>/<head>/<body>. The document ` +\n `has been composed into the response, but returning a fragment avoids the ` +\n `ambiguity and keeps dev and production identical.`,\n );\n}\n\nfunction hasRequestHeader(req: FarmRequest, name: string): boolean {\n const value = req.headers[name.toLowerCase()];\n return Array.isArray(value) ? value.length > 0 : Boolean(value);\n}\n\nfunction serializeInlineValue(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, \"\\\\u003c\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction appendResponseHeader(res: FarmResponse, name: string, value: string): void {\n const current = res.getHeader(name);\n if (current === undefined) {\n res.setHeader(name, value);\n } else if (Array.isArray(current)) {\n res.setHeader(name, [...current.map(String), value]);\n } else {\n res.setHeader(name, [String(current), value]);\n }\n}\n\nfunction appendResponseVary(res: FarmResponse, value: string): void {\n const current = res.getHeader(\"Vary\");\n const values = new Set(\n (Array.isArray(current) ? current.join(\",\") : String(current || \"\"))\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean),\n );\n values.add(value);\n res.setHeader(\"Vary\", Array.from(values).join(\", \"));\n}\n\nfunction renderI18nAlternateLinks(requestPath: string, snapshot: FarmI18nClientSnapshot): string {\n if (snapshot.routing === \"none\") return \"\";\n const url = new URL(requestPath, \"http://farm.local\");\n const links = snapshot.locales.map((locale) => {\n const href = localizeFarmPathname(url.pathname, locale, snapshot);\n return `<link rel=\"alternate\" hreflang=\"${escapeHtmlAttribute(locale)}\" href=\"${escapeHtmlAttribute(href)}\">`;\n });\n links.push(\n `<link rel=\"alternate\" hreflang=\"x-default\" href=\"${escapeHtmlAttribute(\n localizeFarmPathname(url.pathname, snapshot.defaultLocale, snapshot),\n )}\">`,\n );\n return links.join(\"\");\n}\n\nfunction findPPRDynamicChunkIndex(chunk: string): number {\n const markerIndexes = [\n chunk.indexOf('id=\"S:'),\n chunk.indexOf(\"id='S:\"),\n chunk.indexOf(\"$RC(\"),\n chunk.indexOf(\"$RS(\"),\n chunk.indexOf(\"$RV(\"),\n chunk.indexOf(\"$RX(\"),\n ].filter((index) => index >= 0);\n\n if (markerIndexes.length === 0) {\n return -1;\n }\n\n const markerIndex = Math.min(...markerIndexes);\n const tagStart = chunk.lastIndexOf(\"<\", markerIndex);\n return tagStart >= 0 ? tagStart : markerIndex;\n}\n\nfunction createPPRRefreshScript(): string {\n return `<script>(function(){if(window.__FARM_PPR_REFRESHING__)return;window.__FARM_PPR_REFRESHING__=true;function replaceRoot(html){var doc=new DOMParser().parseFromString(html,\"text/html\");var next=doc.getElementById(\"root\");var current=document.getElementById(\"root\");if(!next||!current)return;current.innerHTML=next.innerHTML;}fetch(window.location.href,{credentials:\"same-origin\",headers:{\"x-farm-ppr-refresh\":\"1\"}}).then(function(response){return response.ok?response.text():null;}).then(function(html){if(html)replaceRoot(html);}).catch(function(){});})();</script>`;\n}\n\nfunction createPreHydrationClickQueueScript(): string {\n return `<script>(function(){if(window.__FARM_PREHYDRATION_CLICK_QUEUE__)return;var queue=[];window.__FARM_PREHYDRATION_CLICK_QUEUE__=queue;window.__FARM_HYDRATED__=false;document.documentElement.dataset.farmHydrated=\"false\";function isModified(event){return !!(event.metaKey||event.altKey||event.ctrlKey||event.shiftKey)}function closestQueuedTarget(target){while(target&&target!==document.documentElement){if(target.matches&&target.matches('button,[role=\"button\"],input[type=\"button\"],input[type=\"submit\"],input[type=\"reset\"]'))return target;target=target.parentElement}return null}document.addEventListener(\"click\",function(event){if(window.__FARM_HYDRATED__)return;if(event.defaultPrevented||event.button!==0||isModified(event))return;var target=closestQueuedTarget(event.target);if(!target||target.closest&&target.closest(\"a[href]\")||target.closest&&target.closest('[data-farm-island-hydrated=\"true\"]'))return;if(queue.some(function(item){return item.target===target}))return;queue.push({target:target,createdAt:Date.now()});document.dispatchEvent(new CustomEvent(\"farm:island-interaction\",{detail:{target:target}}));event.preventDefault();event.stopImmediatePropagation()},true);})();</script>`;\n}\n\nfunction createDocumentFooter(options: {\n suspenseRevealFallback: string;\n refreshPPR?: boolean;\n deferredHydrationScript?: string;\n}): string {\n return `</div>\n ${options.suspenseRevealFallback}\n ${options.refreshPPR ? createPPRRefreshScript() : \"\"}\n ${options.deferredHydrationScript || \"\"}\n <script type=\"module\" src=\"/@farm/client.js\"></script>\n</body>\n</html>`;\n}\n\nfunction createDeferredHydrationScript(records: readonly DeferredRecord[]): string {\n if (records.length === 0) return \"\";\n return `<script>window.__FARM_DEFERRED_DATA__=${serializeInlineValue(\n snapshotDeferredData(records),\n )};</script>`;\n}\n\nfunction toMiddlewareMap(input: unknown): Map<string, any> {\n if (input instanceof Map) {\n return new Map(input as Map<string, any>);\n }\n if (input && typeof input === \"object\") {\n return new Map(Object.entries(input as Record<string, any>));\n }\n return new Map<string, any>();\n}\n\nfunction isWebResponse(value: unknown): value is Response {\n return (\n typeof Response !== \"undefined\" &&\n value instanceof Response &&\n typeof value.arrayBuffer === \"function\"\n );\n}\n\nasync function parseRouteModuleProps(\n routeModule: RouteModule,\n input: {\n props: PageProps;\n search: Record<string, string | string[] | undefined>;\n routePath: string;\n },\n): Promise<\n PageProps & {\n search: unknown;\n data?: unknown;\n __farmCanonicalPath?: string;\n __farmRoutePropsPromise?: Promise<Record<string, unknown>>;\n __farmRoutePropsResolved?: true;\n }\n> {\n const resolveRouteProps = (routeModule as any).__farmResolveRouteProps;\n if (typeof resolveRouteProps === \"function\") {\n // Resolve the top-level route state before starting the HTTP stream. It can\n // still return explicit defer() values for nested Suspense boundaries, but\n // redirects, notFound(), and failures must retain their real HTTP status.\n return await resolveRouteProps(input.props);\n }\n\n if ((routeModule as any).__farmRouteParsesProps) {\n return {\n ...input.props,\n search: input.search,\n };\n }\n\n const schemas = (routeModule as any).__farmRouteSchemas;\n const params = parseRouteModuleSchema(\n schemas?.params,\n input.props.params,\n \"params\",\n input.routePath,\n );\n const search = parseRouteModuleSchema(schemas?.search, input.search, \"search\", input.routePath);\n\n return {\n ...input.props,\n params: params as Record<string, string>,\n search,\n searchParams: Promise.resolve(search as Record<string, string | string[] | undefined>),\n };\n}\n\nfunction parseRouteModuleSchema(\n schema: { parse?: (value: unknown) => unknown } | undefined,\n value: unknown,\n label: string,\n routePath: string,\n): unknown {\n if (!schema || typeof schema.parse !== \"function\") {\n return value;\n }\n\n try {\n return schema.parse(value);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid ${label} for route \"${routePath}\": ${message}`);\n }\n}\n\nfunction createRouteStateProps(input: {\n params: Record<string, string>;\n searchParamsObject: Record<string, string | string[] | undefined>;\n path: string;\n middlewareMap: Map<string, any>;\n pluginExposedContext: Map<string, any>;\n}): LoadingProps {\n return {\n params: input.params,\n search: input.searchParamsObject,\n searchParams: Promise.resolve(input.searchParamsObject),\n path: input.path,\n middleware: input.middlewareMap.size > 0 ? { data: input.middlewareMap } : undefined,\n context: input.pluginExposedContext.size > 0 ? { data: input.pluginExposedContext } : undefined,\n };\n}\n\nexport class ServerRenderer {\n private config: Required<FarmConfig>;\n private routeManager: RouteManager;\n private ssgManifest: SSGPage[] = [];\n private dataCache = getFarmDataCache();\n private i18nRuntime?: FarmI18nRuntime;\n private viteServer?: ViteDevServer;\n private rendererRuntime!: FarmServerRendererRuntime;\n\n constructor(\n config: Required<FarmConfig>,\n routeManager: RouteManager,\n i18nRuntime?: FarmI18nRuntime,\n viteServer?: ViteDevServer,\n ) {\n this.config = config;\n this.routeManager = routeManager;\n this.i18nRuntime = i18nRuntime;\n this.viteServer = viteServer;\n this.loadSSGManifest();\n }\n\n async initialize(): Promise<void> {\n if (this.rendererRuntime) return;\n\n if (this.config.notFound?.component?.trim()) {\n resolveFarmNotFoundComponentPath(this.config, getFarmAppDirectories(this.config));\n }\n\n const loaded = isReactRenderer(this.config.renderer)\n ? await import(\"../renderer/react/server\")\n : this.viteServer\n ? await this.viteServer.ssrLoadModule(this.config.renderer.server)\n : await import(\n pathToFileURL(\n resolveFarmRendererModule(\n this.config.root || process.cwd(),\n this.config.renderer.server,\n ),\n ).href\n );\n const runtime = loaded as Partial<FarmServerRendererRuntime>;\n const required = [\"createElement\", \"isValidElement\", \"renderToString\"] as const;\n for (const key of required) {\n if (typeof runtime[key] !== \"function\") {\n throw new Error(\n `Renderer \\`${this.config.renderer.name}\\` server module must export ${key}().`,\n );\n }\n }\n\n const capabilities = getFarmRendererCapabilities(this.config.renderer);\n if (capabilities.streaming.node && typeof runtime.renderToPipeableStream !== \"function\") {\n throw new Error(\n `Renderer \\`${this.config.renderer.name}\\` advertises Node streaming but its server module does not export renderToPipeableStream().`,\n );\n }\n if (capabilities.streaming.web && typeof runtime.renderToReadableStream !== \"function\") {\n throw new Error(\n `Renderer \\`${this.config.renderer.name}\\` advertises Web streaming but its server module does not export renderToReadableStream().`,\n );\n }\n\n this.rendererRuntime = runtime as FarmServerRendererRuntime;\n this.routeManager.setRendererRuntime?.(this.rendererRuntime);\n }\n\n private createPageBoundary(\n pageElement: unknown,\n options: {\n pageShouldHydrate: boolean;\n layoutShouldHydrate: boolean;\n islandStrategy?: FarmIslandStrategy | null;\n },\n ): unknown {\n return this.rendererRuntime.createElement(\n \"div\",\n {\n id: \"__farm_page__\",\n \"data-farm-segment\": \"page\",\n \"data-farm-client\": options.pageShouldHydrate ? \"true\" : \"false\",\n ...(options.layoutShouldHydrate ? { \"data-farm-layout-client\": \"true\" } : {}),\n \"data-farm-island\": \"page\",\n \"data-farm-island-strategy\": options.islandStrategy || \"load\",\n },\n pageElement,\n );\n }\n\n /// Stylesheets the app imported through JS (fontsource packages, component\n /// CSS) that the document must link alongside globals.css — see #658.\n private collectDevStyleHrefs(): string[] {\n const graph = this.viteServer?.moduleGraph;\n if (!graph) return [];\n return collectDevStylesheetUrls(graph.idToModuleMap.values());\n }\n\n private collectDevStyleLinks(): string[] {\n return this.collectDevStyleHrefs().map(\n (href) => `<link rel=\"stylesheet\" href=\"${escapeHtmlAttribute(href)}\">`,\n );\n }\n\n private createLayoutBoundary(pattern: string, layoutElement: unknown): unknown {\n return this.rendererRuntime.createElement(\n \"div\",\n {\n \"data-farm-layout-boundary\": \"true\",\n \"data-farm-layout-pattern\": pattern,\n style: { display: \"contents\" },\n },\n layoutElement,\n );\n }\n\n private wrapClientGraph(element: unknown): unknown {\n const getIsolatedClientBoundaryModules = this.routeManager.getIsolatedClientBoundaryModules;\n if (\n !this.rendererRuntime.wrapClientGraph ||\n typeof getIsolatedClientBoundaryModules !== \"function\" ||\n getIsolatedClientBoundaryModules.call(this.routeManager, this.config.root).size === 0\n ) {\n return element;\n }\n return this.rendererRuntime.wrapClientGraph(element);\n }\n\n private async renderElementToCompleteHTML(element: unknown): Promise<string> {\n const capabilities = getFarmRendererCapabilities(this.config.renderer);\n const renderToPipeableStream = capabilities.streaming.node\n ? this.rendererRuntime.renderToPipeableStream\n : undefined;\n\n if (renderToPipeableStream) {\n return await new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n let started = false;\n const writable = new Writable({\n write(chunk, _encoding, callback) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n callback();\n },\n });\n writable.once(\"finish\", () => resolve(Buffer.concat(chunks).toString(\"utf8\")));\n writable.once(\"error\", reject);\n\n const stream = renderToPipeableStream(element, {\n onShellReady() {\n started = true;\n stream.pipe(writable);\n },\n onShellError(error) {\n reject(error);\n },\n onError(error) {\n if (!started) reject(error);\n },\n });\n });\n }\n\n if (capabilities.streaming.web && this.rendererRuntime.renderToReadableStream) {\n const stream = await this.rendererRuntime.renderToReadableStream(element);\n return await readFarmRendererWebStream(stream);\n }\n\n return await this.rendererRuntime.renderToString(element);\n }\n\n /**\n * Buffered render carrying document-head markup for renderers that emit it\n * during render (e.g. <svelte:head>). Other renderers return an empty head.\n */\n private async renderElementToDocumentParts(\n element: unknown,\n ): Promise<{ html: string; head: string }> {\n if (this.rendererRuntime.renderToStringWithHead) {\n const rendered = await this.rendererRuntime.renderToStringWithHead(element);\n return { html: rendered.html, head: rendered.head || \"\" };\n }\n return { html: await this.rendererRuntime.renderToString(element), head: \"\" };\n }\n\n /**\n * Render the route tree used by client navigation without producing a second\n * document response. Layout markers let the browser preserve the longest\n * common shell and replace only the first changed boundary.\n */\n async renderNavigationFragment(input: FarmNavigationFragmentInput): Promise<string> {\n await this.initialize();\n setFarmBasePath(this.config.basePath);\n setFarmTrailingSlashPreference(this.config.trailingSlash);\n let element = this.rendererRuntime.createElement(input.PageComponent, input.pageProps);\n if (input.LoadingComponent) {\n element = this.rendererRuntime.createElement(\n this.rendererRuntime.Suspense,\n {\n fallback: this.rendererRuntime.createElement(input.LoadingComponent, {\n params: input.params,\n path: (input.pageProps as any).path,\n }),\n },\n element,\n );\n }\n if (input.pageShouldHydrate && !input.layoutShouldHydrate) {\n element = this.wrapClientGraph(element);\n }\n element = this.createPageBoundary(element, {\n pageShouldHydrate: input.pageShouldHydrate,\n layoutShouldHydrate: input.layoutShouldHydrate,\n islandStrategy: input.islandStrategy,\n });\n\n const layoutStartIndex = Math.max(\n 0,\n Math.min(input.layoutStartIndex ?? 0, input.layouts.length),\n );\n for (let index = input.layouts.length - 1; index >= layoutStartIndex; index--) {\n const layout = input.layouts[index]!;\n const LayoutComponent = layout.module.default;\n if (!LayoutComponent) continue;\n const slotProps: Record<string, unknown> = {};\n for (const slot of input.slots || []) {\n if (slot.ownerPattern !== layout.pattern || !slot.module.default) continue;\n let slotElement = this.rendererRuntime.createElement(slot.module.default, slot.props);\n slotElement = this.wrapClientGraph(slotElement);\n slotProps[slot.name] = this.rendererRuntime.createElement(\n \"div\",\n {\n id: slot.containerId,\n \"data-farm-route-slot\": slot.name,\n \"data-farm-slot-owner\": slot.ownerPattern,\n },\n slotElement,\n );\n }\n element = this.rendererRuntime.createElement(LayoutComponent, {\n children: element,\n params: input.params,\n ...slotProps,\n });\n element = this.createLayoutBoundary(layout.pattern, element);\n }\n\n if (input.layoutShouldHydrate) {\n element = this.wrapClientGraph(element);\n }\n\n return this.renderElementToCompleteHTML(await this.wrapWithIntegrationProviders(element));\n }\n\n async runWithRequestContext<T>(request: Request, fn: () => T | Promise<T>): Promise<T> {\n return _runWithCurrentRequest(request, () =>\n this.i18nRuntime?.config.enabled\n ? _runWithFarmI18nRequest(this.i18nRuntime, request, fn, {\n redirect: false,\n })\n : fn(),\n );\n }\n\n async resolveRouteContext(input: {\n request: Request;\n rawRequest?: FarmRequest;\n params: Record<string, string>;\n search: Record<string, string | string[] | undefined>;\n path: string;\n }): Promise<unknown> {\n return resolveFarmRouteContext(this.config, input);\n }\n\n /**\n * Load SSG manifest from build output\n */\n private loadSSGManifest(): void {\n const manifestPath = path.join(this.config.root, this.config.outDir, \"__ssg_manifest.json\");\n let content: string;\n\n try {\n content = fs.readFileSync(manifestPath, \"utf-8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return;\n }\n\n throw new Error(\n `Failed to read SSG manifest at ${manifestPath}: ${formatSSGManifestError(error)}`,\n );\n }\n\n this.ssgManifest = parseSSGManifest(content, manifestPath);\n logger.info(`Loaded SSG manifest: ${this.ssgManifest.length} pages`);\n }\n\n /**\n * Check if a path should be served from SSG cache\n */\n private async shouldServeSSG(pathname: string): Promise<SSGPage | null> {\n const ssgPage = matchSSGPage(pathname, this.ssgManifest);\n if (!ssgPage) return null;\n\n const cached = await this.getCachedSSGPage(pathname);\n if (cached && (await this.dataCache.isStaleAsync(cached))) {\n // Stale - needs revalidation (serve stale, regenerate in background)\n this.regenerateSSGPage(ssgPage);\n }\n\n return ssgPage;\n }\n\n private getSSGCacheKey(urlPath: string): string {\n return createFarmCacheKey([\"ssg\", normalizeRevalidatePath(urlPath)]);\n }\n\n private getPPRCacheKey(pathname: string, search = \"\", locale = \"\"): string {\n return createFarmCacheKey([\"ppr\", locale, normalizeRevalidatePath(pathname), search]);\n }\n\n private getCachedSSGPage(urlPath: string) {\n return this.dataCache.getEntryAsync<CachedSSGPage>(this.getSSGCacheKey(urlPath), {\n allowStale: true,\n });\n }\n\n private async cacheSSGPage(\n page: SSGPage,\n html: string,\n options: { document: boolean; createdAt?: number },\n ): Promise<void> {\n await this.dataCache.setAsync(\n this.getSSGCacheKey(page.urlPath),\n { html, document: options.document },\n {\n createdAt: options.createdAt,\n paths: [page.urlPath],\n tags: [\"ssg\"],\n revalidate: page.revalidate ?? false,\n },\n );\n }\n\n private getCachedPPRShell(pathname: string, search: string, locale = \"\") {\n return this.dataCache.getEntryAsync<CachedPPRShell>(\n this.getPPRCacheKey(pathname, search, locale),\n );\n }\n\n private async cachePPRShell(options: PPRShellCacheOptions, html: string): Promise<void> {\n const key = this.getPPRCacheKey(options.pathname, options.search, options.locale);\n await this.dataCache.setAsync(\n key,\n { html },\n {\n paths: [options.pathname],\n tags: [\"ppr\"],\n revalidate: options.revalidate ?? false,\n },\n );\n emitFarmEvent({\n type: \"ppr.shell.cached\",\n route: options.pathname,\n key,\n revalidate: options.revalidate,\n });\n }\n\n private getPPRShellBypassReason(\n req: FarmRequest,\n middlewareMap: Map<string, any>,\n middlewareContext: Map<string, any>,\n pluginExposedContext: Map<string, any>,\n ): string | undefined {\n const method = (req.method || \"GET\").toUpperCase();\n if (method !== \"GET\" && method !== \"HEAD\") {\n return \"method\";\n }\n\n if (req.headers.cookie) {\n return \"cookie\";\n }\n\n if (req.headers.authorization) {\n return \"authorization\";\n }\n\n if (hasRequestHeader(req, \"x-farm-ppr-refresh\")) {\n return \"refresh\";\n }\n\n if (middlewareMap.size > 0) {\n return \"middleware-data\";\n }\n\n if (middlewareContext.size > 0) {\n return \"middleware-context\";\n }\n\n if (pluginExposedContext.size > 0) {\n return \"plugin-context\";\n }\n\n return undefined;\n }\n\n private getPPRHeaders(status: \"hit\" | \"miss\" | \"bypass\", revalidate?: number) {\n const headers: Record<string, string> = {\n \"X-Farm-PPR\": status,\n };\n\n if (status === \"bypass\") {\n headers[\"Cache-Control\"] = \"private, no-store\";\n return headers;\n }\n\n if (typeof revalidate === \"number\" && revalidate > 0) {\n headers[\"Cache-Control\"] = `s-maxage=${revalidate}, stale-while-revalidate`;\n }\n\n return headers;\n }\n\n private serveCachedPPRShell(res: FarmResponse, shell: CachedPPRShell, revalidate?: number): void {\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n for (const [key, value] of Object.entries(this.getPPRHeaders(\"hit\", revalidate))) {\n res.setHeader(key, value);\n }\n res.write(shell.html);\n res.end();\n }\n\n /**\n * Regenerate an SSG page in the background (ISR)\n */\n private async regenerateSSGPage(page: SSGPage): Promise<void> {\n try {\n // This runs in the background - don't await\n setImmediate(async () => {\n try {\n const mod = await this.routeManager.loadRouteModule(page.filePath);\n if (!mod?.default) return;\n\n const { route, layouts } = this.routeManager.matchRoute(page.urlPath);\n const layoutModules = await Promise.all(\n layouts.map((l) => this.routeManager.loadLayoutModule(l.modulePath)),\n );\n const routeManifest = this.routeManager.generateClientManifest(this.config.root);\n\n const PageComponent = mod.default;\n const pageProps = {\n params: page.params,\n searchParams: Promise.resolve({}),\n path: page.urlPath,\n };\n\n let pageElement: any = this.rendererRuntime.createElement(PageComponent, pageProps);\n const pageMetadata = routeManifest.routes.find(\n (entry) => entry.pattern === route?.pattern,\n ) ?? {\n shouldHydrate: false,\n islandStrategy: null,\n };\n const layoutMetadata = layouts.map(\n (layout) =>\n routeManifest.layouts.find((entry) => entry.pattern === layout.pattern) ?? {\n shouldHydrate: false,\n islandStrategy: null,\n },\n );\n const layoutShouldHydrate = layoutMetadata.some((metadata) => metadata.shouldHydrate);\n pageElement = this.createPageBoundary(pageElement, {\n pageShouldHydrate: pageMetadata.shouldHydrate,\n layoutShouldHydrate,\n islandStrategy: pageMetadata.islandStrategy,\n });\n\n for (let i = layoutModules.length - 1; i >= 0; i--) {\n const layoutModule = layoutModules[i];\n const LayoutComponent = layoutModule.default;\n pageElement = this.rendererRuntime.createElement(LayoutComponent, {\n children: pageElement,\n params: page.params,\n });\n pageElement = this.createLayoutBoundary(layouts[i]!.pattern, pageElement);\n }\n\n const html = await this.rendererRuntime.renderToString(\n await this.wrapWithIntegrationProviders(pageElement),\n );\n\n await this.cacheSSGPage(page, html, { document: false });\n\n logger.info(`ISR: Regenerated ${page.urlPath}`);\n } catch (error) {\n logger.error(`ISR regeneration failed for ${page.urlPath}: ${error}`);\n }\n });\n } catch (error) {\n logger.error(`ISR trigger failed: ${error}`);\n }\n }\n\n /**\n * Serve a pre-rendered SSG page\n */\n private async serveSSGPage(req: FarmRequest, res: FarmResponse, page: SSGPage): Promise<boolean> {\n // Check cache first (for ISR)\n const cached = await this.getCachedSSGPage(page.urlPath);\n if (cached) {\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.setHeader(\"X-Farm-SSG\", \"cached\");\n if (page.revalidate) {\n res.setHeader(\"Cache-Control\", `s-maxage=${page.revalidate}, stale-while-revalidate`);\n }\n res.write(\n cached.value.document\n ? cached.value.html\n : this.createFullHTML(cached.value.html, false, page.urlPath),\n );\n res.end();\n return true;\n }\n\n // Try to read from file system (production)\n try {\n const htmlPath =\n page.urlPath === \"/\"\n ? path.join(this.config.root, this.config.outDir, \"client\", \"index.html\")\n : path.join(this.config.root, this.config.outDir, \"client\", page.urlPath + \".html\");\n\n if (fs.existsSync(htmlPath)) {\n const stat = fs.statSync(htmlPath);\n const html = fs.readFileSync(htmlPath, \"utf-8\");\n await this.cacheSSGPage(page, html, {\n document: true,\n createdAt: stat.mtimeMs,\n });\n const fileCacheEntry = await this.getCachedSSGPage(page.urlPath);\n if (fileCacheEntry && (await this.dataCache.isStaleAsync(fileCacheEntry))) {\n this.regenerateSSGPage(page);\n }\n\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.setHeader(\"X-Farm-SSG\", \"file\");\n if (page.revalidate) {\n res.setHeader(\"Cache-Control\", `s-maxage=${page.revalidate}, stale-while-revalidate`);\n }\n res.write(html);\n res.end();\n return true;\n }\n } catch (error) {\n logger.error(`Failed to serve SSG page ${page.urlPath}: ${error}`);\n }\n\n return false;\n }\n\n async renderPage(req: FarmRequest, res: FarmResponse): Promise<void> {\n await this.initialize();\n setFarmBasePath(this.config.basePath);\n setFarmTrailingSlashPreference(this.config.trailingSlash);\n const request = createWebRequestFromFarmRequest(req, {\n trustProxy: this.config.server?.trustProxy,\n });\n const runtime = this.i18nRuntime;\n\n if (runtime?.config.enabled) {\n const resolution = runtime.resolveRequest(request);\n const varyHeaders = getFarmLocaleVaryHeaders(runtime.config, resolution);\n for (const header of varyHeaders) appendResponseVary(res, header);\n if (resolution.persist) {\n appendResponseHeader(\n res,\n \"Set-Cookie\",\n createFarmLocaleCookie(resolution.locale, runtime.config),\n );\n }\n if (resolution.redirect && (request.method === \"GET\" || request.method === \"HEAD\")) {\n res.statusCode = 307;\n res.setHeader(\"Location\", resolution.redirect);\n if (varyHeaders.length > 0) res.setHeader(\"Cache-Control\", \"private, no-store\");\n res.end();\n return;\n }\n }\n\n return this.runWithRequestContext(request, () => this.renderPageInContext(req, res));\n }\n\n private async renderPageInContext(req: FarmRequest, res: FarmResponse): Promise<void> {\n const renderStartTime = Date.now();\n let pathname = \"/\";\n let params: Record<string, string> = {};\n let layouts: Array<{ modulePath: string; pattern: string }> = [];\n let routeSlots: MatchedRouteSlot[] = [];\n let searchParamsObject: Record<string, string | string[] | undefined> = {};\n let middlewareMap = new Map<string, any>();\n let middlewareContext = new Map<string, any>();\n let pluginExposedContext = new Map<string, any>();\n let errorBoundaryEntry: { modulePath: string } | null = null;\n let pprRefreshRoute: string | null = null;\n\n const completeRender = (status = res.statusCode || 200, route = pathname) => {\n emitFarmEvent({\n type: \"render.complete\",\n route,\n pathname,\n status,\n durationMs: Date.now() - renderStartTime,\n });\n };\n\n try {\n const url = resolveFarmRequestURL(req, { trustProxy: this.config.server?.trustProxy });\n pathname = url.pathname;\n emitFarmEvent({ type: \"render.start\", route: pathname, pathname });\n searchParamsObject = searchParamsToObject(url.searchParams);\n\n const metadataRouteMatch = this.routeManager.matchMetadataRoute(pathname);\n if (metadataRouteMatch) {\n await this.renderMetadataRoute(req, res, metadataRouteMatch);\n completeRender(res.statusCode || 200, pathname);\n return;\n }\n\n const metadataImageMatch = this.routeManager.matchMetadataImage(pathname);\n if (metadataImageMatch) {\n await this.renderMetadataImage(req, res, {\n pathname,\n searchParamsObject,\n ...metadataImageMatch,\n });\n completeRender(res.statusCode || 200, pathname);\n return;\n }\n\n this.applyDeploymentHeaders(req, res);\n\n const match = this.routeManager.matchRoute(pathname);\n if (match.route) {\n const redirectLocation = resolveFarmTrailingSlashRedirect(url, this.config.trailingSlash);\n if (redirectLocation) {\n res.statusCode = 308;\n res.setHeader(\"Location\", redirectLocation);\n res.end();\n completeRender(308, match.route.pattern);\n return;\n }\n }\n\n // Pre-rendered HTML only represents retrieval requests. Other methods must\n // continue through the live route so their request semantics are preserved.\n if (shouldServePrerenderedPage(process.env.NODE_ENV, req.method)) {\n const ssgPage = await this.shouldServeSSG(pathname);\n if (ssgPage) {\n const served = await this.serveSSGPage(req, res, ssgPage);\n if (served) {\n completeRender(res.statusCode || 200, ssgPage.urlPath);\n return;\n }\n }\n }\n\n // Match route\n const route = match.route;\n params = match.params;\n layouts = match.layouts;\n routeSlots = match.slots ?? [];\n\n if (!route) {\n emitFarmEvent({ type: \"route.notFound\", pathname });\n await this.render404(req, res);\n completeRender(404);\n return;\n }\n\n emitFarmEvent({\n type: \"route.matched\",\n pathname,\n route: route.pattern,\n params,\n });\n\n const loadingBoundaryEntry = this.routeManager.getMatchingLoading(pathname);\n errorBoundaryEntry = this.routeManager.getMatchingError(pathname);\n\n middlewareMap = toMiddlewareMap((req as any).__FARM_MIDDLEWARE_DATA__);\n middlewareContext = toMiddlewareMap((req as any).__FARM_MIDDLEWARE_CONTEXT__);\n pluginExposedContext = getRequestContextSnapshot(req as object, {\n exposedOnly: true,\n });\n const currentRequest = createWebRequestFromFarmRequest(req, {\n trustProxy: this.config.server?.trustProxy,\n });\n const routeContext = await this.resolveRouteContext({\n request: currentRequest,\n rawRequest: req,\n params,\n search: searchParamsObject,\n path: pathname,\n });\n\n // Load route module\n const routeModule = await this.routeManager.loadRouteModule(route.modulePath);\n\n if (!routeModule.default) {\n throw new Error(`Route module ${route.modulePath} does not export a default component`);\n }\n\n // Create page props with searchParams as plain object and middleware data\n const rawPageProps: PageProps = withFarmRouteContext(\n {\n params,\n searchParams: Promise.resolve(searchParamsObject),\n path: pathname,\n middleware: middlewareMap.size > 0 ? { data: middlewareMap } : undefined,\n context: pluginExposedContext.size > 0 ? { data: pluginExposedContext } : undefined,\n } as PageProps & { search: unknown },\n routeContext,\n );\n const programmaticRouteComponents = (routeModule as any).__farmRouteComponents as\n | {\n error?: any;\n notFound?: any;\n }\n | undefined;\n let PageComponent = routeModule.default;\n let pageProps: PageProps & {\n search: unknown;\n data?: unknown;\n error?: unknown;\n __farmRoutePropsPromise?: Promise<Record<string, unknown>>;\n __farmRoutePropsResolved?: true;\n };\n\n try {\n pageProps = await parseRouteModuleProps(routeModule, {\n props: rawPageProps,\n search: searchParamsObject,\n routePath: route.pattern,\n });\n } catch (error) {\n if (isFarmRedirectError(error)) throw error;\n\n const routeStateProps = {\n ...rawPageProps,\n search: searchParamsObject,\n searchParams: Promise.resolve(searchParamsObject),\n error,\n };\n\n if (isFarmNotFoundError(error) && programmaticRouteComponents?.notFound) {\n res.statusCode = 404;\n PageComponent = programmaticRouteComponents.notFound;\n pageProps = routeStateProps;\n } else if (programmaticRouteComponents?.error) {\n res.statusCode = 500;\n PageComponent = programmaticRouteComponents.error;\n pageProps = routeStateProps;\n } else {\n throw error;\n }\n }\n\n const renderingConfig = await resolveRouteRenderingConfigFromFile(\n routeModule,\n route.modulePath,\n { experimentalPPR: this.config.experimental?.ppr === true },\n );\n const pprBypassReason = renderingConfig.ppr\n ? this.getPPRShellBypassReason(req, middlewareMap, middlewareContext, pluginExposedContext)\n : undefined;\n const canCachePPRShell = renderingConfig.ppr && !pprBypassReason;\n const pprShellOptions: PPRShellCacheOptions | undefined = canCachePPRShell\n ? {\n pathname,\n search: url.search,\n locale: getFarmI18nClientSnapshot()?.locale ?? \"\",\n revalidate: renderingConfig.revalidate,\n }\n : undefined;\n\n if (renderingConfig.ppr && pprBypassReason) {\n emitFarmEvent({\n type: \"ppr.shell.bypass\",\n route: pathname,\n reason: pprBypassReason,\n });\n emitFarmEvent({\n type: \"cache.bypass\",\n route: pathname,\n reason: pprBypassReason,\n });\n\n if (pprBypassReason === \"refresh\") {\n pprRefreshRoute = pathname;\n emitFarmEvent({ type: \"ppr.refresh.start\", route: pathname });\n }\n }\n\n if (pprShellOptions) {\n // Same locale for the lookup and the later store, so the two cannot diverge.\n const pprCacheKey = this.getPPRCacheKey(pathname, url.search, pprShellOptions.locale);\n const cachedPPRShell = await this.getCachedPPRShell(\n pathname,\n url.search,\n pprShellOptions.locale,\n );\n if (cachedPPRShell) {\n emitFarmEvent({\n type: \"ppr.shell.hit\",\n route: pathname,\n key: pprCacheKey,\n });\n this.serveCachedPPRShell(res, cachedPPRShell.value, renderingConfig.revalidate);\n completeRender(res.statusCode || 200, pathname);\n return;\n }\n emitFarmEvent({\n type: \"ppr.shell.miss\",\n route: pathname,\n key: pprCacheKey,\n });\n }\n\n let LoadingFallbackComponent: any = null;\n if (loadingBoundaryEntry) {\n const loadingModule = await this.routeManager.loadRouteModule(\n loadingBoundaryEntry.modulePath,\n );\n if (loadingModule.default) {\n LoadingFallbackComponent = loadingModule.default;\n }\n }\n\n let ErrorFallbackComponent: any = null;\n if (errorBoundaryEntry) {\n const errorModule = await this.routeManager.loadRouteModule(errorBoundaryEntry.modulePath);\n if (errorModule.default) {\n ErrorFallbackComponent = errorModule.default;\n }\n }\n\n // Hydration decisions are compiled into a manifest and reused on requests.\n // Development HMR invalidates this cache when a route module changes.\n const routeManifest = this.routeManager.generateClientManifest(this.config.root);\n const routeManifestEntry = routeManifest.routes.find(\n (entry) => entry.pattern === route.pattern,\n );\n const moduleMetadata =\n routeManifestEntry || getClientModuleMetadata(route.modulePath, this.config.root);\n const isClientComponent = moduleMetadata.isClientComponent;\n const renderedRouteSlots = await Promise.all(\n routeSlots.map(async (slot) => {\n const slotModule = await this.routeManager.loadRouteModule(slot.route.modulePath);\n if (!slotModule.default) {\n throw new Error(\n `Route slot \"${slot.name}\" module ${slot.route.modulePath} does not export a default component`,\n );\n }\n\n const slotContext = await this.resolveRouteContext({\n request: currentRequest,\n rawRequest: req,\n params: slot.params,\n search: searchParamsObject,\n path: pathname,\n });\n const rawSlotProps = withFarmRouteContext(\n {\n params: slot.params,\n searchParams: Promise.resolve(searchParamsObject),\n path: pathname,\n middleware: middlewareMap.size > 0 ? { data: middlewareMap } : undefined,\n context: pluginExposedContext.size > 0 ? { data: pluginExposedContext } : undefined,\n } as PageProps & { search: unknown },\n slotContext,\n );\n const slotProps = await parseRouteModuleProps(slotModule, {\n props: rawSlotProps,\n search: searchParamsObject,\n routePath: slot.route.pattern,\n });\n const metadata = routeManifest.slots.find(\n (entry) =>\n entry.name === slot.name &&\n entry.ownerPattern === slot.ownerPattern &&\n entry.pattern === slot.route.pattern,\n ) ?? {\n isClientComponent: false,\n shouldHydrate: false,\n };\n\n return {\n ...slot,\n module: slotModule,\n props: slotProps,\n isClientComponent: metadata.isClientComponent,\n shouldHydrate: metadata.shouldHydrate,\n };\n }),\n );\n const shouldHydrate = moduleMetadata.shouldHydrate;\n if (moduleMetadata.suppressedAsyncHydration) {\n warnSuppressedAsyncHydrationOnce(route.modulePath);\n }\n const layoutHydrationMetadata = layouts.map((layout) => {\n const manifestEntry = routeManifest.layouts.find(\n (entry) => entry.pattern === layout.pattern,\n ) as\n | {\n isClientComponent?: boolean;\n shouldHydrate?: boolean;\n islandStrategy?: \"load\" | \"interaction\" | \"visible\" | \"idle\" | null;\n hasIsolatedClientBoundaries?: boolean;\n }\n | undefined;\n if (typeof manifestEntry?.shouldHydrate === \"boolean\") {\n return {\n isClientComponent: manifestEntry.isClientComponent === true,\n shouldHydrate: manifestEntry.shouldHydrate,\n islandStrategy: manifestEntry.islandStrategy ?? null,\n ...(manifestEntry.hasIsolatedClientBoundaries === true\n ? { hasIsolatedClientBoundaries: true }\n : {}),\n };\n }\n return {\n isClientComponent: false,\n shouldHydrate: false,\n islandStrategy: null,\n };\n });\n const shouldHydrateLayout = layoutHydrationMetadata.some(\n (metadata) => metadata.shouldHydrate,\n );\n const clientLayouts = layouts.map((layout, index) => ({\n pattern: layout.pattern,\n modulePath: toViteModuleId(layout.modulePath, this.config.root),\n shouldHydrate: layoutHydrationMetadata[index]?.shouldHydrate === true,\n islandStrategy: layoutHydrationMetadata[index]?.islandStrategy ?? null,\n ...(layoutHydrationMetadata[index]?.hasIsolatedClientBoundaries === true\n ? { hasIsolatedClientBoundaries: true }\n : {}),\n }));\n const hydrationStrategies = [\n ...(shouldHydrate && moduleMetadata.islandStrategy ? [moduleMetadata.islandStrategy] : []),\n ...layoutHydrationMetadata.flatMap((metadata) =>\n metadata.shouldHydrate && metadata.islandStrategy ? [metadata.islandStrategy] : [],\n ),\n ];\n const hydrationIslandStrategy = hydrationStrategies.every(\n (strategy) => strategy === hydrationStrategies[0],\n )\n ? (hydrationStrategies[0] ?? \"load\")\n : \"load\";\n const hasHydratableRouteSlots = renderedRouteSlots.some(\n (slot) => slot.isClientComponent || slot.shouldHydrate,\n );\n const hasIsolatedClientBoundaries =\n routeManifestEntry?.hasIsolatedClientBoundaries === true ||\n layoutHydrationMetadata.some((metadata) => metadata.hasIsolatedClientBoundaries === true);\n\n (req as any).__FARM_PAGE_PATH__ = route.modulePath;\n (req as any).__FARM_ROUTE__ = pathname;\n (req as any).__FARM_IS_CLIENT_COMPONENT__ = isClientComponent;\n (req as any).__FARM_PAGE_SHOULD_HYDRATE__ = shouldHydrate;\n (req as any).__FARM_LAYOUT_SHOULD_HYDRATE__ = shouldHydrateLayout;\n (req as any).__FARM_LAYOUTS__ = clientLayouts;\n if (hasIsolatedClientBoundaries) {\n (req as any).__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ = true;\n }\n (req as any).__FARM_SHOULD_HYDRATE__ =\n shouldHydrate || shouldHydrateLayout || hasIsolatedClientBoundaries;\n (req as any).__FARM_ISLAND_STRATEGY__ = hydrationIslandStrategy;\n (req as any).__FARM_HAS_HYDRATABLE_ROUTE_SLOTS__ = hasHydratableRouteSlots;\n (req as any).__FARM_LOADING_MODULE_PATH__ = loadingBoundaryEntry?.modulePath\n ? toViteModuleId(loadingBoundaryEntry.modulePath, this.config.root)\n : null;\n (req as any).__FARM_ROUTE_SLOTS__ = renderedRouteSlots.map((slot) => ({\n name: slot.name,\n ownerPattern: slot.ownerPattern,\n containerId: slot.containerId,\n interception: slot.interception,\n fallback: slot.fallback,\n modulePath: slot.route.modulePath,\n isClientComponent: slot.isClientComponent,\n shouldHydrate: slot.shouldHydrate,\n props: {\n params: slot.props.params,\n search: (slot.props as any).search,\n searchParams: (slot.props as any).search,\n ...(\"data\" in slot.props ? { data: (slot.props as any).data } : {}),\n ...((slot.props as any).__farmCanonicalPath\n ? { __farmCanonicalPath: (slot.props as any).__farmCanonicalPath }\n : {}),\n ...((slot.props as any).__farmRoutePropsResolved\n ? { __farmRoutePropsResolved: true }\n : {}),\n path: pathname,\n },\n }));\n // Store pageProps for client-side hydration (serializable version - no Promises)\n (req as any).__FARM_PROPS__ = {\n params: pageProps.params,\n search: (pageProps as any).search,\n searchParams: (pageProps as any).search,\n ...(\"data\" in pageProps ? { data: (pageProps as any).data } : {}),\n ...((pageProps as any).__farmCanonicalPath\n ? { __farmCanonicalPath: (pageProps as any).__farmCanonicalPath }\n : {}),\n ...((pageProps as any).__farmRoutePropsResolved ? { __farmRoutePropsResolved: true } : {}),\n path: pathname,\n middleware:\n middlewareMap.size > 0\n ? {\n data: Object.fromEntries(middlewareMap),\n }\n : undefined,\n context:\n pluginExposedContext.size > 0\n ? {\n data: Object.fromEntries(pluginExposedContext),\n }\n : undefined,\n };\n\n // Load layout modules\n const layoutModules = await Promise.all(\n layouts.map((layout) => this.routeManager.loadLayoutModule(layout.modulePath)),\n );\n\n const mergedMetadata = await this.resolveRouteMetadata({\n layoutModules,\n routeModule,\n pageProps,\n pathname,\n });\n\n // Store metadata on request for renderWithSSR\n (req as any).__FARM_METADATA__ = mergedMetadata;\n\n // Get middleware data for AsyncLocalStorage\n const middlewareDataForContext = middlewareMap;\n\n await _runWithMiddlewareData(middlewareDataForContext, async () => {\n await _runWithMiddlewareContext(middlewareContext, async () => {\n await _runWithCurrentRequest(currentRequest, async () => {\n let pageElement: any = this.rendererRuntime.createElement(PageComponent, pageProps);\n\n if (LoadingFallbackComponent) {\n const loadingFallback = this.rendererRuntime.createElement(LoadingFallbackComponent, {\n ...createRouteStateProps({\n params,\n searchParamsObject,\n path: pathname,\n middlewareMap,\n pluginExposedContext,\n }),\n });\n\n pageElement = this.rendererRuntime.createElement(\n this.rendererRuntime.Suspense,\n { fallback: loadingFallback },\n pageElement,\n );\n }\n\n // A route-wide page owns every compiled client component beneath\n // its React root. Keep shared leaf modules as ordinary components\n // here even when an isolated layout also imports the same module.\n if ((isClientComponent || shouldHydrate) && !shouldHydrateLayout) {\n pageElement = this.wrapClientGraph(pageElement);\n }\n\n // Every route gets a stable HTML boundary. Server-only pages keep\n // native markup with no React root; interactive pages hydrate this\n // exact boundary.\n pageElement = this.createPageBoundary(pageElement, {\n pageShouldHydrate: isClientComponent || shouldHydrate,\n layoutShouldHydrate: shouldHydrateLayout,\n islandStrategy: hydrationIslandStrategy,\n });\n\n let wrappedElement: any = pageElement;\n for (let i = layoutModules.length - 1; i >= 0; i--) {\n const layoutModule = layoutModules[i];\n const layoutEntry = layouts[i];\n const LayoutComponent = layoutModule.default;\n const slotProps: Record<string, any> = {};\n for (const slot of renderedRouteSlots) {\n if (slot.ownerPattern !== layoutEntry.pattern) continue;\n\n let slotElement = this.rendererRuntime.createElement(\n slot.module.default,\n slot.props,\n );\n slotElement = this.wrapClientGraph(slotElement);\n slotElement = this.rendererRuntime.createElement(\n \"div\",\n {\n id: slot.containerId,\n \"data-farm-route-slot\": slot.name,\n \"data-farm-slot-owner\": slot.ownerPattern,\n },\n slotElement,\n );\n slotProps[slot.name] = slotElement;\n }\n wrappedElement = this.rendererRuntime.createElement(LayoutComponent, {\n children: wrappedElement,\n params,\n ...slotProps,\n });\n wrappedElement = this.createLayoutBoundary(layoutEntry.pattern, wrappedElement);\n }\n\n if (shouldHydrateLayout) {\n wrappedElement = this.wrapClientGraph(wrappedElement);\n }\n\n if (ErrorFallbackComponent && this.rendererRuntime.ErrorBoundary) {\n wrappedElement = this.rendererRuntime.createElement(\n this.rendererRuntime.ErrorBoundary,\n {\n Fallback: ErrorFallbackComponent,\n fallbackProps: {\n ...createRouteStateProps({\n params,\n searchParamsObject,\n path: pathname,\n middlewareMap,\n pluginExposedContext,\n }),\n },\n },\n wrappedElement,\n );\n }\n\n const integratedElement = await this.wrapWithIntegrationProviders(wrappedElement);\n const pprHeaders = renderingConfig.ppr\n ? this.getPPRHeaders(pprShellOptions ? \"miss\" : \"bypass\", renderingConfig.revalidate)\n : undefined;\n\n // Render with middleware data available\n await this.renderWithSSR(\n integratedElement,\n req,\n res,\n () => {\n _clearCurrentMiddlewareData();\n _clearCurrentMiddlewareContext();\n },\n {\n responseHeaders: pprHeaders,\n routeManifest,\n captureStaticShell: Boolean(pprShellOptions),\n observabilityRoute: pathname,\n onSuspenseHoleDetected: pprShellOptions\n ? () =>\n emitFarmEvent({\n type: \"ppr.suspense.holeDetected\",\n route: pathname,\n })\n : undefined,\n onComplete:\n pprShellOptions && req.method !== \"HEAD\"\n ? (html) => this.cachePPRShell(pprShellOptions, html)\n : undefined,\n },\n );\n if (pprRefreshRoute) {\n emitFarmEvent({\n type: \"ppr.refresh.complete\",\n route: pprRefreshRoute,\n durationMs: Date.now() - renderStartTime,\n });\n }\n completeRender(res.statusCode || 200, pathname);\n });\n });\n });\n } catch (caughtError) {\n let error = caughtError;\n\n if (isWebResponse(error)) {\n if (!res.headersSent && !(res as any).writableEnded) {\n await sendWebResponse(res, error);\n } else if (!(res as any).writableEnded) {\n res.end();\n }\n completeRender(error.status, pathname);\n return;\n }\n\n if (isFarmRedirectError(error)) {\n const redirect = getFarmRedirectError(error)!;\n const snapshot = getFarmI18nClientSnapshot();\n const redirectUrl =\n snapshot && redirect.url.startsWith(\"/\") && !redirect.url.startsWith(\"//\")\n ? localizeFarmHref(redirect.url, snapshot.locale, snapshot)\n : redirect.url;\n emitFarmEvent({\n type: \"route.redirect\",\n from: pathname,\n to: redirectUrl,\n status: redirect.status,\n });\n if (!res.headersSent && !(res as any).writableEnded) {\n res.statusCode = redirect.status;\n res.setHeader(\"Location\", redirectUrl);\n res.end();\n } else if (!(res as any).writableEnded) {\n res.end();\n }\n completeRender(redirect.status, pathname);\n return;\n }\n\n if (isFarmNotFoundError(error)) {\n emitFarmEvent({ type: \"route.notFound\", pathname });\n if (!res.headersSent && !(res as any).writableEnded) {\n try {\n await this.render404(req, res);\n completeRender(404, pathname);\n return;\n } catch (notFoundRenderError) {\n error = notFoundRenderError;\n }\n } else {\n if (!(res as any).writableEnded) {\n res.end();\n }\n completeRender(404, pathname);\n return;\n }\n }\n\n emitFarmEvent({ type: \"render.error\", route: pathname, error });\n const errorStatus = resolveDefaultErrorStatus(error);\n if (pprRefreshRoute) {\n emitFarmEvent({\n type: \"ppr.refresh.error\",\n route: pprRefreshRoute,\n error,\n });\n }\n logger.error(`Error rendering page: ${error}`);\n\n if (res.headersSent || (res as any).writableEnded) {\n if (!(res as any).writableEnded) {\n res.end();\n }\n return;\n }\n\n if (errorBoundaryEntry) {\n const rendered = await this.renderRouteErrorBoundary(req, res, {\n pathname,\n params,\n layouts,\n searchParamsObject,\n middlewareMap,\n middlewareContext,\n pluginExposedContext,\n error,\n statusCode: errorStatus,\n errorModulePath: errorBoundaryEntry.modulePath,\n });\n\n if (rendered) {\n return;\n }\n }\n\n await this.renderError(req, res, error, errorStatus);\n }\n }\n\n private async wrapWithIntegrationProviders(element: any): Promise<any> {\n const providers = getIntegrationProviders(this.config.integrations);\n let wrapped = element;\n\n for (let i = providers.length - 1; i >= 0; i--) {\n const provider = providers[i];\n if (provider.component || provider.type === \"clerk\") {\n if (!isReactRenderer(this.config.renderer)) {\n throw new Error(\n `Integration provider \\`${provider.type}\\` currently requires the React renderer.`,\n );\n }\n let ProviderComponent;\n if (isFarmIntegrationProviderComponentReference(provider.component)) {\n const providerModuleId = provider.component.module.startsWith(\".\")\n ? toViteModuleId(\n path.resolve(this.config.root, provider.component.module),\n this.config.root,\n )\n : provider.component.module;\n const providerModule = this.viteServer\n ? await this.viteServer.ssrLoadModule(providerModuleId)\n : await importRuntimeModule(\n provider.component.module.startsWith(\".\")\n ? pathToFileURL(path.resolve(this.config.root, provider.component.module)).href\n : provider.component.module,\n );\n ProviderComponent = providerModule[provider.component.export || \"default\"];\n } else if (typeof provider.component === \"function\") {\n ProviderComponent = provider.component;\n } else if (provider.type === \"clerk\") {\n if (!cachedClerkProvider) {\n cachedClerkProvider = await importRuntimeModule(\"@clerk/react\");\n }\n ProviderComponent = cachedClerkProvider!.ClerkProvider;\n } else {\n throw new Error(\n `Integration provider \\`${provider.name}\\` has an invalid component reference.`,\n );\n }\n if (!ProviderComponent) {\n throw new Error(\n `Integration provider \\`${provider.name}\\` did not export its configured component.`,\n );\n }\n\n wrapped = this.rendererRuntime.createElement(\n ProviderComponent,\n provider.props || {},\n wrapped,\n );\n }\n }\n\n return wrapped;\n }\n\n private async resolveRouteMetadata(options: {\n layoutModules: Array<Record<string, any>>;\n routeModule: RouteModule;\n pageProps: PageProps;\n pathname: string;\n }): Promise<Record<string, any>> {\n let metadata: Record<string, any> = {};\n\n for (const layoutModule of options.layoutModules) {\n metadata = mergeMetadata(metadata, layoutModule.metadata);\n if (typeof layoutModule.generateMetadata === \"function\") {\n metadata = mergeMetadata(\n metadata,\n await layoutModule.generateMetadata({\n params: options.pageProps.params,\n }),\n );\n }\n }\n\n metadata = mergeMetadata(metadata, (options.routeModule as any).metadata);\n if (typeof (options.routeModule as any).generateMetadata === \"function\") {\n metadata = mergeMetadata(\n metadata,\n await (options.routeModule as any).generateMetadata(options.pageProps),\n );\n }\n\n if (!metadata.manifest) {\n const manifestMatch = this.routeManager.getMatchingMetadataRoute(\n options.pathname,\n \"manifest\",\n );\n if (manifestMatch) {\n const rawHref = this.routeManager.resolveMetadataRoutePath(\n manifestMatch.metadata,\n manifestMatch.params,\n );\n const snapshot = getFarmI18nClientSnapshot();\n const localizedHref = snapshot\n ? localizeFarmHref(rawHref, snapshot.locale, snapshot)\n : rawHref;\n metadata.manifest = applyFarmBasePath(localizedHref, this.config.basePath);\n }\n }\n\n for (const kind of [\"opengraph\", \"twitter\"] as const) {\n const reference = await this.resolveMetadataImageReference(kind, options.pathname);\n if (reference) {\n metadata = addMetadataImageReference(metadata, reference);\n }\n }\n\n return metadata;\n }\n\n private async resolveMetadataImageReference(\n kind: MetadataImageKind,\n pathname: string,\n ): Promise<FarmMetadataImageReference | null> {\n const match = this.routeManager.getMatchingMetadataImage(pathname, kind);\n if (!match) return null;\n\n const rawHref = this.routeManager.resolveMetadataImagePath(match.image, match.params);\n const snapshot = getFarmI18nClientSnapshot();\n const localizedHref = snapshot ? localizeFarmHref(rawHref, snapshot.locale, snapshot) : rawHref;\n const href = applyFarmBasePath(localizedHref, this.config.basePath);\n const reference: FarmMetadataImageReference = {\n kind,\n href,\n };\n\n if (match.image.sourceType === \"static\" && match.image.staticInfo) {\n return {\n ...reference,\n width: match.image.staticInfo.width,\n height: match.image.staticInfo.height,\n alt: match.image.staticInfo.alt,\n contentType: match.image.staticInfo.contentType,\n };\n }\n\n try {\n const imageModule = await this.routeManager.loadRouteModule(match.image.modulePath);\n const size = (imageModule as any).size;\n if (size && typeof size === \"object\") {\n reference.width = typeof size.width === \"number\" ? size.width : undefined;\n reference.height = typeof size.height === \"number\" ? size.height : undefined;\n }\n if (typeof (imageModule as any).alt === \"string\") {\n reference.alt = (imageModule as any).alt;\n }\n if (typeof (imageModule as any).contentType === \"string\") {\n reference.contentType = (imageModule as any).contentType;\n }\n } catch (error) {\n logger.warn(`Failed to read ${kind} image metadata for ${pathname}: ${error}`);\n }\n\n return reference;\n }\n\n private async renderMetadataRoute(\n req: FarmRequest,\n res: FarmResponse,\n match: NonNullable<ReturnType<RouteManager[\"matchMetadataRoute\"]>>,\n ): Promise<void> {\n const method = (req.method || \"GET\").toUpperCase();\n if (method !== \"GET\" && method !== \"HEAD\") {\n res.statusCode = 405;\n res.setHeader(\"Allow\", \"GET, HEAD\");\n res.end();\n return;\n }\n\n try {\n const routeModule = await this.routeManager.loadRouteModule(match.metadata.modulePath);\n if (routeModule.default === undefined) {\n throw new Error(\n `Metadata route module ${match.metadata.modulePath} does not export a default value or handler`,\n );\n }\n\n const request = createWebRequestFromFarmRequest(req, {\n trustProxy: this.config.server?.trustProxy,\n });\n const url = new URL(request.url);\n const value =\n typeof routeModule.default === \"function\"\n ? await (routeModule.default as any)({\n request,\n params: match.params,\n searchParams: url.searchParams,\n path: match.routePath,\n })\n : routeModule.default;\n const response = createFarmMetadataRouteResponse(match.metadata.kind, value, routeModule, {\n method,\n });\n await sendWebResponse(res as any, response);\n } catch (error) {\n logger.error(`Metadata route render failed for ${match.metadata.modulePath}: ${error}`);\n await sendWebResponse(\n res as any,\n new Response(\"Internal Server Error\", {\n status: 500,\n headers: { \"Content-Type\": \"text/plain; charset=utf-8\" },\n }),\n );\n }\n }\n\n private async renderMetadataImage(\n req: FarmRequest,\n res: FarmResponse,\n options: {\n pathname: string;\n pagePath: string;\n params: Record<string, string>;\n searchParamsObject: Record<string, string | string[] | undefined>;\n image: {\n modulePath: string;\n kind: MetadataImageKind;\n sourceType?: \"module\" | \"static\";\n staticInfo?: StaticMetadataImageInfo;\n };\n },\n ): Promise<void> {\n const method = (req.method || \"GET\").toUpperCase();\n if (method !== \"GET\" && method !== \"HEAD\") {\n res.statusCode = 405;\n res.setHeader(\"Allow\", \"GET, HEAD\");\n res.end();\n return;\n }\n\n if (options.image.sourceType === \"static\") {\n if (!options.image.staticInfo) {\n throw new Error(`Static metadata image ${options.image.modulePath} is missing file info`);\n }\n await this.writeStaticMetadataImageResponse(req, res, {\n modulePath: options.image.modulePath,\n staticInfo: options.image.staticInfo,\n });\n return;\n }\n\n const imageModule = await this.routeManager.loadRouteModule(options.image.modulePath);\n if (!imageModule.default) {\n throw new Error(\n `Metadata image module ${options.image.modulePath} does not export a default component or handler`,\n );\n }\n\n const imageProps: PageProps = {\n params: options.params,\n searchParams: Promise.resolve(options.searchParamsObject),\n path: options.pagePath,\n };\n const handlerResult =\n typeof imageModule.default === \"function\"\n ? await (imageModule.default as any)(imageProps)\n : imageModule.default;\n\n await this.writeMetadataImageResponse(req, res, handlerResult, imageModule);\n }\n\n private async writeMetadataImageResponse(\n req: FarmRequest,\n res: FarmResponse,\n value: unknown,\n imageModule: RouteModule,\n ): Promise<void> {\n const ifNoneMatch = req.headers[\"if-none-match\"];\n const response = await createFarmMetadataImageResponse(value, imageModule, {\n method: req.method,\n ifNoneMatch: Array.isArray(ifNoneMatch) ? ifNoneMatch[0] : ifNoneMatch,\n });\n await sendWebResponse(res as any, response);\n }\n\n private async writeStaticMetadataImageResponse(\n req: FarmRequest,\n res: FarmResponse,\n image: { modulePath: string; staticInfo: StaticMetadataImageInfo },\n ): Promise<void> {\n const method = (req.method || \"GET\").toUpperCase();\n if (method !== \"GET\" && method !== \"HEAD\") {\n res.statusCode = 405;\n res.setHeader(\"Allow\", \"GET, HEAD\");\n res.end();\n return;\n }\n\n const etag = `\"${image.staticInfo.hash}\"`;\n const requestUrl = resolveFarmRequestURL(req, {\n trustProxy: this.config.server?.trustProxy,\n });\n const isVersioned = requestUrl.searchParams.get(\"v\") === image.staticInfo.hash;\n\n res.setHeader(\"Content-Type\", image.staticInfo.contentType);\n res.setHeader(\"Content-Length\", image.staticInfo.byteLength);\n res.setHeader(\"ETag\", etag);\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n res.setHeader(\n \"Cache-Control\",\n isVersioned ? \"public, max-age=31536000, immutable\" : \"public, max-age=0, must-revalidate\",\n );\n\n if (matchesFarmIfNoneMatch(req.headers[\"if-none-match\"], etag)) {\n res.statusCode = 304;\n res.end();\n return;\n }\n\n res.statusCode = res.statusCode || 200;\n if (method === \"HEAD\") {\n res.end();\n return;\n }\n\n res.write(await fs.promises.readFile(image.modulePath));\n res.end();\n }\n\n private async renderRouteErrorBoundary(\n req: FarmRequest,\n res: FarmResponse,\n options: {\n pathname: string;\n params: Record<string, string>;\n layouts: Array<{ modulePath: string }>;\n searchParamsObject: Record<string, string | string[] | undefined>;\n middlewareMap: Map<string, any>;\n middlewareContext: Map<string, any>;\n pluginExposedContext: Map<string, any>;\n error: unknown;\n statusCode: number;\n errorModulePath: string;\n },\n ): Promise<boolean> {\n try {\n if (res.headersSent || (res as any).writableEnded) {\n if (!(res as any).writableEnded) {\n res.end();\n }\n return true;\n }\n\n const errorModule = await this.routeManager.loadRouteModule(options.errorModulePath);\n if (!errorModule.default) {\n return false;\n }\n\n const ErrorComponent = errorModule.default;\n const errorElement = this.rendererRuntime.createElement(ErrorComponent, {\n ...createRouteStateProps({\n params: options.params,\n searchParamsObject: options.searchParamsObject,\n path: options.pathname,\n middlewareMap: options.middlewareMap,\n pluginExposedContext: options.pluginExposedContext,\n }),\n error: options.error,\n reset: () => {},\n });\n\n let wrapped: any = errorElement;\n const layoutModules = await Promise.all(\n options.layouts.map((layout) => this.routeManager.loadLayoutModule(layout.modulePath)),\n );\n for (let i = layoutModules.length - 1; i >= 0; i--) {\n const LayoutComponent = layoutModules[i].default;\n wrapped = this.rendererRuntime.createElement(LayoutComponent, {\n children: wrapped,\n params: options.params,\n });\n }\n\n wrapped = await this.wrapWithIntegrationProviders(wrapped);\n\n const html = await _runWithMiddlewareData(options.middlewareMap, () =>\n _runWithMiddlewareContext(options.middlewareContext, () =>\n this.rendererRuntime.renderToString(wrapped),\n ),\n );\n res.statusCode = options.statusCode;\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n // A PPR shell failure leaves the \"miss\" caching headers (s-maxage,\n // stale-while-revalidate, X-Farm-PPR) on res. Error responses must not be\n // cached by shared/CDN caches, so clear them here, matching renderError.\n res.setHeader(\"Cache-Control\", \"private, no-store\");\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n if (typeof res.removeHeader === \"function\") {\n res.removeHeader(\"X-Farm-PPR\");\n }\n res.write(this.createFullHTML(html, false, options.pathname));\n res.end();\n return true;\n } catch (renderError) {\n logger.warn(`Failed to render route-level error boundary: ${renderError}`);\n return false;\n }\n }\n\n private async renderBufferedSSR(\n element: unknown,\n req: FarmRequest,\n res: FarmResponse,\n clearMiddlewareData?: () => void,\n options: {\n responseHeaders?: Record<string, string> | undefined;\n routeManifest?: ReturnType<RouteManager[\"generateClientManifest\"]>;\n onComplete?: (html: string) => void | Promise<void>;\n captureStaticShell?: boolean;\n observabilityRoute?: string;\n onSuspenseHoleDetected?: () => void;\n } = {},\n ): Promise<void> {\n const startedAt = Date.now();\n const route = options.observabilityRoute || (req as any).__FARM_ROUTE__ || req.url || \"/\";\n emitFarmEvent({ type: \"render.stream.start\", route });\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n for (const [key, value] of Object.entries(options.responseHeaders || {})) {\n res.setHeader(key, value);\n }\n\n try {\n const manifest =\n options.routeManifest ?? this.routeManager.generateClientManifest(this.config.root);\n const clientManifest = {\n clientEntry: \"/@farm/client.js\",\n routes: {} as Record<string, any>,\n layouts: {} as Record<string, any>,\n slots: [] as Array<Record<string, any>>,\n sharedAssets: [\n {\n tag: \"link\",\n attrs: { rel: \"stylesheet\", href: \"/src/app/globals.css\" },\n },\n ...this.collectDevStyleHrefs().map((href) => ({\n tag: \"link\",\n attrs: { rel: \"stylesheet\", href },\n })),\n ],\n };\n\n for (const routeEntry of manifest.routes) {\n clientManifest.routes[routeEntry.pattern] = {\n modulePath: routeEntry.modulePath,\n pattern: routeEntry.pattern,\n segments: routeEntry.segments,\n search: routeEntry.search,\n isClientComponent: routeEntry.isClientComponent,\n shouldHydrate: routeEntry.shouldHydrate,\n islandStrategy: routeEntry.islandStrategy,\n renderPlan: routeEntry.renderPlan,\n preloads: [routeEntry.modulePath],\n assets: [],\n };\n }\n for (const layoutEntry of manifest.layouts) {\n clientManifest.layouts[layoutEntry.pattern] = {\n modulePath: layoutEntry.modulePath,\n pattern: layoutEntry.pattern,\n shouldHydrate: layoutEntry.shouldHydrate,\n islandStrategy: layoutEntry.islandStrategy,\n preloads: [layoutEntry.modulePath],\n assets: [],\n };\n }\n for (const slotEntry of manifest.slots ?? []) {\n clientManifest.slots.push({\n ...slotEntry,\n preloads: [slotEntry.modulePath],\n assets: [],\n });\n }\n\n const routeSlots = ((req as any).__FARM_ROUTE_SLOTS__ || []).map(\n (slot: Record<string, any>) => ({\n ...slot,\n modulePath:\n typeof slot.modulePath === \"string\"\n ? toViteModuleId(slot.modulePath, this.config.root)\n : slot.modulePath,\n }),\n );\n const deferredProps = prepareDeferredData({\n page: (req as any).__FARM_PROPS__ || {},\n slots: routeSlots,\n });\n const pagePath = (req as any).__FARM_PAGE_PATH__;\n const relativePath = pagePath\n ? toViteModuleId(pagePath, this.config.root)\n : \"/src/app/page.tsx\";\n const deploymentId = this.getDeploymentId();\n const bootstrapScript = `<script>\nwindow.__FARM_PROPS__ = ${serializeInlineValue((deferredProps.data as any).page)};\nwindow.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue((deferredProps.data as any).slots)};\nwindow.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(deploymentId)};\nwindow.__FARM_PATH__ = ${JSON.stringify((req as any).__FARM_ROUTE__ || req.url || \"/\")};\nwindow.__FARM_IS_CLIENT__ = ${JSON.stringify((req as any).__FARM_IS_CLIENT_COMPONENT__ === true)};\nwindow.__FARM_PAGE_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_PAGE_SHOULD_HYDRATE__ === true)};\nwindow.__FARM_LAYOUT_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_LAYOUT_SHOULD_HYDRATE__ === true)};\nwindow.__FARM_LAYOUTS__ = ${JSON.stringify((req as any).__FARM_LAYOUTS__ || [])};\nwindow.__FARM_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_SHOULD_HYDRATE__ === true)};\n${\n (req as any).__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ === true\n ? \"window.__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ = true;\"\n : \"\"\n}\nwindow.__FARM_ISLAND_STRATEGY__ = ${JSON.stringify((req as any).__FARM_ISLAND_STRATEGY__ || \"load\")};\nwindow.__FARM_PAGE_MODULE__ = ${JSON.stringify(relativePath)};\nwindow.__FARM_LOADING_MODULE__ = ${JSON.stringify((req as any).__FARM_LOADING_MODULE_PATH__ || null)};\nwindow.__FARM_MANIFEST__ = ${JSON.stringify(clientManifest)};\nwindow.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};\n${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(getFarmI18nClientSnapshot())};` : \"\"}\n</script>`;\n const deferredScript = createDeferredHydrationScript(deferredProps.records);\n const rendererHydrationScript = this.rendererRuntime.generateHydrationScript?.() || \"\";\n const { html: content, head: rendererHead } =\n await this.renderElementToDocumentParts(element);\n const {\n title,\n tags: metaTags,\n hasFavicon,\n hasExplicitTitle,\n } = renderMetadataHead((req as any).__FARM_METADATA__);\n // A renderer-emitted <title> (e.g. <svelte:head>) must take effect: the\n // first <title> in a document wins, so the fallback framework title is\n // suppressed when the renderer supplies one. Explicit metadata titles\n // still come first and win.\n const documentTitleTag =\n !hasExplicitTitle && /<title[\\s>]/i.test(rendererHead) ? \"\" : `<title>${title}</title>`;\n const i18nSnapshot = getFarmI18nClientSnapshot();\n const alternateTags = i18nSnapshot\n ? renderI18nAlternateLinks((req as any).__FARM_ROUTE__ || req.url || \"/\", i18nSnapshot)\n : \"\";\n const themeDocument = createFarmThemeDocumentParts(\n this.config.theme,\n this.config.basePath,\n getFarmTheme(),\n );\n\n // A layout that returns its own full `<html>` document is composed as the\n // document (Farm assets merged in) rather than nested inside the shell,\n // matching the production build and avoiding invalid nested documents.\n const fullDocument = extractFarmFullDocument(content);\n let html: string;\n if (fullDocument) {\n warnFarmFullDocumentLayout();\n html = composeFarmFullDocument(fullDocument, {\n htmlAttributes: `${i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"}${themeDocument.attributes}`,\n headAssets: [\n themeDocument.head,\n `<meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(deploymentId)}\">`,\n metaTags,\n alternateTags,\n rendererHead,\n renderFarmFontDevHead(this.config.root || process.cwd()),\n `<link rel=\"stylesheet\" href=\"/src/app/globals.css\">`,\n ...this.collectDevStyleLinks(),\n `<script type=\"module\" src=\"/@vite/client\"></script>`,\n rendererHydrationScript,\n bootstrapScript,\n ]\n .filter(Boolean)\n .join(\"\\n \"),\n bodyFooter: [deferredScript, `<script type=\"module\" src=\"/@farm/client.js\"></script>`]\n .filter(Boolean)\n .join(\"\\n \"),\n });\n } else {\n html = `<!DOCTYPE html>\n<html lang=\"${escapeHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n }${themeDocument.attributes}>\n<head>\n ${themeDocument.head}\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(deploymentId)}\">\n ${hasFavicon ? \"\" : '<link rel=\"icon\" href=\"data:,\">'}\n ${documentTitleTag}${metaTags}${alternateTags}${rendererHead ? `\\n ${rendererHead}` : \"\"}\n ${renderFarmFontDevHead(this.config.root || process.cwd())}\n <link rel=\"stylesheet\" href=\"/src/app/globals.css\">${this.collectDevStyleLinks()\n .map((l) => `\\n ${l}`)\n .join(\"\")}\n <script type=\"module\" src=\"/@vite/client\"></script>\n ${rendererHydrationScript}\n ${bootstrapScript}\n</head>\n<body class=\"\">\n <div id=\"root\">${content}</div>\n ${deferredScript}\n <script type=\"module\" src=\"/@farm/client.js\"></script>\n</body>\n</html>`;\n }\n\n emitFarmEvent({\n type: \"render.stream.shellReady\",\n route,\n durationMs: Date.now() - startedAt,\n });\n if ((req.method || \"GET\").toUpperCase() !== \"HEAD\") res.write(html);\n res.end();\n await options.onComplete?.(html);\n emitFarmEvent({\n type: \"render.stream.complete\",\n route,\n durationMs: Date.now() - startedAt,\n });\n } catch (error) {\n emitFarmEvent({ type: \"render.error\", route, error });\n throw error;\n } finally {\n clearMiddlewareData?.();\n }\n }\n\n private async renderWithSSR(\n element: any,\n req: FarmRequest,\n res: FarmResponse,\n clearMiddlewareData?: () => void,\n options: {\n responseHeaders?: Record<string, string> | undefined;\n routeManifest?: ReturnType<RouteManager[\"generateClientManifest\"]>;\n onComplete?: (html: string) => void | Promise<void>;\n captureStaticShell?: boolean;\n observabilityRoute?: string;\n onSuspenseHoleDetected?: () => void;\n } = {},\n ): Promise<void> {\n const renderToPipeableStream = this.rendererRuntime.renderToPipeableStream;\n const fullDocumentRouteKey =\n options.observabilityRoute || (req as any).__FARM_ROUTE__ || req.url || \"/\";\n // A full-document layout can't be composed once the stream's shell is\n // flushed, so a route previously seen to render one is served through the\n // buffered path, which produces a valid single document.\n if (!renderToPipeableStream || fullDocumentRoutes.has(fullDocumentRouteKey)) {\n return this.renderBufferedSSR(element, req, res, clearMiddlewareData, options);\n }\n\n return new Promise((resolve, reject) => {\n const streamStartTime = Date.now();\n const observabilityRoute =\n options.observabilityRoute || (req as any).__FARM_ROUTE__ || req.url || \"/\";\n const deploymentId = this.getDeploymentId();\n emitFarmEvent({ type: \"render.stream.start\", route: observabilityRoute });\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n for (const [key, value] of Object.entries(options.responseHeaders || {})) {\n res.setHeader(key, value);\n }\n const htmlParts: string[] = [];\n const staticShellParts: string[] | undefined = options.captureStaticShell ? [] : undefined;\n let staticShellClosed = false;\n let suspenseHoleEmitted = false;\n let didError = false;\n\n // Get the page path for client-side hydration\n const pagePath = (req as any).__FARM_PAGE_PATH__;\n const isClientComponent = (req as any).__FARM_IS_CLIENT_COMPONENT__ === true;\n const relativePath = pagePath\n ? toViteModuleId(pagePath, this.config.root)\n : \"/src/app/page.tsx\";\n\n // Generate manifest for client-side SPA navigation (TanStack Start pattern)\n // This manifest is inlined in HTML - no separate file or API endpoint\n const manifest =\n options.routeManifest ?? this.routeManager.generateClientManifest(this.config.root);\n\n // Convert to object format for client\n const clientManifest = {\n clientEntry: \"/@farm/client.js\",\n routes: {} as Record<string, any>,\n layouts: {} as Record<string, any>,\n slots: [] as Array<Record<string, any>>,\n sharedAssets: [\n {\n tag: \"link\",\n attrs: { rel: \"stylesheet\", href: \"/src/app/globals.css\" },\n },\n ...this.collectDevStyleHrefs().map((href) => ({\n tag: \"link\",\n attrs: { rel: \"stylesheet\", href },\n })),\n ],\n };\n\n // Convert routes array to object keyed by pattern\n for (const routeEntry of manifest.routes) {\n clientManifest.routes[routeEntry.pattern] = {\n modulePath: routeEntry.modulePath,\n pattern: routeEntry.pattern,\n segments: routeEntry.segments,\n search: routeEntry.search,\n isClientComponent: routeEntry.isClientComponent,\n shouldHydrate: routeEntry.shouldHydrate,\n islandStrategy: routeEntry.islandStrategy,\n renderPlan: routeEntry.renderPlan,\n preloads: [routeEntry.modulePath],\n assets: [],\n };\n }\n\n // Convert layouts array to object\n for (const layoutEntry of manifest.layouts) {\n clientManifest.layouts[layoutEntry.pattern] = {\n modulePath: layoutEntry.modulePath,\n pattern: layoutEntry.pattern,\n shouldHydrate: layoutEntry.shouldHydrate,\n islandStrategy: layoutEntry.islandStrategy,\n preloads: [layoutEntry.modulePath],\n assets: [],\n };\n }\n\n for (const slotEntry of manifest.slots ?? []) {\n clientManifest.slots.push({\n ...slotEntry,\n preloads: [slotEntry.modulePath],\n assets: [],\n });\n }\n\n // Inject page props, component info, and MANIFEST for client-side SPA\n // __FARM_MANIFEST__ contains the full route manifest (TanStack Start pattern)\n const routeSlotPayload = ((req as any).__FARM_ROUTE_SLOTS__ || []).map(\n (slot: Record<string, any>) => ({\n ...slot,\n modulePath:\n typeof slot.modulePath === \"string\"\n ? toViteModuleId(slot.modulePath, this.config.root)\n : slot.modulePath,\n }),\n );\n const deferredProps = prepareDeferredData({\n page: (req as any).__FARM_PROPS__ || {},\n slots: routeSlotPayload,\n });\n const propsScript = `<script>\nwindow.__FARM_PROPS__ = ${serializeInlineValue((deferredProps.data as any).page)};\nwindow.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue((deferredProps.data as any).slots)};\nwindow.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(deploymentId)};\nwindow.__FARM_PATH__ = ${JSON.stringify((req as any).__FARM_ROUTE__ || req.url || \"/\")};\nwindow.__FARM_IS_CLIENT__ = ${JSON.stringify(isClientComponent)};\nwindow.__FARM_PAGE_SHOULD_HYDRATE__ = ${JSON.stringify(\n (req as any).__FARM_PAGE_SHOULD_HYDRATE__ === true,\n )};\nwindow.__FARM_LAYOUT_SHOULD_HYDRATE__ = ${JSON.stringify(\n (req as any).__FARM_LAYOUT_SHOULD_HYDRATE__ === true,\n )};\nwindow.__FARM_LAYOUTS__ = ${JSON.stringify((req as any).__FARM_LAYOUTS__ || [])};\nwindow.__FARM_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_SHOULD_HYDRATE__ === true)};\n${\n (req as any).__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ === true\n ? \"window.__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ = true;\"\n : \"\"\n}\nwindow.__FARM_ISLAND_STRATEGY__ = ${JSON.stringify((req as any).__FARM_ISLAND_STRATEGY__ || \"load\")};\nwindow.__FARM_PAGE_MODULE__ = ${JSON.stringify(relativePath)};\nwindow.__FARM_LOADING_MODULE__ = ${JSON.stringify(\n (req as any).__FARM_LOADING_MODULE_PATH__ || null,\n )};\nwindow.__FARM_MANIFEST__ = ${JSON.stringify(clientManifest)};\nwindow.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};\n${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(getFarmI18nClientSnapshot())};` : \"\"}\n</script>`;\n const hydrationClickQueueScript =\n isClientComponent ||\n (req as any).__FARM_SHOULD_HYDRATE__ === true ||\n (req as any).__FARM_HAS_HYDRATABLE_ROUTE_SLOTS__ === true\n ? createPreHydrationClickQueueScript()\n : \"\";\n\n const {\n title,\n tags: metaTags,\n hasFavicon,\n } = renderMetadataHead((req as any).__FARM_METADATA__);\n const i18nSnapshot = getFarmI18nClientSnapshot();\n const i18nAlternateTags = i18nSnapshot\n ? renderI18nAlternateLinks((req as any).__FARM_ROUTE__ || req.url || \"/\", i18nSnapshot)\n : \"\";\n const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());\n const themeDocument = createFarmThemeDocumentParts(\n this.config.theme,\n this.config.basePath,\n getFarmTheme(),\n );\n\n // React 19: ensure root is a single DOM node so streaming starts early (avoids Fragment delay)\n const streamRoot = this.rendererRuntime.createElement(\n \"div\",\n { style: { display: \"contents\" } },\n element,\n );\n const devStyleLinks = this.collectDevStyleLinks();\n const { pipe } = renderToPipeableStream(streamRoot, {\n onShellReady() {\n const shellReadyMs = Date.now() - streamStartTime;\n emitFarmEvent({\n type: \"render.stream.shellReady\",\n route: observabilityRoute,\n durationMs: shellReadyMs,\n });\n if (process.env.FARM_VERBOSE) {\n console.log(`[FARM STREAM] onShellReady at ${shellReadyMs}ms`);\n }\n const shell = `<!DOCTYPE html>\n<html lang=\"${escapeHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n }${themeDocument.attributes}>\n<head>\n ${themeDocument.head}\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(deploymentId)}\">\n ${hasFavicon ? \"\" : '<link rel=\"icon\" href=\"data:,\">'}\n <title>${title}</title>${metaTags}${i18nAlternateTags}\n ${fontHead}\n <link rel=\"stylesheet\" href=\"/src/app/globals.css\" />${devStyleLinks\n .map((l) => `\\n ${l}`)\n .join(\"\")}\n <script type=\"module\" src=\"/@vite/client\"></script>\n ${propsScript}\n ${hydrationClickQueueScript}\n</head>\n<body class=\"\">\n <div id=\"root\">`;\n htmlParts.push(shell);\n staticShellParts?.push(shell);\n\n let firstChunk = true;\n let checkedFullDocument = false;\n const writableStream = new Writable({\n write(chunk, encoding, callback) {\n if (firstChunk && process.env.FARM_VERBOSE) {\n console.log(`[FARM STREAM] first pipe chunk at ${Date.now() - streamStartTime}ms`);\n firstChunk = false;\n }\n const chunkText = Buffer.isBuffer(chunk) ? chunk.toString() : String(chunk);\n // The shell was already flushed, so this response still nests the\n // document; record the route so later requests take the buffered\n // path (which composes it correctly) and warn the developer once.\n if (!checkedFullDocument) {\n checkedFullDocument = true;\n if (opensFarmFullDocument(chunkText)) {\n fullDocumentRoutes.add(fullDocumentRouteKey);\n warnFarmFullDocumentLayout();\n }\n }\n htmlParts.push(chunkText);\n\n if (staticShellParts && !staticShellClosed) {\n const dynamicIndex = findPPRDynamicChunkIndex(chunkText);\n if (dynamicIndex >= 0) {\n if (dynamicIndex > 0) {\n staticShellParts.push(chunkText.slice(0, dynamicIndex));\n }\n staticShellClosed = true;\n if (!suspenseHoleEmitted) {\n suspenseHoleEmitted = true;\n options.onSuspenseHoleDetected?.();\n }\n } else {\n staticShellParts.push(chunkText);\n }\n }\n\n res.write(chunk, encoding, () => {\n if (typeof (res as any).flush === \"function\") (res as any).flush();\n callback();\n });\n },\n final(callback) {\n const suspenseRevealFallback = `<script>(function(){function moveFragment(srcId,placeholderId){var src=document.getElementById(srcId),ph=document.getElementById(placeholderId);if(!src||!ph||!ph.parentNode)return false;while(src.firstChild)ph.parentNode.insertBefore(src.firstChild,ph);ph.parentNode.removeChild(ph);if(src.parentNode)src.parentNode.removeChild(src);return true}function revealBoundary(boundaryId,sectionId){var boundary=document.getElementById(boundaryId),section=document.getElementById(sectionId);if(!boundary||!section||!boundary.parentNode)return false;var start=boundary.previousSibling;if(!start||start.nodeType!==8)return false;var parent=boundary.parentNode;var node=boundary;var depth=0;while(node){if(node.nodeType===8){var data=node.data;if(data===\"/$\"||data===\"/&\"){if(depth===0)break;depth--;}else if(data===\"$\"||data===\"$?\"||data===\"$~\"||data===\"$!\"||data===\"&\"){depth++;}}var next=node.nextSibling;parent.removeChild(node);node=next;}while(section.firstChild)parent.insertBefore(section.firstChild,node);if(section.parentNode)section.parentNode.removeChild(section);start.data=\"$\";return true}var tries=0;var timer=setInterval(function(){var changed=false;document.querySelectorAll('div[id^=\"S:\"]').forEach(function(section){var suffix=section.id.slice(2);changed=moveFragment('S:'+suffix,'P:'+suffix)||changed;});document.querySelectorAll('template[id^=\"B:\"]').forEach(function(boundary){var suffix=boundary.id.slice(2);changed=revealBoundary('B:'+suffix,'S:'+suffix)||changed;});tries++;if(tries>80||(!document.querySelector('template[id^=\"B:\"]')&&!document.querySelector('template[id^=\"P:\"]'))){clearInterval(timer);}},50);})();</script>`;\n const footer = createDocumentFooter({\n suspenseRevealFallback,\n deferredHydrationScript: createDeferredHydrationScript(deferredProps.records),\n });\n htmlParts.push(footer);\n res.write(footer);\n res.end();\n callback();\n if (clearMiddlewareData) {\n clearMiddlewareData();\n }\n if (!didError && options.onComplete) {\n if (staticShellParts) {\n staticShellParts.push(\n createDocumentFooter({\n suspenseRevealFallback,\n refreshPPR: staticShellClosed,\n }),\n );\n }\n\n const cachedHtml = staticShellParts\n ? staticShellParts.join(\"\")\n : htmlParts.join(\"\");\n Promise.resolve(options.onComplete(cachedHtml)).catch((error) => {\n logger.warn(`Failed to cache PPR shell: ${error}`);\n });\n }\n emitFarmEvent({\n type: \"render.stream.complete\",\n route: observabilityRoute,\n durationMs: Date.now() - streamStartTime,\n });\n resolve();\n },\n });\n\n // Queue the shell immediately, then start piping the Suspense stream.\n // Waiting for the write callback can delay the fallback until the whole\n // response is ready under some dev-server wrappers.\n res.write(shell);\n if (typeof (res as any).flush === \"function\") {\n (res as any).flush();\n }\n pipe(writableStream);\n },\n onShellError(error) {\n didError = true;\n if (!isWebResponse(error) && !isFarmRedirectError(error) && !isFarmNotFoundError(error)) {\n logger.error(`SSR shell error: ${error}`);\n emitFarmEvent({\n type: \"render.error\",\n route: observabilityRoute,\n error,\n });\n }\n\n if (clearMiddlewareData) {\n clearMiddlewareData();\n }\n\n reject(error);\n },\n onError(error) {\n didError = true;\n if (!isWebResponse(error) && !isFarmRedirectError(error) && !isFarmNotFoundError(error)) {\n logger.error(`SSR streaming error: ${error}`);\n emitFarmEvent({\n type: \"render.error\",\n route: observabilityRoute,\n error,\n });\n }\n },\n });\n });\n }\n\n private async render404(req: FarmRequest, res: FarmResponse): Promise<void> {\n res.statusCode = 404;\n\n const pathname = resolveFarmRequestURL(req, {\n trustProxy: this.config.server?.trustProxy,\n }).pathname;\n\n try {\n // Look for custom not-found page\n const appDir = path.join(this.config.root, this.config.srcDir, \"app\");\n const notFoundExtensions = getFarmRendererComponentExtensions(this.config.renderer);\n const notFoundPath = resolveFarmNotFoundComponentPath(\n this.config,\n getFarmAppDirectories(this.config),\n );\n\n if (notFoundPath) {\n // Use routeManager to load the module (uses Vite's ssrLoadModule in dev)\n const notFoundModule = await this.routeManager.loadRouteModule(notFoundPath);\n const NotFoundComponent = notFoundModule.default;\n\n if (NotFoundComponent) {\n // Look for root layout\n let LayoutComponent: any = null;\n for (const ext of notFoundExtensions) {\n const layoutPath = path.join(appDir, `layout${ext}`);\n if (fs.existsSync(layoutPath)) {\n const layoutModule = await this.routeManager.loadLayoutModule(layoutPath);\n LayoutComponent = layoutModule.default;\n break;\n }\n }\n\n // Render the 404 page\n let element: any = this.rendererRuntime.createElement(NotFoundComponent, { pathname });\n\n // Wrap with layout if available\n if (LayoutComponent) {\n element = this.rendererRuntime.createElement(LayoutComponent, {\n children: element,\n });\n }\n\n element = await this.wrapWithIntegrationProviders(element);\n\n // Render to string\n const content = await this.rendererRuntime.renderToString(element);\n\n const html = this.createFullHTML(content, false, pathname);\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.write(html);\n res.end();\n return;\n }\n }\n } catch (error) {\n throw new Error(`Failed to render custom 404 page: ${error}`);\n }\n\n // Render the shared adaptive fallback when the app does not provide its own page.\n const homeHref = escapeHtmlAttribute(applyFarmBasePath(\"/\", this.config.basePath));\n const defaultContent = `<style>${DEFAULT_NOT_FOUND_STYLES}</style><main class=\"farm-default-not-found\" aria-labelledby=\"farm-default-not-found-title\" aria-describedby=\"farm-default-not-found-description\"><div class=\"farm-default-not-found__content\"><h1 id=\"farm-default-not-found-title\" class=\"farm-default-not-found__code\">404</h1><p id=\"farm-default-not-found-description\" class=\"farm-default-not-found__description\">Not found</p><a class=\"farm-default-not-found__home\" href=\"${homeHref}\">GO HOME</a></div></main>`;\n\n const html = this.createFullHTML(defaultContent, false, pathname);\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.write(html);\n res.end();\n }\n\n private async renderError(\n req: FarmRequest,\n res: FarmResponse,\n error: unknown,\n statusCode = 500,\n ): Promise<void> {\n if (res.headersSent || (res as any).writableEnded) {\n if (!(res as any).writableEnded) {\n res.end();\n }\n return;\n }\n\n res.statusCode = statusCode;\n const isDev = process.env.NODE_ENV === \"development\";\n const requestUrl = resolveFarmRequestURL(req, {\n trustProxy: this.config.server?.trustProxy,\n });\n const diagnostics = isDev\n ? createDefaultErrorDiagnostics(error, this.config.root || process.cwd())\n : undefined;\n const statusText = getDefaultErrorStatusText(statusCode);\n const content = createDefaultErrorMarkup({\n statusCode,\n statusText,\n requestPath: requestUrl.pathname,\n method: req.method || \"GET\",\n message: diagnostics?.message,\n errorName: diagnostics?.name,\n stack: diagnostics?.stack,\n sourceFrame: diagnostics?.sourceFrame,\n development: isDev,\n farmVersion: FARM_VERSION,\n nodeVersion: process.version,\n mode: isDev ? \"development\" : \"production\",\n });\n\n const html = this.createFullHTML(\n content,\n false,\n requestUrl.pathname,\n `${statusCode} - ${statusText}`,\n );\n\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.setHeader(\"Cache-Control\", \"private, no-store\");\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n res.write(html);\n res.end();\n }\n\n private createFullHTML(\n content: string,\n isClientComponent = false,\n requestPath = \"/\",\n documentTitle = \"Farm.js App\",\n ): string {\n const i18nSnapshot = getFarmI18nClientSnapshot();\n const clientScript = isClientComponent\n ? ` <script type=\"module\" src=\"/@farm/client.js\"></script>`\n : \"\";\n const integrationManifestScript = `<script>\nwindow.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(this.getDeploymentId())};\nwindow.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};\n${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue(i18nSnapshot)};` : \"\"}\n</script>`;\n const alternateLinks = i18nSnapshot ? renderI18nAlternateLinks(requestPath, i18nSnapshot) : \"\";\n const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());\n const themeDocument = createFarmThemeDocumentParts(\n this.config.theme,\n this.config.basePath,\n getFarmTheme(),\n );\n const rendererHydrationScript = this.rendererRuntime.generateHydrationScript?.() || \"\";\n\n // A layout that returns its own full `<html>` document must not be nested\n // inside this shell (that yields invalid nested `<html>`/`<head>`/`<body>`).\n // Compose Farm's managed assets into the layout's document instead, matching\n // the production build's `hasFullDocument` path.\n const fullDocument = extractFarmFullDocument(content);\n if (fullDocument) {\n warnFarmFullDocumentLayout();\n return composeFarmFullDocument(fullDocument, {\n htmlAttributes: `${i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"}${themeDocument.attributes}`,\n headAssets: [\n themeDocument.head,\n `<meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(this.getDeploymentId())}\">`,\n alternateLinks,\n fontHead,\n `<link rel=\"stylesheet\" href=\"/src/app/globals.css\" />`,\n ...this.collectDevStyleLinks(),\n `<script type=\"module\" src=\"/@vite/client\"></script>`,\n rendererHydrationScript,\n integrationManifestScript,\n ]\n .filter(Boolean)\n .join(\"\\n \"),\n bodyFooter: clientScript.trim(),\n });\n }\n\n return `<!DOCTYPE html>\n<html lang=\"${escapeHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n }${themeDocument.attributes}>\n<head>\n ${themeDocument.head}\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(this.getDeploymentId())}\">\n <link rel=\"icon\" href=\"data:,\">\n <title>${escapeHtmlAttribute(documentTitle)}</title>${alternateLinks}\n ${fontHead}\n <link rel=\"stylesheet\" href=\"/src/app/globals.css\" />${this.collectDevStyleLinks()\n .map((l) => `\\n ${l}`)\n .join(\"\")}\n <script type=\"module\" src=\"/@vite/client\"></script>\n ${rendererHydrationScript}\n ${integrationManifestScript}\n</head>\n<body class=\"\">\n <div id=\"root\">${content}</div>\n${clientScript}\n</body>\n</html>`;\n }\n\n private applyDeploymentHeaders(req: FarmRequest, res: FarmResponse): void {\n const deploymentId = this.getDeploymentId();\n res.setHeader(FARM_DEPLOYMENT_ID_HEADER, deploymentId);\n if ((req.method || \"GET\").toUpperCase() !== \"GET\") return;\n\n const forwardedProto = req.headers[\"x-forwarded-proto\"];\n const isSecure =\n (Array.isArray(forwardedProto) ? forwardedProto[0] : forwardedProto)\n ?.split(\",\")[0]\n ?.trim() === \"https\" || Boolean((req.socket as any)?.encrypted);\n const cookie = createFarmDeploymentCookie(deploymentId, this.config.basePath || \"/\", isSecure);\n const existing = res.getHeader(\"Set-Cookie\");\n\n if (Array.isArray(existing)) {\n res.setHeader(\"Set-Cookie\", [...existing, cookie]);\n } else if (existing) {\n res.setHeader(\"Set-Cookie\", [String(existing), cookie]);\n } else {\n res.setHeader(\"Set-Cookie\", cookie);\n }\n }\n\n private getDeploymentId(): string {\n return this.config.deploymentId || \"development\";\n }\n}\n","// Stylesheets the dev document must link beyond globals.css.\n//\n// The dev shell links `/src/app/globals.css` and nothing else, so CSS that\n// enters through a JS import — `import \"@fontsource-variable/geist\"` in a\n// layout, a component stylesheet, vendor CSS — never reaches the page: no\n// error, just silently missing rules (farming-labs/farm.js#658). Vite's module\n// graph knows every stylesheet the app touched; collecting it closes the gap.\n\n/** The slice of Vite's ModuleNode this module reads, kept minimal for tests. */\nexport interface DevStyleModule {\n url?: string | null;\n id?: string | null;\n file?: string | null;\n}\n\nconst STYLE_EXTENSIONS = /\\.(css|scss|sass|less|styl|stylus)(?:$|\\?)/;\n\n/** The stylesheet link the shell already emits; its own `@import`s resolve\n * inside that response, so neither it nor its query variants repeat here. */\nconst ALREADY_LINKED = \"/src/app/globals.css\";\n\n/**\n * Stylesheet URLs from the module graph that the document should link,\n * deduped and sorted for a deterministic head. CSS modules (`.module.css`)\n * are excluded: their classes are hashed through the JS pipeline and a plain\n * link would apply nothing useful.\n */\nexport function collectDevStylesheetUrls(modules: Iterable<DevStyleModule>): string[] {\n const seen = new Set<string>();\n for (const mod of modules) {\n const id = mod.id ?? mod.file ?? \"\";\n if (!STYLE_EXTENSIONS.test(id)) continue;\n if (id.includes(\".module.\")) continue;\n const url = mod.url;\n if (!url || !url.startsWith(\"/\")) continue;\n const bare = url.split(\"?\")[0]!;\n if (bare === ALREADY_LINKED) continue;\n seen.add(bare);\n }\n return [...seen].sort();\n}\n","// Handling for a root layout that returns a full `<html>…</html>` document.\n//\n// Farm owns the document shell — a layout is expected to return a fragment (its\n// children), like the docs example does. When a layout instead returns a whole\n// document, the dev renderer must compose that document as the response rather\n// than nesting it inside the generated shell, which would emit invalid nested\n// `<html>`/`<head>`/`<body>`. This mirrors the production (Nitro) build's\n// `hasFullDocument` path so dev and prod agree.\n\n/** Peel Farm's leading `display:contents` wrapper divs (the stream root and any\n * layout-boundary divs) so the layout's own markup is exposed for inspection. */\nfunction stripContentsWrappers(markup: string): string {\n let out = markup.replace(/^\\s+/, \"\");\n const opener = /^<div\\b[^>]*style=\"display\\s*:\\s*contents\"[^>]*>/i;\n let match: RegExpExecArray | null;\n while ((match = opener.exec(out))) {\n out = out.slice(match[0].length).replace(/^\\s+/, \"\");\n }\n return out;\n}\n\n/**\n * When `markup` (a rendered layout tree, possibly wrapped in Farm's\n * `display:contents` boundary divs) is a full HTML document, return just that\n * `<html>…</html>` document (leading `<!DOCTYPE>` preserved when present);\n * otherwise return `null`.\n */\nexport function extractFarmFullDocument(markup: string): string | null {\n const inner = stripContentsWrappers(markup);\n if (!/^<!doctype/i.test(inner) && !/^<html[\\s>]/i.test(inner)) return null;\n const start = markup.search(/<!doctype|<html[\\s>]/i);\n const closeIndex = markup.toLowerCase().lastIndexOf(\"</html>\");\n if (start < 0 || closeIndex < 0) return null;\n return markup.slice(start, closeIndex + \"</html>\".length);\n}\n\n/** True when a rendered layout tree is (or wraps) a full HTML document. */\nexport function isFarmFullDocument(markup: string): boolean {\n return extractFarmFullDocument(markup) !== null;\n}\n\n/**\n * True when `markup` *begins* a full HTML document once Farm's wrappers are\n * peeled — usable on a streamed prefix, before the closing `</html>` has been\n * flushed.\n */\nexport function opensFarmFullDocument(markup: string): boolean {\n const inner = stripContentsWrappers(markup);\n return /^<!doctype/i.test(inner) || /^<html[\\s>]/i.test(inner);\n}\n\nexport interface FarmFullDocumentAssets {\n /** Farm-managed `<head>` markup (styles, client/runtime scripts, metadata). */\n headAssets: string;\n /** Markup injected just before `</body>` (client bootstrap / entry scripts). */\n bodyFooter: string;\n /** Extra `<html>` attributes to merge (theme, direction). */\n htmlAttributes?: string;\n}\n\n/**\n * Compose a layout's own full document with Farm's managed head + body assets,\n * instead of nesting it inside the shell. String replacements use function\n * replacers so any `$`-sequences (`$&`, `$'`, `$$`) in the injected markup or\n * the document are inserted literally rather than expanded.\n */\nexport function composeFarmFullDocument(\n documentHtml: string,\n assets: FarmFullDocumentAssets,\n): string {\n let html = documentHtml;\n\n if (assets.htmlAttributes) {\n html = html.replace(\n /<html\\b([^>]*)>/i,\n (_match, attrs: string) => `<html${attrs}${assets.htmlAttributes}>`,\n );\n }\n\n // Ensure a hydration root exists so the client can mount, matching the shell.\n if (!/\\sid=[\"']root[\"']/i.test(html)) {\n html = html\n .replace(/<body\\b([^>]*)>/i, '<body$1><div id=\"root\">')\n .replace(/<\\/body>/i, \"</div></body>\");\n }\n\n if (assets.headAssets) {\n html = html.replace(/<\\/head>/i, () => ` ${assets.headAssets}\\n</head>`);\n }\n if (assets.bodyFooter) {\n html = html.replace(/<\\/body>/i, () => ` ${assets.bodyFooter}\\n</body>`);\n }\n\n return /^\\s*<!doctype/i.test(html) ? html : `<!DOCTYPE html>\\n${html}`;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { getFarmRendererComponentExtensions, type FarmRenderer } from \"./renderer\";\n\ninterface FarmNotFoundPathConfig {\n root: string;\n renderer: FarmRenderer;\n notFound?: {\n component?: string;\n };\n}\n\nexport function resolveFarmNotFoundComponentPath(\n config: FarmNotFoundPathConfig,\n appDirs: readonly string[],\n): string | null {\n const extensions = getFarmRendererComponentExtensions(config.renderer);\n const configuredPath = config.notFound?.component?.trim();\n\n if (configuredPath) {\n const componentPath = path.isAbsolute(configuredPath)\n ? path.normalize(configuredPath)\n : path.resolve(config.root, configuredPath);\n if (!extensions.some((extension) => componentPath.endsWith(extension))) {\n throw new Error(\n `notFound.component must use one of the configured renderer extensions: ${extensions.join(\", \")}`,\n );\n }\n if (!fs.existsSync(componentPath) || !fs.statSync(componentPath).isFile()) {\n throw new Error(`notFound.component was not found: ${componentPath}`);\n }\n return componentPath;\n }\n\n let discoveredPath: string | null = null;\n for (const appDir of appDirs) {\n for (const extension of extensions) {\n const candidate = path.join(appDir, `not-found${extension}`);\n if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {\n discoveredPath = candidate;\n break;\n }\n }\n }\n return discoveredPath;\n}\n","import { createHash, timingSafeEqual } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { pathToFileURL } from \"node:url\";\nimport type { Plugin, ResolvedConfig, Rollup, ViteDevServer } from \"vite\";\nimport type { FarmFontDisplay, FarmFontSource, RemoteFontSource } from \"./font\";\n\nconst FONT_IMPORTS = new Set([\"@farm.js/core\", \"@farm.js/core/font\"]);\nconst FONT_FUNCTIONS = new Set<FontLoaderKind>([\"localFont\", \"remoteFont\"]);\nconst FONT_CSS_PREFIX = \"\\0farm:font-css:\";\nconst FONT_RUNTIME_ID = \"\\0farm:font-runtime\";\nconst PUBLIC_FONT_RUNTIME_ID = \"virtual:farm-font-runtime\";\nconst PRELOAD_HEADER_MARKER = \"__FARM_FONT_PRELOAD_HEADER__\";\nconst FONT_SECTION_START = \"/* farm-fonts:start */\";\nconst FONT_SECTION_END = \"/* farm-fonts:end */\";\nconst MODULE_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\nconst FONT_EXTENSION_RE = /\\.(woff2?|ttf|otf)$/i;\nconst MAX_REMOTE_FONT_BYTES = 20 * 1024 * 1024;\nconst FONT_REGISTRIES_KEY = Symbol.for(\"farm.fontRegistries\");\nconst FONT_REMOTE_BYTES_KEY = Symbol.for(\"farm.fontRemoteBytes\");\n\ntype FontLoaderKind = \"localFont\" | \"remoteFont\";\ntype OutputAsset = Rollup.OutputAsset;\ntype OutputBundle = Rollup.OutputBundle;\n\ninterface AstNode {\n type: string;\n start: number;\n end: number;\n [key: string]: unknown;\n}\n\ninterface FontResource {\n bytes?: Buffer;\n extension: string;\n format: string;\n hash: string;\n outputFileName?: string;\n publicPath?: string;\n publicUrl: string;\n}\n\ninterface NormalizedFontSource {\n source: string;\n weight: string;\n style: string;\n unicodeRange?: string;\n resource: FontResource;\n}\n\ninterface FontDefinition {\n id: string;\n family: string;\n className: string;\n variableClassName: string;\n variable?: string;\n fallback: string[];\n display: FarmFontDisplay;\n preload: boolean;\n preloadResources: Array<{ href: string; type: string }>;\n weight?: number | string;\n style?: string;\n sources: NormalizedFontSource[];\n}\n\ninterface FontCall {\n kind: FontLoaderKind;\n binding?: string;\n node: AstNode;\n ancestors: readonly AstNode[];\n}\n\ninterface Replacement {\n start: number;\n end: number;\n code: string;\n}\n\nexport interface TransformFarmFontCallsOptions {\n code: string;\n id: string;\n root: string;\n production: boolean;\n parse: (code: string) => AstNode;\n register: (\n moduleId: string,\n calls: Array<{ kind: FontLoaderKind; options: Record<string, unknown> }>,\n ) => Promise<FontDefinition[]>;\n}\n\nexport interface TransformFarmFontCallsResult {\n code: string;\n fonts: FontDefinition[];\n}\n\nconst registries = getGlobalMap<string, FarmFontRegistry>(FONT_REGISTRIES_KEY);\nconst remoteBytes = getGlobalMap<string, Promise<Buffer>>(FONT_REMOTE_BYTES_KEY);\n\nexport function farmFontImportsPlugin(\n options: { root?: string; basePath?: string; publicDir?: string | false } = {},\n): Plugin {\n let root = normalizeRoot(options.root || process.cwd());\n let production = process.env.NODE_ENV === \"production\";\n let registry = getOrCreateRegistry(root, options.basePath, options.publicDir);\n\n const updateRoot = (nextRoot: string, basePath?: string, publicDir?: string | false) => {\n const normalized = normalizeRoot(nextRoot);\n root = normalized;\n registry = getOrCreateRegistry(root, basePath, publicDir);\n };\n\n return {\n name: \"farm:font-imports\",\n enforce: \"post\",\n\n configResolved(config: ResolvedConfig) {\n production = config.command === \"build\";\n updateRoot(\n config.root,\n options.basePath || config.base,\n options.publicDir === undefined ? config.publicDir : options.publicDir,\n );\n registry.production = production;\n },\n\n configureServer(server: ViteDevServer) {\n updateRoot(\n server.config.root,\n options.basePath || server.config.base,\n options.publicDir === undefined ? server.config.publicDir : options.publicDir,\n );\n registry.production = false;\n server.middlewares.use(async (req, res, next) => {\n const pathname = new URL(req.url || \"/\", \"http://farm.local\").pathname;\n\n if (pathname === \"/@farm/fonts.css\") {\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", \"text/css; charset=utf-8\");\n res.setHeader(\"Cache-Control\", \"no-store\");\n res.end(registry.renderCss(false));\n return;\n }\n\n const resource = registry.getDevResource(pathname);\n if (!resource?.bytes) {\n next();\n return;\n }\n\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", fontContentType(resource.extension));\n res.setHeader(\"Cache-Control\", \"public, max-age=31536000, immutable\");\n res.end(resource.bytes);\n });\n },\n\n resolveId(id) {\n if (id === PUBLIC_FONT_RUNTIME_ID || id === FONT_RUNTIME_ID) return FONT_RUNTIME_ID;\n if (id.startsWith(\"virtual:farm-font-css/\")) {\n return `${FONT_CSS_PREFIX}${id.slice(\"virtual:farm-font-css/\".length)}`;\n }\n if (id.startsWith(FONT_CSS_PREFIX)) return id;\n return null;\n },\n\n load(id) {\n if (id === FONT_RUNTIME_ID) {\n return `export const farmFontPreloadHeader = decodeURIComponent(${JSON.stringify(PRELOAD_HEADER_MARKER)});`;\n }\n if (!id.startsWith(FONT_CSS_PREFIX)) return null;\n return registry.renderFontCss(\n id.slice(FONT_CSS_PREFIX.length).replace(/\\.css$/, \"\"),\n production,\n );\n },\n\n async transform(code, id) {\n const result = await transformFarmFontCalls({\n code,\n id,\n root,\n production,\n parse: (source) => this.parse(source) as unknown as AstNode,\n register: (moduleId, calls) => registry.register(moduleId, calls, production),\n });\n\n if (!result) registry.clearModule(id.split(\"?\", 1)[0]);\n\n return result ? { code: result.code, map: null } : null;\n },\n\n async generateBundle(_options, bundle) {\n registry.emitAssets(this, bundle);\n },\n };\n}\n\nexport async function transformFarmFontCalls(\n options: TransformFarmFontCallsOptions,\n): Promise<TransformFarmFontCallsResult | null> {\n const cleanId = options.id.split(\"?\", 1)[0];\n if (\n !MODULE_EXTENSION_RE.test(cleanId) ||\n /\\.d\\.[cm]?ts$/.test(cleanId) ||\n !containsFontFunction(options.code)\n ) {\n return null;\n }\n\n const ast = options.parse(options.code);\n const bindings = findFontBindings(ast);\n if (bindings.named.size === 0 && bindings.namespaces.size === 0) return null;\n\n const calls = findFontCalls(ast, bindings);\n if (calls.length === 0) return null;\n validateFontBindingReferences(ast, calls, cleanId);\n\n const registeredCalls = calls.map((call) => ({\n kind: call.kind,\n options: readFontOptions(options.code, cleanId, call),\n }));\n const fonts = await options.register(cleanId, registeredCalls);\n const replacements: Replacement[] = calls.map((call, index) => ({\n start: call.node.start,\n end: call.node.end,\n code: serializeFontResult(fonts[index]),\n }));\n replacements.push(\n ...createFontImportReplacements(\n options.code,\n ast,\n new Set(calls.map((call) => call.binding).filter((value): value is string => Boolean(value))),\n ),\n );\n const imports = options.production\n ? \"\"\n : Array.from(new Set(fonts.map((font) => font.id)))\n .map((id) => `import ${JSON.stringify(`virtual:farm-font-css/${id}.css`)};`)\n .join(\"\\n\");\n\n return {\n code: `${applyReplacements(options.code, replacements)}\\n${imports}\\n`,\n fonts,\n };\n}\n\nexport function renderFarmFontDevHead(root: string): string {\n const registry = registries.get(normalizeRoot(root));\n if (!registry || registry.production || registry.size === 0) return \"\";\n return `${registry.renderPreloadTags(false)}\\n <link rel=\"stylesheet\" href=\"/@farm/fonts.css\">`;\n}\n\nclass FarmFontRegistry {\n root: string;\n basePath: string;\n publicDir: string | false;\n production = false;\n private modules = new Map<string, FontDefinition[]>();\n private definitions = new Map<string, FontDefinition>();\n private resources = new Map<string, FontResource>();\n\n constructor(root: string, basePath = \"/\", publicDir?: string | false) {\n this.root = root;\n this.basePath = normalizeBasePath(basePath);\n this.publicDir = normalizePublicDir(root, publicDir);\n }\n\n get size(): number {\n return this.getDefinitions().length;\n }\n\n async register(\n moduleId: string,\n calls: Array<{ kind: FontLoaderKind; options: Record<string, unknown> }>,\n production: boolean,\n ): Promise<FontDefinition[]> {\n const definitions: FontDefinition[] = [];\n for (const call of calls) {\n definitions.push(await this.createDefinition(moduleId, call.kind, call.options, production));\n }\n this.modules.set(moduleId, definitions);\n for (const definition of definitions) this.definitions.set(definition.id, definition);\n return definitions;\n }\n\n clearModule(moduleId: string): void {\n this.modules.delete(moduleId);\n }\n\n renderFontCss(id: string, production: boolean): string {\n const definition = this.definitions.get(id);\n return definition ? renderFontDefinitionCss(definition, production, this.basePath) : \"\";\n }\n\n renderCss(production: boolean): string {\n const css = this.getDefinitions()\n .map((definition) => renderFontDefinitionCss(definition, production, this.basePath))\n .join(\"\\n\\n\");\n return css ? `${FONT_SECTION_START}\\n${css}\\n${FONT_SECTION_END}\\n` : \"\";\n }\n\n renderPreloadHeader(production: boolean): string {\n return this.getPreloadResources(production)\n .map(\n ({ url, resource }) =>\n `<${url}>; rel=preload; as=font; type=${fontContentType(resource.extension)}; crossorigin`,\n )\n .join(\", \");\n }\n\n renderPreloadTags(production: boolean): string {\n return this.getPreloadResources(production)\n .map(\n ({ url, resource }) =>\n `<link rel=\"preload\" href=\"${escapeHtmlAttribute(url)}\" as=\"font\" type=\"${fontContentType(resource.extension)}\" crossorigin>`,\n )\n .join(\"\\n \");\n }\n\n getDevResource(pathname: string): FontResource | undefined {\n for (const resource of this.getActiveResources()) {\n if (resource.bytes && resourceUrl(resource, false, this.basePath) === pathname) {\n return resource;\n }\n }\n return undefined;\n }\n\n emitAssets(context: { emitFile: (file: any) => string }, bundle: OutputBundle): void {\n for (const resource of this.getActiveResources()) {\n if (!resource.bytes || !resource.outputFileName) continue;\n if (bundle[resource.outputFileName]) continue;\n context.emitFile({\n type: \"asset\",\n fileName: resource.outputFileName,\n source: resource.bytes,\n });\n }\n\n const css = this.renderCss(true);\n if (css) {\n const cssAssets = Object.values(bundle).filter(\n (entry): entry is OutputAsset => entry.type === \"asset\" && entry.fileName.endsWith(\".css\"),\n );\n const clientCss =\n cssAssets.find(\n (entry): entry is OutputAsset =>\n entry.type === \"asset\" && entry.fileName === \"farm-client.css\",\n ) ?? (cssAssets.length === 1 ? cssAssets[0] : undefined);\n if (clientCss) {\n clientCss.source = replaceFontSection(assetSourceToString(clientCss.source), css);\n } else if (!bundle[\"farm-fonts.css\"]) {\n context.emitFile({\n type: \"asset\",\n fileName: \"farm-fonts.css\",\n source: css,\n });\n }\n }\n\n const preloadHeader = encodeURIComponent(this.renderPreloadHeader(true));\n for (const entry of Object.values(bundle)) {\n if (entry.type === \"chunk\" && entry.code.includes(PRELOAD_HEADER_MARKER)) {\n entry.code = entry.code.split(PRELOAD_HEADER_MARKER).join(preloadHeader);\n }\n }\n }\n\n private getDefinitions(): FontDefinition[] {\n const active = new Map<string, FontDefinition>();\n for (const definitions of this.modules.values()) {\n for (const definition of definitions) active.set(definition.id, definition);\n }\n return Array.from(active.values()).sort((left, right) => left.id.localeCompare(right.id));\n }\n\n private getActiveResources(): FontResource[] {\n const active = new Set<FontResource>();\n for (const definition of this.getDefinitions()) {\n for (const source of definition.sources) active.add(source.resource);\n }\n return Array.from(active);\n }\n\n private getPreloadResources(production: boolean) {\n const seen = new Set<string>();\n const resources: Array<{ url: string; resource: FontResource }> = [];\n for (const definition of this.getDefinitions()) {\n if (!definition.preload) continue;\n for (const source of definition.sources) {\n const url = resourceUrl(source.resource, production, this.basePath);\n if (seen.has(url)) continue;\n seen.add(url);\n resources.push({ url, resource: source.resource });\n }\n }\n return resources;\n }\n\n private async createDefinition(\n moduleId: string,\n kind: FontLoaderKind,\n raw: Record<string, unknown>,\n production: boolean,\n ): Promise<FontDefinition> {\n validateOptionKeys(moduleId, kind, raw);\n const family = requireString(raw.family, moduleId, `${kind}() family`);\n const display = (raw.display ?? \"swap\") as FarmFontDisplay;\n if (![\"auto\", \"block\", \"swap\", \"fallback\", \"optional\"].includes(display)) {\n throw fontError(moduleId, `invalid font-display value ${JSON.stringify(display)}`);\n }\n const variable = optionalString(raw.variable, moduleId, `${kind}() variable`);\n if (variable && !/^--[A-Za-z_][\\w-]*$/.test(variable)) {\n throw fontError(moduleId, `font variable must be a CSS custom property such as --font-sans`);\n }\n const fallback = readStringArray(raw.fallback, moduleId, `${kind}() fallback`);\n const defaultWeight = optionalWeight(raw.weight, moduleId);\n const defaultStyle = optionalCssDescriptor(raw.style, moduleId, \"style\") || \"normal\";\n const sources = readSources(raw.src, moduleId, kind, defaultWeight, defaultStyle);\n const strategy = kind === \"remoteFont\" ? (raw.strategy ?? \"self-host\") : \"self-host\";\n if (strategy !== \"self-host\" && strategy !== \"external\") {\n throw fontError(moduleId, `remoteFont() strategy must be \"self-host\" or \"external\"`);\n }\n const integrity = optionalString(raw.integrity, moduleId, `${kind}() integrity`);\n\n const normalizedSources: NormalizedFontSource[] = [];\n for (const source of sources) {\n const resource = await this.resolveResource({\n kind,\n moduleId,\n source: source.path,\n strategy,\n integrity: source.integrity ?? integrity,\n production,\n });\n normalizedSources.push({\n source: source.path,\n weight: String(source.weight ?? defaultWeight ?? \"400\"),\n style: source.style || defaultStyle,\n unicodeRange: source.unicodeRange,\n resource,\n });\n }\n\n const identity = JSON.stringify({\n family,\n display,\n variable,\n fallback,\n preload: raw.preload !== false,\n sources: normalizedSources.map((source) => ({\n hash: source.resource.hash,\n url: source.resource.publicUrl,\n weight: source.weight,\n style: source.style,\n unicodeRange: source.unicodeRange,\n })),\n });\n const id = createHash(\"sha256\").update(identity).digest(\"hex\").slice(0, 10);\n\n return {\n id,\n family,\n className: `farm-font-${id}`,\n variableClassName: variable ? `farm-font-variable-${id}` : \"\",\n variable,\n fallback,\n display,\n preload: raw.preload !== false,\n preloadResources:\n raw.preload === false\n ? []\n : normalizedSources.map(({ resource }) => ({\n href: resourceUrl(resource, production, this.basePath),\n type: fontContentType(resource.extension),\n })),\n weight: defaultWeight,\n style: raw.style === undefined ? undefined : defaultStyle,\n sources: normalizedSources,\n };\n }\n\n private async resolveResource(input: {\n kind: FontLoaderKind;\n moduleId: string;\n source: string;\n strategy: unknown;\n integrity?: string;\n production: boolean;\n }): Promise<FontResource> {\n if (input.kind === \"remoteFont\") {\n let url: URL;\n try {\n url = new URL(input.source);\n } catch {\n throw fontError(input.moduleId, `remoteFont() source must be an absolute HTTPS URL`);\n }\n if (url.protocol !== \"https:\") {\n throw fontError(input.moduleId, `remoteFont() only accepts HTTPS URLs`);\n }\n const extension = extensionFromPath(url.pathname);\n if (input.strategy === \"external\") {\n const hash = createHash(\"sha256\").update(url.href).digest(\"hex\").slice(0, 12);\n const resource = {\n extension,\n format: fontFormat(extension),\n hash,\n publicUrl: url.href,\n };\n this.resources.set(`external:${url.href}`, resource);\n return resource;\n }\n\n const bytes = await fetchRemoteFont(url, input.integrity);\n return this.createSelfHostedResource(bytes, extension, path.basename(url.pathname));\n }\n\n if (input.source.startsWith(\"/\")) {\n return this.createPublicResource(input.moduleId, input.source);\n }\n\n const resolvedPath = resolveLocalFontPath(input.source, input.moduleId, this.root);\n if (!FONT_EXTENSION_RE.test(resolvedPath)) {\n throw fontError(\n input.moduleId,\n `unsupported local font file ${JSON.stringify(input.source)}`,\n );\n }\n let bytes: Buffer;\n try {\n bytes = await readFile(resolvedPath);\n } catch (error) {\n throw fontError(\n input.moduleId,\n `could not read ${JSON.stringify(input.source)}: ${(error as Error).message}`,\n );\n }\n return this.createSelfHostedResource(\n bytes,\n path.extname(resolvedPath),\n path.basename(resolvedPath),\n );\n }\n\n private async createPublicResource(moduleId: string, source: string): Promise<FontResource> {\n if (!this.publicDir) {\n throw fontError(\n moduleId,\n `cannot resolve ${JSON.stringify(source)} because publicDir is disabled`,\n );\n }\n const publicPath = normalizePublicFontPath(source, moduleId);\n const resolvedPath = path.resolve(this.publicDir, `.${publicPath}`);\n if (!isPathInside(this.publicDir, resolvedPath)) {\n throw fontError(moduleId, `public font path must stay inside publicDir`);\n }\n if (!FONT_EXTENSION_RE.test(resolvedPath)) {\n throw fontError(moduleId, `unsupported public font file ${JSON.stringify(source)}`);\n }\n\n let bytes: Buffer;\n try {\n bytes = await readFile(resolvedPath);\n } catch (error) {\n throw fontError(\n moduleId,\n `could not read ${JSON.stringify(source)} from publicDir: ${(error as Error).message}`,\n );\n }\n\n const extension = path.extname(resolvedPath).toLowerCase();\n const hash = createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 12);\n const resource: FontResource = {\n extension,\n format: fontFormat(extension),\n hash,\n publicPath,\n publicUrl: \"\",\n };\n this.resources.set(`public:${publicPath}`, resource);\n return resource;\n }\n\n private createSelfHostedResource(\n bytes: Buffer,\n extension: string,\n fileName: string,\n ): FontResource {\n const normalizedExtension = extension.toLowerCase();\n const hash = createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 12);\n const baseName = sanitizeFileName(path.basename(fileName, extension)) || \"font\";\n const outputFileName = `assets/fonts/${baseName}-h${hash}${normalizedExtension}`;\n const key = `${hash}${normalizedExtension}`;\n const existing = this.resources.get(key);\n if (existing) return existing;\n\n const resource: FontResource = {\n bytes,\n extension: normalizedExtension,\n format: fontFormat(normalizedExtension),\n hash,\n outputFileName,\n publicUrl: \"\",\n };\n this.resources.set(key, resource);\n return resource;\n }\n}\n\nfunction findFontBindings(ast: AstNode) {\n const named = new Map<string, FontLoaderKind>();\n const namespaces = new Set<string>();\n const body = Array.isArray(ast.body) ? ast.body : [];\n\n for (const statement of body) {\n if (!isAstNode(statement) || statement.type !== \"ImportDeclaration\") continue;\n const source = isAstNode(statement.source) ? statement.source.value : undefined;\n if (typeof source !== \"string\" || !FONT_IMPORTS.has(source)) continue;\n\n const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers : [];\n for (const specifier of specifiers) {\n if (!isAstNode(specifier) || !isAstNode(specifier.local)) continue;\n const localName = specifier.local.name;\n if (typeof localName !== \"string\") continue;\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n namespaces.add(localName);\n continue;\n }\n if (specifier.type !== \"ImportSpecifier\" || !isAstNode(specifier.imported)) continue;\n const importedName = specifier.imported.name ?? specifier.imported.value;\n if (isFontLoaderKind(importedName)) named.set(localName, importedName);\n }\n }\n return { named, namespaces };\n}\n\nfunction findFontCalls(ast: AstNode, bindings: ReturnType<typeof findFontBindings>): FontCall[] {\n const calls: FontCall[] = [];\n walkAst(ast, (node, ancestors) => {\n if (node.type !== \"CallExpression\" || !isAstNode(node.callee)) return;\n let kind: FontLoaderKind | undefined;\n if (node.callee.type === \"Identifier\" && typeof node.callee.name === \"string\") {\n kind = bindings.named.get(node.callee.name);\n if (kind) calls.push({ kind, binding: node.callee.name, node, ancestors });\n } else if (\n node.callee.type === \"MemberExpression\" &&\n node.callee.computed !== true &&\n isAstNode(node.callee.object) &&\n isAstNode(node.callee.property) &&\n node.callee.object.type === \"Identifier\" &&\n node.callee.property.type === \"Identifier\" &&\n typeof node.callee.object.name === \"string\" &&\n typeof node.callee.property.name === \"string\" &&\n bindings.namespaces.has(node.callee.object.name) &&\n isFontLoaderKind(node.callee.property.name)\n ) {\n kind = node.callee.property.name;\n }\n if (kind && node.callee.type !== \"Identifier\") calls.push({ kind, node, ancestors });\n });\n return calls;\n}\n\nfunction validateFontBindingReferences(ast: AstNode, calls: FontCall[], id: string): void {\n const calledBindings = new Set(\n calls.map((call) => call.binding).filter((binding): binding is string => Boolean(binding)),\n );\n const transformedCallees = new Set(\n calls.flatMap((call) => {\n const callee = call.node.callee;\n return call.binding && isAstNode(callee) ? [`${callee.start}:${callee.end}`] : [];\n }),\n );\n\n walkAst(ast, (node, ancestors) => {\n if (\n node.type !== \"Identifier\" ||\n typeof node.name !== \"string\" ||\n !calledBindings.has(node.name)\n ) {\n return;\n }\n const parent = ancestors.at(-1);\n if (!parent || isNonReferenceIdentifier(node, parent)) return;\n if (transformedCallees.has(`${node.start}:${node.end}`)) return;\n throw fontError(\n id,\n `${node.name} can only be referenced by statically compiled font declarations`,\n );\n });\n}\n\nfunction isNonReferenceIdentifier(node: AstNode, parent: AstNode): boolean {\n if (parent.type === \"ImportSpecifier\") return true;\n if (\n (parent.type === \"MemberExpression\" || parent.type === \"OptionalMemberExpression\") &&\n parent.property === node &&\n parent.computed !== true\n ) {\n return true;\n }\n if (\n (parent.type === \"Property\" || parent.type === \"PropertyDefinition\") &&\n parent.key === node &&\n parent.computed !== true &&\n parent.shorthand !== true\n ) {\n return true;\n }\n return false;\n}\n\nfunction createFontImportReplacements(\n code: string,\n ast: AstNode,\n calledBindings: ReadonlySet<string>,\n): Replacement[] {\n if (calledBindings.size === 0) return [];\n const replacements: Replacement[] = [];\n const body = Array.isArray(ast.body) ? ast.body : [];\n\n for (const statement of body) {\n if (!isAstNode(statement) || statement.type !== \"ImportDeclaration\") continue;\n const source = isAstNode(statement.source) ? statement.source.value : undefined;\n if (typeof source !== \"string\" || !FONT_IMPORTS.has(source)) continue;\n const specifiers = (Array.isArray(statement.specifiers) ? statement.specifiers : []).filter(\n isAstNode,\n );\n const retained = specifiers.filter((specifier) => {\n if (specifier.type !== \"ImportSpecifier\" || !isAstNode(specifier.local)) return true;\n return typeof specifier.local.name !== \"string\" || !calledBindings.has(specifier.local.name);\n });\n if (retained.length === specifiers.length) continue;\n\n replacements.push({\n start: statement.start,\n end: statement.end,\n code: renderImportDeclaration(code, source, retained),\n });\n }\n\n return replacements;\n}\n\nfunction renderImportDeclaration(code: string, source: string, specifiers: AstNode[]): string {\n if (specifiers.length === 0) return \"\";\n const defaultSpecifier = specifiers.find(\n (specifier) => specifier.type === \"ImportDefaultSpecifier\",\n );\n const namespaceSpecifier = specifiers.find(\n (specifier) => specifier.type === \"ImportNamespaceSpecifier\",\n );\n const namedSpecifiers = specifiers.filter((specifier) => specifier.type === \"ImportSpecifier\");\n const parts: string[] = [];\n\n if (defaultSpecifier && isAstNode(defaultSpecifier.local)) {\n parts.push(code.slice(defaultSpecifier.local.start, defaultSpecifier.local.end));\n }\n if (namespaceSpecifier && isAstNode(namespaceSpecifier.local)) {\n parts.push(`* as ${code.slice(namespaceSpecifier.local.start, namespaceSpecifier.local.end)}`);\n }\n if (namedSpecifiers.length > 0) {\n parts.push(\n `{ ${namedSpecifiers.map((specifier) => code.slice(specifier.start, specifier.end)).join(\", \")} }`,\n );\n }\n\n return parts.length > 0 ? `import ${parts.join(\", \")} from ${JSON.stringify(source)};` : \"\";\n}\n\nfunction readFontOptions(code: string, id: string, call: FontCall): Record<string, unknown> {\n if (!call.binding) {\n throw fontError(id, `${call.kind}() must use a named import from @farm.js/core/font`);\n }\n const args = Array.isArray(call.node.arguments) ? call.node.arguments : [];\n if (args.length !== 1 || !isAstNode(args[0]) || args[0].type !== \"ObjectExpression\") {\n throw fontError(id, `${call.kind}() requires one inline options object`);\n }\n const parent = call.ancestors.at(-1);\n if (!parent || parent.type !== \"VariableDeclarator\" || parent.init !== call.node) {\n throw fontError(id, `${call.kind}() must initialize a module-scope variable`);\n }\n const declaration = call.ancestors.at(-2);\n const statement = call.ancestors.at(-3);\n const statementParent = call.ancestors.at(-4);\n const isModuleScope =\n declaration?.type === \"VariableDeclaration\" &&\n (statement?.type === \"Program\" ||\n (statement?.type === \"ExportNamedDeclaration\" && statementParent?.type === \"Program\"));\n if (!isModuleScope || call.ancestors.some((ancestor) => isFunctionNode(ancestor))) {\n throw fontError(id, `${call.kind}() must be declared directly at module scope`);\n }\n return evaluateStaticObject(code, id, args[0]);\n}\n\nfunction evaluateStaticObject(code: string, id: string, node: AstNode): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n const properties = Array.isArray(node.properties) ? node.properties : [];\n for (const property of properties) {\n if (!isAstNode(property) || property.type !== \"Property\" || property.computed === true) {\n throw fontError(id, \"font options do not support spreads or computed properties\");\n }\n const key = readPropertyName(property.key);\n if (!key || !isAstNode(property.value)) {\n throw fontError(id, \"font options must use static property names and values\");\n }\n result[key] = evaluateStaticValue(code, id, property.value);\n }\n return result;\n}\n\nfunction evaluateStaticValue(code: string, id: string, node: AstNode): unknown {\n if (node.type === \"Literal\") return node.value;\n if (node.type === \"TemplateLiteral\") {\n const expressions = Array.isArray(node.expressions) ? node.expressions : [];\n const quasis = Array.isArray(node.quasis) ? node.quasis : [];\n if (expressions.length === 0 && quasis.length === 1 && isAstNode(quasis[0])) {\n const templateValue = quasis[0].value;\n const value =\n templateValue && typeof templateValue === \"object\"\n ? (templateValue as { cooked?: unknown }).cooked\n : undefined;\n if (typeof value === \"string\") return value;\n }\n }\n if (node.type === \"ArrayExpression\") {\n const elements = Array.isArray(node.elements) ? node.elements : [];\n return elements.map((element) => {\n if (!isAstNode(element) || element.type === \"SpreadElement\") {\n throw fontError(id, \"font option arrays must contain static values\");\n }\n return evaluateStaticValue(code, id, element);\n });\n }\n if (node.type === \"ObjectExpression\") return evaluateStaticObject(code, id, node);\n if (\n node.type === \"UnaryExpression\" &&\n (node.operator === \"+\" || node.operator === \"-\") &&\n isAstNode(node.argument)\n ) {\n const value = evaluateStaticValue(code, id, node.argument);\n if (typeof value === \"number\") return node.operator === \"-\" ? -value : value;\n }\n throw fontError(\n id,\n `font options must be statically analyzable near ${code.slice(node.start, node.end)}`,\n );\n}\n\nfunction readSources(\n value: unknown,\n id: string,\n kind: FontLoaderKind,\n weight: number | string | undefined,\n style: string,\n): Array<FarmFontSource & Pick<RemoteFontSource, \"integrity\">> {\n if (typeof value === \"string\") return [{ path: value, weight, style }];\n if (!Array.isArray(value) || value.length === 0) {\n throw fontError(id, `${kind}() src must be a string or a non-empty source array`);\n }\n return value.map((entry, index) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw fontError(id, `${kind}() src[${index}] must be an object`);\n }\n const source = entry as Record<string, unknown>;\n const unknown = Object.keys(source).filter(\n (key) =>\n ![\n \"path\",\n \"weight\",\n \"style\",\n \"unicodeRange\",\n ...(kind === \"remoteFont\" ? [\"integrity\"] : []),\n ].includes(key),\n );\n if (unknown.length) throw fontError(id, `unknown src[${index}] option ${unknown[0]}`);\n return {\n path: requireString(source.path, id, `${kind}() src[${index}].path`),\n weight: optionalWeight(source.weight, id) ?? weight,\n style: optionalCssDescriptor(source.style, id, \"style\") || style,\n unicodeRange: optionalUnicodeRange(source.unicodeRange, id),\n integrity: optionalString(source.integrity, id, `${kind}() src[${index}].integrity`),\n };\n });\n}\n\nfunction validateOptionKeys(id: string, kind: FontLoaderKind, raw: Record<string, unknown>) {\n const allowed = new Set([\n \"src\",\n \"family\",\n \"weight\",\n \"style\",\n \"display\",\n \"variable\",\n \"fallback\",\n \"preload\",\n ...(kind === \"remoteFont\" ? [\"strategy\", \"integrity\"] : []),\n ]);\n const unknown = Object.keys(raw).find((key) => !allowed.has(key));\n if (unknown) throw fontError(id, `unknown ${kind}() option ${JSON.stringify(unknown)}`);\n if (typeof raw.preload !== \"undefined\" && typeof raw.preload !== \"boolean\") {\n throw fontError(id, `${kind}() preload must be a boolean`);\n }\n}\n\nfunction serializeFontResult(font: FontDefinition): string {\n const stack = renderFamilyStack(font.family, font.fallback);\n return JSON.stringify({\n className: font.className,\n variable: font.variableClassName,\n style: {\n fontFamily: stack,\n ...(font.style ? { fontStyle: font.style } : {}),\n ...(font.weight !== undefined && !String(font.weight).includes(\" \")\n ? { fontWeight: font.weight }\n : {}),\n },\n preloads: font.preloadResources,\n });\n}\n\nfunction renderFontDefinitionCss(\n font: FontDefinition,\n production: boolean,\n basePath: string,\n): string {\n const faces = font.sources.map((source) => {\n const descriptors = [\n ` font-family: ${quoteCssString(font.family)};`,\n ` src: url(${quoteCssString(resourceUrl(source.resource, production, basePath))}) format(${quoteCssString(source.resource.format)});`,\n ` font-display: ${font.display};`,\n ` font-weight: ${source.weight};`,\n ` font-style: ${source.style};`,\n ...(source.unicodeRange ? [` unicode-range: ${source.unicodeRange};`] : []),\n ];\n return `@font-face {\\n${descriptors.join(\"\\n\")}\\n}`;\n });\n const stack = renderFamilyStack(font.family, font.fallback);\n faces.push(`.${font.className} {\\n font-family: ${stack};\\n}`);\n if (font.variable && font.variableClassName) {\n faces.push(`.${font.variableClassName} {\\n ${font.variable}: ${stack};\\n}`);\n }\n return faces.join(\"\\n\\n\");\n}\n\nfunction resourceUrl(resource: FontResource, production: boolean, basePath: string): string {\n // Production font URLs are root-relative: emitted assets land in the client\n // output, which the server publishes at \"/\" regardless of basePath — the\n // same convention as the hashed client JS/CSS hrefs. Only the dev server\n // mounts under basePath (the Vite base), so only dev URLs carry the prefix.\n if (resource.publicPath) {\n return resource.publicPath;\n }\n if (!resource.bytes) return resource.publicUrl;\n if (!production) {\n return joinBasePath(basePath, `/@farm/font/${resource.hash}${resource.extension}`);\n }\n return `/${resource.outputFileName}`;\n}\n\nasync function fetchRemoteFont(url: URL, integrity?: string): Promise<Buffer> {\n const key = `${url.href}\\0${integrity || \"\"}`;\n let pending = remoteBytes.get(key);\n if (!pending) {\n pending = (async () => {\n const response = await fetch(url, {\n headers: { \"User-Agent\": \"Farm.js font compiler\" },\n redirect: \"follow\",\n });\n if (!response.ok)\n throw new Error(`request returned ${response.status} ${response.statusText}`);\n const length = Number(response.headers.get(\"content-length\") || 0);\n if (length > MAX_REMOTE_FONT_BYTES) throw new Error(\"font exceeds the 20 MB limit\");\n const bytes = await readResponseBodyWithLimit(response, MAX_REMOTE_FONT_BYTES);\n if (integrity) verifyIntegrity(bytes, integrity);\n return bytes;\n })().catch((error) => {\n throw new Error(`[Farm fonts] Failed to download ${url.href}: ${(error as Error).message}`);\n });\n remoteBytes.set(key, pending);\n const clearPending = () => {\n if (remoteBytes.get(key) === pending) remoteBytes.delete(key);\n };\n void pending.then(clearPending, clearPending);\n }\n return pending;\n}\n\nasync function readResponseBodyWithLimit(response: Response, limit: number): Promise<Buffer> {\n if (!response.body) return Buffer.alloc(0);\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n\n while (true) {\n const chunk = await reader.read();\n if (chunk.done) break;\n total += chunk.value.byteLength;\n if (total > limit) {\n await reader.cancel(\"font exceeds the configured byte limit\");\n throw new Error(\"font exceeds the 20 MB limit\");\n }\n chunks.push(chunk.value);\n }\n\n return Buffer.concat(chunks, total);\n}\n\nfunction verifyIntegrity(bytes: Buffer, integrity: string): void {\n const entries = integrity.trim().split(/\\s+/);\n const supported = entries\n .map((entry) => entry.match(/^(sha(?:256|384|512))-(.+)$/))\n .filter((entry): entry is RegExpMatchArray => Boolean(entry));\n if (supported.length === 0) throw new Error(\"integrity must use sha256, sha384, or sha512\");\n const matches = supported.some((entry) => {\n const actual = createHash(entry[1]).update(bytes).digest();\n const expected = Buffer.from(entry[2], \"base64\");\n return actual.length === expected.length && timingSafeEqual(actual, expected);\n });\n if (!matches) throw new Error(\"downloaded font did not match its integrity value\");\n}\n\nfunction resolveLocalFontPath(source: string, importer: string, root: string): string {\n if (source.startsWith(\".\")) return path.resolve(path.dirname(importer), source);\n if (path.isAbsolute(source)) {\n return source;\n }\n try {\n return createRequire(pathToFileURL(importer)).resolve(source);\n } catch {\n const segments = source.replace(/\\\\/g, \"/\").split(\"/\");\n if (segments.includes(\"..\")) return path.resolve(root, source);\n\n let current = path.dirname(importer);\n const filesystemRoot = path.parse(current).root;\n while (true) {\n const candidate = path.join(current, \"node_modules\", ...segments);\n if (existsSync(candidate)) return candidate;\n if (current === filesystemRoot) break;\n current = path.dirname(current);\n }\n return path.resolve(root, \"node_modules\", ...segments);\n }\n}\n\nfunction replaceFontSection(css: string, section: string): string {\n const start = css.indexOf(FONT_SECTION_START);\n const end = css.indexOf(FONT_SECTION_END);\n const withoutExisting =\n start >= 0 && end >= start\n ? `${css.slice(0, start)}${css.slice(end + FONT_SECTION_END.length)}`.trimEnd()\n : css.trimEnd();\n return `${withoutExisting}${withoutExisting ? \"\\n\\n\" : \"\"}${section}`;\n}\n\nexport function mergeFarmFontCss(clientCss: string, fontCss: string): string {\n return replaceFontSection(clientCss, fontCss);\n}\n\nfunction getOrCreateRegistry(\n root: string,\n basePath = \"/\",\n publicDir?: string | false,\n): FarmFontRegistry {\n const normalized = normalizeRoot(root);\n const existing = registries.get(normalized);\n if (existing) {\n existing.basePath = normalizeBasePath(basePath);\n existing.publicDir = normalizePublicDir(normalized, publicDir);\n return existing;\n }\n const registry = new FarmFontRegistry(normalized, basePath, publicDir);\n registries.set(normalized, registry);\n return registry;\n}\n\nfunction getGlobalMap<TKey, TValue>(key: symbol): Map<TKey, TValue> {\n const runtime = globalThis as typeof globalThis & Record<symbol, unknown>;\n const existing = runtime[key];\n if (existing instanceof Map) return existing as Map<TKey, TValue>;\n const created = new Map<TKey, TValue>();\n runtime[key] = created;\n return created;\n}\n\nfunction normalizeRoot(root: string): string {\n return path.resolve(root).replace(/\\\\/g, \"/\");\n}\n\nfunction normalizePublicDir(root: string, publicDir?: string | false): string | false {\n if (publicDir === false || publicDir === \"\") return false;\n return path.resolve(root, publicDir || \"public\");\n}\n\nfunction normalizePublicFontPath(source: string, moduleId: string): string {\n if (source.includes(\"?\") || source.includes(\"#\")) {\n throw fontError(moduleId, `public font paths cannot contain a query string or fragment`);\n }\n return `/${source.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\")}`;\n}\n\nfunction isPathInside(parent: string, child: string): boolean {\n const relative = path.relative(parent, child);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nfunction normalizeBasePath(value: string): string {\n if (!value || value === \"/\") return \"/\";\n return `/${value.replace(/^\\/+|\\/+$/g, \"\")}/`;\n}\n\nfunction joinBasePath(basePath: string, value: string): string {\n return basePath === \"/\" ? value : `${basePath.replace(/\\/$/, \"\")}${value}`;\n}\n\nfunction extensionFromPath(pathname: string): string {\n const extension = path.extname(pathname).toLowerCase();\n if (!FONT_EXTENSION_RE.test(extension)) {\n throw new Error(`[Farm fonts] Remote font URL must end in .woff2, .woff, .ttf, or .otf`);\n }\n return extension;\n}\n\nfunction fontFormat(extension: string): string {\n switch (extension.toLowerCase()) {\n case \".woff2\":\n return \"woff2\";\n case \".woff\":\n return \"woff\";\n case \".ttf\":\n return \"truetype\";\n case \".otf\":\n return \"opentype\";\n default:\n throw new Error(`[Farm fonts] Unsupported font extension ${extension}`);\n }\n}\n\nfunction fontContentType(extension: string): string {\n switch (extension.toLowerCase()) {\n case \".woff2\":\n return \"font/woff2\";\n case \".woff\":\n return \"font/woff\";\n case \".ttf\":\n return \"font/ttf\";\n case \".otf\":\n return \"font/otf\";\n default:\n return \"application/octet-stream\";\n }\n}\n\nfunction renderFamilyStack(family: string, fallback: string[]): string {\n return [quoteCssString(family), ...fallback.map(formatFallbackFamily)].join(\", \");\n}\n\nfunction formatFallbackFamily(value: string): string {\n return /^(?:serif|sans-serif|monospace|cursive|fantasy|system-ui|ui-serif|ui-sans-serif|ui-monospace|emoji|math|fangsong)$/.test(\n value,\n )\n ? value\n : quoteCssString(value);\n}\n\nfunction quoteCssString(value: string): string {\n return JSON.stringify(value.replace(/[\\n\\r\\f]/g, \" \"));\n}\n\nfunction sanitizeFileName(value: string): string {\n return value\n .replace(/[^A-Za-z0-9_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 80);\n}\n\nfunction assetSourceToString(source: string | Uint8Array): string {\n return typeof source === \"string\" ? source : Buffer.from(source).toString(\"utf8\");\n}\n\nfunction applyReplacements(code: string, replacements: Replacement[]): string {\n let output = code;\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n }\n return output;\n}\n\nfunction walkAst(\n node: AstNode,\n visit: (node: AstNode, ancestors: readonly AstNode[]) => void,\n ancestors: readonly AstNode[] = [],\n): void {\n visit(node, ancestors);\n const childAncestors = [...ancestors, node];\n for (const [key, value] of Object.entries(node)) {\n if ([\"start\", \"end\", \"loc\", \"range\"].includes(key)) continue;\n if (isAstNode(value)) walkAst(value, visit, childAncestors);\n else if (Array.isArray(value)) {\n for (const item of value) if (isAstNode(item)) walkAst(item, visit, childAncestors);\n }\n }\n}\n\nfunction readPropertyName(value: unknown): string | undefined {\n if (!isAstNode(value)) return undefined;\n if (value.type === \"Identifier\" && typeof value.name === \"string\") return value.name;\n if (value.type === \"Literal\" && typeof value.value === \"string\") return value.value;\n return undefined;\n}\n\nfunction isAstNode(value: unknown): value is AstNode {\n return (\n Boolean(value) &&\n typeof value === \"object\" &&\n typeof (value as AstNode).type === \"string\" &&\n typeof (value as AstNode).start === \"number\" &&\n typeof (value as AstNode).end === \"number\"\n );\n}\n\nfunction isFunctionNode(node: AstNode): boolean {\n return (\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ArrowFunctionExpression\"\n );\n}\n\nfunction isFontLoaderKind(value: unknown): value is FontLoaderKind {\n return typeof value === \"string\" && FONT_FUNCTIONS.has(value as FontLoaderKind);\n}\n\nfunction containsFontFunction(code: string): boolean {\n return Array.from(FONT_FUNCTIONS).some((name) => code.includes(name));\n}\n\nfunction requireString(value: unknown, id: string, label: string): string {\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw fontError(id, `${label} must be a non-empty string`);\n }\n return value;\n}\n\nfunction optionalString(value: unknown, id: string, label: string): string | undefined {\n if (value === undefined) return undefined;\n return requireString(value, id, label);\n}\n\nfunction readStringArray(value: unknown, id: string, label: string): string[] {\n if (value === undefined) return [];\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n throw fontError(id, `${label} must be an array of family names`);\n }\n return value as string[];\n}\n\nfunction optionalWeight(value: unknown, id: string): number | string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === \"number\" && Number.isInteger(value) && value >= 1 && value <= 1000) {\n return value;\n }\n if (\n typeof value === \"string\" &&\n /^(?:[1-9]\\d{0,2}|1000)(?:\\s+(?:[1-9]\\d{0,2}|1000))?$/.test(value)\n ) {\n const bounds = value.split(/\\s+/).map(Number);\n if (bounds.length === 2 && bounds[0] > bounds[1]) {\n throw fontError(id, `font weight range must be ordered from lowest to highest`);\n }\n return value;\n }\n throw fontError(id, `font weight must be a number or range such as \"100 900\"`);\n}\n\nfunction optionalCssDescriptor(value: unknown, id: string, label: string): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || !/^[A-Za-z0-9 .-]+$/.test(value)) {\n throw fontError(id, `font ${label} contains unsupported characters`);\n }\n return value;\n}\n\nfunction optionalUnicodeRange(value: unknown, id: string): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || !/^[Uu+0-9A-Fa-f?*, -]+$/.test(value)) {\n throw fontError(id, `font unicodeRange contains unsupported characters`);\n }\n return value;\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\nfunction fontError(id: string, message: string): Error {\n return new Error(`[Farm fonts] ${message} in ${id.split(\"?\", 1)[0]}`);\n}\n","export const DEFAULT_NOT_FOUND_STYLES = `\nbody {\n margin: 0;\n}\n\n.farm-default-not-found {\n --farm-not-found-bg: #fafafa;\n --farm-not-found-fg: #171717;\n --farm-not-found-muted: #737373;\n --farm-not-found-line: rgba(0, 0, 0, 0.16);\n --farm-not-found-button-fg: #ffffff;\n min-height: 100vh;\n min-height: 100svh;\n display: grid;\n place-items: center;\n padding: 24px;\n color: var(--farm-not-found-fg);\n background: var(--farm-not-found-bg);\n font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n color-scheme: light;\n}\n\n.farm-default-not-found,\n.farm-default-not-found * {\n box-sizing: border-box;\n}\n\n.farm-default-not-found__content {\n width: min(100%, 280px);\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.farm-default-not-found__code {\n margin: 0;\n color: var(--farm-not-found-fg);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: clamp(88px, 20vw, 140px);\n font-weight: 800;\n line-height: 0.75;\n letter-spacing: -0.1em;\n transform: translateX(-3px);\n}\n\n@supports (-webkit-text-stroke: 1px currentColor) {\n .farm-default-not-found__code {\n color: var(--farm-not-found-bg);\n -webkit-text-stroke: 2px var(--farm-not-found-fg);\n text-shadow: 5px 5px 0 var(--farm-not-found-fg);\n }\n}\n\n.farm-default-not-found__description {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 34px 0 30px;\n color: var(--farm-not-found-muted);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 10px;\n line-height: 1;\n letter-spacing: 0.14em;\n text-transform: uppercase;\n white-space: nowrap;\n}\n\n.farm-default-not-found__description::before,\n.farm-default-not-found__description::after {\n content: \"\";\n height: 1px;\n flex: 1 1 auto;\n background: var(--farm-not-found-line);\n}\n\n.farm-default-not-found__home {\n min-width: 132px;\n min-height: 44px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 20px;\n border: 1px solid var(--farm-not-found-fg);\n border-radius: 0;\n color: var(--farm-not-found-button-fg);\n background: var(--farm-not-found-fg);\n font-size: 14px;\n font-weight: 500;\n line-height: 1;\n text-decoration: none;\n transition: opacity 150ms ease-out, transform 100ms ease-out;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .farm-default-not-found__home:hover {\n opacity: 0.78;\n }\n}\n\n.farm-default-not-found__home:active {\n transform: translateY(1px);\n}\n\n.farm-default-not-found__home:focus-visible {\n outline: 2px solid var(--farm-not-found-fg);\n outline-offset: 3px;\n}\n\n@media (prefers-color-scheme: dark) {\n .farm-default-not-found {\n --farm-not-found-bg: #0a0a0a;\n --farm-not-found-fg: #ededed;\n --farm-not-found-muted: #a1a1a1;\n --farm-not-found-line: rgba(255, 255, 255, 0.2);\n --farm-not-found-button-fg: #0a0a0a;\n color-scheme: dark;\n }\n}\n\n.dark .farm-default-not-found,\n[data-theme=\"dark\"] .farm-default-not-found,\n[data-color-scheme=\"dark\"] .farm-default-not-found {\n --farm-not-found-bg: #0a0a0a;\n --farm-not-found-fg: #ededed;\n --farm-not-found-muted: #a1a1a1;\n --farm-not-found-line: rgba(255, 255, 255, 0.2);\n --farm-not-found-button-fg: #0a0a0a;\n color-scheme: dark;\n}\n\n.light .farm-default-not-found,\n[data-theme=\"light\"] .farm-default-not-found,\n[data-color-scheme=\"light\"] .farm-default-not-found {\n --farm-not-found-bg: #fafafa;\n --farm-not-found-fg: #171717;\n --farm-not-found-muted: #737373;\n --farm-not-found-line: rgba(0, 0, 0, 0.16);\n --farm-not-found-button-fg: #ffffff;\n color-scheme: light;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .farm-default-not-found__home {\n transition: none;\n }\n\n .farm-default-not-found__home:active {\n transform: none;\n }\n}\n`;\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { DefaultErrorSourceFrame } from \"../components/error-page\";\n\nexport interface DefaultErrorDiagnostics {\n name: string;\n message: string;\n stack?: string;\n sourceFrame?: DefaultErrorSourceFrame;\n}\n\ninterface StackLocation {\n absolutePath: string;\n displayPath: string;\n line: number;\n column: number;\n}\n\nconst SECRET_VALUE_PATTERN =\n /\\b(api[_-]?key|access[_-]?token|auth[_-]?token|token|password|secret)\\s*[:=]\\s*([^\\s,;]+)/gi;\nconst BEARER_PATTERN = /\\b(Bearer\\s+)[A-Za-z0-9._~+/=-]+/gi;\n\nfunction redactErrorText(value: string): string {\n return value\n .replace(BEARER_PATTERN, \"$1[REDACTED]\")\n .replace(SECRET_VALUE_PATTERN, \"$1=[REDACTED]\");\n}\n\nfunction isPathInsideRoot(root: string, filePath: string): boolean {\n const relative = path.relative(root, filePath);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n}\n\nfunction normalizeStackPath(value: string): string | undefined {\n const withoutQuery = value.replace(/[?#].*$/, \"\");\n try {\n return withoutQuery.startsWith(\"file://\") ? fileURLToPath(withoutQuery) : withoutQuery;\n } catch {\n return undefined;\n }\n}\n\nfunction findStackLocation(stack: string, root: string): StackLocation | undefined {\n for (const stackLine of stack.split(\"\\n\")) {\n const match = stackLine.match(\n /(?:\\()?((?:file:\\/\\/\\/|\\/|[A-Za-z]:[\\\\/])[^\\n()]+):(\\d+):(\\d+)\\)?$/,\n );\n if (!match) continue;\n\n const candidate = normalizeStackPath(match[1]);\n if (!candidate || candidate.includes(`${path.sep}node_modules${path.sep}`)) continue;\n\n const absolutePath = path.resolve(candidate);\n if (!isPathInsideRoot(root, absolutePath) || !fs.existsSync(absolutePath)) continue;\n\n const relativePath = path.relative(root, absolutePath).split(path.sep).join(\"/\");\n return {\n absolutePath,\n displayPath: relativePath || path.basename(absolutePath),\n line: Number(match[2]),\n column: Number(match[3]),\n };\n }\n return undefined;\n}\n\nfunction createSourceFrame(location: StackLocation): DefaultErrorSourceFrame | undefined {\n try {\n const sourceLines = fs.readFileSync(location.absolutePath, \"utf8\").split(/\\r?\\n/);\n if (location.line < 1 || location.line > sourceLines.length) return undefined;\n\n const start = Math.max(1, location.line - 2);\n const end = Math.min(sourceLines.length, location.line + 2);\n const lines = [];\n for (let line = start; line <= end; line++) {\n lines.push({\n number: line,\n content: sourceLines[line - 1],\n highlight: line === location.line,\n });\n }\n\n return {\n file: location.displayPath,\n line: location.line,\n column: location.column,\n lines,\n };\n } catch {\n return undefined;\n }\n}\n\nfunction sanitizeStack(stack: string, root: string): string {\n const normalizedRoot = path.resolve(root);\n return (\n redactErrorText(stack)\n .split(normalizedRoot)\n .join(\"<project>\")\n // Match displayPath, which reports project-relative paths with POSIX separators.\n .replace(/<project>[^\\s)]*/g, (segment) => segment.split(\"\\\\\").join(\"/\"))\n .split(\"\\n\")\n .filter((line, index) => index === 0 || !line.includes(\"node:internal\"))\n .slice(0, 14)\n .join(\"\\n\")\n );\n}\n\nexport function createDefaultErrorDiagnostics(\n error: unknown,\n root: string,\n): DefaultErrorDiagnostics {\n const normalizedError =\n error instanceof Error\n ? error\n : new Error(typeof error === \"string\" ? error : \"Unknown server rendering error\");\n const rawStack = normalizedError.stack || `${normalizedError.name}: ${normalizedError.message}`;\n const location = findStackLocation(rawStack, path.resolve(root));\n\n return {\n name: redactErrorText(normalizedError.name || \"Error\"),\n message: redactErrorText(normalizedError.message || \"Unknown server rendering error\"),\n stack: sanitizeStack(rawStack, root),\n sourceFrame: location ? createSourceFrame(location) : undefined,\n };\n}\n","import type { FarmConfig } from \"./types\";\nimport type { FarmDocsResolvedConfig } from \"./docs/types\";\nimport type { FarmMarkdownResolvedConfig } from \"./markdown\";\nimport { resolveMdxConfig, type FarmMdxResolvedConfig } from \"./app-markdown-config\";\nimport { resolveMarkdownConfig } from \"./markdown\";\nimport { resolveWorkflowsConfig, type FarmWorkflowsResolvedConfig } from \"./workflows\";\nimport { resolveCronConfig, type FarmCronResolvedConfig } from \"./cron\";\nimport { resolveAppPath, fileExists, logger } from \"./utils\";\nimport { initStorage } from \"./storage\";\nimport { configureFarmObservability } from \"./observability\";\nimport { normalizeRouteRules } from \"./route-rules\";\nimport { resolveServerActionsConfig } from \"./server-action-security\";\nimport { resolveFarmServerConfig } from \"./server-http\";\nimport { resolveFarmImageConfig, type ResolvedFarmImageConfig } from \"./image-config\";\nimport { getFarmAppDirectories, getFarmSourceRoots } from \"./layers\";\nimport { RouteManager } from \"./routing/route-manager\";\nimport { ServerRenderer } from \"./server/renderer\";\nimport { findProgrammaticRouteFiles } from \"./routes.server\";\nimport path from \"path\";\nimport type { ViteDevServer } from \"vite\";\nimport { resolveFarmDevtoolsConfig, type ResolvedFarmDevtoolsConfig } from \"./devtools-config\";\nimport {\n resolveFarmDevIndicatorsConfig,\n type ResolvedFarmDevIndicatorsConfig,\n} from \"./dev-indicators\";\nimport { resolveFarmI18nConfig } from \"./i18n/config\";\nimport {\n createFarmI18nRuntime,\n _setDefaultFarmI18nRuntime,\n type FarmI18nRuntime,\n} from \"./i18n/server\";\nimport type { ResolvedFarmI18nConfig } from \"./i18n/types\";\nimport { configureFarmCache } from \"./cache\";\nimport { resolveFarmAuthConfig, type ResolvedFarmAuthConfig } from \"./auth-config\";\nimport { resolveFarmPerformanceConfig, type ResolvedFarmPerformanceConfig } from \"./preload\";\nimport { normalizeFarmConfigBasePath } from \"./base-path\";\nimport { resolveFarmSecurityConfig, type ResolvedFarmSecurityConfig } from \"./security\";\nimport { resolveFarmThemeConfig } from \"./theme/config\";\nimport { _setDefaultFarmThemeConfig } from \"./theme/server\";\nimport type { ResolvedFarmThemeConfig } from \"./theme/types\";\nimport { getFarmRendererComponentExtensions, resolveFarmRenderer } from \"./renderer\";\nimport type { FarmRenderer } from \"./renderer\";\nimport { normalizeFarmAPIConfig, type ResolvedFarmAPIConfig } from \"./api/config\";\n\ntype NormalizedFarmConfig = Omit<\n Required<FarmConfig>,\n \"api\" | \"devtools\" | \"devIndicators\" | \"images\" | \"i18n\" | \"performance\" | \"security\" | \"theme\"\n> & {\n api: ResolvedFarmAPIConfig;\n docs: FarmDocsResolvedConfig;\n md: FarmMarkdownResolvedConfig;\n mdx: FarmMdxResolvedConfig;\n cron: FarmCronResolvedConfig;\n workflows: FarmWorkflowsResolvedConfig;\n devtools: ResolvedFarmDevtoolsConfig;\n devIndicators: ResolvedFarmDevIndicatorsConfig;\n images: ResolvedFarmImageConfig;\n i18n: ResolvedFarmI18nConfig;\n auth: ResolvedFarmAuthConfig;\n performance: ResolvedFarmPerformanceConfig;\n security: ResolvedFarmSecurityConfig;\n theme: ResolvedFarmThemeConfig;\n renderer: FarmRenderer;\n};\n\nconst defaultDocsConfig: FarmDocsResolvedConfig = {\n enabled: false,\n entry: \"/docs\",\n config: { entry: \"docs\", docsPath: \"/docs\" },\n};\n\nfunction isResolvedDocsConfig(value: FarmConfig[\"docs\"]): value is FarmDocsResolvedConfig {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"enabled\" in value &&\n \"entry\" in value &&\n \"config\" in value\n );\n}\n\nexport class FarmApp {\n private config: NormalizedFarmConfig;\n private routeManager: RouteManager;\n private serverRenderer: ServerRenderer;\n private i18nRuntime: FarmI18nRuntime;\n private viteServer?: ViteDevServer;\n\n constructor(config: FarmConfig = {}, viteServer?: ViteDevServer) {\n this.config = this.normalizeConfig(config);\n configureFarmObservability(this.config.observability);\n _setDefaultFarmThemeConfig(this.config.theme);\n this.i18nRuntime = createFarmI18nRuntime(this.config.i18n);\n _setDefaultFarmI18nRuntime(this.i18nRuntime);\n this.viteServer = viteServer;\n this.routeManager = new RouteManager(this.config, viteServer);\n this.serverRenderer = new ServerRenderer(\n this.config,\n this.routeManager,\n this.i18nRuntime,\n this.viteServer,\n );\n }\n\n async initialize(): Promise<void> {\n // Silent initialization unless verbose mode\n if (process.env.FARM_VERBOSE) {\n logger.info(\"Initializing Farm.js application...\");\n }\n\n await initStorage(this.config.storage);\n await configureFarmCache(this.config.cache);\n await this.i18nRuntime.initialize();\n await this.serverRenderer.initialize();\n\n // Verify app directory structure\n await this.verifyAppStructure();\n\n // Discover and register routes\n await this.routeManager.discoverRoutes();\n\n // Compile hydration and island decisions once during startup. Navigation\n // requests only read this manifest; HMR invalidates it when route code changes.\n this.routeManager.generateClientManifest(this.config.root);\n\n if (process.env.FARM_VERBOSE) {\n logger.success(\"Farm.js application initialized successfully!\");\n }\n }\n\n getRouteManager(): RouteManager {\n return this.routeManager;\n }\n\n getServerRenderer(): ServerRenderer {\n return this.serverRenderer;\n }\n\n getI18nRuntime(): FarmI18nRuntime {\n return this.i18nRuntime;\n }\n\n getConfig(): NormalizedFarmConfig {\n return this.config;\n }\n\n private normalizeConfig(config: FarmConfig): NormalizedFarmConfig {\n const root = config.root || process.cwd();\n const basePath = normalizeFarmConfigBasePath(config.basePath);\n\n return {\n root,\n srcDir: config.srcDir || \"src\",\n extends: config.extends || [],\n layers: [...(config.layers || [])],\n outDir: config.outDir || \"dist\",\n basePath,\n trailingSlash: config.trailingSlash ?? false,\n renderer: resolveFarmRenderer(config.renderer),\n preset: config.preset ?? \"node-server\",\n deploy: config.deploy || {},\n storage: config.storage || {},\n cache: config.cache || {},\n auth: isResolvedAuthConfig(config.auth) ? config.auth : resolveFarmAuthConfig(config.auth),\n integrations: config.integrations || {},\n plugins: config.plugins || [],\n migrations: config.migrations || { commands: [] },\n cron: resolveCronConfig(config.cron),\n workflows: resolveWorkflowsConfig(config.workflows),\n api: normalizeFarmAppAPIConfig(config.api),\n middleware: config.middleware || {},\n routeRules: normalizeRouteRules(config.routeRules),\n context: config.context || (() => undefined),\n server: resolveFarmServerConfig(config.server),\n serverActions: resolveServerActionsConfig(config.serverActions),\n security: resolveFarmSecurityConfig(config.security),\n images: resolveFarmImageConfig(config.images),\n performance: resolveFarmPerformanceConfig(config.performance),\n theme: resolveFarmThemeConfig(config.theme, basePath),\n i18n: isResolvedI18nConfig(config.i18n)\n ? config.i18n\n : resolveFarmI18nConfig(config.i18n, {\n root,\n mode: process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n basePath,\n }),\n deploymentId: config.deploymentId || \"development\",\n notFound: config.notFound || {},\n serverRuntimeConfig: config.serverRuntimeConfig || {},\n publicRuntimeConfig: config.publicRuntimeConfig || {},\n docs: isResolvedDocsConfig(config.docs) ? config.docs : defaultDocsConfig,\n md: resolveMarkdownConfig(config.md),\n mdx: resolveMdxConfig(config.mdx),\n observability: config.observability ?? false,\n telemetry: config.telemetry !== false,\n devtools: resolveFarmDevtoolsConfig(\n config.devtools,\n process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n ),\n devIndicators: resolveFarmDevIndicatorsConfig(\n config.devIndicators,\n process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n ),\n env: config.env || { server: {}, public: {} },\n suppressLintOnLink: config.suppressLintOnLink ?? false,\n experimental: {\n serverComponents: config.experimental?.serverComponents ?? false,\n serverActions: config.experimental?.serverActions ?? false,\n isolatedClientHydration: config.experimental?.isolatedClientHydration ?? \"off\",\n ppr: config.experimental?.ppr ?? false,\n ...config.experimental,\n },\n vite: config.vite || {},\n };\n }\n\n private async verifyAppStructure(): Promise<void> {\n const appDirs = getFarmAppDirectories(this.config);\n\n const hasAppDirectory = (await Promise.all(appDirs.map((appDir) => fileExists(appDir)))).some(\n Boolean,\n );\n\n if (!hasAppDirectory) {\n const routeFiles = getFarmSourceRoots(this.config).flatMap((source) =>\n findProgrammaticRouteFiles(source.root, source.srcDir),\n );\n if (routeFiles.length > 0) {\n return;\n }\n\n const appDir = resolveAppPath(this.config.root, this.config.srcDir, \"app\");\n throw new Error(\n `App directory not found at ${appDir}. ` +\n \"Please create a src/app directory or extend a Farm layer containing routes.\",\n );\n }\n\n const componentExtensions = getFarmRendererComponentExtensions(this.config.renderer);\n const rootLayoutPaths = appDirs.flatMap((appDir) =>\n componentExtensions.map((extension) => path.join(appDir, `layout${extension}`)),\n );\n\n const hasRootLayout = await Promise.all(rootLayoutPaths.map((p) => fileExists(p))).then(\n (results) => results.some(Boolean),\n );\n\n if (!hasRootLayout) {\n logger.warn(\n `No root layout found. Consider creating src/app/layout${componentExtensions[0]} for consistent page structure.`,\n );\n }\n }\n}\n\nfunction isResolvedI18nConfig(value: FarmConfig[\"i18n\"]): value is ResolvedFarmI18nConfig {\n return Boolean(value && typeof value === \"object\" && \"enabled\" in value);\n}\n\nfunction isResolvedAuthConfig(value: FarmConfig[\"auth\"]): value is ResolvedFarmAuthConfig {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"enabled\" in value &&\n \"emailAndPassword\" in value &&\n \"database\" in value,\n );\n}\n\nfunction normalizeFarmAppAPIConfig(config: FarmConfig[\"api\"]): ResolvedFarmAPIConfig {\n if (typeof config?.baseURL === \"function\" || typeof config?.basePath === \"function\") {\n throw new Error(\n \"Farm API config resolver functions must be processed with resolveConfig() before creating a FarmApp.\",\n );\n }\n return normalizeFarmAPIConfig(config as { baseURL?: string; basePath?: string } | undefined);\n}\n\nexport function createFarmApp(config?: FarmConfig, viteServer?: ViteDevServer): FarmApp {\n return new FarmApp(config, viteServer);\n}\n","// Tailwind v4 syntax (used with @tailwindcss/vite – no PostCSS or tailwind.config)\nexport const defaultGlobalCSS = `@import \"tailwindcss\";\n`;\n","import type { PluginRoutes, PluginRoutesFactory } from \"./api/route\";\n// Plugin factories must emit declarations through public exports, never bundled\n// declaration chunk paths, even when they only import @farm.js/core/plugin.\nexport type { PluginRoutes, PluginRoutesFactory, RouteDefinition } from \"./api/route\";\nimport type { FarmConfig, FarmRequest, FarmResponse } from \"./types\";\nimport type { ViteDevServer } from \"vite\";\nimport type { FarmClientPlugin } from \"./client/plugin\";\nimport { getResolvedEnv, type ResolvedFarmEnv } from \"./env\";\nimport {\n clearRequestContext,\n deleteRequestContext,\n getRequestContext,\n getRequestContextSnapshot,\n hasRequestContext,\n setRequestContext,\n} from \"./request-context\";\nimport { getFarmPluginIntegrationContext } from \"./plugin-integration-context\";\n\ntype MaybePromise<T> = T | Promise<T>;\n/** @internal Marks a Node response whose intercepted end is awaiting response hooks. */\nexport const FARM_NODE_RESPONSE_END_PENDING = Symbol.for(\"farm.nodeResponseEndPending\");\ndeclare const FARM_PLUGIN_INTEGRATION_INSTANCE: unique symbol;\ndeclare const FARM_PLUGIN_INTEGRATION_BOUND: unique symbol;\n\nexport interface FarmPluginIntegrationContext<TInstance = unknown> {\n /** Key used to register the integration in farm.config.ts. */\n readonly key: string;\n readonly category: string;\n readonly type: string;\n readonly instance: TInstance;\n readonly serverRuntime: boolean;\n}\n\nexport class FarmRuntimeShutdownError extends Error {\n readonly errors: readonly unknown[];\n\n constructor(message: string, errors: readonly unknown[]) {\n super(message);\n this.name = \"FarmRuntimeShutdownError\";\n this.errors = errors;\n }\n}\n\nexport interface PluginRequestContext {\n set: (\n target: FarmRequest | Request,\n key: string,\n value: any,\n options?: { exposeToPage?: boolean },\n ) => void;\n get: <T = any>(target: FarmRequest | Request, key: string) => T | undefined;\n has: (target: FarmRequest | Request, key: string) => boolean;\n delete: (target: FarmRequest | Request, key: string) => boolean;\n clear: (target: FarmRequest | Request) => void;\n getAll: (target: FarmRequest | Request, options?: { exposedOnly?: boolean }) => Map<string, any>;\n}\n\nexport interface FarmRequestStore {\n set(key: string, value: unknown, options?: { exposeToPage?: boolean }): void;\n get<T = unknown>(key: string): T | undefined;\n has(key: string): boolean;\n delete(key: string): boolean;\n clear(): void;\n snapshot(options?: { exposedOnly?: boolean }): Map<string, unknown>;\n}\n\nexport interface FarmPluginContext<TIntegrationInstance = unknown> {\n config: FarmConfig;\n viteServer?: ViteDevServer;\n isDev: boolean;\n isProd: boolean;\n /** The owning integration when this plugin is contributed through `integration.plugins`. */\n readonly integration?: Readonly<FarmPluginIntegrationContext<TIntegrationInstance>>;\n /** Register resource cleanup that must run when the application runtime closes. */\n lifecycle: FarmPluginLifecycle;\n /** @deprecated Use `ctx.req` inside request hooks. */\n requestContext: PluginRequestContext;\n}\n\ntype FarmPluginHookContext<\n TContext,\n TIntegrationInstance,\n TIntegrationBound extends boolean,\n> = TIntegrationBound extends true\n ? Omit<TContext, \"integration\"> & {\n /** The owning integration bound by `definePlugin.forIntegration<T>()`. */\n readonly integration: Readonly<FarmPluginIntegrationContext<TIntegrationInstance>>;\n }\n : TContext;\n\nexport interface FarmPluginLifecycle {\n /**\n * Register a database, storage, queue, or other resource disposer.\n * Disposers run once in reverse registration order after plugin shutdown hooks.\n */\n onShutdown(dispose: () => void | Promise<void>): () => void;\n}\n\nexport interface FarmRequestPluginContext<\n TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n /** Request-scoped values for the current hook invocation. */\n readonly req: FarmRequestStore;\n}\n\nexport interface RouteDiscoveredPayload {\n kind: \"page\" | \"layout\";\n pattern: string;\n modulePath: string;\n}\n\nexport interface RoutesGeneratedPayload {\n routes: RouteDiscoveredPayload[];\n pageCount: number;\n layoutCount: number;\n}\n\nexport interface MiddlewareDiscoveredPayload {\n path: string;\n filePath: string;\n handlerCount: number;\n}\n\nexport interface APIRouteDiscoveredPayload {\n path: string;\n filePath: string;\n methods: string[];\n}\n\nexport interface RouteMatchPayload {\n pathname: string;\n method?: string;\n}\n\nexport interface RouteMatchResultPayload {\n pathname: string;\n matched: boolean;\n routePattern: string | null;\n params: Record<string, string>;\n layoutPatterns: string[];\n}\n\nexport interface RenderLifecyclePayload {\n pathname: string;\n method: string;\n routePattern: string | null;\n params: Record<string, string>;\n}\n\nexport interface APIHandlerLifecyclePayload {\n pathname: string;\n method: string;\n routePath?: string;\n}\n\nexport interface ErrorLifecyclePayload {\n phase: string;\n error: unknown;\n meta?: Record<string, unknown>;\n}\n\nexport interface HMRUpdatePayload {\n file: string;\n modules: string[];\n}\n\nexport interface BundleLifecyclePayload {\n root: string;\n preset: string;\n universal: boolean;\n distDir: string;\n outputDir?: string;\n}\n\nexport interface BundleResultPayload extends BundleLifecyclePayload {\n success: boolean;\n}\n\nexport interface NitroBuildLifecyclePayload {\n root: string;\n preset: string;\n distDir: string;\n outputDir: string;\n}\n\nexport interface ShutdownPayload {\n reason: string;\n}\n\nexport type FarmPluginRuntimeKind =\n | \"request\"\n | \"page\"\n | \"api\"\n | \"action\"\n | \"integration\"\n | \"docs\"\n | \"asset\"\n | (string & {});\n\nexport interface FarmPluginRouteRuntimePayload {\n pathname: string;\n pattern?: string | null;\n params?: Record<string, string>;\n}\n\nexport interface FarmPluginSetupContext<\n TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n env: ResolvedFarmEnv;\n}\n\nexport interface FarmPluginStateContext<\n TState = unknown,\n TIntegrationInstance = unknown,\n> extends FarmPluginContext<TIntegrationInstance> {\n state: TState;\n}\n\nexport interface FarmPluginRuntimeBaseEvent<\n TState = unknown,\n TIntegrationInstance = unknown,\n> extends FarmPluginStateContext<TState, TIntegrationInstance> {\n request: Request;\n /** Request-scoped values shared by plugin hooks. */\n req: FarmRequestStore;\n kind: FarmPluginRuntimeKind;\n route?: FarmPluginRouteRuntimePayload;\n signal: AbortSignal;\n waitUntil(promise: Promise<unknown>): void;\n}\n\nexport type FarmPluginRuntimeContextEvent<\n TState = unknown,\n TIntegrationInstance = unknown,\n> = FarmPluginRuntimeBaseEvent<TState, TIntegrationInstance>;\n\nexport interface FarmPluginRuntimeBeforeEvent<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBaseEvent<TState, TIntegrationInstance> {\n ctx: Readonly<TRequestContext>;\n}\n\nexport interface FarmPluginRuntimeAfterEvent<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance> {\n response: Response;\n durationMs: number;\n}\n\nexport interface FarmPluginRuntimeErrorEvent<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n> extends FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance> {\n error: unknown;\n durationMs: number;\n}\n\nexport type FarmPluginRuntimeStartEvent<\n TState = unknown,\n TIntegrationInstance = unknown,\n> = FarmPluginStateContext<TState, TIntegrationInstance>;\n\nexport interface FarmPluginRuntimeCloseEvent<TState = unknown, TIntegrationInstance = unknown>\n extends FarmPluginStateContext<TState, TIntegrationInstance>, ShutdownPayload {}\n\ntype FarmPluginContextFor<\n TIntegrationInstance,\n TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n FarmPluginContext<TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n>;\n\ntype FarmRequestPluginContextFor<\n TIntegrationInstance,\n TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n FarmRequestPluginContext<TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n>;\n\ntype FarmPluginSetupContextFor<\n TIntegrationInstance,\n TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n FarmPluginSetupContext<TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n>;\n\ntype FarmPluginStateContextFor<\n TState,\n TIntegrationInstance,\n TIntegrationBound extends boolean,\n> = FarmPluginHookContext<\n FarmPluginStateContext<TState, TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n>;\n\ntype FarmPluginRuntimeEventFor<\n TEvent,\n TIntegrationInstance,\n TIntegrationBound extends boolean,\n> = FarmPluginHookContext<TEvent, TIntegrationInstance, TIntegrationBound>;\n\nexport interface FarmPluginRuntimeHooks<\n TState = unknown,\n TRequestContext extends object = Record<string, unknown>,\n TIntegrationInstance = unknown,\n TIntegrationBound extends boolean = false,\n> {\n start?(\n event: FarmPluginRuntimeEventFor<\n FarmPluginRuntimeStartEvent<TState, TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n >,\n ): MaybePromise<void>;\n context?(\n event: FarmPluginRuntimeEventFor<\n FarmPluginRuntimeContextEvent<TState, TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n >,\n ): MaybePromise<TRequestContext>;\n before?(\n event: FarmPluginRuntimeEventFor<\n FarmPluginRuntimeBeforeEvent<TState, TRequestContext, TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n >,\n ): MaybePromise<Request | Response | void>;\n after?(\n event: FarmPluginRuntimeEventFor<\n FarmPluginRuntimeAfterEvent<TState, TRequestContext, TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n >,\n ): MaybePromise<Response | void>;\n error?(\n event: FarmPluginRuntimeEventFor<\n FarmPluginRuntimeErrorEvent<TState, TRequestContext, TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n >,\n ): MaybePromise<void>;\n close?(\n event: FarmPluginRuntimeEventFor<\n FarmPluginRuntimeCloseEvent<TState, TIntegrationInstance>,\n TIntegrationInstance,\n TIntegrationBound\n >,\n ): MaybePromise<void>;\n}\n\nexport interface FarmPluginRuntimeRequestOptions {\n kind?: FarmPluginRuntimeKind;\n route?: FarmPluginRouteRuntimePayload;\n waitUntil?: (promise: Promise<unknown>) => void;\n}\n\nexport type FarmPluginRuntimeRequestHandler = (request: Request) => MaybePromise<Response>;\n\nexport interface FarmPluginRuntimeSession {\n request: Request;\n response?: Response;\n ctx: Readonly<Record<string, unknown>>;\n startedAt: number;\n options: FarmPluginRuntimeRequestOptions;\n waitUntil(promise: Promise<unknown>): void;\n}\n\nexport type FarmPluginDiscoveredRoute =\n | RouteDiscoveredPayload\n | ({ kind: \"middleware\" } & MiddlewareDiscoveredPayload)\n | ({ kind: \"api\" } & APIRouteDiscoveredPayload);\n\nexport interface FarmPluginRouterHooks<\n TState = unknown,\n TIntegrationInstance = unknown,\n TIntegrationBound extends boolean = false,\n> {\n discovered?(\n route: FarmPluginDiscoveredRoute,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n generated?(\n routes: RoutesGeneratedPayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n before?(\n route: RouteMatchPayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n after?(\n result: RouteMatchResultPayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n}\n\nexport interface FarmPluginRenderHooks<\n TState = unknown,\n TIntegrationInstance = unknown,\n TIntegrationBound extends boolean = false,\n> {\n before?(\n render: RenderLifecyclePayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n html?(\n html: string,\n render: RenderLifecyclePayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<string | void>;\n}\n\nexport interface FarmPluginBuildHooks<\n TState = unknown,\n TIntegrationInstance = unknown,\n TIntegrationBound extends boolean = false,\n> {\n before?(\n bundle: BundleLifecyclePayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n configure?(\n buildConfig: any,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<any>;\n after?(\n result: BundleResultPayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n}\n\nexport interface FarmPluginDevHooks<\n TState = unknown,\n TIntegrationInstance = unknown,\n TIntegrationBound extends boolean = false,\n> {\n server?(\n viteServer: ViteDevServer,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n update?(\n update: HMRUpdatePayload,\n context: FarmPluginStateContextFor<TState, TIntegrationInstance, TIntegrationBound>,\n ): MaybePromise<void>;\n}\n\nexport interface FarmPluginClientConfig<\n TState = unknown,\n TPublic = undefined,\n> extends FarmClientPlugin<TState, TPublic> {\n /** Explicitly public, JSON-safe data embedded in the browser bundle. */\n public?: TPublic;\n}\n\nexport interface FarmPlugin<\n TState = any,\n TRequestContext extends object = Record<string, unknown>,\n TClientState = any,\n TClientPublic = any,\n TIntegrationInstance = unknown,\n TIntegrationBound extends boolean = false,\n TRoutes extends PluginRoutes = PluginRoutes,\n> {\n name: string;\n version?: string;\n enforce?: \"pre\" | \"post\";\n /** Declarative API routes, mounted through the normal dev and production API pipeline. */\n routes?: PluginRoutesFactory<TRoutes>;\n\n /** Transform Farm config before the development or production pipeline is created. */\n configure?: (\n config: FarmConfig,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => MaybePromise<FarmConfig | void>;\n /** Initialize private plugin state once for this plugin manager. */\n setup?: (\n context: FarmPluginSetupContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => MaybePromise<TState>;\n\n runtime?: FarmPluginRuntimeHooks<\n TState,\n TRequestContext,\n TIntegrationInstance,\n TIntegrationBound\n >;\n router?: FarmPluginRouterHooks<TState, TIntegrationInstance, TIntegrationBound>;\n render?: FarmPluginRenderHooks<TState, TIntegrationInstance, TIntegrationBound>;\n build?: FarmPluginBuildHooks<TState, TIntegrationInstance, TIntegrationBound>;\n dev?: FarmPluginDevHooks<TState, TIntegrationInstance, TIntegrationBound>;\n /** Optional browser lifecycle for this logical plugin. */\n client?: FarmPluginClientConfig<TClientState, TClientPublic>;\n\n /** @internal Carries the expected integration instance type without runtime data. */\n readonly [FARM_PLUGIN_INTEGRATION_INSTANCE]?: (instance: TIntegrationInstance) => void;\n /** @internal Prevents integration-bound plugins from being registered globally. */\n readonly [FARM_PLUGIN_INTEGRATION_BOUND]?: TIntegrationBound;\n\n /** @deprecated Use `setup` instead. */\n init?: (\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `runtime.start` instead. */\n ready?: (\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `dev.server` instead. */\n devServerCreated?: (\n viteServer: ViteDevServer,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n\n /** @deprecated Use `configure` instead. */\n config?: (\n config: FarmConfig,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => FarmConfig | Promise<FarmConfig>;\n configResolved?: (\n config: FarmConfig,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.before` instead. */\n buildStart?: (\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.after` instead. */\n buildEnd?: (\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n\n /** @deprecated Use `router.discovered` instead. */\n routeDiscovered?: (\n route: RouteDiscoveredPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.generated` instead. */\n routesGenerated?: (\n routes: RoutesGeneratedPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.discovered` instead. */\n middlewareDiscovered?: (\n middleware: MiddlewareDiscoveredPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.discovered` instead. */\n apiRouteDiscovered?: (\n route: APIRouteDiscoveredPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.before` instead. */\n beforeRouteMatch?: (\n route: RouteMatchPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `router.after` instead. */\n afterRouteMatch?: (\n result: RouteMatchResultPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `render.before` instead. */\n beforeRender?: (\n render: RenderLifecyclePayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `render.html` instead. */\n afterRender?: (\n html: string,\n render: RenderLifecyclePayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => string | Promise<string> | void | Promise<void>;\n /** @deprecated Use `runtime.before` instead. */\n beforeApiHandler?: (\n request: Request,\n api: APIHandlerLifecyclePayload,\n context: FarmRequestPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => Request | Promise<Request> | void | Promise<void>;\n /** @deprecated Use `runtime.after` instead. */\n afterApiHandler?: (\n response: Response,\n api: APIHandlerLifecyclePayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => Response | Promise<Response> | void | Promise<void>;\n onError?: (\n error: ErrorLifecyclePayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `dev.update` instead. */\n hmrUpdate?: (\n update: HMRUpdatePayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.before` instead. */\n beforeBundle?: (\n bundle: BundleLifecyclePayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.after` instead. */\n afterBundle?: (\n result: BundleResultPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `build.configure` instead. */\n beforeNitroBuild?: (\n nitroConfig: any,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => any | Promise<any>;\n afterNitroBuild?: (\n payload: NitroBuildLifecyclePayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use `runtime.close` instead. */\n shutdown?: (\n payload: ShutdownPayload,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n\n /** @deprecated Use the Web Request based `runtime.before` hook instead. */\n beforeRequest?: (\n req: FarmRequest,\n res: FarmResponse,\n context: FarmRequestPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n /** @deprecated Use the Web Response based `runtime.after` hook instead. */\n afterResponse?: (\n req: FarmRequest,\n res: FarmResponse,\n context: FarmRequestPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => void | Promise<void>;\n\n // Transform hooks\n /** @deprecated Use `render.html` instead. */\n transformHTML?: (\n html: string,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => string | Promise<string>;\n /** @deprecated Use `render.before` or `render.html` instead. */\n transformPage?: (\n component: any,\n context: FarmPluginContextFor<TIntegrationInstance, TIntegrationBound>,\n ) => any | Promise<any>;\n}\n\nexport class PluginManager {\n private plugins: FarmPlugin[] = [];\n private hookPresence = new Map<keyof FarmPlugin, boolean>();\n private runtimeHookPresence = new Map<\"context\" | \"before\" | \"after\" | \"error\", boolean>();\n private context: FarmPluginContext;\n private pluginStates = new Map<FarmPlugin, unknown>();\n private setupComplete = false;\n private initialized = false;\n private runtimeReady = false;\n private runtimeClosed = false;\n private runtimeStartPromise?: Promise<void>;\n private runtimeClosePromise?: Promise<void>;\n private runtimeShutdownHooksRunning = false;\n private runtimeDisposers: Array<() => void | Promise<void>> = [];\n private runtimeRequestContexts = new WeakMap<Request, Readonly<Record<string, unknown>>>();\n private failedRuntimeSessions = new WeakSet<FarmPluginRuntimeSession>();\n\n constructor(context: Omit<FarmPluginContext, \"requestContext\" | \"lifecycle\">) {\n this.context = {\n ...context,\n lifecycle: {\n onShutdown: (dispose) => {\n if (typeof dispose !== \"function\") {\n throw new TypeError(\"Farm lifecycle.onShutdown requires a cleanup function\");\n }\n if (this.runtimeClosePromise || this.runtimeClosed) {\n throw new Error(\"Farm runtime cleanup cannot be registered after shutdown begins\");\n }\n\n this.runtimeDisposers.push(dispose);\n let registered = true;\n return () => {\n if (!registered) return;\n registered = false;\n const index = this.runtimeDisposers.indexOf(dispose);\n if (index >= 0) this.runtimeDisposers.splice(index, 1);\n };\n },\n },\n requestContext: {\n set(target, key, value, options) {\n setRequestContext(target as object, key, value, options);\n },\n get(target, key) {\n return getRequestContext(target as object, key);\n },\n has(target, key) {\n return hasRequestContext(target as object, key);\n },\n delete(target, key) {\n return deleteRequestContext(target as object, key);\n },\n clear(target) {\n clearRequestContext(target as object);\n },\n getAll(target, options) {\n return getRequestContextSnapshot(target as object, options);\n },\n },\n };\n }\n\n private createPluginHookContext(\n plugin: FarmPlugin,\n context: FarmPluginContext = this.context,\n ): FarmPluginContext {\n const integration = getFarmPluginIntegrationContext(plugin);\n return integration ? { ...context, integration } : context;\n }\n\n private createRequestHookContext(\n target: FarmRequest | Request,\n plugin: FarmPlugin,\n ): FarmRequestPluginContext {\n const requestContext = this.context.requestContext;\n\n return {\n ...this.createPluginHookContext(plugin),\n req: {\n set(key, value, options) {\n requestContext.set(target, key, value, options);\n },\n get(key) {\n return requestContext.get(target, key);\n },\n has(key) {\n return requestContext.has(target, key);\n },\n delete(key) {\n return requestContext.delete(target, key);\n },\n clear() {\n requestContext.clear(target);\n },\n snapshot(options) {\n return requestContext.getAll(target, options);\n },\n },\n };\n }\n\n private copyRequestStore(source: FarmRequest | Request, target: FarmRequest | Request): void {\n const requestContext = this.context.requestContext;\n const values = requestContext.getAll(source);\n const exposed = requestContext.getAll(source, { exposedOnly: true });\n\n for (const [key, value] of values) {\n requestContext.set(target, key, value, {\n exposeToPage: exposed.has(key),\n });\n }\n }\n\n private copyRuntimeRequestContext(source: Request, target: Request): void {\n const runtimeContext = this.runtimeRequestContexts.get(source);\n if (runtimeContext) {\n this.runtimeRequestContexts.set(target, runtimeContext);\n }\n }\n\n private createRuntimeBaseEvent(\n plugin: FarmPlugin,\n request: Request,\n options: FarmPluginRuntimeRequestOptions,\n waitUntil: (promise: Promise<unknown>) => void,\n ): FarmPluginRuntimeBaseEvent {\n return {\n ...this.createStateHookContext(plugin),\n request,\n req: this.createRequestHookContext(request, plugin).req,\n kind: options.kind ?? \"request\",\n route: options.route,\n signal: request.signal,\n waitUntil,\n };\n }\n\n private async createRuntimeRequestContext(\n request: Request,\n options: FarmPluginRuntimeRequestOptions,\n waitUntil: (promise: Promise<unknown>) => void,\n ): Promise<Readonly<Record<string, unknown>>> {\n const values: Record<string, unknown> = {};\n const owners = new Map<string, string>();\n\n for (const plugin of this.getSortedPlugins()) {\n const createContext = plugin.runtime?.context;\n if (!createContext) continue;\n\n const result = await createContext(\n this.createRuntimeBaseEvent(plugin, request, options, waitUntil),\n );\n if (result === undefined) continue;\n if (!result || typeof result !== \"object\" || Array.isArray(result)) {\n throw new TypeError(`Farm plugin \"${plugin.name}\" runtime.context must return an object`);\n }\n\n for (const [key, value] of Object.entries(result)) {\n const owner = owners.get(key);\n if (owner) {\n throw new Error(\n `Farm plugin context key \"${key}\" from \"${plugin.name}\" conflicts with \"${owner}\"`,\n );\n }\n owners.set(key, plugin.name);\n values[key] = value;\n }\n }\n\n const runtimeContext = Object.freeze(values);\n this.runtimeRequestContexts.set(request, runtimeContext);\n return runtimeContext;\n }\n\n private async runRuntimeErrorHooks(\n request: Request,\n error: unknown,\n ctx: Readonly<Record<string, unknown>>,\n durationMs: number,\n options: FarmPluginRuntimeRequestOptions,\n waitUntil: (promise: Promise<unknown>) => void,\n ): Promise<void> {\n for (const plugin of this.getSortedPlugins()) {\n const onError = plugin.runtime?.error;\n if (!onError) continue;\n\n try {\n await onError({\n ...this.createRuntimeBaseEvent(plugin, request, options, waitUntil),\n ctx,\n error,\n durationMs,\n });\n } catch (hookError) {\n console.error(`Farm plugin \"${plugin.name}\" runtime.error failed:`, hookError);\n }\n }\n\n try {\n await this.runHookParallel(\"onError\", {\n phase: \"runtime\",\n error,\n meta: {\n kind: options.kind ?? \"request\",\n pathname: new URL(request.url).pathname,\n durationMs,\n },\n });\n } catch (hookError) {\n console.error(\"Farm plugin onError hook failed:\", hookError);\n }\n }\n\n private createStateHookContext(\n plugin: FarmPlugin,\n context: FarmPluginContext = this.context,\n ): FarmPluginStateContext {\n return {\n ...this.createPluginHookContext(plugin, context),\n state: this.pluginStates.get(plugin),\n };\n }\n\n private getPluginHooks(\n plugin: FarmPlugin,\n hookName: keyof FarmPlugin,\n ): Array<(...args: any[]) => any> {\n const hooks: Array<(...args: any[]) => any> = [];\n const legacyHook = plugin[hookName];\n if (typeof legacyHook === \"function\") {\n hooks.push(legacyHook);\n }\n\n const withState = (context: FarmPluginContext) => this.createStateHookContext(plugin, context);\n\n switch (hookName) {\n case \"config\":\n if (plugin.configure) {\n hooks.push((config: FarmConfig, context: FarmPluginContext) =>\n plugin.configure?.(config, context),\n );\n }\n break;\n case \"ready\":\n if (plugin.runtime?.start) {\n hooks.push((context: FarmPluginContext) => plugin.runtime?.start?.(withState(context)));\n }\n break;\n case \"shutdown\":\n if (plugin.runtime?.close) {\n hooks.push((payload: ShutdownPayload, context: FarmPluginContext) =>\n plugin.runtime?.close?.({\n ...withState(context),\n reason: payload.reason,\n }),\n );\n }\n break;\n case \"routeDiscovered\":\n if (plugin.router?.discovered) {\n hooks.push((route: RouteDiscoveredPayload, context: FarmPluginContext) =>\n plugin.router?.discovered?.(route, withState(context)),\n );\n }\n break;\n case \"middlewareDiscovered\":\n if (plugin.router?.discovered) {\n hooks.push((route: MiddlewareDiscoveredPayload, context: FarmPluginContext) =>\n plugin.router?.discovered?.({ kind: \"middleware\", ...route }, withState(context)),\n );\n }\n break;\n case \"apiRouteDiscovered\":\n if (plugin.router?.discovered) {\n hooks.push((route: APIRouteDiscoveredPayload, context: FarmPluginContext) =>\n plugin.router?.discovered?.({ kind: \"api\", ...route }, withState(context)),\n );\n }\n break;\n case \"routesGenerated\":\n if (plugin.router?.generated) {\n hooks.push((routes: RoutesGeneratedPayload, context: FarmPluginContext) =>\n plugin.router?.generated?.(routes, withState(context)),\n );\n }\n break;\n case \"beforeRouteMatch\":\n if (plugin.router?.before) {\n hooks.push((route: RouteMatchPayload, context: FarmPluginContext) =>\n plugin.router?.before?.(route, withState(context)),\n );\n }\n break;\n case \"afterRouteMatch\":\n if (plugin.router?.after) {\n hooks.push((result: RouteMatchResultPayload, context: FarmPluginContext) =>\n plugin.router?.after?.(result, withState(context)),\n );\n }\n break;\n case \"beforeRender\":\n if (plugin.render?.before) {\n hooks.push((render: RenderLifecyclePayload, context: FarmPluginContext) =>\n plugin.render?.before?.(render, withState(context)),\n );\n }\n break;\n case \"afterRender\":\n if (plugin.render?.html) {\n hooks.push((html: string, render: RenderLifecyclePayload, context: FarmPluginContext) =>\n plugin.render?.html?.(html, render, withState(context)),\n );\n }\n break;\n case \"beforeBundle\":\n if (plugin.build?.before) {\n hooks.push((bundle: BundleLifecyclePayload, context: FarmPluginContext) =>\n plugin.build?.before?.(bundle, withState(context)),\n );\n }\n break;\n case \"beforeNitroBuild\":\n if (plugin.build?.configure) {\n hooks.push((buildConfig: any, context: FarmPluginContext) =>\n plugin.build?.configure?.(buildConfig, withState(context)),\n );\n }\n break;\n case \"afterBundle\":\n if (plugin.build?.after) {\n hooks.push((result: BundleResultPayload, context: FarmPluginContext) =>\n plugin.build?.after?.(result, withState(context)),\n );\n }\n break;\n case \"devServerCreated\":\n if (plugin.dev?.server) {\n hooks.push((server: ViteDevServer, context: FarmPluginContext) =>\n plugin.dev?.server?.(server, withState(context)),\n );\n }\n break;\n case \"hmrUpdate\":\n if (plugin.dev?.update) {\n hooks.push((update: HMRUpdatePayload, context: FarmPluginContext) =>\n plugin.dev?.update?.(update, withState(context)),\n );\n }\n break;\n }\n\n return hooks;\n }\n\n private getHookContext(\n plugin: FarmPlugin,\n hookName: keyof FarmPlugin,\n args: any[],\n ): FarmPluginContext {\n if (\n hookName === \"beforeRequest\" ||\n hookName === \"afterResponse\" ||\n hookName === \"beforeApiHandler\"\n ) {\n const target = args[0];\n if (target && typeof target === \"object\") {\n return this.createRequestHookContext(target, plugin);\n }\n }\n\n return this.createPluginHookContext(plugin);\n }\n\n addPlugin(plugin: FarmPlugin) {\n this.plugins.push(plugin);\n this.hookPresence.clear();\n this.runtimeHookPresence.clear();\n }\n\n addPlugins(plugins: FarmPlugin[]) {\n for (const plugin of plugins) {\n this.addPlugin(plugin);\n }\n }\n\n getPlugins(): FarmPlugin[] {\n return [...this.plugins];\n }\n\n getSortedPlugins(): FarmPlugin[] {\n const pre = this.plugins.filter((p) => p.enforce === \"pre\");\n const normal = this.plugins.filter((p) => !p.enforce);\n const post = this.plugins.filter((p) => p.enforce === \"post\");\n return [...pre, ...normal, ...post];\n }\n\n hasHook(hookName: keyof FarmPlugin): boolean {\n const cached = this.hookPresence.get(hookName);\n if (cached !== undefined) return cached;\n\n const present = this.plugins.some((plugin) => this.getPluginHooks(plugin, hookName).length > 0);\n this.hookPresence.set(hookName, present);\n return present;\n }\n\n hasRuntimeHook(hookName: \"context\" | \"before\" | \"after\" | \"error\"): boolean {\n const cached = this.runtimeHookPresence.get(hookName);\n if (cached !== undefined) return cached;\n\n const present = this.plugins.some((plugin) => typeof plugin.runtime?.[hookName] === \"function\");\n this.runtimeHookPresence.set(hookName, present);\n return present;\n }\n\n hasRuntimeRequestHooks(): boolean {\n return (\n this.hasRuntimeHook(\"context\") ||\n this.hasRuntimeHook(\"before\") ||\n this.hasRuntimeHook(\"after\") ||\n this.hasRuntimeHook(\"error\")\n );\n }\n\n copyRequestContext(source: FarmRequest | Request, target: FarmRequest | Request): void {\n this.copyRequestStore(source, target);\n if (source instanceof Request && target instanceof Request) {\n this.copyRuntimeRequestContext(source, target);\n }\n }\n\n async setupPlugins(): Promise<void> {\n if (this.setupComplete) return;\n\n for (const plugin of this.getSortedPlugins()) {\n if (!plugin.setup) continue;\n const state = await plugin.setup({\n ...this.createPluginHookContext(plugin),\n env: getResolvedEnv(),\n });\n this.pluginStates.set(plugin, state);\n }\n\n this.setupComplete = true;\n }\n\n async startRuntime(): Promise<void> {\n if (this.runtimeReady) return;\n if (this.runtimeStartPromise) return this.runtimeStartPromise;\n\n this.runtimeStartPromise = (async () => {\n if (!this.initialized) {\n await this.runHookParallel(\"init\");\n }\n await this.setupPlugins();\n if (!this.runtimeReady) {\n await this.runHookParallel(\"ready\");\n }\n })();\n\n try {\n await this.runtimeStartPromise;\n } catch (error) {\n this.runtimeStartPromise = undefined;\n throw error;\n }\n }\n\n async closeRuntime(reason = \"runtime-closed\"): Promise<void> {\n if (this.runtimeClosePromise) return this.runtimeClosePromise;\n if (this.runtimeClosed) return;\n\n this.runtimeClosePromise = (async () => {\n const errors: unknown[] = [];\n this.runtimeShutdownHooksRunning = true;\n try {\n await this.runHookParallel(\"shutdown\", { reason });\n } catch (error) {\n if (error instanceof FarmRuntimeShutdownError) errors.push(...error.errors);\n else errors.push(error);\n } finally {\n this.runtimeShutdownHooksRunning = false;\n }\n\n const disposers = this.runtimeDisposers.splice(0).reverse();\n for (const dispose of disposers) {\n try {\n await dispose();\n } catch (error) {\n errors.push(error);\n }\n }\n\n this.runtimeClosed = true;\n if (errors.length > 0) {\n throw new FarmRuntimeShutdownError(\"Farm runtime shutdown failed\", errors);\n }\n })();\n return this.runtimeClosePromise;\n }\n\n async beginRuntimeRequest(\n request: Request,\n options: FarmPluginRuntimeRequestOptions = {},\n ): Promise<FarmPluginRuntimeSession> {\n await this.startRuntime();\n\n const startedAt = Date.now();\n const waitUntil = options.waitUntil\n ? (promise: Promise<unknown>) => options.waitUntil?.(Promise.resolve(promise))\n : (promise: Promise<unknown>) => {\n void Promise.resolve(promise).catch(() => {});\n };\n let activeRequest = request;\n let runtimeContext: Readonly<Record<string, unknown>> = Object.freeze({});\n\n try {\n runtimeContext = await this.createRuntimeRequestContext(activeRequest, options, waitUntil);\n\n let response: Response | undefined;\n for (const plugin of this.getSortedPlugins()) {\n const before = plugin.runtime?.before;\n if (!before) continue;\n\n const result = await before({\n ...this.createRuntimeBaseEvent(plugin, activeRequest, options, waitUntil),\n ctx: runtimeContext,\n });\n\n if (result instanceof Request) {\n this.copyRequestStore(activeRequest, result);\n this.copyRuntimeRequestContext(activeRequest, result);\n activeRequest = result;\n continue;\n }\n if (result instanceof Response) {\n response = result;\n break;\n }\n if (result !== undefined) {\n throw new TypeError(\n `Farm plugin \"${plugin.name}\" runtime.before must return a Request, Response, or undefined`,\n );\n }\n }\n\n return {\n request: activeRequest,\n response,\n ctx: runtimeContext,\n startedAt,\n options,\n waitUntil,\n };\n } catch (error) {\n await this.runRuntimeErrorHooks(\n activeRequest,\n error,\n runtimeContext,\n Date.now() - startedAt,\n options,\n waitUntil,\n );\n throw error;\n }\n }\n\n async endRuntimeRequest(\n session: FarmPluginRuntimeSession,\n initialResponse: Response,\n ): Promise<Response> {\n let response = initialResponse;\n\n try {\n for (const plugin of this.getSortedPlugins()) {\n const after = plugin.runtime?.after;\n if (!after) continue;\n\n const result = await after({\n ...this.createRuntimeBaseEvent(\n plugin,\n session.request,\n session.options,\n session.waitUntil,\n ),\n ctx: session.ctx,\n response,\n durationMs: Date.now() - session.startedAt,\n });\n if (result !== undefined) {\n if (!(result instanceof Response)) {\n throw new TypeError(\n `Farm plugin \"${plugin.name}\" runtime.after must return a Response or undefined`,\n );\n }\n response = result;\n }\n }\n\n return response;\n } catch (error) {\n await this.failRuntimeRequest(session, error);\n throw error;\n }\n }\n\n async failRuntimeRequest(session: FarmPluginRuntimeSession, error: unknown): Promise<void> {\n if (this.failedRuntimeSessions.has(session)) return;\n this.failedRuntimeSessions.add(session);\n await this.runRuntimeErrorHooks(\n session.request,\n error,\n session.ctx,\n Date.now() - session.startedAt,\n session.options,\n session.waitUntil,\n );\n }\n\n async runRuntimeRequest(\n request: Request,\n handler: FarmPluginRuntimeRequestHandler,\n options: FarmPluginRuntimeRequestOptions = {},\n ): Promise<Response> {\n const session = await this.beginRuntimeRequest(request, options);\n try {\n const response = session.response ?? (await handler(session.request));\n if (!(response instanceof Response)) {\n throw new TypeError(\"Farm plugin runtime handlers must return a Response\");\n }\n return await this.endRuntimeRequest(session, response);\n } catch (error) {\n await this.failRuntimeRequest(session, error);\n throw error;\n }\n }\n\n async runHook<K extends keyof FarmPlugin>(hookName: K, ...args: any[]): Promise<any> {\n const plugins = this.getSortedPlugins();\n\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n const hookContext = this.getHookContext(plugin, hookName, args);\n const result = await (hook as any).apply(plugin, [...args, hookContext]);\n if (result !== undefined) {\n return result;\n }\n }\n }\n }\n\n async runHookSerial<K extends keyof FarmPlugin>(\n hookName: K,\n initialValue: any,\n ...args: any[]\n ): Promise<any> {\n const plugins = this.getSortedPlugins();\n let value = initialValue;\n\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n const hookArgs = [value, ...args];\n const hookContext = this.getHookContext(plugin, hookName, hookArgs);\n const result = await (hook as any).apply(plugin, [...hookArgs, hookContext]);\n if (result !== undefined) {\n if (\n hookName === \"beforeApiHandler\" &&\n result !== value &&\n value &&\n result &&\n typeof value === \"object\" &&\n typeof result === \"object\"\n ) {\n this.copyRequestStore(value as FarmRequest | Request, result as FarmRequest | Request);\n }\n value = result;\n }\n }\n }\n\n return value;\n }\n\n async runHookParallel<K extends keyof FarmPlugin>(hookName: K, ...args: any[]): Promise<boolean> {\n return this.runHookParallelFiltered(hookName, () => true, ...args);\n }\n\n /** @internal Runs hooks for only the plugins selected by the runtime adapter. */\n async runHookParallelFiltered<K extends keyof FarmPlugin>(\n hookName: K,\n include: (plugin: FarmPlugin) => boolean,\n ...args: any[]\n ): Promise<boolean> {\n if (hookName === \"shutdown\" && !this.runtimeShutdownHooksRunning) {\n await this.closeRuntime(args[0]?.reason);\n return false;\n }\n\n const plugins = this.getSortedPlugins().filter(include);\n\n // Run selected hooks sequentially for deterministic execution and short-circuiting.\n const sequentialHooks = new Set<keyof FarmPlugin>([\n \"ready\",\n \"shutdown\",\n \"beforeRequest\",\n \"afterResponse\",\n \"beforeApiHandler\",\n \"afterApiHandler\",\n \"beforeRouteMatch\",\n \"afterRouteMatch\",\n \"beforeRender\",\n \"afterRender\",\n ]);\n\n if (sequentialHooks.has(hookName)) {\n const shutdownErrors: unknown[] = [];\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n // Check if response is already sent (only for beforeRequest)\n if (hookName === \"beforeRequest\") {\n const res = args[1];\n if (res && (res.writableEnded || res[FARM_NODE_RESPONSE_END_PENDING])) {\n return true;\n }\n }\n\n const hookContext = this.getHookContext(plugin, hookName, args);\n try {\n await (hook as any).apply(plugin, [...args, hookContext]);\n } catch (error) {\n if (hookName !== \"shutdown\") throw error;\n shutdownErrors.push(error);\n }\n\n // Check again after plugin execution (only for beforeRequest)\n if (hookName === \"beforeRequest\") {\n const res = args[1];\n if (res && res.writableEnded) {\n return true;\n }\n }\n }\n }\n if (hookName === \"shutdown\" && shutdownErrors.length > 0) {\n throw new FarmRuntimeShutdownError(\"Farm plugin shutdown hooks failed\", shutdownErrors);\n }\n } else {\n // Run other hooks in parallel\n const promises: Promise<any>[] = [];\n for (const plugin of plugins) {\n for (const hook of this.getPluginHooks(plugin, hookName)) {\n const hookContext = this.getHookContext(plugin, hookName, args);\n promises.push((hook as any).apply(plugin, [...args, hookContext]));\n }\n }\n await Promise.all(promises);\n }\n\n if (hookName === \"init\") this.initialized = true;\n if (hookName === \"ready\") this.runtimeReady = true;\n\n return false;\n }\n\n updateContext(updates: Partial<FarmPluginContext>) {\n this.context = {\n ...this.context,\n ...updates,\n requestContext: this.context.requestContext,\n };\n }\n}\n\nexport function definePlugin<\n TState = undefined,\n TRequestContext extends object = Record<string, never>,\n TClientState = unknown,\n TClientPublic = undefined,\n TIntegrationInstance = unknown,\n const TRoutes extends PluginRoutes = PluginRoutes,\n>(\n plugin: FarmPlugin<\n TState,\n TRequestContext,\n TClientState,\n TClientPublic,\n TIntegrationInstance,\n false,\n TRoutes\n >,\n): FarmPlugin<\n TState,\n TRequestContext,\n TClientState,\n TClientPublic,\n TIntegrationInstance,\n false,\n TRoutes\n> {\n return plugin;\n}\n\nexport namespace definePlugin {\n /** Bind an integration instance type while preserving inference for plugin state and context. */\n export function forIntegration<TIntegrationInstance>() {\n return function defineBoundPlugin<\n TState = undefined,\n TRequestContext extends object = Record<string, never>,\n TClientState = unknown,\n TClientPublic = undefined,\n >(\n plugin: FarmPlugin<\n TState,\n TRequestContext,\n TClientState,\n TClientPublic,\n TIntegrationInstance,\n true\n >,\n ): FarmPlugin<\n TState,\n TRequestContext,\n TClientState,\n TClientPublic,\n TIntegrationInstance,\n true\n > {\n return plugin;\n };\n }\n}\nexport { farmPlugin } from \"./vite\";\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { FarmClientPlugin } from \"./client/plugin\";\nimport type { FarmPlugin, FarmPluginClientConfig } from \"./plugin\";\n\nexport interface ResolvedFarmClientPlugin {\n name: string;\n version?: string;\n enforce?: \"pre\" | \"post\";\n definition: FarmClientPlugin;\n publicData?: unknown;\n}\n\nexport interface FarmClientPluginEntryCode {\n imports: string;\n registrations: string;\n plugins: ResolvedFarmClientPlugin[];\n}\n\nconst CLIENT_KEYS = [\n \"public\",\n \"setup\",\n \"hydration\",\n \"navigation\",\n \"error\",\n \"performance\",\n \"close\",\n] as const;\nconst HYDRATION_KEYS = [\"before\", \"after\"] as const;\nconst NAVIGATION_KEYS = [\"before\", \"loaded\", \"resolved\", \"rendered\", \"error\"] as const;\nconst APP_CLIENT_EXTENSIONS = [\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"mjs\"] as const;\n\n/** Resolve the optional application-owned browser lifecycle entry. */\nexport function resolveFarmAppClientEntry(\n root = process.cwd(),\n srcDir = \"src\",\n): string | undefined {\n const sourceRoot = path.resolve(root, srcDir);\n for (const extension of APP_CLIENT_EXTENSIONS) {\n const candidate = path.join(sourceRoot, `client.${extension}`);\n if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) return candidate;\n }\n return undefined;\n}\n\nexport function resolveFarmClientPlugins(\n plugins: readonly FarmPlugin[] | undefined,\n _root?: string,\n): ResolvedFarmClientPlugin[] {\n if (!plugins?.length) return [];\n\n return plugins.flatMap((plugin) => {\n if (!plugin.client) return [];\n assertClientLifecycle(plugin.client, plugin.name);\n assertPublicData(plugin.client.public, plugin.name);\n\n return [\n {\n name: plugin.name,\n version: plugin.version,\n enforce: plugin.enforce,\n definition: plugin.client,\n publicData: plugin.client.public,\n },\n ];\n });\n}\n\nexport function generateFarmClientPluginEntryCode(\n plugins: readonly FarmPlugin[] | undefined,\n root?: string,\n srcDir = \"src\",\n appPublicData?: unknown,\n): FarmClientPluginEntryCode {\n const resolved = resolveFarmClientPlugins(plugins, root);\n const appClientEntry = root ? resolveFarmAppClientEntry(root, srcDir) : undefined;\n const imports = appClientEntry\n ? `import farmAppClientDefinition from ${JSON.stringify(appClientEntry.replace(/\\\\/g, \"/\"))};`\n : \"\";\n const serializedPlugins = resolved.map(\n (plugin) => ` {\n name: ${JSON.stringify(plugin.name)},\n version: ${serializeOptionalString(plugin.version)},\n enforce: ${serializeOptionalString(plugin.enforce)},\n definition: ${serializeClientLifecycle(plugin.definition, plugin.name)},\n public: ${serializePublicData(plugin.publicData)},\n }`,\n );\n if (appClientEntry) {\n assertPublicData(appPublicData, \"farm:app-client\");\n serializedPlugins.push(` {\n name: \"farm:app-client\",\n enforce: \"post\",\n definition: farmAppClientDefinition,\n public: ${serializePublicData(appPublicData)},\n }`);\n }\n const registrations = `[\n${serializedPlugins.join(\",\\n\")}\n]`;\n\n return { imports, registrations, plugins: resolved };\n}\n\nfunction assertClientLifecycle(client: FarmPluginClientConfig, pluginName: string): void {\n assertLifecycleObject(client, pluginName, \"client\", CLIENT_KEYS);\n assertHook(client.setup, pluginName, \"client.setup\");\n assertHook(client.error, pluginName, \"client.error\");\n assertHook(client.performance, pluginName, \"client.performance\");\n assertHook(client.close, pluginName, \"client.close\");\n\n if (client.hydration !== undefined) {\n assertLifecycleObject(client.hydration, pluginName, \"client.hydration\", HYDRATION_KEYS);\n assertHook(client.hydration.before, pluginName, \"client.hydration.before\");\n assertHook(client.hydration.after, pluginName, \"client.hydration.after\");\n }\n\n if (client.navigation !== undefined) {\n assertLifecycleObject(client.navigation, pluginName, \"client.navigation\", NAVIGATION_KEYS);\n for (const key of NAVIGATION_KEYS) {\n assertHook(client.navigation[key], pluginName, `client.navigation.${key}`);\n }\n }\n}\n\nfunction assertLifecycleObject(\n value: unknown,\n pluginName: string,\n location: string,\n allowedKeys: readonly string[],\n): asserts value is Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be an object`);\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be a plain object`);\n }\n\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key === \"symbol\") {\n throw new TypeError(`Client plugin \"${pluginName}\" ${location} cannot contain symbol keys`);\n }\n if (!allowedKeys.includes(key)) {\n throw new TypeError(`Client plugin \"${pluginName}\" has an unknown ${location}.${key} option`);\n }\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor?.enumerable) {\n throw new TypeError(`Client plugin \"${pluginName}\" ${location}.${key} must be enumerable`);\n }\n if (!(\"value\" in descriptor)) {\n throw new TypeError(`Client plugin \"${pluginName}\" ${location}.${key} cannot be an accessor`);\n }\n }\n}\n\nfunction assertHook(value: unknown, pluginName: string, location: string): void {\n if (value === undefined) return;\n if (typeof value !== \"function\") {\n throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be a function`);\n }\n functionSource(value, pluginName, location);\n}\n\nfunction serializeClientLifecycle(definition: FarmClientPlugin, pluginName: string): string {\n const fields: string[] = [];\n pushHook(fields, \"setup\", definition.setup, pluginName, \"client.setup\", 2);\n pushHookGroup(fields, \"hydration\", definition.hydration, HYDRATION_KEYS, pluginName, 2);\n pushHookGroup(fields, \"navigation\", definition.navigation, NAVIGATION_KEYS, pluginName, 2);\n pushHook(fields, \"error\", definition.error, pluginName, \"client.error\", 2);\n pushHook(fields, \"performance\", definition.performance, pluginName, \"client.performance\", 2);\n pushHook(fields, \"close\", definition.close, pluginName, \"client.close\", 2);\n\n return fields.length ? `{\\n${fields.join(\",\\n\")}\\n }` : \"{}\";\n}\n\nfunction pushHookGroup(\n fields: string[],\n groupName: \"hydration\" | \"navigation\",\n group: Record<string, unknown> | undefined,\n keys: readonly string[],\n pluginName: string,\n indent: number,\n): void {\n if (!group) return;\n const hooks: string[] = [];\n for (const key of keys) {\n pushHook(hooks, key, group[key], pluginName, `client.${groupName}.${key}`, indent + 2);\n }\n fields.push(\n `${\" \".repeat(indent)}${JSON.stringify(groupName)}: {\\n${hooks.join(\",\\n\")}\\n${\" \".repeat(indent)}}`,\n );\n}\n\nfunction pushHook(\n fields: string[],\n key: string,\n hook: unknown,\n pluginName: string,\n location: string,\n indent: number,\n): void {\n if (hook === undefined) return;\n fields.push(\n `${\" \".repeat(indent)}${JSON.stringify(key)}: ${functionSource(hook, pluginName, location)}`,\n );\n}\n\nfunction functionSource(value: unknown, pluginName: string, location: string): string {\n if (typeof value !== \"function\") {\n throw new TypeError(`Client plugin \"${pluginName}\" ${location} must be a function`);\n }\n\n const source = Function.prototype.toString.call(value).trim();\n if (!source || source.includes(\"[native code]\")) {\n throw new TypeError(\n `Client plugin \"${pluginName}\" ${location} must be authored inline and cannot be native or bound`,\n );\n }\n\n if (/^(?:async\\s+)?function(?:\\s*\\*)?(?:\\s+|\\()/.test(source)) {\n return `(${source})`;\n }\n\n const method = source.match(/^(async\\s+)?(\\*\\s*)?[$A-Z_a-z][$\\w]*\\s*(\\([\\s\\S]*)$/);\n if (method) {\n const asyncPrefix = method[1] ?? \"\";\n const generator = method[2] ? \"*\" : \"\";\n return `(${asyncPrefix}function${generator}${method[3]})`;\n }\n\n if (source.includes(\"=>\")) return `(${source})`;\n\n throw new TypeError(\n `Client plugin \"${pluginName}\" ${location} must use a function, method, or arrow function`,\n );\n}\n\nfunction assertPublicData(value: unknown, pluginName: string): void {\n if (value === undefined) return;\n const seen = new WeakSet<object>();\n\n const visit = (current: unknown, pathSegments: string[]): void => {\n if (current === null || typeof current === \"string\" || typeof current === \"boolean\") {\n return;\n }\n if (typeof current === \"number\") {\n if (Number.isFinite(current)) return;\n throwPublicDataError(pluginName, pathSegments, \"must be a finite number\");\n }\n if (typeof current !== \"object\") {\n throwPublicDataError(pluginName, pathSegments, `cannot contain ${typeof current} values`);\n }\n if (seen.has(current)) {\n throwPublicDataError(pluginName, pathSegments, \"cannot contain circular references\");\n }\n seen.add(current);\n\n if (Array.isArray(current)) {\n for (let index = 0; index < current.length; index += 1) {\n if (!Object.prototype.hasOwnProperty.call(current, index)) {\n throwPublicDataError(\n pluginName,\n [...pathSegments, String(index)],\n \"cannot contain sparse array slots\",\n );\n }\n visit(current[index], [...pathSegments, String(index)]);\n }\n for (const key of Reflect.ownKeys(current)) {\n if (key === \"length\" || (typeof key === \"string\" && isArrayIndex(key))) continue;\n throwPublicDataError(\n pluginName,\n pathSegments,\n typeof key === \"symbol\"\n ? \"cannot contain symbol keys\"\n : `cannot contain non-index array property ${key}`,\n );\n }\n seen.delete(current);\n return;\n }\n\n const prototype = Object.getPrototypeOf(current);\n if (prototype !== Object.prototype && prototype !== null) {\n throwPublicDataError(pluginName, pathSegments, \"must contain only plain objects and arrays\");\n }\n for (const key of Reflect.ownKeys(current)) {\n if (typeof key === \"symbol\") {\n throwPublicDataError(pluginName, pathSegments, \"cannot contain symbol keys\");\n }\n const descriptor = Object.getOwnPropertyDescriptor(current, key);\n if (!descriptor?.enumerable) {\n throwPublicDataError(\n pluginName,\n [...pathSegments, key],\n \"cannot contain non-enumerable properties\",\n );\n }\n if (!(\"value\" in descriptor)) {\n throwPublicDataError(\n pluginName,\n [...pathSegments, key],\n \"cannot contain accessor properties\",\n );\n }\n visit(descriptor.value, [...pathSegments, key]);\n }\n seen.delete(current);\n };\n\n visit(value, []);\n}\n\nfunction throwPublicDataError(pluginName: string, pathSegments: string[], message: string): never {\n const location = pathSegments.length ? ` at client.public.${pathSegments.join(\".\")}` : \"\";\n throw new TypeError(`Client plugin \"${pluginName}\"${location} ${message}`);\n}\n\nfunction serializePublicData(value: unknown): string {\n if (value === undefined) return \"undefined\";\n return `JSON.parse(${JSON.stringify(JSON.stringify(value))})`;\n}\n\nfunction serializeOptionalString(value: string | undefined): string {\n return value === undefined ? \"undefined\" : JSON.stringify(value);\n}\n\nfunction isArrayIndex(key: string): boolean {\n const value = Number(key);\n return Number.isInteger(value) && value >= 0 && value < 4_294_967_295 && String(value) === key;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { FarmCacheUserConfig } from \"./cache\";\n\nconst ADAPTER_EXTENSIONS = [\"ts\", \"tsx\", \"js\", \"jsx\", \"mts\", \"mjs\"] as const;\n\nexport interface ResolvedClientCacheAdapterEntry {\n /** Absolute adapter module path with forward slashes, ready for codegen. */\n importPath: string;\n options: { version?: string; flushDelayMs?: number };\n}\n\nexport interface ClientCachePersistenceEntryCode {\n imports: string;\n init: string;\n}\n\n/**\n * Resolve `cache.client.adapter` from configuration to an absolute module\n * path for the generated client entries. Fails the build with an actionable\n * error when the option is set but the module cannot be found.\n */\nexport function resolveFarmClientCacheAdapterEntry(\n root: string,\n cache: FarmCacheUserConfig | undefined,\n): ResolvedClientCacheAdapterEntry | undefined {\n const client = cache?.client;\n const adapter = client?.adapter;\n if (adapter === undefined) return undefined;\n\n if (typeof adapter !== \"string\" || adapter.trim().length === 0) {\n throw new Error(\n 'cache.client.adapter must be a module path string, for example \"./src/cache-adapter\".',\n );\n }\n\n const resolved = path.resolve(root, adapter);\n const found = resolveAdapterFile(resolved);\n if (!found) {\n throw new Error(\n `cache.client.adapter was not found: ${adapter} (resolved to ${resolved}). ` +\n \"Point it at a client module whose default export is created with defineClientCacheAdapter().\",\n );\n }\n\n const options: ResolvedClientCacheAdapterEntry[\"options\"] = {};\n if (client?.version !== undefined) options.version = client.version;\n if (client?.flushDelayMs !== undefined) options.flushDelayMs = client.flushDelayMs;\n return { importPath: found.replace(/\\\\/g, \"/\"), options };\n}\n\nfunction resolveAdapterFile(resolved: string): string | undefined {\n if (fs.existsSync(resolved) && fs.statSync(resolved).isFile()) return resolved;\n for (const extension of ADAPTER_EXTENSIONS) {\n const candidate = `${resolved}.${extension}`;\n if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) return candidate;\n }\n return undefined;\n}\n\n/**\n * Code fragments for the generated client entries: an import of the user's\n * adapter module and an init call that runs before hydration starts. Empty\n * strings when persistence is not configured, so entries stay unchanged.\n */\nexport function generateClientCachePersistenceCode(\n entry: ResolvedClientCacheAdapterEntry | undefined,\n): ClientCachePersistenceEntryCode {\n if (!entry) return { imports: \"\", init: \"\" };\n\n return {\n imports: [\n `import * as __farmClientCacheAdapterModule from ${JSON.stringify(entry.importPath)};`,\n `import { initConfiguredClientCachePersistence as __farmInitClientCachePersistence } from \"@farm.js/core/client\";`,\n ].join(\"\\n\"),\n init: `__farmInitClientCachePersistence(__farmClientCacheAdapterModule, ${JSON.stringify(entry.options)});`,\n };\n}\n","import { existsSync, mkdirSync, readFileSync, unlinkSync } from \"fs\";\nimport { dirname, isAbsolute, join, resolve } from \"path\";\nimport { APITypeGenerator, type APIRouteInfo } from \"./type-generator\";\nimport {\n createRouteTypeDeclarations,\n generateRouteTypes,\n type GenerateRouteTypesOptions,\n} from \"./routing/generate-route-types\";\nimport { createEnvTypeDeclarations, generateEnvTypes } from \"./env-types\";\nimport { createFarmImageTypeDeclarations, generateFarmImageTypes } from \"./image-types\";\nimport { createContentTypeDeclarations } from \"./content-types\";\nimport { generateFarmI18nTypes, renderFarmI18nTypes } from \"./i18n/type-generator\";\nimport { readFarmI18nCatalogs } from \"./i18n/catalog\";\nimport type { ResolvedFarmI18nConfig } from \"./i18n/types\";\nimport { getFarmAppDirectories, getFarmSourceRoots, type ResolvedFarmLayer } from \"./layers\";\nimport { writeFileIfChanged } from \"./write-file-if-changed\";\nimport type { FarmPlugin } from \"./plugin\";\nimport { resolvePluginRoutes } from \"./api/route\";\n\nexport { generateFarmI18nTypes };\n\nexport interface GenerateFarmTypeArtifactsOptions {\n root: string;\n srcDir?: string;\n configPath?: string;\n plugins?: readonly FarmPlugin[];\n extraRoutes?: string[];\n layers?: readonly ResolvedFarmLayer[];\n suppressLintOnLink?: boolean;\n componentExtensions?: readonly string[];\n routeTypesOutFile?: string;\n apiTypesOutFile?: string;\n envTypesOutFile?: string;\n imageTypesOutFile?: string;\n i18nTypesOutFile?: string;\n i18nConfig?: ResolvedFarmI18nConfig;\n routes?: boolean;\n api?: boolean;\n env?: boolean;\n images?: boolean;\n i18n?: boolean;\n /** Compare generated content with disk without writing files. */\n check?: boolean;\n}\n\nexport interface GenerateFarmTypeArtifactsResult {\n typesPath?: string;\n routeTypesPath?: string;\n apiTypesPath?: string;\n envTypesPath?: string;\n imageTypesPath?: string;\n i18nTypesPath?: string;\n apiRoutes: APIRouteInfo[];\n /** Generated files whose checked-in content is missing or stale. */\n stalePaths: string[];\n}\n\nexport async function generateFarmTypeArtifacts(\n options: GenerateFarmTypeArtifactsOptions,\n): Promise<GenerateFarmTypeArtifactsResult> {\n const root = resolve(options.root);\n const srcDir = options.srcDir || \"src\";\n const shouldGenerateRoutes = options.routes !== false;\n const shouldGenerateApi = options.api !== false;\n const shouldGenerateEnv = options.env !== false;\n const shouldGenerateImages = options.images !== false;\n const shouldGenerateI18n = options.i18n !== false && options.i18nConfig?.enabled;\n const sourceRoots = getFarmSourceRoots({ root, srcDir, layers: options.layers });\n const appDirs = getFarmAppDirectories({ root, srcDir, layers: options.layers });\n\n const result: GenerateFarmTypeArtifactsResult = {\n apiRoutes: [],\n stalePaths: [],\n };\n const unifiedTypesPath = join(root, srcDir, \"farm.d.ts\");\n const shouldRefreshUnifiedTypes =\n (shouldGenerateRoutes && !options.routeTypesOutFile) ||\n (shouldGenerateEnv && !options.envTypesOutFile) ||\n (shouldGenerateI18n && !options.i18nTypesOutFile);\n const unifiedSections: string[] = [];\n\n if (shouldRefreshUnifiedTypes && !options.routeTypesOutFile) {\n const routeOptions: GenerateRouteTypesOptions = {\n root,\n srcDir,\n extraRoutes: options.extraRoutes || [],\n suppressLintOnLink: options.suppressLintOnLink,\n componentExtensions: options.componentExtensions,\n sourceRoots,\n };\n unifiedSections.push(await createRouteTypeDeclarations(routeOptions, unifiedTypesPath));\n result.routeTypesPath = unifiedTypesPath;\n } else if (shouldGenerateRoutes) {\n const routeOptions = {\n root,\n srcDir,\n outFile: options.routeTypesOutFile,\n extraRoutes: options.extraRoutes || [],\n suppressLintOnLink: options.suppressLintOnLink,\n componentExtensions: options.componentExtensions,\n sourceRoots,\n } satisfies GenerateRouteTypesOptions;\n if (options.check) {\n const routeTypesPath = resolveGeneratedPath(root, srcDir, options.routeTypesOutFile!);\n const content = await createRouteTypeDeclarations(routeOptions, routeTypesPath);\n checkGeneratedFile(routeTypesPath, content, result.stalePaths);\n result.routeTypesPath = routeTypesPath;\n } else {\n result.routeTypesPath = await generateRouteTypes(routeOptions);\n }\n }\n\n if (shouldGenerateApi) {\n const generator = new APITypeGenerator(appDirs);\n const apiRoutes = generator.scanAPIRoutes();\n const apiTypesPath = options.apiTypesOutFile\n ? resolve(root, options.apiTypesOutFile)\n : join(root, srcDir, \"lib\", \"api.generated.ts\");\n const pluginRoutes = resolvePluginRoutes(options.plugins);\n const configFiles = [\n ...(options.layers ?? [])\n .map((layer) => layer.configFile)\n .filter((file): file is string => Boolean(file)),\n options.configPath\n ? resolve(root, options.configPath)\n : [\n \"farm.config.ts\",\n \"farm.config.mts\",\n \"farm.config.js\",\n \"farm.config.mjs\",\n \"farm.config.cts\",\n \"farm.config.cjs\",\n \"config.ts\",\n \"config.js\",\n ]\n .map((name) => join(root, name))\n .find((file) => existsSync(file)),\n ].filter((file): file is string => Boolean(file));\n if (pluginRoutes.length && !configFiles.length) {\n throw new Error(\n \"Cannot generate plugin API types without a Farm config file. Pass configPath.\",\n );\n }\n const content = generator.generateAPIRouter(apiRoutes, {\n outFile: apiTypesPath,\n pluginConfigs: pluginRoutes.length ? [...new Set(configFiles)] : [],\n pluginRoutes,\n });\n\n writeOrCheckGeneratedFile(apiTypesPath, content, options.check, result.stalePaths);\n\n result.apiTypesPath = apiTypesPath;\n result.apiRoutes = apiRoutes;\n }\n\n if (shouldRefreshUnifiedTypes && !options.envTypesOutFile) {\n unifiedSections.push(\n createEnvTypeDeclarations(\n {\n root,\n srcDir,\n configPath: options.configPath,\n layerConfigPaths: (options.layers ?? [])\n .map((layer) => layer.configFile)\n .filter((configFile): configFile is string => Boolean(configFile)),\n },\n unifiedTypesPath,\n ),\n );\n result.envTypesPath = unifiedTypesPath;\n } else if (shouldGenerateEnv) {\n const envOptions = {\n root,\n srcDir,\n outFile: options.envTypesOutFile,\n configPath: options.configPath,\n layerConfigPaths: (options.layers ?? [])\n .map((layer) => layer.configFile)\n .filter((configFile): configFile is string => Boolean(configFile)),\n };\n if (options.check) {\n const envTypesPath = resolveGeneratedPath(root, srcDir, options.envTypesOutFile!);\n checkGeneratedFile(\n envTypesPath,\n createEnvTypeDeclarations(envOptions, envTypesPath),\n result.stalePaths,\n );\n result.envTypesPath = envTypesPath;\n } else {\n result.envTypesPath = await generateEnvTypes(envOptions);\n }\n }\n\n // Static image modules are declared by @farm.js/core itself. Keep the\n // explicit output option for callers that need a standalone declaration.\n if (shouldGenerateImages && options.imageTypesOutFile) {\n const imageTypesPath = resolveGeneratedPath(root, srcDir, options.imageTypesOutFile, false);\n if (options.check) {\n checkGeneratedFile(imageTypesPath, createFarmImageTypeDeclarations(), result.stalePaths);\n result.imageTypesPath = imageTypesPath;\n } else {\n result.imageTypesPath = generateFarmImageTypes({\n root,\n srcDir,\n outFile: options.imageTypesOutFile,\n });\n }\n }\n\n if (shouldRefreshUnifiedTypes && options.i18nConfig?.enabled && !options.i18nTypesOutFile) {\n const { signatures } = await readFarmI18nCatalogs(options.i18nConfig);\n unifiedSections.push(renderFarmI18nTypes(options.i18nConfig.locales, signatures));\n result.i18nTypesPath = unifiedTypesPath;\n } else if (shouldGenerateI18n && options.i18nConfig) {\n if (options.check) {\n const i18nTypesPath = resolveGeneratedPath(root, srcDir, options.i18nTypesOutFile!, false);\n const { signatures } = await readFarmI18nCatalogs(options.i18nConfig);\n checkGeneratedFile(\n i18nTypesPath,\n renderFarmI18nTypes(options.i18nConfig.locales, signatures),\n result.stalePaths,\n );\n result.i18nTypesPath = i18nTypesPath;\n } else {\n result.i18nTypesPath = await generateFarmI18nTypes({\n root,\n srcDir,\n config: options.i18nConfig,\n outFile: options.i18nTypesOutFile,\n });\n }\n }\n\n if (shouldRefreshUnifiedTypes) {\n unifiedSections.push(\n createContentTypeDeclarations(\n {\n root,\n configPath: options.configPath,\n layerConfigPaths: (options.layers ?? [])\n .map((layer) => layer.configFile)\n .filter((configFile): configFile is string => Boolean(configFile)),\n },\n unifiedTypesPath,\n ),\n );\n }\n\n if (shouldRefreshUnifiedTypes) {\n writeOrCheckGeneratedFile(\n unifiedTypesPath,\n `/**\n * Generated by Farm.js. Do not edit.\n * Contains project-specific route, environment, content, and internationalization types.\n */\n\nimport \"@farm.js/core/image\";\nimport \"@farm.js/core/css\";\n\n${unifiedSections.map(normalizeUnifiedTypeSection).join(\"\\n\\n\")}\n`,\n options.check,\n result.stalePaths,\n );\n result.typesPath = unifiedTypesPath;\n if (options.check) {\n collectLegacyTypeArtifacts(root, srcDir, result.stalePaths);\n } else {\n removeLegacyTypeArtifacts(root, srcDir);\n }\n }\n\n return result;\n}\n\nfunction normalizeUnifiedTypeSection(section: string): string {\n // The unified artifact already imports Farm's asset types, so it is a module.\n // Individual generators add this marker for standalone declaration files, but\n // formatters remove the now-redundant export and make `farm generate --check`\n // report a false stale-file failure.\n return section.trimEnd().replace(/\\n+export \\{\\};$/, \"\");\n}\n\nfunction resolveGeneratedPath(\n root: string,\n srcDir: string,\n outFile: string,\n relativeToSrc = true,\n): string {\n if (isAbsolute(outFile)) return resolve(outFile);\n return resolve(root, relativeToSrc ? join(srcDir, outFile) : outFile);\n}\n\nfunction writeOrCheckGeneratedFile(\n filePath: string,\n content: string,\n check: boolean | undefined,\n stalePaths: string[],\n): void {\n if (check) {\n checkGeneratedFile(filePath, content, stalePaths);\n return;\n }\n\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileIfChanged(filePath, content);\n}\n\nfunction checkGeneratedFile(filePath: string, content: string, stalePaths: string[]): void {\n if (!existsSync(filePath) || readFileSync(filePath, \"utf8\") !== content) {\n stalePaths.push(filePath);\n }\n}\n\nconst LEGACY_TYPE_ARTIFACTS = [\n [\"farm-routes.d.ts\", \"Auto-generated route types\"],\n [\"farm-env.d.ts\", \"Auto-generated env types\"],\n [\"farm-images.d.ts\", \"Generated by Farm.js\"],\n [\"farm-i18n.d.ts\", \"Generated by Farm.js\"],\n] as const;\n\nfunction removeLegacyTypeArtifacts(root: string, srcDir: string): void {\n for (const [fileName, marker] of LEGACY_TYPE_ARTIFACTS) {\n const filePath = join(root, srcDir, fileName);\n if (!existsSync(filePath)) continue;\n const source = readFileSync(filePath, \"utf8\");\n if (source.includes(marker)) {\n unlinkSync(filePath);\n }\n }\n}\n\nfunction collectLegacyTypeArtifacts(root: string, srcDir: string, stalePaths: string[]): void {\n for (const [fileName, marker] of LEGACY_TYPE_ARTIFACTS) {\n const filePath = join(root, srcDir, fileName);\n if (!existsSync(filePath)) continue;\n if (readFileSync(filePath, \"utf8\").includes(marker)) stalePaths.push(filePath);\n }\n}\n","import * as path from \"path\";\nimport * as fs from \"fs\";\nimport { parseRoutePath } from \"../utils\";\nimport { parseRouteSlotFile } from \"./route-slots\";\nimport type { ParsedRoute } from \"../types\";\nimport { discoverProgrammaticRoutePaths } from \"../routes.server\";\nimport type { FarmSourceRoot } from \"../layers\";\nimport { writeFileIfChanged } from \"../write-file-if-changed\";\nimport { resolveFarmComponentExtensions } from \"../renderer\";\n\nfunction routeSegmentsToTsTypeLiteral(segments: string[]): string {\n if (segments.length === 0) return '\"/\"';\n const hasDynamic = segments.some((s) => s.startsWith(\"[\"));\n if (!hasDynamic) return JSON.stringify(\"/\" + segments.join(\"/\"));\n const parts = segments.map((s) => {\n if (s.startsWith(\"[[...\") || s.startsWith(\"[...\")) return \"${string}\";\n if (s.startsWith(\"[\")) return \"${string}\";\n return s;\n });\n return \"`/\" + parts.join(\"/\") + \"`\";\n}\n\nfunction routePatternToTsTypeLiterals(pattern: string): string[] {\n if (pattern === \"/\") return ['\"/\"'];\n\n let variants: string[][] = [[]];\n for (const segment of pattern.slice(1).split(\"/\").filter(Boolean)) {\n if (segment.startsWith(\"[[...\") && segment.endsWith(\"]]\")) {\n variants = variants.flatMap((parts) => [parts, [...parts, segment]]);\n } else {\n variants = variants.map((parts) => [...parts, segment]);\n }\n }\n\n return variants.map(routeSegmentsToTsTypeLiteral);\n}\n\nfunction routePatternToRouteLiteral(pattern: string): string {\n return JSON.stringify(pattern);\n}\n\nfunction renderTypeUnion(values: readonly string[]): string {\n return values.length <= 1 ? values[0] || \"never\" : `\\n | ${values.join(\"\\n | \")}`;\n}\n\nfunction renderTypeAlias(name: string, value: string): string {\n return `export type ${name} =${value.startsWith(\"\\n\") ? \"\" : \" \"}${value};`;\n}\n\nfunction createRoutePattern(route: ParsedRoute): string {\n if (route.segments.length === 0) return \"/\";\n return (\n \"/\" +\n route.segments\n .map((seg) => {\n if (!seg.isDynamic) return seg.segment;\n if (seg.isCatchAll) return seg.isOptional ? `[[...${seg.segment}]]` : `[...${seg.segment}]`;\n return `[${seg.segment}]`;\n })\n .join(\"/\")\n );\n}\n\nexport interface GenerateRouteTypesOptions {\n root: string;\n srcDir?: string;\n outFile?: string;\n extraRoutes?: string[];\n /** Ordered layer roots followed by the project root. */\n sourceRoots?: readonly FarmSourceRoot[];\n /** When true, do not augment LinkDefaultRoute so Link href accepts any string (no route-type errors). */\n suppressLintOnLink?: boolean;\n /** Additional renderer-owned component extensions, such as `.vue` or `.svelte`. */\n componentExtensions?: readonly string[];\n}\n\nconst DEFAULT_OUT_FILE = \"farm-routes.d.ts\";\n\n/**\n * Scan application route modules, generate page and module route unions,\n * and write a .d.ts file for typed Link hrefs and route component props.\n */\nexport async function generateRouteTypes(options: GenerateRouteTypesOptions): Promise<string> {\n const root = path.resolve(options.root);\n const srcDir = options.srcDir || \"src\";\n const outFile = options.outFile || DEFAULT_OUT_FILE;\n const outPath = path.isAbsolute(outFile) ? outFile : path.join(root, srcDir, outFile);\n const content = await createRouteTypeDeclarations(options, outPath);\n\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n writeFileIfChanged(outPath, content);\n\n return outPath;\n}\n\nexport async function createRouteTypeDeclarations(\n options: GenerateRouteTypesOptions,\n outPath: string,\n): Promise<string> {\n const { root, srcDir = \"src\", extraRoutes = [], suppressLintOnLink = false } = options;\n const sourceRoots = options.sourceRoots ?? [{ name: \"project\", root, srcDir, layer: false }];\n const componentExtensions = resolveFarmComponentExtensions(options.componentExtensions).map(\n (extension) => extension.slice(1),\n );\n\n const patterns = new Set<string>();\n const routeModulePatterns = new Set<string>();\n\n const glob = await import(\"fast-glob\");\n for (const source of sourceRoots) {\n const appDir = path.join(source.root, source.srcDir, \"app\");\n if (fs.existsSync(appDir)) {\n const routeModuleFiles = await glob.default(\n `**/{page,layout,loading,error}.{${componentExtensions.join(\",\")},md,mdx}`,\n {\n cwd: appDir,\n absolute: false,\n },\n );\n\n for (const file of routeModuleFiles) {\n if (parseRouteSlotFile(file)) continue;\n const route = parseRoutePath(file);\n const pattern = createRoutePattern(route);\n routeModulePatterns.add(pattern);\n if (route.type === \"page\") {\n patterns.add(pattern);\n }\n }\n }\n\n for (const route of await discoverProgrammaticRoutePaths(source.root, source.srcDir)) {\n patterns.add(route);\n routeModulePatterns.add(route);\n }\n }\n\n for (const route of extraRoutes) {\n if (route.startsWith(\"/\")) {\n patterns.add(route);\n routeModulePatterns.add(route);\n }\n }\n\n const sortedPatterns = Array.from(patterns).sort();\n const typeLiterals = Array.from(new Set(sortedPatterns.flatMap(routePatternToTsTypeLiterals)));\n const patternLiterals = sortedPatterns.map(routePatternToRouteLiteral);\n const routeModulePatternLiterals = Array.from(routeModulePatterns)\n .sort()\n .map(routePatternToRouteLiteral);\n\n const routePathType = suppressLintOnLink ? \"string\" : renderTypeUnion(typeLiterals);\n const routePatternType = suppressLintOnLink ? \"string\" : renderTypeUnion(patternLiterals);\n const routeModulePatternType = renderTypeUnion(routeModulePatternLiterals);\n const routeTypesImportPath = `./${path.basename(outPath).replace(/\\.d\\.ts$/, \"\")}`;\n const linkAugmentationBlock = suppressLintOnLink\n ? \"\"\n : `\ndeclare module \"@farm.js/core/client\" {\n interface LinkDefaultRoute {\n _: import(${JSON.stringify(routeTypesImportPath)}).RoutePath;\n pattern: import(${JSON.stringify(routeTypesImportPath)}).RoutePattern;\n }\n}\n\ndeclare module \"@farm.js/core\" {\n interface LinkDefaultRoute {\n _: import(${JSON.stringify(routeTypesImportPath)}).RoutePath;\n pattern: import(${JSON.stringify(routeTypesImportPath)}).RoutePattern;\n }\n // Ensure root import (\"@farm.js/core\") uses the same typed Link signature as client entry.\n const Link: typeof import(\"@farm.js/core/client\").Link;\n}\n\n// Internal declaration path used by @farm.js/core root type re-exports.\ndeclare module \"@farm.js/core/dist/client.js\" {\n interface LinkDefaultRoute {\n _: import(${JSON.stringify(routeTypesImportPath)}).RoutePath;\n pattern: import(${JSON.stringify(routeTypesImportPath)}).RoutePattern;\n }\n}\n`;\n\n const routeModuleAugmentationBlock = `\ndeclare global {\n namespace FarmJS {\n interface RouteRegistry {\n pattern: import(${JSON.stringify(routeTypesImportPath)}).RouteModulePattern;\n }\n }\n}\n`;\n\n const content = `/**\n * Auto-generated route types from src/app.\n * Link href and route component props are typed automatically from generated declarations.\n * Regenerated on dev start and when routes change.\n * Set suppressLintOnLink: true in farm.config.ts to accept any string on Link href.\n */\n${renderTypeAlias(\"RoutePath\", routePathType)}\n${renderTypeAlias(\"RoutePattern\", routePatternType)}\n${renderTypeAlias(\"RouteModulePattern\", routeModulePatternType)}${linkAugmentationBlock}${routeModuleAugmentationBlock}\n`;\n\n return content;\n}\n","import { mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { writeFileIfChanged } from \"./write-file-if-changed\";\n\nexport const FARM_STATIC_IMAGE_EXTENSIONS = [\"avif\", \"gif\", \"jpeg\", \"jpg\", \"png\", \"webp\"] as const;\n\nexport interface GenerateFarmImageTypesOptions {\n root: string;\n srcDir?: string;\n outFile?: string;\n}\n\nexport function generateFarmImageTypes(options: GenerateFarmImageTypesOptions): string {\n const outputPath = options.outFile\n ? path.resolve(options.root, options.outFile)\n : path.join(options.root, options.srcDir || \"src\", \"farm-images.d.ts\");\n mkdirSync(path.dirname(outputPath), { recursive: true });\n writeFileIfChanged(outputPath, createFarmImageTypeDeclarations());\n return outputPath;\n}\n\nexport function createFarmImageTypeDeclarations(): string {\n const modules = FARM_STATIC_IMAGE_EXTENSIONS.map(\n (extension) => `declare module \"*.${extension}\" {\n const image: import(\"@farm.js/core/image\").StaticImageData;\n export const src: string;\n export const width: number;\n export const height: number;\n export const blurDataURL: string | undefined;\n export default image;\n}`,\n );\n\n return `// Generated by Farm.js. Do not edit.\n${modules.join(\"\\n\\n\")}\n\ndeclare module \"*?url\" {\n const src: string;\n export default src;\n}\n`;\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport interface CreateContentTypeDeclarationsOptions {\n root: string;\n configPath?: string;\n /** Lower-priority layer config files, ordered before the project config. */\n layerConfigPaths?: readonly string[];\n}\n\nconst CONFIG_FILENAMES = [\n \"farm.config.ts\",\n \"farm.config.tsx\",\n \"farm.config.mts\",\n \"farm.config.cts\",\n \"farm.config.js\",\n \"farm.config.jsx\",\n \"farm.config.mjs\",\n \"farm.config.cjs\",\n \"config.ts\",\n \"config.tsx\",\n \"config.mts\",\n \"config.cts\",\n \"config.js\",\n \"config.jsx\",\n \"config.mjs\",\n \"config.cjs\",\n];\n\n/** Infer content collection names and entry data from content() in Farm config. */\nexport function createContentTypeDeclarations(\n options: CreateContentTypeDeclarationsOptions,\n outPath: string,\n): string {\n const root = path.resolve(options.root);\n const projectConfig = findConfigPath(root, options.configPath);\n const configPaths = [\n ...(options.layerConfigPaths ?? []).filter((value) => fs.existsSync(value)),\n ...(projectConfig ? [projectConfig] : []),\n ];\n\n if (configPaths.length === 0) return createEmptyContentTypes();\n\n const imports = configPaths\n .map(\n (configPath, index) =>\n `import type FarmContentConfig${index} from ${JSON.stringify(toTypeImportPath(outPath, configPath))};`,\n )\n .join(\"\\n\");\n const registries = configPaths\n .map(\n (_configPath, index) =>\n `type FarmContentRegistry${index} = ContentRegistryFromConfig<typeof FarmContentConfig${index}>;`,\n )\n .join(\"\\n\");\n const registryUnion = configPaths\n .map((_configPath, index) => `FarmContentRegistry${index}`)\n .join(\" | \");\n\n return `/**\n * Auto-generated content collection types from Farm layers and farm.config.\n * Regenerated on dev start, build, and farm generate.\n */\n${imports}\n\ntype FarmContentPluginFromConfig<TConfig> = TConfig extends {\n plugins?: readonly (infer TPlugin)[];\n}\n ? Extract<TPlugin, { readonly __farmContentRegistry: Record<string, unknown> }>\n : never;\ntype ContentRegistryFromConfig<TConfig> =\n FarmContentPluginFromConfig<TConfig> extends {\n readonly __farmContentRegistry: infer TRegistry;\n }\n ? TRegistry\n : never;\ntype FarmContentUnionToIntersection<TValue> = (\n TValue extends unknown ? (value: TValue) => void : never\n) extends (value: infer TIntersection) => void\n ? TIntersection\n : never;\n${registries}\n\ntype FarmResolvedContentRegistry = [${registryUnion}] extends [never]\n ? {}\n : FarmContentUnionToIntersection<${registryUnion}>;\n\ndeclare global {\n namespace FarmJS {\n interface ContentRegistry {\n collections: FarmResolvedContentRegistry;\n }\n }\n}\n\nexport {};\n`;\n}\n\nfunction createEmptyContentTypes(): string {\n return `/**\n * Auto-generated content collection types from farm.config.\n * Regenerated on dev start, build, and farm generate.\n */\ndeclare global {\n namespace FarmJS {\n interface ContentRegistry {\n collections: {};\n }\n }\n}\n\nexport {};\n`;\n}\n\nfunction findConfigPath(root: string, configPath?: string): string | null {\n if (configPath) {\n const resolvedPath = path.isAbsolute(configPath) ? configPath : path.join(root, configPath);\n return fs.existsSync(resolvedPath) ? resolvedPath : null;\n }\n for (const filename of CONFIG_FILENAMES) {\n const resolvedPath = path.join(root, filename);\n if (fs.existsSync(resolvedPath)) return resolvedPath;\n }\n return null;\n}\n\nfunction toTypeImportPath(outPath: string, targetPath: string): string {\n const relativePath = path\n .relative(path.dirname(outPath), targetPath)\n .replace(/\\\\/g, \"/\")\n .replace(/\\.(tsx?|jsx?|mjs|cjs|mts|cts)$/, \"\");\n return relativePath.startsWith(\".\") ? relativePath : `./${relativePath}`;\n}\n","import { mkdirSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n readFarmI18nCatalogs,\n type FarmI18nArgumentKind,\n type FarmI18nMessageSignature,\n} from \"./catalog\";\nimport type { ResolvedFarmI18nConfig } from \"./types\";\nimport { writeFileIfChanged } from \"../write-file-if-changed\";\n\nexport interface GenerateFarmI18nTypesOptions {\n root: string;\n srcDir?: string;\n config: ResolvedFarmI18nConfig;\n outFile?: string;\n}\n\nexport async function generateFarmI18nTypes(\n options: GenerateFarmI18nTypesOptions,\n): Promise<string | undefined> {\n if (!options.config.enabled) return undefined;\n\n const { signatures } = await readFarmI18nCatalogs(options.config);\n const outFile = options.outFile\n ? resolve(options.root, options.outFile)\n : join(resolve(options.root), options.srcDir || \"src\", \"farm-i18n.d.ts\");\n const content = renderFarmI18nTypes(options.config.locales, signatures);\n\n mkdirSync(dirname(outFile), { recursive: true });\n writeFileIfChanged(outFile, content);\n return outFile;\n}\n\nexport function renderFarmI18nTypes(\n locales: readonly string[],\n signatures: Record<string, FarmI18nMessageSignature>,\n): string {\n const localeEntries = locales.map((locale) => ` ${JSON.stringify(locale)}: true;`);\n const messageEntries = Object.entries(signatures)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, signature]) => ` ${JSON.stringify(key)}: ${renderSignature(signature)};`);\n\n return `// Generated by Farm.js. Do not edit.\nimport \"@farm.js/core/i18n\";\n\ndeclare module \"@farm.js/core/i18n\" {\n interface FarmI18nLocaleRegistry {\n${localeEntries.join(\"\\n\")}\n }\n\n interface FarmI18nMessageRegistry {\n${messageEntries.join(\"\\n\")}\n }\n}\n\nexport {};\n`;\n}\n\nfunction renderSignature(signature: FarmI18nMessageSignature): string {\n const entries = Object.entries(signature).sort(([a], [b]) => a.localeCompare(b));\n if (entries.length === 0) return \"Record<never, never>\";\n return `{ ${entries\n .map(([name, kind]) => `${JSON.stringify(name)}: ${argumentType(kind)}`)\n .join(\"; \")} }`;\n}\n\nfunction argumentType(kind: FarmI18nArgumentKind): string {\n switch (kind) {\n case \"number\":\n return \"number\";\n case \"date\":\n return \"Date | number\";\n case \"rich\":\n return \"(chunks: unknown[]) => unknown\";\n case \"select\":\n case \"string\":\n return \"string\";\n }\n}\n","import type { ConfigEnv, Plugin, UserConfig, ViteDevServer, HmrContext, Connect } from \"vite\";\nimport type { FarmConfig, FarmRequest } from \"./types\";\nimport { FarmApp } from \"./app\";\nimport { logger, toPosixPath, toViteModuleId } from \"./utils\";\nimport { defaultGlobalCSS } from \"./default-styles\";\nimport {\n FARM_NODE_RESPONSE_END_PENDING,\n type FarmPlugin,\n type FarmPluginRuntimeSession,\n type PluginManager,\n} from \"./plugin\";\nimport { generateFarmClientPluginEntryCode } from \"./client-plugin-build\";\nimport {\n generateClientCachePersistenceCode,\n resolveFarmClientCacheAdapterEntry,\n type ClientCachePersistenceEntryCode,\n} from \"./client-cache-persistence-build\";\n\nexport {\n generateClientCachePersistenceCode,\n resolveFarmClientCacheAdapterEntry,\n} from \"./client-cache-persistence-build\";\nexport type { ClientCachePersistenceEntryCode } from \"./client-cache-persistence-build\";\nimport { APIRouteManager } from \"./api/route-manager\";\nimport { DEFAULT_FARM_API_BASE_PATH } from \"./api/config\";\nimport { resolveFarmAPIServerBasePath } from \"./api/server-path\";\nimport { isFarmAPIPathname } from \"./api/runtime\";\nimport type { OpenAPIManager } from \"./openapi/manager\";\nimport { MiddlewareManager } from \"./middleware/manager\";\nimport { generateFarmTypeArtifacts, type GenerateFarmTypeArtifactsOptions } from \"./type-artifacts\";\nimport {\n isProgrammaticRoutesFileName,\n parseProgrammaticRouteModuleId,\n scanProgrammaticPagePaths,\n} from \"./routes-shared\";\nimport type { FarmDocsAPIHandler } from \"./docs\";\nimport { createMarkdownMirrorResponse, resolveMarkdownMirrorTarget } from \"./markdown\";\nimport { createFarmMarkdownSourceResponse, isFarmMarkdownPageFile } from \"./app-markdown\";\nimport { applyWebResponseHeaders, sendWebResponse } from \"./server/response\";\nimport {\n getClientModuleMetadata,\n getIslandStrategyExport,\n hasUseClientDirective,\n isIsolatableClientBoundarySource,\n resolveFarmIsolatedClientHydrationMode,\n stripUseClientDirective,\n} from \"./utils/client-component\";\nimport {\n dispatchIntegrationRequest,\n getFarmIntegrationPluginOwner,\n getIntegrationDocumentNavigationMatchers,\n getIntegrationProviders,\n matchIntegrationRoute,\n} from \"./integrations\";\nimport type { FarmDiscoveredWorkflow } from \"./workflows\";\nimport { resolveFarmRouteContext, withFarmRouteContext } from \"./route-context\";\nimport {\n FARM_DEVTOOLS_LAUNCH_PARAM,\n FARM_DEVTOOLS_PATH,\n resolveFarmDevtoolsConfig,\n} from \"./devtools-config\";\nimport { generateFarmDevIndicatorsClientRuntime } from \"./dev-indicators\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { FarmUserConfig } from \"./config\";\nimport { getFarmAppDirectories, getFarmLayerAliases, getFarmSourceRoots } from \"./layers\";\nimport { farmEnvironmentFunctionsPlugin } from \"./environment-vite\";\nimport { FARM_VERSION } from \"./version\";\nimport { createDeferredDataResponse } from \"./deferred\";\nimport { _withAfterNodeMiddleware } from \"./after\";\nimport { _runWithAPIRequestRuntime } from \"./api/server-context\";\nimport type { APIRequestRuntime } from \"./api/server-client-bridge\";\nimport { shouldBypassFarmRouterForDottedPath } from \"./dev-static\";\nimport { findClientServerFnViolation, formatServerFnBoundaryError } from \"./server-query-boundary\";\nimport {\n createFarmDeploymentMismatchResponse,\n FARM_DEPLOYMENT_ID_HEADER,\n getFarmDeploymentMismatch,\n} from \"./deployment\";\nimport { getPublicFarmImageConfig, resolveFarmImageConfig } from \"./image-config\";\nimport { farmImageImportsPlugin } from \"./image-vite\";\nimport { farmFontImportsPlugin } from \"./font-vite\";\nimport { resolveFarmLayoutFonts } from \"./font\";\nimport { createFarmImageHandler, type FarmImageHandler } from \"./image-server\";\nimport { getFarmI18nClientSnapshot } from \"./i18n/server\";\nimport { localizeFarmPathname } from \"./i18n/routing\";\nimport type { FarmI18nClientSnapshot } from \"./i18n/types\";\nimport {\n createFarmClientOptimizeDepsConfig,\n createFarmClientOptimizeDepsEntries,\n createFarmSourceAlias,\n} from \"./server/vite-config\";\nimport { resolveFarmDocsFontAssets, toFarmDocsPublicFontAssets } from \"./docs/fonts\";\nimport {\n createFarmNodeRequestAbortSignal,\n createFarmRequestBodyErrorResponse,\n readNodeRequestBody,\n resolveFarmServerConfig,\n} from \"./server-http\";\nimport { createCliColors } from \"./cli-colors\";\nimport { createFarmThemeCssPlugin } from \"./theme/vite\";\nimport { searchParamsToObject } from \"./search-params\";\nimport { emitFarmEvent, runWithFarmRequestSpan } from \"./observability\";\nimport {\n isReactRenderer,\n loadFarmRendererVitePlugins,\n REACT_RENDERER,\n resolveFarmRenderer,\n} from \"./renderer\";\nimport type { FarmRenderer } from \"./renderer\";\nimport { generateFarmIntegrationProviderClientCode } from \"./integration-provider-build\";\nimport type { FarmIslandStrategy } from \"./island\";\nimport { resolveRouteRenderingConfig } from \"./ssg\";\nimport {\n createFarmRouteRenderPlan,\n getSharedLayoutPrefixLength,\n getFarmFragmentCacheControl,\n parseFarmLayoutChainHeader,\n} from \"./navigation/render-plan\";\nimport { resolveFarmPageDataFailure } from \"./navigation/page-data-error\";\nimport { FARM_CONFIG_REWRITES_PLUGIN_NAME } from \"./plugins/rewrites\";\nimport { resolveFarmRequestURL } from \"./server/request\";\nimport { reportOpenAPIDevGenerationResult } from \"./openapi/dev-status\";\n\ninterface FarmVitePluginOptions extends FarmConfig {\n openapi?: FarmUserConfig[\"openapi\"];\n images?: FarmUserConfig[\"images\"];\n publicDir?: FarmUserConfig[\"publicDir\"];\n /** @internal Modules selected by the compiled isolated-hydration ownership plan. */\n isolatedClientBoundaryModules?: ReadonlySet<string>;\n}\n\ntype TypeArtifactSelection = Pick<\n GenerateFarmTypeArtifactsOptions,\n \"routes\" | \"api\" | \"env\" | \"images\" | \"i18n\"\n>;\n\nconst ALL_TYPE_ARTIFACTS: TypeArtifactSelection = {\n routes: true,\n api: true,\n env: true,\n images: false,\n i18n: true,\n};\n\nconst createEmptyTypeArtifactSelection = (): TypeArtifactSelection => ({\n routes: false,\n api: false,\n env: false,\n images: false,\n i18n: false,\n});\n\nconst FARM_I18N_CLIENT_BRIDGE_ID = \"\\0farm-i18n-client-bridge\";\n\n// The @farm.js/devtools plugin serves this path itself; reaching the built-in\n// dashboard render means the app is still on the deprecated core UI.\nlet warnedDeprecatedDevtoolsDashboard = false;\nconst EMPTY_FARM_DOCS_SEARCH_CLIENT_RUNTIME = `\nfunction isFarmDocsSearchPage() {\n return false;\n}\n\nasync function mountFarmDocsSearch() {\n return false;\n}\n`;\n\nfunction loadFarmDocsDevRuntime() {\n return import(\"./docs\");\n}\n\nfunction loadFarmDocsSearchDevRuntime() {\n return import(\"./docs/search-client\");\n}\n\nfunction loadFarmOpenAPIDevRuntime() {\n return import(\"./openapi/manager\");\n}\n\nfunction loadFarmWorkflowsDevRuntime() {\n return import(\"./workflows\");\n}\n\nfunction loadFarmDevtoolsSnapshotRuntime() {\n return import(\"./devtools\");\n}\n\nfunction loadFarmDevtoolsUIRuntime() {\n return import(\"./devtools-ui\");\n}\n\nfunction loadFarmDevtoolsClientRuntime() {\n return import(\"./devtools-client\");\n}\n\nexport function farmI18nClientBridgePlugin(): Plugin {\n return {\n name: \"farm:i18n-client-bridge\",\n enforce: \"pre\",\n resolveId(id, _importer, options) {\n if (id === \"@farm.js/core/i18n/server\" && !options?.ssr) {\n return FARM_I18N_CLIENT_BRIDGE_ID;\n }\n return null;\n },\n load(id) {\n if (id !== FARM_I18N_CLIENT_BRIDGE_ID) return null;\n return 'export { createTranslator, format, getLocale, getLocaleSource, t } from \"@farm.js/core/i18n/client\";';\n },\n };\n}\n\nconst FARM_CONFIG_FILENAMES = new Set([\n \"farm.config.ts\",\n \"farm.config.tsx\",\n \"farm.config.mts\",\n \"farm.config.cts\",\n \"farm.config.js\",\n \"farm.config.jsx\",\n \"farm.config.mjs\",\n \"farm.config.cjs\",\n \"config.ts\",\n \"config.tsx\",\n \"config.mts\",\n \"config.cts\",\n \"config.js\",\n \"config.jsx\",\n \"config.mjs\",\n \"config.cjs\",\n]);\n\nfunction serializeFarmInlineValue(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, \"\\\\u003c\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n\nfunction escapeFarmHtmlAttribute(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\");\n}\n\nfunction renderFarmI18nStaticHead(\n requestPath: string,\n snapshot: FarmI18nClientSnapshot | undefined,\n): string {\n if (!snapshot) return \"\";\n const runtime = `<script>window.__FARM_I18N__ = ${serializeFarmInlineValue(snapshot)};</script>`;\n if (snapshot.routing === \"none\") return runtime;\n\n const links = snapshot.locales.map(\n (locale) =>\n `<link rel=\"alternate\" hreflang=\"${escapeFarmHtmlAttribute(locale)}\" href=\"${escapeFarmHtmlAttribute(\n localizeFarmPathname(requestPath, locale, snapshot),\n )}\">`,\n );\n links.push(\n `<link rel=\"alternate\" hreflang=\"x-default\" href=\"${escapeFarmHtmlAttribute(\n localizeFarmPathname(requestPath, snapshot.defaultLocale, snapshot),\n )}\">`,\n );\n return `${links.join(\"\")}${runtime}`;\n}\n\nfunction getPublicEnvDefine(config: FarmVitePluginOptions): Record<string, unknown> {\n const publicEnv = (config as any).env?.public;\n if (!isResolvedEnvScope(publicEnv)) {\n return {};\n }\n\n return publicEnv;\n}\n\nfunction createRequestFromNodeRequest(\n req: {\n method?: string;\n headers: Record<string, string | string[] | undefined>;\n },\n url: URL,\n signal?: AbortSignal,\n): Request {\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (Array.isArray(value)) {\n for (const item of value) headers.append(key, item);\n } else if (value !== undefined) {\n headers.set(key, value);\n }\n }\n\n return new Request(url.toString(), {\n method: req.method || \"GET\",\n headers,\n signal,\n });\n}\n\nexport { createFarmNodeRequestAbortSignal } from \"./server-http\";\n\n/** Exported for tests: the request boundary all Farm dev middlewares share. */\nexport function withFarmRequestTracing(\n handler: Parameters<typeof _withAfterNodeMiddleware>[0],\n apiRuntime?: APIRequestRuntime,\n): Connect.NextHandleFunction {\n const middleware = _withAfterNodeMiddleware(handler);\n return (req, res, next) => {\n const traceUrl = new URL(`http://${req.headers.host || \"localhost:3000\"}${req.url || \"/\"}`);\n const traceRequest = createRequestFromNodeRequest(req, traceUrl);\n const run = () =>\n runWithFarmRequestSpan(traceRequest, () => middleware(req, res, next), {\n getStatusCode: () => res.statusCode || 200,\n });\n const result = apiRuntime ? _runWithAPIRequestRuntime(apiRuntime, run) : run();\n // connect ignores returned promises, so a rejection from the handler\n // becomes an unhandled rejection and kills the dev server process. A\n // throw from one request must cost that request a 500, not an outage.\n return Promise.resolve(result).catch((error) => {\n console.error(\n `[FARM] Unhandled error while handling ${req.method || \"GET\"} ${req.url || \"/\"}:`,\n error,\n );\n if (res.writableEnded) {\n return;\n }\n if (res.headersSent) {\n res.destroy?.(error instanceof Error ? error : new Error(String(error)));\n return;\n }\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Internal server error\" }));\n });\n };\n}\n\nfunction toRequestBody(body: Buffer | undefined): ArrayBuffer | undefined {\n if (!body) return undefined;\n const copy = new Uint8Array(body.byteLength);\n copy.set(body);\n return copy.buffer;\n}\n\nfunction applyWebRequestToNodeRequest(\n request: Request,\n req: {\n method?: string;\n url?: string;\n headers: Record<string, string | string[] | undefined>;\n },\n): void {\n const url = new URL(request.url);\n req.method = request.method;\n req.url = `${url.pathname}${url.search}`;\n\n for (const key of Object.keys(req.headers)) {\n delete req.headers[key];\n }\n request.headers.forEach((value, key) => {\n req.headers[key] = value;\n });\n}\n\nfunction createHeadersFromNodeResponse(res: {\n getHeaders(): Record<string, string | number | string[] | undefined>;\n}): Headers {\n const headers = new Headers();\n for (const [key, value] of Object.entries(res.getHeaders())) {\n if (Array.isArray(value)) {\n for (const item of value) headers.append(key, item);\n } else if (value !== undefined) {\n headers.set(key, String(value));\n }\n }\n return headers;\n}\n\nfunction applyWebResponseToNodeResponse(\n response: Response,\n res: {\n statusCode: number;\n headersSent: boolean;\n getHeaderNames(): string[];\n removeHeader(name: string): void;\n setHeader(name: string, value: string): void;\n },\n): void {\n if (res.headersSent) return;\n\n res.statusCode = response.status;\n for (const name of res.getHeaderNames()) {\n res.removeHeader(name);\n }\n applyWebResponseHeaders(res as any, response.headers);\n}\n\nfunction toNodeResponseBuffer(chunk: unknown, encoding?: unknown): Buffer | undefined {\n if (chunk === undefined || chunk === null || typeof chunk === \"function\") return undefined;\n if (Buffer.isBuffer(chunk)) return chunk;\n if (chunk instanceof Uint8Array) return Buffer.from(chunk);\n return Buffer.from(\n String(chunk),\n typeof encoding === \"string\" ? (encoding as BufferEncoding) : \"utf8\",\n );\n}\n\nfunction applyNodeWriteHeadHeaders(res: any, headers: unknown): void {\n if (Array.isArray(headers)) {\n const grouped = new Map<string, { name: string; values: Array<string | number> }>();\n for (let index = 0; index + 1 < headers.length; index += 2) {\n const name = String(headers[index]);\n const key = name.toLowerCase();\n const entry = grouped.get(key) ?? { name, values: [] };\n const value = headers[index + 1];\n entry.values.push(...(Array.isArray(value) ? value : [value]).map(String));\n grouped.set(key, entry);\n }\n for (const { name, values } of grouped.values()) {\n res.setHeader(name, values.length === 1 ? values[0] : values);\n }\n return;\n }\n\n if (!headers || typeof headers !== \"object\") return;\n for (const [name, value] of Object.entries(headers)) {\n if (value !== undefined) res.setHeader(name, value);\n }\n}\n\nfunction interceptFarmDevPageResponse(options: {\n req: any;\n res: any;\n pm: PluginManager;\n runtimeSession?: FarmPluginRuntimeSession;\n hasRuntimeAfterHook: boolean;\n hasAfterResponseHook: boolean;\n hasHTMLTransformHook: boolean;\n renderPayload: Record<string, unknown>;\n method: string;\n urlPath: string;\n pathname: string;\n startTime: number;\n logResponse(method: string, path: string, status: number, durationMs: number, type: \"PAGE\"): void;\n emitError(error: unknown): Promise<void>;\n}): { isEnded(): boolean } {\n const {\n req,\n res,\n pm,\n runtimeSession,\n hasRuntimeAfterHook,\n hasAfterResponseHook,\n hasHTMLTransformHook,\n renderPayload,\n method,\n urlPath,\n startTime,\n } = options;\n const originalWrite = res.write.bind(res);\n const originalEnd = res.end.bind(res);\n const originalWriteHead = res.writeHead.bind(res);\n const originalFlushHeaders = res.flushHeaders?.bind(res);\n let afterResponseCalled = false;\n let interceptedEnd = false;\n const htmlChunks: Buffer[] = [];\n const responseChunks: Buffer[] = [];\n let didStreamHtml = false;\n const bufferPluginResponse = Boolean(\n hasHTMLTransformHook || (runtimeSession && hasRuntimeAfterHook),\n );\n const shouldBufferCurrentResponse = () => {\n const contentTypeHeader = res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n const contentType = typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n return contentType.includes(\"text/html\")\n ? bufferPluginResponse\n : Boolean(runtimeSession && hasRuntimeAfterHook);\n };\n\n res.writeHead = ((statusCode: number, ...args: unknown[]) => {\n const statusMessage = typeof args[0] === \"string\" ? args[0] : undefined;\n const headers = statusMessage === undefined ? args[0] : args[1];\n res.statusCode = statusCode;\n if (statusMessage !== undefined) res.statusMessage = statusMessage;\n applyNodeWriteHeadHeaders(res, headers);\n\n if (shouldBufferCurrentResponse()) return res;\n return statusMessage === undefined\n ? originalWriteHead(statusCode)\n : originalWriteHead(statusCode, statusMessage);\n }) as any;\n\n if (originalFlushHeaders) {\n res.flushHeaders = (() =>\n shouldBufferCurrentResponse() ? undefined : originalFlushHeaders()) as any;\n }\n\n res.write = ((chunk: unknown, ...args: unknown[]) => {\n const contentTypeHeader = res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n const contentType = typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n const isHtmlResponse = contentType.includes(\"text/html\");\n const bufferChunk = toNodeResponseBuffer(chunk, args[0]);\n\n if (isHtmlResponse && bufferChunk) {\n htmlChunks.push(bufferChunk);\n didStreamHtml = true;\n } else if (runtimeSession && hasRuntimeAfterHook && bufferChunk) {\n responseChunks.push(bufferChunk);\n }\n\n const shouldBufferResponse = isHtmlResponse\n ? bufferPluginResponse\n : Boolean(runtimeSession && hasRuntimeAfterHook);\n if (shouldBufferResponse) {\n const callback = args.find((arg) => typeof arg === \"function\") as (() => void) | undefined;\n callback?.();\n return true;\n }\n\n const writeResult = originalWrite(chunk, ...args);\n if (isHtmlResponse && typeof res.flush === \"function\") res.flush();\n return writeResult;\n }) as any;\n\n res.end = ((...args: unknown[]) => {\n interceptedEnd = true;\n res[FARM_NODE_RESPONSE_END_PENDING] = true;\n if (afterResponseCalled) return res;\n\n afterResponseCalled = true;\n options.logResponse(method, urlPath, res.statusCode || 200, Date.now() - startTime, \"PAGE\");\n const originalEndArgs = [...args];\n const callback =\n typeof originalEndArgs[originalEndArgs.length - 1] === \"function\"\n ? (originalEndArgs[originalEndArgs.length - 1] as () => void)\n : undefined;\n const contentTypeHeader = res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n const contentType = typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n const isHtmlResponse = contentType.includes(\"text/html\");\n const finalChunk = toNodeResponseBuffer(args[0], args[1]);\n if (finalChunk) {\n if (isHtmlResponse) htmlChunks.push(finalChunk);\n else if (runtimeSession && hasRuntimeAfterHook) responseChunks.push(finalChunk);\n }\n\n Promise.resolve()\n .then(async () => {\n if (isHtmlResponse) {\n const fullHtml = Buffer.concat(htmlChunks).toString(\"utf8\");\n if (!didStreamHtml || bufferPluginResponse) {\n let html = await pm.runHookSerial(\"transformHTML\", fullHtml);\n html = await pm.runHookSerial(\"afterRender\", html, renderPayload);\n originalEndArgs.length = 0;\n originalEndArgs.push(html);\n if (callback) originalEndArgs.push(callback);\n } else {\n await pm.runHookSerial(\"transformHTML\", fullHtml);\n await pm.runHookSerial(\"afterRender\", fullHtml, renderPayload);\n }\n }\n\n if (runtimeSession) {\n pm.copyRequestContext(req, runtimeSession.request);\n const status = res.statusCode || 200;\n const canHaveBody =\n method !== \"HEAD\" && status !== 204 && status !== 205 && status !== 304;\n const firstArg = originalEndArgs[0];\n const responseBody = canHaveBody\n ? isHtmlResponse\n ? didStreamHtml && !bufferPluginResponse\n ? Buffer.concat(htmlChunks)\n : toNodeResponseBuffer(firstArg, originalEndArgs[1])\n : hasRuntimeAfterHook\n ? Buffer.concat(responseChunks)\n : toNodeResponseBuffer(firstArg, originalEndArgs[1])\n : null;\n const runtimeResponse = await pm.endRuntimeRequest(\n runtimeSession,\n new Response(responseBody ? toRequestBody(responseBody) : responseBody, {\n status,\n headers: createHeadersFromNodeResponse(res),\n }),\n );\n applyWebResponseToNodeResponse(runtimeResponse, res);\n\n const canReplaceOutput = isHtmlResponse\n ? !didStreamHtml || bufferPluginResponse\n : hasRuntimeAfterHook;\n if (canReplaceOutput) {\n const body = runtimeResponse.body\n ? Buffer.from(await runtimeResponse.arrayBuffer())\n : undefined;\n originalEndArgs.length = 0;\n if (body) originalEndArgs.push(body);\n if (callback) originalEndArgs.push(callback);\n }\n }\n })\n .then(() =>\n hasAfterResponseHook ? pm.runHookParallel(\"afterResponse\", req, res) : undefined,\n )\n .then(() => {\n res.write = originalWrite;\n res.end = originalEnd;\n res.writeHead = originalWriteHead;\n if (originalFlushHeaders) res.flushHeaders = originalFlushHeaders;\n delete res[FARM_NODE_RESPONSE_END_PENDING];\n originalEnd(...originalEndArgs);\n })\n .catch((error) => {\n void options.emitError(error);\n console.error(\"Error in afterResponse hook:\", error);\n const shouldBufferResponse = isHtmlResponse\n ? bufferPluginResponse\n : Boolean(runtimeSession && hasRuntimeAfterHook);\n if (shouldBufferResponse) {\n const body = Buffer.concat(isHtmlResponse ? htmlChunks : responseChunks);\n res.write = originalWrite;\n res.end = originalEnd;\n res.writeHead = originalWriteHead;\n if (originalFlushHeaders) res.flushHeaders = originalFlushHeaders;\n delete res[FARM_NODE_RESPONSE_END_PENDING];\n originalEnd(body, callback);\n } else {\n res.write = originalWrite;\n res.end = originalEnd;\n res.writeHead = originalWriteHead;\n if (originalFlushHeaders) res.flushHeaders = originalFlushHeaders;\n delete res[FARM_NODE_RESPONSE_END_PENDING];\n originalEnd(...originalEndArgs);\n }\n });\n\n return res;\n }) as any;\n\n return {\n isEnded: () => interceptedEnd || res.writableEnded,\n };\n}\n\nfunction getFullEnvDefine(config: FarmVitePluginOptions): {\n server: Record<string, unknown>;\n public: Record<string, unknown>;\n} {\n const env = (config as any).env;\n if (!env || typeof env !== \"object\") {\n return { server: {}, public: {} };\n }\n\n return {\n server: isResolvedEnvScope(env.server) ? env.server : {},\n public: isResolvedEnvScope(env.public) ? env.public : {},\n };\n}\n\nfunction getEnvDefines(\n config: FarmVitePluginOptions,\n configEnv?: ConfigEnv,\n): Record<string, string> {\n const defines: Record<string, string> = {\n __FARM_API_BASE_URL__: JSON.stringify(getFarmAPIBaseURLDefine(config)),\n __FARM_PUBLIC_ENV__: JSON.stringify(getPublicEnvDefine(config)),\n __FARM_IMAGE_CONFIG__: JSON.stringify(\n getPublicFarmImageConfig(resolveFarmImageConfig(config.images)),\n ),\n };\n\n if (configEnv?.isSsrBuild) {\n defines.__FARM_ENV__ = JSON.stringify(getFullEnvDefine(config));\n }\n\n return defines;\n}\n\nfunction getFarmAPIBaseURLDefine(config: FarmVitePluginOptions): string {\n const baseURL = config.api?.baseURL;\n return typeof baseURL === \"string\" && baseURL ? baseURL : DEFAULT_FARM_API_BASE_PATH;\n}\n\nfunction isResolvedEnvScope(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n\n return !Object.values(value).some(\n (entry) =>\n typeof entry === \"function\" ||\n (!!entry && typeof entry === \"object\" && typeof (entry as any).parse === \"function\"),\n );\n}\n\nfunction isPotentialProgrammaticRouteSourceFile(\n normalizedFile: string,\n srcDirSlug: string,\n): boolean {\n return (\n normalizedFile.startsWith(`${srcDirSlug}/`) &&\n /\\.(ts|tsx|js|jsx)$/.test(normalizedFile) &&\n !normalizedFile.endsWith(\".d.ts\") &&\n !normalizedFile.endsWith(\"/farm-routes.d.ts\") &&\n !normalizedFile.endsWith(\"/farm-env.d.ts\") &&\n !normalizedFile.endsWith(\"/lib/api.generated.ts\")\n );\n}\n\nfunction fileContainsProgrammaticPageRoute(file: string): boolean {\n if (!fs.existsSync(file)) {\n return false;\n }\n\n try {\n return scanProgrammaticPagePaths(fs.readFileSync(file, \"utf8\")).length > 0;\n } catch {\n return false;\n }\n}\n\ninterface FarmModuleAstNode {\n type: string;\n start: number;\n end: number;\n [key: string]: unknown;\n}\n\nexport function rewriteEarlySsrRelativeImports(options: {\n code: string;\n id: string;\n root: string;\n parse: (code: string) => FarmModuleAstNode;\n}): string | null {\n const cleanId = options.id.split(\"?\", 1)[0];\n if (!path.isAbsolute(cleanId) || cleanId.replace(/\\\\/g, \"/\").includes(\"/node_modules/\")) {\n return null;\n }\n\n const replacements: Array<{ start: number; end: number; code: string }> = [];\n let ast: FarmModuleAstNode;\n try {\n ast = options.parse(options.code);\n } catch {\n return null;\n }\n\n walkModuleAst(ast, (node) => {\n if (\n node.type !== \"ImportDeclaration\" &&\n node.type !== \"ExportNamedDeclaration\" &&\n node.type !== \"ExportAllDeclaration\" &&\n node.type !== \"ImportExpression\"\n ) {\n return;\n }\n\n const source = node.source;\n if (!isFarmModuleAstNode(source) || typeof source.value !== \"string\") return;\n if (!source.value.startsWith(\".\")) return;\n\n const suffixIndex = source.value.search(/[?#]/);\n const sourcePath = suffixIndex === -1 ? source.value : source.value.slice(0, suffixIndex);\n const suffix = suffixIndex === -1 ? \"\" : source.value.slice(suffixIndex);\n const resolvedPath = path.resolve(path.dirname(cleanId), sourcePath);\n\n replacements.push({\n start: source.start,\n end: source.end,\n code: JSON.stringify(`${toViteModuleId(resolvedPath, options.root)}${suffix}`),\n });\n });\n\n if (replacements.length === 0) return null;\n\n let output = options.code;\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n }\n return output;\n}\n\nexport function transformIsolatedClientBoundaryModule(options: {\n code: string;\n moduleReference: string;\n islandStrategy: FarmIslandStrategy;\n parse: (code: string) => FarmModuleAstNode;\n}): string | null {\n let ast: FarmModuleAstNode;\n try {\n ast = options.parse(options.code);\n } catch {\n return null;\n }\n\n const body = Array.isArray((ast as any).body) ? ((ast as any).body as any[]) : [];\n const replacements: Array<{ start: number; end: number; code: string }> = [];\n const wrapperStatements: string[] = [];\n const originalEntries: string[] = [];\n let transformedExports = 0;\n\n const addWrapper = (localName: string, exportName: string, isDefault = false) => {\n const safeName = exportName.replace(/[^A-Za-z0-9_$]/g, \"_\");\n const wrapperName = `__farm_isolated_boundary_${safeName || \"default\"}__`;\n wrapperStatements.push(\n `const ${wrapperName} = __farm_create_isolated_boundary__(__farm_isolated_react__, ${localName}, ${JSON.stringify(options.moduleReference)}, ${JSON.stringify(exportName)}, ${JSON.stringify(options.islandStrategy)});`,\n );\n wrapperStatements.push(\n isDefault ? `export default ${wrapperName};` : `export { ${wrapperName} as ${exportName} };`,\n );\n originalEntries.push(`${JSON.stringify(exportName)}: ${localName}`);\n transformedExports++;\n };\n\n for (const node of body) {\n if (node?.type === \"ExportDefaultDeclaration\" && node.declaration) {\n const declaration = node.declaration;\n if (\n (declaration.type === \"FunctionDeclaration\" || declaration.type === \"ClassDeclaration\") &&\n declaration.id?.name\n ) {\n replacements.push({\n start: node.start,\n end: node.end,\n code: options.code.slice(declaration.start, declaration.end),\n });\n addWrapper(declaration.id.name, \"default\", true);\n } else {\n const originalName = \"__farm_isolated_original_default__\";\n replacements.push({\n start: node.start,\n end: node.end,\n code: `const ${originalName} = (${options.code.slice(declaration.start, declaration.end)});`,\n });\n addWrapper(originalName, \"default\", true);\n }\n continue;\n }\n\n if (node?.type !== \"ExportNamedDeclaration\" || !node.declaration) continue;\n const declaration = node.declaration;\n const declaredNames: string[] = [];\n if (\n (declaration.type === \"FunctionDeclaration\" || declaration.type === \"ClassDeclaration\") &&\n declaration.id?.name\n ) {\n declaredNames.push(declaration.id.name);\n } else if (declaration.type === \"VariableDeclaration\") {\n for (const declarator of declaration.declarations || []) {\n if (declarator.id?.type === \"Identifier\") declaredNames.push(declarator.id.name);\n }\n }\n const componentNames = declaredNames.filter((name) => /^[A-Z]/.test(name));\n if (componentNames.length === 0) continue;\n\n replacements.push({\n start: node.start,\n end: node.end,\n code: options.code.slice(declaration.start, declaration.end),\n });\n for (const name of declaredNames) {\n if (/^[A-Z]/.test(name)) addWrapper(name, name);\n else wrapperStatements.push(`export { ${name} };`);\n }\n }\n\n if (transformedExports === 0) return null;\n let output = options.code;\n for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n }\n\n return `import * as __farm_isolated_react__ from \"react\";\\nimport { createFarmIsolatedClientBoundary as __farm_create_isolated_boundary__ } from \"@farm.js/core/internal/isolated-boundary\";\\n${output}\\n${wrapperStatements.join(\"\\n\")}\\nexport const __farm_client_boundary_originals__ = Object.freeze({ ${originalEntries.join(\", \")} });\\n`;\n}\n\nfunction walkModuleAst(node: FarmModuleAstNode, visit: (node: FarmModuleAstNode) => void): void {\n visit(node);\n\n for (const [key, value] of Object.entries(node)) {\n if (key === \"start\" || key === \"end\" || key === \"loc\" || key === \"range\") continue;\n if (isFarmModuleAstNode(value)) {\n walkModuleAst(value, visit);\n continue;\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n if (isFarmModuleAstNode(item)) walkModuleAst(item, visit);\n }\n }\n }\n}\n\nfunction isFarmModuleAstNode(value: unknown): value is FarmModuleAstNode {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as FarmModuleAstNode).type === \"string\" &&\n typeof (value as FarmModuleAstNode).start === \"number\" &&\n typeof (value as FarmModuleAstNode).end === \"number\"\n );\n}\n\nfunction isFarmConfigFile(file: string, root: string): boolean {\n const normalized = file.replace(/\\\\/g, \"/\");\n const rootSlug = root.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n const relative = normalized.startsWith(`${rootSlug}/`)\n ? normalized.slice(rootSlug.length + 1)\n : normalized;\n\n return FARM_CONFIG_FILENAMES.has(relative);\n}\n\nexport function farmPlugin(\n options: FarmVitePluginOptions = {},\n initialPluginManager?: PluginManager,\n): Plugin {\n const imageImports = farmImageImportsPlugin();\n const fontImports = farmFontImportsPlugin({\n root: options.root,\n basePath: options.basePath,\n publicDir: options.publicDir,\n });\n let farmApp: FarmApp;\n let server: ViteDevServer;\n let apiRouteManager: APIRouteManager;\n let openAPIManager: OpenAPIManager | null = null;\n let middlewareManager: MiddlewareManager;\n let refreshRouteDiscovery: ((reason: string) => Promise<void>) | null = null;\n let workflowHandler: ((request: Request) => Promise<Response | null>) | null = null;\n const logUpdate = (tag: \"PAGE\" | \"API\" | \"MIDDLEWARE\" | \"TYPE\", message: string) => {\n const pc = createCliColors();\n const log = [\n pc.dim(\"[\") + pc.bold(pc.blue(\"FARM\")) + pc.dim(\"]\"),\n pc.dim(\"[\") + pc.bold(pc.cyan(tag)) + pc.dim(\"]\"),\n pc.dim(\"[\") + pc.bold(pc.yellow(\"UPDATE\")) + pc.dim(\"]\"),\n pc.gray(message),\n ].join(\" \");\n console.log(log);\n };\n\n return {\n name: \"farm\",\n\n config(_userConfig, configEnv) {\n const layerAliases = getFarmLayerAliases(options.layers);\n const layerRoots = (options.layers ?? []).map((layer) => layer.root);\n return {\n // Honor Farm's publicDir so the dev server serves the same static\n // directory the production client build emits.\n ...(options.publicDir ? { publicDir: options.publicDir } : {}),\n define: getEnvDefines(options, configEnv),\n resolve: {\n alias: layerAliases,\n },\n ...(layerRoots.length\n ? {\n server: {\n fs: {\n allow: [path.resolve(options.root || process.cwd()), ...layerRoots],\n },\n },\n }\n : {}),\n };\n },\n\n async configResolved(config) {\n if (typeof fontImports.configResolved === \"function\") {\n await fontImports.configResolved.call(this, config);\n }\n // Defer Farm application initialization until Vite server is available.\n },\n\n async configureServer(viteServer) {\n if (typeof fontImports.configureServer === \"function\") {\n await fontImports.configureServer.call(this, viteServer);\n }\n server = viteServer;\n\n // Store the plugin manager passed during creation\n const pm = initialPluginManager;\n const emitPluginError = async (\n phase: string,\n error: unknown,\n meta?: Record<string, unknown>,\n ) => {\n if (!pm) return;\n try {\n await pm.runHookParallel(\"onError\", { phase, error, meta });\n } catch {\n // Ignore plugin error reporter failures\n }\n };\n\n farmApp = new FarmApp(\n {\n root: server.config.root,\n ...options,\n },\n server,\n );\n\n const globalsCSSPath = path.join(server.config.root, \"src/app/globals.css\");\n if (!fs.existsSync(globalsCSSPath)) {\n const appDir = path.join(server.config.root, \"src/app\");\n if (!fs.existsSync(appDir)) {\n fs.mkdirSync(appDir, { recursive: true });\n }\n fs.writeFileSync(globalsCSSPath, defaultGlobalCSS);\n }\n\n await farmApp.initialize();\n\n const farmConfig = farmApp.getConfig();\n const apiServerBasePath = resolveFarmAPIServerBasePath(farmConfig.api);\n const serverConfig = resolveFarmServerConfig(farmConfig.server);\n let imageHandler: FarmImageHandler | null = null;\n if (farmConfig.images.provider !== \"none\") {\n const { createNodeImageFetcher, createNodeImageUrlValidator, createSharpImageTransformer } =\n await import(\"./image-sharp\");\n imageHandler = createFarmImageHandler(farmConfig.images, {\n transform: createSharpImageTransformer(),\n fetchRemote: createNodeImageFetcher(farmConfig.images),\n validateRemoteUrl: createNodeImageUrlValidator(farmConfig.images),\n onError(error) {\n logger.error(\n `Image optimization failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n },\n });\n }\n const sourceRoots = getFarmSourceRoots(farmConfig);\n server.watcher.add(sourceRoots.map((source) => path.join(source.root, source.srcDir)));\n if (farmConfig.i18n.enabled) {\n server.watcher.add(\n farmConfig.i18n.messages.includes(\"{locale}\")\n ? path.dirname(farmConfig.i18n.messages)\n : farmConfig.i18n.messages,\n );\n }\n const workflowConfig = farmConfig.workflows;\n const farmDocsDevRuntime = farmConfig.docs.enabled ? await loadFarmDocsDevRuntime() : null;\n const getExtraRouteTypes = () => [\n ...(options.openapi?.enabled && options.openapi.route ? [options.openapi.route] : []),\n ...(farmDocsDevRuntime?.getFarmDocsRouteTypeEntries(farmConfig.docs) ?? []),\n ];\n const appDirSlugs = sourceRoots.map((source) =>\n path.join(source.root, source.srcDir, \"app\").replace(/\\\\/g, \"/\"),\n );\n const generateTypeArtifacts = async (\n reason: string,\n selection: TypeArtifactSelection = ALL_TYPE_ARTIFACTS,\n log = false,\n ) => {\n try {\n const result = await generateFarmTypeArtifacts({\n root: farmConfig.root,\n srcDir: farmConfig.srcDir,\n layers: farmConfig.layers,\n plugins: farmConfig.plugins,\n extraRoutes: getExtraRouteTypes(),\n suppressLintOnLink: farmConfig.suppressLintOnLink,\n componentExtensions: farmConfig.renderer.componentExtensions,\n i18nConfig: farmConfig.i18n,\n ...selection,\n });\n if (log) {\n const refreshed = [\n selection.routes !== false && \"route\",\n selection.api !== false && \"API\",\n selection.env !== false && \"env\",\n selection.images !== false && \"image\",\n selection.i18n !== false && farmConfig.i18n.enabled && \"i18n\",\n ].filter(Boolean);\n logUpdate(\n \"TYPE\",\n `${reason} - refreshed ${refreshed.join(\", \")} types${\n selection.api !== false\n ? ` (${result.apiRoutes.length} API route${result.apiRoutes.length === 1 ? \"\" : \"s\"})`\n : \"\"\n }`,\n );\n }\n if (openAPIManager) {\n await openAPIManager.invalidateCache();\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n logger.warn(`Route type generation failed (farm.d.ts may be stale): ${message}`);\n if (pm) {\n await emitPluginError(\"type-artifact-generation\", e, { reason });\n }\n }\n };\n await generateTypeArtifacts(\"startup\");\n\n const srcDirSlugs = sourceRoots.map((source) =>\n path.join(source.root, source.srcDir).replace(/\\\\/g, \"/\"),\n );\n const layerConfigFiles = new Set(\n farmConfig.layers\n .map((layer) => layer.configFile?.replace(/\\\\/g, \"/\"))\n .filter((file): file is string => Boolean(file)),\n );\n const isPageFile = (file: string) => {\n const normalized = file.replace(/\\\\/g, \"/\");\n return (\n appDirSlugs.some((appDir) => normalized.startsWith(`${appDir}/`)) &&\n /page\\.(ts|tsx|js|jsx|md|mdx)$/.test(normalized)\n );\n };\n const isApiRouteFile = (file: string) => {\n const normalized = file.replace(/\\\\/g, \"/\");\n return (\n appDirSlugs.some((appDir) => normalized.startsWith(`${appDir}/api/`)) &&\n /route\\.(ts|tsx|js|jsx)$/.test(normalized)\n );\n };\n const isProgrammaticRouteFile = (file: string) => {\n const normalized = file.replace(/\\\\/g, \"/\");\n return (\n srcDirSlugs.some((srcDir) => normalized.startsWith(`${srcDir}/`)) &&\n isProgrammaticRoutesFileName(normalized)\n );\n };\n const isProgrammaticRouteSourceFile = (file: string) => {\n const normalized = file.replace(/\\\\/g, \"/\");\n return srcDirSlugs.some((srcDir) =>\n isPotentialProgrammaticRouteSourceFile(normalized, srcDir),\n );\n };\n const isAppRuntimeFile = (file: string) => {\n const normalized = file.replace(/\\\\/g, \"/\");\n return (\n appDirSlugs.some((appDir) => normalized.startsWith(`${appDir}/`)) &&\n /\\/(?:page|default|layout|loading|error|middleware|route)\\.(?:ts|tsx|js|jsx|md|mdx)$|\\/(?:sitemap|robots|manifest)\\.(?:ts|js)$|\\/(?:opengraph-image|twitter-image)(?:\\.(?:ts|tsx|js|jsx|png|jpg|jpeg|gif|webp)|\\.alt\\.txt)$/.test(\n normalized,\n )\n );\n };\n const isStaticMetadataImageFile = (file: string) =>\n /\\/(?:opengraph-image|twitter-image)(?:\\.(?:png|jpg|jpeg|gif|webp)|\\.alt\\.txt)$/.test(\n file.replace(/\\\\/g, \"/\"),\n );\n const isI18nCatalogFile = (file: string) =>\n farmConfig.i18n.enabled &&\n file\n .replace(/\\\\/g, \"/\")\n .startsWith(farmConfig.i18n.messages.replace(/\\\\/g, \"/\").replace(\"{locale}\", \"\"));\n let typeArtifactGenScheduled: ReturnType<typeof setTimeout> | null = null;\n let pendingTypeArtifacts = createEmptyTypeArtifactSelection();\n let pendingTypeArtifactReason = \"\";\n let routeRefreshScheduled: ReturnType<typeof setTimeout> | null = null;\n const scheduleTypeArtifactGen = (\n file: string,\n event: string,\n selection: TypeArtifactSelection,\n ) => {\n const normalizedFile = toPosixPath(file);\n for (const [artifact, enabled] of Object.entries(selection)) {\n if (enabled) {\n pendingTypeArtifacts[artifact as keyof TypeArtifactSelection] = true;\n }\n }\n pendingTypeArtifactReason ||= `${event} ${normalizedFile.split(\"/app/\")[1] || normalizedFile}`;\n if (typeArtifactGenScheduled) return;\n typeArtifactGenScheduled = setTimeout(() => {\n typeArtifactGenScheduled = null;\n const artifacts = pendingTypeArtifacts;\n const reason = pendingTypeArtifactReason;\n pendingTypeArtifacts = createEmptyTypeArtifactSelection();\n pendingTypeArtifactReason = \"\";\n generateTypeArtifacts(reason, artifacts, true).catch(() => {});\n }, 100);\n };\n [\"add\", \"change\", \"unlink\"].forEach((ev) => {\n server.watcher.on(ev as \"add\", (file: string) => {\n const normalizedFile = file.replace(/\\\\/g, \"/\");\n const configChanged =\n isFarmConfigFile(file, farmConfig.root) || layerConfigFiles.has(normalizedFile);\n const programmaticRouteChanged =\n isProgrammaticRouteFile(file) ||\n (isProgrammaticRouteSourceFile(file) &&\n (ev === \"unlink\" || fileContainsProgrammaticPageRoute(file)));\n const typeArtifacts: TypeArtifactSelection = configChanged\n ? ALL_TYPE_ARTIFACTS\n : {\n routes: (ev !== \"change\" && isPageFile(file)) || programmaticRouteChanged,\n api: isApiRouteFile(file) || programmaticRouteChanged,\n env: false,\n images: false,\n i18n: isI18nCatalogFile(file),\n };\n if (Object.values(typeArtifacts).some(Boolean)) {\n scheduleTypeArtifactGen(file, ev, typeArtifacts);\n }\n if (isI18nCatalogFile(file)) {\n farmApp\n ?.getI18nRuntime()\n .reload()\n .then(() => server.ws.send({ type: \"full-reload\", path: \"*\" }))\n .catch((error) => logger.warn(`i18n catalog reload failed: ${error.message}`));\n }\n if (\n (ev !== \"change\" || isStaticMetadataImageFile(file)) &&\n (isAppRuntimeFile(file) ||\n isProgrammaticRouteFile(file) ||\n (isProgrammaticRouteSourceFile(file) &&\n (ev === \"unlink\" || fileContainsProgrammaticPageRoute(file)))) &&\n !routeRefreshScheduled\n ) {\n routeRefreshScheduled = setTimeout(() => {\n routeRefreshScheduled = null;\n Promise.all([\n refreshRouteDiscovery?.(`${ev} ${file}`),\n file.includes(\"middleware.\") ? middlewareManager?.reload() : undefined,\n ])\n .then(() => server.ws.send({ type: \"full-reload\", path: \"*\" }))\n .catch((error) => logger.warn(`Route refresh failed: ${error.message}`));\n }, 50);\n }\n });\n });\n\n // Initialize API route manager\n const appDirs = getFarmAppDirectories(farmConfig);\n const routeManager = farmApp.getRouteManager();\n const discoveredRoutes: Array<{\n kind: \"page\" | \"layout\";\n pattern: string;\n modulePath: string;\n }> = [];\n for (const [pattern, entry] of routeManager.getRoutes()) {\n discoveredRoutes.push({\n kind: \"page\",\n pattern,\n modulePath: entry.modulePath,\n });\n }\n for (const [pattern, entry] of routeManager.getLayouts()) {\n discoveredRoutes.push({\n kind: \"layout\",\n pattern,\n modulePath: entry.modulePath,\n });\n }\n if (pm) {\n for (const route of discoveredRoutes) {\n await pm.runHookParallel(\"routeDiscovered\", route);\n }\n await pm.runHookParallel(\"routesGenerated\", {\n routes: discoveredRoutes,\n pageCount: discoveredRoutes.filter((r) => r.kind === \"page\").length,\n layoutCount: discoveredRoutes.filter((r) => r.kind === \"layout\").length,\n });\n }\n\n apiRouteManager = new APIRouteManager(appDirs, server, {\n plugins: farmConfig.plugins,\n i18n: farmApp.getI18nRuntime(),\n bodySizeLimit: serverConfig.bodySizeLimit,\n basePath: apiServerBasePath,\n });\n await apiRouteManager.discoverRoutes();\n let discoveredWorkflows: FarmDiscoveredWorkflow[] = [];\n const hasWorkflowDirectory =\n workflowConfig.enabled &&\n workflowConfig.dirs.some((dir) =>\n fs.existsSync(path.isAbsolute(dir) ? dir : path.join(farmConfig.root, dir)),\n );\n if (hasWorkflowDirectory) {\n const { createFarmWorkflowRequestHandler, discoverFarmWorkflows } =\n await loadFarmWorkflowsDevRuntime();\n discoveredWorkflows = await discoverFarmWorkflows(\n { ...farmConfig, workflows: workflowConfig },\n {\n loadModule: async (filePath) =>\n server.ssrLoadModule(filePath) as Promise<Record<string, any>>,\n },\n );\n if (discoveredWorkflows.length > 0) {\n workflowHandler = createFarmWorkflowRequestHandler({\n workflows: discoveredWorkflows,\n config: workflowConfig,\n loadModule: async (workflow: FarmDiscoveredWorkflow) =>\n server.ssrLoadModule(workflow.filePath) as Promise<Record<string, any>>,\n server: farmConfig.server,\n });\n logger.success(`✅ Discovered ${discoveredWorkflows.length} Farm workflow task(s)`);\n }\n }\n if (pm) {\n for (const [, apiRoute] of apiRouteManager.getRoutes()) {\n await pm.runHookParallel(\"apiRouteDiscovered\", {\n path: apiRoute.path,\n filePath: apiRoute.filePath,\n methods: apiRoute.methods,\n });\n }\n }\n\n middlewareManager = new MiddlewareManager(\n appDirs,\n server,\n farmConfig.middleware,\n farmConfig.i18n,\n farmConfig.server,\n );\n await middlewareManager.discover();\n if (pm) {\n for (const middleware of middlewareManager.getMiddlewares()) {\n await pm.runHookParallel(\"middlewareDiscovered\", {\n path: middleware.path,\n filePath: middleware.filePath,\n handlerCount: middleware.handlers.length,\n });\n }\n }\n\n // Initialize OpenAPI manager if enabled\n if (options.openapi?.enabled) {\n const { OpenAPIManager } = await loadFarmOpenAPIDevRuntime();\n openAPIManager = new OpenAPIManager(appDirs, options.openapi);\n const spec = await openAPIManager.generateSpec();\n reportOpenAPIDevGenerationResult(spec);\n }\n\n refreshRouteDiscovery = async (reason: string) => {\n await routeManager.discoverRoutes();\n await apiRouteManager.discoverRoutes();\n const manifestModule = server.moduleGraph.getModuleById(\"/@farm/manifest\");\n if (manifestModule) {\n server.moduleGraph.invalidateModule(manifestModule);\n }\n if (openAPIManager) {\n await openAPIManager.invalidateCache();\n }\n if (process.env.FARM_VERBOSE) {\n logger.info(`Refreshed routes: ${reason}`);\n }\n };\n\n const farmDocsFontAssetList = farmDocsDevRuntime\n ? resolveFarmDocsFontAssets(farmConfig.root)\n : [];\n const resolveDocsLayoutFonts = async (pathname: string) => {\n const layouts = routeManager.matchRoute(pathname).layouts;\n const layoutModules = await Promise.all(\n layouts.map((layout) => routeManager.loadLayoutModule(layout.modulePath)),\n );\n return resolveFarmLayoutFonts(layoutModules);\n };\n const farmDocsHandler = farmDocsDevRuntime\n ? farmDocsDevRuntime.hasFarmDocsRuntimeAdapter(farmConfig.docs)\n ? await farmDocsDevRuntime.createFarmDocsAdapterHandler(farmConfig.docs, {\n root: farmConfig.root,\n srcDir: farmConfig.srcDir,\n clientEntry: \"/@farm/client.js\",\n resolveLayoutFonts: resolveDocsLayoutFonts,\n fontStylesheetHref: \"/@farm/fonts.css\",\n globalStylesheetHref: \"/src/app/globals.css\",\n loadModule: async (specifier) => {\n const resolved = await server.pluginContainer.resolveId(specifier, undefined, {\n ssr: true,\n });\n if (specifier === farmConfig.docs.adapter?.server && resolved?.id) {\n return import(/* @vite-ignore */ pathToFileURL(resolved.id).href);\n }\n return server.ssrLoadModule(resolved?.id ?? specifier);\n },\n })\n : farmDocsDevRuntime.createFarmDocsHandler(farmConfig.docs, {\n root: farmConfig.root,\n srcDir: farmConfig.srcDir,\n clientEntry: \"/@farm/client.js\",\n fontAssets: toFarmDocsPublicFontAssets(farmDocsFontAssetList),\n resolveLayoutFonts: resolveDocsLayoutFonts,\n fontStylesheetHref: \"/@farm/fonts.css\",\n globalStylesheetHref: \"/src/app/globals.css\",\n })\n : null;\n const wrapFarmDocsResponseWithLayouts = async (\n request: Request,\n response: Response,\n ): Promise<Response> => {\n if (\n request.method === \"HEAD\" ||\n response.headers.has(\"x-farm-docs-adapter\") ||\n !response.headers.get(\"content-type\")?.toLowerCase().includes(\"text/html\")\n ) {\n return response;\n }\n\n const pathname = new URL(request.url).pathname;\n const matchedRoute = routeManager.matchRoute(pathname);\n const layoutEntries = matchedRoute.layouts.map((layout) => ({\n ...layout,\n metadata: getClientModuleMetadata(layout.modulePath, farmConfig.root),\n }));\n if (!layoutEntries.some((layout) => layout.metadata.shouldHydrate)) {\n return response;\n }\n\n const source = await response.text();\n const bodyMatch = source.match(/<body([^>]*)>([\\s\\S]*?)<\\/body>/i);\n if (!bodyMatch) {\n return new Response(source, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n const [React, ReactDOMServer, layoutModules] = await Promise.all([\n import(\"react\"),\n import(\"react-dom/server\"),\n Promise.all(\n layoutEntries.map((layout) => routeManager.loadLayoutModule(layout.modulePath)),\n ),\n ]);\n const hydrationStrategies = layoutEntries.flatMap((layout) =>\n layout.metadata.shouldHydrate && layout.metadata.islandStrategy\n ? [layout.metadata.islandStrategy]\n : [],\n );\n const islandStrategy = hydrationStrategies.every(\n (strategy) => strategy === hydrationStrategies[0],\n )\n ? (hydrationStrategies[0] ?? \"load\")\n : \"load\";\n const params = matchedRoute.params || {};\n const toUrlPath = (absolutePath: string) => toViteModuleId(absolutePath, farmConfig.root);\n const clientLayouts = Object.fromEntries(\n layoutEntries.map((layout) => [\n layout.pattern,\n {\n modulePath: toUrlPath(layout.modulePath),\n pattern: layout.pattern,\n shouldHydrate: layout.metadata.shouldHydrate,\n islandStrategy: layout.metadata.islandStrategy,\n preloads: [toUrlPath(layout.modulePath)],\n assets: [],\n },\n ]),\n );\n const inlineValue = (value: unknown) =>\n JSON.stringify(value).replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n const pageModulePath = matchedRoute.route?.modulePath\n ? toUrlPath(matchedRoute.route.modulePath)\n : \"\";\n const bootstrapScript = `<script>\nwindow.__FARM_PROPS__ = ${inlineValue({ params })};\nwindow.__FARM_ROUTE_SLOTS__ = [];\nwindow.__FARM_DEPLOYMENT_ID__ = ${inlineValue(farmConfig.deploymentId)};\nwindow.__FARM_PATH__ = ${inlineValue(pathname)};\nwindow.__FARM_IS_CLIENT__ = false;\nwindow.__FARM_PAGE_SHOULD_HYDRATE__ = false;\nwindow.__FARM_LAYOUT_SHOULD_HYDRATE__ = true;\nwindow.__FARM_SHOULD_HYDRATE__ = true;\nwindow.__FARM_ISLAND_STRATEGY__ = ${inlineValue(islandStrategy)};\nwindow.__FARM_PAGE_MODULE__ = ${inlineValue(pageModulePath)};\nwindow.__FARM_LOADING_MODULE__ = null;\nwindow.__FARM_MANIFEST__ = ${inlineValue({\n routes: {},\n layouts: clientLayouts,\n slots: [],\n clientEntry: \"/@farm/client.js\",\n sharedAssets: [],\n })};\n</script>`;\n\n let wrappedElement: any = 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: bootstrapScript + bodyMatch[2] },\n });\n for (let index = layoutModules.length - 1; index >= 0; index--) {\n const LayoutComponent = layoutModules[index].default;\n if (LayoutComponent) {\n wrappedElement = React.createElement(LayoutComponent, {\n children: wrappedElement,\n params,\n });\n }\n }\n\n const rootMarkup = ReactDOMServer.renderToString(\n React.createElement(\"div\", { id: \"root\" }, wrappedElement),\n );\n const html = source.replace(bodyMatch[0], `<body${bodyMatch[1]}>${rootMarkup}</body>`);\n const headers = new Headers(response.headers);\n headers.delete(\"content-length\");\n headers.delete(\"etag\");\n return new Response(html, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n };\n const farmDocsAPIHandler: FarmDocsAPIHandler | null =\n farmDocsDevRuntime && !farmDocsDevRuntime.hasFarmDocsRuntimeAdapter(farmConfig.docs)\n ? farmDocsDevRuntime.createFarmDocsAPIHandler({\n rootDir: farmConfig.root,\n srcDir: farmConfig.srcDir,\n docs: farmConfig.docs,\n })\n : null;\n const farmDocsFontAssets = new Map(\n farmDocsFontAssetList.map(({ url, sourcePath }) => [url, sourcePath]),\n );\n const logResponse = (\n method: string,\n urlPath: string,\n status: number,\n duration: number,\n tag: \"API\" | \"PAGE\",\n ) => {\n // In dev, browsers can trigger bursts of identical requests (reload/prefetch).\n // Collapse near-identical page logs to keep terminal output readable.\n const now = Date.now();\n const dedupeKey = `${tag}:${method}:${urlPath}:${status}`;\n const dedupeWindowMs = 250;\n const last = (logResponse as any).__last as { key: string; ts: number } | undefined;\n if (tag === \"PAGE\" && last && last.key === dedupeKey && now - last.ts < dedupeWindowMs) {\n return;\n }\n (logResponse as any).__last = { key: dedupeKey, ts: now };\n\n const pc = createCliColors();\n let statusColor = pc.green;\n if (status >= 500) statusColor = pc.red;\n else if (status >= 400) statusColor = pc.yellow;\n else if (status >= 300) statusColor = pc.cyan;\n\n const log = [\n pc.dim(\"[\") + pc.bold(pc.blue(\"FARM\")) + pc.dim(\"]\"),\n pc.dim(\"[\") + pc.bold(pc.cyan(tag)) + pc.dim(\"]\"),\n pc.dim(\"[\") + pc.bold(pc.white(method.padEnd(3))) + pc.dim(\"]\"),\n pc.gray(urlPath),\n pc.dim(\"-\"),\n statusColor(status.toString()),\n pc.dim(`(${duration}ms)`),\n ].join(\" \");\n console.log(log);\n };\n\n // Register middleware directly (not in return function) to ensure it runs early\n const withAPIRequestTracing = (handler: Parameters<typeof withFarmRequestTracing>[0]) =>\n withFarmRequestTracing(handler, {\n basePath: apiServerBasePath,\n dispatch: async (request) => {\n // Resolve at call time so HMR never leaves a captured endpoint map.\n const handler = apiRouteManager.getHandler();\n return handler\n ? handler(request)\n : Response.json({ error: \"Not Found\" }, { status: 404 });\n },\n });\n server.middlewares.use(\n withAPIRequestTracing(async (req, res, next) => {\n const requestUrl = req.url || \"/\";\n const requestMethod = req.method || \"GET\";\n const currentConfig = farmApp?.getConfig() ?? options;\n const currentServerConfig = resolveFarmServerConfig(currentConfig.server);\n const parsedRequestUrl = resolveFarmRequestURL(req as FarmRequest, {\n trustProxy: currentServerConfig.trustProxy,\n });\n const fullUrl = parsedRequestUrl.toString();\n const requestPathname = parsedRequestUrl.pathname;\n\n if (imageHandler && requestPathname === farmConfig.images.path) {\n const imageResponse = await imageHandler(\n createRequestFromNodeRequest(req, new URL(fullUrl)),\n );\n if (imageResponse) {\n await sendWebResponse(res, imageResponse);\n return;\n }\n }\n\n const farmDocsFontPath = farmDocsFontAssets.get(requestPathname);\n if (\n (requestMethod === \"GET\" || requestMethod === \"HEAD\") &&\n farmDocsFontPath &&\n fs.existsSync(farmDocsFontPath)\n ) {\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", \"font/woff2\");\n res.setHeader(\"Cache-Control\", \"public, max-age=31536000, immutable\");\n if (requestMethod === \"HEAD\") res.end();\n else fs.createReadStream(farmDocsFontPath).pipe(res);\n return;\n }\n\n if (\n requestMethod === \"GET\" &&\n (requestPathname === FARM_DEVTOOLS_PATH ||\n requestPathname === `${FARM_DEVTOOLS_PATH}.json`)\n ) {\n if (!farmConfig.devtools.enabled) {\n res.statusCode = 404;\n res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n res.setHeader(\"Cache-Control\", \"no-store\");\n res.end(\"Farm DevTools are disabled.\");\n return;\n }\n\n if (\n requestPathname === FARM_DEVTOOLS_PATH &&\n parsedRequestUrl.searchParams.get(\"embedded\") !== \"1\"\n ) {\n let launchUrl = new URL(farmConfig.basePath || \"/\", parsedRequestUrl.origin);\n const referrer = req.headers.referer;\n if (referrer) {\n try {\n const referrerUrl = new URL(referrer);\n if (\n referrerUrl.origin === parsedRequestUrl.origin &&\n !referrerUrl.pathname.startsWith(FARM_DEVTOOLS_PATH)\n ) {\n launchUrl = referrerUrl;\n }\n } catch {\n // Ignore malformed referrers and return to the application root.\n }\n }\n launchUrl.searchParams.set(FARM_DEVTOOLS_LAUNCH_PARAM, \"1\");\n res.statusCode = 302;\n res.setHeader(\n \"Location\",\n `${launchUrl.pathname}${launchUrl.search}${launchUrl.hash}`,\n );\n res.setHeader(\"Cache-Control\", \"no-store\");\n res.setHeader(\"Vary\", \"Referer\");\n res.end();\n return;\n }\n\n const { createFarmDevtoolsSnapshot } = await loadFarmDevtoolsSnapshotRuntime();\n const snapshot = await createFarmDevtoolsSnapshot({\n root: farmConfig.root,\n srcDir: farmConfig.srcDir,\n routeManager: farmApp.getRouteManager(),\n apiRouteManager,\n middlewareManager,\n config: {\n ...currentConfig,\n openapi: options.openapi,\n },\n workflows: discoveredWorkflows,\n });\n\n res.statusCode = 200;\n res.setHeader(\n \"Content-Type\",\n requestPathname.endsWith(\".json\")\n ? \"application/json; charset=utf-8\"\n : \"text/html; charset=utf-8\",\n );\n res.setHeader(\"Cache-Control\", \"no-store\");\n if (requestPathname.endsWith(\".json\")) {\n res.end(JSON.stringify(snapshot, null, 2));\n } else {\n if (!warnedDeprecatedDevtoolsDashboard) {\n warnedDeprecatedDevtoolsDashboard = true;\n logger.warn(\n \"The built-in DevTools dashboard is deprecated. Install @farm.js/devtools and add devtools() to plugins in farm.config.ts.\",\n );\n }\n const { renderFarmDevtoolsHtml } = await loadFarmDevtoolsUIRuntime();\n res.end(renderFarmDevtoolsHtml(snapshot));\n }\n return;\n }\n\n // Handle OpenAPI docs route\n if (openAPIManager && requestPathname === options.openapi?.route) {\n const docsHandler = openAPIManager.getDocsRouteHandler();\n return docsHandler(req, res);\n }\n\n const docsHeaders = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value) {\n docsHeaders.set(key, Array.isArray(value) ? value.join(\", \") : value);\n }\n }\n if (farmDocsHandler) {\n const docsRequest = new Request(fullUrl, {\n method: requestMethod,\n headers: docsHeaders,\n });\n const docsResponse = await farmDocsHandler(docsRequest.clone());\n if (docsResponse) {\n await sendWebResponse(\n res,\n await wrapFarmDocsResponseWithLayouts(docsRequest, docsResponse),\n );\n return;\n }\n }\n\n const markdownSourceResponse = await createFarmMarkdownSourceResponse({\n request: new Request(fullUrl, {\n method: requestMethod,\n headers: docsHeaders,\n }),\n config: farmApp.getConfig().mdx,\n resolveSource: async (pathname) => {\n const match = farmApp.getRouteManager().matchRoute(pathname);\n const sourcePath =\n match.route?.markdownSourcePath ||\n (match.route && isFarmMarkdownPageFile(match.route.modulePath)\n ? match.route.modulePath\n : null);\n if (!sourcePath) {\n return null;\n }\n return {\n source: await fs.promises.readFile(sourcePath, \"utf8\"),\n filePath: sourcePath,\n };\n },\n });\n if (markdownSourceResponse) {\n await sendWebResponse(res, markdownSourceResponse);\n return;\n }\n\n const markdownResponse = await createMarkdownMirrorResponse({\n request: new Request(fullUrl, {\n method: requestMethod,\n headers: docsHeaders,\n }),\n config: farmApp.getConfig().md,\n routeExists: (pathname) =>\n Boolean(farmApp.getRouteManager().matchRoute(pathname).route),\n renderPage: async (request) => fetch(request),\n });\n if (markdownResponse) {\n await sendWebResponse(res, markdownResponse);\n return;\n }\n\n const markdownPageTarget = resolveMarkdownMirrorTarget(\n farmApp.getConfig().md,\n requestPathname,\n {\n accept: \"text/markdown\",\n },\n );\n if (\n markdownPageTarget &&\n farmApp.getRouteManager().matchRoute(markdownPageTarget.pathname).route\n ) {\n const vary = res.getHeader(\"Vary\");\n const varyValues = String(vary || \"\")\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n if (!varyValues.some((value) => value.toLowerCase() === \"accept\")) {\n res.setHeader(\"Vary\", [...varyValues, \"Accept\"].join(\", \"));\n }\n const alternatePath =\n markdownPageTarget.pathname === \"/\"\n ? \"/index.md\"\n : `${markdownPageTarget.pathname}.md`;\n const alternateLink = `<${alternatePath}>; rel=\"alternate\"; type=\"text/markdown\"`;\n const currentLink = res.getHeader(\"Link\");\n res.setHeader(\n \"Link\",\n currentLink ? `${String(currentLink)}, ${alternateLink}` : alternateLink,\n );\n }\n\n if (\n workflowHandler &&\n (requestPathname === workflowConfig.route ||\n requestPathname.startsWith(`${workflowConfig.route}/`))\n ) {\n let workflowBody: Buffer | undefined;\n try {\n if (requestMethod !== \"GET\" && requestMethod !== \"HEAD\") {\n workflowBody = await readNodeRequestBody(\n req as any,\n currentServerConfig.bodySizeLimit,\n );\n }\n } catch (error) {\n const response = createFarmRequestBodyErrorResponse(error);\n if (!response) throw error;\n await sendWebResponse(res, response);\n return;\n }\n const workflowResponse = await workflowHandler(\n new Request(fullUrl, {\n method: requestMethod,\n headers: docsHeaders,\n body: toRequestBody(workflowBody),\n }),\n );\n if (workflowResponse) {\n await sendWebResponse(res, workflowResponse);\n return;\n }\n }\n\n const configuredIntegrations = currentConfig.integrations;\n\n const tryConfiguredIntegrationRoute = async () => {\n const matchedRoute = matchIntegrationRoute(configuredIntegrations, {\n pathname: requestPathname,\n method: requestMethod,\n });\n\n if (!matchedRoute) {\n return false;\n }\n\n const startTime = Date.now();\n\n try {\n if (pm) {\n await pm.runHookParallelFiltered(\n \"beforeRequest\",\n (plugin) => {\n const owner = getFarmIntegrationPluginOwner(plugin);\n return (\n plugin.name !== FARM_CONFIG_REWRITES_PLUGIN_NAME &&\n (owner?.source !== \"lifecycle\" || owner.key !== matchedRoute.key)\n );\n },\n req,\n res,\n );\n }\n\n if (res.writableEnded) {\n const duration = Date.now() - startTime;\n logResponse(requestMethod, requestUrl, res.statusCode || 200, duration, \"API\");\n return true;\n }\n\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value) {\n headers.set(key, Array.isArray(value) ? value.join(\", \") : value);\n }\n }\n\n let body: Buffer | undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n body = await readNodeRequestBody(req as any, currentServerConfig.bodySizeLimit);\n }\n\n const integrationRequest = new Request(fullUrl, {\n method: req.method,\n headers,\n body: toRequestBody(body),\n });\n\n const dispatchIntegration = async (request: Request) => {\n const result = await dispatchIntegrationRequest(\n {\n integration: matchedRoute.integration,\n config: currentConfig,\n isDev: true,\n isProd: false,\n },\n request,\n );\n if (!result) {\n throw new Error(`Matched integration route did not return a response`);\n }\n return result;\n };\n const response = pm\n ? await pm.runRuntimeRequest(integrationRequest, dispatchIntegration, {\n kind: \"integration\",\n route: {\n pathname: requestPathname,\n pattern: matchedRoute.route.path,\n },\n })\n : await dispatchIntegration(integrationRequest);\n\n if (!response) {\n return false;\n }\n\n const duration = Date.now() - startTime;\n logResponse(requestMethod, requestUrl, response.status, duration, \"API\");\n\n await sendWebResponse(res, response);\n return true;\n } catch (error) {\n const bodyErrorResponse = createFarmRequestBodyErrorResponse(error);\n if (bodyErrorResponse) {\n await sendWebResponse(res, bodyErrorResponse);\n return true;\n }\n const duration = Date.now() - startTime;\n logResponse(requestMethod, requestUrl, 500, duration, \"API\");\n await emitPluginError(\"integration-handler\", error, {\n pathname: requestPathname,\n routePath: requestUrl,\n method: requestMethod,\n integration: matchedRoute.key,\n });\n logger.error(`Integration route error: ${error}`);\n if (!res.writableEnded) {\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Internal server error\" }));\n }\n return true;\n }\n };\n\n if (await tryConfiguredIntegrationRoute()) {\n return;\n }\n\n const redirectMatch = farmApp\n .getRouteManager()\n .matchRedirect(requestPathname, parsedRequestUrl.search);\n if (redirectMatch) {\n res.statusCode = redirectMatch.statusCode;\n res.setHeader(\"Location\", redirectMatch.destination);\n res.end(`Redirecting to ${redirectMatch.destination}`);\n return;\n }\n\n // Handle API routes first\n const matchedApiRoute = apiRouteManager.matchRoute(requestPathname);\n const hasMatchedApiRoute = Boolean(matchedApiRoute);\n if (hasMatchedApiRoute || isFarmAPIPathname(requestPathname, apiServerBasePath)) {\n const startTime = Date.now();\n const method = req.method || \"GET\";\n const urlPath = req.url || \"/\";\n const pathname = new URL(urlPath, `http://${req.headers.host || \"localhost:3000\"}`)\n .pathname;\n\n try {\n if (pm) {\n if (hasMatchedApiRoute) {\n await pm.runHookParallelFiltered(\n \"beforeRequest\",\n (plugin) => plugin.name !== FARM_CONFIG_REWRITES_PLUGIN_NAME,\n req,\n res,\n );\n } else {\n await pm.runHookParallel(\"beforeRequest\", req, res);\n }\n }\n\n if (res.writableEnded) {\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, res.statusCode || 200, duration, \"API\");\n return;\n }\n } catch (error) {\n await emitPluginError(\"before-request\", error, {\n urlPath,\n method,\n });\n logger.error(`Request hook error: ${error}`);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Internal server error\" }));\n return;\n }\n\n // Let this request boundary observe endpoint failures before it\n // converts them into the development 500 response below.\n const apiHandler = apiRouteManager.getHandler({ throwOnError: true });\n const hasExplicitAPIRoute =\n hasMatchedApiRoute || Boolean(apiRouteManager.matchRoute(pathname));\n if (apiHandler && hasExplicitAPIRoute) {\n const apiRoutePattern =\n matchedApiRoute?.route.path ||\n apiRouteManager.matchRoute(pathname)?.route.path ||\n urlPath;\n emitFarmEvent({\n type: \"route.matched\",\n pathname,\n route: apiRoutePattern,\n });\n emitFarmEvent({\n type: \"api.request.start\",\n pathname,\n route: apiRoutePattern,\n method,\n });\n try {\n // Convert Node.js request to Web Request\n const url = `http://${req.headers.host || \"localhost:3000\"}${req.url}`;\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value) {\n headers.set(key, Array.isArray(value) ? value.join(\", \") : value);\n }\n }\n\n // Get body for POST/PUT/PATCH\n let body: Buffer | undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n body = await readNodeRequestBody(req as any, currentServerConfig.bodySizeLimit);\n }\n\n const request = new Request(url, {\n method: req.method,\n headers,\n body: toRequestBody(body),\n });\n\n const apiLifecyclePayload = {\n pathname: new URL(url).pathname,\n method,\n routePath: apiRoutePattern,\n };\n const invokeAPIHandler = async (runtimeRequest: Request) => {\n const handledRequest: Request = pm\n ? await pm.runHookSerial(\n \"beforeApiHandler\",\n runtimeRequest,\n apiLifecyclePayload,\n )\n : runtimeRequest;\n\n const response = await apiHandler(handledRequest);\n return pm\n ? await pm.runHookSerial(\"afterApiHandler\", response, apiLifecyclePayload)\n : response;\n };\n const handledResponse: Response = pm\n ? await pm.runRuntimeRequest(request, invokeAPIHandler, {\n kind: \"api\",\n route: {\n pathname: apiLifecyclePayload.pathname,\n pattern: apiLifecyclePayload.routePath,\n },\n })\n : await invokeAPIHandler(request);\n\n const duration = Date.now() - startTime;\n emitFarmEvent({\n type: \"api.request.complete\",\n pathname,\n route: apiRoutePattern,\n method,\n status: handledResponse.status,\n durationMs: duration,\n });\n logResponse(method, urlPath, handledResponse.status, duration, \"API\");\n\n // Send response\n await sendWebResponse(res, handledResponse);\n return;\n } catch (error) {\n const duration = Date.now() - startTime;\n emitFarmEvent({\n type: \"api.error\",\n pathname,\n route: apiRoutePattern,\n method,\n durationMs: duration,\n error,\n });\n const bodyErrorResponse = createFarmRequestBodyErrorResponse(error);\n if (bodyErrorResponse) {\n logResponse(method, urlPath, bodyErrorResponse.status, duration, \"API\");\n await sendWebResponse(res, bodyErrorResponse);\n return;\n }\n await emitPluginError(\"api-handler\", error, {\n urlPath,\n method,\n });\n logger.error(`API route error: ${error}`);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Internal server error\" }));\n return;\n }\n }\n\n if (farmDocsAPIHandler && farmDocsDevRuntime?.isFarmDocsAPIRequest(pathname)) {\n try {\n const url = `http://${req.headers.host || \"localhost:3000\"}${req.url}`;\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value) {\n headers.set(key, Array.isArray(value) ? value.join(\", \") : value);\n }\n }\n\n let body: Buffer | undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n body = await readNodeRequestBody(req as any, currentServerConfig.bodySizeLimit);\n }\n\n const request = new Request(url, {\n method: req.method,\n headers,\n body: toRequestBody(body),\n });\n\n const apiLifecyclePayload = {\n pathname,\n method,\n routePath: urlPath,\n };\n const invokeDocsAPIHandler = async (runtimeRequest: Request) => {\n const handledRequest: Request = pm\n ? await pm.runHookSerial(\n \"beforeApiHandler\",\n runtimeRequest,\n apiLifecyclePayload,\n )\n : runtimeRequest;\n const response = await farmDocsAPIHandler(handledRequest);\n if (!response) {\n return new Response(null, { status: 404 });\n }\n return pm\n ? await pm.runHookSerial(\"afterApiHandler\", response, apiLifecyclePayload)\n : response;\n };\n const docsResponse = pm\n ? await pm.runRuntimeRequest(request, invokeDocsAPIHandler, {\n kind: \"docs\",\n route: {\n pathname,\n pattern: apiLifecyclePayload.routePath,\n },\n })\n : await invokeDocsAPIHandler(request);\n if (docsResponse) {\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, docsResponse.status, duration, \"API\");\n await sendWebResponse(res, docsResponse);\n return;\n }\n } catch (error) {\n const bodyErrorResponse = createFarmRequestBodyErrorResponse(error);\n if (bodyErrorResponse) {\n await sendWebResponse(res, bodyErrorResponse);\n return;\n }\n await emitPluginError(\"docs-api-handler\", error, {\n urlPath,\n method,\n });\n logger.error(`Docs API route error: ${error}`);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Internal server error\" }));\n return;\n }\n }\n\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, 404, duration, \"API\");\n res.statusCode = 404;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"API route not found\", pathname }));\n return;\n }\n\n // Skip internal Vite requests\n if (req.url?.startsWith(\"/@\") || req.url?.startsWith(\"/node_modules\")) {\n return next();\n }\n\n // Dotted paths are usually static assets (modules, images, source\n // maps), but dots are also valid inside route segments and in\n // application metadata routes (/manifest.webmanifest, /sitemap.xml,\n // /robots.txt, metadata images). Only skip the router when the\n // request maps to a real file on disk or nothing in the app matches\n // the pathname.\n if (\n shouldBypassFarmRouterForDottedPath(requestPathname, farmApp?.getRouteManager(), [\n server.config.publicDir,\n server.config.root,\n ])\n ) {\n return next();\n }\n\n // Handle SPA page-data requests for client-side navigation\n if (req.url?.startsWith(\"/__farm/page-data\")) {\n const urlObj = parsedRequestUrl;\n const targetPath = urlObj.searchParams.get(\"path\") || \"/\";\n\n try {\n const request = createRequestFromNodeRequest(\n req,\n urlObj,\n createFarmNodeRequestAbortSignal(req, res),\n );\n const deploymentMismatch = getFarmDeploymentMismatch(\n request,\n farmConfig.deploymentId,\n );\n if (deploymentMismatch) {\n await sendWebResponse(\n res,\n createFarmDeploymentMismatchResponse(deploymentMismatch),\n );\n return;\n }\n\n const targetRequestUrl = new URL(targetPath, request.url);\n const targetRequest = new Request(targetRequestUrl, {\n method: \"GET\",\n headers: request.headers,\n signal: request.signal,\n });\n await farmApp.getServerRenderer().runWithRequestContext(targetRequest, async () => {\n const routeManager = farmApp.getRouteManager();\n if (pm) {\n await pm.runHookParallel(\"beforeRouteMatch\", {\n pathname: targetPath,\n method: req.method || \"GET\",\n });\n }\n const interceptFromHeader =\n request.headers.get(\"x-farm-intercept-from\") || undefined;\n const match = routeManager.matchRoute(targetRequestUrl.pathname, {\n interceptFrom: interceptFromHeader,\n });\n if (pm) {\n await pm.runHookParallel(\"afterRouteMatch\", {\n pathname: targetPath,\n matched: !!match?.route,\n routePattern: match?.route?.pattern || null,\n params: match?.params || {},\n layoutPatterns: (match?.layouts || []).map((l) => l.pattern),\n });\n }\n\n if (!match) {\n res.statusCode = 404;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Route not found\" }));\n return;\n }\n\n const { route, params, layouts, slots } = match;\n\n // Check if route was found\n if (!route) {\n res.statusCode = 404;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({ error: \"Route not found\" }));\n return;\n }\n\n // Load route module to get metadata\n const routeModule = await routeManager.loadRouteModule(route.modulePath);\n const loadingBoundary = routeManager.getMatchingLoading(targetRequestUrl.pathname);\n const loadingModule = loadingBoundary\n ? await routeManager.loadRouteModule(loadingBoundary.modulePath)\n : null;\n\n const navigationManifest = routeManager.generateClientManifest(server.config.root);\n const moduleMetadata =\n navigationManifest.routes.find((entry) => entry.pattern === route.pattern) ??\n getClientModuleMetadata(route.modulePath, server.config.root);\n const isClientComponent = moduleMetadata.isClientComponent;\n const shouldHydrate = moduleMetadata.shouldHydrate;\n\n // Collect metadata from layouts and page\n let mergedMetadata: Record<string, any> = {};\n const layoutModules = await Promise.all(\n layouts.map((layout) => routeManager.loadLayoutModule(layout.modulePath)),\n );\n const layoutHydrationMetadata = layouts.map(\n (layout) =>\n navigationManifest.layouts.find((entry) => entry.pattern === layout.pattern) ??\n getClientModuleMetadata(layout.modulePath, server.config.root),\n );\n const shouldHydrateLayout = layoutHydrationMetadata.some(\n (metadata) => metadata.shouldHydrate,\n );\n const hydrationStrategies = [\n ...(shouldHydrate && moduleMetadata.islandStrategy\n ? [moduleMetadata.islandStrategy]\n : []),\n ...layoutHydrationMetadata.flatMap((metadata) =>\n metadata.shouldHydrate && metadata.islandStrategy\n ? [metadata.islandStrategy]\n : [],\n ),\n ];\n const hydrationIslandStrategy = hydrationStrategies.every(\n (strategy) => strategy === hydrationStrategies[0],\n )\n ? (hydrationStrategies[0] ?? \"load\")\n : \"load\";\n\n for (const layoutModule of layoutModules) {\n if ((layoutModule as any).metadata) {\n mergedMetadata = {\n ...mergedMetadata,\n ...(layoutModule as any).metadata,\n };\n }\n }\n\n if ((routeModule as any).metadata) {\n mergedMetadata = {\n ...mergedMetadata,\n ...(routeModule as any).metadata,\n };\n }\n\n // Build search params\n const targetUrl = new URL(targetPath, \"http://localhost\");\n const searchParams = searchParamsToObject(targetUrl.searchParams);\n const routeContext = await resolveFarmRouteContext(farmApp.getConfig(), {\n request: targetRequest,\n params,\n search: searchParams,\n path: targetUrl.pathname,\n });\n const routeProps = await parseRouteModuleProps(routeModule as RouteModuleLike, {\n props: withFarmRouteContext(\n {\n params,\n searchParams: Promise.resolve(searchParams),\n path: targetUrl.pathname,\n },\n routeContext,\n ),\n search: searchParams,\n routePath: route.pattern,\n });\n const routeSlots = await Promise.all(\n slots.map(async (slot) => {\n const slotModule = await routeManager.loadRouteModule(slot.route.modulePath);\n const slotMetadata =\n navigationManifest.slots.find(\n (entry) =>\n entry.name === slot.name &&\n entry.ownerPattern === slot.ownerPattern &&\n entry.pattern === slot.route.pattern,\n ) ?? getClientModuleMetadata(slot.route.modulePath, server.config.root);\n const slotContext = await resolveFarmRouteContext(farmApp.getConfig(), {\n request: targetRequest,\n params: slot.params,\n search: searchParams,\n path: targetUrl.pathname,\n });\n const slotProps = await parseRouteModuleProps(slotModule as RouteModuleLike, {\n props: withFarmRouteContext(\n {\n params: slot.params,\n searchParams: Promise.resolve(searchParams),\n path: targetUrl.pathname,\n },\n slotContext,\n ),\n search: searchParams,\n routePath: slot.route.pattern,\n });\n\n return {\n name: slot.name,\n ownerPattern: slot.ownerPattern,\n containerId: slot.containerId,\n interception: slot.interception,\n fallback: slot.fallback,\n modulePath: slot.route.modulePath,\n renderModule: slotModule,\n isClientComponent: slotMetadata.isClientComponent,\n shouldHydrate: slotMetadata.shouldHydrate,\n props: {\n params: slotProps.params,\n search: (slotProps as any).search,\n searchParams: (slotProps as any).search,\n ...(\"data\" in slotProps ? { data: (slotProps as any).data } : {}),\n ...((slotProps as any).__farmCanonicalPath\n ? {\n __farmCanonicalPath: (slotProps as any).__farmCanonicalPath,\n }\n : {}),\n ...((slotProps as any).__farmRoutePropsResolved\n ? { __farmRoutePropsResolved: true }\n : {}),\n path: targetUrl.pathname,\n },\n };\n }),\n );\n\n // Convert absolute paths to URL paths (relative to project root)\n const projectRoot = server.config.root;\n const toUrlPath = (absolutePath: string) =>\n toViteModuleId(absolutePath, projectRoot);\n\n const renderPlan = createFarmRouteRenderPlan({\n pageShouldHydrate: shouldHydrate,\n layoutShouldHydrate: shouldHydrateLayout,\n islandStrategy: hydrationIslandStrategy,\n rendering: resolveRouteRenderingConfig(routeModule as any),\n });\n const destinationLayoutPatterns = layouts.map((layout) => layout.pattern);\n const layoutStartIndex = getSharedLayoutPrefixLength(\n parseFarmLayoutChainHeader(request.headers.get(\"x-farm-layout-chain\")),\n destinationLayoutPatterns,\n );\n const fragmentHtml = await farmApp.getServerRenderer().renderNavigationFragment({\n PageComponent: (routeModule as any).default,\n LoadingComponent: (loadingModule as any)?.default,\n pageProps: routeProps as Record<string, unknown>,\n params,\n layouts: layouts.map((layout, index) => ({\n pattern: layout.pattern,\n module: layoutModules[index] as any,\n })),\n layoutStartIndex,\n slots: routeSlots.map((slot) => ({\n name: slot.name,\n ownerPattern: slot.ownerPattern,\n containerId: slot.containerId,\n module: slot.renderModule as any,\n props: slot.props,\n })),\n pageShouldHydrate: shouldHydrate,\n layoutShouldHydrate: shouldHydrateLayout,\n islandStrategy: hydrationIslandStrategy,\n });\n\n // Return page data for SPA navigation\n const pageData = {\n props: {\n params: routeProps.params,\n search: (routeProps as any).search,\n searchParams: (routeProps as any).search,\n ...(\"data\" in routeProps ? { data: (routeProps as any).data } : {}),\n ...((routeProps as any).__farmCanonicalPath\n ? {\n __farmCanonicalPath: (routeProps as any).__farmCanonicalPath,\n }\n : {}),\n ...((routeProps as any).__farmRoutePropsResolved\n ? { __farmRoutePropsResolved: true }\n : {}),\n },\n canonicalPath: (routeProps as any).__farmCanonicalPath,\n modulePath: toUrlPath(route.modulePath),\n loadingModulePath: loadingBoundary ? toUrlPath(loadingBoundary.modulePath) : null,\n isClientComponent: routeSlots.length > 0 ? false : isClientComponent,\n pageShouldHydrate: shouldHydrate,\n layoutShouldHydrate: shouldHydrateLayout,\n shouldHydrate:\n shouldHydrate ||\n shouldHydrateLayout ||\n routeSlots.some((slot) => slot.isClientComponent || slot.shouldHydrate),\n islandStrategy: hydrationIslandStrategy,\n renderPlan,\n fragment: {\n html: fragmentHtml,\n layoutPatterns: destinationLayoutPatterns,\n },\n metadata: {\n title: mergedMetadata.title,\n description: mergedMetadata.description,\n },\n layoutModules: layouts.map((l) => toUrlPath(l.modulePath)),\n routeSlots: routeSlots.map(({ renderModule: _renderModule, ...slot }) => ({\n ...slot,\n modulePath: toUrlPath(slot.modulePath),\n })),\n interception: routeSlots.some((slot) => slot.interception)\n ? {\n from: interceptFromHeader,\n slots: routeSlots\n .filter((slot) => slot.interception)\n .map((slot) => slot.name),\n }\n : undefined,\n i18n: getFarmI18nClientSnapshot(),\n };\n\n await sendWebResponse(\n res,\n createDeferredDataResponse(\n pageData,\n {\n status: 200,\n headers: {\n \"Cache-Control\": getFarmFragmentCacheControl(renderPlan),\n \"X-Farm-Navigation\": \"html-fragment\",\n Vary: \"X-Farm-Layout-Chain\",\n [FARM_DEPLOYMENT_ID_HEADER]: farmConfig.deploymentId,\n },\n },\n {\n onError(error, id) {\n logger.error(`Deferred route data ${id} failed: ${error}`);\n },\n },\n ),\n );\n return;\n });\n return;\n } catch (error) {\n const failure = resolveFarmPageDataFailure(error);\n if (failure.status >= 500) {\n await emitPluginError(\"page-data\", error, {\n path: targetPath,\n });\n console.error(\"[Farm.js] Page data error:\", error);\n }\n res.statusCode = failure.status;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify(failure.payload));\n return;\n }\n }\n\n const startTime = Date.now();\n const method = req.method || \"GET\";\n const urlPath = req.url || \"/\";\n const pathname = new URL(urlPath, `http://${req.headers.host || \"localhost:3000\"}`)\n .pathname;\n const routeManager = farmApp.getRouteManager();\n const hasBeforeRouteMatchHook = pm?.hasHook(\"beforeRouteMatch\") ?? false;\n const hasAfterRouteMatchHook = pm?.hasHook(\"afterRouteMatch\") ?? false;\n const hasBeforeRequestHook = pm?.hasHook(\"beforeRequest\") ?? false;\n const hasBeforeRenderHook = pm?.hasHook(\"beforeRender\") ?? false;\n const hasAfterResponseHook = pm?.hasHook(\"afterResponse\") ?? false;\n const hasHTMLTransformHook =\n (pm?.hasHook(\"transformHTML\") ?? false) || (pm?.hasHook(\"afterRender\") ?? false);\n const hasRuntimeRequestHooks = pm?.hasRuntimeRequestHooks() ?? false;\n const hasRuntimeAfterHook = pm?.hasRuntimeHook(\"after\") ?? false;\n\n if (pm && hasBeforeRouteMatchHook) {\n await pm.runHookParallel(\"beforeRouteMatch\", {\n pathname,\n method,\n });\n }\n const routeMatch = routeManager.matchRoute(pathname);\n if (pm && hasAfterRouteMatchHook) {\n await pm.runHookParallel(\"afterRouteMatch\", {\n pathname,\n matched: !!routeMatch?.route,\n routePattern: routeMatch?.route?.pattern || null,\n params: routeMatch?.params || {},\n layoutPatterns: (routeMatch?.layouts || []).map((l) => l.pattern),\n });\n }\n const renderPayload = {\n pathname,\n method,\n routePattern: routeMatch?.route?.pattern || null,\n params: routeMatch?.params || {},\n };\n let runtimeSession: FarmPluginRuntimeSession | undefined;\n if (pm && hasRuntimeRequestHooks) {\n try {\n runtimeSession = await pm.beginRuntimeRequest(\n createRequestFromNodeRequest(req, new URL(fullUrl)),\n {\n kind: \"page\",\n route: {\n pathname,\n pattern: renderPayload.routePattern,\n params: renderPayload.params,\n },\n },\n );\n pm.copyRequestContext(runtimeSession.request, req);\n applyWebRequestToNodeRequest(runtimeSession.request, req);\n\n if (runtimeSession.response) {\n const response = await pm.endRuntimeRequest(\n runtimeSession,\n runtimeSession.response,\n );\n await sendWebResponse(res, response);\n return;\n }\n } catch (error) {\n await emitPluginError(\"runtime-before\", error, { pathname });\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"text/plain; charset=utf-8\");\n res.end(\"Internal Server Error\");\n return;\n }\n }\n\n // Runtime response transforms need the complete byte stream, including\n // responses completed by middleware or beforeRequest hooks.\n const shouldInterceptResponse = Boolean(\n pm &&\n (hasAfterResponseHook ||\n hasHTMLTransformHook ||\n (runtimeSession && hasRuntimeAfterHook)),\n );\n const responseInterceptor =\n pm && shouldInterceptResponse\n ? interceptFarmDevPageResponse({\n req,\n res,\n pm,\n runtimeSession,\n hasRuntimeAfterHook,\n hasAfterResponseHook,\n hasHTMLTransformHook,\n renderPayload,\n method,\n urlPath,\n pathname,\n startTime,\n logResponse,\n emitError: (error) => emitPluginError(\"response-end\", error, { pathname }),\n })\n : undefined;\n\n try {\n if (middlewareManager?.hasMiddleware()) {\n const middlewareRequest = createRequestFromNodeRequest(req, new URL(fullUrl));\n const handled = await farmApp\n .getServerRenderer()\n .runWithRequestContext(middlewareRequest, () =>\n middlewareManager!.execute(req, res),\n );\n if (handled) {\n if (!responseInterceptor?.isEnded()) {\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, res.statusCode || 200, duration, \"PAGE\");\n }\n return; // Middleware handled the response\n }\n }\n\n // Run beforeRequest hooks\n if (pm && hasBeforeRequestHook) {\n const currentPathname = new URL(\n req.url || \"/\",\n `http://${req.headers.host || \"localhost:3000\"}`,\n ).pathname;\n const hasLocalPageRoute = Boolean(routeManager.matchRoute(currentPathname)?.route);\n await pm.runHookParallelFiltered(\n \"beforeRequest\",\n (plugin) => !hasLocalPageRoute || plugin.name !== FARM_CONFIG_REWRITES_PLUGIN_NAME,\n req,\n res,\n );\n }\n\n if (res.writableEnded || responseInterceptor?.isEnded()) {\n if (!responseInterceptor?.isEnded()) {\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, res.statusCode || 200, duration, \"PAGE\");\n }\n return;\n }\n\n // Note: __FARM_PROPS__ is set by the renderer with actual page props (params, searchParams)\n\n const renderer = farmApp.getServerRenderer();\n if (pm && hasBeforeRenderHook) {\n await pm.runHookParallel(\"beforeRender\", renderPayload);\n }\n await renderer.renderPage(req as any, res as any);\n if (!shouldInterceptResponse) {\n logResponse(method, urlPath, res.statusCode || 200, Date.now() - startTime, \"PAGE\");\n }\n } catch (error) {\n // Log error response\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, 500, duration, \"PAGE\");\n if (pm && runtimeSession) {\n await pm.failRuntimeRequest(runtimeSession, error);\n }\n await emitPluginError(\"render-page\", error, { pathname });\n next(error);\n }\n }),\n );\n },\n\n async resolveId(id, importer, resolveOptions) {\n if (typeof fontImports.resolveId === \"function\") {\n const fontId = await fontImports.resolveId.call(this, id, importer, resolveOptions);\n if (fontId) return fontId;\n }\n\n if (typeof imageImports.resolveId === \"function\") {\n const imageId = await imageImports.resolveId.call(this, id, importer, resolveOptions);\n if (imageId) return imageId;\n }\n\n if (parseProgrammaticRouteModuleId(id)) {\n return id;\n }\n\n if (isFarmClientVirtualId(id)) {\n return id;\n }\n\n if (id === \"/@farm/server\") {\n return id;\n }\n\n // Virtual manifest module - TanStack Start pattern\n if (id === \"virtual:farm-manifest\" || id === \"/@farm/manifest\") {\n return \"/@farm/manifest\";\n }\n },\n\n async load(id) {\n if (typeof fontImports.load === \"function\") {\n const fontModule = await fontImports.load.call(this, id);\n if (fontModule) return fontModule;\n }\n\n if (typeof imageImports.load === \"function\") {\n const imageModule = await imageImports.load.call(this, id);\n if (imageModule) return imageModule;\n }\n\n if (parseProgrammaticRouteModuleId(id)) {\n const renderer = farmApp?.getConfig().renderer || resolveFarmRenderer(options.renderer);\n return generateProgrammaticRouteModule(id, server?.config.root || options.root, renderer);\n }\n\n if (isFarmClientVirtualId(id)) {\n const resolvedConfig = farmApp?.getConfig();\n const renderer = resolvedConfig?.renderer || resolveFarmRenderer(options.renderer);\n const integrations = resolvedConfig?.integrations || options.integrations;\n const root = resolvedConfig?.root || server?.config.root || process.cwd();\n const docs = resolvedConfig?.docs;\n const adapterOwnsDocsRuntime = Boolean(\n isReactRenderer(renderer) && docs?.adapter?.server && docs.adapter.react,\n );\n const devtools = resolvedConfig?.devtools ?? resolveFarmDevtoolsConfig(false, \"production\");\n const [docsRuntime, docsSearchRuntime, devtoolsClientRuntime] = await Promise.all([\n docs?.enabled ? loadFarmDocsDevRuntime() : null,\n docs?.enabled && !adapterOwnsDocsRuntime ? loadFarmDocsSearchDevRuntime() : null,\n devtools.enabled ? loadFarmDevtoolsClientRuntime() : null,\n ]);\n const docsSearchEnabled = docsSearchRuntime?.isFarmDocsSearchEnabled(docs) ?? false;\n const generatedDocsSearchRuntime = docsSearchRuntime\n ? docsSearchRuntime.generateFarmDocsSearchClientRuntime(\n docsSearchEnabled,\n docsSearchEnabled\n ? docsSearchRuntime.resolveFarmDocsSearchClientModule(root)\n : undefined,\n )\n : EMPTY_FARM_DOCS_SEARCH_CLIENT_RUNTIME;\n const generatedDevtoolsClientRuntime = devtoolsClientRuntime\n ? devtoolsClientRuntime.generateFarmDevtoolsClientRuntime(devtools)\n : \"\";\n const generatedDevIndicatorsClientRuntime = farmApp\n ? generateFarmDevIndicatorsClientRuntime(farmApp.getConfig().devIndicators)\n : \"\";\n const integrationProviders = isReactRenderer(renderer)\n ? getIntegrationProviders(integrations)\n : [];\n const isolatedHydrationMode = resolveFarmIsolatedClientHydrationMode(\n resolvedConfig?.experimental?.isolatedClientHydration,\n {\n serverComponents: resolvedConfig?.experimental?.serverComponents === true,\n hasUnsupportedIntegrationProvider: integrationProviders\n .filter((provider) => provider.component || provider.type === \"clerk\")\n .some((provider) => provider.supportsIsolatedHydration !== true),\n },\n );\n\n return generateClientCode(\n integrationProviders,\n [\n ...getIntegrationDocumentNavigationMatchers(integrations),\n ...(docsRuntime?.getFarmDocsDocumentNavigationMatchers(docs) ?? []),\n ],\n generatedDocsSearchRuntime,\n `${generatedDevtoolsClientRuntime}\\n${generatedDevIndicatorsClientRuntime}`,\n resolvedConfig?.plugins || [],\n root,\n resolvedConfig?.srcDir || options.srcDir || \"src\",\n resolvedConfig?.publicRuntimeConfig || options.publicRuntimeConfig,\n isReactRenderer(renderer) ? docs?.adapter?.react : undefined,\n renderer,\n isolatedHydrationMode === \"enabled\",\n resolvedConfig?.trailingSlash ?? false,\n resolvedConfig?.basePath ?? \"/\",\n generateClientCachePersistenceCode(\n resolveFarmClientCacheAdapterEntry(root, resolvedConfig?.cache),\n ),\n );\n }\n\n if (id === \"/@farm/server\") {\n return generateServerCode();\n }\n\n // Virtual manifest module - TanStack Start pattern\n // Manifest is generated at build time and inlined\n if (id === \"/@farm/manifest\") {\n const routeManager = farmApp?.getRouteManager();\n if (!routeManager) {\n return `\nexport const getManifest = () => ({\n routes: {},\n layouts: {},\n slots: [],\n clientEntry: \"/@farm/client.js\",\n sharedAssets: []\n});\n`;\n }\n\n const manifest = routeManager.generateClientManifest(server.config.root);\n\n // Convert to full manifest format\n const fullManifest = {\n clientEntry: \"/@farm/client.js\",\n routes: {} as Record<string, any>,\n layouts: {} as Record<string, any>,\n slots: [] as Array<Record<string, any>>,\n sharedAssets: [\n {\n tag: \"link\",\n attrs: { rel: \"stylesheet\", href: \"/src/app/globals.css\" },\n },\n ],\n };\n\n // Convert routes array to object keyed by pattern\n for (const route of manifest.routes) {\n fullManifest.routes[route.pattern] = {\n modulePath: route.modulePath,\n pattern: route.pattern,\n segments: route.segments,\n search: route.search,\n isClientComponent: route.isClientComponent,\n shouldHydrate: route.shouldHydrate,\n islandStrategy: route.islandStrategy,\n renderPlan: route.renderPlan,\n preloads: [route.modulePath], // In dev, preload is just the module\n assets: [],\n };\n }\n\n // Convert layouts array to object keyed by pattern\n for (const layout of manifest.layouts) {\n fullManifest.layouts[layout.pattern] = {\n modulePath: layout.modulePath,\n pattern: layout.pattern,\n shouldHydrate: layout.shouldHydrate,\n islandStrategy: layout.islandStrategy,\n preloads: [layout.modulePath],\n assets: [],\n };\n }\n\n for (const slot of manifest.slots) {\n fullManifest.slots.push({\n ...slot,\n preloads: [slot.modulePath],\n assets: [],\n });\n }\n\n return `\n// Auto-generated manifest for SPA navigation (TanStack Start pattern)\n// This manifest is inlined in the server bundle - no file on disk\n// Client receives this via window.__FARM_MANIFEST__ in HTML\nexport const getManifest = () => (${JSON.stringify(fullManifest, null, 2)});\nexport const manifest = getManifest();\n`;\n }\n },\n\n async transform(code, id, transformOptions) {\n if (!transformOptions?.ssr) {\n const currentConfig = (farmApp?.getConfig() ?? options) as FarmVitePluginOptions;\n if (currentConfig.experimental?.serverActions !== true) {\n // Without the server-function transform there is no client stub for\n // server queries: bundling the defining module into the browser\n // executes the server handler there. Fail with an actionable\n // boundary error instead of Vite's Node-builtin externalization\n // failure at runtime.\n const violation = findClientServerFnViolation(code, id);\n if (violation) {\n this.error(formatServerFnBoundaryError(violation, id));\n }\n }\n }\n\n if (typeof imageImports.transform === \"function\") {\n const imageModule = await imageImports.transform.call(this, code, id, transformOptions);\n if (imageModule) return imageModule;\n }\n\n let transformedCode = code;\n let transformed = false;\n\n if (typeof fontImports.transform === \"function\") {\n const fontResult = await fontImports.transform.call(\n this,\n transformedCode,\n id,\n transformOptions,\n );\n const fontCode = typeof fontResult === \"string\" ? fontResult : fontResult?.code;\n if (fontCode) {\n transformedCode = fontCode;\n transformed = true;\n }\n }\n\n if (transformOptions?.ssr && server) {\n const rewrittenImports = rewriteEarlySsrRelativeImports({\n code: transformedCode,\n id,\n root: server.config.root,\n parse: (source) => this.parse(source) as unknown as FarmModuleAstNode,\n });\n if (rewrittenImports) {\n transformedCode = rewrittenImports;\n transformed = true;\n }\n }\n\n if (hasUseClientDirective(transformedCode)) {\n const clientBoundarySource = transformedCode;\n const moduleInfo = this.getModuleInfo(id);\n if (moduleInfo) {\n (moduleInfo as any).isClientComponent = true;\n }\n\n transformedCode = stripUseClientDirective(transformedCode);\n transformed = true;\n\n const currentConfig = (farmApp?.getConfig() ?? options) as FarmVitePluginOptions;\n const configuredProviders = getIntegrationProviders(currentConfig.integrations).filter(\n (provider) => provider.component || provider.type === \"clerk\",\n );\n const isolatedHydrationEnabled =\n resolveFarmIsolatedClientHydrationMode(\n currentConfig.experimental?.isolatedClientHydration,\n {\n serverComponents: currentConfig.experimental?.serverComponents === true,\n hasUnsupportedIntegrationProvider: configuredProviders.some(\n (provider) => provider.supportsIsolatedHydration !== true,\n ),\n },\n ) === \"enabled\" && isReactRenderer(resolveFarmRenderer(currentConfig.renderer));\n let isolatedModuleReference: string | null = null;\n const root = currentConfig.root || server?.config.root || process.cwd();\n const cleanId = id.split(\"?\", 1)[0];\n const selectedIsolatedModules =\n options.isolatedClientBoundaryModules ??\n farmApp?.getRouteManager().getIsolatedClientBoundaryModules(root);\n const selectedForIsolatedHydration =\n selectedIsolatedModules?.has(path.resolve(cleanId)) === true;\n if (\n isolatedHydrationEnabled &&\n selectedForIsolatedHydration &&\n isIsolatableClientBoundarySource(clientBoundarySource)\n ) {\n isolatedModuleReference = toViteModuleId(cleanId, root);\n const transformedBoundary = transformIsolatedClientBoundaryModule({\n code: transformedCode,\n moduleReference: isolatedModuleReference,\n islandStrategy: getIslandStrategyExport(clientBoundarySource) ?? \"load\",\n parse: (source) => this.parse(source) as unknown as FarmModuleAstNode,\n });\n if (!transformedBoundary) {\n this.error(\n `[Farm.js] Could not compile isolated client boundary ${cleanId}. ` +\n `Use experimental.isolatedClientHydration = \"analyze\" to inspect eligibility ` +\n `or \"off\" to retain route-wide hydration.`,\n );\n }\n transformedCode = transformedBoundary;\n }\n\n // Store client component for later injection\n if (!farmApp) {\n return {\n code: transformedCode,\n map: null,\n };\n }\n\n const clientComponents = (farmApp as any).__clientComponents__ || new Set();\n clientComponents.add(id);\n (farmApp as any).__clientComponents__ = clientComponents;\n\n // Add HMR support for client components\n // This ensures React re-renders when the component updates\n const isolatedHmrUpdate = isolatedModuleReference\n ? `\n if (\n newModule &&\n newModule.__farm_client_boundary_originals__ &&\n window.__FARM_ISOLATED_HYDRATION_RUNTIME__\n ) {\n window.__FARM_ISOLATED_HYDRATION_RUNTIME__.updateModule(\n ${JSON.stringify(isolatedModuleReference)},\n newModule,\n );\n return;\n }`\n : \"\";\n const hmrCode = `\nif (import.meta.hot) {\n import.meta.hot.accept((newModule) => {\n ${isolatedHmrUpdate}\n if (newModule && newModule.default && window.__FARM_REACT_ROOT__) {\n // Re-render with the new component\n const React = window.__FARM_REACT__;\n const props = window.__FARM_PROPS__ || {};\n const nextElement = React.createElement(newModule.default, props);\n const wrapProviders = window.__FARM_WRAP_PROVIDERS__;\n const wrapClientGraph = window.__FARM_WRAP_CLIENT_GRAPH__;\n Promise.resolve(\n typeof wrapProviders === 'function' ? wrapProviders(nextElement) : nextElement\n ).then((wrappedElement) => {\n window.__FARM_REACT_ROOT__.render(\n typeof wrapClientGraph === 'function'\n ? wrapClientGraph(wrappedElement)\n : wrappedElement\n );\n });\n }\n });\n}\n`;\n return {\n code: transformedCode + \"\\n\" + hmrCode,\n map: null,\n };\n }\n\n return transformed ? { code: transformedCode, map: null } : null;\n },\n\n async generateBundle(options, bundle) {\n if (typeof fontImports.generateBundle === \"function\") {\n await fontImports.generateBundle.call(this, options, bundle, false);\n }\n const clientManifest = generateClientManifest(bundle);\n this.emitFile({\n type: \"asset\",\n fileName: \"farm-client-manifest.json\",\n source: JSON.stringify(clientManifest, null, 2),\n });\n },\n\n async closeBundle() {\n // SSG: Pre-render static pages at build time\n if (!farmApp) return;\n\n try {\n const routeManager = farmApp.getRouteManager();\n if (!routeManager) return;\n\n const { ssg: ssgPages, ssr: ssrRoutes } = await routeManager.collectSSGPages();\n\n if (ssgPages.length === 0) {\n logger.info(\"No SSG pages found - all pages will use SSR\");\n return;\n }\n\n logger.info(`Found ${ssgPages.length} SSG pages, ${ssrRoutes.length} SSR routes`);\n logger.info(\"Pre-rendering SSG pages...\");\n\n const outDir = path.join(server?.config.root || process.cwd(), options.outDir || \"dist\");\n const clientDir = path.join(outDir, \"client\");\n\n // Pre-render each SSG page\n for (const page of ssgPages) {\n try {\n const staticRequest = new Request(new URL(page.urlPath, \"http://farm.static\"));\n await farmApp.getServerRenderer().runWithRequestContext(staticRequest, async () => {\n // Load the route module\n const mod = await routeManager.loadRouteModule(page.filePath);\n if (!mod?.default) return;\n\n // Find matching layouts\n const { layouts } = routeManager.matchRoute(page.urlPath);\n const layoutModules = await Promise.all(\n layouts.map((l) => routeManager.loadLayoutModule(l.modulePath)),\n );\n\n // Render the page\n const React = await import(\"react\");\n const { renderToString } = await import(\"react-dom/server\");\n\n const PageComponent = mod.default;\n const pageProps = {\n params: page.params,\n searchParams: Promise.resolve({}),\n path: page.urlPath,\n };\n\n let pageElement = React.createElement(\n PageComponent as React.ComponentType<unknown>,\n pageProps as React.Attributes,\n );\n\n // Wrap with layouts\n for (let i = layoutModules.length - 1; i >= 0; i--) {\n const layoutModule = layoutModules[i];\n const LayoutComponent = layoutModule.default;\n pageElement = React.createElement(\n LayoutComponent as React.ComponentType<unknown>,\n {\n children: pageElement,\n params: page.params,\n } as React.Attributes,\n );\n }\n\n const html = renderToString(pageElement);\n\n // Generate full HTML with proper structure\n const i18nSnapshot = getFarmI18nClientSnapshot();\n const i18nHead = renderFarmI18nStaticHead(page.urlPath, i18nSnapshot);\n const fullHtml = `<!DOCTYPE html>\n<html lang=\"${escapeFarmHtmlAttribute(i18nSnapshot?.locale || \"en\")}\"${\n i18nSnapshot ? ` dir=\"${i18nSnapshot.direction}\"` : \"\"\n }>\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link rel=\"icon\" href=\"data:,\">\n <link rel=\"stylesheet\" href=\"/assets/globals.css\">\n ${page.revalidate ? `<meta name=\"x-farm-revalidate\" content=\"${page.revalidate}\">` : \"\"}\n ${i18nHead}\n</head>\n<body>\n <div id=\"root\">${html}</div>\n <script type=\"module\" src=\"/assets/client.js\"></script>\n</body>\n</html>`;\n\n // Write to output directory\n const outputPath =\n page.urlPath === \"/\"\n ? path.join(clientDir, \"index.html\")\n : path.join(clientDir, page.urlPath + \".html\");\n\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n fs.writeFileSync(outputPath, fullHtml);\n\n const revalidateInfo = page.revalidate ? ` (revalidate: ${page.revalidate}s)` : \"\";\n logger.success(` ✓ ${page.urlPath}${revalidateInfo}`);\n });\n } catch (error) {\n logger.error(` ✗ ${page.urlPath}: ${error}`);\n }\n }\n\n // Write SSG manifest for server to know which pages are pre-rendered\n const manifestPath = path.join(outDir, \"__ssg_manifest.json\");\n fs.writeFileSync(\n manifestPath,\n JSON.stringify(\n ssgPages.map((p) => ({\n urlPath: p.urlPath,\n params: p.params,\n revalidate: p.revalidate,\n })),\n null,\n 2,\n ),\n );\n\n logger.success(`SSG complete: ${ssgPages.length} pages pre-rendered`);\n } catch (error) {\n logger.error(`SSG build failed: ${error}`);\n }\n },\n\n async handleHotUpdate(ctx: HmrContext) {\n const { file, server, modules } = ctx;\n if (initialPluginManager) {\n try {\n await initialPluginManager.runHookParallel(\"hmrUpdate\", {\n file,\n modules: modules.map((m) => m.id || m.url || \"\").filter(Boolean),\n });\n } catch (error) {\n await initialPluginManager.runHookParallel(\"onError\", {\n phase: \"hmrUpdate\",\n error,\n meta: { file },\n });\n }\n }\n\n const currentFarmConfig = farmApp?.getConfig();\n const normalizedFile = file.replace(/\\\\/g, \"/\");\n if (\n currentFarmConfig &&\n /\\/route\\.(?:ts|tsx|js|jsx)$/.test(normalizedFile) &&\n getFarmAppDirectories(currentFarmConfig).some((appDir) =>\n normalizedFile.startsWith(`${toPosixPath(appDir)}/api/`),\n )\n ) {\n // Vite has not invalidated these modules yet. Refreshing only generated\n // types leaves both HTTP and direct server calls bound to old handlers.\n for (const mod of modules) server.moduleGraph.invalidateModule(mod);\n await refreshRouteDiscovery?.(`updated ${file}`);\n server.ws.send({ type: \"full-reload\", path: \"*\" });\n return [];\n }\n const currentSrcRoot = currentFarmConfig\n ? getFarmSourceRoots(currentFarmConfig)\n .map((source) => path.join(source.root, source.srcDir).replace(/\\\\/g, \"/\"))\n .find((sourceRoot) => normalizedFile.startsWith(`${sourceRoot}/`)) || null\n : null;\n if (\n currentSrcRoot &&\n normalizedFile.startsWith(`${currentSrcRoot}/`) &&\n isProgrammaticRoutesFileName(normalizedFile)\n ) {\n logUpdate(\"PAGE\", `updated ${path.basename(file)}`);\n\n for (const mod of modules) {\n server.moduleGraph.invalidateModule(mod);\n }\n\n await refreshRouteDiscovery?.(`updated ${file}`);\n\n server.ws.send({\n type: \"full-reload\",\n path: \"*\",\n });\n\n return [];\n }\n\n if (\n currentSrcRoot &&\n isPotentialProgrammaticRouteSourceFile(normalizedFile, currentSrcRoot) &&\n fileContainsProgrammaticPageRoute(file)\n ) {\n const shortPath = normalizedFile.slice(currentSrcRoot.length + 1);\n logUpdate(\"PAGE\", `updated ${shortPath}`);\n\n for (const mod of modules) {\n server.moduleGraph.invalidateModule(mod);\n }\n\n await refreshRouteDiscovery?.(`updated ${file}`);\n\n server.ws.send({\n type: \"full-reload\",\n path: \"*\",\n });\n\n return [];\n }\n\n const isolatedHydrationMode = currentFarmConfig?.experimental?.isolatedClientHydration;\n if (\n currentSrcRoot &&\n (isolatedHydrationMode === \"enabled\" || isolatedHydrationMode === \"analyze\") &&\n /\\.[cm]?[jt]sx?$/.test(normalizedFile)\n ) {\n const routeManager = farmApp?.getRouteManager();\n if (routeManager) {\n const previousPlan = JSON.stringify(\n routeManager.generateClientManifest(currentFarmConfig.root),\n );\n routeManager.invalidateClientManifest();\n const nextPlan = JSON.stringify(\n routeManager.generateClientManifest(currentFarmConfig.root),\n );\n const planChanged = previousPlan !== nextPlan;\n const manifestModule = server.moduleGraph.getModuleById(\"/@farm/manifest\");\n if (manifestModule) server.moduleGraph.invalidateModule(manifestModule);\n if (planChanged) {\n for (const mod of modules) server.moduleGraph.invalidateModule(mod);\n server.ws.send({ type: \"full-reload\", path: \"*\" });\n return [];\n }\n }\n }\n\n if (normalizedFile.includes(\"/app/\")) {\n // Hot reload middleware changes\n if (normalizedFile.includes(\"middleware.\")) {\n if (middlewareManager) {\n await middlewareManager.reload();\n logger.success(\"✅ Middleware reloaded!\");\n if (initialPluginManager) {\n for (const middleware of middlewareManager.getMiddlewares()) {\n await initialPluginManager.runHookParallel(\"middlewareDiscovered\", {\n path: middleware.path,\n filePath: middleware.filePath,\n handlerCount: middleware.handlers.length,\n });\n }\n }\n }\n\n return [];\n }\n\n farmApp?.getRouteManager().invalidateClientManifest();\n const manifestModule = server.moduleGraph.getModuleById(\"/@farm/manifest\");\n if (manifestModule) {\n server.moduleGraph.invalidateModule(manifestModule);\n }\n\n if (normalizedFile.includes(\"page.\") || normalizedFile.includes(\"layout.\")) {\n const shortPath = normalizedFile.split(\"/app/\")[1] || normalizedFile;\n logUpdate(\"PAGE\", `updated ${shortPath}`);\n\n for (const mod of modules) {\n server.moduleGraph.invalidateModule(mod);\n }\n\n server.ws.send({\n type: \"full-reload\",\n path: \"*\",\n });\n\n return [];\n }\n }\n\n return modules;\n },\n };\n}\n\nfunction isFarmClientVirtualId(id: string): boolean {\n const pathname = id.split(\"?\", 1)[0];\n return pathname === \"/@farm/client\" || pathname === \"/@farm/client.js\";\n}\n\nfunction generateProgrammaticRouteModule(\n moduleId: string,\n root?: string,\n renderer: FarmRenderer = REACT_RENDERER,\n): string {\n const parsed = parseProgrammaticRouteModuleId(moduleId);\n if (!parsed) {\n return \"\";\n }\n\n const routeFile = toProgrammaticRouteImportSpecifier(parsed.filePath, root);\n\n if (parsed.kind === \"api\") {\n return generateProgrammaticApiRouteModule(parsed.routePath, routeFile);\n }\n\n return `\nimport {\n createElement as __farmCreateElement,\n Suspense as __farmSuspense,\n} from ${JSON.stringify(renderer.server)};\nimport {\n createLayoutModuleFromProgrammaticLayout as __farmCreateLayoutRouteModule,\n createRouteModuleFromProgrammaticPage as __farmCreatePageRouteModule,\n} from \"@farm.js/core/routes\";\nimport * as __farmRoutesModule from ${JSON.stringify(routeFile)};\n\nconst __farmIsRouteDefinition = (value) => (\n value &&\n typeof value === \"object\" &&\n (\n value.kind === \"page\" ||\n value.kind === \"layout\" ||\n value.kind === \"api\" ||\n value.kind === \"redirect\"\n )\n);\nconst __farmRouteListFromCandidate = (candidate) => {\n if (Array.isArray(candidate)) return candidate;\n if (Array.isArray(candidate?.routes)) return candidate.routes;\n if (__farmIsRouteDefinition(candidate)) return [candidate];\n return [];\n};\nconst __farmGetRouteExport = (name) => Reflect.get(__farmRoutesModule, name);\nconst __farmRouteCandidates = [\n __farmGetRouteExport(\"default\"),\n __farmGetRouteExport(\"routes\"),\n __farmGetRouteExport(\"Route\"),\n];\nlet __farmRoutes = [];\nfor (const __farmCandidate of __farmRouteCandidates) {\n __farmRoutes = __farmRouteListFromCandidate(__farmCandidate);\n if (__farmRoutes.length > 0) break;\n}\n\nif (__farmRoutes.length === 0) {\n __farmRoutes = Object.values(__farmRoutesModule).filter(__farmIsRouteDefinition);\n}\nconst __farmNormalizeRoutePath = (routePath) => {\n const withSlash = routePath && routePath.startsWith(\"/\") ? routePath : \"/\" + (routePath || \"\");\n const withoutTrailing = withSlash.length > 1 ? withSlash.replace(/\\\\/+$/, \"\") : withSlash;\n return withoutTrailing || \"/\";\n};\nconst __farmRoute = __farmRoutes.find((route) => (\n route &&\n route.kind === ${JSON.stringify(parsed.kind)} &&\n __farmNormalizeRoutePath(route.path) === ${JSON.stringify(parsed.routePath)}\n));\n\nif (!__farmRoute) {\n throw new Error(${JSON.stringify(\n `Programmatic ${parsed.kind} route \"${parsed.routePath}\" was not found in ${routeFile}.`,\n )});\n}\n\nconst __farmRouteModule = __farmRoute.kind === \"layout\"\n ? __farmCreateLayoutRouteModule(__farmRoute)\n : __farmCreatePageRouteModule(__farmRoute, {\n createElement: __farmCreateElement,\n Suspense: __farmSuspense,\n });\n\nexport const metadata = __farmRouteModule.metadata;\nexport const generateMetadata = __farmRouteModule.generateMetadata;\nconst __farmIsSearchSchema = (value) => value && typeof value.parse === \"function\";\nconst __farmGetSearchSchema = (search) => __farmIsSearchSchema(search) ? search : search?.schema;\nconst __farmGetSearchOptions = (search) => __farmIsSearchSchema(search) ? undefined : search;\nconst __farmSearchSchema = __farmGetSearchSchema(__farmRoute.search);\nconst __farmSearchOptions = __farmGetSearchOptions(__farmRoute.search);\nexport const __farmRouteSchemas = __farmRouteModule.__farmRouteSchemas;\nexport const __farmRouteSearch = __farmRouteModule.__farmRouteSearch;\nexport const __farmRouteData = __farmRouteModule.__farmRouteData;\nexport const __farmRouteGuard = __farmRouteModule.__farmRouteGuard;\nexport const __farmRouteParsesProps = __farmRouteModule.__farmRouteParsesProps;\nexport const __farmRouteComponents = __farmRouteModule.__farmRouteComponents;\nexport const __farmResolveRouteCanonicalPath =\n __farmRouteModule.__farmResolveRouteCanonicalPath;\nexport const ssg = __farmRouteModule.ssg;\nexport const dynamic = __farmRouteModule.dynamic;\nexport const revalidate = __farmRouteModule.revalidate;\nexport const ppr = __farmRouteModule.ppr;\nexport const getStaticPaths = __farmRouteModule.getStaticPaths;\n\nconst __farmParseSchema = (schema, value, label) => {\n if (!schema || typeof schema.parse !== \"function\") {\n return value;\n }\n\n try {\n return schema.parse(value);\n } catch (error) {\n throw new Error(\"Invalid \" + label + \" for route \" + JSON.stringify(__farmRoute.path) + \": \" + (error?.message || String(error)));\n }\n};\n\nconst __farmMarkRoutePropsResolved = (props) => ({\n ...props,\n __farmRoutePropsResolved: true,\n});\n\nconst __farmAddCanonicalPath = (props, canonicalPath) => (\n canonicalPath ? { ...props, __farmCanonicalPath: canonicalPath } : props\n);\n\nconst __farmStripRoutePropsMarker = (props) => {\n if (!props || props.__farmRoutePropsResolved !== true) {\n return props;\n }\n\n const {\n __farmRoutePropsResolved,\n __farmCanonicalPath,\n __farmRoutePropsPromise,\n ...componentProps\n } = props;\n return componentProps;\n};\n\nconst __farmCreateSearchParams = (value) => {\n const params = new URLSearchParams();\n for (const [key, item] of Object.entries(value || {})) {\n if (item == null) continue;\n const values = Array.isArray(item) ? item : [item];\n for (const entry of values) {\n if (entry != null) params.append(key, String(entry));\n }\n }\n return params;\n};\n\nconst __farmComparable = (value) => {\n if (Array.isArray(value)) return value.map(__farmComparable);\n if (value && typeof value === \"object\") {\n return Object.keys(value).sort().reduce((output, key) => {\n output[key] = __farmComparable(value[key]);\n return output;\n }, {});\n }\n return value;\n};\n\nconst __farmEqual = (left, right) => (\n JSON.stringify(__farmComparable(left)) === JSON.stringify(__farmComparable(right))\n);\n\nconst __farmReadSearchValue = (value, key) => (\n value && typeof value === \"object\" ? value[key] : undefined\n);\n\nconst __farmParseDefaultSearch = () => {\n if (!__farmSearchSchema) return undefined;\n try {\n const value = __farmSearchSchema.parse({});\n return value && typeof value === \"object\" ? value : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst __farmResolveCanonicalPath = (rawSearch, parsedSearch, path) => {\n if (!__farmSearchOptions?.temporary?.length && !__farmSearchOptions?.stripDefaults) {\n return undefined;\n }\n\n const params = __farmCreateSearchParams(rawSearch);\n const original = params.toString();\n\n for (const key of __farmSearchOptions.temporary || []) {\n params.delete(key);\n }\n\n if (__farmSearchOptions.stripDefaults) {\n const defaults = __farmParseDefaultSearch();\n if (defaults) {\n const keys = __farmSearchOptions.stripDefaults === true\n ? Array.from(new Set(Array.from(params.keys())))\n : [...__farmSearchOptions.stripDefaults];\n for (const key of keys) {\n if (params.has(key) && __farmEqual(__farmReadSearchValue(parsedSearch, key), __farmReadSearchValue(defaults, key))) {\n params.delete(key);\n }\n }\n }\n }\n\n const next = params.toString();\n if (next === original) return undefined;\n return next ? path + \"?\" + next : path;\n};\n\nexport async function __farmResolveRouteProps(props) {\n return typeof __farmRouteModule.__farmResolveRouteProps === \"function\"\n ? __farmRouteModule.__farmResolveRouteProps(props)\n : props;\n}\n\nconst __farmNeedsPageWrapper = __farmRoute.kind === \"page\" && !!(\n __farmRoute.params ||\n __farmRoute.search ||\n __farmRoute.data\n);\n\nasync function __farmProgrammaticPage(props) {\n const deferredRouteProps = props?.__farmRoutePropsPromise;\n const resolvedProps = props?.__farmRoutePropsResolved === true\n ? props\n : deferredRouteProps && typeof deferredRouteProps.then === \"function\"\n ? await deferredRouteProps\n : await __farmResolveRouteProps(props);\n\n return __farmCreateElement(\n __farmRoute.component,\n __farmStripRoutePropsMarker(resolvedProps)\n );\n}\n\nexport default __farmRouteModule.default;\n`;\n}\n\nfunction generateProgrammaticApiRouteModule(routePath: string, routeFile: string): string {\n return `\nimport * as __farmRoutesModule from ${JSON.stringify(routeFile)};\n\nconst __farmIsRouteDefinition = (value) => (\n value && typeof value === \"object\" && (\n value.kind === \"page\" ||\n value.kind === \"layout\" ||\n value.kind === \"api\" ||\n value.kind === \"redirect\"\n )\n);\nconst __farmRouteListFromCandidate = (candidate) => {\n if (Array.isArray(candidate)) return candidate;\n if (Array.isArray(candidate?.routes)) return candidate.routes;\n if (__farmIsRouteDefinition(candidate)) return [candidate];\n return [];\n};\nconst __farmGetRouteExport = (name) => Reflect.get(__farmRoutesModule, name);\nconst __farmRouteCandidates = [\n __farmGetRouteExport(\"default\"),\n __farmGetRouteExport(\"routes\"),\n __farmGetRouteExport(\"Route\"),\n];\nlet __farmRoutes = [];\nfor (const __farmCandidate of __farmRouteCandidates) {\n __farmRoutes = __farmRouteListFromCandidate(__farmCandidate);\n if (__farmRoutes.length > 0) break;\n}\nif (__farmRoutes.length === 0) {\n __farmRoutes = Object.values(__farmRoutesModule).filter(__farmIsRouteDefinition);\n}\nconst __farmNormalizeRoutePath = (value) => {\n const withSlash = value && value.startsWith(\"/\") ? value : \"/\" + (value || \"\");\n return withSlash.length > 1 ? withSlash.replace(/\\\\/+$/, \"\") : withSlash;\n};\nconst __farmRoute = __farmRoutes.find((route) => (\n route?.kind === \"api\" &&\n __farmNormalizeRoutePath(route.path) === ${JSON.stringify(routePath)}\n));\n\nif (!__farmRoute) {\n throw new Error(${JSON.stringify(\n `Programmatic api route \"${routePath}\" was not found in ${routeFile}.`,\n )});\n}\n\nexport const GET = __farmRoute.methods.GET;\nexport const HEAD = __farmRoute.methods.HEAD;\nexport const QUERY = __farmRoute.methods.QUERY;\nexport const POST = __farmRoute.methods.POST;\nexport const PUT = __farmRoute.methods.PUT;\nexport const DELETE = __farmRoute.methods.DELETE;\nexport const PATCH = __farmRoute.methods.PATCH;\nexport const OPTIONS = __farmRoute.methods.OPTIONS;\n`.trim();\n}\n\nfunction toProgrammaticRouteImportSpecifier(filePath: string, root?: string): string {\n return root ? toViteModuleId(filePath, root) : filePath;\n}\n\ntype RouteModuleLike = {\n __farmRouteParsesProps?: boolean;\n __farmResolveRouteProps?: (props: {\n params: Record<string, string>;\n searchParams: Promise<Record<string, string | string[] | undefined>>;\n path: string;\n [key: string]: unknown;\n }) => Promise<Record<string, unknown>>;\n __farmRouteSchemas?: {\n params?: { parse?: (value: unknown) => unknown };\n search?: { parse?: (value: unknown) => unknown };\n };\n};\n\nasync function parseRouteModuleProps(\n routeModule: RouteModuleLike,\n input: {\n props: {\n params: Record<string, string>;\n searchParams: Promise<Record<string, string | string[] | undefined>>;\n path: string;\n [key: string]: unknown;\n };\n search: Record<string, string | string[] | undefined>;\n routePath: string;\n },\n): Promise<Record<string, unknown>> {\n if (typeof routeModule.__farmResolveRouteProps === \"function\") {\n return await routeModule.__farmResolveRouteProps(input.props);\n }\n\n if (routeModule.__farmRouteParsesProps) {\n return {\n ...input.props,\n search: input.search,\n };\n }\n\n const schemas = routeModule.__farmRouteSchemas;\n const params = parseRouteModuleSchema(\n schemas?.params,\n input.props.params,\n \"params\",\n input.routePath,\n );\n const search = parseRouteModuleSchema(schemas?.search, input.search, \"search\", input.routePath);\n\n return {\n ...input.props,\n params,\n search,\n searchParams: Promise.resolve(search as Record<string, string | string[] | undefined>),\n };\n}\n\nfunction parseRouteModuleSchema(\n schema: { parse?: (value: unknown) => unknown } | undefined,\n value: unknown,\n label: string,\n routePath: string,\n): unknown {\n if (!schema || typeof schema.parse !== \"function\") {\n return value;\n }\n\n try {\n return schema.parse(value);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid ${label} for route \"${routePath}\": ${message}`);\n }\n}\n\nfunction generateClientCode(\n integrationProviders: ReturnType<typeof getIntegrationProviders> = [],\n documentNavigationMatchers: string[] = [],\n docsSearchClientRuntime = EMPTY_FARM_DOCS_SEARCH_CLIENT_RUNTIME,\n devtoolsClientRuntime = \"\",\n plugins: readonly FarmPlugin[] = [],\n root = process.cwd(),\n srcDir = \"src\",\n publicRuntimeConfig: Record<string, unknown> | undefined = undefined,\n docsAdapterReact?: string,\n renderer: FarmRenderer = REACT_RENDERER,\n isolatedHydrationEnabled = false,\n trailingSlash = false,\n basePath = \"/\",\n clientCachePersistence: ClientCachePersistenceEntryCode = { imports: \"\", init: \"\" },\n): string {\n const providerClientCode = generateFarmIntegrationProviderClientCode(integrationProviders, root);\n const clientPluginEntry = generateFarmClientPluginEntryCode(\n plugins,\n root,\n srcDir,\n publicRuntimeConfig,\n );\n const rendererClientImports = isReactRenderer(renderer)\n ? `import React from 'react'\\nimport { hydrateRoot, createRoot } from 'react-dom/client'`\n : `import React, { hydrateRoot, createRoot } from ${JSON.stringify(renderer.client)}`;\n const isolatedHydrationImport = isolatedHydrationEnabled\n ? `import { createFarmIsolatedHydrationRuntime, wrapFarmIsolatedClientGraph } from '@farm.js/core/internal/isolated-boundary'`\n : \"\";\n const docsAdapterImportBlock = docsAdapterReact\n ? `import * as FarmDocsAdapterReact from ${JSON.stringify(docsAdapterReact)};\n\nasync function hydrateFarmDocsAdapterRuntime() {\n const runtime = window.__FARM_DOCS_ADAPTER__;\n if (!runtime) return false;\n if (typeof FarmDocsAdapterReact.hydrateFarmDocs !== 'function') {\n throw new Error('The configured Farm docs adapter does not export hydrateFarmDocs().');\n }\n FarmDocsAdapterReact.hydrateFarmDocs({\n config: runtime.config || {},\n data: runtime.data,\n });\n return true;\n}`\n : `async function hydrateFarmDocsAdapterRuntime() { return false; }`;\n const isolatedHydrationRuntime = isolatedHydrationEnabled\n ? `const farmIsolatedHydrationRuntime = createFarmIsolatedHydrationRuntime({\n ReactRuntime: React,\n hydrateRoot,\n load: (reference) => import(/* @vite-ignore */ reference),\n schedule: scheduleFarmIslandHydration,\n wrap: wrapWithIntegrationProviders,\n});\nwindow.__FARM_ISOLATED_HYDRATION_RUNTIME__ = farmIsolatedHydrationRuntime;\n\nfunction disposeFarmIsolatedClientBoundaries(scope) {\n farmIsolatedHydrationRuntime.dispose(scope);\n}\n\nasync function hydrateFarmIsolatedClientBoundaries(scope = document, signal) {\n await farmIsolatedHydrationRuntime.hydrate(scope, signal);\n}`\n : \"\";\n\n return `\n${rendererClientImports}\n${isolatedHydrationImport}\nimport { installChunkErrorRecovery, SPARouter } from '@farm.js/core/client'\nimport { createClientPluginManager } from '@farm.js/core/plugin/client'\nimport { isFarmRouteActive } from '@farm.js/core/router'\nimport { scheduleFarmIslandHydration, searchParamsToObject, setFarmBasePath, setFarmTrailingSlashPreference, stripFarmBasePath } from '@farm.js/core/internal/client-runtime'\nimport { reviveDeferredData } from '@farm.js/core/deferred'\nimport {\n createFarmDeploymentMismatchError,\n createFarmDeploymentRequestHeaders,\n isFarmDeploymentMismatchResponse,\n} from '@farm.js/core/deployment'\n${providerClientCode.imports}\n${clientPluginEntry.imports}\n${clientCachePersistence.imports}\n${docsSearchClientRuntime}\n${devtoolsClientRuntime}\n${docsAdapterImportBlock}\n\n// ⭐ Farm.js SPA Client Runtime (TanStack Start pattern)\n// Uses manifest-based chunk loading - NO HTML fetching!\n// Manifest is inlined in HTML via window.__FARM_MANIFEST__\n\n// Expose React for HMR\nwindow.__FARM_REACT__ = React;\nconst integrationDocumentNavigationMatchers = ${JSON.stringify(documentNavigationMatchers)};\n\nsetFarmBasePath(${JSON.stringify(basePath)});\nsetFarmTrailingSlashPreference(${JSON.stringify(trailingSlash)});\ninstallChunkErrorRecovery();\n${clientCachePersistence.init}\n\nlet reactRoot = null;\n${isolatedHydrationRuntime}\n\nfunction matchesDocumentNavigation(pathname) {\n pathname = stripFarmBasePath(pathname);\n return integrationDocumentNavigationMatchers.some((matcher) => {\n if (matcher === '/(.*)' || matcher === '*') {\n return true;\n }\n if (matcher.endsWith('(.*)')) {\n const prefix = matcher.slice(0, -4);\n return pathname === prefix || pathname.startsWith(prefix + '/');\n }\n return matcher === pathname;\n });\n}\n\n${providerClientCode.runtime}\n\nwindow.__FARM_WRAP_PROVIDERS__ = wrapWithIntegrationProviders;\n${isolatedHydrationEnabled ? \"window.__FARM_WRAP_CLIENT_GRAPH__ = (element) => wrapFarmIsolatedClientGraph(React, element);\" : \"\"}\n\n// Get manifest from window (inlined by server in HTML)\n// Fallback to empty manifest if not available yet\nconst getManifest = () => window.__FARM_MANIFEST__ || { routes: {}, layouts: {}, slots: [], clientEntry: '', sharedAssets: [] };\n\n// ====== CLIENT-SIDE ROUTE MATCHING ======\n// Matches URL to route using manifest (no server request!)\n\nfunction matchSegment(urlSegment, routeSegment) {\n if (!routeSegment.isDynamic) {\n return urlSegment === routeSegment.segment ? {} : null;\n }\n if (routeSegment.isCatchAll) {\n return { [routeSegment.segment]: urlSegment };\n }\n return { [routeSegment.segment]: urlSegment };\n}\n\nfunction decodeRouteSegment(segment) {\n try {\n return decodeURIComponent(segment);\n } catch {\n return segment;\n }\n}\n\nfunction matchRoute(pathname, routeSegments) {\n const normalizedPath = pathname === '/' ? '' : pathname.replace(/^\\\\//, '').replace(/\\\\/$/, '');\n const pathSegments = normalizedPath ? normalizedPath.split('/').map(decodeRouteSegment) : [];\n \n // Handle catch-all routes\n const hasCatchAll = routeSegments.some(s => s.isCatchAll);\n \n if (!hasCatchAll && pathSegments.length !== routeSegments.length) {\n return null;\n }\n \n const params = {};\n \n for (let i = 0; i < routeSegments.length; i++) {\n const routeSeg = routeSegments[i];\n const pathSeg = pathSegments[i];\n\n if (routeSeg.isCatchAll) {\n // Collect remaining segments\n params[routeSeg.segment] = pathSegments.slice(i).join('/');\n return params;\n }\n \n if (pathSeg === undefined) {\n if (routeSeg.isOptional) continue;\n return null;\n }\n \n const match = matchSegment(pathSeg, routeSeg);\n if (match === null) return null;\n Object.assign(params, match);\n }\n \n return params;\n}\n\nfunction findRoute(pathname) {\n pathname = stripFarmBasePath(pathname);\n const manifest = getManifest();\n const routes = Object.values(manifest.routes);\n \n for (const route of routes) {\n const params = matchRoute(pathname, route.segments);\n if (params !== null) {\n return { route, params };\n }\n }\n return null;\n}\n\nfunction findLayouts(pathname) {\n pathname = stripFarmBasePath(pathname);\n const manifest = getManifest();\n const layouts = Object.values(manifest.layouts);\n const matchingLayouts = [];\n \n for (const layout of layouts) {\n if (layout.pattern === '/' || isFarmRouteActive(layout.pattern, pathname, { exact: false })) {\n matchingLayouts.push(layout);\n }\n }\n \n return matchingLayouts.sort((a, b) => a.pattern.length - b.pattern.length);\n}\n\n// ====== SPA ROUTER ======\n// Client-side router - no server requests needed!\n\nclass LegacyManifestSPARouter {\n constructor() {\n this.moduleCache = new Map();\n this.prefetchingUrls = new Set();\n this.observers = new Map();\n \n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', this.handlePopState.bind(this));\n }\n }\n\n setNavigationHandler(handler) {\n this.onNavigate = handler;\n }\n\n async navigate(href, options = {}) {\n const { replace = false, scroll = true } = options;\n const url = new URL(href, window.location.origin);\n const pathname = url.pathname;\n const search = url.search;\n const fullPath = pathname + search;\n\n if (matchesDocumentNavigation(pathname)) {\n if (replace) {\n window.location.replace(url.toString());\n } else {\n window.location.assign(url.toString());\n }\n return;\n }\n\n // Same page - update fragment history without loading route data.\n if (pathname === window.location.pathname && search === window.location.search) {\n if (url.hash === window.location.hash) return;\n if (replace) {\n window.history.replaceState(window.history.state, '', url);\n } else {\n window.history.pushState(window.history.state, '', url);\n }\n if (scroll) {\n if (url.hash) document.querySelector(url.hash)?.scrollIntoView();\n else window.scrollTo(0, 0);\n }\n return;\n }\n\n // Save scroll position\n this.saveScrollPosition(window.location.pathname + window.location.search);\n\n try {\n // CLIENT-SIDE route matching - no server request!\n const match = findRoute(pathname);\n if (!match) {\n console.warn('[Farm.js] Route not found:', pathname);\n window.location.href = href;\n return;\n }\n\n const { route, params } = match;\n\n // Parse search params\n const searchParams = searchParamsToObject(url.searchParams);\n\n // Build page data from manifest (no server request!)\n const pageData = {\n route: route, // Full route entry from manifest\n params,\n searchParams,\n layouts: findLayouts(pathname),\n };\n\n // Update URL\n if (replace) {\n window.history.replaceState({ path: fullPath }, '', fullPath);\n } else {\n window.history.pushState({ path: fullPath }, '', fullPath);\n }\n\n // Navigate using the handler\n if (this.onNavigate) {\n await this.onNavigate(pageData);\n }\n applyCanonicalPathFromProps(currentPageProps);\n\n // Handle scroll\n if (scroll) {\n if (url.hash) {\n const element = document.querySelector(url.hash);\n if (element) element.scrollIntoView();\n } else {\n window.scrollTo(0, 0);\n }\n }\n } catch (error) {\n console.error('[Farm.js] Navigation error:', error);\n window.location.href = href; // Fallback\n }\n }\n\n async prefetch(href) {\n // Prefetching disabled in dev mode to avoid Vite dep optimization issues\n // In production, assets are already bundled and prefetched via link tags\n if (import.meta.env?.DEV) return;\n \n const url = new URL(href, window.location.origin);\n const pathname = url.pathname;\n\n if (this.prefetchingUrls.has(pathname)) return;\n\n // Find route in manifest\n const match = findRoute(pathname);\n if (!match) return;\n\n // Only prefetch routes that will hydrate on the client.\n if (!match.route.isClientComponent && !match.route.shouldHydrate) return;\n if (match.route.islandStrategy && match.route.islandStrategy !== 'load') return;\n\n const modulePath = match.route.modulePath;\n if (this.moduleCache.has(modulePath)) return;\n\n this.prefetchingUrls.add(pathname);\n try {\n // Prefetch by importing the module (Vite caches it)\n const module = await import(/* @vite-ignore */ modulePath);\n this.moduleCache.set(modulePath, module);\n pageModuleCache.set(modulePath, module);\n } catch (error) {\n // Silently fail for prefetch\n } finally {\n this.prefetchingUrls.delete(pathname);\n }\n }\n\n observeForPrefetch(element) {\n if (typeof IntersectionObserver === 'undefined') return;\n const href = element.getAttribute('href');\n if (!href || this.isExternalUrl(href)) return;\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setTimeout(() => this.prefetch(href), 100);\n observer.unobserve(element);\n this.observers.delete(element);\n }\n }\n },\n { rootMargin: '200px' }\n );\n observer.observe(element);\n this.observers.set(element, observer);\n }\n\n unobserveForPrefetch(element) {\n const observer = this.observers.get(element);\n if (observer) {\n observer.unobserve(element);\n this.observers.delete(element);\n }\n }\n\n async handlePopState(event) {\n if (document.documentElement.dataset.farmDocsRuntime === 'true') return;\n\n const pathname = window.location.pathname;\n const search = window.location.search;\n \n try {\n // Client-side route matching for back/forward\n const match = findRoute(pathname);\n if (!match) {\n window.location.reload();\n return;\n }\n\n const { route, params } = match;\n const url = new URL(window.location.href);\n const searchParams = searchParamsToObject(url.searchParams);\n\n const pageData = {\n route: route,\n params,\n searchParams,\n layouts: findLayouts(pathname),\n };\n\n if (this.onNavigate) await this.onNavigate(pageData);\n this.restoreScrollPosition(pathname + search);\n } catch (error) {\n console.error('[Farm.js] Popstate error:', error);\n window.location.reload();\n }\n }\n\n isExternalUrl(href) {\n return href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//');\n }\n\n saveScrollPosition(path) {\n try {\n sessionStorage.setItem('farm-scroll-' + path, JSON.stringify({ x: window.scrollX, y: window.scrollY }));\n } catch {}\n }\n\n restoreScrollPosition(path) {\n try {\n const saved = sessionStorage.getItem('farm-scroll-' + path);\n if (saved) {\n const { x, y } = JSON.parse(saved);\n setTimeout(() => window.scrollTo(x, y), 0);\n }\n } catch {}\n }\n}\n\n// Initialize the SPA router\nconst spaRouter = new SPARouter({\n shouldUseDocumentNavigation: matchesDocumentNavigation,\n});\nwindow.__FARM_SPA_ROUTER__ = spaRouter;\n\nconst farmClientRuntime = createClientPluginManager(\n ${clientPluginEntry.registrations},\n {\n router: spaRouter,\n isDev: import.meta.env?.DEV === true,\n isProd: import.meta.env?.PROD === true,\n deploymentId: window.__FARM_DEPLOYMENT_ID__,\n },\n);\nspaRouter.setClientPluginManager(farmClientRuntime);\nwindow.__FARM_CLIENT_RUNTIME__ = farmClientRuntime;\nvoid farmClientRuntime.start();\n\nif (import.meta.hot) {\n import.meta.hot.dispose(() => {\n void farmClientRuntime.close('hmr');\n });\n}\n\n// Cache for loaded page modules\nconst pageModuleCache = new Map();\n\n// Current page state for React rendering\nlet currentPageComponent = null;\nlet currentPageProps = {};\nlet appRoot = null;\n\n// Layout modules are cached independently so nested client-aware layouts are\n// composed with the same root-to-leaf structure that the server rendered.\nconst layoutComponentCache = new Map();\n\n// Track if we've taken over rendering from SSR\nlet hasClientTakenOver = false;\nconst routeSlotRoots = new Map();\nconst routeSlotDefinitions = new Map();\nlet activeRouteInterception = null;\nlet pendingPageHydrationController = null;\n\nfunction cancelPendingPageHydration() {\n pendingPageHydrationController?.abort();\n pendingPageHydrationController = null;\n}\n\nfunction normalizeServerProps(rawProps) {\n const props = rawProps && typeof rawProps === 'object' ? { ...rawProps } : {};\n if (props.middleware && props.middleware.data && !(props.middleware.data instanceof Map)) {\n props.middleware = { ...props.middleware, data: new Map(Object.entries(props.middleware.data)) };\n }\n if (props.context && props.context.data && !(props.context.data instanceof Map)) {\n props.context = { ...props.context, data: new Map(Object.entries(props.context.data)) };\n }\n return props;\n}\n\nfunction getRouteSlotKey(slot) {\n return slot.ownerPattern + ':' + slot.name;\n}\n\nasync function renderRouteSlot(slot, mode = 'render') {\n const container = document.getElementById(slot.containerId);\n if (!container || !slot.modulePath) return false;\n if (mode === 'intercept' && !slot.isClientComponent && !slot.shouldHydrate) {\n return false;\n }\n\n let slotModule = pageModuleCache.get(slot.modulePath);\n if (!slotModule) {\n slotModule = await import(/* @vite-ignore */ slot.modulePath);\n pageModuleCache.set(slot.modulePath, slotModule);\n }\n const SlotComponent = slotModule?.default;\n if (!SlotComponent) return false;\n\n const props = reviveDeferredData(\n normalizeServerProps(slot.props || {}),\n window.__FARM_DEFERRED_DATA__ || {},\n );\n let element = wrapWithIntegrationProviders(React.createElement(SlotComponent, props));\n ${isolatedHydrationEnabled ? \"element = wrapFarmIsolatedClientGraph(React, element);\" : \"\"}\n const key = getRouteSlotKey(slot);\n const existingRoot = routeSlotRoots.get(key);\n\n if (mode === 'hydrate') {\n if (existingRoot) return true;\n const root = hydrateRoot(container, element);\n routeSlotRoots.set(key, root);\n } else {\n if (existingRoot) {\n try { existingRoot.unmount(); } catch (error) {}\n }\n const root = createRoot(container);\n root.render(element);\n routeSlotRoots.set(key, root);\n }\n\n routeSlotDefinitions.set(key, slot);\n return true;\n}\n\nasync function hydrateInitialRouteSlots() {\n const slots = Array.isArray(window.__FARM_ROUTE_SLOTS__)\n ? window.__FARM_ROUTE_SLOTS__\n : [];\n let hydrated = false;\n\n for (const slot of slots) {\n routeSlotDefinitions.set(getRouteSlotKey(slot), slot);\n if (!slot.isClientComponent && !slot.shouldHydrate) continue;\n try {\n const slotHydrated = await renderRouteSlot(slot, 'hydrate');\n hydrated = slotHydrated || hydrated;\n if (slotHydrated) {\n replayPreHydrationClicks(document.getElementById(slot.containerId));\n }\n } catch (error) {\n console.warn('[Farm.js] Could not hydrate route slot:', slot.name, error);\n }\n }\n\n return hydrated;\n}\n\nasync function renderRouteInterception(pageData) {\n const slots = Array.isArray(pageData.routeSlots)\n ? pageData.routeSlots.filter((slot) => slot.interception)\n : [];\n if (!pageData.interception || slots.length === 0) return false;\n\n const previous = new Map();\n for (const slot of slots) {\n const key = getRouteSlotKey(slot);\n previous.set(key, routeSlotDefinitions.get(key) || null);\n if (!(await renderRouteSlot(slot, 'intercept'))) {\n return false;\n }\n }\n\n activeRouteInterception = {\n from: pageData.interception.from,\n slots,\n previous,\n };\n return true;\n}\n\nasync function clearRouteInterception(destination) {\n if (!activeRouteInterception) return false;\n const active = activeRouteInterception;\n activeRouteInterception = null;\n\n for (const slot of active.slots) {\n const key = getRouteSlotKey(slot);\n const root = routeSlotRoots.get(key);\n if (root) {\n try { root.unmount(); } catch (error) {}\n routeSlotRoots.delete(key);\n }\n\n const previous = active.previous.get(key);\n if (previous && (previous.isClientComponent || previous.shouldHydrate)) {\n await renderRouteSlot(previous, 'render');\n } else {\n const container = document.getElementById(slot.containerId);\n if (container) container.replaceChildren();\n if (previous) routeSlotDefinitions.set(key, previous);\n else routeSlotDefinitions.delete(key);\n }\n }\n\n if (!active.from) return false;\n const background = new URL(active.from, window.location.origin);\n return destination === background.pathname + background.search;\n}\n\nfunction applyCanonicalPathFromProps(props) {\n const canonicalPath = props && typeof props.__farmCanonicalPath === 'string'\n ? props.__farmCanonicalPath\n : null;\n if (!canonicalPath) return;\n const currentPath = window.location.pathname + window.location.search;\n if (canonicalPath === currentPath) return;\n window.history.replaceState({ ...(window.history.state || {}), path: canonicalPath }, '', canonicalPath);\n}\n\nfunction replayPreHydrationClicks(container = null) {\n if (!container) {\n markFarmHydrated();\n } else {\n container.dataset.farmIslandHydrated = 'true';\n }\n\n const queue = Array.isArray(window.__FARM_PREHYDRATION_CLICK_QUEUE__)\n ? window.__FARM_PREHYDRATION_CLICK_QUEUE__\n : [];\n if (queue.length === 0) return;\n\n const queuedClicks = [];\n const remainingClicks = [];\n for (const queuedClick of queue) {\n const target = queuedClick?.target;\n if (!container || (target instanceof Node && container.contains(target))) {\n queuedClicks.push(queuedClick);\n } else {\n remainingClicks.push(queuedClick);\n }\n }\n queue.splice(0, queue.length, ...remainingClicks);\n for (const queuedClick of queuedClicks) {\n const target = queuedClick?.target;\n if (!target || typeof target.click !== 'function') continue;\n if (target.isConnected === false) continue;\n setTimeout(() => target.click(), 0);\n }\n}\n\nfunction markFarmHydrated() {\n window.__FARM_HYDRATED__ = true;\n document.documentElement.dataset.farmHydrated = 'true';\n}\n\nasync function buildClientHydrationElement(\n PageComponent,\n pageProps,\n loadingModuleOverride,\n) {\n let element = React.createElement(PageComponent, pageProps);\n const loadingModulePath = loadingModuleOverride === undefined\n ? window.__FARM_LOADING_MODULE__\n : loadingModuleOverride;\n\n if (loadingModulePath) {\n try {\n const loadingModule = await import(/* @vite-ignore */ loadingModulePath);\n const LoadingComponent = loadingModule?.default;\n if (LoadingComponent) {\n const loadingFallback = React.createElement(LoadingComponent, {\n params: pageProps?.params || {},\n path: pageProps?.path || window.location.pathname,\n });\n element = React.createElement(React.Suspense, { fallback: loadingFallback }, element);\n }\n } catch (error) {\n console.error(\n '[Farm.js] Loading boundary failed to load and was skipped: ' + loadingModulePath,\n error,\n );\n }\n }\n\n return element;\n}\n\nasync function loadLayoutComponents(layouts = []) {\n const loadedLayouts = [];\n\n for (const layout of layouts) {\n if (!layout?.modulePath) continue;\n try {\n let LayoutComponent = layoutComponentCache.get(layout.modulePath);\n if (!LayoutComponent) {\n const layoutModule = await import(/* @vite-ignore */ layout.modulePath);\n LayoutComponent = layoutModule.default;\n if (LayoutComponent) {\n layoutComponentCache.set(layout.modulePath, LayoutComponent);\n }\n }\n if (LayoutComponent) loadedLayouts.push({ ...layout, Component: LayoutComponent });\n } catch (error) {\n // Skipping the layout leaves the client tree different from the server's,\n // so React discards the server rendered markup for this branch, including\n // whatever the layout drew. Losing visible UI deserves more than a warning.\n console.error(\n '[Farm.js] Layout failed to load and was skipped: ' + layout.modulePath +\n '. The client tree no longer matches the server, so React will discard the ' +\n 'server rendered markup for this route, including anything this layout renders.',\n error,\n );\n }\n }\n\n return loadedLayouts;\n}\n\nfunction wrapWithLoadedLayouts(element, loadedLayouts, params) {\n let wrapped = element;\n for (let index = loadedLayouts.length - 1; index >= 0; index--) {\n const layout = loadedLayouts[index];\n wrapped = React.createElement(layout.Component, {\n children: wrapped,\n params,\n });\n wrapped = React.createElement('div', {\n 'data-farm-layout-boundary': 'true',\n 'data-farm-layout-pattern': layout.pattern,\n style: { display: 'contents' },\n }, wrapped);\n }\n return wrapped;\n}\n\nfunction getCurrentSearchParams() {\n const url = new URL(window.location.href);\n return searchParamsToObject(url.searchParams);\n}\n\nfunction parseClientRouteSchema(schema, value, label) {\n if (!schema || typeof schema.parse !== 'function') {\n return value;\n }\n\n try {\n return schema.parse(value);\n } catch (error) {\n throw new Error('Invalid route ' + label + ': ' + (error?.message || String(error)));\n }\n}\n\nasync function buildRouteComponentProps(pageModule, params, searchParams, path, existingProps) {\n if (existingProps?.__farmRoutePropsResolved === true) {\n const revivedProps = reviveDeferredData(\n existingProps,\n window.__FARM_DEFERRED_DATA__ || {},\n );\n window.__FARM_PROPS__ = revivedProps;\n return {\n ...revivedProps,\n searchParams: Promise.resolve(revivedProps.search ?? revivedProps.searchParams ?? {}),\n path: revivedProps.path || path,\n };\n }\n\n if (typeof pageModule?.__farmResolveRouteProps === 'function') {\n const rawProps = {\n ...(existingProps || {}),\n params,\n searchParams: Promise.resolve(searchParams),\n path,\n };\n // Keep top-level route errors inside the router's navigation transaction.\n // Explicit defer() values can still suspend nested UI after this resolves.\n return await pageModule.__farmResolveRouteProps(rawProps);\n }\n\n const schemas = pageModule?.__farmRouteSchemas;\n const parsedParams = parseClientRouteSchema(schemas?.params, params, 'params');\n const parsedSearch = parseClientRouteSchema(schemas?.search, searchParams, 'search');\n\n return {\n ...(existingProps || {}),\n params: parsedParams,\n search: parsedSearch,\n searchParams: schemas ? Promise.resolve(parsedSearch) : parsedSearch,\n path,\n };\n}\n\nasync function buildWrappedHydrationElement(PageComponent, pageProps, layouts = []) {\n const loadedLayouts = await loadLayoutComponents(layouts);\n const pageElement = await buildClientHydrationElement(PageComponent, pageProps);\n const wrappedTree = wrapWithLoadedLayouts(\n pageElement,\n loadedLayouts,\n pageProps?.params || {},\n );\n return wrapWithIntegrationProviders(wrappedTree);\n}\n\nfunction createLayoutPageBoundary(\n pageShouldHydrate,\n islandStrategy,\n pageElement,\n serverHtml,\n) {\n const props = {\n id: '__farm_page__',\n 'data-farm-client': pageShouldHydrate ? 'true' : 'false',\n 'data-farm-layout-client': 'true',\n 'data-farm-island': 'page',\n 'data-farm-island-strategy': islandStrategy || 'load',\n };\n if (typeof serverHtml === 'string') {\n props.suppressHydrationWarning = true;\n props.dangerouslySetInnerHTML = { __html: serverHtml };\n return React.createElement('div', props);\n }\n return React.createElement('div', props, pageElement);\n}\n\nasync function tryHydrateImportedPage(\n container,\n route,\n params,\n layouts,\n useHydrate = false,\n existingProps = null,\n signal = null,\n hydrationOptions = {},\n) {\n const modulePath = route?.modulePath;\n if (!modulePath || signal?.aborted) {\n return false;\n }\n\n const pageShouldHydrate = hydrationOptions.pageShouldHydrate !== false;\n const layoutShouldHydrate = hydrationOptions.layoutShouldHydrate === true;\n const islandStrategy = hydrationOptions.islandStrategy || route.islandStrategy || 'load';\n let pageElement = null;\n\n if (pageShouldHydrate) {\n let pageModule = pageModuleCache.get(modulePath);\n if (!pageModule) {\n pageModule = await import(/* @vite-ignore */ modulePath);\n pageModuleCache.set(modulePath, pageModule);\n }\n if (signal?.aborted || !container?.isConnected) return false;\n\n const PageComponent = pageModule?.default;\n if (!PageComponent) return false;\n\n if (\n typeof PageComponent === 'function' &&\n PageComponent.constructor &&\n PageComponent.constructor.name === 'AsyncFunction'\n ) {\n console.warn(\n '[Farm.js] Skipping hydration for ' + modulePath +\n ': async server components cannot run in the browser. ' +\n 'Server-rendered HTML is preserved; move interactive UI into a \"use client\" child of a synchronous page.'\n );\n return false;\n }\n\n currentPageComponent = PageComponent;\n currentPageProps = await buildRouteComponentProps(\n pageModule,\n params,\n getCurrentSearchParams(),\n window.location.pathname,\n existingProps,\n );\n pageElement = await buildClientHydrationElement(\n PageComponent,\n currentPageProps,\n hydrationOptions.loadingModulePath,\n );\n } else if (layoutShouldHydrate) {\n currentPageProps = existingProps || { params };\n const serverPage = document.getElementById('__farm_page__');\n pageElement = createLayoutPageBoundary(\n false,\n islandStrategy,\n null,\n typeof hydrationOptions.serverHtml === 'string'\n ? hydrationOptions.serverHtml\n : serverPage ? serverPage.innerHTML : '',\n );\n }\n if (signal?.aborted || !container?.isConnected || !pageElement) return false;\n\n let wrappedElement;\n if (layoutShouldHydrate) {\n const loadedLayouts = await loadLayoutComponents(layouts);\n if (pageShouldHydrate) {\n pageElement = createLayoutPageBoundary(true, islandStrategy, pageElement);\n }\n const wrappedTree = wrapWithLoadedLayouts(pageElement, loadedLayouts, params);\n wrappedElement = wrapWithIntegrationProviders(wrappedTree);\n } else if (useHydrate && container?.id === '__farm_page__') {\n wrappedElement = wrapWithIntegrationProviders(pageElement);\n } else {\n wrappedElement = await buildWrappedHydrationElement(\n currentPageComponent,\n currentPageProps,\n layouts,\n );\n }\n if (signal?.aborted || !container?.isConnected) return false;\n\n ${isolatedHydrationEnabled ? \"wrappedElement = wrapFarmIsolatedClientGraph(React, wrappedElement);\" : \"\"}\n\n if (useHydrate) {\n try {\n reactRoot = hydrateRoot(container, wrappedElement);\n window.__FARM_REACT_ROOT__ = reactRoot;\n return true;\n } catch (error) {\n appRoot = createRoot(container);\n appRoot.render(wrappedElement);\n window.__FARM_REACT_ROOT__ = appRoot;\n hasClientTakenOver = true;\n return true;\n }\n }\n\n hasClientTakenOver = true;\n const existingRoot = appRoot || reactRoot;\n if (existingRoot && layoutShouldHydrate) {\n existingRoot.render(wrappedElement);\n appRoot = existingRoot;\n reactRoot = null;\n window.__FARM_REACT_ROOT__ = appRoot;\n return true;\n }\n if (reactRoot) { try { reactRoot.unmount(); } catch (e) {} reactRoot = null; }\n if (appRoot) { try { appRoot.unmount(); } catch (e) {} appRoot = null; }\n appRoot = createRoot(container);\n window.__FARM_REACT_ROOT__ = appRoot;\n appRoot.render(wrappedElement);\n return true;\n}\n\nfunction findLayoutBoundary(root, pattern) {\n const boundaries = root.querySelectorAll\n ? root.querySelectorAll('[data-farm-layout-boundary=\"true\"]')\n : [];\n for (const boundary of boundaries) {\n if (boundary.getAttribute('data-farm-layout-pattern') === pattern) return boundary;\n }\n return null;\n}\n\nfunction readActiveLayoutPatterns() {\n return Array.from(document.querySelectorAll('[data-farm-layout-boundary=\"true\"]'))\n .map((element) => element.getAttribute('data-farm-layout-pattern'))\n .filter(Boolean);\n}\n\nfunction activateFragmentScripts(root) {\n for (const script of Array.from(root.querySelectorAll?.('script') || [])) {\n const freshScript = document.createElement('script');\n for (const attribute of Array.from(script.attributes)) {\n freshScript.setAttribute(attribute.name, attribute.value);\n }\n freshScript.textContent = script.textContent || '';\n script.replaceWith(freshScript);\n }\n}\n\nfunction parseNavigationFragment(html) {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template.content;\n}\n\nfunction replaceNavigationBoundary(container, fragment, currentPatterns, nextPatterns) {\n let sharedCount = 0;\n while (\n sharedCount < currentPatterns.length &&\n sharedCount < nextPatterns.length &&\n currentPatterns[sharedCount] === nextPatterns[sharedCount]\n ) {\n sharedCount++;\n }\n\n const fragmentTreeRoot = nextPatterns.length > 0\n ? findLayoutBoundary(fragment, nextPatterns[0])\n : fragment.querySelector('#__farm_page__');\n const currentTarget = sharedCount < currentPatterns.length\n ? findLayoutBoundary(container, currentPatterns[sharedCount])\n : container.querySelector('#__farm_page__');\n const nextTarget = sharedCount < nextPatterns.length\n ? findLayoutBoundary(fragment, nextPatterns[sharedCount])\n : fragment.querySelector('#__farm_page__');\n\n if (!currentTarget || !nextTarget) {\n ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(container);\" : \"\"}\n container.replaceChildren(fragment);\n activateFragmentScripts(container);\n return container;\n }\n\n ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(currentTarget);\" : \"\"}\n currentTarget.replaceWith(nextTarget);\n activateFragmentScripts(nextTarget);\n if (fragmentTreeRoot && fragmentTreeRoot !== nextTarget) fragmentTreeRoot.remove();\n\n // React's completed streaming markup can include reveal instructions next\n // to the route tree. Execute those support nodes after the boundary exists.\n if (fragment.childNodes.length > 0) {\n const support = document.createElement('div');\n support.hidden = true;\n support.dataset.farmFragmentSupport = 'true';\n support.append(fragment);\n document.body.appendChild(support);\n activateFragmentScripts(support);\n setTimeout(() => support.remove(), 0);\n }\n return nextTarget;\n}\n\nlet activeLayoutPatterns = readActiveLayoutPatterns();\nlet activeLayoutShouldHydrate = window.__FARM_LAYOUT_SHOULD_HYDRATE__ === true;\n\n// ====== MANIFEST-DRIVEN HTML-FRAGMENT NAVIGATION ======\n// One page-data response carries both server HTML and the hydration plan.\nasync function renderPage(pageData) {\n const container = document.getElementById('root');\n if (!container) return;\n cancelPendingPageHydration();\n const destination = window.location.pathname + window.location.search;\n\n if (pageData.interception) {\n if (await renderRouteInterception(pageData)) return;\n window.location.assign(destination);\n return;\n }\n\n if (await clearRouteInterception(destination)) {\n return;\n }\n\n const manifestRoute = findRoute(window.location.pathname)?.route;\n const renderPlan = pageData.renderPlan || manifestRoute?.renderPlan;\n const hydrationMode = renderPlan?.hydration;\n const route = {\n modulePath: pageData.modulePath,\n isClientComponent: pageData.isClientComponent === true,\n pageShouldHydrate:\n hydrationMode === 'route-island' ||\n hydrationMode === 'route-and-layout-islands' ||\n pageData.pageShouldHydrate === true,\n layoutShouldHydrate:\n hydrationMode === 'layout-island' ||\n hydrationMode === 'route-and-layout-islands' ||\n pageData.layoutShouldHydrate === true,\n shouldHydrate: pageData.shouldHydrate === true,\n islandStrategy: renderPlan?.islandStrategy || pageData.islandStrategy || 'load',\n loadingModulePath: pageData.loadingModulePath,\n };\n const params = pageData.props?.params || {};\n const nextLayoutPatterns = Array.isArray(pageData.fragment?.layoutPatterns)\n ? pageData.fragment.layoutPatterns\n : [];\n const layouts = (pageData.layoutModules || []).map((modulePath, index) => ({\n modulePath,\n pattern: nextLayoutPatterns[index] || (index === 0 ? '/' : modulePath),\n }));\n const path = window.location.pathname + window.location.search;\n\n // A legacy server may omit the fragment. Keep one compatibility fallback,\n // but current servers send HTML in the page-data response and avoid this\n // second network round trip.\n const fetchAndSwapHTML = async () => {\n let fragmentHtml = pageData.fragment?.html;\n let layoutPatterns = nextLayoutPatterns;\n\n if (typeof fragmentHtml !== 'string') {\n const deploymentId = window.__FARM_DEPLOYMENT_ID__;\n const response = await fetch(path, {\n headers: createFarmDeploymentRequestHeaders(deploymentId, { 'Accept': 'text/html' }),\n });\n if (isFarmDeploymentMismatchResponse(response, deploymentId)) {\n const error = createFarmDeploymentMismatchError(response, deploymentId || 'unknown');\n window.dispatchEvent(new CustomEvent('farm:deployment-mismatch', { detail: error }));\n window.location.assign(path);\n return false;\n }\n const documentHtml = await response.text();\n const doc = new DOMParser().parseFromString(documentHtml, 'text/html');\n const nextRoot = doc.getElementById('root');\n if (!nextRoot) return false;\n fragmentHtml = nextRoot.innerHTML;\n layoutPatterns = Array.from(\n nextRoot.querySelectorAll('[data-farm-layout-boundary=\"true\"]'),\n ).map((element) => element.getAttribute('data-farm-layout-pattern')).filter(Boolean);\n }\n\n const fragment = parseNavigationFragment(fragmentHtml);\n const nextPage = fragment.querySelector('#__farm_page__');\n const pageShouldHydrate = route.pageShouldHydrate || route.isClientComponent;\n const layoutShouldHydrate = route.layoutShouldHydrate;\n ${\n isolatedHydrationEnabled\n ? `const hasIsolatedClientBoundaries = Boolean(\n fragment.querySelector('farm-client-boundary[data-farm-client-boundary]'),\n );\n const shouldHydrate =\n pageShouldHydrate || layoutShouldHydrate || (route.shouldHydrate && !hasIsolatedClientBoundaries);`\n : \"const shouldHydrate = route.shouldHydrate || pageShouldHydrate || layoutShouldHydrate;\"\n }\n\n // A React-owned layout can update in place. Rendering the same layout\n // component chain preserves its state while changing only the route child.\n if (activeLayoutShouldHydrate && layoutShouldHydrate && (appRoot || reactRoot)) {\n await tryHydrateImportedPage(\n container,\n route,\n params,\n layouts,\n false,\n pageData.props,\n null,\n {\n pageShouldHydrate,\n layoutShouldHydrate,\n islandStrategy: route.islandStrategy,\n serverHtml: nextPage ? nextPage.innerHTML : '',\n loadingModulePath: route.loadingModulePath,\n },\n );\n } else {\n ${isolatedHydrationEnabled ? \"let isolatedHydrationScope = container;\" : \"\"}\n if (activeLayoutShouldHydrate) {\n ${isolatedHydrationEnabled ? \"disposeFarmIsolatedClientBoundaries(container);\" : \"\"}\n if (appRoot) { try { appRoot.unmount(); } catch (error) {} appRoot = null; }\n if (reactRoot) { try { reactRoot.unmount(); } catch (error) {} reactRoot = null; }\n container.replaceChildren(fragment);\n activateFragmentScripts(container);\n } else {\n if (appRoot) { try { appRoot.unmount(); } catch (error) {} appRoot = null; }\n if (reactRoot) { try { reactRoot.unmount(); } catch (error) {} reactRoot = null; }\n delete window.__FARM_REACT_ROOT__;\n ${\n isolatedHydrationEnabled\n ? \"isolatedHydrationScope = replaceNavigationBoundary(container, fragment, activeLayoutPatterns, layoutPatterns) || container;\"\n : \"replaceNavigationBoundary(container, fragment, activeLayoutPatterns, layoutPatterns);\"\n }\n }\n\n const hydrationController = new AbortController();\n if (\n shouldHydrate${\n isolatedHydrationEnabled\n ? \" || (hasIsolatedClientBoundaries && !layoutShouldHydrate)\"\n : \"\"\n }\n ) {\n pendingPageHydrationController = hydrationController;\n }\n if (shouldHydrate) {\n const hydrationContainer = layoutShouldHydrate\n ? container\n : document.getElementById('__farm_page__') || container;\n const scheduledHydration = scheduleFarmIslandHydration({\n container: hydrationContainer,\n strategy: route.islandStrategy,\n signal: hydrationController.signal,\n hydrate: async () => {\n await tryHydrateImportedPage(\n hydrationContainer,\n route,\n params,\n layouts,\n true,\n pageData.props,\n hydrationController.signal,\n {\n pageShouldHydrate,\n layoutShouldHydrate,\n islandStrategy: route.islandStrategy,\n loadingModulePath: route.loadingModulePath,\n },\n );\n },\n });\n if (route.islandStrategy === 'load') {\n await scheduledHydration;\n } else {\n void scheduledHydration.catch((error) => {\n console.warn('[Farm.js] Deferred island hydration failed:', error);\n });\n }\n }\n ${\n isolatedHydrationEnabled\n ? `if (hasIsolatedClientBoundaries && !layoutShouldHydrate) {\n await hydrateFarmIsolatedClientBoundaries(\n isolatedHydrationScope,\n hydrationController.signal,\n );\n if (hydrationController.signal.aborted) return;\n }`\n : \"\"\n }\n }\n\n activeLayoutPatterns = layoutPatterns;\n activeLayoutShouldHydrate = layoutShouldHydrate;\n window.__FARM_LOADING_MODULE__ = route.loadingModulePath || null;\n return true;\n };\n\n try {\n await fetchAndSwapHTML();\n } catch (error) {\n console.error('[Farm.js] Render error:', error);\n // Fallback to full navigation\n window.location.href = path;\n }\n}\n\n// Set up the navigation handler\nspaRouter.setNavigationHandler(renderPage);\n\nasync function hydrate() {\n await farmClientRuntime.start();\n\n if (isFarmDocsSearchPage()) {\n await mountFarmDocsSearch();\n }\n\n if (await hydrateFarmDocsAdapterRuntime()) {\n return;\n }\n\n const rootContainer = document.getElementById('root')\n \n if (!rootContainer) {\n console.error('[Farm.js] Root container not found')\n return\n }\n\n try {\n // Check if this is a client component (set by SSR)\n const isClientComponent = window.__FARM_IS_CLIENT__ === true;\n const modulePath = window.__FARM_PAGE_MODULE__;\n ${\n isolatedHydrationEnabled\n ? `const hasIsolatedClientBoundaries =\n window.__FARM_HAS_ISOLATED_CLIENT_BOUNDARIES__ === true ||\n Boolean(rootContainer.querySelector('farm-client-boundary[data-farm-client-boundary]'));`\n : \"\"\n }\n\n let pageProps = normalizeServerProps(window.__FARM_PROPS__);\n applyCanonicalPathFromProps(pageProps);\n\n const pageShouldHydrate =\n typeof window.__FARM_PAGE_SHOULD_HYDRATE__ === 'boolean'\n ? window.__FARM_PAGE_SHOULD_HYDRATE__\n : isClientComponent ||\n findRoute(window.location.pathname)?.route?.shouldHydrate === true;\n const layoutShouldHydrate = window.__FARM_LAYOUT_SHOULD_HYDRATE__ === true;\n const shouldHydrate =\n window.__FARM_SHOULD_HYDRATE__ === true ||\n pageShouldHydrate ||\n layoutShouldHydrate;\n const hydratedSlots = await hydrateInitialRouteSlots();\n ${\n isolatedHydrationEnabled\n ? `if (hasIsolatedClientBoundaries && !pageShouldHydrate && !layoutShouldHydrate) {\n const hydrationController = new AbortController();\n pendingPageHydrationController = hydrationController;\n await hydrateFarmIsolatedClientBoundaries(rootContainer, hydrationController.signal);\n if (hydrationController.signal.aborted) return;\n return;\n }`\n : \"\"\n }\n if (!shouldHydrate) {\n if (hydratedSlots) replayPreHydrationClicks();\n return\n }\n if (!modulePath) {\n console.error('[Farm.js] No page module path found')\n return\n }\n\n // Get props - either from server-injected props or by matching the current URL\n if (!pageProps || !pageProps.params || Object.keys(pageProps.params).length === 0) {\n // Extract params from URL using manifest route matching (fallback)\n const pathname = window.location.pathname;\n const foundRoute = findRoute(pathname);\n pageProps = normalizeServerProps({\n params: foundRoute?.params || {},\n search: getCurrentSearchParams(),\n searchParams: getCurrentSearchParams(),\n path: pathname,\n });\n }\n currentPageProps = pageProps;\n\n // Prefer the exact root-to-leaf layout chain selected by the server. The\n // manifest lookup remains a fallback for generated/static responses.\n const layouts = Array.isArray(window.__FARM_LAYOUTS__)\n ? window.__FARM_LAYOUTS__\n : findLayouts(window.location.pathname);\n const pageContainer = layoutShouldHydrate\n ? rootContainer\n : document.getElementById('__farm_page__') || rootContainer;\n\n if (!pageContainer) {\n return\n }\n\n const currentRoute = findRoute(window.location.pathname)?.route;\n const islandStrategy = window.__FARM_ISLAND_STRATEGY__ || currentRoute?.islandStrategy || 'load';\n pageContainer.dataset.farmIsland = 'page';\n pageContainer.dataset.farmIslandStrategy = islandStrategy;\n\n const hydrationPathname = window.location.pathname;\n const hydrationController = new AbortController();\n pendingPageHydrationController = hydrationController;\n try {\n const pageHydration = scheduleFarmIslandHydration({\n container: pageContainer,\n strategy: islandStrategy,\n signal: hydrationController.signal,\n hydrate: async () => {\n if (\n hydrationController.signal.aborted ||\n !pageContainer.isConnected ||\n window.location.pathname !== hydrationPathname\n ) {\n return;\n }\n\n const hydrationSession = await farmClientRuntime.beginHydration({\n container: pageContainer,\n mode: shouldHydrate ? 'hydrate' : 'render',\n });\n\n let hydrated = false;\n try {\n if (hydrationController.signal.aborted || !pageContainer.isConnected) {\n await farmClientRuntime.failHydration(\n hydrationSession,\n new DOMException('Route hydration was cancelled', 'AbortError'),\n );\n return;\n }\n hydrated = await tryHydrateImportedPage(\n pageContainer,\n { modulePath },\n currentPageProps.params || {},\n layouts,\n shouldHydrate,\n currentPageProps,\n hydrationController.signal,\n {\n pageShouldHydrate,\n layoutShouldHydrate,\n islandStrategy,\n },\n );\n if (hydrationController.signal.aborted || !pageContainer.isConnected) {\n await farmClientRuntime.failHydration(\n hydrationSession,\n new DOMException('Route hydration was cancelled', 'AbortError'),\n );\n return;\n }\n await farmClientRuntime.completeHydration(hydrationSession);\n } catch (error) {\n await farmClientRuntime.failHydration(hydrationSession, error);\n throw error;\n }\n\n if (hydrated) {\n // The scheduler owns queue draining and exactly-once click replay.\n markFarmHydrated();\n return;\n }\n },\n });\n ${\n isolatedHydrationEnabled\n ? `const isolatedHydration =\n hasIsolatedClientBoundaries &&\n !layoutShouldHydrate\n ? hydrateFarmIsolatedClientBoundaries(rootContainer, hydrationController.signal)\n : Promise.resolve();\n await Promise.all([pageHydration, isolatedHydration]);`\n : \"await pageHydration;\"\n }\n } finally {\n if (pendingPageHydrationController === hydrationController) {\n pendingPageHydrationController = null;\n }\n }\n } catch (error) {\n console.error('[Farm.js] Hydration error:', error)\n }\n}\n\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', hydrate)\n} else {\n hydrate()\n}\n\n// ====== EVENT DELEGATION FOR LINKS ======\n// This catches all link clicks even without React hydration\n// This is essential for server component pages where React doesn't hydrate\n\nfunction isModifierEvent(e) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey);\n}\n\nfunction hasAbsoluteNavigationHref(href) {\n return /^[a-zA-Z][a-zA-Z\\\\d+.-]*:/.test(href) || href.startsWith('//');\n}\n\ndocument.addEventListener('click', function(event) {\n if (document.documentElement.dataset.farmDocsRuntime === 'true') return;\n\n // Find the closest anchor element\n let target = event.target;\n while (target && target.tagName !== 'A') {\n target = target.parentElement;\n }\n \n if (!target || target.tagName !== 'A') return;\n \n const href = target.getAttribute('href');\n if (!href) return;\n if (target.hasAttribute('download')) return;\n \n // Leave absolute URLs and non-HTTP schemes to the browser.\n if (hasAbsoluteNavigationHref(href)) return;\n \n // Don't intercept hash-only links\n if (href.startsWith('#')) return;\n \n // Don't intercept if target is set to open in new window\n const linkTarget = target.getAttribute('target');\n if (linkTarget && linkTarget !== '_self') return;\n \n // Don't intercept modifier clicks (Ctrl+Click = new tab)\n if (isModifierEvent(event)) return;\n \n // Don't intercept non-left clicks\n if (event.button !== 0) return;\n \n // Don't intercept if already prevented\n if (event.defaultPrevented) return;\n \n // Use SPA router\n event.preventDefault();\n const replace = target.hasAttribute('data-replace');\n const scroll = !target.hasAttribute('data-no-scroll');\n const viewTransitionValue = target.getAttribute('data-view-transition');\n const viewTransition = viewTransitionValue === 'auto'\n ? 'auto'\n : viewTransitionValue === 'true';\n \n spaRouter.navigate(href, { replace, scroll, viewTransition });\n});\n\nif (import.meta.hot) {\n import.meta.hot.on('vite:beforeUpdate', () => {\n // Clear module cache on HMR to pick up changes\n pageModuleCache.clear();\n })\n}\n`;\n}\n\nfunction generateServerCode(): string {\n return `\nexport { FarmApp, createFarmApp } from './app'\nexport { ServerRenderer } from './server/renderer'\nexport { RouteManager } from './routing/route-manager'\nexport * from './types'\n`;\n}\n\nfunction generateClientManifest(bundle: any): Record<string, any> {\n const manifest: Record<string, any> = {};\n\n for (const [fileName, chunk] of Object.entries(bundle)) {\n if ((chunk as any).type === \"chunk\") {\n manifest[fileName] = {\n id: fileName,\n chunks: [fileName],\n name: (chunk as any).name || fileName,\n };\n }\n }\n\n return manifest;\n}\n\nexport async function defineConfig(config: FarmVitePluginOptions = {}): Promise<UserConfig> {\n const tailwindcss = (await import(\"@tailwindcss/vite\")).default;\n const appRoot = path.resolve(config.root || process.cwd());\n if (config.extends?.length) {\n const { config: layeredConfig } = await import(\"./layers\").then(({ resolveFarmLayers }) =>\n resolveFarmLayers(config, {\n root: appRoot,\n mode: process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n }),\n );\n config = layeredConfig;\n }\n config.renderer = resolveFarmRenderer(config.renderer);\n const rendererVitePlugins = await loadFarmRendererVitePlugins(config.renderer, appRoot, {\n ssr: true,\n });\n // Node.js built-in module stubs for browser\n const nodeBuiltinStubs: Record<string, string> = {\n \"node:string_decoder\":\n \"data:text/javascript,export class StringDecoder { write(buf) { return ''; } end() { return ''; } }; export default StringDecoder;\",\n \"node:buffer\":\n \"data:text/javascript,export const Buffer = { from: () => ({}), alloc: () => ({}), isBuffer: () => false }; export default { Buffer };\",\n \"node:stream\":\n \"data:text/javascript,export class Readable {}; export class Writable {}; export class Transform {}; export default { Readable, Writable, Transform };\",\n \"node:util\":\n \"data:text/javascript,export const promisify = (fn) => fn; export const inspect = (obj) => String(obj); export default { promisify, inspect };\",\n \"node:events\":\n \"data:text/javascript,export class EventEmitter { on() {} off() {} emit() {} }; export default EventEmitter;\",\n \"node:path\":\n \"data:text/javascript,export const join = (...args) => args.join('/'); export const resolve = (...args) => args.join('/'); export default { join, resolve };\",\n \"node:fs\": \"data:text/javascript,export default {};\",\n \"node:url\":\n \"data:text/javascript,export const URL = globalThis.URL; export const URLSearchParams = globalThis.URLSearchParams; export default { URL, URLSearchParams };\",\n \"node:crypto\":\n \"data:text/javascript,export const randomUUID = () => crypto.randomUUID(); export default { randomUUID };\",\n \"node:os\":\n \"data:text/javascript,export const platform = () => 'browser'; export const homedir = () => '/'; export default { platform, homedir };\",\n \"node:child_process\": \"data:text/javascript,export default {};\",\n \"node:http\": \"data:text/javascript,export default {};\",\n \"node:https\": \"data:text/javascript,export default {};\",\n \"node:net\": \"data:text/javascript,export default {};\",\n \"node:tls\": \"data:text/javascript,export default {};\",\n \"node:zlib\": \"data:text/javascript,export default {};\",\n \"node:async_hooks\":\n \"data:text/javascript,export const AsyncLocalStorage = class {}; export default { AsyncLocalStorage };\",\n \"node:worker_threads\": \"data:text/javascript,export default {};\",\n \"node:perf_hooks\":\n \"data:text/javascript,export const performance = globalThis.performance; export default { performance };\",\n string_decoder:\n \"data:text/javascript,export class StringDecoder { write(buf) { return ''; } end() { return ''; } }; export default StringDecoder;\",\n buffer:\n \"data:text/javascript,export const Buffer = { from: () => ({}), alloc: () => ({}), isBuffer: () => false }; export default { Buffer };\",\n stream:\n \"data:text/javascript,export class Readable {}; export class Writable {}; export class Transform {}; export default { Readable, Writable, Transform };\",\n util: \"data:text/javascript,export const promisify = (fn) => fn; export const inspect = (obj) => String(obj); export default { promisify, inspect };\",\n events:\n \"data:text/javascript,export class EventEmitter { on() {} off() {} emit() {} }; export default EventEmitter;\",\n path: \"data:text/javascript,export const join = (...args) => args.join('/'); export const resolve = (...args) => args.join('/'); export default { join, resolve };\",\n fs: \"data:text/javascript,export default {};\",\n url: \"data:text/javascript,export const URL = globalThis.URL; export const URLSearchParams = globalThis.URLSearchParams; export default { URL, URLSearchParams };\",\n crypto:\n \"data:text/javascript,export const randomUUID = () => crypto.randomUUID(); export default { randomUUID };\",\n os: \"data:text/javascript,export const platform = () => 'browser'; export const homedir = () => '/'; export default { platform, homedir };\",\n child_process: \"data:text/javascript,export default {};\",\n http: \"data:text/javascript,export default {};\",\n https: \"data:text/javascript,export default {};\",\n net: \"data:text/javascript,export default {};\",\n tls: \"data:text/javascript,export default {};\",\n zlib: \"data:text/javascript,export default {};\",\n async_hooks:\n \"data:text/javascript,export const AsyncLocalStorage = class {}; export default { AsyncLocalStorage };\",\n worker_threads: \"data:text/javascript,export default {};\",\n perf_hooks:\n \"data:text/javascript,export const performance = globalThis.performance; export default { performance };\",\n };\n\n // Plugin to intercept __vite-browser-external requests\n const viteBrowserExternalPlugin = {\n name: \"farm:browser-external-stub\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n // Handle Vite's browser external markers\n if (id.includes(\"__vite-browser-external:\")) {\n const moduleName = id.replace(/__vite-browser-external:/, \"\");\n const stub = nodeBuiltinStubs[moduleName];\n if (stub) return stub;\n // Generic stub for unknown node modules\n return \"data:text/javascript,export default {};\";\n }\n // Handle direct node: imports\n if (id.startsWith(\"node:\")) {\n const stub = nodeBuiltinStubs[id];\n if (stub) return stub;\n return \"data:text/javascript,export default {};\";\n }\n return null;\n },\n };\n\n // Custom logger to replace Vite's default logs with Farm.js branding\n const pc = createCliColors();\n let serverStarted = false;\n let startTime = Date.now();\n\n const farmLogger = {\n info: (msg: string) => {\n // Suppress ALL Vite startup messages - we print our own Farm.js branded output\n if (\n msg.includes(\"VITE\") ||\n msg.includes(\"vite\") ||\n msg.includes(\"ready in\") ||\n msg.includes(\"Local:\") ||\n msg.includes(\"Network:\") ||\n msg.includes(\"➜\") ||\n msg.includes(\"Port\") ||\n msg.includes(\"trying another\")\n ) {\n return;\n }\n // Pass through other info messages\n console.log(msg);\n },\n warn: (msg: string) => console.warn(pc.yellow(msg)),\n warnOnce: (msg: string) => console.warn(pc.yellow(msg)),\n error: (msg: string) => console.error(pc.red(msg)),\n clearScreen: () => {},\n hasErrorLogged: () => false,\n hasWarned: false,\n };\n\n // Plugin to print Farm.js branding after server starts\n const farmBrandingPlugin = {\n name: \"farm:branding\",\n enforce: \"pre\" as const,\n configureServer(server: ViteDevServer) {\n startTime = Date.now();\n\n const originalListen = server.listen.bind(server);\n server.listen = async (port?: number, ...args: any[]) => {\n const result = await originalListen(port, ...args);\n if (!serverStarted) {\n serverStarted = true;\n const elapsed = Date.now() - startTime;\n const address = server.httpServer?.address();\n const resolvedPort =\n typeof address === \"object\" && address\n ? address.port\n : server.config.server.port || port || 3000;\n const hostConfig = server.config.server.host;\n const isExposed = hostConfig === true || hostConfig === \"0.0.0.0\";\n\n console.log(\"\");\n console.log(\n ` ${pc.bold(pc.green(\"Farm.js\"))} ${pc.dim(`v${FARM_VERSION}`)} ${pc.dim(`ready in ${elapsed}ms`)}`,\n );\n console.log(\"\");\n console.log(\n ` ${pc.dim(\"➜\")} ${pc.bold(\"Local:\")} ${pc.cyan(`http://localhost:${resolvedPort}/`)}`,\n );\n if (isExposed) {\n // Get actual network address\n const os = require(\"os\");\n const interfaces = os.networkInterfaces();\n for (const name of Object.keys(interfaces)) {\n for (const iface of interfaces[name] || []) {\n if (iface.family === \"IPv4\" && !iface.internal) {\n console.log(\n ` ${pc.dim(\"➜\")} ${pc.bold(\"Network:\")} ${pc.cyan(`http://${iface.address}:${resolvedPort}/`)}`,\n );\n break;\n }\n }\n }\n } else {\n console.log(\n ` ${pc.dim(\"➜\")} ${pc.bold(\"Network:\")} ${pc.dim(\"use --host to expose\")}`,\n );\n }\n console.log(\"\");\n }\n return result;\n };\n },\n };\n\n return {\n plugins: [\n createFarmThemeCssPlugin(config.theme, config.basePath),\n tailwindcss(),\n ...(rendererVitePlugins as any[]),\n viteBrowserExternalPlugin,\n farmI18nClientBridgePlugin(),\n farmPlugin(config),\n farmEnvironmentFunctionsPlugin(),\n farmBrandingPlugin,\n ],\n customLogger: farmLogger,\n clearScreen: false,\n optimizeDeps: {\n ...createFarmClientOptimizeDepsConfig(\n createFarmClientOptimizeDepsEntries(\n appRoot,\n getFarmAppDirectories({ ...config, root: appRoot }),\n ),\n config.renderer,\n ),\n // Pre-bundle every framework client-runtime entry with the renderer. Without\n // this, Vite can discover a linked Farm entry after the page has loaded,\n // regenerate the optimizer browser hash, and leave the browser runtime\n // holding a different renderer instance from a client component.\n // Exclude server-side packages from browser bundling\n exclude: [\n \"@farm.js/core/server\",\n \"@farm.js/core/api\",\n \"@farm.js/core/middleware\",\n \"@farm.js/core/config\",\n \"nitro\",\n \"h3\",\n \"vite\",\n \"esbuild\",\n \"rollup\",\n \"fsevents\",\n \"nf3\",\n \"better-call\",\n \"zod\",\n \"supports-color\",\n \"node-fetch\",\n \"consola\",\n \"mock-aws-s3\",\n \"aws-sdk\",\n \"nock\",\n ],\n },\n ssr: {\n noExternal: [\"farm\", \"@farm.js/core\"],\n // Externalize the renderer to prevent multiple runtime instances during SSR.\n external: [...(config.renderer.dedupe || [])],\n },\n resolve: {\n // Ensure one renderer instance across application and framework modules.\n dedupe: [...(config.renderer.dedupe || [])],\n // Stub out problematic server-only modules during dev mode\n alias: {\n ...getFarmLayerAliases(config.layers),\n ...createFarmSourceAlias(appRoot, config.srcDir),\n // Nitro internals that should not be resolved in browser\n \"supports-color\":\n \"data:text/javascript,export default false; export const supportsColor = false; export const stdout = false; export const stderr = false;\",\n \"@poppinss/dumper\": \"data:text/javascript,export default {};\",\n \"@poppinss/dumper/html\":\n \"data:text/javascript,export const createScript = () => ''; export const createStyleSheet = () => '';\",\n \"consola/basic\":\n \"data:text/javascript,export default { log: console.log, info: console.info, warn: console.warn, error: console.error };\",\n youch:\n \"data:text/javascript,export default class Youch { toJSON() { return {}; } toHTML() { return ''; } };\",\n // Add all node stubs to alias as well\n ...nodeBuiltinStubs,\n },\n },\n define: {\n __FARM_DEV__: JSON.stringify(process.env.NODE_ENV === \"development\"),\n __FARM_API_BASE_URL__: JSON.stringify(getFarmAPIBaseURLDefine(config)),\n __FARM_PUBLIC_ENV__: JSON.stringify(getPublicEnvDefine(config)),\n },\n };\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\n\ninterface DottedPathRouteMatcher {\n matchRoute(pathname: string): { route: unknown } | null | undefined;\n matchMetadataRoute(pathname: string): object | null;\n matchMetadataImage(pathname: string): object | null;\n}\n\n/**\n * Decide whether the dev server should hand a dotted request path to the\n * static pipeline instead of Farm's renderer. Dotted paths are usually asset\n * requests, but they are also how page routes with dotted segments and\n * application metadata routes (/manifest.webmanifest, /sitemap.xml,\n * /robots.txt, generated metadata images) are addressed, so the router is\n * only bypassed when nothing in the app matches the pathname or a real file\n * shadows it.\n */\nexport function shouldBypassFarmRouterForDottedPath(\n pathname: string,\n routeManager: DottedPathRouteMatcher | null | undefined,\n baseDirs: Array<string | false | undefined>,\n): boolean {\n if (!pathname.includes(\".\") || pathname.endsWith(\".html\")) return false;\n const matchesAppRoute = Boolean(\n routeManager?.matchRoute(pathname)?.route ||\n routeManager?.matchMetadataRoute(pathname) ||\n routeManager?.matchMetadataImage(pathname),\n );\n return !matchesAppRoute || devServableFileExists(pathname, baseDirs);\n}\n\n/**\n * Route segments may legitimately contain dots (e.g. /kinfish/farm.js), so a\n * dot alone cannot classify a dev request as a static asset. A dotted path is\n * only treated as an asset when it maps to a real file under one of the\n * servable base dirs (project root, public dir), matching the\n * filesystem-first behavior of production hosting.\n */\nexport function devServableFileExists(\n pathname: string,\n baseDirs: Array<string | false | undefined>,\n): boolean {\n let decodedPathname: string;\n try {\n decodedPathname = decodeURIComponent(pathname);\n } catch {\n return false;\n }\n const relativePathname = decodedPathname.replace(/^\\/+/, \"\");\n if (!relativePathname) return false;\n for (const baseDir of baseDirs) {\n if (typeof baseDir !== \"string\" || baseDir.length === 0) continue;\n const resolvedBase = path.resolve(baseDir);\n const candidate = path.resolve(resolvedBase, relativePathname);\n if (!candidate.startsWith(resolvedBase + path.sep)) continue;\n try {\n if (fs.existsSync(candidate) && fs.statSync(candidate).isFile()) {\n return true;\n }\n } catch {\n // Ignore filesystem errors and keep checking other base dirs.\n }\n }\n return false;\n}\n","const SERVER_FN_FACTORIES = [\"createServerQuery\", \"createServerFn\"] as const;\n\nconst FARM_CORE_IMPORT_RE =\n /import\\s*(?!type\\b)(?:[\\w$]+\\s*,\\s*)?\\{([^}]*)\\}\\s*from\\s*([\"'])@farm\\.js\\/core(?:\\/[\\w./-]+)?\\2/g;\n\nexport type ServerFnBoundaryViolation = {\n factory: (typeof SERVER_FN_FACTORIES)[number];\n};\n\n/**\n * Detect a module that defines a Farm server function (createServerQuery /\n * createServerFn) while being compiled for the client environment. Without\n * the server-function transform (@farm.js/plugin/rsc with\n * experimental.serverActions enabled) there is no client stub: the server\n * handler and its dependency graph would be bundled into the browser and\n * executed there, surfacing as confusing Vite externalization errors for\n * Node built-ins (#408).\n */\nexport function findClientServerFnViolation(\n code: string,\n id: string,\n): ServerFnBoundaryViolation | null {\n if (id.startsWith(\"\\0\") || id.startsWith(\"virtual:\") || id.includes(\"node_modules\")) return null;\n // Markdown modules never execute import statements: matched text is\n // documentation (fenced code examples), not code, before and after the\n // markdown transform (fences compile to string content).\n if (/\\.(md|mdx)(\\?|$)/.test(id)) return null;\n if (!code.includes(\"@farm.js/core\")) return null;\n\n for (const match of code.matchAll(FARM_CORE_IMPORT_RE)) {\n const specifiers = match[1];\n for (const factory of SERVER_FN_FACTORIES) {\n if (!new RegExp(`(?:^|[\\\\s{,])${factory}(?:[\\\\s},]|$)`).test(specifiers)) continue;\n // Only a call site makes the module a server-function definition; a\n // type-only or re-exported symbol never executes a handler.\n if (new RegExp(`(?<![\\\\w$.])${factory}\\\\s*(?:<[^>]*>)?\\\\s*\\\\(`).test(code)) {\n return { factory };\n }\n }\n }\n return null;\n}\n\nexport function formatServerFnBoundaryError(\n violation: ServerFnBoundaryViolation,\n id: string,\n): string {\n return [\n `${violation.factory} handlers run only on the server, but ${id} is being bundled into the client.`,\n `Importing a ${violation.factory} module from client code executes the server handler (and its Node-only imports) in the browser.`,\n `Either enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,`,\n `or keep the query on the server: call it from server components, or expose an API route and use createAPIClient from the client.`,\n ].join(\"\\n\");\n}\n","import { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { imageSize } from \"image-size\";\nimport type { Plugin } from \"vite\";\n\nconst FARM_IMAGE_ID_PREFIX = \"\\0farm:image:\";\nconst STATIC_IMAGE_RE = /\\.(?:avif|gif|jpe?g|png|webp)$/i;\nconst SCRIPT_IMPORTER_RE = /\\.(?:[cm]?[jt]sx?|mdx?)$/i;\n\nexport function farmImageImportsPlugin(): Plugin {\n return {\n name: \"farm-image-imports\",\n enforce: \"pre\",\n\n async resolveId(source, importer, options) {\n if (\n !importer ||\n source.includes(\"?\") ||\n !STATIC_IMAGE_RE.test(source) ||\n !SCRIPT_IMPORTER_RE.test(importer.split(\"?\", 1)[0])\n ) {\n return null;\n }\n\n const resolved = await this.resolve(source, importer, { ...options, skipSelf: true });\n if (!resolved || resolved.external) return null;\n\n return `${FARM_IMAGE_ID_PREFIX}${encodeURIComponent(resolved.id.split(\"?\", 1)[0])}`;\n },\n\n async load(id) {\n if (!id.startsWith(FARM_IMAGE_ID_PREFIX)) return null;\n\n const filePath = decodeURIComponent(id.slice(FARM_IMAGE_ID_PREFIX.length));\n const assetRequest = `${filePath.replace(/\\\\/g, \"/\")}?url`;\n return createStaticImageModule(filePath, `import src from ${JSON.stringify(assetRequest)};`);\n },\n\n async transform(code, id) {\n const filePath = id.split(\"?\", 1)[0];\n if (id.includes(\"?\") || !STATIC_IMAGE_RE.test(filePath)) return null;\n\n const defaultExport = code.match(/^\\s*export\\s+default\\s+(.+?);?\\s*$/s)?.[1];\n if (!defaultExport) return null;\n return createStaticImageModule(filePath, `const src = ${defaultExport};`);\n },\n };\n}\n\nasync function createStaticImageModule(\n filePath: string,\n sourceDeclaration: string,\n): Promise<string> {\n const bytes = await readFile(filePath);\n const dimensions = imageSize(bytes);\n if (!dimensions.width || !dimensions.height) {\n throw new Error(`Could not determine image dimensions for ${filePath}`);\n }\n\n const blurDataURL = await createBlurDataURL(bytes);\n return [\n sourceDeclaration,\n `const image = ${JSON.stringify({\n width: dimensions.width,\n height: dimensions.height,\n ...(blurDataURL ? { blurDataURL } : {}),\n })};`,\n \"image.src = src;\",\n \"export { src };\",\n \"export const width = image.width;\",\n \"export const height = image.height;\",\n \"export const blurDataURL = image.blurDataURL;\",\n \"export default image;\",\n ].join(\"\\n\");\n}\n\nasync function createBlurDataURL(bytes: Buffer): Promise<string | undefined> {\n try {\n const { default: sharp } = await import(\"sharp\");\n const placeholder = await sharp(bytes)\n .rotate()\n .resize({ width: 8, height: 8, fit: \"inside\", withoutEnlargement: true })\n .webp({ quality: 35 })\n .toBuffer();\n return `data:image/webp;base64,${placeholder.toString(\"base64\")}`;\n } catch {\n return undefined;\n }\n}\n\nexport function isFarmStaticImageFile(filePath: string): boolean {\n return STATIC_IMAGE_RE.test(path.extname(filePath));\n}\n","import path from \"node:path\";\nimport type { UserConfig as ViteUserConfig } from \"vite\";\nimport type { FarmRenderer } from \"../renderer\";\n\nconst FARM_CLIENT_ENTRY_PATTERN =\n \"**/{page,layout,loading,error,not-found,default}.{js,jsx,ts,tsx}\";\n\n/**\n * Client runtimes that must be optimized in the same generation as React.\n * Farm loads route modules dynamically, so Vite's HTML crawl cannot reliably\n * discover these linked-package entry points before hydration begins.\n */\nexport const FARM_CLIENT_OPTIMIZE_DEPS_INCLUDE = [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n \"@farm.js/core/client\",\n \"@farm.js/core/plugin/client\",\n \"@farm.js/core/deferred\",\n \"@farm.js/core/deployment\",\n \"@farm.js/core/i18n/client\",\n \"@farm.js/core/query/client\",\n \"@farm.js/core/server-fn/client\",\n \"@farm.js/core/server-query/client\",\n] as const;\n\nexport function getFarmClientOptimizeDepsInclude(renderer?: FarmRenderer): string[] {\n return Array.from(\n new Set([...FARM_CLIENT_OPTIMIZE_DEPS_INCLUDE, ...(renderer?.optimizeDeps || [])]),\n );\n}\n\nexport function createFarmClientOptimizeDepsEntries(\n projectRoot: string,\n appDirectories: readonly string[],\n): string[] {\n const resolvedProjectRoot = path.resolve(projectRoot);\n\n return appDirectories.map((appDirectory) => {\n const relativeAppDirectory = path\n .relative(resolvedProjectRoot, path.resolve(appDirectory))\n .replace(/\\\\/g, \"/\");\n const prefix = relativeAppDirectory || \".\";\n return `${prefix}/${FARM_CLIENT_ENTRY_PATTERN}`;\n });\n}\n\nexport function createFarmClientOptimizeDepsConfig(\n entries?: readonly string[],\n renderer?: FarmRenderer,\n): ViteUserConfig[\"optimizeDeps\"] {\n return {\n // Keep normal application dependency discovery for CJS-only packages, but\n // seed every Farm browser runtime so React is present in the first crawl.\n noDiscovery: false,\n // Waiting for the crawl avoids serving a partial optimizer generation and\n // then changing browser hashes while hydration is already in progress.\n holdUntilCrawlEnd: true,\n include: getFarmClientOptimizeDepsInclude(renderer),\n // Farm's HTML boots through a virtual module and imports route UI lazily.\n // Explicit entries let Vite finish that crawl before a navigation can\n // rotate the optimizer hash underneath a hydrated React runtime.\n ...(entries?.length ? { entries: [...entries] } : {}),\n };\n}\n\n/**\n * Farm's application-source alias. Keep this shared by development, route\n * discovery, and production bundling so `@/…` always follows `srcDir`.\n */\nexport function createFarmSourceAlias(projectRoot: string, srcDir = \"src\"): Record<string, string> {\n return {\n \"@\": path.resolve(projectRoot, srcDir),\n };\n}\n\ntype ViteNoExternal = NonNullable<NonNullable<ViteUserConfig[\"ssr\"]>[\"noExternal\"]>;\ntype ViteAlias = NonNullable<NonNullable<ViteUserConfig[\"resolve\"]>[\"alias\"]>;\n\nfunction mergeNoExternal(\n farmValue: ViteNoExternal | undefined,\n userValue: ViteNoExternal | undefined,\n): ViteNoExternal {\n if (farmValue === true || userValue === true) return true;\n\n const normalize = (value: ViteNoExternal | undefined): Array<string | RegExp> =>\n value == null || value === true ? [] : Array.isArray(value) ? value : [value];\n\n return Array.from(new Set([...normalize(farmValue), ...normalize(userValue)]));\n}\n\nfunction mergeAlias(farmValue: ViteAlias | undefined, userValue: ViteAlias | undefined): ViteAlias {\n if (!farmValue) return userValue || {};\n if (!userValue) return farmValue;\n\n if (!Array.isArray(farmValue) && !Array.isArray(userValue)) {\n return {\n ...farmValue,\n ...userValue,\n };\n }\n\n const normalize = (value: ViteAlias): Exclude<ViteAlias, Record<string, string>> =>\n Array.isArray(value)\n ? [...value]\n : Object.entries(value).map(([find, replacement]) => ({ find, replacement }));\n\n // Vite uses the first matching array entry. Put application entries first\n // so an explicit user alias can intentionally override a Farm default.\n return [...normalize(userValue), ...normalize(farmValue)];\n}\n\nexport function mergeFarmViteConfig(\n farmConfig: ViteUserConfig,\n userConfig: ViteUserConfig = {},\n): ViteUserConfig {\n const noDiscovery = userConfig.optimizeDeps?.noDiscovery ?? farmConfig.optimizeDeps?.noDiscovery;\n const holdUntilCrawlEnd =\n userConfig.optimizeDeps?.holdUntilCrawlEnd ??\n (userConfig.optimizeDeps?.noDiscovery === true\n ? false\n : farmConfig.optimizeDeps?.holdUntilCrawlEnd);\n\n return {\n ...farmConfig,\n ...userConfig,\n plugins: [...(farmConfig.plugins || []), ...(userConfig.plugins || [])],\n server: {\n ...farmConfig.server,\n ...userConfig.server,\n },\n resolve: {\n ...farmConfig.resolve,\n ...userConfig.resolve,\n alias: mergeAlias(farmConfig.resolve?.alias, userConfig.resolve?.alias),\n dedupe: Array.from(\n new Set([...(farmConfig.resolve?.dedupe || []), ...(userConfig.resolve?.dedupe || [])]),\n ),\n },\n optimizeDeps: {\n ...farmConfig.optimizeDeps,\n ...userConfig.optimizeDeps,\n noDiscovery,\n holdUntilCrawlEnd,\n include: Array.from(\n new Set([\n ...(farmConfig.optimizeDeps?.include || []),\n ...(userConfig.optimizeDeps?.include || []),\n ]),\n ),\n exclude: Array.from(\n new Set([\n ...(farmConfig.optimizeDeps?.exclude || []),\n ...(userConfig.optimizeDeps?.exclude || []),\n ]),\n ),\n },\n ssr: {\n ...farmConfig.ssr,\n ...userConfig.ssr,\n noExternal: mergeNoExternal(farmConfig.ssr?.noExternal, userConfig.ssr?.noExternal),\n },\n };\n}\n","import type { Plugin } from \"vite\";\nimport { resolveFarmThemeConfig } from \"./config\";\nimport type { FarmThemeConfig, ResolvedFarmThemeConfig } from \"./types\";\n\nconst FARM_DARK_VARIANT =\n '@custom-variant dark (&:where([data-theme=\"dark\"], [data-theme=\"dark\"] *));';\n\nexport function createFarmThemeCssPlugin(\n input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n basePath = \"/\",\n): Plugin {\n const config = resolveFarmThemeConfig(input, basePath);\n\n return {\n name: \"farm:theme-css\",\n enforce: \"pre\",\n transform(code, id) {\n if (\n !config.enabled ||\n !/\\.css(?:\\?.*)?$/.test(id) ||\n !/@import\\s+[\"']tailwindcss[\"']/.test(code) ||\n /@custom-variant\\s+dark\\b/.test(code)\n ) {\n return null;\n }\n\n return {\n code: `${code.trimEnd()}\\n\\n${FARM_DARK_VARIANT}\\n`,\n map: null,\n };\n },\n };\n}\n","import path from \"node:path\";\nimport type { FarmIntegrationProvider } from \"./integrations\";\nimport { isFarmIntegrationProviderComponentReference } from \"./integrations\";\nimport { toViteModuleId } from \"./utils\";\n\nexport type FarmIntegrationProviderClientCode = {\n hasProviders: boolean;\n imports: string;\n runtime: string;\n};\n\nexport function generateFarmIntegrationProviderClientCode(\n providers: FarmIntegrationProvider[],\n root: string,\n): FarmIntegrationProviderClientCode {\n const renderedProviders = providers.filter(\n (provider) => provider.component || provider.type === \"clerk\",\n );\n const imports: string[] = [];\n const registrations: string[] = [];\n let hasClerkProvider = false;\n\n renderedProviders.forEach((provider, index) => {\n let componentExpression = \"null\";\n if (isFarmIntegrationProviderComponentReference(provider.component)) {\n const namespace = `FarmIntegrationProviderModule${index}`;\n imports.push(\n `import * as ${namespace} from ${JSON.stringify(resolveProviderModule(provider.component.module, root))};`,\n );\n componentExpression = `${namespace}[${JSON.stringify(provider.component.export || \"default\")}]`;\n } else if (typeof provider.component === \"function\") {\n throw new Error(\n `Integration provider \"${provider.name}\" must use an importable component reference for client hydration, for example component: { module: \"@/components/provider\" }.`,\n );\n } else if (provider.type === \"clerk\") {\n hasClerkProvider = true;\n componentExpression = \"FarmClerkProvider\";\n }\n\n registrations.push(`{\n name: ${JSON.stringify(provider.name)},\n type: ${JSON.stringify(provider.type)},\n props: ${JSON.stringify(provider.props || {})},\n Component: ${componentExpression},\n}`);\n });\n\n if (hasClerkProvider) {\n imports.unshift(`import { ClerkProvider as FarmClerkProvider } from \"@clerk/react\";`);\n }\n\n return {\n hasProviders: renderedProviders.length > 0,\n imports: imports.join(\"\\n\"),\n runtime: `const integrationProviders = [${registrations.join(\",\\n\")}];\n\nfunction wrapWithIntegrationProviders(element) {\n let wrapped = element;\n for (let index = integrationProviders.length - 1; index >= 0; index--) {\n const provider = integrationProviders[index];\n if (!provider.Component) {\n throw new Error(\"Integration provider \" + provider.name + \" did not export its configured component.\");\n }\n wrapped = React.createElement(provider.Component, provider.props || {}, wrapped);\n }\n return wrapped;\n}`,\n };\n}\n\nexport function createFarmIntegrationProviderModuleKey(component: {\n module: string;\n export?: string;\n}): string {\n return `${component.module}\\0${component.export || \"default\"}`;\n}\n\nexport function generateFarmIntegrationProviderServerModules(\n providers: FarmIntegrationProvider[],\n root: string,\n): { imports: string; entries: string; hasClerkProvider: boolean } {\n const imports: string[] = [];\n const entries: string[] = [];\n\n providers.forEach((provider, index) => {\n if (!isFarmIntegrationProviderComponentReference(provider.component)) return;\n const namespace = `FarmServerIntegrationProviderModule${index}`;\n imports.push(\n `import * as ${namespace} from ${JSON.stringify(resolveProviderModule(provider.component.module, root))};`,\n );\n entries.push(\n `[${JSON.stringify(createFarmIntegrationProviderModuleKey(provider.component))}, ${namespace}[${JSON.stringify(provider.component.export || \"default\")}]]`,\n );\n });\n\n return {\n imports: imports.join(\"\\n\"),\n entries: entries.join(\",\\n\"),\n hasClerkProvider: providers.some(\n (provider) => provider.type === \"clerk\" && !provider.component,\n ),\n };\n}\n\nfunction resolveProviderModule(moduleId: string, root: string): string {\n if (!moduleId.startsWith(\".\")) return moduleId;\n return toViteModuleId(path.resolve(root, moduleId), root);\n}\n","import { isFarmNotFoundError } from \"../navigation-errors\";\n\nexport interface FarmPageDataFailure {\n status: number;\n payload: {\n error: string;\n message: string;\n code?: string;\n };\n}\n\n/**\n * Preserve expected route outcomes when a page-data render fails. Internal\n * navigation must report the same HTTP class as a full document render so a\n * missing resource never masquerades as a framework crash.\n */\nexport function resolveFarmPageDataFailure(error: unknown): FarmPageDataFailure {\n if (isFarmNotFoundError(error)) {\n return {\n status: 404,\n payload: {\n error: \"Route not found\",\n message: \"The requested route did not resolve to a resource.\",\n code: \"FARM_NOT_FOUND\",\n },\n };\n }\n\n if (error instanceof Response) {\n return {\n status: error.status || 500,\n payload: {\n error: error.statusText || \"Page data request failed\",\n message: error.statusText || `The route returned HTTP ${error.status || 500}.`,\n },\n };\n }\n\n return {\n status: 500,\n payload: {\n error: \"Failed to load page data\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n },\n };\n}\n","import { logger } from \"../utils\";\n\ninterface OpenAPIDevStatusLogger {\n success(message: string): void;\n warn(message: string): void;\n}\n\nexport function reportOpenAPIDevGenerationResult(\n spec: unknown,\n output: OpenAPIDevStatusLogger = logger,\n): void {\n if (spec) {\n output.success(\"✅ OpenAPI documentation enabled\");\n return;\n }\n\n output.warn(\"OpenAPI documentation is enabled, but its specification failed to generate.\");\n}\n"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA8T7H,kBAAkB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6E/B,2BAA2B,2DAA2D,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgZxF,2BAA2B,yEAAyE,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["path","estimatedBoundaryCount","readFile","path","readFile","path","path","fs","path","fs","path","path","fs","createHash","readFile","path","createHash","bytes","path","readFile","relative","pathToFileURL","fs","path","fileURLToPath","relative","fileURLToPath","escapeHtmlAttribute","pathToFileURL","resolve","html","path","path","promises","definePlugin","fs","path","path","fs","fs","path","path","fs","existsSync","mkdirSync","readFileSync","dirname","isAbsolute","join","resolve","path","fs","mkdirSync","path","path","mkdirSync","fs","path","registries","mkdirSync","dirname","join","resolve","resolve","join","mkdirSync","dirname","resolve","join","existsSync","isAbsolute","mkdirSync","dirname","readFileSync","fs","path","pathToFileURL","fs","path","readFile","path","imageSize","readFile","imageSize","path","path","path","path","declaration","relative","isStaticMetadataImageFile","pathToFileURL","handler","pathname","startTime","duration","method","urlPath","routeManager","parseRouteModuleProps","options","server","parseRouteModuleSchema"]}
|