@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,149 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-CGILA3WO.mjs";
|
|
4
|
+
|
|
5
|
+
// src/route-runtime.ts
|
|
6
|
+
function normalizeFarmRouteRuntimeConfig(value, source = "Route configuration") {
|
|
7
|
+
if (!value) return {};
|
|
8
|
+
const normalized = {};
|
|
9
|
+
if (value.runtime !== void 0) {
|
|
10
|
+
if (value.runtime !== "auto" && value.runtime !== "node" && value.runtime !== "edge") {
|
|
11
|
+
throw new TypeError(`${source} runtime must be "auto", "node", or "edge"`);
|
|
12
|
+
}
|
|
13
|
+
normalized.runtime = value.runtime;
|
|
14
|
+
}
|
|
15
|
+
if (value.regions !== void 0) {
|
|
16
|
+
if (value.regions === "auto") {
|
|
17
|
+
normalized.regions = "auto";
|
|
18
|
+
} else {
|
|
19
|
+
if (!Array.isArray(value.regions) || value.regions.length === 0) {
|
|
20
|
+
throw new TypeError(`${source} regions must be "auto" or a non-empty string array`);
|
|
21
|
+
}
|
|
22
|
+
const regions = Array.from(
|
|
23
|
+
new Set(
|
|
24
|
+
value.regions.map((region) => {
|
|
25
|
+
if (typeof region !== "string" || !region.trim() || /[\u0000-\u001f\u007f]/.test(region)) {
|
|
26
|
+
throw new TypeError(`${source} regions must contain non-empty region identifiers`);
|
|
27
|
+
}
|
|
28
|
+
return region.trim();
|
|
29
|
+
})
|
|
30
|
+
)
|
|
31
|
+
);
|
|
32
|
+
normalized.regions = regions;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (value.maxDuration !== void 0) {
|
|
36
|
+
if (value.maxDuration === "auto") {
|
|
37
|
+
normalized.maxDuration = "auto";
|
|
38
|
+
} else if (typeof value.maxDuration !== "number" || !Number.isInteger(value.maxDuration) || value.maxDuration <= 0) {
|
|
39
|
+
throw new TypeError(`${source} maxDuration must be "auto" or a positive integer in seconds`);
|
|
40
|
+
} else {
|
|
41
|
+
normalized.maxDuration = value.maxDuration;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return normalized;
|
|
45
|
+
}
|
|
46
|
+
__name(normalizeFarmRouteRuntimeConfig, "normalizeFarmRouteRuntimeConfig");
|
|
47
|
+
function mergeFarmRouteRuntimeConfigs(...configs) {
|
|
48
|
+
const merged = {};
|
|
49
|
+
for (const config of configs) {
|
|
50
|
+
if (!config) continue;
|
|
51
|
+
if (config.runtime !== void 0) merged.runtime = config.runtime;
|
|
52
|
+
if (config.regions !== void 0) merged.regions = config.regions;
|
|
53
|
+
if (config.maxDuration !== void 0) merged.maxDuration = config.maxDuration;
|
|
54
|
+
}
|
|
55
|
+
return merged;
|
|
56
|
+
}
|
|
57
|
+
__name(mergeFarmRouteRuntimeConfigs, "mergeFarmRouteRuntimeConfigs");
|
|
58
|
+
function resolveFarmRouteRuntimeConfig(config, source) {
|
|
59
|
+
const normalized = normalizeFarmRouteRuntimeConfig(config, source);
|
|
60
|
+
return {
|
|
61
|
+
runtime: normalized.runtime ?? "auto",
|
|
62
|
+
...normalized.regions && normalized.regions !== "auto" ? { regions: [...normalized.regions] } : {},
|
|
63
|
+
...typeof normalized.maxDuration === "number" ? { maxDuration: normalized.maxDuration } : {}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
__name(resolveFarmRouteRuntimeConfig, "resolveFarmRouteRuntimeConfig");
|
|
67
|
+
function hasFarmRouteRuntimeControls(config) {
|
|
68
|
+
return Boolean(
|
|
69
|
+
config && (config.runtime !== void 0 || config.regions !== void 0 || config.maxDuration !== void 0)
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
__name(hasFarmRouteRuntimeControls, "hasFarmRouteRuntimeControls");
|
|
73
|
+
function getFarmRouteRuntimeConfig(value) {
|
|
74
|
+
if (!value || typeof value !== "object") return {};
|
|
75
|
+
const route = value;
|
|
76
|
+
return {
|
|
77
|
+
...route.runtime !== void 0 ? { runtime: route.runtime } : {},
|
|
78
|
+
...route.regions !== void 0 ? { regions: route.regions } : {},
|
|
79
|
+
...route.maxDuration !== void 0 ? { maxDuration: route.maxDuration } : {}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
__name(getFarmRouteRuntimeConfig, "getFarmRouteRuntimeConfig");
|
|
83
|
+
function createFarmRouteRuntimeKey(config) {
|
|
84
|
+
return JSON.stringify({
|
|
85
|
+
runtime: config.runtime,
|
|
86
|
+
regions: config.regions || null,
|
|
87
|
+
maxDuration: config.maxDuration || null
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
__name(createFarmRouteRuntimeKey, "createFarmRouteRuntimeKey");
|
|
91
|
+
function resolveFarmRouteRuleRuntimeConfig(pathname, routeRules) {
|
|
92
|
+
if (!routeRules) return {};
|
|
93
|
+
const matches = Object.entries(routeRules).filter(
|
|
94
|
+
([pattern, rule]) => hasFarmRouteRuntimeControls(rule) && farmRouteRuleMatches(pattern, pathname)
|
|
95
|
+
).sort(([left], [right]) => compareFarmRouteRuleSpecificity(left, right));
|
|
96
|
+
return mergeFarmRouteRuntimeConfigs(...matches.map(([, rule]) => rule));
|
|
97
|
+
}
|
|
98
|
+
__name(resolveFarmRouteRuleRuntimeConfig, "resolveFarmRouteRuleRuntimeConfig");
|
|
99
|
+
function farmRouteRuleMatches(pattern, pathname) {
|
|
100
|
+
const normalizedPattern = normalizeRoutePattern(pattern);
|
|
101
|
+
const normalizedPathname = normalizeRoutePattern(pathname);
|
|
102
|
+
if (normalizedPattern === normalizedPathname) return true;
|
|
103
|
+
const expression = normalizedPattern.split("/").filter(Boolean).map((segment) => {
|
|
104
|
+
if (segment === "**") return ".*";
|
|
105
|
+
if (segment === "*") return "[^/]+";
|
|
106
|
+
if (/^\[\[\.\.\..+\]\]$/.test(segment)) return ".*";
|
|
107
|
+
if (/^\[\.\.\..+\]$/.test(segment)) return ".+";
|
|
108
|
+
if (/^\[.+\]$/.test(segment) || /^:.+$/.test(segment)) return "[^/]+";
|
|
109
|
+
return escapeRegExp(segment);
|
|
110
|
+
}).join("/");
|
|
111
|
+
return new RegExp(`^/${expression}/?$`).test(normalizedPathname);
|
|
112
|
+
}
|
|
113
|
+
__name(farmRouteRuleMatches, "farmRouteRuleMatches");
|
|
114
|
+
function compareFarmRouteRuleSpecificity(left, right) {
|
|
115
|
+
const leftScore = getFarmRouteRuleSpecificity(left);
|
|
116
|
+
const rightScore = getFarmRouteRuleSpecificity(right);
|
|
117
|
+
return leftScore - rightScore || left.localeCompare(right);
|
|
118
|
+
}
|
|
119
|
+
__name(compareFarmRouteRuleSpecificity, "compareFarmRouteRuleSpecificity");
|
|
120
|
+
function getFarmRouteRuleSpecificity(pattern) {
|
|
121
|
+
return normalizeRoutePattern(pattern).split("/").filter(Boolean).reduce((score, segment) => {
|
|
122
|
+
if (segment === "**" || segment.startsWith("[[...")) return score + 1;
|
|
123
|
+
if (segment === "*" || segment.startsWith("[...")) return score + 10;
|
|
124
|
+
if (/^\[.+\]$/.test(segment) || /^:.+$/.test(segment)) return score + 50;
|
|
125
|
+
return score + 100;
|
|
126
|
+
}, 0);
|
|
127
|
+
}
|
|
128
|
+
__name(getFarmRouteRuleSpecificity, "getFarmRouteRuleSpecificity");
|
|
129
|
+
function normalizeRoutePattern(value) {
|
|
130
|
+
const withSlash = value.trim().startsWith("/") ? value.trim() : `/${value.trim()}`;
|
|
131
|
+
return withSlash.length > 1 ? withSlash.replace(/\/+$/, "") : withSlash;
|
|
132
|
+
}
|
|
133
|
+
__name(normalizeRoutePattern, "normalizeRoutePattern");
|
|
134
|
+
function escapeRegExp(value) {
|
|
135
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
136
|
+
}
|
|
137
|
+
__name(escapeRegExp, "escapeRegExp");
|
|
138
|
+
|
|
139
|
+
export {
|
|
140
|
+
normalizeFarmRouteRuntimeConfig,
|
|
141
|
+
mergeFarmRouteRuntimeConfigs,
|
|
142
|
+
resolveFarmRouteRuntimeConfig,
|
|
143
|
+
hasFarmRouteRuntimeControls,
|
|
144
|
+
getFarmRouteRuntimeConfig,
|
|
145
|
+
createFarmRouteRuntimeKey,
|
|
146
|
+
resolveFarmRouteRuleRuntimeConfig,
|
|
147
|
+
farmRouteRuleMatches
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=chunk-GQVGIUSN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/route-runtime.ts"],"sourcesContent":["export type FarmRouteRuntime = \"auto\" | \"node\" | \"edge\";\nexport type FarmRouteRegions = \"auto\" | readonly string[];\nexport type FarmRouteMaxDuration = \"auto\" | number;\n\n/** Portable execution controls shared by file, programmatic, and config routes. */\nexport interface FarmRouteRuntimeConfig {\n runtime?: FarmRouteRuntime;\n regions?: FarmRouteRegions;\n maxDuration?: FarmRouteMaxDuration;\n}\n\nexport interface ResolvedFarmRouteRuntimeConfig {\n runtime: FarmRouteRuntime;\n regions?: string[];\n maxDuration?: number;\n}\n\nexport type FarmRouteRuntimeEntryKind = \"page\" | \"api\" | \"rule\";\nexport type FarmRouteRenderingMode = \"static\" | \"dynamic\";\n\nexport interface FarmRouteRuntimeManifestEntry extends ResolvedFarmRouteRuntimeConfig {\n kind: FarmRouteRuntimeEntryKind;\n pattern: string;\n rendering: FarmRouteRenderingMode;\n source?: string;\n}\n\nexport interface FarmRouteRuntimeManifest {\n version: 1;\n routes: FarmRouteRuntimeManifestEntry[];\n}\n\nexport function normalizeFarmRouteRuntimeConfig(\n value: FarmRouteRuntimeConfig | null | undefined,\n source = \"Route configuration\",\n): FarmRouteRuntimeConfig {\n if (!value) return {};\n\n const normalized: FarmRouteRuntimeConfig = {};\n\n if (value.runtime !== undefined) {\n if (value.runtime !== \"auto\" && value.runtime !== \"node\" && value.runtime !== \"edge\") {\n throw new TypeError(`${source} runtime must be \"auto\", \"node\", or \"edge\"`);\n }\n normalized.runtime = value.runtime;\n }\n\n if (value.regions !== undefined) {\n if (value.regions === \"auto\") {\n normalized.regions = \"auto\";\n } else {\n if (!Array.isArray(value.regions) || value.regions.length === 0) {\n throw new TypeError(`${source} regions must be \"auto\" or a non-empty string array`);\n }\n\n const regions = Array.from(\n new Set(\n value.regions.map((region) => {\n if (\n typeof region !== \"string\" ||\n !region.trim() ||\n /[\\u0000-\\u001f\\u007f]/.test(region)\n ) {\n throw new TypeError(`${source} regions must contain non-empty region identifiers`);\n }\n return region.trim();\n }),\n ),\n );\n\n normalized.regions = regions;\n }\n }\n\n if (value.maxDuration !== undefined) {\n if (value.maxDuration === \"auto\") {\n normalized.maxDuration = \"auto\";\n } else if (\n typeof value.maxDuration !== \"number\" ||\n !Number.isInteger(value.maxDuration) ||\n value.maxDuration <= 0\n ) {\n throw new TypeError(`${source} maxDuration must be \"auto\" or a positive integer in seconds`);\n } else {\n normalized.maxDuration = value.maxDuration;\n }\n }\n\n return normalized;\n}\n\n/** Merge from lowest to highest precedence. Explicit \"auto\" values reset inherited hints. */\nexport function mergeFarmRouteRuntimeConfigs(\n ...configs: Array<FarmRouteRuntimeConfig | null | undefined>\n): FarmRouteRuntimeConfig {\n const merged: FarmRouteRuntimeConfig = {};\n\n for (const config of configs) {\n if (!config) continue;\n if (config.runtime !== undefined) merged.runtime = config.runtime;\n if (config.regions !== undefined) merged.regions = config.regions;\n if (config.maxDuration !== undefined) merged.maxDuration = config.maxDuration;\n }\n\n return merged;\n}\n\nexport function resolveFarmRouteRuntimeConfig(\n config: FarmRouteRuntimeConfig | null | undefined,\n source?: string,\n): ResolvedFarmRouteRuntimeConfig {\n const normalized = normalizeFarmRouteRuntimeConfig(config, source);\n\n return {\n runtime: normalized.runtime ?? \"auto\",\n ...(normalized.regions && normalized.regions !== \"auto\"\n ? { regions: [...normalized.regions] }\n : {}),\n ...(typeof normalized.maxDuration === \"number\" ? { maxDuration: normalized.maxDuration } : {}),\n };\n}\n\nexport function hasFarmRouteRuntimeControls(\n config: FarmRouteRuntimeConfig | null | undefined,\n): boolean {\n return Boolean(\n config &&\n (config.runtime !== undefined ||\n config.regions !== undefined ||\n config.maxDuration !== undefined),\n );\n}\n\nexport function getFarmRouteRuntimeConfig(value: unknown): FarmRouteRuntimeConfig {\n if (!value || typeof value !== \"object\") return {};\n const route = value as FarmRouteRuntimeConfig;\n return {\n ...(route.runtime !== undefined ? { runtime: route.runtime } : {}),\n ...(route.regions !== undefined ? { regions: route.regions } : {}),\n ...(route.maxDuration !== undefined ? { maxDuration: route.maxDuration } : {}),\n };\n}\n\nexport function createFarmRouteRuntimeKey(config: ResolvedFarmRouteRuntimeConfig): string {\n return JSON.stringify({\n runtime: config.runtime,\n regions: config.regions || null,\n maxDuration: config.maxDuration || null,\n });\n}\n\n/** Resolve matching route rules from broadest to most specific. */\nexport function resolveFarmRouteRuleRuntimeConfig(\n pathname: string,\n routeRules: Record<string, FarmRouteRuntimeConfig> | null | undefined,\n): FarmRouteRuntimeConfig {\n if (!routeRules) return {};\n\n const matches = Object.entries(routeRules)\n .filter(\n ([pattern, rule]) =>\n hasFarmRouteRuntimeControls(rule) && farmRouteRuleMatches(pattern, pathname),\n )\n .sort(([left], [right]) => compareFarmRouteRuleSpecificity(left, right));\n\n return mergeFarmRouteRuntimeConfigs(...matches.map(([, rule]) => rule));\n}\n\nexport function farmRouteRuleMatches(pattern: string, pathname: string): boolean {\n const normalizedPattern = normalizeRoutePattern(pattern);\n const normalizedPathname = normalizeRoutePattern(pathname);\n if (normalizedPattern === normalizedPathname) return true;\n\n const expression = normalizedPattern\n .split(\"/\")\n .filter(Boolean)\n .map((segment) => {\n if (segment === \"**\") return \".*\";\n if (segment === \"*\") return \"[^/]+\";\n if (/^\\[\\[\\.\\.\\..+\\]\\]$/.test(segment)) return \".*\";\n if (/^\\[\\.\\.\\..+\\]$/.test(segment)) return \".+\";\n if (/^\\[.+\\]$/.test(segment) || /^:.+$/.test(segment)) return \"[^/]+\";\n return escapeRegExp(segment);\n })\n .join(\"/\");\n\n return new RegExp(`^/${expression}/?$`).test(normalizedPathname);\n}\n\nfunction compareFarmRouteRuleSpecificity(left: string, right: string): number {\n const leftScore = getFarmRouteRuleSpecificity(left);\n const rightScore = getFarmRouteRuleSpecificity(right);\n return leftScore - rightScore || left.localeCompare(right);\n}\n\nfunction getFarmRouteRuleSpecificity(pattern: string): number {\n return normalizeRoutePattern(pattern)\n .split(\"/\")\n .filter(Boolean)\n .reduce((score, segment) => {\n if (segment === \"**\" || segment.startsWith(\"[[...\")) return score + 1;\n if (segment === \"*\" || segment.startsWith(\"[...\")) return score + 10;\n if (/^\\[.+\\]$/.test(segment) || /^:.+$/.test(segment)) return score + 50;\n return score + 100;\n }, 0);\n}\n\nfunction normalizeRoutePattern(value: string): string {\n const withSlash = value.trim().startsWith(\"/\") ? value.trim() : `/${value.trim()}`;\n return withSlash.length > 1 ? withSlash.replace(/\\/+$/, \"\") : withSlash;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-CGILA3WO.mjs";
|
|
4
|
+
|
|
5
|
+
// src/deferred.ts
|
|
6
|
+
var FARM_DEFERRED_CONTENT_TYPE = "application/x-farm-deferred+json";
|
|
7
|
+
var FARM_DEFERRED_ERROR_CODE = "FARM_DEFERRED_DATA_ERROR";
|
|
8
|
+
var FARM_DEFERRED_BRAND = /* @__PURE__ */ Symbol.for(
|
|
9
|
+
"farm.deferred"
|
|
10
|
+
);
|
|
11
|
+
var FARM_DEFERRED_MARKER = "$farmDeferred";
|
|
12
|
+
var _DeferredDataError = class _DeferredDataError extends Error {
|
|
13
|
+
constructor(message = "Deferred route data failed to load") {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "DeferredDataError";
|
|
16
|
+
this.code = FARM_DEFERRED_ERROR_CODE;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
__name(_DeferredDataError, "DeferredDataError");
|
|
20
|
+
var DeferredDataError = _DeferredDataError;
|
|
21
|
+
var deferredStates = /* @__PURE__ */ new WeakMap();
|
|
22
|
+
function defer(value) {
|
|
23
|
+
if (isDeferred(value)) {
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
const promise = Promise.resolve(value);
|
|
27
|
+
Object.defineProperty(promise, FARM_DEFERRED_BRAND, {
|
|
28
|
+
configurable: false,
|
|
29
|
+
enumerable: false,
|
|
30
|
+
value: true,
|
|
31
|
+
writable: false
|
|
32
|
+
});
|
|
33
|
+
deferredStates.set(promise, { status: "pending" });
|
|
34
|
+
promise.then(
|
|
35
|
+
(resolved) => deferredStates.set(promise, { status: "fulfilled", value: resolved }),
|
|
36
|
+
(reason) => deferredStates.set(promise, { status: "rejected", reason })
|
|
37
|
+
);
|
|
38
|
+
return promise;
|
|
39
|
+
}
|
|
40
|
+
__name(defer, "defer");
|
|
41
|
+
function isDeferred(value) {
|
|
42
|
+
return Boolean(
|
|
43
|
+
value && (typeof value === "object" || typeof value === "function") && value[FARM_DEFERRED_BRAND] === true
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
__name(isDeferred, "isDeferred");
|
|
47
|
+
function prepareDeferredData(value) {
|
|
48
|
+
const context = createEncodingContext();
|
|
49
|
+
return {
|
|
50
|
+
data: encodeDeferredValue(value, context, /* @__PURE__ */ new WeakSet()),
|
|
51
|
+
records: context.records
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
__name(prepareDeferredData, "prepareDeferredData");
|
|
55
|
+
function snapshotDeferredData(records) {
|
|
56
|
+
const context = createEncodingContext(records);
|
|
57
|
+
const settlements = {};
|
|
58
|
+
for (let index = 0; index < context.records.length; index++) {
|
|
59
|
+
const record = context.records[index];
|
|
60
|
+
const state = readDeferredState(record.promise);
|
|
61
|
+
if (state.status === "fulfilled") {
|
|
62
|
+
try {
|
|
63
|
+
settlements[record.id] = {
|
|
64
|
+
status: "fulfilled",
|
|
65
|
+
value: encodeDeferredValue(state.value, context, /* @__PURE__ */ new WeakSet())
|
|
66
|
+
};
|
|
67
|
+
} catch {
|
|
68
|
+
settlements[record.id] = createRejectedSettlement();
|
|
69
|
+
}
|
|
70
|
+
} else {
|
|
71
|
+
settlements[record.id] = createRejectedSettlement();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return settlements;
|
|
75
|
+
}
|
|
76
|
+
__name(snapshotDeferredData, "snapshotDeferredData");
|
|
77
|
+
function reviveDeferredData(value, settlements) {
|
|
78
|
+
return reviveDeferredValue(value, /* @__PURE__ */ new Map(), settlements);
|
|
79
|
+
}
|
|
80
|
+
__name(reviveDeferredData, "reviveDeferredData");
|
|
81
|
+
function createDeferredDataResponse(value, init = {}, options = {}) {
|
|
82
|
+
const context = createEncodingContext();
|
|
83
|
+
const data = encodeDeferredValue(value, context, /* @__PURE__ */ new WeakSet());
|
|
84
|
+
const headers = new Headers(init.headers);
|
|
85
|
+
if (context.records.length === 0) {
|
|
86
|
+
headers.set("Content-Type", "application/json; charset=utf-8");
|
|
87
|
+
return new Response(JSON.stringify(data), { ...init, headers });
|
|
88
|
+
}
|
|
89
|
+
headers.set("Content-Type", `${FARM_DEFERRED_CONTENT_TYPE}; charset=utf-8`);
|
|
90
|
+
headers.set("Cache-Control", headers.get("Cache-Control") || "private, max-age=0");
|
|
91
|
+
const initialLine = encodeDeferredMessage({ type: "data", data });
|
|
92
|
+
const encoder = new TextEncoder();
|
|
93
|
+
let cancelled = false;
|
|
94
|
+
const stream = new ReadableStream({
|
|
95
|
+
start(controller) {
|
|
96
|
+
controller.enqueue(encoder.encode(initialLine));
|
|
97
|
+
let pending = context.records.length;
|
|
98
|
+
const finishRecord = /* @__PURE__ */ __name(() => {
|
|
99
|
+
pending--;
|
|
100
|
+
if (!cancelled && pending === 0) controller.close();
|
|
101
|
+
}, "finishRecord");
|
|
102
|
+
const schedule = /* @__PURE__ */ __name((record) => {
|
|
103
|
+
record.promise.then(
|
|
104
|
+
(resolved) => {
|
|
105
|
+
if (cancelled) return;
|
|
106
|
+
try {
|
|
107
|
+
const previousLength = context.records.length;
|
|
108
|
+
const encoded = encodeDeferredValue(resolved, context, /* @__PURE__ */ new WeakSet());
|
|
109
|
+
const nestedRecords = context.records.slice(previousLength);
|
|
110
|
+
pending += nestedRecords.length;
|
|
111
|
+
controller.enqueue(
|
|
112
|
+
encoder.encode(
|
|
113
|
+
encodeDeferredMessage({ type: "resolve", id: record.id, data: encoded })
|
|
114
|
+
)
|
|
115
|
+
);
|
|
116
|
+
for (const nestedRecord of nestedRecords) schedule(nestedRecord);
|
|
117
|
+
} catch (error) {
|
|
118
|
+
reportDeferredError(options, error, record.id);
|
|
119
|
+
controller.enqueue(
|
|
120
|
+
encoder.encode(
|
|
121
|
+
encodeDeferredMessage({
|
|
122
|
+
type: "reject",
|
|
123
|
+
id: record.id,
|
|
124
|
+
error: createDeferredPublicError()
|
|
125
|
+
})
|
|
126
|
+
)
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
(error) => {
|
|
131
|
+
if (cancelled) return;
|
|
132
|
+
reportDeferredError(options, error, record.id);
|
|
133
|
+
controller.enqueue(
|
|
134
|
+
encoder.encode(
|
|
135
|
+
encodeDeferredMessage({
|
|
136
|
+
type: "reject",
|
|
137
|
+
id: record.id,
|
|
138
|
+
error: createDeferredPublicError()
|
|
139
|
+
})
|
|
140
|
+
)
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
).finally(finishRecord);
|
|
144
|
+
}, "schedule");
|
|
145
|
+
const initialRecords = context.records.slice();
|
|
146
|
+
for (const record of initialRecords) schedule(record);
|
|
147
|
+
},
|
|
148
|
+
cancel() {
|
|
149
|
+
cancelled = true;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return new Response(stream, { ...init, headers });
|
|
153
|
+
}
|
|
154
|
+
__name(createDeferredDataResponse, "createDeferredDataResponse");
|
|
155
|
+
async function readDeferredDataResponse(response) {
|
|
156
|
+
const contentType = response.headers.get("Content-Type") || "";
|
|
157
|
+
if (!contentType.toLowerCase().startsWith(FARM_DEFERRED_CONTENT_TYPE)) {
|
|
158
|
+
return await response.json();
|
|
159
|
+
}
|
|
160
|
+
if (!response.body) {
|
|
161
|
+
throw new DeferredDataError("Deferred route data response has no body");
|
|
162
|
+
}
|
|
163
|
+
const reader = response.body.getReader();
|
|
164
|
+
const decoder = new TextDecoder();
|
|
165
|
+
const controllers = /* @__PURE__ */ new Map();
|
|
166
|
+
let buffer = "";
|
|
167
|
+
let complete = false;
|
|
168
|
+
const readLine = /* @__PURE__ */ __name(async () => {
|
|
169
|
+
while (true) {
|
|
170
|
+
const newline = buffer.indexOf("\n");
|
|
171
|
+
if (newline >= 0) {
|
|
172
|
+
const line = buffer.slice(0, newline);
|
|
173
|
+
buffer = buffer.slice(newline + 1);
|
|
174
|
+
return line;
|
|
175
|
+
}
|
|
176
|
+
if (complete) {
|
|
177
|
+
if (!buffer) return void 0;
|
|
178
|
+
const line = buffer;
|
|
179
|
+
buffer = "";
|
|
180
|
+
return line;
|
|
181
|
+
}
|
|
182
|
+
const chunk = await reader.read();
|
|
183
|
+
complete = chunk.done;
|
|
184
|
+
if (chunk.value) buffer += decoder.decode(chunk.value, { stream: !chunk.done });
|
|
185
|
+
if (chunk.done) buffer += decoder.decode();
|
|
186
|
+
}
|
|
187
|
+
}, "readLine");
|
|
188
|
+
const firstLine = await readLine();
|
|
189
|
+
if (!firstLine) {
|
|
190
|
+
reader.releaseLock();
|
|
191
|
+
throw new DeferredDataError("Deferred route data response is empty");
|
|
192
|
+
}
|
|
193
|
+
const initial = parseDeferredMessage(firstLine);
|
|
194
|
+
if (initial.type !== "data") {
|
|
195
|
+
reader.releaseLock();
|
|
196
|
+
throw new DeferredDataError("Deferred route data response is invalid");
|
|
197
|
+
}
|
|
198
|
+
const data = reviveDeferredValue(initial.data, controllers);
|
|
199
|
+
void (async () => {
|
|
200
|
+
try {
|
|
201
|
+
for (let line = await readLine(); line !== void 0; line = await readLine()) {
|
|
202
|
+
if (!line) continue;
|
|
203
|
+
const message = parseDeferredMessage(line);
|
|
204
|
+
if (message.type === "resolve") {
|
|
205
|
+
const controller = getControlledDeferred(message.id, controllers);
|
|
206
|
+
controller.resolve(reviveDeferredValue(message.data, controllers));
|
|
207
|
+
} else if (message.type === "reject") {
|
|
208
|
+
getControlledDeferred(message.id, controllers).reject(
|
|
209
|
+
new DeferredDataError(message.error?.message)
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
rejectPendingDeferred(controllers, "Deferred route data stream ended before completion");
|
|
214
|
+
} catch {
|
|
215
|
+
rejectPendingDeferred(controllers, "Deferred route data stream could not be read");
|
|
216
|
+
} finally {
|
|
217
|
+
reader.releaseLock();
|
|
218
|
+
}
|
|
219
|
+
})();
|
|
220
|
+
return data;
|
|
221
|
+
}
|
|
222
|
+
__name(readDeferredDataResponse, "readDeferredDataResponse");
|
|
223
|
+
function createEncodingContext(records = []) {
|
|
224
|
+
return {
|
|
225
|
+
records: [...records],
|
|
226
|
+
ids: new Map(records.map((record) => [record.promise, record.id])),
|
|
227
|
+
nextId: records.reduce((highest, record) => {
|
|
228
|
+
const value = Number(record.id.replace(/^d/, ""));
|
|
229
|
+
return Number.isFinite(value) ? Math.max(highest, value + 1) : highest;
|
|
230
|
+
}, records.length)
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
__name(createEncodingContext, "createEncodingContext");
|
|
234
|
+
function encodeDeferredValue(value, context, ancestors) {
|
|
235
|
+
if (isDeferred(value)) {
|
|
236
|
+
let id = context.ids.get(value);
|
|
237
|
+
if (!id) {
|
|
238
|
+
id = `d${context.nextId++}`;
|
|
239
|
+
context.ids.set(value, id);
|
|
240
|
+
context.records.push({ id, promise: value });
|
|
241
|
+
}
|
|
242
|
+
return { [FARM_DEFERRED_MARKER]: id };
|
|
243
|
+
}
|
|
244
|
+
if (!value || typeof value !== "object") return value;
|
|
245
|
+
if (Array.isArray(value)) {
|
|
246
|
+
assertNotCircular(value, ancestors);
|
|
247
|
+
const output2 = value.map((item) => encodeDeferredValue(item, context, ancestors));
|
|
248
|
+
ancestors.delete(value);
|
|
249
|
+
return output2;
|
|
250
|
+
}
|
|
251
|
+
const prototype = Object.getPrototypeOf(value);
|
|
252
|
+
if (prototype !== Object.prototype && prototype !== null) return value;
|
|
253
|
+
assertNotCircular(value, ancestors);
|
|
254
|
+
const output = {};
|
|
255
|
+
for (const [key, item] of Object.entries(value)) {
|
|
256
|
+
output[key] = encodeDeferredValue(item, context, ancestors);
|
|
257
|
+
}
|
|
258
|
+
ancestors.delete(value);
|
|
259
|
+
return output;
|
|
260
|
+
}
|
|
261
|
+
__name(encodeDeferredValue, "encodeDeferredValue");
|
|
262
|
+
function reviveDeferredValue(value, controllers, settlements, applyingSettlements = /* @__PURE__ */ new Set()) {
|
|
263
|
+
if (isDeferredMarker(value)) {
|
|
264
|
+
const id = value[FARM_DEFERRED_MARKER];
|
|
265
|
+
const controller = getControlledDeferred(id, controllers);
|
|
266
|
+
const settlement = settlements?.[id];
|
|
267
|
+
if (settlement && controller.promise.status === "pending") {
|
|
268
|
+
if (applyingSettlements.has(id)) return controller.promise;
|
|
269
|
+
applyingSettlements.add(id);
|
|
270
|
+
if (settlement.status === "fulfilled") {
|
|
271
|
+
controller.resolve(
|
|
272
|
+
reviveDeferredValue(settlement.value, controllers, settlements, applyingSettlements)
|
|
273
|
+
);
|
|
274
|
+
} else {
|
|
275
|
+
controller.reject(new DeferredDataError(settlement.error.message));
|
|
276
|
+
}
|
|
277
|
+
applyingSettlements.delete(id);
|
|
278
|
+
} else if (settlements && controller.promise.status === "pending") {
|
|
279
|
+
controller.reject(new DeferredDataError("Deferred route data was not resolved"));
|
|
280
|
+
}
|
|
281
|
+
return controller.promise;
|
|
282
|
+
}
|
|
283
|
+
if (Array.isArray(value)) {
|
|
284
|
+
return value.map(
|
|
285
|
+
(item) => reviveDeferredValue(item, controllers, settlements, applyingSettlements)
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
if (!value || typeof value !== "object") return value;
|
|
289
|
+
const prototype = Object.getPrototypeOf(value);
|
|
290
|
+
if (prototype !== Object.prototype && prototype !== null) return value;
|
|
291
|
+
const output = {};
|
|
292
|
+
for (const [key, item] of Object.entries(value)) {
|
|
293
|
+
output[key] = reviveDeferredValue(item, controllers, settlements, applyingSettlements);
|
|
294
|
+
}
|
|
295
|
+
return output;
|
|
296
|
+
}
|
|
297
|
+
__name(reviveDeferredValue, "reviveDeferredValue");
|
|
298
|
+
function getControlledDeferred(id, controllers) {
|
|
299
|
+
const existing = controllers.get(id);
|
|
300
|
+
if (existing) return existing;
|
|
301
|
+
let nativeResolve;
|
|
302
|
+
let nativeReject;
|
|
303
|
+
const promise = new Promise((resolve, reject) => {
|
|
304
|
+
nativeResolve = resolve;
|
|
305
|
+
nativeReject = reject;
|
|
306
|
+
});
|
|
307
|
+
promise.status = "pending";
|
|
308
|
+
promise.catch(() => void 0);
|
|
309
|
+
const controlled = {
|
|
310
|
+
promise,
|
|
311
|
+
resolve(value) {
|
|
312
|
+
if (promise.status !== "pending") return;
|
|
313
|
+
promise.status = "fulfilled";
|
|
314
|
+
promise.value = value;
|
|
315
|
+
nativeResolve(value);
|
|
316
|
+
},
|
|
317
|
+
reject(error) {
|
|
318
|
+
if (promise.status !== "pending") return;
|
|
319
|
+
promise.status = "rejected";
|
|
320
|
+
promise.reason = error;
|
|
321
|
+
nativeReject(error);
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
controllers.set(id, controlled);
|
|
325
|
+
return controlled;
|
|
326
|
+
}
|
|
327
|
+
__name(getControlledDeferred, "getControlledDeferred");
|
|
328
|
+
function readDeferredState(promise) {
|
|
329
|
+
const tracked = deferredStates.get(promise);
|
|
330
|
+
if (tracked && tracked.status !== "pending") return tracked;
|
|
331
|
+
const reactState = promise;
|
|
332
|
+
if (reactState.status === "fulfilled") {
|
|
333
|
+
return { status: "fulfilled", value: reactState.value };
|
|
334
|
+
}
|
|
335
|
+
if (reactState.status === "rejected") {
|
|
336
|
+
return { status: "rejected", reason: reactState.reason };
|
|
337
|
+
}
|
|
338
|
+
return tracked || { status: "pending" };
|
|
339
|
+
}
|
|
340
|
+
__name(readDeferredState, "readDeferredState");
|
|
341
|
+
function isDeferredMarker(value) {
|
|
342
|
+
return Boolean(
|
|
343
|
+
value && typeof value === "object" && Object.keys(value).length === 1 && typeof value[FARM_DEFERRED_MARKER] === "string"
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
__name(isDeferredMarker, "isDeferredMarker");
|
|
347
|
+
function assertNotCircular(value, ancestors) {
|
|
348
|
+
if (ancestors.has(value)) {
|
|
349
|
+
throw new TypeError("Deferred route data must be JSON-serializable and cannot be circular");
|
|
350
|
+
}
|
|
351
|
+
ancestors.add(value);
|
|
352
|
+
}
|
|
353
|
+
__name(assertNotCircular, "assertNotCircular");
|
|
354
|
+
function createDeferredPublicError() {
|
|
355
|
+
return {
|
|
356
|
+
code: FARM_DEFERRED_ERROR_CODE,
|
|
357
|
+
message: "Deferred route data failed to load"
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
__name(createDeferredPublicError, "createDeferredPublicError");
|
|
361
|
+
function createRejectedSettlement() {
|
|
362
|
+
return { status: "rejected", error: createDeferredPublicError() };
|
|
363
|
+
}
|
|
364
|
+
__name(createRejectedSettlement, "createRejectedSettlement");
|
|
365
|
+
function reportDeferredError(options, error, id) {
|
|
366
|
+
try {
|
|
367
|
+
options.onError?.(error, id);
|
|
368
|
+
} catch {
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
__name(reportDeferredError, "reportDeferredError");
|
|
372
|
+
function encodeDeferredMessage(message) {
|
|
373
|
+
return `${JSON.stringify(message)}
|
|
374
|
+
`;
|
|
375
|
+
}
|
|
376
|
+
__name(encodeDeferredMessage, "encodeDeferredMessage");
|
|
377
|
+
function parseDeferredMessage(line) {
|
|
378
|
+
try {
|
|
379
|
+
return JSON.parse(line);
|
|
380
|
+
} catch {
|
|
381
|
+
throw new DeferredDataError("Deferred route data response contains invalid JSON");
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
__name(parseDeferredMessage, "parseDeferredMessage");
|
|
385
|
+
function rejectPendingDeferred(controllers, message) {
|
|
386
|
+
for (const controller of controllers.values()) {
|
|
387
|
+
if (controller.promise.status === "pending") {
|
|
388
|
+
controller.reject(new DeferredDataError(message));
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
__name(rejectPendingDeferred, "rejectPendingDeferred");
|
|
393
|
+
|
|
394
|
+
export {
|
|
395
|
+
FARM_DEFERRED_CONTENT_TYPE,
|
|
396
|
+
FARM_DEFERRED_ERROR_CODE,
|
|
397
|
+
FARM_DEFERRED_BRAND,
|
|
398
|
+
DeferredDataError,
|
|
399
|
+
defer,
|
|
400
|
+
isDeferred,
|
|
401
|
+
prepareDeferredData,
|
|
402
|
+
snapshotDeferredData,
|
|
403
|
+
reviveDeferredData,
|
|
404
|
+
createDeferredDataResponse,
|
|
405
|
+
readDeferredDataResponse
|
|
406
|
+
};
|
|
407
|
+
//# sourceMappingURL=chunk-GS6K5OCM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/deferred.ts"],"sourcesContent":["export const FARM_DEFERRED_CONTENT_TYPE = \"application/x-farm-deferred+json\";\nexport const FARM_DEFERRED_ERROR_CODE = \"FARM_DEFERRED_DATA_ERROR\";\nexport const FARM_DEFERRED_BRAND: unique symbol = Symbol.for(\n \"farm.deferred\",\n) as typeof FARM_DEFERRED_BRAND;\n\nconst FARM_DEFERRED_MARKER = \"$farmDeferred\";\n\ntype DeferredState<T = unknown> =\n | { status: \"pending\" }\n | { status: \"fulfilled\"; value: T }\n | { status: \"rejected\"; reason: unknown };\n\nexport interface Deferred<T> extends Promise<T> {\n readonly [FARM_DEFERRED_BRAND]: true;\n}\n\nexport interface PreparedDeferredData {\n data: unknown;\n records: readonly DeferredRecord[];\n}\n\nexport interface DeferredRecord {\n id: string;\n promise: Deferred<unknown>;\n}\n\nexport type DeferredSettlement =\n | { status: \"fulfilled\"; value: unknown }\n | { status: \"rejected\"; error: { code: typeof FARM_DEFERRED_ERROR_CODE; message: string } };\n\nexport type DeferredSettlements = Record<string, DeferredSettlement>;\n\nexport interface DeferredDataResponseOptions {\n onError?: (error: unknown, id: string) => void;\n}\n\nexport class DeferredDataError extends Error {\n readonly name = \"DeferredDataError\";\n readonly code = FARM_DEFERRED_ERROR_CODE;\n\n constructor(message = \"Deferred route data failed to load\") {\n super(message);\n }\n}\n\nconst deferredStates = new WeakMap<object, DeferredState>();\n\nexport function defer<T>(value: PromiseLike<T>): Deferred<Awaited<T>> {\n if (isDeferred(value)) {\n return value as Deferred<Awaited<T>>;\n }\n\n const promise = Promise.resolve(value) as Deferred<Awaited<T>>;\n Object.defineProperty(promise, FARM_DEFERRED_BRAND, {\n configurable: false,\n enumerable: false,\n value: true,\n writable: false,\n });\n deferredStates.set(promise, { status: \"pending\" });\n promise.then(\n (resolved) => deferredStates.set(promise, { status: \"fulfilled\", value: resolved }),\n (reason) => deferredStates.set(promise, { status: \"rejected\", reason }),\n );\n return promise;\n}\n\nexport function isDeferred<T = unknown>(value: unknown): value is Deferred<T> {\n return Boolean(\n value &&\n (typeof value === \"object\" || typeof value === \"function\") &&\n (value as Record<PropertyKey, unknown>)[FARM_DEFERRED_BRAND] === true,\n );\n}\n\nexport function prepareDeferredData(value: unknown): PreparedDeferredData {\n const context = createEncodingContext();\n return {\n data: encodeDeferredValue(value, context, new WeakSet()),\n records: context.records,\n };\n}\n\nexport function snapshotDeferredData(records: readonly DeferredRecord[]): DeferredSettlements {\n const context = createEncodingContext(records);\n const settlements: DeferredSettlements = {};\n\n for (let index = 0; index < context.records.length; index++) {\n const record = context.records[index]!;\n const state = readDeferredState(record.promise);\n\n if (state.status === \"fulfilled\") {\n try {\n settlements[record.id] = {\n status: \"fulfilled\",\n value: encodeDeferredValue(state.value, context, new WeakSet()),\n };\n } catch {\n settlements[record.id] = createRejectedSettlement();\n }\n } else {\n settlements[record.id] = createRejectedSettlement();\n }\n }\n\n return settlements;\n}\n\nexport function reviveDeferredData<T>(value: T, settlements: DeferredSettlements): T {\n return reviveDeferredValue(value, new Map(), settlements) as T;\n}\n\nexport function createDeferredDataResponse(\n value: unknown,\n init: ResponseInit = {},\n options: DeferredDataResponseOptions = {},\n): Response {\n const context = createEncodingContext();\n const data = encodeDeferredValue(value, context, new WeakSet());\n const headers = new Headers(init.headers);\n\n if (context.records.length === 0) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n return new Response(JSON.stringify(data), { ...init, headers });\n }\n\n headers.set(\"Content-Type\", `${FARM_DEFERRED_CONTENT_TYPE}; charset=utf-8`);\n headers.set(\"Cache-Control\", headers.get(\"Cache-Control\") || \"private, max-age=0\");\n const initialLine = encodeDeferredMessage({ type: \"data\", data });\n const encoder = new TextEncoder();\n let cancelled = false;\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(encoder.encode(initialLine));\n let pending = context.records.length;\n\n const finishRecord = () => {\n pending--;\n if (!cancelled && pending === 0) controller.close();\n };\n\n const schedule = (record: DeferredRecord) => {\n record.promise\n .then(\n (resolved) => {\n if (cancelled) return;\n try {\n const previousLength = context.records.length;\n const encoded = encodeDeferredValue(resolved, context, new WeakSet());\n const nestedRecords = context.records.slice(previousLength);\n pending += nestedRecords.length;\n controller.enqueue(\n encoder.encode(\n encodeDeferredMessage({ type: \"resolve\", id: record.id, data: encoded }),\n ),\n );\n for (const nestedRecord of nestedRecords) schedule(nestedRecord);\n } catch (error) {\n reportDeferredError(options, error, record.id);\n controller.enqueue(\n encoder.encode(\n encodeDeferredMessage({\n type: \"reject\",\n id: record.id,\n error: createDeferredPublicError(),\n }),\n ),\n );\n }\n },\n (error) => {\n if (cancelled) return;\n reportDeferredError(options, error, record.id);\n controller.enqueue(\n encoder.encode(\n encodeDeferredMessage({\n type: \"reject\",\n id: record.id,\n error: createDeferredPublicError(),\n }),\n ),\n );\n },\n )\n .finally(finishRecord);\n };\n\n const initialRecords = context.records.slice();\n for (const record of initialRecords) schedule(record);\n },\n cancel() {\n cancelled = true;\n },\n });\n\n return new Response(stream, { ...init, headers });\n}\n\nexport async function readDeferredDataResponse<T>(response: Response): Promise<T> {\n const contentType = response.headers.get(\"Content-Type\") || \"\";\n if (!contentType.toLowerCase().startsWith(FARM_DEFERRED_CONTENT_TYPE)) {\n return (await response.json()) as T;\n }\n if (!response.body) {\n throw new DeferredDataError(\"Deferred route data response has no body\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const controllers = new Map<string, ControlledDeferred>();\n let buffer = \"\";\n let complete = false;\n\n const readLine = async (): Promise<string | undefined> => {\n while (true) {\n const newline = buffer.indexOf(\"\\n\");\n if (newline >= 0) {\n const line = buffer.slice(0, newline);\n buffer = buffer.slice(newline + 1);\n return line;\n }\n if (complete) {\n if (!buffer) return undefined;\n const line = buffer;\n buffer = \"\";\n return line;\n }\n\n const chunk = await reader.read();\n complete = chunk.done;\n if (chunk.value) buffer += decoder.decode(chunk.value, { stream: !chunk.done });\n if (chunk.done) buffer += decoder.decode();\n }\n };\n\n const firstLine = await readLine();\n if (!firstLine) {\n reader.releaseLock();\n throw new DeferredDataError(\"Deferred route data response is empty\");\n }\n\n const initial = parseDeferredMessage(firstLine);\n if (initial.type !== \"data\") {\n reader.releaseLock();\n throw new DeferredDataError(\"Deferred route data response is invalid\");\n }\n const data = reviveDeferredValue(initial.data, controllers) as T;\n\n void (async () => {\n try {\n for (let line = await readLine(); line !== undefined; line = await readLine()) {\n if (!line) continue;\n const message = parseDeferredMessage(line);\n if (message.type === \"resolve\") {\n const controller = getControlledDeferred(message.id, controllers);\n controller.resolve(reviveDeferredValue(message.data, controllers));\n } else if (message.type === \"reject\") {\n getControlledDeferred(message.id, controllers).reject(\n new DeferredDataError(message.error?.message),\n );\n }\n }\n rejectPendingDeferred(controllers, \"Deferred route data stream ended before completion\");\n } catch {\n rejectPendingDeferred(controllers, \"Deferred route data stream could not be read\");\n } finally {\n reader.releaseLock();\n }\n })();\n\n return data;\n}\n\ninterface EncodingContext {\n records: DeferredRecord[];\n ids: Map<Deferred<unknown>, string>;\n nextId: number;\n}\n\ninterface ControlledDeferred {\n promise: Promise<unknown> & {\n status?: \"pending\" | \"fulfilled\" | \"rejected\";\n value?: unknown;\n reason?: unknown;\n };\n resolve(value: unknown): void;\n reject(error: unknown): void;\n}\n\nfunction createEncodingContext(records: readonly DeferredRecord[] = []): EncodingContext {\n return {\n records: [...records],\n ids: new Map(records.map((record) => [record.promise, record.id])),\n nextId: records.reduce((highest, record) => {\n const value = Number(record.id.replace(/^d/, \"\"));\n return Number.isFinite(value) ? Math.max(highest, value + 1) : highest;\n }, records.length),\n };\n}\n\nfunction encodeDeferredValue(\n value: unknown,\n context: EncodingContext,\n ancestors: WeakSet<object>,\n): unknown {\n if (isDeferred(value)) {\n let id = context.ids.get(value);\n if (!id) {\n id = `d${context.nextId++}`;\n context.ids.set(value, id);\n context.records.push({ id, promise: value as Deferred<unknown> });\n }\n return { [FARM_DEFERRED_MARKER]: id };\n }\n if (!value || typeof value !== \"object\") return value;\n if (Array.isArray(value)) {\n assertNotCircular(value, ancestors);\n const output = value.map((item) => encodeDeferredValue(item, context, ancestors));\n ancestors.delete(value);\n return output;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return value;\n\n assertNotCircular(value, ancestors);\n const output: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n output[key] = encodeDeferredValue(item, context, ancestors);\n }\n ancestors.delete(value);\n return output;\n}\n\nfunction reviveDeferredValue(\n value: unknown,\n controllers: Map<string, ControlledDeferred>,\n settlements?: DeferredSettlements,\n applyingSettlements = new Set<string>(),\n): unknown {\n if (isDeferredMarker(value)) {\n const id = value[FARM_DEFERRED_MARKER];\n const controller = getControlledDeferred(id, controllers);\n const settlement = settlements?.[id];\n if (settlement && controller.promise.status === \"pending\") {\n if (applyingSettlements.has(id)) return controller.promise;\n applyingSettlements.add(id);\n if (settlement.status === \"fulfilled\") {\n controller.resolve(\n reviveDeferredValue(settlement.value, controllers, settlements, applyingSettlements),\n );\n } else {\n controller.reject(new DeferredDataError(settlement.error.message));\n }\n applyingSettlements.delete(id);\n } else if (settlements && controller.promise.status === \"pending\") {\n controller.reject(new DeferredDataError(\"Deferred route data was not resolved\"));\n }\n return controller.promise;\n }\n if (Array.isArray(value)) {\n return value.map((item) =>\n reviveDeferredValue(item, controllers, settlements, applyingSettlements),\n );\n }\n if (!value || typeof value !== \"object\") return value;\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return value;\n const output: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n output[key] = reviveDeferredValue(item, controllers, settlements, applyingSettlements);\n }\n return output;\n}\n\nfunction getControlledDeferred(\n id: string,\n controllers: Map<string, ControlledDeferred>,\n): ControlledDeferred {\n const existing = controllers.get(id);\n if (existing) return existing;\n\n let nativeResolve!: (value: unknown) => void;\n let nativeReject!: (error: unknown) => void;\n const promise = new Promise<unknown>((resolve, reject) => {\n nativeResolve = resolve;\n nativeReject = reject;\n }) as ControlledDeferred[\"promise\"];\n promise.status = \"pending\";\n promise.catch(() => undefined);\n\n const controlled: ControlledDeferred = {\n promise,\n resolve(value) {\n if (promise.status !== \"pending\") return;\n promise.status = \"fulfilled\";\n promise.value = value;\n nativeResolve(value);\n },\n reject(error) {\n if (promise.status !== \"pending\") return;\n promise.status = \"rejected\";\n promise.reason = error;\n nativeReject(error);\n },\n };\n controllers.set(id, controlled);\n return controlled;\n}\n\nfunction readDeferredState(promise: Deferred<unknown>): DeferredState {\n const tracked = deferredStates.get(promise);\n if (tracked && tracked.status !== \"pending\") return tracked;\n\n const reactState = promise as Deferred<unknown> & {\n status?: string;\n value?: unknown;\n reason?: unknown;\n };\n if (reactState.status === \"fulfilled\") {\n return { status: \"fulfilled\", value: reactState.value };\n }\n if (reactState.status === \"rejected\") {\n return { status: \"rejected\", reason: reactState.reason };\n }\n return tracked || { status: \"pending\" };\n}\n\nfunction isDeferredMarker(value: unknown): value is { [FARM_DEFERRED_MARKER]: string } {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n Object.keys(value).length === 1 &&\n typeof (value as Record<string, unknown>)[FARM_DEFERRED_MARKER] === \"string\",\n );\n}\n\nfunction assertNotCircular(value: object, ancestors: WeakSet<object>): void {\n if (ancestors.has(value)) {\n throw new TypeError(\"Deferred route data must be JSON-serializable and cannot be circular\");\n }\n ancestors.add(value);\n}\n\nfunction createDeferredPublicError() {\n return {\n code: FARM_DEFERRED_ERROR_CODE,\n message: \"Deferred route data failed to load\",\n } as const;\n}\n\nfunction createRejectedSettlement(): DeferredSettlement {\n return { status: \"rejected\", error: createDeferredPublicError() };\n}\n\nfunction reportDeferredError(\n options: DeferredDataResponseOptions,\n error: unknown,\n id: string,\n): void {\n try {\n options.onError?.(error, id);\n } catch {\n // Error reporting must not break the response stream.\n }\n}\n\nfunction encodeDeferredMessage(message: Record<string, unknown>): string {\n return `${JSON.stringify(message)}\\n`;\n}\n\nfunction parseDeferredMessage(line: string): any {\n try {\n return JSON.parse(line);\n } catch {\n throw new DeferredDataError(\"Deferred route data response contains invalid JSON\");\n }\n}\n\nfunction rejectPendingDeferred(\n controllers: Map<string, ControlledDeferred>,\n message: string,\n): void {\n for (const controller of controllers.values()) {\n if (controller.promise.status === \"pending\") {\n controller.reject(new DeferredDataError(message));\n }\n }\n}\n"],"mappings":"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","names":["output"]}
|