File tree Expand file tree Collapse file tree 1 file changed +31
-1
lines changed Expand file tree Collapse file tree 1 file changed +31
-1
lines changed Original file line number Diff line number Diff line change @@ -24,6 +24,34 @@ const canUseDOM =
24
24
typeof window . sessionStorage !== 'undefined'
25
25
)
26
26
27
+ const createMemoryStorage = ( ) : Storage => {
28
+ const storage : { [ key : string ] : string | null } = { }
29
+
30
+ return {
31
+ length : Object . entries ( storage ) . length ,
32
+ clear ( ) {
33
+ Object . keys ( storage ) . forEach ( key => {
34
+ delete storage [ key ]
35
+ } )
36
+ } ,
37
+ key ( index ) {
38
+ return Object . values ( storage ) [ index ] ?? null
39
+ } ,
40
+ getItem ( key ) {
41
+ return storage [ key ] ?? null
42
+ } ,
43
+ setItem ( key , value ) {
44
+ storage [ key ] = value
45
+ } ,
46
+ removeItem ( key ) {
47
+ delete storage [ key ]
48
+ } ,
49
+ }
50
+ }
51
+
52
+ const getStorage = ( name : 'localStorage' | 'sessionStorage' ) =>
53
+ canUseDOM ? window [ name ] : createMemoryStorage ( )
54
+
27
55
const subscribeStorage = ( callback : ( ) => void ) => {
28
56
if ( canUseDOM ) {
29
57
window . addEventListener ( 'storage' , callback )
@@ -47,7 +75,9 @@ const useStorage = <T>(
47
75
) : [ T | null , ( value : T | undefined ) => void ] => {
48
76
const storage = useMemo (
49
77
( ) =>
50
- options ?. kind === 'session' ? window . sessionStorage : window . localStorage ,
78
+ options ?. kind === 'session'
79
+ ? getStorage ( 'sessionStorage' )
80
+ : getStorage ( 'localStorage' ) ,
51
81
[ options ?. kind ] ,
52
82
)
53
83
You can’t perform that action at this time.
0 commit comments