// @ts-check import util from "node:util"; import potrace from "potrace"; import getSrcset from "./getSrcset.js"; import { sharp } from "../../utils/runtimeChecks.js"; export default async function getFallbackImage( src, placeholder, image, format, formatOptions, rest ) { const base = null; switch (placeholder) { case "blurred": { const dataUri = await getSrcset(src, base, [20], format, { inline: true, ...rest, ...formatOptions[format], }); return dataUri; } case "tracedSVG": { const { function: fn, options } = formatOptions.tracedSVG; const traceSVG = util.promisify(potrace[fn]); const imageBuffer = sharp ? await image.toBuffer() : Buffer.from( (await image.encode(`image/${format === "jpg" ? "jpeg" : format}`)) .data ); const tracedSVG = await traceSVG(imageBuffer, options); return `data:image/svg+xml;utf8,${tracedSVG}`; } case "dominantColor": { if (sharp) { var { r, g, b } = (await image.stats()).dominant; } else { [r, g, b] = image.color; } const svg = ``; return `data:image/svg+xml;utf8,${svg}`; } default: return null; } }