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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/lib/checkpoints.js +1 -1
  2. package/lib/checkpoints.js.gz +0 -0
  3. package/lib/cjs/checkpoints.cjs +1 -1
  4. package/lib/cjs/checkpoints.cjs.gz +0 -0
  5. package/lib/cjs/indexes.cjs +1 -1
  6. package/lib/cjs/indexes.cjs.gz +0 -0
  7. package/lib/cjs/mergeable-store.cjs +1 -0
  8. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  9. package/lib/cjs/metrics.cjs +1 -1
  10. package/lib/cjs/metrics.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  12. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  14. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  16. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  18. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  20. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  22. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-file.cjs +1 -1
  24. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  26. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-libsql.cjs +1 -0
  28. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  30. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  31. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  32. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  36. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  39. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  40. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  41. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  42. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  43. package/lib/cjs/persisters.cjs +1 -1
  44. package/lib/cjs/persisters.cjs.gz +0 -0
  45. package/lib/cjs/queries.cjs +1 -1
  46. package/lib/cjs/queries.cjs.gz +0 -0
  47. package/lib/cjs/relationships.cjs +1 -1
  48. package/lib/cjs/relationships.cjs.gz +0 -0
  49. package/lib/cjs/store.cjs +1 -1
  50. package/lib/cjs/store.cjs.gz +0 -0
  51. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  52. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  53. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  54. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  55. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  56. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  57. package/lib/cjs/synchronizers.cjs +1 -0
  58. package/lib/cjs/synchronizers.cjs.gz +0 -0
  59. package/lib/cjs/tinybase.cjs +1 -1
  60. package/lib/cjs/tinybase.cjs.gz +0 -0
  61. package/lib/cjs/tools.cjs +1 -1
  62. package/lib/cjs/tools.cjs.gz +0 -0
  63. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  64. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  65. package/lib/cjs/ui-react-dom.cjs +1 -1
  66. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  67. package/lib/cjs/ui-react.cjs +1 -1
  68. package/lib/cjs/ui-react.cjs.gz +0 -0
  69. package/lib/cjs-es6/checkpoints.cjs +1 -1
  70. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  71. package/lib/cjs-es6/indexes.cjs +1 -1
  72. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  73. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  74. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  75. package/lib/cjs-es6/metrics.cjs +1 -1
  76. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  88. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  90. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  92. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  94. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  96. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  98. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  100. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  101. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  102. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  103. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  104. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  105. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  106. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  107. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  108. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  109. package/lib/cjs-es6/persisters.cjs +1 -1
  110. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  111. package/lib/cjs-es6/queries.cjs +1 -1
  112. package/lib/cjs-es6/queries.cjs.gz +0 -0
  113. package/lib/cjs-es6/relationships.cjs +1 -1
  114. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  115. package/lib/cjs-es6/store.cjs +1 -1
  116. package/lib/cjs-es6/store.cjs.gz +0 -0
  117. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  118. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  119. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  120. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  121. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  122. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  123. package/lib/cjs-es6/synchronizers.cjs +1 -0
  124. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  125. package/lib/cjs-es6/tinybase.cjs +1 -1
  126. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  127. package/lib/cjs-es6/tools.cjs +1 -1
  128. package/lib/cjs-es6/tools.cjs.gz +0 -0
  129. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  130. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  131. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  132. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  133. package/lib/cjs-es6/ui-react.cjs +1 -1
  134. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  135. package/lib/debug/checkpoints.js +3 -1
  136. package/lib/debug/indexes.js +3 -1
  137. package/lib/debug/mergeable-store.js +2230 -0
  138. package/lib/debug/metrics.js +3 -1
  139. package/lib/debug/persisters/persister-automerge.js +110 -86
  140. package/lib/debug/persisters/persister-browser.js +94 -57
  141. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +168 -106
  142. package/lib/debug/persisters/persister-electric-sql.js +168 -106
  143. package/lib/debug/persisters/persister-expo-sqlite-next.js +168 -106
  144. package/lib/debug/persisters/persister-expo-sqlite.js +168 -106
  145. package/lib/debug/persisters/persister-file.js +93 -57
  146. package/lib/debug/persisters/persister-indexed-db.js +90 -56
  147. package/lib/debug/persisters/persister-libsql.js +913 -0
  148. package/lib/debug/persisters/persister-partykit-client.js +89 -59
  149. package/lib/debug/persisters/persister-partykit-server.js +17 -25
  150. package/lib/debug/persisters/persister-powersync.js +928 -0
  151. package/lib/debug/persisters/persister-remote.js +85 -53
  152. package/lib/debug/persisters/persister-sqlite-wasm.js +168 -106
  153. package/lib/debug/persisters/persister-sqlite3.js +168 -106
  154. package/lib/debug/persisters/persister-yjs.js +108 -83
  155. package/lib/debug/persisters.js +81 -50
  156. package/lib/debug/queries.js +9 -6
  157. package/lib/debug/relationships.js +3 -1
  158. package/lib/debug/store.js +147 -126
  159. package/lib/debug/synchronizers/synchronizer-local.js +559 -0
  160. package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
  161. package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
  162. package/lib/debug/synchronizers.js +519 -0
  163. package/lib/debug/tinybase.js +1027 -174
  164. package/lib/debug/tools.js +22 -21
  165. package/lib/debug/ui-react-dom.js +275 -213
  166. package/lib/debug/ui-react.js +55 -6
  167. package/lib/es6/checkpoints.js +1 -1
  168. package/lib/es6/checkpoints.js.gz +0 -0
  169. package/lib/es6/indexes.js +1 -1
  170. package/lib/es6/indexes.js.gz +0 -0
  171. package/lib/es6/mergeable-store.js +1 -0
  172. package/lib/es6/mergeable-store.js.gz +0 -0
  173. package/lib/es6/metrics.js +1 -1
  174. package/lib/es6/metrics.js.gz +0 -0
  175. package/lib/es6/persisters/persister-automerge.js +1 -1
  176. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  177. package/lib/es6/persisters/persister-browser.js +1 -1
  178. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  179. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  180. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  181. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  182. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  183. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  184. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  185. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  186. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  187. package/lib/es6/persisters/persister-file.js +1 -1
  188. package/lib/es6/persisters/persister-file.js.gz +0 -0
  189. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  190. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  191. package/lib/es6/persisters/persister-libsql.js +1 -0
  192. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  193. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  194. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  195. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  196. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  197. package/lib/es6/persisters/persister-powersync.js +1 -0
  198. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  199. package/lib/es6/persisters/persister-remote.js +1 -1
  200. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  201. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  202. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  203. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  204. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  205. package/lib/es6/persisters/persister-yjs.js +1 -1
  206. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  207. package/lib/es6/persisters.js +1 -1
  208. package/lib/es6/persisters.js.gz +0 -0
  209. package/lib/es6/queries.js +1 -1
  210. package/lib/es6/queries.js.gz +0 -0
  211. package/lib/es6/relationships.js +1 -1
  212. package/lib/es6/relationships.js.gz +0 -0
  213. package/lib/es6/store.js +1 -1
  214. package/lib/es6/store.js.gz +0 -0
  215. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  216. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  217. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  218. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  219. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  220. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  221. package/lib/es6/synchronizers.js +1 -0
  222. package/lib/es6/synchronizers.js.gz +0 -0
  223. package/lib/es6/tinybase.js +1 -1
  224. package/lib/es6/tinybase.js.gz +0 -0
  225. package/lib/es6/tools.js +1 -1
  226. package/lib/es6/tools.js.gz +0 -0
  227. package/lib/es6/ui-react-dom-debug.js +1 -1
  228. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  229. package/lib/es6/ui-react-dom.js +1 -1
  230. package/lib/es6/ui-react-dom.js.gz +0 -0
  231. package/lib/es6/ui-react.js +1 -1
  232. package/lib/es6/ui-react.js.gz +0 -0
  233. package/lib/indexes.js +1 -1
  234. package/lib/indexes.js.gz +0 -0
  235. package/lib/mergeable-store.js +1 -0
  236. package/lib/mergeable-store.js.gz +0 -0
  237. package/lib/metrics.js +1 -1
  238. package/lib/metrics.js.gz +0 -0
  239. package/lib/persisters/persister-automerge.js +1 -1
  240. package/lib/persisters/persister-automerge.js.gz +0 -0
  241. package/lib/persisters/persister-browser.js +1 -1
  242. package/lib/persisters/persister-browser.js.gz +0 -0
  243. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  244. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  245. package/lib/persisters/persister-electric-sql.js +1 -1
  246. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  247. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  248. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  249. package/lib/persisters/persister-expo-sqlite.js +1 -1
  250. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  251. package/lib/persisters/persister-file.js +1 -1
  252. package/lib/persisters/persister-file.js.gz +0 -0
  253. package/lib/persisters/persister-indexed-db.js +1 -1
  254. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  255. package/lib/persisters/persister-libsql.js +1 -0
  256. package/lib/persisters/persister-libsql.js.gz +0 -0
  257. package/lib/persisters/persister-partykit-client.js +1 -1
  258. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  259. package/lib/persisters/persister-partykit-server.js +1 -1
  260. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  261. package/lib/persisters/persister-powersync.js +1 -0
  262. package/lib/persisters/persister-powersync.js.gz +0 -0
  263. package/lib/persisters/persister-remote.js +1 -1
  264. package/lib/persisters/persister-remote.js.gz +0 -0
  265. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  266. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  267. package/lib/persisters/persister-sqlite3.js +1 -1
  268. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  269. package/lib/persisters/persister-yjs.js +1 -1
  270. package/lib/persisters/persister-yjs.js.gz +0 -0
  271. package/lib/persisters.js +1 -1
  272. package/lib/persisters.js.gz +0 -0
  273. package/lib/queries.js +1 -1
  274. package/lib/queries.js.gz +0 -0
  275. package/lib/relationships.js +1 -1
  276. package/lib/relationships.js.gz +0 -0
  277. package/lib/store.js +1 -1
  278. package/lib/store.js.gz +0 -0
  279. package/lib/synchronizers/synchronizer-local.js +1 -0
  280. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  281. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  282. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  283. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  284. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  285. package/lib/synchronizers.js +1 -0
  286. package/lib/synchronizers.js.gz +0 -0
  287. package/lib/tinybase.js +1 -1
  288. package/lib/tinybase.js.gz +0 -0
  289. package/lib/tools.js +1 -1
  290. package/lib/tools.js.gz +0 -0
  291. package/lib/types/checkpoints.d.ts +2 -2
  292. package/lib/types/indexes.d.ts +2 -2
  293. package/lib/types/mergeable-store.d.ts +214 -0
  294. package/lib/types/metrics.d.ts +2 -2
  295. package/lib/types/persisters/persister-automerge.d.ts +11 -7
  296. package/lib/types/persisters/persister-browser.d.ts +13 -4
  297. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
  298. package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
  299. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +4 -0
  300. package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
  301. package/lib/types/persisters/persister-file.d.ts +7 -2
  302. package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
  303. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  304. package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
  305. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  306. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  307. package/lib/types/persisters/persister-remote.d.ts +4 -0
  308. package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
  309. package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
  310. package/lib/types/persisters/persister-yjs.d.ts +6 -2
  311. package/lib/types/persisters.d.ts +125 -48
  312. package/lib/types/queries.d.ts +2 -2
  313. package/lib/types/relationships.d.ts +2 -2
  314. package/lib/types/store.d.ts +275 -187
  315. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  316. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
  317. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
  318. package/lib/types/synchronizers.d.ts +132 -0
  319. package/lib/types/tinybase.d.ts +10 -8
  320. package/lib/types/tools.d.ts +4 -4
  321. package/lib/types/ui-react.d.ts +160 -9
  322. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  323. package/lib/types/with-schemas/indexes.d.ts +2 -2
  324. package/lib/types/with-schemas/internal/store.d.ts +4 -0
  325. package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
  326. package/lib/types/with-schemas/metrics.d.ts +2 -2
  327. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
  328. package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
  329. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
  330. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
  331. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +5 -1
  332. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
  333. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
  334. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
  335. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  336. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
  337. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  338. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  339. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
  340. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
  341. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
  342. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
  343. package/lib/types/with-schemas/persisters.d.ts +161 -101
  344. package/lib/types/with-schemas/queries.d.ts +3 -3
  345. package/lib/types/with-schemas/relationships.d.ts +2 -2
  346. package/lib/types/with-schemas/store.d.ts +483 -345
  347. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  348. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
  349. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
  350. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  351. package/lib/types/with-schemas/tinybase.d.ts +9 -8
  352. package/lib/types/with-schemas/tools.d.ts +4 -4
  353. package/lib/types/with-schemas/ui-react.d.ts +177 -9
  354. package/lib/ui-react-dom.js +1 -1
  355. package/lib/ui-react-dom.js.gz +0 -0
  356. package/lib/ui-react.js +1 -1
  357. package/lib/ui-react.js.gz +0 -0
  358. package/lib/umd/checkpoints.js +1 -1
  359. package/lib/umd/checkpoints.js.gz +0 -0
  360. package/lib/umd/indexes.js +1 -1
  361. package/lib/umd/indexes.js.gz +0 -0
  362. package/lib/umd/mergeable-store.js +1 -0
  363. package/lib/umd/mergeable-store.js.gz +0 -0
  364. package/lib/umd/metrics.js +1 -1
  365. package/lib/umd/metrics.js.gz +0 -0
  366. package/lib/umd/persisters/persister-automerge.js +1 -1
  367. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  368. package/lib/umd/persisters/persister-browser.js +1 -1
  369. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  370. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  371. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  372. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  373. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  374. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  375. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  376. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  377. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  378. package/lib/umd/persisters/persister-file.js +1 -1
  379. package/lib/umd/persisters/persister-file.js.gz +0 -0
  380. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  381. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  382. package/lib/umd/persisters/persister-libsql.js +1 -0
  383. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  384. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  385. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  386. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  387. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  388. package/lib/umd/persisters/persister-powersync.js +1 -0
  389. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  390. package/lib/umd/persisters/persister-remote.js +1 -1
  391. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  392. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  393. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  394. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  395. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  396. package/lib/umd/persisters/persister-yjs.js +1 -1
  397. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  398. package/lib/umd/persisters.js +1 -1
  399. package/lib/umd/persisters.js.gz +0 -0
  400. package/lib/umd/queries.js +1 -1
  401. package/lib/umd/queries.js.gz +0 -0
  402. package/lib/umd/relationships.js +1 -1
  403. package/lib/umd/relationships.js.gz +0 -0
  404. package/lib/umd/store.js +1 -1
  405. package/lib/umd/store.js.gz +0 -0
  406. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  407. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  408. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  409. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  410. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  411. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  412. package/lib/umd/synchronizers.js +1 -0
  413. package/lib/umd/synchronizers.js.gz +0 -0
  414. package/lib/umd/tinybase.js +1 -1
  415. package/lib/umd/tinybase.js.gz +0 -0
  416. package/lib/umd/tools.js +1 -1
  417. package/lib/umd/tools.js.gz +0 -0
  418. package/lib/umd/ui-react-dom-debug.js +1 -1
  419. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  420. package/lib/umd/ui-react-dom.js +1 -1
  421. package/lib/umd/ui-react-dom.js.gz +0 -0
  422. package/lib/umd/ui-react.js +1 -1
  423. package/lib/umd/ui-react.js.gz +0 -0
  424. package/lib/umd-es6/checkpoints.js +1 -1
  425. package/lib/umd-es6/checkpoints.js.gz +0 -0
  426. package/lib/umd-es6/indexes.js +1 -1
  427. package/lib/umd-es6/indexes.js.gz +0 -0
  428. package/lib/umd-es6/mergeable-store.js +1 -0
  429. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  430. package/lib/umd-es6/metrics.js +1 -1
  431. package/lib/umd-es6/metrics.js.gz +0 -0
  432. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  433. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  434. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  435. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  436. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  437. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  438. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  439. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  440. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  441. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  442. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  443. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  444. package/lib/umd-es6/persisters/persister-file.js +1 -1
  445. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  446. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  447. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  448. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  449. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  450. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  451. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  452. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  453. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  454. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  455. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  456. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  457. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  458. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  459. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  460. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  461. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  462. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  463. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  464. package/lib/umd-es6/persisters.js +1 -1
  465. package/lib/umd-es6/persisters.js.gz +0 -0
  466. package/lib/umd-es6/queries.js +1 -1
  467. package/lib/umd-es6/queries.js.gz +0 -0
  468. package/lib/umd-es6/relationships.js +1 -1
  469. package/lib/umd-es6/relationships.js.gz +0 -0
  470. package/lib/umd-es6/store.js +1 -1
  471. package/lib/umd-es6/store.js.gz +0 -0
  472. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  473. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  474. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  475. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  476. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  477. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  478. package/lib/umd-es6/synchronizers.js +1 -0
  479. package/lib/umd-es6/synchronizers.js.gz +0 -0
  480. package/lib/umd-es6/tinybase.js +1 -1
  481. package/lib/umd-es6/tinybase.js.gz +0 -0
  482. package/lib/umd-es6/tools.js +1 -1
  483. package/lib/umd-es6/tools.js.gz +0 -0
  484. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  485. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  486. package/lib/umd-es6/ui-react-dom.js +1 -1
  487. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  488. package/lib/umd-es6/ui-react.js +1 -1
  489. package/lib/umd-es6/ui-react.js.gz +0 -0
  490. package/package.json +65 -45
  491. package/readme.md +2 -2
@@ -50,9 +50,7 @@ const arrayShift = (array) => array.shift();
50
50
  const object = Object;
51
51
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
52
52
  const objEntries = object.entries;
53
- const objIds = object.keys;
54
53
  const objFrozen = object.isFrozen;
55
- const objFreeze = object.freeze;
56
54
  const isObject = (obj) =>
57
55
  !isUndefined(obj) &&
58
56
  ifNotUndefined(
@@ -63,16 +61,34 @@ const isObject = (obj) =>
63
61
  /* istanbul ignore next */
64
62
  () => true,
65
63
  );
66
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
67
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
64
+ const objIds = object.keys;
65
+ const objFreeze = object.freeze;
66
+ const objHas = (obj, id) => id in obj;
68
67
  const objDel = (obj, id) => {
69
68
  delete obj[id];
70
69
  return obj;
71
70
  };
72
- const objMap = (obj, cb) =>
71
+ const objToArray = (obj, cb) =>
73
72
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
74
73
  const objSize = (obj) => size(objIds(obj));
75
74
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
75
+ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
76
+ if (
77
+ isUndefined(obj) ||
78
+ !isObject(obj) ||
79
+ (!emptyIsValid && objIsEmpty(obj)) ||
80
+ objFrozen(obj)
81
+ ) {
82
+ onInvalidObj?.();
83
+ return false;
84
+ }
85
+ objToArray(obj, (child, id) => {
86
+ if (!validateChild(child, id)) {
87
+ objDel(obj, id);
88
+ }
89
+ });
90
+ return emptyIsValid ? true : !objIsEmpty(obj);
91
+ };
76
92
 
77
93
  const collSizeN = (collSizer) => (coll) =>
78
94
  arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
@@ -96,35 +112,41 @@ const mapMap = (coll, cb) =>
96
112
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
97
113
  const mapSet = (map, key, value) =>
98
114
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
99
- const mapEnsure = (map, key, getDefaultValue) => {
115
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
100
116
  if (!collHas(map, key)) {
101
117
  mapSet(map, key, getDefaultValue());
118
+ } else {
119
+ hadExistingValue?.(mapGet(map, key));
102
120
  }
103
121
  return mapGet(map, key);
104
122
  };
105
123
  const mapMatch = (map, obj, set, del = mapSet) => {
106
- objMap(obj, (value, id) => set(map, id, value));
124
+ objToArray(obj, (value, id) => set(map, id, value));
107
125
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
108
126
  return map;
109
127
  };
110
- const mapToObj = (map, mapValue, excludeValue) => {
128
+ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
111
129
  const obj = {};
112
- collForEach(map, (value, id) => {
113
- const mappedValue = mapValue ? mapValue(value, id) : value;
114
- excludeValue?.(mappedValue, value) ? 0 : (obj[id] = mappedValue);
130
+ collForEach(map, (mapValue, id) => {
131
+ if (!excludeMapValue?.(mapValue, id)) {
132
+ const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
133
+ excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
134
+ }
115
135
  });
116
136
  return obj;
117
137
  };
118
- const mapToObj2 = (map, mapValue, excludeValue) =>
138
+ const mapToObj2 = (map, valueMapper, excludeMapValue) =>
119
139
  mapToObj(
120
140
  map,
121
- (childMap) => mapToObj(childMap, mapValue, excludeValue),
141
+ (childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
142
+ collIsEmpty,
122
143
  objIsEmpty,
123
144
  );
124
- const mapToObj3 = (map, mapValue, excludeValue) =>
145
+ const mapToObj3 = (map, valueMapper, excludeMapValue) =>
125
146
  mapToObj(
126
147
  map,
127
- (childMap) => mapToObj2(childMap, mapValue, excludeValue),
148
+ (childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
149
+ collIsEmpty,
128
150
  objIsEmpty,
129
151
  );
130
152
  const mapClone = (map, mapValue) => {
@@ -254,9 +276,10 @@ const pairNewMap = () => [mapNew(), mapNew()];
254
276
  const pairClone = (array) => [...array];
255
277
  const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
256
278
 
257
- const getCellOrValueType = (cell) => {
258
- const type = getTypeOf(cell);
259
- return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
279
+ const getCellOrValueType = (cellOrValue) => {
280
+ const type = getTypeOf(cellOrValue);
281
+ return isTypeStringOrBoolean(type) ||
282
+ (type == NUMBER && isFiniteNumber(cellOrValue))
260
283
  ? type
261
284
  : void 0;
262
285
  };
@@ -267,7 +290,7 @@ const setOrDelCell = (store, tableId, rowId, cellId, cell) =>
267
290
  const setOrDelValue = (store, valueId, value) =>
268
291
  isUndefined(value) ? store.delValue(valueId) : store.setValue(valueId, value);
269
292
 
270
- const jsonString = (obj) =>
293
+ const jsonStringWithMap = (obj) =>
271
294
  JSON.stringify(obj, (_key, value) =>
272
295
  isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
273
296
  );
@@ -276,18 +299,6 @@ const jsonParse = JSON.parse;
276
299
  const defaultSorter = (sortKey1, sortKey2) =>
277
300
  (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
278
301
 
279
- const validate = (obj, validateChild, onInvalidObj) => {
280
- if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
281
- onInvalidObj?.();
282
- return false;
283
- }
284
- objMap(obj, (child, id2) => {
285
- if (!validateChild(child, id2)) {
286
- objDel(obj, id2);
287
- }
288
- });
289
- return !objIsEmpty(obj);
290
- };
291
302
  const idsChanged = (changedIds, id2, addedOrRemoved) =>
292
303
  mapSet(
293
304
  changedIds,
@@ -297,11 +308,10 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
297
308
  const createStore = () => {
298
309
  let hasTablesSchema;
299
310
  let hasValuesSchema;
300
- let cellsTouched = false;
301
- let valuesTouched = false;
302
311
  let hadTables = false;
303
312
  let hadValues = false;
304
313
  let transactions = 0;
314
+ let internalListeners = [];
305
315
  const changedTableIds = mapNew();
306
316
  const changedTableCellIds = mapNew();
307
317
  const changedRowCount = mapNew();
@@ -348,13 +358,13 @@ const createStore = () => {
348
358
  const [addListener, callListeners, delListenerImpl, callListenerImpl] =
349
359
  getListenerFunctions(() => store);
350
360
  const validateTablesSchema = (tableSchema) =>
351
- validate(tableSchema, (tableSchema2) =>
352
- validate(tableSchema2, validateCellOrValueSchema),
361
+ objValidate(tableSchema, (tableSchema2) =>
362
+ objValidate(tableSchema2, validateCellOrValueSchema),
353
363
  );
354
364
  const validateValuesSchema = (valuesSchema) =>
355
- validate(valuesSchema, validateCellOrValueSchema);
365
+ objValidate(valuesSchema, validateCellOrValueSchema);
356
366
  const validateCellOrValueSchema = (schema) => {
357
- if (!validate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
367
+ if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
358
368
  return false;
359
369
  }
360
370
  const type = schema[TYPE];
@@ -367,18 +377,18 @@ const createStore = () => {
367
377
  return true;
368
378
  };
369
379
  const validateTables = (tables) =>
370
- validate(tables, validateTable, cellInvalid);
380
+ objValidate(tables, validateTable, cellInvalid);
371
381
  const validateTable = (table, tableId) =>
372
382
  (!hasTablesSchema ||
373
383
  collHas(tablesSchemaMap, tableId) ||
374
384
  cellInvalid(tableId)) &&
375
- validate(
385
+ objValidate(
376
386
  table,
377
387
  (row, rowId) => validateRow(tableId, rowId, row),
378
388
  () => cellInvalid(tableId),
379
389
  );
380
390
  const validateRow = (tableId, rowId, row, skipDefaults) =>
381
- validate(
391
+ objValidate(
382
392
  skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
383
393
  (cell, cellId) =>
384
394
  ifNotUndefined(
@@ -405,7 +415,7 @@ const createStore = () => {
405
415
  ? cellInvalid(tableId, rowId, cellId, cell)
406
416
  : cell;
407
417
  const validateValues = (values, skipDefaults) =>
408
- validate(
418
+ objValidate(
409
419
  skipDefaults ? values : addDefaultsToValues(values),
410
420
  (value, valueId) =>
411
421
  ifNotUndefined(
@@ -668,16 +678,20 @@ const createStore = () => {
668
678
  addedOrRemoved,
669
679
  );
670
680
  };
671
- const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
672
- (mapEnsure(
681
+ const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
682
+ mapEnsure(
673
683
  mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
674
684
  cellId,
675
685
  () => [oldCell, 0],
676
- )[1] = newCell);
686
+ )[1] = newCell;
687
+ internalListeners[3]?.(tableId, rowId, cellId, newCell);
688
+ };
677
689
  const valueIdsChanged = (valueId, addedOrRemoved) =>
678
690
  idsChanged(changedValueIds, valueId, addedOrRemoved);
679
- const valueChanged = (valueId, oldValue, newValue) =>
680
- (mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue);
691
+ const valueChanged = (valueId, oldValue, newValue) => {
692
+ mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
693
+ internalListeners[4]?.(valueId, newValue);
694
+ };
681
695
  const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
682
696
  arrayPush(
683
697
  mapEnsure(
@@ -943,44 +957,6 @@ const createStore = () => {
943
957
  transaction(() => actions(...arrayMap(args, id)));
944
958
  return store;
945
959
  };
946
- const getTransactionChanges = () => [
947
- mapToObj(
948
- changedCells,
949
- (table, tableId) =>
950
- mapGet(changedTableIds, tableId) === -1
951
- ? null
952
- : mapToObj(
953
- table,
954
- (row, rowId) =>
955
- mapGet(mapGet(changedRowIds, tableId), rowId) === -1
956
- ? null
957
- : mapToObj(
958
- row,
959
- ([, newCell]) => newCell ?? null,
960
- (_, changedCell) => pairIsEqual(changedCell),
961
- ),
962
- objIsEmpty,
963
- ),
964
- objIsEmpty,
965
- ),
966
- mapToObj(
967
- changedValues,
968
- ([, newValue]) => newValue ?? null,
969
- (_, changedValue) => pairIsEqual(changedValue),
970
- ),
971
- ];
972
- const getTransactionLog = () => ({
973
- cellsTouched,
974
- valuesTouched,
975
- changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
976
- invalidCells: mapToObj3(invalidCells),
977
- changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
978
- invalidValues: mapToObj(invalidValues),
979
- changedTableIds: mapToObj(changedTableIds),
980
- changedRowIds: mapToObj2(changedRowIds),
981
- changedCellIds: mapToObj3(changedCellIds),
982
- changedValueIds: mapToObj(changedValueIds),
983
- });
984
960
  const getContent = () => [getTables(), getValues()];
985
961
  const getTables = () => mapToObj3(tablesMap);
986
962
  const getTableIds = () => mapKeys(tablesMap);
@@ -1024,12 +1000,13 @@ const createStore = () => {
1024
1000
  collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
1025
1001
  const hasValues = () => !collIsEmpty(valuesMap);
1026
1002
  const hasValue = (valueId) => collHas(valuesMap, id(valueId));
1027
- const getTablesJson = () => jsonString(tablesMap);
1028
- const getValuesJson = () => jsonString(valuesMap);
1029
- const getJson = () => jsonString([tablesMap, valuesMap]);
1030
- const getTablesSchemaJson = () => jsonString(tablesSchemaMap);
1031
- const getValuesSchemaJson = () => jsonString(valuesSchemaMap);
1032
- const getSchemaJson = () => jsonString([tablesSchemaMap, valuesSchemaMap]);
1003
+ const getTablesJson = () => jsonStringWithMap(tablesMap);
1004
+ const getValuesJson = () => jsonStringWithMap(valuesMap);
1005
+ const getJson = () => jsonStringWithMap([tablesMap, valuesMap]);
1006
+ const getTablesSchemaJson = () => jsonStringWithMap(tablesSchemaMap);
1007
+ const getValuesSchemaJson = () => jsonStringWithMap(valuesSchemaMap);
1008
+ const getSchemaJson = () =>
1009
+ jsonStringWithMap([tablesSchemaMap, valuesSchemaMap]);
1033
1010
  const setContent = ([tables, values]) =>
1034
1011
  fluentTransaction(() => {
1035
1012
  (objIsEmpty(tables) ? delTables : setTables)(tables);
@@ -1073,7 +1050,7 @@ const createStore = () => {
1073
1050
  (tableId2, rowId2) => {
1074
1051
  if (validateRow(tableId2, rowId2, partialRow, 1)) {
1075
1052
  const table = getOrCreateTable(tableId2);
1076
- objMap(partialRow, (cell, cellId) =>
1053
+ objToArray(partialRow, (cell, cellId) =>
1077
1054
  setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
1078
1055
  );
1079
1056
  }
@@ -1111,7 +1088,7 @@ const createStore = () => {
1111
1088
  const setPartialValues = (partialValues) =>
1112
1089
  fluentTransaction(() =>
1113
1090
  validateValues(partialValues, 1)
1114
- ? objMap(partialValues, (value, valueId) =>
1091
+ ? objToArray(partialValues, (value, valueId) =>
1115
1092
  setValidValue(valueId, value),
1116
1093
  )
1117
1094
  : 0,
@@ -1128,20 +1105,20 @@ const createStore = () => {
1128
1105
  ),
1129
1106
  valueId,
1130
1107
  );
1131
- const setTransactionChanges = (transactionChanges) =>
1108
+ const applyChanges = (changes) =>
1132
1109
  fluentTransaction(() => {
1133
- objMap(transactionChanges[0], (table, tableId) =>
1110
+ objToArray(changes[0], (table, tableId) =>
1134
1111
  isUndefined(table)
1135
1112
  ? delTable(tableId)
1136
- : objMap(table, (row, rowId) =>
1113
+ : objToArray(table, (row, rowId) =>
1137
1114
  isUndefined(row)
1138
1115
  ? delRow(tableId, rowId)
1139
- : objMap(row, (cell, cellId) =>
1116
+ : objToArray(row, (cell, cellId) =>
1140
1117
  setOrDelCell(store, tableId, rowId, cellId, cell),
1141
1118
  ),
1142
1119
  ),
1143
1120
  );
1144
- objMap(transactionChanges[1], (value, valueId) =>
1121
+ objToArray(changes[1], (value, valueId) =>
1145
1122
  setOrDelValue(store, valueId, value),
1146
1123
  );
1147
1124
  });
@@ -1268,31 +1245,66 @@ const createStore = () => {
1268
1245
  transactions++;
1269
1246
  }
1270
1247
  if (transactions == 1) {
1271
- callListeners(
1272
- startTransactionListeners,
1273
- void 0,
1274
- getTransactionChanges,
1275
- getTransactionLog,
1276
- );
1248
+ internalListeners[0]?.();
1249
+ callListeners(startTransactionListeners, void 0);
1277
1250
  }
1278
1251
  return store;
1279
1252
  };
1253
+ const getTransactionChanges = () => [
1254
+ mapToObj(
1255
+ changedCells,
1256
+ (table, tableId) =>
1257
+ mapGet(changedTableIds, tableId) === -1
1258
+ ? void 0
1259
+ : mapToObj(
1260
+ table,
1261
+ (row, rowId) =>
1262
+ mapGet(mapGet(changedRowIds, tableId), rowId) === -1
1263
+ ? void 0
1264
+ : mapToObj(
1265
+ row,
1266
+ ([, newCell]) => newCell,
1267
+ (changedCell) => pairIsEqual(changedCell),
1268
+ ),
1269
+ collIsEmpty,
1270
+ objIsEmpty,
1271
+ ),
1272
+ collIsEmpty,
1273
+ objIsEmpty,
1274
+ ),
1275
+ mapToObj(
1276
+ changedValues,
1277
+ ([, newValue]) => newValue,
1278
+ (changedValue) => pairIsEqual(changedValue),
1279
+ ),
1280
+ 1,
1281
+ ];
1282
+ const getTransactionLog = () => [
1283
+ !collIsEmpty(changedCells),
1284
+ !collIsEmpty(changedValues),
1285
+ mapToObj3(changedCells, pairClone, pairIsEqual),
1286
+ mapToObj3(invalidCells),
1287
+ mapToObj(changedValues, pairClone, pairIsEqual),
1288
+ mapToObj(invalidValues),
1289
+ mapToObj(changedTableIds),
1290
+ mapToObj2(changedRowIds),
1291
+ mapToObj3(changedCellIds),
1292
+ mapToObj(changedValueIds),
1293
+ ];
1280
1294
  const finishTransaction = (doRollback) => {
1281
1295
  if (transactions > 0) {
1282
1296
  transactions--;
1283
1297
  if (transactions == 0) {
1284
- cellsTouched = !collIsEmpty(changedCells);
1285
- valuesTouched = !collIsEmpty(changedValues);
1286
1298
  transactions = 1;
1287
1299
  callInvalidCellListeners(1);
1288
- if (cellsTouched) {
1300
+ if (!collIsEmpty(changedCells)) {
1289
1301
  callTabularListenersForChanges(1);
1290
1302
  }
1291
1303
  callInvalidValueListeners(1);
1292
- if (valuesTouched) {
1304
+ if (!collIsEmpty(changedValues)) {
1293
1305
  callValuesListenersForChanges(1);
1294
1306
  }
1295
- if (doRollback?.(getTransactionChanges, getTransactionLog)) {
1307
+ if (doRollback?.(store)) {
1296
1308
  collForEach(changedCells, (table, tableId) =>
1297
1309
  collForEach(table, (row, rowId) =>
1298
1310
  collForEach(row, ([oldCell], cellId) =>
@@ -1300,34 +1312,26 @@ const createStore = () => {
1300
1312
  ),
1301
1313
  ),
1302
1314
  );
1315
+ collClear(changedCells);
1303
1316
  collForEach(changedValues, ([oldValue], valueId) =>
1304
1317
  setOrDelValue(store, valueId, oldValue),
1305
1318
  );
1306
- cellsTouched = valuesTouched = false;
1319
+ collClear(changedValues);
1307
1320
  }
1308
- callListeners(
1309
- finishTransactionListeners[0],
1310
- void 0,
1311
- getTransactionChanges,
1312
- getTransactionLog,
1313
- );
1321
+ callListeners(finishTransactionListeners[0], void 0);
1314
1322
  transactions = -1;
1315
1323
  callInvalidCellListeners(0);
1316
- if (cellsTouched) {
1324
+ if (!collIsEmpty(changedCells)) {
1317
1325
  callTabularListenersForChanges(0);
1318
1326
  }
1319
1327
  callInvalidValueListeners(0);
1320
- if (valuesTouched) {
1328
+ if (!collIsEmpty(changedValues)) {
1321
1329
  callValuesListenersForChanges(0);
1322
1330
  }
1323
- callListeners(
1324
- finishTransactionListeners[1],
1325
- void 0,
1326
- getTransactionChanges,
1327
- getTransactionLog,
1328
- );
1331
+ internalListeners[1]?.();
1332
+ callListeners(finishTransactionListeners[1], void 0);
1333
+ internalListeners[2]?.();
1329
1334
  transactions = 0;
1330
- cellsTouched = valuesTouched = false;
1331
1335
  hadTables = hasTables();
1332
1336
  hadValues = hasValues();
1333
1337
  arrayForEach(
@@ -1452,6 +1456,20 @@ const createStore = () => {
1452
1456
  collSize2(startTransactionListeners) +
1453
1457
  pairCollSize2(finishTransactionListeners),
1454
1458
  });
1459
+ const setInternalListeners = (
1460
+ preStartTransaction,
1461
+ preFinishTransaction,
1462
+ postFinishTransaction,
1463
+ cellChanged2,
1464
+ valueChanged2,
1465
+ ) =>
1466
+ (internalListeners = [
1467
+ preStartTransaction,
1468
+ preFinishTransaction,
1469
+ postFinishTransaction,
1470
+ cellChanged2,
1471
+ valueChanged2,
1472
+ ]);
1455
1473
  const store = {
1456
1474
  getContent,
1457
1475
  getTables,
@@ -1492,7 +1510,7 @@ const createStore = () => {
1492
1510
  setValues,
1493
1511
  setPartialValues,
1494
1512
  setValue,
1495
- setTransactionChanges,
1513
+ applyChanges,
1496
1514
  setTablesJson,
1497
1515
  setValuesJson,
1498
1516
  setJson,
@@ -1510,6 +1528,8 @@ const createStore = () => {
1510
1528
  delSchema,
1511
1529
  transaction,
1512
1530
  startTransaction,
1531
+ getTransactionChanges,
1532
+ getTransactionLog,
1513
1533
  finishTransaction,
1514
1534
  forEachTable,
1515
1535
  forEachTableCell,
@@ -1527,8 +1547,9 @@ const createStore = () => {
1527
1547
  createStore,
1528
1548
  addListener,
1529
1549
  callListeners,
1550
+ setInternalListeners,
1530
1551
  };
1531
- objMap(
1552
+ objToArray(
1532
1553
  {
1533
1554
  [HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
1534
1555
  [TABLES]: [0, tablesListeners],