tinybase 6.1.0-beta.4 → 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.
Files changed (233) hide show
  1. package/@types/persisters/index.d.ts +82 -40
  2. package/@types/persisters/persister-automerge/index.d.ts +4 -4
  3. package/@types/persisters/persister-automerge/with-schemas/index.d.ts +4 -4
  4. package/@types/persisters/persister-browser/index.d.ts +4 -4
  5. package/@types/persisters/persister-browser/with-schemas/index.d.ts +4 -4
  6. package/@types/persisters/persister-cr-sqlite-wasm/index.d.ts +3 -3
  7. package/@types/persisters/persister-cr-sqlite-wasm/with-schemas/index.d.ts +3 -3
  8. package/@types/persisters/persister-electric-sql/index.d.ts +3 -3
  9. package/@types/persisters/persister-electric-sql/with-schemas/index.d.ts +3 -3
  10. package/@types/persisters/persister-expo-sqlite/index.d.ts +3 -3
  11. package/@types/persisters/persister-expo-sqlite/with-schemas/index.d.ts +3 -3
  12. package/@types/persisters/persister-file/index.d.ts +2 -2
  13. package/@types/persisters/persister-file/with-schemas/index.d.ts +2 -2
  14. package/@types/persisters/persister-indexed-db/index.d.ts +2 -2
  15. package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +2 -2
  16. package/@types/persisters/persister-libsql/index.d.ts +3 -3
  17. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +3 -3
  18. package/@types/persisters/persister-partykit-client/index.d.ts +2 -2
  19. package/@types/persisters/persister-partykit-client/with-schemas/index.d.ts +2 -2
  20. package/@types/persisters/persister-pglite/index.d.ts +3 -3
  21. package/@types/persisters/persister-pglite/with-schemas/index.d.ts +3 -3
  22. package/@types/persisters/persister-postgres/index.d.ts +3 -3
  23. package/@types/persisters/persister-postgres/with-schemas/index.d.ts +3 -3
  24. package/@types/persisters/persister-powersync/index.d.ts +3 -3
  25. package/@types/persisters/persister-powersync/with-schemas/index.d.ts +3 -3
  26. package/@types/persisters/persister-remote/index.d.ts +2 -2
  27. package/@types/persisters/persister-remote/with-schemas/index.d.ts +2 -2
  28. package/@types/persisters/persister-sqlite-bun/index.d.ts +3 -3
  29. package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +3 -3
  30. package/@types/persisters/persister-sqlite-wasm/index.d.ts +3 -3
  31. package/@types/persisters/persister-sqlite-wasm/with-schemas/index.d.ts +3 -3
  32. package/@types/persisters/persister-sqlite3/index.d.ts +3 -3
  33. package/@types/persisters/persister-sqlite3/with-schemas/index.d.ts +3 -3
  34. package/@types/persisters/persister-yjs/index.d.ts +4 -4
  35. package/@types/persisters/persister-yjs/with-schemas/index.d.ts +4 -4
  36. package/@types/persisters/with-schemas/index.d.ts +86 -42
  37. package/@types/synchronizers/index.d.ts +18 -16
  38. package/@types/synchronizers/synchronizer-broadcast-channel/index.d.ts +3 -3
  39. package/@types/synchronizers/synchronizer-broadcast-channel/with-schemas/index.d.ts +3 -3
  40. package/@types/synchronizers/synchronizer-local/index.d.ts +2 -2
  41. package/@types/synchronizers/synchronizer-local/with-schemas/index.d.ts +2 -2
  42. package/@types/synchronizers/synchronizer-ws-client/index.d.ts +5 -5
  43. package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +5 -5
  44. package/@types/synchronizers/synchronizer-ws-server/index.d.ts +37 -37
  45. package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +37 -37
  46. package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +7 -7
  47. package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +7 -7
  48. package/@types/synchronizers/with-schemas/index.d.ts +18 -16
  49. package/@types/ui-react/index.d.ts +2 -2
  50. package/@types/ui-react/with-schemas/index.d.ts +2 -2
  51. package/index.js +23 -17
  52. package/mergeable-store/index.js +23 -17
  53. package/mergeable-store/with-schemas/index.js +23 -17
  54. package/min/index.js +1 -1
  55. package/min/index.js.gz +0 -0
  56. package/min/mergeable-store/index.js +1 -1
  57. package/min/mergeable-store/index.js.gz +0 -0
  58. package/min/mergeable-store/with-schemas/index.js +1 -1
  59. package/min/mergeable-store/with-schemas/index.js.gz +0 -0
  60. package/min/persisters/index.js +1 -1
  61. package/min/persisters/index.js.gz +0 -0
  62. package/min/persisters/persister-automerge/index.js +1 -1
  63. package/min/persisters/persister-automerge/index.js.gz +0 -0
  64. package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
  65. package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
  66. package/min/persisters/persister-browser/index.js +1 -1
  67. package/min/persisters/persister-browser/index.js.gz +0 -0
  68. package/min/persisters/persister-browser/with-schemas/index.js +1 -1
  69. package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
  70. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  71. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  72. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  73. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  74. package/min/persisters/persister-durable-object-storage/index.js +1 -1
  75. package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
  76. package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
  77. package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
  78. package/min/persisters/persister-electric-sql/index.js +1 -1
  79. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  80. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  81. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  82. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  83. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  84. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  85. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  86. package/min/persisters/persister-file/index.js +1 -1
  87. package/min/persisters/persister-file/index.js.gz +0 -0
  88. package/min/persisters/persister-file/with-schemas/index.js +1 -1
  89. package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
  90. package/min/persisters/persister-indexed-db/index.js +1 -1
  91. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  92. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  93. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  94. package/min/persisters/persister-libsql/index.js +1 -1
  95. package/min/persisters/persister-libsql/index.js.gz +0 -0
  96. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  97. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  98. package/min/persisters/persister-partykit-client/index.js +1 -1
  99. package/min/persisters/persister-partykit-client/index.js.gz +0 -0
  100. package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
  101. package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
  102. package/min/persisters/persister-pglite/index.js +1 -1
  103. package/min/persisters/persister-pglite/index.js.gz +0 -0
  104. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  105. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  106. package/min/persisters/persister-postgres/index.js +1 -1
  107. package/min/persisters/persister-postgres/index.js.gz +0 -0
  108. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  109. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  110. package/min/persisters/persister-powersync/index.js +1 -1
  111. package/min/persisters/persister-powersync/index.js.gz +0 -0
  112. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  113. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  114. package/min/persisters/persister-remote/index.js +1 -1
  115. package/min/persisters/persister-remote/index.js.gz +0 -0
  116. package/min/persisters/persister-remote/with-schemas/index.js +1 -1
  117. package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
  118. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  119. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  120. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  121. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  122. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  123. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  124. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  125. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  126. package/min/persisters/persister-sqlite3/index.js +1 -1
  127. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  128. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  129. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  130. package/min/persisters/persister-yjs/index.js +1 -1
  131. package/min/persisters/persister-yjs/index.js.gz +0 -0
  132. package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
  133. package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
  134. package/min/persisters/with-schemas/index.js +1 -1
  135. package/min/persisters/with-schemas/index.js.gz +0 -0
  136. package/min/store/index.js +1 -1
  137. package/min/store/index.js.gz +0 -0
  138. package/min/store/with-schemas/index.js +1 -1
  139. package/min/store/with-schemas/index.js.gz +0 -0
  140. package/min/synchronizers/index.js +1 -1
  141. package/min/synchronizers/index.js.gz +0 -0
  142. package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
  143. package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
  144. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
  145. package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
  146. package/min/synchronizers/synchronizer-local/index.js +1 -1
  147. package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
  148. package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
  149. package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
  150. package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
  151. package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
  152. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
  153. package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
  154. package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
  155. package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
  156. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
  157. package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
  158. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
  159. package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
  160. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
  161. package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
  162. package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  163. package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
  164. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  165. package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
  166. package/min/synchronizers/with-schemas/index.js +1 -1
  167. package/min/synchronizers/with-schemas/index.js.gz +0 -0
  168. package/min/ui-react-inspector/index.js +1 -1
  169. package/min/ui-react-inspector/index.js.gz +0 -0
  170. package/min/ui-react-inspector/with-schemas/index.js +1 -1
  171. package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
  172. package/min/with-schemas/index.js +1 -1
  173. package/min/with-schemas/index.js.gz +0 -0
  174. package/package.json +8 -4
  175. package/persisters/index.js +293 -161
  176. package/persisters/persister-automerge/index.js +55 -50
  177. package/persisters/persister-automerge/with-schemas/index.js +55 -50
  178. package/persisters/persister-browser/index.js +56 -55
  179. package/persisters/persister-browser/with-schemas/index.js +56 -55
  180. package/persisters/persister-cr-sqlite-wasm/index.js +181 -134
  181. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +181 -134
  182. package/persisters/persister-durable-object-storage/index.js +58 -53
  183. package/persisters/persister-durable-object-storage/with-schemas/index.js +58 -53
  184. package/persisters/persister-electric-sql/index.js +181 -134
  185. package/persisters/persister-electric-sql/with-schemas/index.js +181 -134
  186. package/persisters/persister-expo-sqlite/index.js +181 -134
  187. package/persisters/persister-expo-sqlite/with-schemas/index.js +181 -134
  188. package/persisters/persister-file/index.js +55 -50
  189. package/persisters/persister-file/with-schemas/index.js +55 -50
  190. package/persisters/persister-indexed-db/index.js +82 -78
  191. package/persisters/persister-indexed-db/with-schemas/index.js +82 -78
  192. package/persisters/persister-libsql/index.js +182 -135
  193. package/persisters/persister-libsql/with-schemas/index.js +182 -135
  194. package/persisters/persister-partykit-client/index.js +56 -51
  195. package/persisters/persister-partykit-client/with-schemas/index.js +56 -51
  196. package/persisters/persister-pglite/index.js +299 -173
  197. package/persisters/persister-pglite/with-schemas/index.js +299 -173
  198. package/persisters/persister-postgres/index.js +296 -171
  199. package/persisters/persister-postgres/with-schemas/index.js +296 -171
  200. package/persisters/persister-powersync/index.js +189 -138
  201. package/persisters/persister-powersync/with-schemas/index.js +189 -138
  202. package/persisters/persister-remote/index.js +55 -50
  203. package/persisters/persister-remote/with-schemas/index.js +55 -50
  204. package/persisters/persister-sqlite-bun/index.js +182 -135
  205. package/persisters/persister-sqlite-bun/with-schemas/index.js +182 -135
  206. package/persisters/persister-sqlite-wasm/index.js +182 -135
  207. package/persisters/persister-sqlite-wasm/with-schemas/index.js +182 -135
  208. package/persisters/persister-sqlite3/index.js +181 -134
  209. package/persisters/persister-sqlite3/with-schemas/index.js +181 -134
  210. package/persisters/persister-yjs/index.js +55 -50
  211. package/persisters/persister-yjs/with-schemas/index.js +55 -50
  212. package/persisters/with-schemas/index.js +293 -161
  213. package/readme.md +2 -2
  214. package/releases.md +29 -1
  215. package/store/index.js +20 -15
  216. package/store/with-schemas/index.js +20 -15
  217. package/synchronizers/index.js +68 -63
  218. package/synchronizers/synchronizer-broadcast-channel/index.js +68 -63
  219. package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +68 -63
  220. package/synchronizers/synchronizer-local/index.js +68 -63
  221. package/synchronizers/synchronizer-local/with-schemas/index.js +68 -63
  222. package/synchronizers/synchronizer-ws-client/index.js +68 -63
  223. package/synchronizers/synchronizer-ws-client/with-schemas/index.js +68 -63
  224. package/synchronizers/synchronizer-ws-server/index.js +79 -70
  225. package/synchronizers/synchronizer-ws-server/with-schemas/index.js +79 -70
  226. package/synchronizers/synchronizer-ws-server-durable-object/index.js +69 -51
  227. package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +69 -51
  228. package/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
  229. package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
  230. package/synchronizers/with-schemas/index.js +68 -63
  231. package/ui-react-inspector/index.js +68 -60
  232. package/ui-react-inspector/with-schemas/index.js +68 -60
  233. package/with-schemas/index.js +23 -17
@@ -19,6 +19,14 @@ const promiseNew = (resolver) => new promise(resolver);
19
19
  const errorNew = (message) => {
20
20
  throw new Error(message);
21
21
  };
22
+ const tryCatch = async (action, then1, then2) => {
23
+ try {
24
+ return await action();
25
+ } catch (error) {
26
+ /* istanbul ignore next */
27
+ then1?.(error);
28
+ }
29
+ };
22
30
 
23
31
  const arrayForEach = (array, cb) => array.forEach(cb);
24
32
  const arrayMap = (array, cb) => array.map(cb);
@@ -283,12 +291,7 @@ const createCustomPersister = (
283
291
  while (
284
292
  !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
285
293
  ) {
286
- try {
287
- await action();
288
- } catch (error) {
289
- /* istanbul ignore next */
290
- onIgnoredError?.(error);
291
- }
294
+ await tryCatch(action, onIgnoredError);
292
295
  }
293
296
  mapSet(scheduleRunning, scheduleId, 0);
294
297
  }
@@ -308,21 +311,23 @@ const createCustomPersister = (
308
311
  setStatus(1 /* Loading */);
309
312
  loads++;
310
313
  await schedule(async () => {
311
- try {
312
- const content = await getPersisted();
313
- if (isArray(content)) {
314
- setContentOrChanges(content);
315
- } else if (initialContent) {
316
- setDefaultContent(initialContent);
317
- } else {
318
- errorNew(`Content is not an array: ${content}`);
319
- }
320
- } catch (error) {
321
- onIgnoredError?.(error);
322
- if (initialContent) {
323
- setDefaultContent(initialContent);
324
- }
325
- }
314
+ await tryCatch(
315
+ async () => {
316
+ const content = await getPersisted();
317
+ if (isArray(content)) {
318
+ setContentOrChanges(content);
319
+ } else if (initialContent) {
320
+ setDefaultContent(initialContent);
321
+ } else {
322
+ errorNew(`Content is not an array: ${content}`);
323
+ }
324
+ },
325
+ () => {
326
+ if (initialContent) {
327
+ setDefaultContent(initialContent);
328
+ }
329
+ },
330
+ );
326
331
  setStatus(0 /* Idle */);
327
332
  });
328
333
  }
@@ -331,29 +336,33 @@ const createCustomPersister = (
331
336
  const startAutoLoad = async (initialContent) => {
332
337
  stopAutoLoad();
333
338
  await load(initialContent);
334
- try {
335
- autoLoadHandle = await addPersisterListener(async (content, changes) => {
336
- if (changes || content) {
337
- /* istanbul ignore else */
338
- if (status != 2 /* Saving */) {
339
- setStatus(1 /* Loading */);
340
- loads++;
341
- setContentOrChanges(changes ?? content);
342
- setStatus(0 /* Idle */);
343
- }
344
- } else {
345
- await load();
346
- }
347
- });
348
- } catch (error) {
349
- /* istanbul ignore next */
350
- onIgnoredError?.(error);
351
- }
339
+ await tryCatch(
340
+ async () =>
341
+ (autoLoadHandle = await addPersisterListener(
342
+ async (content, changes) => {
343
+ if (changes || content) {
344
+ /* istanbul ignore else */
345
+ if (status != 2 /* Saving */) {
346
+ setStatus(1 /* Loading */);
347
+ loads++;
348
+ setContentOrChanges(changes ?? content);
349
+ setStatus(0 /* Idle */);
350
+ }
351
+ } else {
352
+ await load();
353
+ }
354
+ },
355
+ )),
356
+ onIgnoredError,
357
+ );
352
358
  return persister;
353
359
  };
354
- const stopAutoLoad = () => {
360
+ const stopAutoLoad = async () => {
355
361
  if (autoLoadHandle) {
356
- delPersisterListener(autoLoadHandle);
362
+ await tryCatch(
363
+ () => delPersisterListener(autoLoadHandle),
364
+ onIgnoredError,
365
+ );
357
366
  autoLoadHandle = void 0;
358
367
  }
359
368
  return persister;
@@ -365,12 +374,7 @@ const createCustomPersister = (
365
374
  setStatus(2 /* Saving */);
366
375
  saves++;
367
376
  await schedule(async () => {
368
- try {
369
- await setPersisted(getContent, changes);
370
- } catch (error) {
371
- /* istanbul ignore next */
372
- onIgnoredError?.(error);
373
- }
377
+ await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
374
378
  setStatus(0 /* Idle */);
375
379
  });
376
380
  }
@@ -387,7 +391,7 @@ const createCustomPersister = (
387
391
  });
388
392
  return persister;
389
393
  };
390
- const stopAutoSave = () => {
394
+ const stopAutoSave = async () => {
391
395
  if (autoSaveListenerId) {
392
396
  store.delListener(autoSaveListenerId);
393
397
  autoSaveListenerId = void 0;
@@ -408,9 +412,10 @@ const createCustomPersister = (
408
412
  return persister;
409
413
  };
410
414
  const getStore = () => store;
411
- const destroy = () => {
415
+ const destroy = async () => {
412
416
  arrayClear(mapGet(scheduleActions, scheduleId));
413
- return stopAutoLoad().stopAutoSave();
417
+ await persister.stopAutoLoad();
418
+ return await persister.stopAutoSave();
414
419
  };
415
420
  const getStats = () => ({loads, saves});
416
421
  const persister = {
@@ -438,7 +443,7 @@ const createCustomSynchronizer = (
438
443
  store,
439
444
  send,
440
445
  registerReceive,
441
- destroyImpl,
446
+ extraDestroy,
442
447
  requestTimeoutSeconds,
443
448
  onSend,
444
449
  onReceive,
@@ -492,12 +497,12 @@ const createCustomSynchronizer = (
492
497
  });
493
498
  tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
494
499
  };
495
- const getChangesFromOtherStore = async (
500
+ const getChangesFromOtherStore = (
496
501
  otherClientId = null,
497
502
  otherContentHashes,
498
503
  transactionId = getTransactionId(),
499
- ) => {
500
- try {
504
+ ) =>
505
+ tryCatch(async () => {
501
506
  if (isUndefined(otherContentHashes)) {
502
507
  [otherContentHashes, otherClientId, transactionId] = await request(
503
508
  null,
@@ -556,10 +561,7 @@ const createCustomSynchronizer = (
556
561
  )[0],
557
562
  1,
558
563
  ];
559
- } catch (error) {
560
- onIgnoredError?.(error);
561
- }
562
- };
564
+ }, onIgnoredError);
563
565
  const getPersisted = async () => {
564
566
  const changes = await getChangesFromOtherStore();
565
567
  return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
@@ -583,13 +585,16 @@ const createCustomSynchronizer = (
583
585
  await persister.startAutoLoad(initialContent)
584
586
  ).startAutoSave();
585
587
  };
586
- const stopSync = () => {
588
+ const stopSync = async () => {
587
589
  syncing = 0;
588
- return persister.stopAutoLoad().stopAutoSave();
590
+ await persister.stopAutoLoad();
591
+ await persister.stopAutoSave();
592
+ return persister;
589
593
  };
590
- const destroy = () => {
591
- destroyImpl();
592
- return persister.stopSync();
594
+ const destroy = async () => {
595
+ await persister.stopSync();
596
+ extraDestroy();
597
+ return persister;
593
598
  };
594
599
  const getSynchronizerStats = () => ({sends, receives});
595
600
  const persister = createCustomPersister(
@@ -19,6 +19,14 @@ const promiseNew = (resolver) => new promise(resolver);
19
19
  const errorNew = (message) => {
20
20
  throw new Error(message);
21
21
  };
22
+ const tryCatch = async (action, then1, then2) => {
23
+ try {
24
+ return await action();
25
+ } catch (error) {
26
+ /* istanbul ignore next */
27
+ then1?.(error);
28
+ }
29
+ };
22
30
 
23
31
  const arrayForEach = (array, cb) => array.forEach(cb);
24
32
  const arrayMap = (array, cb) => array.map(cb);
@@ -283,12 +291,7 @@ const createCustomPersister = (
283
291
  while (
284
292
  !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
285
293
  ) {
286
- try {
287
- await action();
288
- } catch (error) {
289
- /* istanbul ignore next */
290
- onIgnoredError?.(error);
291
- }
294
+ await tryCatch(action, onIgnoredError);
292
295
  }
293
296
  mapSet(scheduleRunning, scheduleId, 0);
294
297
  }
@@ -308,21 +311,23 @@ const createCustomPersister = (
308
311
  setStatus(1 /* Loading */);
309
312
  loads++;
310
313
  await schedule(async () => {
311
- try {
312
- const content = await getPersisted();
313
- if (isArray(content)) {
314
- setContentOrChanges(content);
315
- } else if (initialContent) {
316
- setDefaultContent(initialContent);
317
- } else {
318
- errorNew(`Content is not an array: ${content}`);
319
- }
320
- } catch (error) {
321
- onIgnoredError?.(error);
322
- if (initialContent) {
323
- setDefaultContent(initialContent);
324
- }
325
- }
314
+ await tryCatch(
315
+ async () => {
316
+ const content = await getPersisted();
317
+ if (isArray(content)) {
318
+ setContentOrChanges(content);
319
+ } else if (initialContent) {
320
+ setDefaultContent(initialContent);
321
+ } else {
322
+ errorNew(`Content is not an array: ${content}`);
323
+ }
324
+ },
325
+ () => {
326
+ if (initialContent) {
327
+ setDefaultContent(initialContent);
328
+ }
329
+ },
330
+ );
326
331
  setStatus(0 /* Idle */);
327
332
  });
328
333
  }
@@ -331,29 +336,33 @@ const createCustomPersister = (
331
336
  const startAutoLoad = async (initialContent) => {
332
337
  stopAutoLoad();
333
338
  await load(initialContent);
334
- try {
335
- autoLoadHandle = await addPersisterListener(async (content, changes) => {
336
- if (changes || content) {
337
- /* istanbul ignore else */
338
- if (status != 2 /* Saving */) {
339
- setStatus(1 /* Loading */);
340
- loads++;
341
- setContentOrChanges(changes ?? content);
342
- setStatus(0 /* Idle */);
343
- }
344
- } else {
345
- await load();
346
- }
347
- });
348
- } catch (error) {
349
- /* istanbul ignore next */
350
- onIgnoredError?.(error);
351
- }
339
+ await tryCatch(
340
+ async () =>
341
+ (autoLoadHandle = await addPersisterListener(
342
+ async (content, changes) => {
343
+ if (changes || content) {
344
+ /* istanbul ignore else */
345
+ if (status != 2 /* Saving */) {
346
+ setStatus(1 /* Loading */);
347
+ loads++;
348
+ setContentOrChanges(changes ?? content);
349
+ setStatus(0 /* Idle */);
350
+ }
351
+ } else {
352
+ await load();
353
+ }
354
+ },
355
+ )),
356
+ onIgnoredError,
357
+ );
352
358
  return persister;
353
359
  };
354
- const stopAutoLoad = () => {
360
+ const stopAutoLoad = async () => {
355
361
  if (autoLoadHandle) {
356
- delPersisterListener(autoLoadHandle);
362
+ await tryCatch(
363
+ () => delPersisterListener(autoLoadHandle),
364
+ onIgnoredError,
365
+ );
357
366
  autoLoadHandle = void 0;
358
367
  }
359
368
  return persister;
@@ -365,12 +374,7 @@ const createCustomPersister = (
365
374
  setStatus(2 /* Saving */);
366
375
  saves++;
367
376
  await schedule(async () => {
368
- try {
369
- await setPersisted(getContent, changes);
370
- } catch (error) {
371
- /* istanbul ignore next */
372
- onIgnoredError?.(error);
373
- }
377
+ await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
374
378
  setStatus(0 /* Idle */);
375
379
  });
376
380
  }
@@ -387,7 +391,7 @@ const createCustomPersister = (
387
391
  });
388
392
  return persister;
389
393
  };
390
- const stopAutoSave = () => {
394
+ const stopAutoSave = async () => {
391
395
  if (autoSaveListenerId) {
392
396
  store.delListener(autoSaveListenerId);
393
397
  autoSaveListenerId = void 0;
@@ -408,9 +412,10 @@ const createCustomPersister = (
408
412
  return persister;
409
413
  };
410
414
  const getStore = () => store;
411
- const destroy = () => {
415
+ const destroy = async () => {
412
416
  arrayClear(mapGet(scheduleActions, scheduleId));
413
- return stopAutoLoad().stopAutoSave();
417
+ await persister.stopAutoLoad();
418
+ return await persister.stopAutoSave();
414
419
  };
415
420
  const getStats = () => ({loads, saves});
416
421
  const persister = {
@@ -438,7 +443,7 @@ const createCustomSynchronizer = (
438
443
  store,
439
444
  send,
440
445
  registerReceive,
441
- destroyImpl,
446
+ extraDestroy,
442
447
  requestTimeoutSeconds,
443
448
  onSend,
444
449
  onReceive,
@@ -492,12 +497,12 @@ const createCustomSynchronizer = (
492
497
  });
493
498
  tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
494
499
  };
495
- const getChangesFromOtherStore = async (
500
+ const getChangesFromOtherStore = (
496
501
  otherClientId = null,
497
502
  otherContentHashes,
498
503
  transactionId = getTransactionId(),
499
- ) => {
500
- try {
504
+ ) =>
505
+ tryCatch(async () => {
501
506
  if (isUndefined(otherContentHashes)) {
502
507
  [otherContentHashes, otherClientId, transactionId] = await request(
503
508
  null,
@@ -556,10 +561,7 @@ const createCustomSynchronizer = (
556
561
  )[0],
557
562
  1,
558
563
  ];
559
- } catch (error) {
560
- onIgnoredError?.(error);
561
- }
562
- };
564
+ }, onIgnoredError);
563
565
  const getPersisted = async () => {
564
566
  const changes = await getChangesFromOtherStore();
565
567
  return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
@@ -583,13 +585,16 @@ const createCustomSynchronizer = (
583
585
  await persister.startAutoLoad(initialContent)
584
586
  ).startAutoSave();
585
587
  };
586
- const stopSync = () => {
588
+ const stopSync = async () => {
587
589
  syncing = 0;
588
- return persister.stopAutoLoad().stopAutoSave();
590
+ await persister.stopAutoLoad();
591
+ await persister.stopAutoSave();
592
+ return persister;
589
593
  };
590
- const destroy = () => {
591
- destroyImpl();
592
- return persister.stopSync();
594
+ const destroy = async () => {
595
+ await persister.stopSync();
596
+ extraDestroy();
597
+ return persister;
593
598
  };
594
599
  const getSynchronizerStats = () => ({sends, receives});
595
600
  const persister = createCustomPersister(
@@ -19,6 +19,14 @@ const promiseNew = (resolver) => new promise(resolver);
19
19
  const errorNew = (message) => {
20
20
  throw new Error(message);
21
21
  };
22
+ const tryCatch = async (action, then1, then2) => {
23
+ try {
24
+ return await action();
25
+ } catch (error) {
26
+ /* istanbul ignore next */
27
+ then1?.(error);
28
+ }
29
+ };
22
30
 
23
31
  const arrayForEach = (array, cb) => array.forEach(cb);
24
32
  const arrayMap = (array, cb) => array.map(cb);
@@ -285,12 +293,7 @@ const createCustomPersister = (
285
293
  while (
286
294
  !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
287
295
  ) {
288
- try {
289
- await action();
290
- } catch (error) {
291
- /* istanbul ignore next */
292
- onIgnoredError?.(error);
293
- }
296
+ await tryCatch(action, onIgnoredError);
294
297
  }
295
298
  mapSet(scheduleRunning, scheduleId, 0);
296
299
  }
@@ -310,21 +313,23 @@ const createCustomPersister = (
310
313
  setStatus(1 /* Loading */);
311
314
  loads++;
312
315
  await schedule(async () => {
313
- try {
314
- const content = await getPersisted();
315
- if (isArray(content)) {
316
- setContentOrChanges(content);
317
- } else if (initialContent) {
318
- setDefaultContent(initialContent);
319
- } else {
320
- errorNew(`Content is not an array: ${content}`);
321
- }
322
- } catch (error) {
323
- onIgnoredError?.(error);
324
- if (initialContent) {
325
- setDefaultContent(initialContent);
326
- }
327
- }
316
+ await tryCatch(
317
+ async () => {
318
+ const content = await getPersisted();
319
+ if (isArray(content)) {
320
+ setContentOrChanges(content);
321
+ } else if (initialContent) {
322
+ setDefaultContent(initialContent);
323
+ } else {
324
+ errorNew(`Content is not an array: ${content}`);
325
+ }
326
+ },
327
+ () => {
328
+ if (initialContent) {
329
+ setDefaultContent(initialContent);
330
+ }
331
+ },
332
+ );
328
333
  setStatus(0 /* Idle */);
329
334
  });
330
335
  }
@@ -333,29 +338,33 @@ const createCustomPersister = (
333
338
  const startAutoLoad = async (initialContent) => {
334
339
  stopAutoLoad();
335
340
  await load(initialContent);
336
- try {
337
- autoLoadHandle = await addPersisterListener(async (content, changes) => {
338
- if (changes || content) {
339
- /* istanbul ignore else */
340
- if (status != 2 /* Saving */) {
341
- setStatus(1 /* Loading */);
342
- loads++;
343
- setContentOrChanges(changes ?? content);
344
- setStatus(0 /* Idle */);
345
- }
346
- } else {
347
- await load();
348
- }
349
- });
350
- } catch (error) {
351
- /* istanbul ignore next */
352
- onIgnoredError?.(error);
353
- }
341
+ await tryCatch(
342
+ async () =>
343
+ (autoLoadHandle = await addPersisterListener(
344
+ async (content, changes) => {
345
+ if (changes || content) {
346
+ /* istanbul ignore else */
347
+ if (status != 2 /* Saving */) {
348
+ setStatus(1 /* Loading */);
349
+ loads++;
350
+ setContentOrChanges(changes ?? content);
351
+ setStatus(0 /* Idle */);
352
+ }
353
+ } else {
354
+ await load();
355
+ }
356
+ },
357
+ )),
358
+ onIgnoredError,
359
+ );
354
360
  return persister;
355
361
  };
356
- const stopAutoLoad = () => {
362
+ const stopAutoLoad = async () => {
357
363
  if (autoLoadHandle) {
358
- delPersisterListener(autoLoadHandle);
364
+ await tryCatch(
365
+ () => delPersisterListener(autoLoadHandle),
366
+ onIgnoredError,
367
+ );
359
368
  autoLoadHandle = void 0;
360
369
  }
361
370
  return persister;
@@ -367,12 +376,7 @@ const createCustomPersister = (
367
376
  setStatus(2 /* Saving */);
368
377
  saves++;
369
378
  await schedule(async () => {
370
- try {
371
- await setPersisted(getContent, changes);
372
- } catch (error) {
373
- /* istanbul ignore next */
374
- onIgnoredError?.(error);
375
- }
379
+ await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
376
380
  setStatus(0 /* Idle */);
377
381
  });
378
382
  }
@@ -389,7 +393,7 @@ const createCustomPersister = (
389
393
  });
390
394
  return persister;
391
395
  };
392
- const stopAutoSave = () => {
396
+ const stopAutoSave = async () => {
393
397
  if (autoSaveListenerId) {
394
398
  store.delListener(autoSaveListenerId);
395
399
  autoSaveListenerId = void 0;
@@ -410,9 +414,10 @@ const createCustomPersister = (
410
414
  return persister;
411
415
  };
412
416
  const getStore = () => store;
413
- const destroy = () => {
417
+ const destroy = async () => {
414
418
  arrayClear(mapGet(scheduleActions, scheduleId));
415
- return stopAutoLoad().stopAutoSave();
419
+ await persister.stopAutoLoad();
420
+ return await persister.stopAutoSave();
416
421
  };
417
422
  const getStats = () => ({loads, saves});
418
423
  const persister = {
@@ -440,7 +445,7 @@ const createCustomSynchronizer = (
440
445
  store,
441
446
  send,
442
447
  registerReceive,
443
- destroyImpl,
448
+ extraDestroy,
444
449
  requestTimeoutSeconds,
445
450
  onSend,
446
451
  onReceive,
@@ -494,12 +499,12 @@ const createCustomSynchronizer = (
494
499
  });
495
500
  tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
496
501
  };
497
- const getChangesFromOtherStore = async (
502
+ const getChangesFromOtherStore = (
498
503
  otherClientId = null,
499
504
  otherContentHashes,
500
505
  transactionId = getTransactionId(),
501
- ) => {
502
- try {
506
+ ) =>
507
+ tryCatch(async () => {
503
508
  if (isUndefined(otherContentHashes)) {
504
509
  [otherContentHashes, otherClientId, transactionId] = await request(
505
510
  null,
@@ -558,10 +563,7 @@ const createCustomSynchronizer = (
558
563
  )[0],
559
564
  1,
560
565
  ];
561
- } catch (error) {
562
- onIgnoredError?.(error);
563
- }
564
- };
566
+ }, onIgnoredError);
565
567
  const getPersisted = async () => {
566
568
  const changes = await getChangesFromOtherStore();
567
569
  return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
@@ -585,13 +587,16 @@ const createCustomSynchronizer = (
585
587
  await persister.startAutoLoad(initialContent)
586
588
  ).startAutoSave();
587
589
  };
588
- const stopSync = () => {
590
+ const stopSync = async () => {
589
591
  syncing = 0;
590
- return persister.stopAutoLoad().stopAutoSave();
592
+ await persister.stopAutoLoad();
593
+ await persister.stopAutoSave();
594
+ return persister;
591
595
  };
592
- const destroy = () => {
593
- destroyImpl();
594
- return persister.stopSync();
596
+ const destroy = async () => {
597
+ await persister.stopSync();
598
+ extraDestroy();
599
+ return persister;
595
600
  };
596
601
  const getSynchronizerStats = () => ({sends, receives});
597
602
  const persister = createCustomPersister(