@farm.js/core 0.1.0-beta.6 → 0.1.0-beta.8
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 +227 -0
- package/dist/after.cjs.map +1 -0
- package/dist/after.d.mts +25 -0
- package/dist/after.d.ts +25 -0
- package/dist/after.mjs +14 -0
- package/dist/after.mjs.map +1 -0
- package/dist/agent-runtime.cjs +2379 -0
- package/dist/agent-runtime.cjs.map +1 -0
- package/dist/agent-runtime.d.mts +94 -0
- package/dist/agent-runtime.d.ts +94 -0
- package/dist/agent-runtime.mjs +479 -0
- package/dist/agent-runtime.mjs.map +1 -0
- package/dist/api/route-manager.d.mts +66 -0
- package/dist/api/route-manager.d.ts +66 -0
- package/dist/api/runtime.d.mts +3 -0
- package/dist/api/runtime.d.ts +3 -0
- package/dist/api.cjs +4100 -0
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.mts +48 -0
- package/dist/api.d.ts +48 -0
- package/dist/api.mjs +93 -0
- package/dist/api.mjs.map +1 -0
- package/dist/app-BWtqQu3R.d.mts +302 -0
- package/dist/app-markdown.cjs +244 -0
- package/dist/app-markdown.cjs.map +1 -0
- package/dist/app-markdown.d.mts +22 -0
- package/dist/app-markdown.d.ts +22 -0
- package/dist/app-markdown.mjs +27 -0
- package/dist/app-markdown.mjs.map +1 -0
- package/dist/app-xltejvLY.d.ts +302 -0
- package/dist/cache.cjs +945 -0
- package/dist/cache.cjs.map +1 -0
- package/dist/cache.d.mts +192 -0
- package/dist/cache.d.ts +192 -0
- package/dist/cache.mjs +46 -0
- package/dist/cache.mjs.map +1 -0
- package/dist/chunk-2ED5Q2GH.mjs +422 -0
- package/dist/chunk-2ED5Q2GH.mjs.map +1 -0
- package/dist/chunk-32W4QEJP.mjs +158 -0
- package/dist/chunk-32W4QEJP.mjs.map +1 -0
- package/dist/chunk-3XNTL3FQ.mjs +452 -0
- package/dist/chunk-3XNTL3FQ.mjs.map +1 -0
- package/dist/chunk-44ZCFSKE.mjs +84 -0
- package/dist/chunk-44ZCFSKE.mjs.map +1 -0
- package/dist/chunk-4MGVSBRP.mjs +7787 -0
- package/dist/chunk-4MGVSBRP.mjs.map +1 -0
- package/dist/chunk-4S3ORGFA.mjs +44 -0
- package/dist/chunk-4S3ORGFA.mjs.map +1 -0
- package/dist/chunk-5BY76U2M.mjs +1 -0
- package/dist/chunk-5BY76U2M.mjs.map +1 -0
- package/dist/chunk-5ZGPRGWV.mjs +136 -0
- package/dist/chunk-5ZGPRGWV.mjs.map +1 -0
- package/dist/chunk-65A7QIKI.mjs +142 -0
- package/dist/chunk-65A7QIKI.mjs.map +1 -0
- package/dist/chunk-74YTBPTY.mjs +450 -0
- package/dist/chunk-74YTBPTY.mjs.map +1 -0
- package/dist/chunk-7FBJLMQH.mjs +338 -0
- package/dist/chunk-7FBJLMQH.mjs.map +1 -0
- package/dist/chunk-7HO6AEOP.mjs +74 -0
- package/dist/chunk-7HO6AEOP.mjs.map +1 -0
- package/dist/chunk-7MABZJIM.mjs +29 -0
- package/dist/chunk-7MABZJIM.mjs.map +1 -0
- package/dist/chunk-7N62DNSO.mjs +41 -0
- package/dist/chunk-7N62DNSO.mjs.map +1 -0
- package/dist/chunk-7ZY5AIJO.mjs +161 -0
- package/dist/chunk-7ZY5AIJO.mjs.map +1 -0
- package/dist/chunk-ALCLXXTY.mjs +187 -0
- package/dist/chunk-ALCLXXTY.mjs.map +1 -0
- package/dist/chunk-AZ7YUVNR.mjs +65 -0
- package/dist/chunk-AZ7YUVNR.mjs.map +1 -0
- package/dist/chunk-B232I2GP.mjs +163 -0
- package/dist/chunk-B232I2GP.mjs.map +1 -0
- package/dist/chunk-B4W3BNTL.mjs +483 -0
- package/dist/chunk-B4W3BNTL.mjs.map +1 -0
- package/dist/chunk-C2ROET2V.mjs +718 -0
- package/dist/chunk-C2ROET2V.mjs.map +1 -0
- package/dist/chunk-CGILA3WO.mjs +14 -0
- package/dist/chunk-CGILA3WO.mjs.map +1 -0
- package/dist/chunk-CGIXMLSY.mjs +184 -0
- package/dist/chunk-CGIXMLSY.mjs.map +1 -0
- package/dist/chunk-DJSGLHCN.mjs +597 -0
- package/dist/chunk-DJSGLHCN.mjs.map +1 -0
- package/dist/chunk-E2MPIBRE.mjs +149 -0
- package/dist/chunk-E2MPIBRE.mjs.map +1 -0
- package/dist/chunk-E6EPN5BT.mjs +203 -0
- package/dist/chunk-E6EPN5BT.mjs.map +1 -0
- package/dist/chunk-EI43C4RA.mjs +6277 -0
- package/dist/chunk-EI43C4RA.mjs.map +1 -0
- package/dist/chunk-EJ7T4TPB.mjs +622 -0
- package/dist/chunk-EJ7T4TPB.mjs.map +1 -0
- package/dist/chunk-FQYDHKKU.mjs +128 -0
- package/dist/chunk-FQYDHKKU.mjs.map +1 -0
- package/dist/chunk-FRPWCMMG.mjs +299 -0
- package/dist/chunk-FRPWCMMG.mjs.map +1 -0
- package/dist/chunk-GN72QAIH.mjs +146 -0
- package/dist/chunk-GN72QAIH.mjs.map +1 -0
- package/dist/chunk-GQVGIUSN.mjs +149 -0
- package/dist/chunk-GQVGIUSN.mjs.map +1 -0
- package/dist/chunk-GS6K5OCM.mjs +407 -0
- package/dist/chunk-GS6K5OCM.mjs.map +1 -0
- package/dist/chunk-GXASWWJU.mjs +364 -0
- package/dist/chunk-GXASWWJU.mjs.map +1 -0
- package/dist/chunk-GY2STC2S.mjs +180 -0
- package/dist/chunk-GY2STC2S.mjs.map +1 -0
- package/dist/chunk-H2FA2SBS.mjs +51 -0
- package/dist/chunk-H2FA2SBS.mjs.map +1 -0
- package/dist/chunk-I4CUBGVF.mjs +93 -0
- package/dist/chunk-I4CUBGVF.mjs.map +1 -0
- package/dist/chunk-ITN462YM.mjs +98 -0
- package/dist/chunk-ITN462YM.mjs.map +1 -0
- package/dist/chunk-J23HNLFY.mjs +72 -0
- package/dist/chunk-J23HNLFY.mjs.map +1 -0
- package/dist/chunk-J4FNJ5IU.mjs +179 -0
- package/dist/chunk-J4FNJ5IU.mjs.map +1 -0
- package/dist/chunk-J5YWQVI5.mjs +211 -0
- package/dist/chunk-J5YWQVI5.mjs.map +1 -0
- package/dist/chunk-JDEOUK5V.mjs +427 -0
- package/dist/chunk-JDEOUK5V.mjs.map +1 -0
- package/dist/chunk-JK25YEN6.mjs +219 -0
- package/dist/chunk-JK25YEN6.mjs.map +1 -0
- package/dist/chunk-K4667E2Q.mjs +1916 -0
- package/dist/chunk-K4667E2Q.mjs.map +1 -0
- package/dist/chunk-LGHEOHBU.mjs +218 -0
- package/dist/chunk-LGHEOHBU.mjs.map +1 -0
- package/dist/chunk-LM2YNO4U.mjs +24 -0
- package/dist/chunk-LM2YNO4U.mjs.map +1 -0
- package/dist/chunk-ME4MO2RJ.mjs +3540 -0
- package/dist/chunk-ME4MO2RJ.mjs.map +1 -0
- package/dist/chunk-MIUW47JX.mjs +639 -0
- package/dist/chunk-MIUW47JX.mjs.map +1 -0
- package/dist/chunk-NNLCAVB6.mjs +391 -0
- package/dist/chunk-NNLCAVB6.mjs.map +1 -0
- package/dist/chunk-P7QDS5AT.mjs +191 -0
- package/dist/chunk-P7QDS5AT.mjs.map +1 -0
- package/dist/chunk-PFE6GMNE.mjs +603 -0
- package/dist/chunk-PFE6GMNE.mjs.map +1 -0
- package/dist/chunk-QGOHVJ6J.mjs +63 -0
- package/dist/chunk-QGOHVJ6J.mjs.map +1 -0
- package/dist/chunk-QKVUNGAH.mjs +39 -0
- package/dist/chunk-QKVUNGAH.mjs.map +1 -0
- package/dist/chunk-QM746KUO.mjs +56 -0
- package/dist/chunk-QM746KUO.mjs.map +1 -0
- package/dist/chunk-QTZZ2ISQ.mjs +753 -0
- package/dist/chunk-QTZZ2ISQ.mjs.map +1 -0
- package/dist/chunk-RBRLLZL5.mjs +81 -0
- package/dist/chunk-RBRLLZL5.mjs.map +1 -0
- package/dist/chunk-RHIFZZUI.mjs +69 -0
- package/dist/chunk-RHIFZZUI.mjs.map +1 -0
- package/dist/chunk-RQ633A5I.mjs +187 -0
- package/dist/chunk-RQ633A5I.mjs.map +1 -0
- package/dist/chunk-SCFX4UTD.mjs +28 -0
- package/dist/chunk-SCFX4UTD.mjs.map +1 -0
- package/dist/chunk-SL6HTIOK.mjs +66 -0
- package/dist/chunk-SL6HTIOK.mjs.map +1 -0
- package/dist/chunk-SPBBQLXI.mjs +207 -0
- package/dist/chunk-SPBBQLXI.mjs.map +1 -0
- package/dist/chunk-SSA7THPX.mjs +10 -0
- package/dist/chunk-SSA7THPX.mjs.map +1 -0
- package/dist/chunk-T4QJQK76.mjs +459 -0
- package/dist/chunk-T4QJQK76.mjs.map +1 -0
- package/dist/chunk-TQAEEJB4.mjs +157 -0
- package/dist/chunk-TQAEEJB4.mjs.map +1 -0
- package/dist/chunk-UB5UOSHB.mjs +458 -0
- package/dist/chunk-UB5UOSHB.mjs.map +1 -0
- package/dist/chunk-USWZZUEH.mjs +25 -0
- package/dist/chunk-USWZZUEH.mjs.map +1 -0
- package/dist/chunk-UVCIEUJC.mjs +16 -0
- package/dist/chunk-UVCIEUJC.mjs.map +1 -0
- package/dist/chunk-UXUAWNO5.mjs +396 -0
- package/dist/chunk-UXUAWNO5.mjs.map +1 -0
- package/dist/chunk-V3XURYJO.mjs +756 -0
- package/dist/chunk-V3XURYJO.mjs.map +1 -0
- package/dist/chunk-V6WE6JSZ.mjs +352 -0
- package/dist/chunk-V6WE6JSZ.mjs.map +1 -0
- package/dist/chunk-V7RBCSDJ.mjs +170 -0
- package/dist/chunk-V7RBCSDJ.mjs.map +1 -0
- package/dist/chunk-VCANOYFI.mjs +588 -0
- package/dist/chunk-VCANOYFI.mjs.map +1 -0
- package/dist/chunk-VY2UYN5R.mjs +224 -0
- package/dist/chunk-VY2UYN5R.mjs.map +1 -0
- package/dist/chunk-W2CRQFF6.mjs +1352 -0
- package/dist/chunk-W2CRQFF6.mjs.map +1 -0
- package/dist/chunk-WDU6QXNK.mjs +872 -0
- package/dist/chunk-WDU6QXNK.mjs.map +1 -0
- package/dist/chunk-WZ5QFROO.mjs +23 -0
- package/dist/chunk-WZ5QFROO.mjs.map +1 -0
- package/dist/chunk-XIVV5IWN.mjs +541 -0
- package/dist/chunk-XIVV5IWN.mjs.map +1 -0
- package/dist/chunk-YW7OBE6Q.mjs +119 -0
- package/dist/chunk-YW7OBE6Q.mjs.map +1 -0
- package/dist/chunk-Z5CQMP54.mjs +365 -0
- package/dist/chunk-Z5CQMP54.mjs.map +1 -0
- package/dist/chunk-ZBE6MLHL.mjs +230 -0
- package/dist/chunk-ZBE6MLHL.mjs.map +1 -0
- package/dist/chunk-ZVWA4ZQ3.mjs +189 -0
- package/dist/chunk-ZVWA4ZQ3.mjs.map +1 -0
- package/dist/chunk-ZZ57EH5Z.mjs +173 -0
- package/dist/chunk-ZZ57EH5Z.mjs.map +1 -0
- package/dist/client-BT1mFQas.d.mts +447 -0
- package/dist/client-Nn0q4eO4.d.ts +447 -0
- package/dist/client-cache-CIlyBlmx.d.ts +6 -0
- package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
- package/dist/client-plugins-BI2R6Eae.d.mts +1926 -0
- package/dist/client-plugins-DU9oMspX.d.ts +1926 -0
- package/dist/client-plugins.cjs +415 -0
- package/dist/client-plugins.cjs.map +1 -0
- package/dist/client-plugins.d.mts +22 -0
- package/dist/client-plugins.d.ts +22 -0
- package/dist/client-plugins.mjs +10 -0
- package/dist/client-plugins.mjs.map +1 -0
- package/dist/client.cjs +5402 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.mts +447 -0
- package/dist/client.d.ts +447 -0
- package/dist/client.mjs +110 -0
- package/dist/client.mjs.map +1 -0
- package/dist/config.cjs +38 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.mts +29 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.mjs +10 -0
- package/dist/config.mjs.map +1 -0
- package/dist/cron.cjs +406 -0
- package/dist/cron.cjs.map +1 -0
- package/dist/cron.d.mts +78 -0
- package/dist/cron.d.ts +78 -0
- package/dist/cron.mjs +30 -0
- package/dist/cron.mjs.map +1 -0
- package/dist/deferred.cjs +438 -0
- package/dist/deferred.cjs.map +1 -0
- package/dist/deferred.d.mts +42 -0
- package/dist/deferred.d.ts +42 -0
- package/dist/deferred.mjs +28 -0
- package/dist/deferred.mjs.map +1 -0
- package/dist/deployment.cjs +199 -0
- package/dist/deployment.cjs.map +1 -0
- package/dist/deployment.d.mts +34 -0
- package/dist/deployment.d.ts +34 -0
- package/dist/deployment.mjs +38 -0
- package/dist/deployment.mjs.map +1 -0
- package/dist/devtools-REQTS3I7.mjs +371 -0
- package/dist/devtools-REQTS3I7.mjs.map +1 -0
- package/dist/devtools-client-3XRTBND5.mjs +216 -0
- package/dist/devtools-client-3XRTBND5.mjs.map +1 -0
- package/dist/devtools-ui-NJKFORTG.mjs +1349 -0
- package/dist/devtools-ui-NJKFORTG.mjs.map +1 -0
- package/dist/docs.cjs +5548 -0
- package/dist/docs.cjs.map +1 -0
- package/dist/docs.d.mts +69 -0
- package/dist/docs.d.ts +69 -0
- package/dist/docs.mjs +47 -0
- package/dist/docs.mjs.map +1 -0
- package/dist/env-types.cjs +232 -0
- package/dist/env-types.cjs.map +1 -0
- package/dist/env-types.d.mts +12 -0
- package/dist/env-types.d.ts +12 -0
- package/dist/env-types.mjs +11 -0
- package/dist/env-types.mjs.map +1 -0
- package/dist/env.cjs +215 -0
- package/dist/env.cjs.map +1 -0
- package/dist/env.d.mts +45 -0
- package/dist/env.d.ts +45 -0
- package/dist/env.mjs +22 -0
- package/dist/env.mjs.map +1 -0
- package/dist/environment/vite.d.mts +22 -0
- package/dist/environment/vite.d.ts +22 -0
- package/dist/environment.cjs +96 -0
- package/dist/environment.cjs.map +1 -0
- package/dist/environment.d.mts +18 -0
- package/dist/environment.d.ts +18 -0
- package/dist/environment.mjs +14 -0
- package/dist/environment.mjs.map +1 -0
- package/dist/headers.cjs +126 -0
- package/dist/headers.cjs.map +1 -0
- package/dist/headers.d.mts +22 -0
- package/dist/headers.d.ts +22 -0
- package/dist/headers.mjs +12 -0
- package/dist/headers.mjs.map +1 -0
- package/dist/i18n/client.d.mts +32 -0
- package/dist/i18n/client.d.ts +32 -0
- package/dist/i18n/index.d.mts +20 -0
- package/dist/i18n/index.d.ts +20 -0
- package/dist/i18n/server.d.mts +30 -0
- package/dist/i18n/server.d.ts +30 -0
- package/dist/image/server.d.mts +37 -0
- package/dist/image/server.d.ts +37 -0
- package/dist/image/sharp.d.mts +7 -0
- package/dist/image/sharp.d.ts +7 -0
- package/dist/image-config-Duob7wER.d.mts +50 -0
- package/dist/image-config-Duob7wER.d.ts +50 -0
- package/dist/image.cjs +209 -0
- package/dist/image.cjs.map +1 -0
- package/dist/image.d.mts +39 -0
- package/dist/image.d.ts +39 -0
- package/dist/image.mjs +165 -0
- package/dist/image.mjs.map +1 -0
- package/dist/index.cjs +42186 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +454 -0
- package/dist/index.d.ts +454 -0
- package/dist/index.mjs +980 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integration-api-CHT2OKAf.d.mts +93 -0
- package/dist/integration-api-CHT2OKAf.d.ts +93 -0
- package/dist/integration-orm-GQLGU66X.mjs +13 -0
- package/dist/integration-orm-GQLGU66X.mjs.map +1 -0
- package/dist/integrations.cjs +2820 -0
- package/dist/integrations.cjs.map +1 -0
- package/dist/integrations.d.mts +22 -0
- package/dist/integrations.d.ts +22 -0
- package/dist/integrations.mjs +51 -0
- package/dist/integrations.mjs.map +1 -0
- package/dist/internal/build-runtime.cjs +643 -322
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.d.mts +39 -0
- package/dist/internal/build-runtime.d.ts +39 -0
- package/dist/internal/build-runtime.mjs +11 -10
- package/dist/internal/client-runtime.d.mts +2 -0
- package/dist/internal/client-runtime.d.ts +2 -0
- package/dist/internal/config-runtime.cjs +135 -39
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.d.mts +39 -0
- package/dist/internal/config-runtime.d.ts +39 -0
- package/dist/internal/config-runtime.mjs +5 -4
- package/dist/internal/production-node-env.d.mts +12 -0
- package/dist/internal/production-node-env.d.ts +12 -0
- package/dist/internal/production-runtime.d.mts +39 -0
- package/dist/internal/production-runtime.d.ts +39 -0
- package/dist/layers-VWVDTPUZ.mjs +16 -0
- package/dist/layers-VWVDTPUZ.mjs.map +1 -0
- package/dist/manager-THKFTOFE.mjs +10 -0
- package/dist/manager-THKFTOFE.mjs.map +1 -0
- package/dist/markdown.cjs +364 -0
- package/dist/markdown.cjs.map +1 -0
- package/dist/markdown.d.mts +60 -0
- package/dist/markdown.d.ts +60 -0
- package/dist/markdown.mjs +18 -0
- package/dist/markdown.mjs.map +1 -0
- package/dist/metadata-Cm9ujH4I.d.ts +22 -0
- package/dist/metadata-DacXbnLA.d.mts +22 -0
- package/dist/middleware.cjs +2148 -0
- package/dist/middleware.cjs.map +1 -0
- package/dist/middleware.d.mts +164 -0
- package/dist/middleware.d.ts +164 -0
- package/dist/middleware.mjs +49 -0
- package/dist/middleware.mjs.map +1 -0
- package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
- package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
- package/dist/navigation.cjs +1329 -0
- package/dist/navigation.cjs.map +1 -0
- package/dist/navigation.d.mts +14 -0
- package/dist/navigation.d.ts +14 -0
- package/dist/navigation.mjs +33 -0
- package/dist/navigation.mjs.map +1 -0
- package/dist/nitro-QO5LV6QK.mjs +689 -0
- package/dist/nitro-QO5LV6QK.mjs.map +1 -0
- package/dist/observability.cjs +186 -0
- package/dist/observability.cjs.map +1 -0
- package/dist/observability.d.mts +335 -0
- package/dist/observability.d.ts +335 -0
- package/dist/observability.mjs +16 -0
- package/dist/observability.mjs.map +1 -0
- package/dist/params-BALtrRim.d.ts +15 -0
- package/dist/params-ry-lxqmy.d.mts +15 -0
- package/dist/plugin-BJDf43dc.d.mts +165 -0
- package/dist/plugin-BJDf43dc.d.ts +165 -0
- package/dist/plugin.cjs +23470 -0
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.mts +22 -0
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.mjs +8 -7
- package/dist/production-runtime-4KKq1AVC.d.mts +79 -0
- package/dist/production-runtime-C_B79w2P.d.mts +28 -0
- package/dist/production-runtime-DDEM1D2q.d.ts +28 -0
- package/dist/production-runtime-DRsWDN2x.d.ts +79 -0
- package/dist/query/client.d.mts +61 -0
- package/dist/query/client.d.ts +61 -0
- package/dist/query/index.d.mts +90 -0
- package/dist/query/index.d.ts +90 -0
- package/dist/query/parsers.d.mts +25 -0
- package/dist/query/parsers.d.ts +25 -0
- package/dist/query/server.d.mts +55 -0
- package/dist/query/server.d.ts +55 -0
- package/dist/request-Dsq4kGW0.d.mts +6 -0
- package/dist/request-udtobOLv.d.ts +6 -0
- package/dist/request.d.mts +2 -0
- package/dist/request.d.ts +2 -0
- package/dist/resolver-DJqjLMg_.d.mts +14 -0
- package/dist/resolver-IH4RmPEl.d.ts +14 -0
- package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
- package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
- package/dist/router.d.mts +36 -0
- package/dist/router.d.ts +36 -0
- package/dist/routes.d.mts +224 -0
- package/dist/routes.d.ts +224 -0
- package/dist/runtime-9nQjVM7X.d.mts +206 -0
- package/dist/runtime-Cxpq6xZN.d.mts +27 -0
- package/dist/runtime-DgeS2skB.d.ts +206 -0
- package/dist/runtime-bv63eUiO.d.ts +27 -0
- package/dist/server-action-security.d.mts +43 -0
- package/dist/server-action-security.d.ts +43 -0
- package/dist/server-fn-client.d.mts +32 -0
- package/dist/server-fn-client.d.ts +32 -0
- package/dist/server-fn.d.mts +93 -0
- package/dist/server-fn.d.ts +93 -0
- package/dist/server-plugins.d.mts +55 -0
- package/dist/server-plugins.d.ts +55 -0
- package/dist/server-query-client.d.mts +50 -0
- package/dist/server-query-client.d.ts +50 -0
- package/dist/server-query.d.mts +36 -0
- package/dist/server-query.d.ts +36 -0
- package/dist/server.cjs +731 -447
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.mts +48 -0
- package/dist/server.d.ts +48 -0
- package/dist/server.mjs +9 -8
- package/dist/server.mjs.map +1 -1
- package/dist/storage.d.mts +52 -0
- package/dist/storage.d.ts +52 -0
- package/dist/testing.d.mts +101 -0
- package/dist/testing.d.ts +101 -0
- package/dist/transport-BmbGTXA5.d.mts +49 -0
- package/dist/transport-BmbGTXA5.d.ts +49 -0
- package/dist/types-BMxWr97v.d.mts +81 -0
- package/dist/types-BMxWr97v.d.ts +81 -0
- package/dist/types-C9N-nk5R.d.mts +53 -0
- package/dist/types-C9N-nk5R.d.ts +53 -0
- package/dist/types-D1A6-XvH.d.mts +73 -0
- package/dist/types-D1A6-XvH.d.ts +73 -0
- package/dist/utils-B-cUHwoK.d.ts +23 -0
- package/dist/utils-Cm41AefV.d.mts +23 -0
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.mts +3 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +682 -437
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.mts +22 -0
- package/dist/vite.d.ts +22 -0
- package/dist/vite.mjs +6 -5
- package/dist/workflows.d.mts +110 -0
- package/dist/workflows.d.ts +110 -0
- package/package.json +3 -2
- package/types/client.d.ts +1 -1
- package/types/image.d.ts +4 -0
- package/types/images.d.ts +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ssg.ts","../src/routing/route-manager.ts","../src/utils/client-component.ts","../src/static-metadata-image.ts","../src/routing/route-slots.ts","../src/server/renderer.ts","../src/app.ts","../src/default-styles.ts","../src/client-plugin-build.ts","../src/hmr.ts","../src/type-artifacts.ts","../src/routing/generate-route-types.ts","../src/image-types.ts","../src/i18n/type-generator.ts","../src/vite.ts","../src/image-vite.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\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\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 */\nexport function resolveRouteRenderingConfig(\n mod: RouteModule | null | undefined,\n source?: string,\n): RouteRenderingConfig {\n const directiveConfig = parseRouteRenderingDirective(source);\n let ssg = directiveConfig?.ssg ?? false;\n let ppr = 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 ppr = 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 if (!hasExplicitSsg && !ppr) {\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 ppr = false;\n } else if (moduleDynamic === \"force-dynamic\") {\n ssg = false;\n ppr = false;\n revalidate = undefined;\n }\n\n return {\n ssg,\n ppr: ssg ? false : ppr,\n revalidate: ssg || ppr ? revalidate : undefined,\n dynamic,\n directive: directiveConfig?.directive,\n };\n}\n\nexport async function resolveRouteRenderingConfigFromFile(\n mod: RouteModule | null | undefined,\n filePath: string,\n): Promise<RouteRenderingConfig> {\n const source = await readFile(filePath, \"utf8\").catch(() => undefined);\n return resolveRouteRenderingConfig(mod, source);\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): Promise<SSGCollectionResult> {\n const ssgPages: SSGPage[] = [];\n const ssrRoutes: 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 rendering = await resolveRouteRenderingConfigFromFile(mod, route.filePath);\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 } 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 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(mod: RouteModule | null | undefined): boolean {\n return resolveRouteRenderingConfig(mod).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 resolveAppPath,\n globFiles,\n logger,\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 createLayoutModuleFromProgrammaticLayout,\n createProgrammaticRouteModuleId,\n createRouteModuleFromProgrammaticPage,\n getProgrammaticRouteSearchClientOptions,\n parseProgrammaticRoutePath,\n} from \"../routes\";\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 { getClientModuleMetadata } from \"../utils/client-component\";\nimport type { MetadataImageKind } from \"../metadata\";\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 { createRouteSlotContainerId, parseRouteSlotFile } from \"./route-slots\";\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\ninterface MetadataImageEntry extends RouteEntry {\n kind: MetadataImageKind;\n fileName: \"opengraph-image\" | \"twitter-image\";\n sourceType: \"module\" | \"static\";\n staticInfo?: StaticMetadataImageInfo;\n}\n\ninterface RedirectEntry {\n route: ParsedRoute;\n pattern: string;\n definition: ProgrammaticRedirectRoute;\n}\n\nfunction routeSpecificity(entry: RouteEntry): number {\n return entry.route.segments.reduce((score, segment) => {\n if (!segment.isDynamic) return score + 100;\n if (!segment.isCatchAll) return score + 50;\n return score + (segment.isOptional ? 5 : 10);\n }, entry.route.segments.length);\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 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 redirects: Map<string, RedirectEntry> = new Map();\n private programmaticPages: Map<string, ProgrammaticPageRoute> = new Map();\n private programmaticLayouts: Map<string, ProgrammaticLayoutRoute> = new Map();\n private viteServer?: ViteDevServer;\n\n constructor(config: Required<FarmConfig>, viteServer?: ViteDevServer) {\n this.config = config;\n this.viteServer = viteServer;\n }\n\n /**\n * Discover all routes in the app directory\n */\n async discoverRoutes(): Promise<void> {\n this.routes.clear();\n this.layouts.clear();\n this.routeSlots.clear();\n this.loadings.clear();\n this.errors.clear();\n this.metadataImages.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.routes.has(slot.pattern)) {\n throw new Error(\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(\n ([, left], [, right]) => routeSpecificity(right) - routeSpecificity(left),\n ),\n );\n\n // Silent discovery - only log if verbose mode enabled\n if (process.env.FARM_VERBOSE) {\n logger.info(`Discovered ${this.routes.size} pages and ${this.layouts.size} layouts`);\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 getRedirects(): ProgrammaticRedirectRoute[] {\n return Array.from(this.redirects.values()).map((entry) => entry.definition);\n }\n\n matchRedirect(pathname: string): {\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: this.localizeRedirectDestination(\n interpolateRedirectDestination(redirectEntry.definition.destination, match.params),\n localeMatch?.locale,\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 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 a client-side route manifest for SPA navigation\n * This eliminates the need for server requests during navigation\n */\n generateClientManifest(projectRoot: string): {\n routes: Array<{\n pattern: string;\n modulePath: string;\n shouldHydrate: boolean;\n isClientComponent: boolean;\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 }>;\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 const toUrlPath = (absolutePath: string) => {\n if (absolutePath === projectRoot || absolutePath.startsWith(`${projectRoot}${path.sep}`)) {\n return absolutePath.slice(projectRoot.length);\n }\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 routes = Array.from(this.routes.values()).map((entry) => {\n const metadata = getClientModuleMetadata(entry.modulePath, projectRoot);\n const programmaticPage = this.programmaticPages.get(entry.modulePath);\n return {\n pattern: entry.pattern,\n modulePath: toUrlPath(entry.modulePath),\n shouldHydrate: metadata.shouldHydrate,\n isClientComponent: metadata.isClientComponent,\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 = Array.from(this.layouts.values()).map((entry) => ({\n pattern: entry.pattern,\n modulePath: toUrlPath(entry.modulePath),\n }));\n\n const slots = Array.from(this.routeSlots.values()).map((entry) => {\n const metadata = getClientModuleMetadata(entry.modulePath, projectRoot);\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 return { routes, layouts, slots };\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 return createRouteModuleFromProgrammaticPage(programmaticPage);\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 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 async discoverFileRoutes(source: FarmSourceRoot): Promise<void> {\n const appDir = resolveAppPath(source.root, source.srcDir, \"app\");\n const pageFiles = await safeGlobFiles(\"**/page.{ts,tsx,js,jsx,md,mdx}\", appDir);\n const slotDefaultFiles = await safeGlobFiles(\"**/@*/**/default.{ts,tsx,js,jsx}\", appDir);\n const layoutFiles = await safeGlobFiles(\"**/layout.{ts,tsx,js,jsx}\", appDir);\n const loadingFiles = await safeGlobFiles(\"**/loading.{ts,tsx,js,jsx}\", appDir);\n const errorFiles = await safeGlobFiles(\"**/error.{ts,tsx,js,jsx}\", appDir);\n const metadataImageFiles = await safeGlobFiles(\n \"**/{opengraph-image,twitter-image}.{ts,tsx,js,jsx,png,jpg,jpeg,gif,webp}\",\n appDir,\n );\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.routes.set(pattern, {\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\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.routes.set(pattern, {\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 const pathSegments = pathname.split(\"/\").filter(Boolean);\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 (layoutEntry.route.segments.length > pathSegments.length) {\n continue;\n }\n\n let matches = true;\n for (let i = 0; i < layoutEntry.route.segments.length; i++) {\n const segment = layoutEntry.route.segments[i];\n if (!segment.isDynamic && segment.segment !== pathSegments[i]) {\n matches = false;\n break;\n }\n }\n\n if (matches) {\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 routeSpecificity(right.entry) - routeSpecificity(left.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 const pathSegments = pathname.split(\"/\").filter(Boolean);\n if (patternSegments.length > pathSegments.length) return false;\n\n for (let index = 0; index < patternSegments.length; index++) {\n const segment = patternSegments[index]!;\n if (!segment.isDynamic && segment.segment !== pathSegments[index]) return false;\n }\n return true;\n }\n\n private findNearestBoundary(\n pathname: string,\n boundaries: Map<string, RouteEntry>,\n ): RouteEntry | null {\n const normalizedPath = pathname === \"/\" ? \"/\" : pathname.replace(/\\/$/, \"\");\n const pathSegments = normalizedPath.split(\"/\").filter(Boolean);\n let bestMatch: RouteEntry | null = null;\n\n for (const boundaryEntry of boundaries.values()) {\n if (boundaryEntry.route.segments.length > pathSegments.length) {\n continue;\n }\n\n let matches = true;\n for (let i = 0; i < boundaryEntry.route.segments.length; i++) {\n const segment = boundaryEntry.route.segments[i];\n const pathSegment = pathSegments[i];\n\n if (!pathSegment) {\n matches = false;\n break;\n }\n\n if (!segment.isDynamic && segment.segment !== pathSegment) {\n matches = false;\n break;\n }\n }\n\n if (!matches) {\n continue;\n }\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 result = await collectSSGPages(routes, (filePath) => this.loadRouteModule(filePath));\n const i18n = this.getI18nConfig();\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\nfunction 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 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 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\";\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 candidates.add(modulePath.slice(4));\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}\n\ninterface ParsedClientModuleMetadata {\n isClientComponent: boolean;\n hasHydrateExport: boolean;\n}\n\nconst RESOLVABLE_SOURCE_EXTENSIONS = [\n \".tsx\",\n \".ts\",\n \".jsx\",\n \".js\",\n \".mts\",\n \".mjs\",\n \".cts\",\n \".cjs\",\n] as const;\n\nexport function hasUseClientDirective(content: string | null): boolean {\n if (!content) {\n return false;\n }\n const normalized = content.trimStart();\n return normalized.startsWith(\"'use client'\") || normalized.startsWith('\"use client\"');\n}\n\nexport function hasHydrateExport(content: string | null): boolean {\n if (!content) {\n return false;\n }\n return (\n /\\bexport\\s+const\\s+hydrate\\s*=\\s*true\\b/.test(content) ||\n /\\bexport\\s*\\{\\s*hydrate\\s*\\}\\b/.test(content)\n );\n}\n\nexport function stripUseClientDirective(content: string): string {\n return content.replace(/^\\s*([\"'])use client\\1\\s*;?\\s*/, \"\");\n}\n\nfunction parseClientModuleMetadata(content: string | null): ParsedClientModuleMetadata {\n if (!content) {\n return {\n isClientComponent: false,\n hasHydrateExport: false,\n };\n }\n\n return {\n isClientComponent: hasUseClientDirective(content),\n hasHydrateExport: hasHydrateExport(content),\n };\n}\n\nexport function getClientModuleMetadata(modulePath: string, root?: string): ClientModuleMetadata {\n const resolvedPath = resolveModuleSourcePath(modulePath, root);\n return inspectClientModuleMetadata(resolvedPath, root, new Set());\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): ClientModuleMetadata {\n if (!resolvedPath || visited.has(resolvedPath)) {\n return {\n isClientComponent: false,\n shouldHydrate: false,\n };\n }\n\n visited.add(resolvedPath);\n\n const content = readIfExists(resolvedPath);\n const parsed = parseClientModuleMetadata(content);\n if (parsed.isClientComponent) {\n return {\n isClientComponent: true,\n shouldHydrate: true,\n };\n }\n\n let importsClientBoundary = false;\n for (const specifier of getRelativeImportSpecifiers(content)) {\n const importedPath = resolveImportedModuleSourcePath(resolvedPath, specifier, root);\n const importedMetadata = inspectClientModuleMetadata(importedPath, root, visited);\n if (importedMetadata.isClientComponent || importedMetadata.shouldHydrate) {\n importsClientBoundary = true;\n break;\n }\n }\n\n return {\n isClientComponent: false,\n shouldHydrate: parsed.hasHydrateExport || importsClientBoundary,\n };\n}\n\nfunction getRelativeImportSpecifiers(content: string | null): string[] {\n if (!content) {\n return [];\n }\n\n const pattern =\n /(?:^|\\n)\\s*(?:import|export)\\s+(?:type\\s+)?(?:[^\"'`]+?\\s+from\\s+)?[\"']([^\"']+)[\"']/g;\n const matches = new Set<string>();\n for (const match of content.matchAll(pattern)) {\n const specifier = match[1];\n if (!specifier || (!specifier.startsWith(\".\") && !specifier.startsWith(\"/\"))) {\n continue;\n }\n matches.add(specifier);\n }\n return Array.from(matches);\n}\n\nfunction resolveImportedModuleSourcePath(\n importerPath: string,\n specifier: string,\n root?: string,\n): string | null {\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 for (const extension of RESOLVABLE_SOURCE_EXTENSIONS) {\n candidates.add(`${basePath}${extension}`);\n candidates.add(path.join(basePath, `index${extension}`));\n }\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n }\n\n return null;\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?)$/, \"\");\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 React from \"react\";\nimport { renderToPipeableStream, renderToStaticMarkup } from \"react-dom/server\";\nimport * 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 } from \"../utils\";\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 { getIntegrationProviders, getRegisteredIntegrationAPIManifest } from \"../integrations\";\nimport { _runWithCurrentRequest, createWebRequestFromFarmRequest } from \"./request\";\nimport { createFarmCacheKey, getFarmDataCache, normalizeRevalidatePath } from \"../cache\";\nimport { emitFarmEvent } from \"../observability\";\nimport { getFarmRedirectError, isFarmNotFoundError, isFarmRedirectError } from \"../navigation\";\nimport {\n addMetadataImageReference,\n mergeMetadata,\n renderMetadataHead,\n type FarmMetadataImageReference,\n type MetadataImageKind,\n} from \"../metadata\";\nimport { resolveFarmRouteContext, withFarmRouteContext } from \"../route-context\";\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\";\n\nlet cachedClerkProvider: {\n ClerkProvider: React.ComponentType<{ children?: React.ReactNode } & Record<string, unknown>>;\n} | 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\ninterface PPRShellCacheOptions {\n pathname: string;\n search: string;\n revalidate?: number;\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]\"))return;if(queue.some(function(item){return item.target===target}))return;queue.push({target:target,createdAt:Date.now()});event.preventDefault();event.stopImmediatePropagation()},true);})();</script>`;\n}\n\nfunction searchParamsToObject(\n searchParams: URLSearchParams,\n): Record<string, string | string[] | undefined> {\n const output: Record<string, string | string[] | undefined> = {};\n\n searchParams.forEach((value, key) => {\n const existing = output[key];\n if (existing) {\n if (Array.isArray(existing)) {\n existing.push(value);\n } else {\n output[key] = [existing, value];\n }\n } else {\n output[key] = value;\n }\n });\n\n return output;\n}\n\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\nclass FarmRouteErrorBoundary extends React.Component<\n {\n Fallback: React.ComponentType<any>;\n fallbackProps: Record<string, any>;\n children: React.ReactNode;\n },\n { hasError: boolean; error: unknown }\n> {\n constructor(props: any) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: unknown) {\n return { hasError: true, error };\n }\n\n render() {\n if (this.state.hasError) {\n const Fallback = this.props.Fallback;\n return React.createElement(Fallback, {\n ...this.props.fallbackProps,\n error: this.state.error,\n reset: () => this.setState({ hasError: false, error: null }),\n });\n }\n return this.props.children as React.ReactElement;\n }\n}\n\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\n constructor(\n config: Required<FarmConfig>,\n routeManager: RouteManager,\n i18nRuntime?: FarmI18nRuntime,\n ) {\n this.config = config;\n this.routeManager = routeManager;\n this.i18nRuntime = i18nRuntime;\n this.loadSSGManifest();\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 try {\n const manifestPath = path.join(this.config.root, this.config.outDir, \"__ssg_manifest.json\");\n if (fs.existsSync(manifestPath)) {\n const content = fs.readFileSync(manifestPath, \"utf-8\");\n this.ssgManifest = JSON.parse(content);\n logger.info(`Loaded SSG manifest: ${this.ssgManifest.length} pages`);\n }\n } catch (error) {\n // No manifest in dev mode or first build\n }\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 = \"\"): string {\n return createFarmCacheKey([\"ppr\", 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) {\n return this.dataCache.getEntryAsync<CachedPPRShell>(this.getPPRCacheKey(pathname, search));\n }\n\n private async cachePPRShell(options: PPRShellCacheOptions, html: string): Promise<void> {\n const key = this.getPPRCacheKey(options.pathname, options.search);\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 { layouts } = this.routeManager.matchRoute(page.urlPath);\n const layoutModules = await Promise.all(\n layouts.map((l) => this.routeManager.loadLayoutModule(l.modulePath)),\n );\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 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 { renderToString } = await import(\"react-dom/server\");\n const html = renderToString(await this.wrapWithIntegrationProviders(pageElement));\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 const request = createWebRequestFromFarmRequest(req);\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 = new URL(req.url || \"/\", `http://${req.headers.host}`);\n pathname = url.pathname;\n emitFarmEvent({ type: \"render.start\", route: pathname, pathname });\n searchParamsObject = searchParamsToObject(url.searchParams);\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 // Check for pre-rendered SSG page first (production only)\n if (process.env.NODE_ENV === \"production\") {\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 match = this.routeManager.matchRoute(pathname);\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 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?: React.ComponentType<any>;\n notFound?: React.ComponentType<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 );\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 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 const pprCacheKey = this.getPPRCacheKey(pathname, url.search);\n const cachedPPRShell = await this.getCachedPPRShell(pathname, url.search);\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: React.ComponentType<any> | null = 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: React.ComponentType<any> | null = 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 // Build one fresh manifest per response and reuse its route metadata below.\n // This preserves immediate HMR visibility without scanning every route twice.\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 = getClientModuleMetadata(slot.route.modulePath, this.config.root);\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 const hasHydratableRouteSlots = renderedRouteSlots.some(\n (slot) => slot.isClientComponent || slot.shouldHydrate,\n );\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_SHOULD_HYDRATE__ = shouldHydrate;\n (req as any).__FARM_HAS_HYDRATABLE_ROUTE_SLOTS__ = hasHydratableRouteSlots;\n (req as any).__FARM_LOADING_MODULE_PATH__ = loadingBoundaryEntry?.modulePath\n ? loadingBoundaryEntry.modulePath.substring(\n loadingBoundaryEntry.modulePath.indexOf(\"/src/app/\"),\n )\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 = React.createElement(\n PageComponent as React.ComponentType<unknown>,\n pageProps as React.Attributes,\n );\n\n if (LoadingFallbackComponent) {\n const loadingFallback = React.createElement(LoadingFallbackComponent, {\n ...createRouteStateProps({\n params,\n searchParamsObject,\n path: pathname,\n middlewareMap,\n pluginExposedContext,\n }),\n } as React.Attributes);\n\n pageElement = React.createElement(\n React.Suspense,\n { fallback: loadingFallback },\n pageElement,\n );\n }\n\n // Wrap hydratable pages in a targeted container so the client can attach\n // without re-hydrating the surrounding layout shell.\n if (isClientComponent || shouldHydrate) {\n pageElement = React.createElement(\n \"div\",\n { id: \"__farm_page__\", \"data-farm-client\": \"true\" },\n pageElement,\n );\n }\n\n let wrappedElement: React.ReactElement = 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, React.ReactElement> = {};\n for (const slot of renderedRouteSlots) {\n if (slot.ownerPattern !== layoutEntry.pattern) continue;\n\n let slotElement = React.createElement(\n slot.module.default as React.ComponentType<unknown>,\n slot.props as React.Attributes,\n );\n slotElement = React.createElement(\n \"div\",\n {\n id: slot.containerId,\n \"data-farm-route-slot\": slot.name,\n \"data-farm-slot-owner\": slot.ownerPattern,\n },\n slotElement,\n );\n slotProps[slot.name] = slotElement;\n }\n wrappedElement = React.createElement(\n LayoutComponent as React.ComponentType<unknown>,\n {\n children: wrappedElement,\n params,\n ...slotProps,\n } as React.Attributes,\n );\n }\n\n if (ErrorFallbackComponent) {\n wrappedElement = React.createElement(\n FarmRouteErrorBoundary,\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 (error) {\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 await this.render404(req, res);\n } else if (!(res as any).writableEnded) {\n res.end();\n }\n completeRender(404, pathname);\n return;\n }\n\n emitFarmEvent({ type: \"render.error\", route: pathname, 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 errorModulePath: errorBoundaryEntry.modulePath,\n });\n\n if (rendered) {\n return;\n }\n }\n\n await this.render500(req, res, error);\n }\n }\n\n private async wrapWithIntegrationProviders(\n element: React.ReactElement,\n ): Promise<React.ReactElement> {\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.type === \"clerk\") {\n if (!cachedClerkProvider) {\n cachedClerkProvider = await importRuntimeModule(\"@clerk/react\");\n }\n\n wrapped = React.createElement(\n cachedClerkProvider!.ClerkProvider,\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 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 href = snapshot ? localizeFarmHref(rawHref, snapshot.locale, snapshot) : rawHref;\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 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 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 if (isWebResponse(value)) {\n res.statusCode = value.status;\n value.headers.forEach((headerValue, key) => {\n res.setHeader(key, headerValue);\n });\n\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n\n const body = Buffer.from(await value.arrayBuffer());\n res.write(body);\n res.end();\n return;\n }\n\n const contentType = (imageModule as any).contentType || \"image/svg+xml; charset=utf-8\";\n let body: string | Buffer;\n\n if (typeof value === \"string\") {\n body = value;\n } else if (value instanceof ArrayBuffer) {\n body = Buffer.from(value);\n } else if (ArrayBuffer.isView(value)) {\n body = Buffer.from(value.buffer, value.byteOffset, value.byteLength);\n } else if (React.isValidElement(value)) {\n body = renderToStaticMarkup(value);\n } else {\n throw new Error(\"Metadata image must return a Response, string, bytes, or React element\");\n }\n\n res.statusCode = res.statusCode || 200;\n res.setHeader(\"Content-Type\", contentType);\n res.setHeader(\"Cache-Control\", \"public, max-age=0, must-revalidate\");\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n res.write(body);\n res.end();\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 = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`);\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 (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 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 as React.ComponentType<unknown>;\n const errorElement = React.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 } as React.Attributes);\n\n let wrapped: React.ReactElement = 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 = React.createElement(\n LayoutComponent as React.ComponentType<unknown>,\n {\n children: wrapped,\n params: options.params,\n } as React.Attributes,\n );\n }\n\n const ReactDOMServer = await import(\"react-dom/server\");\n const html = await _runWithMiddlewareData(options.middlewareMap, () =>\n _runWithMiddlewareContext(options.middlewareContext, () =>\n ReactDOMServer.renderToString(wrapped),\n ),\n );\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\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 renderWithSSR(\n element: React.ReactElement,\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 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\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 ? pagePath.startsWith(this.config.root)\n ? pagePath.slice(this.config.root.length)\n : pagePath\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 ],\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 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 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\" && slot.modulePath.startsWith(this.config.root)\n ? slot.modulePath.slice(this.config.root.length)\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_SHOULD_HYDRATE__ = ${JSON.stringify((req as any).__FARM_SHOULD_HYDRATE__ === true)};\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\n // React 19: ensure root is a single DOM node so streaming starts early (avoids Fragment delay)\n const streamRoot = React.createElement(\"div\", { style: { display: \"contents\" } }, element);\n const { pipe, abort } = 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 }>\n<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 <link rel=\"stylesheet\" href=\"/src/app/globals.css\" />\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 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 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 = new URL(req.url || \"/\", `http://${req.headers.host || \"localhost\"}`).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 = [\".tsx\", \".jsx\", \".ts\", \".js\"];\n let notFoundPath: string | null = null;\n\n for (const ext of notFoundExtensions) {\n const checkPath = path.join(appDir, `not-found${ext}`);\n if (fs.existsSync(checkPath)) {\n notFoundPath = checkPath;\n break;\n }\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: React.ComponentType<unknown> | null = null;\n for (const ext of notFoundExtensions) {\n const layoutPath = path.join(appDir, `layout${ext}`);\n if (fs.existsSync(layoutPath)) {\n try {\n const layoutModule = await this.routeManager.loadLayoutModule(layoutPath);\n LayoutComponent = layoutModule.default as React.ComponentType<unknown>;\n } catch {\n // Layout import failed, continue without it\n }\n break;\n }\n }\n\n // Render the 404 page\n let element = React.createElement(\n NotFoundComponent as React.ComponentType<unknown>,\n { pathname } as React.Attributes,\n );\n\n // Wrap with layout if available\n if (LayoutComponent) {\n element = React.createElement(\n LayoutComponent as React.ComponentType<unknown>,\n { children: element } as React.Attributes,\n );\n }\n\n // Render to string\n const ReactDOMServer = await import(\"react-dom/server\");\n const content = ReactDOMServer.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 logger.warn(`Failed to render custom 404 page: ${error}`);\n }\n\n // Fallback to default styled 404 page\n const defaultContent = `\n <div style=\"display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;font-family:system-ui,-apple-system,sans-serif;background:#f9fafb;padding:20px;text-align:center;\">\n <div style=\"background:white;border-radius:12px;padding:48px;box-shadow:0 4px 6px rgba(0,0,0,0.1);max-width:500px;width:100%;\">\n <h1 style=\"font-size:96px;font-weight:bold;color:#22c55e;margin:0 0 16px;line-height:1;\">404</h1>\n <h2 style=\"font-size:24px;font-weight:600;color:#1f2937;margin:0 0 16px;\">Page Not Found</h2>\n <p style=\"font-size:16px;color:#6b7280;margin:0 0 24px;\">\n The page <code style=\"background:#f3f4f6;padding:2px 6px;border-radius:4px;\">${pathname}</code> doesn't exist.\n </p>\n <a href=\"/\" style=\"display:inline-block;background:#22c55e;color:white;padding:12px 24px;border-radius:8px;text-decoration:none;font-weight:500;\">Go Home</a>\n </div>\n <p style=\"margin-top:24px;font-size:14px;color:#9ca3af;\">Powered by Farm.js</p>\n </div>\n `;\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 render500(req: FarmRequest, res: FarmResponse, error: any): 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 = 500;\n\n const isDev = process.env.NODE_ENV === \"development\";\n const errorMessage = isDev ? error.stack || error.message : \"Internal Server Error\";\n\n const html = this.createFullHTML(\n `\n <h1>500 - Internal Server Error</h1>\n ${isDev ? `<pre>${errorMessage}</pre>` : \"\"}\n `,\n false,\n req.url || \"/\",\n );\n\n res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n res.write(html);\n res.end();\n }\n\n private createFullHTML(content: string, isClientComponent = false, requestPath = \"/\"): 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\n return `<!DOCTYPE html>\n<html lang=\"${escapeHtmlAttribute(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 <meta name=\"farm-deployment-id\" content=\"${escapeHtmlAttribute(this.getDeploymentId())}\">\n <link rel=\"icon\" href=\"data:,\">\n <title>Farm.js App</title>${alternateLinks}\n <link rel=\"stylesheet\" href=\"/src/app/globals.css\" />\n <script type=\"module\" src=\"/@vite/client\"></script>\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","import type { FarmConfig } from \"./types\";\nimport type { FarmDocsResolvedConfig } from \"./docs/types\";\nimport type { FarmMarkdownResolvedConfig } from \"./markdown\";\nimport type { FarmMdxResolvedConfig } from \"./app-markdown\";\nimport { resolveMdxConfig } from \"./app-markdown\";\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 { 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 { 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\";\n\ntype NormalizedFarmConfig = Omit<Required<FarmConfig>, \"devtools\" | \"images\" | \"i18n\"> & {\n docs: FarmDocsResolvedConfig;\n md: FarmMarkdownResolvedConfig;\n mdx: FarmMdxResolvedConfig;\n cron: FarmCronResolvedConfig;\n workflows: FarmWorkflowsResolvedConfig;\n devtools: ResolvedFarmDevtoolsConfig;\n images: ResolvedFarmImageConfig;\n i18n: ResolvedFarmI18nConfig;\n auth: ResolvedFarmAuthConfig;\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 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(this.config, this.routeManager, this.i18nRuntime);\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\n // Verify app directory structure\n await this.verifyAppStructure();\n\n // Discover and register routes\n await this.routeManager.discoverRoutes();\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\n return {\n root,\n srcDir: config.srcDir || \"src\",\n extends: config.extends || [],\n layers: [...(config.layers || [])],\n outDir: config.outDir || \"dist\",\n basePath: config.basePath || \"/\",\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 middleware: config.middleware || {},\n routeRules: normalizeRouteRules(config.routeRules),\n context: config.context || (() => undefined),\n serverActions: resolveServerActionsConfig(config.serverActions),\n images: resolveFarmImageConfig(config.images),\n i18n: isResolvedI18nConfig(config.i18n)\n ? config.i18n\n : resolveFarmI18nConfig(config.i18n, {\n root,\n mode: process.env.NODE_ENV === \"production\" ? \"production\" : \"development\",\n }),\n deploymentId: config.deploymentId || \"development\",\n docs: isResolvedDocsConfig(config.docs) ? config.docs : defaultDocsConfig,\n md: resolveMarkdownConfig(config.md),\n mdx: resolveMdxConfig(config.mdx),\n observability: config.observability ?? false,\n devtools: resolveFarmDevtoolsConfig(\n config.devtools,\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 ...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 rootLayoutPaths = appDirs.flatMap((appDir) => [\n path.join(appDir, \"layout.tsx\"),\n path.join(appDir, \"layout.ts\"),\n path.join(appDir, \"layout.jsx\"),\n path.join(appDir, \"layout.js\"),\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.tsx 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\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 { 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;\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): FarmClientPluginEntryCode {\n const resolved = resolveFarmClientPlugins(plugins, root);\n const registrations = `[\n${resolved\n .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 .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 type { ViteDevServer, ModuleNode } from \"vite\";\nimport { logger } from \"./utils\";\n\nexport class HMRManager {\n private server: ViteDevServer;\n\n constructor(server: ViteDevServer) {\n this.server = server;\n }\n\n /**\n * Send HMR update to client\n */\n async send(payload: any) {\n this.server.ws.send(payload);\n }\n\n /**\n * Trigger full page reload\n */\n async reloadPage() {\n this.server.ws.send({\n type: \"full-reload\",\n path: \"*\",\n });\n }\n\n /**\n * Handle file change and trigger HMR\n */\n async handleFileChange(file: string) {\n const module = await this.server.moduleGraph.getModuleByUrl(file);\n\n if (!module) {\n return;\n }\n\n // Invalidate module\n this.server.moduleGraph.invalidateModule(module);\n\n // Get affected modules\n const affectedModules = this.getAffectedModules(module);\n\n if (affectedModules.size === 0) {\n return;\n }\n\n if (file.includes(\"/app/\") && (file.endsWith(\"page.tsx\") || file.endsWith(\"page.ts\"))) {\n await this.reloadPage();\n return;\n }\n\n if (file.includes(\"/app/\") && (file.endsWith(\"layout.tsx\") || file.endsWith(\"layout.ts\"))) {\n await this.reloadPage();\n return;\n }\n // Send update for other files\n this.send({\n type: \"update\",\n updates: Array.from(affectedModules).map((m) => ({\n type: m.type === \"css\" ? \"css-update\" : \"js-update\",\n path: m.url,\n acceptedPath: m.url,\n timestamp: Date.now(),\n })),\n });\n }\n\n /**\n * Get all affected modules in the dependency graph\n */\n private getAffectedModules(module: ModuleNode): Set<ModuleNode> {\n const affected = new Set<ModuleNode>();\n const seen = new Set<ModuleNode>();\n\n const traverse = (mod: ModuleNode) => {\n if (seen.has(mod)) return;\n seen.add(mod);\n affected.add(mod);\n\n // Traverse importers\n for (const importer of mod.importers) {\n if (!importer.isSelfAccepting) {\n traverse(importer);\n }\n }\n };\n\n traverse(module);\n return affected;\n }\n\n /**\n * Handle custom HMR events from client\n */\n onClientMessage(event: string, callback: (data: any) => void) {\n // Vite handles this via ws.on\n }\n}\n\n/**\n * Create HMR client code for injection\n */\nexport function createHMRClientCode(): string {\n return `\n// Farm.js HMR Client\nif (import.meta.hot) {\n // Accept HMR updates for this module\n import.meta.hot.accept((newModule) => {\n if (newModule) {\n // Module updated, trigger re-render\n window.location.reload();\n }\n });\n\n // Listen for custom Farm.js events\n import.meta.hot.on('farm:route-update', (data) => {\n console.log('Route updated:', data.path);\n window.location.reload();\n });\n\n // Handle CSS updates\n import.meta.hot.on('vite:beforeUpdate', () => {\n console.log('[Farm.js] HMR update incoming...');\n });\n\n import.meta.hot.on('vite:afterUpdate', () => {\n console.log('[Farm.js] HMR update applied ✓');\n });\n\n // Handle errors\n import.meta.hot.on('vite:error', (err) => {\n console.error('[Farm.js] HMR error:', err);\n });\n}\n`;\n}\n","import { existsSync, mkdirSync, readFileSync, unlinkSync } from \"fs\";\nimport { dirname, 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 { generateFarmImageTypes } from \"./image-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\";\n\nexport { generateFarmI18nTypes };\n\nexport interface GenerateFarmTypeArtifactsOptions {\n root: string;\n srcDir?: string;\n configPath?: string;\n extraRoutes?: string[];\n layers?: readonly ResolvedFarmLayer[];\n suppressLintOnLink?: boolean;\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}\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}\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 };\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 sourceRoots,\n };\n unifiedSections.push(await createRouteTypeDeclarations(routeOptions, unifiedTypesPath));\n result.routeTypesPath = unifiedTypesPath;\n } else if (shouldGenerateRoutes) {\n result.routeTypesPath = await generateRouteTypes({\n root,\n srcDir,\n outFile: options.routeTypesOutFile,\n extraRoutes: options.extraRoutes || [],\n suppressLintOnLink: options.suppressLintOnLink,\n sourceRoots,\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 content = generator.generateAPIRouter(apiRoutes, { outFile: apiTypesPath });\n\n mkdirSync(dirname(apiTypesPath), { recursive: true });\n writeFileIfChanged(apiTypesPath, content);\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 result.envTypesPath = await generateEnvTypes({\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 }\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 result.imageTypesPath = generateFarmImageTypes({\n root,\n srcDir,\n outFile: options.imageTypesOutFile,\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 result.i18nTypesPath = await generateFarmI18nTypes({\n root,\n srcDir,\n config: options.i18nConfig,\n outFile: options.i18nTypesOutFile,\n });\n }\n\n if (shouldRefreshUnifiedTypes) {\n mkdirSync(dirname(unifiedTypesPath), { recursive: true });\n writeFileIfChanged(\n unifiedTypesPath,\n `/**\n * Generated by Farm.js. Do not edit.\n * Contains project-specific route, environment, and internationalization types.\n */\n\nimport \"@farm.js/core/image\";\n\n${unifiedSections.join(\"\\n\")}`,\n );\n result.typesPath = unifiedTypesPath;\n removeLegacyTypeArtifacts(root, srcDir);\n }\n\n return result;\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","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\";\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 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}\n\nconst DEFAULT_OUT_FILE = \"farm-routes.d.ts\";\n\n/**\n * Scan app directory for page files, generate RoutePath union type,\n * and write a .d.ts file for typed Link href.\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\n const patterns = 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 pageFiles = await glob.default(\"**/page.{ts,tsx,js,jsx,md,mdx}\", {\n cwd: appDir,\n absolute: false,\n });\n\n for (const file of pageFiles) {\n if (parseRouteSlotFile(file)) continue;\n const route = parseRoutePath(file);\n if (route.type === \"page\") {\n const pattern = createRoutePattern(route);\n patterns.add(pattern);\n }\n }\n }\n\n for (const route of await discoverProgrammaticRoutePaths(source.root, source.srcDir)) {\n patterns.add(route);\n }\n }\n\n for (const route of extraRoutes) {\n if (route.startsWith(\"/\")) {\n patterns.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\n const routePathType = suppressLintOnLink\n ? \"string\"\n : typeLiterals.length\n ? typeLiterals.join(\" | \")\n : \"never\";\n const routePatternType = suppressLintOnLink\n ? \"string\"\n : patternLiterals.length\n ? patternLiterals.join(\" | \")\n : \"never\";\n const routeTypesImportPath = `./${path.basename(outPath).replace(/\\.d\\.ts$/, \"\")}`;\n const augmentationBlock = 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 content = `/**\n * Auto-generated route types from src/app.\n * Link href is typed automatically via module augmentation. Regenerated on dev start and when routes change.\n * Set suppressLintOnLink: true in farm.config.ts to accept any string on Link href.\n */\nexport type RoutePath = ${routePathType};\nexport type RoutePattern = ${routePatternType};${augmentationBlock}\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 { 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, ViteDevServer, HmrContext } from \"vite\";\nimport type { FarmConfig } from \"./types\";\nimport { FarmApp } from \"./app\";\nimport { logger, toViteModuleId } from \"./utils\";\nimport { defaultGlobalCSS } from \"./default-styles\";\nimport type { FarmPlugin, FarmPluginRuntimeSession, PluginManager } from \"./plugin\";\nimport { generateFarmClientPluginEntryCode } from \"./client-plugin-build\";\nimport { HMRManager } from \"./hmr\";\nimport { APIRouteManager } from \"./api/route-manager\";\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\";\nimport type { FarmDocsAPIHandler } from \"./docs\";\nimport { createMarkdownMirrorResponse, resolveMarkdownMirrorTarget } from \"./markdown\";\nimport { createFarmMarkdownSourceResponse, isFarmMarkdownPageFile } from \"./app-markdown\";\nimport { sendWebResponse } from \"./server/response\";\nimport {\n getClientModuleMetadata,\n hasUseClientDirective,\n stripUseClientDirective,\n} from \"./utils/client-component\";\nimport {\n dispatchIntegrationRequest,\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 * as fs from \"fs\";\nimport * as path from \"path\";\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 {\n createFarmDeploymentMismatchResponse,\n FARM_DEPLOYMENT_ID_HEADER,\n getFarmDeploymentMismatch,\n} from \"./deployment\";\nimport { getPublicFarmImageConfig, resolveFarmImageConfig } from \"./image-config\";\nimport { farmImageImportsPlugin } from \"./image-vite\";\nimport { createFarmImageHandler, type FarmImageHandler } from \"./image-server\";\nimport { getFarmI18nClientSnapshot } from \"./i18n/server\";\nimport { localizeFarmPathname } from \"./i18n/routing\";\nimport type { FarmI18nClientSnapshot } from \"./i18n/types\";\n\ninterface FarmVitePluginOptions extends FarmConfig {\n openapi?: FarmUserConfig[\"openapi\"];\n images?: FarmUserConfig[\"images\"];\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\";\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): 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 });\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 response.headers.forEach((value, key) => {\n res.setHeader(key, value);\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_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 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\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 let farmApp: FarmApp;\n let server: ViteDevServer;\n let hmrManager: HMRManager;\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 pluginManager: PluginManager | undefined = initialPluginManager;\n const logUpdate = (tag: \"PAGE\" | \"API\" | \"MIDDLEWARE\" | \"TYPE\", message: string) => {\n try {\n const pc = require(\"picocolors\");\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 } catch {\n console.log(`[FARM] [${tag}] [UPDATE] ${message}`);\n }\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 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 // Defer initialization until Vite server is available\n },\n\n async configureServer(viteServer) {\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 let imageHandler: FarmImageHandler | null = null;\n if (farmConfig.images.provider !== \"none\") {\n const { createNodeImageUrlValidator, createSharpImageTransformer } =\n await import(\"./image-sharp\");\n imageHandler = createFarmImageHandler(farmConfig.images, {\n transform: createSharpImageTransformer(),\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 extraRoutes: getExtraRouteTypes(),\n suppressLintOnLink: farmConfig.suppressLintOnLink,\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 if (process.env.FARM_VERBOSE) {\n logger.warn(\"Type artifact generation failed: \" + (e as Error).message);\n }\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)$|\\/(?: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 for (const [artifact, enabled] of Object.entries(selection)) {\n if (enabled) {\n pendingTypeArtifacts[artifact as keyof TypeArtifactSelection] = true;\n }\n }\n pendingTypeArtifactReason ||= `${event} ${file.split(\"/app/\")[1] || file}`;\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 HMR manager\n hmrManager = new HMRManager(server);\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 i18n: farmApp.getI18nRuntime(),\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 });\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 );\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 await openAPIManager.generateSpec();\n logger.success(\"✅ OpenAPI documentation enabled\");\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 farmDocsHandler = farmDocsDevRuntime\n ? farmDocsDevRuntime.createFarmDocsHandler(farmConfig.docs, {\n root: farmConfig.root,\n srcDir: farmConfig.srcDir,\n clientEntry: \"/@farm/client.js\",\n })\n : null;\n const farmDocsAPIHandler: FarmDocsAPIHandler | null = farmDocsDevRuntime\n ? farmDocsDevRuntime.createFarmDocsAPIHandler({\n rootDir: farmConfig.root,\n srcDir: farmConfig.srcDir,\n docs: farmConfig.docs,\n })\n : null;\n const farmDocsFontAssets = new Map<string, string>(\n farmDocsDevRuntime\n ? [\n [\n \"/assets/Geist-Variable-CrgPqtmy.woff2\",\n path.join(\n farmConfig.root,\n \"node_modules/geist/dist/fonts/geist-sans/Geist-Variable.woff2\",\n ),\n ],\n [\n \"/assets/GeistMono-Variable-BNLlm6Cd.woff2\",\n path.join(\n farmConfig.root,\n \"node_modules/geist/dist/fonts/geist-mono/GeistMono-Variable.woff2\",\n ),\n ],\n ]\n : [],\n );\n\n // Built-in terminal logging (always enabled in development, independent of logger plugin)\n const logRequest = (method: string, urlPath: string, tag: \"API\" | \"PAGE\") => {\n try {\n const pc = require(\"picocolors\");\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 tag === \"API\" ? pc.gray(\"Requesting \") : pc.gray(\"Loading \"),\n pc.gray(urlPath),\n ].join(\" \");\n console.log(log);\n } catch {\n console.log(`[FARM] [${tag}] [${method}] ${urlPath}`);\n }\n };\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 try {\n const pc = require(\"picocolors\");\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 } catch {\n console.log(`[FARM] [${tag}] [${method}] ${urlPath} - ${status} (${duration}ms)`);\n }\n };\n\n // Register middleware directly (not in return function) to ensure it runs early\n server.middlewares.use(\n _withAfterNodeMiddleware(async (req, res, next) => {\n const requestUrl = req.url || \"/\";\n const requestMethod = req.method || \"GET\";\n const fullUrl = `http://${req.headers.host || \"localhost:3000\"}${requestUrl}`;\n const parsedRequestUrl = new URL(fullUrl);\n const requestPathname = parsedRequestUrl.pathname;\n const currentConfig = farmApp?.getConfig() ?? options;\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 (farmDocsFontPath && fs.existsSync(farmDocsFontPath)) {\n res.statusCode = 200;\n res.setHeader(\"Content-Type\", \"font/woff2\");\n res.setHeader(\"Cache-Control\", \"public, max-age=31536000, immutable\");\n 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 const { renderFarmDevtoolsHtml } = await loadFarmDevtoolsUIRuntime();\n res.end(renderFarmDevtoolsHtml(snapshot));\n }\n return;\n }\n\n // Handle OpenAPI docs route\n if (openAPIManager && req.url === 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 docsResponse = await farmDocsHandler(\n new Request(fullUrl, {\n method: requestMethod,\n headers: docsHeaders,\n }),\n );\n if (docsResponse) {\n await sendWebResponse(res, docsResponse);\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: string | undefined;\n if (requestMethod !== \"GET\" && requestMethod !== \"HEAD\") {\n workflowBody = await new Promise<string>((resolve) => {\n let data = \"\";\n req.on(\"data\", (chunk) => {\n data += chunk;\n });\n req.on(\"end\", () => {\n resolve(data);\n });\n });\n }\n const workflowResponse = await workflowHandler(\n new Request(fullUrl, {\n method: requestMethod,\n headers: docsHeaders,\n body: workflowBody || undefined,\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.runHookParallel(\"beforeRequest\", req, res);\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: string | undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n body = await new Promise<string>((resolve) => {\n let data = \"\";\n req.on(\"data\", (chunk) => {\n data += chunk;\n });\n req.on(\"end\", () => {\n resolve(data);\n });\n });\n }\n\n const integrationRequest = new Request(fullUrl, {\n method: req.method,\n headers,\n body: body || undefined,\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 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.getRouteManager().matchRedirect(requestPathname);\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 || req.url?.startsWith(\"/api/\")) {\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 await pm.runHookParallel(\"beforeRequest\", req, res);\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 const apiHandler = apiRouteManager.getHandler();\n const hasExplicitAPIRoute =\n hasMatchedApiRoute || Boolean(apiRouteManager.matchRoute(pathname));\n if (apiHandler && hasExplicitAPIRoute) {\n // Log API request\n // logRequest(method, urlPath, \"API\");\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: string | undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n body = await new Promise<string>((resolve) => {\n let data = \"\";\n req.on(\"data\", (chunk) => {\n data += chunk;\n });\n req.on(\"end\", () => {\n resolve(data);\n });\n });\n }\n\n const request = new Request(url, {\n method: req.method,\n headers,\n body: body || undefined,\n });\n\n const apiLifecyclePayload = {\n pathname: new URL(url).pathname,\n method,\n routePath:\n apiRouteManager.matchRoute(new URL(url).pathname)?.route.path ||\n matchedApiRoute?.route.path ||\n urlPath,\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 logResponse(method, urlPath, handledResponse.status, duration, \"API\");\n\n // Send response\n await sendWebResponse(res, handledResponse);\n return;\n } catch (error) {\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: string | undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n body = await new Promise<string>((resolve) => {\n let data = \"\";\n req.on(\"data\", (chunk) => {\n data += chunk;\n });\n req.on(\"end\", () => {\n resolve(data);\n });\n });\n }\n\n const request = new Request(url, {\n method: req.method,\n headers,\n body: body || undefined,\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 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 (\n req.url?.startsWith(\"/@\") ||\n req.url?.startsWith(\"/node_modules\") ||\n (requestPathname.includes(\".\") && !requestPathname.endsWith(\".html\"))\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 = new URL(req.url, `http://${req.headers.host || \"localhost:3000\"}`);\n const targetPath = urlObj.searchParams.get(\"path\") || \"/\";\n\n try {\n const request = createRequestFromNodeRequest(req, urlObj);\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 });\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\n const moduleMetadata = getClientModuleMetadata(\n route.modulePath,\n server.config.root,\n );\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\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: Record<string, string> = {};\n targetUrl.searchParams.forEach((value, key) => {\n searchParams[key] = value;\n });\n const routeContext = await resolveFarmRouteContext(farmApp.getConfig(), {\n request,\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 = getClientModuleMetadata(\n slot.route.modulePath,\n server.config.root,\n );\n const slotContext = await resolveFarmRouteContext(farmApp.getConfig(), {\n request,\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 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 if (absolutePath.startsWith(projectRoot)) {\n return absolutePath.slice(projectRoot.length);\n }\n return absolutePath;\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 isClientComponent: routeSlots.length > 0 ? false : isClientComponent,\n shouldHydrate:\n shouldHydrate ||\n routeSlots.some((slot) => slot.isClientComponent || slot.shouldHydrate),\n metadata: {\n title: mergedMetadata.title,\n description: mergedMetadata.description,\n },\n layoutModules: layouts.map((l) => toUrlPath(l.modulePath)),\n routeSlots: routeSlots.map((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\": \"private, max-age=0\",\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 await emitPluginError(\"page-data\", error, {\n path: targetPath,\n });\n console.error(\"[Farm.js] Page data error:\", error);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(\n JSON.stringify({\n error: \"Failed to load page data\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n );\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 // logRequest(method, urlPath, \"PAGE\");\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 (pm && runtimeSession) {\n pm.copyRequestContext(req, runtimeSession.request);\n await pm.endRuntimeRequest(\n runtimeSession,\n new Response(null, {\n status: res.statusCode || 200,\n headers: createHeadersFromNodeResponse(res),\n }),\n );\n }\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, res.statusCode || 200, duration, \"PAGE\");\n return; // Middleware handled the response\n }\n }\n\n // Run beforeRequest hooks\n if (pm && hasBeforeRequestHook) {\n await pm.runHookParallel(\"beforeRequest\", req, res);\n }\n\n if (res.writableEnded) {\n if (pm && runtimeSession) {\n pm.copyRequestContext(req, runtimeSession.request);\n await pm.endRuntimeRequest(\n runtimeSession,\n new Response(null, {\n status: res.statusCode || 200,\n headers: createHeadersFromNodeResponse(res),\n }),\n );\n }\n // Log response if already ended\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, res.statusCode || 200, duration, \"PAGE\");\n return;\n }\n\n // Only intercept streamed output when an installed plugin can\n // observe or replace the response. The default dev path can write\n // directly to Node without buffering and replaying the whole HTML.\n const shouldInterceptResponse = Boolean(\n pm &&\n (hasAfterResponseHook ||\n hasHTMLTransformHook ||\n (runtimeSession && hasRuntimeAfterHook)),\n );\n if (pm && shouldInterceptResponse) {\n const originalWrite = res.write.bind(res);\n const originalEnd = res.end.bind(res);\n let afterResponseCalled = false;\n const htmlChunks: Buffer[] = [];\n let didStreamHtml = false;\n const bufferPluginResponse = Boolean(\n hasHTMLTransformHook || (runtimeSession && hasRuntimeAfterHook),\n );\n\n res.write = ((chunk: any, ...args: any[]) => {\n const contentTypeHeader =\n res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n const contentType = typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n const isHtmlResponse = contentType.includes(\"text/html\");\n\n if (isHtmlResponse && chunk !== undefined && chunk !== null) {\n const bufferChunk = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n htmlChunks.push(bufferChunk);\n didStreamHtml = true;\n if (bufferPluginResponse) {\n const callback = args.find((arg) => typeof arg === \"function\");\n callback?.();\n return true;\n }\n const writeResult = originalWrite(chunk, ...args);\n if (typeof (res as any).flush === \"function\") {\n (res as any).flush();\n }\n return writeResult;\n }\n\n return originalWrite(chunk, ...args);\n }) as any;\n\n res.end = ((...args: any[]) => {\n if (!afterResponseCalled && pm) {\n afterResponseCalled = true;\n const duration = Date.now() - startTime;\n logResponse(method, urlPath, res.statusCode || 200, duration, \"PAGE\");\n const originalEndArgs = [...args];\n Promise.resolve()\n .then(async () => {\n const contentTypeHeader =\n res.getHeader(\"content-type\") || res.getHeader(\"Content-Type\");\n const contentType =\n typeof contentTypeHeader === \"string\" ? contentTypeHeader : \"\";\n const isHtmlResponse = contentType.includes(\"text/html\");\n if (isHtmlResponse) {\n const firstArg = args[0];\n if (typeof firstArg === \"string\" || Buffer.isBuffer(firstArg)) {\n const bufferChunk = Buffer.isBuffer(firstArg)\n ? firstArg\n : Buffer.from(firstArg, \"utf-8\");\n htmlChunks.push(bufferChunk);\n }\n\n const fullHtml = Buffer.concat(htmlChunks).toString(\"utf-8\");\n let html = fullHtml;\n if (!didStreamHtml || bufferPluginResponse) {\n html = await pm.runHookSerial(\"transformHTML\", html);\n html = await pm.runHookSerial(\"afterRender\", html, renderPayload);\n const callback =\n typeof originalEndArgs[originalEndArgs.length - 1] === \"function\"\n ? originalEndArgs[originalEndArgs.length - 1]\n : undefined;\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 : typeof firstArg === \"string\" || Buffer.isBuffer(firstArg)\n ? firstArg\n : undefined\n : typeof firstArg === \"string\" || Buffer.isBuffer(firstArg)\n ? firstArg\n : undefined\n : null;\n const runtimeResponse = await pm.endRuntimeRequest(\n runtimeSession,\n new Response(\n Buffer.isBuffer(responseBody)\n ? responseBody.toString(\"utf8\")\n : responseBody,\n {\n status,\n headers: createHeadersFromNodeResponse(res),\n },\n ),\n );\n applyWebResponseToNodeResponse(runtimeResponse, res);\n\n if (!didStreamHtml || bufferPluginResponse) {\n const callback =\n typeof originalEndArgs[originalEndArgs.length - 1] === \"function\"\n ? originalEndArgs[originalEndArgs.length - 1]\n : undefined;\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\n ? pm.runHookParallel(\"afterResponse\", req, res)\n : undefined,\n )\n .then(() => {\n originalEnd(...originalEndArgs);\n })\n .catch((err) => {\n emitPluginError(\"response-end\", err, { pathname }).catch(() => {});\n console.error(\"Error in afterResponse hook:\", err);\n originalEnd(...originalEndArgs);\n });\n } else {\n originalEnd(...args);\n }\n }) as any;\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 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 (id === \"/@farm/client\" || id === \"/@farm/client.js\") {\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 imageImports.load === \"function\") {\n const imageModule = await imageImports.load.call(this, id);\n if (imageModule) return imageModule;\n }\n\n if (parseProgrammaticRouteModuleId(id)) {\n return generateProgrammaticRouteModule(id, server?.config.root || options.root);\n }\n\n if (id === \"/@farm/client\" || id === \"/@farm/client.js\") {\n const resolvedConfig = farmApp?.getConfig();\n const integrations = resolvedConfig?.integrations || options.integrations;\n const root = resolvedConfig?.root || server?.config.root || process.cwd();\n const docs = resolvedConfig?.docs;\n const devtools = resolvedConfig?.devtools ?? resolveFarmDevtoolsConfig(false, \"production\");\n const [docsRuntime, docsSearchRuntime, devtoolsClientRuntime] = await Promise.all([\n docs?.enabled ? loadFarmDocsDevRuntime() : null,\n docs?.enabled ? 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\n return generateClientCode(\n getIntegrationProviders(integrations),\n [\n ...getIntegrationDocumentNavigationMatchers(integrations),\n ...(docsRuntime?.getFarmDocsDocumentNavigationMatchers(docs) ?? []),\n ],\n generatedDocsSearchRuntime,\n generatedDevtoolsClientRuntime,\n resolvedConfig?.plugins || [],\n root,\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 const moduleMetadata = getClientModuleMetadata(route.modulePath, server.config.root);\n\n fullManifest.routes[route.pattern] = {\n modulePath: route.modulePath,\n pattern: route.pattern,\n segments: route.segments,\n search: route.search,\n isClientComponent: moduleMetadata.isClientComponent,\n shouldHydrate: moduleMetadata.shouldHydrate,\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 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 (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 (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 moduleInfo = this.getModuleInfo(id);\n if (moduleInfo) {\n (moduleInfo as any).isClientComponent = true;\n }\n\n transformedCode = stripUseClientDirective(transformedCode);\n transformed = true;\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 hmrCode = `\nif (import.meta.hot) {\n import.meta.hot.accept((newModule) => {\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 Promise.resolve(\n typeof wrapProviders === 'function' ? wrapProviders(nextElement) : nextElement\n ).then((wrappedElement) => {\n window.__FARM_REACT_ROOT__.render(wrappedElement);\n console.log('[Farm.js] ⚡ HMR update applied');\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 generateBundle(options, bundle) {\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 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 if (file.includes(\"/app/\")) {\n // Hot reload middleware changes\n if (file.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 if (file.includes(\"page.\") || file.includes(\"layout.\")) {\n const shortPath = file.split(\"/app/\")[1] || file;\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 generateProgrammaticRouteModule(moduleId: string, root?: string): 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 { createElement as __farmCreateElement } from \"react\";\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\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 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 if (root && filePath.startsWith(root)) {\n return filePath.slice(root.length) || \"/\";\n }\n\n return 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: Array<{\n name: string;\n type: string;\n props?: Record<string, unknown>;\n }> = [],\n documentNavigationMatchers: string[] = [],\n docsSearchClientRuntime = EMPTY_FARM_DOCS_SEARCH_CLIENT_RUNTIME,\n devtoolsClientRuntime = \"\",\n plugins: readonly FarmPlugin[] = [],\n root = process.cwd(),\n): string {\n const hasClerkProvider = integrationProviders.some((provider) => provider.type === \"clerk\");\n const providerImportBlock = hasClerkProvider\n ? `import { ClerkProvider } from '@clerk/react';`\n : \"\";\n const clientPluginEntry = generateFarmClientPluginEntryCode(plugins, root);\n\n return `\nimport React from 'react'\nimport { hydrateRoot, createRoot } from 'react-dom/client'\nimport { installChunkErrorRecovery, SPARouter } from '@farm.js/core/client'\nimport { createClientPluginManager } from '@farm.js/core/plugin/client'\nimport { reviveDeferredData } from '@farm.js/core/deferred'\nimport {\n createFarmDeploymentMismatchError,\n createFarmDeploymentRequestHeaders,\n isFarmDeploymentMismatchResponse,\n} from '@farm.js/core/deployment'\n${providerImportBlock}\n${clientPluginEntry.imports}\n${docsSearchClientRuntime}\n${devtoolsClientRuntime}\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 integrationProviders = ${JSON.stringify(integrationProviders)};\nconst integrationDocumentNavigationMatchers = ${JSON.stringify(documentNavigationMatchers)};\n\ninstallChunkErrorRecovery();\n\nlet reactRoot = null;\n\nfunction matchesDocumentNavigation(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\nfunction wrapWithIntegrationProviders(element) {\n let wrapped = element;\n\n for (let i = integrationProviders.length - 1; i >= 0; i--) {\n const provider = integrationProviders[i];\n if (provider.type === 'clerk') {\n wrapped = React.createElement(ClerkProvider, provider.props || {}, wrapped);\n }\n }\n\n return wrapped;\n}\n\nwindow.__FARM_WRAP_PROVIDERS__ = wrapWithIntegrationProviders;\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 matchRoute(pathname, routeSegments) {\n const normalizedPath = pathname === '/' ? '' : pathname.replace(/^\\\\//, '').replace(/\\\\/$/, '');\n const pathSegments = normalizedPath ? normalizedPath.split('/') : [];\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 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 const manifest = getManifest();\n const layouts = Object.values(manifest.layouts);\n const normalizedPath = pathname === '/' ? '/' : pathname.replace(/\\\\/$/, '');\n const matchingLayouts = [];\n \n for (const layout of layouts) {\n // Root layout matches everything\n if (layout.pattern === '/') {\n matchingLayouts.push(layout);\n continue;\n }\n // Check if pathname starts with layout pattern\n if (normalizedPath.startsWith(layout.pattern) || \n normalizedPath === layout.pattern.replace(/\\\\/[^/]+$/, '')) {\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 - just update hash\n if (pathname === window.location.pathname && search === window.location.search) {\n if (url.hash) window.location.hash = url.hash;\n return;\n }\n\n // Save scroll position\n this.saveScrollPosition(window.location.pathname);\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 = {};\n url.searchParams.forEach((value, key) => {\n searchParams[key] = value;\n });\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\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 = {};\n url.searchParams.forEach((value, key) => {\n searchParams[key] = value;\n });\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);\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 component reference (loaded once, reused across navigations)\nlet LayoutComponent = null;\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;\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 const element = wrapWithIntegrationProviders(\n React.createElement(SlotComponent, props),\n );\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 hydrated = (await renderRouteSlot(slot, 'hydrate')) || hydrated;\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() {\n window.__FARM_HYDRATED__ = true;\n document.documentElement.dataset.farmHydrated = 'true';\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 = queue.splice(0, queue.length);\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\nasync function buildClientHydrationElement(PageComponent, pageProps) {\n let element = React.createElement(PageComponent, pageProps);\n const loadingModulePath = window.__FARM_LOADING_MODULE__;\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.warn('[Farm.js] Could not load loading boundary for hydration:', error);\n }\n }\n\n return element;\n}\n\nasync function ensureLayoutLoaded(layouts = []) {\n if (LayoutComponent || layouts.length === 0) {\n return LayoutComponent;\n }\n\n try {\n const rootLayout = layouts.find((layout) => layout.pattern === '/');\n if (rootLayout) {\n const layoutModule = await import(/* @vite-ignore */ rootLayout.modulePath);\n LayoutComponent = layoutModule.default;\n }\n } catch (error) {\n console.warn('[Farm.js] Could not load layout:', error);\n }\n\n return LayoutComponent;\n}\n\nfunction getCurrentSearchParams() {\n const searchParams = {};\n const url = new URL(window.location.href);\n url.searchParams.forEach((value, key) => {\n searchParams[key] = value;\n });\n return 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\nconst clientModuleHintCache = new Map();\n\nasync function moduleLooksClient(modulePath) {\n if (!modulePath) {\n return false;\n }\n\n if (clientModuleHintCache.has(modulePath)) {\n return clientModuleHintCache.get(modulePath);\n }\n\n try {\n const response = await fetch(modulePath, { headers: { Accept: \"text/javascript\" } });\n const source = await response.text();\n const looksClient = /[\"']use client[\"']/.test(source.slice(0, 256));\n const hasHydrateExport = /\\\\bexport\\\\s+const\\\\s+hydrate\\\\s*=\\\\s*true\\\\b/.test(source);\n const shouldHydrate = looksClient || hasHydrateExport;\n clientModuleHintCache.set(modulePath, shouldHydrate);\n return shouldHydrate;\n } catch (error) {\n clientModuleHintCache.set(modulePath, false);\n return false;\n }\n}\n\nasync function buildWrappedHydrationElement(PageComponent, pageProps, layouts = []) {\n await ensureLayoutLoaded(layouts);\n const pageElement = await buildClientHydrationElement(PageComponent, pageProps);\n const wrappedTree = LayoutComponent\n ? React.createElement(LayoutComponent, { children: pageElement })\n : pageElement;\n return wrapWithIntegrationProviders(wrappedTree);\n}\n\nasync function tryHydrateImportedPage(\n container,\n route,\n params,\n layouts,\n useHydrate = false,\n existingProps = null,\n) {\n const modulePath = route?.modulePath;\n if (!modulePath) {\n return false;\n }\n\n let pageModule = pageModuleCache.get(modulePath);\n if (!pageModule) {\n pageModule = await import(/* @vite-ignore */ modulePath);\n pageModuleCache.set(modulePath, pageModule);\n }\n\n const PageComponent = pageModule?.default;\n if (!PageComponent) {\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\n const wrappedElement = useHydrate && container?.id === '__farm_page__'\n ? wrapWithIntegrationProviders(\n await buildClientHydrationElement(PageComponent, currentPageProps),\n )\n : await buildWrappedHydrationElement(\n PageComponent,\n currentPageProps,\n layouts,\n );\n\n if (useHydrate) {\n try {\n reactRoot = hydrateRoot(container, wrappedElement);\n window.__FARM_REACT_ROOT__ = reactRoot;\n return true;\n } catch (error) {\n console.log('[Farm.js] Hydration mismatch, using createRoot');\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 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\n// ====== CHUNK-BASED NAVIGATION (TanStack Start pattern) ======\n// NO HTML fetching! Uses manifest to dynamically import page chunks\nasync function renderPage(pageData) {\n const container = document.getElementById('root');\n if (!container) return;\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 route = {\n modulePath: pageData.modulePath,\n isClientComponent: pageData.isClientComponent === true,\n shouldHydrate: pageData.shouldHydrate === true,\n };\n const params = pageData.props?.params || {};\n const layouts = (pageData.layoutModules || []).map((modulePath, index) => ({\n modulePath,\n pattern: index === 0 ? '/' : modulePath,\n }));\n const path = window.location.pathname + window.location.search;\n\n // Helper to fetch HTML and swap content, then re-hydrate if client component\n const fetchAndSwapHTML = async () => {\n console.log('[Farm.js] Fetching HTML for:', path);\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 html = await response.text();\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n const newRoot = doc.getElementById('root');\n\n const resetReactRoots = () => {\n if (appRoot) { try { appRoot.unmount(); } catch(e) {} appRoot = null; }\n if (reactRoot) { try { reactRoot.unmount(); } catch(e) {} reactRoot = null; }\n delete window.__FARM_REACT_ROOT__;\n hasClientTakenOver = false;\n };\n\n if (newRoot) {\n resetReactRoots();\n container.innerHTML = newRoot.innerHTML;\n const newTitle = doc.querySelector('title');\n if (newTitle) document.title = newTitle.textContent || document.title;\n \n const shouldHydrate =\n route.shouldHydrate === true ||\n route.isClientComponent ||\n await moduleLooksClient(route.modulePath);\n if (shouldHydrate) {\n try {\n const hydrationContainer = document.getElementById('__farm_page__') || container;\n await tryHydrateImportedPage(hydrationContainer, route, params, layouts, true);\n } catch (error) {\n // Keep the swapped server HTML when the page can only run on the server.\n }\n }\n \n console.log('[Farm.js] ⚡ HTML navigated to:', path);\n return true;\n }\n\n if (!doc.documentElement || !doc.body) return false;\n\n resetReactRoots();\n Array.from(document.documentElement.attributes).forEach(function(attr) {\n if (!doc.documentElement.hasAttribute(attr.name)) {\n document.documentElement.removeAttribute(attr.name);\n }\n });\n Array.from(doc.documentElement.attributes).forEach(function(attr) {\n document.documentElement.setAttribute(attr.name, attr.value);\n });\n\n document.head.innerHTML = doc.head ? doc.head.innerHTML : '';\n document.body.innerHTML = doc.body.innerHTML;\n delete window.__farmDocsRuntime;\n delete window.__farmDocsPageActionsRuntime;\n\n setTimeout(function() {\n Array.from(document.querySelectorAll('script')).forEach(function(script) {\n const freshScript = document.createElement('script');\n Array.from(script.attributes).forEach(function(attr) {\n freshScript.setAttribute(attr.name, attr.value);\n });\n freshScript.textContent = script.textContent || '';\n script.replaceWith(freshScript);\n });\n }, 0);\n\n console.log('[Farm.js] ⚡ Document navigated to:', path);\n return true;\n };\n\n try {\n const isDev = import.meta.env?.DEV;\n \n // For server components, always use HTML swap (they need server rendering)\n if (!route.isClientComponent) {\n await fetchAndSwapHTML();\n return;\n }\n \n // For client components in dev mode, try dynamic import first\n // If it fails due to server deps, fall back to full page navigation\n\n // Get module path from manifest (production only)\n const modulePath = route.modulePath;\n \n // Try to dynamically import the page module\n let pageModule;\n try {\n pageModule = pageModuleCache.get(modulePath);\n if (!pageModule) {\n pageModule = await import(/* @vite-ignore */ modulePath);\n pageModuleCache.set(modulePath, pageModule);\n }\n } catch (importError) {\n // Import failed (e.g., server deps) - fall back to full page navigation\n // This ensures proper hydration of client components\n console.warn('[Farm.js] Module import failed, using full navigation:', importError.message);\n window.location.href = path;\n return;\n }\n \n const PageComponent = pageModule.default;\n if (!PageComponent) {\n throw new Error('Page module has no default export: ' + modulePath);\n }\n \n // This is a client component (we already filtered out server components above)\n // Render directly with React - no HTML fetch needed!\n console.log('[Farm.js] ⚡ Chunk render:', modulePath);\n \n // Update metadata from module\n const metadata = pageModule.metadata;\n if (metadata?.title) document.title = metadata.title;\n if (metadata?.description) {\n let metaDesc = document.querySelector('meta[name=\"description\"]');\n if (!metaDesc) {\n metaDesc = document.createElement('meta');\n metaDesc.setAttribute('name', 'description');\n document.head.appendChild(metaDesc);\n }\n metaDesc.setAttribute('content', metadata.description);\n }\n \n // Update current page state\n currentPageComponent = PageComponent;\n currentPageProps = await buildRouteComponentProps(\n pageModule,\n params,\n getCurrentSearchParams(),\n path,\n pageData.props,\n );\n applyCanonicalPathFromProps(currentPageProps);\n\n const element = await buildWrappedHydrationElement(\n PageComponent,\n currentPageProps,\n layouts,\n );\n \n // On first SPA navigation, take over from SSR\n if (!hasClientTakenOver) {\n hasClientTakenOver = true;\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 }\n \n if (!appRoot) {\n appRoot = createRoot(container);\n window.__FARM_REACT_ROOT__ = appRoot;\n }\n \n // Render!\n appRoot.render(element);\n console.log('[Farm.js] ⚡ Chunk navigated to:', path);\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 if (isFarmDocsSearchPage()) {\n await mountFarmDocsSearch();\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 // Pre-load layout for SPA navigation\n try {\n const layoutModule = await import(/* @vite-ignore */ '/src/app/layout.tsx');\n LayoutComponent = layoutModule.default;\n } catch (e) {\n console.warn('[Farm.js] Could not preload layout:', e);\n }\n\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 if (!modulePath) {\n console.error('[Farm.js] No page module path found')\n return\n }\n\n let pageProps = normalizeServerProps(window.__FARM_PROPS__);\n applyCanonicalPathFromProps(pageProps);\n\n const shouldHydrate =\n window.__FARM_SHOULD_HYDRATE__ === true ||\n isClientComponent ||\n await moduleLooksClient(modulePath);\n const hydratedSlots = await hydrateInitialRouteSlots();\n if (!shouldHydrate) {\n if (hydratedSlots) replayPreHydrationClicks();\n console.log('[Farm.js] Server component - SPA router ready')\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 const layouts = findLayouts(window.location.pathname);\n const pageContainer = shouldHydrate\n ? document.getElementById('__farm_page__') || rootContainer\n : rootContainer;\n\n if (!pageContainer) {\n console.log('[Farm.js] Server component - SPA router ready')\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 hydrated = await tryHydrateImportedPage(\n pageContainer,\n { modulePath },\n currentPageProps.params || {},\n layouts,\n shouldHydrate,\n currentPageProps,\n );\n await farmClientRuntime.completeHydration(hydrationSession);\n } catch (error) {\n await farmClientRuntime.failHydration(hydrationSession, error);\n throw error;\n }\n\n if (hydrated) {\n replayPreHydrationClicks();\n console.log('[Farm.js] ✅ Hydrated:', modulePath);\n return;\n }\n\n console.log('[Farm.js] Server component - SPA router ready')\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 isExternalUrl(href) {\n return href.startsWith('http://') || href.startsWith('https://') || 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 \n // Don't intercept external links\n if (isExternalUrl(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}, true); // Use capture phase to handle before React\n\nif (import.meta.hot) {\n import.meta.hot.on('vite:beforeUpdate', () => {\n console.log('[Farm.js] ⚡ Update detected')\n // Clear module cache on HMR to pick up changes\n pageModuleCache.clear();\n })\n}\n\nconsole.log('[Farm.js] 🌱 SPA Router initialized');\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 = {}) {\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\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 = await import(\"picocolors\").then((m) => m.default);\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 tailwindcss(),\n viteBrowserExternalPlugin,\n farmI18nClientBridgePlugin(),\n farmPlugin(config),\n farmEnvironmentFunctionsPlugin(),\n farmBrandingPlugin,\n ],\n customLogger: farmLogger,\n clearScreen: false,\n optimizeDeps: {\n include: [\n \"react\",\n \"react-dom\",\n \"react-dom/client\",\n \"react/jsx-runtime\",\n \"react/jsx-dev-runtime\",\n ],\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 React to prevent multiple instances during SSR\n external: [\"react\", \"react-dom\", \"react/jsx-runtime\", \"react/jsx-dev-runtime\"],\n },\n resolve: {\n // Ensure single React instance across all modules (critical for hooks!)\n dedupe: [\"react\", \"react-dom\", \"react/jsx-runtime\", \"react/jsx-dev-runtime\"],\n // Stub out problematic server-only modules during dev mode\n alias: {\n ...getFarmLayerAliases(config.layers),\n \"@\": path.resolve(appRoot, \"src\"),\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_PUBLIC_ENV__: JSON.stringify(getPublicEnvDefine(config)),\n },\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"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwVtF,kBAAkB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","readFile","path","readFile","path","path","fs","path","body","resolve","html","path","path","existsSync","mkdirSync","readFileSync","dirname","join","resolve","path","fs","mkdirSync","path","path","mkdirSync","mkdirSync","dirname","join","resolve","resolve","join","mkdirSync","dirname","resolve","join","mkdirSync","dirname","existsSync","readFileSync","fs","path","readFile","path","imageSize","readFile","imageSize","isStaticMetadataImageFile","pathname","resolve","startTime","duration","method","urlPath","routeManager","parseRouteModuleProps","options","React","server","parseRouteModuleSchema"]}
|