tinybase 5.0.0-beta.5 → 5.0.0-beta.6

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 (353) 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 -0
  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-sync.cjs +1 -0
  32. package/lib/cjs/persisters/persister-sync.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  34. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  35. package/lib/cjs/persisters.cjs +1 -1
  36. package/lib/cjs/persisters.cjs.gz +0 -0
  37. package/lib/cjs/store.cjs +1 -1
  38. package/lib/cjs/store.cjs.gz +0 -0
  39. package/lib/cjs/tinybase.cjs +1 -1
  40. package/lib/cjs/tinybase.cjs.gz +0 -0
  41. package/lib/cjs/tools.cjs +1 -1
  42. package/lib/cjs/tools.cjs.gz +0 -0
  43. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  44. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  45. package/lib/cjs/ui-react.cjs +1 -1
  46. package/lib/cjs/ui-react.cjs.gz +0 -0
  47. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  48. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  49. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  50. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  51. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  52. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  53. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  54. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  56. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  57. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  58. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  59. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  60. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  70. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-sync.cjs +1 -0
  78. package/lib/cjs-es6/persisters/persister-sync.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/store.cjs +1 -1
  84. package/lib/cjs-es6/store.cjs.gz +0 -0
  85. package/lib/cjs-es6/tinybase.cjs +1 -1
  86. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  87. package/lib/cjs-es6/tools.cjs +1 -1
  88. package/lib/cjs-es6/tools.cjs.gz +0 -0
  89. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  90. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  91. package/lib/cjs-es6/ui-react.cjs +1 -1
  92. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  93. package/lib/debug/mergeable-store.js +287 -130
  94. package/lib/debug/persisters/persister-automerge.js +39 -46
  95. package/lib/debug/persisters/persister-browser.js +39 -46
  96. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +64 -60
  97. package/lib/debug/persisters/persister-electric-sql.js +64 -60
  98. package/lib/debug/persisters/persister-expo-sqlite-next.js +64 -60
  99. package/lib/debug/persisters/persister-expo-sqlite.js +64 -60
  100. package/lib/debug/persisters/persister-file.js +39 -46
  101. package/lib/debug/persisters/persister-indexed-db.js +39 -46
  102. package/lib/debug/persisters/persister-libsql.js +64 -60
  103. package/lib/debug/persisters/persister-partykit-client.js +39 -46
  104. package/lib/debug/persisters/persister-powersync.js +917 -0
  105. package/lib/debug/persisters/persister-remote.js +39 -46
  106. package/lib/debug/persisters/persister-sqlite-wasm.js +64 -60
  107. package/lib/debug/persisters/persister-sqlite3.js +64 -60
  108. package/lib/debug/persisters/persister-sync.js +594 -0
  109. package/lib/debug/persisters/persister-yjs.js +41 -48
  110. package/lib/debug/persisters.js +38 -45
  111. package/lib/debug/store.js +44 -32
  112. package/lib/debug/tinybase.js +322 -173
  113. package/lib/debug/tools.js +2 -2
  114. package/lib/debug/ui-react-dom.js +81 -76
  115. package/lib/debug/ui-react.js +1 -1
  116. package/lib/es6/mergeable-store.js +1 -1
  117. package/lib/es6/mergeable-store.js.gz +0 -0
  118. package/lib/es6/persisters/persister-automerge.js +1 -1
  119. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  120. package/lib/es6/persisters/persister-browser.js +1 -1
  121. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  122. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  123. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  124. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  125. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  126. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  127. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  128. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  129. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  130. package/lib/es6/persisters/persister-file.js +1 -1
  131. package/lib/es6/persisters/persister-file.js.gz +0 -0
  132. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  133. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  134. package/lib/es6/persisters/persister-libsql.js +1 -1
  135. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  136. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  137. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  138. package/lib/es6/persisters/persister-powersync.js +1 -0
  139. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  140. package/lib/es6/persisters/persister-remote.js +1 -1
  141. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  142. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  143. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  144. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  145. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  146. package/lib/es6/persisters/persister-sync.js +1 -0
  147. package/lib/es6/persisters/persister-sync.js.gz +0 -0
  148. package/lib/es6/persisters/persister-yjs.js +1 -1
  149. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  150. package/lib/es6/persisters.js +1 -1
  151. package/lib/es6/persisters.js.gz +0 -0
  152. package/lib/es6/store.js +1 -1
  153. package/lib/es6/store.js.gz +0 -0
  154. package/lib/es6/tinybase.js +1 -1
  155. package/lib/es6/tinybase.js.gz +0 -0
  156. package/lib/es6/tools.js +1 -1
  157. package/lib/es6/tools.js.gz +0 -0
  158. package/lib/es6/ui-react-dom-debug.js +1 -1
  159. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  160. package/lib/es6/ui-react.js +1 -1
  161. package/lib/es6/ui-react.js.gz +0 -0
  162. package/lib/mergeable-store.js +1 -1
  163. package/lib/mergeable-store.js.gz +0 -0
  164. package/lib/persisters/persister-automerge.js +1 -1
  165. package/lib/persisters/persister-automerge.js.gz +0 -0
  166. package/lib/persisters/persister-browser.js +1 -1
  167. package/lib/persisters/persister-browser.js.gz +0 -0
  168. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  169. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  170. package/lib/persisters/persister-electric-sql.js +1 -1
  171. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  172. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  173. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  174. package/lib/persisters/persister-expo-sqlite.js +1 -1
  175. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  176. package/lib/persisters/persister-file.js +1 -1
  177. package/lib/persisters/persister-file.js.gz +0 -0
  178. package/lib/persisters/persister-indexed-db.js +1 -1
  179. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  180. package/lib/persisters/persister-libsql.js +1 -1
  181. package/lib/persisters/persister-libsql.js.gz +0 -0
  182. package/lib/persisters/persister-partykit-client.js +1 -1
  183. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  184. package/lib/persisters/persister-powersync.js +1 -0
  185. package/lib/persisters/persister-powersync.js.gz +0 -0
  186. package/lib/persisters/persister-remote.js +1 -1
  187. package/lib/persisters/persister-remote.js.gz +0 -0
  188. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  189. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  190. package/lib/persisters/persister-sqlite3.js +1 -1
  191. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  192. package/lib/persisters/persister-sync.js +1 -0
  193. package/lib/persisters/persister-sync.js.gz +0 -0
  194. package/lib/persisters/persister-yjs.js +1 -1
  195. package/lib/persisters/persister-yjs.js.gz +0 -0
  196. package/lib/persisters.js +1 -1
  197. package/lib/persisters.js.gz +0 -0
  198. package/lib/store.js +1 -1
  199. package/lib/store.js.gz +0 -0
  200. package/lib/tinybase.js +1 -1
  201. package/lib/tinybase.js.gz +0 -0
  202. package/lib/tools.js +1 -1
  203. package/lib/tools.js.gz +0 -0
  204. package/lib/types/checkpoints.d.ts +2 -2
  205. package/lib/types/indexes.d.ts +2 -2
  206. package/lib/types/mergeable-store.d.ts +121 -59
  207. package/lib/types/metrics.d.ts +2 -2
  208. package/lib/types/persisters/persister-automerge.d.ts +3 -0
  209. package/lib/types/persisters/persister-browser.d.ts +9 -2
  210. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +3 -0
  211. package/lib/types/persisters/persister-electric-sql.d.ts +3 -0
  212. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +3 -0
  213. package/lib/types/persisters/persister-expo-sqlite.d.ts +3 -0
  214. package/lib/types/persisters/persister-file.d.ts +5 -1
  215. package/lib/types/persisters/persister-indexed-db.d.ts +3 -0
  216. package/lib/types/persisters/persister-libsql.d.ts +3 -0
  217. package/lib/types/persisters/persister-partykit-client.d.ts +3 -0
  218. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  219. package/lib/types/persisters/persister-remote.d.ts +3 -0
  220. package/lib/types/persisters/persister-sqlite-wasm.d.ts +3 -0
  221. package/lib/types/persisters/persister-sqlite3.d.ts +3 -0
  222. package/lib/types/persisters/persister-sync.d.ts +182 -0
  223. package/lib/types/persisters/persister-yjs.d.ts +5 -2
  224. package/lib/types/persisters.d.ts +60 -3
  225. package/lib/types/queries.d.ts +2 -2
  226. package/lib/types/relationships.d.ts +2 -2
  227. package/lib/types/store.d.ts +36 -3
  228. package/lib/types/tinybase.d.ts +9 -9
  229. package/lib/types/tools.d.ts +2 -2
  230. package/lib/types/ui-react.d.ts +8 -8
  231. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  232. package/lib/types/with-schemas/indexes.d.ts +2 -2
  233. package/lib/types/with-schemas/mergeable-store.d.ts +185 -87
  234. package/lib/types/with-schemas/metrics.d.ts +2 -2
  235. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +4 -1
  236. package/lib/types/with-schemas/persisters/persister-browser.d.ts +13 -6
  237. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +4 -1
  238. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +4 -1
  239. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +4 -1
  240. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +4 -1
  241. package/lib/types/with-schemas/persisters/persister-file.d.ts +7 -3
  242. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +4 -1
  243. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +4 -1
  244. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +4 -1
  245. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  246. package/lib/types/with-schemas/persisters/persister-remote.d.ts +4 -1
  247. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +4 -1
  248. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +4 -1
  249. package/lib/types/with-schemas/persisters/persister-sync.d.ts +195 -0
  250. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +6 -3
  251. package/lib/types/with-schemas/persisters.d.ts +79 -7
  252. package/lib/types/with-schemas/queries.d.ts +3 -3
  253. package/lib/types/with-schemas/relationships.d.ts +2 -2
  254. package/lib/types/with-schemas/store.d.ts +100 -3
  255. package/lib/types/with-schemas/tinybase.d.ts +9 -9
  256. package/lib/types/with-schemas/tools.d.ts +2 -2
  257. package/lib/types/with-schemas/ui-react.d.ts +8 -8
  258. package/lib/ui-react.js +1 -1
  259. package/lib/ui-react.js.gz +0 -0
  260. package/lib/umd/mergeable-store.js +1 -1
  261. package/lib/umd/mergeable-store.js.gz +0 -0
  262. package/lib/umd/persisters/persister-automerge.js +1 -1
  263. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  264. package/lib/umd/persisters/persister-browser.js +1 -1
  265. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  266. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  267. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  268. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  269. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  270. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  271. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  272. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  273. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  274. package/lib/umd/persisters/persister-file.js +1 -1
  275. package/lib/umd/persisters/persister-file.js.gz +0 -0
  276. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  277. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  278. package/lib/umd/persisters/persister-libsql.js +1 -1
  279. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  280. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  281. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  282. package/lib/umd/persisters/persister-powersync.js +1 -0
  283. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  284. package/lib/umd/persisters/persister-remote.js +1 -1
  285. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  286. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  287. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  288. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  289. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  290. package/lib/umd/persisters/persister-sync.js +1 -0
  291. package/lib/umd/persisters/persister-sync.js.gz +0 -0
  292. package/lib/umd/persisters/persister-yjs.js +1 -1
  293. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  294. package/lib/umd/persisters.js +1 -1
  295. package/lib/umd/persisters.js.gz +0 -0
  296. package/lib/umd/store.js +1 -1
  297. package/lib/umd/store.js.gz +0 -0
  298. package/lib/umd/tinybase.js +1 -1
  299. package/lib/umd/tinybase.js.gz +0 -0
  300. package/lib/umd/tools.js +1 -1
  301. package/lib/umd/tools.js.gz +0 -0
  302. package/lib/umd/ui-react-dom-debug.js +1 -1
  303. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  304. package/lib/umd/ui-react.js +1 -1
  305. package/lib/umd/ui-react.js.gz +0 -0
  306. package/lib/umd-es6/mergeable-store.js +1 -1
  307. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  308. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  309. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  310. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  311. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  312. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  313. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  314. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  315. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  316. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  317. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  318. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  319. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  320. package/lib/umd-es6/persisters/persister-file.js +1 -1
  321. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  322. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  323. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  324. package/lib/umd-es6/persisters/persister-libsql.js +1 -1
  325. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  326. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  327. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  328. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  329. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  330. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  331. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  332. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  333. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  334. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  335. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  336. package/lib/umd-es6/persisters/persister-sync.js +1 -0
  337. package/lib/umd-es6/persisters/persister-sync.js.gz +0 -0
  338. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  339. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  340. package/lib/umd-es6/persisters.js +1 -1
  341. package/lib/umd-es6/persisters.js.gz +0 -0
  342. package/lib/umd-es6/store.js +1 -1
  343. package/lib/umd-es6/store.js.gz +0 -0
  344. package/lib/umd-es6/tinybase.js +1 -1
  345. package/lib/umd-es6/tinybase.js.gz +0 -0
  346. package/lib/umd-es6/tools.js +1 -1
  347. package/lib/umd-es6/tools.js.gz +0 -0
  348. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  349. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  350. package/lib/umd-es6/ui-react.js +1 -1
  351. package/lib/umd-es6/ui-react.js.gz +0 -0
  352. package/package.json +37 -26
  353. package/readme.md +2 -2
@@ -0,0 +1,594 @@
1
+ const getTypeOf = (thing) => typeof thing;
2
+ const EMPTY_STRING = '';
3
+ const STRING = getTypeOf(EMPTY_STRING);
4
+ const UTF8 = 'utf8';
5
+ const strCharCodeAt = (str, position) => str.charCodeAt(position);
6
+
7
+ const promise = Promise;
8
+ const mathMax = Math.max;
9
+ const isInstanceOf = (thing, cls) => thing instanceof cls;
10
+ const isUndefined = (thing) => thing == void 0;
11
+ const ifNotUndefined = (value, then, otherwise) =>
12
+ isUndefined(value) ? otherwise?.() : then(value);
13
+ const isString = (thing) => getTypeOf(thing) == STRING;
14
+ const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
15
+ const size = (arrayOrString) => arrayOrString.length;
16
+ const promiseNew = (resolver) => new promise(resolver);
17
+
18
+ const arrayForEach = (array, cb) => array.forEach(cb);
19
+ const arrayPush = (array, ...values) => array.push(...values);
20
+ const arrayShift = (array) => array.shift();
21
+
22
+ const object = Object;
23
+ const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
24
+ const isObject = (obj) =>
25
+ !isUndefined(obj) &&
26
+ ifNotUndefined(
27
+ getPrototypeOf(obj),
28
+ (objPrototype) =>
29
+ objPrototype == object.prototype ||
30
+ isUndefined(getPrototypeOf(objPrototype)),
31
+ /* istanbul ignore next */
32
+ () => true,
33
+ );
34
+ const objIds = object.keys;
35
+ const objFreeze = object.freeze;
36
+ const objNew = (entries = []) => object.fromEntries(entries);
37
+ const objDel = (obj, id) => {
38
+ delete obj[id];
39
+ return obj;
40
+ };
41
+ const objSize = (obj) => size(objIds(obj));
42
+ const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
43
+
44
+ const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
45
+ const collClear = (coll) => coll.clear();
46
+ const collForEach = (coll, cb) => coll?.forEach(cb);
47
+ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
48
+
49
+ const mapNew = (entries) => new Map(entries);
50
+ const mapGet = (map, key) => map?.get(key);
51
+ const mapForEach = (map, cb) =>
52
+ collForEach(map, (value, key) => cb(key, value));
53
+ const mapSet = (map, key, value) =>
54
+ isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
55
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
56
+ if (!collHas(map, key)) {
57
+ mapSet(map, key, getDefaultValue());
58
+ } else {
59
+ hadExistingValue?.(mapGet(map, key));
60
+ }
61
+ return mapGet(map, key);
62
+ };
63
+
64
+ const scheduleRunning = mapNew();
65
+ const scheduleActions = mapNew();
66
+ const getStoreFunctions = (supportsMergeableStore, store) =>
67
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
68
+ ? [
69
+ 0,
70
+ store.getContent,
71
+ store.getTransactionChanges,
72
+ ([changedTables, changedValues]) =>
73
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
74
+ ]
75
+ : [
76
+ 1,
77
+ store.getMergeableContent,
78
+ store.getTransactionMergeableChanges,
79
+ ([, [[, changedTables], [, changedValues]]]) =>
80
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
81
+ ];
82
+ const createCustomPersister = (
83
+ store,
84
+ getPersisted,
85
+ setPersisted,
86
+ addPersisterListener,
87
+ delPersisterListener,
88
+ onIgnoredError,
89
+ supportsMergeableStore,
90
+ extra = {},
91
+ scheduleId = [],
92
+ ) => {
93
+ let loadSave = 0;
94
+ let loads = 0;
95
+ let saves = 0;
96
+ let action;
97
+ let autoLoadHandle;
98
+ let autoSaveListenerId;
99
+ mapEnsure(scheduleRunning, scheduleId, () => 0);
100
+ mapEnsure(scheduleActions, scheduleId, () => []);
101
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
102
+ getStoreFunctions(supportsMergeableStore, store);
103
+ const run = async () => {
104
+ /* istanbul ignore else */
105
+ if (!mapGet(scheduleRunning, scheduleId)) {
106
+ mapSet(scheduleRunning, scheduleId, 1);
107
+ while (
108
+ !isUndefined((action = arrayShift(mapGet(scheduleActions, scheduleId))))
109
+ ) {
110
+ try {
111
+ await action();
112
+ } catch (error) {
113
+ /* istanbul ignore next */
114
+ onIgnoredError?.(error);
115
+ }
116
+ }
117
+ mapSet(scheduleRunning, scheduleId, 0);
118
+ }
119
+ };
120
+ const loadLock = async (actions) => {
121
+ /* istanbul ignore else */
122
+ if (loadSave != 2) {
123
+ loadSave = 1;
124
+ {
125
+ loads++;
126
+ }
127
+ await persister.schedule(async () => {
128
+ await actions();
129
+ loadSave = 0;
130
+ });
131
+ }
132
+ return persister;
133
+ };
134
+ const setContentOrChanges = (contentOrChanges) => {
135
+ (isMergeableStore && isString(contentOrChanges?.[0])
136
+ ? contentOrChanges?.[1][2] === 1
137
+ ? store.applyMergeableChanges
138
+ : store.setMergeableContent
139
+ : contentOrChanges?.[2] === 1
140
+ ? store.applyChanges
141
+ : store.setContent)(contentOrChanges);
142
+ };
143
+ const persister = {
144
+ load: async (initialTables, initialValues) =>
145
+ await loadLock(async () => {
146
+ try {
147
+ setContentOrChanges(await getPersisted());
148
+ } catch (error) {
149
+ onIgnoredError?.(error);
150
+ store.setContent([initialTables, initialValues]);
151
+ }
152
+ }),
153
+ startAutoLoad: async (initialTables = {}, initialValues = {}) => {
154
+ await persister.stopAutoLoad().load(initialTables, initialValues);
155
+ autoLoadHandle = addPersisterListener(
156
+ async (getContent2, getChanges2) => {
157
+ const changes = getChanges2?.();
158
+ await loadLock(async () => {
159
+ try {
160
+ setContentOrChanges(
161
+ changes ?? getContent2?.() ?? (await getPersisted()),
162
+ );
163
+ } catch (error) {
164
+ onIgnoredError?.(error);
165
+ }
166
+ });
167
+ },
168
+ );
169
+ return persister;
170
+ },
171
+ stopAutoLoad: () => {
172
+ if (autoLoadHandle) {
173
+ delPersisterListener(autoLoadHandle);
174
+ autoLoadHandle = void 0;
175
+ }
176
+ return persister;
177
+ },
178
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
179
+ save: async (getChanges2) => {
180
+ /* istanbul ignore else */
181
+ if (loadSave != 1) {
182
+ loadSave = 2;
183
+ {
184
+ saves++;
185
+ }
186
+ await persister.schedule(async () => {
187
+ try {
188
+ await setPersisted(getContent, getChanges2);
189
+ } catch (error) {
190
+ /* istanbul ignore next */
191
+ onIgnoredError?.(error);
192
+ }
193
+ loadSave = 0;
194
+ });
195
+ }
196
+ return persister;
197
+ },
198
+ startAutoSave: async () => {
199
+ await persister.stopAutoSave().save();
200
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
201
+ const changes = getChanges();
202
+ if (hasChanges(changes)) {
203
+ persister.save(() => changes);
204
+ }
205
+ });
206
+ return persister;
207
+ },
208
+ stopAutoSave: () => {
209
+ ifNotUndefined(autoSaveListenerId, store.delListener);
210
+ autoSaveListenerId = void 0;
211
+ return persister;
212
+ },
213
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
214
+ schedule: async (...actions) => {
215
+ arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
216
+ await run();
217
+ return persister;
218
+ },
219
+ getStore: () => store,
220
+ destroy: () => persister.stopAutoLoad().stopAutoSave(),
221
+ getStats: () => ({loads, saves}),
222
+ ...extra,
223
+ };
224
+ return objFreeze(persister);
225
+ };
226
+
227
+ const textEncoder = new globalThis.TextEncoder();
228
+ const getHash = (value) => {
229
+ let hash = 2166136261;
230
+ arrayForEach(textEncoder.encode(value), (char) => {
231
+ hash ^= char;
232
+ hash +=
233
+ (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
234
+ });
235
+ return hash >>> 0;
236
+ };
237
+
238
+ const MASK6 = 63;
239
+ const SHIFT36 = 2 ** 36;
240
+ const SHIFT30 = 2 ** 30;
241
+ const SHIFT24 = 2 ** 24;
242
+ const SHIFT18 = 2 ** 18;
243
+ const SHIFT12 = 2 ** 12;
244
+ const SHIFT6 = 2 ** 6;
245
+ const toB64 = (num) => String.fromCharCode(48 + (num & MASK6));
246
+ const fromB64 = (str, pos) => strCharCodeAt(str, pos) - 48;
247
+ const encodeHlc = (logicalTime42, counter24, clientHash30) =>
248
+ toB64(logicalTime42 / SHIFT36) +
249
+ toB64(logicalTime42 / SHIFT30) +
250
+ toB64(logicalTime42 / SHIFT24) +
251
+ toB64(logicalTime42 / SHIFT18) +
252
+ toB64(logicalTime42 / SHIFT12) +
253
+ toB64(logicalTime42 / SHIFT6) +
254
+ toB64(logicalTime42) +
255
+ toB64(counter24 / SHIFT18) +
256
+ toB64(counter24 / SHIFT12) +
257
+ toB64(counter24 / SHIFT6) +
258
+ toB64(counter24) +
259
+ toB64(clientHash30 / SHIFT24) +
260
+ toB64(clientHash30 / SHIFT18) +
261
+ toB64(clientHash30 / SHIFT12) +
262
+ toB64(clientHash30 / SHIFT6) +
263
+ toB64(clientHash30);
264
+ const decodeHlc = (hlc16) => [
265
+ fromB64(hlc16, 0) * SHIFT36 +
266
+ fromB64(hlc16, 1) * SHIFT30 +
267
+ fromB64(hlc16, 2) * SHIFT24 +
268
+ fromB64(hlc16, 3) * SHIFT18 +
269
+ fromB64(hlc16, 4) * SHIFT12 +
270
+ fromB64(hlc16, 5) * SHIFT6 +
271
+ fromB64(hlc16, 6),
272
+ fromB64(hlc16, 7) * SHIFT18 +
273
+ fromB64(hlc16, 8) * SHIFT12 +
274
+ fromB64(hlc16, 9) * SHIFT6 +
275
+ fromB64(hlc16, 10),
276
+ fromB64(hlc16, 11) * SHIFT24 +
277
+ fromB64(hlc16, 12) * SHIFT18 +
278
+ fromB64(hlc16, 13) * SHIFT12 +
279
+ fromB64(hlc16, 14) * SHIFT6 +
280
+ fromB64(hlc16, 15),
281
+ ];
282
+ const getHlcFunctions = (uniqueId) => {
283
+ let logicalTime = 0;
284
+ let lastCounter = -1;
285
+ const uniqueIdHash = getHash(uniqueId);
286
+ const getHlc = () => {
287
+ seenHlc();
288
+ return encodeHlc(logicalTime, ++lastCounter, uniqueIdHash);
289
+ };
290
+ const seenHlc = (hlc) => {
291
+ const previousLogicalTime = logicalTime;
292
+ const [remoteLogicalTime, remoteCounter] =
293
+ isUndefined(hlc) || hlc == '' ? [0, 0] : decodeHlc(hlc);
294
+ logicalTime = mathMax(
295
+ previousLogicalTime,
296
+ remoteLogicalTime,
297
+ globalThis.HLC_TIME ?? Date.now(),
298
+ );
299
+ lastCounter =
300
+ logicalTime == previousLogicalTime
301
+ ? logicalTime == remoteLogicalTime
302
+ ? mathMax(lastCounter, remoteCounter)
303
+ : lastCounter
304
+ : logicalTime == remoteLogicalTime
305
+ ? remoteCounter
306
+ : -1;
307
+ };
308
+ return [getHlc, seenHlc];
309
+ };
310
+
311
+ const clients = mapNew();
312
+ const sends = objNew();
313
+ const receives = objNew();
314
+ const createLocalClient = () => {
315
+ const clientId = '' + Math.random();
316
+ const onReceive = (receive) => {
317
+ mapSet(clients, clientId, (...args) => {
318
+ receives[clientId] = (receives[clientId] ?? 0) + 1;
319
+ receive(...args);
320
+ });
321
+ };
322
+ const send = (toClientId, requestId, messageType, messageBody) => {
323
+ {
324
+ sends[clientId] = (sends[clientId] ?? 0) + 1;
325
+ }
326
+ isUndefined(toClientId)
327
+ ? mapForEach(clients, (otherClientId, receive) =>
328
+ otherClientId != clientId
329
+ ? receive(clientId, requestId, messageType, messageBody)
330
+ : 0,
331
+ )
332
+ : mapGet(clients, toClientId)?.(
333
+ clientId,
334
+ requestId,
335
+ messageType,
336
+ messageBody,
337
+ );
338
+ };
339
+ const destroy = () => {
340
+ collDel(clients, clientId);
341
+ {
342
+ objDel(sends, clientId);
343
+ objDel(receives, clientId);
344
+ }
345
+ };
346
+ const getStats = () => ({
347
+ sends: sends[clientId] ?? 0,
348
+ receives: receives[clientId] ?? 0,
349
+ });
350
+ return {send, onReceive, destroy, getStats};
351
+ };
352
+
353
+ const jsonString = (obj) =>
354
+ JSON.stringify(obj, (_key, value) =>
355
+ isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
356
+ );
357
+ const jsonParse = JSON.parse;
358
+
359
+ const MESSAGE_SEPARATOR = '\n';
360
+
361
+ const createWsClient = async (webSocket) => {
362
+ let sends = 0;
363
+ let receives = 0;
364
+ let currentReceive;
365
+ webSocket.on('message', (data) => {
366
+ if (!isUndefined(currentReceive)) {
367
+ const payload = data.toString(UTF8);
368
+ const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
369
+ if (splitAt !== -1) {
370
+ {
371
+ receives++;
372
+ }
373
+ currentReceive(
374
+ slice(payload, 0, splitAt),
375
+ ...jsonParse(slice(payload, splitAt + 1)),
376
+ );
377
+ }
378
+ }
379
+ });
380
+ const onReceive = (receive) => {
381
+ currentReceive = receive;
382
+ };
383
+ const send = (toClientId, ...args) => {
384
+ {
385
+ sends++;
386
+ }
387
+ webSocket.send(
388
+ (toClientId ?? EMPTY_STRING) + MESSAGE_SEPARATOR + jsonString(args),
389
+ );
390
+ };
391
+ const destroy = () => {
392
+ webSocket.close();
393
+ };
394
+ const getStats = () => ({sends, receives});
395
+ const client = {send, onReceive, destroy, getStats};
396
+ return promiseNew((resolve, reject) => {
397
+ if (webSocket.readyState != webSocket.OPEN) {
398
+ webSocket.on('error', reject);
399
+ webSocket.on('open', () => resolve(client));
400
+ } else {
401
+ resolve(client);
402
+ }
403
+ });
404
+ };
405
+
406
+ const createWsSimpleServer = (webSocketServer) => {
407
+ const clients = mapNew();
408
+ webSocketServer.on('connection', (webSocket, request) => {
409
+ const clientId = request.headers['sec-websocket-key'];
410
+ mapSet(clients, clientId, webSocket);
411
+ webSocket.on('message', (data) => {
412
+ const payload = data.toString(UTF8);
413
+ const splitAt = payload.indexOf(MESSAGE_SEPARATOR);
414
+ if (splitAt !== -1) {
415
+ const toClientId = slice(payload, 0, splitAt);
416
+ const message = slice(payload, splitAt + 1);
417
+ toClientId === EMPTY_STRING
418
+ ? mapForEach(clients, (otherClientId, otherWebSocket) =>
419
+ otherClientId != clientId
420
+ ? otherWebSocket.send(clientId + MESSAGE_SEPARATOR + message)
421
+ : 0,
422
+ )
423
+ : mapGet(clients, toClientId)?.send(
424
+ clientId + MESSAGE_SEPARATOR + message,
425
+ );
426
+ }
427
+ });
428
+ webSocket.on('close', () => collDel(clients, clientId));
429
+ });
430
+ const getWebSocketServer = () => webSocketServer;
431
+ const destroy = () => {
432
+ webSocketServer.close();
433
+ collClear(clients);
434
+ };
435
+ return {
436
+ getWebSocketServer,
437
+ destroy,
438
+ };
439
+ };
440
+
441
+ const RESPONSE = 0;
442
+ const CONTENT_HASHES = 1;
443
+ const GET_CONTENT_HASHES = 2;
444
+ const GET_TABLE_IDS_DIFF = 3;
445
+ const GET_ROW_IDS_DIFF = 4;
446
+ const GET_TABLES_CHANGES = 5;
447
+ const GET_VALUES_CHANGES = 6;
448
+ const createSyncPersister = (
449
+ store,
450
+ client,
451
+ requestTimeoutSeconds = 1,
452
+ onIgnoredError,
453
+ ) => {
454
+ let persisterListener;
455
+ const {send, onReceive, destroy} = client;
456
+ const [getHlc] = getHlcFunctions(store.getId());
457
+ const pendingRequests = mapNew();
458
+ onReceive((fromClientId, requestId, messageType, messageBody) => {
459
+ if (messageType == RESPONSE) {
460
+ ifNotUndefined(
461
+ mapGet(pendingRequests, requestId),
462
+ ([toClientId, handleResponse]) =>
463
+ isUndefined(toClientId) || toClientId == fromClientId
464
+ ? handleResponse(messageBody, fromClientId)
465
+ : 0,
466
+ );
467
+ } else if (messageType == CONTENT_HASHES && persister.isAutoLoading()) {
468
+ getChangesFromOtherStore(fromClientId, messageBody).then((changes) =>
469
+ persisterListener?.(void 0, () => changes),
470
+ );
471
+ } else {
472
+ const response =
473
+ messageType == GET_CONTENT_HASHES && persister.isAutoSaving()
474
+ ? store.getMergeableContentHashes()
475
+ : messageType == GET_TABLE_IDS_DIFF
476
+ ? store.getMergeableTableIdsDiff(messageBody)
477
+ : messageType == GET_ROW_IDS_DIFF
478
+ ? store.getMergeableRowIdsDiff(messageBody)
479
+ : messageType == GET_TABLES_CHANGES
480
+ ? store.getMergeableTablesChanges(messageBody)
481
+ : messageType == GET_VALUES_CHANGES
482
+ ? store.getMergeableValuesChanges(messageBody)
483
+ : 0;
484
+ response === 0 ? 0 : send(fromClientId, requestId, RESPONSE, response);
485
+ }
486
+ });
487
+ const request = async (toClientId, messageType, messageBody = EMPTY_STRING) =>
488
+ promiseNew((resolve, reject) => {
489
+ const requestId = getHlc();
490
+ const timeout = setTimeout(() => {
491
+ collDel(pendingRequests, requestId);
492
+ reject(
493
+ `No response from ${toClientId ?? 'anyone'} to '${messageType}'`,
494
+ );
495
+ }, requestTimeoutSeconds * 1e3);
496
+ mapSet(pendingRequests, requestId, [
497
+ toClientId,
498
+ (response, fromClientId) => {
499
+ clearTimeout(timeout);
500
+ collDel(pendingRequests, requestId);
501
+ resolve([response, fromClientId]);
502
+ },
503
+ ]);
504
+ send(toClientId, requestId, messageType, messageBody);
505
+ });
506
+ const getChangesFromOtherStore = async (
507
+ otherClientId = null,
508
+ otherContentHashes,
509
+ ) => {
510
+ if (isUndefined(otherContentHashes)) {
511
+ [otherContentHashes, otherClientId] = await request(
512
+ otherClientId,
513
+ GET_CONTENT_HASHES,
514
+ );
515
+ }
516
+ const [otherContentTime, [otherTablesHash, otherValuesHash]] =
517
+ otherContentHashes;
518
+ const [, [tablesHash, valuesHash]] = store.getMergeableContentHashes();
519
+ const changes = [EMPTY_STRING, [[EMPTY_STRING, {}], [EMPTY_STRING, {}], 1]];
520
+ if (tablesHash != otherTablesHash) {
521
+ changes[0] = otherContentTime;
522
+ changes[1][0] = (
523
+ await request(
524
+ otherClientId,
525
+ GET_TABLES_CHANGES,
526
+ store.getMergeableCellHashes(
527
+ (
528
+ await request(
529
+ otherClientId,
530
+ GET_ROW_IDS_DIFF,
531
+ store.getMergeableRowHashes(
532
+ (
533
+ await request(
534
+ otherClientId,
535
+ GET_TABLE_IDS_DIFF,
536
+ store.getMergeableTableHashes(),
537
+ )
538
+ )[0],
539
+ ),
540
+ )
541
+ )[0],
542
+ ),
543
+ )
544
+ )[0];
545
+ }
546
+ if (valuesHash != otherValuesHash) {
547
+ changes[0] = otherContentTime;
548
+ changes[1][1] = (
549
+ await request(
550
+ otherClientId,
551
+ GET_VALUES_CHANGES,
552
+ store.getMergeableValuesHashes(),
553
+ )
554
+ )[0];
555
+ }
556
+ return changes;
557
+ };
558
+ const getPersisted = async () => {
559
+ const changes = await getChangesFromOtherStore();
560
+ return changes[0] != EMPTY_STRING ? changes : void 0;
561
+ };
562
+ const setPersisted = async () => {
563
+ send(null, null, CONTENT_HASHES, store.getMergeableContentHashes());
564
+ };
565
+ const addPersisterListener = (listener) => (persisterListener = listener);
566
+ const delPersisterListener = () => (persisterListener = void 0);
567
+ const persister = createCustomPersister(
568
+ store,
569
+ getPersisted,
570
+ setPersisted,
571
+ addPersisterListener,
572
+ delPersisterListener,
573
+ onIgnoredError,
574
+ true,
575
+ {
576
+ getClient: () => client,
577
+ startSync: async () =>
578
+ await (await persister.startAutoLoad()).startAutoSave(),
579
+ stopSync: () => persister.stopAutoLoad().stopAutoSave(),
580
+ destroy: () => {
581
+ destroy();
582
+ return persister.stopSync();
583
+ },
584
+ },
585
+ );
586
+ return persister;
587
+ };
588
+
589
+ export {
590
+ createLocalClient,
591
+ createSyncPersister,
592
+ createWsClient,
593
+ createWsSimpleServer,
594
+ };