Refactor site generation into a modular content pipeline
Deploy website / deploy (push) Successful in 24s
Deploy website / deploy (push) Successful in 24s
This commit is contained in:
1 parent
0f69028d4a
commit
146d516f24
20 files changed
+826
-427
No files matched your search
@@ -0,0 +1,39 @@
|
||||
// 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)
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user