23 lines
626 B
JavaScript
23 lines
626 B
JavaScript
export function createLatestRequestGuard() {
|
|
let generation = 0
|
|
|
|
return {
|
|
next(snapshot) {
|
|
generation += 1
|
|
const stableSnapshot = Array.isArray(snapshot)
|
|
? [...snapshot]
|
|
: snapshot && typeof snapshot === 'object'
|
|
? { ...snapshot }
|
|
: snapshot
|
|
return Object.freeze({ generation, snapshot: stableSnapshot })
|
|
},
|
|
invalidate() {
|
|
generation += 1
|
|
return generation
|
|
},
|
|
isLatest(ticket) {
|
|
return ticket?.generation === generation
|
|
}
|
|
}
|
|
}
|