// Keep only the newest generation's result visible to the browser. export const createRegenerationQueue = ({ generate, onSuccess, onError, delay = 100 }) => { let timer let running = false let revision = 0 let closed = false const run = async () => { if (closed || running) return running = true const started = revision try { await generate() if (!closed && started === revision) onSuccess() } catch (error) { if (!closed && started === revision) onError(error) } finally { running = false if (!closed && started !== revision) schedule() } } const schedule = () => { clearTimeout(timer) timer = setTimeout(run, delay) } return { request() { if (closed) return revision += 1 schedule() }, close() { closed = true clearTimeout(timer) }, } }