8
8
*
9
9
* @flow
10
10
*/
11
-
12
- /* global localStorage */
13
11
import { isLocalDatastoreKey } from './LocalDatastoreUtils' ;
12
+ import Storage from './Storage' ;
14
13
15
14
const LocalDatastoreController = {
16
- fromPinWithName ( name : string ) : Array < Object > {
17
- const values = localStorage . getItem ( name ) ;
15
+ async fromPinWithName ( name : string ) : Array < Object > {
16
+ const values = await Storage . getItemAsync ( name ) ;
18
17
if ( ! values ) {
19
18
return [ ] ;
20
19
}
@@ -23,49 +22,46 @@ const LocalDatastoreController = {
23
22
} ,
24
23
25
24
pinWithName ( name : string , value : any ) {
26
- try {
27
- const values = JSON . stringify ( value ) ;
28
- localStorage . setItem ( name , values ) ;
29
- } catch ( e ) {
30
- // Quota exceeded, possibly due to Safari Private Browsing mode
31
- console . log ( e . message ) ;
32
- }
25
+ const values = JSON . stringify ( value ) ;
26
+ return Storage . setItemAsync ( name , values ) ;
33
27
} ,
34
28
35
29
unPinWithName ( name : string ) {
36
- localStorage . removeItem ( name ) ;
30
+ return Storage . removeItemAsync ( name ) ;
37
31
} ,
38
32
39
- getAllContents ( ) : Object {
40
- const LDS = { } ;
41
- for ( let i = 0 ; i < localStorage . length ; i += 1 ) {
42
- const key = localStorage . key ( i ) ;
33
+ async getAllContents ( ) : Object {
34
+ const keys = await Storage . getAllKeysAsync ( ) ;
35
+ return keys . reduce ( async ( previousPromise , key ) => {
36
+ const LDS = await previousPromise ;
43
37
if ( isLocalDatastoreKey ( key ) ) {
44
- const value = localStorage . getItem ( key ) ;
38
+ const value = await Storage . getItemAsync ( key ) ;
45
39
try {
46
40
LDS [ key ] = JSON . parse ( value ) ;
47
41
} catch ( error ) {
48
42
console . error ( 'Error getAllContents: ' , error ) ;
49
43
}
50
44
}
51
- }
52
- return LDS ;
45
+ return LDS ;
46
+ } , Promise . resolve ( { } ) ) ;
53
47
} ,
54
48
55
- getRawStorage ( ) : Object {
56
- const storage = { } ;
57
- for ( let i = 0 ; i < localStorage . length ; i += 1 ) {
58
- const key = localStorage . key ( i ) ;
59
- const value = localStorage . getItem ( key ) ;
60
- storage [ key ] = value ;
61
- }
62
- return storage ;
49
+ // Used for testing
50
+ async getRawStorage ( ) : Object {
51
+ const keys = await Storage . getAllKeysAsync ( ) ;
52
+ return keys . reduce ( async ( previousPromise , key ) => {
53
+ const LDS = await previousPromise ;
54
+ const value = await Storage . getItemAsync ( key ) ;
55
+ LDS [ key ] = value ;
56
+ return LDS ;
57
+ } , Promise . resolve ( { } ) ) ;
63
58
} ,
64
59
65
- clear ( ) : Promise {
60
+ async clear ( ) : Promise {
61
+ const keys = await Storage . getAllKeysAsync ( ) ;
62
+
66
63
const toRemove = [ ] ;
67
- for ( let i = 0 ; i < localStorage . length ; i += 1 ) {
68
- const key = localStorage . key ( i ) ;
64
+ for ( const key of keys ) {
69
65
if ( isLocalDatastoreKey ( key ) ) {
70
66
toRemove . push ( key ) ;
71
67
}
0 commit comments