@onekeyfe/react-native-async-storage 3.0.12 → 3.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/module/NativeAsyncStorage.web.js +141 -0
- package/lib/module/index.js +1 -1
- package/lib/module/merge-options.d.js +2 -0
- package/lib/typescript/src/NativeAsyncStorage.web.d.ts +11 -0
- package/package.json +4 -1
- package/src/NativeAsyncStorage.web.ts +181 -0
- package/src/merge-options.d.ts +4 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Copyright (c) Nicolas Gallagher.
|
|
5
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
6
|
+
*
|
|
7
|
+
* This source code is licensed under the MIT license found in the
|
|
8
|
+
* LICENSE file in the root directory of this source tree.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import mergeOptions from 'merge-options';
|
|
12
|
+
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
14
|
+
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
16
|
+
|
|
17
|
+
const merge = mergeOptions.bind({
|
|
18
|
+
concatArrays: true,
|
|
19
|
+
ignoreUndefined: true
|
|
20
|
+
});
|
|
21
|
+
function mergeLocalStorageItem(key, value) {
|
|
22
|
+
const oldValue = window.localStorage.getItem(key);
|
|
23
|
+
if (oldValue) {
|
|
24
|
+
const oldObject = JSON.parse(oldValue);
|
|
25
|
+
const newObject = JSON.parse(value);
|
|
26
|
+
const nextValue = JSON.stringify(merge(oldObject, newObject));
|
|
27
|
+
window.localStorage.setItem(key, nextValue);
|
|
28
|
+
} else {
|
|
29
|
+
window.localStorage.setItem(key, value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function createPromise(getValue, callback) {
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
try {
|
|
35
|
+
const value = getValue();
|
|
36
|
+
callback?.(null, value);
|
|
37
|
+
resolve(value);
|
|
38
|
+
} catch (err) {
|
|
39
|
+
callback?.(err);
|
|
40
|
+
reject(err);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function createPromiseAll(promises, callback, processResult) {
|
|
45
|
+
return Promise.all(promises).then(result => {
|
|
46
|
+
const value = processResult?.(result) ?? null;
|
|
47
|
+
callback?.(null, value);
|
|
48
|
+
return Promise.resolve(value);
|
|
49
|
+
}, errors => {
|
|
50
|
+
callback?.(errors);
|
|
51
|
+
return Promise.reject(errors);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
const AsyncStorage = {
|
|
55
|
+
/**
|
|
56
|
+
* Fetches `key` value.
|
|
57
|
+
*/
|
|
58
|
+
getItem: (key, callback) => {
|
|
59
|
+
return createPromise(() => window.localStorage.getItem(key), callback);
|
|
60
|
+
},
|
|
61
|
+
/**
|
|
62
|
+
* Sets `value` for `key`.
|
|
63
|
+
*/
|
|
64
|
+
setItem: (key, value, callback) => {
|
|
65
|
+
return createPromise(() => window.localStorage.setItem(key, value), callback);
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Removes a `key`
|
|
69
|
+
*/
|
|
70
|
+
removeItem: (key, callback) => {
|
|
71
|
+
return createPromise(() => window.localStorage.removeItem(key), callback);
|
|
72
|
+
},
|
|
73
|
+
/**
|
|
74
|
+
* Merges existing value with input value, assuming they are stringified JSON.
|
|
75
|
+
*/
|
|
76
|
+
mergeItem: (key, value, callback) => {
|
|
77
|
+
return createPromise(() => mergeLocalStorageItem(key, value), callback);
|
|
78
|
+
},
|
|
79
|
+
/**
|
|
80
|
+
* Erases *all* AsyncStorage for the domain.
|
|
81
|
+
*/
|
|
82
|
+
clear: callback => {
|
|
83
|
+
return createPromise(() => window.localStorage.clear(), callback);
|
|
84
|
+
},
|
|
85
|
+
/**
|
|
86
|
+
* Gets *all* keys known to the app, for all callers, libraries, etc.
|
|
87
|
+
*/
|
|
88
|
+
getAllKeys: callback => {
|
|
89
|
+
return createPromise(() => {
|
|
90
|
+
const numberOfKeys = window.localStorage.length;
|
|
91
|
+
const keys = [];
|
|
92
|
+
for (let i = 0; i < numberOfKeys; i += 1) {
|
|
93
|
+
const key = window.localStorage.key(i) || '';
|
|
94
|
+
keys.push(key);
|
|
95
|
+
}
|
|
96
|
+
return keys;
|
|
97
|
+
}, callback);
|
|
98
|
+
},
|
|
99
|
+
/**
|
|
100
|
+
* (stub) Flushes any pending requests using a single batch call to get the data.
|
|
101
|
+
*/
|
|
102
|
+
flushGetRequests: () => undefined,
|
|
103
|
+
/**
|
|
104
|
+
* multiGet resolves to an array of key-value pair arrays that matches the
|
|
105
|
+
* input format of multiSet.
|
|
106
|
+
*
|
|
107
|
+
* multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']]
|
|
108
|
+
*/
|
|
109
|
+
multiGet: (keys, callback) => {
|
|
110
|
+
const promises = keys.map(key => AsyncStorage.getItem(key));
|
|
111
|
+
const processResult = result => result.map((value, i) => [keys[i], value]);
|
|
112
|
+
return createPromiseAll(promises, callback, processResult);
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* Takes an array of key-value array pairs.
|
|
116
|
+
* multiSet([['k1', 'val1'], ['k2', 'val2']])
|
|
117
|
+
*/
|
|
118
|
+
multiSet: (keyValuePairs, callback) => {
|
|
119
|
+
const promises = keyValuePairs.map(item => AsyncStorage.setItem(item[0], item[1]));
|
|
120
|
+
return createPromiseAll(promises, callback);
|
|
121
|
+
},
|
|
122
|
+
/**
|
|
123
|
+
* Delete all the keys in the `keys` array.
|
|
124
|
+
*/
|
|
125
|
+
multiRemove: (keys, callback) => {
|
|
126
|
+
const promises = keys.map(key => AsyncStorage.removeItem(key));
|
|
127
|
+
return createPromiseAll(promises, callback);
|
|
128
|
+
},
|
|
129
|
+
/**
|
|
130
|
+
* Takes an array of key-value array pairs and merges them with existing
|
|
131
|
+
* values, assuming they are stringified JSON.
|
|
132
|
+
*
|
|
133
|
+
* multiMerge([['k1', 'val1'], ['k2', 'val2']])
|
|
134
|
+
*/
|
|
135
|
+
multiMerge: (keyValuePairs, callback) => {
|
|
136
|
+
const promises = keyValuePairs.map(item => AsyncStorage.mergeItem(item[0], item[1]));
|
|
137
|
+
return createPromiseAll(promises, callback);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
export default AsyncStorage;
|
|
141
|
+
//# sourceMappingURL=NativeAsyncStorage.web.js.map
|
package/lib/module/index.js
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Nicolas Gallagher.
|
|
3
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import type { AsyncStorageStatic } from './types';
|
|
9
|
+
declare const AsyncStorage: AsyncStorageStatic;
|
|
10
|
+
export default AsyncStorage;
|
|
11
|
+
//# sourceMappingURL=NativeAsyncStorage.web.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/react-native-async-storage",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.14",
|
|
4
4
|
"description": "react-native-async-storage",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "./lib/typescript/src/index.d.ts",
|
|
@@ -54,6 +54,9 @@
|
|
|
54
54
|
"publishConfig": {
|
|
55
55
|
"registry": "https://registry.npmjs.org/"
|
|
56
56
|
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"merge-options": "^3.0.4"
|
|
59
|
+
},
|
|
57
60
|
"devDependencies": {
|
|
58
61
|
"@commitlint/config-conventional": "^19.8.1",
|
|
59
62
|
"@eslint/compat": "^1.3.2",
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Nicolas Gallagher.
|
|
3
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the MIT license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import mergeOptions from 'merge-options';
|
|
10
|
+
import type {
|
|
11
|
+
AsyncStorageStatic,
|
|
12
|
+
MultiCallback,
|
|
13
|
+
MultiGetCallback,
|
|
14
|
+
} from './types';
|
|
15
|
+
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
17
|
+
type OnMultiResult = Function;
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
19
|
+
type OnResult = Function;
|
|
20
|
+
|
|
21
|
+
const merge = mergeOptions.bind({
|
|
22
|
+
concatArrays: true,
|
|
23
|
+
ignoreUndefined: true,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
function mergeLocalStorageItem(key: string, value: string) {
|
|
27
|
+
const oldValue = window.localStorage.getItem(key);
|
|
28
|
+
if (oldValue) {
|
|
29
|
+
const oldObject = JSON.parse(oldValue);
|
|
30
|
+
const newObject = JSON.parse(value);
|
|
31
|
+
const nextValue = JSON.stringify(merge(oldObject, newObject));
|
|
32
|
+
window.localStorage.setItem(key, nextValue);
|
|
33
|
+
} else {
|
|
34
|
+
window.localStorage.setItem(key, value);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function createPromise<Result, Callback extends OnResult>(
|
|
39
|
+
getValue: () => Result,
|
|
40
|
+
callback?: Callback
|
|
41
|
+
): Promise<Result> {
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
try {
|
|
44
|
+
const value = getValue();
|
|
45
|
+
callback?.(null, value);
|
|
46
|
+
resolve(value);
|
|
47
|
+
} catch (err) {
|
|
48
|
+
callback?.(err);
|
|
49
|
+
reject(err);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function createPromiseAll<
|
|
55
|
+
ReturnType,
|
|
56
|
+
Result,
|
|
57
|
+
ResultProcessor extends OnMultiResult
|
|
58
|
+
>(
|
|
59
|
+
promises: Promise<Result>[],
|
|
60
|
+
callback?: MultiCallback | MultiGetCallback,
|
|
61
|
+
processResult?: ResultProcessor
|
|
62
|
+
): Promise<ReturnType> {
|
|
63
|
+
return Promise.all(promises).then(
|
|
64
|
+
(result) => {
|
|
65
|
+
const value = processResult?.(result) ?? null;
|
|
66
|
+
callback?.(null, value);
|
|
67
|
+
return Promise.resolve(value);
|
|
68
|
+
},
|
|
69
|
+
(errors) => {
|
|
70
|
+
callback?.(errors);
|
|
71
|
+
return Promise.reject(errors);
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const AsyncStorage: AsyncStorageStatic = {
|
|
77
|
+
/**
|
|
78
|
+
* Fetches `key` value.
|
|
79
|
+
*/
|
|
80
|
+
getItem: (key, callback) => {
|
|
81
|
+
return createPromise(() => window.localStorage.getItem(key), callback);
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Sets `value` for `key`.
|
|
86
|
+
*/
|
|
87
|
+
setItem: (key, value, callback) => {
|
|
88
|
+
return createPromise(
|
|
89
|
+
() => window.localStorage.setItem(key, value),
|
|
90
|
+
callback
|
|
91
|
+
);
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Removes a `key`
|
|
96
|
+
*/
|
|
97
|
+
removeItem: (key, callback) => {
|
|
98
|
+
return createPromise(() => window.localStorage.removeItem(key), callback);
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Merges existing value with input value, assuming they are stringified JSON.
|
|
103
|
+
*/
|
|
104
|
+
mergeItem: (key, value, callback) => {
|
|
105
|
+
return createPromise(() => mergeLocalStorageItem(key, value), callback);
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Erases *all* AsyncStorage for the domain.
|
|
110
|
+
*/
|
|
111
|
+
clear: (callback) => {
|
|
112
|
+
return createPromise(() => window.localStorage.clear(), callback);
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Gets *all* keys known to the app, for all callers, libraries, etc.
|
|
117
|
+
*/
|
|
118
|
+
getAllKeys: (callback) => {
|
|
119
|
+
return createPromise(() => {
|
|
120
|
+
const numberOfKeys = window.localStorage.length;
|
|
121
|
+
const keys: string[] = [];
|
|
122
|
+
for (let i = 0; i < numberOfKeys; i += 1) {
|
|
123
|
+
const key = window.localStorage.key(i) || '';
|
|
124
|
+
keys.push(key);
|
|
125
|
+
}
|
|
126
|
+
return keys;
|
|
127
|
+
}, callback);
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* (stub) Flushes any pending requests using a single batch call to get the data.
|
|
132
|
+
*/
|
|
133
|
+
flushGetRequests: () => undefined,
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* multiGet resolves to an array of key-value pair arrays that matches the
|
|
137
|
+
* input format of multiSet.
|
|
138
|
+
*
|
|
139
|
+
* multiGet(['k1', 'k2']) -> [['k1', 'val1'], ['k2', 'val2']]
|
|
140
|
+
*/
|
|
141
|
+
multiGet: (keys, callback) => {
|
|
142
|
+
const promises = keys.map((key) => AsyncStorage.getItem(key));
|
|
143
|
+
const processResult = (result: string[]) =>
|
|
144
|
+
result.map((value, i) => [keys[i], value]);
|
|
145
|
+
return createPromiseAll(promises, callback, processResult);
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Takes an array of key-value array pairs.
|
|
150
|
+
* multiSet([['k1', 'val1'], ['k2', 'val2']])
|
|
151
|
+
*/
|
|
152
|
+
multiSet: (keyValuePairs, callback) => {
|
|
153
|
+
const promises = keyValuePairs.map((item) =>
|
|
154
|
+
AsyncStorage.setItem(item[0], item[1])
|
|
155
|
+
);
|
|
156
|
+
return createPromiseAll(promises, callback);
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Delete all the keys in the `keys` array.
|
|
161
|
+
*/
|
|
162
|
+
multiRemove: (keys, callback) => {
|
|
163
|
+
const promises = keys.map((key) => AsyncStorage.removeItem(key));
|
|
164
|
+
return createPromiseAll(promises, callback);
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Takes an array of key-value array pairs and merges them with existing
|
|
169
|
+
* values, assuming they are stringified JSON.
|
|
170
|
+
*
|
|
171
|
+
* multiMerge([['k1', 'val1'], ['k2', 'val2']])
|
|
172
|
+
*/
|
|
173
|
+
multiMerge: (keyValuePairs, callback) => {
|
|
174
|
+
const promises = keyValuePairs.map((item) =>
|
|
175
|
+
AsyncStorage.mergeItem(item[0], item[1])
|
|
176
|
+
);
|
|
177
|
+
return createPromiseAll(promises, callback);
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export default AsyncStorage;
|