import compressorConfig from "@/public/compressor.json"; const avifConfig = compressorConfig.configs.find( (c) => c.extension === "avif", )!; const webpConfig = compressorConfig.configs.find( (c) => c.extension === "webp", )!; export async function getImageSrc(src: string) { const BASE_SRC = "/assets/"; if (await supportsEncode()) { return `${BASE_SRC}${src}_q${avifConfig.quality}@${avifConfig.scale}x.avif`; } return `${BASE_SRC}${src}_q${webpConfig.quality}@${webpConfig.scale}x.webp`; } let promise: Promise | null = null; async function supportsEncode() { if (promise) return promise; const avifData = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUEAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABYAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgSAAAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB5tZGF0EgAKBzgADlAgIGkyCR/wAABAAACvcA=="; promise = fetch(avifData) .then((r) => r.blob()) .then((b) => createImageBitmap(b)) .then(() => true) .catch(() => false); return promise; }