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.
Files changed (233) hide show
  1. package/@types/persisters/index.d.ts +83 -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 +159 -0
  29. package/@types/persisters/persister-sqlite-bun/with-schemas/index.d.ts +178 -0
  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 +87 -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 -0
  119. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  120. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -0
  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 +46 -6
  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 +1171 -0
  205. package/persisters/persister-sqlite-bun/with-schemas/index.js +1171 -0
  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
@@ -21,10 +21,20 @@ const isArray = (thing) => Array.isArray(thing);
21
21
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
22
22
  const size = (arrayOrString) => arrayOrString.length;
23
23
  const test = (regex, subject) => regex.test(subject);
24
+ const noop = () => {};
24
25
  const promiseNew = (resolver) => new promise(resolver);
26
+ const promiseAll = async (promises) => promise.all(promises);
25
27
  const errorNew = (message) => {
26
28
  throw new Error(message);
27
29
  };
30
+ const tryCatch = async (action, then1, then2) => {
31
+ try {
32
+ return await action();
33
+ } catch (error) {
34
+ /* istanbul ignore next */
35
+ then1?.(error);
36
+ }
37
+ };
28
38
 
29
39
  const arrayForEach = (array, cb) => array.forEach(cb);
30
40
  const arrayMap = (array, cb) => array.map(cb);
@@ -78,6 +88,8 @@ const mapKeys = (map) => [...(map?.keys() ?? [])];
78
88
  const mapGet = (map, key) => map?.get(key);
79
89
  const mapForEach = (map, cb) =>
80
90
  collForEach(map, (value, key) => cb(key, value));
91
+ const mapMap = (coll, cb) =>
92
+ arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
81
93
  const mapSet = (map, key, value) =>
82
94
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
83
95
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
@@ -320,12 +332,7 @@ const createCustomPersister = (
320
332
  while (
321
333
  !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
322
334
  ) {
323
- try {
324
- await action();
325
- } catch (error) {
326
- /* istanbul ignore next */
327
- onIgnoredError?.(error);
328
- }
335
+ await tryCatch(action, onIgnoredError);
329
336
  }
330
337
  mapSet(scheduleRunning, scheduleId, 0);
331
338
  }
@@ -345,21 +352,23 @@ const createCustomPersister = (
345
352
  setStatus(1 /* Loading */);
346
353
  loads++;
347
354
  await schedule(async () => {
348
- try {
349
- const content = await getPersisted();
350
- if (isArray(content)) {
351
- setContentOrChanges(content);
352
- } else if (initialContent) {
353
- setDefaultContent(initialContent);
354
- } else {
355
- errorNew(`Content is not an array: ${content}`);
356
- }
357
- } catch (error) {
358
- onIgnoredError?.(error);
359
- if (initialContent) {
360
- setDefaultContent(initialContent);
361
- }
362
- }
355
+ await tryCatch(
356
+ async () => {
357
+ const content = await getPersisted();
358
+ if (isArray(content)) {
359
+ setContentOrChanges(content);
360
+ } else if (initialContent) {
361
+ setDefaultContent(initialContent);
362
+ } else {
363
+ errorNew(`Content is not an array: ${content}`);
364
+ }
365
+ },
366
+ () => {
367
+ if (initialContent) {
368
+ setDefaultContent(initialContent);
369
+ }
370
+ },
371
+ );
363
372
  setStatus(0 /* Idle */);
364
373
  });
365
374
  }
@@ -368,29 +377,33 @@ const createCustomPersister = (
368
377
  const startAutoLoad = async (initialContent) => {
369
378
  stopAutoLoad();
370
379
  await load(initialContent);
371
- try {
372
- autoLoadHandle = await addPersisterListener(async (content, changes) => {
373
- if (changes || content) {
374
- /* istanbul ignore else */
375
- if (status != 2 /* Saving */) {
376
- setStatus(1 /* Loading */);
377
- loads++;
378
- setContentOrChanges(changes ?? content);
379
- setStatus(0 /* Idle */);
380
- }
381
- } else {
382
- await load();
383
- }
384
- });
385
- } catch (error) {
386
- /* istanbul ignore next */
387
- onIgnoredError?.(error);
388
- }
380
+ await tryCatch(
381
+ async () =>
382
+ (autoLoadHandle = await addPersisterListener(
383
+ async (content, changes) => {
384
+ if (changes || content) {
385
+ /* istanbul ignore else */
386
+ if (status != 2 /* Saving */) {
387
+ setStatus(1 /* Loading */);
388
+ loads++;
389
+ setContentOrChanges(changes ?? content);
390
+ setStatus(0 /* Idle */);
391
+ }
392
+ } else {
393
+ await load();
394
+ }
395
+ },
396
+ )),
397
+ onIgnoredError,
398
+ );
389
399
  return persister;
390
400
  };
391
- const stopAutoLoad = () => {
401
+ const stopAutoLoad = async () => {
392
402
  if (autoLoadHandle) {
393
- delPersisterListener(autoLoadHandle);
403
+ await tryCatch(
404
+ () => delPersisterListener(autoLoadHandle),
405
+ onIgnoredError,
406
+ );
394
407
  autoLoadHandle = void 0;
395
408
  }
396
409
  return persister;
@@ -402,12 +415,7 @@ const createCustomPersister = (
402
415
  setStatus(2 /* Saving */);
403
416
  saves++;
404
417
  await schedule(async () => {
405
- try {
406
- await setPersisted(getContent, changes);
407
- } catch (error) {
408
- /* istanbul ignore next */
409
- onIgnoredError?.(error);
410
- }
418
+ await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
411
419
  setStatus(0 /* Idle */);
412
420
  });
413
421
  }
@@ -424,7 +432,7 @@ const createCustomPersister = (
424
432
  });
425
433
  return persister;
426
434
  };
427
- const stopAutoSave = () => {
435
+ const stopAutoSave = async () => {
428
436
  if (autoSaveListenerId) {
429
437
  store.delListener(autoSaveListenerId);
430
438
  autoSaveListenerId = void 0;
@@ -445,9 +453,10 @@ const createCustomPersister = (
445
453
  return persister;
446
454
  };
447
455
  const getStore = () => store;
448
- const destroy = () => {
456
+ const destroy = async () => {
449
457
  arrayClear(mapGet(scheduleActions, scheduleId));
450
- return stopAutoLoad().stopAutoSave();
458
+ await persister.stopAutoLoad();
459
+ return await persister.stopAutoSave();
451
460
  };
452
461
  const getStats = () => ({loads, saves});
453
462
  const persister = {
@@ -475,7 +484,7 @@ const createCustomSynchronizer = (
475
484
  store,
476
485
  send,
477
486
  registerReceive,
478
- destroyImpl,
487
+ extraDestroy,
479
488
  requestTimeoutSeconds,
480
489
  onSend,
481
490
  onReceive,
@@ -528,12 +537,12 @@ const createCustomSynchronizer = (
528
537
  });
529
538
  tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
530
539
  };
531
- const getChangesFromOtherStore = async (
540
+ const getChangesFromOtherStore = (
532
541
  otherClientId = null,
533
542
  otherContentHashes,
534
543
  transactionId = getTransactionId(),
535
- ) => {
536
- try {
544
+ ) =>
545
+ tryCatch(async () => {
537
546
  if (isUndefined(otherContentHashes)) {
538
547
  [otherContentHashes, otherClientId, transactionId] = await request(
539
548
  null,
@@ -592,10 +601,7 @@ const createCustomSynchronizer = (
592
601
  )[0],
593
602
  1,
594
603
  ];
595
- } catch (error) {
596
- onIgnoredError?.(error);
597
- }
598
- };
604
+ }, onIgnoredError);
599
605
  const getPersisted = async () => {
600
606
  const changes = await getChangesFromOtherStore();
601
607
  return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
@@ -619,12 +625,15 @@ const createCustomSynchronizer = (
619
625
  await persister.startAutoLoad(initialContent)
620
626
  ).startAutoSave();
621
627
  };
622
- const stopSync = () => {
628
+ const stopSync = async () => {
623
629
  syncing = 0;
624
- return persister.stopAutoLoad().stopAutoSave();
630
+ await persister.stopAutoLoad();
631
+ await persister.stopAutoSave();
632
+ return persister;
625
633
  };
626
- const destroy = () => {
627
- return persister.stopSync();
634
+ const destroy = async () => {
635
+ await persister.stopSync();
636
+ return persister;
628
637
  };
629
638
  const getSynchronizerStats = () => ({sends, receives});
630
639
  const persister = createCustomPersister(
@@ -725,7 +734,7 @@ const createWsServer = (
725
734
  (receive) =>
726
735
  (serverClient[3 /* Send */] = (payload) =>
727
736
  receivePayload(payload, receive)),
728
- () => {},
737
+ noop,
729
738
  1,
730
739
  void 0,
731
740
  void 0,
@@ -747,9 +756,9 @@ const createWsServer = (
747
756
  serverClient[5 /* Then */](serverClient[1 /* Persister */].getStore());
748
757
  serverClient[0 /* State */] = 0 /* Ready */;
749
758
  };
750
- const stopServerClient = (serverClient) => {
751
- serverClient[1 /* Persister */]?.destroy();
752
- serverClient[2 /* Synchronizer */]?.destroy();
759
+ const stopServerClient = async (serverClient) => {
760
+ await serverClient[1 /* Persister */]?.destroy();
761
+ await serverClient[2 /* Synchronizer */]?.destroy();
753
762
  };
754
763
  const getMessageHandler = (clientId, clients, serverClient) => (payload) =>
755
764
  ifPayloadValid(payload, (toClientId, remainder) => {
@@ -798,11 +807,11 @@ const createWsServer = (
798
807
  arrayForEach(serverClient[4 /* Buffer */], messageHandler);
799
808
  serverClient[4 /* Buffer */] = [];
800
809
  }
801
- client.on('close', () => {
810
+ client.on('close', async () => {
802
811
  collDel(clients, clientId);
803
812
  callListeners(clientIdListeners, [pathId], clientId, -1);
804
813
  if (collIsEmpty(clients)) {
805
- stopServerClient(serverClient);
814
+ await stopServerClient(serverClient);
806
815
  collDel(serverClientsByPath, pathId);
807
816
  collDel(clientsByPath, pathId);
808
817
  callListeners(pathIdListeners, void 0, pathId, -1);
@@ -832,9 +841,9 @@ const createWsServer = (
832
841
  paths: collSize(clientsByPath),
833
842
  clients: collSize2(clientsByPath),
834
843
  });
835
- const destroy = () => {
844
+ const destroy = async () => {
836
845
  collClear(clientsByPath);
837
- collForEach(serverClientsByPath, stopServerClient);
846
+ await promiseAll(mapMap(serverClientsByPath, stopServerClient));
838
847
  webSocketServer.close();
839
848
  };
840
849
  const wsServer = {
@@ -21,10 +21,20 @@ const isArray = (thing) => Array.isArray(thing);
21
21
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
22
22
  const size = (arrayOrString) => arrayOrString.length;
23
23
  const test = (regex, subject) => regex.test(subject);
24
+ const noop = () => {};
24
25
  const promiseNew = (resolver) => new promise(resolver);
26
+ const promiseAll = async (promises) => promise.all(promises);
25
27
  const errorNew = (message) => {
26
28
  throw new Error(message);
27
29
  };
30
+ const tryCatch = async (action, then1, then2) => {
31
+ try {
32
+ return await action();
33
+ } catch (error) {
34
+ /* istanbul ignore next */
35
+ then1?.(error);
36
+ }
37
+ };
28
38
 
29
39
  const arrayForEach = (array, cb) => array.forEach(cb);
30
40
  const arrayMap = (array, cb) => array.map(cb);
@@ -78,6 +88,8 @@ const mapKeys = (map) => [...(map?.keys() ?? [])];
78
88
  const mapGet = (map, key) => map?.get(key);
79
89
  const mapForEach = (map, cb) =>
80
90
  collForEach(map, (value, key) => cb(key, value));
91
+ const mapMap = (coll, cb) =>
92
+ arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
81
93
  const mapSet = (map, key, value) =>
82
94
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
83
95
  const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
@@ -320,12 +332,7 @@ const createCustomPersister = (
320
332
  while (
321
333
  !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
322
334
  ) {
323
- try {
324
- await action();
325
- } catch (error) {
326
- /* istanbul ignore next */
327
- onIgnoredError?.(error);
328
- }
335
+ await tryCatch(action, onIgnoredError);
329
336
  }
330
337
  mapSet(scheduleRunning, scheduleId, 0);
331
338
  }
@@ -345,21 +352,23 @@ const createCustomPersister = (
345
352
  setStatus(1 /* Loading */);
346
353
  loads++;
347
354
  await schedule(async () => {
348
- try {
349
- const content = await getPersisted();
350
- if (isArray(content)) {
351
- setContentOrChanges(content);
352
- } else if (initialContent) {
353
- setDefaultContent(initialContent);
354
- } else {
355
- errorNew(`Content is not an array: ${content}`);
356
- }
357
- } catch (error) {
358
- onIgnoredError?.(error);
359
- if (initialContent) {
360
- setDefaultContent(initialContent);
361
- }
362
- }
355
+ await tryCatch(
356
+ async () => {
357
+ const content = await getPersisted();
358
+ if (isArray(content)) {
359
+ setContentOrChanges(content);
360
+ } else if (initialContent) {
361
+ setDefaultContent(initialContent);
362
+ } else {
363
+ errorNew(`Content is not an array: ${content}`);
364
+ }
365
+ },
366
+ () => {
367
+ if (initialContent) {
368
+ setDefaultContent(initialContent);
369
+ }
370
+ },
371
+ );
363
372
  setStatus(0 /* Idle */);
364
373
  });
365
374
  }
@@ -368,29 +377,33 @@ const createCustomPersister = (
368
377
  const startAutoLoad = async (initialContent) => {
369
378
  stopAutoLoad();
370
379
  await load(initialContent);
371
- try {
372
- autoLoadHandle = await addPersisterListener(async (content, changes) => {
373
- if (changes || content) {
374
- /* istanbul ignore else */
375
- if (status != 2 /* Saving */) {
376
- setStatus(1 /* Loading */);
377
- loads++;
378
- setContentOrChanges(changes ?? content);
379
- setStatus(0 /* Idle */);
380
- }
381
- } else {
382
- await load();
383
- }
384
- });
385
- } catch (error) {
386
- /* istanbul ignore next */
387
- onIgnoredError?.(error);
388
- }
380
+ await tryCatch(
381
+ async () =>
382
+ (autoLoadHandle = await addPersisterListener(
383
+ async (content, changes) => {
384
+ if (changes || content) {
385
+ /* istanbul ignore else */
386
+ if (status != 2 /* Saving */) {
387
+ setStatus(1 /* Loading */);
388
+ loads++;
389
+ setContentOrChanges(changes ?? content);
390
+ setStatus(0 /* Idle */);
391
+ }
392
+ } else {
393
+ await load();
394
+ }
395
+ },
396
+ )),
397
+ onIgnoredError,
398
+ );
389
399
  return persister;
390
400
  };
391
- const stopAutoLoad = () => {
401
+ const stopAutoLoad = async () => {
392
402
  if (autoLoadHandle) {
393
- delPersisterListener(autoLoadHandle);
403
+ await tryCatch(
404
+ () => delPersisterListener(autoLoadHandle),
405
+ onIgnoredError,
406
+ );
394
407
  autoLoadHandle = void 0;
395
408
  }
396
409
  return persister;
@@ -402,12 +415,7 @@ const createCustomPersister = (
402
415
  setStatus(2 /* Saving */);
403
416
  saves++;
404
417
  await schedule(async () => {
405
- try {
406
- await setPersisted(getContent, changes);
407
- } catch (error) {
408
- /* istanbul ignore next */
409
- onIgnoredError?.(error);
410
- }
418
+ await tryCatch(() => setPersisted(getContent, changes), onIgnoredError);
411
419
  setStatus(0 /* Idle */);
412
420
  });
413
421
  }
@@ -424,7 +432,7 @@ const createCustomPersister = (
424
432
  });
425
433
  return persister;
426
434
  };
427
- const stopAutoSave = () => {
435
+ const stopAutoSave = async () => {
428
436
  if (autoSaveListenerId) {
429
437
  store.delListener(autoSaveListenerId);
430
438
  autoSaveListenerId = void 0;
@@ -445,9 +453,10 @@ const createCustomPersister = (
445
453
  return persister;
446
454
  };
447
455
  const getStore = () => store;
448
- const destroy = () => {
456
+ const destroy = async () => {
449
457
  arrayClear(mapGet(scheduleActions, scheduleId));
450
- return stopAutoLoad().stopAutoSave();
458
+ await persister.stopAutoLoad();
459
+ return await persister.stopAutoSave();
451
460
  };
452
461
  const getStats = () => ({loads, saves});
453
462
  const persister = {
@@ -475,7 +484,7 @@ const createCustomSynchronizer = (
475
484
  store,
476
485
  send,
477
486
  registerReceive,
478
- destroyImpl,
487
+ extraDestroy,
479
488
  requestTimeoutSeconds,
480
489
  onSend,
481
490
  onReceive,
@@ -528,12 +537,12 @@ const createCustomSynchronizer = (
528
537
  });
529
538
  tablesStamp[1] = getLatestTime(tablesStamp[1], tablesTime2);
530
539
  };
531
- const getChangesFromOtherStore = async (
540
+ const getChangesFromOtherStore = (
532
541
  otherClientId = null,
533
542
  otherContentHashes,
534
543
  transactionId = getTransactionId(),
535
- ) => {
536
- try {
544
+ ) =>
545
+ tryCatch(async () => {
537
546
  if (isUndefined(otherContentHashes)) {
538
547
  [otherContentHashes, otherClientId, transactionId] = await request(
539
548
  null,
@@ -592,10 +601,7 @@ const createCustomSynchronizer = (
592
601
  )[0],
593
602
  1,
594
603
  ];
595
- } catch (error) {
596
- onIgnoredError?.(error);
597
- }
598
- };
604
+ }, onIgnoredError);
599
605
  const getPersisted = async () => {
600
606
  const changes = await getChangesFromOtherStore();
601
607
  return changes && (!objIsEmpty(changes[0][0]) || !objIsEmpty(changes[1][0]))
@@ -619,12 +625,15 @@ const createCustomSynchronizer = (
619
625
  await persister.startAutoLoad(initialContent)
620
626
  ).startAutoSave();
621
627
  };
622
- const stopSync = () => {
628
+ const stopSync = async () => {
623
629
  syncing = 0;
624
- return persister.stopAutoLoad().stopAutoSave();
630
+ await persister.stopAutoLoad();
631
+ await persister.stopAutoSave();
632
+ return persister;
625
633
  };
626
- const destroy = () => {
627
- return persister.stopSync();
634
+ const destroy = async () => {
635
+ await persister.stopSync();
636
+ return persister;
628
637
  };
629
638
  const getSynchronizerStats = () => ({sends, receives});
630
639
  const persister = createCustomPersister(
@@ -725,7 +734,7 @@ const createWsServer = (
725
734
  (receive) =>
726
735
  (serverClient[3 /* Send */] = (payload) =>
727
736
  receivePayload(payload, receive)),
728
- () => {},
737
+ noop,
729
738
  1,
730
739
  void 0,
731
740
  void 0,
@@ -747,9 +756,9 @@ const createWsServer = (
747
756
  serverClient[5 /* Then */](serverClient[1 /* Persister */].getStore());
748
757
  serverClient[0 /* State */] = 0 /* Ready */;
749
758
  };
750
- const stopServerClient = (serverClient) => {
751
- serverClient[1 /* Persister */]?.destroy();
752
- serverClient[2 /* Synchronizer */]?.destroy();
759
+ const stopServerClient = async (serverClient) => {
760
+ await serverClient[1 /* Persister */]?.destroy();
761
+ await serverClient[2 /* Synchronizer */]?.destroy();
753
762
  };
754
763
  const getMessageHandler = (clientId, clients, serverClient) => (payload) =>
755
764
  ifPayloadValid(payload, (toClientId, remainder) => {
@@ -798,11 +807,11 @@ const createWsServer = (
798
807
  arrayForEach(serverClient[4 /* Buffer */], messageHandler);
799
808
  serverClient[4 /* Buffer */] = [];
800
809
  }
801
- client.on('close', () => {
810
+ client.on('close', async () => {
802
811
  collDel(clients, clientId);
803
812
  callListeners(clientIdListeners, [pathId], clientId, -1);
804
813
  if (collIsEmpty(clients)) {
805
- stopServerClient(serverClient);
814
+ await stopServerClient(serverClient);
806
815
  collDel(serverClientsByPath, pathId);
807
816
  collDel(clientsByPath, pathId);
808
817
  callListeners(pathIdListeners, void 0, pathId, -1);
@@ -832,9 +841,9 @@ const createWsServer = (
832
841
  paths: collSize(clientsByPath),
833
842
  clients: collSize2(clientsByPath),
834
843
  });
835
- const destroy = () => {
844
+ const destroy = async () => {
836
845
  collClear(clientsByPath);
837
- collForEach(serverClientsByPath, stopServerClient);
846
+ await promiseAll(mapMap(serverClientsByPath, stopServerClient));
838
847
  webSocketServer.close();
839
848
  };
840
849
  const wsServer = {