tinybase 5.0.0-beta.1 → 5.0.0-beta.10

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 (491) hide show
  1. package/lib/checkpoints.js +1 -1
  2. package/lib/checkpoints.js.gz +0 -0
  3. package/lib/cjs/checkpoints.cjs +1 -1
  4. package/lib/cjs/checkpoints.cjs.gz +0 -0
  5. package/lib/cjs/indexes.cjs +1 -1
  6. package/lib/cjs/indexes.cjs.gz +0 -0
  7. package/lib/cjs/mergeable-store.cjs +1 -0
  8. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  9. package/lib/cjs/metrics.cjs +1 -1
  10. package/lib/cjs/metrics.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  12. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  14. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  16. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  18. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  20. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  22. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-file.cjs +1 -1
  24. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  26. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-libsql.cjs +1 -0
  28. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  30. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  32. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  36. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  39. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  40. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  41. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  42. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  43. package/lib/cjs/persisters.cjs +1 -1
  44. package/lib/cjs/persisters.cjs.gz +0 -0
  45. package/lib/cjs/queries.cjs +1 -1
  46. package/lib/cjs/queries.cjs.gz +0 -0
  47. package/lib/cjs/relationships.cjs +1 -1
  48. package/lib/cjs/relationships.cjs.gz +0 -0
  49. package/lib/cjs/store.cjs +1 -1
  50. package/lib/cjs/store.cjs.gz +0 -0
  51. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  52. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  53. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  54. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  55. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  56. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  57. package/lib/cjs/synchronizers.cjs +1 -0
  58. package/lib/cjs/synchronizers.cjs.gz +0 -0
  59. package/lib/cjs/tinybase.cjs +1 -1
  60. package/lib/cjs/tinybase.cjs.gz +0 -0
  61. package/lib/cjs/tools.cjs +1 -1
  62. package/lib/cjs/tools.cjs.gz +0 -0
  63. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  64. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  65. package/lib/cjs/ui-react-dom.cjs +1 -1
  66. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  67. package/lib/cjs/ui-react.cjs +1 -1
  68. package/lib/cjs/ui-react.cjs.gz +0 -0
  69. package/lib/cjs-es6/checkpoints.cjs +1 -1
  70. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  71. package/lib/cjs-es6/indexes.cjs +1 -1
  72. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  73. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  74. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  75. package/lib/cjs-es6/metrics.cjs +1 -1
  76. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  88. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  90. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  92. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  94. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  96. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  98. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  100. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  101. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  102. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  103. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  104. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  105. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  106. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  107. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  108. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  109. package/lib/cjs-es6/persisters.cjs +1 -1
  110. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  111. package/lib/cjs-es6/queries.cjs +1 -1
  112. package/lib/cjs-es6/queries.cjs.gz +0 -0
  113. package/lib/cjs-es6/relationships.cjs +1 -1
  114. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  115. package/lib/cjs-es6/store.cjs +1 -1
  116. package/lib/cjs-es6/store.cjs.gz +0 -0
  117. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  118. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  119. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  120. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  121. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  122. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  123. package/lib/cjs-es6/synchronizers.cjs +1 -0
  124. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  125. package/lib/cjs-es6/tinybase.cjs +1 -1
  126. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  127. package/lib/cjs-es6/tools.cjs +1 -1
  128. package/lib/cjs-es6/tools.cjs.gz +0 -0
  129. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  130. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  131. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  132. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  133. package/lib/cjs-es6/ui-react.cjs +1 -1
  134. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  135. package/lib/debug/checkpoints.js +3 -1
  136. package/lib/debug/indexes.js +3 -1
  137. package/lib/debug/mergeable-store.js +2230 -0
  138. package/lib/debug/metrics.js +3 -1
  139. package/lib/debug/persisters/persister-automerge.js +110 -86
  140. package/lib/debug/persisters/persister-browser.js +94 -57
  141. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +168 -106
  142. package/lib/debug/persisters/persister-electric-sql.js +168 -106
  143. package/lib/debug/persisters/persister-expo-sqlite-next.js +168 -106
  144. package/lib/debug/persisters/persister-expo-sqlite.js +168 -106
  145. package/lib/debug/persisters/persister-file.js +93 -57
  146. package/lib/debug/persisters/persister-indexed-db.js +90 -56
  147. package/lib/debug/persisters/persister-libsql.js +913 -0
  148. package/lib/debug/persisters/persister-partykit-client.js +89 -59
  149. package/lib/debug/persisters/persister-partykit-server.js +17 -25
  150. package/lib/debug/persisters/persister-powersync.js +928 -0
  151. package/lib/debug/persisters/persister-remote.js +85 -53
  152. package/lib/debug/persisters/persister-sqlite-wasm.js +168 -106
  153. package/lib/debug/persisters/persister-sqlite3.js +168 -106
  154. package/lib/debug/persisters/persister-yjs.js +108 -83
  155. package/lib/debug/persisters.js +81 -50
  156. package/lib/debug/queries.js +9 -6
  157. package/lib/debug/relationships.js +3 -1
  158. package/lib/debug/store.js +147 -126
  159. package/lib/debug/synchronizers/synchronizer-local.js +559 -0
  160. package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
  161. package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
  162. package/lib/debug/synchronizers.js +519 -0
  163. package/lib/debug/tinybase.js +1027 -174
  164. package/lib/debug/tools.js +22 -21
  165. package/lib/debug/ui-react-dom.js +275 -213
  166. package/lib/debug/ui-react.js +55 -6
  167. package/lib/es6/checkpoints.js +1 -1
  168. package/lib/es6/checkpoints.js.gz +0 -0
  169. package/lib/es6/indexes.js +1 -1
  170. package/lib/es6/indexes.js.gz +0 -0
  171. package/lib/es6/mergeable-store.js +1 -0
  172. package/lib/es6/mergeable-store.js.gz +0 -0
  173. package/lib/es6/metrics.js +1 -1
  174. package/lib/es6/metrics.js.gz +0 -0
  175. package/lib/es6/persisters/persister-automerge.js +1 -1
  176. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  177. package/lib/es6/persisters/persister-browser.js +1 -1
  178. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  179. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  180. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  181. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  182. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  183. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  184. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  185. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  186. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  187. package/lib/es6/persisters/persister-file.js +1 -1
  188. package/lib/es6/persisters/persister-file.js.gz +0 -0
  189. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  190. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  191. package/lib/es6/persisters/persister-libsql.js +1 -0
  192. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  193. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  194. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  195. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  196. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  197. package/lib/es6/persisters/persister-powersync.js +1 -0
  198. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  199. package/lib/es6/persisters/persister-remote.js +1 -1
  200. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  201. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  202. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  203. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  204. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  205. package/lib/es6/persisters/persister-yjs.js +1 -1
  206. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  207. package/lib/es6/persisters.js +1 -1
  208. package/lib/es6/persisters.js.gz +0 -0
  209. package/lib/es6/queries.js +1 -1
  210. package/lib/es6/queries.js.gz +0 -0
  211. package/lib/es6/relationships.js +1 -1
  212. package/lib/es6/relationships.js.gz +0 -0
  213. package/lib/es6/store.js +1 -1
  214. package/lib/es6/store.js.gz +0 -0
  215. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  216. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  217. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  218. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  219. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  220. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  221. package/lib/es6/synchronizers.js +1 -0
  222. package/lib/es6/synchronizers.js.gz +0 -0
  223. package/lib/es6/tinybase.js +1 -1
  224. package/lib/es6/tinybase.js.gz +0 -0
  225. package/lib/es6/tools.js +1 -1
  226. package/lib/es6/tools.js.gz +0 -0
  227. package/lib/es6/ui-react-dom-debug.js +1 -1
  228. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  229. package/lib/es6/ui-react-dom.js +1 -1
  230. package/lib/es6/ui-react-dom.js.gz +0 -0
  231. package/lib/es6/ui-react.js +1 -1
  232. package/lib/es6/ui-react.js.gz +0 -0
  233. package/lib/indexes.js +1 -1
  234. package/lib/indexes.js.gz +0 -0
  235. package/lib/mergeable-store.js +1 -0
  236. package/lib/mergeable-store.js.gz +0 -0
  237. package/lib/metrics.js +1 -1
  238. package/lib/metrics.js.gz +0 -0
  239. package/lib/persisters/persister-automerge.js +1 -1
  240. package/lib/persisters/persister-automerge.js.gz +0 -0
  241. package/lib/persisters/persister-browser.js +1 -1
  242. package/lib/persisters/persister-browser.js.gz +0 -0
  243. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  244. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  245. package/lib/persisters/persister-electric-sql.js +1 -1
  246. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  247. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  248. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  249. package/lib/persisters/persister-expo-sqlite.js +1 -1
  250. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  251. package/lib/persisters/persister-file.js +1 -1
  252. package/lib/persisters/persister-file.js.gz +0 -0
  253. package/lib/persisters/persister-indexed-db.js +1 -1
  254. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  255. package/lib/persisters/persister-libsql.js +1 -0
  256. package/lib/persisters/persister-libsql.js.gz +0 -0
  257. package/lib/persisters/persister-partykit-client.js +1 -1
  258. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  259. package/lib/persisters/persister-partykit-server.js +1 -1
  260. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  261. package/lib/persisters/persister-powersync.js +1 -0
  262. package/lib/persisters/persister-powersync.js.gz +0 -0
  263. package/lib/persisters/persister-remote.js +1 -1
  264. package/lib/persisters/persister-remote.js.gz +0 -0
  265. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  266. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  267. package/lib/persisters/persister-sqlite3.js +1 -1
  268. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  269. package/lib/persisters/persister-yjs.js +1 -1
  270. package/lib/persisters/persister-yjs.js.gz +0 -0
  271. package/lib/persisters.js +1 -1
  272. package/lib/persisters.js.gz +0 -0
  273. package/lib/queries.js +1 -1
  274. package/lib/queries.js.gz +0 -0
  275. package/lib/relationships.js +1 -1
  276. package/lib/relationships.js.gz +0 -0
  277. package/lib/store.js +1 -1
  278. package/lib/store.js.gz +0 -0
  279. package/lib/synchronizers/synchronizer-local.js +1 -0
  280. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  281. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  282. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  283. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  284. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  285. package/lib/synchronizers.js +1 -0
  286. package/lib/synchronizers.js.gz +0 -0
  287. package/lib/tinybase.js +1 -1
  288. package/lib/tinybase.js.gz +0 -0
  289. package/lib/tools.js +1 -1
  290. package/lib/tools.js.gz +0 -0
  291. package/lib/types/checkpoints.d.ts +2 -2
  292. package/lib/types/indexes.d.ts +2 -2
  293. package/lib/types/mergeable-store.d.ts +214 -0
  294. package/lib/types/metrics.d.ts +2 -2
  295. package/lib/types/persisters/persister-automerge.d.ts +11 -7
  296. package/lib/types/persisters/persister-browser.d.ts +13 -4
  297. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
  298. package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
  299. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +4 -0
  300. package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
  301. package/lib/types/persisters/persister-file.d.ts +7 -2
  302. package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
  303. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  304. package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
  305. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  306. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  307. package/lib/types/persisters/persister-remote.d.ts +4 -0
  308. package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
  309. package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
  310. package/lib/types/persisters/persister-yjs.d.ts +6 -2
  311. package/lib/types/persisters.d.ts +125 -48
  312. package/lib/types/queries.d.ts +2 -2
  313. package/lib/types/relationships.d.ts +2 -2
  314. package/lib/types/store.d.ts +275 -187
  315. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  316. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
  317. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
  318. package/lib/types/synchronizers.d.ts +132 -0
  319. package/lib/types/tinybase.d.ts +10 -8
  320. package/lib/types/tools.d.ts +4 -4
  321. package/lib/types/ui-react.d.ts +160 -9
  322. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  323. package/lib/types/with-schemas/indexes.d.ts +2 -2
  324. package/lib/types/with-schemas/internal/store.d.ts +4 -0
  325. package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
  326. package/lib/types/with-schemas/metrics.d.ts +2 -2
  327. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
  328. package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
  329. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
  330. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
  331. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +5 -1
  332. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
  333. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
  334. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
  335. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  336. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
  337. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  338. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  339. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
  340. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
  341. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
  342. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
  343. package/lib/types/with-schemas/persisters.d.ts +161 -101
  344. package/lib/types/with-schemas/queries.d.ts +3 -3
  345. package/lib/types/with-schemas/relationships.d.ts +2 -2
  346. package/lib/types/with-schemas/store.d.ts +483 -345
  347. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  348. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
  349. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
  350. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  351. package/lib/types/with-schemas/tinybase.d.ts +9 -8
  352. package/lib/types/with-schemas/tools.d.ts +4 -4
  353. package/lib/types/with-schemas/ui-react.d.ts +177 -9
  354. package/lib/ui-react-dom.js +1 -1
  355. package/lib/ui-react-dom.js.gz +0 -0
  356. package/lib/ui-react.js +1 -1
  357. package/lib/ui-react.js.gz +0 -0
  358. package/lib/umd/checkpoints.js +1 -1
  359. package/lib/umd/checkpoints.js.gz +0 -0
  360. package/lib/umd/indexes.js +1 -1
  361. package/lib/umd/indexes.js.gz +0 -0
  362. package/lib/umd/mergeable-store.js +1 -0
  363. package/lib/umd/mergeable-store.js.gz +0 -0
  364. package/lib/umd/metrics.js +1 -1
  365. package/lib/umd/metrics.js.gz +0 -0
  366. package/lib/umd/persisters/persister-automerge.js +1 -1
  367. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  368. package/lib/umd/persisters/persister-browser.js +1 -1
  369. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  370. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  371. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  372. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  373. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  374. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  375. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  376. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  377. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  378. package/lib/umd/persisters/persister-file.js +1 -1
  379. package/lib/umd/persisters/persister-file.js.gz +0 -0
  380. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  381. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  382. package/lib/umd/persisters/persister-libsql.js +1 -0
  383. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  384. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  385. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  386. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  387. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  388. package/lib/umd/persisters/persister-powersync.js +1 -0
  389. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  390. package/lib/umd/persisters/persister-remote.js +1 -1
  391. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  392. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  393. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  394. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  395. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  396. package/lib/umd/persisters/persister-yjs.js +1 -1
  397. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  398. package/lib/umd/persisters.js +1 -1
  399. package/lib/umd/persisters.js.gz +0 -0
  400. package/lib/umd/queries.js +1 -1
  401. package/lib/umd/queries.js.gz +0 -0
  402. package/lib/umd/relationships.js +1 -1
  403. package/lib/umd/relationships.js.gz +0 -0
  404. package/lib/umd/store.js +1 -1
  405. package/lib/umd/store.js.gz +0 -0
  406. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  407. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  408. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  409. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  410. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  411. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  412. package/lib/umd/synchronizers.js +1 -0
  413. package/lib/umd/synchronizers.js.gz +0 -0
  414. package/lib/umd/tinybase.js +1 -1
  415. package/lib/umd/tinybase.js.gz +0 -0
  416. package/lib/umd/tools.js +1 -1
  417. package/lib/umd/tools.js.gz +0 -0
  418. package/lib/umd/ui-react-dom-debug.js +1 -1
  419. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  420. package/lib/umd/ui-react-dom.js +1 -1
  421. package/lib/umd/ui-react-dom.js.gz +0 -0
  422. package/lib/umd/ui-react.js +1 -1
  423. package/lib/umd/ui-react.js.gz +0 -0
  424. package/lib/umd-es6/checkpoints.js +1 -1
  425. package/lib/umd-es6/checkpoints.js.gz +0 -0
  426. package/lib/umd-es6/indexes.js +1 -1
  427. package/lib/umd-es6/indexes.js.gz +0 -0
  428. package/lib/umd-es6/mergeable-store.js +1 -0
  429. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  430. package/lib/umd-es6/metrics.js +1 -1
  431. package/lib/umd-es6/metrics.js.gz +0 -0
  432. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  433. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  434. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  435. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  436. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  437. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  438. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  439. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  440. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  441. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  442. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  443. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  444. package/lib/umd-es6/persisters/persister-file.js +1 -1
  445. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  446. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  447. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  448. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  449. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  450. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  451. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  452. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  453. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  454. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  455. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  456. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  457. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  458. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  459. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  460. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  461. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  462. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  463. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  464. package/lib/umd-es6/persisters.js +1 -1
  465. package/lib/umd-es6/persisters.js.gz +0 -0
  466. package/lib/umd-es6/queries.js +1 -1
  467. package/lib/umd-es6/queries.js.gz +0 -0
  468. package/lib/umd-es6/relationships.js +1 -1
  469. package/lib/umd-es6/relationships.js.gz +0 -0
  470. package/lib/umd-es6/store.js +1 -1
  471. package/lib/umd-es6/store.js.gz +0 -0
  472. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  473. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  474. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  475. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  476. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  477. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  478. package/lib/umd-es6/synchronizers.js +1 -0
  479. package/lib/umd-es6/synchronizers.js.gz +0 -0
  480. package/lib/umd-es6/tinybase.js +1 -1
  481. package/lib/umd-es6/tinybase.js.gz +0 -0
  482. package/lib/umd-es6/tools.js +1 -1
  483. package/lib/umd-es6/tools.js.gz +0 -0
  484. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  485. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  486. package/lib/umd-es6/ui-react-dom.js +1 -1
  487. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  488. package/lib/umd-es6/ui-react.js +1 -1
  489. package/lib/umd-es6/ui-react.js.gz +0 -0
  490. package/package.json +65 -45
  491. package/readme.md +2 -2
@@ -7,6 +7,7 @@ const V = 'v';
7
7
  const isUndefined = (thing) => thing == void 0;
8
8
  const ifNotUndefined = (value, then, otherwise) =>
9
9
  isUndefined(value) ? otherwise?.() : then(value);
10
+ const isArray = (thing) => Array.isArray(thing);
10
11
  const size = (arrayOrString) => arrayOrString.length;
11
12
 
12
13
  const arrayForEach = (array, cb) => array.forEach(cb);
@@ -18,8 +19,6 @@ const arrayShift = (array) => array.shift();
18
19
  const object = Object;
19
20
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
20
21
  const objEntries = object.entries;
21
- const objIds = object.keys;
22
- const objFreeze = object.freeze;
23
22
  const isObject = (obj) =>
24
23
  !isUndefined(obj) &&
25
24
  ifNotUndefined(
@@ -30,10 +29,11 @@ const isObject = (obj) =>
30
29
  /* istanbul ignore next */
31
30
  () => true,
32
31
  );
32
+ const objIds = object.keys;
33
+ const objFreeze = object.freeze;
33
34
  const objNew = (entries = []) => object.fromEntries(entries);
34
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
35
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
36
- const objMap = (obj, cb) =>
35
+ const objHas = (obj, id) => id in obj;
36
+ const objToArray = (obj, cb) =>
37
37
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
38
38
  const objSize = (obj) => size(objIds(obj));
39
39
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
@@ -54,15 +54,35 @@ const mapForEach = (map, cb) =>
54
54
  collForEach(map, (value, key) => cb(key, value));
55
55
  const mapSet = (map, key, value) =>
56
56
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
57
- const mapEnsure = (map, key, getDefaultValue) => {
57
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
58
58
  if (!collHas(map, key)) {
59
59
  mapSet(map, key, getDefaultValue());
60
+ } else {
61
+ hadExistingValue?.(mapGet(map, key));
60
62
  }
61
63
  return mapGet(map, key);
62
64
  };
63
65
 
64
66
  const scheduleRunning = mapNew();
65
67
  const scheduleActions = mapNew();
68
+ const getStoreFunctions = (supportsMergeableStore, store) =>
69
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
70
+ ? [
71
+ 0,
72
+ store.getContent,
73
+ store.getTransactionChanges,
74
+ ([changedTables, changedValues]) =>
75
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
76
+ store.setContent,
77
+ ]
78
+ : [
79
+ 1,
80
+ store.getMergeableContent,
81
+ store.getTransactionMergeableChanges,
82
+ ([[changedTables], [changedValues]]) =>
83
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
84
+ store.setDefaultContent,
85
+ ];
66
86
  const createCustomPersister = (
67
87
  store,
68
88
  getPersisted,
@@ -70,18 +90,25 @@ const createCustomPersister = (
70
90
  addPersisterListener,
71
91
  delPersisterListener,
72
92
  onIgnoredError,
73
- [getThing, thing] = [],
93
+ supportsMergeableStore,
94
+ extra = {},
74
95
  scheduleId = [],
75
96
  ) => {
76
- let listenerId;
77
97
  let loadSave = 0;
78
98
  let loads = 0;
79
99
  let saves = 0;
80
- let listening = 0;
81
100
  let action;
82
- let listeningHandle;
101
+ let autoLoadHandle;
102
+ let autoSaveListenerId;
83
103
  mapEnsure(scheduleRunning, scheduleId, () => 0);
84
104
  mapEnsure(scheduleActions, scheduleId, () => []);
105
+ const [
106
+ isMergeableStore,
107
+ getContent,
108
+ getChanges,
109
+ hasChanges,
110
+ setDefaultContent,
111
+ ] = getStoreFunctions(supportsMergeableStore, store);
85
112
  const run = async () => {
86
113
  /* istanbul ignore else */
87
114
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -113,48 +140,54 @@ const createCustomPersister = (
113
140
  }
114
141
  return persister;
115
142
  };
143
+ const setContentOrChanges = (contentOrChanges) => {
144
+ (isMergeableStore && isArray(contentOrChanges?.[0])
145
+ ? contentOrChanges?.[2] === 1
146
+ ? store.applyMergeableChanges
147
+ : store.setMergeableContent
148
+ : contentOrChanges?.[2] === 1
149
+ ? store.applyChanges
150
+ : store.setContent)(contentOrChanges);
151
+ };
116
152
  const persister = {
117
- load: async (initialTables, initialValues) =>
153
+ load: async (initialContent) =>
118
154
  await loadLock(async () => {
119
155
  try {
120
- store.setContent(await getPersisted());
121
- } catch {
122
- store.setContent([initialTables, initialValues]);
156
+ setContentOrChanges(await getPersisted());
157
+ } catch (error) {
158
+ onIgnoredError?.(error);
159
+ if (initialContent) {
160
+ setDefaultContent(initialContent);
161
+ }
123
162
  }
124
163
  }),
125
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
126
- persister.stopAutoLoad();
127
- await persister.load(initialTables, initialValues);
128
- listening = 1;
129
- listeningHandle = addPersisterListener(
130
- async (getContent, getTransactionChanges) => {
131
- if (getTransactionChanges) {
132
- const transactionChanges = getTransactionChanges();
133
- await loadLock(async () =>
134
- store.setTransactionChanges(transactionChanges),
135
- );
136
- } else {
137
- await loadLock(async () => {
138
- try {
139
- store.setContent(getContent?.() ?? (await getPersisted()));
140
- } catch (error) {
141
- onIgnoredError?.(error);
142
- }
143
- });
144
- }
164
+ startAutoLoad: async (initialContent) => {
165
+ await persister.stopAutoLoad().load(initialContent);
166
+ autoLoadHandle = addPersisterListener(
167
+ async (getContent2, getChanges2) => {
168
+ const changes = getChanges2?.();
169
+ await loadLock(async () => {
170
+ try {
171
+ setContentOrChanges(
172
+ changes ?? getContent2?.() ?? (await getPersisted()),
173
+ );
174
+ } catch (error) {
175
+ onIgnoredError?.(error);
176
+ }
177
+ });
145
178
  },
146
179
  );
147
180
  return persister;
148
181
  },
149
182
  stopAutoLoad: () => {
150
- if (listening) {
151
- delPersisterListener(listeningHandle);
152
- listeningHandle = void 0;
153
- listening = 0;
183
+ if (autoLoadHandle) {
184
+ delPersisterListener(autoLoadHandle);
185
+ autoLoadHandle = void 0;
154
186
  }
155
187
  return persister;
156
188
  },
157
- save: async (getTransactionChanges) => {
189
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
190
+ save: async (getChanges2) => {
158
191
  /* istanbul ignore else */
159
192
  if (loadSave != 1) {
160
193
  loadSave = 2;
@@ -163,7 +196,7 @@ const createCustomPersister = (
163
196
  }
164
197
  await persister.schedule(async () => {
165
198
  try {
166
- await setPersisted(store.getContent, getTransactionChanges);
199
+ await setPersisted(getContent, getChanges2);
167
200
  } catch (error) {
168
201
  /* istanbul ignore next */
169
202
  onIgnoredError?.(error);
@@ -175,21 +208,20 @@ const createCustomPersister = (
175
208
  },
176
209
  startAutoSave: async () => {
177
210
  await persister.stopAutoSave().save();
178
- listenerId = store.addDidFinishTransactionListener(
179
- (_store, getTransactionChanges) => {
180
- const [tableChanges, valueChanges] = getTransactionChanges();
181
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
182
- persister.save(() => [tableChanges, valueChanges]);
183
- }
184
- },
185
- );
211
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
212
+ const changes = getChanges();
213
+ if (hasChanges(changes)) {
214
+ persister.save(() => changes);
215
+ }
216
+ });
186
217
  return persister;
187
218
  },
188
219
  stopAutoSave: () => {
189
- ifNotUndefined(listenerId, store.delListener);
190
- listenerId = void 0;
220
+ ifNotUndefined(autoSaveListenerId, store.delListener);
221
+ autoSaveListenerId = void 0;
191
222
  return persister;
192
223
  },
224
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
193
225
  schedule: async (...actions) => {
194
226
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
195
227
  await run();
@@ -198,18 +230,16 @@ const createCustomPersister = (
198
230
  getStore: () => store,
199
231
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
200
232
  getStats: () => ({loads, saves}),
233
+ ...extra,
201
234
  };
202
- if (getThing) {
203
- persister[getThing] = () => thing;
204
- }
205
235
  return objFreeze(persister);
206
236
  };
207
237
 
208
238
  const DELETE = 'delete';
209
239
  const getYContent = (yContent) => [yContent.get(T), yContent.get(V)];
210
- const getTransactionChangesFromYDoc = (yContent, events) => {
240
+ const getChangesFromYDoc = (yContent, events) => {
211
241
  if (size(events) == 1 && arrayIsEmpty(events[0].path)) {
212
- return [yContent.get(T).toJSON(), yContent.get(V).toJSON()];
242
+ return [yContent.get(T).toJSON(), yContent.get(V).toJSON(), 1];
213
243
  }
214
244
  const [yTables, yValues] = getYContent(yContent);
215
245
  const tables = {};
@@ -255,60 +285,56 @@ const getTransactionChangesFromYDoc = (yContent, events) => {
255
285
  (values[valueId] = action == DELETE ? null : yValues.get(valueId)),
256
286
  ),
257
287
  );
258
- return [tables, values];
288
+ return [tables, values, 1];
259
289
  };
260
- const setTransactionChangesToYDoc = (
261
- yContent,
262
- getContent,
263
- getTransactionChanges,
264
- ) => {
290
+ const applyChangesToYDoc = (yContent, getContent, getChanges) => {
265
291
  if (!yContent.size) {
266
292
  yContent.set(T, new Map$1());
267
293
  yContent.set(V, new Map$1());
268
294
  }
269
295
  const [yTables, yValues] = getYContent(yContent);
270
- const transactionChangesDidFail = () => {
271
- transactionChangesFailed = 1;
296
+ const changesDidFail = () => {
297
+ changesFailed = 1;
272
298
  };
273
- let transactionChangesFailed = 1;
274
- ifNotUndefined(getTransactionChanges?.(), ([cellChanges, valueChanges]) => {
275
- transactionChangesFailed = 0;
276
- objMap(cellChanges, (table, tableId) =>
277
- transactionChangesFailed
299
+ let changesFailed = 1;
300
+ ifNotUndefined(getChanges?.(), ([cellChanges, valueChanges]) => {
301
+ changesFailed = 0;
302
+ objToArray(cellChanges, (table, tableId) =>
303
+ changesFailed
278
304
  ? 0
279
305
  : isUndefined(table)
280
306
  ? yTables.delete(tableId)
281
307
  : ifNotUndefined(
282
308
  yTables.get(tableId),
283
309
  (yTable) =>
284
- objMap(table, (row, rowId) =>
285
- transactionChangesFailed
310
+ objToArray(table, (row, rowId) =>
311
+ changesFailed
286
312
  ? 0
287
313
  : isUndefined(row)
288
314
  ? yTable.delete(rowId)
289
315
  : ifNotUndefined(
290
316
  yTable.get(rowId),
291
317
  (yRow) =>
292
- objMap(row, (cell, cellId) =>
318
+ objToArray(row, (cell, cellId) =>
293
319
  isUndefined(cell)
294
320
  ? yRow.delete(cellId)
295
321
  : yRow.set(cellId, cell),
296
322
  ),
297
- transactionChangesDidFail,
323
+ changesDidFail,
298
324
  ),
299
325
  ),
300
- transactionChangesDidFail,
326
+ changesDidFail,
301
327
  ),
302
328
  );
303
- objMap(valueChanges, (value, valueId) =>
304
- transactionChangesFailed
329
+ objToArray(valueChanges, (value, valueId) =>
330
+ changesFailed
305
331
  ? 0
306
332
  : isUndefined(value)
307
333
  ? yValues.delete(valueId)
308
334
  : yValues.set(valueId, value),
309
335
  );
310
336
  });
311
- if (transactionChangesFailed) {
337
+ if (changesFailed) {
312
338
  const [tables, values] = getContent();
313
339
  yMapMatch(yTables, void 0, tables, (_, tableId, table) =>
314
340
  yMapMatch(yTables, tableId, table, (yTable, rowId, row) =>
@@ -332,7 +358,7 @@ const yMapMatch = (yMapOrParent, idInParent, obj, set) => {
332
358
  ? yMapOrParent
333
359
  : yMapOrParent.get(idInParent) ?? yMapOrParent.set(idInParent, new Map$1());
334
360
  let changed;
335
- objMap(obj, (value, id) => {
361
+ objToArray(obj, (value, id) => {
336
362
  if (set(yMap, id, value)) {
337
363
  changed = 1;
338
364
  }
@@ -359,13 +385,11 @@ const createYjsPersister = (
359
385
  yContent.size
360
386
  ? [yContent.get(T).toJSON(), yContent.get(V).toJSON()]
361
387
  : void 0;
362
- const setPersisted = async (getContent, getTransactionChanges) =>
363
- yDoc.transact(() =>
364
- setTransactionChangesToYDoc(yContent, getContent, getTransactionChanges),
365
- );
388
+ const setPersisted = async (getContent, getChanges) =>
389
+ yDoc.transact(() => applyChangesToYDoc(yContent, getContent, getChanges));
366
390
  const addPersisterListener = (listener) => {
367
391
  const observer = (events) =>
368
- listener(void 0, () => getTransactionChangesFromYDoc(yContent, events));
392
+ listener(void 0, () => getChangesFromYDoc(yContent, events));
369
393
  yContent.observeDeep(observer);
370
394
  return observer;
371
395
  };
@@ -379,7 +403,8 @@ const createYjsPersister = (
379
403
  addPersisterListener,
380
404
  delPersisterListener,
381
405
  onIgnoredError,
382
- ['getYDoc', yDoc],
406
+ false,
407
+ {getYDoc: () => yDoc},
383
408
  );
384
409
  };
385
410
 
@@ -1,6 +1,7 @@
1
1
  const isUndefined = (thing) => thing == void 0;
2
2
  const ifNotUndefined = (value, then, otherwise) =>
3
3
  isUndefined(value) ? otherwise?.() : then(value);
4
+ const isArray = (thing) => Array.isArray(thing);
4
5
  const size = (arrayOrString) => arrayOrString.length;
5
6
 
6
7
  const arrayPush = (array, ...values) => array.push(...values);
@@ -8,8 +9,6 @@ const arrayShift = (array) => array.shift();
8
9
 
9
10
  const object = Object;
10
11
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
11
- const objIds = object.keys;
12
- const objFreeze = object.freeze;
13
12
  const isObject = (obj) =>
14
13
  !isUndefined(obj) &&
15
14
  ifNotUndefined(
@@ -20,6 +19,8 @@ const isObject = (obj) =>
20
19
  /* istanbul ignore next */
21
20
  () => true,
22
21
  );
22
+ const objIds = object.keys;
23
+ const objFreeze = object.freeze;
23
24
  const objSize = (obj) => size(objIds(obj));
24
25
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
25
26
 
@@ -30,15 +31,35 @@ const mapNew = (entries) => new Map(entries);
30
31
  const mapGet = (map, key) => map?.get(key);
31
32
  const mapSet = (map, key, value) =>
32
33
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
33
- const mapEnsure = (map, key, getDefaultValue) => {
34
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
34
35
  if (!collHas(map, key)) {
35
36
  mapSet(map, key, getDefaultValue());
37
+ } else {
38
+ hadExistingValue?.(mapGet(map, key));
36
39
  }
37
40
  return mapGet(map, key);
38
41
  };
39
42
 
40
43
  const scheduleRunning = mapNew();
41
44
  const scheduleActions = mapNew();
45
+ const getStoreFunctions = (supportsMergeableStore, store) =>
46
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
47
+ ? [
48
+ 0,
49
+ store.getContent,
50
+ store.getTransactionChanges,
51
+ ([changedTables, changedValues]) =>
52
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
53
+ store.setContent,
54
+ ]
55
+ : [
56
+ 1,
57
+ store.getMergeableContent,
58
+ store.getTransactionMergeableChanges,
59
+ ([[changedTables], [changedValues]]) =>
60
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
61
+ store.setDefaultContent,
62
+ ];
42
63
  const createCustomPersister = (
43
64
  store,
44
65
  getPersisted,
@@ -46,18 +67,25 @@ const createCustomPersister = (
46
67
  addPersisterListener,
47
68
  delPersisterListener,
48
69
  onIgnoredError,
49
- [getThing, thing] = [],
70
+ supportsMergeableStore,
71
+ extra = {},
50
72
  scheduleId = [],
51
73
  ) => {
52
- let listenerId;
53
74
  let loadSave = 0;
54
75
  let loads = 0;
55
76
  let saves = 0;
56
- let listening = 0;
57
77
  let action;
58
- let listeningHandle;
78
+ let autoLoadHandle;
79
+ let autoSaveListenerId;
59
80
  mapEnsure(scheduleRunning, scheduleId, () => 0);
60
81
  mapEnsure(scheduleActions, scheduleId, () => []);
82
+ const [
83
+ isMergeableStore,
84
+ getContent,
85
+ getChanges,
86
+ hasChanges,
87
+ setDefaultContent,
88
+ ] = getStoreFunctions(supportsMergeableStore, store);
61
89
  const run = async () => {
62
90
  /* istanbul ignore else */
63
91
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -89,48 +117,54 @@ const createCustomPersister = (
89
117
  }
90
118
  return persister;
91
119
  };
120
+ const setContentOrChanges = (contentOrChanges) => {
121
+ (isMergeableStore && isArray(contentOrChanges?.[0])
122
+ ? contentOrChanges?.[2] === 1
123
+ ? store.applyMergeableChanges
124
+ : store.setMergeableContent
125
+ : contentOrChanges?.[2] === 1
126
+ ? store.applyChanges
127
+ : store.setContent)(contentOrChanges);
128
+ };
92
129
  const persister = {
93
- load: async (initialTables, initialValues) =>
130
+ load: async (initialContent) =>
94
131
  await loadLock(async () => {
95
132
  try {
96
- store.setContent(await getPersisted());
97
- } catch {
98
- store.setContent([initialTables, initialValues]);
133
+ setContentOrChanges(await getPersisted());
134
+ } catch (error) {
135
+ onIgnoredError?.(error);
136
+ if (initialContent) {
137
+ setDefaultContent(initialContent);
138
+ }
99
139
  }
100
140
  }),
101
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
102
- persister.stopAutoLoad();
103
- await persister.load(initialTables, initialValues);
104
- listening = 1;
105
- listeningHandle = addPersisterListener(
106
- async (getContent, getTransactionChanges) => {
107
- if (getTransactionChanges) {
108
- const transactionChanges = getTransactionChanges();
109
- await loadLock(async () =>
110
- store.setTransactionChanges(transactionChanges),
111
- );
112
- } else {
113
- await loadLock(async () => {
114
- try {
115
- store.setContent(getContent?.() ?? (await getPersisted()));
116
- } catch (error) {
117
- onIgnoredError?.(error);
118
- }
119
- });
120
- }
141
+ startAutoLoad: async (initialContent) => {
142
+ await persister.stopAutoLoad().load(initialContent);
143
+ autoLoadHandle = addPersisterListener(
144
+ async (getContent2, getChanges2) => {
145
+ const changes = getChanges2?.();
146
+ await loadLock(async () => {
147
+ try {
148
+ setContentOrChanges(
149
+ changes ?? getContent2?.() ?? (await getPersisted()),
150
+ );
151
+ } catch (error) {
152
+ onIgnoredError?.(error);
153
+ }
154
+ });
121
155
  },
122
156
  );
123
157
  return persister;
124
158
  },
125
159
  stopAutoLoad: () => {
126
- if (listening) {
127
- delPersisterListener(listeningHandle);
128
- listeningHandle = void 0;
129
- listening = 0;
160
+ if (autoLoadHandle) {
161
+ delPersisterListener(autoLoadHandle);
162
+ autoLoadHandle = void 0;
130
163
  }
131
164
  return persister;
132
165
  },
133
- save: async (getTransactionChanges) => {
166
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
167
+ save: async (getChanges2) => {
134
168
  /* istanbul ignore else */
135
169
  if (loadSave != 1) {
136
170
  loadSave = 2;
@@ -139,7 +173,7 @@ const createCustomPersister = (
139
173
  }
140
174
  await persister.schedule(async () => {
141
175
  try {
142
- await setPersisted(store.getContent, getTransactionChanges);
176
+ await setPersisted(getContent, getChanges2);
143
177
  } catch (error) {
144
178
  /* istanbul ignore next */
145
179
  onIgnoredError?.(error);
@@ -151,21 +185,20 @@ const createCustomPersister = (
151
185
  },
152
186
  startAutoSave: async () => {
153
187
  await persister.stopAutoSave().save();
154
- listenerId = store.addDidFinishTransactionListener(
155
- (_store, getTransactionChanges) => {
156
- const [tableChanges, valueChanges] = getTransactionChanges();
157
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
158
- persister.save(() => [tableChanges, valueChanges]);
159
- }
160
- },
161
- );
188
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
189
+ const changes = getChanges();
190
+ if (hasChanges(changes)) {
191
+ persister.save(() => changes);
192
+ }
193
+ });
162
194
  return persister;
163
195
  },
164
196
  stopAutoSave: () => {
165
- ifNotUndefined(listenerId, store.delListener);
166
- listenerId = void 0;
197
+ ifNotUndefined(autoSaveListenerId, store.delListener);
198
+ autoSaveListenerId = void 0;
167
199
  return persister;
168
200
  },
201
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
169
202
  schedule: async (...actions) => {
170
203
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
171
204
  await run();
@@ -174,10 +207,8 @@ const createCustomPersister = (
174
207
  getStore: () => store,
175
208
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
176
209
  getStats: () => ({loads, saves}),
210
+ ...extra,
177
211
  };
178
- if (getThing) {
179
- persister[getThing] = () => thing;
180
- }
181
212
  return objFreeze(persister);
182
213
  };
183
214
 
@@ -48,7 +48,7 @@ const arrayPush = (array, ...values) => array.push(...values);
48
48
  const object = Object;
49
49
  const objEntries = object.entries;
50
50
  const objFreeze = object.freeze;
51
- const objMap = (obj, cb) =>
51
+ const objToArray = (obj, cb) =>
52
52
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
53
53
 
54
54
  const collSize = (coll) => coll?.size ?? 0;
@@ -66,9 +66,11 @@ const mapForEach = (map, cb) =>
66
66
  collForEach(map, (value, key) => cb(key, value));
67
67
  const mapSet = (map, key, value) =>
68
68
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
69
- const mapEnsure = (map, key, getDefaultValue) => {
69
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
70
70
  if (!collHas(map, key)) {
71
71
  mapSet(map, key, getDefaultValue());
72
+ } else {
73
+ hadExistingValue?.(mapGet(map, key));
72
74
  }
73
75
  return mapGet(map, key);
74
76
  };
@@ -171,9 +173,10 @@ const getAggregateValue = (
171
173
  : aggregateValue;
172
174
  };
173
175
 
174
- const getCellOrValueType = (cell) => {
175
- const type = getTypeOf(cell);
176
- return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
176
+ const getCellOrValueType = (cellOrValue) => {
177
+ const type = getTypeOf(cellOrValue);
178
+ return isTypeStringOrBoolean(type) ||
179
+ (type == NUMBER && isFiniteNumber(cellOrValue))
177
180
  ? type
178
181
  : void 0;
179
182
  };
@@ -777,7 +780,7 @@ const createQueries = getCreateFunction((store) => {
777
780
  destroy,
778
781
  getListenerStats,
779
782
  };
780
- objMap(
783
+ objToArray(
781
784
  {
782
785
  [TABLE]: [1, 1],
783
786
  [TABLE + CELL_IDS]: [0, 1],
@@ -42,9 +42,11 @@ const mapForEach = (map, cb) =>
42
42
  collForEach(map, (value, key) => cb(key, value));
43
43
  const mapSet = (map, key, value) =>
44
44
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
45
- const mapEnsure = (map, key, getDefaultValue) => {
45
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
46
46
  if (!collHas(map, key)) {
47
47
  mapSet(map, key, getDefaultValue());
48
+ } else {
49
+ hadExistingValue?.(mapGet(map, key));
48
50
  }
49
51
  return mapGet(map, key);
50
52
  };