next-sanity
Version:
Sanity.io toolkit for Next.js
1 lines • 3.16 kB
Source Map (JSON)
{"version":3,"file":"image.cjs","sources":["../src/image/imageLoader.ts","../src/image/Image.tsx"],"sourcesContent":["import type {ImageLoader} from 'next/image'\n\n/**\n * @alpha\n */\nexport const imageLoader = (({src, width, quality}) => {\n const url = new URL(src)\n url.searchParams.set('auto', 'format')\n if (!url.searchParams.has('fit')) {\n url.searchParams.set('fit', url.searchParams.has('h') ? 'min' : 'max')\n }\n if (url.searchParams.has('h') && url.searchParams.has('w')) {\n const originalHeight = parseInt(url.searchParams.get('h')!, 10)\n const originalWidth = parseInt(url.searchParams.get('w')!, 10)\n url.searchParams.set('h', Math.round((originalHeight / originalWidth) * width).toString())\n }\n url.searchParams.set('w', width.toString())\n if (quality) {\n url.searchParams.set('q', quality.toString())\n }\n return url.href\n}) satisfies ImageLoader\n","import NextImage, {type ImageProps as NextImageProps} from 'next/image'\n\nimport {imageLoader} from './imageLoader'\n\n/**\n * @alpha\n */\nexport interface ImageProps extends Omit<NextImageProps, 'loader' | 'src'> {\n /**\n * The `loader` prop is not supported on `Image` components. Use `next/image` directly to use a custom loader.\n */\n loader?: never\n /**\n * Must be a string that is a valid URL to an image on the Sanity Image CDN.\n */\n src: string\n}\n\n/**\n * @alpha\n */\nexport function Image(props: ImageProps): React.JSX.Element {\n const {loader, src, ...rest} = props\n if (loader) {\n throw new TypeError(\n 'The `loader` prop is not supported on `Image` components. Use `next/image` directly to use a custom loader.',\n )\n }\n let srcUrl: URL\n try {\n srcUrl = new URL(src)\n if (props.height) {\n srcUrl.searchParams.set('h', `${props.height}`)\n }\n if (props.width) {\n srcUrl.searchParams.set('w', `${props.width}`)\n }\n } catch (err) {\n throw new TypeError('The `src` prop must be a valid URL to an image on the Sanity Image CDN.', {\n cause: err,\n })\n }\n return <NextImage {...rest} src={srcUrl.toString()} loader={imageLoader} />\n}\n"],"names":["jsx","NextImage"],"mappings":";;;;;;;;AAKO,MAAM,cAAe,CAAC,EAAC,KAAK,OAAO,cAAa;AAC/C,QAAA,MAAM,IAAI,IAAI,GAAG;AAKvB,MAJA,IAAI,aAAa,IAAI,QAAQ,QAAQ,GAChC,IAAI,aAAa,IAAI,KAAK,KAC7B,IAAI,aAAa,IAAI,OAAO,IAAI,aAAa,IAAI,GAAG,IAAI,QAAQ,KAAK,GAEnE,IAAI,aAAa,IAAI,GAAG,KAAK,IAAI,aAAa,IAAI,GAAG,GAAG;AAC1D,UAAM,iBAAiB,SAAS,IAAI,aAAa,IAAI,GAAG,GAAI,EAAE,GACxD,gBAAgB,SAAS,IAAI,aAAa,IAAI,GAAG,GAAI,EAAE;AACzD,QAAA,aAAa,IAAI,KAAK,KAAK,MAAO,iBAAiB,gBAAiB,KAAK,EAAE,SAAA,CAAU;AAAA,EAAA;AAE3F,SAAA,IAAI,aAAa,IAAI,KAAK,MAAM,SAAA,CAAU,GACtC,WACF,IAAI,aAAa,IAAI,KAAK,QAAQ,SAAU,CAAA,GAEvC,IAAI;AACb;ACAO,SAAS,MAAM,OAAsC;AAC1D,QAAM,EAAC,QAAQ,KAAK,GAAG,KAAQ,IAAA;AAC3B,MAAA;AACF,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAEE,MAAA;AACA,MAAA;AACO,aAAA,IAAI,IAAI,GAAG,GAChB,MAAM,UACR,OAAO,aAAa,IAAI,KAAK,GAAG,MAAM,MAAM,EAAE,GAE5C,MAAM,SACR,OAAO,aAAa,IAAI,KAAK,GAAG,MAAM,KAAK,EAAE;AAAA,WAExC,KAAK;AACN,UAAA,IAAI,UAAU,2EAA2E;AAAA,MAC7F,OAAO;AAAA,IAAA,CACR;AAAA,EAAA;AAEI,SAAAA,+BAACC,mBAAAA,WAAW,GAAG,MAAM,KAAK,OAAO,SAAY,GAAA,QAAQ,aAAa;AAC3E;;;"}