@farm.js/core 0.1.0-beta.97 → 0.1.0-beta.99
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.map +1 -0
- package/dist/agent-runtime.cjs +7 -3
- package/dist/agent-runtime.cjs.map +1 -0
- package/dist/agent-runtime.d.mts +2 -2
- package/dist/agent-runtime.d.ts +2 -2
- package/dist/agent-runtime.mjs +2 -1
- package/dist/agent-runtime.mjs.map +1 -1
- package/dist/api/route-manager.cjs.map +1 -0
- package/dist/api/route-manager.d.mts +2 -2
- package/dist/api/route-manager.d.ts +2 -2
- package/dist/api/runtime.cjs.map +1 -0
- package/dist/api.cjs +26 -1
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.mts +3 -3
- package/dist/api.d.ts +3 -3
- package/dist/api.mjs +2 -2
- package/dist/{app-CIOx3LvY.d.ts → app-CGjrKNoN.d.ts} +4 -4
- package/dist/{app-DBd6437H.d.mts → app-DOcLs_iq.d.mts} +4 -4
- package/dist/app-markdown.cjs +21 -0
- package/dist/app-markdown.cjs.map +1 -0
- package/dist/app-markdown.d.mts +19 -4
- package/dist/app-markdown.d.ts +19 -4
- package/dist/app-markdown.mjs +7 -1
- package/dist/cache.cjs.map +1 -0
- package/dist/{chunk-VMCHLH3Y.mjs → chunk-26BCDVJS.mjs} +19 -1
- package/dist/chunk-26BCDVJS.mjs.map +1 -0
- package/dist/{chunk-FP5Q67FO.mjs → chunk-2HYYZCCI.mjs} +308 -19
- package/dist/chunk-2HYYZCCI.mjs.map +1 -0
- package/dist/{chunk-WKDAA6V2.mjs → chunk-3BTAMIQE.mjs} +100 -41
- package/dist/chunk-3BTAMIQE.mjs.map +1 -0
- package/dist/{chunk-WD2EBM3I.mjs → chunk-3CQJV3NC.mjs} +2 -2
- package/dist/{chunk-I3OOUWO5.mjs → chunk-3GDRV7SG.mjs} +2 -2
- package/dist/{chunk-YIBV77KZ.mjs → chunk-4WLAVHCY.mjs} +2 -2
- package/dist/{chunk-KDP5ZSWP.mjs → chunk-7PS5NKOM.mjs} +26 -11
- package/dist/chunk-7PS5NKOM.mjs.map +1 -0
- package/dist/{chunk-X4SFHKFH.mjs → chunk-BU65A3LZ.mjs} +10 -6
- package/dist/chunk-BU65A3LZ.mjs.map +1 -0
- package/dist/{chunk-WMJGA32P.mjs → chunk-BXVOHG6B.mjs} +27 -2
- package/dist/{chunk-WMJGA32P.mjs.map → chunk-BXVOHG6B.mjs.map} +1 -1
- package/dist/{chunk-BZAIS65C.mjs → chunk-DIHNOVZZ.mjs} +40 -13
- package/dist/chunk-DIHNOVZZ.mjs.map +1 -0
- package/dist/{chunk-ISSFLGJ5.mjs → chunk-FDWECN3W.mjs} +8 -4
- package/dist/chunk-FDWECN3W.mjs.map +1 -0
- package/dist/chunk-FDWXXTWR.mjs +114 -0
- package/dist/chunk-FDWXXTWR.mjs.map +1 -0
- package/dist/{chunk-FSIXEIOB.mjs → chunk-L7FSTPGS.mjs} +2 -2
- package/dist/{chunk-J3MPQ4MQ.mjs → chunk-LG4XB6RN.mjs} +2 -2
- package/dist/{chunk-J3MPQ4MQ.mjs.map → chunk-LG4XB6RN.mjs.map} +1 -1
- package/dist/{chunk-AAC66ILR.mjs → chunk-LXXG3K2Y.mjs} +61 -2
- package/dist/chunk-LXXG3K2Y.mjs.map +1 -0
- package/dist/{chunk-GJ7W6LNK.mjs → chunk-N5RK4LK6.mjs} +3 -3
- package/dist/{chunk-D7F7YZ7L.mjs → chunk-NCVFPT67.mjs} +100 -40
- package/dist/{chunk-D7F7YZ7L.mjs.map → chunk-NCVFPT67.mjs.map} +1 -1
- package/dist/{chunk-UMUWR5XA.mjs → chunk-PURU7FXR.mjs} +2 -2
- package/dist/{chunk-2SKCXYLB.mjs → chunk-QQCCBMTH.mjs} +60 -6
- package/dist/chunk-QQCCBMTH.mjs.map +1 -0
- package/dist/chunk-RKUPOYQV.mjs +28 -0
- package/dist/chunk-RKUPOYQV.mjs.map +1 -0
- package/dist/{chunk-52BR7LTX.mjs → chunk-STSPSJUI.mjs} +3 -3
- package/dist/{chunk-EPDIF432.mjs → chunk-UOGX6UNO.mjs} +37 -17
- package/dist/chunk-UOGX6UNO.mjs.map +1 -0
- package/dist/{chunk-IZBX2TEU.mjs → chunk-VQG3QWWK.mjs} +2 -2
- package/dist/{chunk-35NPLKQJ.mjs → chunk-XWM2C267.mjs} +21 -105
- package/dist/chunk-XWM2C267.mjs.map +1 -0
- package/dist/{chunk-7ZVN3YZI.mjs → chunk-Z5ARESQG.mjs} +43 -1
- package/dist/chunk-Z5ARESQG.mjs.map +1 -0
- package/dist/client/lifecycle.cjs.map +1 -0
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-plugins-B6-07YmP.d.mts → client-plugins-BqtHoJ9C.d.mts} +91 -3
- package/dist/{client-plugins-By6MVUX-.d.ts → client-plugins-DYprkCKN.d.ts} +91 -3
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.cjs.map +1 -0
- package/dist/client-plugins.d.mts +2 -2
- package/dist/client-plugins.d.ts +2 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +61 -16
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +7 -7
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.mts +2 -2
- package/dist/config.d.ts +2 -2
- package/dist/cron.cjs +48 -12
- package/dist/cron.cjs.map +1 -0
- package/dist/cron.mjs +2 -1
- package/dist/deferred.cjs.map +1 -0
- package/dist/deployment.cjs.map +1 -0
- package/dist/{devtools-XWZX6CCL.mjs → devtools-24N3U5IG.mjs} +9 -7
- package/dist/{devtools-XWZX6CCL.mjs.map → devtools-24N3U5IG.mjs.map} +1 -1
- package/dist/docs.cjs +7 -3
- package/dist/docs.cjs.map +1 -0
- package/dist/docs.mjs +9 -7
- package/dist/env-types.cjs.map +1 -0
- package/dist/env.cjs.map +1 -0
- package/dist/environment/vite.cjs.map +1 -0
- package/dist/environment.cjs.map +1 -0
- package/dist/font.cjs.map +1 -0
- package/dist/headers.cjs.map +1 -0
- package/dist/i18n/client.cjs.map +1 -0
- package/dist/i18n/index.cjs.map +1 -0
- package/dist/i18n/server.cjs.map +1 -0
- package/dist/image/server.cjs +99 -40
- package/dist/image/server.cjs.map +1 -0
- package/dist/image/server.d.mts +6 -0
- package/dist/image/server.d.ts +6 -0
- package/dist/image/server.mjs +1 -1
- package/dist/image/sharp.cjs +1 -0
- package/dist/image/sharp.cjs.map +1 -0
- package/dist/image/sharp.d.mts +1 -1
- package/dist/image/sharp.d.ts +1 -1
- package/dist/image/sharp.mjs +1 -1
- package/dist/image/sharp.mjs.map +1 -1
- package/dist/image.cjs.map +1 -0
- package/dist/index.cjs +943 -231
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.mjs +38 -24
- package/dist/index.mjs.map +1 -1
- package/dist/instrumentation.cjs.map +1 -0
- package/dist/{integration-orm-LLW6WZNK.mjs → integration-orm-G5BPBT5X.mjs} +3 -3
- package/dist/integrations.cjs +168 -5
- package/dist/integrations.cjs.map +1 -0
- package/dist/integrations.d.mts +2 -2
- package/dist/integrations.d.ts +2 -2
- package/dist/integrations.mjs +10 -3
- package/dist/internal/build-runtime.cjs +745 -139
- package/dist/internal/build-runtime.cjs.map +1 -0
- package/dist/internal/build-runtime.d.mts +4 -4
- package/dist/internal/build-runtime.d.ts +4 -4
- package/dist/internal/build-runtime.mjs +16 -14
- package/dist/internal/client-runtime.cjs +7 -2
- package/dist/internal/client-runtime.cjs.map +1 -0
- package/dist/internal/client-runtime.mjs +8 -3
- package/dist/internal/client-runtime.mjs.map +1 -1
- package/dist/internal/config-runtime.cjs +59 -42
- package/dist/internal/config-runtime.cjs.map +1 -0
- package/dist/internal/config-runtime.d.mts +3 -3
- package/dist/internal/config-runtime.d.ts +3 -3
- package/dist/internal/config-runtime.mjs +8 -6
- package/dist/internal/isolated-boundary.cjs.map +1 -0
- package/dist/internal/metadata-image-runtime.cjs.map +1 -0
- package/dist/internal/product-telemetry-runtime.cjs +52 -5
- package/dist/internal/product-telemetry-runtime.cjs.map +1 -0
- package/dist/internal/product-telemetry-runtime.d.mts +12 -1
- package/dist/internal/product-telemetry-runtime.d.ts +12 -1
- package/dist/internal/product-telemetry-runtime.mjs +50 -5
- package/dist/internal/product-telemetry-runtime.mjs.map +1 -1
- package/dist/internal/production-node-env.cjs.map +1 -0
- package/dist/internal/production-runtime.cjs +56 -10
- package/dist/internal/production-runtime.cjs.map +1 -0
- package/dist/internal/production-runtime.d.mts +8 -8
- package/dist/internal/production-runtime.d.ts +8 -8
- package/dist/internal/production-runtime.mjs +2 -2
- package/dist/markdown.cjs.map +1 -0
- package/dist/{metadata-route-8_V3UonT.d.ts → metadata-route-D2be_0kC.d.ts} +17 -2
- package/dist/{metadata-route-CWP_HjGU.d.mts → metadata-route-Dw5CrDIZ.d.mts} +17 -2
- package/dist/middleware.cjs.map +1 -0
- package/dist/middleware.d.mts +4 -4
- package/dist/middleware.d.ts +4 -4
- package/dist/navigation.cjs.map +1 -0
- package/dist/{nitro-EGRNOB5P.mjs → nitro-YJEP3FWM.mjs} +4 -3
- package/dist/{nitro-EGRNOB5P.mjs.map → nitro-YJEP3FWM.mjs.map} +1 -1
- package/dist/observability.cjs.map +1 -0
- package/dist/plugin.cjs +599 -104
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.mts +2 -2
- package/dist/plugin.d.ts +2 -2
- package/dist/plugin.mjs +13 -11
- package/dist/{production-runtime-CdmzsDax.d.ts → production-runtime-CTqpD1C8.d.ts} +2 -2
- package/dist/{production-runtime-BGRH1dKG.d.mts → production-runtime-HNqNZd4D.d.mts} +2 -2
- package/dist/query/client.cjs.map +1 -0
- package/dist/query/index.cjs.map +1 -0
- package/dist/query/parsers.cjs.map +1 -0
- package/dist/query/server.cjs.map +1 -0
- package/dist/{render-plan-DLxJYAA5.d.mts → render-plan-COscpW-i.d.mts} +1 -1
- package/dist/{render-plan-0GeHiGVZ.d.ts → render-plan-Z4kSxaT_.d.ts} +1 -1
- package/dist/renderer/react/client.cjs.map +1 -0
- package/dist/renderer/react/server.cjs.map +1 -0
- package/dist/renderer/react/vite.cjs.map +1 -0
- package/dist/renderer-client.cjs +26 -1
- package/dist/renderer-client.cjs.map +1 -0
- package/dist/renderer-client.d.mts +4 -4
- package/dist/renderer-client.d.ts +4 -4
- package/dist/renderer-client.mjs +2 -2
- package/dist/renderer.cjs.map +1 -0
- package/dist/{request-BstWbZ6O.d.ts → request-BEDb2jE9.d.ts} +1 -1
- package/dist/{request-BCNXSXLh.d.mts → request-CbIAqJY9.d.mts} +1 -1
- package/dist/request.cjs.map +1 -0
- package/dist/request.d.mts +3 -3
- package/dist/request.d.ts +3 -3
- package/dist/router.cjs.map +1 -0
- package/dist/routes.cjs.map +1 -0
- package/dist/routes.d.mts +2 -2
- package/dist/routes.d.ts +2 -2
- package/dist/server-action-security.cjs +117 -104
- package/dist/server-action-security.cjs.map +1 -0
- package/dist/server-action-security.mjs +2 -1
- package/dist/server-fn-client.cjs.map +1 -0
- package/dist/server-fn.cjs.map +1 -0
- package/dist/server-fn.mjs +3 -2
- package/dist/server-plugins.cjs.map +1 -0
- package/dist/server-plugins.d.mts +3 -3
- package/dist/server-plugins.d.ts +3 -3
- package/dist/server-query-client.cjs +26 -1
- package/dist/server-query-client.cjs.map +1 -0
- package/dist/server-query-client.mjs +3 -3
- package/dist/server-query.cjs.map +1 -0
- package/dist/server-query.mjs +4 -3
- package/dist/server.cjs +686 -170
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.mts +8 -8
- package/dist/server.d.ts +8 -8
- package/dist/server.mjs +16 -14
- package/dist/server.mjs.map +1 -1
- package/dist/{spa-router-COgu4txb.d.ts → spa-router-CjeQites.d.ts} +1 -1
- package/dist/{spa-router-BeyAVSc6.d.mts → spa-router-FJbNou1a.d.mts} +1 -1
- package/dist/storage.cjs +7 -3
- package/dist/storage.cjs.map +1 -0
- package/dist/storage.mjs +1 -1
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.mts +2 -2
- package/dist/testing.d.ts +2 -2
- package/dist/testing.mjs +2 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/theme/client.cjs.map +1 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/runtime.cjs.map +1 -0
- package/dist/theme/server.cjs.map +1 -0
- package/dist/{utils-DL2VwDQl.d.mts → utils-BiMJv9Ys.d.mts} +1 -1
- package/dist/{utils-DkU2c_1B.d.ts → utils-BpnKRFv9.d.ts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -0
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +599 -104
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.d.mts +2 -2
- package/dist/vite.d.ts +2 -2
- package/dist/vite.mjs +13 -11
- package/dist/{workflows-ChyK_oTu.d.mts → workflows-BantWytQ.d.mts} +7 -0
- package/dist/{workflows-ChyK_oTu.d.ts → workflows-BantWytQ.d.ts} +7 -0
- package/dist/workflows.cjs +73 -5
- package/dist/workflows.cjs.map +1 -0
- package/dist/workflows.d.mts +1 -1
- package/dist/workflows.d.ts +1 -1
- package/dist/workflows.mjs +2 -1
- package/package.json +17 -17
- package/dist/chunk-2SKCXYLB.mjs.map +0 -1
- package/dist/chunk-35NPLKQJ.mjs.map +0 -1
- package/dist/chunk-7ZVN3YZI.mjs.map +0 -1
- package/dist/chunk-AAC66ILR.mjs.map +0 -1
- package/dist/chunk-BZAIS65C.mjs.map +0 -1
- package/dist/chunk-EPDIF432.mjs.map +0 -1
- package/dist/chunk-FP5Q67FO.mjs.map +0 -1
- package/dist/chunk-ISSFLGJ5.mjs.map +0 -1
- package/dist/chunk-KDP5ZSWP.mjs.map +0 -1
- package/dist/chunk-VMCHLH3Y.mjs.map +0 -1
- package/dist/chunk-WKDAA6V2.mjs.map +0 -1
- package/dist/chunk-X4SFHKFH.mjs.map +0 -1
- /package/dist/{chunk-WD2EBM3I.mjs.map → chunk-3CQJV3NC.mjs.map} +0 -0
- /package/dist/{chunk-I3OOUWO5.mjs.map → chunk-3GDRV7SG.mjs.map} +0 -0
- /package/dist/{chunk-YIBV77KZ.mjs.map → chunk-4WLAVHCY.mjs.map} +0 -0
- /package/dist/{chunk-FSIXEIOB.mjs.map → chunk-L7FSTPGS.mjs.map} +0 -0
- /package/dist/{chunk-GJ7W6LNK.mjs.map → chunk-N5RK4LK6.mjs.map} +0 -0
- /package/dist/{chunk-UMUWR5XA.mjs.map → chunk-PURU7FXR.mjs.map} +0 -0
- /package/dist/{chunk-52BR7LTX.mjs.map → chunk-STSPSJUI.mjs.map} +0 -0
- /package/dist/{chunk-IZBX2TEU.mjs.map → chunk-VQG3QWWK.mjs.map} +0 -0
- /package/dist/{integration-orm-LLW6WZNK.mjs.map → integration-orm-G5BPBT5X.mjs.map} +0 -0
|
@@ -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 hasUnstableCharacters = (candidate: string) =>\n candidate.includes(\"\\\\\") ||\n Array.from(candidate).some((character) => {\n const code = character.charCodeAt(0);\n return code <= 31 || (code >= 127 && code <= 159);\n });\n\n if (hasUnstableCharacters(value)) {\n throw new TypeError(\"images.path cannot contain backslashes or control characters\");\n }\n\n const path = value.trim().replace(/\\/+$/, \"\") || \"/\";\n if (!path.startsWith(\"/\") || path.startsWith(\"//\") || path.includes(\"?\") || path.includes(\"#\")) {\n throw new TypeError(\"images.path must be an absolute pathname without a query or hash\");\n }\n\n for (const segment of path.split(\"/\")) {\n let decoded = segment;\n try {\n decoded = decodeURIComponent(segment);\n } catch {\n // Malformed escapes remain literal and cannot conceal a path separator\n // or dot segment.\n }\n if (hasUnstableCharacters(decoded)) {\n throw new TypeError(\"images.path cannot contain backslashes or control characters\");\n }\n if (decoded.includes(\"/\")) {\n throw new TypeError(\"images.path cannot contain percent-encoded path separators\");\n }\n if (decoded === \".\" || decoded === \"..\") {\n throw new TypeError('images.path cannot contain \".\" or \"..\" path segments');\n }\n }\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"]}
|