@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,1329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// src/navigation.ts
|
|
32
|
+
var navigation_exports = {};
|
|
33
|
+
__export(navigation_exports, {
|
|
34
|
+
getFarmRedirectError: () => getFarmRedirectError,
|
|
35
|
+
isFarmNotFoundError: () => isFarmNotFoundError,
|
|
36
|
+
isFarmRedirectError: () => isFarmRedirectError,
|
|
37
|
+
notFound: () => notFound,
|
|
38
|
+
permanentRedirect: () => permanentRedirect,
|
|
39
|
+
redirect: () => redirect,
|
|
40
|
+
usePathname: () => usePathname,
|
|
41
|
+
useRouter: () => useRouter2,
|
|
42
|
+
useSearchParams: () => useSearchParams
|
|
43
|
+
});
|
|
44
|
+
module.exports = __toCommonJS(navigation_exports);
|
|
45
|
+
|
|
46
|
+
// src/client/router.ts
|
|
47
|
+
var import_react = require("react");
|
|
48
|
+
|
|
49
|
+
// src/router.ts
|
|
50
|
+
function createFarmRouter(routes) {
|
|
51
|
+
const normalizedRoutes = routes.map(normalizeRouteInput).sort(compareRoutes);
|
|
52
|
+
return {
|
|
53
|
+
routes: normalizedRoutes.map((entry) => entry.route),
|
|
54
|
+
match(pathname) {
|
|
55
|
+
const normalizedPathname = normalizePathname(pathname);
|
|
56
|
+
for (const entry of normalizedRoutes) {
|
|
57
|
+
const params = matchSegments(entry.segments, normalizedPathname);
|
|
58
|
+
if (params) {
|
|
59
|
+
return {
|
|
60
|
+
route: entry.route,
|
|
61
|
+
pathname: normalizedPathname,
|
|
62
|
+
params
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
},
|
|
68
|
+
build: buildFarmRoutePath,
|
|
69
|
+
isActive: isFarmRouteActive
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
__name(createFarmRouter, "createFarmRouter");
|
|
73
|
+
function matchFarmRoute(pattern, pathname) {
|
|
74
|
+
return matchSegments(parseRoutePattern(pattern), normalizePathname(pathname));
|
|
75
|
+
}
|
|
76
|
+
__name(matchFarmRoute, "matchFarmRoute");
|
|
77
|
+
function buildFarmRoutePath(pattern, params = {}, options = {}) {
|
|
78
|
+
const parts = [];
|
|
79
|
+
for (const segment of parseRoutePattern(pattern)) {
|
|
80
|
+
if (segment.type === "static") {
|
|
81
|
+
parts.push(encodePathSegment(segment.value));
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const value = params[segment.name];
|
|
85
|
+
const values = Array.isArray(value) ? value : value == null ? [] : [value];
|
|
86
|
+
if (values.length === 0) {
|
|
87
|
+
if (segment.optional) continue;
|
|
88
|
+
throw new Error(`Missing route param "${segment.name}" for ${pattern}.`);
|
|
89
|
+
}
|
|
90
|
+
if (!segment.catchAll && values.length > 1) {
|
|
91
|
+
throw new Error(`Route param "${segment.name}" for ${pattern} expects a single value.`);
|
|
92
|
+
}
|
|
93
|
+
parts.push(...values.map((item) => encodePathSegment(String(item))));
|
|
94
|
+
}
|
|
95
|
+
let pathname = parts.length ? `/${parts.join("/")}` : "/";
|
|
96
|
+
if (options.trailingSlash && pathname !== "/") {
|
|
97
|
+
pathname = `${pathname}/`;
|
|
98
|
+
}
|
|
99
|
+
return appendQueryAndHash(pathname, options);
|
|
100
|
+
}
|
|
101
|
+
__name(buildFarmRoutePath, "buildFarmRoutePath");
|
|
102
|
+
function isFarmRouteActive(pattern, pathname, options = {}) {
|
|
103
|
+
const normalizedPathname = normalizePathname(pathname);
|
|
104
|
+
if (matchFarmRoute(pattern, normalizedPathname)) return true;
|
|
105
|
+
if (options.exact !== false) return false;
|
|
106
|
+
const normalizedPattern = normalizePathname(pattern);
|
|
107
|
+
if (normalizedPattern === "/") return normalizedPathname === "/";
|
|
108
|
+
return normalizedPathname.startsWith(`${normalizedPattern}/`);
|
|
109
|
+
}
|
|
110
|
+
__name(isFarmRouteActive, "isFarmRouteActive");
|
|
111
|
+
function normalizeRouteInput(input, index) {
|
|
112
|
+
const route = typeof input === "string" ? { path: input } : input;
|
|
113
|
+
const path = normalizePathname(route.path);
|
|
114
|
+
const segments = parseRoutePattern(path);
|
|
115
|
+
return {
|
|
116
|
+
route: {
|
|
117
|
+
...route,
|
|
118
|
+
path
|
|
119
|
+
},
|
|
120
|
+
segments,
|
|
121
|
+
score: scoreSegments(segments),
|
|
122
|
+
index
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
__name(normalizeRouteInput, "normalizeRouteInput");
|
|
126
|
+
function parseRoutePattern(pattern) {
|
|
127
|
+
return splitPathname(pattern).filter((part) => !isRouteGroup(part)).map((part) => {
|
|
128
|
+
const optionalCatchAll = part.match(/^\[\[\.\.\.([A-Za-z0-9_$-]+)\]\]$/);
|
|
129
|
+
if (optionalCatchAll) {
|
|
130
|
+
return {
|
|
131
|
+
type: "dynamic",
|
|
132
|
+
name: optionalCatchAll[1],
|
|
133
|
+
catchAll: true,
|
|
134
|
+
optional: true
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const catchAll = part.match(/^\[\.\.\.([A-Za-z0-9_$-]+)\]$/);
|
|
138
|
+
if (catchAll) {
|
|
139
|
+
return {
|
|
140
|
+
type: "dynamic",
|
|
141
|
+
name: catchAll[1],
|
|
142
|
+
catchAll: true,
|
|
143
|
+
optional: false
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
const dynamic = part.match(/^\[([A-Za-z0-9_$-]+)\]$/) || part.match(/^:([A-Za-z0-9_$-]+)$/);
|
|
147
|
+
if (dynamic) {
|
|
148
|
+
return {
|
|
149
|
+
type: "dynamic",
|
|
150
|
+
name: dynamic[1],
|
|
151
|
+
catchAll: false,
|
|
152
|
+
optional: false
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
const star = part.match(/^\*([A-Za-z0-9_$-]+)(\?)?$/);
|
|
156
|
+
if (star) {
|
|
157
|
+
return {
|
|
158
|
+
type: "dynamic",
|
|
159
|
+
name: star[1],
|
|
160
|
+
catchAll: true,
|
|
161
|
+
optional: !!star[2]
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
type: "static",
|
|
166
|
+
value: decodePathSegment(part)
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
__name(parseRoutePattern, "parseRoutePattern");
|
|
171
|
+
function matchSegments(segments, pathname) {
|
|
172
|
+
const parts = splitPathname(pathname);
|
|
173
|
+
const params = {};
|
|
174
|
+
if (segments.length === 0) {
|
|
175
|
+
return parts.length === 0 ? params : null;
|
|
176
|
+
}
|
|
177
|
+
let pathIndex = 0;
|
|
178
|
+
for (const segment of segments) {
|
|
179
|
+
if (segment.type === "static") {
|
|
180
|
+
if (decodePathSegment(parts[pathIndex] || "") !== segment.value) return null;
|
|
181
|
+
pathIndex++;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (segment.catchAll) {
|
|
185
|
+
const remaining = parts.slice(pathIndex).map(decodePathSegment);
|
|
186
|
+
if (remaining.length === 0 && !segment.optional) return null;
|
|
187
|
+
params[segment.name] = remaining.join("/");
|
|
188
|
+
pathIndex = parts.length;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const value = parts[pathIndex];
|
|
192
|
+
if (!value) return null;
|
|
193
|
+
params[segment.name] = decodePathSegment(value);
|
|
194
|
+
pathIndex++;
|
|
195
|
+
}
|
|
196
|
+
return pathIndex === parts.length ? params : null;
|
|
197
|
+
}
|
|
198
|
+
__name(matchSegments, "matchSegments");
|
|
199
|
+
function compareRoutes(left, right) {
|
|
200
|
+
if (right.score !== left.score) return right.score - left.score;
|
|
201
|
+
return left.index - right.index;
|
|
202
|
+
}
|
|
203
|
+
__name(compareRoutes, "compareRoutes");
|
|
204
|
+
function scoreSegments(segments) {
|
|
205
|
+
return segments.reduce((score, segment) => {
|
|
206
|
+
if (segment.type === "static") return score + 100;
|
|
207
|
+
if (!segment.catchAll) return score + 50;
|
|
208
|
+
return score + (segment.optional ? 5 : 10);
|
|
209
|
+
}, segments.length);
|
|
210
|
+
}
|
|
211
|
+
__name(scoreSegments, "scoreSegments");
|
|
212
|
+
function normalizePathname(value) {
|
|
213
|
+
const raw = value || "/";
|
|
214
|
+
let pathname = raw;
|
|
215
|
+
try {
|
|
216
|
+
pathname = new URL(raw, "http://farm.local").pathname;
|
|
217
|
+
} catch {
|
|
218
|
+
pathname = raw.split(/[?#]/, 1)[0] || "/";
|
|
219
|
+
}
|
|
220
|
+
pathname = pathname.replace(/\\/g, "/").replace(/\/+/g, "/");
|
|
221
|
+
if (!pathname.startsWith("/")) pathname = `/${pathname}`;
|
|
222
|
+
if (pathname.length > 1) pathname = pathname.replace(/\/+$/, "");
|
|
223
|
+
return pathname || "/";
|
|
224
|
+
}
|
|
225
|
+
__name(normalizePathname, "normalizePathname");
|
|
226
|
+
function splitPathname(pathname) {
|
|
227
|
+
return normalizePathname(pathname).split("/").filter(Boolean);
|
|
228
|
+
}
|
|
229
|
+
__name(splitPathname, "splitPathname");
|
|
230
|
+
function isRouteGroup(part) {
|
|
231
|
+
return part.startsWith("(") && part.endsWith(")");
|
|
232
|
+
}
|
|
233
|
+
__name(isRouteGroup, "isRouteGroup");
|
|
234
|
+
function decodePathSegment(value) {
|
|
235
|
+
try {
|
|
236
|
+
return decodeURIComponent(value);
|
|
237
|
+
} catch {
|
|
238
|
+
return value;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
__name(decodePathSegment, "decodePathSegment");
|
|
242
|
+
function encodePathSegment(value) {
|
|
243
|
+
return encodeURIComponent(value);
|
|
244
|
+
}
|
|
245
|
+
__name(encodePathSegment, "encodePathSegment");
|
|
246
|
+
function appendQueryAndHash(pathname, options) {
|
|
247
|
+
const search = createSearchParams(options.query);
|
|
248
|
+
const hash = options.hash ? `#${options.hash.replace(/^#/, "")}` : "";
|
|
249
|
+
const query = search.toString();
|
|
250
|
+
return `${pathname}${query ? `?${query}` : ""}${hash}`;
|
|
251
|
+
}
|
|
252
|
+
__name(appendQueryAndHash, "appendQueryAndHash");
|
|
253
|
+
function createSearchParams(query) {
|
|
254
|
+
if (query instanceof URLSearchParams) return query;
|
|
255
|
+
const search = new URLSearchParams();
|
|
256
|
+
if (!query) return search;
|
|
257
|
+
for (const [key, value] of Object.entries(query)) {
|
|
258
|
+
const values = Array.isArray(value) ? value : [value];
|
|
259
|
+
for (const item of values) {
|
|
260
|
+
if (item == null) continue;
|
|
261
|
+
search.append(key, String(item));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return search;
|
|
265
|
+
}
|
|
266
|
+
__name(createSearchParams, "createSearchParams");
|
|
267
|
+
|
|
268
|
+
// src/deferred.ts
|
|
269
|
+
var FARM_DEFERRED_CONTENT_TYPE = "application/x-farm-deferred+json";
|
|
270
|
+
var FARM_DEFERRED_ERROR_CODE = "FARM_DEFERRED_DATA_ERROR";
|
|
271
|
+
var FARM_DEFERRED_MARKER = "$farmDeferred";
|
|
272
|
+
var _DeferredDataError = class _DeferredDataError extends Error {
|
|
273
|
+
constructor(message = "Deferred route data failed to load") {
|
|
274
|
+
super(message);
|
|
275
|
+
this.name = "DeferredDataError";
|
|
276
|
+
this.code = FARM_DEFERRED_ERROR_CODE;
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
__name(_DeferredDataError, "DeferredDataError");
|
|
280
|
+
var DeferredDataError = _DeferredDataError;
|
|
281
|
+
async function readDeferredDataResponse(response) {
|
|
282
|
+
const contentType = response.headers.get("Content-Type") || "";
|
|
283
|
+
if (!contentType.toLowerCase().startsWith(FARM_DEFERRED_CONTENT_TYPE)) {
|
|
284
|
+
return await response.json();
|
|
285
|
+
}
|
|
286
|
+
if (!response.body) {
|
|
287
|
+
throw new DeferredDataError("Deferred route data response has no body");
|
|
288
|
+
}
|
|
289
|
+
const reader = response.body.getReader();
|
|
290
|
+
const decoder = new TextDecoder();
|
|
291
|
+
const controllers = /* @__PURE__ */ new Map();
|
|
292
|
+
let buffer = "";
|
|
293
|
+
let complete = false;
|
|
294
|
+
const readLine = /* @__PURE__ */ __name(async () => {
|
|
295
|
+
while (true) {
|
|
296
|
+
const newline = buffer.indexOf("\n");
|
|
297
|
+
if (newline >= 0) {
|
|
298
|
+
const line = buffer.slice(0, newline);
|
|
299
|
+
buffer = buffer.slice(newline + 1);
|
|
300
|
+
return line;
|
|
301
|
+
}
|
|
302
|
+
if (complete) {
|
|
303
|
+
if (!buffer) return void 0;
|
|
304
|
+
const line = buffer;
|
|
305
|
+
buffer = "";
|
|
306
|
+
return line;
|
|
307
|
+
}
|
|
308
|
+
const chunk = await reader.read();
|
|
309
|
+
complete = chunk.done;
|
|
310
|
+
if (chunk.value) buffer += decoder.decode(chunk.value, { stream: !chunk.done });
|
|
311
|
+
if (chunk.done) buffer += decoder.decode();
|
|
312
|
+
}
|
|
313
|
+
}, "readLine");
|
|
314
|
+
const firstLine = await readLine();
|
|
315
|
+
if (!firstLine) {
|
|
316
|
+
reader.releaseLock();
|
|
317
|
+
throw new DeferredDataError("Deferred route data response is empty");
|
|
318
|
+
}
|
|
319
|
+
const initial = parseDeferredMessage(firstLine);
|
|
320
|
+
if (initial.type !== "data") {
|
|
321
|
+
reader.releaseLock();
|
|
322
|
+
throw new DeferredDataError("Deferred route data response is invalid");
|
|
323
|
+
}
|
|
324
|
+
const data = reviveDeferredValue(initial.data, controllers);
|
|
325
|
+
void (async () => {
|
|
326
|
+
try {
|
|
327
|
+
for (let line = await readLine(); line !== void 0; line = await readLine()) {
|
|
328
|
+
if (!line) continue;
|
|
329
|
+
const message = parseDeferredMessage(line);
|
|
330
|
+
if (message.type === "resolve") {
|
|
331
|
+
const controller = getControlledDeferred(message.id, controllers);
|
|
332
|
+
controller.resolve(reviveDeferredValue(message.data, controllers));
|
|
333
|
+
} else if (message.type === "reject") {
|
|
334
|
+
getControlledDeferred(message.id, controllers).reject(
|
|
335
|
+
new DeferredDataError(message.error?.message)
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
rejectPendingDeferred(controllers, "Deferred route data stream ended before completion");
|
|
340
|
+
} catch {
|
|
341
|
+
rejectPendingDeferred(controllers, "Deferred route data stream could not be read");
|
|
342
|
+
} finally {
|
|
343
|
+
reader.releaseLock();
|
|
344
|
+
}
|
|
345
|
+
})();
|
|
346
|
+
return data;
|
|
347
|
+
}
|
|
348
|
+
__name(readDeferredDataResponse, "readDeferredDataResponse");
|
|
349
|
+
function reviveDeferredValue(value, controllers, settlements, applyingSettlements = /* @__PURE__ */ new Set()) {
|
|
350
|
+
if (isDeferredMarker(value)) {
|
|
351
|
+
const id = value[FARM_DEFERRED_MARKER];
|
|
352
|
+
const controller = getControlledDeferred(id, controllers);
|
|
353
|
+
const settlement = settlements?.[id];
|
|
354
|
+
if (settlement && controller.promise.status === "pending") {
|
|
355
|
+
if (applyingSettlements.has(id)) return controller.promise;
|
|
356
|
+
applyingSettlements.add(id);
|
|
357
|
+
if (settlement.status === "fulfilled") {
|
|
358
|
+
controller.resolve(
|
|
359
|
+
reviveDeferredValue(settlement.value, controllers, settlements, applyingSettlements)
|
|
360
|
+
);
|
|
361
|
+
} else {
|
|
362
|
+
controller.reject(new DeferredDataError(settlement.error.message));
|
|
363
|
+
}
|
|
364
|
+
applyingSettlements.delete(id);
|
|
365
|
+
} else if (settlements && controller.promise.status === "pending") {
|
|
366
|
+
controller.reject(new DeferredDataError("Deferred route data was not resolved"));
|
|
367
|
+
}
|
|
368
|
+
return controller.promise;
|
|
369
|
+
}
|
|
370
|
+
if (Array.isArray(value)) {
|
|
371
|
+
return value.map(
|
|
372
|
+
(item) => reviveDeferredValue(item, controllers, settlements, applyingSettlements)
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
if (!value || typeof value !== "object") return value;
|
|
376
|
+
const prototype = Object.getPrototypeOf(value);
|
|
377
|
+
if (prototype !== Object.prototype && prototype !== null) return value;
|
|
378
|
+
const output = {};
|
|
379
|
+
for (const [key, item] of Object.entries(value)) {
|
|
380
|
+
output[key] = reviveDeferredValue(item, controllers, settlements, applyingSettlements);
|
|
381
|
+
}
|
|
382
|
+
return output;
|
|
383
|
+
}
|
|
384
|
+
__name(reviveDeferredValue, "reviveDeferredValue");
|
|
385
|
+
function getControlledDeferred(id, controllers) {
|
|
386
|
+
const existing = controllers.get(id);
|
|
387
|
+
if (existing) return existing;
|
|
388
|
+
let nativeResolve;
|
|
389
|
+
let nativeReject;
|
|
390
|
+
const promise = new Promise((resolve, reject) => {
|
|
391
|
+
nativeResolve = resolve;
|
|
392
|
+
nativeReject = reject;
|
|
393
|
+
});
|
|
394
|
+
promise.status = "pending";
|
|
395
|
+
promise.catch(() => void 0);
|
|
396
|
+
const controlled = {
|
|
397
|
+
promise,
|
|
398
|
+
resolve(value) {
|
|
399
|
+
if (promise.status !== "pending") return;
|
|
400
|
+
promise.status = "fulfilled";
|
|
401
|
+
promise.value = value;
|
|
402
|
+
nativeResolve(value);
|
|
403
|
+
},
|
|
404
|
+
reject(error) {
|
|
405
|
+
if (promise.status !== "pending") return;
|
|
406
|
+
promise.status = "rejected";
|
|
407
|
+
promise.reason = error;
|
|
408
|
+
nativeReject(error);
|
|
409
|
+
}
|
|
410
|
+
};
|
|
411
|
+
controllers.set(id, controlled);
|
|
412
|
+
return controlled;
|
|
413
|
+
}
|
|
414
|
+
__name(getControlledDeferred, "getControlledDeferred");
|
|
415
|
+
function isDeferredMarker(value) {
|
|
416
|
+
return Boolean(
|
|
417
|
+
value && typeof value === "object" && Object.keys(value).length === 1 && typeof value[FARM_DEFERRED_MARKER] === "string"
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
__name(isDeferredMarker, "isDeferredMarker");
|
|
421
|
+
function parseDeferredMessage(line) {
|
|
422
|
+
try {
|
|
423
|
+
return JSON.parse(line);
|
|
424
|
+
} catch {
|
|
425
|
+
throw new DeferredDataError("Deferred route data response contains invalid JSON");
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
__name(parseDeferredMessage, "parseDeferredMessage");
|
|
429
|
+
function rejectPendingDeferred(controllers, message) {
|
|
430
|
+
for (const controller of controllers.values()) {
|
|
431
|
+
if (controller.promise.status === "pending") {
|
|
432
|
+
controller.reject(new DeferredDataError(message));
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
__name(rejectPendingDeferred, "rejectPendingDeferred");
|
|
437
|
+
|
|
438
|
+
// src/deployment.ts
|
|
439
|
+
var FARM_DEPLOYMENT_ID_HEADER = "x-farm-deployment-id";
|
|
440
|
+
var FARM_DEPLOYMENT_MISMATCH_HEADER = "x-farm-deployment-mismatch";
|
|
441
|
+
var FARM_DEPLOYMENT_MISMATCH_CODE = "FARM_DEPLOYMENT_MISMATCH";
|
|
442
|
+
var FARM_DEPLOYMENT_MISMATCH_STATUS = 409;
|
|
443
|
+
var _FarmDeploymentMismatchError = class _FarmDeploymentMismatchError extends Error {
|
|
444
|
+
constructor(clientDeploymentId, serverDeploymentId) {
|
|
445
|
+
super("The application was updated while this page was open. Refresh before trying again.");
|
|
446
|
+
this.clientDeploymentId = clientDeploymentId;
|
|
447
|
+
this.serverDeploymentId = serverDeploymentId;
|
|
448
|
+
this.name = "FarmDeploymentMismatchError";
|
|
449
|
+
this.code = FARM_DEPLOYMENT_MISMATCH_CODE;
|
|
450
|
+
this.retryable = false;
|
|
451
|
+
}
|
|
452
|
+
};
|
|
453
|
+
__name(_FarmDeploymentMismatchError, "FarmDeploymentMismatchError");
|
|
454
|
+
var FarmDeploymentMismatchError = _FarmDeploymentMismatchError;
|
|
455
|
+
function createFarmDeploymentRequestHeaders(deploymentId, init) {
|
|
456
|
+
const headers = new Headers(init);
|
|
457
|
+
if (deploymentId) {
|
|
458
|
+
headers.set(FARM_DEPLOYMENT_ID_HEADER, deploymentId);
|
|
459
|
+
}
|
|
460
|
+
return headers;
|
|
461
|
+
}
|
|
462
|
+
__name(createFarmDeploymentRequestHeaders, "createFarmDeploymentRequestHeaders");
|
|
463
|
+
function getFarmResponseDeploymentId(response) {
|
|
464
|
+
return response.headers.get(FARM_DEPLOYMENT_ID_HEADER)?.trim() || void 0;
|
|
465
|
+
}
|
|
466
|
+
__name(getFarmResponseDeploymentId, "getFarmResponseDeploymentId");
|
|
467
|
+
function isFarmDeploymentMismatchResponse(response, clientDeploymentId) {
|
|
468
|
+
const serverDeploymentId = getFarmResponseDeploymentId(response);
|
|
469
|
+
if (clientDeploymentId && serverDeploymentId && clientDeploymentId !== serverDeploymentId) {
|
|
470
|
+
return true;
|
|
471
|
+
}
|
|
472
|
+
return response.status === FARM_DEPLOYMENT_MISMATCH_STATUS && response.headers.get(FARM_DEPLOYMENT_MISMATCH_HEADER) === "1";
|
|
473
|
+
}
|
|
474
|
+
__name(isFarmDeploymentMismatchResponse, "isFarmDeploymentMismatchResponse");
|
|
475
|
+
function createFarmDeploymentMismatchError(response, clientDeploymentId) {
|
|
476
|
+
return new FarmDeploymentMismatchError(
|
|
477
|
+
clientDeploymentId,
|
|
478
|
+
getFarmResponseDeploymentId(response) || "unknown"
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
__name(createFarmDeploymentMismatchError, "createFarmDeploymentMismatchError");
|
|
482
|
+
|
|
483
|
+
// src/i18n/client-runtime.ts
|
|
484
|
+
var import_intl_messageformat = __toESM(require("intl-messageformat"));
|
|
485
|
+
|
|
486
|
+
// src/i18n/bridge.ts
|
|
487
|
+
var FARM_I18N_SNAPSHOT_RESOLVER = /* @__PURE__ */ Symbol.for("farm.i18n.snapshotResolver");
|
|
488
|
+
function getActiveFarmI18nSnapshot() {
|
|
489
|
+
if (typeof window !== "undefined" && window.__FARM_I18N__) {
|
|
490
|
+
return window.__FARM_I18N__;
|
|
491
|
+
}
|
|
492
|
+
return globalThis[FARM_I18N_SNAPSHOT_RESOLVER]?.();
|
|
493
|
+
}
|
|
494
|
+
__name(getActiveFarmI18nSnapshot, "getActiveFarmI18nSnapshot");
|
|
495
|
+
|
|
496
|
+
// src/i18n/routing.ts
|
|
497
|
+
function resolveFarmLocalePath(pathname, config) {
|
|
498
|
+
const normalized = normalizePathname2(pathname);
|
|
499
|
+
if (config.routing === "none") {
|
|
500
|
+
return { pathname: normalized, explicit: false };
|
|
501
|
+
}
|
|
502
|
+
const segments = normalized.split("/").filter(Boolean);
|
|
503
|
+
const firstSegment = segments[0];
|
|
504
|
+
const locale = config.locales.find(
|
|
505
|
+
(candidate) => candidate.toLowerCase() === firstSegment?.toLowerCase()
|
|
506
|
+
);
|
|
507
|
+
if (!locale) {
|
|
508
|
+
return { pathname: normalized, explicit: false };
|
|
509
|
+
}
|
|
510
|
+
const remaining = segments.slice(1);
|
|
511
|
+
return {
|
|
512
|
+
locale,
|
|
513
|
+
pathname: remaining.length > 0 ? `/${remaining.join("/")}` : "/",
|
|
514
|
+
explicit: true
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
__name(resolveFarmLocalePath, "resolveFarmLocalePath");
|
|
518
|
+
function stripFarmLocaleFromPathname(pathname, config) {
|
|
519
|
+
return resolveFarmLocalePath(pathname, config).pathname;
|
|
520
|
+
}
|
|
521
|
+
__name(stripFarmLocaleFromPathname, "stripFarmLocaleFromPathname");
|
|
522
|
+
function normalizePathname2(pathname) {
|
|
523
|
+
const withLeadingSlash = pathname.startsWith("/") ? pathname : `/${pathname}`;
|
|
524
|
+
if (withLeadingSlash === "/") return "/";
|
|
525
|
+
return withLeadingSlash.replace(/\/{2,}/g, "/").replace(/\/$/, "") || "/";
|
|
526
|
+
}
|
|
527
|
+
__name(normalizePathname2, "normalizePathname");
|
|
528
|
+
|
|
529
|
+
// src/i18n/client-runtime.ts
|
|
530
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
531
|
+
var compiled = /* @__PURE__ */ new Map();
|
|
532
|
+
var currentSnapshot;
|
|
533
|
+
function getFarmI18nClientState() {
|
|
534
|
+
return currentSnapshot || getActiveFarmI18nSnapshot();
|
|
535
|
+
}
|
|
536
|
+
__name(getFarmI18nClientState, "getFarmI18nClientState");
|
|
537
|
+
function _hydrateFarmI18n(snapshot) {
|
|
538
|
+
if (!snapshot) return;
|
|
539
|
+
const changed = currentSnapshot?.locale !== snapshot.locale;
|
|
540
|
+
currentSnapshot = snapshot;
|
|
541
|
+
if (typeof window !== "undefined") window.__FARM_I18N__ = snapshot;
|
|
542
|
+
if (typeof document !== "undefined") {
|
|
543
|
+
document.documentElement.lang = snapshot.locale;
|
|
544
|
+
document.documentElement.dir = snapshot.direction;
|
|
545
|
+
}
|
|
546
|
+
if (changed) compiled.clear();
|
|
547
|
+
for (const listener of listeners) listener();
|
|
548
|
+
}
|
|
549
|
+
__name(_hydrateFarmI18n, "_hydrateFarmI18n");
|
|
550
|
+
var translate = /* @__PURE__ */ __name((key, values, rich = false) => {
|
|
551
|
+
const snapshot = requireSnapshot();
|
|
552
|
+
const message = snapshot.messages[key];
|
|
553
|
+
if (message === void 0) return key;
|
|
554
|
+
const cacheKey = `${snapshot.locale}\0${key}\0${message}`;
|
|
555
|
+
let formatter = compiled.get(cacheKey);
|
|
556
|
+
if (!formatter) {
|
|
557
|
+
formatter = new import_intl_messageformat.default(message, snapshot.locale);
|
|
558
|
+
compiled.set(cacheKey, formatter);
|
|
559
|
+
}
|
|
560
|
+
const result = formatter.format(values);
|
|
561
|
+
if (rich) return Array.isArray(result) && result.length === 1 ? result[0] : result;
|
|
562
|
+
if (Array.isArray(result) && result.some((part) => typeof part !== "string")) {
|
|
563
|
+
throw new Error(`Farm i18n message "${key}" contains rich content. Render it with t.rich().`);
|
|
564
|
+
}
|
|
565
|
+
return Array.isArray(result) ? result.join("") : String(result);
|
|
566
|
+
}, "translate");
|
|
567
|
+
var t = /* @__PURE__ */ __name(((key, values) => translate(key, values)), "t");
|
|
568
|
+
t.rich = (key, values) => translate(key, values, true);
|
|
569
|
+
t.raw = (key) => requireSnapshot().messages[key] ?? key;
|
|
570
|
+
t.has = (key) => key in requireSnapshot().messages;
|
|
571
|
+
function isFarmLocaleChangeHref(href) {
|
|
572
|
+
const snapshot = getFarmI18nClientState();
|
|
573
|
+
if (!snapshot || typeof window === "undefined") return false;
|
|
574
|
+
if (snapshot.routing === "none") return false;
|
|
575
|
+
const target = new URL(href, window.location.origin);
|
|
576
|
+
const match = resolveFarmLocalePath(target.pathname, snapshot);
|
|
577
|
+
const targetLocale = match.locale || snapshot.defaultLocale;
|
|
578
|
+
return targetLocale !== snapshot.locale;
|
|
579
|
+
}
|
|
580
|
+
__name(isFarmLocaleChangeHref, "isFarmLocaleChangeHref");
|
|
581
|
+
function requireSnapshot() {
|
|
582
|
+
const snapshot = getFarmI18nClientState();
|
|
583
|
+
if (!snapshot) {
|
|
584
|
+
throw new Error("Farm i18n is not configured or has not been hydrated.");
|
|
585
|
+
}
|
|
586
|
+
return snapshot;
|
|
587
|
+
}
|
|
588
|
+
__name(requireSnapshot, "requireSnapshot");
|
|
589
|
+
|
|
590
|
+
// src/client/spa-router.ts
|
|
591
|
+
var FARM_PAGE_STATE_KEY = "__farmPageState";
|
|
592
|
+
var FARM_INTERCEPT_FROM_KEY = "__farmInterceptFrom";
|
|
593
|
+
var IDLE_NAVIGATION_STATE = {
|
|
594
|
+
state: "idle",
|
|
595
|
+
pending: false,
|
|
596
|
+
from: null,
|
|
597
|
+
to: null,
|
|
598
|
+
action: null,
|
|
599
|
+
startedAt: null
|
|
600
|
+
};
|
|
601
|
+
var routerInstance = null;
|
|
602
|
+
var _SPARouter = class _SPARouter {
|
|
603
|
+
constructor(options = {}) {
|
|
604
|
+
this.cache = /* @__PURE__ */ new Map();
|
|
605
|
+
this.prefetchingUrls = /* @__PURE__ */ new Set();
|
|
606
|
+
this.observers = /* @__PURE__ */ new Map();
|
|
607
|
+
this.blockers = /* @__PURE__ */ new Set();
|
|
608
|
+
this.navigationListeners = /* @__PURE__ */ new Set();
|
|
609
|
+
this.navigationState = IDLE_NAVIGATION_STATE;
|
|
610
|
+
this.scrollElements = /* @__PURE__ */ new Map();
|
|
611
|
+
this.options = {
|
|
612
|
+
prefetchTimeout: options.prefetchTimeout ?? 100,
|
|
613
|
+
cacheMaxAge: options.cacheMaxAge ?? 3e4,
|
|
614
|
+
// 30 seconds
|
|
615
|
+
scrollRestoration: options.scrollRestoration ?? true,
|
|
616
|
+
shouldUseDocumentNavigation: options.shouldUseDocumentNavigation ?? (() => false),
|
|
617
|
+
deploymentId: options.deploymentId ?? readBrowserDeploymentId()
|
|
618
|
+
};
|
|
619
|
+
if (typeof window !== "undefined") {
|
|
620
|
+
window.addEventListener("popstate", this.handlePopState.bind(this));
|
|
621
|
+
window.addEventListener("beforeunload", (event) => {
|
|
622
|
+
if (this.blockers.size > 0) {
|
|
623
|
+
event.preventDefault();
|
|
624
|
+
event.returnValue = "";
|
|
625
|
+
}
|
|
626
|
+
this.saveScrollPosition(window.location.pathname);
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* Set the navigation handler that updates React
|
|
632
|
+
*/
|
|
633
|
+
setNavigationHandler(handler) {
|
|
634
|
+
this.onNavigate = handler;
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* Connect Farm's browser plugin lifecycle to SPA navigation.
|
|
638
|
+
*/
|
|
639
|
+
setClientPluginManager(manager) {
|
|
640
|
+
this.clientPlugins = manager;
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* Navigate to a new URL
|
|
644
|
+
*/
|
|
645
|
+
async navigate(href, options = {}) {
|
|
646
|
+
const { replace = false, scroll = true, state, viewTransition = false } = options;
|
|
647
|
+
const url = new URL(href, window.location.origin);
|
|
648
|
+
const pathname = url.pathname;
|
|
649
|
+
const search = url.search;
|
|
650
|
+
const fullPath = pathname + search;
|
|
651
|
+
if (isFarmLocaleChangeHref(url.toString()) || this.options.shouldUseDocumentNavigation(pathname)) {
|
|
652
|
+
if (replace) window.location.replace(url.toString());
|
|
653
|
+
else window.location.assign(url.toString());
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
if (pathname === window.location.pathname && search === window.location.search) {
|
|
657
|
+
if (url.hash) {
|
|
658
|
+
window.location.hash = url.hash;
|
|
659
|
+
}
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
const from = window.location.pathname + window.location.search;
|
|
663
|
+
if (await this.shouldBlockNavigation({
|
|
664
|
+
from,
|
|
665
|
+
to: fullPath,
|
|
666
|
+
action: replace ? "replace" : "push"
|
|
667
|
+
})) {
|
|
668
|
+
return;
|
|
669
|
+
}
|
|
670
|
+
if (this.options.scrollRestoration) {
|
|
671
|
+
this.saveScrollPosition(window.location.pathname);
|
|
672
|
+
}
|
|
673
|
+
this.startNavigation({
|
|
674
|
+
from,
|
|
675
|
+
to: createNavigationLocation(url),
|
|
676
|
+
action: replace ? "replace" : "push"
|
|
677
|
+
});
|
|
678
|
+
let clientNavigation;
|
|
679
|
+
try {
|
|
680
|
+
clientNavigation = await this.clientPlugins?.beginNavigation({
|
|
681
|
+
from,
|
|
682
|
+
to: url,
|
|
683
|
+
action: replace ? "replace" : "push"
|
|
684
|
+
});
|
|
685
|
+
const pageData = await this.fetchPageData(fullPath, true, from);
|
|
686
|
+
if (clientNavigation) {
|
|
687
|
+
await this.clientPlugins?.markNavigationLoaded(clientNavigation, pageData);
|
|
688
|
+
}
|
|
689
|
+
if (pageData.isClientComponent === false && !pageData.interception) {
|
|
690
|
+
this.finishNavigation();
|
|
691
|
+
window.location.assign(pageData.canonicalPath || fullPath);
|
|
692
|
+
return;
|
|
693
|
+
}
|
|
694
|
+
await this.runViewTransition(
|
|
695
|
+
viewTransition,
|
|
696
|
+
() => this.commitNavigation({
|
|
697
|
+
fullPath,
|
|
698
|
+
pageData,
|
|
699
|
+
pathname,
|
|
700
|
+
replace,
|
|
701
|
+
scroll,
|
|
702
|
+
state,
|
|
703
|
+
url
|
|
704
|
+
})
|
|
705
|
+
);
|
|
706
|
+
if (clientNavigation) {
|
|
707
|
+
await this.clientPlugins?.resolveNavigation(clientNavigation);
|
|
708
|
+
void this.clientPlugins?.scheduleNavigationRendered(clientNavigation);
|
|
709
|
+
}
|
|
710
|
+
this.finishNavigation();
|
|
711
|
+
} catch (error) {
|
|
712
|
+
if (clientNavigation) {
|
|
713
|
+
await this.clientPlugins?.failNavigation(clientNavigation, error);
|
|
714
|
+
}
|
|
715
|
+
this.finishNavigation();
|
|
716
|
+
console.error("[Farm.js] Navigation error:", error);
|
|
717
|
+
window.location.href = href;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
/**
|
|
721
|
+
* Prefetch a URL
|
|
722
|
+
*/
|
|
723
|
+
async prefetch(href) {
|
|
724
|
+
if (isFarmLocaleChangeHref(href)) return;
|
|
725
|
+
const url = new URL(href, window.location.origin);
|
|
726
|
+
const fullPath = url.pathname + url.search;
|
|
727
|
+
const interceptFrom = window.location.pathname + window.location.search;
|
|
728
|
+
if (this.prefetchingUrls.has(fullPath)) return;
|
|
729
|
+
if (this.isCached(fullPath, interceptFrom)) return;
|
|
730
|
+
this.prefetchingUrls.add(fullPath);
|
|
731
|
+
try {
|
|
732
|
+
await this.fetchPageData(fullPath, false, interceptFrom);
|
|
733
|
+
} catch (error) {
|
|
734
|
+
console.warn("[Farm.js] Prefetch failed:", href, error);
|
|
735
|
+
} finally {
|
|
736
|
+
this.prefetchingUrls.delete(fullPath);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* Observe an element for viewport intersection (prefetch when visible)
|
|
741
|
+
*/
|
|
742
|
+
observeForPrefetch(element) {
|
|
743
|
+
if (typeof IntersectionObserver === "undefined") return;
|
|
744
|
+
const href = element.getAttribute("href");
|
|
745
|
+
if (!href || this.isExternalUrl(href)) return;
|
|
746
|
+
const observer = new IntersectionObserver(
|
|
747
|
+
(entries) => {
|
|
748
|
+
for (const entry of entries) {
|
|
749
|
+
if (entry.isIntersecting) {
|
|
750
|
+
setTimeout(() => {
|
|
751
|
+
this.prefetch(href);
|
|
752
|
+
}, this.options.prefetchTimeout);
|
|
753
|
+
observer.unobserve(element);
|
|
754
|
+
this.observers.delete(element);
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
},
|
|
758
|
+
{ rootMargin: "200px" }
|
|
759
|
+
// Start prefetching when 200px from viewport
|
|
760
|
+
);
|
|
761
|
+
observer.observe(element);
|
|
762
|
+
this.observers.set(element, observer);
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Stop observing an element
|
|
766
|
+
*/
|
|
767
|
+
unobserveForPrefetch(element) {
|
|
768
|
+
const observer = this.observers.get(element);
|
|
769
|
+
if (observer) {
|
|
770
|
+
observer.unobserve(element);
|
|
771
|
+
this.observers.delete(element);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
addBlocker(blocker) {
|
|
775
|
+
this.blockers.add(blocker);
|
|
776
|
+
return () => {
|
|
777
|
+
this.blockers.delete(blocker);
|
|
778
|
+
};
|
|
779
|
+
}
|
|
780
|
+
getNavigationState() {
|
|
781
|
+
return this.navigationState;
|
|
782
|
+
}
|
|
783
|
+
subscribeNavigation(listener) {
|
|
784
|
+
this.navigationListeners.add(listener);
|
|
785
|
+
listener(this.navigationState);
|
|
786
|
+
return () => {
|
|
787
|
+
this.navigationListeners.delete(listener);
|
|
788
|
+
};
|
|
789
|
+
}
|
|
790
|
+
registerScrollElement(key, element) {
|
|
791
|
+
this.scrollElements.set(key, element);
|
|
792
|
+
this.restoreScrollElement(window.location.pathname, key, element);
|
|
793
|
+
return () => {
|
|
794
|
+
if (this.scrollElements.get(key) === element) {
|
|
795
|
+
this.scrollElements.delete(key);
|
|
796
|
+
}
|
|
797
|
+
};
|
|
798
|
+
}
|
|
799
|
+
pushState(state, href) {
|
|
800
|
+
this.writePageState("push", state, href);
|
|
801
|
+
}
|
|
802
|
+
replaceState(state, href) {
|
|
803
|
+
this.writePageState("replace", state, href);
|
|
804
|
+
}
|
|
805
|
+
async commitNavigation(options) {
|
|
806
|
+
const historyPath = options.pageData.canonicalPath || options.fullPath;
|
|
807
|
+
const historyState = createHistoryState(
|
|
808
|
+
historyPath,
|
|
809
|
+
options.state,
|
|
810
|
+
void 0,
|
|
811
|
+
options.pageData.interception?.from ?? null
|
|
812
|
+
);
|
|
813
|
+
if (options.replace) {
|
|
814
|
+
window.history.replaceState(historyState, "", historyPath);
|
|
815
|
+
} else {
|
|
816
|
+
window.history.pushState(historyState, "", historyPath);
|
|
817
|
+
}
|
|
818
|
+
if (options.pageData.metadata?.title) {
|
|
819
|
+
document.title = options.pageData.metadata.title;
|
|
820
|
+
}
|
|
821
|
+
if (options.pageData.metadata?.description) {
|
|
822
|
+
let metaDesc = document.querySelector('meta[name="description"]');
|
|
823
|
+
if (!metaDesc) {
|
|
824
|
+
metaDesc = document.createElement("meta");
|
|
825
|
+
metaDesc.setAttribute("name", "description");
|
|
826
|
+
document.head.appendChild(metaDesc);
|
|
827
|
+
}
|
|
828
|
+
metaDesc.setAttribute("content", options.pageData.metadata.description);
|
|
829
|
+
}
|
|
830
|
+
_hydrateFarmI18n(options.pageData.i18n);
|
|
831
|
+
if (this.onNavigate) {
|
|
832
|
+
await this.onNavigate(options.pageData);
|
|
833
|
+
}
|
|
834
|
+
if (options.scroll) {
|
|
835
|
+
if (options.url.hash) {
|
|
836
|
+
const element = document.querySelector(options.url.hash);
|
|
837
|
+
if (element) {
|
|
838
|
+
element.scrollIntoView();
|
|
839
|
+
}
|
|
840
|
+
} else {
|
|
841
|
+
window.scrollTo(0, 0);
|
|
842
|
+
}
|
|
843
|
+
} else if (this.options.scrollRestoration) {
|
|
844
|
+
this.restoreScrollPosition(options.pathname);
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
async runViewTransition(mode, callback) {
|
|
848
|
+
if (!mode || typeof document === "undefined") {
|
|
849
|
+
await callback();
|
|
850
|
+
return;
|
|
851
|
+
}
|
|
852
|
+
const startViewTransition = document.startViewTransition;
|
|
853
|
+
if (typeof startViewTransition !== "function") {
|
|
854
|
+
await callback();
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
const transition = startViewTransition.call(document, () => callback());
|
|
858
|
+
const updateDone = transition?.updateCallbackDone || transition?.ready;
|
|
859
|
+
if (updateDone && typeof updateDone.then === "function") {
|
|
860
|
+
await updateDone;
|
|
861
|
+
}
|
|
862
|
+
transition?.finished?.catch?.(() => void 0);
|
|
863
|
+
}
|
|
864
|
+
/**
|
|
865
|
+
* Fetch page data from cache or server
|
|
866
|
+
*/
|
|
867
|
+
async fetchPageData(path, recover = true, interceptFrom) {
|
|
868
|
+
const cacheKey = getPageDataCacheKey(path, interceptFrom);
|
|
869
|
+
const cached = this.cache.get(cacheKey);
|
|
870
|
+
if (cached && Date.now() - cached.timestamp < this.options.cacheMaxAge) {
|
|
871
|
+
return cached.data;
|
|
872
|
+
}
|
|
873
|
+
const response = await fetch(`/__farm/page-data?path=${encodeURIComponent(path)}`, {
|
|
874
|
+
headers: createFarmDeploymentRequestHeaders(this.options.deploymentId, {
|
|
875
|
+
Accept: "application/x-farm-deferred+json, application/json",
|
|
876
|
+
"X-Farm-SPA": "1",
|
|
877
|
+
...interceptFrom ? { "X-Farm-Intercept-From": interceptFrom } : {}
|
|
878
|
+
})
|
|
879
|
+
});
|
|
880
|
+
if (isFarmDeploymentMismatchResponse(response, this.options.deploymentId)) {
|
|
881
|
+
const error = createFarmDeploymentMismatchError(
|
|
882
|
+
response,
|
|
883
|
+
this.options.deploymentId || "unknown"
|
|
884
|
+
);
|
|
885
|
+
dispatchDeploymentMismatch(error);
|
|
886
|
+
if (recover) {
|
|
887
|
+
window.location.assign(path);
|
|
888
|
+
}
|
|
889
|
+
throw error;
|
|
890
|
+
}
|
|
891
|
+
if (!response.ok) {
|
|
892
|
+
throw new Error(`Failed to fetch page data: ${response.status}`);
|
|
893
|
+
}
|
|
894
|
+
const data = await readDeferredDataResponse(response);
|
|
895
|
+
this.cache.set(cacheKey, {
|
|
896
|
+
data,
|
|
897
|
+
timestamp: Date.now()
|
|
898
|
+
});
|
|
899
|
+
return data;
|
|
900
|
+
}
|
|
901
|
+
/**
|
|
902
|
+
* Handle browser back/forward navigation
|
|
903
|
+
*/
|
|
904
|
+
async handlePopState(event) {
|
|
905
|
+
if (document.documentElement.dataset.farmDocsRuntime === "true") return;
|
|
906
|
+
const path = window.location.pathname + window.location.search;
|
|
907
|
+
if (await this.shouldBlockNavigation({
|
|
908
|
+
from: event.state?.path || path,
|
|
909
|
+
to: path,
|
|
910
|
+
action: "pop"
|
|
911
|
+
})) {
|
|
912
|
+
return;
|
|
913
|
+
}
|
|
914
|
+
this.startNavigation({
|
|
915
|
+
from: event.state?.path || path,
|
|
916
|
+
to: createNavigationLocation(new URL(window.location.href)),
|
|
917
|
+
action: "pop"
|
|
918
|
+
});
|
|
919
|
+
let clientNavigation;
|
|
920
|
+
try {
|
|
921
|
+
clientNavigation = await this.clientPlugins?.beginNavigation({
|
|
922
|
+
from: null,
|
|
923
|
+
to: window.location.href,
|
|
924
|
+
action: "pop"
|
|
925
|
+
});
|
|
926
|
+
const interceptFrom = typeof event.state?.[FARM_INTERCEPT_FROM_KEY] === "string" ? event.state[FARM_INTERCEPT_FROM_KEY] : void 0;
|
|
927
|
+
const pageData = await this.fetchPageData(path, true, interceptFrom);
|
|
928
|
+
if (clientNavigation) {
|
|
929
|
+
await this.clientPlugins?.markNavigationLoaded(clientNavigation, pageData);
|
|
930
|
+
}
|
|
931
|
+
if (pageData.metadata?.title) {
|
|
932
|
+
document.title = pageData.metadata.title;
|
|
933
|
+
}
|
|
934
|
+
_hydrateFarmI18n(pageData.i18n);
|
|
935
|
+
if (this.onNavigate) {
|
|
936
|
+
await this.onNavigate(pageData);
|
|
937
|
+
}
|
|
938
|
+
if (this.options.scrollRestoration) {
|
|
939
|
+
this.restoreScrollPosition(window.location.pathname);
|
|
940
|
+
}
|
|
941
|
+
if (clientNavigation) {
|
|
942
|
+
await this.clientPlugins?.resolveNavigation(clientNavigation);
|
|
943
|
+
void this.clientPlugins?.scheduleNavigationRendered(clientNavigation);
|
|
944
|
+
}
|
|
945
|
+
this.finishNavigation();
|
|
946
|
+
} catch (error) {
|
|
947
|
+
if (clientNavigation) {
|
|
948
|
+
await this.clientPlugins?.failNavigation(clientNavigation, error);
|
|
949
|
+
}
|
|
950
|
+
this.finishNavigation();
|
|
951
|
+
console.error("[Farm.js] Popstate navigation error:", error);
|
|
952
|
+
window.location.reload();
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
/**
|
|
956
|
+
* Check if URL is cached
|
|
957
|
+
*/
|
|
958
|
+
isCached(path, interceptFrom) {
|
|
959
|
+
const cached = this.cache.get(getPageDataCacheKey(path, interceptFrom));
|
|
960
|
+
return cached !== void 0 && Date.now() - cached.timestamp < this.options.cacheMaxAge;
|
|
961
|
+
}
|
|
962
|
+
/**
|
|
963
|
+
* Check if URL is external
|
|
964
|
+
*/
|
|
965
|
+
isExternalUrl(href) {
|
|
966
|
+
return href.startsWith("http://") || href.startsWith("https://") || href.startsWith("//");
|
|
967
|
+
}
|
|
968
|
+
async shouldBlockNavigation(context) {
|
|
969
|
+
for (const blocker of this.blockers) {
|
|
970
|
+
if (await blocker(context)) {
|
|
971
|
+
return true;
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
return false;
|
|
975
|
+
}
|
|
976
|
+
startNavigation(options) {
|
|
977
|
+
this.setNavigationState({
|
|
978
|
+
state: "loading",
|
|
979
|
+
pending: true,
|
|
980
|
+
from: options.from,
|
|
981
|
+
to: options.to,
|
|
982
|
+
action: options.action,
|
|
983
|
+
startedAt: Date.now()
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
finishNavigation() {
|
|
987
|
+
this.setNavigationState(IDLE_NAVIGATION_STATE);
|
|
988
|
+
}
|
|
989
|
+
setNavigationState(state) {
|
|
990
|
+
this.navigationState = state;
|
|
991
|
+
for (const listener of this.navigationListeners) {
|
|
992
|
+
listener(state);
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
writePageState(action, state, href) {
|
|
996
|
+
if (typeof window === "undefined") return;
|
|
997
|
+
const url = href ? new URL(href, window.location.origin).toString() : window.location.href;
|
|
998
|
+
const nextState = createHistoryState(
|
|
999
|
+
new URL(url).pathname + new URL(url).search,
|
|
1000
|
+
state,
|
|
1001
|
+
window.history.state
|
|
1002
|
+
);
|
|
1003
|
+
if (action === "replace") {
|
|
1004
|
+
window.history.replaceState(nextState, "", url);
|
|
1005
|
+
} else {
|
|
1006
|
+
window.history.pushState(nextState, "", url);
|
|
1007
|
+
}
|
|
1008
|
+
window.dispatchEvent(new PopStateEvent("popstate", { state: nextState }));
|
|
1009
|
+
}
|
|
1010
|
+
/**
|
|
1011
|
+
* Save scroll position for a path
|
|
1012
|
+
*/
|
|
1013
|
+
saveScrollPosition(path) {
|
|
1014
|
+
try {
|
|
1015
|
+
sessionStorage.setItem(
|
|
1016
|
+
`farm-scroll-${path}`,
|
|
1017
|
+
JSON.stringify({ x: window.scrollX, y: window.scrollY })
|
|
1018
|
+
);
|
|
1019
|
+
for (const [key, element] of this.scrollElements) {
|
|
1020
|
+
sessionStorage.setItem(
|
|
1021
|
+
getScrollElementStorageKey(path, key),
|
|
1022
|
+
JSON.stringify({ x: element.scrollLeft, y: element.scrollTop })
|
|
1023
|
+
);
|
|
1024
|
+
}
|
|
1025
|
+
} catch {
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
/**
|
|
1029
|
+
* Restore scroll position for a path
|
|
1030
|
+
*/
|
|
1031
|
+
restoreScrollPosition(path) {
|
|
1032
|
+
try {
|
|
1033
|
+
const saved = sessionStorage.getItem(`farm-scroll-${path}`);
|
|
1034
|
+
if (saved) {
|
|
1035
|
+
const { x, y } = JSON.parse(saved);
|
|
1036
|
+
setTimeout(() => window.scrollTo(x, y), 0);
|
|
1037
|
+
}
|
|
1038
|
+
for (const [key, element] of this.scrollElements) {
|
|
1039
|
+
this.restoreScrollElement(path, key, element);
|
|
1040
|
+
}
|
|
1041
|
+
} catch {
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
restoreScrollElement(path, key, element) {
|
|
1045
|
+
try {
|
|
1046
|
+
const saved = sessionStorage.getItem(getScrollElementStorageKey(path, key));
|
|
1047
|
+
if (!saved) return;
|
|
1048
|
+
const { x, y } = JSON.parse(saved);
|
|
1049
|
+
setTimeout(() => {
|
|
1050
|
+
element.scrollLeft = x;
|
|
1051
|
+
element.scrollTop = y;
|
|
1052
|
+
}, 0);
|
|
1053
|
+
} catch {
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
/**
|
|
1057
|
+
* Clear the page cache
|
|
1058
|
+
*/
|
|
1059
|
+
clearCache() {
|
|
1060
|
+
this.cache.clear();
|
|
1061
|
+
}
|
|
1062
|
+
};
|
|
1063
|
+
__name(_SPARouter, "SPARouter");
|
|
1064
|
+
var SPARouter = _SPARouter;
|
|
1065
|
+
function readBrowserDeploymentId() {
|
|
1066
|
+
if (typeof window === "undefined") return void 0;
|
|
1067
|
+
const runtimeId = window.__FARM_DEPLOYMENT_ID__;
|
|
1068
|
+
if (typeof runtimeId === "string" && runtimeId) return runtimeId;
|
|
1069
|
+
return document.querySelector('meta[name="farm-deployment-id"]')?.content;
|
|
1070
|
+
}
|
|
1071
|
+
__name(readBrowserDeploymentId, "readBrowserDeploymentId");
|
|
1072
|
+
function dispatchDeploymentMismatch(error) {
|
|
1073
|
+
if (typeof window === "undefined" || typeof CustomEvent === "undefined") return;
|
|
1074
|
+
window.dispatchEvent(new CustomEvent("farm:deployment-mismatch", { detail: error }));
|
|
1075
|
+
}
|
|
1076
|
+
__name(dispatchDeploymentMismatch, "dispatchDeploymentMismatch");
|
|
1077
|
+
function getRouter() {
|
|
1078
|
+
if (typeof window === "undefined") {
|
|
1079
|
+
return new SPARouter();
|
|
1080
|
+
}
|
|
1081
|
+
const installedRouter = window.__FARM_SPA_ROUTER__;
|
|
1082
|
+
if (installedRouter) {
|
|
1083
|
+
routerInstance = installedRouter;
|
|
1084
|
+
return installedRouter;
|
|
1085
|
+
}
|
|
1086
|
+
if (!routerInstance) {
|
|
1087
|
+
routerInstance = new SPARouter();
|
|
1088
|
+
}
|
|
1089
|
+
return routerInstance;
|
|
1090
|
+
}
|
|
1091
|
+
__name(getRouter, "getRouter");
|
|
1092
|
+
function readPageState() {
|
|
1093
|
+
if (typeof window === "undefined") return null;
|
|
1094
|
+
const state = window.history.state;
|
|
1095
|
+
if (!state || typeof state !== "object") return null;
|
|
1096
|
+
return state[FARM_PAGE_STATE_KEY] ?? null;
|
|
1097
|
+
}
|
|
1098
|
+
__name(readPageState, "readPageState");
|
|
1099
|
+
function createHistoryState(path, pageState, currentState, interceptFrom) {
|
|
1100
|
+
const base = currentState && typeof currentState === "object" ? { ...currentState } : {};
|
|
1101
|
+
const nextState = {
|
|
1102
|
+
...base,
|
|
1103
|
+
path,
|
|
1104
|
+
[FARM_PAGE_STATE_KEY]: pageState
|
|
1105
|
+
};
|
|
1106
|
+
if (interceptFrom === null) {
|
|
1107
|
+
delete nextState[FARM_INTERCEPT_FROM_KEY];
|
|
1108
|
+
} else if (interceptFrom) {
|
|
1109
|
+
nextState[FARM_INTERCEPT_FROM_KEY] = interceptFrom;
|
|
1110
|
+
}
|
|
1111
|
+
return nextState;
|
|
1112
|
+
}
|
|
1113
|
+
__name(createHistoryState, "createHistoryState");
|
|
1114
|
+
function getPageDataCacheKey(path, interceptFrom) {
|
|
1115
|
+
return interceptFrom ? `${path}
|
|
1116
|
+
intercept:${interceptFrom}` : path;
|
|
1117
|
+
}
|
|
1118
|
+
__name(getPageDataCacheKey, "getPageDataCacheKey");
|
|
1119
|
+
function createNavigationLocation(url) {
|
|
1120
|
+
return {
|
|
1121
|
+
href: url.href,
|
|
1122
|
+
pathname: url.pathname,
|
|
1123
|
+
search: url.search,
|
|
1124
|
+
hash: url.hash
|
|
1125
|
+
};
|
|
1126
|
+
}
|
|
1127
|
+
__name(createNavigationLocation, "createNavigationLocation");
|
|
1128
|
+
function getScrollElementStorageKey(path, key) {
|
|
1129
|
+
return `farm-scroll-${path}:${key}`;
|
|
1130
|
+
}
|
|
1131
|
+
__name(getScrollElementStorageKey, "getScrollElementStorageKey");
|
|
1132
|
+
|
|
1133
|
+
// src/client/router.ts
|
|
1134
|
+
function useRouter(options = {}) {
|
|
1135
|
+
const basePath = options.basePath || "";
|
|
1136
|
+
const routes = options.routes;
|
|
1137
|
+
const routeKey = routes?.map((route) => typeof route === "string" ? route : route.path).join("\n") || "";
|
|
1138
|
+
const routeMatcher = (0, import_react.useMemo)(
|
|
1139
|
+
() => routeKey ? createFarmRouter(routeKey.split("\n")) : null,
|
|
1140
|
+
[routeKey]
|
|
1141
|
+
);
|
|
1142
|
+
const [state, setState] = (0, import_react.useState)(() => {
|
|
1143
|
+
return readRouterState(basePath, routeMatcher);
|
|
1144
|
+
});
|
|
1145
|
+
(0, import_react.useEffect)(() => {
|
|
1146
|
+
if (typeof window === "undefined") return;
|
|
1147
|
+
const handlePopState = /* @__PURE__ */ __name(() => {
|
|
1148
|
+
setState(readRouterState(basePath, routeMatcher));
|
|
1149
|
+
}, "handlePopState");
|
|
1150
|
+
handlePopState();
|
|
1151
|
+
window.addEventListener("popstate", handlePopState);
|
|
1152
|
+
return () => window.removeEventListener("popstate", handlePopState);
|
|
1153
|
+
}, [basePath, routeMatcher]);
|
|
1154
|
+
const push = /* @__PURE__ */ __name((href) => {
|
|
1155
|
+
if (typeof window === "undefined") return;
|
|
1156
|
+
const url = href.startsWith("/") ? basePath + href : href;
|
|
1157
|
+
window.history.pushState(null, "", url);
|
|
1158
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
1159
|
+
}, "push");
|
|
1160
|
+
const replace = /* @__PURE__ */ __name((href) => {
|
|
1161
|
+
if (typeof window === "undefined") return;
|
|
1162
|
+
const url = href.startsWith("/") ? basePath + href : href;
|
|
1163
|
+
window.history.replaceState(null, "", url);
|
|
1164
|
+
window.dispatchEvent(new PopStateEvent("popstate"));
|
|
1165
|
+
}, "replace");
|
|
1166
|
+
const pushState = /* @__PURE__ */ __name((pageState, href) => {
|
|
1167
|
+
if (typeof window === "undefined") return;
|
|
1168
|
+
getRouter().pushState(pageState, resolveClientHref(href, basePath));
|
|
1169
|
+
}, "pushState");
|
|
1170
|
+
const replaceState = /* @__PURE__ */ __name((pageState, href) => {
|
|
1171
|
+
if (typeof window === "undefined") return;
|
|
1172
|
+
getRouter().replaceState(pageState, resolveClientHref(href, basePath));
|
|
1173
|
+
}, "replaceState");
|
|
1174
|
+
const back = /* @__PURE__ */ __name(() => {
|
|
1175
|
+
if (typeof window !== "undefined") {
|
|
1176
|
+
window.history.back();
|
|
1177
|
+
}
|
|
1178
|
+
}, "back");
|
|
1179
|
+
const forward = /* @__PURE__ */ __name(() => {
|
|
1180
|
+
if (typeof window !== "undefined") {
|
|
1181
|
+
window.history.forward();
|
|
1182
|
+
}
|
|
1183
|
+
}, "forward");
|
|
1184
|
+
return {
|
|
1185
|
+
...state,
|
|
1186
|
+
push,
|
|
1187
|
+
replace,
|
|
1188
|
+
pushState,
|
|
1189
|
+
replaceState,
|
|
1190
|
+
back,
|
|
1191
|
+
forward
|
|
1192
|
+
};
|
|
1193
|
+
}
|
|
1194
|
+
__name(useRouter, "useRouter");
|
|
1195
|
+
function readRouterState(basePath, routeMatcher) {
|
|
1196
|
+
if (typeof window === "undefined") {
|
|
1197
|
+
return {
|
|
1198
|
+
pathname: "/",
|
|
1199
|
+
searchParams: new URLSearchParams(),
|
|
1200
|
+
params: {},
|
|
1201
|
+
pageState: null
|
|
1202
|
+
};
|
|
1203
|
+
}
|
|
1204
|
+
const url = new URL(window.location.href);
|
|
1205
|
+
const pathname = normalizeClientPathname(url.pathname, basePath);
|
|
1206
|
+
const i18n = getFarmI18nClientState();
|
|
1207
|
+
const routePathname = i18n ? stripFarmLocaleFromPathname(pathname, i18n) : pathname;
|
|
1208
|
+
return {
|
|
1209
|
+
pathname,
|
|
1210
|
+
searchParams: url.searchParams,
|
|
1211
|
+
params: routeMatcher?.match(routePathname)?.params || {},
|
|
1212
|
+
pageState: readPageState()
|
|
1213
|
+
};
|
|
1214
|
+
}
|
|
1215
|
+
__name(readRouterState, "readRouterState");
|
|
1216
|
+
function normalizeClientPathname(pathname, basePath) {
|
|
1217
|
+
const normalizedBase = basePath.replace(/\/+$/, "");
|
|
1218
|
+
const isUnderBase = normalizedBase && (pathname === normalizedBase || pathname.startsWith(`${normalizedBase}/`));
|
|
1219
|
+
const withoutBase = isUnderBase ? pathname.slice(normalizedBase.length) || "/" : pathname;
|
|
1220
|
+
return withoutBase || "/";
|
|
1221
|
+
}
|
|
1222
|
+
__name(normalizeClientPathname, "normalizeClientPathname");
|
|
1223
|
+
function resolveClientHref(href, basePath) {
|
|
1224
|
+
if (!href) return void 0;
|
|
1225
|
+
return href.startsWith("/") ? basePath + href : href;
|
|
1226
|
+
}
|
|
1227
|
+
__name(resolveClientHref, "resolveClientHref");
|
|
1228
|
+
|
|
1229
|
+
// src/navigation-errors.ts
|
|
1230
|
+
var REDIRECT_ERROR_CODE = "FARM_REDIRECT";
|
|
1231
|
+
var NOT_FOUND_ERROR_CODE = "FARM_NOT_FOUND";
|
|
1232
|
+
var REDIRECT_ERROR_SYMBOL = /* @__PURE__ */ Symbol.for("farm.navigation.redirect");
|
|
1233
|
+
var NOT_FOUND_ERROR_SYMBOL = /* @__PURE__ */ Symbol.for("farm.navigation.notFound");
|
|
1234
|
+
function redirect(url, status = 307) {
|
|
1235
|
+
throw createRedirectError(url, status);
|
|
1236
|
+
}
|
|
1237
|
+
__name(redirect, "redirect");
|
|
1238
|
+
function permanentRedirect(url) {
|
|
1239
|
+
redirect(url, 308);
|
|
1240
|
+
}
|
|
1241
|
+
__name(permanentRedirect, "permanentRedirect");
|
|
1242
|
+
function notFound() {
|
|
1243
|
+
const error = new Error(NOT_FOUND_ERROR_CODE);
|
|
1244
|
+
error.digest = NOT_FOUND_ERROR_CODE;
|
|
1245
|
+
error[NOT_FOUND_ERROR_SYMBOL] = true;
|
|
1246
|
+
throw error;
|
|
1247
|
+
}
|
|
1248
|
+
__name(notFound, "notFound");
|
|
1249
|
+
function isFarmRedirectError(error) {
|
|
1250
|
+
return Boolean(getFarmRedirectError(error));
|
|
1251
|
+
}
|
|
1252
|
+
__name(isFarmRedirectError, "isFarmRedirectError");
|
|
1253
|
+
function getFarmRedirectError(error) {
|
|
1254
|
+
if (!error || typeof error !== "object") return null;
|
|
1255
|
+
const candidate = error;
|
|
1256
|
+
if (candidate[REDIRECT_ERROR_SYMBOL]) {
|
|
1257
|
+
return candidate[REDIRECT_ERROR_SYMBOL];
|
|
1258
|
+
}
|
|
1259
|
+
if (typeof candidate.digest === "string" && candidate.digest.startsWith(`${REDIRECT_ERROR_CODE};`)) {
|
|
1260
|
+
const [, status, ...urlParts] = candidate.digest.split(";");
|
|
1261
|
+
const parsedStatus = Number(status);
|
|
1262
|
+
if (isRedirectStatus(parsedStatus)) {
|
|
1263
|
+
return {
|
|
1264
|
+
status: parsedStatus,
|
|
1265
|
+
url: urlParts.join(";")
|
|
1266
|
+
};
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
return null;
|
|
1270
|
+
}
|
|
1271
|
+
__name(getFarmRedirectError, "getFarmRedirectError");
|
|
1272
|
+
function isFarmNotFoundError(error) {
|
|
1273
|
+
if (!error || typeof error !== "object") return false;
|
|
1274
|
+
const candidate = error;
|
|
1275
|
+
return Boolean(candidate[NOT_FOUND_ERROR_SYMBOL] || candidate.digest === NOT_FOUND_ERROR_CODE);
|
|
1276
|
+
}
|
|
1277
|
+
__name(isFarmNotFoundError, "isFarmNotFoundError");
|
|
1278
|
+
function createRedirectError(url, status) {
|
|
1279
|
+
const error = new Error(`${REDIRECT_ERROR_CODE};${status};${url}`);
|
|
1280
|
+
error.digest = `${REDIRECT_ERROR_CODE};${status};${url}`;
|
|
1281
|
+
error[REDIRECT_ERROR_SYMBOL] = { url, status };
|
|
1282
|
+
return error;
|
|
1283
|
+
}
|
|
1284
|
+
__name(createRedirectError, "createRedirectError");
|
|
1285
|
+
function isRedirectStatus(status) {
|
|
1286
|
+
return status === 301 || status === 302 || status === 303 || status === 307 || status === 308;
|
|
1287
|
+
}
|
|
1288
|
+
__name(isRedirectStatus, "isRedirectStatus");
|
|
1289
|
+
|
|
1290
|
+
// src/navigation.ts
|
|
1291
|
+
function useRouter2() {
|
|
1292
|
+
const router = useRouter();
|
|
1293
|
+
return {
|
|
1294
|
+
push: router.push,
|
|
1295
|
+
replace: router.replace,
|
|
1296
|
+
back: router.back,
|
|
1297
|
+
forward: router.forward,
|
|
1298
|
+
refresh() {
|
|
1299
|
+
if (typeof window !== "undefined") {
|
|
1300
|
+
window.location.reload();
|
|
1301
|
+
}
|
|
1302
|
+
},
|
|
1303
|
+
prefetch(_href) {
|
|
1304
|
+
return Promise.resolve();
|
|
1305
|
+
}
|
|
1306
|
+
};
|
|
1307
|
+
}
|
|
1308
|
+
__name(useRouter2, "useRouter");
|
|
1309
|
+
function usePathname() {
|
|
1310
|
+
return useRouter().pathname;
|
|
1311
|
+
}
|
|
1312
|
+
__name(usePathname, "usePathname");
|
|
1313
|
+
function useSearchParams() {
|
|
1314
|
+
return useRouter().searchParams;
|
|
1315
|
+
}
|
|
1316
|
+
__name(useSearchParams, "useSearchParams");
|
|
1317
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
1318
|
+
0 && (module.exports = {
|
|
1319
|
+
getFarmRedirectError,
|
|
1320
|
+
isFarmNotFoundError,
|
|
1321
|
+
isFarmRedirectError,
|
|
1322
|
+
notFound,
|
|
1323
|
+
permanentRedirect,
|
|
1324
|
+
redirect,
|
|
1325
|
+
usePathname,
|
|
1326
|
+
useRouter,
|
|
1327
|
+
useSearchParams
|
|
1328
|
+
});
|
|
1329
|
+
//# sourceMappingURL=navigation.cjs.map
|