File tree 2 files changed +26
-4
lines changed
createAsyncStoragePersistor-experimental
createWebStoragePersistor-experimental
2 files changed +26
-4
lines changed Original file line number Diff line number Diff line change @@ -14,16 +14,26 @@ interface CreateAsyncStoragePersistorOptions {
14
14
/** To avoid spamming,
15
15
* pass a time in ms to throttle saving the cache to disk */
16
16
throttleTime ?: number
17
+ /**
18
+ * @defualt `JSON.stringify`
19
+ */
20
+ serialize ?: ( client : PersistedClient ) => string ;
21
+ /**
22
+ * @defualt `JSON.parse`
23
+ */
24
+ deserialize ?: ( cachedString : string ) => PersistedClient ;
17
25
}
18
26
19
27
export const createAsyncStoragePersistor = ( {
20
28
storage,
21
29
key = `REACT_QUERY_OFFLINE_CACHE` ,
22
30
throttleTime = 1000 ,
31
+ serialize = JSON . stringify ,
32
+ deserialize = JSON . parse ,
23
33
} : CreateAsyncStoragePersistorOptions ) : Persistor => {
24
34
return {
25
35
persistClient : asyncThrottle (
26
- persistedClient => storage . setItem ( key , JSON . stringify ( persistedClient ) ) ,
36
+ persistedClient => storage . setItem ( key , serialize ( persistedClient ) ) ,
27
37
{ interval : throttleTime }
28
38
) ,
29
39
restoreClient : async ( ) => {
@@ -33,7 +43,7 @@ export const createAsyncStoragePersistor = ({
33
43
return
34
44
}
35
45
36
- return JSON . parse ( cacheString ) as PersistedClient
46
+ return deserialize ( cacheString ) as PersistedClient
37
47
} ,
38
48
removeClient : ( ) => storage . removeItem ( key ) ,
39
49
}
Original file line number Diff line number Diff line change @@ -9,17 +9,29 @@ interface CreateWebStoragePersistorOptions {
9
9
/** To avoid spamming,
10
10
* pass a time in ms to throttle saving the cache to disk */
11
11
throttleTime ?: number
12
+ /**
13
+ * How to serialize the data to storage.
14
+ * @defualt `JSON.stringify`
15
+ */
16
+ serialize ?: ( client : PersistedClient ) => string ;
17
+ /**
18
+ * How to deserialize the data from storage.
19
+ * @defualt `JSON.parse`
20
+ */
21
+ deserialize ?: ( cachedString : string ) => PersistedClient ;
12
22
}
13
23
14
24
export function createWebStoragePersistor ( {
15
25
storage,
16
26
key = `REACT_QUERY_OFFLINE_CACHE` ,
17
27
throttleTime = 1000 ,
28
+ serialize = JSON . stringify ,
29
+ deserialize = JSON . parse ,
18
30
} : CreateWebStoragePersistorOptions ) : Persistor {
19
31
if ( typeof storage !== 'undefined' ) {
20
32
return {
21
33
persistClient : throttle ( persistedClient => {
22
- storage . setItem ( key , JSON . stringify ( persistedClient ) )
34
+ storage . setItem ( key , serialize ( persistedClient ) )
23
35
} , throttleTime ) ,
24
36
restoreClient : ( ) => {
25
37
const cacheString = storage . getItem ( key )
@@ -28,7 +40,7 @@ export function createWebStoragePersistor({
28
40
return
29
41
}
30
42
31
- return JSON . parse ( cacheString ) as PersistedClient
43
+ return deserialize ( cacheString ) as PersistedClient
32
44
} ,
33
45
removeClient : ( ) => {
34
46
storage . removeItem ( key )
You can’t perform that action at this time.
0 commit comments