fix(images) : fall back to original CDN file without transformations
CI / Verify (push) Successful in 1m33s
CI / Build immutable images and deploy (push) Successful in 3m17s

This commit is contained in:
2026-10-06 15:17:43 +07:00 Unverified
parent f311d3c417
commit 5ebe4db78c
+6 -15
View File
@@ -6,26 +6,17 @@ import { useState } from "react";
const CDN_ORIGIN = "https://buzz-cdn.astrxl.dev";
export default function ResilientImage({ src, unoptimized, onError, ...props }: ImageProps) {
const [fallback, setFallback] = useState<{ source: string; url: string } | null>(null);
const fallbackUrl = typeof src === "string" && fallback?.source === src ? fallback.url : null;
const [failedSource, setFailedSource] = useState<string | null>(null);
const useOriginal = typeof src === "string" && failedSource === src;
return (
<NextImage
{...props}
src={fallbackUrl ?? src}
unoptimized={unoptimized || Boolean(fallbackUrl)}
src={src}
unoptimized={unoptimized || useOriginal}
onError={(event) => {
if (!fallbackUrl && typeof src === "string" && src.startsWith(`${CDN_ORIGIN}/`)) {
const source = new URL(src);
if (!source.pathname.startsWith("/cdn-cgi/image/")) {
const optimized = new URL(event.currentTarget.currentSrc);
const width = Number(optimized.searchParams.get("w")) || 1080;
const quality = Number(optimized.searchParams.get("q")) || 75;
setFallback({
source: src,
url: `${CDN_ORIGIN}/cdn-cgi/image/width=${width},quality=${quality},format=auto${source.pathname}${source.search}`,
});
}
if (!useOriginal && typeof src === "string" && src.startsWith(`${CDN_ORIGIN}/`)) {
setFailedSource(src);
}
onError?.(event);
}}