@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
package/dist/image.cjs
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
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/image.tsx
|
|
32
|
+
var image_exports = {};
|
|
33
|
+
__export(image_exports, {
|
|
34
|
+
Image: () => Image,
|
|
35
|
+
default: () => image_default,
|
|
36
|
+
getImageProps: () => getImageProps
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(image_exports);
|
|
39
|
+
var import_react = require("react");
|
|
40
|
+
var ReactDOM = __toESM(require("react-dom"));
|
|
41
|
+
|
|
42
|
+
// src/image-config.ts
|
|
43
|
+
var DEFAULT_FARM_IMAGE_PATH = "/_farm/image";
|
|
44
|
+
var DEFAULT_FARM_IMAGE_DEVICE_SIZES = [
|
|
45
|
+
640,
|
|
46
|
+
750,
|
|
47
|
+
828,
|
|
48
|
+
1080,
|
|
49
|
+
1200,
|
|
50
|
+
1920,
|
|
51
|
+
2048,
|
|
52
|
+
3840
|
|
53
|
+
];
|
|
54
|
+
var DEFAULT_FARM_IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384];
|
|
55
|
+
var DEFAULT_FARM_IMAGE_QUALITIES = [75];
|
|
56
|
+
var DEFAULT_FARM_IMAGE_FORMATS = ["image/webp"];
|
|
57
|
+
|
|
58
|
+
// src/image.tsx
|
|
59
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
60
|
+
var FALLBACK_CONFIG = {
|
|
61
|
+
provider: "auto",
|
|
62
|
+
path: DEFAULT_FARM_IMAGE_PATH,
|
|
63
|
+
deviceSizes: DEFAULT_FARM_IMAGE_DEVICE_SIZES,
|
|
64
|
+
imageSizes: DEFAULT_FARM_IMAGE_SIZES,
|
|
65
|
+
qualities: DEFAULT_FARM_IMAGE_QUALITIES,
|
|
66
|
+
formats: DEFAULT_FARM_IMAGE_FORMATS
|
|
67
|
+
};
|
|
68
|
+
function getImageConfig() {
|
|
69
|
+
return typeof __FARM_IMAGE_CONFIG__ !== "undefined" && __FARM_IMAGE_CONFIG__ ? __FARM_IMAGE_CONFIG__ : FALLBACK_CONFIG;
|
|
70
|
+
}
|
|
71
|
+
__name(getImageConfig, "getImageConfig");
|
|
72
|
+
function defaultImageLoader(config) {
|
|
73
|
+
return ({ src, width, quality }) => {
|
|
74
|
+
const query = new URLSearchParams({
|
|
75
|
+
url: src,
|
|
76
|
+
w: String(width),
|
|
77
|
+
q: String(quality)
|
|
78
|
+
});
|
|
79
|
+
return `${config.path}?${query}`;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
__name(defaultImageLoader, "defaultImageLoader");
|
|
83
|
+
function getClosestQuality(quality, allowed) {
|
|
84
|
+
const requested = quality ?? 75;
|
|
85
|
+
return allowed.reduce(
|
|
86
|
+
(closest, candidate) => Math.abs(candidate - requested) < Math.abs(closest - requested) ? candidate : closest
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
__name(getClosestQuality, "getClosestQuality");
|
|
90
|
+
function getCandidateWidths(config, width, sizes, fill) {
|
|
91
|
+
const allSizes = [.../* @__PURE__ */ new Set([...config.imageSizes, ...config.deviceSizes])].sort(
|
|
92
|
+
(left, right) => left - right
|
|
93
|
+
);
|
|
94
|
+
if (fill || sizes) {
|
|
95
|
+
const viewportPercentages = [...sizes?.matchAll(/(^|\s)(\d{1,3})vw/g) ?? []].map(
|
|
96
|
+
(match) => Number(match[2])
|
|
97
|
+
);
|
|
98
|
+
if (viewportPercentages.length > 0) {
|
|
99
|
+
const smallestRatio = Math.min(...viewportPercentages) / 100;
|
|
100
|
+
const minimum = config.deviceSizes[0] * smallestRatio;
|
|
101
|
+
return { widths: allSizes.filter((candidate) => candidate >= minimum), descriptor: "w" };
|
|
102
|
+
}
|
|
103
|
+
return { widths: allSizes, descriptor: "w" };
|
|
104
|
+
}
|
|
105
|
+
if (!width) return { widths: config.deviceSizes.slice(), descriptor: "w" };
|
|
106
|
+
const requested = [width, width * 2];
|
|
107
|
+
const widths = requested.map(
|
|
108
|
+
(target) => allSizes.find((candidate) => candidate >= target) ?? allSizes.at(-1)
|
|
109
|
+
);
|
|
110
|
+
return { widths: [...new Set(widths)], descriptor: "x" };
|
|
111
|
+
}
|
|
112
|
+
__name(getCandidateWidths, "getCandidateWidths");
|
|
113
|
+
function isStaticImageData(value) {
|
|
114
|
+
return typeof value === "object" && value !== null && typeof value.src === "string";
|
|
115
|
+
}
|
|
116
|
+
__name(isStaticImageData, "isStaticImageData");
|
|
117
|
+
function shouldSkipOptimization(src, config) {
|
|
118
|
+
return config.provider === "none" || src.startsWith("data:") || src.startsWith("blob:") || /\.svg(?:$|[?#])/i.test(src);
|
|
119
|
+
}
|
|
120
|
+
__name(shouldSkipOptimization, "shouldSkipOptimization");
|
|
121
|
+
function getImageProps(input) {
|
|
122
|
+
const {
|
|
123
|
+
src: srcInput,
|
|
124
|
+
alt,
|
|
125
|
+
width: widthInput,
|
|
126
|
+
height: heightInput,
|
|
127
|
+
fill = false,
|
|
128
|
+
quality: qualityInput,
|
|
129
|
+
sizes: sizesInput,
|
|
130
|
+
loading,
|
|
131
|
+
preload: preload2 = false,
|
|
132
|
+
placeholder = "empty",
|
|
133
|
+
blurDataURL: blurDataURLInput,
|
|
134
|
+
unoptimized: unoptimizedInput = false,
|
|
135
|
+
loader: loaderInput,
|
|
136
|
+
style,
|
|
137
|
+
...rest
|
|
138
|
+
} = input;
|
|
139
|
+
const config = getImageConfig();
|
|
140
|
+
const staticImage = isStaticImageData(srcInput) ? srcInput : void 0;
|
|
141
|
+
const src = typeof srcInput === "string" ? srcInput : srcInput.src;
|
|
142
|
+
const width = Number(widthInput ?? staticImage?.width) || void 0;
|
|
143
|
+
const height = Number(heightInput ?? staticImage?.height) || void 0;
|
|
144
|
+
const blurDataURL = blurDataURLInput ?? staticImage?.blurDataURL;
|
|
145
|
+
if (!fill && (!width || !height)) {
|
|
146
|
+
throw new TypeError(
|
|
147
|
+
"Farm Image requires width and height unless src is a static import or fill is enabled"
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
if (fill && (widthInput !== void 0 || heightInput !== void 0)) {
|
|
151
|
+
throw new TypeError("Farm Image cannot use width or height together with fill");
|
|
152
|
+
}
|
|
153
|
+
if (placeholder === "blur" && !blurDataURL) {
|
|
154
|
+
throw new TypeError("Farm Image placeholder=blur requires a static import or blurDataURL");
|
|
155
|
+
}
|
|
156
|
+
const unoptimized = unoptimizedInput || shouldSkipOptimization(src, config);
|
|
157
|
+
const quality = getClosestQuality(qualityInput, config.qualities);
|
|
158
|
+
const loader = loaderInput ?? defaultImageLoader(config);
|
|
159
|
+
const sizes = sizesInput ?? (fill ? "100vw" : void 0);
|
|
160
|
+
const candidates = getCandidateWidths(config, width, sizes, fill);
|
|
161
|
+
const srcSet = unoptimized ? void 0 : candidates.widths.map((candidate, index) => {
|
|
162
|
+
const descriptor = candidates.descriptor === "w" ? `${candidate}w` : `${index + 1}x`;
|
|
163
|
+
return `${loader({ src, width: candidate, quality })} ${descriptor}`;
|
|
164
|
+
}).join(", ");
|
|
165
|
+
const renderedSrc = unoptimized ? src : loader({ src, width: candidates.widths.at(-1) ?? width ?? config.deviceSizes[0], quality });
|
|
166
|
+
const fillStyle = fill ? { position: "absolute", inset: 0, width: "100%", height: "100%" } : void 0;
|
|
167
|
+
const placeholderStyle = placeholder === "blur" ? {
|
|
168
|
+
backgroundImage: `url("${blurDataURL}")`,
|
|
169
|
+
backgroundPosition: "50% 50%",
|
|
170
|
+
backgroundRepeat: "no-repeat",
|
|
171
|
+
backgroundSize: "cover"
|
|
172
|
+
} : void 0;
|
|
173
|
+
return {
|
|
174
|
+
props: {
|
|
175
|
+
...rest,
|
|
176
|
+
alt,
|
|
177
|
+
src: renderedSrc,
|
|
178
|
+
srcSet,
|
|
179
|
+
sizes,
|
|
180
|
+
width: fill ? void 0 : width,
|
|
181
|
+
height: fill ? void 0 : height,
|
|
182
|
+
loading: preload2 ? "eager" : loading ?? "lazy",
|
|
183
|
+
fetchPriority: preload2 ? "high" : rest.fetchPriority,
|
|
184
|
+
decoding: rest.decoding ?? "async",
|
|
185
|
+
style: { ...fillStyle, ...placeholderStyle, ...style }
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
__name(getImageProps, "getImageProps");
|
|
190
|
+
var Image = (0, import_react.forwardRef)(/* @__PURE__ */ __name(function Image2(input, ref) {
|
|
191
|
+
const { props } = getImageProps(input);
|
|
192
|
+
if (input.preload && typeof ReactDOM.preload === "function") {
|
|
193
|
+
ReactDOM.preload(props.src, {
|
|
194
|
+
as: "image",
|
|
195
|
+
imageSrcSet: props.srcSet,
|
|
196
|
+
imageSizes: props.sizes,
|
|
197
|
+
fetchPriority: "high"
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", { ...props, ref });
|
|
201
|
+
}, "Image"));
|
|
202
|
+
Image.displayName = "Image";
|
|
203
|
+
var image_default = Image;
|
|
204
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
205
|
+
0 && (module.exports = {
|
|
206
|
+
Image,
|
|
207
|
+
getImageProps
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=image.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/image.tsx","../src/image-config.ts"],"sourcesContent":["import { forwardRef, type CSSProperties, type ImgHTMLAttributes, type SyntheticEvent } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport {\n DEFAULT_FARM_IMAGE_DEVICE_SIZES,\n DEFAULT_FARM_IMAGE_FORMATS,\n DEFAULT_FARM_IMAGE_PATH,\n DEFAULT_FARM_IMAGE_QUALITIES,\n DEFAULT_FARM_IMAGE_SIZES,\n type PublicFarmImageConfig,\n} from \"./image-config\";\n\ndeclare const __FARM_IMAGE_CONFIG__: PublicFarmImageConfig | undefined;\n\nexport interface StaticImageData {\n src: string;\n width: number;\n height: number;\n blurDataURL?: string;\n}\n\nexport interface FarmImageLoaderProps {\n src: string;\n width: number;\n quality: number;\n}\n\nexport type FarmImageLoader = (props: FarmImageLoaderProps) => string;\n\nexport interface ImageProps extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n \"src\" | \"srcSet\" | \"width\" | \"height\" | \"loading\" | \"placeholder\"\n> {\n src: string | StaticImageData;\n alt: string;\n width?: number | `${number}`;\n height?: number | `${number}`;\n fill?: boolean;\n quality?: number;\n sizes?: string;\n loading?: \"eager\" | \"lazy\";\n preload?: boolean;\n placeholder?: \"empty\" | \"blur\";\n blurDataURL?: string;\n unoptimized?: boolean;\n loader?: FarmImageLoader;\n onLoad?: (event: SyntheticEvent<HTMLImageElement>) => void;\n}\n\nexport interface ImagePropsResult {\n props: ImgHTMLAttributes<HTMLImageElement>;\n}\n\nconst FALLBACK_CONFIG: PublicFarmImageConfig = {\n provider: \"auto\",\n path: DEFAULT_FARM_IMAGE_PATH,\n deviceSizes: DEFAULT_FARM_IMAGE_DEVICE_SIZES,\n imageSizes: DEFAULT_FARM_IMAGE_SIZES,\n qualities: DEFAULT_FARM_IMAGE_QUALITIES,\n formats: DEFAULT_FARM_IMAGE_FORMATS,\n};\n\nfunction getImageConfig(): PublicFarmImageConfig {\n return typeof __FARM_IMAGE_CONFIG__ !== \"undefined\" && __FARM_IMAGE_CONFIG__\n ? __FARM_IMAGE_CONFIG__\n : FALLBACK_CONFIG;\n}\n\nfunction defaultImageLoader(config: PublicFarmImageConfig): FarmImageLoader {\n return ({ src, width, quality }) => {\n const query = new URLSearchParams({\n url: src,\n w: String(width),\n q: String(quality),\n });\n return `${config.path}?${query}`;\n };\n}\n\nfunction getClosestQuality(quality: number | undefined, allowed: readonly number[]): number {\n const requested = quality ?? 75;\n return allowed.reduce((closest, candidate) =>\n Math.abs(candidate - requested) < Math.abs(closest - requested) ? candidate : closest,\n );\n}\n\nfunction getCandidateWidths(\n config: PublicFarmImageConfig,\n width: number | undefined,\n sizes: string | undefined,\n fill: boolean,\n): { widths: number[]; descriptor: \"w\" | \"x\" } {\n const allSizes = [...new Set([...config.imageSizes, ...config.deviceSizes])].sort(\n (left, right) => left - right,\n );\n\n if (fill || sizes) {\n const viewportPercentages = [...(sizes?.matchAll(/(^|\\s)(\\d{1,3})vw/g) ?? [])].map((match) =>\n Number(match[2]),\n );\n if (viewportPercentages.length > 0) {\n const smallestRatio = Math.min(...viewportPercentages) / 100;\n const minimum = config.deviceSizes[0] * smallestRatio;\n return { widths: allSizes.filter((candidate) => candidate >= minimum), descriptor: \"w\" };\n }\n return { widths: allSizes, descriptor: \"w\" };\n }\n\n if (!width) return { widths: config.deviceSizes.slice(), descriptor: \"w\" };\n\n const requested = [width, width * 2];\n const widths = requested.map(\n (target) => allSizes.find((candidate) => candidate >= target) ?? allSizes.at(-1)!,\n );\n return { widths: [...new Set(widths)], descriptor: \"x\" };\n}\n\nfunction isStaticImageData(value: ImageProps[\"src\"]): value is StaticImageData {\n return typeof value === \"object\" && value !== null && typeof value.src === \"string\";\n}\n\nfunction shouldSkipOptimization(src: string, config: PublicFarmImageConfig): boolean {\n return (\n config.provider === \"none\" ||\n src.startsWith(\"data:\") ||\n src.startsWith(\"blob:\") ||\n /\\.svg(?:$|[?#])/i.test(src)\n );\n}\n\nexport function getImageProps(input: ImageProps): ImagePropsResult {\n const {\n src: srcInput,\n alt,\n width: widthInput,\n height: heightInput,\n fill = false,\n quality: qualityInput,\n sizes: sizesInput,\n loading,\n preload = false,\n placeholder = \"empty\",\n blurDataURL: blurDataURLInput,\n unoptimized: unoptimizedInput = false,\n loader: loaderInput,\n style,\n ...rest\n } = input;\n const config = getImageConfig();\n const staticImage = isStaticImageData(srcInput) ? srcInput : undefined;\n const src = typeof srcInput === \"string\" ? srcInput : srcInput.src;\n const width = Number(widthInput ?? staticImage?.width) || undefined;\n const height = Number(heightInput ?? staticImage?.height) || undefined;\n const blurDataURL = blurDataURLInput ?? staticImage?.blurDataURL;\n\n if (!fill && (!width || !height)) {\n throw new TypeError(\n \"Farm Image requires width and height unless src is a static import or fill is enabled\",\n );\n }\n if (fill && (widthInput !== undefined || heightInput !== undefined)) {\n throw new TypeError(\"Farm Image cannot use width or height together with fill\");\n }\n if (placeholder === \"blur\" && !blurDataURL) {\n throw new TypeError(\"Farm Image placeholder=blur requires a static import or blurDataURL\");\n }\n\n const unoptimized = unoptimizedInput || shouldSkipOptimization(src, config);\n const quality = getClosestQuality(qualityInput, config.qualities);\n const loader = loaderInput ?? defaultImageLoader(config);\n const sizes = sizesInput ?? (fill ? \"100vw\" : undefined);\n const candidates = getCandidateWidths(config, width, sizes, fill);\n const srcSet = unoptimized\n ? undefined\n : candidates.widths\n .map((candidate, index) => {\n const descriptor = candidates.descriptor === \"w\" ? `${candidate}w` : `${index + 1}x`;\n return `${loader({ src, width: candidate, quality })} ${descriptor}`;\n })\n .join(\", \");\n const renderedSrc = unoptimized\n ? src\n : loader({ src, width: candidates.widths.at(-1) ?? width ?? config.deviceSizes[0], quality });\n const fillStyle: CSSProperties | undefined = fill\n ? { position: \"absolute\", inset: 0, width: \"100%\", height: \"100%\" }\n : undefined;\n const placeholderStyle: CSSProperties | undefined =\n placeholder === \"blur\"\n ? {\n backgroundImage: `url(\"${blurDataURL}\")`,\n backgroundPosition: \"50% 50%\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\",\n }\n : undefined;\n\n return {\n props: {\n ...rest,\n alt,\n src: renderedSrc,\n srcSet,\n sizes,\n width: fill ? undefined : width,\n height: fill ? undefined : height,\n loading: preload ? \"eager\" : (loading ?? \"lazy\"),\n fetchPriority: preload ? \"high\" : rest.fetchPriority,\n decoding: rest.decoding ?? \"async\",\n style: { ...fillStyle, ...placeholderStyle, ...style },\n },\n };\n}\n\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(function Image(input, ref) {\n const { props } = getImageProps(input);\n\n if (input.preload && typeof (ReactDOM as any).preload === \"function\") {\n (ReactDOM as any).preload(props.src as string, {\n as: \"image\",\n imageSrcSet: props.srcSet,\n imageSizes: props.sizes,\n fetchPriority: \"high\",\n });\n }\n\n return <img {...props} ref={ref} />;\n});\n\nImage.displayName = \"Image\";\n\nexport default Image;\n\nexport type {\n FarmImageConfig,\n FarmImageFormat,\n FarmImageLocalPattern,\n FarmImageProvider,\n FarmImageRemotePattern,\n ResolvedFarmImageConfig,\n} from \"./image-config\";\n","export const DEFAULT_FARM_IMAGE_PATH = \"/_farm/image\";\nexport const DEFAULT_FARM_IMAGE_DEVICE_SIZES = [\n 640, 750, 828, 1080, 1200, 1920, 2048, 3840,\n] as const;\nexport const DEFAULT_FARM_IMAGE_SIZES = [16, 32, 48, 64, 96, 128, 256, 384] as const;\nexport const DEFAULT_FARM_IMAGE_QUALITIES = [75] as const;\nexport const DEFAULT_FARM_IMAGE_FORMATS = [\"image/webp\"] as const;\n\nexport type FarmImageFormat = \"image/avif\" | \"image/webp\";\nexport type FarmImageProvider = \"auto\" | \"node\" | \"cloudflare\" | \"none\";\n\nexport interface FarmImageRemotePattern {\n protocol?: \"http\" | \"https\";\n hostname: string;\n port?: string;\n pathname?: string;\n search?: string;\n}\n\nexport interface FarmImageLocalPattern {\n pathname: string;\n search?: string;\n}\n\nexport interface FarmImageConfig {\n /** Runtime optimizer. Auto selects Cloudflare Images on Cloudflare and Sharp elsewhere. */\n provider?: FarmImageProvider;\n /** Public optimizer endpoint. */\n path?: string;\n /** @deprecated Prefer remotePatterns, which also restricts protocol, path, port, and query. */\n domains?: readonly string[];\n remotePatterns?: readonly FarmImageRemotePattern[];\n localPatterns?: readonly FarmImageLocalPattern[];\n deviceSizes?: readonly number[];\n imageSizes?: readonly number[];\n qualities?: readonly number[];\n formats?: readonly FarmImageFormat[];\n minimumCacheTTL?: number;\n maximumResponseBody?: number | string;\n maximumRedirects?: number;\n dangerouslyAllowSVG?: boolean;\n dangerouslyAllowLocalIP?: boolean;\n}\n\nexport interface ResolvedFarmImageConfig {\n provider: FarmImageProvider;\n path: string;\n domains: readonly string[];\n remotePatterns: readonly FarmImageRemotePattern[];\n localPatterns: readonly FarmImageLocalPattern[];\n deviceSizes: readonly number[];\n imageSizes: readonly number[];\n qualities: readonly number[];\n formats: readonly FarmImageFormat[];\n minimumCacheTTL: number;\n maximumResponseBody: number;\n maximumRedirects: number;\n dangerouslyAllowSVG: boolean;\n dangerouslyAllowLocalIP: boolean;\n}\n\nexport type PublicFarmImageConfig = Pick<\n ResolvedFarmImageConfig,\n \"provider\" | \"path\" | \"deviceSizes\" | \"imageSizes\" | \"qualities\" | \"formats\"\n>;\n\nconst SIZE_UNITS: Record<string, number> = {\n b: 1,\n kb: 1_000,\n mb: 1_000_000,\n gb: 1_000_000_000,\n kib: 1_024,\n mib: 1_048_576,\n gib: 1_073_741_824,\n};\n\nexport function resolveFarmImageConfig(\n config: FarmImageConfig | undefined,\n): ResolvedFarmImageConfig {\n const path = normalizeImagePath(config?.path ?? DEFAULT_FARM_IMAGE_PATH);\n const deviceSizes = normalizeIntegerList(\n config?.deviceSizes ?? DEFAULT_FARM_IMAGE_DEVICE_SIZES,\n \"images.deviceSizes\",\n );\n const imageSizes = normalizeIntegerList(\n config?.imageSizes ?? DEFAULT_FARM_IMAGE_SIZES,\n \"images.imageSizes\",\n );\n const qualities = normalizeIntegerList(\n config?.qualities ?? DEFAULT_FARM_IMAGE_QUALITIES,\n \"images.qualities\",\n 100,\n );\n const formats = [...new Set(config?.formats ?? DEFAULT_FARM_IMAGE_FORMATS)];\n\n if (formats.some((format) => format !== \"image/avif\" && format !== \"image/webp\")) {\n throw new TypeError('images.formats only supports \"image/avif\" and \"image/webp\"');\n }\n\n const minimumCacheTTL = normalizeNonNegativeInteger(\n config?.minimumCacheTTL ?? 60,\n \"images.minimumCacheTTL\",\n );\n const maximumRedirects = normalizeNonNegativeInteger(\n config?.maximumRedirects ?? 3,\n \"images.maximumRedirects\",\n );\n\n return Object.freeze({\n provider: config?.provider ?? \"auto\",\n path,\n domains: Object.freeze([\n ...new Set(\n (config?.domains ?? []).map((domain) => domain.trim().toLowerCase()).filter(Boolean),\n ),\n ]),\n remotePatterns: Object.freeze(\n (config?.remotePatterns ?? []).map((pattern) => normalizeRemotePattern(pattern)),\n ),\n localPatterns: Object.freeze(\n (config?.localPatterns ?? [{ pathname: \"/**\" }]).map((pattern) =>\n normalizeLocalPattern(pattern),\n ),\n ),\n deviceSizes: Object.freeze(deviceSizes),\n imageSizes: Object.freeze(imageSizes),\n qualities: Object.freeze(qualities),\n formats: Object.freeze(formats),\n minimumCacheTTL,\n maximumResponseBody: parseSize(\n config?.maximumResponseBody ?? \"10mb\",\n \"images.maximumResponseBody\",\n ),\n maximumRedirects,\n dangerouslyAllowSVG: config?.dangerouslyAllowSVG ?? false,\n dangerouslyAllowLocalIP: config?.dangerouslyAllowLocalIP ?? false,\n });\n}\n\nexport function getPublicFarmImageConfig(\n config: Pick<ResolvedFarmImageConfig, keyof PublicFarmImageConfig>,\n): PublicFarmImageConfig {\n return {\n provider: config.provider,\n path: config.path,\n deviceSizes: config.deviceSizes,\n imageSizes: config.imageSizes,\n qualities: config.qualities,\n formats: config.formats,\n };\n}\n\nfunction normalizeImagePath(value: string): string {\n const path = value.trim().replace(/\\/+$/, \"\") || \"/\";\n if (!path.startsWith(\"/\") || path.includes(\"?\") || path.includes(\"#\")) {\n throw new TypeError(\"images.path must be an absolute pathname without a query or hash\");\n }\n return path;\n}\n\nfunction normalizeIntegerList(values: readonly number[], name: string, max?: number): number[] {\n if (values.length === 0) {\n throw new TypeError(`${name} must contain at least one value`);\n }\n\n const normalized = [...new Set(values)].sort((left, right) => left - right);\n for (const value of normalized) {\n if (!Number.isSafeInteger(value) || value <= 0 || (max !== undefined && value > max)) {\n throw new TypeError(\n `${name} must contain positive integers${max ? ` no greater than ${max}` : \"\"}`,\n );\n }\n }\n return normalized;\n}\n\nfunction normalizeNonNegativeInteger(value: number, name: string): number {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new TypeError(`${name} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction parseSize(value: number | string, name: string): number {\n if (typeof value === \"number\") {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(`${name} must be a positive safe integer`);\n }\n return value;\n }\n\n const match = value\n .trim()\n .toLowerCase()\n .match(/^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb|kib|mib|gib)$/);\n if (!match) {\n throw new TypeError(`${name} must be bytes or a size string such as \"5mb\"`);\n }\n\n const bytes = Number(match[1]) * SIZE_UNITS[match[2]];\n if (!Number.isSafeInteger(bytes) || bytes <= 0) {\n throw new TypeError(`${name} must resolve to a positive safe integer`);\n }\n return bytes;\n}\n\nfunction normalizeRemotePattern(pattern: FarmImageRemotePattern): FarmImageRemotePattern {\n const hostname = pattern.hostname.trim().toLowerCase();\n if (!hostname || hostname.includes(\"/\") || hostname.includes(\":\")) {\n throw new TypeError(\"images.remotePatterns[].hostname must be a hostname or wildcard hostname\");\n }\n if (pattern.pathname && !pattern.pathname.startsWith(\"/\")) {\n throw new TypeError(\"images.remotePatterns[].pathname must start with /\");\n }\n if (pattern.search && !pattern.search.startsWith(\"?\")) {\n throw new TypeError(\"images.remotePatterns[].search must start with ?\");\n }\n return Object.freeze({ ...pattern, hostname });\n}\n\nfunction normalizeLocalPattern(pattern: FarmImageLocalPattern): FarmImageLocalPattern {\n if (!pattern.pathname.startsWith(\"/\")) {\n throw new TypeError(\"images.localPatterns[].pathname must start with /\");\n }\n if (pattern.search && !pattern.search.startsWith(\"?\")) {\n throw new TypeError(\"images.localPatterns[].search must start with ?\");\n }\n return Object.freeze({ ...pattern });\n}\n"],"mappings":"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","names":["preload","Image"]}
|
package/dist/image.d.mts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ImgHTMLAttributes, SyntheticEvent } from 'react';
|
|
3
|
+
export { F as FarmImageConfig, a as FarmImageFormat, b as FarmImageLocalPattern, c as FarmImageProvider, d as FarmImageRemotePattern, R as ResolvedFarmImageConfig } from './image-config-Duob7wER.mjs';
|
|
4
|
+
|
|
5
|
+
interface StaticImageData {
|
|
6
|
+
src: string;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
blurDataURL?: string;
|
|
10
|
+
}
|
|
11
|
+
interface FarmImageLoaderProps {
|
|
12
|
+
src: string;
|
|
13
|
+
width: number;
|
|
14
|
+
quality: number;
|
|
15
|
+
}
|
|
16
|
+
type FarmImageLoader = (props: FarmImageLoaderProps) => string;
|
|
17
|
+
interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src" | "srcSet" | "width" | "height" | "loading" | "placeholder"> {
|
|
18
|
+
src: string | StaticImageData;
|
|
19
|
+
alt: string;
|
|
20
|
+
width?: number | `${number}`;
|
|
21
|
+
height?: number | `${number}`;
|
|
22
|
+
fill?: boolean;
|
|
23
|
+
quality?: number;
|
|
24
|
+
sizes?: string;
|
|
25
|
+
loading?: "eager" | "lazy";
|
|
26
|
+
preload?: boolean;
|
|
27
|
+
placeholder?: "empty" | "blur";
|
|
28
|
+
blurDataURL?: string;
|
|
29
|
+
unoptimized?: boolean;
|
|
30
|
+
loader?: FarmImageLoader;
|
|
31
|
+
onLoad?: (event: SyntheticEvent<HTMLImageElement>) => void;
|
|
32
|
+
}
|
|
33
|
+
interface ImagePropsResult {
|
|
34
|
+
props: ImgHTMLAttributes<HTMLImageElement>;
|
|
35
|
+
}
|
|
36
|
+
declare function getImageProps(input: ImageProps): ImagePropsResult;
|
|
37
|
+
declare const Image: React.ForwardRefExoticComponent<ImageProps & React.RefAttributes<HTMLImageElement>>;
|
|
38
|
+
|
|
39
|
+
export { type FarmImageLoader, type FarmImageLoaderProps, Image, type ImageProps, type ImagePropsResult, type StaticImageData, Image as default, getImageProps };
|
package/dist/image.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ImgHTMLAttributes, SyntheticEvent } from 'react';
|
|
3
|
+
export { F as FarmImageConfig, a as FarmImageFormat, b as FarmImageLocalPattern, c as FarmImageProvider, d as FarmImageRemotePattern, R as ResolvedFarmImageConfig } from './image-config-Duob7wER.js';
|
|
4
|
+
|
|
5
|
+
interface StaticImageData {
|
|
6
|
+
src: string;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
blurDataURL?: string;
|
|
10
|
+
}
|
|
11
|
+
interface FarmImageLoaderProps {
|
|
12
|
+
src: string;
|
|
13
|
+
width: number;
|
|
14
|
+
quality: number;
|
|
15
|
+
}
|
|
16
|
+
type FarmImageLoader = (props: FarmImageLoaderProps) => string;
|
|
17
|
+
interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, "src" | "srcSet" | "width" | "height" | "loading" | "placeholder"> {
|
|
18
|
+
src: string | StaticImageData;
|
|
19
|
+
alt: string;
|
|
20
|
+
width?: number | `${number}`;
|
|
21
|
+
height?: number | `${number}`;
|
|
22
|
+
fill?: boolean;
|
|
23
|
+
quality?: number;
|
|
24
|
+
sizes?: string;
|
|
25
|
+
loading?: "eager" | "lazy";
|
|
26
|
+
preload?: boolean;
|
|
27
|
+
placeholder?: "empty" | "blur";
|
|
28
|
+
blurDataURL?: string;
|
|
29
|
+
unoptimized?: boolean;
|
|
30
|
+
loader?: FarmImageLoader;
|
|
31
|
+
onLoad?: (event: SyntheticEvent<HTMLImageElement>) => void;
|
|
32
|
+
}
|
|
33
|
+
interface ImagePropsResult {
|
|
34
|
+
props: ImgHTMLAttributes<HTMLImageElement>;
|
|
35
|
+
}
|
|
36
|
+
declare function getImageProps(input: ImageProps): ImagePropsResult;
|
|
37
|
+
declare const Image: React.ForwardRefExoticComponent<ImageProps & React.RefAttributes<HTMLImageElement>>;
|
|
38
|
+
|
|
39
|
+
export { type FarmImageLoader, type FarmImageLoaderProps, Image, type ImageProps, type ImagePropsResult, type StaticImageData, Image as default, getImageProps };
|
package/dist/image.mjs
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEFAULT_FARM_IMAGE_DEVICE_SIZES,
|
|
3
|
+
DEFAULT_FARM_IMAGE_FORMATS,
|
|
4
|
+
DEFAULT_FARM_IMAGE_PATH,
|
|
5
|
+
DEFAULT_FARM_IMAGE_QUALITIES,
|
|
6
|
+
DEFAULT_FARM_IMAGE_SIZES
|
|
7
|
+
} from "./chunk-GY2STC2S.mjs";
|
|
8
|
+
import {
|
|
9
|
+
__name
|
|
10
|
+
} from "./chunk-CGILA3WO.mjs";
|
|
11
|
+
|
|
12
|
+
// src/image.tsx
|
|
13
|
+
import { forwardRef } from "react";
|
|
14
|
+
import * as ReactDOM from "react-dom";
|
|
15
|
+
import { jsx } from "react/jsx-runtime";
|
|
16
|
+
var FALLBACK_CONFIG = {
|
|
17
|
+
provider: "auto",
|
|
18
|
+
path: DEFAULT_FARM_IMAGE_PATH,
|
|
19
|
+
deviceSizes: DEFAULT_FARM_IMAGE_DEVICE_SIZES,
|
|
20
|
+
imageSizes: DEFAULT_FARM_IMAGE_SIZES,
|
|
21
|
+
qualities: DEFAULT_FARM_IMAGE_QUALITIES,
|
|
22
|
+
formats: DEFAULT_FARM_IMAGE_FORMATS
|
|
23
|
+
};
|
|
24
|
+
function getImageConfig() {
|
|
25
|
+
return typeof __FARM_IMAGE_CONFIG__ !== "undefined" && __FARM_IMAGE_CONFIG__ ? __FARM_IMAGE_CONFIG__ : FALLBACK_CONFIG;
|
|
26
|
+
}
|
|
27
|
+
__name(getImageConfig, "getImageConfig");
|
|
28
|
+
function defaultImageLoader(config) {
|
|
29
|
+
return ({ src, width, quality }) => {
|
|
30
|
+
const query = new URLSearchParams({
|
|
31
|
+
url: src,
|
|
32
|
+
w: String(width),
|
|
33
|
+
q: String(quality)
|
|
34
|
+
});
|
|
35
|
+
return `${config.path}?${query}`;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
__name(defaultImageLoader, "defaultImageLoader");
|
|
39
|
+
function getClosestQuality(quality, allowed) {
|
|
40
|
+
const requested = quality ?? 75;
|
|
41
|
+
return allowed.reduce(
|
|
42
|
+
(closest, candidate) => Math.abs(candidate - requested) < Math.abs(closest - requested) ? candidate : closest
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
__name(getClosestQuality, "getClosestQuality");
|
|
46
|
+
function getCandidateWidths(config, width, sizes, fill) {
|
|
47
|
+
const allSizes = [.../* @__PURE__ */ new Set([...config.imageSizes, ...config.deviceSizes])].sort(
|
|
48
|
+
(left, right) => left - right
|
|
49
|
+
);
|
|
50
|
+
if (fill || sizes) {
|
|
51
|
+
const viewportPercentages = [...sizes?.matchAll(/(^|\s)(\d{1,3})vw/g) ?? []].map(
|
|
52
|
+
(match) => Number(match[2])
|
|
53
|
+
);
|
|
54
|
+
if (viewportPercentages.length > 0) {
|
|
55
|
+
const smallestRatio = Math.min(...viewportPercentages) / 100;
|
|
56
|
+
const minimum = config.deviceSizes[0] * smallestRatio;
|
|
57
|
+
return { widths: allSizes.filter((candidate) => candidate >= minimum), descriptor: "w" };
|
|
58
|
+
}
|
|
59
|
+
return { widths: allSizes, descriptor: "w" };
|
|
60
|
+
}
|
|
61
|
+
if (!width) return { widths: config.deviceSizes.slice(), descriptor: "w" };
|
|
62
|
+
const requested = [width, width * 2];
|
|
63
|
+
const widths = requested.map(
|
|
64
|
+
(target) => allSizes.find((candidate) => candidate >= target) ?? allSizes.at(-1)
|
|
65
|
+
);
|
|
66
|
+
return { widths: [...new Set(widths)], descriptor: "x" };
|
|
67
|
+
}
|
|
68
|
+
__name(getCandidateWidths, "getCandidateWidths");
|
|
69
|
+
function isStaticImageData(value) {
|
|
70
|
+
return typeof value === "object" && value !== null && typeof value.src === "string";
|
|
71
|
+
}
|
|
72
|
+
__name(isStaticImageData, "isStaticImageData");
|
|
73
|
+
function shouldSkipOptimization(src, config) {
|
|
74
|
+
return config.provider === "none" || src.startsWith("data:") || src.startsWith("blob:") || /\.svg(?:$|[?#])/i.test(src);
|
|
75
|
+
}
|
|
76
|
+
__name(shouldSkipOptimization, "shouldSkipOptimization");
|
|
77
|
+
function getImageProps(input) {
|
|
78
|
+
const {
|
|
79
|
+
src: srcInput,
|
|
80
|
+
alt,
|
|
81
|
+
width: widthInput,
|
|
82
|
+
height: heightInput,
|
|
83
|
+
fill = false,
|
|
84
|
+
quality: qualityInput,
|
|
85
|
+
sizes: sizesInput,
|
|
86
|
+
loading,
|
|
87
|
+
preload: preload2 = false,
|
|
88
|
+
placeholder = "empty",
|
|
89
|
+
blurDataURL: blurDataURLInput,
|
|
90
|
+
unoptimized: unoptimizedInput = false,
|
|
91
|
+
loader: loaderInput,
|
|
92
|
+
style,
|
|
93
|
+
...rest
|
|
94
|
+
} = input;
|
|
95
|
+
const config = getImageConfig();
|
|
96
|
+
const staticImage = isStaticImageData(srcInput) ? srcInput : void 0;
|
|
97
|
+
const src = typeof srcInput === "string" ? srcInput : srcInput.src;
|
|
98
|
+
const width = Number(widthInput ?? staticImage?.width) || void 0;
|
|
99
|
+
const height = Number(heightInput ?? staticImage?.height) || void 0;
|
|
100
|
+
const blurDataURL = blurDataURLInput ?? staticImage?.blurDataURL;
|
|
101
|
+
if (!fill && (!width || !height)) {
|
|
102
|
+
throw new TypeError(
|
|
103
|
+
"Farm Image requires width and height unless src is a static import or fill is enabled"
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
if (fill && (widthInput !== void 0 || heightInput !== void 0)) {
|
|
107
|
+
throw new TypeError("Farm Image cannot use width or height together with fill");
|
|
108
|
+
}
|
|
109
|
+
if (placeholder === "blur" && !blurDataURL) {
|
|
110
|
+
throw new TypeError("Farm Image placeholder=blur requires a static import or blurDataURL");
|
|
111
|
+
}
|
|
112
|
+
const unoptimized = unoptimizedInput || shouldSkipOptimization(src, config);
|
|
113
|
+
const quality = getClosestQuality(qualityInput, config.qualities);
|
|
114
|
+
const loader = loaderInput ?? defaultImageLoader(config);
|
|
115
|
+
const sizes = sizesInput ?? (fill ? "100vw" : void 0);
|
|
116
|
+
const candidates = getCandidateWidths(config, width, sizes, fill);
|
|
117
|
+
const srcSet = unoptimized ? void 0 : candidates.widths.map((candidate, index) => {
|
|
118
|
+
const descriptor = candidates.descriptor === "w" ? `${candidate}w` : `${index + 1}x`;
|
|
119
|
+
return `${loader({ src, width: candidate, quality })} ${descriptor}`;
|
|
120
|
+
}).join(", ");
|
|
121
|
+
const renderedSrc = unoptimized ? src : loader({ src, width: candidates.widths.at(-1) ?? width ?? config.deviceSizes[0], quality });
|
|
122
|
+
const fillStyle = fill ? { position: "absolute", inset: 0, width: "100%", height: "100%" } : void 0;
|
|
123
|
+
const placeholderStyle = placeholder === "blur" ? {
|
|
124
|
+
backgroundImage: `url("${blurDataURL}")`,
|
|
125
|
+
backgroundPosition: "50% 50%",
|
|
126
|
+
backgroundRepeat: "no-repeat",
|
|
127
|
+
backgroundSize: "cover"
|
|
128
|
+
} : void 0;
|
|
129
|
+
return {
|
|
130
|
+
props: {
|
|
131
|
+
...rest,
|
|
132
|
+
alt,
|
|
133
|
+
src: renderedSrc,
|
|
134
|
+
srcSet,
|
|
135
|
+
sizes,
|
|
136
|
+
width: fill ? void 0 : width,
|
|
137
|
+
height: fill ? void 0 : height,
|
|
138
|
+
loading: preload2 ? "eager" : loading ?? "lazy",
|
|
139
|
+
fetchPriority: preload2 ? "high" : rest.fetchPriority,
|
|
140
|
+
decoding: rest.decoding ?? "async",
|
|
141
|
+
style: { ...fillStyle, ...placeholderStyle, ...style }
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
__name(getImageProps, "getImageProps");
|
|
146
|
+
var Image = forwardRef(/* @__PURE__ */ __name(function Image2(input, ref) {
|
|
147
|
+
const { props } = getImageProps(input);
|
|
148
|
+
if (input.preload && typeof ReactDOM.preload === "function") {
|
|
149
|
+
ReactDOM.preload(props.src, {
|
|
150
|
+
as: "image",
|
|
151
|
+
imageSrcSet: props.srcSet,
|
|
152
|
+
imageSizes: props.sizes,
|
|
153
|
+
fetchPriority: "high"
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return /* @__PURE__ */ jsx("img", { ...props, ref });
|
|
157
|
+
}, "Image"));
|
|
158
|
+
Image.displayName = "Image";
|
|
159
|
+
var image_default = Image;
|
|
160
|
+
export {
|
|
161
|
+
Image,
|
|
162
|
+
image_default as default,
|
|
163
|
+
getImageProps
|
|
164
|
+
};
|
|
165
|
+
//# sourceMappingURL=image.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/image.tsx"],"sourcesContent":["import { forwardRef, type CSSProperties, type ImgHTMLAttributes, type SyntheticEvent } from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport {\n DEFAULT_FARM_IMAGE_DEVICE_SIZES,\n DEFAULT_FARM_IMAGE_FORMATS,\n DEFAULT_FARM_IMAGE_PATH,\n DEFAULT_FARM_IMAGE_QUALITIES,\n DEFAULT_FARM_IMAGE_SIZES,\n type PublicFarmImageConfig,\n} from \"./image-config\";\n\ndeclare const __FARM_IMAGE_CONFIG__: PublicFarmImageConfig | undefined;\n\nexport interface StaticImageData {\n src: string;\n width: number;\n height: number;\n blurDataURL?: string;\n}\n\nexport interface FarmImageLoaderProps {\n src: string;\n width: number;\n quality: number;\n}\n\nexport type FarmImageLoader = (props: FarmImageLoaderProps) => string;\n\nexport interface ImageProps extends Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n \"src\" | \"srcSet\" | \"width\" | \"height\" | \"loading\" | \"placeholder\"\n> {\n src: string | StaticImageData;\n alt: string;\n width?: number | `${number}`;\n height?: number | `${number}`;\n fill?: boolean;\n quality?: number;\n sizes?: string;\n loading?: \"eager\" | \"lazy\";\n preload?: boolean;\n placeholder?: \"empty\" | \"blur\";\n blurDataURL?: string;\n unoptimized?: boolean;\n loader?: FarmImageLoader;\n onLoad?: (event: SyntheticEvent<HTMLImageElement>) => void;\n}\n\nexport interface ImagePropsResult {\n props: ImgHTMLAttributes<HTMLImageElement>;\n}\n\nconst FALLBACK_CONFIG: PublicFarmImageConfig = {\n provider: \"auto\",\n path: DEFAULT_FARM_IMAGE_PATH,\n deviceSizes: DEFAULT_FARM_IMAGE_DEVICE_SIZES,\n imageSizes: DEFAULT_FARM_IMAGE_SIZES,\n qualities: DEFAULT_FARM_IMAGE_QUALITIES,\n formats: DEFAULT_FARM_IMAGE_FORMATS,\n};\n\nfunction getImageConfig(): PublicFarmImageConfig {\n return typeof __FARM_IMAGE_CONFIG__ !== \"undefined\" && __FARM_IMAGE_CONFIG__\n ? __FARM_IMAGE_CONFIG__\n : FALLBACK_CONFIG;\n}\n\nfunction defaultImageLoader(config: PublicFarmImageConfig): FarmImageLoader {\n return ({ src, width, quality }) => {\n const query = new URLSearchParams({\n url: src,\n w: String(width),\n q: String(quality),\n });\n return `${config.path}?${query}`;\n };\n}\n\nfunction getClosestQuality(quality: number | undefined, allowed: readonly number[]): number {\n const requested = quality ?? 75;\n return allowed.reduce((closest, candidate) =>\n Math.abs(candidate - requested) < Math.abs(closest - requested) ? candidate : closest,\n );\n}\n\nfunction getCandidateWidths(\n config: PublicFarmImageConfig,\n width: number | undefined,\n sizes: string | undefined,\n fill: boolean,\n): { widths: number[]; descriptor: \"w\" | \"x\" } {\n const allSizes = [...new Set([...config.imageSizes, ...config.deviceSizes])].sort(\n (left, right) => left - right,\n );\n\n if (fill || sizes) {\n const viewportPercentages = [...(sizes?.matchAll(/(^|\\s)(\\d{1,3})vw/g) ?? [])].map((match) =>\n Number(match[2]),\n );\n if (viewportPercentages.length > 0) {\n const smallestRatio = Math.min(...viewportPercentages) / 100;\n const minimum = config.deviceSizes[0] * smallestRatio;\n return { widths: allSizes.filter((candidate) => candidate >= minimum), descriptor: \"w\" };\n }\n return { widths: allSizes, descriptor: \"w\" };\n }\n\n if (!width) return { widths: config.deviceSizes.slice(), descriptor: \"w\" };\n\n const requested = [width, width * 2];\n const widths = requested.map(\n (target) => allSizes.find((candidate) => candidate >= target) ?? allSizes.at(-1)!,\n );\n return { widths: [...new Set(widths)], descriptor: \"x\" };\n}\n\nfunction isStaticImageData(value: ImageProps[\"src\"]): value is StaticImageData {\n return typeof value === \"object\" && value !== null && typeof value.src === \"string\";\n}\n\nfunction shouldSkipOptimization(src: string, config: PublicFarmImageConfig): boolean {\n return (\n config.provider === \"none\" ||\n src.startsWith(\"data:\") ||\n src.startsWith(\"blob:\") ||\n /\\.svg(?:$|[?#])/i.test(src)\n );\n}\n\nexport function getImageProps(input: ImageProps): ImagePropsResult {\n const {\n src: srcInput,\n alt,\n width: widthInput,\n height: heightInput,\n fill = false,\n quality: qualityInput,\n sizes: sizesInput,\n loading,\n preload = false,\n placeholder = \"empty\",\n blurDataURL: blurDataURLInput,\n unoptimized: unoptimizedInput = false,\n loader: loaderInput,\n style,\n ...rest\n } = input;\n const config = getImageConfig();\n const staticImage = isStaticImageData(srcInput) ? srcInput : undefined;\n const src = typeof srcInput === \"string\" ? srcInput : srcInput.src;\n const width = Number(widthInput ?? staticImage?.width) || undefined;\n const height = Number(heightInput ?? staticImage?.height) || undefined;\n const blurDataURL = blurDataURLInput ?? staticImage?.blurDataURL;\n\n if (!fill && (!width || !height)) {\n throw new TypeError(\n \"Farm Image requires width and height unless src is a static import or fill is enabled\",\n );\n }\n if (fill && (widthInput !== undefined || heightInput !== undefined)) {\n throw new TypeError(\"Farm Image cannot use width or height together with fill\");\n }\n if (placeholder === \"blur\" && !blurDataURL) {\n throw new TypeError(\"Farm Image placeholder=blur requires a static import or blurDataURL\");\n }\n\n const unoptimized = unoptimizedInput || shouldSkipOptimization(src, config);\n const quality = getClosestQuality(qualityInput, config.qualities);\n const loader = loaderInput ?? defaultImageLoader(config);\n const sizes = sizesInput ?? (fill ? \"100vw\" : undefined);\n const candidates = getCandidateWidths(config, width, sizes, fill);\n const srcSet = unoptimized\n ? undefined\n : candidates.widths\n .map((candidate, index) => {\n const descriptor = candidates.descriptor === \"w\" ? `${candidate}w` : `${index + 1}x`;\n return `${loader({ src, width: candidate, quality })} ${descriptor}`;\n })\n .join(\", \");\n const renderedSrc = unoptimized\n ? src\n : loader({ src, width: candidates.widths.at(-1) ?? width ?? config.deviceSizes[0], quality });\n const fillStyle: CSSProperties | undefined = fill\n ? { position: \"absolute\", inset: 0, width: \"100%\", height: \"100%\" }\n : undefined;\n const placeholderStyle: CSSProperties | undefined =\n placeholder === \"blur\"\n ? {\n backgroundImage: `url(\"${blurDataURL}\")`,\n backgroundPosition: \"50% 50%\",\n backgroundRepeat: \"no-repeat\",\n backgroundSize: \"cover\",\n }\n : undefined;\n\n return {\n props: {\n ...rest,\n alt,\n src: renderedSrc,\n srcSet,\n sizes,\n width: fill ? undefined : width,\n height: fill ? undefined : height,\n loading: preload ? \"eager\" : (loading ?? \"lazy\"),\n fetchPriority: preload ? \"high\" : rest.fetchPriority,\n decoding: rest.decoding ?? \"async\",\n style: { ...fillStyle, ...placeholderStyle, ...style },\n },\n };\n}\n\nexport const Image = forwardRef<HTMLImageElement, ImageProps>(function Image(input, ref) {\n const { props } = getImageProps(input);\n\n if (input.preload && typeof (ReactDOM as any).preload === \"function\") {\n (ReactDOM as any).preload(props.src as string, {\n as: \"image\",\n imageSrcSet: props.srcSet,\n imageSizes: props.sizes,\n fetchPriority: \"high\",\n });\n }\n\n return <img {...props} ref={ref} />;\n});\n\nImage.displayName = \"Image\";\n\nexport default Image;\n\nexport type {\n FarmImageConfig,\n FarmImageFormat,\n FarmImageLocalPattern,\n FarmImageProvider,\n FarmImageRemotePattern,\n ResolvedFarmImageConfig,\n} from \"./image-config\";\n"],"mappings":"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","names":["preload","Image"]}
|