tinybase 5.0.0-beta.3 → 5.0.0-beta.5

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 (336) 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-remote.cjs +1 -1
  32. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  34. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  36. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  38. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  39. package/lib/cjs/persisters.cjs +1 -1
  40. package/lib/cjs/persisters.cjs.gz +0 -0
  41. package/lib/cjs/queries.cjs +1 -1
  42. package/lib/cjs/queries.cjs.gz +0 -0
  43. package/lib/cjs/relationships.cjs +1 -1
  44. package/lib/cjs/relationships.cjs.gz +0 -0
  45. package/lib/cjs/store.cjs +1 -1
  46. package/lib/cjs/store.cjs.gz +0 -0
  47. package/lib/cjs/tinybase.cjs +1 -1
  48. package/lib/cjs/tinybase.cjs.gz +0 -0
  49. package/lib/cjs/tools.cjs +1 -1
  50. package/lib/cjs/tools.cjs.gz +0 -0
  51. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  52. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  53. package/lib/cjs-es6/checkpoints.cjs +1 -1
  54. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  55. package/lib/cjs-es6/indexes.cjs +1 -1
  56. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  57. package/lib/cjs-es6/mergeable-store.cjs +1 -1
  58. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  59. package/lib/cjs-es6/metrics.cjs +1 -1
  60. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  70. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  74. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  75. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  76. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  78. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  88. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters.cjs +1 -1
  90. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  91. package/lib/cjs-es6/queries.cjs +1 -1
  92. package/lib/cjs-es6/queries.cjs.gz +0 -0
  93. package/lib/cjs-es6/relationships.cjs +1 -1
  94. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  95. package/lib/cjs-es6/store.cjs +1 -1
  96. package/lib/cjs-es6/store.cjs.gz +0 -0
  97. package/lib/cjs-es6/tinybase.cjs +1 -1
  98. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  99. package/lib/cjs-es6/tools.cjs +1 -1
  100. package/lib/cjs-es6/tools.cjs.gz +0 -0
  101. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  102. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  103. package/lib/debug/checkpoints.js +3 -1
  104. package/lib/debug/indexes.js +3 -1
  105. package/lib/debug/mergeable-store.js +247 -139
  106. package/lib/debug/metrics.js +3 -1
  107. package/lib/debug/persisters/persister-automerge.js +36 -12
  108. package/lib/debug/persisters/persister-browser.js +37 -13
  109. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +36 -12
  110. package/lib/debug/persisters/persister-electric-sql.js +36 -12
  111. package/lib/debug/persisters/persister-expo-sqlite-next.js +36 -12
  112. package/lib/debug/persisters/persister-expo-sqlite.js +36 -12
  113. package/lib/debug/persisters/persister-file.js +37 -13
  114. package/lib/debug/persisters/persister-indexed-db.js +36 -12
  115. package/lib/debug/persisters/persister-libsql.js +898 -0
  116. package/lib/debug/persisters/persister-partykit-client.js +36 -12
  117. package/lib/debug/persisters/persister-remote.js +36 -12
  118. package/lib/debug/persisters/persister-sqlite-wasm.js +36 -12
  119. package/lib/debug/persisters/persister-sqlite3.js +36 -12
  120. package/lib/debug/persisters/persister-yjs.js +36 -12
  121. package/lib/debug/persisters.js +36 -12
  122. package/lib/debug/queries.js +7 -4
  123. package/lib/debug/relationships.js +3 -1
  124. package/lib/debug/store.js +21 -22
  125. package/lib/debug/tinybase.js +279 -150
  126. package/lib/debug/tools.js +7 -4
  127. package/lib/debug/ui-react-dom.js +55 -34
  128. package/lib/es6/checkpoints.js +1 -1
  129. package/lib/es6/checkpoints.js.gz +0 -0
  130. package/lib/es6/indexes.js +1 -1
  131. package/lib/es6/indexes.js.gz +0 -0
  132. package/lib/es6/mergeable-store.js +1 -1
  133. package/lib/es6/mergeable-store.js.gz +0 -0
  134. package/lib/es6/metrics.js +1 -1
  135. package/lib/es6/metrics.js.gz +0 -0
  136. package/lib/es6/persisters/persister-automerge.js +1 -1
  137. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  138. package/lib/es6/persisters/persister-browser.js +1 -1
  139. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  140. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  141. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  142. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  143. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  144. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  145. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  146. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  147. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  148. package/lib/es6/persisters/persister-file.js +1 -1
  149. package/lib/es6/persisters/persister-file.js.gz +0 -0
  150. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  151. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  152. package/lib/es6/persisters/persister-libsql.js +1 -0
  153. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  154. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  155. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  156. package/lib/es6/persisters/persister-remote.js +1 -1
  157. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  158. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  159. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  160. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  161. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  162. package/lib/es6/persisters/persister-yjs.js +1 -1
  163. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  164. package/lib/es6/persisters.js +1 -1
  165. package/lib/es6/persisters.js.gz +0 -0
  166. package/lib/es6/queries.js +1 -1
  167. package/lib/es6/queries.js.gz +0 -0
  168. package/lib/es6/relationships.js +1 -1
  169. package/lib/es6/relationships.js.gz +0 -0
  170. package/lib/es6/store.js +1 -1
  171. package/lib/es6/store.js.gz +0 -0
  172. package/lib/es6/tinybase.js +1 -1
  173. package/lib/es6/tinybase.js.gz +0 -0
  174. package/lib/es6/tools.js +1 -1
  175. package/lib/es6/tools.js.gz +0 -0
  176. package/lib/es6/ui-react-dom-debug.js +1 -1
  177. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  178. package/lib/indexes.js +1 -1
  179. package/lib/indexes.js.gz +0 -0
  180. package/lib/mergeable-store.js +1 -1
  181. package/lib/mergeable-store.js.gz +0 -0
  182. package/lib/metrics.js +1 -1
  183. package/lib/metrics.js.gz +0 -0
  184. package/lib/persisters/persister-automerge.js +1 -1
  185. package/lib/persisters/persister-automerge.js.gz +0 -0
  186. package/lib/persisters/persister-browser.js +1 -1
  187. package/lib/persisters/persister-browser.js.gz +0 -0
  188. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  189. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  190. package/lib/persisters/persister-electric-sql.js +1 -1
  191. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  192. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  193. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  194. package/lib/persisters/persister-expo-sqlite.js +1 -1
  195. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  196. package/lib/persisters/persister-file.js +1 -1
  197. package/lib/persisters/persister-file.js.gz +0 -0
  198. package/lib/persisters/persister-indexed-db.js +1 -1
  199. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  200. package/lib/persisters/persister-libsql.js +1 -0
  201. package/lib/persisters/persister-libsql.js.gz +0 -0
  202. package/lib/persisters/persister-partykit-client.js +1 -1
  203. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  204. package/lib/persisters/persister-remote.js +1 -1
  205. package/lib/persisters/persister-remote.js.gz +0 -0
  206. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  207. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  208. package/lib/persisters/persister-sqlite3.js +1 -1
  209. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  210. package/lib/persisters/persister-yjs.js +1 -1
  211. package/lib/persisters/persister-yjs.js.gz +0 -0
  212. package/lib/persisters.js +1 -1
  213. package/lib/persisters.js.gz +0 -0
  214. package/lib/queries.js +1 -1
  215. package/lib/queries.js.gz +0 -0
  216. package/lib/relationships.js +1 -1
  217. package/lib/relationships.js.gz +0 -0
  218. package/lib/store.js +1 -1
  219. package/lib/store.js.gz +0 -0
  220. package/lib/tinybase.js +1 -1
  221. package/lib/tinybase.js.gz +0 -0
  222. package/lib/tools.js +1 -1
  223. package/lib/tools.js.gz +0 -0
  224. package/lib/types/mergeable-store.d.ts +78 -11
  225. package/lib/types/persisters/persister-browser.d.ts +2 -2
  226. package/lib/types/persisters/persister-file.d.ts +1 -1
  227. package/lib/types/persisters/persister-libsql.d.ts +139 -0
  228. package/lib/types/persisters.d.ts +19 -7
  229. package/lib/types/with-schemas/mergeable-store.d.ts +314 -31
  230. package/lib/types/with-schemas/persisters/persister-browser.d.ts +2 -2
  231. package/lib/types/with-schemas/persisters/persister-file.d.ts +1 -1
  232. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +152 -0
  233. package/lib/types/with-schemas/persisters.d.ts +14 -6
  234. package/lib/types/with-schemas/store.d.ts +37 -87
  235. package/lib/umd/checkpoints.js +1 -1
  236. package/lib/umd/checkpoints.js.gz +0 -0
  237. package/lib/umd/indexes.js +1 -1
  238. package/lib/umd/indexes.js.gz +0 -0
  239. package/lib/umd/mergeable-store.js +1 -1
  240. package/lib/umd/mergeable-store.js.gz +0 -0
  241. package/lib/umd/metrics.js +1 -1
  242. package/lib/umd/metrics.js.gz +0 -0
  243. package/lib/umd/persisters/persister-automerge.js +1 -1
  244. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  245. package/lib/umd/persisters/persister-browser.js +1 -1
  246. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  247. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  248. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  249. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  250. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  251. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  252. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  253. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  254. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  255. package/lib/umd/persisters/persister-file.js +1 -1
  256. package/lib/umd/persisters/persister-file.js.gz +0 -0
  257. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  258. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  259. package/lib/umd/persisters/persister-libsql.js +1 -0
  260. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  261. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  262. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  263. package/lib/umd/persisters/persister-remote.js +1 -1
  264. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  265. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  266. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  267. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  268. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  269. package/lib/umd/persisters/persister-yjs.js +1 -1
  270. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  271. package/lib/umd/persisters.js +1 -1
  272. package/lib/umd/persisters.js.gz +0 -0
  273. package/lib/umd/queries.js +1 -1
  274. package/lib/umd/queries.js.gz +0 -0
  275. package/lib/umd/relationships.js +1 -1
  276. package/lib/umd/relationships.js.gz +0 -0
  277. package/lib/umd/store.js +1 -1
  278. package/lib/umd/store.js.gz +0 -0
  279. package/lib/umd/tinybase.js +1 -1
  280. package/lib/umd/tinybase.js.gz +0 -0
  281. package/lib/umd/tools.js +1 -1
  282. package/lib/umd/tools.js.gz +0 -0
  283. package/lib/umd/ui-react-dom-debug.js +1 -1
  284. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  285. package/lib/umd-es6/checkpoints.js +1 -1
  286. package/lib/umd-es6/checkpoints.js.gz +0 -0
  287. package/lib/umd-es6/indexes.js +1 -1
  288. package/lib/umd-es6/indexes.js.gz +0 -0
  289. package/lib/umd-es6/mergeable-store.js +1 -1
  290. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  291. package/lib/umd-es6/metrics.js +1 -1
  292. package/lib/umd-es6/metrics.js.gz +0 -0
  293. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  294. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  295. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  296. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  297. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  298. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  299. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  300. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  301. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  302. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  303. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  304. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  305. package/lib/umd-es6/persisters/persister-file.js +1 -1
  306. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  307. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  308. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  309. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  310. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  311. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  312. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  313. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  314. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  315. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  316. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  317. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  318. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  319. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  320. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  321. package/lib/umd-es6/persisters.js +1 -1
  322. package/lib/umd-es6/persisters.js.gz +0 -0
  323. package/lib/umd-es6/queries.js +1 -1
  324. package/lib/umd-es6/queries.js.gz +0 -0
  325. package/lib/umd-es6/relationships.js +1 -1
  326. package/lib/umd-es6/relationships.js.gz +0 -0
  327. package/lib/umd-es6/store.js +1 -1
  328. package/lib/umd-es6/store.js.gz +0 -0
  329. package/lib/umd-es6/tinybase.js +1 -1
  330. package/lib/umd-es6/tinybase.js.gz +0 -0
  331. package/lib/umd-es6/tools.js +1 -1
  332. package/lib/umd-es6/tools.js.gz +0 -0
  333. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  334. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  335. package/package.json +35 -30
  336. package/readme.md +2 -2
@@ -59,15 +59,34 @@ const mapNew = (entries) => new Map(entries);
59
59
  const mapGet = (map, key) => map?.get(key);
60
60
  const mapSet = (map, key, value) =>
61
61
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
62
- const mapEnsure = (map, key, getDefaultValue) => {
62
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
63
63
  if (!collHas(map, key)) {
64
64
  mapSet(map, key, getDefaultValue());
65
+ } else {
66
+ hadExistingValue?.(mapGet(map, key));
65
67
  }
66
68
  return mapGet(map, key);
67
69
  };
68
70
 
69
71
  const scheduleRunning = mapNew();
70
72
  const scheduleActions = mapNew();
73
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
74
+ const getStoreFunctions = (supportsMergeableStore, store) =>
75
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
76
+ ? [
77
+ 0,
78
+ store.getContent,
79
+ store.getTransactionChanges,
80
+ ([changedTables, changedValues]) =>
81
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
82
+ ]
83
+ : [
84
+ 1,
85
+ store.getMergeableContent,
86
+ store.getTransactionMergeableChanges,
87
+ ([, [[, changedTables], [, changedValues]]]) =>
88
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
89
+ ];
71
90
  const createCustomPersister = (
72
91
  store,
73
92
  getPersisted,
@@ -88,10 +107,8 @@ const createCustomPersister = (
88
107
  let listeningHandle;
89
108
  mapEnsure(scheduleRunning, scheduleId, () => 0);
90
109
  mapEnsure(scheduleActions, scheduleId, () => []);
91
- const getContent =
92
- (supportsMergeableStore ? store.getMergeableContent : null) ??
93
- store.getContent;
94
- const getChanges = store.getTransactionChanges;
110
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
111
+ getStoreFunctions(supportsMergeableStore, store);
95
112
  const run = async () => {
96
113
  /* istanbul ignore else */
97
114
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -128,8 +145,8 @@ const createCustomPersister = (
128
145
  await loadLock(async () => {
129
146
  try {
130
147
  const content = await getPersisted();
131
- (supportsMergeableStore && isString(content[0])
132
- ? store.applyMergeableChanges
148
+ (isMergeableStore && isMergeable(content)
149
+ ? store.setMergeableContent
133
150
  : store.setContent)(content);
134
151
  } catch {
135
152
  store.setContent([initialTables, initialValues]);
@@ -143,11 +160,18 @@ const createCustomPersister = (
143
160
  async (getContent2, getChanges2) => {
144
161
  if (getChanges2) {
145
162
  const changes = getChanges2();
146
- await loadLock(async () => store.applyChanges(changes));
163
+ await loadLock(async () =>
164
+ (isMergeableStore && isMergeable(changes)
165
+ ? store.applyMergeableChanges
166
+ : store.applyChanges)(changes),
167
+ );
147
168
  } else {
148
169
  await loadLock(async () => {
149
170
  try {
150
- store.setContent(getContent2?.() ?? (await getPersisted()));
171
+ const content = getContent2?.() ?? (await getPersisted());
172
+ (isMergeableStore && isMergeable(content)
173
+ ? store.setMergeableContent
174
+ : store.setContent)(content);
151
175
  } catch (error) {
152
176
  onIgnoredError?.(error);
153
177
  }
@@ -187,9 +211,9 @@ const createCustomPersister = (
187
211
  startAutoSave: async () => {
188
212
  await persister.stopAutoSave().save();
189
213
  listenerId = store.addDidFinishTransactionListener(() => {
190
- const [tableChanges, valueChanges] = getChanges();
191
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
192
- persister.save(() => [tableChanges, valueChanges]);
214
+ const changes = getChanges();
215
+ if (hasChanges(changes)) {
216
+ persister.save(() => changes);
193
217
  }
194
218
  });
195
219
  return persister;
@@ -47,15 +47,34 @@ const mapNew = (entries) => new Map(entries);
47
47
  const mapGet = (map, key) => map?.get(key);
48
48
  const mapSet = (map, key, value) =>
49
49
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
50
- const mapEnsure = (map, key, getDefaultValue) => {
50
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
51
51
  if (!collHas(map, key)) {
52
52
  mapSet(map, key, getDefaultValue());
53
+ } else {
54
+ hadExistingValue?.(mapGet(map, key));
53
55
  }
54
56
  return mapGet(map, key);
55
57
  };
56
58
 
57
59
  const scheduleRunning = mapNew();
58
60
  const scheduleActions = mapNew();
61
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
62
+ const getStoreFunctions = (supportsMergeableStore, store) =>
63
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
64
+ ? [
65
+ 0,
66
+ store.getContent,
67
+ store.getTransactionChanges,
68
+ ([changedTables, changedValues]) =>
69
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
70
+ ]
71
+ : [
72
+ 1,
73
+ store.getMergeableContent,
74
+ store.getTransactionMergeableChanges,
75
+ ([, [[, changedTables], [, changedValues]]]) =>
76
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
77
+ ];
59
78
  const createCustomPersister = (
60
79
  store,
61
80
  getPersisted,
@@ -76,10 +95,8 @@ const createCustomPersister = (
76
95
  let listeningHandle;
77
96
  mapEnsure(scheduleRunning, scheduleId, () => 0);
78
97
  mapEnsure(scheduleActions, scheduleId, () => []);
79
- const getContent =
80
- (supportsMergeableStore ? store.getMergeableContent : null) ??
81
- store.getContent;
82
- const getChanges = store.getTransactionChanges;
98
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
99
+ getStoreFunctions(supportsMergeableStore, store);
83
100
  const run = async () => {
84
101
  /* istanbul ignore else */
85
102
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -116,8 +133,8 @@ const createCustomPersister = (
116
133
  await loadLock(async () => {
117
134
  try {
118
135
  const content = await getPersisted();
119
- (supportsMergeableStore && isString(content[0])
120
- ? store.applyMergeableChanges
136
+ (isMergeableStore && isMergeable(content)
137
+ ? store.setMergeableContent
121
138
  : store.setContent)(content);
122
139
  } catch {
123
140
  store.setContent([initialTables, initialValues]);
@@ -131,11 +148,18 @@ const createCustomPersister = (
131
148
  async (getContent2, getChanges2) => {
132
149
  if (getChanges2) {
133
150
  const changes = getChanges2();
134
- await loadLock(async () => store.applyChanges(changes));
151
+ await loadLock(async () =>
152
+ (isMergeableStore && isMergeable(changes)
153
+ ? store.applyMergeableChanges
154
+ : store.applyChanges)(changes),
155
+ );
135
156
  } else {
136
157
  await loadLock(async () => {
137
158
  try {
138
- store.setContent(getContent2?.() ?? (await getPersisted()));
159
+ const content = getContent2?.() ?? (await getPersisted());
160
+ (isMergeableStore && isMergeable(content)
161
+ ? store.setMergeableContent
162
+ : store.setContent)(content);
139
163
  } catch (error) {
140
164
  onIgnoredError?.(error);
141
165
  }
@@ -175,9 +199,9 @@ const createCustomPersister = (
175
199
  startAutoSave: async () => {
176
200
  await persister.stopAutoSave().save();
177
201
  listenerId = store.addDidFinishTransactionListener(() => {
178
- const [tableChanges, valueChanges] = getChanges();
179
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
180
- persister.save(() => [tableChanges, valueChanges]);
202
+ const changes = getChanges();
203
+ if (hasChanges(changes)) {
204
+ persister.save(() => changes);
181
205
  }
182
206
  });
183
207
  return persister;
@@ -75,9 +75,11 @@ const mapMap = (coll, cb) =>
75
75
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
76
76
  const mapSet = (map, key, value) =>
77
77
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
78
- const mapEnsure = (map, key, getDefaultValue) => {
78
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
79
79
  if (!collHas(map, key)) {
80
80
  mapSet(map, key, getDefaultValue());
81
+ } else {
82
+ hadExistingValue?.(mapGet(map, key));
81
83
  }
82
84
  return mapGet(map, key);
83
85
  };
@@ -376,6 +378,23 @@ const jsonParse = JSON.parse;
376
378
 
377
379
  const scheduleRunning = mapNew();
378
380
  const scheduleActions = mapNew();
381
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
382
+ const getStoreFunctions = (supportsMergeableStore, store) =>
383
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
384
+ ? [
385
+ 0,
386
+ store.getContent,
387
+ store.getTransactionChanges,
388
+ ([changedTables, changedValues]) =>
389
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
390
+ ]
391
+ : [
392
+ 1,
393
+ store.getMergeableContent,
394
+ store.getTransactionMergeableChanges,
395
+ ([, [[, changedTables], [, changedValues]]]) =>
396
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
397
+ ];
379
398
  const createCustomPersister = (
380
399
  store,
381
400
  getPersisted,
@@ -396,10 +415,8 @@ const createCustomPersister = (
396
415
  let listeningHandle;
397
416
  mapEnsure(scheduleRunning, scheduleId, () => 0);
398
417
  mapEnsure(scheduleActions, scheduleId, () => []);
399
- const getContent =
400
- (supportsMergeableStore ? store.getMergeableContent : null) ??
401
- store.getContent;
402
- const getChanges = store.getTransactionChanges;
418
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
419
+ getStoreFunctions(supportsMergeableStore, store);
403
420
  const run = async () => {
404
421
  /* istanbul ignore else */
405
422
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -436,8 +453,8 @@ const createCustomPersister = (
436
453
  await loadLock(async () => {
437
454
  try {
438
455
  const content = await getPersisted();
439
- (supportsMergeableStore && isString(content[0])
440
- ? store.applyMergeableChanges
456
+ (isMergeableStore && isMergeable(content)
457
+ ? store.setMergeableContent
441
458
  : store.setContent)(content);
442
459
  } catch {
443
460
  store.setContent([initialTables, initialValues]);
@@ -451,11 +468,18 @@ const createCustomPersister = (
451
468
  async (getContent2, getChanges2) => {
452
469
  if (getChanges2) {
453
470
  const changes = getChanges2();
454
- await loadLock(async () => store.applyChanges(changes));
471
+ await loadLock(async () =>
472
+ (isMergeableStore && isMergeable(changes)
473
+ ? store.applyMergeableChanges
474
+ : store.applyChanges)(changes),
475
+ );
455
476
  } else {
456
477
  await loadLock(async () => {
457
478
  try {
458
- store.setContent(getContent2?.() ?? (await getPersisted()));
479
+ const content = getContent2?.() ?? (await getPersisted());
480
+ (isMergeableStore && isMergeable(content)
481
+ ? store.setMergeableContent
482
+ : store.setContent)(content);
459
483
  } catch (error) {
460
484
  onIgnoredError?.(error);
461
485
  }
@@ -495,9 +519,9 @@ const createCustomPersister = (
495
519
  startAutoSave: async () => {
496
520
  await persister.stopAutoSave().save();
497
521
  listenerId = store.addDidFinishTransactionListener(() => {
498
- const [tableChanges, valueChanges] = getChanges();
499
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
500
- persister.save(() => [tableChanges, valueChanges]);
522
+ const changes = getChanges();
523
+ if (hasChanges(changes)) {
524
+ persister.save(() => changes);
501
525
  }
502
526
  });
503
527
  return persister;
@@ -76,9 +76,11 @@ const mapMap = (coll, cb) =>
76
76
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
77
77
  const mapSet = (map, key, value) =>
78
78
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
79
- const mapEnsure = (map, key, getDefaultValue) => {
79
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
80
80
  if (!collHas(map, key)) {
81
81
  mapSet(map, key, getDefaultValue());
82
+ } else {
83
+ hadExistingValue?.(mapGet(map, key));
82
84
  }
83
85
  return mapGet(map, key);
84
86
  };
@@ -377,6 +379,23 @@ const jsonParse = JSON.parse;
377
379
 
378
380
  const scheduleRunning = mapNew();
379
381
  const scheduleActions = mapNew();
382
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
383
+ const getStoreFunctions = (supportsMergeableStore, store) =>
384
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
385
+ ? [
386
+ 0,
387
+ store.getContent,
388
+ store.getTransactionChanges,
389
+ ([changedTables, changedValues]) =>
390
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
391
+ ]
392
+ : [
393
+ 1,
394
+ store.getMergeableContent,
395
+ store.getTransactionMergeableChanges,
396
+ ([, [[, changedTables], [, changedValues]]]) =>
397
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
398
+ ];
380
399
  const createCustomPersister = (
381
400
  store,
382
401
  getPersisted,
@@ -397,10 +416,8 @@ const createCustomPersister = (
397
416
  let listeningHandle;
398
417
  mapEnsure(scheduleRunning, scheduleId, () => 0);
399
418
  mapEnsure(scheduleActions, scheduleId, () => []);
400
- const getContent =
401
- (supportsMergeableStore ? store.getMergeableContent : null) ??
402
- store.getContent;
403
- const getChanges = store.getTransactionChanges;
419
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
420
+ getStoreFunctions(supportsMergeableStore, store);
404
421
  const run = async () => {
405
422
  /* istanbul ignore else */
406
423
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -437,8 +454,8 @@ const createCustomPersister = (
437
454
  await loadLock(async () => {
438
455
  try {
439
456
  const content = await getPersisted();
440
- (supportsMergeableStore && isString(content[0])
441
- ? store.applyMergeableChanges
457
+ (isMergeableStore && isMergeable(content)
458
+ ? store.setMergeableContent
442
459
  : store.setContent)(content);
443
460
  } catch {
444
461
  store.setContent([initialTables, initialValues]);
@@ -452,11 +469,18 @@ const createCustomPersister = (
452
469
  async (getContent2, getChanges2) => {
453
470
  if (getChanges2) {
454
471
  const changes = getChanges2();
455
- await loadLock(async () => store.applyChanges(changes));
472
+ await loadLock(async () =>
473
+ (isMergeableStore && isMergeable(changes)
474
+ ? store.applyMergeableChanges
475
+ : store.applyChanges)(changes),
476
+ );
456
477
  } else {
457
478
  await loadLock(async () => {
458
479
  try {
459
- store.setContent(getContent2?.() ?? (await getPersisted()));
480
+ const content = getContent2?.() ?? (await getPersisted());
481
+ (isMergeableStore && isMergeable(content)
482
+ ? store.setMergeableContent
483
+ : store.setContent)(content);
460
484
  } catch (error) {
461
485
  onIgnoredError?.(error);
462
486
  }
@@ -496,9 +520,9 @@ const createCustomPersister = (
496
520
  startAutoSave: async () => {
497
521
  await persister.stopAutoSave().save();
498
522
  listenerId = store.addDidFinishTransactionListener(() => {
499
- const [tableChanges, valueChanges] = getChanges();
500
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
501
- persister.save(() => [tableChanges, valueChanges]);
523
+ const changes = getChanges();
524
+ if (hasChanges(changes)) {
525
+ persister.save(() => changes);
502
526
  }
503
527
  });
504
528
  return persister;
@@ -57,15 +57,34 @@ 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();
71
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
72
+ const getStoreFunctions = (supportsMergeableStore, store) =>
73
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
74
+ ? [
75
+ 0,
76
+ store.getContent,
77
+ store.getTransactionChanges,
78
+ ([changedTables, changedValues]) =>
79
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
80
+ ]
81
+ : [
82
+ 1,
83
+ store.getMergeableContent,
84
+ store.getTransactionMergeableChanges,
85
+ ([, [[, changedTables], [, changedValues]]]) =>
86
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
87
+ ];
69
88
  const createCustomPersister = (
70
89
  store,
71
90
  getPersisted,
@@ -86,10 +105,8 @@ const createCustomPersister = (
86
105
  let listeningHandle;
87
106
  mapEnsure(scheduleRunning, scheduleId, () => 0);
88
107
  mapEnsure(scheduleActions, scheduleId, () => []);
89
- const getContent =
90
- (supportsMergeableStore ? store.getMergeableContent : null) ??
91
- store.getContent;
92
- const getChanges = store.getTransactionChanges;
108
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
109
+ getStoreFunctions(supportsMergeableStore, store);
93
110
  const run = async () => {
94
111
  /* istanbul ignore else */
95
112
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -126,8 +143,8 @@ const createCustomPersister = (
126
143
  await loadLock(async () => {
127
144
  try {
128
145
  const content = await getPersisted();
129
- (supportsMergeableStore && isString(content[0])
130
- ? store.applyMergeableChanges
146
+ (isMergeableStore && isMergeable(content)
147
+ ? store.setMergeableContent
131
148
  : store.setContent)(content);
132
149
  } catch {
133
150
  store.setContent([initialTables, initialValues]);
@@ -141,11 +158,18 @@ const createCustomPersister = (
141
158
  async (getContent2, getChanges2) => {
142
159
  if (getChanges2) {
143
160
  const changes = getChanges2();
144
- await loadLock(async () => store.applyChanges(changes));
161
+ await loadLock(async () =>
162
+ (isMergeableStore && isMergeable(changes)
163
+ ? store.applyMergeableChanges
164
+ : store.applyChanges)(changes),
165
+ );
145
166
  } else {
146
167
  await loadLock(async () => {
147
168
  try {
148
- store.setContent(getContent2?.() ?? (await getPersisted()));
169
+ const content = getContent2?.() ?? (await getPersisted());
170
+ (isMergeableStore && isMergeable(content)
171
+ ? store.setMergeableContent
172
+ : store.setContent)(content);
149
173
  } catch (error) {
150
174
  onIgnoredError?.(error);
151
175
  }
@@ -185,9 +209,9 @@ const createCustomPersister = (
185
209
  startAutoSave: async () => {
186
210
  await persister.stopAutoSave().save();
187
211
  listenerId = store.addDidFinishTransactionListener(() => {
188
- const [tableChanges, valueChanges] = getChanges();
189
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
190
- persister.save(() => [tableChanges, valueChanges]);
212
+ const changes = getChanges();
213
+ if (hasChanges(changes)) {
214
+ persister.save(() => changes);
191
215
  }
192
216
  });
193
217
  return persister;
@@ -35,15 +35,34 @@ 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();
49
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
50
+ const getStoreFunctions = (supportsMergeableStore, store) =>
51
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
52
+ ? [
53
+ 0,
54
+ store.getContent,
55
+ store.getTransactionChanges,
56
+ ([changedTables, changedValues]) =>
57
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
58
+ ]
59
+ : [
60
+ 1,
61
+ store.getMergeableContent,
62
+ store.getTransactionMergeableChanges,
63
+ ([, [[, changedTables], [, changedValues]]]) =>
64
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
65
+ ];
47
66
  const createCustomPersister = (
48
67
  store,
49
68
  getPersisted,
@@ -64,10 +83,8 @@ const createCustomPersister = (
64
83
  let listeningHandle;
65
84
  mapEnsure(scheduleRunning, scheduleId, () => 0);
66
85
  mapEnsure(scheduleActions, scheduleId, () => []);
67
- const getContent =
68
- (supportsMergeableStore ? store.getMergeableContent : null) ??
69
- store.getContent;
70
- const getChanges = store.getTransactionChanges;
86
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
87
+ getStoreFunctions(supportsMergeableStore, store);
71
88
  const run = async () => {
72
89
  /* istanbul ignore else */
73
90
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -104,8 +121,8 @@ const createCustomPersister = (
104
121
  await loadLock(async () => {
105
122
  try {
106
123
  const content = await getPersisted();
107
- (supportsMergeableStore && isString(content[0])
108
- ? store.applyMergeableChanges
124
+ (isMergeableStore && isMergeable(content)
125
+ ? store.setMergeableContent
109
126
  : store.setContent)(content);
110
127
  } catch {
111
128
  store.setContent([initialTables, initialValues]);
@@ -119,11 +136,18 @@ const createCustomPersister = (
119
136
  async (getContent2, getChanges2) => {
120
137
  if (getChanges2) {
121
138
  const changes = getChanges2();
122
- await loadLock(async () => store.applyChanges(changes));
139
+ await loadLock(async () =>
140
+ (isMergeableStore && isMergeable(changes)
141
+ ? store.applyMergeableChanges
142
+ : store.applyChanges)(changes),
143
+ );
123
144
  } else {
124
145
  await loadLock(async () => {
125
146
  try {
126
- store.setContent(getContent2?.() ?? (await getPersisted()));
147
+ const content = getContent2?.() ?? (await getPersisted());
148
+ (isMergeableStore && isMergeable(content)
149
+ ? store.setMergeableContent
150
+ : store.setContent)(content);
127
151
  } catch (error) {
128
152
  onIgnoredError?.(error);
129
153
  }
@@ -163,9 +187,9 @@ const createCustomPersister = (
163
187
  startAutoSave: async () => {
164
188
  await persister.stopAutoSave().save();
165
189
  listenerId = store.addDidFinishTransactionListener(() => {
166
- const [tableChanges, valueChanges] = getChanges();
167
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
168
- persister.save(() => [tableChanges, valueChanges]);
190
+ const changes = getChanges();
191
+ if (hasChanges(changes)) {
192
+ persister.save(() => changes);
169
193
  }
170
194
  });
171
195
  return persister;
@@ -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
  };