tinybase 5.0.0-beta.7 → 5.0.0-beta.9

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 (324) hide show
  1. package/lib/cjs/mergeable-store.cjs +1 -1
  2. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  4. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  6. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  8. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  10. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  12. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  14. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-file.cjs +1 -1
  16. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  18. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-libsql.cjs +1 -1
  20. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  22. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-powersync.cjs +1 -1
  24. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  26. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  28. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  30. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  32. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  33. package/lib/cjs/persisters.cjs +1 -1
  34. package/lib/cjs/persisters.cjs.gz +0 -0
  35. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -1
  36. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  37. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -1
  38. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  39. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -1
  40. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  41. package/lib/cjs/synchronizers.cjs +1 -1
  42. package/lib/cjs/synchronizers.cjs.gz +0 -0
  43. package/lib/cjs/tinybase.cjs +1 -1
  44. package/lib/cjs/tinybase.cjs.gz +0 -0
  45. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  46. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  47. package/lib/cjs/ui-react.cjs +1 -1
  48. package/lib/cjs/ui-react.cjs.gz +0 -0
  49. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  50. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  51. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  52. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  53. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  54. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  56. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  57. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  58. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  59. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  60. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  70. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters.cjs +1 -1
  82. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  83. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -1
  84. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  85. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -1
  86. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  87. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -1
  88. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  89. package/lib/cjs-es6/synchronizers.cjs +1 -1
  90. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  91. package/lib/cjs-es6/tinybase.cjs +1 -1
  92. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  93. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  94. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  95. package/lib/cjs-es6/ui-react.cjs +1 -1
  96. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  97. package/lib/debug/mergeable-store.js +6 -0
  98. package/lib/debug/persisters/persister-automerge.js +15 -6
  99. package/lib/debug/persisters/persister-browser.js +15 -6
  100. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +15 -6
  101. package/lib/debug/persisters/persister-electric-sql.js +15 -6
  102. package/lib/debug/persisters/persister-expo-sqlite-next.js +15 -6
  103. package/lib/debug/persisters/persister-expo-sqlite.js +15 -6
  104. package/lib/debug/persisters/persister-file.js +15 -6
  105. package/lib/debug/persisters/persister-indexed-db.js +15 -6
  106. package/lib/debug/persisters/persister-libsql.js +15 -6
  107. package/lib/debug/persisters/persister-partykit-client.js +15 -6
  108. package/lib/debug/persisters/persister-powersync.js +15 -6
  109. package/lib/debug/persisters/persister-remote.js +15 -6
  110. package/lib/debug/persisters/persister-sqlite-wasm.js +15 -6
  111. package/lib/debug/persisters/persister-sqlite3.js +15 -6
  112. package/lib/debug/persisters/persister-yjs.js +15 -6
  113. package/lib/debug/persisters.js +15 -6
  114. package/lib/debug/synchronizers/synchronizer-local.js +27 -18
  115. package/lib/debug/synchronizers/synchronizer-ws-client.js +45 -33
  116. package/lib/debug/synchronizers/synchronizer-ws-server.js +65 -26
  117. package/lib/debug/synchronizers.js +27 -18
  118. package/lib/debug/tinybase.js +33 -18
  119. package/lib/debug/ui-react-dom.js +22 -10
  120. package/lib/debug/ui-react.js +54 -5
  121. package/lib/es6/mergeable-store.js +1 -1
  122. package/lib/es6/mergeable-store.js.gz +0 -0
  123. package/lib/es6/persisters/persister-automerge.js +1 -1
  124. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  125. package/lib/es6/persisters/persister-browser.js +1 -1
  126. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  127. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  128. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  129. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  130. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  131. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  132. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  133. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  134. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  135. package/lib/es6/persisters/persister-file.js +1 -1
  136. package/lib/es6/persisters/persister-file.js.gz +0 -0
  137. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  138. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  139. package/lib/es6/persisters/persister-libsql.js +1 -1
  140. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  141. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  142. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  143. package/lib/es6/persisters/persister-powersync.js +1 -1
  144. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  145. package/lib/es6/persisters/persister-remote.js +1 -1
  146. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  147. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  148. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  149. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  150. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  151. package/lib/es6/persisters/persister-yjs.js +1 -1
  152. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  153. package/lib/es6/persisters.js +1 -1
  154. package/lib/es6/persisters.js.gz +0 -0
  155. package/lib/es6/synchronizers/synchronizer-local.js +1 -1
  156. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  157. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -1
  158. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  159. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -1
  160. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  161. package/lib/es6/synchronizers.js +1 -1
  162. package/lib/es6/synchronizers.js.gz +0 -0
  163. package/lib/es6/tinybase.js +1 -1
  164. package/lib/es6/tinybase.js.gz +0 -0
  165. package/lib/es6/ui-react-dom-debug.js +1 -1
  166. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  167. package/lib/es6/ui-react.js +1 -1
  168. package/lib/es6/ui-react.js.gz +0 -0
  169. package/lib/mergeable-store.js +1 -1
  170. package/lib/mergeable-store.js.gz +0 -0
  171. package/lib/persisters/persister-automerge.js +1 -1
  172. package/lib/persisters/persister-automerge.js.gz +0 -0
  173. package/lib/persisters/persister-browser.js +1 -1
  174. package/lib/persisters/persister-browser.js.gz +0 -0
  175. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  176. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  177. package/lib/persisters/persister-electric-sql.js +1 -1
  178. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  179. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  180. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  181. package/lib/persisters/persister-expo-sqlite.js +1 -1
  182. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  183. package/lib/persisters/persister-file.js +1 -1
  184. package/lib/persisters/persister-file.js.gz +0 -0
  185. package/lib/persisters/persister-indexed-db.js +1 -1
  186. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  187. package/lib/persisters/persister-libsql.js +1 -1
  188. package/lib/persisters/persister-libsql.js.gz +0 -0
  189. package/lib/persisters/persister-partykit-client.js +1 -1
  190. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  191. package/lib/persisters/persister-powersync.js +1 -1
  192. package/lib/persisters/persister-powersync.js.gz +0 -0
  193. package/lib/persisters/persister-remote.js +1 -1
  194. package/lib/persisters/persister-remote.js.gz +0 -0
  195. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  196. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  197. package/lib/persisters/persister-sqlite3.js +1 -1
  198. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  199. package/lib/persisters/persister-yjs.js +1 -1
  200. package/lib/persisters/persister-yjs.js.gz +0 -0
  201. package/lib/persisters.js +1 -1
  202. package/lib/persisters.js.gz +0 -0
  203. package/lib/synchronizers/synchronizer-local.js +1 -1
  204. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  205. package/lib/synchronizers/synchronizer-ws-client.js +1 -1
  206. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  207. package/lib/synchronizers/synchronizer-ws-server.js +1 -1
  208. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  209. package/lib/synchronizers.js +1 -1
  210. package/lib/synchronizers.js.gz +0 -0
  211. package/lib/tinybase.js +1 -1
  212. package/lib/tinybase.js.gz +0 -0
  213. package/lib/types/mergeable-store.d.ts +7 -1
  214. package/lib/types/persisters.d.ts +10 -14
  215. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +10 -5
  216. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +12 -0
  217. package/lib/types/synchronizers.d.ts +3 -2
  218. package/lib/types/ui-react.d.ts +151 -1
  219. package/lib/types/with-schemas/mergeable-store.d.ts +7 -0
  220. package/lib/types/with-schemas/persisters.d.ts +11 -23
  221. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +15 -6
  222. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +12 -0
  223. package/lib/types/with-schemas/synchronizers.d.ts +4 -4
  224. package/lib/types/with-schemas/ui-react.d.ts +169 -1
  225. package/lib/ui-react.js +1 -1
  226. package/lib/ui-react.js.gz +0 -0
  227. package/lib/umd/mergeable-store.js +1 -1
  228. package/lib/umd/mergeable-store.js.gz +0 -0
  229. package/lib/umd/persisters/persister-automerge.js +1 -1
  230. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  231. package/lib/umd/persisters/persister-browser.js +1 -1
  232. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  233. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  234. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  235. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  236. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  237. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  238. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  239. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  240. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  241. package/lib/umd/persisters/persister-file.js +1 -1
  242. package/lib/umd/persisters/persister-file.js.gz +0 -0
  243. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  244. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  245. package/lib/umd/persisters/persister-libsql.js +1 -1
  246. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  247. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  248. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  249. package/lib/umd/persisters/persister-powersync.js +1 -1
  250. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  251. package/lib/umd/persisters/persister-remote.js +1 -1
  252. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  253. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  254. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  255. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  256. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  257. package/lib/umd/persisters/persister-yjs.js +1 -1
  258. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  259. package/lib/umd/persisters.js +1 -1
  260. package/lib/umd/persisters.js.gz +0 -0
  261. package/lib/umd/synchronizers/synchronizer-local.js +1 -1
  262. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  263. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -1
  264. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  265. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -1
  266. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  267. package/lib/umd/synchronizers.js +1 -1
  268. package/lib/umd/synchronizers.js.gz +0 -0
  269. package/lib/umd/tinybase.js +1 -1
  270. package/lib/umd/tinybase.js.gz +0 -0
  271. package/lib/umd/ui-react-dom-debug.js +1 -1
  272. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  273. package/lib/umd/ui-react.js +1 -1
  274. package/lib/umd/ui-react.js.gz +0 -0
  275. package/lib/umd-es6/mergeable-store.js +1 -1
  276. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  277. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  278. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  279. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  280. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  281. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  282. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  283. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  284. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  285. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  286. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  287. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  288. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  289. package/lib/umd-es6/persisters/persister-file.js +1 -1
  290. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  291. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  292. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  293. package/lib/umd-es6/persisters/persister-libsql.js +1 -1
  294. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  295. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  296. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  297. package/lib/umd-es6/persisters/persister-powersync.js +1 -1
  298. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  299. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  300. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  301. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  302. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  303. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  304. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  305. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  306. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  307. package/lib/umd-es6/persisters.js +1 -1
  308. package/lib/umd-es6/persisters.js.gz +0 -0
  309. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -1
  310. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  311. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -1
  312. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  313. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -1
  314. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  315. package/lib/umd-es6/synchronizers.js +1 -1
  316. package/lib/umd-es6/synchronizers.js.gz +0 -0
  317. package/lib/umd-es6/tinybase.js +1 -1
  318. package/lib/umd-es6/tinybase.js.gz +0 -0
  319. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  320. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  321. package/lib/umd-es6/ui-react.js +1 -1
  322. package/lib/umd-es6/ui-react.js.gz +0 -0
  323. package/package.json +1 -1
  324. package/readme.md +2 -2
@@ -76,6 +76,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
76
76
  store.getTransactionChanges,
77
77
  ([changedTables, changedValues]) =>
78
78
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
79
+ store.setContent,
79
80
  ]
80
81
  : [
81
82
  1,
@@ -83,6 +84,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
83
84
  store.getTransactionMergeableChanges,
84
85
  ([, [[, changedTables], [, changedValues]]]) =>
85
86
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
87
+ store.setDefaultContent,
86
88
  ];
87
89
  const createCustomPersister = (
88
90
  store,
@@ -103,8 +105,13 @@ const createCustomPersister = (
103
105
  let autoSaveListenerId;
104
106
  mapEnsure(scheduleRunning, scheduleId, () => 0);
105
107
  mapEnsure(scheduleActions, scheduleId, () => []);
106
- const [isMergeableStore, getContent, getChanges, hasChanges] =
107
- getStoreFunctions(supportsMergeableStore, store);
108
+ const [
109
+ isMergeableStore,
110
+ getContent,
111
+ getChanges,
112
+ hasChanges,
113
+ setDefaultContent,
114
+ ] = getStoreFunctions(supportsMergeableStore, store);
108
115
  const run = async () => {
109
116
  /* istanbul ignore else */
110
117
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -146,17 +153,19 @@ const createCustomPersister = (
146
153
  : store.setContent)(contentOrChanges);
147
154
  };
148
155
  const persister = {
149
- load: async (initialTables, initialValues) =>
156
+ load: async (initialContent) =>
150
157
  await loadLock(async () => {
151
158
  try {
152
159
  setContentOrChanges(await getPersisted());
153
160
  } catch (error) {
154
161
  onIgnoredError?.(error);
155
- store.setContent([initialTables, initialValues]);
162
+ if (initialContent) {
163
+ setDefaultContent(initialContent);
164
+ }
156
165
  }
157
166
  }),
158
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
159
- await persister.stopAutoLoad().load(initialTables, initialValues);
167
+ startAutoLoad: async (initialContent) => {
168
+ await persister.stopAutoLoad().load(initialContent);
160
169
  autoLoadHandle = addPersisterListener(
161
170
  async (getContent2, getChanges2) => {
162
171
  const changes = getChanges2?.();
@@ -54,6 +54,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
54
54
  store.getTransactionChanges,
55
55
  ([changedTables, changedValues]) =>
56
56
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
57
+ store.setContent,
57
58
  ]
58
59
  : [
59
60
  1,
@@ -61,6 +62,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
61
62
  store.getTransactionMergeableChanges,
62
63
  ([, [[, changedTables], [, changedValues]]]) =>
63
64
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
65
+ store.setDefaultContent,
64
66
  ];
65
67
  const createCustomPersister = (
66
68
  store,
@@ -81,8 +83,13 @@ const createCustomPersister = (
81
83
  let autoSaveListenerId;
82
84
  mapEnsure(scheduleRunning, scheduleId, () => 0);
83
85
  mapEnsure(scheduleActions, scheduleId, () => []);
84
- const [isMergeableStore, getContent, getChanges, hasChanges] =
85
- getStoreFunctions(supportsMergeableStore, store);
86
+ const [
87
+ isMergeableStore,
88
+ getContent,
89
+ getChanges,
90
+ hasChanges,
91
+ setDefaultContent,
92
+ ] = getStoreFunctions(supportsMergeableStore, store);
86
93
  const run = async () => {
87
94
  /* istanbul ignore else */
88
95
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -124,17 +131,19 @@ const createCustomPersister = (
124
131
  : store.setContent)(contentOrChanges);
125
132
  };
126
133
  const persister = {
127
- load: async (initialTables, initialValues) =>
134
+ load: async (initialContent) =>
128
135
  await loadLock(async () => {
129
136
  try {
130
137
  setContentOrChanges(await getPersisted());
131
138
  } catch (error) {
132
139
  onIgnoredError?.(error);
133
- store.setContent([initialTables, initialValues]);
140
+ if (initialContent) {
141
+ setDefaultContent(initialContent);
142
+ }
134
143
  }
135
144
  }),
136
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
137
- await persister.stopAutoLoad().load(initialTables, initialValues);
145
+ startAutoLoad: async (initialContent) => {
146
+ await persister.stopAutoLoad().load(initialContent);
138
147
  autoLoadHandle = addPersisterListener(
139
148
  async (getContent2, getChanges2) => {
140
149
  const changes = getChanges2?.();
@@ -62,6 +62,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
62
62
  store.getTransactionChanges,
63
63
  ([changedTables, changedValues]) =>
64
64
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
65
+ store.setContent,
65
66
  ]
66
67
  : [
67
68
  1,
@@ -69,6 +70,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
69
70
  store.getTransactionMergeableChanges,
70
71
  ([, [[, changedTables], [, changedValues]]]) =>
71
72
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
73
+ store.setDefaultContent,
72
74
  ];
73
75
  const createCustomPersister = (
74
76
  store,
@@ -89,8 +91,13 @@ const createCustomPersister = (
89
91
  let autoSaveListenerId;
90
92
  mapEnsure(scheduleRunning, scheduleId, () => 0);
91
93
  mapEnsure(scheduleActions, scheduleId, () => []);
92
- const [isMergeableStore, getContent, getChanges, hasChanges] =
93
- getStoreFunctions(supportsMergeableStore, store);
94
+ const [
95
+ isMergeableStore,
96
+ getContent,
97
+ getChanges,
98
+ hasChanges,
99
+ setDefaultContent,
100
+ ] = getStoreFunctions(supportsMergeableStore, store);
94
101
  const run = async () => {
95
102
  /* istanbul ignore else */
96
103
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -132,17 +139,19 @@ const createCustomPersister = (
132
139
  : store.setContent)(contentOrChanges);
133
140
  };
134
141
  const persister = {
135
- load: async (initialTables, initialValues) =>
142
+ load: async (initialContent) =>
136
143
  await loadLock(async () => {
137
144
  try {
138
145
  setContentOrChanges(await getPersisted());
139
146
  } catch (error) {
140
147
  onIgnoredError?.(error);
141
- store.setContent([initialTables, initialValues]);
148
+ if (initialContent) {
149
+ setDefaultContent(initialContent);
150
+ }
142
151
  }
143
152
  }),
144
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
145
- await persister.stopAutoLoad().load(initialTables, initialValues);
153
+ startAutoLoad: async (initialContent) => {
154
+ await persister.stopAutoLoad().load(initialContent);
146
155
  autoLoadHandle = addPersisterListener(
147
156
  async (getContent2, getChanges2) => {
148
157
  const changes = getChanges2?.();
@@ -310,9 +319,10 @@ const createCustomSynchronizer = (
310
319
  store,
311
320
  send,
312
321
  onReceive,
313
- destroy,
314
- requestTimeoutSeconds = 1,
322
+ destroyImpl,
323
+ requestTimeoutSeconds,
315
324
  onIgnoredError,
325
+ extra = {},
316
326
  ) => {
317
327
  let persisterListener;
318
328
  let sends = 0;
@@ -444,6 +454,14 @@ const createCustomSynchronizer = (
444
454
  };
445
455
  const addPersisterListener = (listener) => (persisterListener = listener);
446
456
  const delPersisterListener = () => (persisterListener = void 0);
457
+ const startSync = async (initialContent) =>
458
+ await (await persister.startAutoLoad(initialContent)).startAutoSave();
459
+ const stopSync = () => persister.stopAutoLoad().stopAutoSave();
460
+ const destroy = () => {
461
+ destroyImpl();
462
+ return persister.stopSync();
463
+ };
464
+ const getSynchronizerStats = () => ({sends, receives});
447
465
  const persister = createCustomPersister(
448
466
  store,
449
467
  getPersisted,
@@ -452,16 +470,7 @@ const createCustomSynchronizer = (
452
470
  delPersisterListener,
453
471
  onIgnoredError,
454
472
  true,
455
- {
456
- startSync: async () =>
457
- await (await persister.startAutoLoad()).startAutoSave(),
458
- stopSync: () => persister.stopAutoLoad().stopAutoSave(),
459
- destroy: () => {
460
- destroy();
461
- return persister.stopSync();
462
- },
463
- getSynchronizerStats: () => ({sends, receives}),
464
- },
473
+ {startSync, stopSync, destroy, getSynchronizerStats, ...extra},
465
474
  );
466
475
  return persister;
467
476
  };
@@ -70,6 +70,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
70
70
  store.getTransactionChanges,
71
71
  ([changedTables, changedValues]) =>
72
72
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
73
+ store.setContent,
73
74
  ]
74
75
  : [
75
76
  1,
@@ -77,6 +78,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
77
78
  store.getTransactionMergeableChanges,
78
79
  ([, [[, changedTables], [, changedValues]]]) =>
79
80
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
81
+ store.setDefaultContent,
80
82
  ];
81
83
  const createCustomPersister = (
82
84
  store,
@@ -97,8 +99,13 @@ const createCustomPersister = (
97
99
  let autoSaveListenerId;
98
100
  mapEnsure(scheduleRunning, scheduleId, () => 0);
99
101
  mapEnsure(scheduleActions, scheduleId, () => []);
100
- const [isMergeableStore, getContent, getChanges, hasChanges] =
101
- getStoreFunctions(supportsMergeableStore, store);
102
+ const [
103
+ isMergeableStore,
104
+ getContent,
105
+ getChanges,
106
+ hasChanges,
107
+ setDefaultContent,
108
+ ] = getStoreFunctions(supportsMergeableStore, store);
102
109
  const run = async () => {
103
110
  /* istanbul ignore else */
104
111
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -140,17 +147,19 @@ const createCustomPersister = (
140
147
  : store.setContent)(contentOrChanges);
141
148
  };
142
149
  const persister = {
143
- load: async (initialTables, initialValues) =>
150
+ load: async (initialContent) =>
144
151
  await loadLock(async () => {
145
152
  try {
146
153
  setContentOrChanges(await getPersisted());
147
154
  } catch (error) {
148
155
  onIgnoredError?.(error);
149
- store.setContent([initialTables, initialValues]);
156
+ if (initialContent) {
157
+ setDefaultContent(initialContent);
158
+ }
150
159
  }
151
160
  }),
152
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
153
- await persister.stopAutoLoad().load(initialTables, initialValues);
161
+ startAutoLoad: async (initialContent) => {
162
+ await persister.stopAutoLoad().load(initialContent);
154
163
  autoLoadHandle = addPersisterListener(
155
164
  async (getContent2, getChanges2) => {
156
165
  const changes = getChanges2?.();
@@ -318,9 +327,10 @@ const createCustomSynchronizer = (
318
327
  store,
319
328
  send,
320
329
  onReceive,
321
- destroy,
322
- requestTimeoutSeconds = 1,
330
+ destroyImpl,
331
+ requestTimeoutSeconds,
323
332
  onIgnoredError,
333
+ extra = {},
324
334
  ) => {
325
335
  let persisterListener;
326
336
  let sends = 0;
@@ -452,6 +462,14 @@ const createCustomSynchronizer = (
452
462
  };
453
463
  const addPersisterListener = (listener) => (persisterListener = listener);
454
464
  const delPersisterListener = () => (persisterListener = void 0);
465
+ const startSync = async (initialContent) =>
466
+ await (await persister.startAutoLoad(initialContent)).startAutoSave();
467
+ const stopSync = () => persister.stopAutoLoad().stopAutoSave();
468
+ const destroy = () => {
469
+ destroyImpl();
470
+ return persister.stopSync();
471
+ };
472
+ const getSynchronizerStats = () => ({sends, receives});
455
473
  const persister = createCustomPersister(
456
474
  store,
457
475
  getPersisted,
@@ -460,16 +478,7 @@ const createCustomSynchronizer = (
460
478
  delPersisterListener,
461
479
  onIgnoredError,
462
480
  true,
463
- {
464
- startSync: async () =>
465
- await (await persister.startAutoLoad()).startAutoSave(),
466
- stopSync: () => persister.stopAutoLoad().stopAutoSave(),
467
- destroy: () => {
468
- destroy();
469
- return persister.stopSync();
470
- },
471
- getSynchronizerStats: () => ({sends, receives}),
472
- },
481
+ {startSync, stopSync, destroy, getSynchronizerStats, ...extra},
473
482
  );
474
483
  return persister;
475
484
  };
@@ -477,22 +486,12 @@ const createCustomSynchronizer = (
477
486
  const createWsSynchronizer = async (
478
487
  store,
479
488
  webSocket,
480
- requestTimeoutSeconds,
489
+ requestTimeoutSeconds = 1,
481
490
  onIgnoredError,
482
491
  ) => {
483
492
  let currentReceive;
484
- webSocket.on('message', (data) => {
485
- if (!isUndefined(currentReceive)) {
486
- const payload = data.toString(UTF8);
487
- const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
488
- if (splitAt !== -1) {
489
- currentReceive(
490
- slice(payload, 0, splitAt),
491
- ...jsonParse(slice(payload, splitAt + 1)),
492
- );
493
- }
494
- }
495
- });
493
+ const addEventListener = (event, handler) =>
494
+ webSocket.addEventListener(event, handler);
496
495
  const onReceive = (receive) => {
497
496
  currentReceive = receive;
498
497
  };
@@ -511,11 +510,24 @@ const createWsSynchronizer = async (
511
510
  destroy,
512
511
  requestTimeoutSeconds,
513
512
  onIgnoredError,
513
+ {getWebSocket: () => webSocket},
514
514
  );
515
+ addEventListener('message', ({data}) => {
516
+ if (!isUndefined(currentReceive)) {
517
+ const payload = data.toString(UTF8);
518
+ const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
519
+ if (splitAt !== -1) {
520
+ currentReceive(
521
+ slice(data, 0, splitAt),
522
+ ...jsonParse(slice(data, splitAt + 1)),
523
+ );
524
+ }
525
+ }
526
+ });
515
527
  return promiseNew((resolve, reject) => {
516
528
  if (webSocket.readyState != webSocket.OPEN) {
517
- webSocket.on('error', reject);
518
- webSocket.on('open', () => resolve(synchronizer));
529
+ addEventListener('error', reject);
530
+ addEventListener('open', () => resolve(synchronizer));
519
531
  } else {
520
532
  resolve(synchronizer);
521
533
  }
@@ -2,54 +2,93 @@ const EMPTY_STRING = '';
2
2
  const UTF8 = 'utf8';
3
3
 
4
4
  const isUndefined = (thing) => thing == void 0;
5
+ const ifNotUndefined = (value, then, otherwise) =>
6
+ isUndefined(value) ? otherwise?.() : then(value);
5
7
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
6
8
 
9
+ const arrayReduce = (array, cb, initial) => array.reduce(cb, initial);
10
+
11
+ const collSizeN = (collSizer) => (coll) =>
12
+ arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
13
+ const collSize = (coll) => coll?.size ?? 0;
14
+ const collSize2 = collSizeN(collSize);
15
+ const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
16
+ const collIsEmpty = (coll) => isUndefined(coll) || collSize(coll) == 0;
17
+ const collValues = (coll) => [...(coll?.values() ?? [])];
7
18
  const collClear = (coll) => coll.clear();
8
19
  const collForEach = (coll, cb) => coll?.forEach(cb);
9
20
  const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
10
21
 
11
22
  const mapNew = (entries) => new Map(entries);
23
+ const mapKeys = (map) => [...(map?.keys() ?? [])];
12
24
  const mapGet = (map, key) => map?.get(key);
13
25
  const mapForEach = (map, cb) =>
14
26
  collForEach(map, (value, key) => cb(key, value));
15
27
  const mapSet = (map, key, value) =>
16
28
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
29
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
30
+ if (!collHas(map, key)) {
31
+ mapSet(map, key, getDefaultValue());
32
+ } else {
33
+ hadExistingValue?.(mapGet(map, key));
34
+ }
35
+ return mapGet(map, key);
36
+ };
17
37
 
18
38
  const MESSAGE_SEPARATOR = '\n';
19
39
 
40
+ const PATH_REGEX = /\/([^?]*)/;
20
41
  const createWsServer = (webSocketServer) => {
21
- const clients = mapNew();
22
- webSocketServer.on('connection', (webSocket, request) => {
23
- const clientId = request.headers['sec-websocket-key'];
24
- mapSet(clients, clientId, webSocket);
25
- webSocket.on('message', (data) => {
26
- const payload = data.toString(UTF8);
27
- const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
28
- if (splitAt !== -1) {
29
- const toClientId = slice(payload, 0, splitAt);
30
- const message = slice(payload, splitAt + 1);
31
- toClientId === EMPTY_STRING
32
- ? mapForEach(clients, (otherClientId, otherWebSocket) =>
33
- otherClientId != clientId
34
- ? otherWebSocket.send(clientId + MESSAGE_SEPARATOR + message)
35
- : 0,
36
- )
37
- : mapGet(clients, toClientId)?.send(
38
- clientId + MESSAGE_SEPARATOR + message,
39
- );
40
- }
41
- });
42
- webSocket.on('close', () => {
43
- collDel(clients, clientId);
44
- });
45
- });
42
+ const clientsByPath = mapNew();
43
+ webSocketServer.on('connection', (webSocket, request) =>
44
+ ifNotUndefined(request.url?.match(PATH_REGEX), ([path]) =>
45
+ ifNotUndefined(request.headers['sec-websocket-key'], (clientId) => {
46
+ const clients = mapEnsure(clientsByPath, path, mapNew);
47
+ mapSet(clients, clientId, webSocket);
48
+ webSocket.on('message', (data) => {
49
+ const payload = data.toString(UTF8);
50
+ const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
51
+ if (splitAt !== -1) {
52
+ const toClientId = slice(payload, 0, splitAt);
53
+ const message = slice(payload, splitAt + 1);
54
+ toClientId === EMPTY_STRING
55
+ ? mapForEach(clients, (otherClientId, otherWebSocket) =>
56
+ otherClientId != clientId
57
+ ? otherWebSocket.send(
58
+ clientId + MESSAGE_SEPARATOR + message,
59
+ )
60
+ : 0,
61
+ )
62
+ : mapGet(clients, toClientId)?.send(
63
+ clientId + MESSAGE_SEPARATOR + message,
64
+ );
65
+ }
66
+ });
67
+ webSocket.on('close', () => {
68
+ collDel(clients, clientId);
69
+ if (collIsEmpty(clients)) {
70
+ collDel(clientsByPath, path);
71
+ }
72
+ });
73
+ }),
74
+ ),
75
+ );
46
76
  const getWebSocketServer = () => webSocketServer;
77
+ const getPaths = () => mapKeys(clientsByPath);
78
+ const getClientIds = (path) => mapKeys(mapGet(clientsByPath, path));
79
+ const getStats = () => ({
80
+ paths: collSize(clientsByPath),
81
+ clients: collSize2(clientsByPath),
82
+ });
47
83
  const destroy = () => {
48
84
  webSocketServer.close();
49
- collClear(clients);
85
+ collClear(clientsByPath);
50
86
  };
51
87
  return {
52
88
  getWebSocketServer,
89
+ getPaths,
90
+ getClientIds,
91
+ getStats,
53
92
  destroy,
54
93
  };
55
94
  };
@@ -59,6 +59,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
59
59
  store.getTransactionChanges,
60
60
  ([changedTables, changedValues]) =>
61
61
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
62
+ store.setContent,
62
63
  ]
63
64
  : [
64
65
  1,
@@ -66,6 +67,7 @@ const getStoreFunctions = (supportsMergeableStore, store) =>
66
67
  store.getTransactionMergeableChanges,
67
68
  ([, [[, changedTables], [, changedValues]]]) =>
68
69
  !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
70
+ store.setDefaultContent,
69
71
  ];
70
72
  const createCustomPersister = (
71
73
  store,
@@ -86,8 +88,13 @@ const createCustomPersister = (
86
88
  let autoSaveListenerId;
87
89
  mapEnsure(scheduleRunning, scheduleId, () => 0);
88
90
  mapEnsure(scheduleActions, scheduleId, () => []);
89
- const [isMergeableStore, getContent, getChanges, hasChanges] =
90
- getStoreFunctions(supportsMergeableStore, store);
91
+ const [
92
+ isMergeableStore,
93
+ getContent,
94
+ getChanges,
95
+ hasChanges,
96
+ setDefaultContent,
97
+ ] = getStoreFunctions(supportsMergeableStore, store);
91
98
  const run = async () => {
92
99
  /* istanbul ignore else */
93
100
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -129,17 +136,19 @@ const createCustomPersister = (
129
136
  : store.setContent)(contentOrChanges);
130
137
  };
131
138
  const persister = {
132
- load: async (initialTables, initialValues) =>
139
+ load: async (initialContent) =>
133
140
  await loadLock(async () => {
134
141
  try {
135
142
  setContentOrChanges(await getPersisted());
136
143
  } catch (error) {
137
144
  onIgnoredError?.(error);
138
- store.setContent([initialTables, initialValues]);
145
+ if (initialContent) {
146
+ setDefaultContent(initialContent);
147
+ }
139
148
  }
140
149
  }),
141
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
142
- await persister.stopAutoLoad().load(initialTables, initialValues);
150
+ startAutoLoad: async (initialContent) => {
151
+ await persister.stopAutoLoad().load(initialContent);
143
152
  autoLoadHandle = addPersisterListener(
144
153
  async (getContent2, getChanges2) => {
145
154
  const changes = getChanges2?.();
@@ -307,9 +316,10 @@ const createCustomSynchronizer = (
307
316
  store,
308
317
  send,
309
318
  onReceive,
310
- destroy,
311
- requestTimeoutSeconds = 1,
319
+ destroyImpl,
320
+ requestTimeoutSeconds,
312
321
  onIgnoredError,
322
+ extra = {},
313
323
  ) => {
314
324
  let persisterListener;
315
325
  let sends = 0;
@@ -441,6 +451,14 @@ const createCustomSynchronizer = (
441
451
  };
442
452
  const addPersisterListener = (listener) => (persisterListener = listener);
443
453
  const delPersisterListener = () => (persisterListener = void 0);
454
+ const startSync = async (initialContent) =>
455
+ await (await persister.startAutoLoad(initialContent)).startAutoSave();
456
+ const stopSync = () => persister.stopAutoLoad().stopAutoSave();
457
+ const destroy = () => {
458
+ destroyImpl();
459
+ return persister.stopSync();
460
+ };
461
+ const getSynchronizerStats = () => ({sends, receives});
444
462
  const persister = createCustomPersister(
445
463
  store,
446
464
  getPersisted,
@@ -449,16 +467,7 @@ const createCustomSynchronizer = (
449
467
  delPersisterListener,
450
468
  onIgnoredError,
451
469
  true,
452
- {
453
- startSync: async () =>
454
- await (await persister.startAutoLoad()).startAutoSave(),
455
- stopSync: () => persister.stopAutoLoad().stopAutoSave(),
456
- destroy: () => {
457
- destroy();
458
- return persister.stopSync();
459
- },
460
- getSynchronizerStats: () => ({sends, receives}),
461
- },
470
+ {startSync, stopSync, destroy, getSynchronizerStats, ...extra},
462
471
  );
463
472
  return persister;
464
473
  };