@onekeyfe/react-native-async-storage 3.0.75 → 3.0.77
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/android/src/main/java/com/asyncstorage/RNCAsyncStorageModule.kt +4 -0
- package/ios/AsyncStorage.h +3 -0
- package/ios/AsyncStorage.mm +16 -0
- package/lib/module/index.js +35 -7
- package/lib/module/runtimeConfig.js +34 -0
- package/lib/typescript/src/NativeAsyncStorage.d.ts +1 -0
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/runtimeConfig.d.ts +14 -0
- package/package.json +1 -1
- package/src/NativeAsyncStorage.ts +1 -0
- package/src/index.tsx +88 -7
- package/src/runtimeConfig.ts +76 -0
|
@@ -292,6 +292,10 @@ class RNCAsyncStorageModule(reactContext: ReactApplicationContext) :
|
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
294
|
|
|
295
|
+
override fun reloadManifest(promise: Promise) {
|
|
296
|
+
promise.resolve(null)
|
|
297
|
+
}
|
|
298
|
+
|
|
295
299
|
// --- Private helpers (ported from AsyncLocalStorageUtil.java) ---
|
|
296
300
|
|
|
297
301
|
private fun ensureDatabase(): Boolean {
|
package/ios/AsyncStorage.h
CHANGED
package/ios/AsyncStorage.mm
CHANGED
|
@@ -711,4 +711,20 @@ static void RCTStorageDirectoryMigrationCheck(NSString *fromStorageDirectory,
|
|
|
711
711
|
});
|
|
712
712
|
}
|
|
713
713
|
|
|
714
|
+
- (void)reloadManifest:(RCTPromiseResolveBlock)resolve
|
|
715
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
716
|
+
{
|
|
717
|
+
dispatch_async(RCTGetMethodQueue(), ^{
|
|
718
|
+
self->_haveSetup = NO;
|
|
719
|
+
NSDictionary *ensureSetupError = [self _ensureSetup];
|
|
720
|
+
if (ensureSetupError) {
|
|
721
|
+
reject(@"ASYNC_STORAGE_ERROR",
|
|
722
|
+
ensureSetupError[@"message"] ?: @"Storage setup failed",
|
|
723
|
+
nil);
|
|
724
|
+
return;
|
|
725
|
+
}
|
|
726
|
+
resolve(nil);
|
|
727
|
+
});
|
|
728
|
+
}
|
|
729
|
+
|
|
714
730
|
@end
|
package/lib/module/index.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import NativeModule from './NativeAsyncStorage';
|
|
4
|
+
import { forwardAsyncStorageWriteIfNeeded } from "./runtimeConfig.js";
|
|
5
|
+
async function forwardWriteAndReloadManifestIfNeeded(method, args) {
|
|
6
|
+
if (!(await forwardAsyncStorageWriteIfNeeded(method, args))) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
await NativeModule.reloadManifest();
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
async function runLocalWriteWithFreshManifest(write) {
|
|
13
|
+
await NativeModule.reloadManifest();
|
|
14
|
+
await write();
|
|
15
|
+
}
|
|
4
16
|
function createAsyncStorage() {
|
|
5
17
|
const getItem = async (key, callback) => {
|
|
6
18
|
try {
|
|
@@ -16,7 +28,9 @@ function createAsyncStorage() {
|
|
|
16
28
|
};
|
|
17
29
|
const setItem = async (key, value, callback) => {
|
|
18
30
|
try {
|
|
19
|
-
await
|
|
31
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('multiSet', [[[key, value]]]))) {
|
|
32
|
+
await runLocalWriteWithFreshManifest(() => NativeModule.multiSet([[key, value]]));
|
|
33
|
+
}
|
|
20
34
|
callback?.(null);
|
|
21
35
|
} catch (e) {
|
|
22
36
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -26,7 +40,9 @@ function createAsyncStorage() {
|
|
|
26
40
|
};
|
|
27
41
|
const removeItem = async (key, callback) => {
|
|
28
42
|
try {
|
|
29
|
-
await
|
|
43
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('multiRemove', [[key]]))) {
|
|
44
|
+
await runLocalWriteWithFreshManifest(() => NativeModule.multiRemove([key]));
|
|
45
|
+
}
|
|
30
46
|
callback?.(null);
|
|
31
47
|
} catch (e) {
|
|
32
48
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -36,7 +52,9 @@ function createAsyncStorage() {
|
|
|
36
52
|
};
|
|
37
53
|
const mergeItem = async (key, value, callback) => {
|
|
38
54
|
try {
|
|
39
|
-
await
|
|
55
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('multiMerge', [[[key, value]]]))) {
|
|
56
|
+
await runLocalWriteWithFreshManifest(() => NativeModule.multiMerge([[key, value]]));
|
|
57
|
+
}
|
|
40
58
|
callback?.(null);
|
|
41
59
|
} catch (e) {
|
|
42
60
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -46,7 +64,9 @@ function createAsyncStorage() {
|
|
|
46
64
|
};
|
|
47
65
|
const clear = async callback => {
|
|
48
66
|
try {
|
|
49
|
-
await
|
|
67
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('clear', []))) {
|
|
68
|
+
await NativeModule.clear();
|
|
69
|
+
}
|
|
50
70
|
callback?.(null);
|
|
51
71
|
} catch (e) {
|
|
52
72
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -82,7 +102,9 @@ function createAsyncStorage() {
|
|
|
82
102
|
const multiSet = async (keyValuePairs, callback) => {
|
|
83
103
|
try {
|
|
84
104
|
const mutablePairs = keyValuePairs.map(([k, v]) => [k, v]);
|
|
85
|
-
await
|
|
105
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('multiSet', [mutablePairs]))) {
|
|
106
|
+
await runLocalWriteWithFreshManifest(() => NativeModule.multiSet(mutablePairs));
|
|
107
|
+
}
|
|
86
108
|
callback?.(null);
|
|
87
109
|
} catch (e) {
|
|
88
110
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -92,7 +114,10 @@ function createAsyncStorage() {
|
|
|
92
114
|
};
|
|
93
115
|
const multiRemove = async (keys, callback) => {
|
|
94
116
|
try {
|
|
95
|
-
|
|
117
|
+
const mutableKeys = [...keys];
|
|
118
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('multiRemove', [mutableKeys]))) {
|
|
119
|
+
await runLocalWriteWithFreshManifest(() => NativeModule.multiRemove(mutableKeys));
|
|
120
|
+
}
|
|
96
121
|
callback?.(null);
|
|
97
122
|
} catch (e) {
|
|
98
123
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -102,7 +127,9 @@ function createAsyncStorage() {
|
|
|
102
127
|
};
|
|
103
128
|
const multiMerge = async (keyValuePairs, callback) => {
|
|
104
129
|
try {
|
|
105
|
-
await
|
|
130
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('multiMerge', [keyValuePairs]))) {
|
|
131
|
+
await runLocalWriteWithFreshManifest(() => NativeModule.multiMerge(keyValuePairs));
|
|
132
|
+
}
|
|
106
133
|
callback?.(null);
|
|
107
134
|
} catch (e) {
|
|
108
135
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -126,4 +153,5 @@ function createAsyncStorage() {
|
|
|
126
153
|
}
|
|
127
154
|
const AsyncStorage = createAsyncStorage();
|
|
128
155
|
export default AsyncStorage;
|
|
156
|
+
export { setAsyncStorageShouldForwardWriteGetter, setAsyncStorageWriteForwarder } from "./runtimeConfig.js";
|
|
129
157
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const runtimeGlobal = globalThis;
|
|
4
|
+
let shouldForwardWriteGetter = runtimeGlobal.__onekeyAsyncStorageShouldForwardWriteGetter;
|
|
5
|
+
let writeForwarder = runtimeGlobal.__onekeyAsyncStorageWriteForwarder;
|
|
6
|
+
export function setAsyncStorageShouldForwardWriteGetter(getter) {
|
|
7
|
+
shouldForwardWriteGetter = getter;
|
|
8
|
+
runtimeGlobal.__onekeyAsyncStorageShouldForwardWriteGetter = getter;
|
|
9
|
+
}
|
|
10
|
+
export function setAsyncStorageWriteForwarder(forwarder) {
|
|
11
|
+
writeForwarder = forwarder;
|
|
12
|
+
runtimeGlobal.__onekeyAsyncStorageWriteForwarder = forwarder;
|
|
13
|
+
}
|
|
14
|
+
function getShouldForwardWriteGetter() {
|
|
15
|
+
return shouldForwardWriteGetter ?? runtimeGlobal.__onekeyAsyncStorageShouldForwardWriteGetter;
|
|
16
|
+
}
|
|
17
|
+
function getWriteForwarder() {
|
|
18
|
+
return writeForwarder ?? runtimeGlobal.__onekeyAsyncStorageWriteForwarder;
|
|
19
|
+
}
|
|
20
|
+
function shouldForwardWriteToBackground() {
|
|
21
|
+
return getShouldForwardWriteGetter()?.() ?? false;
|
|
22
|
+
}
|
|
23
|
+
export async function forwardAsyncStorageWriteIfNeeded(method, args) {
|
|
24
|
+
if (!shouldForwardWriteToBackground()) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const forwarder = getWriteForwarder();
|
|
28
|
+
if (!forwarder) {
|
|
29
|
+
throw new Error('AsyncStorage write forwarder is not configured.');
|
|
30
|
+
}
|
|
31
|
+
await forwarder(method, args);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=runtimeConfig.js.map
|
|
@@ -6,6 +6,7 @@ export interface Spec extends TurboModule {
|
|
|
6
6
|
multiMerge(keyValuePairs: [string, string][]): Promise<void>;
|
|
7
7
|
getAllKeys(): Promise<string[]>;
|
|
8
8
|
clear(): Promise<void>;
|
|
9
|
+
reloadManifest(): Promise<void>;
|
|
9
10
|
}
|
|
10
11
|
declare const _default: Spec;
|
|
11
12
|
export default _default;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { AsyncStorageStatic } from './types';
|
|
2
2
|
declare const AsyncStorage: AsyncStorageStatic;
|
|
3
3
|
export default AsyncStorage;
|
|
4
|
+
export type { AsyncStorageShouldForwardWriteGetter, AsyncStorageWriteArgs, AsyncStorageWriteArgsByMethod, AsyncStorageWriteForwarder, AsyncStorageWriteMethod, } from './runtimeConfig';
|
|
4
5
|
export type { AsyncStorageStatic, Callback, CallbackWithResult, KeyValuePair, MultiCallback, MultiGetCallback, } from './types';
|
|
6
|
+
export { setAsyncStorageShouldForwardWriteGetter, setAsyncStorageWriteForwarder, } from './runtimeConfig';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type AsyncStorageWriteArgsByMethod = {
|
|
2
|
+
clear: [];
|
|
3
|
+
multiSet: [[string, string][]];
|
|
4
|
+
multiRemove: [string[]];
|
|
5
|
+
multiMerge: [[string, string][]];
|
|
6
|
+
};
|
|
7
|
+
export type AsyncStorageWriteMethod = keyof AsyncStorageWriteArgsByMethod;
|
|
8
|
+
export type AsyncStorageWriteArgs<T extends AsyncStorageWriteMethod = AsyncStorageWriteMethod> = AsyncStorageWriteArgsByMethod[T];
|
|
9
|
+
export type AsyncStorageShouldForwardWriteGetter = () => boolean;
|
|
10
|
+
export type AsyncStorageWriteForwarder = <T extends AsyncStorageWriteMethod>(method: T, args: AsyncStorageWriteArgs<T>) => Promise<void>;
|
|
11
|
+
export declare function setAsyncStorageShouldForwardWriteGetter(getter: AsyncStorageShouldForwardWriteGetter): void;
|
|
12
|
+
export declare function setAsyncStorageWriteForwarder(forwarder: AsyncStorageWriteForwarder): void;
|
|
13
|
+
export declare function forwardAsyncStorageWriteIfNeeded<T extends AsyncStorageWriteMethod>(method: T, args: AsyncStorageWriteArgs<T>): Promise<boolean>;
|
|
14
|
+
//# sourceMappingURL=runtimeConfig.d.ts.map
|
package/package.json
CHANGED
|
@@ -8,6 +8,7 @@ export interface Spec extends TurboModule {
|
|
|
8
8
|
multiMerge(keyValuePairs: [string, string][]): Promise<void>;
|
|
9
9
|
getAllKeys(): Promise<string[]>;
|
|
10
10
|
clear(): Promise<void>;
|
|
11
|
+
reloadManifest(): Promise<void>;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
export default TurboModuleRegistry.getEnforcing<Spec>('RNCAsyncStorage');
|
package/src/index.tsx
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import NativeModule from './NativeAsyncStorage';
|
|
2
|
+
import { forwardAsyncStorageWriteIfNeeded } from './runtimeConfig';
|
|
3
|
+
import type {
|
|
4
|
+
AsyncStorageWriteArgs,
|
|
5
|
+
AsyncStorageWriteMethod,
|
|
6
|
+
} from './runtimeConfig';
|
|
2
7
|
import type { AsyncStorageStatic } from './types';
|
|
3
8
|
|
|
9
|
+
async function forwardWriteAndReloadManifestIfNeeded<
|
|
10
|
+
T extends AsyncStorageWriteMethod
|
|
11
|
+
>(method: T, args: AsyncStorageWriteArgs<T>) {
|
|
12
|
+
if (!(await forwardAsyncStorageWriteIfNeeded(method, args))) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
await NativeModule.reloadManifest();
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function runLocalWriteWithFreshManifest(write: () => Promise<void>) {
|
|
21
|
+
await NativeModule.reloadManifest();
|
|
22
|
+
await write();
|
|
23
|
+
}
|
|
24
|
+
|
|
4
25
|
function createAsyncStorage(): AsyncStorageStatic {
|
|
5
26
|
const getItem: AsyncStorageStatic['getItem'] = async (key, callback) => {
|
|
6
27
|
try {
|
|
@@ -21,7 +42,15 @@ function createAsyncStorage(): AsyncStorageStatic {
|
|
|
21
42
|
callback
|
|
22
43
|
) => {
|
|
23
44
|
try {
|
|
24
|
-
|
|
45
|
+
if (
|
|
46
|
+
!(await forwardWriteAndReloadManifestIfNeeded('multiSet', [
|
|
47
|
+
[[key, value]],
|
|
48
|
+
]))
|
|
49
|
+
) {
|
|
50
|
+
await runLocalWriteWithFreshManifest(() =>
|
|
51
|
+
NativeModule.multiSet([[key, value]])
|
|
52
|
+
);
|
|
53
|
+
}
|
|
25
54
|
callback?.(null);
|
|
26
55
|
} catch (e) {
|
|
27
56
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -35,7 +64,13 @@ function createAsyncStorage(): AsyncStorageStatic {
|
|
|
35
64
|
callback
|
|
36
65
|
) => {
|
|
37
66
|
try {
|
|
38
|
-
|
|
67
|
+
if (
|
|
68
|
+
!(await forwardWriteAndReloadManifestIfNeeded('multiRemove', [[key]]))
|
|
69
|
+
) {
|
|
70
|
+
await runLocalWriteWithFreshManifest(() =>
|
|
71
|
+
NativeModule.multiRemove([key])
|
|
72
|
+
);
|
|
73
|
+
}
|
|
39
74
|
callback?.(null);
|
|
40
75
|
} catch (e) {
|
|
41
76
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -50,7 +85,15 @@ function createAsyncStorage(): AsyncStorageStatic {
|
|
|
50
85
|
callback
|
|
51
86
|
) => {
|
|
52
87
|
try {
|
|
53
|
-
|
|
88
|
+
if (
|
|
89
|
+
!(await forwardWriteAndReloadManifestIfNeeded('multiMerge', [
|
|
90
|
+
[[key, value]],
|
|
91
|
+
]))
|
|
92
|
+
) {
|
|
93
|
+
await runLocalWriteWithFreshManifest(() =>
|
|
94
|
+
NativeModule.multiMerge([[key, value]])
|
|
95
|
+
);
|
|
96
|
+
}
|
|
54
97
|
callback?.(null);
|
|
55
98
|
} catch (e) {
|
|
56
99
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -61,7 +104,9 @@ function createAsyncStorage(): AsyncStorageStatic {
|
|
|
61
104
|
|
|
62
105
|
const clear: AsyncStorageStatic['clear'] = async (callback) => {
|
|
63
106
|
try {
|
|
64
|
-
await
|
|
107
|
+
if (!(await forwardWriteAndReloadManifestIfNeeded('clear', []))) {
|
|
108
|
+
await NativeModule.clear();
|
|
109
|
+
}
|
|
65
110
|
callback?.(null);
|
|
66
111
|
} catch (e) {
|
|
67
112
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -106,7 +151,15 @@ function createAsyncStorage(): AsyncStorageStatic {
|
|
|
106
151
|
const mutablePairs = keyValuePairs.map(
|
|
107
152
|
([k, v]) => [k, v] as [string, string]
|
|
108
153
|
);
|
|
109
|
-
|
|
154
|
+
if (
|
|
155
|
+
!(await forwardWriteAndReloadManifestIfNeeded('multiSet', [
|
|
156
|
+
mutablePairs,
|
|
157
|
+
]))
|
|
158
|
+
) {
|
|
159
|
+
await runLocalWriteWithFreshManifest(() =>
|
|
160
|
+
NativeModule.multiSet(mutablePairs)
|
|
161
|
+
);
|
|
162
|
+
}
|
|
110
163
|
callback?.(null);
|
|
111
164
|
} catch (e) {
|
|
112
165
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -120,7 +173,16 @@ function createAsyncStorage(): AsyncStorageStatic {
|
|
|
120
173
|
callback
|
|
121
174
|
) => {
|
|
122
175
|
try {
|
|
123
|
-
|
|
176
|
+
const mutableKeys = [...keys];
|
|
177
|
+
if (
|
|
178
|
+
!(await forwardWriteAndReloadManifestIfNeeded('multiRemove', [
|
|
179
|
+
mutableKeys,
|
|
180
|
+
]))
|
|
181
|
+
) {
|
|
182
|
+
await runLocalWriteWithFreshManifest(() =>
|
|
183
|
+
NativeModule.multiRemove(mutableKeys)
|
|
184
|
+
);
|
|
185
|
+
}
|
|
124
186
|
callback?.(null);
|
|
125
187
|
} catch (e) {
|
|
126
188
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -134,7 +196,15 @@ function createAsyncStorage(): AsyncStorageStatic {
|
|
|
134
196
|
callback
|
|
135
197
|
) => {
|
|
136
198
|
try {
|
|
137
|
-
|
|
199
|
+
if (
|
|
200
|
+
!(await forwardWriteAndReloadManifestIfNeeded('multiMerge', [
|
|
201
|
+
keyValuePairs,
|
|
202
|
+
]))
|
|
203
|
+
) {
|
|
204
|
+
await runLocalWriteWithFreshManifest(() =>
|
|
205
|
+
NativeModule.multiMerge(keyValuePairs)
|
|
206
|
+
);
|
|
207
|
+
}
|
|
138
208
|
callback?.(null);
|
|
139
209
|
} catch (e) {
|
|
140
210
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
@@ -162,6 +232,13 @@ const AsyncStorage = createAsyncStorage();
|
|
|
162
232
|
|
|
163
233
|
export default AsyncStorage;
|
|
164
234
|
|
|
235
|
+
export type {
|
|
236
|
+
AsyncStorageShouldForwardWriteGetter,
|
|
237
|
+
AsyncStorageWriteArgs,
|
|
238
|
+
AsyncStorageWriteArgsByMethod,
|
|
239
|
+
AsyncStorageWriteForwarder,
|
|
240
|
+
AsyncStorageWriteMethod,
|
|
241
|
+
} from './runtimeConfig';
|
|
165
242
|
export type {
|
|
166
243
|
AsyncStorageStatic,
|
|
167
244
|
Callback,
|
|
@@ -170,3 +247,7 @@ export type {
|
|
|
170
247
|
MultiCallback,
|
|
171
248
|
MultiGetCallback,
|
|
172
249
|
} from './types';
|
|
250
|
+
export {
|
|
251
|
+
setAsyncStorageShouldForwardWriteGetter,
|
|
252
|
+
setAsyncStorageWriteForwarder,
|
|
253
|
+
} from './runtimeConfig';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export type AsyncStorageWriteArgsByMethod = {
|
|
2
|
+
clear: [];
|
|
3
|
+
multiSet: [[string, string][]];
|
|
4
|
+
multiRemove: [string[]];
|
|
5
|
+
multiMerge: [[string, string][]];
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type AsyncStorageWriteMethod = keyof AsyncStorageWriteArgsByMethod;
|
|
9
|
+
|
|
10
|
+
export type AsyncStorageWriteArgs<
|
|
11
|
+
T extends AsyncStorageWriteMethod = AsyncStorageWriteMethod
|
|
12
|
+
> = AsyncStorageWriteArgsByMethod[T];
|
|
13
|
+
|
|
14
|
+
export type AsyncStorageShouldForwardWriteGetter = () => boolean;
|
|
15
|
+
|
|
16
|
+
export type AsyncStorageWriteForwarder = <T extends AsyncStorageWriteMethod>(
|
|
17
|
+
method: T,
|
|
18
|
+
args: AsyncStorageWriteArgs<T>
|
|
19
|
+
) => Promise<void>;
|
|
20
|
+
|
|
21
|
+
type AsyncStorageRuntimeGlobal = typeof globalThis & {
|
|
22
|
+
__onekeyAsyncStorageShouldForwardWriteGetter?: AsyncStorageShouldForwardWriteGetter;
|
|
23
|
+
__onekeyAsyncStorageWriteForwarder?: AsyncStorageWriteForwarder;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const runtimeGlobal = globalThis as AsyncStorageRuntimeGlobal;
|
|
27
|
+
|
|
28
|
+
let shouldForwardWriteGetter: AsyncStorageShouldForwardWriteGetter | undefined =
|
|
29
|
+
runtimeGlobal.__onekeyAsyncStorageShouldForwardWriteGetter;
|
|
30
|
+
let writeForwarder: AsyncStorageWriteForwarder | undefined =
|
|
31
|
+
runtimeGlobal.__onekeyAsyncStorageWriteForwarder;
|
|
32
|
+
|
|
33
|
+
export function setAsyncStorageShouldForwardWriteGetter(
|
|
34
|
+
getter: AsyncStorageShouldForwardWriteGetter
|
|
35
|
+
) {
|
|
36
|
+
shouldForwardWriteGetter = getter;
|
|
37
|
+
runtimeGlobal.__onekeyAsyncStorageShouldForwardWriteGetter = getter;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function setAsyncStorageWriteForwarder(
|
|
41
|
+
forwarder: AsyncStorageWriteForwarder
|
|
42
|
+
) {
|
|
43
|
+
writeForwarder = forwarder;
|
|
44
|
+
runtimeGlobal.__onekeyAsyncStorageWriteForwarder = forwarder;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function getShouldForwardWriteGetter() {
|
|
48
|
+
return (
|
|
49
|
+
shouldForwardWriteGetter ??
|
|
50
|
+
runtimeGlobal.__onekeyAsyncStorageShouldForwardWriteGetter
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function getWriteForwarder() {
|
|
55
|
+
return writeForwarder ?? runtimeGlobal.__onekeyAsyncStorageWriteForwarder;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function shouldForwardWriteToBackground() {
|
|
59
|
+
return getShouldForwardWriteGetter()?.() ?? false;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export async function forwardAsyncStorageWriteIfNeeded<
|
|
63
|
+
T extends AsyncStorageWriteMethod
|
|
64
|
+
>(method: T, args: AsyncStorageWriteArgs<T>): Promise<boolean> {
|
|
65
|
+
if (!shouldForwardWriteToBackground()) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const forwarder = getWriteForwarder();
|
|
70
|
+
if (!forwarder) {
|
|
71
|
+
throw new Error('AsyncStorage write forwarder is not configured.');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
await forwarder(method, args);
|
|
75
|
+
return true;
|
|
76
|
+
}
|