UNPKG

@tanstack/query-persist-client-core

Version:

Set of utilities for interacting with persisters, which can save your queryClient for later use

89 lines 2.62 kB
// src/persist.ts import { dehydrate, hydrate } from "@tanstack/query-core"; var cacheEventTypes = ["added", "removed", "updated"]; function isCacheEventType(eventType) { return cacheEventTypes.includes(eventType); } async function persistQueryClientRestore({ queryClient, persister, maxAge = 1e3 * 60 * 60 * 24, buster = "", hydrateOptions }) { try { const persistedClient = await persister.restoreClient(); if (persistedClient) { if (persistedClient.timestamp) { const expired = Date.now() - persistedClient.timestamp > maxAge; const busted = persistedClient.buster !== buster; if (expired || busted) { return persister.removeClient(); } else { hydrate(queryClient, persistedClient.clientState, hydrateOptions); } } else { return persister.removeClient(); } } } catch (err) { if (process.env.NODE_ENV !== "production") { console.error(err); console.warn( "Encountered an error attempting to restore client cache from persisted location. As a precaution, the persisted cache will be discarded." ); } await persister.removeClient(); throw err; } } async function persistQueryClientSave({ queryClient, persister, buster = "", dehydrateOptions }) { const persistClient = { buster, timestamp: Date.now(), clientState: dehydrate(queryClient, dehydrateOptions) }; await persister.persistClient(persistClient); } function persistQueryClientSubscribe(props) { const unsubscribeQueryCache = props.queryClient.getQueryCache().subscribe((event) => { if (isCacheEventType(event.type)) { persistQueryClientSave(props); } }); const unsubscribeMutationCache = props.queryClient.getMutationCache().subscribe((event) => { if (isCacheEventType(event.type)) { persistQueryClientSave(props); } }); return () => { unsubscribeQueryCache(); unsubscribeMutationCache(); }; } function persistQueryClient(props) { let hasUnsubscribed = false; let persistQueryClientUnsubscribe; const unsubscribe = () => { hasUnsubscribed = true; persistQueryClientUnsubscribe == null ? void 0 : persistQueryClientUnsubscribe(); }; const restorePromise = persistQueryClientRestore(props).then(() => { if (!hasUnsubscribed) { persistQueryClientUnsubscribe = persistQueryClientSubscribe(props); } }); return [unsubscribe, restorePromise]; } export { persistQueryClient, persistQueryClientRestore, persistQueryClientSave, persistQueryClientSubscribe }; //# sourceMappingURL=persist.js.map