Files
www/dev-reload.js
T
paul 146d516f24
Deploy website / deploy (push) Successful in 24s
Refactor site generation into a modular content pipeline
2026-09-22 20:51:13 -04:00

40 lines
876 B
JavaScript

// 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)
},
}
}