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
@@ -124,9 +124,7 @@ const arrayShift = (array) => array.shift();
124
124
  const object = Object;
125
125
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
126
126
  const objEntries = object.entries;
127
- const objIds = object.keys;
128
127
  const objFrozen = object.isFrozen;
129
- const objFreeze = object.freeze;
130
128
  const isObject = (obj) =>
131
129
  !isUndefined(obj) &&
132
130
  ifNotUndefined(
@@ -137,23 +135,52 @@ const isObject = (obj) =>
137
135
  /* istanbul ignore next */
138
136
  () => true,
139
137
  );
138
+ const objIds = object.keys;
139
+ const objFreeze = object.freeze;
140
140
  const objNew = (entries = []) => object.fromEntries(entries);
141
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
142
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
141
+ const objHas = (obj, id) => id in obj;
143
142
  const objDel = (obj, id) => {
144
143
  delete obj[id];
145
144
  return obj;
146
145
  };
147
- const objMap = (obj, cb) =>
146
+ const objToArray = (obj, cb) =>
148
147
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
148
+ const objMap = (obj, cb) =>
149
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
149
150
  const objSize = (obj) => size(objIds(obj));
150
151
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
152
+ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
153
+ if (
154
+ isUndefined(obj) ||
155
+ !isObject(obj) ||
156
+ (!emptyIsValid && objIsEmpty(obj)) ||
157
+ objFrozen(obj)
158
+ ) {
159
+ onInvalidObj?.();
160
+ return false;
161
+ }
162
+ objToArray(obj, (child, id) => {
163
+ if (!validateChild(child, id)) {
164
+ objDel(obj, id);
165
+ }
166
+ });
167
+ return emptyIsValid ? true : !objIsEmpty(obj);
168
+ };
151
169
 
152
- const jsonString = (obj) =>
170
+ const UNDEFINED_MARKER = '\uFFFC';
171
+ const jsonStringWithMap = (obj) =>
153
172
  JSON.stringify(obj, (_key, value) =>
154
173
  isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
155
174
  );
156
175
  const jsonParse = JSON.parse;
176
+ const jsonStringWithUndefined = (obj) =>
177
+ JSON.stringify(obj, (_key, value) =>
178
+ value === void 0 ? UNDEFINED_MARKER : value,
179
+ );
180
+ const jsonParseWithUndefined = (str) =>
181
+ JSON.parse(str, (_key, value) =>
182
+ value === UNDEFINED_MARKER ? void 0 : value,
183
+ );
157
184
 
158
185
  const UNIQUE_ID = 'tinybaseStoreInspector';
159
186
  const TITLE = 'TinyBase Store Inspector';
@@ -164,7 +191,7 @@ const OPEN_CELL = 'open';
164
191
  const POSITION_VALUE = 'position';
165
192
  const OPEN_VALUE = OPEN_CELL;
166
193
  const EDITABLE_CELL = 'editable';
167
- const getUniqueId = (...args) => jsonString(args);
194
+ const getUniqueId = (...args) => jsonStringWithMap(args);
168
195
  const sortedIdsMap = (ids, callback) => arrayMap(arraySort(ids), callback);
169
196
  const useEditable = (uniqueId, s) => [
170
197
  !!useCell(STATE_TABLE, uniqueId, EDITABLE_CELL, s),
@@ -207,7 +234,7 @@ const DONE_SVG = PRE + `<path d='${PENCIL}M20 20l60 60' />` + POST;
207
234
 
208
235
  const SCROLLBAR = '*::-webkit-scrollbar';
209
236
  const APP_STYLESHEET = arrayJoin(
210
- objMap(
237
+ objToArray(
211
238
  {
212
239
  '': 'all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999',
213
240
  '*': 'all:revert',
@@ -333,9 +360,10 @@ const Details = ({
333
360
  );
334
361
  };
335
362
 
336
- const getCellOrValueType = (cell) => {
337
- const type = getTypeOf(cell);
338
- return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
363
+ const getCellOrValueType = (cellOrValue) => {
364
+ const type = getTypeOf(cellOrValue);
365
+ return isTypeStringOrBoolean(type) ||
366
+ (type == NUMBER && isFiniteNumber(cellOrValue))
339
367
  ? type
340
368
  : void 0;
341
369
  };
@@ -433,21 +461,16 @@ const useSortingAndPagination = (
433
461
  const useCells = (defaultCellIds, customCells, defaultCellComponent) =>
434
462
  useMemo(() => {
435
463
  const cellIds = customCells ?? defaultCellIds;
436
- return objNew(
437
- objMap(
438
- isArray(cellIds)
439
- ? objNew(arrayMap(cellIds, (cellId) => [cellId, cellId]))
440
- : cellIds,
441
- (labelOrCustomCell, cellId) => [
442
- cellId,
443
- {
444
- ...{label: cellId, component: defaultCellComponent},
445
- ...(isString(labelOrCustomCell)
446
- ? {label: labelOrCustomCell}
447
- : labelOrCustomCell),
448
- },
449
- ],
450
- ),
464
+ return objMap(
465
+ isArray(cellIds)
466
+ ? objNew(arrayMap(cellIds, (cellId) => [cellId, cellId]))
467
+ : cellIds,
468
+ (labelOrCustomCell, cellId) => ({
469
+ ...{label: cellId, component: defaultCellComponent},
470
+ ...(isString(labelOrCustomCell)
471
+ ? {label: labelOrCustomCell}
472
+ : labelOrCustomCell),
473
+ }),
451
474
  );
452
475
  }, [customCells, defaultCellComponent, defaultCellIds]);
453
476
  const HtmlTable = ({
@@ -484,7 +507,7 @@ const HtmlTable = ({
484
507
  label: 'Id',
485
508
  onClick: handleSort,
486
509
  }),
487
- objMap(cells, ({label}, cellId) =>
510
+ objToArray(cells, ({label}, cellId) =>
488
511
  /* @__PURE__ */ createElement(HtmlHeaderCell, {
489
512
  key: cellId,
490
513
  cellId,
@@ -505,17 +528,19 @@ const HtmlTable = ({
505
528
  idColumn === false
506
529
  ? null
507
530
  : /* @__PURE__ */ createElement('th', null, rowId),
508
- objMap(cells, ({component: CellView2, getComponentProps}, cellId) =>
509
- /* @__PURE__ */ createElement(
510
- 'td',
511
- {key: cellId},
512
- /* @__PURE__ */ createElement(CellView2, {
513
- ...getProps(getComponentProps, rowId, cellId),
514
- ...cellComponentProps,
515
- rowId,
516
- cellId,
517
- }),
518
- ),
531
+ objToArray(
532
+ cells,
533
+ ({component: CellView2, getComponentProps}, cellId) =>
534
+ /* @__PURE__ */ createElement(
535
+ 'td',
536
+ {key: cellId},
537
+ /* @__PURE__ */ createElement(CellView2, {
538
+ ...getProps(getComponentProps, rowId, cellId),
539
+ ...cellComponentProps,
540
+ rowId,
541
+ cellId,
542
+ }),
543
+ ),
519
544
  ),
520
545
  ),
521
546
  ),
@@ -569,7 +594,7 @@ const RelationshipInHtmlRow = ({
569
594
  /* @__PURE__ */ createElement('th', null, localRowId),
570
595
  /* @__PURE__ */ createElement('th', null, remoteRowId),
571
596
  ),
572
- objMap(
597
+ objToArray(
573
598
  cells,
574
599
  ({component: CellView2, getComponentProps}, compoundCellId) => {
575
600
  const [tableId, cellId] = compoundCellId.split(DOT, 2);
@@ -885,7 +910,7 @@ const RelationshipInHtmlTable = ({
885
910
  '.Id',
886
911
  ),
887
912
  ),
888
- objMap(cells, ({label}, cellId) =>
913
+ objToArray(cells, ({label}, cellId) =>
889
914
  /* @__PURE__ */ createElement('th', {key: cellId}, label),
890
915
  ),
891
916
  ),
@@ -1165,7 +1190,7 @@ const QueryView = ({queries, queriesId, queryId, s}) => {
1165
1190
  STATE_TABLE,
1166
1191
  uniqueId,
1167
1192
  SORT_CELL,
1168
- jsonString,
1193
+ jsonStringWithMap,
1169
1194
  [],
1170
1195
  s,
1171
1196
  );
@@ -1270,7 +1295,7 @@ const TableView = ({tableId, store, storeId, s}) => {
1270
1295
  STATE_TABLE,
1271
1296
  uniqueId,
1272
1297
  SORT_CELL,
1273
- jsonString,
1298
+ jsonStringWithMap,
1274
1299
  [],
1275
1300
  s,
1276
1301
  );
@@ -1531,35 +1556,41 @@ const mapMap = (coll, cb) =>
1531
1556
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
1532
1557
  const mapSet = (map, key, value) =>
1533
1558
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
1534
- const mapEnsure = (map, key, getDefaultValue) => {
1559
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
1535
1560
  if (!collHas(map, key)) {
1536
1561
  mapSet(map, key, getDefaultValue());
1562
+ } else {
1563
+ hadExistingValue?.(mapGet(map, key));
1537
1564
  }
1538
1565
  return mapGet(map, key);
1539
1566
  };
1540
1567
  const mapMatch = (map, obj, set, del = mapSet) => {
1541
- objMap(obj, (value, id) => set(map, id, value));
1568
+ objToArray(obj, (value, id) => set(map, id, value));
1542
1569
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
1543
1570
  return map;
1544
1571
  };
1545
- const mapToObj = (map, mapValue, excludeValue) => {
1572
+ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
1546
1573
  const obj = {};
1547
- collForEach(map, (value, id) => {
1548
- const mappedValue = mapValue ? mapValue(value, id) : value;
1549
- excludeValue?.(mappedValue, value) ? 0 : (obj[id] = mappedValue);
1574
+ collForEach(map, (mapValue, id) => {
1575
+ if (!excludeMapValue?.(mapValue, id)) {
1576
+ const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
1577
+ excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
1578
+ }
1550
1579
  });
1551
1580
  return obj;
1552
1581
  };
1553
- const mapToObj2 = (map, mapValue, excludeValue) =>
1582
+ const mapToObj2 = (map, valueMapper, excludeMapValue) =>
1554
1583
  mapToObj(
1555
1584
  map,
1556
- (childMap) => mapToObj(childMap, mapValue, excludeValue),
1585
+ (childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
1586
+ collIsEmpty,
1557
1587
  objIsEmpty,
1558
1588
  );
1559
- const mapToObj3 = (map, mapValue, excludeValue) =>
1589
+ const mapToObj3 = (map, valueMapper, excludeMapValue) =>
1560
1590
  mapToObj(
1561
1591
  map,
1562
- (childMap) => mapToObj2(childMap, mapValue, excludeValue),
1592
+ (childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
1593
+ collIsEmpty,
1563
1594
  objIsEmpty,
1564
1595
  );
1565
1596
  const mapClone = (map, mapValue) => {
@@ -1593,6 +1624,24 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
1593
1624
 
1594
1625
  const scheduleRunning = mapNew();
1595
1626
  const scheduleActions = mapNew();
1627
+ const getStoreFunctions = (supportsMergeableStore, store) =>
1628
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
1629
+ ? [
1630
+ 0,
1631
+ store.getContent,
1632
+ store.getTransactionChanges,
1633
+ ([changedTables, changedValues]) =>
1634
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
1635
+ store.setContent,
1636
+ ]
1637
+ : [
1638
+ 1,
1639
+ store.getMergeableContent,
1640
+ store.getTransactionMergeableChanges,
1641
+ ([[changedTables], [changedValues]]) =>
1642
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
1643
+ store.setDefaultContent,
1644
+ ];
1596
1645
  const createCustomPersister = (
1597
1646
  store,
1598
1647
  getPersisted,
@@ -1600,18 +1649,25 @@ const createCustomPersister = (
1600
1649
  addPersisterListener,
1601
1650
  delPersisterListener,
1602
1651
  onIgnoredError,
1603
- [getThing, thing] = [],
1652
+ supportsMergeableStore,
1653
+ extra = {},
1604
1654
  scheduleId = [],
1605
1655
  ) => {
1606
- let listenerId;
1607
1656
  let loadSave = 0;
1608
1657
  let loads = 0;
1609
1658
  let saves = 0;
1610
- let listening = 0;
1611
1659
  let action;
1612
- let listeningHandle;
1660
+ let autoLoadHandle;
1661
+ let autoSaveListenerId;
1613
1662
  mapEnsure(scheduleRunning, scheduleId, () => 0);
1614
1663
  mapEnsure(scheduleActions, scheduleId, () => []);
1664
+ const [
1665
+ isMergeableStore,
1666
+ getContent,
1667
+ getChanges,
1668
+ hasChanges,
1669
+ setDefaultContent,
1670
+ ] = getStoreFunctions(supportsMergeableStore, store);
1615
1671
  const run = async () => {
1616
1672
  /* istanbul ignore else */
1617
1673
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -1643,48 +1699,54 @@ const createCustomPersister = (
1643
1699
  }
1644
1700
  return persister;
1645
1701
  };
1702
+ const setContentOrChanges = (contentOrChanges) => {
1703
+ (isMergeableStore && isArray(contentOrChanges?.[0])
1704
+ ? contentOrChanges?.[2] === 1
1705
+ ? store.applyMergeableChanges
1706
+ : store.setMergeableContent
1707
+ : contentOrChanges?.[2] === 1
1708
+ ? store.applyChanges
1709
+ : store.setContent)(contentOrChanges);
1710
+ };
1646
1711
  const persister = {
1647
- load: async (initialTables, initialValues) =>
1712
+ load: async (initialContent) =>
1648
1713
  await loadLock(async () => {
1649
1714
  try {
1650
- store.setContent(await getPersisted());
1651
- } catch {
1652
- store.setContent([initialTables, initialValues]);
1715
+ setContentOrChanges(await getPersisted());
1716
+ } catch (error) {
1717
+ onIgnoredError?.(error);
1718
+ if (initialContent) {
1719
+ setDefaultContent(initialContent);
1720
+ }
1653
1721
  }
1654
1722
  }),
1655
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
1656
- persister.stopAutoLoad();
1657
- await persister.load(initialTables, initialValues);
1658
- listening = 1;
1659
- listeningHandle = addPersisterListener(
1660
- async (getContent, getTransactionChanges) => {
1661
- if (getTransactionChanges) {
1662
- const transactionChanges = getTransactionChanges();
1663
- await loadLock(async () =>
1664
- store.setTransactionChanges(transactionChanges),
1665
- );
1666
- } else {
1667
- await loadLock(async () => {
1668
- try {
1669
- store.setContent(getContent?.() ?? (await getPersisted()));
1670
- } catch (error) {
1671
- onIgnoredError?.(error);
1672
- }
1673
- });
1674
- }
1723
+ startAutoLoad: async (initialContent) => {
1724
+ await persister.stopAutoLoad().load(initialContent);
1725
+ autoLoadHandle = addPersisterListener(
1726
+ async (getContent2, getChanges2) => {
1727
+ const changes = getChanges2?.();
1728
+ await loadLock(async () => {
1729
+ try {
1730
+ setContentOrChanges(
1731
+ changes ?? getContent2?.() ?? (await getPersisted()),
1732
+ );
1733
+ } catch (error) {
1734
+ onIgnoredError?.(error);
1735
+ }
1736
+ });
1675
1737
  },
1676
1738
  );
1677
1739
  return persister;
1678
1740
  },
1679
1741
  stopAutoLoad: () => {
1680
- if (listening) {
1681
- delPersisterListener(listeningHandle);
1682
- listeningHandle = void 0;
1683
- listening = 0;
1742
+ if (autoLoadHandle) {
1743
+ delPersisterListener(autoLoadHandle);
1744
+ autoLoadHandle = void 0;
1684
1745
  }
1685
1746
  return persister;
1686
1747
  },
1687
- save: async (getTransactionChanges) => {
1748
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
1749
+ save: async (getChanges2) => {
1688
1750
  /* istanbul ignore else */
1689
1751
  if (loadSave != 1) {
1690
1752
  loadSave = 2;
@@ -1693,7 +1755,7 @@ const createCustomPersister = (
1693
1755
  }
1694
1756
  await persister.schedule(async () => {
1695
1757
  try {
1696
- await setPersisted(store.getContent, getTransactionChanges);
1758
+ await setPersisted(getContent, getChanges2);
1697
1759
  } catch (error) {
1698
1760
  /* istanbul ignore next */
1699
1761
  onIgnoredError?.(error);
@@ -1705,21 +1767,20 @@ const createCustomPersister = (
1705
1767
  },
1706
1768
  startAutoSave: async () => {
1707
1769
  await persister.stopAutoSave().save();
1708
- listenerId = store.addDidFinishTransactionListener(
1709
- (_store, getTransactionChanges) => {
1710
- const [tableChanges, valueChanges] = getTransactionChanges();
1711
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
1712
- persister.save(() => [tableChanges, valueChanges]);
1713
- }
1714
- },
1715
- );
1770
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
1771
+ const changes = getChanges();
1772
+ if (hasChanges(changes)) {
1773
+ persister.save(() => changes);
1774
+ }
1775
+ });
1716
1776
  return persister;
1717
1777
  },
1718
1778
  stopAutoSave: () => {
1719
- ifNotUndefined(listenerId, store.delListener);
1720
- listenerId = void 0;
1779
+ ifNotUndefined(autoSaveListenerId, store.delListener);
1780
+ autoSaveListenerId = void 0;
1721
1781
  return persister;
1722
1782
  },
1783
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
1723
1784
  schedule: async (...actions) => {
1724
1785
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
1725
1786
  await run();
@@ -1728,10 +1789,8 @@ const createCustomPersister = (
1728
1789
  getStore: () => store,
1729
1790
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
1730
1791
  getStats: () => ({loads, saves}),
1792
+ ...extra,
1731
1793
  };
1732
- if (getThing) {
1733
- persister[getThing] = () => thing;
1734
- }
1735
1794
  return objFreeze(persister);
1736
1795
  };
1737
1796
 
@@ -1743,9 +1802,10 @@ const createStoragePersister = (
1743
1802
  storage,
1744
1803
  onIgnoredError,
1745
1804
  ) => {
1746
- const getPersisted = async () => jsonParse(storage.getItem(storageName));
1805
+ const getPersisted = async () =>
1806
+ jsonParseWithUndefined(storage.getItem(storageName));
1747
1807
  const setPersisted = async (getContent) =>
1748
- storage.setItem(storageName, jsonString(getContent()));
1808
+ storage.setItem(storageName, jsonStringWithUndefined(getContent()));
1749
1809
  const addPersisterListener = (listener) => {
1750
1810
  const storageListener = (event) => {
1751
1811
  if (event.storageArea === storage && event.key === storageName) {
@@ -1764,7 +1824,8 @@ const createStoragePersister = (
1764
1824
  addPersisterListener,
1765
1825
  delPersisterListener,
1766
1826
  onIgnoredError,
1767
- ['getStorageName', storageName],
1827
+ true,
1828
+ {getStorageName: () => storageName},
1768
1829
  );
1769
1830
  };
1770
1831
  const createSessionPersister = (store, storageName, onIgnoredError) =>
@@ -1871,18 +1932,6 @@ const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
1871
1932
  const defaultSorter = (sortKey1, sortKey2) =>
1872
1933
  (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
1873
1934
 
1874
- const validate = (obj, validateChild, onInvalidObj) => {
1875
- if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
1876
- onInvalidObj?.();
1877
- return false;
1878
- }
1879
- objMap(obj, (child, id2) => {
1880
- if (!validateChild(child, id2)) {
1881
- objDel(obj, id2);
1882
- }
1883
- });
1884
- return !objIsEmpty(obj);
1885
- };
1886
1935
  const idsChanged = (changedIds, id2, addedOrRemoved) =>
1887
1936
  mapSet(
1888
1937
  changedIds,
@@ -1892,11 +1941,10 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
1892
1941
  const createStore = () => {
1893
1942
  let hasTablesSchema;
1894
1943
  let hasValuesSchema;
1895
- let cellsTouched = false;
1896
- let valuesTouched = false;
1897
1944
  let hadTables = false;
1898
1945
  let hadValues = false;
1899
1946
  let transactions = 0;
1947
+ let internalListeners = [];
1900
1948
  const changedTableIds = mapNew();
1901
1949
  const changedTableCellIds = mapNew();
1902
1950
  const changedRowCount = mapNew();
@@ -1943,13 +1991,13 @@ const createStore = () => {
1943
1991
  const [addListener, callListeners, delListenerImpl, callListenerImpl] =
1944
1992
  getListenerFunctions(() => store);
1945
1993
  const validateTablesSchema = (tableSchema) =>
1946
- validate(tableSchema, (tableSchema2) =>
1947
- validate(tableSchema2, validateCellOrValueSchema),
1994
+ objValidate(tableSchema, (tableSchema2) =>
1995
+ objValidate(tableSchema2, validateCellOrValueSchema),
1948
1996
  );
1949
1997
  const validateValuesSchema = (valuesSchema) =>
1950
- validate(valuesSchema, validateCellOrValueSchema);
1998
+ objValidate(valuesSchema, validateCellOrValueSchema);
1951
1999
  const validateCellOrValueSchema = (schema) => {
1952
- if (!validate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
2000
+ if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
1953
2001
  return false;
1954
2002
  }
1955
2003
  const type = schema[TYPE];
@@ -1962,18 +2010,18 @@ const createStore = () => {
1962
2010
  return true;
1963
2011
  };
1964
2012
  const validateTables = (tables) =>
1965
- validate(tables, validateTable, cellInvalid);
2013
+ objValidate(tables, validateTable, cellInvalid);
1966
2014
  const validateTable = (table, tableId) =>
1967
2015
  (!hasTablesSchema ||
1968
2016
  collHas(tablesSchemaMap, tableId) ||
1969
2017
  cellInvalid(tableId)) &&
1970
- validate(
2018
+ objValidate(
1971
2019
  table,
1972
2020
  (row, rowId) => validateRow(tableId, rowId, row),
1973
2021
  () => cellInvalid(tableId),
1974
2022
  );
1975
2023
  const validateRow = (tableId, rowId, row, skipDefaults) =>
1976
- validate(
2024
+ objValidate(
1977
2025
  skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
1978
2026
  (cell, cellId) =>
1979
2027
  ifNotUndefined(
@@ -2000,7 +2048,7 @@ const createStore = () => {
2000
2048
  ? cellInvalid(tableId, rowId, cellId, cell)
2001
2049
  : cell;
2002
2050
  const validateValues = (values, skipDefaults) =>
2003
- validate(
2051
+ objValidate(
2004
2052
  skipDefaults ? values : addDefaultsToValues(values),
2005
2053
  (value, valueId) =>
2006
2054
  ifNotUndefined(
@@ -2263,16 +2311,20 @@ const createStore = () => {
2263
2311
  addedOrRemoved,
2264
2312
  );
2265
2313
  };
2266
- const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
2267
- (mapEnsure(
2314
+ const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
2315
+ mapEnsure(
2268
2316
  mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
2269
2317
  cellId,
2270
2318
  () => [oldCell, 0],
2271
- )[1] = newCell);
2319
+ )[1] = newCell;
2320
+ internalListeners[3]?.(tableId, rowId, cellId, newCell);
2321
+ };
2272
2322
  const valueIdsChanged = (valueId, addedOrRemoved) =>
2273
2323
  idsChanged(changedValueIds, valueId, addedOrRemoved);
2274
- const valueChanged = (valueId, oldValue, newValue) =>
2275
- (mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue);
2324
+ const valueChanged = (valueId, oldValue, newValue) => {
2325
+ mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
2326
+ internalListeners[4]?.(valueId, newValue);
2327
+ };
2276
2328
  const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
2277
2329
  arrayPush(
2278
2330
  mapEnsure(
@@ -2538,44 +2590,6 @@ const createStore = () => {
2538
2590
  transaction(() => actions(...arrayMap(args, id)));
2539
2591
  return store;
2540
2592
  };
2541
- const getTransactionChanges = () => [
2542
- mapToObj(
2543
- changedCells,
2544
- (table, tableId) =>
2545
- mapGet(changedTableIds, tableId) === -1
2546
- ? null
2547
- : mapToObj(
2548
- table,
2549
- (row, rowId) =>
2550
- mapGet(mapGet(changedRowIds, tableId), rowId) === -1
2551
- ? null
2552
- : mapToObj(
2553
- row,
2554
- ([, newCell]) => newCell ?? null,
2555
- (_, changedCell) => pairIsEqual(changedCell),
2556
- ),
2557
- objIsEmpty,
2558
- ),
2559
- objIsEmpty,
2560
- ),
2561
- mapToObj(
2562
- changedValues,
2563
- ([, newValue]) => newValue ?? null,
2564
- (_, changedValue) => pairIsEqual(changedValue),
2565
- ),
2566
- ];
2567
- const getTransactionLog = () => ({
2568
- cellsTouched,
2569
- valuesTouched,
2570
- changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
2571
- invalidCells: mapToObj3(invalidCells),
2572
- changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
2573
- invalidValues: mapToObj(invalidValues),
2574
- changedTableIds: mapToObj(changedTableIds),
2575
- changedRowIds: mapToObj2(changedRowIds),
2576
- changedCellIds: mapToObj3(changedCellIds),
2577
- changedValueIds: mapToObj(changedValueIds),
2578
- });
2579
2593
  const getContent = () => [getTables(), getValues()];
2580
2594
  const getTables = () => mapToObj3(tablesMap);
2581
2595
  const getTableIds = () => mapKeys(tablesMap);
@@ -2619,12 +2633,13 @@ const createStore = () => {
2619
2633
  collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
2620
2634
  const hasValues = () => !collIsEmpty(valuesMap);
2621
2635
  const hasValue = (valueId) => collHas(valuesMap, id(valueId));
2622
- const getTablesJson = () => jsonString(tablesMap);
2623
- const getValuesJson = () => jsonString(valuesMap);
2624
- const getJson = () => jsonString([tablesMap, valuesMap]);
2625
- const getTablesSchemaJson = () => jsonString(tablesSchemaMap);
2626
- const getValuesSchemaJson = () => jsonString(valuesSchemaMap);
2627
- const getSchemaJson = () => jsonString([tablesSchemaMap, valuesSchemaMap]);
2636
+ const getTablesJson = () => jsonStringWithMap(tablesMap);
2637
+ const getValuesJson = () => jsonStringWithMap(valuesMap);
2638
+ const getJson = () => jsonStringWithMap([tablesMap, valuesMap]);
2639
+ const getTablesSchemaJson = () => jsonStringWithMap(tablesSchemaMap);
2640
+ const getValuesSchemaJson = () => jsonStringWithMap(valuesSchemaMap);
2641
+ const getSchemaJson = () =>
2642
+ jsonStringWithMap([tablesSchemaMap, valuesSchemaMap]);
2628
2643
  const setContent = ([tables, values]) =>
2629
2644
  fluentTransaction(() => {
2630
2645
  (objIsEmpty(tables) ? delTables : setTables)(tables);
@@ -2668,7 +2683,7 @@ const createStore = () => {
2668
2683
  (tableId2, rowId2) => {
2669
2684
  if (validateRow(tableId2, rowId2, partialRow, 1)) {
2670
2685
  const table = getOrCreateTable(tableId2);
2671
- objMap(partialRow, (cell, cellId) =>
2686
+ objToArray(partialRow, (cell, cellId) =>
2672
2687
  setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
2673
2688
  );
2674
2689
  }
@@ -2706,7 +2721,7 @@ const createStore = () => {
2706
2721
  const setPartialValues = (partialValues) =>
2707
2722
  fluentTransaction(() =>
2708
2723
  validateValues(partialValues, 1)
2709
- ? objMap(partialValues, (value, valueId) =>
2724
+ ? objToArray(partialValues, (value, valueId) =>
2710
2725
  setValidValue(valueId, value),
2711
2726
  )
2712
2727
  : 0,
@@ -2723,20 +2738,20 @@ const createStore = () => {
2723
2738
  ),
2724
2739
  valueId,
2725
2740
  );
2726
- const setTransactionChanges = (transactionChanges) =>
2741
+ const applyChanges = (changes) =>
2727
2742
  fluentTransaction(() => {
2728
- objMap(transactionChanges[0], (table, tableId) =>
2743
+ objToArray(changes[0], (table, tableId) =>
2729
2744
  isUndefined(table)
2730
2745
  ? delTable(tableId)
2731
- : objMap(table, (row, rowId) =>
2746
+ : objToArray(table, (row, rowId) =>
2732
2747
  isUndefined(row)
2733
2748
  ? delRow(tableId, rowId)
2734
- : objMap(row, (cell, cellId) =>
2749
+ : objToArray(row, (cell, cellId) =>
2735
2750
  setOrDelCell(store, tableId, rowId, cellId, cell),
2736
2751
  ),
2737
2752
  ),
2738
2753
  );
2739
- objMap(transactionChanges[1], (value, valueId) =>
2754
+ objToArray(changes[1], (value, valueId) =>
2740
2755
  setOrDelValue(store, valueId, value),
2741
2756
  );
2742
2757
  });
@@ -2863,31 +2878,66 @@ const createStore = () => {
2863
2878
  transactions++;
2864
2879
  }
2865
2880
  if (transactions == 1) {
2866
- callListeners(
2867
- startTransactionListeners,
2868
- void 0,
2869
- getTransactionChanges,
2870
- getTransactionLog,
2871
- );
2881
+ internalListeners[0]?.();
2882
+ callListeners(startTransactionListeners, void 0);
2872
2883
  }
2873
2884
  return store;
2874
2885
  };
2886
+ const getTransactionChanges = () => [
2887
+ mapToObj(
2888
+ changedCells,
2889
+ (table, tableId) =>
2890
+ mapGet(changedTableIds, tableId) === -1
2891
+ ? void 0
2892
+ : mapToObj(
2893
+ table,
2894
+ (row, rowId) =>
2895
+ mapGet(mapGet(changedRowIds, tableId), rowId) === -1
2896
+ ? void 0
2897
+ : mapToObj(
2898
+ row,
2899
+ ([, newCell]) => newCell,
2900
+ (changedCell) => pairIsEqual(changedCell),
2901
+ ),
2902
+ collIsEmpty,
2903
+ objIsEmpty,
2904
+ ),
2905
+ collIsEmpty,
2906
+ objIsEmpty,
2907
+ ),
2908
+ mapToObj(
2909
+ changedValues,
2910
+ ([, newValue]) => newValue,
2911
+ (changedValue) => pairIsEqual(changedValue),
2912
+ ),
2913
+ 1,
2914
+ ];
2915
+ const getTransactionLog = () => [
2916
+ !collIsEmpty(changedCells),
2917
+ !collIsEmpty(changedValues),
2918
+ mapToObj3(changedCells, pairClone, pairIsEqual),
2919
+ mapToObj3(invalidCells),
2920
+ mapToObj(changedValues, pairClone, pairIsEqual),
2921
+ mapToObj(invalidValues),
2922
+ mapToObj(changedTableIds),
2923
+ mapToObj2(changedRowIds),
2924
+ mapToObj3(changedCellIds),
2925
+ mapToObj(changedValueIds),
2926
+ ];
2875
2927
  const finishTransaction = (doRollback) => {
2876
2928
  if (transactions > 0) {
2877
2929
  transactions--;
2878
2930
  if (transactions == 0) {
2879
- cellsTouched = !collIsEmpty(changedCells);
2880
- valuesTouched = !collIsEmpty(changedValues);
2881
2931
  transactions = 1;
2882
2932
  callInvalidCellListeners(1);
2883
- if (cellsTouched) {
2933
+ if (!collIsEmpty(changedCells)) {
2884
2934
  callTabularListenersForChanges(1);
2885
2935
  }
2886
2936
  callInvalidValueListeners(1);
2887
- if (valuesTouched) {
2937
+ if (!collIsEmpty(changedValues)) {
2888
2938
  callValuesListenersForChanges(1);
2889
2939
  }
2890
- if (doRollback?.(getTransactionChanges, getTransactionLog)) {
2940
+ if (doRollback?.(store)) {
2891
2941
  collForEach(changedCells, (table, tableId) =>
2892
2942
  collForEach(table, (row, rowId) =>
2893
2943
  collForEach(row, ([oldCell], cellId) =>
@@ -2895,34 +2945,26 @@ const createStore = () => {
2895
2945
  ),
2896
2946
  ),
2897
2947
  );
2948
+ collClear(changedCells);
2898
2949
  collForEach(changedValues, ([oldValue], valueId) =>
2899
2950
  setOrDelValue(store, valueId, oldValue),
2900
2951
  );
2901
- cellsTouched = valuesTouched = false;
2952
+ collClear(changedValues);
2902
2953
  }
2903
- callListeners(
2904
- finishTransactionListeners[0],
2905
- void 0,
2906
- getTransactionChanges,
2907
- getTransactionLog,
2908
- );
2954
+ callListeners(finishTransactionListeners[0], void 0);
2909
2955
  transactions = -1;
2910
2956
  callInvalidCellListeners(0);
2911
- if (cellsTouched) {
2957
+ if (!collIsEmpty(changedCells)) {
2912
2958
  callTabularListenersForChanges(0);
2913
2959
  }
2914
2960
  callInvalidValueListeners(0);
2915
- if (valuesTouched) {
2961
+ if (!collIsEmpty(changedValues)) {
2916
2962
  callValuesListenersForChanges(0);
2917
2963
  }
2918
- callListeners(
2919
- finishTransactionListeners[1],
2920
- void 0,
2921
- getTransactionChanges,
2922
- getTransactionLog,
2923
- );
2964
+ internalListeners[1]?.();
2965
+ callListeners(finishTransactionListeners[1], void 0);
2966
+ internalListeners[2]?.();
2924
2967
  transactions = 0;
2925
- cellsTouched = valuesTouched = false;
2926
2968
  hadTables = hasTables();
2927
2969
  hadValues = hasValues();
2928
2970
  arrayForEach(
@@ -3047,6 +3089,20 @@ const createStore = () => {
3047
3089
  collSize2(startTransactionListeners) +
3048
3090
  pairCollSize2(finishTransactionListeners),
3049
3091
  });
3092
+ const setInternalListeners = (
3093
+ preStartTransaction,
3094
+ preFinishTransaction,
3095
+ postFinishTransaction,
3096
+ cellChanged2,
3097
+ valueChanged2,
3098
+ ) =>
3099
+ (internalListeners = [
3100
+ preStartTransaction,
3101
+ preFinishTransaction,
3102
+ postFinishTransaction,
3103
+ cellChanged2,
3104
+ valueChanged2,
3105
+ ]);
3050
3106
  const store = {
3051
3107
  getContent,
3052
3108
  getTables,
@@ -3087,7 +3143,7 @@ const createStore = () => {
3087
3143
  setValues,
3088
3144
  setPartialValues,
3089
3145
  setValue,
3090
- setTransactionChanges,
3146
+ applyChanges,
3091
3147
  setTablesJson,
3092
3148
  setValuesJson,
3093
3149
  setJson,
@@ -3105,6 +3161,8 @@ const createStore = () => {
3105
3161
  delSchema,
3106
3162
  transaction,
3107
3163
  startTransaction,
3164
+ getTransactionChanges,
3165
+ getTransactionLog,
3108
3166
  finishTransaction,
3109
3167
  forEachTable,
3110
3168
  forEachTableCell,
@@ -3122,8 +3180,9 @@ const createStore = () => {
3122
3180
  createStore,
3123
3181
  addListener,
3124
3182
  callListeners,
3183
+ setInternalListeners,
3125
3184
  };
3126
- objMap(
3185
+ objToArray(
3127
3186
  {
3128
3187
  [HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
3129
3188
  [TABLES]: [0, tablesListeners],
@@ -3204,10 +3263,13 @@ const App = ({position = 'right', open = false}) => {
3204
3263
  (s2) => createSessionPersister(s2, UNIQUE_ID),
3205
3264
  void 0,
3206
3265
  async (persister) => {
3207
- await persister.load(void 0, {
3208
- position: index == -1 ? 1 : index,
3209
- open: !!open,
3210
- });
3266
+ await persister.load([
3267
+ {},
3268
+ {
3269
+ position: index == -1 ? 1 : index,
3270
+ open: !!open,
3271
+ },
3272
+ ]);
3211
3273
  await persister.startAutoSave();
3212
3274
  },
3213
3275
  );