@farm.js/core 0.1.0-beta.6 → 0.1.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/after.cjs +227 -0
- package/dist/after.cjs.map +1 -0
- package/dist/after.d.mts +25 -0
- package/dist/after.d.ts +25 -0
- package/dist/after.mjs +14 -0
- package/dist/after.mjs.map +1 -0
- package/dist/agent-runtime.cjs +2379 -0
- package/dist/agent-runtime.cjs.map +1 -0
- package/dist/agent-runtime.d.mts +94 -0
- package/dist/agent-runtime.d.ts +94 -0
- package/dist/agent-runtime.mjs +479 -0
- package/dist/agent-runtime.mjs.map +1 -0
- package/dist/api/route-manager.d.mts +66 -0
- package/dist/api/route-manager.d.ts +66 -0
- package/dist/api/runtime.d.mts +3 -0
- package/dist/api/runtime.d.ts +3 -0
- package/dist/api.cjs +4100 -0
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.mts +48 -0
- package/dist/api.d.ts +48 -0
- package/dist/api.mjs +93 -0
- package/dist/api.mjs.map +1 -0
- package/dist/app-BWtqQu3R.d.mts +302 -0
- package/dist/app-markdown.cjs +244 -0
- package/dist/app-markdown.cjs.map +1 -0
- package/dist/app-markdown.d.mts +22 -0
- package/dist/app-markdown.d.ts +22 -0
- package/dist/app-markdown.mjs +27 -0
- package/dist/app-markdown.mjs.map +1 -0
- package/dist/app-xltejvLY.d.ts +302 -0
- package/dist/cache.cjs +945 -0
- package/dist/cache.cjs.map +1 -0
- package/dist/cache.d.mts +192 -0
- package/dist/cache.d.ts +192 -0
- package/dist/cache.mjs +46 -0
- package/dist/cache.mjs.map +1 -0
- package/dist/chunk-2ED5Q2GH.mjs +422 -0
- package/dist/chunk-2ED5Q2GH.mjs.map +1 -0
- package/dist/chunk-32W4QEJP.mjs +158 -0
- package/dist/chunk-32W4QEJP.mjs.map +1 -0
- package/dist/chunk-3XNTL3FQ.mjs +452 -0
- package/dist/chunk-3XNTL3FQ.mjs.map +1 -0
- package/dist/chunk-44ZCFSKE.mjs +84 -0
- package/dist/chunk-44ZCFSKE.mjs.map +1 -0
- package/dist/chunk-4MGVSBRP.mjs +7787 -0
- package/dist/chunk-4MGVSBRP.mjs.map +1 -0
- package/dist/chunk-4S3ORGFA.mjs +44 -0
- package/dist/chunk-4S3ORGFA.mjs.map +1 -0
- package/dist/chunk-5BY76U2M.mjs +1 -0
- package/dist/chunk-5BY76U2M.mjs.map +1 -0
- package/dist/chunk-5ZGPRGWV.mjs +136 -0
- package/dist/chunk-5ZGPRGWV.mjs.map +1 -0
- package/dist/chunk-65A7QIKI.mjs +142 -0
- package/dist/chunk-65A7QIKI.mjs.map +1 -0
- package/dist/chunk-74YTBPTY.mjs +450 -0
- package/dist/chunk-74YTBPTY.mjs.map +1 -0
- package/dist/chunk-7FBJLMQH.mjs +338 -0
- package/dist/chunk-7FBJLMQH.mjs.map +1 -0
- package/dist/chunk-7HO6AEOP.mjs +74 -0
- package/dist/chunk-7HO6AEOP.mjs.map +1 -0
- package/dist/chunk-7MABZJIM.mjs +29 -0
- package/dist/chunk-7MABZJIM.mjs.map +1 -0
- package/dist/chunk-7N62DNSO.mjs +41 -0
- package/dist/chunk-7N62DNSO.mjs.map +1 -0
- package/dist/chunk-7ZY5AIJO.mjs +161 -0
- package/dist/chunk-7ZY5AIJO.mjs.map +1 -0
- package/dist/chunk-ALCLXXTY.mjs +187 -0
- package/dist/chunk-ALCLXXTY.mjs.map +1 -0
- package/dist/chunk-AZ7YUVNR.mjs +65 -0
- package/dist/chunk-AZ7YUVNR.mjs.map +1 -0
- package/dist/chunk-B232I2GP.mjs +163 -0
- package/dist/chunk-B232I2GP.mjs.map +1 -0
- package/dist/chunk-B4W3BNTL.mjs +483 -0
- package/dist/chunk-B4W3BNTL.mjs.map +1 -0
- package/dist/chunk-C2ROET2V.mjs +718 -0
- package/dist/chunk-C2ROET2V.mjs.map +1 -0
- package/dist/chunk-CGILA3WO.mjs +14 -0
- package/dist/chunk-CGILA3WO.mjs.map +1 -0
- package/dist/chunk-CGIXMLSY.mjs +184 -0
- package/dist/chunk-CGIXMLSY.mjs.map +1 -0
- package/dist/chunk-DJSGLHCN.mjs +597 -0
- package/dist/chunk-DJSGLHCN.mjs.map +1 -0
- package/dist/chunk-E2MPIBRE.mjs +149 -0
- package/dist/chunk-E2MPIBRE.mjs.map +1 -0
- package/dist/chunk-E6EPN5BT.mjs +203 -0
- package/dist/chunk-E6EPN5BT.mjs.map +1 -0
- package/dist/chunk-EI43C4RA.mjs +6277 -0
- package/dist/chunk-EI43C4RA.mjs.map +1 -0
- package/dist/chunk-EJ7T4TPB.mjs +622 -0
- package/dist/chunk-EJ7T4TPB.mjs.map +1 -0
- package/dist/chunk-FQYDHKKU.mjs +128 -0
- package/dist/chunk-FQYDHKKU.mjs.map +1 -0
- package/dist/chunk-FRPWCMMG.mjs +299 -0
- package/dist/chunk-FRPWCMMG.mjs.map +1 -0
- package/dist/chunk-GN72QAIH.mjs +146 -0
- package/dist/chunk-GN72QAIH.mjs.map +1 -0
- package/dist/chunk-GQVGIUSN.mjs +149 -0
- package/dist/chunk-GQVGIUSN.mjs.map +1 -0
- package/dist/chunk-GS6K5OCM.mjs +407 -0
- package/dist/chunk-GS6K5OCM.mjs.map +1 -0
- package/dist/chunk-GXASWWJU.mjs +364 -0
- package/dist/chunk-GXASWWJU.mjs.map +1 -0
- package/dist/chunk-GY2STC2S.mjs +180 -0
- package/dist/chunk-GY2STC2S.mjs.map +1 -0
- package/dist/chunk-H2FA2SBS.mjs +51 -0
- package/dist/chunk-H2FA2SBS.mjs.map +1 -0
- package/dist/chunk-I4CUBGVF.mjs +93 -0
- package/dist/chunk-I4CUBGVF.mjs.map +1 -0
- package/dist/chunk-ITN462YM.mjs +98 -0
- package/dist/chunk-ITN462YM.mjs.map +1 -0
- package/dist/chunk-J23HNLFY.mjs +72 -0
- package/dist/chunk-J23HNLFY.mjs.map +1 -0
- package/dist/chunk-J4FNJ5IU.mjs +179 -0
- package/dist/chunk-J4FNJ5IU.mjs.map +1 -0
- package/dist/chunk-J5YWQVI5.mjs +211 -0
- package/dist/chunk-J5YWQVI5.mjs.map +1 -0
- package/dist/chunk-JDEOUK5V.mjs +427 -0
- package/dist/chunk-JDEOUK5V.mjs.map +1 -0
- package/dist/chunk-JK25YEN6.mjs +219 -0
- package/dist/chunk-JK25YEN6.mjs.map +1 -0
- package/dist/chunk-K4667E2Q.mjs +1916 -0
- package/dist/chunk-K4667E2Q.mjs.map +1 -0
- package/dist/chunk-LGHEOHBU.mjs +218 -0
- package/dist/chunk-LGHEOHBU.mjs.map +1 -0
- package/dist/chunk-LM2YNO4U.mjs +24 -0
- package/dist/chunk-LM2YNO4U.mjs.map +1 -0
- package/dist/chunk-ME4MO2RJ.mjs +3540 -0
- package/dist/chunk-ME4MO2RJ.mjs.map +1 -0
- package/dist/chunk-MIUW47JX.mjs +639 -0
- package/dist/chunk-MIUW47JX.mjs.map +1 -0
- package/dist/chunk-NNLCAVB6.mjs +391 -0
- package/dist/chunk-NNLCAVB6.mjs.map +1 -0
- package/dist/chunk-P7QDS5AT.mjs +191 -0
- package/dist/chunk-P7QDS5AT.mjs.map +1 -0
- package/dist/chunk-PFE6GMNE.mjs +603 -0
- package/dist/chunk-PFE6GMNE.mjs.map +1 -0
- package/dist/chunk-QGOHVJ6J.mjs +63 -0
- package/dist/chunk-QGOHVJ6J.mjs.map +1 -0
- package/dist/chunk-QKVUNGAH.mjs +39 -0
- package/dist/chunk-QKVUNGAH.mjs.map +1 -0
- package/dist/chunk-QM746KUO.mjs +56 -0
- package/dist/chunk-QM746KUO.mjs.map +1 -0
- package/dist/chunk-QTZZ2ISQ.mjs +753 -0
- package/dist/chunk-QTZZ2ISQ.mjs.map +1 -0
- package/dist/chunk-RBRLLZL5.mjs +81 -0
- package/dist/chunk-RBRLLZL5.mjs.map +1 -0
- package/dist/chunk-RHIFZZUI.mjs +69 -0
- package/dist/chunk-RHIFZZUI.mjs.map +1 -0
- package/dist/chunk-RQ633A5I.mjs +187 -0
- package/dist/chunk-RQ633A5I.mjs.map +1 -0
- package/dist/chunk-SCFX4UTD.mjs +28 -0
- package/dist/chunk-SCFX4UTD.mjs.map +1 -0
- package/dist/chunk-SL6HTIOK.mjs +66 -0
- package/dist/chunk-SL6HTIOK.mjs.map +1 -0
- package/dist/chunk-SPBBQLXI.mjs +207 -0
- package/dist/chunk-SPBBQLXI.mjs.map +1 -0
- package/dist/chunk-SSA7THPX.mjs +10 -0
- package/dist/chunk-SSA7THPX.mjs.map +1 -0
- package/dist/chunk-T4QJQK76.mjs +459 -0
- package/dist/chunk-T4QJQK76.mjs.map +1 -0
- package/dist/chunk-TQAEEJB4.mjs +157 -0
- package/dist/chunk-TQAEEJB4.mjs.map +1 -0
- package/dist/chunk-UB5UOSHB.mjs +458 -0
- package/dist/chunk-UB5UOSHB.mjs.map +1 -0
- package/dist/chunk-USWZZUEH.mjs +25 -0
- package/dist/chunk-USWZZUEH.mjs.map +1 -0
- package/dist/chunk-UVCIEUJC.mjs +16 -0
- package/dist/chunk-UVCIEUJC.mjs.map +1 -0
- package/dist/chunk-UXUAWNO5.mjs +396 -0
- package/dist/chunk-UXUAWNO5.mjs.map +1 -0
- package/dist/chunk-V3XURYJO.mjs +756 -0
- package/dist/chunk-V3XURYJO.mjs.map +1 -0
- package/dist/chunk-V6WE6JSZ.mjs +352 -0
- package/dist/chunk-V6WE6JSZ.mjs.map +1 -0
- package/dist/chunk-V7RBCSDJ.mjs +170 -0
- package/dist/chunk-V7RBCSDJ.mjs.map +1 -0
- package/dist/chunk-VCANOYFI.mjs +588 -0
- package/dist/chunk-VCANOYFI.mjs.map +1 -0
- package/dist/chunk-VY2UYN5R.mjs +224 -0
- package/dist/chunk-VY2UYN5R.mjs.map +1 -0
- package/dist/chunk-W2CRQFF6.mjs +1352 -0
- package/dist/chunk-W2CRQFF6.mjs.map +1 -0
- package/dist/chunk-WDU6QXNK.mjs +872 -0
- package/dist/chunk-WDU6QXNK.mjs.map +1 -0
- package/dist/chunk-WZ5QFROO.mjs +23 -0
- package/dist/chunk-WZ5QFROO.mjs.map +1 -0
- package/dist/chunk-XIVV5IWN.mjs +541 -0
- package/dist/chunk-XIVV5IWN.mjs.map +1 -0
- package/dist/chunk-YW7OBE6Q.mjs +119 -0
- package/dist/chunk-YW7OBE6Q.mjs.map +1 -0
- package/dist/chunk-Z5CQMP54.mjs +365 -0
- package/dist/chunk-Z5CQMP54.mjs.map +1 -0
- package/dist/chunk-ZBE6MLHL.mjs +230 -0
- package/dist/chunk-ZBE6MLHL.mjs.map +1 -0
- package/dist/chunk-ZVWA4ZQ3.mjs +189 -0
- package/dist/chunk-ZVWA4ZQ3.mjs.map +1 -0
- package/dist/chunk-ZZ57EH5Z.mjs +173 -0
- package/dist/chunk-ZZ57EH5Z.mjs.map +1 -0
- package/dist/client-BT1mFQas.d.mts +447 -0
- package/dist/client-Nn0q4eO4.d.ts +447 -0
- package/dist/client-cache-CIlyBlmx.d.ts +6 -0
- package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
- package/dist/client-plugins-BI2R6Eae.d.mts +1926 -0
- package/dist/client-plugins-DU9oMspX.d.ts +1926 -0
- package/dist/client-plugins.cjs +415 -0
- package/dist/client-plugins.cjs.map +1 -0
- package/dist/client-plugins.d.mts +22 -0
- package/dist/client-plugins.d.ts +22 -0
- package/dist/client-plugins.mjs +10 -0
- package/dist/client-plugins.mjs.map +1 -0
- package/dist/client.cjs +5402 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.mts +447 -0
- package/dist/client.d.ts +447 -0
- package/dist/client.mjs +110 -0
- package/dist/client.mjs.map +1 -0
- package/dist/config.cjs +38 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.mts +29 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.mjs +10 -0
- package/dist/config.mjs.map +1 -0
- package/dist/cron.cjs +406 -0
- package/dist/cron.cjs.map +1 -0
- package/dist/cron.d.mts +78 -0
- package/dist/cron.d.ts +78 -0
- package/dist/cron.mjs +30 -0
- package/dist/cron.mjs.map +1 -0
- package/dist/deferred.cjs +438 -0
- package/dist/deferred.cjs.map +1 -0
- package/dist/deferred.d.mts +42 -0
- package/dist/deferred.d.ts +42 -0
- package/dist/deferred.mjs +28 -0
- package/dist/deferred.mjs.map +1 -0
- package/dist/deployment.cjs +199 -0
- package/dist/deployment.cjs.map +1 -0
- package/dist/deployment.d.mts +34 -0
- package/dist/deployment.d.ts +34 -0
- package/dist/deployment.mjs +38 -0
- package/dist/deployment.mjs.map +1 -0
- package/dist/devtools-REQTS3I7.mjs +371 -0
- package/dist/devtools-REQTS3I7.mjs.map +1 -0
- package/dist/devtools-client-3XRTBND5.mjs +216 -0
- package/dist/devtools-client-3XRTBND5.mjs.map +1 -0
- package/dist/devtools-ui-NJKFORTG.mjs +1349 -0
- package/dist/devtools-ui-NJKFORTG.mjs.map +1 -0
- package/dist/docs.cjs +5548 -0
- package/dist/docs.cjs.map +1 -0
- package/dist/docs.d.mts +69 -0
- package/dist/docs.d.ts +69 -0
- package/dist/docs.mjs +47 -0
- package/dist/docs.mjs.map +1 -0
- package/dist/env-types.cjs +232 -0
- package/dist/env-types.cjs.map +1 -0
- package/dist/env-types.d.mts +12 -0
- package/dist/env-types.d.ts +12 -0
- package/dist/env-types.mjs +11 -0
- package/dist/env-types.mjs.map +1 -0
- package/dist/env.cjs +215 -0
- package/dist/env.cjs.map +1 -0
- package/dist/env.d.mts +45 -0
- package/dist/env.d.ts +45 -0
- package/dist/env.mjs +22 -0
- package/dist/env.mjs.map +1 -0
- package/dist/environment/vite.d.mts +22 -0
- package/dist/environment/vite.d.ts +22 -0
- package/dist/environment.cjs +96 -0
- package/dist/environment.cjs.map +1 -0
- package/dist/environment.d.mts +18 -0
- package/dist/environment.d.ts +18 -0
- package/dist/environment.mjs +14 -0
- package/dist/environment.mjs.map +1 -0
- package/dist/headers.cjs +126 -0
- package/dist/headers.cjs.map +1 -0
- package/dist/headers.d.mts +22 -0
- package/dist/headers.d.ts +22 -0
- package/dist/headers.mjs +12 -0
- package/dist/headers.mjs.map +1 -0
- package/dist/i18n/client.d.mts +32 -0
- package/dist/i18n/client.d.ts +32 -0
- package/dist/i18n/index.d.mts +20 -0
- package/dist/i18n/index.d.ts +20 -0
- package/dist/i18n/server.d.mts +30 -0
- package/dist/i18n/server.d.ts +30 -0
- package/dist/image/server.d.mts +37 -0
- package/dist/image/server.d.ts +37 -0
- package/dist/image/sharp.d.mts +7 -0
- package/dist/image/sharp.d.ts +7 -0
- package/dist/image-config-Duob7wER.d.mts +50 -0
- package/dist/image-config-Duob7wER.d.ts +50 -0
- package/dist/image.cjs +209 -0
- package/dist/image.cjs.map +1 -0
- package/dist/image.d.mts +39 -0
- package/dist/image.d.ts +39 -0
- package/dist/image.mjs +165 -0
- package/dist/image.mjs.map +1 -0
- package/dist/index.cjs +42186 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +454 -0
- package/dist/index.d.ts +454 -0
- package/dist/index.mjs +980 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integration-api-CHT2OKAf.d.mts +93 -0
- package/dist/integration-api-CHT2OKAf.d.ts +93 -0
- package/dist/integration-orm-GQLGU66X.mjs +13 -0
- package/dist/integration-orm-GQLGU66X.mjs.map +1 -0
- package/dist/integrations.cjs +2820 -0
- package/dist/integrations.cjs.map +1 -0
- package/dist/integrations.d.mts +22 -0
- package/dist/integrations.d.ts +22 -0
- package/dist/integrations.mjs +51 -0
- package/dist/integrations.mjs.map +1 -0
- package/dist/internal/build-runtime.cjs +643 -322
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.d.mts +39 -0
- package/dist/internal/build-runtime.d.ts +39 -0
- package/dist/internal/build-runtime.mjs +11 -10
- package/dist/internal/client-runtime.d.mts +2 -0
- package/dist/internal/client-runtime.d.ts +2 -0
- package/dist/internal/config-runtime.cjs +135 -39
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.d.mts +39 -0
- package/dist/internal/config-runtime.d.ts +39 -0
- package/dist/internal/config-runtime.mjs +5 -4
- package/dist/internal/production-node-env.d.mts +12 -0
- package/dist/internal/production-node-env.d.ts +12 -0
- package/dist/internal/production-runtime.d.mts +39 -0
- package/dist/internal/production-runtime.d.ts +39 -0
- package/dist/layers-VWVDTPUZ.mjs +16 -0
- package/dist/layers-VWVDTPUZ.mjs.map +1 -0
- package/dist/manager-THKFTOFE.mjs +10 -0
- package/dist/manager-THKFTOFE.mjs.map +1 -0
- package/dist/markdown.cjs +364 -0
- package/dist/markdown.cjs.map +1 -0
- package/dist/markdown.d.mts +60 -0
- package/dist/markdown.d.ts +60 -0
- package/dist/markdown.mjs +18 -0
- package/dist/markdown.mjs.map +1 -0
- package/dist/metadata-Cm9ujH4I.d.ts +22 -0
- package/dist/metadata-DacXbnLA.d.mts +22 -0
- package/dist/middleware.cjs +2148 -0
- package/dist/middleware.cjs.map +1 -0
- package/dist/middleware.d.mts +164 -0
- package/dist/middleware.d.ts +164 -0
- package/dist/middleware.mjs +49 -0
- package/dist/middleware.mjs.map +1 -0
- package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
- package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
- package/dist/navigation.cjs +1329 -0
- package/dist/navigation.cjs.map +1 -0
- package/dist/navigation.d.mts +14 -0
- package/dist/navigation.d.ts +14 -0
- package/dist/navigation.mjs +33 -0
- package/dist/navigation.mjs.map +1 -0
- package/dist/nitro-QO5LV6QK.mjs +689 -0
- package/dist/nitro-QO5LV6QK.mjs.map +1 -0
- package/dist/observability.cjs +186 -0
- package/dist/observability.cjs.map +1 -0
- package/dist/observability.d.mts +335 -0
- package/dist/observability.d.ts +335 -0
- package/dist/observability.mjs +16 -0
- package/dist/observability.mjs.map +1 -0
- package/dist/params-BALtrRim.d.ts +15 -0
- package/dist/params-ry-lxqmy.d.mts +15 -0
- package/dist/plugin-BJDf43dc.d.mts +165 -0
- package/dist/plugin-BJDf43dc.d.ts +165 -0
- package/dist/plugin.cjs +23470 -0
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.mts +22 -0
- package/dist/plugin.d.ts +22 -0
- package/dist/plugin.mjs +8 -7
- package/dist/production-runtime-4KKq1AVC.d.mts +79 -0
- package/dist/production-runtime-C_B79w2P.d.mts +28 -0
- package/dist/production-runtime-DDEM1D2q.d.ts +28 -0
- package/dist/production-runtime-DRsWDN2x.d.ts +79 -0
- package/dist/query/client.d.mts +61 -0
- package/dist/query/client.d.ts +61 -0
- package/dist/query/index.d.mts +90 -0
- package/dist/query/index.d.ts +90 -0
- package/dist/query/parsers.d.mts +25 -0
- package/dist/query/parsers.d.ts +25 -0
- package/dist/query/server.d.mts +55 -0
- package/dist/query/server.d.ts +55 -0
- package/dist/request-Dsq4kGW0.d.mts +6 -0
- package/dist/request-udtobOLv.d.ts +6 -0
- package/dist/request.d.mts +2 -0
- package/dist/request.d.ts +2 -0
- package/dist/resolver-DJqjLMg_.d.mts +14 -0
- package/dist/resolver-IH4RmPEl.d.ts +14 -0
- package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
- package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
- package/dist/router.d.mts +36 -0
- package/dist/router.d.ts +36 -0
- package/dist/routes.d.mts +224 -0
- package/dist/routes.d.ts +224 -0
- package/dist/runtime-9nQjVM7X.d.mts +206 -0
- package/dist/runtime-Cxpq6xZN.d.mts +27 -0
- package/dist/runtime-DgeS2skB.d.ts +206 -0
- package/dist/runtime-bv63eUiO.d.ts +27 -0
- package/dist/server-action-security.d.mts +43 -0
- package/dist/server-action-security.d.ts +43 -0
- package/dist/server-fn-client.d.mts +32 -0
- package/dist/server-fn-client.d.ts +32 -0
- package/dist/server-fn.d.mts +93 -0
- package/dist/server-fn.d.ts +93 -0
- package/dist/server-plugins.d.mts +55 -0
- package/dist/server-plugins.d.ts +55 -0
- package/dist/server-query-client.d.mts +50 -0
- package/dist/server-query-client.d.ts +50 -0
- package/dist/server-query.d.mts +36 -0
- package/dist/server-query.d.ts +36 -0
- package/dist/server.cjs +731 -447
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.mts +48 -0
- package/dist/server.d.ts +48 -0
- package/dist/server.mjs +9 -8
- package/dist/server.mjs.map +1 -1
- package/dist/storage.d.mts +52 -0
- package/dist/storage.d.ts +52 -0
- package/dist/testing.d.mts +101 -0
- package/dist/testing.d.ts +101 -0
- package/dist/transport-BmbGTXA5.d.mts +49 -0
- package/dist/transport-BmbGTXA5.d.ts +49 -0
- package/dist/types-BMxWr97v.d.mts +81 -0
- package/dist/types-BMxWr97v.d.ts +81 -0
- package/dist/types-C9N-nk5R.d.mts +53 -0
- package/dist/types-C9N-nk5R.d.ts +53 -0
- package/dist/types-D1A6-XvH.d.mts +73 -0
- package/dist/types-D1A6-XvH.d.ts +73 -0
- package/dist/utils-B-cUHwoK.d.ts +23 -0
- package/dist/utils-Cm41AefV.d.mts +23 -0
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.mts +3 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +682 -437
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.mts +22 -0
- package/dist/vite.d.ts +22 -0
- package/dist/vite.mjs +6 -5
- package/dist/workflows.d.mts +110 -0
- package/dist/workflows.d.ts +110 -0
- package/package.json +3 -2
- package/types/client.d.ts +1 -1
- package/types/image.d.ts +4 -0
- package/types/images.d.ts +59 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getDeployTargetForPreset
|
|
3
|
+
} from "./chunk-B4W3BNTL.mjs";
|
|
4
|
+
import "./chunk-UVCIEUJC.mjs";
|
|
5
|
+
import "./chunk-RQ633A5I.mjs";
|
|
6
|
+
import "./chunk-I4CUBGVF.mjs";
|
|
7
|
+
import "./chunk-74YTBPTY.mjs";
|
|
8
|
+
import "./chunk-7MABZJIM.mjs";
|
|
9
|
+
import "./chunk-YW7OBE6Q.mjs";
|
|
10
|
+
import "./chunk-GY2STC2S.mjs";
|
|
11
|
+
import "./chunk-UB5UOSHB.mjs";
|
|
12
|
+
import "./chunk-ZVWA4ZQ3.mjs";
|
|
13
|
+
import "./chunk-7FBJLMQH.mjs";
|
|
14
|
+
import "./chunk-XIVV5IWN.mjs";
|
|
15
|
+
import {
|
|
16
|
+
resolveCronConfig
|
|
17
|
+
} from "./chunk-GXASWWJU.mjs";
|
|
18
|
+
import "./chunk-K4667E2Q.mjs";
|
|
19
|
+
import "./chunk-QGOHVJ6J.mjs";
|
|
20
|
+
import "./chunk-FQYDHKKU.mjs";
|
|
21
|
+
import {
|
|
22
|
+
mergeFarmRouteRuntimeConfigs,
|
|
23
|
+
resolveFarmRouteRuleRuntimeConfig,
|
|
24
|
+
resolveFarmRouteRuntimeConfig
|
|
25
|
+
} from "./chunk-GQVGIUSN.mjs";
|
|
26
|
+
import "./chunk-B232I2GP.mjs";
|
|
27
|
+
import "./chunk-JK25YEN6.mjs";
|
|
28
|
+
import "./chunk-RBRLLZL5.mjs";
|
|
29
|
+
import {
|
|
30
|
+
__name
|
|
31
|
+
} from "./chunk-CGILA3WO.mjs";
|
|
32
|
+
|
|
33
|
+
// src/devtools.ts
|
|
34
|
+
import path from "path";
|
|
35
|
+
function normalizePath(value) {
|
|
36
|
+
return value.replace(/\\/g, "/");
|
|
37
|
+
}
|
|
38
|
+
__name(normalizePath, "normalizePath");
|
|
39
|
+
function toProjectPath(root, filePath) {
|
|
40
|
+
const normalizedRoot = normalizePath(root).replace(/\/$/, "");
|
|
41
|
+
const normalizedFile = normalizePath(filePath);
|
|
42
|
+
if (normalizedFile.startsWith(normalizedRoot + "/")) {
|
|
43
|
+
return normalizedFile.slice(normalizedRoot.length + 1);
|
|
44
|
+
}
|
|
45
|
+
return normalizedFile;
|
|
46
|
+
}
|
|
47
|
+
__name(toProjectPath, "toProjectPath");
|
|
48
|
+
function sortByPath(items) {
|
|
49
|
+
return [...items].sort(
|
|
50
|
+
(a, b) => (a.path || a.pattern || "").localeCompare(b.path || b.pattern || "")
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
__name(sortByPath, "sortByPath");
|
|
54
|
+
function toRuntime(value) {
|
|
55
|
+
return {
|
|
56
|
+
runtime: value.runtime,
|
|
57
|
+
...value.regions ? { regions: [...value.regions] } : {},
|
|
58
|
+
...value.maxDuration ? { maxDuration: value.maxDuration } : {}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
__name(toRuntime, "toRuntime");
|
|
62
|
+
async function collectRoutes(root, kind, routes, routeManager, diagnostics) {
|
|
63
|
+
return Promise.all(
|
|
64
|
+
Array.from(routes.values()).map(async (route) => {
|
|
65
|
+
let runtime;
|
|
66
|
+
if (kind === "page" && routeManager.resolveRouteRuntimeConfig) {
|
|
67
|
+
try {
|
|
68
|
+
runtime = toRuntime(await routeManager.resolveRouteRuntimeConfig(route.pattern));
|
|
69
|
+
} catch (error) {
|
|
70
|
+
diagnostics.push({
|
|
71
|
+
severity: "warning",
|
|
72
|
+
code: "ROUTE_RUNTIME_UNRESOLVED",
|
|
73
|
+
title: `Could not inspect ${route.pattern}`,
|
|
74
|
+
message: error instanceof Error ? error.message : String(error),
|
|
75
|
+
action: "Check the route and inherited layout runtime exports."
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
kind,
|
|
81
|
+
pattern: route.pattern,
|
|
82
|
+
filePath: toProjectPath(root, route.modulePath),
|
|
83
|
+
...runtime ? { runtime } : {}
|
|
84
|
+
};
|
|
85
|
+
})
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
__name(collectRoutes, "collectRoutes");
|
|
89
|
+
function collectIntegrations(integrations) {
|
|
90
|
+
if (!integrations || typeof integrations !== "object") return [];
|
|
91
|
+
return Object.entries(integrations).filter((entry) => Boolean(entry[1])).map(([key, value]) => {
|
|
92
|
+
const integration = value;
|
|
93
|
+
const routes = (integration.routes || []).map((route) => ({
|
|
94
|
+
path: route.path,
|
|
95
|
+
methods: [...route.methods || (route.method ? [route.method] : ["ALL"])].map((method) => method.toUpperCase()).sort()
|
|
96
|
+
}));
|
|
97
|
+
return {
|
|
98
|
+
key,
|
|
99
|
+
type: integration.type || key,
|
|
100
|
+
category: integration.category || "custom",
|
|
101
|
+
serverRuntime: integration.serverRuntime !== false,
|
|
102
|
+
routes: sortByPath(routes),
|
|
103
|
+
middlewareCount: integration.middleware?.length || 0,
|
|
104
|
+
providerCount: integration.providers?.length || 0,
|
|
105
|
+
schemaModelCount: Object.keys(integration.schema?.models || {}).length
|
|
106
|
+
};
|
|
107
|
+
}).sort((a, b) => a.key.localeCompare(b.key));
|
|
108
|
+
}
|
|
109
|
+
__name(collectIntegrations, "collectIntegrations");
|
|
110
|
+
function collectStorage(storage) {
|
|
111
|
+
if (!storage || typeof storage !== "object") {
|
|
112
|
+
return {
|
|
113
|
+
entries: [{ mount: "root", driver: "memory", default: true }],
|
|
114
|
+
configured: false
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const value = storage;
|
|
118
|
+
if (value.kind === "farm-storage-client") {
|
|
119
|
+
return {
|
|
120
|
+
entries: [{ mount: "root", driver: "storage client", default: false }],
|
|
121
|
+
configured: true
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const configured = Object.keys(value).length > 0;
|
|
125
|
+
const rootDriver = value.client ? describeStorageDriver(value.client) : describeStorageDriver(value.driver);
|
|
126
|
+
const entries = [
|
|
127
|
+
{
|
|
128
|
+
mount: "root",
|
|
129
|
+
driver: rootDriver,
|
|
130
|
+
default: !configured
|
|
131
|
+
}
|
|
132
|
+
];
|
|
133
|
+
if (value.mounts && typeof value.mounts === "object") {
|
|
134
|
+
for (const [mount, mountConfig] of Object.entries(value.mounts)) {
|
|
135
|
+
entries.push({
|
|
136
|
+
mount,
|
|
137
|
+
driver: describeStorageDriver(mountConfig),
|
|
138
|
+
default: false
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
entries: entries.sort((a, b) => {
|
|
144
|
+
if (a.mount === "root") return -1;
|
|
145
|
+
if (b.mount === "root") return 1;
|
|
146
|
+
return a.mount.localeCompare(b.mount);
|
|
147
|
+
}),
|
|
148
|
+
configured
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
__name(collectStorage, "collectStorage");
|
|
152
|
+
function describeStorageDriver(value) {
|
|
153
|
+
if (!value) return "memory";
|
|
154
|
+
if (typeof value === "string") return value;
|
|
155
|
+
if (typeof value === "function") return "custom";
|
|
156
|
+
if (typeof value !== "object") return "custom";
|
|
157
|
+
const record = value;
|
|
158
|
+
if (record.kind === "farm-storage-client") return "storage client";
|
|
159
|
+
if (typeof record.driver === "string") return record.driver;
|
|
160
|
+
if (typeof record.driver === "function") return "custom";
|
|
161
|
+
return "custom";
|
|
162
|
+
}
|
|
163
|
+
__name(describeStorageDriver, "describeStorageDriver");
|
|
164
|
+
function featureEnabled(value) {
|
|
165
|
+
if (!value) return false;
|
|
166
|
+
if (typeof value === "object" && "enabled" in value) {
|
|
167
|
+
return value.enabled !== false;
|
|
168
|
+
}
|
|
169
|
+
return value !== false;
|
|
170
|
+
}
|
|
171
|
+
__name(featureEnabled, "featureEnabled");
|
|
172
|
+
function collectEnvironmentKeys(config) {
|
|
173
|
+
const env = config?.env;
|
|
174
|
+
return {
|
|
175
|
+
server: Object.keys(env?.server || {}).sort(),
|
|
176
|
+
public: Object.keys(env?.public || {}).sort()
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
__name(collectEnvironmentKeys, "collectEnvironmentKeys");
|
|
180
|
+
function resolveHealth(diagnostics) {
|
|
181
|
+
if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) return "error";
|
|
182
|
+
if (diagnostics.some((diagnostic) => diagnostic.severity === "warning")) return "attention";
|
|
183
|
+
return "ready";
|
|
184
|
+
}
|
|
185
|
+
__name(resolveHealth, "resolveHealth");
|
|
186
|
+
async function createFarmDevtoolsSnapshot(input) {
|
|
187
|
+
const config = input.config || {};
|
|
188
|
+
const diagnostics = [];
|
|
189
|
+
const pageRoutes = await collectRoutes(
|
|
190
|
+
input.root,
|
|
191
|
+
"page",
|
|
192
|
+
input.routeManager.getRoutes(),
|
|
193
|
+
input.routeManager,
|
|
194
|
+
diagnostics
|
|
195
|
+
);
|
|
196
|
+
const layoutRoutes = await collectRoutes(
|
|
197
|
+
input.root,
|
|
198
|
+
"layout",
|
|
199
|
+
input.routeManager.getLayouts(),
|
|
200
|
+
input.routeManager,
|
|
201
|
+
diagnostics
|
|
202
|
+
);
|
|
203
|
+
const loadingRoutes = await collectRoutes(
|
|
204
|
+
input.root,
|
|
205
|
+
"loading",
|
|
206
|
+
input.routeManager.getLoadings(),
|
|
207
|
+
input.routeManager,
|
|
208
|
+
diagnostics
|
|
209
|
+
);
|
|
210
|
+
const errorRoutes = await collectRoutes(
|
|
211
|
+
input.root,
|
|
212
|
+
"error",
|
|
213
|
+
input.routeManager.getErrors(),
|
|
214
|
+
input.routeManager,
|
|
215
|
+
diagnostics
|
|
216
|
+
);
|
|
217
|
+
const apiRoutes = sortByPath(
|
|
218
|
+
Array.from(input.apiRouteManager.getRoutes().values()).map((route) => {
|
|
219
|
+
const runtime = resolveFarmRouteRuntimeConfig(
|
|
220
|
+
mergeFarmRouteRuntimeConfigs(
|
|
221
|
+
resolveFarmRouteRuleRuntimeConfig(route.path, config.routeRules),
|
|
222
|
+
route
|
|
223
|
+
),
|
|
224
|
+
`API route "${route.path}"`
|
|
225
|
+
);
|
|
226
|
+
return {
|
|
227
|
+
path: route.path,
|
|
228
|
+
methods: [...route.methods].sort(),
|
|
229
|
+
filePath: toProjectPath(input.root, route.filePath),
|
|
230
|
+
runtime: toRuntime(runtime)
|
|
231
|
+
};
|
|
232
|
+
})
|
|
233
|
+
);
|
|
234
|
+
const middleware = sortByPath(
|
|
235
|
+
input.middlewareManager.getMiddlewares().map((entry) => ({
|
|
236
|
+
path: entry.path,
|
|
237
|
+
source: entry.source || "file",
|
|
238
|
+
filePath: toProjectPath(input.root, entry.filePath),
|
|
239
|
+
handlerCount: entry.handlers.length
|
|
240
|
+
}))
|
|
241
|
+
);
|
|
242
|
+
const integrations = collectIntegrations(config.integrations);
|
|
243
|
+
const storage = collectStorage(config.storage);
|
|
244
|
+
const cron = resolveCronConfig(config.cron);
|
|
245
|
+
const workflows = (input.workflows || []).map((workflow) => ({
|
|
246
|
+
id: workflow.id,
|
|
247
|
+
filePath: toProjectPath(input.root, workflow.filePath),
|
|
248
|
+
routePath: workflow.routePath,
|
|
249
|
+
schedule: [...workflow.schedule],
|
|
250
|
+
...workflow.timezone ? { timezone: workflow.timezone } : {}
|
|
251
|
+
})).sort((a, b) => a.id.localeCompare(b.id));
|
|
252
|
+
const layers = (config.layers || []).map((layer) => ({
|
|
253
|
+
name: layer.name,
|
|
254
|
+
source: layer.source,
|
|
255
|
+
srcDir: layer.srcDir
|
|
256
|
+
}));
|
|
257
|
+
const deploymentPreset = String(config.deploy?.preset || config.preset || "node-server");
|
|
258
|
+
const deploymentTarget = String(
|
|
259
|
+
config.deploy?.target || getDeployTargetForPreset(deploymentPreset) || "node"
|
|
260
|
+
);
|
|
261
|
+
const env = input.env || process.env;
|
|
262
|
+
if (pageRoutes.length === 0) {
|
|
263
|
+
diagnostics.push({
|
|
264
|
+
severity: "warning",
|
|
265
|
+
code: "NO_PAGE_ROUTES",
|
|
266
|
+
title: "No page routes found",
|
|
267
|
+
message: `Farm did not discover a page under ${input.srcDir}/app.`,
|
|
268
|
+
action: `Add ${input.srcDir}/app/page.tsx or a programmatic page route.`
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
if (layoutRoutes.length === 0) {
|
|
272
|
+
diagnostics.push({
|
|
273
|
+
severity: "warning",
|
|
274
|
+
code: "ROOT_LAYOUT_MISSING",
|
|
275
|
+
title: "Root layout is missing",
|
|
276
|
+
message: "The application has no shared root layout.",
|
|
277
|
+
action: `Add ${input.srcDir}/app/layout.tsx for shared metadata and application chrome.`
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
const apiPaths = new Set(apiRoutes.map((route) => route.path));
|
|
281
|
+
for (const job of cron.jobs) {
|
|
282
|
+
if (!apiPaths.has(job.path)) {
|
|
283
|
+
diagnostics.push({
|
|
284
|
+
severity: "warning",
|
|
285
|
+
code: "CRON_ROUTE_MISSING",
|
|
286
|
+
title: `Cron route ${job.path} was not found`,
|
|
287
|
+
message: `${job.name} is scheduled, but its GET API route is not registered.`,
|
|
288
|
+
action: "Add the target API route or update the cron path in farm.config.ts."
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (cron.jobs.length > 0 && !env[cron.secretEnv]) {
|
|
293
|
+
diagnostics.push({
|
|
294
|
+
severity: "info",
|
|
295
|
+
code: "CRON_SECRET_NOT_SET",
|
|
296
|
+
title: `${cron.secretEnv} is not set`,
|
|
297
|
+
message: "Local manual runs remain available, but production cron routes fail closed.",
|
|
298
|
+
action: `Set ${cron.secretEnv} in the deployment environment before production.`
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
if (storage.configured && storage.entries[0]?.driver === "memory" && ["vercel", "cloudflare", "netlify"].includes(deploymentTarget)) {
|
|
302
|
+
diagnostics.push({
|
|
303
|
+
severity: "warning",
|
|
304
|
+
code: "EPHEMERAL_PRODUCTION_STORAGE",
|
|
305
|
+
title: "Production storage is in memory",
|
|
306
|
+
message: `${deploymentTarget} instances do not preserve in-memory data across executions.`,
|
|
307
|
+
action: "Configure a durable storage driver or mount for production state."
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
const environment = collectEnvironmentKeys(config);
|
|
311
|
+
const docs = config.docs;
|
|
312
|
+
const docsEnabled = featureEnabled(docs);
|
|
313
|
+
const allRoutes = sortByPath([...pageRoutes, ...layoutRoutes, ...loadingRoutes, ...errorRoutes]);
|
|
314
|
+
return {
|
|
315
|
+
generatedAt: (input.now?.() || /* @__PURE__ */ new Date()).toISOString(),
|
|
316
|
+
health: resolveHealth(diagnostics),
|
|
317
|
+
project: {
|
|
318
|
+
name: path.basename(path.resolve(input.root)),
|
|
319
|
+
root: input.root,
|
|
320
|
+
srcDir: input.srcDir,
|
|
321
|
+
basePath: config.basePath || "/",
|
|
322
|
+
deploymentId: config.deploymentId || "development"
|
|
323
|
+
},
|
|
324
|
+
deployment: {
|
|
325
|
+
target: deploymentTarget,
|
|
326
|
+
preset: deploymentPreset,
|
|
327
|
+
...config.deploy?.outputDir ? { outputDir: config.deploy.outputDir } : {}
|
|
328
|
+
},
|
|
329
|
+
counts: {
|
|
330
|
+
pages: pageRoutes.length,
|
|
331
|
+
layouts: layoutRoutes.length,
|
|
332
|
+
loadingBoundaries: loadingRoutes.length,
|
|
333
|
+
errorBoundaries: errorRoutes.length,
|
|
334
|
+
apiRoutes: apiRoutes.length,
|
|
335
|
+
middleware: middleware.length,
|
|
336
|
+
integrations: integrations.length,
|
|
337
|
+
storageMounts: storage.entries.length,
|
|
338
|
+
cronJobs: cron.jobs.length,
|
|
339
|
+
workflows: workflows.length,
|
|
340
|
+
layers: layers.length,
|
|
341
|
+
diagnostics: diagnostics.length
|
|
342
|
+
},
|
|
343
|
+
routes: allRoutes,
|
|
344
|
+
apiRoutes,
|
|
345
|
+
middleware,
|
|
346
|
+
integrations,
|
|
347
|
+
storage: storage.entries,
|
|
348
|
+
cron: cron.jobs,
|
|
349
|
+
workflows,
|
|
350
|
+
layers,
|
|
351
|
+
environment,
|
|
352
|
+
docs: {
|
|
353
|
+
enabled: docsEnabled,
|
|
354
|
+
entry: docsEnabled && docs && typeof docs === "object" && "entry" in docs ? String(docs.entry) : void 0
|
|
355
|
+
},
|
|
356
|
+
features: {
|
|
357
|
+
openapi: Boolean(config.openapi?.enabled),
|
|
358
|
+
markdown: featureEnabled(config.md),
|
|
359
|
+
serverComponents: Boolean(config.experimental?.serverComponents),
|
|
360
|
+
serverActions: Boolean(config.experimental?.serverActions),
|
|
361
|
+
optimizedBoundary: Boolean(config.experimental?.optimizedBoundary),
|
|
362
|
+
observability: featureEnabled(config.observability)
|
|
363
|
+
},
|
|
364
|
+
diagnostics
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
__name(createFarmDevtoolsSnapshot, "createFarmDevtoolsSnapshot");
|
|
368
|
+
export {
|
|
369
|
+
createFarmDevtoolsSnapshot
|
|
370
|
+
};
|
|
371
|
+
//# sourceMappingURL=devtools-REQTS3I7.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools.ts"],"sourcesContent":["import path from \"node:path\";\nimport { getDeployTargetForPreset } from \"./config\";\nimport { resolveCronConfig, type FarmCronJob } from \"./cron\";\nimport {\n mergeFarmRouteRuntimeConfigs,\n resolveFarmRouteRuleRuntimeConfig,\n resolveFarmRouteRuntimeConfig,\n type ResolvedFarmRouteRuntimeConfig,\n} from \"./route-runtime\";\nimport type { FarmConfig } from \"./types\";\nimport type { FarmDiscoveredWorkflow } from \"./workflows\";\n\ntype RouteMapEntry = {\n pattern: string;\n modulePath: string;\n};\n\ntype RouteManagerLike = {\n getRoutes(): Map<string, RouteMapEntry>;\n getLayouts(): Map<string, RouteMapEntry>;\n getLoadings(): Map<string, RouteMapEntry>;\n getErrors(): Map<string, RouteMapEntry>;\n resolveRouteRuntimeConfig?(\n pattern: string,\n ): Promise<ResolvedFarmRouteRuntimeConfig> | ResolvedFarmRouteRuntimeConfig;\n};\n\ntype APIRouteManagerLike = {\n getRoutes(): Map<\n string,\n {\n path: string;\n filePath: string;\n methods: string[];\n runtime?: \"auto\" | \"node\" | \"edge\";\n regions?: \"auto\" | readonly string[];\n maxDuration?: \"auto\" | number;\n }\n >;\n};\n\ntype MiddlewareManagerLike = {\n getMiddlewares(): Array<{\n path: string;\n filePath: string;\n handlers: unknown[];\n source?: \"config\" | \"file\";\n }>;\n};\n\ntype IntegrationLike = {\n kind?: string;\n type?: string;\n category?: string;\n serverRuntime?: boolean;\n routes?: ReadonlyArray<{\n path: string;\n method?: string;\n methods?: readonly string[];\n }>;\n middleware?: readonly unknown[];\n providers?: readonly unknown[];\n schema?: {\n models?: Record<string, unknown>;\n };\n};\n\nexport type FarmDevtoolsRuntime = {\n runtime: \"auto\" | \"node\" | \"edge\";\n regions?: string[];\n maxDuration?: number;\n};\n\nexport type FarmDevtoolsDiagnostic = {\n severity: \"error\" | \"warning\" | \"info\";\n code: string;\n title: string;\n message: string;\n action?: string;\n};\n\nexport type FarmDevtoolsSnapshot = {\n generatedAt: string;\n health: \"ready\" | \"attention\" | \"error\";\n project: {\n name: string;\n root: string;\n srcDir: string;\n basePath: string;\n deploymentId: string;\n };\n deployment: {\n target: string;\n preset: string;\n outputDir?: string;\n };\n counts: {\n pages: number;\n layouts: number;\n loadingBoundaries: number;\n errorBoundaries: number;\n apiRoutes: number;\n middleware: number;\n integrations: number;\n storageMounts: number;\n cronJobs: number;\n workflows: number;\n layers: number;\n diagnostics: number;\n };\n routes: Array<{\n kind: \"page\" | \"layout\" | \"loading\" | \"error\";\n pattern: string;\n filePath: string;\n runtime?: FarmDevtoolsRuntime;\n }>;\n apiRoutes: Array<{\n path: string;\n methods: string[];\n filePath: string;\n runtime: FarmDevtoolsRuntime;\n }>;\n middleware: Array<{\n path: string;\n source: \"config\" | \"file\";\n filePath: string;\n handlerCount: number;\n }>;\n integrations: Array<{\n key: string;\n type: string;\n category: string;\n serverRuntime: boolean;\n routes: Array<{ path: string; methods: string[] }>;\n middlewareCount: number;\n providerCount: number;\n schemaModelCount: number;\n }>;\n storage: Array<{\n mount: string;\n driver: string;\n default: boolean;\n }>;\n cron: FarmCronJob[];\n workflows: Array<{\n id: string;\n filePath: string;\n routePath: string;\n schedule: string[];\n timezone?: string;\n }>;\n layers: Array<{\n name: string;\n source: string;\n srcDir: string;\n }>;\n environment: {\n server: string[];\n public: string[];\n };\n docs: {\n enabled: boolean;\n entry?: string;\n };\n features: {\n openapi: boolean;\n markdown: boolean;\n serverComponents: boolean;\n serverActions: boolean;\n optimizedBoundary: boolean;\n observability: boolean;\n };\n diagnostics: FarmDevtoolsDiagnostic[];\n};\n\nexport interface CreateFarmDevtoolsSnapshotInput {\n root: string;\n srcDir: string;\n routeManager: RouteManagerLike;\n apiRouteManager: APIRouteManagerLike;\n middlewareManager: MiddlewareManagerLike;\n config?: FarmConfig & { openapi?: { enabled?: boolean } };\n workflows?: readonly FarmDiscoveredWorkflow[];\n now?: () => Date;\n env?: Record<string, string | undefined>;\n}\n\nfunction normalizePath(value: string): string {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction toProjectPath(root: string, filePath: string): string {\n const normalizedRoot = normalizePath(root).replace(/\\/$/, \"\");\n const normalizedFile = normalizePath(filePath);\n if (normalizedFile.startsWith(normalizedRoot + \"/\")) {\n return normalizedFile.slice(normalizedRoot.length + 1);\n }\n return normalizedFile;\n}\n\nfunction sortByPath<T extends { path?: string; pattern?: string }>(items: T[]): T[] {\n return [...items].sort((a, b) =>\n (a.path || a.pattern || \"\").localeCompare(b.path || b.pattern || \"\"),\n );\n}\n\nfunction toRuntime(value: ResolvedFarmRouteRuntimeConfig): FarmDevtoolsRuntime {\n return {\n runtime: value.runtime,\n ...(value.regions ? { regions: [...value.regions] } : {}),\n ...(value.maxDuration ? { maxDuration: value.maxDuration } : {}),\n };\n}\n\nasync function collectRoutes(\n root: string,\n kind: FarmDevtoolsSnapshot[\"routes\"][number][\"kind\"],\n routes: Map<string, RouteMapEntry>,\n routeManager: RouteManagerLike,\n diagnostics: FarmDevtoolsDiagnostic[],\n): Promise<FarmDevtoolsSnapshot[\"routes\"]> {\n return Promise.all(\n Array.from(routes.values()).map(async (route) => {\n let runtime: FarmDevtoolsRuntime | undefined;\n if (kind === \"page\" && routeManager.resolveRouteRuntimeConfig) {\n try {\n runtime = toRuntime(await routeManager.resolveRouteRuntimeConfig(route.pattern));\n } catch (error) {\n diagnostics.push({\n severity: \"warning\",\n code: \"ROUTE_RUNTIME_UNRESOLVED\",\n title: `Could not inspect ${route.pattern}`,\n message: error instanceof Error ? error.message : String(error),\n action: \"Check the route and inherited layout runtime exports.\",\n });\n }\n }\n\n return {\n kind,\n pattern: route.pattern,\n filePath: toProjectPath(root, route.modulePath),\n ...(runtime ? { runtime } : {}),\n };\n }),\n );\n}\n\nfunction collectIntegrations(integrations: FarmConfig[\"integrations\"] | undefined) {\n if (!integrations || typeof integrations !== \"object\") return [];\n\n return Object.entries(integrations)\n .filter((entry): entry is [string, NonNullable<(typeof entry)[1]>] => Boolean(entry[1]))\n .map(([key, value]) => {\n const integration = value as IntegrationLike;\n const routes = (integration.routes || []).map((route) => ({\n path: route.path,\n methods: [...(route.methods || (route.method ? [route.method] : [\"ALL\"]))]\n .map((method) => method.toUpperCase())\n .sort(),\n }));\n\n return {\n key,\n type: integration.type || key,\n category: integration.category || \"custom\",\n serverRuntime: integration.serverRuntime !== false,\n routes: sortByPath(routes),\n middlewareCount: integration.middleware?.length || 0,\n providerCount: integration.providers?.length || 0,\n schemaModelCount: Object.keys(integration.schema?.models || {}).length,\n };\n })\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nfunction collectStorage(storage: FarmConfig[\"storage\"] | undefined): {\n entries: FarmDevtoolsSnapshot[\"storage\"];\n configured: boolean;\n} {\n if (!storage || typeof storage !== \"object\") {\n return {\n entries: [{ mount: \"root\", driver: \"memory\", default: true }],\n configured: false,\n };\n }\n\n const value = storage as Record<string, any>;\n if (value.kind === \"farm-storage-client\") {\n return {\n entries: [{ mount: \"root\", driver: \"storage client\", default: false }],\n configured: true,\n };\n }\n\n const configured = Object.keys(value).length > 0;\n const rootDriver = value.client\n ? describeStorageDriver(value.client)\n : describeStorageDriver(value.driver);\n const entries: FarmDevtoolsSnapshot[\"storage\"] = [\n {\n mount: \"root\",\n driver: rootDriver,\n default: !configured,\n },\n ];\n\n if (value.mounts && typeof value.mounts === \"object\") {\n for (const [mount, mountConfig] of Object.entries(value.mounts)) {\n entries.push({\n mount,\n driver: describeStorageDriver(mountConfig),\n default: false,\n });\n }\n }\n\n return {\n entries: entries.sort((a, b) => {\n if (a.mount === \"root\") return -1;\n if (b.mount === \"root\") return 1;\n return a.mount.localeCompare(b.mount);\n }),\n configured,\n };\n}\n\nfunction describeStorageDriver(value: unknown): string {\n if (!value) return \"memory\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"function\") return \"custom\";\n if (typeof value !== \"object\") return \"custom\";\n\n const record = value as Record<string, unknown>;\n if (record.kind === \"farm-storage-client\") return \"storage client\";\n if (typeof record.driver === \"string\") return record.driver;\n if (typeof record.driver === \"function\") return \"custom\";\n return \"custom\";\n}\n\nfunction featureEnabled(value: unknown): boolean {\n if (!value) return false;\n if (typeof value === \"object\" && \"enabled\" in value) {\n return (value as { enabled?: boolean }).enabled !== false;\n }\n return value !== false;\n}\n\nfunction collectEnvironmentKeys(config: FarmConfig | undefined) {\n const env = config?.env as\n | { server?: Record<string, unknown>; public?: Record<string, unknown> }\n | undefined;\n return {\n server: Object.keys(env?.server || {}).sort(),\n public: Object.keys(env?.public || {}).sort(),\n };\n}\n\nfunction resolveHealth(diagnostics: FarmDevtoolsDiagnostic[]): FarmDevtoolsSnapshot[\"health\"] {\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) return \"error\";\n if (diagnostics.some((diagnostic) => diagnostic.severity === \"warning\")) return \"attention\";\n return \"ready\";\n}\n\nexport async function createFarmDevtoolsSnapshot(\n input: CreateFarmDevtoolsSnapshotInput,\n): Promise<FarmDevtoolsSnapshot> {\n const config = input.config || {};\n const diagnostics: FarmDevtoolsDiagnostic[] = [];\n const pageRoutes = await collectRoutes(\n input.root,\n \"page\",\n input.routeManager.getRoutes(),\n input.routeManager,\n diagnostics,\n );\n const layoutRoutes = await collectRoutes(\n input.root,\n \"layout\",\n input.routeManager.getLayouts(),\n input.routeManager,\n diagnostics,\n );\n const loadingRoutes = await collectRoutes(\n input.root,\n \"loading\",\n input.routeManager.getLoadings(),\n input.routeManager,\n diagnostics,\n );\n const errorRoutes = await collectRoutes(\n input.root,\n \"error\",\n input.routeManager.getErrors(),\n input.routeManager,\n diagnostics,\n );\n const apiRoutes = sortByPath(\n Array.from(input.apiRouteManager.getRoutes().values()).map((route) => {\n const runtime = resolveFarmRouteRuntimeConfig(\n mergeFarmRouteRuntimeConfigs(\n resolveFarmRouteRuleRuntimeConfig(route.path, config.routeRules),\n route,\n ),\n `API route \"${route.path}\"`,\n );\n return {\n path: route.path,\n methods: [...route.methods].sort(),\n filePath: toProjectPath(input.root, route.filePath),\n runtime: toRuntime(runtime),\n };\n }),\n );\n const middleware = sortByPath(\n input.middlewareManager.getMiddlewares().map((entry) => ({\n path: entry.path,\n source: entry.source || \"file\",\n filePath: toProjectPath(input.root, entry.filePath),\n handlerCount: entry.handlers.length,\n })),\n );\n const integrations = collectIntegrations(config.integrations);\n const storage = collectStorage(config.storage);\n const cron = resolveCronConfig(config.cron);\n const workflows = (input.workflows || [])\n .map((workflow) => ({\n id: workflow.id,\n filePath: toProjectPath(input.root, workflow.filePath),\n routePath: workflow.routePath,\n schedule: [...workflow.schedule],\n ...(workflow.timezone ? { timezone: workflow.timezone } : {}),\n }))\n .sort((a, b) => a.id.localeCompare(b.id));\n const layers = (config.layers || []).map((layer) => ({\n name: layer.name,\n source: layer.source,\n srcDir: layer.srcDir,\n }));\n const deploymentPreset = String(config.deploy?.preset || config.preset || \"node-server\");\n const deploymentTarget = String(\n config.deploy?.target || getDeployTargetForPreset(deploymentPreset) || \"node\",\n );\n const env = input.env || process.env;\n\n if (pageRoutes.length === 0) {\n diagnostics.push({\n severity: \"warning\",\n code: \"NO_PAGE_ROUTES\",\n title: \"No page routes found\",\n message: `Farm did not discover a page under ${input.srcDir}/app.`,\n action: `Add ${input.srcDir}/app/page.tsx or a programmatic page route.`,\n });\n }\n if (layoutRoutes.length === 0) {\n diagnostics.push({\n severity: \"warning\",\n code: \"ROOT_LAYOUT_MISSING\",\n title: \"Root layout is missing\",\n message: \"The application has no shared root layout.\",\n action: `Add ${input.srcDir}/app/layout.tsx for shared metadata and application chrome.`,\n });\n }\n\n const apiPaths = new Set(apiRoutes.map((route) => route.path));\n for (const job of cron.jobs) {\n if (!apiPaths.has(job.path)) {\n diagnostics.push({\n severity: \"warning\",\n code: \"CRON_ROUTE_MISSING\",\n title: `Cron route ${job.path} was not found`,\n message: `${job.name} is scheduled, but its GET API route is not registered.`,\n action: \"Add the target API route or update the cron path in farm.config.ts.\",\n });\n }\n }\n if (cron.jobs.length > 0 && !env[cron.secretEnv]) {\n diagnostics.push({\n severity: \"info\",\n code: \"CRON_SECRET_NOT_SET\",\n title: `${cron.secretEnv} is not set`,\n message: \"Local manual runs remain available, but production cron routes fail closed.\",\n action: `Set ${cron.secretEnv} in the deployment environment before production.`,\n });\n }\n if (\n storage.configured &&\n storage.entries[0]?.driver === \"memory\" &&\n [\"vercel\", \"cloudflare\", \"netlify\"].includes(deploymentTarget)\n ) {\n diagnostics.push({\n severity: \"warning\",\n code: \"EPHEMERAL_PRODUCTION_STORAGE\",\n title: \"Production storage is in memory\",\n message: `${deploymentTarget} instances do not preserve in-memory data across executions.`,\n action: \"Configure a durable storage driver or mount for production state.\",\n });\n }\n\n const environment = collectEnvironmentKeys(config);\n const docs = config.docs;\n const docsEnabled = featureEnabled(docs);\n const allRoutes = sortByPath([...pageRoutes, ...layoutRoutes, ...loadingRoutes, ...errorRoutes]);\n\n return {\n generatedAt: (input.now?.() || new Date()).toISOString(),\n health: resolveHealth(diagnostics),\n project: {\n name: path.basename(path.resolve(input.root)),\n root: input.root,\n srcDir: input.srcDir,\n basePath: config.basePath || \"/\",\n deploymentId: config.deploymentId || \"development\",\n },\n deployment: {\n target: deploymentTarget,\n preset: deploymentPreset,\n ...(config.deploy?.outputDir ? { outputDir: config.deploy.outputDir } : {}),\n },\n counts: {\n pages: pageRoutes.length,\n layouts: layoutRoutes.length,\n loadingBoundaries: loadingRoutes.length,\n errorBoundaries: errorRoutes.length,\n apiRoutes: apiRoutes.length,\n middleware: middleware.length,\n integrations: integrations.length,\n storageMounts: storage.entries.length,\n cronJobs: cron.jobs.length,\n workflows: workflows.length,\n layers: layers.length,\n diagnostics: diagnostics.length,\n },\n routes: allRoutes,\n apiRoutes,\n middleware,\n integrations,\n storage: storage.entries,\n cron: cron.jobs,\n workflows,\n layers,\n environment,\n docs: {\n enabled: docsEnabled,\n entry:\n docsEnabled && docs && typeof docs === \"object\" && \"entry\" in docs\n ? String(docs.entry)\n : undefined,\n },\n features: {\n openapi: Boolean(config.openapi?.enabled),\n markdown: featureEnabled(config.md),\n serverComponents: Boolean(config.experimental?.serverComponents),\n serverActions: Boolean(config.experimental?.serverActions),\n optimizedBoundary: Boolean(config.experimental?.optimizedBoundary),\n observability: featureEnabled(config.observability),\n },\n diagnostics,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FARM_DEVTOOLS_LAUNCH_PARAM,
|
|
3
|
+
FARM_DEVTOOLS_PATH
|
|
4
|
+
} from "./chunk-7MABZJIM.mjs";
|
|
5
|
+
import {
|
|
6
|
+
__name
|
|
7
|
+
} from "./chunk-CGILA3WO.mjs";
|
|
8
|
+
|
|
9
|
+
// src/devtools-client.ts
|
|
10
|
+
function parseShortcut(shortcut) {
|
|
11
|
+
const tokens = shortcut.toLowerCase().split("+").map((token) => token.trim()).filter(Boolean);
|
|
12
|
+
const key = tokens.find(
|
|
13
|
+
(token) => !["alt", "ctrl", "control", "meta", "cmd", "command", "mod", "shift"].includes(token)
|
|
14
|
+
);
|
|
15
|
+
if (!key) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
key,
|
|
20
|
+
alt: tokens.includes("alt"),
|
|
21
|
+
ctrl: tokens.includes("ctrl") || tokens.includes("control"),
|
|
22
|
+
meta: tokens.includes("meta") || tokens.includes("cmd") || tokens.includes("command"),
|
|
23
|
+
mod: tokens.includes("mod"),
|
|
24
|
+
shift: tokens.includes("shift")
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
__name(parseShortcut, "parseShortcut");
|
|
28
|
+
function generateFarmDevtoolsClientRuntime(config) {
|
|
29
|
+
if (!config.enabled) {
|
|
30
|
+
return "";
|
|
31
|
+
}
|
|
32
|
+
const shortcut = config.shortcut ? parseShortcut(config.shortcut) : null;
|
|
33
|
+
const overlayStyles = `
|
|
34
|
+
#__farm_devtools_overlay__ {
|
|
35
|
+
position: fixed;
|
|
36
|
+
inset: 0;
|
|
37
|
+
z-index: 2147483646;
|
|
38
|
+
display: grid;
|
|
39
|
+
place-items: center;
|
|
40
|
+
padding: 20px;
|
|
41
|
+
background: rgb(0 0 0 / 0);
|
|
42
|
+
backdrop-filter: blur(0);
|
|
43
|
+
opacity: 0;
|
|
44
|
+
pointer-events: none;
|
|
45
|
+
transition: background-color 150ms ease-out, backdrop-filter 150ms ease-out, opacity 150ms ease-out;
|
|
46
|
+
}
|
|
47
|
+
#__farm_devtools_overlay__[data-open="true"] {
|
|
48
|
+
background: rgb(0 0 0 / 0.12);
|
|
49
|
+
backdrop-filter: blur(1px);
|
|
50
|
+
opacity: 1;
|
|
51
|
+
pointer-events: auto;
|
|
52
|
+
}
|
|
53
|
+
#__farm_devtools_overlay__ > iframe {
|
|
54
|
+
display: block;
|
|
55
|
+
width: min(960px, calc(100vw - 40px));
|
|
56
|
+
height: min(560px, calc(100dvh - 40px));
|
|
57
|
+
border: 0;
|
|
58
|
+
border-radius: 12px;
|
|
59
|
+
background: transparent;
|
|
60
|
+
box-shadow: 0 24px 80px rgb(0 0 0 / 0.48), 0 4px 18px rgb(0 0 0 / 0.24);
|
|
61
|
+
transform: scale(0.985) translateY(4px);
|
|
62
|
+
transition: transform 150ms ease-out;
|
|
63
|
+
}
|
|
64
|
+
#__farm_devtools_overlay__[data-open="true"] > iframe {
|
|
65
|
+
transform: scale(1) translateY(0);
|
|
66
|
+
}
|
|
67
|
+
@media (max-width: 700px) {
|
|
68
|
+
#__farm_devtools_overlay__ { padding: 8px; }
|
|
69
|
+
#__farm_devtools_overlay__ > iframe {
|
|
70
|
+
width: calc(100vw - 16px);
|
|
71
|
+
height: calc(100dvh - 16px);
|
|
72
|
+
border-radius: 10px;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
@media (prefers-reduced-motion: reduce) {
|
|
76
|
+
#__farm_devtools_overlay__, #__farm_devtools_overlay__ > iframe { transition: none; }
|
|
77
|
+
}
|
|
78
|
+
`;
|
|
79
|
+
return `
|
|
80
|
+
(() => {
|
|
81
|
+
const overlayId = "__farm_devtools_overlay__";
|
|
82
|
+
const styleId = "__farm_devtools_overlay_styles__";
|
|
83
|
+
const runtimeKey = "__FARM_DEVTOOLS_RUNTIME__";
|
|
84
|
+
const launchParam = ${JSON.stringify(FARM_DEVTOOLS_LAUNCH_PARAM)};
|
|
85
|
+
const devtoolsPath = ${JSON.stringify(FARM_DEVTOOLS_PATH)};
|
|
86
|
+
const validViews = new Set(["overview", "routes", "api", "systems", "runtime", "raw"]);
|
|
87
|
+
const shortcut = ${JSON.stringify(shortcut)};
|
|
88
|
+
const isMac = /Mac|iPhone|iPad|iPod/.test(navigator.platform);
|
|
89
|
+
let returnFocus = null;
|
|
90
|
+
|
|
91
|
+
const matchesShortcut = (event) => {
|
|
92
|
+
if (!shortcut || event.repeat) return false;
|
|
93
|
+
const expectedCtrl = shortcut.ctrl || (shortcut.mod && !isMac);
|
|
94
|
+
const expectedMeta = shortcut.meta || (shortcut.mod && isMac);
|
|
95
|
+
if (
|
|
96
|
+
Boolean(event.altKey) !== shortcut.alt ||
|
|
97
|
+
Boolean(event.ctrlKey) !== expectedCtrl ||
|
|
98
|
+
Boolean(event.metaKey) !== expectedMeta ||
|
|
99
|
+
Boolean(event.shiftKey) !== shortcut.shift
|
|
100
|
+
) return false;
|
|
101
|
+
|
|
102
|
+
if (shortcut.key === "." || shortcut.key === "period") return event.code === "Period";
|
|
103
|
+
if (shortcut.key === "," || shortcut.key === "comma") return event.code === "Comma";
|
|
104
|
+
if (shortcut.key === "/" || shortcut.key === "slash") return event.code === "Slash";
|
|
105
|
+
return String(event.key || "").toLowerCase() === shortcut.key;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const ensureStyles = () => {
|
|
109
|
+
if (document.getElementById(styleId)) return;
|
|
110
|
+
const style = document.createElement("style");
|
|
111
|
+
style.id = styleId;
|
|
112
|
+
style.textContent = ${JSON.stringify(overlayStyles)};
|
|
113
|
+
document.head.appendChild(style);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const close = () => {
|
|
117
|
+
const overlay = document.getElementById(overlayId);
|
|
118
|
+
if (!overlay) return;
|
|
119
|
+
const focusTarget = returnFocus;
|
|
120
|
+
returnFocus = null;
|
|
121
|
+
overlay.dataset.open = "false";
|
|
122
|
+
window.setTimeout(() => {
|
|
123
|
+
overlay.remove();
|
|
124
|
+
focusTarget?.focus?.();
|
|
125
|
+
}, 160);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const open = (view = "overview") => {
|
|
129
|
+
if (document.getElementById(overlayId)) return;
|
|
130
|
+
ensureStyles();
|
|
131
|
+
returnFocus = document.activeElement;
|
|
132
|
+
const overlay = document.createElement("div");
|
|
133
|
+
overlay.id = overlayId;
|
|
134
|
+
overlay.setAttribute("aria-label", "Farm.js DevTools overlay");
|
|
135
|
+
const frame = document.createElement("iframe");
|
|
136
|
+
const resolvedView = validViews.has(view) ? view : "overview";
|
|
137
|
+
frame.src = devtoolsPath + "?embedded=1" + (resolvedView === "overview" ? "" : "#" + resolvedView);
|
|
138
|
+
frame.title = "Farm.js DevTools";
|
|
139
|
+
frame.addEventListener("load", () => frame.contentWindow?.focus(), { once: true });
|
|
140
|
+
overlay.appendChild(frame);
|
|
141
|
+
overlay.addEventListener("pointerdown", (event) => {
|
|
142
|
+
if (event.target === overlay) close();
|
|
143
|
+
});
|
|
144
|
+
document.body.appendChild(overlay);
|
|
145
|
+
requestAnimationFrame(() => {
|
|
146
|
+
overlay.dataset.open = "true";
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const toggle = () => {
|
|
151
|
+
if (document.getElementById(overlayId)) close();
|
|
152
|
+
else open();
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const onKeydown = (event) => {
|
|
156
|
+
if (event.key === "Escape" && document.getElementById(overlayId)) {
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
close();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (!matchesShortcut(event)) return;
|
|
162
|
+
event.preventDefault();
|
|
163
|
+
event.stopPropagation();
|
|
164
|
+
toggle();
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
const onMessage = (event) => {
|
|
168
|
+
if (event.origin !== location.origin) return;
|
|
169
|
+
const frame = document.querySelector("#" + overlayId + " > iframe");
|
|
170
|
+
if (!frame || event.source !== frame.contentWindow) return;
|
|
171
|
+
if (event.data?.type === "farm:devtools:close") close();
|
|
172
|
+
if (event.data?.type === "farm:devtools:keydown" && matchesShortcut(event.data.event || {})) close();
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
window[runtimeKey]?.dispose?.();
|
|
176
|
+
window.addEventListener("keydown", onKeydown, true);
|
|
177
|
+
window.addEventListener("message", onMessage);
|
|
178
|
+
window[runtimeKey] = {
|
|
179
|
+
dispose() {
|
|
180
|
+
window.removeEventListener("keydown", onKeydown, true);
|
|
181
|
+
window.removeEventListener("message", onMessage);
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
window.__FARM_DEVTOOLS__ = { open, close, toggle };
|
|
185
|
+
|
|
186
|
+
const launchUrl = new URL(location.href);
|
|
187
|
+
const launchRequest = launchUrl.searchParams.get(launchParam);
|
|
188
|
+
if (launchRequest !== null) {
|
|
189
|
+
const hashView = launchUrl.hash.slice(1);
|
|
190
|
+
const launchView = validViews.has(launchRequest)
|
|
191
|
+
? launchRequest
|
|
192
|
+
: validViews.has(hashView)
|
|
193
|
+
? hashView
|
|
194
|
+
: "overview";
|
|
195
|
+
launchUrl.searchParams.delete(launchParam);
|
|
196
|
+
if (validViews.has(hashView)) launchUrl.hash = "";
|
|
197
|
+
history.replaceState(
|
|
198
|
+
history.state,
|
|
199
|
+
"",
|
|
200
|
+
launchUrl.pathname + launchUrl.search + launchUrl.hash,
|
|
201
|
+
);
|
|
202
|
+
const launch = () => requestAnimationFrame(() => open(launchView));
|
|
203
|
+
if (document.readyState === "loading") {
|
|
204
|
+
document.addEventListener("DOMContentLoaded", launch, { once: true });
|
|
205
|
+
} else {
|
|
206
|
+
launch();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
})();
|
|
210
|
+
`;
|
|
211
|
+
}
|
|
212
|
+
__name(generateFarmDevtoolsClientRuntime, "generateFarmDevtoolsClientRuntime");
|
|
213
|
+
export {
|
|
214
|
+
generateFarmDevtoolsClientRuntime
|
|
215
|
+
};
|
|
216
|
+
//# sourceMappingURL=devtools-client-3XRTBND5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/devtools-client.ts"],"sourcesContent":["import {\n FARM_DEVTOOLS_LAUNCH_PARAM,\n FARM_DEVTOOLS_PATH,\n type ResolvedFarmDevtoolsConfig,\n} from \"./devtools-config\";\n\ntype ParsedShortcut = {\n key: string;\n alt: boolean;\n ctrl: boolean;\n meta: boolean;\n mod: boolean;\n shift: boolean;\n};\n\nfunction parseShortcut(shortcut: string): ParsedShortcut | null {\n const tokens = shortcut\n .toLowerCase()\n .split(\"+\")\n .map((token) => token.trim())\n .filter(Boolean);\n const key = tokens.find(\n (token) =>\n ![\"alt\", \"ctrl\", \"control\", \"meta\", \"cmd\", \"command\", \"mod\", \"shift\"].includes(token),\n );\n\n if (!key) {\n return null;\n }\n\n return {\n key,\n alt: tokens.includes(\"alt\"),\n ctrl: tokens.includes(\"ctrl\") || tokens.includes(\"control\"),\n meta: tokens.includes(\"meta\") || tokens.includes(\"cmd\") || tokens.includes(\"command\"),\n mod: tokens.includes(\"mod\"),\n shift: tokens.includes(\"shift\"),\n };\n}\n\nexport function generateFarmDevtoolsClientRuntime(config: ResolvedFarmDevtoolsConfig): string {\n if (!config.enabled) {\n return \"\";\n }\n\n const shortcut = config.shortcut ? parseShortcut(config.shortcut) : null;\n const overlayStyles = `\n #__farm_devtools_overlay__ {\n position: fixed;\n inset: 0;\n z-index: 2147483646;\n display: grid;\n place-items: center;\n padding: 20px;\n background: rgb(0 0 0 / 0);\n backdrop-filter: blur(0);\n opacity: 0;\n pointer-events: none;\n transition: background-color 150ms ease-out, backdrop-filter 150ms ease-out, opacity 150ms ease-out;\n }\n #__farm_devtools_overlay__[data-open=\"true\"] {\n background: rgb(0 0 0 / 0.12);\n backdrop-filter: blur(1px);\n opacity: 1;\n pointer-events: auto;\n }\n #__farm_devtools_overlay__ > iframe {\n display: block;\n width: min(960px, calc(100vw - 40px));\n height: min(560px, calc(100dvh - 40px));\n border: 0;\n border-radius: 12px;\n background: transparent;\n box-shadow: 0 24px 80px rgb(0 0 0 / 0.48), 0 4px 18px rgb(0 0 0 / 0.24);\n transform: scale(0.985) translateY(4px);\n transition: transform 150ms ease-out;\n }\n #__farm_devtools_overlay__[data-open=\"true\"] > iframe {\n transform: scale(1) translateY(0);\n }\n @media (max-width: 700px) {\n #__farm_devtools_overlay__ { padding: 8px; }\n #__farm_devtools_overlay__ > iframe {\n width: calc(100vw - 16px);\n height: calc(100dvh - 16px);\n border-radius: 10px;\n }\n }\n @media (prefers-reduced-motion: reduce) {\n #__farm_devtools_overlay__, #__farm_devtools_overlay__ > iframe { transition: none; }\n }\n `;\n\n return `\n(() => {\n const overlayId = \"__farm_devtools_overlay__\";\n const styleId = \"__farm_devtools_overlay_styles__\";\n const runtimeKey = \"__FARM_DEVTOOLS_RUNTIME__\";\n const launchParam = ${JSON.stringify(FARM_DEVTOOLS_LAUNCH_PARAM)};\n const devtoolsPath = ${JSON.stringify(FARM_DEVTOOLS_PATH)};\n const validViews = new Set([\"overview\", \"routes\", \"api\", \"systems\", \"runtime\", \"raw\"]);\n const shortcut = ${JSON.stringify(shortcut)};\n const isMac = /Mac|iPhone|iPad|iPod/.test(navigator.platform);\n let returnFocus = null;\n\n const matchesShortcut = (event) => {\n if (!shortcut || event.repeat) return false;\n const expectedCtrl = shortcut.ctrl || (shortcut.mod && !isMac);\n const expectedMeta = shortcut.meta || (shortcut.mod && isMac);\n if (\n Boolean(event.altKey) !== shortcut.alt ||\n Boolean(event.ctrlKey) !== expectedCtrl ||\n Boolean(event.metaKey) !== expectedMeta ||\n Boolean(event.shiftKey) !== shortcut.shift\n ) return false;\n\n if (shortcut.key === \".\" || shortcut.key === \"period\") return event.code === \"Period\";\n if (shortcut.key === \",\" || shortcut.key === \"comma\") return event.code === \"Comma\";\n if (shortcut.key === \"/\" || shortcut.key === \"slash\") return event.code === \"Slash\";\n return String(event.key || \"\").toLowerCase() === shortcut.key;\n };\n\n const ensureStyles = () => {\n if (document.getElementById(styleId)) return;\n const style = document.createElement(\"style\");\n style.id = styleId;\n style.textContent = ${JSON.stringify(overlayStyles)};\n document.head.appendChild(style);\n };\n\n const close = () => {\n const overlay = document.getElementById(overlayId);\n if (!overlay) return;\n const focusTarget = returnFocus;\n returnFocus = null;\n overlay.dataset.open = \"false\";\n window.setTimeout(() => {\n overlay.remove();\n focusTarget?.focus?.();\n }, 160);\n };\n\n const open = (view = \"overview\") => {\n if (document.getElementById(overlayId)) return;\n ensureStyles();\n returnFocus = document.activeElement;\n const overlay = document.createElement(\"div\");\n overlay.id = overlayId;\n overlay.setAttribute(\"aria-label\", \"Farm.js DevTools overlay\");\n const frame = document.createElement(\"iframe\");\n const resolvedView = validViews.has(view) ? view : \"overview\";\n frame.src = devtoolsPath + \"?embedded=1\" + (resolvedView === \"overview\" ? \"\" : \"#\" + resolvedView);\n frame.title = \"Farm.js DevTools\";\n frame.addEventListener(\"load\", () => frame.contentWindow?.focus(), { once: true });\n overlay.appendChild(frame);\n overlay.addEventListener(\"pointerdown\", (event) => {\n if (event.target === overlay) close();\n });\n document.body.appendChild(overlay);\n requestAnimationFrame(() => {\n overlay.dataset.open = \"true\";\n });\n };\n\n const toggle = () => {\n if (document.getElementById(overlayId)) close();\n else open();\n };\n\n const onKeydown = (event) => {\n if (event.key === \"Escape\" && document.getElementById(overlayId)) {\n event.preventDefault();\n close();\n return;\n }\n if (!matchesShortcut(event)) return;\n event.preventDefault();\n event.stopPropagation();\n toggle();\n };\n\n const onMessage = (event) => {\n if (event.origin !== location.origin) return;\n const frame = document.querySelector(\"#\" + overlayId + \" > iframe\");\n if (!frame || event.source !== frame.contentWindow) return;\n if (event.data?.type === \"farm:devtools:close\") close();\n if (event.data?.type === \"farm:devtools:keydown\" && matchesShortcut(event.data.event || {})) close();\n };\n\n window[runtimeKey]?.dispose?.();\n window.addEventListener(\"keydown\", onKeydown, true);\n window.addEventListener(\"message\", onMessage);\n window[runtimeKey] = {\n dispose() {\n window.removeEventListener(\"keydown\", onKeydown, true);\n window.removeEventListener(\"message\", onMessage);\n },\n };\n window.__FARM_DEVTOOLS__ = { open, close, toggle };\n\n const launchUrl = new URL(location.href);\n const launchRequest = launchUrl.searchParams.get(launchParam);\n if (launchRequest !== null) {\n const hashView = launchUrl.hash.slice(1);\n const launchView = validViews.has(launchRequest)\n ? launchRequest\n : validViews.has(hashView)\n ? hashView\n : \"overview\";\n launchUrl.searchParams.delete(launchParam);\n if (validViews.has(hashView)) launchUrl.hash = \"\";\n history.replaceState(\n history.state,\n \"\",\n launchUrl.pathname + launchUrl.search + launchUrl.hash,\n );\n const launch = () => requestAnimationFrame(() => open(launchView));\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", launch, { once: true });\n } else {\n launch();\n }\n }\n})();\n`;\n}\n"],"mappings":";;;;;;;;;AAeA,SAAS,cAAc,UAAyC;AAC9D,QAAM,SAAS,SACZ,YAAY,EACZ,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO;AACjB,QAAM,MAAM,OAAO;AAAA,IACjB,CAAC,UACC,CAAC,CAAC,OAAO,QAAQ,WAAW,QAAQ,OAAO,WAAW,OAAO,OAAO,EAAE,SAAS,KAAK;AAAA,EACxF;AAEA,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA,KAAK,OAAO,SAAS,KAAK;AAAA,IAC1B,MAAM,OAAO,SAAS,MAAM,KAAK,OAAO,SAAS,SAAS;AAAA,IAC1D,MAAM,OAAO,SAAS,MAAM,KAAK,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,SAAS;AAAA,IACpF,KAAK,OAAO,SAAS,KAAK;AAAA,IAC1B,OAAO,OAAO,SAAS,OAAO;AAAA,EAChC;AACF;AAvBS;AAyBF,SAAS,kCAAkC,QAA4C;AAC5F,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,OAAO,WAAW,cAAc,OAAO,QAAQ,IAAI;AACpE,QAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CtB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKe,KAAK,UAAU,0BAA0B,CAAC;AAAA,yBACzC,KAAK,UAAU,kBAAkB,CAAC;AAAA;AAAA,qBAEtC,KAAK,UAAU,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAyBnB,KAAK,UAAU,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmGvD;AAzLgB;","names":[]}
|