@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.
@@ -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 {
@@ -24,4 +24,7 @@
24
24
  - (void)clear:(RCTPromiseResolveBlock)resolve
25
25
  reject:(RCTPromiseRejectBlock)reject;
26
26
 
27
+ - (void)reloadManifest:(RCTPromiseResolveBlock)resolve
28
+ reject:(RCTPromiseRejectBlock)reject;
29
+
27
30
  @end
@@ -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
@@ -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 NativeModule.multiSet([[key, value]]);
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 NativeModule.multiRemove([key]);
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 NativeModule.multiMerge([[key, value]]);
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 NativeModule.clear();
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 NativeModule.multiSet(mutablePairs);
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
- await NativeModule.multiRemove([...keys]);
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 NativeModule.multiMerge(keyValuePairs);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/react-native-async-storage",
3
- "version": "3.0.75",
3
+ "version": "3.0.77",
4
4
  "description": "react-native-async-storage",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -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
- await NativeModule.multiSet([[key, value]]);
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
- await NativeModule.multiRemove([key]);
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
- await NativeModule.multiMerge([[key, value]]);
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 NativeModule.clear();
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
- await NativeModule.multiSet(mutablePairs);
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
- await NativeModule.multiRemove([...keys]);
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
- await NativeModule.multiMerge(keyValuePairs);
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
+ }