@farm.js/core 0.1.0-beta.95 → 0.1.0-beta.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/after.cjs +1 -1
- package/dist/after.mjs +1 -1
- package/dist/agent-runtime.d.mts +3 -2
- package/dist/agent-runtime.d.ts +3 -2
- package/dist/api/route-manager.cjs +43 -4
- package/dist/api/route-manager.d.mts +4 -3
- package/dist/api/route-manager.d.ts +4 -3
- package/dist/api/route-manager.mjs +7 -7
- package/dist/api/runtime.cjs +43 -4
- package/dist/api/runtime.d.mts +1 -1
- package/dist/api/runtime.d.ts +1 -1
- package/dist/api/runtime.mjs +5 -5
- package/dist/api.cjs +352 -109
- package/dist/api.d.mts +7 -6
- package/dist/api.d.ts +7 -6
- package/dist/api.mjs +19 -12
- package/dist/{app-CIIEvA4r.d.ts → app-CIOx3LvY.d.ts} +4 -4
- package/dist/{app-O4AEC1OH.d.mts → app-DBd6437H.d.mts} +4 -4
- package/dist/app-markdown.d.mts +4 -3
- package/dist/app-markdown.d.ts +4 -3
- package/dist/cache.cjs +42 -4
- package/dist/cache.d.mts +68 -1
- package/dist/cache.d.ts +68 -1
- package/dist/cache.mjs +3 -3
- package/dist/{chunk-AXVJCMVF.mjs → chunk-2HDOV47R.mjs} +3 -3
- package/dist/chunk-2HDOV47R.mjs.map +1 -0
- package/dist/{chunk-RBRLLZL5.mjs → chunk-34IAPZBG.mjs} +16 -3
- package/dist/chunk-34IAPZBG.mjs.map +1 -0
- package/dist/{chunk-VV24CC42.mjs → chunk-35NPLKQJ.mjs} +2 -2
- package/dist/{chunk-D7QH7MDU.mjs → chunk-3TWQERDE.mjs} +5 -4
- package/dist/chunk-3TWQERDE.mjs.map +1 -0
- package/dist/{chunk-RWYRFCLG.mjs → chunk-4X57GXQA.mjs} +2 -2
- package/dist/{chunk-KOTSX5JH.mjs → chunk-52BR7LTX.mjs} +30 -21
- package/dist/chunk-52BR7LTX.mjs.map +1 -0
- package/dist/{chunk-SALMKQXH.mjs → chunk-6EJHNHH4.mjs} +80 -27
- package/dist/chunk-6EJHNHH4.mjs.map +1 -0
- package/dist/{chunk-ZFNK77WN.mjs → chunk-6JNGOC37.mjs} +2 -2
- package/dist/{after.cjs.map → chunk-6JNGOC37.mjs.map} +1 -1
- package/dist/{chunk-MOW47IF5.mjs → chunk-6UYVU46O.mjs} +2 -2
- package/dist/{chunk-7MABZJIM.mjs → chunk-7PYVLJ4J.mjs} +1 -1
- package/dist/chunk-7PYVLJ4J.mjs.map +1 -0
- package/dist/{chunk-FLHLPB57.mjs → chunk-D7F7YZ7L.mjs} +93 -67
- package/dist/chunk-D7F7YZ7L.mjs.map +1 -0
- package/dist/chunk-DU3PKDVQ.mjs +35 -0
- package/dist/chunk-DU3PKDVQ.mjs.map +1 -0
- package/dist/{chunk-SCFX4UTD.mjs → chunk-EHTUKVSW.mjs} +1 -1
- package/dist/chunk-EHTUKVSW.mjs.map +1 -0
- package/dist/{chunk-KWCNQUH5.mjs → chunk-EPDIF432.mjs} +526 -50
- package/dist/chunk-EPDIF432.mjs.map +1 -0
- package/dist/{chunk-A3636IHN.mjs → chunk-FP5Q67FO.mjs} +167 -96
- package/dist/chunk-FP5Q67FO.mjs.map +1 -0
- package/dist/{chunk-HHZAOTQD.mjs → chunk-GJ7W6LNK.mjs} +7 -6
- package/dist/chunk-GJ7W6LNK.mjs.map +1 -0
- package/dist/{chunk-RLGUZ3HS.mjs → chunk-I3OOUWO5.mjs} +3 -3
- package/dist/{chunk-75CGAL6E.mjs → chunk-IZBX2TEU.mjs} +217 -105
- package/dist/chunk-IZBX2TEU.mjs.map +1 -0
- package/dist/{chunk-22VG4DFJ.mjs → chunk-J3MPQ4MQ.mjs} +2 -2
- package/dist/{chunk-22VG4DFJ.mjs.map → chunk-J3MPQ4MQ.mjs.map} +1 -1
- package/dist/{chunk-2LS3KKE7.mjs → chunk-JV7JUD7Q.mjs} +4 -4
- package/dist/{chunk-Q3OX763A.mjs → chunk-LXDASSTE.mjs} +2 -2
- package/dist/{chunk-ZRBCBOEX.mjs → chunk-N2FY2QZ7.mjs} +28 -3
- package/dist/chunk-N2FY2QZ7.mjs.map +1 -0
- package/dist/{chunk-MRVJCLYQ.mjs → chunk-PSQ7N4XP.mjs} +4 -2
- package/dist/chunk-PSQ7N4XP.mjs.map +1 -0
- package/dist/{chunk-HVG3HLQZ.mjs → chunk-Q7WGOOAI.mjs} +3 -3
- package/dist/{chunk-WTYAPO5I.mjs → chunk-RCNWMEBT.mjs} +3 -2
- package/dist/{chunk-WTYAPO5I.mjs.map → chunk-RCNWMEBT.mjs.map} +1 -1
- package/dist/{chunk-3INDBMUU.mjs → chunk-TGDIACZT.mjs} +2 -2
- package/dist/{chunk-WB75GIX2.mjs → chunk-TQTB33JS.mjs} +14 -3
- package/dist/chunk-TQTB33JS.mjs.map +1 -0
- package/dist/{chunk-MH27UH72.mjs → chunk-TT3E2JOF.mjs} +3 -3
- package/dist/{chunk-UWRGX3J3.mjs → chunk-UMUWR5XA.mjs} +2 -2
- package/dist/{chunk-XTLLHCWU.mjs → chunk-V4VRLVLW.mjs} +52 -31
- package/dist/chunk-V4VRLVLW.mjs.map +1 -0
- package/dist/{chunk-EXCGBERG.mjs → chunk-WD2EBM3I.mjs} +79 -17
- package/dist/chunk-WD2EBM3I.mjs.map +1 -0
- package/dist/{chunk-DLBUAJTK.mjs → chunk-WMJGA32P.mjs} +74 -5
- package/dist/chunk-WMJGA32P.mjs.map +1 -0
- package/dist/{chunk-TKQCJMY7.mjs → chunk-X4SFHKFH.mjs} +7 -4
- package/dist/{chunk-TKQCJMY7.mjs.map → chunk-X4SFHKFH.mjs.map} +1 -1
- package/dist/{chunk-Q7GPJZCO.mjs → chunk-YIBV77KZ.mjs} +26 -7
- package/dist/chunk-YIBV77KZ.mjs.map +1 -0
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-mcMC334J.d.mts → client-DWoLZ3QU.d.mts} +52 -5
- package/dist/{client-d5ONQ-Pd.d.ts → client-DuQuQC1h.d.ts} +52 -5
- package/dist/client-cache-BMxuFqwH.d.ts +18 -0
- package/dist/client-cache-CCK-fCe0.d.mts +18 -0
- package/dist/{client-plugins-BvClItiL.d.mts → client-plugins-B6-07YmP.d.mts} +52 -99
- package/dist/{client-plugins-B9Sq-iMg.d.ts → client-plugins-By6MVUX-.d.ts} +52 -99
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.d.mts +3 -2
- package/dist/client-plugins.d.ts +3 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +1046 -211
- package/dist/client.d.mts +136 -18
- package/dist/client.d.ts +136 -18
- package/dist/client.mjs +32 -15
- package/dist/config.d.mts +3 -2
- package/dist/config.d.ts +3 -2
- package/dist/{devtools-S52RRRMN.mjs → devtools-XWZX6CCL.mjs} +5 -5
- package/dist/{devtools-client-3XRTBND5.mjs → devtools-client-Z7QQA3Q2.mjs} +56 -17
- package/dist/devtools-client-Z7QQA3Q2.mjs.map +1 -0
- package/dist/{devtools-ui-NJKFORTG.mjs → devtools-ui-2HG5M4EL.mjs} +3 -1
- package/dist/devtools-ui-2HG5M4EL.mjs.map +1 -0
- package/dist/docs.cjs +24 -5
- package/dist/docs.mjs +5 -5
- package/dist/i18n/server.cjs +13 -2
- package/dist/i18n/server.d.mts +2 -2
- package/dist/i18n/server.d.ts +2 -2
- package/dist/i18n/server.mjs +1 -1
- package/dist/index.cjs +1928 -894
- package/dist/index.d.mts +139 -21
- package/dist/index.d.ts +139 -21
- package/dist/index.mjs +57 -34
- package/dist/index.mjs.map +1 -1
- package/dist/integration-api-BT024nuJ.d.mts +97 -0
- package/dist/integration-api-BT024nuJ.d.ts +97 -0
- package/dist/integrations.d.mts +3 -2
- package/dist/integrations.d.ts +3 -2
- package/dist/internal/build-runtime.cjs +764 -547
- package/dist/internal/build-runtime.d.mts +5 -4
- package/dist/internal/build-runtime.d.ts +5 -4
- package/dist/internal/build-runtime.mjs +16 -16
- package/dist/internal/client-runtime.cjs +1 -1
- package/dist/internal/client-runtime.mjs +2 -2
- package/dist/internal/config-runtime.cjs +4 -1
- package/dist/internal/config-runtime.d.mts +4 -3
- package/dist/internal/config-runtime.d.ts +4 -3
- package/dist/internal/config-runtime.mjs +4 -4
- package/dist/internal/product-telemetry-runtime.cjs +1 -1
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +29 -3
- package/dist/internal/production-runtime.d.mts +8 -7
- package/dist/internal/production-runtime.d.ts +8 -7
- package/dist/internal/production-runtime.mjs +5 -5
- package/dist/{metadata-route-yV4U6X8h.d.ts → metadata-route-8_V3UonT.d.ts} +1 -1
- package/dist/{metadata-route-p4K1l92V.d.mts → metadata-route-CWP_HjGU.d.mts} +1 -1
- package/dist/middleware.cjs +28 -2
- package/dist/middleware.d.mts +5 -4
- package/dist/middleware.d.ts +5 -4
- package/dist/middleware.mjs +4 -4
- package/dist/navigation.cjs +3 -1
- package/dist/navigation.mjs +3 -3
- package/dist/observability.cjs +27 -2
- package/dist/observability.mjs +1 -1
- package/dist/plugin.cjs +528 -349
- package/dist/plugin.d.mts +3 -2
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.mjs +13 -13
- package/dist/{production-runtime-IkB0Qj4i.d.mts → production-runtime-BGRH1dKG.d.mts} +1 -1
- package/dist/{production-runtime-0JTch4_d.d.ts → production-runtime-CdmzsDax.d.ts} +1 -1
- package/dist/query/client.cjs +68 -29
- package/dist/query/client.mjs +69 -30
- package/dist/query/client.mjs.map +1 -1
- package/dist/{render-plan-Dc8CjNI7.d.ts → render-plan-0GeHiGVZ.d.ts} +1 -1
- package/dist/{render-plan-CU31j-Jk.d.mts → render-plan-DLxJYAA5.d.mts} +1 -1
- package/dist/renderer-client.cjs +169 -26
- package/dist/renderer-client.d.mts +7 -6
- package/dist/renderer-client.d.ts +7 -6
- package/dist/renderer-client.mjs +16 -19
- package/dist/renderer-client.mjs.map +1 -1
- package/dist/{request-BXa1KY8i.d.mts → request-BCNXSXLh.d.mts} +1 -1
- package/dist/{request-CUUBujZt.d.ts → request-BstWbZ6O.d.ts} +1 -1
- package/dist/request.d.mts +4 -3
- package/dist/request.d.ts +4 -3
- package/dist/{route-Y8lfz1wF.d.ts → route-4pd-EVtw.d.ts} +45 -50
- package/dist/{route-Cq3aObmj.d.mts → route-CvEr4Uc9.d.mts} +45 -50
- package/dist/routes.cjs +27 -2
- package/dist/routes.d.mts +3 -2
- package/dist/routes.d.ts +3 -2
- package/dist/routes.mjs +4 -4
- package/dist/{runtime-j1S3sDTh.d.ts → runtime-BgDQzBiu.d.ts} +1 -0
- package/dist/{runtime-DDwvDtS4.d.mts → runtime-CV2UCV-5.d.mts} +1 -0
- package/dist/server-action-security.mjs +2 -2
- package/dist/server-fn-client.cjs +102 -26
- package/dist/server-fn-client.d.mts +6 -0
- package/dist/server-fn-client.d.ts +6 -0
- package/dist/server-fn-client.mjs +2 -1
- package/dist/server-fn.cjs +42 -4
- package/dist/server-fn.mjs +5 -5
- package/dist/server-plugins.d.mts +4 -3
- package/dist/server-plugins.d.ts +4 -3
- package/dist/server-query-client.cjs +195 -34
- package/dist/server-query-client.d.mts +3 -3
- package/dist/server-query-client.d.ts +3 -3
- package/dist/server-query-client.mjs +7 -7
- package/dist/{server-query-runtime-3zAj77yv.d.ts → server-query-runtime-DXRNhX_3.d.ts} +2 -0
- package/dist/{server-query-runtime-B50KAcj5.d.mts → server-query-runtime-aP52iuL5.d.mts} +2 -0
- package/dist/server-query.cjs +44 -5
- package/dist/server-query.d.mts +4 -0
- package/dist/server-query.d.ts +4 -0
- package/dist/server-query.mjs +7 -7
- package/dist/server.cjs +553 -370
- package/dist/server.d.mts +11 -10
- package/dist/server.d.ts +11 -10
- package/dist/server.mjs +17 -17
- package/dist/{spa-router-CyLkwst6.d.mts → spa-router-BeyAVSc6.d.mts} +1 -1
- package/dist/{spa-router-BkqGXaV_.d.ts → spa-router-COgu4txb.d.ts} +1 -1
- package/dist/testing.cjs +27 -2
- package/dist/testing.d.mts +3 -2
- package/dist/testing.d.ts +3 -2
- package/dist/testing.mjs +9 -9
- package/dist/{utils-NKR6SoNv.d.mts → utils-DL2VwDQl.d.mts} +1 -1
- package/dist/{utils-B2OHrb9F.d.ts → utils-DkU2c_1B.d.ts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +536 -353
- package/dist/vite.d.mts +3 -2
- package/dist/vite.d.ts +3 -2
- package/dist/vite.mjs +17 -13
- package/package.json +17 -17
- package/types/client.d.ts +115 -10
- package/dist/agent-runtime.cjs.map +0 -1
- package/dist/api/route-manager.cjs.map +0 -1
- package/dist/api/runtime.cjs.map +0 -1
- package/dist/api.cjs.map +0 -1
- package/dist/app-markdown.cjs.map +0 -1
- package/dist/cache.cjs.map +0 -1
- package/dist/chunk-75CGAL6E.mjs.map +0 -1
- package/dist/chunk-7MABZJIM.mjs.map +0 -1
- package/dist/chunk-A3636IHN.mjs.map +0 -1
- package/dist/chunk-AXVJCMVF.mjs.map +0 -1
- package/dist/chunk-D7QH7MDU.mjs.map +0 -1
- package/dist/chunk-DLBUAJTK.mjs.map +0 -1
- package/dist/chunk-EXCGBERG.mjs.map +0 -1
- package/dist/chunk-FLHLPB57.mjs.map +0 -1
- package/dist/chunk-HHZAOTQD.mjs.map +0 -1
- package/dist/chunk-KOTSX5JH.mjs.map +0 -1
- package/dist/chunk-KWCNQUH5.mjs.map +0 -1
- package/dist/chunk-MRVJCLYQ.mjs.map +0 -1
- package/dist/chunk-Q7GPJZCO.mjs.map +0 -1
- package/dist/chunk-RBRLLZL5.mjs.map +0 -1
- package/dist/chunk-SALMKQXH.mjs.map +0 -1
- package/dist/chunk-SCFX4UTD.mjs.map +0 -1
- package/dist/chunk-WB75GIX2.mjs.map +0 -1
- package/dist/chunk-XTLLHCWU.mjs.map +0 -1
- package/dist/chunk-ZFNK77WN.mjs.map +0 -1
- package/dist/chunk-ZRBCBOEX.mjs.map +0 -1
- package/dist/client/lifecycle.cjs.map +0 -1
- package/dist/client-cache-CopR_MaI.d.mts +0 -6
- package/dist/client-cache-Djy_TlE8.d.ts +0 -6
- package/dist/client-plugins.cjs.map +0 -1
- package/dist/client.cjs.map +0 -1
- package/dist/config.cjs.map +0 -1
- package/dist/cron.cjs.map +0 -1
- package/dist/deferred.cjs.map +0 -1
- package/dist/deployment.cjs.map +0 -1
- package/dist/devtools-client-3XRTBND5.mjs.map +0 -1
- package/dist/devtools-ui-NJKFORTG.mjs.map +0 -1
- package/dist/docs.cjs.map +0 -1
- package/dist/env-types.cjs.map +0 -1
- package/dist/env.cjs.map +0 -1
- package/dist/environment/vite.cjs.map +0 -1
- package/dist/environment.cjs.map +0 -1
- package/dist/font.cjs.map +0 -1
- package/dist/headers.cjs.map +0 -1
- package/dist/i18n/client.cjs.map +0 -1
- package/dist/i18n/index.cjs.map +0 -1
- package/dist/i18n/server.cjs.map +0 -1
- package/dist/image/server.cjs.map +0 -1
- package/dist/image/sharp.cjs.map +0 -1
- package/dist/image.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/instrumentation.cjs.map +0 -1
- package/dist/integrations.cjs.map +0 -1
- package/dist/internal/build-runtime.cjs.map +0 -1
- package/dist/internal/client-runtime.cjs.map +0 -1
- package/dist/internal/config-runtime.cjs.map +0 -1
- package/dist/internal/isolated-boundary.cjs.map +0 -1
- package/dist/internal/metadata-image-runtime.cjs.map +0 -1
- package/dist/internal/product-telemetry-runtime.cjs.map +0 -1
- package/dist/internal/production-node-env.cjs.map +0 -1
- package/dist/internal/production-runtime.cjs.map +0 -1
- package/dist/markdown.cjs.map +0 -1
- package/dist/middleware.cjs.map +0 -1
- package/dist/navigation.cjs.map +0 -1
- package/dist/observability.cjs.map +0 -1
- package/dist/plugin.cjs.map +0 -1
- package/dist/query/client.cjs.map +0 -1
- package/dist/query/index.cjs.map +0 -1
- package/dist/query/parsers.cjs.map +0 -1
- package/dist/query/server.cjs.map +0 -1
- package/dist/renderer/react/client.cjs.map +0 -1
- package/dist/renderer/react/server.cjs.map +0 -1
- package/dist/renderer/react/vite.cjs.map +0 -1
- package/dist/renderer-client.cjs.map +0 -1
- package/dist/renderer.cjs.map +0 -1
- package/dist/request.cjs.map +0 -1
- package/dist/router.cjs.map +0 -1
- package/dist/routes.cjs.map +0 -1
- package/dist/server-action-security.cjs.map +0 -1
- package/dist/server-fn-client.cjs.map +0 -1
- package/dist/server-fn.cjs.map +0 -1
- package/dist/server-plugins.cjs.map +0 -1
- package/dist/server-query-client.cjs.map +0 -1
- package/dist/server-query.cjs.map +0 -1
- package/dist/server.cjs.map +0 -1
- package/dist/storage.cjs.map +0 -1
- package/dist/testing.cjs.map +0 -1
- package/dist/theme/client.cjs.map +0 -1
- package/dist/theme/index.cjs.map +0 -1
- package/dist/theme/runtime.cjs.map +0 -1
- package/dist/theme/server.cjs.map +0 -1
- package/dist/version.cjs.map +0 -1
- package/dist/vite.cjs.map +0 -1
- package/dist/workflows.cjs.map +0 -1
- /package/dist/{chunk-VV24CC42.mjs.map → chunk-35NPLKQJ.mjs.map} +0 -0
- /package/dist/{chunk-RWYRFCLG.mjs.map → chunk-4X57GXQA.mjs.map} +0 -0
- /package/dist/{chunk-MOW47IF5.mjs.map → chunk-6UYVU46O.mjs.map} +0 -0
- /package/dist/{chunk-RLGUZ3HS.mjs.map → chunk-I3OOUWO5.mjs.map} +0 -0
- /package/dist/{chunk-2LS3KKE7.mjs.map → chunk-JV7JUD7Q.mjs.map} +0 -0
- /package/dist/{chunk-Q3OX763A.mjs.map → chunk-LXDASSTE.mjs.map} +0 -0
- /package/dist/{chunk-HVG3HLQZ.mjs.map → chunk-Q7WGOOAI.mjs.map} +0 -0
- /package/dist/{chunk-3INDBMUU.mjs.map → chunk-TGDIACZT.mjs.map} +0 -0
- /package/dist/{chunk-MH27UH72.mjs.map → chunk-TT3E2JOF.mjs.map} +0 -0
- /package/dist/{chunk-UWRGX3J3.mjs.map → chunk-UMUWR5XA.mjs.map} +0 -0
- /package/dist/{devtools-S52RRRMN.mjs.map → devtools-XWZX6CCL.mjs.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/storage/index.ts","../src/integration-orm.ts","../src/integrations.ts","../src/routing/specificity.ts","../src/plugins/route-pattern.ts","../src/integration-api.ts","../src/plugin-integration-context.ts","../src/utils/decode.ts","../src/request-context.ts","../src/server/response.ts","../src/server-http.ts"],"sourcesContent":["import { createStorage, prefixStorage, builtinDrivers, type BuiltinDriverName } from \"unstorage\";\nimport type { Driver, Storage } from \"unstorage\";\nimport type { Database } from \"db0\";\nimport memoryDriver from \"unstorage/drivers/memory\";\nimport type {\n FarmStorageClient,\n FarmStorageClientConfig,\n FarmStorageConfigObject,\n FarmStorageLocalDriverConfig,\n FarmStorageDatabaseConfig,\n FarmStorageDatabaseDriverMap,\n FarmStorageDatabaseDriverName,\n FarmStorageRuntimeClient,\n FarmStorageMountConfig,\n FarmStorageMounts,\n FarmStorageUserConfig,\n} from \"./types\";\n\nexport type {\n FarmStorageBuiltinDriverConfig,\n FarmStorageClient,\n FarmStorageClientConfig,\n FarmStorageConfigObject,\n FarmStorageCustomDriverConfig,\n FarmStorageDatabaseConfig,\n FarmStorageDatabaseDriverName,\n FarmStorageLocalDriverConfig,\n FarmStorageRuntimeClient,\n FarmStorageMountConfig,\n FarmStorageMounts,\n FarmStorageUserConfig,\n} from \"./types\";\nexport type {\n BuiltinDriverName,\n BuiltinDriverOptions,\n Driver,\n Storage,\n StorageMeta,\n StorageValue,\n TransactionOptions,\n} from \"unstorage\";\nexport type { ConnectorName, ConnectorOptions, Database } from \"db0\";\n\ntype DriverFactoryModule = {\n default: (options?: Record<string, any>) => Driver;\n};\n\ntype DriverResolver = () => Driver | Promise<Driver>;\ntype ModuleLoader = <T = any>(specifier: string) => Promise<T>;\n\nconst loadModule: ModuleLoader = (specifier) => import(/* @vite-ignore */ specifier);\n\nconst DATABASE_CONNECTORS: {\n [K in FarmStorageDatabaseDriverName]: {\n connector: FarmStorageDatabaseDriverMap[K];\n load: () => Promise<{ default: (options?: any) => any }>;\n };\n} = {\n sqlite: {\n connector: \"node-sqlite\",\n load: () => loadModule(\"db0/connectors/node-sqlite\"),\n },\n \"node-sqlite\": {\n connector: \"node-sqlite\",\n load: () => loadModule(\"db0/connectors/node-sqlite\"),\n },\n sqlite3: {\n connector: \"sqlite3\",\n load: () => loadModule(\"db0/connectors/sqlite3\"),\n },\n \"better-sqlite3\": {\n connector: \"better-sqlite3\",\n load: () => loadModule(\"db0/connectors/better-sqlite3\"),\n },\n postgres: {\n connector: \"postgresql\",\n load: () => loadModule(\"db0/connectors/postgresql\"),\n },\n postgresql: {\n connector: \"postgresql\",\n load: () => loadModule(\"db0/connectors/postgresql\"),\n },\n pg: {\n connector: \"postgresql\",\n load: () => loadModule(\"db0/connectors/postgresql\"),\n },\n mysql: {\n connector: \"mysql2\",\n load: () => loadModule(\"db0/connectors/mysql2\"),\n },\n mysql2: {\n connector: \"mysql2\",\n load: () => loadModule(\"db0/connectors/mysql2\"),\n },\n pglite: {\n connector: \"pglite\",\n load: () => loadModule(\"db0/connectors/pglite\"),\n },\n planetscale: {\n connector: \"planetscale\",\n load: () => loadModule(\"db0/connectors/planetscale\"),\n },\n libsql: {\n connector: \"libsql\",\n load: () => loadModule(\"db0/connectors/libsql/node\"),\n },\n \"libsql-node\": {\n connector: \"libsql-node\",\n load: () => loadModule(\"db0/connectors/libsql/node\"),\n },\n \"libsql-http\": {\n connector: \"libsql-http\",\n load: () => loadModule(\"db0/connectors/libsql/http\"),\n },\n};\n\nfunction createMemoryStorage(): Storage {\n return createStorage({\n driver: memoryDriver(),\n });\n}\n\nconst GLOBAL_STORAGE_KEY = Symbol.for(\"farmjs.storage.global\");\n\nfunction readGlobalStorage(): Storage | undefined {\n return (globalThis as unknown as Record<PropertyKey, Storage | undefined>)[GLOBAL_STORAGE_KEY];\n}\n\nfunction writeGlobalStorage(storage: Storage): Storage {\n (globalThis as unknown as Record<PropertyKey, Storage | undefined>)[GLOBAL_STORAGE_KEY] = storage;\n return storage;\n}\n\nfunction getActiveGlobalStorage(): Storage {\n const existing = readGlobalStorage();\n if (existing) {\n return existing;\n }\n return writeGlobalStorage(createMemoryStorage());\n}\n\nlet globalStorage = getActiveGlobalStorage();\n\nfunction normalizeMountKey(base?: string): string {\n return (base || \"\")\n .trim()\n .replace(/^[:/\\\\]+|[:/\\\\]+$/g, \"\")\n .replace(/[\\\\/]+/g, \":\");\n}\n\nfunction isDriverInstance(value: unknown): value is Driver {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as Driver).getItem === \"function\" &&\n typeof (value as Driver).getKeys === \"function\"\n );\n}\n\nfunction isStorageInstance(value: unknown): value is Storage {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as Storage).mount === \"function\" &&\n typeof (value as Storage).getMount === \"function\"\n );\n}\n\nfunction isStorageClient(value: unknown): value is FarmStorageClient {\n return (\n !!value &&\n typeof value === \"object\" &&\n (value as FarmStorageClient).kind === \"farm-storage-client\" &&\n typeof (value as FarmStorageClient).resolveDriver === \"function\" &&\n typeof (value as FarmStorageClient).createStorage === \"function\"\n );\n}\n\nfunction isDatabaseDriverName(name: string): name is FarmStorageDatabaseDriverName {\n return name in DATABASE_CONNECTORS;\n}\n\nfunction extractDriverOptions(config: FarmStorageClientConfig): Record<string, any> | undefined {\n const source = config as Record<string, any>;\n const {\n client: _client,\n driver: _driver,\n mounts: _mounts,\n options,\n tableName: _tableName,\n ...inlineOptions\n } = source;\n const hasInlineOptions = Object.keys(inlineOptions).length > 0;\n\n if (options && typeof options === \"object\" && !Array.isArray(options)) {\n return hasInlineOptions ? { ...inlineOptions, ...options } : options;\n }\n\n if (hasInlineOptions) {\n return inlineOptions;\n }\n\n return options;\n}\n\nasync function loadBuiltinDriver(\n name: BuiltinDriverName,\n options?: Record<string, any>,\n): Promise<Driver> {\n const modulePath = builtinDrivers[name];\n\n if (!modulePath) {\n throw new Error(`Unsupported storage driver \"${name}\".`);\n }\n\n const module = (await loadModule(modulePath)) as DriverFactoryModule;\n return module.default(options);\n}\n\nasync function loadDatabaseDriver(config: FarmStorageDatabaseConfig): Promise<Driver> {\n const connectorEntry = DATABASE_CONNECTORS[config.driver as FarmStorageDatabaseDriverName];\n const [{ createDatabase }, connectorModule, db0DriverModule] = await Promise.all([\n loadModule<typeof import(\"db0\")>(\"db0\"),\n connectorEntry.load(),\n loadModule<typeof import(\"unstorage/drivers/db0\")>(\"unstorage/drivers/db0\"),\n ]);\n\n const database = createDatabase(connectorModule.default(extractDriverOptions(config) || {}));\n const driver = db0DriverModule.default({\n database,\n tableName: config.tableName,\n });\n\n // The db0 driver has no dispose, so this connection is Farm's to close. Databases\n // handed to `databaseStorage` stay owned by the caller and are left open.\n return {\n ...driver,\n async dispose() {\n await driver.dispose?.();\n await database.dispose();\n },\n };\n}\n\nasync function resolveDriver(config?: FarmStorageMountConfig): Promise<Driver> {\n if (config && isStorageClient(config)) {\n return config.resolveDriver();\n }\n\n const driverInput = config?.driver ?? \"memory\";\n\n if (typeof driverInput === \"function\") {\n return await driverInput();\n }\n\n if (isDriverInstance(driverInput)) {\n return driverInput;\n }\n\n if (isDatabaseDriverName(driverInput)) {\n return loadDatabaseDriver(config as FarmStorageDatabaseConfig);\n }\n\n if (driverInput === \"local\") {\n return loadBuiltinDriver(\"fs-lite\", extractDriverOptions(config as FarmStorageMountConfig));\n }\n\n return loadBuiltinDriver(\n driverInput as BuiltinDriverName,\n extractDriverOptions(config as FarmStorageClientConfig),\n );\n}\n\nfunction createStorageClientFromResolver(resolveDriver: DriverResolver): FarmStorageClient {\n let driverPromise: Promise<Driver> | undefined;\n let storagePromise: Promise<Storage> | undefined;\n\n const ensureDriver = () => {\n if (driverPromise) return driverPromise;\n\n const pending = Promise.resolve().then(resolveDriver);\n driverPromise = pending;\n void pending.catch(() => {\n if (driverPromise === pending) {\n driverPromise = undefined;\n storagePromise = undefined;\n }\n });\n return pending;\n };\n\n const ensureStorage = () => {\n if (storagePromise) return storagePromise;\n\n const pending = ensureDriver().then((driver) =>\n createStorage({\n driver,\n }),\n );\n storagePromise = pending;\n void pending.catch(() => {\n if (storagePromise === pending) storagePromise = undefined;\n });\n return pending;\n };\n\n const target = {\n kind: \"farm-storage-client\" as const,\n ready: ensureStorage,\n createStorage: ensureStorage,\n resolveDriver: ensureDriver,\n };\n\n return new Proxy(target as FarmStorageClient, {\n get(currentTarget, prop, receiver) {\n if (prop === \"then\") {\n return undefined;\n }\n\n if (Reflect.has(currentTarget, prop)) {\n return Reflect.get(currentTarget, prop, receiver);\n }\n\n return (...args: any[]) =>\n ensureStorage().then(async (storage) => {\n const member = Reflect.get(storage as object, prop);\n\n if (typeof member !== \"function\") {\n return member;\n }\n\n const result = Reflect.apply(member, storage, args);\n\n if (prop === \"dispose\") {\n return Promise.resolve(result).finally(() => {\n // Disposing the storage also disposed the driver, so drop both\n // cached promises: a later call must re-run the driver factory\n // instead of rebuilding storage over the dead driver.\n storagePromise = undefined;\n driverPromise = undefined;\n });\n }\n\n return result;\n });\n },\n });\n}\n\nexport function defineStorageClient(resolveDriver: DriverResolver): FarmStorageClient {\n return createStorageClientFromResolver(resolveDriver);\n}\n\nexport function createStorageClient(config: FarmStorageClientConfig): FarmStorageClient {\n return defineStorageClient(() => resolveDriver(config));\n}\n\nexport function driverStorage(\n driver: Driver | (() => Driver | Promise<Driver>),\n): FarmStorageClient {\n return defineStorageClient(() => (typeof driver === \"function\" ? driver() : driver));\n}\n\nexport function databaseStorage(\n database: Database,\n options: { tableName?: string } = {},\n): FarmStorageClient {\n return defineStorageClient(async () => {\n const db0DriverModule =\n await loadModule<typeof import(\"unstorage/drivers/db0\")>(\"unstorage/drivers/db0\");\n return db0DriverModule.default({\n database,\n tableName: options.tableName,\n });\n });\n}\n\nexport function memoryStorage(): FarmStorageClient {\n return createStorageClient({ driver: \"memory\" });\n}\n\nexport function localStorage(options: Omit<FarmStorageLocalDriverConfig, \"driver\"> = {}) {\n return createStorageClient({\n driver: \"local\",\n ...options,\n });\n}\n\nexport function sqliteStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return createStorageClient({\n driver: \"sqlite\",\n ...options,\n });\n}\n\nexport function mysqlStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return createStorageClient({\n driver: \"mysql\",\n ...options,\n });\n}\n\nexport function mysql2Storage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return mysqlStorage(options);\n}\n\nexport function postgresStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return createStorageClient({\n driver: \"postgres\",\n ...options,\n });\n}\n\nexport function pgStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return postgresStorage(options);\n}\n\nexport function pgliteStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return createStorageClient({\n driver: \"pglite\",\n ...options,\n });\n}\n\nexport function planetscaleStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return createStorageClient({\n driver: \"planetscale\",\n ...options,\n });\n}\n\nexport function libsqlStorage(options: Omit<FarmStorageDatabaseConfig, \"driver\">) {\n return createStorageClient({\n driver: \"libsql\",\n ...options,\n });\n}\n\nexport function redisStorage(\n options: Omit<Extract<FarmStorageClientConfig, { driver: \"redis\" }>, \"driver\">,\n) {\n return createStorageClient({\n driver: \"redis\",\n ...options,\n });\n}\n\nexport function s3Storage(\n options: Omit<Extract<FarmStorageClientConfig, { driver: \"s3\" }>, \"driver\">,\n) {\n return createStorageClient({\n driver: \"s3\",\n ...options,\n });\n}\n\nexport function mongodbStorage(\n options: Omit<Extract<FarmStorageClientConfig, { driver: \"mongodb\" }>, \"driver\">,\n) {\n return createStorageClient({\n driver: \"mongodb\",\n ...options,\n });\n}\n\nexport function upstashStorage(\n options: Omit<Extract<FarmStorageClientConfig, { driver: \"upstash\" }>, \"driver\">,\n) {\n return createStorageClient({\n driver: \"upstash\",\n ...options,\n });\n}\n\nexport function netlifyBlobsStorage(\n options: Omit<Extract<FarmStorageClientConfig, { driver: \"netlify-blobs\" }>, \"driver\">,\n) {\n return createStorageClient({\n driver: \"netlify-blobs\",\n ...options,\n });\n}\n\nexport function vercelKVStorage(\n options: Omit<Extract<FarmStorageClientConfig, { driver: \"vercel-kv\" }>, \"driver\">,\n) {\n return createStorageClient({\n driver: \"vercel-kv\",\n ...options,\n });\n}\n\nexport function vercelBlobStorage(\n options: Omit<Extract<FarmStorageClientConfig, { driver: \"vercel-blob\" }>, \"driver\">,\n) {\n return createStorageClient({\n driver: \"vercel-blob\",\n ...options,\n });\n}\n\nasync function mountNamespaces(storage: Storage, mounts?: FarmStorageMounts): Promise<void> {\n if (!mounts) {\n return;\n }\n\n for (const [base, config] of Object.entries(mounts)) {\n storage.mount(normalizeMountKey(base), await resolveDriver(config));\n }\n}\n\nexport async function createFarmStorage(config: FarmStorageUserConfig = {}): Promise<Storage> {\n if (isStorageInstance(config)) {\n return config;\n }\n\n if (isStorageClient(config)) {\n return config.createStorage();\n }\n\n const rootConfig = isStorageClient(config.client) ? config.client : config;\n const storage = createStorage({\n driver: await resolveDriver(rootConfig),\n });\n\n try {\n await mountNamespaces(storage, config.mounts);\n } catch (error) {\n await storage.dispose().catch(() => {});\n throw error;\n }\n return storage;\n}\n\nexport async function resolveStorageRuntimeClient(\n config: FarmStorageUserConfig | undefined,\n): Promise<unknown | undefined> {\n if (!config || isStorageInstance(config) || isStorageClient(config)) {\n return undefined;\n }\n\n const client = config.client;\n if (!client || isStorageInstance(client) || isStorageClient(client)) {\n return undefined;\n }\n\n return typeof client === \"function\" ? await client() : client;\n}\n\nexport async function initStorage(config: FarmStorageUserConfig = {}): Promise<Storage> {\n globalStorage = getActiveGlobalStorage();\n const nextStorage = await createFarmStorage(config);\n const previousStorage = globalStorage;\n globalStorage = writeGlobalStorage(nextStorage);\n\n if (previousStorage !== nextStorage) {\n await previousStorage.dispose().catch(() => {});\n }\n\n return globalStorage;\n}\n\nexport function getStorage(namespace?: string): Storage {\n globalStorage = getActiveGlobalStorage();\n const base = normalizeMountKey(namespace);\n if (!base) {\n return globalStorage;\n }\n\n const namespaced = prefixStorage(globalStorage, base);\n return {\n ...namespaced,\n async clear() {\n const keys = await namespaced.getKeys();\n await Promise.all(keys.map((key) => namespaced.removeItem(key)));\n },\n } as Storage;\n}\n\nexport async function disposeStorage(): Promise<void> {\n globalStorage = getActiveGlobalStorage();\n const previousStorage = globalStorage;\n globalStorage = writeGlobalStorage(createMemoryStorage());\n await previousStorage.dispose().catch(() => {});\n}\n","import type {\n AnyFieldBuilder,\n AnyModelDefinition,\n FieldBuilder,\n JsonValue,\n ModelDefinition,\n OrmClient,\n SchemaDefinition,\n SchemaModels,\n} from \"@farming-labs/orm\";\nimport type {\n FarmIntegrationSchema,\n FarmIntegrationSchemaField,\n FarmIntegrationSchemaModel,\n} from \"./integrations\";\nimport { resolveStorageRuntimeClient } from \"./storage\";\nimport type { FarmStorageUserConfig } from \"./storage/types\";\nimport type { FarmConfig } from \"./types\";\n\ntype RuntimeClientFactory<TClient> = () => TClient | Promise<TClient>;\n\nexport type FarmIntegrationOrmSchema = SchemaDefinition<Record<string, AnyModelDefinition>>;\n\nexport type FarmIntegrationOrmClient<TSchema extends FarmIntegrationOrmSchema> = OrmClient<TSchema>;\n\ntype FarmIntegrationOrmFieldKind<TField extends FarmIntegrationSchemaField> = TField[\"type\"] extends\n | \"id\"\n | \"uuid\"\n ? \"id\"\n : TField[\"type\"] extends \"text\"\n ? \"string\"\n : TField[\"type\"] extends \"number\"\n ? \"decimal\"\n : Extract<TField[\"type\"], \"string\" | \"boolean\" | \"integer\" | \"datetime\" | \"json\" | \"enum\">;\n\ntype FarmIntegrationOrmFieldNullable<TField extends FarmIntegrationSchemaField> = TField extends {\n nullable: true;\n}\n ? true\n : TField extends { required: false }\n ? true\n : false;\n\ntype FarmIntegrationOrmEnumValue<TField extends FarmIntegrationSchemaField> = TField extends {\n values: readonly (infer TValue extends string)[];\n}\n ? TValue\n : string;\n\ntype FarmIntegrationOrmFieldValue<TField extends FarmIntegrationSchemaField> =\n TField[\"type\"] extends \"id\" | \"uuid\" | \"string\" | \"text\"\n ? string\n : TField[\"type\"] extends \"boolean\"\n ? boolean\n : TField[\"type\"] extends \"integer\"\n ? number\n : TField[\"type\"] extends \"number\"\n ? string\n : TField[\"type\"] extends \"datetime\"\n ? Date\n : TField[\"type\"] extends \"json\"\n ? JsonValue\n : TField[\"type\"] extends \"enum\"\n ? FarmIntegrationOrmEnumValue<TField>\n : never;\n\nexport type InferFarmIntegrationOrmField<TField extends FarmIntegrationSchemaField> = FieldBuilder<\n FarmIntegrationOrmFieldKind<TField>,\n FarmIntegrationOrmFieldNullable<TField>,\n FarmIntegrationOrmFieldValue<TField>\n>;\n\nexport type InferFarmIntegrationOrmFields<TModel extends FarmIntegrationSchemaModel> = {\n [TFieldKey in keyof TModel[\"fields\"] & string]: InferFarmIntegrationOrmField<\n Extract<TModel[\"fields\"][TFieldKey], FarmIntegrationSchemaField>\n >;\n};\n\nexport type InferFarmIntegrationOrmSchema<TSchema extends FarmIntegrationSchema> =\n SchemaDefinition<{\n [TModelKey in keyof TSchema[\"models\"] & string]: ModelDefinition<\n InferFarmIntegrationOrmFields<\n Extract<TSchema[\"models\"][TModelKey], FarmIntegrationSchemaModel>\n >,\n {}\n >;\n }>;\n\nexport type InferFarmIntegrationOrmClient<TSchema extends FarmIntegrationSchema | undefined> =\n TSchema extends FarmIntegrationSchema ? OrmClient<InferFarmIntegrationOrmSchema<TSchema>> : never;\n\nexport interface CreateIntegrationOrmOptions<\n TClient = unknown,\n TSchema extends FarmIntegrationSchema = FarmIntegrationSchema,\n> {\n schema: TSchema;\n config?: Pick<FarmConfig, \"storage\">;\n storage?: FarmStorageUserConfig;\n client?: TClient | RuntimeClientFactory<TClient>;\n}\n\nexport async function createIntegrationOrm<\n TClient = unknown,\n TSchema extends FarmIntegrationSchema = FarmIntegrationSchema,\n>(\n options: CreateIntegrationOrmOptions<TClient, TSchema>,\n): Promise<InferFarmIntegrationOrmClient<TSchema>> {\n const [schema, client] = await Promise.all([\n farmIntegrationSchemaToOrmSchema(options.schema),\n resolveIntegrationOrmRuntimeClient(options),\n ]);\n\n if (!client) {\n throw new Error(\n \"Schema-backed integration storage requires a runtime client at farm.config storage.client.\",\n );\n }\n\n const { createOrmFromRuntime } = await import(\"@farming-labs/orm-runtime\");\n return createOrmFromRuntime({\n schema,\n client,\n }) as Promise<InferFarmIntegrationOrmClient<TSchema>>;\n}\n\nexport async function resolveIntegrationOrmRuntimeClient<TClient = unknown>(\n options: Omit<CreateIntegrationOrmOptions<TClient>, \"schema\">,\n): Promise<TClient | unknown | undefined> {\n if (options.client !== undefined) {\n return typeof options.client === \"function\"\n ? await (options.client as RuntimeClientFactory<TClient>)()\n : options.client;\n }\n\n return resolveStorageRuntimeClient(options.storage ?? options.config?.storage);\n}\n\nexport async function farmIntegrationSchemaToOrmSchema(\n schema: FarmIntegrationSchema,\n): Promise<FarmIntegrationOrmSchema> {\n const orm = await import(\"@farming-labs/orm\");\n const models: Record<string, AnyModelDefinition> = {};\n\n for (const [modelKey, modelSchema] of Object.entries(schema.models)) {\n models[modelKey] = orm.model({\n table: modelSchema.name ?? modelKey,\n fields: createOrmModelFields(orm, modelSchema),\n constraints: createOrmModelConstraints(modelSchema),\n description: modelSchema.description,\n }) as AnyModelDefinition;\n }\n\n return orm.defineSchema(models) as FarmIntegrationOrmSchema;\n}\n\nfunction createOrmModelFields(\n orm: typeof import(\"@farming-labs/orm\"),\n modelSchema: FarmIntegrationSchemaModel,\n): Record<string, AnyFieldBuilder> {\n return Object.fromEntries(\n Object.entries(modelSchema.fields).map(([fieldKey, fieldSchema]) => [\n fieldKey,\n createOrmField(orm, fieldKey, fieldSchema),\n ]),\n );\n}\n\nfunction createOrmField(\n orm: typeof import(\"@farming-labs/orm\"),\n fieldKey: string,\n field: FarmIntegrationSchemaField,\n): AnyFieldBuilder {\n let builder = createOrmFieldBuilder(orm, fieldKey, field) as AnyFieldBuilder;\n\n if (field.unique) {\n builder = builder.unique();\n }\n\n if (field.nullable || field.required === false) {\n builder = builder.nullable();\n }\n\n if (field.default !== undefined) {\n builder =\n field.type === \"datetime\" && field.default === \"now\"\n ? builder.defaultNow()\n : builder.default(field.default as never);\n }\n\n if (field.reference) {\n builder = builder.references(`${field.reference.model}.${field.reference.field}`);\n }\n\n if (field.name && field.name !== fieldKey) {\n builder = builder.map(field.name);\n }\n\n if (field.description) {\n builder = builder.describe(field.description);\n }\n\n return builder;\n}\n\nfunction createOrmFieldBuilder(\n orm: typeof import(\"@farming-labs/orm\"),\n fieldKey: string,\n field: FarmIntegrationSchemaField,\n): AnyFieldBuilder {\n switch (field.type) {\n case \"id\":\n case \"uuid\":\n return orm.id();\n case \"string\":\n case \"text\":\n return orm.string();\n case \"boolean\":\n return orm.boolean();\n case \"integer\":\n return orm.integer();\n case \"number\":\n return orm.decimal();\n case \"datetime\":\n return orm.datetime();\n case \"json\":\n return orm.json();\n case \"enum\": {\n if (!field.values?.length) {\n throw new Error(`Integration schema enum field \"${fieldKey}\" must define values.`);\n }\n\n return orm.enumeration(field.values as readonly [string, ...string[]]);\n }\n default:\n throw new Error(\n `Unsupported integration schema field type \"${field.type}\" for \"${fieldKey}\".`,\n );\n }\n}\n\nfunction createOrmModelConstraints(modelSchema: FarmIntegrationSchemaModel) {\n const unique: Array<readonly [string, ...string[]]> = [];\n const indexes: Array<readonly [string, ...string[]]> = [];\n\n for (const constraint of modelSchema.constraints ?? []) {\n if (!constraint.fields.length) {\n continue;\n }\n\n const fields = constraint.fields as readonly [string, ...string[]];\n if (constraint.type === \"unique\") {\n unique.push(fields);\n } else {\n indexes.push(fields);\n }\n }\n\n return {\n unique,\n indexes,\n };\n}\n\nexport type IntegrationOrmModelNames<TSchema extends FarmIntegrationOrmSchema> =\n keyof SchemaModels<TSchema> & string;\n","import { validateConfigRouteSource } from \"./plugins/route-pattern\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport { api as integrationApi, defineIntegrationAPIOperation } from \"./integration-api\";\nimport type {\n FarmIntegrationAPI,\n FarmIntegrationAPIBodyFormat,\n FarmIntegrationAPIMethod,\n FarmIntegrationAPIOperation,\n FarmIntegrationAPIResponseFormat,\n FarmIntegrationRouteOperationCarrier,\n InferIntegrationAPIFromRoutes,\n} from \"./integration-api\";\nimport type { InferFarmIntegrationOrmClient } from \"./integration-orm\";\nimport { setFarmPluginIntegrationContext } from \"./plugin-integration-context\";\nimport { decodeRouteSegment } from \"./utils/decode\";\nimport {\n assertTerminalCatchAll,\n assertUniqueRouteParameters,\n compareRouteSpecificity,\n getRoutePatternSpecificity,\n} from \"./routing/specificity\";\nimport type {\n FarmPlugin,\n FarmPluginContext,\n FarmPluginIntegrationContext,\n FarmRequestStore,\n} from \"./plugin\";\nimport {\n clearRequestContext,\n deleteRequestContext,\n getRequestContext,\n getRequestContextSnapshot,\n hasRequestContext,\n setRequestContext,\n} from \"./request-context\";\nimport { sendWebResponse } from \"./server/response\";\nimport type { FarmRequest } from \"./types\";\nimport {\n bufferFarmRequestBody,\n createFarmRequestBodyErrorResponse,\n readNodeRequestBody,\n resolveFarmServerConfig,\n} from \"./server-http\";\n\nexport { api, defineIntegrationAPI, defineIntegrationAPIOperation } from \"./integration-api\";\nexport type {\n FarmIntegrationAPI,\n FarmIntegrationAPIBodyFormat,\n FarmIntegrationAPIMethod,\n FarmIntegrationAPIOperation,\n FarmIntegrationAPIResponseFormat,\n} from \"./integration-api\";\n\nexport type FarmIntegrationCategory = \"auth\" | \"payment\" | \"monitoring\" | \"logging\" | (string & {});\n\n/** @deprecated Use FarmIntegrationCategory instead. */\nexport type FarmIntegrationSlot = FarmIntegrationCategory;\n\nexport type FarmIntegrationRouteParamValue = string | string[];\nexport type FarmIntegrationRouteParams = Record<string, FarmIntegrationRouteParamValue>;\nexport type FarmIntegrationRouteMethod =\n | FarmIntegrationAPIMethod\n | Lowercase<FarmIntegrationAPIMethod>\n | \"ALL\"\n | \"all\";\nexport type FarmIntegrationRouteInputSource = \"body\" | \"query\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type FarmIntegrationValidationPathSegment =\n | PropertyKey\n | {\n readonly key: PropertyKey;\n };\n\nexport interface FarmIntegrationRouteInput<TBody = unknown, TQuery = unknown> {\n body?: TBody;\n query?: TQuery;\n}\n\nexport interface FarmIntegrationValidationIssue {\n source: FarmIntegrationRouteInputSource;\n path?: readonly (string | number)[];\n code?: string;\n message: string;\n}\n\nexport interface FarmIntegrationValidationErrorLike {\n issues?: readonly {\n path?: readonly FarmIntegrationValidationPathSegment[];\n code?: string;\n message?: string;\n }[];\n message?: string;\n}\n\nexport type FarmIntegrationValidationResult<TValue> =\n | {\n success: true;\n data: TValue;\n }\n | {\n success: false;\n error: FarmIntegrationValidationErrorLike;\n };\n\nexport type FarmIntegrationStandardValidationResult<TValue> =\n | {\n value: TValue;\n }\n | {\n issues: readonly {\n path?: readonly FarmIntegrationValidationPathSegment[];\n code?: string;\n message: string;\n }[];\n };\n\nexport interface FarmIntegrationInputSchema<TValue = unknown> {\n _output?: TValue;\n parse?(value: unknown): MaybePromise<TValue>;\n safeParse?(value: unknown): MaybePromise<FarmIntegrationValidationResult<TValue>>;\n safeParseAsync?(value: unknown): Promise<FarmIntegrationValidationResult<TValue>>;\n \"~standard\"?: {\n validate(value: unknown): MaybePromise<FarmIntegrationStandardValidationResult<TValue>>;\n types?: {\n output: TValue;\n };\n };\n}\n\nexport interface FarmIntegrationRouteInputSchemas<TBody = unknown, TQuery = unknown> {\n body?: FarmIntegrationInputSchema<TBody>;\n query?: FarmIntegrationInputSchema<TQuery>;\n}\n\n/** @deprecated Use `FarmRequestStore` and access it through `ctx.req`. */\nexport type FarmIntegrationRequestContextStore = FarmRequestStore;\n\nexport const FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY = \"farm.integration.internalDispatch\";\n\nexport type FarmIntegrationRouteDb<TSchema extends FarmIntegrationSchema | undefined> =\n InferFarmIntegrationOrmClient<TSchema>;\n\nexport interface FarmIntegrationRouteStorageArgs<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n getClient(): Promise<unknown | undefined>;\n getOrm(): Promise<FarmIntegrationRouteDb<TSchema>>;\n}\n\nexport interface FarmIntegrationRouteArgs<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n db: FarmIntegrationRouteDb<TSchema>;\n getDb(): Promise<FarmIntegrationRouteDb<TSchema>>;\n storage: FarmIntegrationRouteStorageArgs<TSchema>;\n}\n\nexport interface FarmIntegrationConfigContext<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n key: string;\n integration: FarmIntegration<TSchema, any>;\n appConfig: FarmPluginContext[\"config\"];\n /** Alias for appConfig. */\n config: FarmPluginContext[\"config\"];\n args: FarmIntegrationRouteArgs<TSchema>;\n env: Record<string, string | undefined>;\n isDev: boolean;\n isProd: boolean;\n}\n\nexport interface FarmIntegrationConfigDefinition<\n TConfig = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n schema?: FarmIntegrationInputSchema<TConfig>;\n env?: Record<string, string | readonly string[]>;\n defaults?:\n | Partial<TConfig>\n | ((context: FarmIntegrationConfigContext<TSchema>) => MaybePromise<Partial<TConfig>>);\n input?:\n | Partial<TConfig>\n | ((context: FarmIntegrationConfigContext<TSchema>) => MaybePromise<Partial<TConfig>>);\n resolve?(\n context: FarmIntegrationConfigContext<TSchema>,\n ): MaybePromise<TConfig | Partial<TConfig> | undefined>;\n}\n\nexport type FarmIntegrationConfigInput<\n TConfig = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = FarmIntegrationInputSchema<TConfig> | FarmIntegrationConfigDefinition<TConfig, TSchema>;\n\nexport type FarmIntegrationLifecycleLogLevel = \"info\" | \"warn\" | \"error\";\n\nexport interface FarmIntegrationLifecycleLogger {\n info(message: string, meta?: Record<string, unknown>): void;\n warn(message: string, meta?: Record<string, unknown>): void;\n error(message: string, meta?: Record<string, unknown>): void;\n}\n\nexport interface FarmIntegrationLifecycleContext<\n TConfig = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationConfigContext<TSchema> {\n integration: FarmIntegration<TSchema, TConfig>;\n integrationConfig: TConfig;\n log: FarmIntegrationLifecycleLogger;\n reason?: string;\n cleanup(callback?: () => MaybePromise<void>): Promise<void>;\n}\n\nexport type FarmIntegrationLifecycleHook<\n TConfig = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (context: FarmIntegrationLifecycleContext<TConfig, TSchema>) => MaybePromise<void>;\n\n/**\n * Small per-call integration metadata. Values received over HTTP are\n * client-controlled and should be validated before authorization decisions.\n */\nexport type FarmIntegrationData = Record<string, unknown>;\n\nexport interface FarmIntegrationHandlerContext<\n TBody = unknown,\n TQuery = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n request: Request;\n requestId: string;\n url: URL;\n pathname: string;\n method: string;\n params: FarmIntegrationRouteParams;\n input: FarmIntegrationRouteInput<TBody, TQuery>;\n args: FarmIntegrationRouteArgs<TSchema>;\n data: FarmIntegrationData;\n integration: {\n category: FarmIntegrationCategory;\n /** @deprecated Use category instead. */\n slot: FarmIntegrationCategory;\n type: string;\n instance: unknown;\n };\n route: {\n kind: \"route\" | \"middleware\";\n path: string;\n methods: readonly string[];\n };\n req: FarmRequestStore;\n /** @deprecated Use `req` instead. */\n requestContext: FarmRequestStore;\n config: FarmPluginContext[\"config\"];\n isDev: boolean;\n isProd: boolean;\n}\n\nexport interface FarmIntegrationRouteHookContext<\n TBody = unknown,\n TQuery = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationHandlerContext<TBody, TQuery, TSchema> {\n response?: Response;\n}\n\nexport type FarmIntegrationRouteHook<\n TBody = unknown,\n TQuery = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = {\n bivarianceHack(\n request: Request,\n context: FarmIntegrationRouteHookContext<TBody, TQuery, TSchema>,\n ): Promise<Response | void> | Response | void;\n}[\"bivarianceHack\"];\n\nexport interface FarmIntegrationRoute<\n TBody = unknown,\n TQuery = unknown,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n path: string;\n method?: FarmIntegrationRouteMethod;\n methods?: readonly FarmIntegrationRouteMethod[];\n middleware?: readonly FarmIntegrationRouteMiddleware<TSchema>[];\n before?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n after?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n rawBody?: boolean;\n bodyFormat?: FarmIntegrationAPIBodyFormat;\n body?: FarmIntegrationInputSchema<TBody>;\n query?: FarmIntegrationInputSchema<TQuery>;\n input?: FarmIntegrationRouteInputSchemas<TBody, TQuery>;\n handler(\n request: Request,\n context: FarmIntegrationHandlerContext<TBody, TQuery, TSchema>,\n ): Promise<Response> | Response;\n}\n\nexport interface FarmTypedIntegrationRoute<\n TPath extends string = string,\n TBody = never,\n TQuery = never,\n TResponse = unknown,\n TServer extends boolean = false,\n TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationRoute<TBody, TQuery, TSchema> {\n path: TPath;\n method: TMethod;\n __operation: FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>;\n}\n\nexport interface FarmIntegrationRouteMiddleware<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n handler(\n request: Request,\n context: FarmIntegrationHandlerContext<unknown, unknown, TSchema>,\n ): Promise<Response | void> | Response | void;\n}\n\nexport interface FarmIntegrationMiddleware<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n matcher?: string | string[];\n handler(\n request: Request,\n context: FarmIntegrationHandlerContext<unknown, unknown, TSchema>,\n ): Promise<Response | void> | Response | void;\n}\n\nexport interface FarmIntegrationProviderProps {\n children: ReactNode;\n}\n\nexport interface FarmIntegrationProviderComponentReference {\n /** Client-safe module specifier using `@/`, a path relative to the app root, or a package. */\n module: string;\n /** Named export to use. Defaults to the module's default export. */\n export?: string;\n}\n\nexport interface FarmIntegrationProvider {\n name: string;\n type: string;\n props?: Record<string, unknown>;\n /**\n * The provider can be instantiated independently around each isolated\n * client root without relying on context or state owned by the route root.\n * Providers are treated as route-wide unless they explicitly opt in.\n */\n supportsIsolatedHydration?: boolean;\n component?:\n | ComponentType<FarmIntegrationProviderProps>\n | FarmIntegrationProviderComponentReference;\n}\n\nexport interface FarmIntegrationDocumentNavigation {\n matcher: string | readonly string[];\n}\n\nexport type FarmIntegrationSchemaFieldType =\n | \"id\"\n | \"uuid\"\n | \"string\"\n | \"text\"\n | \"boolean\"\n | \"integer\"\n | \"number\"\n | \"datetime\"\n | \"json\"\n | \"enum\";\n\nexport interface FarmIntegrationSchemaReference {\n model: string;\n field: string;\n relation?: \"belongsTo\" | \"hasOne\" | \"hasMany\";\n onDelete?: \"cascade\" | \"restrict\" | \"setNull\" | \"noAction\";\n enforced?: \"db\" | \"app\" | \"none\";\n}\n\nexport interface FarmIntegrationSchemaField {\n type: FarmIntegrationSchemaFieldType;\n name?: string;\n description?: string;\n required?: boolean;\n nullable?: boolean;\n primaryKey?: boolean;\n unique?: boolean;\n index?: boolean;\n list?: boolean;\n default?: unknown;\n values?: readonly string[];\n reference?: FarmIntegrationSchemaReference;\n meta?: Record<string, unknown>;\n}\n\nexport interface FarmIntegrationSchemaConstraint {\n type: \"unique\" | \"index\";\n fields: readonly string[];\n name?: string;\n meta?: Record<string, unknown>;\n}\n\nexport interface FarmIntegrationSchemaModel {\n name?: string;\n description?: string;\n fields: Record<string, FarmIntegrationSchemaField>;\n constraints?: readonly FarmIntegrationSchemaConstraint[];\n meta?: Record<string, unknown>;\n}\n\nexport interface FarmIntegrationSchemaModelExtension {\n name?: string;\n description?: string;\n fields?: Record<string, FarmIntegrationSchemaField>;\n constraints?: readonly FarmIntegrationSchemaConstraint[];\n meta?: Record<string, unknown>;\n}\n\nexport interface FarmIntegrationSchemaModelOverride {\n name?: string;\n description?: string;\n fields?: Record<string, Partial<FarmIntegrationSchemaField>>;\n constraints?: readonly FarmIntegrationSchemaConstraint[];\n meta?: Record<string, unknown>;\n}\n\nexport interface FarmIntegrationSchema {\n models: Record<string, FarmIntegrationSchemaModel>;\n meta?: Record<string, unknown>;\n extend?: Record<string, FarmIntegrationSchemaModelExtension>;\n override?: Record<string, FarmIntegrationSchemaModelOverride>;\n}\n\nexport function defineIntegrationSchema<TSchema extends FarmIntegrationSchema>(\n schema: TSchema,\n): TSchema {\n return schema;\n}\n\nexport type FarmIntegrationLogPhase =\n | \"registered\"\n | \"validate\"\n | \"setup\"\n | \"ready\"\n | \"dispose\"\n | \"request:start\"\n | \"request:end\"\n | \"request:error\";\n\nexport interface FarmIntegrationLogEvent {\n category: FarmIntegrationCategory;\n /** @deprecated Use category instead. */\n slot: FarmIntegrationCategory;\n type: string;\n phase: FarmIntegrationLogPhase;\n route?: {\n kind: \"route\" | \"middleware\";\n path: string;\n methods: readonly string[];\n };\n requestId?: string;\n request?: Request;\n response?: Response;\n error?: unknown;\n durationMs?: number;\n level?: FarmIntegrationLifecycleLogLevel;\n message?: string;\n meta?: Record<string, unknown>;\n context: Map<string, unknown>;\n}\n\nexport type FarmIntegrationLogger = (event: FarmIntegrationLogEvent) => void | Promise<void>;\n\nexport interface FarmIntegrationPluginOwner {\n key: string;\n category: FarmIntegrationCategory;\n type: string;\n source: \"lifecycle\" | \"contribution\";\n serverRuntime: boolean;\n}\n\n/** A normal plugin or an integration-bound plugin compatible with the shared instance. */\nexport type FarmIntegrationContributedPlugin<TInstance = unknown> =\n | FarmPlugin<any, any, any, any, unknown, false>\n | FarmPlugin<any, any, any, any, TInstance, true>;\n\nexport interface FarmIntegration<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n TConfig = unknown,\n TInstance = unknown,\n> {\n readonly kind: \"farm-integration\";\n category: FarmIntegrationCategory;\n /** @deprecated Use category instead. */\n slot?: FarmIntegrationCategory;\n type: string;\n instance: TInstance;\n /** Set to false when a platform adapter owns this integration's production routes. */\n serverRuntime?: boolean;\n api?: FarmIntegrationAPI;\n schema?: TSchema;\n config?: FarmIntegrationConfigInput<TConfig, TSchema>;\n validate?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n setup?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n ready?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n dispose?: FarmIntegrationLifecycleHook<TConfig, TSchema>;\n log?: FarmIntegrationLogger;\n routes?: readonly FarmIntegrationRoute<any, any, TSchema>[];\n endpoints?: FarmIntegrationEndpoints<TSchema>;\n middleware?: readonly FarmIntegrationMiddleware<TSchema>[];\n providers?: readonly FarmIntegrationProvider[];\n documentNavigations?: readonly FarmIntegrationDocumentNavigation[];\n /** Additional Farm plugins owned and configured by this integration. */\n plugins?: readonly FarmIntegrationContributedPlugin<NoInfer<TInstance>>[];\n}\n\nexport type FarmIntegrationsUserConfig = Record<string, FarmIntegration<any, any, any> | undefined>;\n\nconst FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME = Symbol.for(\n \"@farm.js/core/integration-plugin-server-runtime\",\n);\nconst FARM_INTEGRATION_PLUGIN_OWNER = Symbol.for(\"@farm.js/core/integration-plugin-owner\");\n\n/** @internal Identifies plugins owned by platform-managed integrations. */\nexport function getFarmIntegrationPluginServerRuntime(plugin: FarmPlugin): boolean | undefined {\n const value = (plugin as FarmPlugin & Record<symbol, unknown>)[\n FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME\n ];\n return typeof value === \"boolean\" ? value : undefined;\n}\n\n/** Returns the integration that contributed a normalized plugin, when applicable. */\nexport function getFarmIntegrationPluginOwner(\n plugin: FarmPlugin,\n): Readonly<FarmIntegrationPluginOwner> | undefined {\n const value = (plugin as FarmPlugin & Record<symbol, unknown>)[FARM_INTEGRATION_PLUGIN_OWNER];\n return value && typeof value === \"object\"\n ? (value as Readonly<FarmIntegrationPluginOwner>)\n : undefined;\n}\n\ntype IntegrationRouteBuilderOptions<\n TBody,\n TQuery,\n TServer extends boolean,\n TSchema extends FarmIntegrationSchema | undefined,\n> = {\n middleware?: readonly FarmIntegrationRouteMiddleware<TSchema>[];\n before?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n after?: readonly FarmIntegrationRouteHook<TBody, TQuery, TSchema>[];\n rawBody?: boolean;\n headers?: Record<string, string>;\n credentials?: RequestCredentials;\n bodyFormat?: FarmIntegrationAPIBodyFormat;\n responseFormat?: FarmIntegrationAPIResponseFormat;\n isServer?: TServer;\n body?: FarmIntegrationInputSchema<TBody>;\n query?: FarmIntegrationInputSchema<TQuery>;\n input?: FarmIntegrationRouteInputSchemas<TBody, TQuery>;\n handler(\n request: Request,\n context: FarmIntegrationHandlerContext<TBody, TQuery, TSchema>,\n ): Promise<Response> | Response;\n};\n\nfunction defineTypedIntegrationRoute<\n TPath extends string,\n TBody,\n TQuery,\n TResponse,\n TServer extends boolean,\n TMethod extends FarmIntegrationAPIMethod,\n TSchema extends FarmIntegrationSchema | undefined,\n>(\n method: TMethod,\n path: TPath,\n input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, TMethod, TSchema> {\n return {\n path,\n method,\n middleware: input.middleware,\n before: input.before,\n after: input.after,\n rawBody: input.rawBody,\n bodyFormat: input.bodyFormat,\n input: normalizeIntegrationRouteInputSchemas(input),\n handler: input.handler,\n __operation: defineIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>({\n path,\n method,\n bodyFormat: input.bodyFormat,\n responseFormat: input.responseFormat,\n headers: input.headers,\n credentials: input.credentials,\n isServer: input.isServer,\n }),\n };\n}\n\nexport interface FarmIntegrationRouteFactory<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n get<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n path: TPath,\n input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"GET\", TSchema>;\n post<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"POST\", TSchema>;\n query<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"QUERY\", TSchema>;\n put<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PUT\", TSchema>;\n patch<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PATCH\", TSchema>;\n delete<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>,\n ): FarmTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"DELETE\", TSchema>;\n options<\n TPath extends string,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"OPTIONS\", TSchema>;\n head<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n path: TPath,\n input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n ): FarmTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"HEAD\", TSchema>;\n}\n\nexport interface FarmIntegrationRoutesFactoryContext<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> {\n route: FarmIntegrationRouteFactory<TSchema>;\n integrationRoute: FarmIntegrationRouteFactory<TSchema>;\n}\n\nexport type FarmIntegrationRoutesFactory<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (\n context: FarmIntegrationRoutesFactoryContext<TSchema>,\n) => readonly FarmIntegrationRoute<any, any, TSchema>[];\n\nexport type FarmIntegrationEndpointValue<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> =\n | FarmIntegrationRoute<any, any, TSchema>\n | readonly FarmIntegrationEndpointValue<TSchema>[]\n | {\n readonly [key: string]: FarmIntegrationEndpointValue<TSchema> | undefined;\n };\n\nexport type FarmIntegrationEndpoints<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = {\n readonly [key: string]: FarmIntegrationEndpointValue<TSchema> | undefined;\n};\n\nexport interface FarmIntegrationEndpointsFactoryContext<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> extends FarmIntegrationRoutesFactoryContext<TSchema> {\n endpoint: FarmIntegrationRouteFactory<TSchema>;\n}\n\nexport type FarmIntegrationEndpointsFactory<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = (context: FarmIntegrationEndpointsFactoryContext<TSchema>) => FarmIntegrationEndpoints<TSchema>;\n\nfunction createIntegrationRouteFactory<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n>(): FarmIntegrationRouteFactory<TSchema> {\n return {\n get<TPath extends string, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n path: TPath,\n input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n ) {\n return defineTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"GET\", TSchema>(\n \"GET\",\n path,\n input,\n );\n },\n post<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n return defineTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"POST\", TSchema>(\n \"POST\",\n path,\n {\n bodyFormat: \"json\",\n ...input,\n },\n );\n },\n query<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n return defineTypedIntegrationRoute<\n TPath,\n TBody,\n TQuery,\n TResponse,\n TServer,\n \"QUERY\",\n TSchema\n >(\"QUERY\", path, {\n bodyFormat: \"json\",\n ...input,\n });\n },\n put<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n return defineTypedIntegrationRoute<TPath, TBody, TQuery, TResponse, TServer, \"PUT\", TSchema>(\n \"PUT\",\n path,\n {\n bodyFormat: \"json\",\n ...input,\n },\n );\n },\n patch<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n return defineTypedIntegrationRoute<\n TPath,\n TBody,\n TQuery,\n TResponse,\n TServer,\n \"PATCH\",\n TSchema\n >(\"PATCH\", path, {\n bodyFormat: \"json\",\n ...input,\n });\n },\n delete<\n TPath extends string,\n TBody = never,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(path: TPath, input: IntegrationRouteBuilderOptions<TBody, TQuery, TServer, TSchema>) {\n return defineTypedIntegrationRoute<\n TPath,\n TBody,\n TQuery,\n TResponse,\n TServer,\n \"DELETE\",\n TSchema\n >(\"DELETE\", path, {\n bodyFormat: \"json\",\n ...input,\n });\n },\n options<\n TPath extends string,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n ) {\n return defineTypedIntegrationRoute<\n TPath,\n never,\n TQuery,\n TResponse,\n TServer,\n \"OPTIONS\",\n TSchema\n >(\"OPTIONS\", path, input);\n },\n head<\n TPath extends string,\n TResponse = unknown,\n TQuery = never,\n TServer extends boolean = false,\n >(\n path: TPath,\n input: Omit<IntegrationRouteBuilderOptions<never, TQuery, TServer, TSchema>, \"bodyFormat\">,\n ) {\n return defineTypedIntegrationRoute<TPath, never, TQuery, TResponse, TServer, \"HEAD\", TSchema>(\n \"HEAD\",\n path,\n input,\n );\n },\n };\n}\n\nexport function createIntegrationRoute<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n>(_schema?: TSchema): FarmIntegrationRouteFactory<TSchema> {\n return createIntegrationRouteFactory<TSchema>();\n}\n\nexport const integrationRoute = createIntegrationRouteFactory<undefined>();\n\ntype RegisteredIntegrationRuntime = {\n integration: FarmIntegration;\n config: FarmPluginContext[\"config\"];\n isDev: boolean;\n isProd: boolean;\n};\n\nconst INTEGRATION_RUNTIME_REGISTRY_KEY = Symbol.for(\"farm.integrationRuntimeRegistry\");\nconst INTEGRATION_REQUEST_DISPATCHER_KEY = Symbol.for(\"farm.integrationRequestDispatcher\");\n\ntype IntegrationRequestDispatcher = (\n runtime: RegisteredIntegrationRuntime,\n request: Request,\n options?: { currentRequest?: Request },\n) => Promise<Response | null>;\n\ntype GlobalWithIntegrationRuntimeRegistry = typeof globalThis & {\n [INTEGRATION_RUNTIME_REGISTRY_KEY]?: Map<string, RegisteredIntegrationRuntime>;\n [INTEGRATION_REQUEST_DISPATCHER_KEY]?: IntegrationRequestDispatcher;\n};\n\nfunction getIntegrationRuntimeRegistry() {\n const globalState = globalThis as GlobalWithIntegrationRuntimeRegistry;\n if (!globalState[INTEGRATION_RUNTIME_REGISTRY_KEY]) {\n globalState[INTEGRATION_RUNTIME_REGISTRY_KEY] = new Map<string, RegisteredIntegrationRuntime>();\n }\n\n return globalState[INTEGRATION_RUNTIME_REGISTRY_KEY]!;\n}\n\ntype FarmIntegrationRoutesInput<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = readonly FarmIntegrationRoute<any, any, TSchema>[] | FarmIntegrationRoutesFactory<TSchema>;\n\ntype FarmIntegrationEndpointsInput<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n> = FarmIntegrationEndpoints<TSchema> | FarmIntegrationEndpointsFactory<TSchema>;\n\ntype FarmIntegrationInput<\n TSchema extends FarmIntegrationSchema | undefined = FarmIntegrationSchema | undefined,\n TConfig = unknown,\n TInstance = unknown,\n> = Omit<\n FarmIntegration<TSchema, TConfig, TInstance>,\n \"kind\" | \"category\" | \"slot\" | \"instance\" | \"config\" | \"routes\" | \"endpoints\" | \"plugins\"\n> & {\n instance: TInstance;\n config?: FarmIntegrationConfigInput<TConfig, TSchema>;\n routes?: FarmIntegrationRoutesInput<TSchema>;\n endpoints?: FarmIntegrationEndpointsInput<TSchema>;\n plugins?: readonly FarmIntegrationContributedPlugin<NoInfer<TInstance>>[];\n} & (\n | {\n category: FarmIntegrationCategory;\n slot?: FarmIntegrationCategory;\n }\n | {\n category?: FarmIntegrationCategory;\n slot: FarmIntegrationCategory;\n }\n );\n\ntype FarmIntegrationCategoryInput =\n | {\n category: FarmIntegrationCategory;\n slot?: FarmIntegrationCategory;\n }\n | {\n category?: FarmIntegrationCategory;\n slot: FarmIntegrationCategory;\n };\n\ntype FarmIntegrationShapeForInference = FarmIntegrationCategoryInput & {\n api?: FarmIntegrationAPI;\n schema?: FarmIntegrationSchema;\n config?: unknown;\n routes?: unknown;\n endpoints?: unknown;\n};\n\ntype ExtractIntegrationSchema<TIntegration> = TIntegration extends {\n schema: infer TSchema extends FarmIntegrationSchema;\n}\n ? TSchema\n : undefined;\n\ntype ResolveIntegrationRoutesInput<TRoutes, TSchema extends FarmIntegrationSchema | undefined> =\n TRoutes extends FarmIntegrationRoutesFactory<TSchema> ? ReturnType<TRoutes> : TRoutes;\n\ntype ResolveIntegrationEndpointsInput<\n TEndpoints,\n TSchema extends FarmIntegrationSchema | undefined,\n> =\n TEndpoints extends FarmIntegrationEndpointsFactory<TSchema> ? ReturnType<TEndpoints> : TEndpoints;\n\ntype ExtractIntegrationRoutesFromRoutesInput<\n TRoutes,\n TSchema extends FarmIntegrationSchema | undefined,\n> =\n ResolveIntegrationRoutesInput<TRoutes, TSchema> extends readonly (infer TRoute)[]\n ? TRoute\n : never;\n\ntype ExtractIntegrationRoutesFromEndpointValue<TValue> =\n TValue extends FarmIntegrationRouteOperationCarrier<string, any>\n ? TValue\n : TValue extends readonly (infer TItem)[]\n ? ExtractIntegrationRoutesFromEndpointValue<TItem>\n : TValue extends object\n ? ExtractIntegrationRoutesFromEndpointValue<TValue[keyof TValue]>\n : never;\n\ntype ExtractIntegrationRoutesFromEndpointsInput<\n TEndpoints,\n TSchema extends FarmIntegrationSchema | undefined,\n> = ExtractIntegrationRoutesFromEndpointValue<\n ResolveIntegrationEndpointsInput<TEndpoints, TSchema>\n>;\n\ntype ExtractIntegrationRouteUnion<TIntegration, TSchema extends FarmIntegrationSchema | undefined> =\n | (TIntegration extends { routes: infer TRoutes }\n ? ExtractIntegrationRoutesFromRoutesInput<TRoutes, TSchema>\n : never)\n | (TIntegration extends { endpoints: infer TEndpoints }\n ? ExtractIntegrationRoutesFromEndpointsInput<TEndpoints, TSchema>\n : never);\n\ntype ExtractDefinedIntegrationRoutes<\n TIntegration,\n TSchema extends FarmIntegrationSchema | undefined,\n> = [ExtractIntegrationRouteUnion<TIntegration, TSchema>] extends [never]\n ? undefined\n : readonly ExtractIntegrationRouteUnion<TIntegration, TSchema>[];\n\ntype ExtractDefinedIntegrationEndpoints<\n TIntegration,\n TSchema extends FarmIntegrationSchema | undefined,\n> = TIntegration extends { endpoints: infer TEndpoints }\n ? ResolveIntegrationEndpointsInput<TEndpoints, TSchema>\n : undefined;\n\ntype ExtractIntegrationAPIRoutes<\n TIntegration,\n TSchema extends FarmIntegrationSchema | undefined,\n> = Extract<\n ExtractIntegrationRouteUnion<TIntegration, TSchema>,\n FarmIntegrationRouteOperationCarrier<string, any>\n>;\n\ntype ExtractIntegrationCategory<TIntegration extends FarmIntegrationCategoryInput> =\n TIntegration extends {\n category: infer TCategory extends FarmIntegrationCategory;\n }\n ? TCategory\n : TIntegration extends { slot: infer TSlot extends FarmIntegrationCategory }\n ? TSlot\n : FarmIntegrationCategory;\n\ntype ExtractDerivedIntegrationAPI<\n TIntegration extends FarmIntegrationShapeForInference,\n TSchema extends FarmIntegrationSchema | undefined = ExtractIntegrationSchema<TIntegration>,\n> = TIntegration extends { api: infer TAPI extends FarmIntegrationAPI }\n ? TAPI\n : [ExtractIntegrationAPIRoutes<TIntegration, TSchema>] extends [never]\n ? FarmIntegrationAPI | undefined\n : InferIntegrationAPIFromRoutes<readonly ExtractIntegrationAPIRoutes<TIntegration, TSchema>[]>;\n\nexport type DefinedIntegration<\n TIntegration extends FarmIntegrationShapeForInference,\n TSchema extends FarmIntegrationSchema | undefined = ExtractIntegrationSchema<TIntegration>,\n> = Omit<TIntegration, \"kind\" | \"category\" | \"slot\" | \"api\" | \"routes\" | \"endpoints\"> & {\n readonly kind: \"farm-integration\";\n category: ExtractIntegrationCategory<TIntegration>;\n slot: ExtractIntegrationCategory<TIntegration>;\n routes: ExtractDefinedIntegrationRoutes<TIntegration, TSchema>;\n endpoints: ExtractDefinedIntegrationEndpoints<TIntegration, TSchema>;\n api: ExtractDerivedIntegrationAPI<TIntegration, TSchema>;\n};\n\nfunction isIntegrationEndpointRoute(value: unknown): value is FarmIntegrationRoute {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as { path?: unknown }).path === \"string\" &&\n typeof (value as { handler?: unknown }).handler === \"function\"\n );\n}\n\nfunction flattenIntegrationEndpoints(\n endpoints: FarmIntegrationEndpointValue | FarmIntegrationEndpoints | undefined,\n): FarmIntegrationRoute[] {\n if (!endpoints) {\n return [];\n }\n\n if (Array.isArray(endpoints)) {\n return endpoints.flatMap((endpoint) => flattenIntegrationEndpoints(endpoint));\n }\n\n if (isIntegrationEndpointRoute(endpoints)) {\n return [endpoints];\n }\n\n if (typeof endpoints === \"object\") {\n return Object.values(endpoints).flatMap((endpoint) => flattenIntegrationEndpoints(endpoint));\n }\n\n return [];\n}\n\nexport function defineIntegration<\n const TSchema extends FarmIntegrationSchema | undefined,\n const TConfig,\n TIntegration extends FarmIntegrationInput<TSchema, TConfig, any>,\n>(\n integration: TIntegration &\n FarmIntegrationInput<TSchema, TConfig, NoInfer<TIntegration[\"instance\"]>>,\n): DefinedIntegration<TIntegration, TSchema>;\nexport function defineIntegration<\n const TSchema extends FarmIntegrationSchema | undefined,\n const TConfig,\n TIntegration extends FarmIntegrationInput<TSchema, TConfig, any>,\n>(\n integration: TIntegration &\n FarmIntegrationInput<TSchema, TConfig, NoInfer<TIntegration[\"instance\"]>>,\n): DefinedIntegration<TIntegration, TSchema> {\n const category = integration.category ?? integration.slot;\n\n if (!category) {\n throw new Error(\"Integration category is required.\");\n }\n\n if (integration.category && integration.slot && integration.category !== integration.slot) {\n throw new Error(\"Integration category and slot must match when both are provided.\");\n }\n\n const routeFactory = createIntegrationRoute(integration.schema);\n const routes =\n typeof integration.routes === \"function\"\n ? integration.routes({\n route: routeFactory,\n integrationRoute: routeFactory,\n })\n : integration.routes;\n const endpoints =\n typeof integration.endpoints === \"function\"\n ? integration.endpoints({\n endpoint: routeFactory,\n route: routeFactory,\n integrationRoute: routeFactory,\n })\n : integration.endpoints;\n const endpointRoutes = flattenIntegrationEndpoints(endpoints);\n const allRoutes =\n routes?.length || endpointRoutes.length\n ? ([...(routes || []), ...endpointRoutes] as readonly FarmIntegrationRoute[])\n : undefined;\n\n for (const route of allRoutes || []) {\n assertUniqueRouteParameters(route.path, \"api\");\n validateConfigRouteSource(route.path, `Integration route \"${route.path}\"`);\n assertTerminalCatchAll(route.path, \"api\");\n }\n\n const derivedApi =\n integration.api ||\n (allRoutes?.length\n ? integrationApi.fromRoutes(\n allRoutes as unknown as ReadonlyArray<{\n path: string;\n __operation: FarmIntegrationAPIOperation<any, any, any, any, any>;\n }>,\n )\n : undefined);\n\n return {\n kind: \"farm-integration\",\n ...integration,\n endpoints,\n routes: allRoutes,\n api: derivedApi,\n category,\n slot: category,\n } as unknown as DefinedIntegration<TIntegration, TSchema>;\n}\n\nexport function isFarmIntegration(value: unknown): value is FarmIntegration {\n return (\n !!value && typeof value === \"object\" && (value as FarmIntegration).kind === \"farm-integration\"\n );\n}\n\nexport function resolveIntegrationPlugins(\n integrations: FarmIntegrationsUserConfig | undefined,\n): FarmPlugin[] {\n if (!integrations) {\n return [];\n }\n\n const plugins: FarmPlugin[] = [];\n for (const [key, integration] of Object.entries(integrations)) {\n if (!integration || !isFarmIntegration(integration)) {\n continue;\n }\n\n const owner = createIntegrationPluginOwner(key, integration, \"lifecycle\");\n plugins.push(withIntegrationPluginOwner(createIntegrationPlugin(key, integration), owner));\n plugins.push(...resolveIntegrationPluginContributions(key, integration));\n }\n\n return plugins;\n}\n\nfunction resolveIntegrationPluginContributions(\n key: string,\n integration: FarmIntegration<any, any>,\n): FarmPlugin[] {\n const contributions = integration.plugins;\n if (!contributions) return [];\n if (!Array.isArray(contributions)) {\n throw new TypeError(`Integration \"${key}\" plugins must be an array`);\n }\n\n const names = new Set<string>();\n return contributions.map((plugin, index) => {\n if (!plugin || typeof plugin !== \"object\" || typeof plugin.name !== \"string\") {\n throw new TypeError(`Integration \"${key}\" plugin at index ${index} is invalid`);\n }\n const name = plugin.name.trim();\n if (!name) {\n throw new TypeError(`Integration \"${key}\" plugin at index ${index} requires a name`);\n }\n if (names.has(name)) {\n throw new Error(`Integration \"${key}\" contributes duplicate plugin name \"${name}\"`);\n }\n names.add(name);\n\n return withIntegrationPluginOwner(\n plugin,\n createIntegrationPluginOwner(key, integration, \"contribution\"),\n createIntegrationPluginContext(key, integration),\n );\n });\n}\n\nfunction createIntegrationPluginOwner(\n key: string,\n integration: FarmIntegration<any, any>,\n source: FarmIntegrationPluginOwner[\"source\"],\n): Readonly<FarmIntegrationPluginOwner> {\n return Object.freeze({\n key,\n category: integration.category,\n type: integration.type,\n source,\n serverRuntime: integration.serverRuntime !== false,\n });\n}\n\nfunction createIntegrationPluginContext(\n key: string,\n integration: FarmIntegration<any, any>,\n): Readonly<FarmPluginIntegrationContext> {\n return Object.freeze({\n key,\n category: integration.category,\n type: integration.type,\n instance: integration.instance,\n serverRuntime: integration.serverRuntime !== false,\n });\n}\n\nfunction withIntegrationPluginOwner(\n plugin: FarmPlugin<any, any, any, any, any, boolean>,\n owner: Readonly<FarmIntegrationPluginOwner>,\n integration?: Readonly<FarmPluginIntegrationContext>,\n): FarmPlugin {\n const descriptors = Object.getOwnPropertyDescriptors(plugin);\n Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_OWNER);\n Reflect.deleteProperty(descriptors, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME);\n const ownedPlugin = Object.create(Object.getPrototypeOf(plugin), descriptors) as FarmPlugin;\n Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_OWNER, { value: owner });\n Object.defineProperty(ownedPlugin, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME, {\n value: owner.serverRuntime,\n });\n if (integration) {\n setFarmPluginIntegrationContext(ownedPlugin, integration);\n }\n return ownedPlugin;\n}\n\nexport function getIntegrationProviders(\n integrations: FarmIntegrationsUserConfig | undefined,\n): FarmIntegrationProvider[] {\n if (!integrations) {\n return [];\n }\n\n const providers: FarmIntegrationProvider[] = [];\n for (const integration of Object.values(integrations)) {\n if (!integration || !isFarmIntegration(integration) || !integration.providers?.length) {\n continue;\n }\n\n for (const provider of integration.providers) {\n providers.push({\n name: provider.name,\n type: provider.type,\n props: provider.props,\n supportsIsolatedHydration: provider.supportsIsolatedHydration,\n component: provider.component,\n });\n }\n }\n\n return providers;\n}\n\nexport function isFarmIntegrationProviderComponentReference(\n value: FarmIntegrationProvider[\"component\"],\n): value is FarmIntegrationProviderComponentReference {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"module\" in value &&\n typeof value.module === \"string\" &&\n value.module.length > 0,\n );\n}\n\nexport function getIntegrationDocumentNavigationMatchers(\n integrations: FarmIntegrationsUserConfig | undefined,\n): string[] {\n if (!integrations) {\n return [];\n }\n\n const matchers: string[] = [];\n for (const integration of Object.values(integrations)) {\n if (\n !integration ||\n !isFarmIntegration(integration) ||\n !integration.documentNavigations?.length\n ) {\n continue;\n }\n\n for (const navigation of integration.documentNavigations) {\n const items = Array.isArray(navigation.matcher) ? navigation.matcher : [navigation.matcher];\n\n for (const item of items) {\n matchers.push(item);\n }\n }\n }\n\n return matchers;\n}\n\nexport function getIntegrationSchemas(\n integrations: FarmIntegrationsUserConfig | undefined,\n): Record<string, FarmIntegrationSchema> {\n if (!integrations) {\n return {};\n }\n\n const schemaEntries = Object.entries(integrations)\n .map(([key, integration]) => {\n const schema = integration && isFarmIntegration(integration) ? integration.schema : undefined;\n return schema ? ([key, schema] as const) : null;\n })\n .filter((value): value is readonly [string, FarmIntegrationSchema] => value !== null);\n\n return Object.fromEntries(schemaEntries);\n}\n\nexport function getRegisteredIntegrationRuntime(\n key: string,\n): RegisteredIntegrationRuntime | undefined {\n return getIntegrationRuntimeRegistry().get(key);\n}\n\nexport function getRegisteredIntegrations(): Record<string, FarmIntegration> {\n return Object.fromEntries(\n Array.from(getIntegrationRuntimeRegistry().entries()).map(([key, runtime]) => [\n key,\n runtime.integration,\n ]),\n );\n}\n\nexport function getRegisteredIntegrationSchemas(): Record<string, FarmIntegrationSchema> {\n return getIntegrationSchemas(getRegisteredIntegrations());\n}\n\nexport function matchIntegrationRoute(\n integrations: FarmIntegrationsUserConfig | undefined,\n input: {\n pathname: string;\n method?: string;\n },\n): {\n key: string;\n integration: FarmIntegration;\n route: {\n path: string;\n methods: readonly string[];\n };\n params: FarmIntegrationRouteParams;\n} | null {\n if (!integrations) {\n return null;\n }\n\n for (const [key, integration] of Object.entries(integrations)) {\n if (!integration || !isFarmIntegration(integration)) {\n continue;\n }\n\n const routes = normalizeIntegrationRoutes(integration.routes || []);\n\n for (const route of routes) {\n if (!matchesMethod(route.methods, input.method)) {\n continue;\n }\n\n const params = extractPathParams(route.path, input.pathname);\n if (!params) {\n continue;\n }\n\n return {\n key,\n integration,\n route: {\n path: route.path,\n methods: route.methods,\n },\n params,\n };\n }\n }\n\n return null;\n}\n\nexport function matchRegisteredIntegrationRoute(input: { pathname: string; method?: string }): {\n key: string;\n integration: FarmIntegration;\n route: {\n path: string;\n methods: readonly string[];\n };\n params: FarmIntegrationRouteParams;\n} | null {\n return matchIntegrationRoute(getRegisteredIntegrations(), input);\n}\n\nfunction createClientSafeIntegrationAPI(\n api: FarmIntegrationAPI | undefined,\n): FarmIntegrationAPI | undefined {\n if (!api) {\n return undefined;\n }\n\n const entries = Object.entries(api as Record<string, unknown>).map(([key, value]) => {\n if (\n value &&\n typeof value === \"object\" &&\n (value as FarmIntegrationAPIOperation<any, any, any, any, any>).kind ===\n \"farm-integration-api-operation\"\n ) {\n const operation = value as FarmIntegrationAPIOperation<any, any, any, any, any>;\n return [\n key,\n defineIntegrationAPIOperation({\n path: operation.path,\n method: operation.method,\n bodyFormat: operation.bodyFormat,\n responseFormat: operation.responseFormat,\n credentials: operation.credentials,\n isServer: operation.isServer,\n }),\n ];\n }\n\n if (value && typeof value === \"object\") {\n return [key, createClientSafeIntegrationAPI(value as FarmIntegrationAPI)];\n }\n\n return [key, value];\n });\n\n return Object.fromEntries(entries) as FarmIntegrationAPI;\n}\n\nexport function getRegisteredIntegrationAPIManifest(): Record<string, FarmIntegrationAPI> {\n const manifestEntries = Object.entries(getRegisteredIntegrations())\n .map(([key, integration]) => {\n const api = createClientSafeIntegrationAPI(integration.api);\n return api ? ([key, api] as const) : null;\n })\n .filter((value): value is readonly [string, FarmIntegrationAPI] => value !== null);\n\n return Object.fromEntries(manifestEntries);\n}\n\ntype IntegrationLifecycleCleanup = () => MaybePromise<void>;\n\nfunction getIntegrationRuntimeEnv(): Record<string, string | undefined> {\n return typeof process !== \"undefined\" ? process.env : {};\n}\n\nfunction isIntegrationConfigDefinition(\n value: unknown,\n): value is FarmIntegrationConfigDefinition<unknown> {\n return (\n !!value &&\n typeof value === \"object\" &&\n (\"schema\" in value ||\n \"env\" in value ||\n \"defaults\" in value ||\n \"input\" in value ||\n \"resolve\" in value)\n );\n}\n\nfunction mergeIntegrationConfigValue(current: unknown, next: unknown): unknown {\n if (next === undefined) {\n return current;\n }\n\n if (isPlainIntegrationConfigObject(current) && isPlainIntegrationConfigObject(next)) {\n return {\n ...current,\n ...next,\n };\n }\n\n return next;\n}\n\nfunction isPlainIntegrationConfigObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nasync function resolveIntegrationConfigPart<TValue>(\n value: TValue | ((context: FarmIntegrationConfigContext) => MaybePromise<TValue>) | undefined,\n context: FarmIntegrationConfigContext,\n): Promise<TValue | undefined> {\n if (typeof value === \"function\") {\n return (value as (context: FarmIntegrationConfigContext) => MaybePromise<TValue>)(context);\n }\n\n return value;\n}\n\nfunction resolveIntegrationEnvConfig(\n env: Record<string, string | readonly string[]> | undefined,\n): Record<string, string> | undefined {\n if (!env) {\n return undefined;\n }\n\n const runtimeEnv = getIntegrationRuntimeEnv();\n const config: Record<string, string> = {};\n\n for (const [key, names] of Object.entries(env)) {\n const envNames = Array.isArray(names) ? names : [names];\n const value = envNames.map((name) => runtimeEnv[name]).find((entry) => entry !== undefined);\n if (value !== undefined) {\n config[key] = value;\n }\n }\n\n return config;\n}\n\nasync function parseIntegrationConfigSchema<TConfig>(\n integration: FarmIntegration<any, any>,\n schema: FarmIntegrationInputSchema<TConfig>,\n value: unknown,\n): Promise<TConfig> {\n const parser = schema.safeParseAsync || schema.safeParse;\n if (parser) {\n const result = await parser.call(schema, value);\n if (result.success) {\n return result.data;\n }\n\n throw createIntegrationConfigValidationError(integration, result.error);\n }\n\n if (schema[\"~standard\"]?.validate) {\n const result = await schema[\"~standard\"].validate(value);\n if (\"value\" in result) {\n return result.value;\n }\n\n throw createIntegrationConfigValidationError(integration, {\n issues: result.issues,\n });\n }\n\n if (schema.parse) {\n try {\n return await schema.parse(value);\n } catch (error) {\n throw createIntegrationConfigValidationError(\n integration,\n normalizeIntegrationValidationError(error),\n );\n }\n }\n\n throw new Error(\n `Integration \"${integration.type}\" config schema must expose safeParse, safeParseAsync, parse, or ~standard.validate.`,\n );\n}\n\nfunction createIntegrationConfigValidationError(\n integration: FarmIntegration<any, any>,\n error: FarmIntegrationValidationErrorLike,\n) {\n const issues =\n Array.isArray(error.issues) && error.issues.length > 0\n ? error.issues\n .map((issue) => {\n const normalizedPath = normalizeIntegrationValidationPath(issue.path);\n const path = normalizedPath.length ? `${normalizedPath.join(\".\")}: ` : \"\";\n return `${path}${issue.message || \"Invalid config\"}`;\n })\n .join(\"; \")\n : error.message || \"Invalid config\";\n\n return new Error(`Integration \"${integration.type}\" config validation failed: ${issues}`);\n}\n\nasync function resolveIntegrationConfig<TConfig>(\n integration: FarmIntegration<any, TConfig>,\n context: FarmIntegrationConfigContext,\n): Promise<TConfig> {\n const config = integration.config;\n if (!config) {\n return undefined as TConfig;\n }\n\n if (!isIntegrationConfigDefinition(config)) {\n return parseIntegrationConfigSchema(integration, config, {});\n }\n\n let value: unknown = {};\n value = mergeIntegrationConfigValue(\n value,\n await resolveIntegrationConfigPart(config.defaults, context),\n );\n value = mergeIntegrationConfigValue(value, resolveIntegrationEnvConfig(config.env));\n value = mergeIntegrationConfigValue(\n value,\n await resolveIntegrationConfigPart(config.input, context),\n );\n value = mergeIntegrationConfigValue(value, await config.resolve?.(context));\n\n return config.schema\n ? parseIntegrationConfigSchema(integration, config.schema, value)\n : (value as TConfig);\n}\n\nfunction createIntegrationLifecycleLogger(\n integration: FarmIntegration<any, any>,\n phase: FarmIntegrationLogPhase,\n): FarmIntegrationLifecycleLogger {\n const write = (\n level: FarmIntegrationLifecycleLogLevel,\n message: string,\n meta?: Record<string, unknown>,\n ) => {\n if (!integration.log) {\n return;\n }\n\n void Promise.resolve(\n integration.log({\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase,\n level,\n message,\n meta,\n context: new Map(),\n }),\n ).catch(() => {});\n };\n\n return {\n info(message, meta) {\n write(\"info\", message, meta);\n },\n warn(message, meta) {\n write(\"warn\", message, meta);\n },\n error(message, meta) {\n write(\"error\", message, meta);\n },\n };\n}\n\nasync function emitIntegrationLog(\n integration: FarmIntegration,\n event: FarmIntegrationLogEvent,\n): Promise<void> {\n try {\n await integration.log?.(event);\n } catch {\n // Integration logging is optional observability. A failed sink must not\n // block lifecycle startup, request handlers, responses, or cleanup.\n }\n}\n\nconst INTEGRATION_DATA_HEADER = \"x-farm-integration-data\";\nconst INTEGRATION_DATA_HEADER_MAX_LENGTH = 16 * 1024;\nconst BLOCKED_INTEGRATION_DATA_KEYS = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nfunction isFarmIntegrationData(value: unknown): value is FarmIntegrationData {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPlainIntegrationDataObject(value: unknown): value is Record<string, unknown> {\n if (!isFarmIntegrationData(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction sanitizeIntegrationDataValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => sanitizeIntegrationDataValue(item));\n }\n\n if (!isPlainIntegrationDataObject(value)) {\n return value;\n }\n\n const sanitized: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n if (BLOCKED_INTEGRATION_DATA_KEYS.has(key)) {\n continue;\n }\n\n sanitized[key] = sanitizeIntegrationDataValue(item);\n }\n\n return sanitized;\n}\n\nfunction normalizeIntegrationData(value: FarmIntegrationData | undefined): FarmIntegrationData {\n if (!isFarmIntegrationData(value)) {\n return {};\n }\n\n const sanitized = sanitizeIntegrationDataValue(value);\n return isFarmIntegrationData(sanitized) ? sanitized : {};\n}\n\nfunction getIntegrationDataHeaderByteLength(value: string): number {\n return new TextEncoder().encode(value).byteLength;\n}\n\nfunction parseIntegrationDataHeader(request: Request): FarmIntegrationData {\n const raw = request.headers.get(INTEGRATION_DATA_HEADER);\n if (!raw) {\n return {};\n }\n\n if (getIntegrationDataHeaderByteLength(raw) > INTEGRATION_DATA_HEADER_MAX_LENGTH) {\n return {};\n }\n\n try {\n const value = JSON.parse(raw);\n return normalizeIntegrationData(value);\n } catch {\n return {};\n }\n}\n\nfunction resolveIntegrationData(request: Request, data?: FarmIntegrationData): FarmIntegrationData {\n return {\n ...parseIntegrationDataHeader(request),\n ...normalizeIntegrationData(data),\n };\n}\n\nfunction createIntegrationPlugin(integrationKey: string, integration: FarmIntegration): FarmPlugin {\n const routes = normalizeIntegrationRoutes(integration.routes || []);\n const middleware = [...(integration.middleware || [])];\n const cleanupCallbacks: IntegrationLifecycleCleanup[] = [];\n let integrationConfigPromise: Promise<unknown> | undefined;\n\n const runCleanup = async () => {\n const callbacks = cleanupCallbacks.splice(0).reverse();\n for (const callback of callbacks) {\n await callback();\n }\n };\n\n const createLifecycleContext = async (\n context: FarmPluginContext,\n phase: FarmIntegrationLogPhase,\n options: { reason?: string } = {},\n ): Promise<FarmIntegrationLifecycleContext> => {\n const args = createIntegrationRouteArgs({\n integration,\n config: context.config,\n });\n const configContext: FarmIntegrationConfigContext = {\n key: integrationKey,\n integration,\n appConfig: context.config,\n config: context.config,\n args,\n env: getIntegrationRuntimeEnv(),\n isDev: context.isDev,\n isProd: context.isProd,\n };\n integrationConfigPromise ??= resolveIntegrationConfig(integration, configContext);\n\n return {\n ...configContext,\n integrationConfig: await integrationConfigPromise,\n log: createIntegrationLifecycleLogger(integration, phase),\n reason: options.reason,\n async cleanup(callback) {\n if (callback) {\n cleanupCallbacks.push(callback);\n return;\n }\n\n await runCleanup();\n },\n };\n };\n\n const plugin: FarmPlugin = {\n name: `farm:integration:${integration.category}:${integration.type}`,\n enforce: \"pre\",\n\n async init(context) {\n getIntegrationRuntimeRegistry().set(integrationKey, {\n integration,\n config: context.config,\n isDev: context.isDev,\n isProd: context.isProd,\n });\n\n await createLifecycleContext(context, \"validate\");\n\n if (integration.validate) {\n await integration.validate(await createLifecycleContext(context, \"validate\"));\n }\n\n if (integration.setup) {\n await integration.setup(await createLifecycleContext(context, \"setup\"));\n }\n\n if (!integration.log) {\n return;\n }\n\n for (const route of routes) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"registered\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n context: new Map(),\n });\n }\n\n for (const entry of middleware) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"registered\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n context: new Map(),\n });\n }\n },\n\n async ready(context) {\n if (integration.ready) {\n await integration.ready(await createLifecycleContext(context, \"ready\"));\n }\n },\n\n async shutdown(payload, context) {\n try {\n if (integration.dispose) {\n await integration.dispose(\n await createLifecycleContext(context, \"dispose\", {\n reason: payload.reason,\n }),\n );\n }\n } finally {\n await runCleanup();\n }\n },\n\n async beforeRequest(req, res, context) {\n const fullUrl = `http://${req.headers.host || \"localhost\"}${req.url || \"/\"}`;\n const url = new URL(fullUrl);\n const pathname = url.pathname;\n const requestId = getRequestId(req);\n let bodyLoaded = false;\n let requestBody: Buffer | undefined;\n\n const getRequestBody = async () => {\n if (!bodyLoaded) {\n bodyLoaded = true;\n if (req.method && req.method !== \"GET\" && req.method !== \"HEAD\") {\n requestBody = await readNodeRequestBody(\n req,\n resolveFarmServerConfig(context.config.server).bodySizeLimit,\n );\n }\n }\n\n return requestBody;\n };\n\n const createHandlerRequest = async (): Promise<Request | null> => {\n try {\n return createWebRequest(req, fullUrl, await getRequestBody());\n } catch (error) {\n const response = createFarmRequestBodyErrorResponse(error);\n if (!response) throw error;\n await sendWebResponse(res, response);\n return null;\n }\n };\n\n for (const entry of middleware) {\n const params = resolveMatcherParams(entry.matcher, pathname);\n if (!params) {\n continue;\n }\n\n const request = await createHandlerRequest();\n if (!request) return;\n const handlerContext = createIntegrationHandlerContext({\n integration,\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n rawRequest: req,\n params,\n pathname,\n requestId,\n pluginContext: context,\n });\n const startedAt = Date.now();\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:start\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n requestId,\n context: handlerContext.req.snapshot(),\n });\n\n try {\n const response = await entry.handler(request, handlerContext);\n if (response) {\n await sendWebResponse(res, response);\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return;\n }\n\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n } catch (error) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:error\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n requestId,\n durationMs: Date.now() - startedAt,\n error,\n context: handlerContext.req.snapshot(),\n });\n throw error;\n }\n }\n\n for (const route of routes) {\n const params = matchesMethod(route.methods, req.method)\n ? extractPathParams(route.path, pathname)\n : null;\n if (!params) {\n continue;\n }\n\n const request = await createHandlerRequest();\n if (!request) return;\n const handlerContext = createIntegrationHandlerContext({\n integration,\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n rawRequest: req,\n params,\n pathname,\n requestId,\n pluginContext: context,\n });\n const startedAt = Date.now();\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:start\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n requestId,\n context: handlerContext.req.snapshot(),\n });\n\n try {\n const validation = await validateIntegrationRouteInput(route, request, url);\n if (!validation.success) {\n await sendWebResponse(res, validation.response);\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response: validation.response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return;\n }\n handlerContext.input = validation.input;\n\n for (const middlewareEntry of route.middleware || []) {\n const middlewareResponse = await middlewareEntry.handler(request, handlerContext);\n if (middlewareResponse) {\n await sendWebResponse(res, middlewareResponse);\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response: middlewareResponse,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return;\n }\n }\n\n const beforeResponse = await runIntegrationRouteBeforeHooks(\n route,\n request,\n handlerContext,\n );\n if (beforeResponse) {\n const response = await runIntegrationRouteAfterHooks(\n route,\n request,\n handlerContext,\n beforeResponse,\n );\n await sendWebResponse(res, response);\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return;\n }\n\n const handlerResponse = await route.handler(request, handlerContext);\n const response = await runIntegrationRouteAfterHooks(\n route,\n request,\n handlerContext,\n handlerResponse,\n );\n await sendWebResponse(res, response);\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return;\n } catch (error) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:error\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n requestId,\n durationMs: Date.now() - startedAt,\n error,\n context: handlerContext.req.snapshot(),\n });\n throw error;\n }\n }\n },\n };\n\n Object.defineProperty(plugin, FARM_INTEGRATION_PLUGIN_SERVER_RUNTIME, {\n value: integration.serverRuntime !== false,\n });\n\n return plugin;\n}\n\nfunction createIntegrationHandlerContext(input: {\n integration: FarmIntegration;\n route: FarmIntegrationHandlerContext[\"route\"];\n request: Request;\n rawRequest: FarmRequest;\n params: FarmIntegrationRouteParams;\n pathname: string;\n requestId: string;\n pluginContext: FarmPluginContext;\n}): FarmIntegrationHandlerContext {\n const req = createIntegrationRequestContextStore(\n input.rawRequest,\n input.request,\n input.pluginContext,\n );\n\n return {\n request: input.request,\n requestId: input.requestId,\n url: new URL(input.request.url),\n pathname: input.pathname,\n method: input.request.method,\n params: input.params,\n input: {},\n args: createIntegrationRouteArgs({\n integration: input.integration,\n config: input.pluginContext.config,\n }),\n data: resolveIntegrationData(input.request),\n integration: {\n category: input.integration.category,\n slot: input.integration.category,\n type: input.integration.type,\n instance: input.integration.instance,\n },\n route: input.route,\n req,\n requestContext: req,\n config: input.pluginContext.config,\n isDev: input.pluginContext.isDev,\n isProd: input.pluginContext.isProd,\n };\n}\n\ntype NormalizedIntegrationRoute = Omit<FarmIntegrationRoute, \"method\" | \"methods\"> & {\n methods: readonly string[];\n __operation?: FarmIntegrationAPIOperation<any, any, any, any, any>;\n};\n\nfunction normalizeIntegrationRoutes(\n routes: readonly FarmIntegrationRoute[],\n): NormalizedIntegrationRoute[] {\n return routes\n .map((route, index) => {\n // Raw FarmIntegration objects and direct dispatch also pass through here.\n assertUniqueRouteParameters(route.path, \"api\");\n return {\n index,\n route: {\n ...route,\n methods: normalizeIntegrationRouteMethods(route),\n input: normalizeIntegrationRouteInputSchemas(route),\n },\n specificity: getRoutePatternSpecificity(route.path, \"api\"),\n };\n })\n .sort(\n (left, right) =>\n compareRouteSpecificity(left.specificity, right.specificity) || left.index - right.index,\n )\n .map(({ route }) => route);\n}\n\nfunction normalizeIntegrationRouteMethods(route: Pick<FarmIntegrationRoute, \"method\" | \"methods\">) {\n const input =\n route.methods && route.methods.length > 0\n ? [...route.methods]\n : route.method\n ? [route.method]\n : [\"ALL\"];\n\n return input.map((method) => String(method).toUpperCase());\n}\n\nfunction normalizeIntegrationRouteInputSchemas<TBody, TQuery>(\n route: Pick<FarmIntegrationRoute<TBody, TQuery>, \"body\" | \"query\" | \"input\">,\n): FarmIntegrationRouteInputSchemas<TBody, TQuery> | undefined {\n const input: FarmIntegrationRouteInputSchemas<TBody, TQuery> = {\n ...route.input,\n };\n\n if (route.body) {\n input.body = route.body;\n }\n\n if (route.query) {\n input.query = route.query;\n }\n\n return input.body || input.query ? input : undefined;\n}\n\ntype IntegrationRouteInputValidationResult =\n | {\n success: true;\n input: FarmIntegrationRouteInput;\n }\n | {\n success: false;\n response: Response;\n };\n\nasync function validateIntegrationRouteInput(\n route: NormalizedIntegrationRoute,\n request: Request,\n url: URL,\n): Promise<IntegrationRouteInputValidationResult> {\n if (request.method.toUpperCase() === \"QUERY\" && !request.headers.has(\"content-type\")) {\n return {\n success: false,\n response: Response.json(\n {\n error: \"Invalid QUERY request\",\n message: \"QUERY requests must include a Content-Type header.\",\n },\n { status: 400 },\n ),\n };\n }\n\n const schemas = route.input;\n if (!schemas?.body && !schemas?.query) {\n return {\n success: true,\n input: {},\n };\n }\n\n const input: FarmIntegrationRouteInput = {};\n const issues: FarmIntegrationValidationIssue[] = [];\n\n if (schemas.query) {\n const queryResult = await parseIntegrationInputSchema(\n \"query\",\n schemas.query,\n createQueryInput(url.searchParams),\n );\n if (queryResult.success) {\n input.query = queryResult.data;\n } else {\n issues.push(...queryResult.issues);\n }\n }\n\n if (schemas.body) {\n const bodyInput = await readIntegrationValidationBody(\n request,\n getIntegrationRouteBodyFormat(route),\n );\n\n if (bodyInput.success) {\n const bodyResult = await parseIntegrationInputSchema(\"body\", schemas.body, bodyInput.data);\n if (bodyResult.success) {\n input.body = bodyResult.data;\n } else {\n issues.push(...bodyResult.issues);\n }\n } else {\n issues.push(bodyInput.issue);\n }\n }\n\n if (issues.length > 0) {\n return {\n success: false,\n response: createIntegrationValidationResponse(issues),\n };\n }\n\n return {\n success: true,\n input,\n };\n}\n\nasync function parseIntegrationInputSchema<TValue>(\n source: FarmIntegrationRouteInputSource,\n schema: FarmIntegrationInputSchema<TValue>,\n value: unknown,\n): Promise<\n | {\n success: true;\n data: TValue;\n }\n | {\n success: false;\n issues: FarmIntegrationValidationIssue[];\n }\n> {\n const parser = schema.safeParseAsync || schema.safeParse;\n if (parser) {\n const result = await parser.call(schema, value);\n if (result.success) {\n return {\n success: true,\n data: result.data,\n };\n }\n\n return {\n success: false,\n issues: normalizeIntegrationValidationIssues(source, result.error),\n };\n }\n\n if (schema[\"~standard\"]?.validate) {\n const result = await schema[\"~standard\"].validate(value);\n if (\"value\" in result) {\n return {\n success: true,\n data: result.value,\n };\n }\n\n return {\n success: false,\n issues: normalizeIntegrationValidationIssues(source, {\n issues: result.issues,\n }),\n };\n }\n\n if (schema.parse) {\n try {\n return {\n success: true,\n data: await schema.parse(value),\n };\n } catch (error) {\n return {\n success: false,\n issues: normalizeIntegrationValidationIssues(\n source,\n normalizeIntegrationValidationError(error),\n ),\n };\n }\n }\n\n return {\n success: false,\n issues: [\n {\n source,\n message:\n \"Input schema must expose safeParse, safeParseAsync, parse, or ~standard.validate.\",\n },\n ],\n };\n}\n\nfunction createIntegrationValidationResponse(issues: readonly FarmIntegrationValidationIssue[]) {\n return Response.json(\n {\n error: \"Integration route input validation failed\",\n issues,\n },\n {\n status: 400,\n },\n );\n}\n\nfunction normalizeIntegrationValidationIssues(\n source: FarmIntegrationRouteInputSource,\n error: FarmIntegrationValidationErrorLike,\n): FarmIntegrationValidationIssue[] {\n if (Array.isArray(error.issues) && error.issues.length > 0) {\n return error.issues.map((issue) => ({\n source,\n path: normalizeIntegrationValidationPath(issue.path),\n code: issue.code,\n message: issue.message || \"Invalid input\",\n }));\n }\n\n return [\n {\n source,\n path: [],\n message: error.message || \"Invalid input\",\n },\n ];\n}\n\nfunction normalizeIntegrationValidationPath(\n path: readonly FarmIntegrationValidationPathSegment[] | undefined,\n): (string | number)[] {\n return (path || []).map((segment) => {\n const key =\n typeof segment === \"object\" && segment !== null && \"key\" in segment ? segment.key : segment;\n return typeof key === \"symbol\" ? key.description || key.toString() : key;\n });\n}\n\nfunction normalizeIntegrationValidationError(error: unknown): FarmIntegrationValidationErrorLike {\n if (error && typeof error === \"object\") {\n return error as FarmIntegrationValidationErrorLike;\n }\n\n return {\n message: error instanceof Error ? error.message : String(error || \"Invalid input\"),\n };\n}\n\nasync function readIntegrationValidationBody(\n request: Request,\n format: FarmIntegrationAPIBodyFormat,\n): Promise<\n | {\n success: true;\n data: unknown;\n }\n | {\n success: false;\n issue: FarmIntegrationValidationIssue;\n }\n> {\n if (request.method === \"GET\" || request.method === \"HEAD\" || format === \"none\") {\n return {\n success: true,\n data: undefined,\n };\n }\n\n try {\n if (format === \"form\") {\n return {\n success: true,\n data: createFormInput(await request.clone().formData()),\n };\n }\n\n const text = await request.clone().text();\n if (text.trim().length === 0) {\n return {\n success: true,\n data: undefined,\n };\n }\n\n return {\n success: true,\n data: JSON.parse(text),\n };\n } catch (error) {\n return {\n success: false,\n issue: {\n source: \"body\",\n path: [],\n message:\n format === \"json\"\n ? \"Expected a valid JSON request body.\"\n : error instanceof Error && error.message\n ? error.message\n : \"Could not parse request body.\",\n },\n };\n }\n}\n\nfunction getIntegrationRouteBodyFormat(route: NormalizedIntegrationRoute) {\n return route.bodyFormat || route.__operation?.bodyFormat || \"json\";\n}\n\nfunction createIntegrationRouteArgs(input: {\n integration: FarmIntegration;\n config: FarmPluginContext[\"config\"];\n}): FarmIntegrationRouteArgs {\n let clientPromise: Promise<unknown | undefined> | undefined;\n let ormPromise: Promise<unknown> | undefined;\n\n const getClient = () => {\n clientPromise ??= import(\"./storage\").then(({ resolveStorageRuntimeClient }) =>\n resolveStorageRuntimeClient(input.config.storage),\n );\n return clientPromise;\n };\n\n const getOrm = () => {\n if (!input.integration.schema) {\n throw new Error(\n `Integration \"${input.integration.type}\" does not define a schema for ctx.args.db.`,\n );\n }\n\n ormPromise ??= import(\"./integration-orm\").then(({ createIntegrationOrm }) =>\n createIntegrationOrm({\n schema: input.integration.schema!,\n config: input.config,\n }),\n );\n return ormPromise;\n };\n\n return {\n db: createLazyIntegrationOrmClient(getOrm) as never,\n getDb: getOrm as never,\n storage: {\n getClient,\n getOrm: getOrm as never,\n },\n };\n}\n\nfunction createLazyIntegrationOrmClient(resolveOrm: () => Promise<unknown>) {\n const modelProxyCache = new Map<PropertyKey, unknown>();\n\n return new Proxy(\n {},\n {\n get(_target, prop) {\n if (prop === \"then\") {\n return undefined;\n }\n\n if (prop === \"transaction\" || prop === \"batch\") {\n return async (...args: unknown[]) => {\n const orm = (await resolveOrm()) as Record<PropertyKey, unknown>;\n const member = orm[prop];\n if (typeof member !== \"function\") {\n throw new Error(`Integration ORM does not expose \"${String(prop)}\".`);\n }\n return member.apply(orm, args);\n };\n }\n\n if (prop === \"$driver\") {\n return undefined;\n }\n\n if (!modelProxyCache.has(prop)) {\n modelProxyCache.set(prop, createLazyIntegrationOrmModel(resolveOrm, prop));\n }\n\n return modelProxyCache.get(prop);\n },\n },\n );\n}\n\nfunction createLazyIntegrationOrmModel(resolveOrm: () => Promise<unknown>, modelName: PropertyKey) {\n return new Proxy(\n {},\n {\n get(_target, prop) {\n if (prop === \"then\") {\n return undefined;\n }\n\n return async (...args: unknown[]) => {\n const orm = (await resolveOrm()) as Record<PropertyKey, Record<PropertyKey, unknown>>;\n const model = orm[modelName];\n const member = model?.[prop];\n if (typeof member !== \"function\") {\n throw new Error(\n `Integration ORM model \"${String(modelName)}\" does not expose \"${String(prop)}\".`,\n );\n }\n return member.apply(model, args);\n };\n },\n },\n );\n}\n\nasync function runIntegrationRouteBeforeHooks(\n route: NormalizedIntegrationRoute,\n request: Request,\n context: FarmIntegrationHandlerContext,\n): Promise<Response | undefined> {\n const hookContext = context as FarmIntegrationRouteHookContext;\n hookContext.response = undefined;\n\n for (const hook of route.before || []) {\n const response = await hook(request, hookContext);\n if (response) {\n hookContext.response = response;\n return response;\n }\n\n if (hookContext.response) {\n return hookContext.response;\n }\n }\n\n return undefined;\n}\n\nasync function runIntegrationRouteAfterHooks(\n route: NormalizedIntegrationRoute,\n request: Request,\n context: FarmIntegrationHandlerContext,\n response: Response,\n): Promise<Response> {\n const hookContext = context as FarmIntegrationRouteHookContext;\n let currentResponse = response;\n\n for (const hook of route.after || []) {\n hookContext.response = currentResponse;\n const nextResponse = await hook(request, hookContext);\n currentResponse = nextResponse || hookContext.response || currentResponse;\n }\n\n hookContext.response = currentResponse;\n return currentResponse;\n}\n\nfunction createQueryInput(searchParams: URLSearchParams): Record<string, string | string[]> {\n const input: Record<string, string | string[]> = {};\n searchParams.forEach((value, key) => {\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") return;\n\n const existing = input[key];\n if (existing === undefined) {\n input[key] = value;\n return;\n }\n\n input[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n });\n return input;\n}\n\nfunction createFormInput(\n formData: FormData,\n): Record<string, FormDataEntryValue | FormDataEntryValue[]> {\n const input: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n formData.forEach((value, key) => {\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") return;\n\n const existing = input[key];\n if (existing === undefined) {\n input[key] = value;\n return;\n }\n\n input[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n });\n return input;\n}\n\nexport async function dispatchIntegrationRequest(\n runtime: RegisteredIntegrationRuntime,\n request: Request,\n options: {\n currentRequest?: Request;\n data?: FarmIntegrationData;\n internal?: boolean;\n } = {},\n): Promise<Response | null> {\n try {\n request = await bufferFarmRequestBody(\n request,\n resolveFarmServerConfig(runtime.config.server).bodySizeLimit,\n );\n } catch (error) {\n const response = createFarmRequestBodyErrorResponse(error);\n if (response) return response;\n throw error;\n }\n\n const integration = runtime.integration;\n const url = new URL(request.url);\n const pathname = url.pathname;\n const requestId =\n request.headers.get(\"x-request-id\") ||\n options.currentRequest?.headers.get(\"x-request-id\") ||\n String(Date.now());\n const routes = normalizeIntegrationRoutes(integration.routes || []);\n const middleware = [...(integration.middleware || [])];\n\n for (const entry of middleware) {\n const params = resolveMatcherParams(entry.matcher, pathname);\n if (!params) {\n continue;\n }\n\n const handlerContext = createServerIntegrationHandlerContext({\n runtime,\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n params,\n pathname,\n requestId,\n currentRequest: options.currentRequest,\n data: options.data,\n internal: options.internal === true,\n });\n const startedAt = Date.now();\n\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:start\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n requestId,\n context: handlerContext.req.snapshot(),\n });\n\n try {\n const response = await entry.handler(request, handlerContext);\n if (response) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return response;\n }\n\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n } catch (error) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:error\",\n route: {\n kind: \"middleware\",\n path: normalizeMatcher(entry.matcher),\n methods: [\"ALL\"],\n },\n request,\n requestId,\n durationMs: Date.now() - startedAt,\n error,\n context: handlerContext.req.snapshot(),\n });\n throw error;\n }\n }\n\n for (const route of routes) {\n const params = matchesMethod(route.methods, request.method)\n ? extractPathParams(route.path, pathname)\n : null;\n if (!params) {\n continue;\n }\n\n const handlerContext = createServerIntegrationHandlerContext({\n runtime,\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n params,\n pathname,\n requestId,\n currentRequest: options.currentRequest,\n data: options.data,\n internal: options.internal === true,\n });\n const startedAt = Date.now();\n\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:start\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n requestId,\n context: handlerContext.req.snapshot(),\n });\n\n try {\n const validation = await validateIntegrationRouteInput(route, request, url);\n if (!validation.success) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response: validation.response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return validation.response;\n }\n handlerContext.input = validation.input;\n\n for (const middlewareEntry of route.middleware || []) {\n const middlewareResponse = await middlewareEntry.handler(request, handlerContext);\n if (middlewareResponse) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response: middlewareResponse,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return middlewareResponse;\n }\n }\n\n const beforeResponse = await runIntegrationRouteBeforeHooks(route, request, handlerContext);\n if (beforeResponse) {\n const response = await runIntegrationRouteAfterHooks(\n route,\n request,\n handlerContext,\n beforeResponse,\n );\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return response;\n }\n\n const handlerResponse = await route.handler(request, handlerContext);\n const response = await runIntegrationRouteAfterHooks(\n route,\n request,\n handlerContext,\n handlerResponse,\n );\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:end\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n response,\n requestId,\n durationMs: Date.now() - startedAt,\n context: handlerContext.req.snapshot(),\n });\n return response;\n } catch (error) {\n await emitIntegrationLog(integration, {\n category: integration.category,\n slot: integration.category,\n type: integration.type,\n phase: \"request:error\",\n route: {\n kind: \"route\",\n path: route.path,\n methods: route.methods,\n },\n request,\n requestId,\n durationMs: Date.now() - startedAt,\n error,\n context: handlerContext.req.snapshot(),\n });\n throw error;\n }\n }\n\n return null;\n}\n\n(globalThis as GlobalWithIntegrationRuntimeRegistry)[INTEGRATION_REQUEST_DISPATCHER_KEY] =\n dispatchIntegrationRequest;\n\nfunction createIntegrationRequestContextStore(\n rawRequest: FarmRequest,\n request: Request,\n pluginContext: FarmPluginContext,\n): FarmIntegrationRequestContextStore {\n return {\n get(key) {\n const requestValue = pluginContext.requestContext.get(request, key);\n if (requestValue !== undefined) {\n return requestValue;\n }\n\n return pluginContext.requestContext.get(rawRequest, key);\n },\n set(key, value, options) {\n pluginContext.requestContext.set(rawRequest, key, value, options);\n pluginContext.requestContext.set(request, key, value, options);\n },\n has(key) {\n return (\n pluginContext.requestContext.has(request, key) ||\n pluginContext.requestContext.has(rawRequest, key)\n );\n },\n delete(key) {\n const deletedRequest = pluginContext.requestContext.delete(request, key);\n const deletedRaw = pluginContext.requestContext.delete(rawRequest, key);\n return deletedRequest || deletedRaw;\n },\n clear() {\n pluginContext.requestContext.clear(rawRequest);\n pluginContext.requestContext.clear(request);\n },\n snapshot(options) {\n const merged = pluginContext.requestContext.getAll(rawRequest, options);\n const requestSnapshot = pluginContext.requestContext.getAll(request, options);\n for (const [key, value] of requestSnapshot) {\n merged.set(key, value);\n }\n return merged;\n },\n };\n}\n\nfunction createServerIntegrationHandlerContext(input: {\n runtime: RegisteredIntegrationRuntime;\n route: FarmIntegrationHandlerContext[\"route\"];\n request: Request;\n params: FarmIntegrationRouteParams;\n pathname: string;\n requestId: string;\n currentRequest?: Request;\n data?: FarmIntegrationData;\n internal?: boolean;\n}): FarmIntegrationHandlerContext {\n const req = createServerIntegrationRequestContextStore(input.request, input.currentRequest);\n\n if (input.internal) {\n req.set(FARM_INTEGRATION_INTERNAL_DISPATCH_CONTEXT_KEY, true);\n }\n\n return {\n request: input.request,\n requestId: input.requestId,\n url: new URL(input.request.url),\n pathname: input.pathname,\n method: input.request.method,\n params: input.params,\n input: {},\n args: createIntegrationRouteArgs({\n integration: input.runtime.integration,\n config: input.runtime.config,\n }),\n data: resolveIntegrationData(input.request, input.data),\n integration: {\n category: input.runtime.integration.category,\n slot: input.runtime.integration.category,\n type: input.runtime.integration.type,\n instance: input.runtime.integration.instance,\n },\n route: input.route,\n req,\n requestContext: req,\n config: input.runtime.config,\n isDev: input.runtime.isDev,\n isProd: input.runtime.isProd,\n };\n}\n\nfunction createServerIntegrationRequestContextStore(\n request: Request,\n currentRequest?: Request,\n): FarmIntegrationRequestContextStore {\n return {\n get(key) {\n const requestValue = getRequestContext(request, key);\n if (requestValue !== undefined) {\n return requestValue;\n }\n\n if (currentRequest) {\n return getRequestContext(currentRequest, key);\n }\n\n return undefined;\n },\n set(key, value, options) {\n setRequestContext(request, key, value, options);\n if (currentRequest) {\n setRequestContext(currentRequest, key, value, options);\n }\n },\n has(key) {\n return (\n hasRequestContext(request, key) ||\n (!!currentRequest && hasRequestContext(currentRequest, key))\n );\n },\n delete(key) {\n const deletedRequest = deleteRequestContext(request, key);\n const deletedCurrent = currentRequest ? deleteRequestContext(currentRequest, key) : false;\n return deletedRequest || deletedCurrent;\n },\n clear() {\n clearRequestContext(request);\n if (currentRequest) {\n clearRequestContext(currentRequest);\n }\n },\n snapshot(options) {\n const merged = currentRequest\n ? getRequestContextSnapshot(currentRequest, options)\n : new Map<string, unknown>();\n const requestSnapshot = getRequestContextSnapshot(request, options);\n for (const [key, value] of requestSnapshot) {\n merged.set(key, value);\n }\n return merged;\n },\n };\n}\n\nfunction createWebRequest(req: FarmRequest, fullUrl: string, body?: Buffer): Request {\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (value == null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n headers.append(key, item);\n }\n continue;\n }\n\n headers.set(key, value);\n }\n\n return new Request(fullUrl, {\n method: req.method,\n headers,\n body: body as BodyInit | undefined,\n });\n}\n\nfunction matchesMethod(methods: readonly string[], method: string | undefined): boolean {\n if (!method) {\n return false;\n }\n\n const normalizedMethod = method.toUpperCase();\n return methods.some((item) => {\n const candidate = item.toUpperCase();\n return candidate === \"ALL\" || candidate === normalizedMethod;\n });\n}\n\nfunction matchesMatcher(\n matcher: string | readonly string[] | undefined,\n pathname: string,\n): boolean {\n return resolveMatcherParams(matcher, pathname) !== null;\n}\n\nfunction resolveMatcherParams(\n matcher: string | readonly string[] | undefined,\n pathname: string,\n): FarmIntegrationRouteParams | null {\n if (!matcher) {\n return {};\n }\n\n const list = Array.isArray(matcher) ? matcher : [matcher];\n for (const item of list) {\n if (item === \"/(.*)\" || item === \"*\") {\n return {};\n }\n if (item.endsWith(\"(.*)\")) {\n const prefix = item.slice(0, -4);\n if (pathname === prefix || pathname.startsWith(`${prefix}/`)) {\n return {};\n }\n continue;\n }\n const params = extractPathParams(item, pathname);\n if (params) {\n return params;\n }\n }\n\n return null;\n}\n\nfunction matchesPath(pattern: string, pathname: string): boolean {\n return extractPathParams(pattern, pathname) !== null;\n}\n\nfunction extractPathParams(pattern: string, pathname: string): FarmIntegrationRouteParams | null {\n const routeSegments = splitPath(pattern);\n const pathSegments = splitPath(pathname);\n const params: FarmIntegrationRouteParams = {};\n\n let routeIndex = 0;\n let pathIndex = 0;\n\n while (routeIndex < routeSegments.length && pathIndex < pathSegments.length) {\n const routeSegment = routeSegments[routeIndex];\n const pathSegment = pathSegments[pathIndex];\n\n if (isCatchAllSegment(routeSegment)) {\n params[getSegmentParamName(routeSegment)] = pathSegments\n .slice(pathIndex)\n .map((segment) => decodeRouteSegment(segment));\n return params;\n }\n\n if (isDynamicSegment(routeSegment)) {\n params[getSegmentParamName(routeSegment)] = decodeRouteSegment(pathSegment);\n routeIndex += 1;\n pathIndex += 1;\n continue;\n }\n\n if (routeSegment !== pathSegment) {\n return null;\n }\n\n routeIndex += 1;\n pathIndex += 1;\n }\n\n if (routeIndex === routeSegments.length && pathIndex === pathSegments.length) {\n return params;\n }\n\n if (routeIndex === routeSegments.length - 1 && isCatchAllSegment(routeSegments[routeIndex])) {\n params[getSegmentParamName(routeSegments[routeIndex])] = [];\n return params;\n }\n\n return null;\n}\n\nfunction splitPath(value: string): string[] {\n return value.split(\"/\").filter(Boolean);\n}\n\nfunction isDynamicSegment(segment: string): boolean {\n return segment.startsWith(\"[\") && segment.endsWith(\"]\");\n}\n\nfunction isCatchAllSegment(segment: string): boolean {\n return segment.startsWith(\"[...\") && segment.endsWith(\"]\");\n}\n\nfunction getSegmentParamName(segment: string): string {\n if (isCatchAllSegment(segment)) {\n return segment.slice(4, -1);\n }\n\n return segment.slice(1, -1);\n}\n\nfunction getRequestId(req: FarmRequest): string {\n const headerValue = req.headers[\"x-request-id\"];\n if (Array.isArray(headerValue)) {\n return headerValue[0] || String(Date.now());\n }\n return headerValue || String(Date.now());\n}\n\nfunction normalizeMatcher(matcher: string | readonly string[] | undefined): string {\n if (!matcher) {\n return \"/(.*)\";\n }\n return typeof matcher === \"string\" ? matcher : matcher.join(\", \");\n}\n","export type RouteSegmentSpecificity = \"static\" | \"dynamic\" | \"catch-all\" | \"optional-catch-all\";\n\nexport class AmbiguousRouteError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AmbiguousRouteError\";\n }\n}\n\nexport class NonTerminalCatchAllRouteError extends TypeError {\n constructor(message: string) {\n super(message);\n this.name = \"NonTerminalCatchAllRouteError\";\n }\n}\n\nexport class DuplicateRouteParameterError extends AmbiguousRouteError {\n constructor(message: string) {\n super(message);\n this.name = \"DuplicateRouteParameterError\";\n }\n}\n\nexport class ReservedRouteParameterError extends AmbiguousRouteError {\n constructor(message: string) {\n super(message);\n this.name = \"ReservedRouteParameterError\";\n }\n}\n\nexport class BrowserUnstableRouteError extends TypeError {\n constructor(message: string) {\n super(message);\n this.name = \"BrowserUnstableRouteError\";\n }\n}\n\nconst SEGMENT_RANK: Record<RouteSegmentSpecificity, number> = {\n static: 4,\n dynamic: 3,\n \"catch-all\": 1,\n \"optional-catch-all\": 0,\n};\n\n// Ending a route is more specific than consuming the same path through a\n// catch-all, while a following static or dynamic segment remains more specific.\nconst ROUTE_END_RANK = 2;\n\n/** Sort route patterns from the most specific segment sequence to the least specific. */\nexport function compareRouteSpecificity(\n left: readonly RouteSegmentSpecificity[],\n right: readonly RouteSegmentSpecificity[],\n): number {\n const length = Math.max(left.length, right.length);\n\n for (let index = 0; index < length; index++) {\n const leftRank = index < left.length ? SEGMENT_RANK[left[index]!] : ROUTE_END_RANK;\n const rightRank = index < right.length ? SEGMENT_RANK[right[index]!] : ROUTE_END_RANK;\n if (leftRank !== rightRank) return rightRank - leftRank;\n }\n\n return 0;\n}\n\nexport type RoutePatternSyntax = \"page\" | \"router\" | \"api\";\n\nconst ROUTER_PARAMETER_NAME = \"[A-Za-z0-9_$-]+\";\nconst PAGE_PARAMETER_PATTERN = /^(?:\\[\\[\\.\\.\\.(.+)\\]\\]|\\[\\.\\.\\.(.+)\\]|\\[(.+)\\])$/;\nconst ROUTER_PARAMETER_PATTERN =\n /^(?:\\[\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]\\]|\\[\\.\\.\\.([A-Za-z0-9_$-]+)\\]|\\[([A-Za-z0-9_$-]+)\\]|:([A-Za-z0-9_$-]+)|\\*([A-Za-z0-9_$-]+)\\??)$/;\nconst RESERVED_PARAMETER_NAMES = new Set([\"__proto__\", \"constructor\", \"prototype\"]);\n\nexport function assertBrowserStableRoutePath(pattern: string): void {\n if (pattern.includes(\"\\\\\") || hasControlCharacter(pattern)) {\n throw new BrowserUnstableRouteError(\n `Route path \"${pattern}\" cannot contain backslashes or control characters.`,\n );\n }\n\n for (const segment of pattern.split(\"/\").filter(Boolean)) {\n if (\n (segment.startsWith(\"(\") && segment.endsWith(\")\")) ||\n (segment.startsWith(\"[\") && segment.endsWith(\"]\"))\n ) {\n continue;\n }\n\n let decoded = segment;\n try {\n decoded = decodeURIComponent(segment);\n } catch {\n // Malformed escapes stay literal in browser pathnames.\n }\n if (\n decoded === \".\" ||\n decoded === \"..\" ||\n decoded.includes(\"/\") ||\n decoded.includes(\"\\\\\") ||\n hasControlCharacter(decoded)\n ) {\n throw new BrowserUnstableRouteError(\n `Route path \"${pattern}\" contains browser-unstable segment \"${segment}\".`,\n );\n }\n }\n}\n\nfunction hasControlCharacter(value: string): boolean {\n return Array.from(value).some((character) => {\n const code = character.charCodeAt(0);\n return code <= 31 || (code >= 127 && code <= 159);\n });\n}\n\nexport function assertUniqueRouteParameters(\n pattern: string,\n syntax: RoutePatternSyntax = \"page\",\n): void {\n const parameterPattern = syntax === \"router\" ? ROUTER_PARAMETER_PATTERN : PAGE_PARAMETER_PATTERN;\n const names = new Set<string>();\n\n for (const segment of splitRoutePattern(pattern, syntax)) {\n const match = parameterPattern.exec(segment);\n const name = match?.slice(1).find(Boolean);\n if (!name) continue;\n if (RESERVED_PARAMETER_NAMES.has(name)) {\n throw new ReservedRouteParameterError(\n `Route parameter \"${name}\" in route \"${pattern}\" is reserved. Use a different parameter name.`,\n );\n }\n if (names.has(name)) {\n throw new DuplicateRouteParameterError(\n `Duplicate route parameter \"${name}\" in route \"${pattern}\". Each dynamic segment must use a unique name.`,\n );\n }\n names.add(name);\n }\n}\n\nfunction splitRoutePattern(pattern: string, syntax: RoutePatternSyntax): string[] {\n return pattern\n .replace(/\\\\/g, \"/\")\n .split(\"/\")\n .filter(Boolean)\n .filter((segment) =>\n syntax === \"api\" ? true : !(segment.startsWith(\"(\") && segment.endsWith(\")\")),\n );\n}\n\nexport function assertTerminalCatchAll(pattern: string, syntax: RoutePatternSyntax = \"page\"): void {\n const segments = splitRoutePattern(pattern, syntax);\n const parameterName = syntax === \"router\" ? ROUTER_PARAMETER_NAME : \".+\";\n const catchAllPattern = new RegExp(\n syntax === \"router\"\n ? `^(?:\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]|\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]|\\\\*${parameterName}\\\\??)$`\n : `^(?:\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]|\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\])$`,\n );\n const catchAllIndex = segments.findIndex((segment) => catchAllPattern.test(segment));\n if (catchAllIndex >= 0 && catchAllIndex !== segments.length - 1) {\n throw new NonTerminalCatchAllRouteError(\n `Catch-all segment \"${segments[catchAllIndex]}\" must be the final segment in route \"${pattern}\".`,\n );\n }\n}\n\n/** Return the URL-matching shape of a route without its parameter names. */\nexport function getRoutePatternShape(pattern: string, syntax: RoutePatternSyntax = \"page\"): string {\n assertTerminalCatchAll(pattern, syntax);\n const segments = splitRoutePattern(pattern, syntax).map((segment) => {\n const specificity = getPatternSegmentSpecificity(segment, syntax);\n if (specificity !== \"static\") return specificity;\n\n try {\n return `static:${decodeURIComponent(segment)}`;\n } catch {\n return `static:${segment}`;\n }\n });\n\n return segments.length === 0 ? \"/\" : JSON.stringify(segments);\n}\n\n/** Return the specificity of every URL-consuming segment in a route pattern. */\nexport function getRoutePatternSpecificity(\n pattern: string,\n syntax: RoutePatternSyntax = \"page\",\n): RouteSegmentSpecificity[] {\n assertTerminalCatchAll(pattern, syntax);\n return splitRoutePattern(pattern, syntax).map((segment) =>\n getPatternSegmentSpecificity(segment, syntax),\n );\n}\n\nfunction getPatternSegmentSpecificity(\n segment: string,\n syntax: RoutePatternSyntax,\n): RouteSegmentSpecificity {\n const parameterName = syntax === \"router\" ? ROUTER_PARAMETER_NAME : \".+\";\n const supportsColonAndStar = syntax === \"router\";\n if (\n new RegExp(`^\\\\[\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]\\\\]$`).test(segment) ||\n (supportsColonAndStar && new RegExp(`^\\\\*${parameterName}\\\\?$`).test(segment))\n ) {\n return \"optional-catch-all\";\n }\n if (\n new RegExp(`^\\\\[\\\\.\\\\.\\\\.${parameterName}\\\\]$`).test(segment) ||\n (supportsColonAndStar && new RegExp(`^\\\\*${parameterName}$`).test(segment))\n ) {\n return \"catch-all\";\n }\n if (\n new RegExp(`^\\\\[${parameterName}\\\\]$`).test(segment) ||\n (supportsColonAndStar && new RegExp(`^:${parameterName}$`).test(segment))\n ) {\n return \"dynamic\";\n }\n\n return \"static\";\n}\n","import { localizeFarmHref, resolveFarmLocalePath } from \"../i18n/routing\";\nimport type { ResolvedFarmI18nConfig } from \"../i18n/types\";\nimport { assertBrowserStableRoutePath } from \"../routing/specificity\";\n\ntype ConfigRoutePatternToken =\n | { kind: \"param\"; name: string; captureIndex: number; catchAll: boolean }\n | { kind: \"wildcard\"; captureIndex: number };\n\nexport interface CompiledConfigRoutePattern {\n regex: RegExp;\n tokens: ConfigRoutePatternToken[];\n}\n\nexport function validateConfigRouteSource(source: string, field = \"Config route source\"): string {\n if (typeof source !== \"string\" || source.length === 0) {\n throw new TypeError(`${field} must be a non-empty pathname pattern.`);\n }\n if (source.trim() !== source) {\n throw new Error(`${field} cannot contain leading or trailing whitespace.`);\n }\n if (!source.startsWith(\"/\")) {\n throw new Error(`${field} must start with \"/\".`);\n }\n if (source.includes(\"?\") || source.includes(\"#\")) {\n throw new Error(`${field} must be a pathname without a query string or hash.`);\n }\n if (\n source.includes(\"\\\\\") ||\n Array.from(source).some((character) => {\n const code = character.charCodeAt(0);\n return code <= 31 || (code >= 127 && code <= 159);\n })\n ) {\n throw new Error(`${field} cannot contain backslashes or control characters.`);\n }\n assertBrowserStableRoutePath(source);\n return source;\n}\n\nexport function resolveConfigRoutePathname(\n pathname: string,\n i18n?: ResolvedFarmI18nConfig,\n): { pathname: string; locale?: string } {\n if (!i18n?.enabled) return { pathname };\n const match = resolveFarmLocalePath(pathname, i18n);\n return { pathname: match.pathname, locale: match.locale };\n}\n\nexport function localizeConfigRouteDestination(\n destination: string,\n locale: string | undefined,\n i18n?: ResolvedFarmI18nConfig,\n): string {\n return locale && i18n?.enabled ? localizeFarmHref(destination, locale, i18n) : destination;\n}\n\nfunction escapeRegexCharacter(character: string): string {\n return /[\\\\^$.*+?()[\\]{}|]/.test(character) ? `\\\\${character}` : character;\n}\n\nexport function compileConfigRoutePattern(source: string): CompiledConfigRoutePattern {\n validateConfigRouteSource(source);\n const tokens: ConfigRoutePatternToken[] = [];\n let pattern = \"\";\n let captureIndex = 1;\n\n for (let index = 0; index < source.length; ) {\n const rest = source.slice(index);\n const parameter = rest.match(/^:([A-Za-z0-9_]+)(\\*)?/);\n if (parameter) {\n tokens.push({\n kind: \"param\",\n name: parameter[1],\n captureIndex,\n catchAll: parameter[2] === \"*\",\n });\n pattern += parameter[2] ? \"(.*)\" : \"([^/]+)\";\n captureIndex += 1;\n index += parameter[0].length;\n continue;\n }\n\n if (source[index] === \"*\") {\n tokens.push({ kind: \"wildcard\", captureIndex });\n pattern += \"(.*)\";\n captureIndex += 1;\n index += 1;\n continue;\n }\n\n pattern += escapeRegexCharacter(source[index]);\n index += 1;\n }\n\n return { regex: new RegExp(`^${pattern}$`), tokens };\n}\n\nexport function interpolateConfigRouteDestination(\n destination: string,\n match: RegExpMatchArray,\n tokens: readonly ConfigRoutePatternToken[],\n): string {\n const namedCaptures = new Map<string, string>();\n const wildcardCaptures: string[] = [];\n const captures = new Map<number, string>();\n\n for (const token of tokens) {\n const value = normalizeConfigRouteCapture(\n match[token.captureIndex] || \"\",\n token.kind === \"wildcard\" || token.catchAll,\n );\n captures.set(token.captureIndex, value);\n if (token.kind === \"param\") {\n namedCaptures.set(token.name, value);\n } else {\n wildcardCaptures.push(value);\n }\n }\n\n let result = \"\";\n let wildcardIndex = 0;\n for (let index = 0; index < destination.length; ) {\n const rest = destination.slice(index);\n const parameter = rest.match(/^:([A-Za-z0-9_]+)(\\*)?/);\n if (parameter) {\n const value = namedCaptures.get(parameter[1]);\n result += value === undefined ? parameter[0] : value;\n index += parameter[0].length;\n continue;\n }\n\n const capture = rest.match(/^\\$(\\d+)/);\n if (capture) {\n result += captures.get(Number(capture[1])) ?? \"\";\n index += capture[0].length;\n continue;\n }\n\n if (destination[index] === \"*\") {\n result += wildcardCaptures[wildcardIndex] || \"\";\n wildcardIndex += 1;\n index += 1;\n continue;\n }\n\n result += destination[index];\n index += 1;\n }\n\n return result;\n}\n\nfunction normalizeConfigRouteCapture(value: string, catchAll: boolean): string {\n const segments = catchAll ? value.split(\"/\").filter(Boolean) : [value];\n return segments\n .map((segment) => encodeConfigRouteSegment(decodeConfigRouteSegment(segment)))\n .join(\"/\");\n}\n\nfunction decodeConfigRouteSegment(segment: string): string {\n try {\n return decodeURIComponent(segment);\n } catch {\n return segment;\n }\n}\n\nfunction encodeConfigRouteSegment(segment: string): string {\n return encodeURIComponent(segment).replace(\n /[!'()*]/g,\n (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,\n );\n}\n","export type FarmIntegrationAPIMethod =\n | \"GET\"\n | \"QUERY\"\n | \"POST\"\n | \"PUT\"\n | \"PATCH\"\n | \"DELETE\"\n | \"OPTIONS\"\n | \"HEAD\";\n\nexport type FarmIntegrationAPIBodyFormat = \"json\" | \"form\" | \"none\";\nexport type FarmIntegrationAPIResponseFormat = \"json\" | \"text\" | \"response\";\n\nexport interface FarmIntegrationAPIOperation<\n TBody = never,\n TQuery = never,\n TResponse = unknown,\n TServer extends boolean = false,\n TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n> {\n readonly kind: \"farm-integration-api-operation\";\n path: string;\n method: TMethod;\n bodyFormat?: FarmIntegrationAPIBodyFormat;\n responseFormat?: FarmIntegrationAPIResponseFormat;\n headers?: Record<string, string>;\n credentials?: RequestCredentials;\n isServer?: TServer;\n __pathless?: boolean;\n __types?: {\n body: TBody;\n query: TQuery;\n response: TResponse;\n };\n}\n\nexport type FarmIntegrationAPI = {\n [key: string]: FarmIntegrationAPI | FarmIntegrationAPIOperation<any, any, any, any, any>;\n};\n\nexport type FarmIntegrationRouteOperationCarrier<\n TPath extends string = string,\n TOperation extends FarmIntegrationAPIOperation<any, any, any, any, any> =\n FarmIntegrationAPIOperation<any, any, any, any, any>,\n> = {\n path: TPath;\n __operation: TOperation;\n};\n\ntype IntegrationAPIBuilderOptions<TServer extends boolean = false> = Omit<\n FarmIntegrationAPIOperation<any, any, any, TServer>,\n \"kind\" | \"method\" | \"path\" | \"__pathless\" | \"__types\"\n>;\n\nexport function defineIntegrationAPIOperation<\n TBody = never,\n TQuery = never,\n TResponse = unknown,\n TServer extends boolean = false,\n TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n>(\n operation: Omit<\n FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>,\n \"kind\" | \"__types\"\n >,\n): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod> {\n return {\n kind: \"farm-integration-api-operation\",\n ...operation,\n };\n}\n\nexport function defineIntegrationAPI<TAPI extends FarmIntegrationAPI>(api: TAPI): TAPI {\n return api;\n}\n\nfunction operation<\n TBody = never,\n TQuery = never,\n TResponse = unknown,\n TServer extends boolean = false,\n TMethod extends FarmIntegrationAPIMethod = FarmIntegrationAPIMethod,\n>(\n method: TMethod,\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod> {\n const hasExplicitPath = typeof pathOrOptions === \"string\";\n const path = hasExplicitPath ? pathOrOptions : \"\";\n const options = (\n hasExplicitPath\n ? maybeOptions\n : {\n ...maybeOptions,\n ...pathOrOptions,\n }\n ) as IntegrationAPIBuilderOptions<TServer>;\n\n return defineIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, TMethod>({\n path,\n method,\n __pathless: !hasExplicitPath,\n ...options,\n });\n}\n\nfunction get<TResponse = unknown, TServer extends boolean = false>(\n path: string,\n options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, never, TResponse, TServer, \"GET\">;\nfunction get<TQuery = never, TResponse = unknown, TServer extends boolean = false>(\n path: string,\n options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"GET\">;\nfunction get<TResponse = unknown, TServer extends boolean = false>(\n options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, never, TResponse, TServer, \"GET\">;\nfunction get<TQuery = never, TResponse = unknown, TServer extends boolean = false>(\n options?: IntegrationAPIBuilderOptions<TServer>,\n): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"GET\">;\nfunction get(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<boolean>,\n maybeOptions: IntegrationAPIBuilderOptions<boolean> = {} as IntegrationAPIBuilderOptions<boolean>,\n) {\n return operation<never, any, any, boolean>(\"GET\", pathOrOptions, maybeOptions);\n}\n\nfunction isOperation(value: unknown): value is FarmIntegrationAPIOperation<any, any, any, any> {\n return (\n !!value &&\n typeof value === \"object\" &&\n (value as FarmIntegrationAPIOperation<any, any, any, any>).kind ===\n \"farm-integration-api-operation\"\n );\n}\n\nfunction bindRoutePath<TAPI extends FarmIntegrationAPI>(path: string, api: TAPI): TAPI {\n const entries = Object.entries(api as Record<string, unknown>).map(([key, value]) => {\n if (isOperation(value)) {\n return [\n key,\n {\n ...value,\n path,\n __pathless: false,\n },\n ];\n }\n\n if (value && typeof value === \"object\") {\n return [key, bindRoutePath(path, value as FarmIntegrationAPI)];\n }\n\n return [key, value];\n });\n\n return Object.fromEntries(entries) as TAPI;\n}\n\ntype RouteOperationsToAPI<\n TOperations extends readonly FarmIntegrationAPIOperation<any, any, any, any, any>[],\n> = {\n [TMethod in Lowercase<TOperations[number][\"method\"] & string>]: Extract<\n TOperations[number],\n { method: Uppercase<TMethod> }\n >;\n};\n\ntype StripRouteClientPrefix<TPath extends string> = TPath extends `/api/${string}/${infer TRest}`\n ? TRest\n : TPath extends `/${string}/${infer TRest}`\n ? TRest\n : TPath extends `/${infer TRest}`\n ? TRest\n : TPath;\n\ntype NormalizeRouteSegment<TSegment extends string> = TSegment extends `[...${infer TName}]`\n ? TName\n : TSegment extends `[${infer TName}]`\n ? TName\n : TSegment extends `${infer TName}(${string}`\n ? TName\n : CamelCaseRouteSegment<TSegment>;\n\ntype CamelCaseRouteSegment<TSegment extends string> =\n TSegment extends `${infer THead}-${infer TTail}`\n ? `${THead}${Capitalize<CamelCaseRouteSegment<TTail>>}`\n : TSegment;\n\ntype RouteNamespaceFromPath<\n TPath extends string,\n TOperation extends FarmIntegrationAPIOperation<any, any, any, any, any>,\n> = TPath extends `${infer THead}/${infer TTail}`\n ? {\n [TKey in NormalizeRouteSegment<THead>]: RouteNamespaceFromPath<TTail, TOperation>;\n }\n : {\n [TKey in NormalizeRouteSegment<TPath>]: {\n [TMethod in Lowercase<TOperation[\"method\"] & string>]: TOperation;\n };\n };\n\ntype UnionToIntersection<TUnion> = (\n TUnion extends unknown ? (value: TUnion) => void : never\n) extends (value: infer TIntersection) => void\n ? TIntersection\n : never;\n\ntype ExpandRecursively<TValue> = TValue extends (...args: any[]) => any\n ? TValue\n : TValue extends object\n ? { [TKey in keyof TValue]: ExpandRecursively<TValue[TKey]> }\n : TValue;\n\ntype RoutesToAPI<TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[]> =\n ExpandRecursively<\n UnionToIntersection<\n TRoutes[number] extends FarmIntegrationRouteOperationCarrier<infer TPath, infer TOperation>\n ? RouteNamespaceFromPath<StripRouteClientPrefix<TPath>, TOperation>\n : never\n >\n >;\n\nexport type InferIntegrationAPIFromRoutes<\n TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[],\n> = RoutesToAPI<TRoutes>;\n\nfunction route<TAPI extends FarmIntegrationAPI>(path: string, definition: TAPI): TAPI;\nfunction route<TOperations extends readonly FarmIntegrationAPIOperation<any, any, any, any, any>[]>(\n path: string,\n ...operations: TOperations\n): RouteOperationsToAPI<TOperations>;\nfunction route(\n path: string,\n definitionOrOperation: FarmIntegrationAPI | FarmIntegrationAPIOperation<any, any, any, any, any>,\n ...operations: readonly FarmIntegrationAPIOperation<any, any, any, any, any>[]\n) {\n if (isOperation(definitionOrOperation)) {\n const allOperations = [definitionOrOperation, ...operations];\n return Object.fromEntries(\n allOperations.map((operation) => [\n operation.method.toLowerCase(),\n {\n ...operation,\n path,\n __pathless: false,\n },\n ]),\n );\n }\n\n return bindRoutePath(path, definitionOrOperation as FarmIntegrationAPI);\n}\n\nfunction normalizeRouteSegment(segment: string): string {\n if (!segment) {\n return \"index\";\n }\n\n if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n return segment.slice(4, -1) || \"index\";\n }\n\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n return segment.slice(1, -1) || \"index\";\n }\n\n const matcherIndex = segment.indexOf(\"(\");\n if (matcherIndex > 0) {\n return segment.slice(0, matcherIndex);\n }\n\n return camelCaseRouteSegment(segment);\n}\n\nfunction camelCaseRouteSegment(segment: string): string {\n return segment.replace(/-([a-zA-Z0-9])/g, (_match, value: string) => value.toUpperCase());\n}\n\nfunction getRouteClientSegments(path: string): string[] {\n const segments = path.split(\"/\").filter(Boolean);\n if (segments.length === 0) {\n return [\"index\"];\n }\n\n const stripped =\n segments[0] === \"api\" && segments.length > 2\n ? segments.slice(2)\n : segments.length > 1\n ? segments.slice(1)\n : [segments[segments.length - 1]];\n\n return stripped.map(normalizeRouteSegment).filter(Boolean);\n}\n\nfunction setRouteOperation(\n target: Record<string, unknown>,\n pathSegments: string[],\n operation: FarmIntegrationAPIOperation<any, any, any, any, any>,\n) {\n const [head, ...tail] = pathSegments;\n if (!head) {\n return;\n }\n\n if (tail.length === 0) {\n const leaf = ((target[head] as Record<string, unknown> | undefined) || {}) as Record<\n string,\n unknown\n >;\n leaf[operation.method.toLowerCase()] = {\n ...operation,\n path: operation.path,\n __pathless: false,\n };\n target[head] = leaf;\n return;\n }\n\n const branch = ((target[head] as Record<string, unknown> | undefined) || {}) as Record<\n string,\n unknown\n >;\n target[head] = branch;\n setRouteOperation(branch, tail, operation);\n}\n\nfunction fromRoutes<TRoutes extends readonly FarmIntegrationRouteOperationCarrier<string, any>[]>(\n routes: TRoutes,\n): RoutesToAPI<TRoutes> {\n const definition: Record<string, unknown> = {};\n\n for (const route of routes) {\n if (!isOperation(route.__operation)) {\n continue;\n }\n\n setRouteOperation(definition, getRouteClientSegments(route.path), {\n ...route.__operation,\n path: route.path,\n __pathless: false,\n });\n }\n\n return definition as RoutesToAPI<TRoutes>;\n}\n\nexport const api = {\n get,\n route,\n fromRoutes,\n query<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"QUERY\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"QUERY\">(\"QUERY\", pathOrOptions, {\n bodyFormat: \"json\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n post<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"POST\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"POST\">(\"POST\", pathOrOptions, {\n bodyFormat: \"json\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n put<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PUT\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"PUT\">(\"PUT\", pathOrOptions, {\n bodyFormat: \"json\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n patch<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PATCH\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"PATCH\">(\"PATCH\", pathOrOptions, {\n bodyFormat: \"json\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n delete<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"DELETE\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"DELETE\">(\"DELETE\", pathOrOptions, {\n bodyFormat: \"json\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n options<TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"OPTIONS\"> {\n return operation<never, TQuery, TResponse, TServer, \"OPTIONS\">(\n \"OPTIONS\",\n pathOrOptions,\n maybeOptions,\n );\n },\n head<TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<never, TQuery, TResponse, TServer, \"HEAD\"> {\n return operation<never, TQuery, TResponse, TServer, \"HEAD\">(\n \"HEAD\",\n pathOrOptions,\n maybeOptions,\n );\n },\n form: {\n query<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"QUERY\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"QUERY\">(\"QUERY\", pathOrOptions, {\n bodyFormat: \"form\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n post<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"POST\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"POST\">(\"POST\", pathOrOptions, {\n bodyFormat: \"form\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n put<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PUT\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"PUT\">(\"PUT\", pathOrOptions, {\n bodyFormat: \"form\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n patch<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"PATCH\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"PATCH\">(\"PATCH\", pathOrOptions, {\n bodyFormat: \"form\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n delete<TBody = never, TResponse = unknown, TQuery = never, TServer extends boolean = false>(\n pathOrOptions?: string | IntegrationAPIBuilderOptions<TServer>,\n maybeOptions: IntegrationAPIBuilderOptions<TServer> = {} as IntegrationAPIBuilderOptions<TServer>,\n ): FarmIntegrationAPIOperation<TBody, TQuery, TResponse, TServer, \"DELETE\"> {\n return operation<TBody, TQuery, TResponse, TServer, \"DELETE\">(\"DELETE\", pathOrOptions, {\n bodyFormat: \"form\",\n ...(typeof pathOrOptions === \"string\" ? maybeOptions : pathOrOptions),\n });\n },\n },\n};\n\nexport const endpoint = api;\n","import type { FarmPlugin, FarmPluginIntegrationContext } from \"./plugin\";\n\nconst FARM_PLUGIN_INTEGRATION_CONTEXT = Symbol.for(\"@farm.js/core/plugin-integration-context\");\n\nexport function setFarmPluginIntegrationContext(\n plugin: FarmPlugin,\n integration: Readonly<FarmPluginIntegrationContext>,\n): void {\n Object.defineProperty(plugin, FARM_PLUGIN_INTEGRATION_CONTEXT, {\n value: integration,\n });\n}\n\nexport function getFarmPluginIntegrationContext(\n plugin: FarmPlugin,\n): Readonly<FarmPluginIntegrationContext> | undefined {\n const value = (plugin as FarmPlugin & Record<symbol, unknown>)[FARM_PLUGIN_INTEGRATION_CONTEXT];\n return value && typeof value === \"object\"\n ? (value as Readonly<FarmPluginIntegrationContext>)\n : undefined;\n}\n","/**\n * Decode a percent-encoded path segment, falling back to the raw value.\n *\n * Request paths are not guaranteed to be validly percent-encoded, so\n * `decodeURIComponent` can throw on input that is still a legal URL: a\n * latin-1 escape such as `caf%E9` from an old link, or a truncated `%ZZ`\n * from a crawler. A malformed segment simply will not match a known route,\n * which is a 404, so it must not throw out of route matching.\n */\nexport function decodeRouteSegment(segment: string): string {\n try {\n return decodeURIComponent(segment);\n } catch {\n return segment;\n }\n}\n","type RequestContextCarrier = object;\n\nexport interface SetRequestContextOptions {\n exposeToPage?: boolean;\n}\n\nexport interface RequestContextSnapshotOptions {\n exposedOnly?: boolean;\n}\n\ninterface RequestContextBucket {\n privateData: Map<string, any>;\n exposedData: Map<string, any>;\n}\n\nconst REQUEST_CONTEXT_STORE_KEY = Symbol.for(\"farm.requestContextStore\");\n\ntype GlobalWithRequestContextStore = typeof globalThis & {\n [REQUEST_CONTEXT_STORE_KEY]?: WeakMap<RequestContextCarrier, RequestContextBucket>;\n};\n\nfunction getRequestContextStore() {\n const globalState = globalThis as GlobalWithRequestContextStore;\n if (!globalState[REQUEST_CONTEXT_STORE_KEY]) {\n globalState[REQUEST_CONTEXT_STORE_KEY] = new WeakMap<\n RequestContextCarrier,\n RequestContextBucket\n >();\n }\n\n return globalState[REQUEST_CONTEXT_STORE_KEY]!;\n}\n\nfunction getBucket(target: RequestContextCarrier): RequestContextBucket {\n const requestContextStore = getRequestContextStore();\n let bucket = requestContextStore.get(target);\n if (!bucket) {\n bucket = {\n privateData: new Map<string, any>(),\n exposedData: new Map<string, any>(),\n };\n requestContextStore.set(target, bucket);\n }\n return bucket;\n}\n\nexport function setRequestContext(\n target: RequestContextCarrier,\n key: string,\n value: any,\n options: SetRequestContextOptions = {},\n): void {\n const bucket = getBucket(target);\n bucket.privateData.set(key, value);\n if (options.exposeToPage) {\n bucket.exposedData.set(key, value);\n }\n}\n\nexport function getRequestContext<T = any>(\n target: RequestContextCarrier,\n key: string,\n): T | undefined {\n const requestContextStore = getRequestContextStore();\n const bucket = requestContextStore.get(target);\n return bucket?.privateData.get(key) as T | undefined;\n}\n\nexport function hasRequestContext(target: RequestContextCarrier, key: string): boolean {\n const requestContextStore = getRequestContextStore();\n const bucket = requestContextStore.get(target);\n return bucket?.privateData.has(key) ?? false;\n}\n\nexport function deleteRequestContext(target: RequestContextCarrier, key: string): boolean {\n const requestContextStore = getRequestContextStore();\n const bucket = requestContextStore.get(target);\n if (!bucket) return false;\n const removedPrivate = bucket.privateData.delete(key);\n bucket.exposedData.delete(key);\n return removedPrivate;\n}\n\nexport function clearRequestContext(target: RequestContextCarrier): void {\n const requestContextStore = getRequestContextStore();\n const bucket = requestContextStore.get(target);\n if (!bucket) return;\n bucket.privateData.clear();\n bucket.exposedData.clear();\n}\n\nexport function getRequestContextSnapshot(\n target: RequestContextCarrier,\n options: RequestContextSnapshotOptions = {},\n): Map<string, any> {\n const requestContextStore = getRequestContextStore();\n const bucket = requestContextStore.get(target);\n if (!bucket) return new Map<string, any>();\n if (options.exposedOnly) {\n return new Map(bucket.exposedData);\n }\n return new Map(bucket.privateData);\n}\n","import type { ServerResponse } from \"node:http\";\n\ninterface ResponseEventWatcher<T> {\n promise: Promise<T>;\n dispose(): void;\n}\n\n/**\n * Watch a real Node response without requiring every Node-compatible response\n * adapter or test double to extend EventEmitter. The framework only needs\n * disconnect handling when the response exposes both halves of the listener\n * lifecycle; otherwise callers can still send ordinary non-blocked bodies.\n */\nfunction watchResponseEvent<T>(\n res: ServerResponse,\n events: ReadonlyArray<readonly [event: string, value: T]>,\n): ResponseEventWatcher<T> | null {\n if (typeof res.once !== \"function\" || typeof res.removeListener !== \"function\") {\n return null;\n }\n\n let settled = false;\n const listeners = events.map(([event, value]) => {\n const listener = () => {\n if (settled) return;\n settled = true;\n dispose();\n resolvePromise(value);\n };\n return { event, listener };\n });\n let resolvePromise!: (value: T) => void;\n const promise = new Promise<T>((resolve) => {\n resolvePromise = resolve;\n for (const { event, listener } of listeners) {\n res.once(event, listener);\n }\n });\n const dispose = () => {\n for (const { event, listener } of listeners) {\n res.removeListener(event, listener);\n }\n };\n\n return { promise, dispose };\n}\n\n/**\n * Waits until the response can accept more writes. Resolves false when the\n * client is gone (close or error): a disconnected socket never emits drain,\n * so waiting on drain alone leaks the pending handler, its reader lock, and\n * the response body for the life of the process.\n */\nasync function waitForWritable(res: ServerResponse): Promise<boolean> {\n if (res.writableEnded || res.destroyed) {\n return false;\n }\n\n const watcher = watchResponseEvent(res, [\n [\"drain\", true],\n [\"close\", false],\n [\"error\", false],\n ]);\n if (!watcher) {\n return false;\n }\n\n try {\n return await watcher.promise;\n } finally {\n watcher.dispose();\n }\n}\n\n/**\n * Older Fetch implementations expose repeated Set-Cookie fields as one\n * comma-joined value. Split only at a comma followed by another cookie-pair;\n * commas inside Expires dates remain part of the current cookie. RFC cookie\n * values exclude commas, so a comma followed by a cookie-pair is unambiguous\n * for valid Set-Cookie syntax once the original field boundaries are lost.\n */\nfunction splitSetCookieHeader(value: string): string[] {\n const cookies: string[] = [];\n let start = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n if (value[index] !== \",\") continue;\n\n let next = index + 1;\n while (value[next] === \" \" || value[next] === \"\\t\") next += 1;\n\n const equals = value.indexOf(\"=\", next);\n if (equals === -1) continue;\n\n const separator = value.slice(next, equals);\n if (separator.length === 0 || /[;,\\s]/.test(separator)) continue;\n\n cookies.push(value.slice(start, index).trim());\n start = next;\n index = next - 1;\n }\n\n cookies.push(value.slice(start).trim());\n return cookies.filter(Boolean);\n}\n\nexport function applyWebResponseHeaders(\n res: Pick<ServerResponse, \"setHeader\"> & Partial<Pick<ServerResponse, \"getHeader\">>,\n headers: Headers,\n options: { appendSetCookie?: boolean } = {},\n): void {\n const responseHeaders = headers as Headers & {\n getSetCookie?: () => string[];\n raw?: () => Record<string, string[]>;\n };\n const rawSetCookies = responseHeaders.raw?.()[\"set-cookie\"];\n const setCookies = responseHeaders.getSetCookie?.() || rawSetCookies || [];\n const existing =\n options.appendSetCookie && typeof res.getHeader === \"function\"\n ? res.getHeader(\"Set-Cookie\")\n : undefined;\n const existingCookies = Array.isArray(existing)\n ? existing.map(String)\n : existing === undefined\n ? []\n : [String(existing)];\n\n let fallbackSetCookie = \"\";\n headers.forEach((value, key) => {\n if (key.toLowerCase() === \"set-cookie\") {\n fallbackSetCookie = value;\n return;\n }\n res.setHeader(key, value);\n });\n\n const cookies =\n setCookies.length > 0\n ? setCookies\n : fallbackSetCookie\n ? splitSetCookieHeader(fallbackSetCookie)\n : [];\n if (cookies.length > 0) {\n res.setHeader(\"Set-Cookie\", [...existingCookies, ...cookies]);\n }\n}\n\nexport async function sendWebResponse(res: ServerResponse, response: Response): Promise<void> {\n res.statusCode = response.status;\n applyWebResponseHeaders(res, response.headers, { appendSetCookie: true });\n\n if (!response.body) {\n res.end();\n return;\n }\n\n if (typeof res.write !== \"function\") {\n const body = await response.arrayBuffer();\n res.end(Buffer.from(body));\n return;\n }\n\n const reader = response.body.getReader();\n const disconnectWatcher = watchResponseEvent(res, [\n [\"close\", true],\n [\"error\", true],\n ]);\n\n try {\n while (true) {\n if (res.destroyed) {\n // The client disconnected mid-response; drop the rest of the body so\n // the handler can return.\n void reader.cancel().catch(() => {});\n return;\n }\n\n const read = reader.read().then((result) => ({ type: \"read\" as const, result }));\n const next = disconnectWatcher\n ? await Promise.race([\n read,\n disconnectWatcher.promise.then(() => ({ type: \"disconnect\" as const })),\n ])\n : await read;\n if (next.type === \"disconnect\") {\n void reader.cancel().catch(() => {});\n return;\n }\n\n const { done, value } = next.result;\n if (done) {\n break;\n }\n\n if (!value || value.byteLength === 0) {\n continue;\n }\n\n if (!res.write(value)) {\n if (!(await waitForWritable(res))) {\n void reader.cancel().catch(() => {});\n return;\n }\n }\n }\n\n res.end();\n } catch (error) {\n // Releasing the lock does not stop the producer. Cancel it when the\n // downstream write fails, without waiting on app-owned cleanup or letting\n // a cancellation failure replace the original error.\n void reader.cancel(error).catch(() => {});\n if (!res.writableEnded) {\n const responseError = error instanceof Error ? error : new Error(String(error));\n if (typeof res.destroy === \"function\") {\n res.destroy(responseError);\n } else {\n res.end();\n }\n }\n throw error;\n } finally {\n disconnectWatcher?.dispose();\n try {\n reader.releaseLock();\n } catch {\n // A disconnect can win the race with a pending read. Cancelling the\n // reader settles it asynchronously, so there may be no lock to release\n // synchronously here.\n }\n }\n}\n","import { assertBrowserStableRoutePath } from \"./routing/specificity\";\n\ninterface FarmNodeAbortRequest {\n aborted?: boolean;\n once(event: \"aborted\", listener: () => void): unknown;\n off(event: \"aborted\", listener: () => void): unknown;\n}\n\ninterface FarmNodeAbortResponse {\n writableEnded: boolean;\n once(event: \"close\" | \"finish\", listener: () => void): unknown;\n off(event: \"close\" | \"finish\", listener: () => void): unknown;\n}\n\n/** Share disconnect semantics between development and production Node requests. */\nexport function createFarmNodeRequestAbortSignal(\n req: FarmNodeAbortRequest,\n res: FarmNodeAbortResponse,\n): AbortSignal {\n const controller = new AbortController();\n let disposed = false;\n const dispose = () => {\n if (disposed) return;\n disposed = true;\n req.off(\"aborted\", abort);\n res.off(\"close\", abortOnEarlyClose);\n res.off(\"finish\", dispose);\n controller.signal.removeEventListener(\"abort\", dispose);\n };\n const abort = () => controller.abort();\n const abortOnEarlyClose = () => {\n if (!res.writableEnded) abort();\n dispose();\n };\n\n if (req.aborted) {\n controller.abort();\n return controller.signal;\n }\n\n req.once(\"aborted\", abort);\n res.once(\"close\", abortOnEarlyClose);\n res.once(\"finish\", dispose);\n controller.signal.addEventListener(\"abort\", dispose, { once: true });\n return controller.signal;\n}\n\nexport const DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT = 10_000_000;\nexport const DEFAULT_FARM_SERVER_HEADERS_TIMEOUT = 60_000;\nexport const DEFAULT_FARM_SERVER_REQUEST_TIMEOUT = 300_000;\nexport const DEFAULT_FARM_SERVER_KEEP_ALIVE_TIMEOUT = 5_000;\nexport const DEFAULT_FARM_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT = 30_000;\nconst MAX_FARM_SERVER_TIMEOUT = 2_147_483_647;\n\nexport type FarmServerDuration = number | `${number}${\"ms\" | \"s\" | \"m\" | \"h\"}`;\n\nexport interface FarmServerHealthConfig {\n /** Liveness endpoint. It remains healthy while a production process drains. */\n livenessPath?: string;\n /** Readiness endpoint. It returns 503 until startup completes and while draining. */\n readinessPath?: string;\n}\n\nexport interface ResolvedFarmServerHealthConfig {\n enabled: boolean;\n livenessPath: string;\n readinessPath: string;\n}\n\nexport interface FarmServerConfig {\n /** Maximum request body size for API routes, integrations, workflows, and uploads. */\n bodySizeLimit?: number | string;\n /** Trust proxy-provided client address and request authority headers. Enable only behind a trusted proxy. */\n trustProxy?: boolean;\n /** Maximum time for a Node client to send complete request headers. */\n headersTimeout?: FarmServerDuration;\n /** Maximum time for a Node client to send the complete request. */\n requestTimeout?: FarmServerDuration;\n /** How long an idle Node keep-alive connection remains open after a response. */\n keepAliveTimeout?: FarmServerDuration;\n /** Maximum time the Node adapter drains traffic before forcing shutdown. */\n gracefulShutdownTimeout?: FarmServerDuration;\n /** Production liveness and readiness endpoints. Set to false to disable them. */\n health?: false | FarmServerHealthConfig;\n}\n\nexport interface ResolvedFarmServerConfig {\n bodySizeLimit: number;\n trustProxy: boolean;\n headersTimeout: number;\n requestTimeout: number;\n keepAliveTimeout: number;\n gracefulShutdownTimeout: number;\n health: ResolvedFarmServerHealthConfig;\n}\n\nexport type FarmRequestBodyErrorCode = \"BODY_TOO_LARGE\" | \"INVALID_CONTENT_LENGTH\";\n\n/** Apply the weak entity-tag comparison required by If-None-Match. */\nexport function matchesFarmIfNoneMatch(\n value: string | readonly string[] | null | undefined,\n etag: string,\n): boolean {\n const expected = parseEntityTag(trimOptionalWhitespace(etag));\n if (!expected) return false;\n\n const values = Array.isArray(value) ? value : [value];\n const combined = values\n .filter((header): header is string => typeof header === \"string\")\n .join(\",\");\n const fieldValue = trimOptionalWhitespace(combined);\n if (!fieldValue) return false;\n if (fieldValue === \"*\") return true;\n\n let matched = false;\n let hasEntityTag = false;\n for (const candidate of splitEntityTags(fieldValue)) {\n const token = trimOptionalWhitespace(candidate);\n if (!token) continue;\n\n const parsed = parseEntityTag(token);\n if (!parsed) return false;\n hasEntityTag = true;\n if (parsed === expected) matched = true;\n }\n\n return hasEntityTag && matched;\n}\n\nfunction trimOptionalWhitespace(value: string): string {\n return value.replace(/^[\\t ]+|[\\t ]+$/g, \"\");\n}\n\nfunction parseEntityTag(value: string): string | null {\n const opaqueTag = value.startsWith(\"W/\") ? value.slice(2) : value;\n if (opaqueTag.length < 2 || opaqueTag[0] !== '\"' || opaqueTag.at(-1) !== '\"') return null;\n\n for (let index = 1; index < opaqueTag.length - 1; index++) {\n const code = opaqueTag.charCodeAt(index);\n if (code === 0x21 || (code >= 0x23 && code <= 0x7e) || code >= 0x80) continue;\n return null;\n }\n\n return opaqueTag;\n}\n\nfunction splitEntityTags(value: string): string[] {\n const tags: string[] = [];\n let start = 0;\n let quoted = false;\n\n for (let index = 0; index < value.length; index++) {\n const character = value[index];\n if (character === '\"') {\n quoted = !quoted;\n } else if (character === \",\" && !quoted) {\n tags.push(value.slice(start, index));\n start = index + 1;\n }\n }\n\n tags.push(value.slice(start));\n return tags;\n}\n\nexport class FarmRequestBodyError extends Error {\n readonly code: FarmRequestBodyErrorCode;\n readonly status: number;\n\n constructor(code: FarmRequestBodyErrorCode, status: number, message: string) {\n super(message);\n this.name = \"FarmRequestBodyError\";\n this.code = code;\n this.status = status;\n }\n}\n\nexport function resolveFarmServerConfig(\n config: FarmServerConfig | ResolvedFarmServerConfig | undefined,\n): ResolvedFarmServerConfig {\n const headersTimeout = parseFarmServerDuration(\n config?.headersTimeout ?? DEFAULT_FARM_SERVER_HEADERS_TIMEOUT,\n \"server.headersTimeout\",\n );\n const requestTimeout = parseFarmServerDuration(\n config?.requestTimeout ?? DEFAULT_FARM_SERVER_REQUEST_TIMEOUT,\n \"server.requestTimeout\",\n );\n if (headersTimeout > requestTimeout) {\n throw new TypeError(\"server.headersTimeout must not exceed server.requestTimeout\");\n }\n\n return Object.freeze({\n bodySizeLimit: parseBodySizeLimit(\n config?.bodySizeLimit ?? DEFAULT_FARM_SERVER_BODY_SIZE_LIMIT,\n \"server.bodySizeLimit\",\n ),\n trustProxy: config?.trustProxy === true,\n headersTimeout,\n requestTimeout,\n keepAliveTimeout: parseFarmServerDuration(\n config?.keepAliveTimeout ?? DEFAULT_FARM_SERVER_KEEP_ALIVE_TIMEOUT,\n \"server.keepAliveTimeout\",\n ),\n gracefulShutdownTimeout: parseFarmServerDuration(\n config?.gracefulShutdownTimeout ?? DEFAULT_FARM_SERVER_GRACEFUL_SHUTDOWN_TIMEOUT,\n \"server.gracefulShutdownTimeout\",\n ),\n health: resolveFarmServerHealthConfig(config?.health),\n });\n}\n\nexport function parseFarmServerDuration(\n value: FarmServerDuration,\n optionName = \"duration\",\n): number {\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`${optionName} must be a positive safe integer`);\n }\n if (value > MAX_FARM_SERVER_TIMEOUT) {\n throw new TypeError(`${optionName} must not exceed ${MAX_FARM_SERVER_TIMEOUT} milliseconds`);\n }\n return value;\n }\n\n const match = value\n .trim()\n .toLowerCase()\n .match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h)$/);\n if (!match) {\n throw new TypeError(`${optionName} must be milliseconds or a duration such as \"30s\" or \"2m\"`);\n }\n\n const amount = Number(match[1]);\n const unit = match[2];\n const multiplier = unit === \"ms\" ? 1 : unit === \"s\" ? 1_000 : unit === \"m\" ? 60_000 : 3_600_000;\n const milliseconds = Math.floor(amount * multiplier);\n if (!Number.isSafeInteger(milliseconds) || milliseconds <= 0) {\n throw new TypeError(`${optionName} must resolve to a positive safe integer`);\n }\n if (milliseconds > MAX_FARM_SERVER_TIMEOUT) {\n throw new TypeError(`${optionName} must not exceed ${MAX_FARM_SERVER_TIMEOUT} milliseconds`);\n }\n return milliseconds;\n}\n\nfunction resolveFarmServerHealthConfig(\n config: false | FarmServerHealthConfig | ResolvedFarmServerHealthConfig | undefined,\n): ResolvedFarmServerHealthConfig {\n if (config === false || (config && \"enabled\" in config && config.enabled === false)) {\n return Object.freeze({\n enabled: false,\n livenessPath: \"/_farm/health/live\",\n readinessPath: \"/_farm/health/ready\",\n });\n }\n\n const livenessPath = normalizeHealthPath(\n config?.livenessPath ?? \"/_farm/health/live\",\n \"server.health.livenessPath\",\n );\n const readinessPath = normalizeHealthPath(\n config?.readinessPath ?? \"/_farm/health/ready\",\n \"server.health.readinessPath\",\n );\n if (livenessPath === readinessPath) {\n throw new TypeError(\"server.health livenessPath and readinessPath must be different\");\n }\n\n return Object.freeze({ enabled: true, livenessPath, readinessPath });\n}\n\nfunction normalizeHealthPath(value: string, optionName: string): string {\n const path = value.trim();\n if (!path.startsWith(\"/\") || path.includes(\"?\") || path.includes(\"#\") || path.includes(\"*\")) {\n throw new TypeError(`${optionName} must be an absolute pathname without a query or wildcard`);\n }\n const normalized = path.length > 1 ? path.replace(/\\/+$/, \"\") || \"/\" : path;\n assertBrowserStableRoutePath(normalized);\n return normalized;\n}\n\nexport function parseBodySizeLimit(value: number | string, optionName = \"bodySizeLimit\"): number {\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`${optionName} must be a positive safe integer`);\n }\n return value;\n }\n\n const match = value\n .trim()\n .toLowerCase()\n .match(/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb|kib|mib|gib)?$/);\n if (!match) {\n throw new TypeError(`${optionName} must be bytes or a size string such as \"500kb\" or \"10mb\"`);\n }\n\n const amount = Number(match[1]);\n const unit = match[2] ?? \"b\";\n const multiplier: Record<string, number> = {\n b: 1,\n kb: 1_000,\n mb: 1_000_000,\n gb: 1_000_000_000,\n kib: 1_024,\n mib: 1_048_576,\n gib: 1_073_741_824,\n };\n const bytes = Math.floor(amount * multiplier[unit]);\n\n if (!Number.isSafeInteger(bytes) || bytes <= 0) {\n throw new TypeError(`${optionName} must resolve to a positive safe integer`);\n }\n\n return bytes;\n}\n\nexport async function bufferFarmRequestBody(request: Request, limit: number): Promise<Request> {\n if (request.method === \"GET\" || request.method === \"HEAD\" || request.body === null) {\n return request;\n }\n\n const bytes = await readFarmRequestBody(request, limit);\n const body = new Uint8Array(bytes.byteLength);\n body.set(bytes);\n return new Request(request, {\n // oxlint-disable-next-line unicorn/no-invalid-fetch-options -- GET and HEAD return above.\n body: body.buffer,\n });\n}\n\nexport async function readFarmRequestBody(request: Request, limit: number): Promise<Uint8Array> {\n try {\n validateContentLength(request.headers.get(\"content-length\"), limit);\n } catch (error) {\n // A cloned Request is a tee branch: its cancellation may wait for the\n // untouched branch. Rejection must not wait for producer-owned cleanup.\n void request.body?.cancel(error).catch(() => {});\n throw error;\n }\n throwIfAborted(request.signal);\n if (!request.body) return new Uint8Array();\n\n const reader = request.body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n const cancelBodyRead = () => {\n void reader.cancel(request.signal.reason).catch(() => {});\n };\n request.signal.addEventListener(\"abort\", cancelBodyRead, { once: true });\n\n try {\n while (true) {\n throwIfAborted(request.signal);\n const { done, value } = await reader.read();\n // Cancellation resolves a pending read as EOF, not necessarily an error.\n throwIfAborted(request.signal);\n if (done) break;\n if (!value) continue;\n\n total += value.byteLength;\n if (total > limit) {\n const error = new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\");\n void reader.cancel(error).catch(() => {});\n throw error;\n }\n chunks.push(value);\n }\n } catch (error) {\n if (request.signal.aborted) throwIfAborted(request.signal);\n throw error;\n } finally {\n request.signal.removeEventListener(\"abort\", cancelBodyRead);\n reader.releaseLock();\n }\n\n const body = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n body.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return body;\n}\n\nexport async function readNodeRequestBody(\n request: {\n headers: Record<string, string | string[] | undefined>;\n on(event: \"data\", listener: (chunk: unknown) => void): unknown;\n on(event: \"end\", listener: () => void): unknown;\n on(event: \"error\", listener: (error: Error) => void): unknown;\n removeListener?(event: string, listener: (...args: any[]) => void): unknown;\n resume?(): unknown;\n },\n limit: number,\n): Promise<Buffer> {\n const rawContentLength = request.headers[\"content-length\"];\n const contentLength = Array.isArray(rawContentLength) ? rawContentLength[0] : rawContentLength;\n try {\n validateContentLength(contentLength, limit);\n } catch (error) {\n request.resume?.();\n throw error;\n }\n\n return await new Promise<Buffer>((resolve, reject) => {\n const chunks: Buffer[] = [];\n let total = 0;\n let settled = false;\n\n const cleanup = () => {\n request.removeListener?.(\"data\", onData);\n request.removeListener?.(\"end\", onEnd);\n request.removeListener?.(\"error\", onError);\n };\n const rejectOnce = (error: Error) => {\n if (settled) return;\n settled = true;\n cleanup();\n request.resume?.();\n reject(error);\n };\n const onData = (chunk: unknown) => {\n const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as any);\n total += bytes.byteLength;\n if (total > limit) {\n rejectOnce(new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\"));\n return;\n }\n chunks.push(bytes);\n };\n const onEnd = () => {\n if (settled) return;\n settled = true;\n cleanup();\n resolve(Buffer.concat(chunks, total));\n };\n const onError = (error: Error) => rejectOnce(error);\n\n request.on(\"data\", onData);\n request.on(\"end\", onEnd);\n request.on(\"error\", onError);\n });\n}\n\nexport function createFarmRequestBodyErrorResponse(error: unknown): Response | null {\n if (!(error instanceof FarmRequestBodyError)) return null;\n\n return new Response(error.status === 413 ? \"Payload Too Large\" : \"Bad Request\", {\n status: error.status,\n headers: {\n \"cache-control\": \"no-store\",\n \"content-type\": \"text/plain; charset=utf-8\",\n \"x-content-type-options\": \"nosniff\",\n },\n });\n}\n\nfunction validateContentLength(value: string | null | undefined, limit: number): void {\n const contentLength = value?.trim();\n if (!contentLength) return;\n if (!/^\\d+$/.test(contentLength)) {\n throw new FarmRequestBodyError(\"INVALID_CONTENT_LENGTH\", 400, \"Invalid content-length header\");\n }\n if (Number(contentLength) > limit) {\n throw new FarmRequestBodyError(\"BODY_TOO_LARGE\", 413, \"Request body is too large\");\n }\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n if (!signal.aborted) return;\n if (signal.reason !== undefined) throw signal.reason;\n throw new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n"],"mappings":"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","names":["memoryDriver","module","resolveDriver","operation","api","route","route","api","operation","response","resolveStorageRuntimeClient","createIntegrationOrm"]}
|