-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmmkv-persister.ts
More file actions
49 lines (47 loc) · 1.42 KB
/
mmkv-persister.ts
File metadata and controls
49 lines (47 loc) · 1.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 2025 — infra/query/persistence/mmkv-persister.ts
/**
* GUIDELINE: MMKV Query Cache Persistence (NO implementation)
* ------------------------------------------------------------------
* STORAGE
* - Use infra/storage/mmkv.ts (KeyValueStorage)
* - Namespace: 'rq_cache_v1'
*
* WHAT TO PERSIST
* - Only non-sensitive normalized data (no tokens/PII)
* - Query data + timestamps
* - Do NOT persist raw transport responses or errors
*
* TTL / LIMITS → see persistence/limits.ts
* realtime: 5–15s
* nearRealtime: 30–120s
* reference: 1–24h
*
* LIFECYCLE
* - Hydrate on app start
* - Persist on background/interval/successful fetch
* - Clear on logout / env switch
*/
// Persists React Query cache using your kvStorage + constants.RQ_CACHE
import type { Persister } from '@tanstack/react-query-persist-client'
import { constants } from '@/config/constants'
import { kvStorage } from '@/shared/services/storage/mmkv'
export const mmkvPersister: Persister = {
persistClient: async client => {
try {
kvStorage.setString(constants.RQ_CACHE, JSON.stringify(client))
} catch {}
},
restoreClient: async () => {
try {
const raw = kvStorage.getString(constants.RQ_CACHE)
return raw ? JSON.parse(raw) : undefined
} catch {
return undefined
}
},
removeClient: async () => {
try {
kvStorage.delete(constants.RQ_CACHE)
} catch {}
},
}