File size: 1,289 Bytes
c09f67c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | interface ImageLoaderParams {
src: string;
width: number;
quality?: number;
}
const CDN_URL = "https://midday.ai";
export default function imageLoader({
src,
width,
quality = 80,
}: ImageLoaderParams): string {
// Skip CDN optimization for localhost (local development)
if (src.includes("localhost") || src.includes("127.0.0.1")) {
return src;
}
// In development, serve local images without CDN
if (process.env.NODE_ENV === "development") {
if (src.startsWith("/")) {
return `${src}?w=${width}&q=${quality}`;
}
return src;
}
// In preview, skip Cloudflare CDN (not available on preview URLs)
const isPreview = process.env.NEXT_PUBLIC_VERCEL_ENV === "preview";
const vercelUrl = process.env.NEXT_PUBLIC_VERCEL_URL;
if (isPreview && vercelUrl) {
if (src.startsWith("/")) {
return `https://${vercelUrl}${src}`;
}
return src;
}
// Production: use Cloudflare CDN transformation
if (src.startsWith("/_next")) {
return `${CDN_URL}/cdn-cgi/image/width=${width},quality=${quality}/${CDN_URL}${src}`;
}
if (src.startsWith("/")) {
return `${CDN_URL}/cdn-cgi/image/width=${width},quality=${quality}/${CDN_URL}${src}`;
}
return `${CDN_URL}/cdn-cgi/image/width=${width},quality=${quality}/${src}`;
}
|