23 lines
728 B
TypeScript
23 lines
728 B
TypeScript
import type { ImageLoaderProps } from "next/image";
|
|
|
|
export default function sanityImageLoader({ src, width, quality }: ImageLoaderProps) {
|
|
// If it's a local image (doesn't start with http), append width as query param
|
|
// This satisfies Next.js requirement that loaders implement width
|
|
if (!src.startsWith('http')) {
|
|
return `${src}?w=${width}`;
|
|
}
|
|
|
|
// Only apply transformations to Sanity CDN images
|
|
if (!src.includes('cdn.sanity.io')) {
|
|
return `${src}?w=${width}`;
|
|
}
|
|
|
|
const url = new URL(src);
|
|
|
|
url.searchParams.set('w', width.toString());
|
|
url.searchParams.set('q', (quality || 90).toString());
|
|
url.searchParams.set('fit', 'max');
|
|
url.searchParams.set('fm', 'webp');
|
|
|
|
return url.toString();
|
|
}
|