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