tinybase 6.1.0-beta.3 → 6.1.0-beta.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/@types/persisters/index.d.ts +83 -40
- package/@types/persisters/persister-automerge/index.d.ts +4 -4
- package/@types/persisters/persister-automerge/with-schemas/index.d.ts +4 -4
- package/@types/persisters/persister-browser/index.d.ts +4 -4
- package/@types/persisters/persister-browser/with-schemas/index.d.ts +4 -4
- package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +3 -3
- package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-electric-sql/index.d.ts +3 -3
- package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-expo-sqlite/index.d.ts +3 -3
- package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-file/index.d.ts +2 -2
- package/@types/persisters/persister-file/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-indexed-db/index.d.ts +2 -2
- package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-libsql/index.d.ts +3 -3
- package/@types/persisters/persister-libsql/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-partykit-client/index.d.ts +2 -2
- package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-pglite/index.d.ts +3 -3
- package/@types/persisters/persister-pglite/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-postgres/index.d.ts +3 -3
- package/@types/persisters/persister-postgres/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-powersync/index.d.ts +3 -3
- package/@types/persisters/persister-powersync/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-remote/index.d.ts +2 -2
- package/@types/persisters/persister-remote/with-schemas/index.d.ts +2 -2
- package/@types/persisters/persister-sqlite-bun/index.d.ts +159 -0
- package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +178 -0
- package/@types/persisters/persister-sqlite-wasm/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite3/index.d.ts +3 -3
- package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +3 -3
- package/@types/persisters/persister-yjs/index.d.ts +4 -4
- package/@types/persisters/persister-yjs/with-schemas/index.d.ts +4 -4
- package/@types/persisters/with-schemas/index.d.ts +87 -42
- package/@types/synchronizers/index.d.ts +18 -16
- package/@types/synchronizers/synchronizer-broadcast-channel/index.d.ts +3 -3
- package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +3 -3
- package/@types/synchronizers/synchronizer-local/index.d.ts +2 -2
- package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +2 -2
- package/@types/synchronizers/synchronizer-ws-client/index.d.ts +5 -5
- package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +5 -5
- package/@types/synchronizers/synchronizer-ws-server/index.d.ts +37 -37
- package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +37 -37
- package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +7 -7
- package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +7 -7
- package/@types/synchronizers/with-schemas/index.d.ts +18 -16
- package/@types/ui-react/index.d.ts +2 -2
- package/@types/ui-react/with-schemas/index.d.ts +2 -2
- package/index.js +23 -17
- package/mergeable-store/index.js +23 -17
- package/mergeable-store/with-schemas/index.js +23 -17
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -0
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/package.json +46 -6
- package/persisters/index.js +293 -161
- package/persisters/persister-automerge/index.js +55 -50
- package/persisters/persister-automerge/with-schemas/index.js +55 -50
- package/persisters/persister-browser/index.js +56 -55
- package/persisters/persister-browser/with-schemas/index.js +56 -55
- package/persisters/persister-cr-sqlite-wasm/index.js +181 -134
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +181 -134
- package/persisters/persister-durable-object-storage/index.js +58 -53
- package/persisters/persister-durable-object-storage/with-schemas/index.js +58 -53
- package/persisters/persister-electric-sql/index.js +181 -134
- package/persisters/persister-electric-sql/with-schemas/index.js +181 -134
- package/persisters/persister-expo-sqlite/index.js +181 -134
- package/persisters/persister-expo-sqlite/with-schemas/index.js +181 -134
- package/persisters/persister-file/index.js +55 -50
- package/persisters/persister-file/with-schemas/index.js +55 -50
- package/persisters/persister-indexed-db/index.js +82 -78
- package/persisters/persister-indexed-db/with-schemas/index.js +82 -78
- package/persisters/persister-libsql/index.js +182 -135
- package/persisters/persister-libsql/with-schemas/index.js +182 -135
- package/persisters/persister-partykit-client/index.js +56 -51
- package/persisters/persister-partykit-client/with-schemas/index.js +56 -51
- package/persisters/persister-pglite/index.js +299 -173
- package/persisters/persister-pglite/with-schemas/index.js +299 -173
- package/persisters/persister-postgres/index.js +296 -171
- package/persisters/persister-postgres/with-schemas/index.js +296 -171
- package/persisters/persister-powersync/index.js +189 -138
- package/persisters/persister-powersync/with-schemas/index.js +189 -138
- package/persisters/persister-remote/index.js +55 -50
- package/persisters/persister-remote/with-schemas/index.js +55 -50
- package/persisters/persister-sqlite-bun/index.js +1171 -0
- package/persisters/persister-sqlite-bun/with-schemas/index.js +1171 -0
- package/persisters/persister-sqlite-wasm/index.js +182 -135
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +182 -135
- package/persisters/persister-sqlite3/index.js +181 -134
- package/persisters/persister-sqlite3/with-schemas/index.js +181 -134
- package/persisters/persister-yjs/index.js +55 -50
- package/persisters/persister-yjs/with-schemas/index.js +55 -50
- package/persisters/with-schemas/index.js +293 -161
- package/readme.md +2 -2
- package/releases.md +29 -1
- package/store/index.js +20 -15
- package/store/with-schemas/index.js +20 -15
- package/synchronizers/index.js +68 -63
- package/synchronizers/synchronizer-broadcast-channel/index.js +68 -63
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-local/index.js +68 -63
- package/synchronizers/synchronizer-local/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-ws-client/index.js +68 -63
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +68 -63
- package/synchronizers/synchronizer-ws-server/index.js +79 -70
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +79 -70
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +69 -51
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +69 -51
- package/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/synchronizers/with-schemas/index.js +68 -63
- package/ui-react-inspector/index.js +68 -60
- package/ui-react-inspector/with-schemas/index.js +68 -60
- package/with-schemas/index.js +23 -17
|
@@ -14,6 +14,14 @@ const test = (regex, subject) => regex.test(subject);
|
|
|
14
14
|
const errorNew = (message) => {
|
|
15
15
|
throw new Error(message);
|
|
16
16
|
};
|
|
17
|
+
const tryCatch = async (action, then1, then2) => {
|
|
18
|
+
try {
|
|
19
|
+
return await action();
|
|
20
|
+
} catch (error) {
|
|
21
|
+
/* istanbul ignore next */
|
|
22
|
+
then1?.(error);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
17
25
|
|
|
18
26
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
19
27
|
const arrayClear = (array, to) => array.splice(0, to);
|
|
@@ -249,12 +257,7 @@ const createCustomPersister = (
|
|
|
249
257
|
while (
|
|
250
258
|
!isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
|
|
251
259
|
) {
|
|
252
|
-
|
|
253
|
-
await action();
|
|
254
|
-
} catch (error) {
|
|
255
|
-
/* istanbul ignore next */
|
|
256
|
-
onIgnoredError?.(error);
|
|
257
|
-
}
|
|
260
|
+
await tryCatch(action, onIgnoredError);
|
|
258
261
|
}
|
|
259
262
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
260
263
|
}
|
|
@@ -274,21 +277,23 @@ const createCustomPersister = (
|
|
|
274
277
|
setStatus(1 /* Loading */);
|
|
275
278
|
loads++;
|
|
276
279
|
await schedule(async () => {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
280
|
+
await tryCatch(
|
|
281
|
+
async () => {
|
|
282
|
+
const content = await getPersisted();
|
|
283
|
+
if (isArray(content)) {
|
|
284
|
+
setContentOrChanges(content);
|
|
285
|
+
} else if (initialContent) {
|
|
286
|
+
setDefaultContent(initialContent);
|
|
287
|
+
} else {
|
|
288
|
+
errorNew(`Content is not an array: ${content}`);
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
() => {
|
|
292
|
+
if (initialContent) {
|
|
293
|
+
setDefaultContent(initialContent);
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
);
|
|
292
297
|
setStatus(0 /* Idle */);
|
|
293
298
|
});
|
|
294
299
|
}
|
|
@@ -297,29 +302,33 @@ const createCustomPersister = (
|
|
|
297
302
|
const startAutoLoad = async (initialContent) => {
|
|
298
303
|
stopAutoLoad();
|
|
299
304
|
await load(initialContent);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
305
|
+
await tryCatch(
|
|
306
|
+
async () =>
|
|
307
|
+
(autoLoadHandle = await addPersisterListener(
|
|
308
|
+
async (content, changes) => {
|
|
309
|
+
if (changes || content) {
|
|
310
|
+
/* istanbul ignore else */
|
|
311
|
+
if (status != 2 /* Saving */) {
|
|
312
|
+
setStatus(1 /* Loading */);
|
|
313
|
+
loads++;
|
|
314
|
+
setContentOrChanges(changes ?? content);
|
|
315
|
+
setStatus(0 /* Idle */);
|
|
316
|
+
}
|
|
317
|
+
} else {
|
|
318
|
+
await load();
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
)),
|
|
322
|
+
onIgnoredError,
|
|
323
|
+
);
|
|
318
324
|
return persister;
|
|
319
325
|
};
|
|
320
|
-
const stopAutoLoad = () => {
|
|
326
|
+
const stopAutoLoad = async () => {
|
|
321
327
|
if (autoLoadHandle) {
|
|
322
|
-
|
|
328
|
+
await tryCatch(
|
|
329
|
+
() => delPersisterListener(autoLoadHandle),
|
|
330
|
+
onIgnoredError,
|
|
331
|
+
);
|
|
323
332
|
autoLoadHandle = void 0;
|
|
324
333
|
}
|
|
325
334
|
return persister;
|
|
@@ -331,12 +340,7 @@ const createCustomPersister = (
|
|
|
331
340
|
setStatus(2 /* Saving */);
|
|
332
341
|
saves++;
|
|
333
342
|
await schedule(async () => {
|
|
334
|
-
|
|
335
|
-
await setPersisted(getContent, changes);
|
|
336
|
-
} catch (error) {
|
|
337
|
-
/* istanbul ignore next */
|
|
338
|
-
onIgnoredError?.(error);
|
|
339
|
-
}
|
|
343
|
+
await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
|
|
340
344
|
setStatus(0 /* Idle */);
|
|
341
345
|
});
|
|
342
346
|
}
|
|
@@ -353,7 +357,7 @@ const createCustomPersister = (
|
|
|
353
357
|
});
|
|
354
358
|
return persister;
|
|
355
359
|
};
|
|
356
|
-
const stopAutoSave = () => {
|
|
360
|
+
const stopAutoSave = async () => {
|
|
357
361
|
if (autoSaveListenerId) {
|
|
358
362
|
store.delListener(autoSaveListenerId);
|
|
359
363
|
autoSaveListenerId = void 0;
|
|
@@ -374,9 +378,10 @@ const createCustomPersister = (
|
|
|
374
378
|
return persister;
|
|
375
379
|
};
|
|
376
380
|
const getStore = () => store;
|
|
377
|
-
const destroy = () => {
|
|
381
|
+
const destroy = async () => {
|
|
378
382
|
arrayClear(mapGet(scheduleActions, scheduleId));
|
|
379
|
-
|
|
383
|
+
await persister.stopAutoLoad();
|
|
384
|
+
return await persister.stopAutoSave();
|
|
380
385
|
};
|
|
381
386
|
const getStats = () => ({loads, saves});
|
|
382
387
|
const persister = {
|
|
@@ -14,6 +14,14 @@ const test = (regex, subject) => regex.test(subject);
|
|
|
14
14
|
const errorNew = (message) => {
|
|
15
15
|
throw new Error(message);
|
|
16
16
|
};
|
|
17
|
+
const tryCatch = async (action, then1, then2) => {
|
|
18
|
+
try {
|
|
19
|
+
return await action();
|
|
20
|
+
} catch (error) {
|
|
21
|
+
/* istanbul ignore next */
|
|
22
|
+
then1?.(error);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
17
25
|
|
|
18
26
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
19
27
|
const arrayClear = (array, to) => array.splice(0, to);
|
|
@@ -249,12 +257,7 @@ const createCustomPersister = (
|
|
|
249
257
|
while (
|
|
250
258
|
!isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
|
|
251
259
|
) {
|
|
252
|
-
|
|
253
|
-
await action();
|
|
254
|
-
} catch (error) {
|
|
255
|
-
/* istanbul ignore next */
|
|
256
|
-
onIgnoredError?.(error);
|
|
257
|
-
}
|
|
260
|
+
await tryCatch(action, onIgnoredError);
|
|
258
261
|
}
|
|
259
262
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
260
263
|
}
|
|
@@ -274,21 +277,23 @@ const createCustomPersister = (
|
|
|
274
277
|
setStatus(1 /* Loading */);
|
|
275
278
|
loads++;
|
|
276
279
|
await schedule(async () => {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
280
|
+
await tryCatch(
|
|
281
|
+
async () => {
|
|
282
|
+
const content = await getPersisted();
|
|
283
|
+
if (isArray(content)) {
|
|
284
|
+
setContentOrChanges(content);
|
|
285
|
+
} else if (initialContent) {
|
|
286
|
+
setDefaultContent(initialContent);
|
|
287
|
+
} else {
|
|
288
|
+
errorNew(`Content is not an array: ${content}`);
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
() => {
|
|
292
|
+
if (initialContent) {
|
|
293
|
+
setDefaultContent(initialContent);
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
);
|
|
292
297
|
setStatus(0 /* Idle */);
|
|
293
298
|
});
|
|
294
299
|
}
|
|
@@ -297,29 +302,33 @@ const createCustomPersister = (
|
|
|
297
302
|
const startAutoLoad = async (initialContent) => {
|
|
298
303
|
stopAutoLoad();
|
|
299
304
|
await load(initialContent);
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
305
|
+
await tryCatch(
|
|
306
|
+
async () =>
|
|
307
|
+
(autoLoadHandle = await addPersisterListener(
|
|
308
|
+
async (content, changes) => {
|
|
309
|
+
if (changes || content) {
|
|
310
|
+
/* istanbul ignore else */
|
|
311
|
+
if (status != 2 /* Saving */) {
|
|
312
|
+
setStatus(1 /* Loading */);
|
|
313
|
+
loads++;
|
|
314
|
+
setContentOrChanges(changes ?? content);
|
|
315
|
+
setStatus(0 /* Idle */);
|
|
316
|
+
}
|
|
317
|
+
} else {
|
|
318
|
+
await load();
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
)),
|
|
322
|
+
onIgnoredError,
|
|
323
|
+
);
|
|
318
324
|
return persister;
|
|
319
325
|
};
|
|
320
|
-
const stopAutoLoad = () => {
|
|
326
|
+
const stopAutoLoad = async () => {
|
|
321
327
|
if (autoLoadHandle) {
|
|
322
|
-
|
|
328
|
+
await tryCatch(
|
|
329
|
+
() => delPersisterListener(autoLoadHandle),
|
|
330
|
+
onIgnoredError,
|
|
331
|
+
);
|
|
323
332
|
autoLoadHandle = void 0;
|
|
324
333
|
}
|
|
325
334
|
return persister;
|
|
@@ -331,12 +340,7 @@ const createCustomPersister = (
|
|
|
331
340
|
setStatus(2 /* Saving */);
|
|
332
341
|
saves++;
|
|
333
342
|
await schedule(async () => {
|
|
334
|
-
|
|
335
|
-
await setPersisted(getContent, changes);
|
|
336
|
-
} catch (error) {
|
|
337
|
-
/* istanbul ignore next */
|
|
338
|
-
onIgnoredError?.(error);
|
|
339
|
-
}
|
|
343
|
+
await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
|
|
340
344
|
setStatus(0 /* Idle */);
|
|
341
345
|
});
|
|
342
346
|
}
|
|
@@ -353,7 +357,7 @@ const createCustomPersister = (
|
|
|
353
357
|
});
|
|
354
358
|
return persister;
|
|
355
359
|
};
|
|
356
|
-
const stopAutoSave = () => {
|
|
360
|
+
const stopAutoSave = async () => {
|
|
357
361
|
if (autoSaveListenerId) {
|
|
358
362
|
store.delListener(autoSaveListenerId);
|
|
359
363
|
autoSaveListenerId = void 0;
|
|
@@ -374,9 +378,10 @@ const createCustomPersister = (
|
|
|
374
378
|
return persister;
|
|
375
379
|
};
|
|
376
380
|
const getStore = () => store;
|
|
377
|
-
const destroy = () => {
|
|
381
|
+
const destroy = async () => {
|
|
378
382
|
arrayClear(mapGet(scheduleActions, scheduleId));
|
|
379
|
-
|
|
383
|
+
await persister.stopAutoLoad();
|
|
384
|
+
return await persister.stopAutoSave();
|
|
380
385
|
};
|
|
381
386
|
const getStats = () => ({loads, saves});
|
|
382
387
|
const persister = {
|
|
@@ -21,6 +21,14 @@ const promiseAll = async (promises) => promise.all(promises);
|
|
|
21
21
|
const errorNew = (message) => {
|
|
22
22
|
throw new Error(message);
|
|
23
23
|
};
|
|
24
|
+
const tryCatch = async (action, then1, then2) => {
|
|
25
|
+
try {
|
|
26
|
+
return await action();
|
|
27
|
+
} catch (error) {
|
|
28
|
+
/* istanbul ignore next */
|
|
29
|
+
then1?.(error);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
24
32
|
|
|
25
33
|
const arrayForEach = (array, cb) => array.forEach(cb);
|
|
26
34
|
const arrayMap = (array, cb) => array.map(cb);
|
|
@@ -255,12 +263,7 @@ const createCustomPersister = (
|
|
|
255
263
|
while (
|
|
256
264
|
!isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
|
|
257
265
|
) {
|
|
258
|
-
|
|
259
|
-
await action();
|
|
260
|
-
} catch (error) {
|
|
261
|
-
/* istanbul ignore next */
|
|
262
|
-
onIgnoredError?.(error);
|
|
263
|
-
}
|
|
266
|
+
await tryCatch(action, onIgnoredError);
|
|
264
267
|
}
|
|
265
268
|
mapSet(scheduleRunning, scheduleId, 0);
|
|
266
269
|
}
|
|
@@ -280,21 +283,23 @@ const createCustomPersister = (
|
|
|
280
283
|
setStatus(1 /* Loading */);
|
|
281
284
|
loads++;
|
|
282
285
|
await schedule(async () => {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
286
|
+
await tryCatch(
|
|
287
|
+
async () => {
|
|
288
|
+
const content = await getPersisted();
|
|
289
|
+
if (isArray(content)) {
|
|
290
|
+
setContentOrChanges(content);
|
|
291
|
+
} else if (initialContent) {
|
|
292
|
+
setDefaultContent(initialContent);
|
|
293
|
+
} else {
|
|
294
|
+
errorNew(`Content is not an array: ${content}`);
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
() => {
|
|
298
|
+
if (initialContent) {
|
|
299
|
+
setDefaultContent(initialContent);
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
);
|
|
298
303
|
setStatus(0 /* Idle */);
|
|
299
304
|
});
|
|
300
305
|
}
|
|
@@ -303,29 +308,33 @@ const createCustomPersister = (
|
|
|
303
308
|
const startAutoLoad = async (initialContent) => {
|
|
304
309
|
stopAutoLoad();
|
|
305
310
|
await load(initialContent);
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
311
|
+
await tryCatch(
|
|
312
|
+
async () =>
|
|
313
|
+
(autoLoadHandle = await addPersisterListener(
|
|
314
|
+
async (content, changes) => {
|
|
315
|
+
if (changes || content) {
|
|
316
|
+
/* istanbul ignore else */
|
|
317
|
+
if (status != 2 /* Saving */) {
|
|
318
|
+
setStatus(1 /* Loading */);
|
|
319
|
+
loads++;
|
|
320
|
+
setContentOrChanges(changes ?? content);
|
|
321
|
+
setStatus(0 /* Idle */);
|
|
322
|
+
}
|
|
323
|
+
} else {
|
|
324
|
+
await load();
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
)),
|
|
328
|
+
onIgnoredError,
|
|
329
|
+
);
|
|
324
330
|
return persister;
|
|
325
331
|
};
|
|
326
|
-
const stopAutoLoad = () => {
|
|
332
|
+
const stopAutoLoad = async () => {
|
|
327
333
|
if (autoLoadHandle) {
|
|
328
|
-
|
|
334
|
+
await tryCatch(
|
|
335
|
+
() => delPersisterListener(autoLoadHandle),
|
|
336
|
+
onIgnoredError,
|
|
337
|
+
);
|
|
329
338
|
autoLoadHandle = void 0;
|
|
330
339
|
}
|
|
331
340
|
return persister;
|
|
@@ -337,12 +346,7 @@ const createCustomPersister = (
|
|
|
337
346
|
setStatus(2 /* Saving */);
|
|
338
347
|
saves++;
|
|
339
348
|
await schedule(async () => {
|
|
340
|
-
|
|
341
|
-
await setPersisted(getContent, changes);
|
|
342
|
-
} catch (error) {
|
|
343
|
-
/* istanbul ignore next */
|
|
344
|
-
onIgnoredError?.(error);
|
|
345
|
-
}
|
|
349
|
+
await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
|
|
346
350
|
setStatus(0 /* Idle */);
|
|
347
351
|
});
|
|
348
352
|
}
|
|
@@ -359,7 +363,7 @@ const createCustomPersister = (
|
|
|
359
363
|
});
|
|
360
364
|
return persister;
|
|
361
365
|
};
|
|
362
|
-
const stopAutoSave = () => {
|
|
366
|
+
const stopAutoSave = async () => {
|
|
363
367
|
if (autoSaveListenerId) {
|
|
364
368
|
store.delListener(autoSaveListenerId);
|
|
365
369
|
autoSaveListenerId = void 0;
|
|
@@ -380,9 +384,10 @@ const createCustomPersister = (
|
|
|
380
384
|
return persister;
|
|
381
385
|
};
|
|
382
386
|
const getStore = () => store;
|
|
383
|
-
const destroy = () => {
|
|
387
|
+
const destroy = async () => {
|
|
384
388
|
arrayClear(mapGet(scheduleActions, scheduleId));
|
|
385
|
-
|
|
389
|
+
await persister.stopAutoLoad();
|
|
390
|
+
return await persister.stopAutoSave();
|
|
386
391
|
};
|
|
387
392
|
const getStats = () => ({loads, saves});
|
|
388
393
|
const persister = {
|
|
@@ -439,34 +444,34 @@ const createIndexedDbPersister = (
|
|
|
439
444
|
);
|
|
440
445
|
request.onupgradeneeded = () =>
|
|
441
446
|
create &&
|
|
442
|
-
arrayMap(OBJECT_STORE_NAMES, (objectStoreName) =>
|
|
443
|
-
|
|
444
|
-
request.result.createObjectStore(objectStoreName, KEY_PATH)
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
request.onsuccess =
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
'readwrite',
|
|
452
|
-
);
|
|
453
|
-
const result = await promiseAll(
|
|
454
|
-
arrayMap(
|
|
447
|
+
arrayMap(OBJECT_STORE_NAMES, (objectStoreName) =>
|
|
448
|
+
tryCatch(() =>
|
|
449
|
+
request.result.createObjectStore(objectStoreName, KEY_PATH),
|
|
450
|
+
),
|
|
451
|
+
);
|
|
452
|
+
request.onsuccess = () =>
|
|
453
|
+
tryCatch(
|
|
454
|
+
async () => {
|
|
455
|
+
const transaction = request.result.transaction(
|
|
455
456
|
OBJECT_STORE_NAMES,
|
|
456
|
-
|
|
457
|
-
|
|
457
|
+
'readwrite',
|
|
458
|
+
);
|
|
459
|
+
const result = await promiseAll(
|
|
460
|
+
arrayMap(OBJECT_STORE_NAMES, (objectStoreName, index) =>
|
|
461
|
+
forObjectStore(
|
|
458
462
|
transaction.objectStore(objectStoreName),
|
|
459
463
|
params[index],
|
|
460
464
|
),
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
465
|
+
),
|
|
466
|
+
);
|
|
467
|
+
request.result.close();
|
|
468
|
+
resolve(result);
|
|
469
|
+
},
|
|
470
|
+
(error) => {
|
|
471
|
+
request.result.close();
|
|
472
|
+
reject(error);
|
|
473
|
+
},
|
|
474
|
+
);
|
|
470
475
|
request.onerror = () => reject('indexedDB.open error');
|
|
471
476
|
});
|
|
472
477
|
const getPersisted = async () =>
|
|
@@ -478,10 +483,9 @@ const createIndexedDbPersister = (
|
|
|
478
483
|
]),
|
|
479
484
|
),
|
|
480
485
|
);
|
|
481
|
-
const setPersisted =
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
await objectStoreMatch(objectStore, content),
|
|
486
|
+
const setPersisted = (getContent) =>
|
|
487
|
+
forObjectStores(
|
|
488
|
+
(objectStore, content) => objectStoreMatch(objectStore, content),
|
|
485
489
|
getContent(),
|
|
486
490
|
1,
|
|
487
491
|
);
|