import { rewriteBlobUrl } from '../api/blobRewrite'; const preloaded = new Set(); const inFlight = new Map>(); export function preloadImage(rawUrl: string): Promise { const url = rewriteBlobUrl(rawUrl) ?? rawUrl; if (preloaded.has(url)) return Promise.resolve(); const existing = inFlight.get(url); if (existing) return existing; const promise = new Promise((resolve) => { const img = new Image(); img.onload = () => finish(); img.onerror = () => finish(); img.src = url; function finish() { preloaded.add(url); inFlight.delete(url); resolve(); } }); inFlight.set(url, promise); return promise; } export function preloadImages(rawUrls: string[]): Promise { return Promise.all(rawUrls.map((u) => preloadImage(u))); } export function isPreloaded(rawUrl: string): boolean { const url = rewriteBlobUrl(rawUrl) ?? rawUrl; return preloaded.has(url); } export function invalidatePreload(rawUrl: string): void { const url = rewriteBlobUrl(rawUrl) ?? rawUrl; preloaded.delete(url); inFlight.delete(url); }