react-native-nitro-storage 0.5.4 → 0.5.5
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/README.md +45 -5
- package/android/build.gradle +5 -5
- package/android/src/main/java/com/nitrostorage/AndroidStorageAdapter.kt +12 -25
- package/app.plugin.js +114 -9
- package/docs/api-reference.md +39 -36
- package/docs/batch-transactions-migrations.md +1 -1
- package/docs/recipes.md +1 -1
- package/docs/secure-storage.md +15 -4
- package/docs/web-backends.md +5 -0
- package/lib/commonjs/index.js +49 -9
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +71 -11
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/indexeddb-backend.js +28 -0
- package/lib/commonjs/indexeddb-backend.js.map +1 -1
- package/lib/commonjs/web-storage-backend.js.map +1 -1
- package/lib/module/index.js +49 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +71 -11
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/indexeddb-backend.js +28 -0
- package/lib/module/indexeddb-backend.js.map +1 -1
- package/lib/module/web-storage-backend.js.map +1 -1
- package/lib/typescript/index.d.ts +10 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/index.web.d.ts +10 -3
- package/lib/typescript/index.web.d.ts.map +1 -1
- package/lib/typescript/indexeddb-backend.d.ts.map +1 -1
- package/lib/typescript/web-storage-backend.d.ts +1 -0
- package/lib/typescript/web-storage-backend.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +80 -9
- package/src/index.web.ts +107 -11
- package/src/indexeddb-backend.ts +30 -0
- package/src/web-storage-backend.ts +1 -0
package/src/indexeddb-backend.ts
CHANGED
|
@@ -74,6 +74,7 @@ export async function createIndexedDBBackend(
|
|
|
74
74
|
const pendingWrites = new Set<Promise<void>>();
|
|
75
75
|
const pendingErrors: Error[] = [];
|
|
76
76
|
const subscribers = new Set<(event: WebStorageChangeEvent) => void>();
|
|
77
|
+
let closed = false;
|
|
77
78
|
const sourceId = `nitro-storage-${Math.random().toString(36).slice(2)}`;
|
|
78
79
|
const channelName =
|
|
79
80
|
options.channelName ?? `nitro-storage:${dbName}:${storeName}`;
|
|
@@ -82,6 +83,12 @@ export async function createIndexedDBBackend(
|
|
|
82
83
|
? new BroadcastChannel(channelName)
|
|
83
84
|
: null;
|
|
84
85
|
|
|
86
|
+
function assertOpen(): void {
|
|
87
|
+
if (closed) {
|
|
88
|
+
throw new Error(`IndexedDB backend "${dbName}/${storeName}" is closed.`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
85
92
|
function emitExternal(event: WebStorageChangeEvent): void {
|
|
86
93
|
subscribers.forEach((subscriber) => {
|
|
87
94
|
subscriber(event);
|
|
@@ -98,6 +105,10 @@ export async function createIndexedDBBackend(
|
|
|
98
105
|
}
|
|
99
106
|
|
|
100
107
|
channel?.addEventListener("message", (event: MessageEvent) => {
|
|
108
|
+
if (closed) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
101
112
|
const data = event.data as
|
|
102
113
|
| (WebStorageChangeEvent & { sourceId?: string })
|
|
103
114
|
| undefined;
|
|
@@ -209,34 +220,41 @@ export async function createIndexedDBBackend(
|
|
|
209
220
|
const backend: WebSecureStorageBackend = {
|
|
210
221
|
name: `indexeddb:${dbName}/${storeName}`,
|
|
211
222
|
getItem(key: string): string | null {
|
|
223
|
+
assertOpen();
|
|
212
224
|
return cache.get(key) ?? null;
|
|
213
225
|
},
|
|
214
226
|
|
|
215
227
|
setItem(key: string, value: string): void {
|
|
228
|
+
assertOpen();
|
|
216
229
|
cache.set(key, value);
|
|
217
230
|
persistSet(key, value);
|
|
218
231
|
publish({ key, newValue: value });
|
|
219
232
|
},
|
|
220
233
|
|
|
221
234
|
removeItem(key: string): void {
|
|
235
|
+
assertOpen();
|
|
222
236
|
cache.delete(key);
|
|
223
237
|
persistDelete(key);
|
|
224
238
|
publish({ key, newValue: null });
|
|
225
239
|
},
|
|
226
240
|
|
|
227
241
|
clear(): void {
|
|
242
|
+
assertOpen();
|
|
228
243
|
cache.clear();
|
|
229
244
|
persistClear();
|
|
230
245
|
publish({ key: null, newValue: null });
|
|
231
246
|
},
|
|
232
247
|
|
|
233
248
|
getAllKeys(): string[] {
|
|
249
|
+
assertOpen();
|
|
234
250
|
return Array.from(cache.keys());
|
|
235
251
|
},
|
|
236
252
|
getMany(keys: string[]): (string | null)[] {
|
|
253
|
+
assertOpen();
|
|
237
254
|
return keys.map((key) => cache.get(key) ?? null);
|
|
238
255
|
},
|
|
239
256
|
setMany(entries): void {
|
|
257
|
+
assertOpen();
|
|
240
258
|
entries.forEach(([key, value]) => {
|
|
241
259
|
cache.set(key, value);
|
|
242
260
|
});
|
|
@@ -253,6 +271,7 @@ export async function createIndexedDBBackend(
|
|
|
253
271
|
}
|
|
254
272
|
},
|
|
255
273
|
removeMany(keys: string[]): void {
|
|
274
|
+
assertOpen();
|
|
256
275
|
keys.forEach((key) => {
|
|
257
276
|
cache.delete(key);
|
|
258
277
|
});
|
|
@@ -269,9 +288,11 @@ export async function createIndexedDBBackend(
|
|
|
269
288
|
}
|
|
270
289
|
},
|
|
271
290
|
size(): number {
|
|
291
|
+
assertOpen();
|
|
272
292
|
return cache.size;
|
|
273
293
|
},
|
|
274
294
|
subscribe(listener): () => void {
|
|
295
|
+
assertOpen();
|
|
275
296
|
subscribers.add(listener);
|
|
276
297
|
return () => {
|
|
277
298
|
subscribers.delete(listener);
|
|
@@ -286,6 +307,15 @@ export async function createIndexedDBBackend(
|
|
|
286
307
|
const [error] = pendingErrors.splice(0);
|
|
287
308
|
throw error;
|
|
288
309
|
},
|
|
310
|
+
close(): void {
|
|
311
|
+
if (closed) {
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
closed = true;
|
|
315
|
+
subscribers.clear();
|
|
316
|
+
channel?.close();
|
|
317
|
+
db.close();
|
|
318
|
+
},
|
|
289
319
|
};
|
|
290
320
|
|
|
291
321
|
return backend;
|