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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/lib/cjs/mergeable-store.cjs +1 -1
  2. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  4. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  6. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  8. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  10. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  12. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  14. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-file.cjs +1 -1
  16. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  18. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-libsql.cjs +1 -1
  20. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  22. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  24. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  26. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  28. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  30. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-sync.cjs +1 -0
  32. package/lib/cjs/persisters/persister-sync.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  34. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  35. package/lib/cjs/persisters.cjs +1 -1
  36. package/lib/cjs/persisters.cjs.gz +0 -0
  37. package/lib/cjs/store.cjs +1 -1
  38. package/lib/cjs/store.cjs.gz +0 -0
  39. package/lib/cjs/tinybase.cjs +1 -1
  40. package/lib/cjs/tinybase.cjs.gz +0 -0
  41. package/lib/cjs/tools.cjs +1 -1
  42. package/lib/cjs/tools.cjs.gz +0 -0
  43. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  44. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  45. package/lib/cjs/ui-react.cjs +1 -1
  46. package/lib/cjs/ui-react.cjs.gz +0 -0
  47. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  48. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  49. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  50. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  51. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  52. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  53. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  54. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  56. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  57. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  58. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  59. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  60. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  70. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-sync.cjs +1 -0
  78. package/lib/cjs-es6/persisters/persister-sync.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters.cjs +1 -1
  82. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  83. package/lib/cjs-es6/store.cjs +1 -1
  84. package/lib/cjs-es6/store.cjs.gz +0 -0
  85. package/lib/cjs-es6/tinybase.cjs +1 -1
  86. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  87. package/lib/cjs-es6/tools.cjs +1 -1
  88. package/lib/cjs-es6/tools.cjs.gz +0 -0
  89. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  90. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  91. package/lib/cjs-es6/ui-react.cjs +1 -1
  92. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  93. package/lib/debug/mergeable-store.js +287 -130
  94. package/lib/debug/persisters/persister-automerge.js +39 -46
  95. package/lib/debug/persisters/persister-browser.js +39 -46
  96. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +64 -60
  97. package/lib/debug/persisters/persister-electric-sql.js +64 -60
  98. package/lib/debug/persisters/persister-expo-sqlite-next.js +64 -60
  99. package/lib/debug/persisters/persister-expo-sqlite.js +64 -60
  100. package/lib/debug/persisters/persister-file.js +39 -46
  101. package/lib/debug/persisters/persister-indexed-db.js +39 -46
  102. package/lib/debug/persisters/persister-libsql.js +64 -60
  103. package/lib/debug/persisters/persister-partykit-client.js +39 -46
  104. package/lib/debug/persisters/persister-powersync.js +917 -0
  105. package/lib/debug/persisters/persister-remote.js +39 -46
  106. package/lib/debug/persisters/persister-sqlite-wasm.js +64 -60
  107. package/lib/debug/persisters/persister-sqlite3.js +64 -60
  108. package/lib/debug/persisters/persister-sync.js +594 -0
  109. package/lib/debug/persisters/persister-yjs.js +41 -48
  110. package/lib/debug/persisters.js +38 -45
  111. package/lib/debug/store.js +44 -32
  112. package/lib/debug/tinybase.js +322 -173
  113. package/lib/debug/tools.js +2 -2
  114. package/lib/debug/ui-react-dom.js +81 -76
  115. package/lib/debug/ui-react.js +1 -1
  116. package/lib/es6/mergeable-store.js +1 -1
  117. package/lib/es6/mergeable-store.js.gz +0 -0
  118. package/lib/es6/persisters/persister-automerge.js +1 -1
  119. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  120. package/lib/es6/persisters/persister-browser.js +1 -1
  121. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  122. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  123. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  124. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  125. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  126. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  127. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  128. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  129. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  130. package/lib/es6/persisters/persister-file.js +1 -1
  131. package/lib/es6/persisters/persister-file.js.gz +0 -0
  132. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  133. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  134. package/lib/es6/persisters/persister-libsql.js +1 -1
  135. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  136. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  137. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  138. package/lib/es6/persisters/persister-powersync.js +1 -0
  139. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  140. package/lib/es6/persisters/persister-remote.js +1 -1
  141. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  142. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  143. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  144. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  145. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  146. package/lib/es6/persisters/persister-sync.js +1 -0
  147. package/lib/es6/persisters/persister-sync.js.gz +0 -0
  148. package/lib/es6/persisters/persister-yjs.js +1 -1
  149. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  150. package/lib/es6/persisters.js +1 -1
  151. package/lib/es6/persisters.js.gz +0 -0
  152. package/lib/es6/store.js +1 -1
  153. package/lib/es6/store.js.gz +0 -0
  154. package/lib/es6/tinybase.js +1 -1
  155. package/lib/es6/tinybase.js.gz +0 -0
  156. package/lib/es6/tools.js +1 -1
  157. package/lib/es6/tools.js.gz +0 -0
  158. package/lib/es6/ui-react-dom-debug.js +1 -1
  159. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  160. package/lib/es6/ui-react.js +1 -1
  161. package/lib/es6/ui-react.js.gz +0 -0
  162. package/lib/mergeable-store.js +1 -1
  163. package/lib/mergeable-store.js.gz +0 -0
  164. package/lib/persisters/persister-automerge.js +1 -1
  165. package/lib/persisters/persister-automerge.js.gz +0 -0
  166. package/lib/persisters/persister-browser.js +1 -1
  167. package/lib/persisters/persister-browser.js.gz +0 -0
  168. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  169. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  170. package/lib/persisters/persister-electric-sql.js +1 -1
  171. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  172. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  173. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  174. package/lib/persisters/persister-expo-sqlite.js +1 -1
  175. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  176. package/lib/persisters/persister-file.js +1 -1
  177. package/lib/persisters/persister-file.js.gz +0 -0
  178. package/lib/persisters/persister-indexed-db.js +1 -1
  179. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  180. package/lib/persisters/persister-libsql.js +1 -1
  181. package/lib/persisters/persister-libsql.js.gz +0 -0
  182. package/lib/persisters/persister-partykit-client.js +1 -1
  183. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  184. package/lib/persisters/persister-powersync.js +1 -0
  185. package/lib/persisters/persister-powersync.js.gz +0 -0
  186. package/lib/persisters/persister-remote.js +1 -1
  187. package/lib/persisters/persister-remote.js.gz +0 -0
  188. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  189. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  190. package/lib/persisters/persister-sqlite3.js +1 -1
  191. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  192. package/lib/persisters/persister-sync.js +1 -0
  193. package/lib/persisters/persister-sync.js.gz +0 -0
  194. package/lib/persisters/persister-yjs.js +1 -1
  195. package/lib/persisters/persister-yjs.js.gz +0 -0
  196. package/lib/persisters.js +1 -1
  197. package/lib/persisters.js.gz +0 -0
  198. package/lib/store.js +1 -1
  199. package/lib/store.js.gz +0 -0
  200. package/lib/tinybase.js +1 -1
  201. package/lib/tinybase.js.gz +0 -0
  202. package/lib/tools.js +1 -1
  203. package/lib/tools.js.gz +0 -0
  204. package/lib/types/checkpoints.d.ts +2 -2
  205. package/lib/types/indexes.d.ts +2 -2
  206. package/lib/types/mergeable-store.d.ts +121 -59
  207. package/lib/types/metrics.d.ts +2 -2
  208. package/lib/types/persisters/persister-automerge.d.ts +3 -0
  209. package/lib/types/persisters/persister-browser.d.ts +9 -2
  210. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +3 -0
  211. package/lib/types/persisters/persister-electric-sql.d.ts +3 -0
  212. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +3 -0
  213. package/lib/types/persisters/persister-expo-sqlite.d.ts +3 -0
  214. package/lib/types/persisters/persister-file.d.ts +5 -1
  215. package/lib/types/persisters/persister-indexed-db.d.ts +3 -0
  216. package/lib/types/persisters/persister-libsql.d.ts +3 -0
  217. package/lib/types/persisters/persister-partykit-client.d.ts +3 -0
  218. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  219. package/lib/types/persisters/persister-remote.d.ts +3 -0
  220. package/lib/types/persisters/persister-sqlite-wasm.d.ts +3 -0
  221. package/lib/types/persisters/persister-sqlite3.d.ts +3 -0
  222. package/lib/types/persisters/persister-sync.d.ts +182 -0
  223. package/lib/types/persisters/persister-yjs.d.ts +5 -2
  224. package/lib/types/persisters.d.ts +60 -3
  225. package/lib/types/queries.d.ts +2 -2
  226. package/lib/types/relationships.d.ts +2 -2
  227. package/lib/types/store.d.ts +36 -3
  228. package/lib/types/tinybase.d.ts +9 -9
  229. package/lib/types/tools.d.ts +2 -2
  230. package/lib/types/ui-react.d.ts +8 -8
  231. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  232. package/lib/types/with-schemas/indexes.d.ts +2 -2
  233. package/lib/types/with-schemas/mergeable-store.d.ts +185 -87
  234. package/lib/types/with-schemas/metrics.d.ts +2 -2
  235. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +4 -1
  236. package/lib/types/with-schemas/persisters/persister-browser.d.ts +13 -6
  237. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +4 -1
  238. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +4 -1
  239. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +4 -1
  240. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +4 -1
  241. package/lib/types/with-schemas/persisters/persister-file.d.ts +7 -3
  242. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +4 -1
  243. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +4 -1
  244. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +4 -1
  245. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  246. package/lib/types/with-schemas/persisters/persister-remote.d.ts +4 -1
  247. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +4 -1
  248. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +4 -1
  249. package/lib/types/with-schemas/persisters/persister-sync.d.ts +195 -0
  250. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +6 -3
  251. package/lib/types/with-schemas/persisters.d.ts +79 -7
  252. package/lib/types/with-schemas/queries.d.ts +3 -3
  253. package/lib/types/with-schemas/relationships.d.ts +2 -2
  254. package/lib/types/with-schemas/store.d.ts +100 -3
  255. package/lib/types/with-schemas/tinybase.d.ts +9 -9
  256. package/lib/types/with-schemas/tools.d.ts +2 -2
  257. package/lib/types/with-schemas/ui-react.d.ts +8 -8
  258. package/lib/ui-react.js +1 -1
  259. package/lib/ui-react.js.gz +0 -0
  260. package/lib/umd/mergeable-store.js +1 -1
  261. package/lib/umd/mergeable-store.js.gz +0 -0
  262. package/lib/umd/persisters/persister-automerge.js +1 -1
  263. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  264. package/lib/umd/persisters/persister-browser.js +1 -1
  265. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  266. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  267. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  268. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  269. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  270. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  271. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  272. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  273. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  274. package/lib/umd/persisters/persister-file.js +1 -1
  275. package/lib/umd/persisters/persister-file.js.gz +0 -0
  276. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  277. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  278. package/lib/umd/persisters/persister-libsql.js +1 -1
  279. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  280. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  281. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  282. package/lib/umd/persisters/persister-powersync.js +1 -0
  283. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  284. package/lib/umd/persisters/persister-remote.js +1 -1
  285. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  286. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  287. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  288. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  289. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  290. package/lib/umd/persisters/persister-sync.js +1 -0
  291. package/lib/umd/persisters/persister-sync.js.gz +0 -0
  292. package/lib/umd/persisters/persister-yjs.js +1 -1
  293. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  294. package/lib/umd/persisters.js +1 -1
  295. package/lib/umd/persisters.js.gz +0 -0
  296. package/lib/umd/store.js +1 -1
  297. package/lib/umd/store.js.gz +0 -0
  298. package/lib/umd/tinybase.js +1 -1
  299. package/lib/umd/tinybase.js.gz +0 -0
  300. package/lib/umd/tools.js +1 -1
  301. package/lib/umd/tools.js.gz +0 -0
  302. package/lib/umd/ui-react-dom-debug.js +1 -1
  303. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  304. package/lib/umd/ui-react.js +1 -1
  305. package/lib/umd/ui-react.js.gz +0 -0
  306. package/lib/umd-es6/mergeable-store.js +1 -1
  307. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  308. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  309. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  310. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  311. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  312. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  313. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  314. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  315. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  316. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  317. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  318. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  319. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  320. package/lib/umd-es6/persisters/persister-file.js +1 -1
  321. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  322. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  323. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  324. package/lib/umd-es6/persisters/persister-libsql.js +1 -1
  325. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  326. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  327. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  328. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  329. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  330. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  331. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  332. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  333. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  334. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  335. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  336. package/lib/umd-es6/persisters/persister-sync.js +1 -0
  337. package/lib/umd-es6/persisters/persister-sync.js.gz +0 -0
  338. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  339. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  340. package/lib/umd-es6/persisters.js +1 -1
  341. package/lib/umd-es6/persisters.js.gz +0 -0
  342. package/lib/umd-es6/store.js +1 -1
  343. package/lib/umd-es6/store.js.gz +0 -0
  344. package/lib/umd-es6/tinybase.js +1 -1
  345. package/lib/umd-es6/tinybase.js.gz +0 -0
  346. package/lib/umd-es6/tools.js +1 -1
  347. package/lib/umd-es6/tools.js.gz +0 -0
  348. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  349. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  350. package/lib/umd-es6/ui-react.js +1 -1
  351. package/lib/umd-es6/ui-react.js.gz +0 -0
  352. package/package.json +37 -26
  353. package/readme.md +2 -2
@@ -33,6 +33,7 @@ const isUndefined = (thing) => thing == void 0;
33
33
  const ifNotUndefined = (value, then, otherwise) =>
34
34
  isUndefined(value) ? otherwise?.() : then(value);
35
35
  const isTypeStringOrBoolean = (type) => type == STRING || type == BOOLEAN;
36
+ const isString = (thing) => getTypeOf(thing) == STRING;
36
37
  const isFunction = (thing) => getTypeOf(thing) == FUNCTION;
37
38
  const isArray = (thing) => Array.isArray(thing);
38
39
  const slice = (arrayOrString, start, end) => arrayOrString.slice(start, end);
@@ -54,9 +55,7 @@ const arrayShift = (array) => array.shift();
54
55
  const object = Object;
55
56
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
56
57
  const objEntries = object.entries;
57
- const objIds = object.keys;
58
58
  const objFrozen = object.isFrozen;
59
- const objFreeze = object.freeze;
60
59
  const isObject = (obj) =>
61
60
  !isUndefined(obj) &&
62
61
  ifNotUndefined(
@@ -67,6 +66,8 @@ const isObject = (obj) =>
67
66
  /* istanbul ignore next */
68
67
  () => true,
69
68
  );
69
+ const objIds = object.keys;
70
+ const objFreeze = object.freeze;
70
71
  const objNew = (entries = []) => object.fromEntries(entries);
71
72
  const objHas = (obj, id) => id in obj;
72
73
  const objDel = (obj, id) => {
@@ -77,6 +78,8 @@ const objForEach = (obj, cb) =>
77
78
  arrayForEach(objEntries(obj), ([id, value]) => cb(value, id));
78
79
  const objToArray = (obj, cb) =>
79
80
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
81
+ const objMap = (obj, cb) =>
82
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
80
83
  const objSize = (obj) => size(objIds(obj));
81
84
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
82
85
  const objEnsure = (obj, id, getDefaultValue) => {
@@ -85,6 +88,23 @@ const objEnsure = (obj, id, getDefaultValue) => {
85
88
  }
86
89
  return obj[id];
87
90
  };
91
+ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
92
+ if (
93
+ isUndefined(obj) ||
94
+ !isObject(obj) ||
95
+ (!emptyIsValid && objIsEmpty(obj)) ||
96
+ objFrozen(obj)
97
+ ) {
98
+ onInvalidObj?.();
99
+ return false;
100
+ }
101
+ objToArray(obj, (child, id) => {
102
+ if (!validateChild(child, id)) {
103
+ objDel(obj, id);
104
+ }
105
+ });
106
+ return emptyIsValid ? true : !objIsEmpty(obj);
107
+ };
88
108
 
89
109
  const collSizeN = (collSizer) => (coll) =>
90
110
  arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
@@ -121,24 +141,28 @@ const mapMatch = (map, obj, set, del = mapSet) => {
121
141
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
122
142
  return map;
123
143
  };
124
- const mapToObj = (map, mapValue, excludeValue) => {
144
+ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
125
145
  const obj = {};
126
- collForEach(map, (value, id) => {
127
- const mappedValue = mapValue ? mapValue(value, id) : value;
128
- excludeValue?.(mappedValue, value) ? 0 : (obj[id] = mappedValue);
146
+ collForEach(map, (mapValue, id) => {
147
+ if (!excludeMapValue?.(mapValue, id)) {
148
+ const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
149
+ excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
150
+ }
129
151
  });
130
152
  return obj;
131
153
  };
132
- const mapToObj2 = (map, mapValue, excludeValue) =>
154
+ const mapToObj2 = (map, valueMapper, excludeMapValue) =>
133
155
  mapToObj(
134
156
  map,
135
- (childMap) => mapToObj(childMap, mapValue, excludeValue),
157
+ (childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
158
+ collIsEmpty,
136
159
  objIsEmpty,
137
160
  );
138
- const mapToObj3 = (map, mapValue, excludeValue) =>
161
+ const mapToObj3 = (map, valueMapper, excludeMapValue) =>
139
162
  mapToObj(
140
163
  map,
141
- (childMap) => mapToObj2(childMap, mapValue, excludeValue),
164
+ (childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
165
+ collIsEmpty,
142
166
  objIsEmpty,
143
167
  );
144
168
  const mapClone = (map, mapValue) => {
@@ -181,25 +205,29 @@ const getHash = (value) => {
181
205
  return hash >>> 0;
182
206
  };
183
207
 
184
- const cloneHashStamp = ([time, value, hash]) => [time, value, hash];
185
- const stampNew = (time, thing) => [time, thing];
208
+ const stampCloneWithHash = ([time, value, hash]) => [time, value, hash];
209
+ const stampClone = ([time, value]) => [time, value];
210
+ const getStampHash = (stamp) => stamp[2];
186
211
  const hashIdAndHash = (id, hash) => getHash(id + ':' + hash);
187
- const updateHashStamp = (hashStamp, hash, time) => {
188
- hashStamp[2] = hash >>> 0;
189
- if (time > hashStamp[0]) {
190
- hashStamp[0] = time;
212
+ const stampUpdate = (stamp, hash, time) => {
213
+ stamp[2] = hash >>> 0;
214
+ if (time > stamp[0]) {
215
+ stamp[0] = time;
191
216
  }
192
217
  };
193
- const stampNewObj = (time) => stampNew(time, objNew());
194
- const hashStampNewMap = (time = EMPTY_STRING) => [time, mapNew(), 0];
195
- const hashStampNewThing = () => [EMPTY_STRING, void 0, 0];
196
- const hashStampMap = ([time, value, hash], mapper) => [
197
- time,
198
- mapper(value, time),
199
- hash,
200
- ];
201
- const hashStampMapToObj = (hashStamp, mapper = cloneHashStamp) =>
202
- hashStampMap(hashStamp, (map) => mapToObj(map, mapper));
218
+ const stampNewObj = (time) => [time, objNew()];
219
+ const stampNewMap = (time = EMPTY_STRING) => [time, mapNew(), 0];
220
+ const stampMapToObjWithHash = (
221
+ [time, map, hash],
222
+ mapper = stampCloneWithHash,
223
+ ) => [time, mapToObj(map, mapper), hash];
224
+ const stampValidate = (stamp, validateThing) =>
225
+ isArray(stamp) &&
226
+ size(stamp) == 3 &&
227
+ isString(stamp[0]) &&
228
+ validateThing(stamp[1]) &&
229
+ getTypeOf(stamp[2]) == NUMBER &&
230
+ isFiniteNumber(stamp[2]);
203
231
 
204
232
  const setNew = (entryOrEntries) =>
205
233
  new Set(
@@ -306,6 +334,8 @@ const getCellOrValueType = (cellOrValue) => {
306
334
  ? type
307
335
  : void 0;
308
336
  };
337
+ const isCellOrValueOrNull = (cellOrValue) =>
338
+ cellOrValue === null || !isUndefined(getCellOrValueType(cellOrValue));
309
339
  const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
310
340
  isUndefined(cell)
311
341
  ? store.delCell(tableId, rowId, cellId, true)
@@ -322,18 +352,6 @@ const jsonParse = JSON.parse;
322
352
  const defaultSorter = (sortKey1, sortKey2) =>
323
353
  (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
324
354
 
325
- const validate = (obj, validateChild, onInvalidObj) => {
326
- if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
327
- onInvalidObj?.();
328
- return false;
329
- }
330
- objToArray(obj, (child, id2) => {
331
- if (!validateChild(child, id2)) {
332
- objDel(obj, id2);
333
- }
334
- });
335
- return !objIsEmpty(obj);
336
- };
337
355
  const idsChanged = (changedIds, id2, addedOrRemoved) =>
338
356
  mapSet(
339
357
  changedIds,
@@ -393,13 +411,13 @@ const createStore = () => {
393
411
  const [addListener, callListeners, delListenerImpl, callListenerImpl] =
394
412
  getListenerFunctions(() => store);
395
413
  const validateTablesSchema = (tableSchema) =>
396
- validate(tableSchema, (tableSchema2) =>
397
- validate(tableSchema2, validateCellOrValueSchema),
414
+ objValidate(tableSchema, (tableSchema2) =>
415
+ objValidate(tableSchema2, validateCellOrValueSchema),
398
416
  );
399
417
  const validateValuesSchema = (valuesSchema) =>
400
- validate(valuesSchema, validateCellOrValueSchema);
418
+ objValidate(valuesSchema, validateCellOrValueSchema);
401
419
  const validateCellOrValueSchema = (schema) => {
402
- if (!validate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
420
+ if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
403
421
  return false;
404
422
  }
405
423
  const type = schema[TYPE];
@@ -412,18 +430,18 @@ const createStore = () => {
412
430
  return true;
413
431
  };
414
432
  const validateTables = (tables) =>
415
- validate(tables, validateTable, cellInvalid);
433
+ objValidate(tables, validateTable, cellInvalid);
416
434
  const validateTable = (table, tableId) =>
417
435
  (!hasTablesSchema ||
418
436
  collHas(tablesSchemaMap, tableId) ||
419
437
  cellInvalid(tableId)) &&
420
- validate(
438
+ objValidate(
421
439
  table,
422
440
  (row, rowId) => validateRow(tableId, rowId, row),
423
441
  () => cellInvalid(tableId),
424
442
  );
425
443
  const validateRow = (tableId, rowId, row, skipDefaults) =>
426
- validate(
444
+ objValidate(
427
445
  skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
428
446
  (cell, cellId) =>
429
447
  ifNotUndefined(
@@ -450,7 +468,7 @@ const createStore = () => {
450
468
  ? cellInvalid(tableId, rowId, cellId, cell)
451
469
  : cell;
452
470
  const validateValues = (values, skipDefaults) =>
453
- validate(
471
+ objValidate(
454
472
  skipDefaults ? values : addDefaultsToValues(values),
455
473
  (value, valueId) =>
456
474
  ifNotUndefined(
@@ -1293,17 +1311,20 @@ const createStore = () => {
1293
1311
  : mapToObj(
1294
1312
  row,
1295
1313
  ([, newCell]) => newCell,
1296
- (_, changedCell) => pairIsEqual(changedCell),
1314
+ (changedCell) => pairIsEqual(changedCell),
1297
1315
  ),
1316
+ collIsEmpty,
1298
1317
  objIsEmpty,
1299
1318
  ),
1319
+ collIsEmpty,
1300
1320
  objIsEmpty,
1301
1321
  ),
1302
1322
  mapToObj(
1303
1323
  changedValues,
1304
1324
  ([, newValue]) => newValue,
1305
- (_, changedValue) => pairIsEqual(changedValue),
1325
+ (changedValue) => pairIsEqual(changedValue),
1306
1326
  ),
1327
+ 1,
1307
1328
  ];
1308
1329
  const getTransactionLog = () => [
1309
1330
  !collIsEmpty(changedCells),
@@ -1690,10 +1711,13 @@ const getHlcFunctions = (uniqueId) => {
1690
1711
  };
1691
1712
  const seenHlc = (hlc) => {
1692
1713
  const previousLogicalTime = logicalTime;
1693
- const [remoteLogicalTime, remoteCounter] = isUndefined(hlc)
1694
- ? [0, 0]
1695
- : decodeHlc(hlc);
1696
- logicalTime = mathMax(previousLogicalTime, remoteLogicalTime, Date.now());
1714
+ const [remoteLogicalTime, remoteCounter] =
1715
+ isUndefined(hlc) || hlc == '' ? [0, 0] : decodeHlc(hlc);
1716
+ logicalTime = mathMax(
1717
+ previousLogicalTime,
1718
+ remoteLogicalTime,
1719
+ globalThis.HLC_TIME ?? Date.now(),
1720
+ );
1697
1721
  lastCounter =
1698
1722
  logicalTime == previousLogicalTime
1699
1723
  ? logicalTime == remoteLogicalTime
@@ -1724,14 +1748,54 @@ const LISTENER_ARGS = {
1724
1748
  InvalidCell: 3,
1725
1749
  InvalidValue: 1,
1726
1750
  };
1727
- const newContentHsm = (time = EMPTY_STRING) => [
1751
+ const newContentStampMap = (time = EMPTY_STRING) => [
1728
1752
  time,
1729
- [hashStampNewMap(time), hashStampNewMap(time)],
1753
+ [stampNewMap(time), stampNewMap(time)],
1730
1754
  0,
1731
1755
  ];
1756
+ const validateMergeableContent = (mergeableContent) =>
1757
+ stampValidate(
1758
+ mergeableContent,
1759
+ (content) =>
1760
+ isArray(content) &&
1761
+ size(content) == 2 &&
1762
+ stampValidate(content[0], (tableStamps) =>
1763
+ objValidate(
1764
+ tableStamps,
1765
+ (tableStamp) =>
1766
+ stampValidate(tableStamp, (rowStamps) =>
1767
+ objValidate(
1768
+ rowStamps,
1769
+ (rowStamp) =>
1770
+ stampValidate(rowStamp, (cellStamps) =>
1771
+ objValidate(
1772
+ cellStamps,
1773
+ (cellStamp) =>
1774
+ stampValidate(cellStamp, isCellOrValueOrNull),
1775
+ void 0,
1776
+ 1,
1777
+ ),
1778
+ ),
1779
+ void 0,
1780
+ 1,
1781
+ ),
1782
+ ),
1783
+ void 0,
1784
+ 1,
1785
+ ),
1786
+ ) &&
1787
+ stampValidate(content[1], (values) =>
1788
+ objValidate(
1789
+ values,
1790
+ (value) => stampValidate(value, isCellOrValueOrNull),
1791
+ void 0,
1792
+ 1,
1793
+ ),
1794
+ ),
1795
+ );
1732
1796
  const createMergeableStore = (id) => {
1733
1797
  let listening = 1;
1734
- let contentHsm = newContentHsm();
1798
+ let contentStampMap = newContentStampMap();
1735
1799
  let transactionTime;
1736
1800
  let transactionMergeableChanges;
1737
1801
  const [getHlc, seenHlc] = getHlcFunctions(id);
@@ -1741,6 +1805,7 @@ const createMergeableStore = (id) => {
1741
1805
  listening = 0;
1742
1806
  actions();
1743
1807
  listening = wasListening;
1808
+ return mergeableStore;
1744
1809
  };
1745
1810
  const mergeContentOrChanges = (contentOrChanges, hasHashes = 0) => {
1746
1811
  const tablesChanges = {};
@@ -1750,8 +1815,8 @@ const createMergeableStore = (id) => {
1750
1815
  [[tablesTime, tablesObj, incomingTablesHash], values],
1751
1816
  incomingContentOrChangesHash,
1752
1817
  ] = contentOrChanges;
1753
- const [, [tablesHsm, valuesHsm]] = contentHsm;
1754
- const [oldTablesTime, tableHsms, oldTablesHash] = tablesHsm;
1818
+ const [, [tablesStampMap, valuesStampMap]] = contentStampMap;
1819
+ const [oldTablesTime, tableStampMaps, oldTablesHash] = tablesStampMap;
1755
1820
  if (tablesTime) {
1756
1821
  let tablesHash = hasHashes
1757
1822
  ? incomingTablesHash
@@ -1762,8 +1827,8 @@ const createMergeableStore = (id) => {
1762
1827
  objForEach(
1763
1828
  tablesObj,
1764
1829
  ([tableTime, rowsObj, incomingTableHash], tableId) => {
1765
- const tableHsm = mapEnsure(tableHsms, tableId, hashStampNewMap);
1766
- const [oldTableTime, rowHsms, oldTableHash] = tableHsm;
1830
+ const tableStampMap = mapEnsure(tableStampMaps, tableId, stampNewMap);
1831
+ const [oldTableTime, rowStampMaps, oldTableHash] = tableStampMap;
1767
1832
  let tableHash = hasHashes
1768
1833
  ? incomingTableHash
1769
1834
  : oldTableHash ^
@@ -1774,7 +1839,7 @@ const createMergeableStore = (id) => {
1774
1839
  objForEach(rowsObj, (row, rowId) => {
1775
1840
  const [oldRowHash, rowHash] = mergeCellsOrValues(
1776
1841
  row,
1777
- mapEnsure(rowHsms, rowId, hashStampNewMap),
1842
+ mapEnsure(rowStampMaps, rowId, stampNewMap),
1778
1843
  objEnsure(
1779
1844
  objEnsure(tablesChanges, tableId, objNew),
1780
1845
  rowId,
@@ -1787,26 +1852,33 @@ const createMergeableStore = (id) => {
1787
1852
  : (oldRowHash ? hashIdAndHash(rowId, oldRowHash) : 0) ^
1788
1853
  hashIdAndHash(rowId, rowHash);
1789
1854
  });
1790
- updateHashStamp(tableHsm, tableHash, tableTime);
1855
+ stampUpdate(tableStampMap, tableHash, tableTime);
1791
1856
  tablesHash ^= hasHashes
1792
1857
  ? 0
1793
1858
  : (oldTableHash ? hashIdAndHash(tableId, oldTableHash) : 0) ^
1794
- hashIdAndHash(tableId, tableHsm[2]);
1859
+ hashIdAndHash(tableId, tableStampMap[2]);
1795
1860
  },
1796
1861
  );
1797
- updateHashStamp(tablesHsm, tablesHash, tablesTime);
1862
+ stampUpdate(tablesStampMap, tablesHash, tablesTime);
1798
1863
  }
1799
- mergeCellsOrValues(values, valuesHsm, valuesChanges, hasHashes);
1800
- updateHashStamp(
1801
- contentHsm,
1802
- hasHashes ? incomingContentOrChangesHash : tablesHsm[2] ^ valuesHsm[2],
1864
+ mergeCellsOrValues(values, valuesStampMap, valuesChanges, hasHashes);
1865
+ stampUpdate(
1866
+ contentStampMap,
1867
+ hasHashes
1868
+ ? incomingContentOrChangesHash
1869
+ : tablesStampMap[2] ^ valuesStampMap[2],
1803
1870
  contentOrChangesTime,
1804
1871
  );
1805
- return [tablesChanges, valuesChanges];
1872
+ return [tablesChanges, valuesChanges, 1];
1806
1873
  };
1807
- const mergeCellsOrValues = (things, thingsHsm, thingsChanges, hasHashes) => {
1874
+ const mergeCellsOrValues = (
1875
+ things,
1876
+ thingsStampMap,
1877
+ thingsChanges,
1878
+ hasHashes,
1879
+ ) => {
1808
1880
  const [thingsTime, thingsObj, incomingThingsHash] = things;
1809
- const [oldThingsTime, thingHsms, oldThingsHash] = thingsHsm;
1881
+ const [oldThingsTime, thingStampMaps, oldThingsHash] = thingsStampMap;
1810
1882
  if (thingsTime) {
1811
1883
  let thingsHash = hasHashes
1812
1884
  ? incomingThingsHash
@@ -1817,28 +1889,32 @@ const createMergeableStore = (id) => {
1817
1889
  objForEach(
1818
1890
  thingsObj,
1819
1891
  ([thingTime, thing, incomingThingHash], thingId) => {
1820
- const thingHsm = mapEnsure(thingHsms, thingId, hashStampNewThing);
1821
- const [oldThingTime, , oldThingHash] = thingHsm;
1892
+ const thingStampMap = mapEnsure(thingStampMaps, thingId, () => [
1893
+ EMPTY_STRING,
1894
+ void 0,
1895
+ 0,
1896
+ ]);
1897
+ const [oldThingTime, , oldThingHash] = thingStampMap;
1822
1898
  if (thingTime > oldThingTime) {
1823
- updateHashStamp(
1824
- thingHsm,
1899
+ stampUpdate(
1900
+ thingStampMap,
1825
1901
  hasHashes
1826
1902
  ? incomingThingHash
1827
1903
  : getHash(jsonString(thing ?? null) + ':' + thingTime),
1828
1904
  thingTime,
1829
1905
  );
1830
- thingHsm[1] = thing;
1906
+ thingStampMap[1] = thing;
1831
1907
  thingsChanges[thingId] = thing;
1832
1908
  thingsHash ^= hasHashes
1833
1909
  ? 0
1834
1910
  : hashIdAndHash(thingId, oldThingHash) ^
1835
- hashIdAndHash(thingId, thingHsm[2]);
1911
+ hashIdAndHash(thingId, thingStampMap[2]);
1836
1912
  }
1837
1913
  },
1838
1914
  );
1839
- updateHashStamp(thingsHsm, thingsHash, thingsTime);
1915
+ stampUpdate(thingsStampMap, thingsHash, thingsTime);
1840
1916
  }
1841
- return [oldThingsHash, thingsHsm[2]];
1917
+ return [oldThingsHash, thingsStampMap[2]];
1842
1918
  };
1843
1919
  const preFinishTransaction = () => {
1844
1920
  if (listening) {
@@ -1848,26 +1924,118 @@ const createMergeableStore = (id) => {
1848
1924
  };
1849
1925
  const postFinishTransaction = () =>
1850
1926
  (transactionTime = transactionMergeableChanges = void 0);
1851
- const getMergeableContent = () =>
1852
- hashStampMap(contentHsm, ([tables, values]) => [
1853
- hashStampMapToObj(tables, (table) =>
1854
- hashStampMapToObj(table, (row) => hashStampMapToObj(row)),
1927
+ const getId = () => id;
1928
+ const getMergeableContent = () => [
1929
+ contentStampMap[0],
1930
+ [
1931
+ stampMapToObjWithHash(contentStampMap[1][0], (tableStampMap) =>
1932
+ stampMapToObjWithHash(tableStampMap, (rowStampMap) =>
1933
+ stampMapToObjWithHash(rowStampMap),
1934
+ ),
1855
1935
  ),
1856
- hashStampMapToObj(values),
1857
- ]);
1858
- const setMergeableContent = (mergeableContent) => {
1859
- disableListening(() =>
1860
- store.transaction(() => {
1861
- store.delTables().delValues();
1862
- contentHsm = newContentHsm();
1863
- }),
1936
+ stampMapToObjWithHash(contentStampMap[1][1]),
1937
+ ],
1938
+ contentStampMap[2],
1939
+ ];
1940
+ const getMergeableContentHashes = () => [
1941
+ contentStampMap[0],
1942
+ [contentStampMap[1][0][2], contentStampMap[1][1][2]],
1943
+ ];
1944
+ const getMergeableTableHashes = () =>
1945
+ mapToObj(contentStampMap[1][0][1], getStampHash);
1946
+ const getMergeableTableIdsDiff = (relativeTo) => {
1947
+ const tableIds = [];
1948
+ mapForEach(contentStampMap[1][0][1], (tableId, [, , hash]) => {
1949
+ if (hash !== relativeTo?.[tableId]) {
1950
+ arrayPush(tableIds, tableId);
1951
+ }
1952
+ });
1953
+ return tableIds;
1954
+ };
1955
+ const getMergeableRowHashes = (tablesDelta) =>
1956
+ objNew(
1957
+ arrayMap(tablesDelta, (tableId) => [
1958
+ tableId,
1959
+ mapToObj(mapGet(contentStampMap[1][0][1], tableId)?.[1], getStampHash),
1960
+ ]),
1864
1961
  );
1865
- seenHlc(mergeableContent[0]);
1866
- disableListening(() =>
1867
- store.applyChanges(mergeContentOrChanges(mergeableContent, 1)),
1962
+ const getMergeableRowIdsDiff = (relativeTo) =>
1963
+ objMap(relativeTo, (rowHashes, tableId) => {
1964
+ const rowIds = [];
1965
+ mapForEach(
1966
+ mapGet(contentStampMap[1][0][1], tableId)?.[1],
1967
+ (rowId, [, , hash]) => {
1968
+ if (hash !== rowHashes?.[rowId]) {
1969
+ arrayPush(rowIds, rowId);
1970
+ }
1971
+ },
1972
+ );
1973
+ return rowIds;
1974
+ });
1975
+ const getMergeableCellHashes = (tableDelta) =>
1976
+ objMap(tableDelta, (rowIds, tableId) =>
1977
+ objNew(
1978
+ arrayMap(rowIds, (rowId) => [
1979
+ rowId,
1980
+ mapToObj(
1981
+ mapGet(mapGet(contentStampMap[1][0][1], tableId)?.[1], rowId)?.[1],
1982
+ getStampHash,
1983
+ ),
1984
+ ]),
1985
+ ),
1868
1986
  );
1869
- return mergeableStore;
1987
+ const getMergeableTablesChanges = (relativeTo) => {
1988
+ const [, [[tablesTime, tableStampMaps]]] = contentStampMap;
1989
+ const tables = {};
1990
+ objForEach(relativeTo, (rowCellHashes, tableId) =>
1991
+ ifNotUndefined(
1992
+ mapGet(tableStampMaps, tableId),
1993
+ ([tableTime, rowStampMaps]) => {
1994
+ const table = {};
1995
+ objForEach(rowCellHashes, (cellHashes, rowId) =>
1996
+ ifNotUndefined(
1997
+ mapGet(rowStampMaps, rowId),
1998
+ ([rowTime, cellStampMaps]) => {
1999
+ const row = mapToObj(
2000
+ cellStampMaps,
2001
+ stampClone,
2002
+ ([, , hash], cellId) => hash == cellHashes?.[cellId],
2003
+ );
2004
+ if (!objIsEmpty(row)) {
2005
+ table[rowId] = [rowTime, row];
2006
+ }
2007
+ },
2008
+ ),
2009
+ );
2010
+ if (!objIsEmpty(table)) {
2011
+ tables[tableId] = [tableTime, table];
2012
+ }
2013
+ },
2014
+ ),
2015
+ );
2016
+ return [tablesTime, tables];
1870
2017
  };
2018
+ const getMergeableValuesHashes = () =>
2019
+ mapToObj(contentStampMap[1][1][1], getStampHash);
2020
+ const getMergeableValuesChanges = (relativeTo) => [
2021
+ contentStampMap[1][1][0],
2022
+ mapToObj(
2023
+ contentStampMap[1][1][1],
2024
+ stampClone,
2025
+ ([, , hash], valueId) => hash == relativeTo?.[valueId],
2026
+ ),
2027
+ ];
2028
+ const setMergeableContent = (mergeableContent) =>
2029
+ disableListening(() =>
2030
+ validateMergeableContent(mergeableContent)
2031
+ ? store.transaction(() => {
2032
+ store.delTables().delValues();
2033
+ contentStampMap = newContentStampMap();
2034
+ seenHlc(mergeableContent[0]);
2035
+ store.applyChanges(mergeContentOrChanges(mergeableContent, 1));
2036
+ })
2037
+ : 0,
2038
+ );
1871
2039
  const getTransactionMergeableChanges = () => {
1872
2040
  if (isUndefined(transactionMergeableChanges)) {
1873
2041
  const [, , changedCells, , changedValues] = store.getTransactionLog();
@@ -1875,10 +2043,14 @@ const createMergeableStore = (id) => {
1875
2043
  !objIsEmpty(changedCells) || !objIsEmpty(changedValues)
1876
2044
  ? transactionTime ?? (transactionTime = getHlc())
1877
2045
  : EMPTY_STRING;
1878
- const mergeableChanges = stampNew(time, [
1879
- stampNewObj(objIsEmpty(changedCells) ? EMPTY_STRING : time),
1880
- stampNewObj(objIsEmpty(changedValues) ? EMPTY_STRING : time),
1881
- ]);
2046
+ const mergeableChanges = [
2047
+ time,
2048
+ [
2049
+ stampNewObj(objIsEmpty(changedCells) ? EMPTY_STRING : time),
2050
+ stampNewObj(objIsEmpty(changedValues) ? EMPTY_STRING : time),
2051
+ 1,
2052
+ ],
2053
+ ];
1882
2054
  const [[, tablesObj], [, valuesObj]] = mergeableChanges[1];
1883
2055
  objToArray(changedCells, (changedTable, tableId) => {
1884
2056
  const [, rowsObj] = (tablesObj[tableId] = stampNewObj(time));
@@ -1886,60 +2058,45 @@ const createMergeableStore = (id) => {
1886
2058
  const [, cellsObj] = (rowsObj[rowId] = stampNewObj(time));
1887
2059
  objToArray(
1888
2060
  changedRow,
1889
- ([, newCell], cellId) =>
1890
- (cellsObj[cellId] = stampNew(time, newCell)),
2061
+ ([, newCell], cellId) => (cellsObj[cellId] = [time, newCell]),
1891
2062
  );
1892
2063
  });
1893
2064
  });
1894
2065
  objToArray(
1895
2066
  changedValues,
1896
- ([, newValue], valueId) =>
1897
- (valuesObj[valueId] = stampNew(time, newValue)),
2067
+ ([, newValue], valueId) => (valuesObj[valueId] = [time, newValue]),
1898
2068
  );
1899
2069
  return mergeableChanges;
1900
2070
  }
1901
2071
  return transactionMergeableChanges;
1902
2072
  };
1903
- const applyMergeableChanges = (mergeableChanges) => {
1904
- seenHlc(mergeableChanges[0]);
1905
- disableListening(() =>
1906
- store.applyChanges(mergeContentOrChanges(mergeableChanges)),
1907
- );
1908
- return mergeableStore;
1909
- };
2073
+ const applyMergeableChanges = (mergeableChanges) =>
2074
+ disableListening(() => {
2075
+ seenHlc(mergeableChanges[0]);
2076
+ store.applyChanges(mergeContentOrChanges(mergeableChanges));
2077
+ });
1910
2078
  const merge = (mergeableStore2) => {
1911
2079
  const mergeableChanges = getMergeableContent();
1912
2080
  const mergeableChanges2 = mergeableStore2.getMergeableContent();
1913
2081
  mergeableStore2.applyMergeableChanges(mergeableChanges);
1914
2082
  return applyMergeableChanges(mergeableChanges2);
1915
2083
  };
1916
- const getContentHash = () => contentHsm[2];
1917
- const getTablesHash = () => contentHsm[1][0][2];
1918
- const getTableHash = (tableId) =>
1919
- mapGet(contentHsm[1][0][1], tableId)?.[2] ?? 0;
1920
- const getRowHash = (tableId, rowId) =>
1921
- mapGet(mapGet(contentHsm[1][0][1], tableId)?.[1], rowId)?.[2] ?? 0;
1922
- const getCellHash = (tableId, rowId, cellId) =>
1923
- mapGet(
1924
- mapGet(mapGet(contentHsm[1][0][1], tableId)?.[1], rowId)?.[1],
1925
- cellId,
1926
- )?.[2] ?? 0;
1927
- const getValuesHash = () => contentHsm[1][1][2];
1928
- const getValueHash = (valueId) =>
1929
- mapGet(contentHsm[1][1][1], valueId)?.[2] ?? 0;
1930
2084
  const mergeableStore = {
2085
+ getId,
1931
2086
  getMergeableContent,
2087
+ getMergeableContentHashes,
2088
+ getMergeableTableHashes,
2089
+ getMergeableTableIdsDiff,
2090
+ getMergeableRowHashes,
2091
+ getMergeableRowIdsDiff,
2092
+ getMergeableCellHashes,
2093
+ getMergeableTablesChanges,
2094
+ getMergeableValuesHashes,
2095
+ getMergeableValuesChanges,
1932
2096
  setMergeableContent,
1933
2097
  getTransactionMergeableChanges,
1934
2098
  applyMergeableChanges,
1935
2099
  merge,
1936
- getContentHash,
1937
- getTablesHash,
1938
- getTableHash,
1939
- getRowHash,
1940
- getCellHash,
1941
- getValuesHash,
1942
- getValueHash,
1943
2100
  };
1944
2101
  store.setInternalListeners(preFinishTransaction, postFinishTransaction);
1945
2102
  objToArray(