From 100692fc6dd8146949a1deae8acf8488e3501a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klomp?= Date: Thu, 26 Feb 2026 10:37:30 +0100 Subject: [PATCH 1/4] removeItem if deserialize fails --- .../src/createPersister.ts | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/packages/query-persist-client-core/src/createPersister.ts b/packages/query-persist-client-core/src/createPersister.ts index 55fccc5558b..90d51587d13 100644 --- a/packages/query-persist-client-core/src/createPersister.ts +++ b/packages/query-persist-client-core/src/createPersister.ts @@ -131,7 +131,13 @@ export function experimental_createQueryPersister({ 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) @@ -244,8 +250,13 @@ export function experimental_createQueryPersister({ const entries = await storage.entries() for (const [key, value] of entries) { if (key.startsWith(prefix)) { - const persistedQuery = await deserialize(value) - + let persistedQuery: PersistedQuery + try { + persistedQuery = await deserialize(value) + } catch { + await storage.removeItem(key) + continue + } if (isExpiredOrBusted(persistedQuery)) { await storage.removeItem(key) } @@ -267,9 +278,15 @@ export function experimental_createQueryPersister({ if (storage?.entries) { const entries = await storage.entries() for (const [key, value] of entries) { - if (key.startsWith(prefix)) { - const persistedQuery = await deserialize(value) - + const storageKeyPrefix = `${prefix}-` + 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 From 8da1d1d2b5b5a5e51195946a9b8456ef3e74602c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klomp?= Date: Thu, 26 Feb 2026 10:41:44 +0100 Subject: [PATCH 2/4] changeset --- .changeset/hungry-adults-count.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/hungry-adults-count.md diff --git a/.changeset/hungry-adults-count.md b/.changeset/hungry-adults-count.md new file mode 100644 index 00000000000..9408425f9cb --- /dev/null +++ b/.changeset/hungry-adults-count.md @@ -0,0 +1,5 @@ +--- +'@tanstack/query-persist-client-core': minor +--- + +removeItem if deserialize fails From 8271434a85bff9e3bca61fceaba84df95e4b7abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klomp?= Date: Thu, 26 Feb 2026 10:50:00 +0100 Subject: [PATCH 3/4] Use storageKeyPrefix --- packages/query-persist-client-core/src/createPersister.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/query-persist-client-core/src/createPersister.ts b/packages/query-persist-client-core/src/createPersister.ts index 90d51587d13..714a6352a23 100644 --- a/packages/query-persist-client-core/src/createPersister.ts +++ b/packages/query-persist-client-core/src/createPersister.ts @@ -249,7 +249,8 @@ export function experimental_createQueryPersister({ if (storage?.entries) { const entries = await storage.entries() for (const [key, value] of entries) { - if (key.startsWith(prefix)) { + const storageKeyPrefix = `${prefix}-` + if (key.startsWith(storageKeyPrefix)) { let persistedQuery: PersistedQuery try { persistedQuery = await deserialize(value) From 6e20934fa58157569d984cda972523a52cac8480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Klomp?= Date: Thu, 26 Feb 2026 10:51:36 +0100 Subject: [PATCH 4/4] Set storageKeyPrefix outside loop --- packages/query-persist-client-core/src/createPersister.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/query-persist-client-core/src/createPersister.ts b/packages/query-persist-client-core/src/createPersister.ts index 714a6352a23..254073f22ac 100644 --- a/packages/query-persist-client-core/src/createPersister.ts +++ b/packages/query-persist-client-core/src/createPersister.ts @@ -247,9 +247,9 @@ export function experimental_createQueryPersister({ async function persisterGc() { if (storage?.entries) { + const storageKeyPrefix = `${prefix}-` const entries = await storage.entries() for (const [key, value] of entries) { - const storageKeyPrefix = `${prefix}-` if (key.startsWith(storageKeyPrefix)) { let persistedQuery: PersistedQuery try { @@ -277,9 +277,9 @@ export function experimental_createQueryPersister({ const { exact, queryKey } = filters if (storage?.entries) { + const storageKeyPrefix = `${prefix}-` const entries = await storage.entries() for (const [key, value] of entries) { - const storageKeyPrefix = `${prefix}-` if (key.startsWith(storageKeyPrefix)) { let persistedQuery: PersistedQuery try {