Skip to content

Commit e505568

Browse files
authored
feat(experimental_createQueryPersister): removeItem if deserialize fails (#10190)
* removeItem if deserialize fails * changeset * Use storageKeyPrefix * Set storageKeyPrefix outside loop * changeset is patch
1 parent 0da627b commit e505568

2 files changed

Lines changed: 30 additions & 7 deletions

File tree

.changeset/hungry-adults-count.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@tanstack/query-persist-client-core': patch
3+
---
4+
5+
removeItem if deserialize fails

packages/query-persist-client-core/src/createPersister.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,13 @@ export function experimental_createQueryPersister<TStorageValue = string>({
131131
try {
132132
const storedData = await storage.getItem(storageKey)
133133
if (storedData) {
134-
const persistedQuery = await deserialize(storedData)
134+
let persistedQuery: PersistedQuery
135+
try {
136+
persistedQuery = await deserialize(storedData)
137+
} catch {
138+
await storage.removeItem(storageKey)
139+
return
140+
}
135141

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

242248
async function persisterGc() {
243249
if (storage?.entries) {
250+
const storageKeyPrefix = `${prefix}-`
244251
const entries = await storage.entries()
245252
for (const [key, value] of entries) {
246-
if (key.startsWith(prefix)) {
247-
const persistedQuery = await deserialize(value)
248-
253+
if (key.startsWith(storageKeyPrefix)) {
254+
let persistedQuery: PersistedQuery
255+
try {
256+
persistedQuery = await deserialize(value)
257+
} catch {
258+
await storage.removeItem(key)
259+
continue
260+
}
249261
if (isExpiredOrBusted(persistedQuery)) {
250262
await storage.removeItem(key)
251263
}
@@ -265,11 +277,17 @@ export function experimental_createQueryPersister<TStorageValue = string>({
265277
const { exact, queryKey } = filters
266278

267279
if (storage?.entries) {
280+
const storageKeyPrefix = `${prefix}-`
268281
const entries = await storage.entries()
269282
for (const [key, value] of entries) {
270-
if (key.startsWith(prefix)) {
271-
const persistedQuery = await deserialize(value)
272-
283+
if (key.startsWith(storageKeyPrefix)) {
284+
let persistedQuery: PersistedQuery
285+
try {
286+
persistedQuery = await deserialize(value)
287+
} catch {
288+
await storage.removeItem(key)
289+
continue
290+
}
273291
if (isExpiredOrBusted(persistedQuery)) {
274292
await storage.removeItem(key)
275293
continue

0 commit comments

Comments
 (0)