forked from Mirrors/elk
28 lines
525 B
TypeScript
28 lines
525 B
TypeScript
export function useCacheStorage<T>(
|
|
key: string,
|
|
getter: () => T | Promise<T>,
|
|
TTL = 1000 * 60 * 60 * 12, // 12 hours
|
|
) {
|
|
const storage = useLocalStorage(key, {
|
|
time: 0,
|
|
value: null as T | null,
|
|
})
|
|
|
|
if (storage.value.time + TTL < Date.now()) {
|
|
Promise.resolve(getter()).then((v) => {
|
|
storage.value = {
|
|
time: Date.now(),
|
|
value: v,
|
|
}
|
|
})
|
|
}
|
|
|
|
return computed({
|
|
get() {
|
|
return storage.value.value
|
|
},
|
|
set(v) {
|
|
storage.value.value = v
|
|
},
|
|
})
|
|
}
|