Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/hungry-adults-count.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@tanstack/query-persist-client-core': minor
Comment thread
rklomp marked this conversation as resolved.
Outdated
---

removeItem if deserialize fails
32 changes: 25 additions & 7 deletions packages/query-persist-client-core/src/createPersister.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,13 @@ export function experimental_createQueryPersister<TStorageValue = string>({
try {
const storedData = await storage.getItem(storageKey)
if (storedData) {
const persistedQuery = await deserialize(storedData)
let persistedQuery: PersistedQuery
try {
persistedQuery = await deserialize(storedData)
} catch {
await storage.removeItem(storageKey)
return
}

if (isExpiredOrBusted(persistedQuery)) {
await storage.removeItem(storageKey)
Expand Down Expand Up @@ -241,11 +247,17 @@ export function experimental_createQueryPersister<TStorageValue = string>({

async function persisterGc() {
if (storage?.entries) {
const storageKeyPrefix = `${prefix}-`
const entries = await storage.entries()
for (const [key, value] of entries) {
if (key.startsWith(prefix)) {
const persistedQuery = await deserialize(value)

if (key.startsWith(storageKeyPrefix)) {
let persistedQuery: PersistedQuery
try {
persistedQuery = await deserialize(value)
} catch {
await storage.removeItem(key)
continue
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
if (isExpiredOrBusted(persistedQuery)) {
await storage.removeItem(key)
}
Expand All @@ -265,11 +277,17 @@ export function experimental_createQueryPersister<TStorageValue = string>({
const { exact, queryKey } = filters

if (storage?.entries) {
const storageKeyPrefix = `${prefix}-`
const entries = await storage.entries()
for (const [key, value] of entries) {
if (key.startsWith(prefix)) {
const persistedQuery = await deserialize(value)

if (key.startsWith(storageKeyPrefix)) {
let persistedQuery: PersistedQuery
try {
persistedQuery = await deserialize(value)
} catch {
await storage.removeItem(key)
continue
}
if (isExpiredOrBusted(persistedQuery)) {
await storage.removeItem(key)
continue
Expand Down
Loading