tinybase 5.0.0-beta.0 → 5.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) hide show
  1. package/bin/cli.js +1 -1
  2. package/lib/checkpoints.js +1 -1
  3. package/lib/checkpoints.js.gz +0 -0
  4. package/lib/cjs/checkpoints.cjs +1 -1
  5. package/lib/cjs/checkpoints.cjs.gz +0 -0
  6. package/lib/cjs/indexes.cjs +1 -1
  7. package/lib/cjs/indexes.cjs.gz +0 -0
  8. package/lib/cjs/mergeable-store.cjs +1 -0
  9. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  10. package/lib/cjs/metrics.cjs +1 -1
  11. package/lib/cjs/metrics.cjs.gz +0 -0
  12. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  13. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  14. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  15. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  16. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  17. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  18. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  19. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  20. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  21. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  22. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  23. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  24. package/lib/cjs/persisters/persister-file.cjs +1 -1
  25. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  26. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  27. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  28. package/lib/cjs/persisters/persister-libsql.cjs +1 -0
  29. package/lib/cjs/persisters/persister-libsql.cjs.gz +0 -0
  30. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  31. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  32. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  33. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  35. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  36. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  37. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  39. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  40. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  41. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  42. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  43. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  44. package/lib/cjs/persisters.cjs +1 -1
  45. package/lib/cjs/persisters.cjs.gz +0 -0
  46. package/lib/cjs/queries.cjs +1 -1
  47. package/lib/cjs/queries.cjs.gz +0 -0
  48. package/lib/cjs/relationships.cjs +1 -1
  49. package/lib/cjs/relationships.cjs.gz +0 -0
  50. package/lib/cjs/store.cjs +1 -1
  51. package/lib/cjs/store.cjs.gz +0 -0
  52. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  53. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  54. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  55. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  56. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  57. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  58. package/lib/cjs/synchronizers.cjs +1 -0
  59. package/lib/cjs/synchronizers.cjs.gz +0 -0
  60. package/lib/cjs/tinybase.cjs +1 -1
  61. package/lib/cjs/tinybase.cjs.gz +0 -0
  62. package/lib/cjs/tools.cjs +1 -1
  63. package/lib/cjs/tools.cjs.gz +0 -0
  64. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  65. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  66. package/lib/cjs/ui-react-dom.cjs +1 -1
  67. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  68. package/lib/cjs/ui-react.cjs +1 -1
  69. package/lib/cjs/ui-react.cjs.gz +0 -0
  70. package/lib/cjs-es6/checkpoints.cjs +1 -1
  71. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  72. package/lib/cjs-es6/indexes.cjs +1 -1
  73. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  74. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  75. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  76. package/lib/cjs-es6/metrics.cjs +1 -1
  77. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  78. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  79. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  80. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  81. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  82. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  83. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  84. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  85. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  86. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  87. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  88. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  89. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  90. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  91. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  92. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  93. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  94. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  95. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  96. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  97. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  98. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  99. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  100. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  101. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  102. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  103. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  104. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  105. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  106. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  107. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  108. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  109. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  110. package/lib/cjs-es6/persisters.cjs +1 -1
  111. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  112. package/lib/cjs-es6/queries.cjs +1 -1
  113. package/lib/cjs-es6/queries.cjs.gz +0 -0
  114. package/lib/cjs-es6/relationships.cjs +1 -1
  115. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  116. package/lib/cjs-es6/store.cjs +1 -1
  117. package/lib/cjs-es6/store.cjs.gz +0 -0
  118. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  119. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  120. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  121. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  122. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  123. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  124. package/lib/cjs-es6/synchronizers.cjs +1 -0
  125. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  126. package/lib/cjs-es6/tinybase.cjs +1 -1
  127. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  128. package/lib/cjs-es6/tools.cjs +1 -1
  129. package/lib/cjs-es6/tools.cjs.gz +0 -0
  130. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  131. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  132. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  133. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  134. package/lib/cjs-es6/ui-react.cjs +1 -1
  135. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  136. package/lib/debug/checkpoints.js +254 -235
  137. package/lib/debug/indexes.js +10 -6
  138. package/lib/debug/mergeable-store.js +2230 -0
  139. package/lib/debug/metrics.js +10 -6
  140. package/lib/debug/persisters/persister-automerge.js +113 -87
  141. package/lib/debug/persisters/persister-browser.js +95 -57
  142. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +175 -109
  143. package/lib/debug/persisters/persister-electric-sql.js +176 -109
  144. package/lib/debug/persisters/persister-expo-sqlite-next.js +176 -110
  145. package/lib/debug/persisters/persister-expo-sqlite.js +175 -109
  146. package/lib/debug/persisters/persister-file.js +94 -57
  147. package/lib/debug/persisters/persister-indexed-db.js +94 -57
  148. package/lib/debug/persisters/persister-libsql.js +913 -0
  149. package/lib/debug/persisters/persister-partykit-client.js +90 -59
  150. package/lib/debug/persisters/persister-partykit-server.js +19 -26
  151. package/lib/debug/persisters/persister-powersync.js +928 -0
  152. package/lib/debug/persisters/persister-remote.js +86 -53
  153. package/lib/debug/persisters/persister-sqlite-wasm.js +175 -109
  154. package/lib/debug/persisters/persister-sqlite3.js +175 -109
  155. package/lib/debug/persisters/persister-yjs.js +111 -84
  156. package/lib/debug/persisters.js +82 -50
  157. package/lib/debug/queries.js +18 -12
  158. package/lib/debug/relationships.js +10 -6
  159. package/lib/debug/store.js +150 -127
  160. package/lib/debug/synchronizers/synchronizer-local.js +559 -0
  161. package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
  162. package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
  163. package/lib/debug/synchronizers.js +519 -0
  164. package/lib/debug/tinybase.js +1281 -409
  165. package/lib/debug/tools.js +41 -64
  166. package/lib/debug/ui-react-dom.js +277 -213
  167. package/lib/debug/ui-react.js +213 -198
  168. package/lib/es6/checkpoints.js +1 -1
  169. package/lib/es6/checkpoints.js.gz +0 -0
  170. package/lib/es6/indexes.js +1 -1
  171. package/lib/es6/indexes.js.gz +0 -0
  172. package/lib/es6/mergeable-store.js +1 -0
  173. package/lib/es6/mergeable-store.js.gz +0 -0
  174. package/lib/es6/metrics.js +1 -1
  175. package/lib/es6/metrics.js.gz +0 -0
  176. package/lib/es6/persisters/persister-automerge.js +1 -1
  177. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  178. package/lib/es6/persisters/persister-browser.js +1 -1
  179. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  180. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  181. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  182. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  183. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  184. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  185. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  186. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  187. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  188. package/lib/es6/persisters/persister-file.js +1 -1
  189. package/lib/es6/persisters/persister-file.js.gz +0 -0
  190. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  191. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  192. package/lib/es6/persisters/persister-libsql.js +1 -0
  193. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  194. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  195. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  196. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  197. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  198. package/lib/es6/persisters/persister-powersync.js +1 -0
  199. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  200. package/lib/es6/persisters/persister-remote.js +1 -1
  201. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  202. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  203. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  204. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  205. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  206. package/lib/es6/persisters/persister-yjs.js +1 -1
  207. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  208. package/lib/es6/persisters.js +1 -1
  209. package/lib/es6/persisters.js.gz +0 -0
  210. package/lib/es6/queries.js +1 -1
  211. package/lib/es6/queries.js.gz +0 -0
  212. package/lib/es6/relationships.js +1 -1
  213. package/lib/es6/relationships.js.gz +0 -0
  214. package/lib/es6/store.js +1 -1
  215. package/lib/es6/store.js.gz +0 -0
  216. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  217. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  218. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  219. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  220. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  221. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  222. package/lib/es6/synchronizers.js +1 -0
  223. package/lib/es6/synchronizers.js.gz +0 -0
  224. package/lib/es6/tinybase.js +1 -1
  225. package/lib/es6/tinybase.js.gz +0 -0
  226. package/lib/es6/tools.js +1 -1
  227. package/lib/es6/tools.js.gz +0 -0
  228. package/lib/es6/ui-react-dom-debug.js +1 -1
  229. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  230. package/lib/es6/ui-react-dom.js +1 -1
  231. package/lib/es6/ui-react-dom.js.gz +0 -0
  232. package/lib/es6/ui-react.js +1 -1
  233. package/lib/es6/ui-react.js.gz +0 -0
  234. package/lib/indexes.js +1 -1
  235. package/lib/indexes.js.gz +0 -0
  236. package/lib/mergeable-store.js +1 -0
  237. package/lib/mergeable-store.js.gz +0 -0
  238. package/lib/metrics.js +1 -1
  239. package/lib/metrics.js.gz +0 -0
  240. package/lib/persisters/persister-automerge.js +1 -1
  241. package/lib/persisters/persister-automerge.js.gz +0 -0
  242. package/lib/persisters/persister-browser.js +1 -1
  243. package/lib/persisters/persister-browser.js.gz +0 -0
  244. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  245. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  246. package/lib/persisters/persister-electric-sql.js +1 -1
  247. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  248. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  249. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  250. package/lib/persisters/persister-expo-sqlite.js +1 -1
  251. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  252. package/lib/persisters/persister-file.js +1 -1
  253. package/lib/persisters/persister-file.js.gz +0 -0
  254. package/lib/persisters/persister-indexed-db.js +1 -1
  255. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  256. package/lib/persisters/persister-libsql.js +1 -0
  257. package/lib/persisters/persister-libsql.js.gz +0 -0
  258. package/lib/persisters/persister-partykit-client.js +1 -1
  259. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  260. package/lib/persisters/persister-partykit-server.js +1 -1
  261. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  262. package/lib/persisters/persister-powersync.js +1 -0
  263. package/lib/persisters/persister-powersync.js.gz +0 -0
  264. package/lib/persisters/persister-remote.js +1 -1
  265. package/lib/persisters/persister-remote.js.gz +0 -0
  266. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  267. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  268. package/lib/persisters/persister-sqlite3.js +1 -1
  269. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  270. package/lib/persisters/persister-yjs.js +1 -1
  271. package/lib/persisters/persister-yjs.js.gz +0 -0
  272. package/lib/persisters.js +1 -1
  273. package/lib/persisters.js.gz +0 -0
  274. package/lib/queries.js +1 -1
  275. package/lib/queries.js.gz +0 -0
  276. package/lib/relationships.js +1 -1
  277. package/lib/relationships.js.gz +0 -0
  278. package/lib/store.js +1 -1
  279. package/lib/store.js.gz +0 -0
  280. package/lib/synchronizers/synchronizer-local.js +1 -0
  281. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  282. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  283. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  284. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  285. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  286. package/lib/synchronizers.js +1 -0
  287. package/lib/synchronizers.js.gz +0 -0
  288. package/lib/tinybase.js +1 -1
  289. package/lib/tinybase.js.gz +0 -0
  290. package/lib/tools.js +1 -1
  291. package/lib/tools.js.gz +0 -0
  292. package/lib/types/checkpoints.d.ts +2 -2
  293. package/lib/types/indexes.d.ts +2 -2
  294. package/lib/types/mergeable-store.d.ts +214 -0
  295. package/lib/types/metrics.d.ts +2 -2
  296. package/lib/types/persisters/persister-automerge.d.ts +11 -7
  297. package/lib/types/persisters/persister-browser.d.ts +13 -4
  298. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
  299. package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
  300. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +7 -3
  301. package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
  302. package/lib/types/persisters/persister-file.d.ts +7 -2
  303. package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
  304. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  305. package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
  306. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  307. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  308. package/lib/types/persisters/persister-remote.d.ts +4 -0
  309. package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
  310. package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
  311. package/lib/types/persisters/persister-yjs.d.ts +6 -2
  312. package/lib/types/persisters.d.ts +125 -48
  313. package/lib/types/queries.d.ts +2 -2
  314. package/lib/types/relationships.d.ts +2 -2
  315. package/lib/types/store.d.ts +275 -187
  316. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  317. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
  318. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
  319. package/lib/types/synchronizers.d.ts +132 -0
  320. package/lib/types/tinybase.d.ts +10 -8
  321. package/lib/types/tools.d.ts +4 -4
  322. package/lib/types/ui-react.d.ts +235 -95
  323. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  324. package/lib/types/with-schemas/indexes.d.ts +2 -2
  325. package/lib/types/with-schemas/internal/queries.d.ts +4 -3
  326. package/lib/types/with-schemas/internal/store.d.ts +8 -3
  327. package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
  328. package/lib/types/with-schemas/metrics.d.ts +2 -2
  329. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
  330. package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
  331. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
  332. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
  333. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +8 -4
  334. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
  335. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
  336. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
  337. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  338. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
  339. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  340. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  341. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
  342. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
  343. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
  344. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
  345. package/lib/types/with-schemas/persisters.d.ts +161 -101
  346. package/lib/types/with-schemas/queries.d.ts +3 -3
  347. package/lib/types/with-schemas/relationships.d.ts +2 -2
  348. package/lib/types/with-schemas/store.d.ts +483 -345
  349. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  350. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
  351. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
  352. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  353. package/lib/types/with-schemas/tinybase.d.ts +9 -8
  354. package/lib/types/with-schemas/tools.d.ts +4 -4
  355. package/lib/types/with-schemas/ui-react.d.ts +259 -102
  356. package/lib/ui-react-dom.js +1 -1
  357. package/lib/ui-react-dom.js.gz +0 -0
  358. package/lib/ui-react.js +1 -1
  359. package/lib/ui-react.js.gz +0 -0
  360. package/lib/umd/checkpoints.js +1 -1
  361. package/lib/umd/checkpoints.js.gz +0 -0
  362. package/lib/umd/indexes.js +1 -1
  363. package/lib/umd/indexes.js.gz +0 -0
  364. package/lib/umd/mergeable-store.js +1 -0
  365. package/lib/umd/mergeable-store.js.gz +0 -0
  366. package/lib/umd/metrics.js +1 -1
  367. package/lib/umd/metrics.js.gz +0 -0
  368. package/lib/umd/persisters/persister-automerge.js +1 -1
  369. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  370. package/lib/umd/persisters/persister-browser.js +1 -1
  371. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  372. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  373. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  374. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  375. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  376. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  377. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  378. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  379. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  380. package/lib/umd/persisters/persister-file.js +1 -1
  381. package/lib/umd/persisters/persister-file.js.gz +0 -0
  382. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  383. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  384. package/lib/umd/persisters/persister-libsql.js +1 -0
  385. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  386. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  387. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  388. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  389. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  390. package/lib/umd/persisters/persister-powersync.js +1 -0
  391. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  392. package/lib/umd/persisters/persister-remote.js +1 -1
  393. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  394. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  395. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  396. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  397. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  398. package/lib/umd/persisters/persister-yjs.js +1 -1
  399. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  400. package/lib/umd/persisters.js +1 -1
  401. package/lib/umd/persisters.js.gz +0 -0
  402. package/lib/umd/queries.js +1 -1
  403. package/lib/umd/queries.js.gz +0 -0
  404. package/lib/umd/relationships.js +1 -1
  405. package/lib/umd/relationships.js.gz +0 -0
  406. package/lib/umd/store.js +1 -1
  407. package/lib/umd/store.js.gz +0 -0
  408. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  409. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  410. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  411. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  412. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  413. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  414. package/lib/umd/synchronizers.js +1 -0
  415. package/lib/umd/synchronizers.js.gz +0 -0
  416. package/lib/umd/tinybase.js +1 -1
  417. package/lib/umd/tinybase.js.gz +0 -0
  418. package/lib/umd/tools.js +1 -1
  419. package/lib/umd/tools.js.gz +0 -0
  420. package/lib/umd/ui-react-dom-debug.js +1 -1
  421. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  422. package/lib/umd/ui-react-dom.js +1 -1
  423. package/lib/umd/ui-react-dom.js.gz +0 -0
  424. package/lib/umd/ui-react.js +1 -1
  425. package/lib/umd/ui-react.js.gz +0 -0
  426. package/lib/umd-es6/checkpoints.js +1 -1
  427. package/lib/umd-es6/checkpoints.js.gz +0 -0
  428. package/lib/umd-es6/indexes.js +1 -1
  429. package/lib/umd-es6/indexes.js.gz +0 -0
  430. package/lib/umd-es6/mergeable-store.js +1 -0
  431. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  432. package/lib/umd-es6/metrics.js +1 -1
  433. package/lib/umd-es6/metrics.js.gz +0 -0
  434. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  435. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  436. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  437. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  438. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  439. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  440. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  441. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  442. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  443. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  444. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  445. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  446. package/lib/umd-es6/persisters/persister-file.js +1 -1
  447. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  448. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  449. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  450. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  451. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  452. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  453. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  454. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  455. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  456. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  457. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  458. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  459. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  460. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  461. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  462. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  463. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  464. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  465. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  466. package/lib/umd-es6/persisters.js +1 -1
  467. package/lib/umd-es6/persisters.js.gz +0 -0
  468. package/lib/umd-es6/queries.js +1 -1
  469. package/lib/umd-es6/queries.js.gz +0 -0
  470. package/lib/umd-es6/relationships.js +1 -1
  471. package/lib/umd-es6/relationships.js.gz +0 -0
  472. package/lib/umd-es6/store.js +1 -1
  473. package/lib/umd-es6/store.js.gz +0 -0
  474. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  475. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  476. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  477. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  478. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  479. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  480. package/lib/umd-es6/synchronizers.js +1 -0
  481. package/lib/umd-es6/synchronizers.js.gz +0 -0
  482. package/lib/umd-es6/tinybase.js +1 -1
  483. package/lib/umd-es6/tinybase.js.gz +0 -0
  484. package/lib/umd-es6/tools.js +1 -1
  485. package/lib/umd-es6/tools.js.gz +0 -0
  486. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  487. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  488. package/lib/umd-es6/ui-react-dom.js +1 -1
  489. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  490. package/lib/umd-es6/ui-react.js +1 -1
  491. package/lib/umd-es6/ui-react.js.gz +0 -0
  492. package/package.json +68 -48
  493. package/readme.md +2 -2
@@ -123,9 +123,8 @@ const arrayShift = (array) => array.shift();
123
123
 
124
124
  const object = Object;
125
125
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
126
- const objIds = object.keys;
126
+ const objEntries = object.entries;
127
127
  const objFrozen = object.isFrozen;
128
- const objFreeze = object.freeze;
129
128
  const isObject = (obj) =>
130
129
  !isUndefined(obj) &&
131
130
  ifNotUndefined(
@@ -133,25 +132,55 @@ const isObject = (obj) =>
133
132
  (objPrototype) =>
134
133
  objPrototype == object.prototype ||
135
134
  isUndefined(getPrototypeOf(objPrototype)),
135
+ /* istanbul ignore next */
136
136
  () => true,
137
137
  );
138
+ const objIds = object.keys;
139
+ const objFreeze = object.freeze;
138
140
  const objNew = (entries = []) => object.fromEntries(entries);
139
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
140
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
141
+ const objHas = (obj, id) => id in obj;
141
142
  const objDel = (obj, id) => {
142
143
  delete obj[id];
143
144
  return obj;
144
145
  };
146
+ const objToArray = (obj, cb) =>
147
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
145
148
  const objMap = (obj, cb) =>
146
- arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
149
+ objNew(objToArray(obj, (value, id) => [id, cb(value, id)]));
147
150
  const objSize = (obj) => size(objIds(obj));
148
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
+ };
149
169
 
150
- const jsonString = (obj) =>
170
+ const UNDEFINED_MARKER = '\uFFFC';
171
+ const jsonStringWithMap = (obj) =>
151
172
  JSON.stringify(obj, (_key, value) =>
152
173
  isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
153
174
  );
154
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
+ );
155
184
 
156
185
  const UNIQUE_ID = 'tinybaseStoreInspector';
157
186
  const TITLE = 'TinyBase Store Inspector';
@@ -162,7 +191,7 @@ const OPEN_CELL = 'open';
162
191
  const POSITION_VALUE = 'position';
163
192
  const OPEN_VALUE = OPEN_CELL;
164
193
  const EDITABLE_CELL = 'editable';
165
- const getUniqueId = (...args) => jsonString(args);
194
+ const getUniqueId = (...args) => jsonStringWithMap(args);
166
195
  const sortedIdsMap = (ids, callback) => arrayMap(arraySort(ids), callback);
167
196
  const useEditable = (uniqueId, s) => [
168
197
  !!useCell(STATE_TABLE, uniqueId, EDITABLE_CELL, s),
@@ -205,7 +234,7 @@ const DONE_SVG = PRE + `<path d='${PENCIL}M20 20l60 60' />` + POST;
205
234
 
206
235
  const SCROLLBAR = '*::-webkit-scrollbar';
207
236
  const APP_STYLESHEET = arrayJoin(
208
- objMap(
237
+ objToArray(
209
238
  {
210
239
  '': 'all:initial;font-family:sans-serif;font-size:0.75rem;position:fixed;z-index:999999',
211
240
  '*': 'all:revert',
@@ -331,9 +360,10 @@ const Details = ({
331
360
  );
332
361
  };
333
362
 
334
- const getCellOrValueType = (cell) => {
335
- const type = getTypeOf(cell);
336
- 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))
337
367
  ? type
338
368
  : void 0;
339
369
  };
@@ -431,21 +461,16 @@ const useSortingAndPagination = (
431
461
  const useCells = (defaultCellIds, customCells, defaultCellComponent) =>
432
462
  useMemo(() => {
433
463
  const cellIds = customCells ?? defaultCellIds;
434
- return objNew(
435
- objMap(
436
- isArray(cellIds)
437
- ? objNew(arrayMap(cellIds, (cellId) => [cellId, cellId]))
438
- : cellIds,
439
- (labelOrCustomCell, cellId) => [
440
- cellId,
441
- {
442
- ...{label: cellId, component: defaultCellComponent},
443
- ...(isString(labelOrCustomCell)
444
- ? {label: labelOrCustomCell}
445
- : labelOrCustomCell),
446
- },
447
- ],
448
- ),
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
+ }),
449
474
  );
450
475
  }, [customCells, defaultCellComponent, defaultCellIds]);
451
476
  const HtmlTable = ({
@@ -482,7 +507,7 @@ const HtmlTable = ({
482
507
  label: 'Id',
483
508
  onClick: handleSort,
484
509
  }),
485
- objMap(cells, ({label}, cellId) =>
510
+ objToArray(cells, ({label}, cellId) =>
486
511
  /* @__PURE__ */ createElement(HtmlHeaderCell, {
487
512
  key: cellId,
488
513
  cellId,
@@ -503,17 +528,19 @@ const HtmlTable = ({
503
528
  idColumn === false
504
529
  ? null
505
530
  : /* @__PURE__ */ createElement('th', null, rowId),
506
- objMap(cells, ({component: CellView2, getComponentProps}, cellId) =>
507
- /* @__PURE__ */ createElement(
508
- 'td',
509
- {key: cellId},
510
- /* @__PURE__ */ createElement(CellView2, {
511
- ...getProps(getComponentProps, rowId, cellId),
512
- ...cellComponentProps,
513
- rowId,
514
- cellId,
515
- }),
516
- ),
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
+ ),
517
544
  ),
518
545
  ),
519
546
  ),
@@ -567,7 +594,7 @@ const RelationshipInHtmlRow = ({
567
594
  /* @__PURE__ */ createElement('th', null, localRowId),
568
595
  /* @__PURE__ */ createElement('th', null, remoteRowId),
569
596
  ),
570
- objMap(
597
+ objToArray(
571
598
  cells,
572
599
  ({component: CellView2, getComponentProps}, compoundCellId) => {
573
600
  const [tableId, cellId] = compoundCellId.split(DOT, 2);
@@ -883,7 +910,7 @@ const RelationshipInHtmlTable = ({
883
910
  '.Id',
884
911
  ),
885
912
  ),
886
- objMap(cells, ({label}, cellId) =>
913
+ objToArray(cells, ({label}, cellId) =>
887
914
  /* @__PURE__ */ createElement('th', {key: cellId}, label),
888
915
  ),
889
916
  ),
@@ -1163,7 +1190,7 @@ const QueryView = ({queries, queriesId, queryId, s}) => {
1163
1190
  STATE_TABLE,
1164
1191
  uniqueId,
1165
1192
  SORT_CELL,
1166
- jsonString,
1193
+ jsonStringWithMap,
1167
1194
  [],
1168
1195
  s,
1169
1196
  );
@@ -1268,7 +1295,7 @@ const TableView = ({tableId, store, storeId, s}) => {
1268
1295
  STATE_TABLE,
1269
1296
  uniqueId,
1270
1297
  SORT_CELL,
1271
- jsonString,
1298
+ jsonStringWithMap,
1272
1299
  [],
1273
1300
  s,
1274
1301
  );
@@ -1529,35 +1556,41 @@ const mapMap = (coll, cb) =>
1529
1556
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
1530
1557
  const mapSet = (map, key, value) =>
1531
1558
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
1532
- const mapEnsure = (map, key, getDefaultValue) => {
1559
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
1533
1560
  if (!collHas(map, key)) {
1534
1561
  mapSet(map, key, getDefaultValue());
1562
+ } else {
1563
+ hadExistingValue?.(mapGet(map, key));
1535
1564
  }
1536
1565
  return mapGet(map, key);
1537
1566
  };
1538
1567
  const mapMatch = (map, obj, set, del = mapSet) => {
1539
- objMap(obj, (value, id) => set(map, id, value));
1568
+ objToArray(obj, (value, id) => set(map, id, value));
1540
1569
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
1541
1570
  return map;
1542
1571
  };
1543
- const mapToObj = (map, mapValue, excludeValue) => {
1572
+ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
1544
1573
  const obj = {};
1545
- collForEach(map, (value, id) => {
1546
- const mappedValue = mapValue ? mapValue(value, id) : value;
1547
- 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
+ }
1548
1579
  });
1549
1580
  return obj;
1550
1581
  };
1551
- const mapToObj2 = (map, mapValue, excludeValue) =>
1582
+ const mapToObj2 = (map, valueMapper, excludeMapValue) =>
1552
1583
  mapToObj(
1553
1584
  map,
1554
- (childMap) => mapToObj(childMap, mapValue, excludeValue),
1585
+ (childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
1586
+ collIsEmpty,
1555
1587
  objIsEmpty,
1556
1588
  );
1557
- const mapToObj3 = (map, mapValue, excludeValue) =>
1589
+ const mapToObj3 = (map, valueMapper, excludeMapValue) =>
1558
1590
  mapToObj(
1559
1591
  map,
1560
- (childMap) => mapToObj2(childMap, mapValue, excludeValue),
1592
+ (childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
1593
+ collIsEmpty,
1561
1594
  objIsEmpty,
1562
1595
  );
1563
1596
  const mapClone = (map, mapValue) => {
@@ -1591,6 +1624,24 @@ const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
1591
1624
 
1592
1625
  const scheduleRunning = mapNew();
1593
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
+ ];
1594
1645
  const createCustomPersister = (
1595
1646
  store,
1596
1647
  getPersisted,
@@ -1598,18 +1649,25 @@ const createCustomPersister = (
1598
1649
  addPersisterListener,
1599
1650
  delPersisterListener,
1600
1651
  onIgnoredError,
1601
- [getThing, thing] = [],
1652
+ supportsMergeableStore,
1653
+ extra = {},
1602
1654
  scheduleId = [],
1603
1655
  ) => {
1604
- let listenerId;
1605
1656
  let loadSave = 0;
1606
1657
  let loads = 0;
1607
1658
  let saves = 0;
1608
- let listening = 0;
1609
1659
  let action;
1610
- let listeningHandle;
1660
+ let autoLoadHandle;
1661
+ let autoSaveListenerId;
1611
1662
  mapEnsure(scheduleRunning, scheduleId, () => 0);
1612
1663
  mapEnsure(scheduleActions, scheduleId, () => []);
1664
+ const [
1665
+ isMergeableStore,
1666
+ getContent,
1667
+ getChanges,
1668
+ hasChanges,
1669
+ setDefaultContent,
1670
+ ] = getStoreFunctions(supportsMergeableStore, store);
1613
1671
  const run = async () => {
1614
1672
  /* istanbul ignore else */
1615
1673
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -1641,48 +1699,54 @@ const createCustomPersister = (
1641
1699
  }
1642
1700
  return persister;
1643
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
+ };
1644
1711
  const persister = {
1645
- load: async (initialTables, initialValues) =>
1712
+ load: async (initialContent) =>
1646
1713
  await loadLock(async () => {
1647
1714
  try {
1648
- store.setContent(await getPersisted());
1649
- } catch {
1650
- store.setContent([initialTables, initialValues]);
1715
+ setContentOrChanges(await getPersisted());
1716
+ } catch (error) {
1717
+ onIgnoredError?.(error);
1718
+ if (initialContent) {
1719
+ setDefaultContent(initialContent);
1720
+ }
1651
1721
  }
1652
1722
  }),
1653
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
1654
- persister.stopAutoLoad();
1655
- await persister.load(initialTables, initialValues);
1656
- listening = 1;
1657
- listeningHandle = addPersisterListener(
1658
- async (getContent, getTransactionChanges) => {
1659
- if (getTransactionChanges) {
1660
- const transactionChanges = getTransactionChanges();
1661
- await loadLock(async () =>
1662
- store.setTransactionChanges(transactionChanges),
1663
- );
1664
- } else {
1665
- await loadLock(async () => {
1666
- try {
1667
- store.setContent(getContent?.() ?? (await getPersisted()));
1668
- } catch (error) {
1669
- onIgnoredError?.(error);
1670
- }
1671
- });
1672
- }
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
+ });
1673
1737
  },
1674
1738
  );
1675
1739
  return persister;
1676
1740
  },
1677
1741
  stopAutoLoad: () => {
1678
- if (listening) {
1679
- delPersisterListener(listeningHandle);
1680
- listeningHandle = void 0;
1681
- listening = 0;
1742
+ if (autoLoadHandle) {
1743
+ delPersisterListener(autoLoadHandle);
1744
+ autoLoadHandle = void 0;
1682
1745
  }
1683
1746
  return persister;
1684
1747
  },
1685
- save: async (getTransactionChanges) => {
1748
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
1749
+ save: async (getChanges2) => {
1686
1750
  /* istanbul ignore else */
1687
1751
  if (loadSave != 1) {
1688
1752
  loadSave = 2;
@@ -1691,7 +1755,7 @@ const createCustomPersister = (
1691
1755
  }
1692
1756
  await persister.schedule(async () => {
1693
1757
  try {
1694
- await setPersisted(store.getContent, getTransactionChanges);
1758
+ await setPersisted(getContent, getChanges2);
1695
1759
  } catch (error) {
1696
1760
  /* istanbul ignore next */
1697
1761
  onIgnoredError?.(error);
@@ -1703,21 +1767,20 @@ const createCustomPersister = (
1703
1767
  },
1704
1768
  startAutoSave: async () => {
1705
1769
  await persister.stopAutoSave().save();
1706
- listenerId = store.addDidFinishTransactionListener(
1707
- (_store, getTransactionChanges) => {
1708
- const [tableChanges, valueChanges] = getTransactionChanges();
1709
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
1710
- persister.save(() => [tableChanges, valueChanges]);
1711
- }
1712
- },
1713
- );
1770
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
1771
+ const changes = getChanges();
1772
+ if (hasChanges(changes)) {
1773
+ persister.save(() => changes);
1774
+ }
1775
+ });
1714
1776
  return persister;
1715
1777
  },
1716
1778
  stopAutoSave: () => {
1717
- ifNotUndefined(listenerId, store.delListener);
1718
- listenerId = void 0;
1779
+ ifNotUndefined(autoSaveListenerId, store.delListener);
1780
+ autoSaveListenerId = void 0;
1719
1781
  return persister;
1720
1782
  },
1783
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
1721
1784
  schedule: async (...actions) => {
1722
1785
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
1723
1786
  await run();
@@ -1726,10 +1789,8 @@ const createCustomPersister = (
1726
1789
  getStore: () => store,
1727
1790
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
1728
1791
  getStats: () => ({loads, saves}),
1792
+ ...extra,
1729
1793
  };
1730
- if (getThing) {
1731
- persister[getThing] = () => thing;
1732
- }
1733
1794
  return objFreeze(persister);
1734
1795
  };
1735
1796
 
@@ -1741,9 +1802,10 @@ const createStoragePersister = (
1741
1802
  storage,
1742
1803
  onIgnoredError,
1743
1804
  ) => {
1744
- const getPersisted = async () => jsonParse(storage.getItem(storageName));
1805
+ const getPersisted = async () =>
1806
+ jsonParseWithUndefined(storage.getItem(storageName));
1745
1807
  const setPersisted = async (getContent) =>
1746
- storage.setItem(storageName, jsonString(getContent()));
1808
+ storage.setItem(storageName, jsonStringWithUndefined(getContent()));
1747
1809
  const addPersisterListener = (listener) => {
1748
1810
  const storageListener = (event) => {
1749
1811
  if (event.storageArea === storage && event.key === storageName) {
@@ -1762,7 +1824,8 @@ const createStoragePersister = (
1762
1824
  addPersisterListener,
1763
1825
  delPersisterListener,
1764
1826
  onIgnoredError,
1765
- ['getStorageName', storageName],
1827
+ true,
1828
+ {getStorageName: () => storageName},
1766
1829
  );
1767
1830
  };
1768
1831
  const createSessionPersister = (store, storageName, onIgnoredError) =>
@@ -1869,18 +1932,6 @@ const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
1869
1932
  const defaultSorter = (sortKey1, sortKey2) =>
1870
1933
  (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
1871
1934
 
1872
- const validate = (obj, validateChild, onInvalidObj) => {
1873
- if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
1874
- onInvalidObj?.();
1875
- return false;
1876
- }
1877
- objMap(obj, (child, id2) => {
1878
- if (!validateChild(child, id2)) {
1879
- objDel(obj, id2);
1880
- }
1881
- });
1882
- return !objIsEmpty(obj);
1883
- };
1884
1935
  const idsChanged = (changedIds, id2, addedOrRemoved) =>
1885
1936
  mapSet(
1886
1937
  changedIds,
@@ -1890,11 +1941,10 @@ const idsChanged = (changedIds, id2, addedOrRemoved) =>
1890
1941
  const createStore = () => {
1891
1942
  let hasTablesSchema;
1892
1943
  let hasValuesSchema;
1893
- let cellsTouched = false;
1894
- let valuesTouched = false;
1895
1944
  let hadTables = false;
1896
1945
  let hadValues = false;
1897
1946
  let transactions = 0;
1947
+ let internalListeners = [];
1898
1948
  const changedTableIds = mapNew();
1899
1949
  const changedTableCellIds = mapNew();
1900
1950
  const changedRowCount = mapNew();
@@ -1941,13 +1991,13 @@ const createStore = () => {
1941
1991
  const [addListener, callListeners, delListenerImpl, callListenerImpl] =
1942
1992
  getListenerFunctions(() => store);
1943
1993
  const validateTablesSchema = (tableSchema) =>
1944
- validate(tableSchema, (tableSchema2) =>
1945
- validate(tableSchema2, validateCellOrValueSchema),
1994
+ objValidate(tableSchema, (tableSchema2) =>
1995
+ objValidate(tableSchema2, validateCellOrValueSchema),
1946
1996
  );
1947
1997
  const validateValuesSchema = (valuesSchema) =>
1948
- validate(valuesSchema, validateCellOrValueSchema);
1998
+ objValidate(valuesSchema, validateCellOrValueSchema);
1949
1999
  const validateCellOrValueSchema = (schema) => {
1950
- if (!validate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
2000
+ if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
1951
2001
  return false;
1952
2002
  }
1953
2003
  const type = schema[TYPE];
@@ -1960,18 +2010,18 @@ const createStore = () => {
1960
2010
  return true;
1961
2011
  };
1962
2012
  const validateTables = (tables) =>
1963
- validate(tables, validateTable, cellInvalid);
2013
+ objValidate(tables, validateTable, cellInvalid);
1964
2014
  const validateTable = (table, tableId) =>
1965
2015
  (!hasTablesSchema ||
1966
2016
  collHas(tablesSchemaMap, tableId) ||
1967
2017
  cellInvalid(tableId)) &&
1968
- validate(
2018
+ objValidate(
1969
2019
  table,
1970
2020
  (row, rowId) => validateRow(tableId, rowId, row),
1971
2021
  () => cellInvalid(tableId),
1972
2022
  );
1973
2023
  const validateRow = (tableId, rowId, row, skipDefaults) =>
1974
- validate(
2024
+ objValidate(
1975
2025
  skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
1976
2026
  (cell, cellId) =>
1977
2027
  ifNotUndefined(
@@ -1998,7 +2048,7 @@ const createStore = () => {
1998
2048
  ? cellInvalid(tableId, rowId, cellId, cell)
1999
2049
  : cell;
2000
2050
  const validateValues = (values, skipDefaults) =>
2001
- validate(
2051
+ objValidate(
2002
2052
  skipDefaults ? values : addDefaultsToValues(values),
2003
2053
  (value, valueId) =>
2004
2054
  ifNotUndefined(
@@ -2261,16 +2311,20 @@ const createStore = () => {
2261
2311
  addedOrRemoved,
2262
2312
  );
2263
2313
  };
2264
- const cellChanged = (tableId, rowId, cellId, oldCell, newCell) =>
2265
- (mapEnsure(
2314
+ const cellChanged = (tableId, rowId, cellId, oldCell, newCell) => {
2315
+ mapEnsure(
2266
2316
  mapEnsure(mapEnsure(changedCells, tableId, mapNew), rowId, mapNew),
2267
2317
  cellId,
2268
2318
  () => [oldCell, 0],
2269
- )[1] = newCell);
2319
+ )[1] = newCell;
2320
+ internalListeners[3]?.(tableId, rowId, cellId, newCell);
2321
+ };
2270
2322
  const valueIdsChanged = (valueId, addedOrRemoved) =>
2271
2323
  idsChanged(changedValueIds, valueId, addedOrRemoved);
2272
- const valueChanged = (valueId, oldValue, newValue) =>
2273
- (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
+ };
2274
2328
  const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
2275
2329
  arrayPush(
2276
2330
  mapEnsure(
@@ -2536,44 +2590,6 @@ const createStore = () => {
2536
2590
  transaction(() => actions(...arrayMap(args, id)));
2537
2591
  return store;
2538
2592
  };
2539
- const getTransactionChanges = () => [
2540
- mapToObj(
2541
- changedCells,
2542
- (table, tableId) =>
2543
- mapGet(changedTableIds, tableId) === -1
2544
- ? null
2545
- : mapToObj(
2546
- table,
2547
- (row, rowId) =>
2548
- mapGet(mapGet(changedRowIds, tableId), rowId) === -1
2549
- ? null
2550
- : mapToObj(
2551
- row,
2552
- ([, newCell]) => newCell ?? null,
2553
- (_, changedCell) => pairIsEqual(changedCell),
2554
- ),
2555
- objIsEmpty,
2556
- ),
2557
- objIsEmpty,
2558
- ),
2559
- mapToObj(
2560
- changedValues,
2561
- ([, newValue]) => newValue ?? null,
2562
- (_, changedValue) => pairIsEqual(changedValue),
2563
- ),
2564
- ];
2565
- const getTransactionLog = () => ({
2566
- cellsTouched,
2567
- valuesTouched,
2568
- changedCells: mapToObj3(changedCells, pairClone, pairIsEqual),
2569
- invalidCells: mapToObj3(invalidCells),
2570
- changedValues: mapToObj(changedValues, pairClone, pairIsEqual),
2571
- invalidValues: mapToObj(invalidValues),
2572
- changedTableIds: mapToObj(changedTableIds),
2573
- changedRowIds: mapToObj2(changedRowIds),
2574
- changedCellIds: mapToObj3(changedCellIds),
2575
- changedValueIds: mapToObj(changedValueIds),
2576
- });
2577
2593
  const getContent = () => [getTables(), getValues()];
2578
2594
  const getTables = () => mapToObj3(tablesMap);
2579
2595
  const getTableIds = () => mapKeys(tablesMap);
@@ -2617,12 +2633,13 @@ const createStore = () => {
2617
2633
  collHas(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId));
2618
2634
  const hasValues = () => !collIsEmpty(valuesMap);
2619
2635
  const hasValue = (valueId) => collHas(valuesMap, id(valueId));
2620
- const getTablesJson = () => jsonString(tablesMap);
2621
- const getValuesJson = () => jsonString(valuesMap);
2622
- const getJson = () => jsonString([tablesMap, valuesMap]);
2623
- const getTablesSchemaJson = () => jsonString(tablesSchemaMap);
2624
- const getValuesSchemaJson = () => jsonString(valuesSchemaMap);
2625
- 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]);
2626
2643
  const setContent = ([tables, values]) =>
2627
2644
  fluentTransaction(() => {
2628
2645
  (objIsEmpty(tables) ? delTables : setTables)(tables);
@@ -2666,7 +2683,7 @@ const createStore = () => {
2666
2683
  (tableId2, rowId2) => {
2667
2684
  if (validateRow(tableId2, rowId2, partialRow, 1)) {
2668
2685
  const table = getOrCreateTable(tableId2);
2669
- objMap(partialRow, (cell, cellId) =>
2686
+ objToArray(partialRow, (cell, cellId) =>
2670
2687
  setCellIntoDefaultRow(tableId2, table, rowId2, cellId, cell),
2671
2688
  );
2672
2689
  }
@@ -2704,7 +2721,7 @@ const createStore = () => {
2704
2721
  const setPartialValues = (partialValues) =>
2705
2722
  fluentTransaction(() =>
2706
2723
  validateValues(partialValues, 1)
2707
- ? objMap(partialValues, (value, valueId) =>
2724
+ ? objToArray(partialValues, (value, valueId) =>
2708
2725
  setValidValue(valueId, value),
2709
2726
  )
2710
2727
  : 0,
@@ -2721,20 +2738,20 @@ const createStore = () => {
2721
2738
  ),
2722
2739
  valueId,
2723
2740
  );
2724
- const setTransactionChanges = (transactionChanges) =>
2741
+ const applyChanges = (changes) =>
2725
2742
  fluentTransaction(() => {
2726
- objMap(transactionChanges[0], (table, tableId) =>
2743
+ objToArray(changes[0], (table, tableId) =>
2727
2744
  isUndefined(table)
2728
2745
  ? delTable(tableId)
2729
- : objMap(table, (row, rowId) =>
2746
+ : objToArray(table, (row, rowId) =>
2730
2747
  isUndefined(row)
2731
2748
  ? delRow(tableId, rowId)
2732
- : objMap(row, (cell, cellId) =>
2749
+ : objToArray(row, (cell, cellId) =>
2733
2750
  setOrDelCell(store, tableId, rowId, cellId, cell),
2734
2751
  ),
2735
2752
  ),
2736
2753
  );
2737
- objMap(transactionChanges[1], (value, valueId) =>
2754
+ objToArray(changes[1], (value, valueId) =>
2738
2755
  setOrDelValue(store, valueId, value),
2739
2756
  );
2740
2757
  });
@@ -2861,31 +2878,66 @@ const createStore = () => {
2861
2878
  transactions++;
2862
2879
  }
2863
2880
  if (transactions == 1) {
2864
- callListeners(
2865
- startTransactionListeners,
2866
- void 0,
2867
- getTransactionChanges,
2868
- getTransactionLog,
2869
- );
2881
+ internalListeners[0]?.();
2882
+ callListeners(startTransactionListeners, void 0);
2870
2883
  }
2871
2884
  return store;
2872
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
+ ];
2873
2927
  const finishTransaction = (doRollback) => {
2874
2928
  if (transactions > 0) {
2875
2929
  transactions--;
2876
2930
  if (transactions == 0) {
2877
- cellsTouched = !collIsEmpty(changedCells);
2878
- valuesTouched = !collIsEmpty(changedValues);
2879
2931
  transactions = 1;
2880
2932
  callInvalidCellListeners(1);
2881
- if (cellsTouched) {
2933
+ if (!collIsEmpty(changedCells)) {
2882
2934
  callTabularListenersForChanges(1);
2883
2935
  }
2884
2936
  callInvalidValueListeners(1);
2885
- if (valuesTouched) {
2937
+ if (!collIsEmpty(changedValues)) {
2886
2938
  callValuesListenersForChanges(1);
2887
2939
  }
2888
- if (doRollback?.(getTransactionChanges, getTransactionLog)) {
2940
+ if (doRollback?.(store)) {
2889
2941
  collForEach(changedCells, (table, tableId) =>
2890
2942
  collForEach(table, (row, rowId) =>
2891
2943
  collForEach(row, ([oldCell], cellId) =>
@@ -2893,34 +2945,26 @@ const createStore = () => {
2893
2945
  ),
2894
2946
  ),
2895
2947
  );
2948
+ collClear(changedCells);
2896
2949
  collForEach(changedValues, ([oldValue], valueId) =>
2897
2950
  setOrDelValue(store, valueId, oldValue),
2898
2951
  );
2899
- cellsTouched = valuesTouched = false;
2952
+ collClear(changedValues);
2900
2953
  }
2901
- callListeners(
2902
- finishTransactionListeners[0],
2903
- void 0,
2904
- getTransactionChanges,
2905
- getTransactionLog,
2906
- );
2954
+ callListeners(finishTransactionListeners[0], void 0);
2907
2955
  transactions = -1;
2908
2956
  callInvalidCellListeners(0);
2909
- if (cellsTouched) {
2957
+ if (!collIsEmpty(changedCells)) {
2910
2958
  callTabularListenersForChanges(0);
2911
2959
  }
2912
2960
  callInvalidValueListeners(0);
2913
- if (valuesTouched) {
2961
+ if (!collIsEmpty(changedValues)) {
2914
2962
  callValuesListenersForChanges(0);
2915
2963
  }
2916
- callListeners(
2917
- finishTransactionListeners[1],
2918
- void 0,
2919
- getTransactionChanges,
2920
- getTransactionLog,
2921
- );
2964
+ internalListeners[1]?.();
2965
+ callListeners(finishTransactionListeners[1], void 0);
2966
+ internalListeners[2]?.();
2922
2967
  transactions = 0;
2923
- cellsTouched = valuesTouched = false;
2924
2968
  hadTables = hasTables();
2925
2969
  hadValues = hasValues();
2926
2970
  arrayForEach(
@@ -3045,6 +3089,20 @@ const createStore = () => {
3045
3089
  collSize2(startTransactionListeners) +
3046
3090
  pairCollSize2(finishTransactionListeners),
3047
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
+ ]);
3048
3106
  const store = {
3049
3107
  getContent,
3050
3108
  getTables,
@@ -3085,7 +3143,7 @@ const createStore = () => {
3085
3143
  setValues,
3086
3144
  setPartialValues,
3087
3145
  setValue,
3088
- setTransactionChanges,
3146
+ applyChanges,
3089
3147
  setTablesJson,
3090
3148
  setValuesJson,
3091
3149
  setJson,
@@ -3103,6 +3161,8 @@ const createStore = () => {
3103
3161
  delSchema,
3104
3162
  transaction,
3105
3163
  startTransaction,
3164
+ getTransactionChanges,
3165
+ getTransactionLog,
3106
3166
  finishTransaction,
3107
3167
  forEachTable,
3108
3168
  forEachTableCell,
@@ -3120,8 +3180,9 @@ const createStore = () => {
3120
3180
  createStore,
3121
3181
  addListener,
3122
3182
  callListeners,
3183
+ setInternalListeners,
3123
3184
  };
3124
- objMap(
3185
+ objToArray(
3125
3186
  {
3126
3187
  [HAS + TABLES]: [0, hasTablesListeners, [], () => [hasTables()]],
3127
3188
  [TABLES]: [0, tablesListeners],
@@ -3202,10 +3263,13 @@ const App = ({position = 'right', open = false}) => {
3202
3263
  (s2) => createSessionPersister(s2, UNIQUE_ID),
3203
3264
  void 0,
3204
3265
  async (persister) => {
3205
- await persister.load(void 0, {
3206
- position: index == -1 ? 1 : index,
3207
- open: !!open,
3208
- });
3266
+ await persister.load([
3267
+ {},
3268
+ {
3269
+ position: index == -1 ? 1 : index,
3270
+ open: !!open,
3271
+ },
3272
+ ]);
3209
3273
  await persister.startAutoSave();
3210
3274
  },
3211
3275
  );