tinybase 5.0.0-beta.4 → 5.0.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) 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 -1
  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-powersync.cjs +1 -0
  32. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  34. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  36. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  38. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  39. package/lib/cjs/persisters/persister-sync.cjs +1 -0
  40. package/lib/cjs/persisters/persister-sync.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/tinybase.cjs +1 -1
  52. package/lib/cjs/tinybase.cjs.gz +0 -0
  53. package/lib/cjs/tools.cjs +1 -1
  54. package/lib/cjs/tools.cjs.gz +0 -0
  55. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  56. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  57. package/lib/cjs/ui-react.cjs +1 -1
  58. package/lib/cjs/ui-react.cjs.gz +0 -0
  59. package/lib/cjs-es6/checkpoints.cjs +1 -1
  60. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  61. package/lib/cjs-es6/indexes.cjs +1 -1
  62. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  63. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  64. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  65. package/lib/cjs-es6/metrics.cjs +1 -1
  66. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  70. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  84. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  88. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  90. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  92. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  94. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-sync.cjs +1 -0
  96. package/lib/cjs-es6/persisters/persister-sync.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  98. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters.cjs +1 -1
  100. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  101. package/lib/cjs-es6/queries.cjs +1 -1
  102. package/lib/cjs-es6/queries.cjs.gz +0 -0
  103. package/lib/cjs-es6/relationships.cjs +1 -1
  104. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  105. package/lib/cjs-es6/store.cjs +1 -1
  106. package/lib/cjs-es6/store.cjs.gz +0 -0
  107. package/lib/cjs-es6/tinybase.cjs +1 -1
  108. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  109. package/lib/cjs-es6/tools.cjs +1 -1
  110. package/lib/cjs-es6/tools.cjs.gz +0 -0
  111. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  112. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  113. package/lib/cjs-es6/ui-react.cjs +1 -1
  114. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  115. package/lib/debug/checkpoints.js +3 -1
  116. package/lib/debug/indexes.js +3 -1
  117. package/lib/debug/mergeable-store.js +403 -179
  118. package/lib/debug/metrics.js +3 -1
  119. package/lib/debug/persisters/persister-automerge.js +42 -47
  120. package/lib/debug/persisters/persister-browser.js +42 -47
  121. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +67 -61
  122. package/lib/debug/persisters/persister-electric-sql.js +67 -61
  123. package/lib/debug/persisters/persister-expo-sqlite-next.js +67 -61
  124. package/lib/debug/persisters/persister-expo-sqlite.js +67 -61
  125. package/lib/debug/persisters/persister-file.js +42 -47
  126. package/lib/debug/persisters/persister-indexed-db.js +42 -47
  127. package/lib/debug/persisters/persister-libsql.js +902 -0
  128. package/lib/debug/persisters/persister-partykit-client.js +42 -47
  129. package/lib/debug/persisters/persister-powersync.js +917 -0
  130. package/lib/debug/persisters/persister-remote.js +42 -47
  131. package/lib/debug/persisters/persister-sqlite-wasm.js +67 -61
  132. package/lib/debug/persisters/persister-sqlite3.js +67 -61
  133. package/lib/debug/persisters/persister-sync.js +594 -0
  134. package/lib/debug/persisters/persister-yjs.js +44 -49
  135. package/lib/debug/persisters.js +41 -46
  136. package/lib/debug/queries.js +7 -4
  137. package/lib/debug/relationships.js +3 -1
  138. package/lib/debug/store.js +51 -36
  139. package/lib/debug/tinybase.js +439 -223
  140. package/lib/debug/tools.js +9 -6
  141. package/lib/debug/ui-react-dom.js +88 -80
  142. package/lib/debug/ui-react.js +1 -1
  143. package/lib/es6/checkpoints.js +1 -1
  144. package/lib/es6/checkpoints.js.gz +0 -0
  145. package/lib/es6/indexes.js +1 -1
  146. package/lib/es6/indexes.js.gz +0 -0
  147. package/lib/es6/mergeable-store.js +1 -1
  148. package/lib/es6/mergeable-store.js.gz +0 -0
  149. package/lib/es6/metrics.js +1 -1
  150. package/lib/es6/metrics.js.gz +0 -0
  151. package/lib/es6/persisters/persister-automerge.js +1 -1
  152. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  153. package/lib/es6/persisters/persister-browser.js +1 -1
  154. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  155. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  156. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  157. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  158. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  159. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  160. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  161. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  162. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  163. package/lib/es6/persisters/persister-file.js +1 -1
  164. package/lib/es6/persisters/persister-file.js.gz +0 -0
  165. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  166. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  167. package/lib/es6/persisters/persister-libsql.js +1 -0
  168. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  169. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  170. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  171. package/lib/es6/persisters/persister-powersync.js +1 -0
  172. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  173. package/lib/es6/persisters/persister-remote.js +1 -1
  174. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  175. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  176. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  177. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  178. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  179. package/lib/es6/persisters/persister-sync.js +1 -0
  180. package/lib/es6/persisters/persister-sync.js.gz +0 -0
  181. package/lib/es6/persisters/persister-yjs.js +1 -1
  182. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  183. package/lib/es6/persisters.js +1 -1
  184. package/lib/es6/persisters.js.gz +0 -0
  185. package/lib/es6/queries.js +1 -1
  186. package/lib/es6/queries.js.gz +0 -0
  187. package/lib/es6/relationships.js +1 -1
  188. package/lib/es6/relationships.js.gz +0 -0
  189. package/lib/es6/store.js +1 -1
  190. package/lib/es6/store.js.gz +0 -0
  191. package/lib/es6/tinybase.js +1 -1
  192. package/lib/es6/tinybase.js.gz +0 -0
  193. package/lib/es6/tools.js +1 -1
  194. package/lib/es6/tools.js.gz +0 -0
  195. package/lib/es6/ui-react-dom-debug.js +1 -1
  196. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  197. package/lib/es6/ui-react.js +1 -1
  198. package/lib/es6/ui-react.js.gz +0 -0
  199. package/lib/indexes.js +1 -1
  200. package/lib/indexes.js.gz +0 -0
  201. package/lib/mergeable-store.js +1 -1
  202. package/lib/mergeable-store.js.gz +0 -0
  203. package/lib/metrics.js +1 -1
  204. package/lib/metrics.js.gz +0 -0
  205. package/lib/persisters/persister-automerge.js +1 -1
  206. package/lib/persisters/persister-automerge.js.gz +0 -0
  207. package/lib/persisters/persister-browser.js +1 -1
  208. package/lib/persisters/persister-browser.js.gz +0 -0
  209. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  210. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  211. package/lib/persisters/persister-electric-sql.js +1 -1
  212. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  213. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  214. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  215. package/lib/persisters/persister-expo-sqlite.js +1 -1
  216. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  217. package/lib/persisters/persister-file.js +1 -1
  218. package/lib/persisters/persister-file.js.gz +0 -0
  219. package/lib/persisters/persister-indexed-db.js +1 -1
  220. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  221. package/lib/persisters/persister-libsql.js +1 -0
  222. package/lib/persisters/persister-libsql.js.gz +0 -0
  223. package/lib/persisters/persister-partykit-client.js +1 -1
  224. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  225. package/lib/persisters/persister-powersync.js +1 -0
  226. package/lib/persisters/persister-powersync.js.gz +0 -0
  227. package/lib/persisters/persister-remote.js +1 -1
  228. package/lib/persisters/persister-remote.js.gz +0 -0
  229. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  230. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  231. package/lib/persisters/persister-sqlite3.js +1 -1
  232. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  233. package/lib/persisters/persister-sync.js +1 -0
  234. package/lib/persisters/persister-sync.js.gz +0 -0
  235. package/lib/persisters/persister-yjs.js +1 -1
  236. package/lib/persisters/persister-yjs.js.gz +0 -0
  237. package/lib/persisters.js +1 -1
  238. package/lib/persisters.js.gz +0 -0
  239. package/lib/queries.js +1 -1
  240. package/lib/queries.js.gz +0 -0
  241. package/lib/relationships.js +1 -1
  242. package/lib/relationships.js.gz +0 -0
  243. package/lib/store.js +1 -1
  244. package/lib/store.js.gz +0 -0
  245. package/lib/tinybase.js +1 -1
  246. package/lib/tinybase.js.gz +0 -0
  247. package/lib/tools.js +1 -1
  248. package/lib/tools.js.gz +0 -0
  249. package/lib/types/checkpoints.d.ts +2 -2
  250. package/lib/types/indexes.d.ts +2 -2
  251. package/lib/types/mergeable-store.d.ts +143 -20
  252. package/lib/types/metrics.d.ts +2 -2
  253. package/lib/types/persisters/persister-automerge.d.ts +3 -0
  254. package/lib/types/persisters/persister-browser.d.ts +9 -2
  255. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +3 -0
  256. package/lib/types/persisters/persister-electric-sql.d.ts +3 -0
  257. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +3 -0
  258. package/lib/types/persisters/persister-expo-sqlite.d.ts +3 -0
  259. package/lib/types/persisters/persister-file.d.ts +5 -1
  260. package/lib/types/persisters/persister-indexed-db.d.ts +3 -0
  261. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  262. package/lib/types/persisters/persister-partykit-client.d.ts +3 -0
  263. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  264. package/lib/types/persisters/persister-remote.d.ts +3 -0
  265. package/lib/types/persisters/persister-sqlite-wasm.d.ts +3 -0
  266. package/lib/types/persisters/persister-sqlite3.d.ts +3 -0
  267. package/lib/types/persisters/persister-sync.d.ts +182 -0
  268. package/lib/types/persisters/persister-yjs.d.ts +5 -2
  269. package/lib/types/persisters.d.ts +61 -3
  270. package/lib/types/queries.d.ts +2 -2
  271. package/lib/types/relationships.d.ts +2 -2
  272. package/lib/types/store.d.ts +36 -3
  273. package/lib/types/tinybase.d.ts +9 -9
  274. package/lib/types/tools.d.ts +2 -2
  275. package/lib/types/ui-react.d.ts +8 -8
  276. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  277. package/lib/types/with-schemas/indexes.d.ts +2 -2
  278. package/lib/types/with-schemas/mergeable-store.d.ts +415 -40
  279. package/lib/types/with-schemas/metrics.d.ts +2 -2
  280. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +4 -1
  281. package/lib/types/with-schemas/persisters/persister-browser.d.ts +13 -6
  282. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +4 -1
  283. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +4 -1
  284. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +4 -1
  285. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +4 -1
  286. package/lib/types/with-schemas/persisters/persister-file.d.ts +7 -3
  287. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +4 -1
  288. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  289. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +4 -1
  290. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  291. package/lib/types/with-schemas/persisters/persister-remote.d.ts +4 -1
  292. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +4 -1
  293. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +4 -1
  294. package/lib/types/with-schemas/persisters/persister-sync.d.ts +195 -0
  295. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +6 -3
  296. package/lib/types/with-schemas/persisters.d.ts +80 -7
  297. package/lib/types/with-schemas/queries.d.ts +3 -3
  298. package/lib/types/with-schemas/relationships.d.ts +2 -2
  299. package/lib/types/with-schemas/store.d.ts +136 -89
  300. package/lib/types/with-schemas/tinybase.d.ts +9 -9
  301. package/lib/types/with-schemas/tools.d.ts +2 -2
  302. package/lib/types/with-schemas/ui-react.d.ts +8 -8
  303. package/lib/ui-react.js +1 -1
  304. package/lib/ui-react.js.gz +0 -0
  305. package/lib/umd/checkpoints.js +1 -1
  306. package/lib/umd/checkpoints.js.gz +0 -0
  307. package/lib/umd/indexes.js +1 -1
  308. package/lib/umd/indexes.js.gz +0 -0
  309. package/lib/umd/mergeable-store.js +1 -1
  310. package/lib/umd/mergeable-store.js.gz +0 -0
  311. package/lib/umd/metrics.js +1 -1
  312. package/lib/umd/metrics.js.gz +0 -0
  313. package/lib/umd/persisters/persister-automerge.js +1 -1
  314. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  315. package/lib/umd/persisters/persister-browser.js +1 -1
  316. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  317. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  318. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  319. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  320. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  321. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  322. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  323. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  324. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  325. package/lib/umd/persisters/persister-file.js +1 -1
  326. package/lib/umd/persisters/persister-file.js.gz +0 -0
  327. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  328. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  329. package/lib/umd/persisters/persister-libsql.js +1 -0
  330. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  331. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  332. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  333. package/lib/umd/persisters/persister-powersync.js +1 -0
  334. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  335. package/lib/umd/persisters/persister-remote.js +1 -1
  336. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  337. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  338. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  339. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  340. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  341. package/lib/umd/persisters/persister-sync.js +1 -0
  342. package/lib/umd/persisters/persister-sync.js.gz +0 -0
  343. package/lib/umd/persisters/persister-yjs.js +1 -1
  344. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  345. package/lib/umd/persisters.js +1 -1
  346. package/lib/umd/persisters.js.gz +0 -0
  347. package/lib/umd/queries.js +1 -1
  348. package/lib/umd/queries.js.gz +0 -0
  349. package/lib/umd/relationships.js +1 -1
  350. package/lib/umd/relationships.js.gz +0 -0
  351. package/lib/umd/store.js +1 -1
  352. package/lib/umd/store.js.gz +0 -0
  353. package/lib/umd/tinybase.js +1 -1
  354. package/lib/umd/tinybase.js.gz +0 -0
  355. package/lib/umd/tools.js +1 -1
  356. package/lib/umd/tools.js.gz +0 -0
  357. package/lib/umd/ui-react-dom-debug.js +1 -1
  358. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  359. package/lib/umd/ui-react.js +1 -1
  360. package/lib/umd/ui-react.js.gz +0 -0
  361. package/lib/umd-es6/checkpoints.js +1 -1
  362. package/lib/umd-es6/checkpoints.js.gz +0 -0
  363. package/lib/umd-es6/indexes.js +1 -1
  364. package/lib/umd-es6/indexes.js.gz +0 -0
  365. package/lib/umd-es6/mergeable-store.js +1 -1
  366. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  367. package/lib/umd-es6/metrics.js +1 -1
  368. package/lib/umd-es6/metrics.js.gz +0 -0
  369. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  370. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  371. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  372. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  373. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  374. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  375. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  376. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  377. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  378. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  379. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  380. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  381. package/lib/umd-es6/persisters/persister-file.js +1 -1
  382. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  383. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  384. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  385. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  386. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  387. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  388. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  389. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  390. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  391. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  392. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  393. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  394. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  395. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  396. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  397. package/lib/umd-es6/persisters/persister-sync.js +1 -0
  398. package/lib/umd-es6/persisters/persister-sync.js.gz +0 -0
  399. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  400. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  401. package/lib/umd-es6/persisters.js +1 -1
  402. package/lib/umd-es6/persisters.js.gz +0 -0
  403. package/lib/umd-es6/queries.js +1 -1
  404. package/lib/umd-es6/queries.js.gz +0 -0
  405. package/lib/umd-es6/relationships.js +1 -1
  406. package/lib/umd-es6/relationships.js.gz +0 -0
  407. package/lib/umd-es6/store.js +1 -1
  408. package/lib/umd-es6/store.js.gz +0 -0
  409. package/lib/umd-es6/tinybase.js +1 -1
  410. package/lib/umd-es6/tinybase.js.gz +0 -0
  411. package/lib/umd-es6/tools.js +1 -1
  412. package/lib/umd-es6/tools.js.gz +0 -0
  413. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  414. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  415. package/lib/umd-es6/ui-react.js +1 -1
  416. package/lib/umd-es6/ui-react.js.gz +0 -0
  417. package/package.json +51 -35
  418. package/readme.md +2 -2
@@ -22,8 +22,6 @@ const arrayShift = (array) => array.shift();
22
22
  const object = Object;
23
23
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
24
24
  const objEntries = object.entries;
25
- const objIds = object.keys;
26
- const objFreeze = object.freeze;
27
25
  const isObject = (obj) =>
28
26
  !isUndefined(obj) &&
29
27
  ifNotUndefined(
@@ -34,6 +32,8 @@ const isObject = (obj) =>
34
32
  /* istanbul ignore next */
35
33
  () => true,
36
34
  );
35
+ const objIds = object.keys;
36
+ const objFreeze = object.freeze;
37
37
  const objNew = (entries = []) => object.fromEntries(entries);
38
38
  const objHas = (obj, id) => id in obj;
39
39
  const objToArray = (obj, cb) =>
@@ -57,16 +57,17 @@ const mapForEach = (map, cb) =>
57
57
  collForEach(map, (value, key) => cb(key, value));
58
58
  const mapSet = (map, key, value) =>
59
59
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
60
- const mapEnsure = (map, key, getDefaultValue) => {
60
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
61
61
  if (!collHas(map, key)) {
62
62
  mapSet(map, key, getDefaultValue());
63
+ } else {
64
+ hadExistingValue?.(mapGet(map, key));
63
65
  }
64
66
  return mapGet(map, key);
65
67
  };
66
68
 
67
69
  const scheduleRunning = mapNew();
68
70
  const scheduleActions = mapNew();
69
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
70
71
  const getStoreFunctions = (supportsMergeableStore, store) =>
71
72
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
72
73
  ? [
@@ -91,16 +92,15 @@ const createCustomPersister = (
91
92
  delPersisterListener,
92
93
  onIgnoredError,
93
94
  supportsMergeableStore,
94
- [getThing, thing] = [],
95
+ extra = {},
95
96
  scheduleId = [],
96
97
  ) => {
97
- let listenerId;
98
98
  let loadSave = 0;
99
99
  let loads = 0;
100
100
  let saves = 0;
101
- let listening = 0;
102
101
  let action;
103
- let listeningHandle;
102
+ let autoLoadHandle;
103
+ let autoSaveListenerId;
104
104
  mapEnsure(scheduleRunning, scheduleId, () => 0);
105
105
  mapEnsure(scheduleActions, scheduleId, () => []);
106
106
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -136,55 +136,51 @@ const createCustomPersister = (
136
136
  }
137
137
  return persister;
138
138
  };
139
+ const setContentOrChanges = (contentOrChanges) => {
140
+ (isMergeableStore && isString(contentOrChanges?.[0])
141
+ ? contentOrChanges?.[1][2] === 1
142
+ ? store.applyMergeableChanges
143
+ : store.setMergeableContent
144
+ : contentOrChanges?.[2] === 1
145
+ ? store.applyChanges
146
+ : store.setContent)(contentOrChanges);
147
+ };
139
148
  const persister = {
140
149
  load: async (initialTables, initialValues) =>
141
150
  await loadLock(async () => {
142
151
  try {
143
- const content = await getPersisted();
144
- (isMergeableStore && isMergeable(content)
145
- ? store.setMergeableContent
146
- : store.setContent)(content);
147
- } catch {
152
+ setContentOrChanges(await getPersisted());
153
+ } catch (error) {
154
+ onIgnoredError?.(error);
148
155
  store.setContent([initialTables, initialValues]);
149
156
  }
150
157
  }),
151
158
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
152
- persister.stopAutoLoad();
153
- await persister.load(initialTables, initialValues);
154
- listening = 1;
155
- listeningHandle = addPersisterListener(
159
+ await persister.stopAutoLoad().load(initialTables, initialValues);
160
+ autoLoadHandle = addPersisterListener(
156
161
  async (getContent2, getChanges2) => {
157
- if (getChanges2) {
158
- const changes = getChanges2();
159
- await loadLock(async () =>
160
- (isMergeableStore && isMergeable(changes)
161
- ? store.applyMergeableChanges
162
- : store.applyChanges)(changes),
163
- );
164
- } else {
165
- await loadLock(async () => {
166
- try {
167
- const content = getContent2?.() ?? (await getPersisted());
168
- (isMergeableStore && isMergeable(content)
169
- ? store.setMergeableContent
170
- : store.setContent)(content);
171
- } catch (error) {
172
- onIgnoredError?.(error);
173
- }
174
- });
175
- }
162
+ const changes = getChanges2?.();
163
+ await loadLock(async () => {
164
+ try {
165
+ setContentOrChanges(
166
+ changes ?? getContent2?.() ?? (await getPersisted()),
167
+ );
168
+ } catch (error) {
169
+ onIgnoredError?.(error);
170
+ }
171
+ });
176
172
  },
177
173
  );
178
174
  return persister;
179
175
  },
180
176
  stopAutoLoad: () => {
181
- if (listening) {
182
- delPersisterListener(listeningHandle);
183
- listeningHandle = void 0;
184
- listening = 0;
177
+ if (autoLoadHandle) {
178
+ delPersisterListener(autoLoadHandle);
179
+ autoLoadHandle = void 0;
185
180
  }
186
181
  return persister;
187
182
  },
183
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
188
184
  save: async (getChanges2) => {
189
185
  /* istanbul ignore else */
190
186
  if (loadSave != 1) {
@@ -206,7 +202,7 @@ const createCustomPersister = (
206
202
  },
207
203
  startAutoSave: async () => {
208
204
  await persister.stopAutoSave().save();
209
- listenerId = store.addDidFinishTransactionListener(() => {
205
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
210
206
  const changes = getChanges();
211
207
  if (hasChanges(changes)) {
212
208
  persister.save(() => changes);
@@ -215,10 +211,11 @@ const createCustomPersister = (
215
211
  return persister;
216
212
  },
217
213
  stopAutoSave: () => {
218
- ifNotUndefined(listenerId, store.delListener);
219
- listenerId = void 0;
214
+ ifNotUndefined(autoSaveListenerId, store.delListener);
215
+ autoSaveListenerId = void 0;
220
216
  return persister;
221
217
  },
218
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
222
219
  schedule: async (...actions) => {
223
220
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
224
221
  await run();
@@ -227,10 +224,8 @@ const createCustomPersister = (
227
224
  getStore: () => store,
228
225
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
229
226
  getStats: () => ({loads, saves}),
227
+ ...extra,
230
228
  };
231
- if (getThing) {
232
- persister[getThing] = () => thing;
233
- }
234
229
  return objFreeze(persister);
235
230
  };
236
231
 
@@ -238,7 +233,7 @@ const DELETE = 'delete';
238
233
  const getYContent = (yContent) => [yContent.get(T), yContent.get(V)];
239
234
  const getChangesFromYDoc = (yContent, events) => {
240
235
  if (size(events) == 1 && arrayIsEmpty(events[0].path)) {
241
- return [yContent.get(T).toJSON(), yContent.get(V).toJSON()];
236
+ return [yContent.get(T).toJSON(), yContent.get(V).toJSON(), 1];
242
237
  }
243
238
  const [yTables, yValues] = getYContent(yContent);
244
239
  const tables = {};
@@ -284,7 +279,7 @@ const getChangesFromYDoc = (yContent, events) => {
284
279
  (values[valueId] = action == DELETE ? null : yValues.get(valueId)),
285
280
  ),
286
281
  );
287
- return [tables, values];
282
+ return [tables, values, 1];
288
283
  };
289
284
  const applyChangesToYDoc = (yContent, getContent, getChanges) => {
290
285
  if (!yContent.size) {
@@ -403,7 +398,7 @@ const createYjsPersister = (
403
398
  delPersisterListener,
404
399
  onIgnoredError,
405
400
  false,
406
- ['getYDoc', yDoc],
401
+ {getYDoc: () => yDoc},
407
402
  );
408
403
  };
409
404
 
@@ -13,8 +13,6 @@ const arrayShift = (array) => array.shift();
13
13
 
14
14
  const object = Object;
15
15
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
16
- const objIds = object.keys;
17
- const objFreeze = object.freeze;
18
16
  const isObject = (obj) =>
19
17
  !isUndefined(obj) &&
20
18
  ifNotUndefined(
@@ -25,6 +23,8 @@ const isObject = (obj) =>
25
23
  /* istanbul ignore next */
26
24
  () => true,
27
25
  );
26
+ const objIds = object.keys;
27
+ const objFreeze = object.freeze;
28
28
  const objSize = (obj) => size(objIds(obj));
29
29
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
30
30
 
@@ -35,16 +35,17 @@ const mapNew = (entries) => new Map(entries);
35
35
  const mapGet = (map, key) => map?.get(key);
36
36
  const mapSet = (map, key, value) =>
37
37
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
38
- const mapEnsure = (map, key, getDefaultValue) => {
38
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
39
39
  if (!collHas(map, key)) {
40
40
  mapSet(map, key, getDefaultValue());
41
+ } else {
42
+ hadExistingValue?.(mapGet(map, key));
41
43
  }
42
44
  return mapGet(map, key);
43
45
  };
44
46
 
45
47
  const scheduleRunning = mapNew();
46
48
  const scheduleActions = mapNew();
47
- const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
48
49
  const getStoreFunctions = (supportsMergeableStore, store) =>
49
50
  !supportsMergeableStore || isUndefined(store.getMergeableContent)
50
51
  ? [
@@ -69,16 +70,15 @@ const createCustomPersister = (
69
70
  delPersisterListener,
70
71
  onIgnoredError,
71
72
  supportsMergeableStore,
72
- [getThing, thing] = [],
73
+ extra = {},
73
74
  scheduleId = [],
74
75
  ) => {
75
- let listenerId;
76
76
  let loadSave = 0;
77
77
  let loads = 0;
78
78
  let saves = 0;
79
- let listening = 0;
80
79
  let action;
81
- let listeningHandle;
80
+ let autoLoadHandle;
81
+ let autoSaveListenerId;
82
82
  mapEnsure(scheduleRunning, scheduleId, () => 0);
83
83
  mapEnsure(scheduleActions, scheduleId, () => []);
84
84
  const [isMergeableStore, getContent, getChanges, hasChanges] =
@@ -114,55 +114,51 @@ const createCustomPersister = (
114
114
  }
115
115
  return persister;
116
116
  };
117
+ const setContentOrChanges = (contentOrChanges) => {
118
+ (isMergeableStore && isString(contentOrChanges?.[0])
119
+ ? contentOrChanges?.[1][2] === 1
120
+ ? store.applyMergeableChanges
121
+ : store.setMergeableContent
122
+ : contentOrChanges?.[2] === 1
123
+ ? store.applyChanges
124
+ : store.setContent)(contentOrChanges);
125
+ };
117
126
  const persister = {
118
127
  load: async (initialTables, initialValues) =>
119
128
  await loadLock(async () => {
120
129
  try {
121
- const content = await getPersisted();
122
- (isMergeableStore && isMergeable(content)
123
- ? store.setMergeableContent
124
- : store.setContent)(content);
125
- } catch {
130
+ setContentOrChanges(await getPersisted());
131
+ } catch (error) {
132
+ onIgnoredError?.(error);
126
133
  store.setContent([initialTables, initialValues]);
127
134
  }
128
135
  }),
129
136
  startAutoLoad: async (initialTables = {}, initialValues = {}) => {
130
- persister.stopAutoLoad();
131
- await persister.load(initialTables, initialValues);
132
- listening = 1;
133
- listeningHandle = addPersisterListener(
137
+ await persister.stopAutoLoad().load(initialTables, initialValues);
138
+ autoLoadHandle = addPersisterListener(
134
139
  async (getContent2, getChanges2) => {
135
- if (getChanges2) {
136
- const changes = getChanges2();
137
- await loadLock(async () =>
138
- (isMergeableStore && isMergeable(changes)
139
- ? store.applyMergeableChanges
140
- : store.applyChanges)(changes),
141
- );
142
- } else {
143
- await loadLock(async () => {
144
- try {
145
- const content = getContent2?.() ?? (await getPersisted());
146
- (isMergeableStore && isMergeable(content)
147
- ? store.setMergeableContent
148
- : store.setContent)(content);
149
- } catch (error) {
150
- onIgnoredError?.(error);
151
- }
152
- });
153
- }
140
+ const changes = getChanges2?.();
141
+ await loadLock(async () => {
142
+ try {
143
+ setContentOrChanges(
144
+ changes ?? getContent2?.() ?? (await getPersisted()),
145
+ );
146
+ } catch (error) {
147
+ onIgnoredError?.(error);
148
+ }
149
+ });
154
150
  },
155
151
  );
156
152
  return persister;
157
153
  },
158
154
  stopAutoLoad: () => {
159
- if (listening) {
160
- delPersisterListener(listeningHandle);
161
- listeningHandle = void 0;
162
- listening = 0;
155
+ if (autoLoadHandle) {
156
+ delPersisterListener(autoLoadHandle);
157
+ autoLoadHandle = void 0;
163
158
  }
164
159
  return persister;
165
160
  },
161
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
166
162
  save: async (getChanges2) => {
167
163
  /* istanbul ignore else */
168
164
  if (loadSave != 1) {
@@ -184,7 +180,7 @@ const createCustomPersister = (
184
180
  },
185
181
  startAutoSave: async () => {
186
182
  await persister.stopAutoSave().save();
187
- listenerId = store.addDidFinishTransactionListener(() => {
183
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
188
184
  const changes = getChanges();
189
185
  if (hasChanges(changes)) {
190
186
  persister.save(() => changes);
@@ -193,10 +189,11 @@ const createCustomPersister = (
193
189
  return persister;
194
190
  },
195
191
  stopAutoSave: () => {
196
- ifNotUndefined(listenerId, store.delListener);
197
- listenerId = void 0;
192
+ ifNotUndefined(autoSaveListenerId, store.delListener);
193
+ autoSaveListenerId = void 0;
198
194
  return persister;
199
195
  },
196
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
200
197
  schedule: async (...actions) => {
201
198
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
202
199
  await run();
@@ -205,10 +202,8 @@ const createCustomPersister = (
205
202
  getStore: () => store,
206
203
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
207
204
  getStats: () => ({loads, saves}),
205
+ ...extra,
208
206
  };
209
- if (getThing) {
210
- persister[getThing] = () => thing;
211
- }
212
207
  return objFreeze(persister);
213
208
  };
214
209
 
@@ -66,9 +66,11 @@ const mapForEach = (map, cb) =>
66
66
  collForEach(map, (value, key) => cb(key, value));
67
67
  const mapSet = (map, key, value) =>
68
68
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
69
- const mapEnsure = (map, key, getDefaultValue) => {
69
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
70
70
  if (!collHas(map, key)) {
71
71
  mapSet(map, key, getDefaultValue());
72
+ } else {
73
+ hadExistingValue?.(mapGet(map, key));
72
74
  }
73
75
  return mapGet(map, key);
74
76
  };
@@ -171,9 +173,10 @@ const getAggregateValue = (
171
173
  : aggregateValue;
172
174
  };
173
175
 
174
- const getCellOrValueType = (cell) => {
175
- const type = getTypeOf(cell);
176
- return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
176
+ const getCellOrValueType = (cellOrValue) => {
177
+ const type = getTypeOf(cellOrValue);
178
+ return isTypeStringOrBoolean(type) ||
179
+ (type == NUMBER && isFiniteNumber(cellOrValue))
177
180
  ? type
178
181
  : void 0;
179
182
  };
@@ -42,9 +42,11 @@ const mapForEach = (map, cb) =>
42
42
  collForEach(map, (value, key) => cb(key, value));
43
43
  const mapSet = (map, key, value) =>
44
44
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
45
- const mapEnsure = (map, key, getDefaultValue) => {
45
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
46
46
  if (!collHas(map, key)) {
47
47
  mapSet(map, key, getDefaultValue());
48
+ } else {
49
+ hadExistingValue?.(mapGet(map, key));
48
50
  }
49
51
  return mapGet(map, key);
50
52
  };
@@ -50,9 +50,7 @@ const arrayShift = (array) => array.shift();
50
50
  const object = Object;
51
51
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
52
52
  const objEntries = object.entries;
53
- const objIds = object.keys;
54
53
  const objFrozen = object.isFrozen;
55
- const objFreeze = object.freeze;
56
54
  const isObject = (obj) =>
57
55
  !isUndefined(obj) &&
58
56
  ifNotUndefined(
@@ -63,6 +61,8 @@ const isObject = (obj) =>
63
61
  /* istanbul ignore next */
64
62
  () => true,
65
63
  );
64
+ const objIds = object.keys;
65
+ const objFreeze = object.freeze;
66
66
  const objHas = (obj, id) => id in obj;
67
67
  const objDel = (obj, id) => {
68
68
  delete obj[id];
@@ -72,6 +72,23 @@ const objToArray = (obj, cb) =>
72
72
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
73
73
  const objSize = (obj) => size(objIds(obj));
74
74
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
75
+ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
76
+ if (
77
+ isUndefined(obj) ||
78
+ !isObject(obj) ||
79
+ (!emptyIsValid && objIsEmpty(obj)) ||
80
+ objFrozen(obj)
81
+ ) {
82
+ onInvalidObj?.();
83
+ return false;
84
+ }
85
+ objToArray(obj, (child, id) => {
86
+ if (!validateChild(child, id)) {
87
+ objDel(obj, id);
88
+ }
89
+ });
90
+ return emptyIsValid ? true : !objIsEmpty(obj);
91
+ };
75
92
 
76
93
  const collSizeN = (collSizer) => (coll) =>
77
94
  arrayReduce(collValues(coll), (total, coll2) => total + collSizer(coll2), 0);
@@ -95,9 +112,11 @@ const mapMap = (coll, cb) =>
95
112
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
96
113
  const mapSet = (map, key, value) =>
97
114
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
98
- const mapEnsure = (map, key, getDefaultValue) => {
115
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
99
116
  if (!collHas(map, key)) {
100
117
  mapSet(map, key, getDefaultValue());
118
+ } else {
119
+ hadExistingValue?.(mapGet(map, key));
101
120
  }
102
121
  return mapGet(map, key);
103
122
  };
@@ -106,24 +125,28 @@ const mapMatch = (map, obj, set, del = mapSet) => {
106
125
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
107
126
  return map;
108
127
  };
109
- const mapToObj = (map, mapValue, excludeValue) => {
128
+ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
110
129
  const obj = {};
111
- collForEach(map, (value, id) => {
112
- const mappedValue = mapValue ? mapValue(value, id) : value;
113
- excludeValue?.(mappedValue, value) ? 0 : (obj[id] = mappedValue);
130
+ collForEach(map, (mapValue, id) => {
131
+ if (!excludeMapValue?.(mapValue, id)) {
132
+ const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
133
+ excludeObjValue?.(objValue) ? 0 : (obj[id] = objValue);
134
+ }
114
135
  });
115
136
  return obj;
116
137
  };
117
- const mapToObj2 = (map, mapValue, excludeValue) =>
138
+ const mapToObj2 = (map, valueMapper, excludeMapValue) =>
118
139
  mapToObj(
119
140
  map,
120
- (childMap) => mapToObj(childMap, mapValue, excludeValue),
141
+ (childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
142
+ collIsEmpty,
121
143
  objIsEmpty,
122
144
  );
123
- const mapToObj3 = (map, mapValue, excludeValue) =>
145
+ const mapToObj3 = (map, valueMapper, excludeMapValue) =>
124
146
  mapToObj(
125
147
  map,
126
- (childMap) => mapToObj2(childMap, mapValue, excludeValue),
148
+ (childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
149
+ collIsEmpty,
127
150
  objIsEmpty,
128
151
  );
129
152
  const mapClone = (map, mapValue) => {
@@ -253,9 +276,10 @@ const pairNewMap = () => [mapNew(), mapNew()];
253
276
  const pairClone = (array) => [...array];
254
277
  const pairIsEqual = ([entry1, entry2]) => entry1 === entry2;
255
278
 
256
- const getCellOrValueType = (cell) => {
257
- const type = getTypeOf(cell);
258
- return isTypeStringOrBoolean(type) || (type == NUMBER && isFiniteNumber(cell))
279
+ const getCellOrValueType = (cellOrValue) => {
280
+ const type = getTypeOf(cellOrValue);
281
+ return isTypeStringOrBoolean(type) ||
282
+ (type == NUMBER && isFiniteNumber(cellOrValue))
259
283
  ? type
260
284
  : void 0;
261
285
  };
@@ -275,18 +299,6 @@ const jsonParse = JSON.parse;
275
299
  const defaultSorter = (sortKey1, sortKey2) =>
276
300
  (sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
277
301
 
278
- const validate = (obj, validateChild, onInvalidObj) => {
279
- if (isUndefined(obj) || !isObject(obj) || objIsEmpty(obj) || objFrozen(obj)) {
280
- onInvalidObj?.();
281
- return false;
282
- }
283
- objToArray(obj, (child, id2) => {
284
- if (!validateChild(child, id2)) {
285
- objDel(obj, id2);
286
- }
287
- });
288
- return !objIsEmpty(obj);
289
- };
290
302
  const idsChanged = (changedIds, id2, addedOrRemoved) =>
291
303
  mapSet(
292
304
  changedIds,
@@ -346,13 +358,13 @@ const createStore = () => {
346
358
  const [addListener, callListeners, delListenerImpl, callListenerImpl] =
347
359
  getListenerFunctions(() => store);
348
360
  const validateTablesSchema = (tableSchema) =>
349
- validate(tableSchema, (tableSchema2) =>
350
- validate(tableSchema2, validateCellOrValueSchema),
361
+ objValidate(tableSchema, (tableSchema2) =>
362
+ objValidate(tableSchema2, validateCellOrValueSchema),
351
363
  );
352
364
  const validateValuesSchema = (valuesSchema) =>
353
- validate(valuesSchema, validateCellOrValueSchema);
365
+ objValidate(valuesSchema, validateCellOrValueSchema);
354
366
  const validateCellOrValueSchema = (schema) => {
355
- if (!validate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
367
+ if (!objValidate(schema, (_child, id2) => arrayHas([TYPE, DEFAULT], id2))) {
356
368
  return false;
357
369
  }
358
370
  const type = schema[TYPE];
@@ -365,18 +377,18 @@ const createStore = () => {
365
377
  return true;
366
378
  };
367
379
  const validateTables = (tables) =>
368
- validate(tables, validateTable, cellInvalid);
380
+ objValidate(tables, validateTable, cellInvalid);
369
381
  const validateTable = (table, tableId) =>
370
382
  (!hasTablesSchema ||
371
383
  collHas(tablesSchemaMap, tableId) ||
372
384
  cellInvalid(tableId)) &&
373
- validate(
385
+ objValidate(
374
386
  table,
375
387
  (row, rowId) => validateRow(tableId, rowId, row),
376
388
  () => cellInvalid(tableId),
377
389
  );
378
390
  const validateRow = (tableId, rowId, row, skipDefaults) =>
379
- validate(
391
+ objValidate(
380
392
  skipDefaults ? row : addDefaultsToRow(row, tableId, rowId),
381
393
  (cell, cellId) =>
382
394
  ifNotUndefined(
@@ -403,7 +415,7 @@ const createStore = () => {
403
415
  ? cellInvalid(tableId, rowId, cellId, cell)
404
416
  : cell;
405
417
  const validateValues = (values, skipDefaults) =>
406
- validate(
418
+ objValidate(
407
419
  skipDefaults ? values : addDefaultsToValues(values),
408
420
  (value, valueId) =>
409
421
  ifNotUndefined(
@@ -1246,17 +1258,20 @@ const createStore = () => {
1246
1258
  : mapToObj(
1247
1259
  row,
1248
1260
  ([, newCell]) => newCell,
1249
- (_, changedCell) => pairIsEqual(changedCell),
1261
+ (changedCell) => pairIsEqual(changedCell),
1250
1262
  ),
1263
+ collIsEmpty,
1251
1264
  objIsEmpty,
1252
1265
  ),
1266
+ collIsEmpty,
1253
1267
  objIsEmpty,
1254
1268
  ),
1255
1269
  mapToObj(
1256
1270
  changedValues,
1257
1271
  ([, newValue]) => newValue,
1258
- (_, changedValue) => pairIsEqual(changedValue),
1272
+ (changedValue) => pairIsEqual(changedValue),
1259
1273
  ),
1274
+ 1,
1260
1275
  ];
1261
1276
  const getTransactionLog = () => [
1262
1277
  !collIsEmpty(changedCells),