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
@@ -42,15 +42,34 @@ const mapNew = (entries) => new Map(entries);
42
42
  const mapGet = (map, key) => map?.get(key);
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
  };
51
53
 
52
54
  const scheduleRunning = mapNew();
53
55
  const scheduleActions = mapNew();
56
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
57
+ const getStoreFunctions = (supportsMergeableStore, store) =>
58
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
59
+ ? [
60
+ 0,
61
+ store.getContent,
62
+ store.getTransactionChanges,
63
+ ([changedTables, changedValues]) =>
64
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
65
+ ]
66
+ : [
67
+ 1,
68
+ store.getMergeableContent,
69
+ store.getTransactionMergeableChanges,
70
+ ([, [[, changedTables], [, changedValues]]]) =>
71
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
72
+ ];
54
73
  const createCustomPersister = (
55
74
  store,
56
75
  getPersisted,
@@ -71,10 +90,8 @@ const createCustomPersister = (
71
90
  let listeningHandle;
72
91
  mapEnsure(scheduleRunning, scheduleId, () => 0);
73
92
  mapEnsure(scheduleActions, scheduleId, () => []);
74
- const getContent =
75
- (supportsMergeableStore ? store.getMergeableContent : null) ??
76
- store.getContent;
77
- const getChanges = store.getTransactionChanges;
93
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
94
+ getStoreFunctions(supportsMergeableStore, store);
78
95
  const run = async () => {
79
96
  /* istanbul ignore else */
80
97
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -111,8 +128,8 @@ const createCustomPersister = (
111
128
  await loadLock(async () => {
112
129
  try {
113
130
  const content = await getPersisted();
114
- (supportsMergeableStore && isString(content[0])
115
- ? store.applyMergeableChanges
131
+ (isMergeableStore && isMergeable(content)
132
+ ? store.setMergeableContent
116
133
  : store.setContent)(content);
117
134
  } catch {
118
135
  store.setContent([initialTables, initialValues]);
@@ -126,11 +143,18 @@ const createCustomPersister = (
126
143
  async (getContent2, getChanges2) => {
127
144
  if (getChanges2) {
128
145
  const changes = getChanges2();
129
- await loadLock(async () => store.applyChanges(changes));
146
+ await loadLock(async () =>
147
+ (isMergeableStore && isMergeable(changes)
148
+ ? store.applyMergeableChanges
149
+ : store.applyChanges)(changes),
150
+ );
130
151
  } else {
131
152
  await loadLock(async () => {
132
153
  try {
133
- store.setContent(getContent2?.() ?? (await getPersisted()));
154
+ const content = getContent2?.() ?? (await getPersisted());
155
+ (isMergeableStore && isMergeable(content)
156
+ ? store.setMergeableContent
157
+ : store.setContent)(content);
134
158
  } catch (error) {
135
159
  onIgnoredError?.(error);
136
160
  }
@@ -170,9 +194,9 @@ const createCustomPersister = (
170
194
  startAutoSave: async () => {
171
195
  await persister.stopAutoSave().save();
172
196
  listenerId = store.addDidFinishTransactionListener(() => {
173
- const [tableChanges, valueChanges] = getChanges();
174
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
175
- persister.save(() => [tableChanges, valueChanges]);
197
+ const changes = getChanges();
198
+ if (hasChanges(changes)) {
199
+ persister.save(() => changes);
176
200
  }
177
201
  });
178
202
  return persister;
@@ -226,7 +250,7 @@ const createStoragePersister = (
226
250
  addPersisterListener,
227
251
  delPersisterListener,
228
252
  onIgnoredError,
229
- false,
253
+ true,
230
254
  ['getStorageName', storageName],
231
255
  );
232
256
  };
@@ -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;
@@ -77,9 +77,11 @@ const mapMap = (coll, cb) =>
77
77
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
78
78
  const mapSet = (map, key, value) =>
79
79
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
80
- const mapEnsure = (map, key, getDefaultValue) => {
80
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
81
81
  if (!collHas(map, key)) {
82
82
  mapSet(map, key, getDefaultValue());
83
+ } else {
84
+ hadExistingValue?.(mapGet(map, key));
83
85
  }
84
86
  return mapGet(map, key);
85
87
  };
@@ -378,6 +380,23 @@ const jsonParse = JSON.parse;
378
380
 
379
381
  const scheduleRunning = mapNew();
380
382
  const scheduleActions = mapNew();
383
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
384
+ const getStoreFunctions = (supportsMergeableStore, store) =>
385
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
386
+ ? [
387
+ 0,
388
+ store.getContent,
389
+ store.getTransactionChanges,
390
+ ([changedTables, changedValues]) =>
391
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
392
+ ]
393
+ : [
394
+ 1,
395
+ store.getMergeableContent,
396
+ store.getTransactionMergeableChanges,
397
+ ([, [[, changedTables], [, changedValues]]]) =>
398
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
399
+ ];
381
400
  const createCustomPersister = (
382
401
  store,
383
402
  getPersisted,
@@ -398,10 +417,8 @@ const createCustomPersister = (
398
417
  let listeningHandle;
399
418
  mapEnsure(scheduleRunning, scheduleId, () => 0);
400
419
  mapEnsure(scheduleActions, scheduleId, () => []);
401
- const getContent =
402
- (supportsMergeableStore ? store.getMergeableContent : null) ??
403
- store.getContent;
404
- const getChanges = store.getTransactionChanges;
420
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
421
+ getStoreFunctions(supportsMergeableStore, store);
405
422
  const run = async () => {
406
423
  /* istanbul ignore else */
407
424
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -438,8 +455,8 @@ const createCustomPersister = (
438
455
  await loadLock(async () => {
439
456
  try {
440
457
  const content = await getPersisted();
441
- (supportsMergeableStore && isString(content[0])
442
- ? store.applyMergeableChanges
458
+ (isMergeableStore && isMergeable(content)
459
+ ? store.setMergeableContent
443
460
  : store.setContent)(content);
444
461
  } catch {
445
462
  store.setContent([initialTables, initialValues]);
@@ -453,11 +470,18 @@ const createCustomPersister = (
453
470
  async (getContent2, getChanges2) => {
454
471
  if (getChanges2) {
455
472
  const changes = getChanges2();
456
- await loadLock(async () => store.applyChanges(changes));
473
+ await loadLock(async () =>
474
+ (isMergeableStore && isMergeable(changes)
475
+ ? store.applyMergeableChanges
476
+ : store.applyChanges)(changes),
477
+ );
457
478
  } else {
458
479
  await loadLock(async () => {
459
480
  try {
460
- store.setContent(getContent2?.() ?? (await getPersisted()));
481
+ const content = getContent2?.() ?? (await getPersisted());
482
+ (isMergeableStore && isMergeable(content)
483
+ ? store.setMergeableContent
484
+ : store.setContent)(content);
461
485
  } catch (error) {
462
486
  onIgnoredError?.(error);
463
487
  }
@@ -497,9 +521,9 @@ const createCustomPersister = (
497
521
  startAutoSave: async () => {
498
522
  await persister.stopAutoSave().save();
499
523
  listenerId = store.addDidFinishTransactionListener(() => {
500
- const [tableChanges, valueChanges] = getChanges();
501
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
502
- persister.save(() => [tableChanges, valueChanges]);
524
+ const changes = getChanges();
525
+ if (hasChanges(changes)) {
526
+ persister.save(() => changes);
503
527
  }
504
528
  });
505
529
  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;
@@ -46,15 +46,34 @@ const mapNew = (entries) => new Map(entries);
46
46
  const mapGet = (map, key) => map?.get(key);
47
47
  const mapSet = (map, key, value) =>
48
48
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
49
- const mapEnsure = (map, key, getDefaultValue) => {
49
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
50
50
  if (!collHas(map, key)) {
51
51
  mapSet(map, key, getDefaultValue());
52
+ } else {
53
+ hadExistingValue?.(mapGet(map, key));
52
54
  }
53
55
  return mapGet(map, key);
54
56
  };
55
57
 
56
58
  const scheduleRunning = mapNew();
57
59
  const scheduleActions = mapNew();
60
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
61
+ const getStoreFunctions = (supportsMergeableStore, store) =>
62
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
63
+ ? [
64
+ 0,
65
+ store.getContent,
66
+ store.getTransactionChanges,
67
+ ([changedTables, changedValues]) =>
68
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
69
+ ]
70
+ : [
71
+ 1,
72
+ store.getMergeableContent,
73
+ store.getTransactionMergeableChanges,
74
+ ([, [[, changedTables], [, changedValues]]]) =>
75
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
76
+ ];
58
77
  const createCustomPersister = (
59
78
  store,
60
79
  getPersisted,
@@ -75,10 +94,8 @@ const createCustomPersister = (
75
94
  let listeningHandle;
76
95
  mapEnsure(scheduleRunning, scheduleId, () => 0);
77
96
  mapEnsure(scheduleActions, scheduleId, () => []);
78
- const getContent =
79
- (supportsMergeableStore ? store.getMergeableContent : null) ??
80
- store.getContent;
81
- const getChanges = store.getTransactionChanges;
97
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
98
+ getStoreFunctions(supportsMergeableStore, store);
82
99
  const run = async () => {
83
100
  /* istanbul ignore else */
84
101
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -115,8 +132,8 @@ const createCustomPersister = (
115
132
  await loadLock(async () => {
116
133
  try {
117
134
  const content = await getPersisted();
118
- (supportsMergeableStore && isString(content[0])
119
- ? store.applyMergeableChanges
135
+ (isMergeableStore && isMergeable(content)
136
+ ? store.setMergeableContent
120
137
  : store.setContent)(content);
121
138
  } catch {
122
139
  store.setContent([initialTables, initialValues]);
@@ -130,11 +147,18 @@ const createCustomPersister = (
130
147
  async (getContent2, getChanges2) => {
131
148
  if (getChanges2) {
132
149
  const changes = getChanges2();
133
- await loadLock(async () => store.applyChanges(changes));
150
+ await loadLock(async () =>
151
+ (isMergeableStore && isMergeable(changes)
152
+ ? store.applyMergeableChanges
153
+ : store.applyChanges)(changes),
154
+ );
134
155
  } else {
135
156
  await loadLock(async () => {
136
157
  try {
137
- store.setContent(getContent2?.() ?? (await getPersisted()));
158
+ const content = getContent2?.() ?? (await getPersisted());
159
+ (isMergeableStore && isMergeable(content)
160
+ ? store.setMergeableContent
161
+ : store.setContent)(content);
138
162
  } catch (error) {
139
163
  onIgnoredError?.(error);
140
164
  }
@@ -174,9 +198,9 @@ const createCustomPersister = (
174
198
  startAutoSave: async () => {
175
199
  await persister.stopAutoSave().save();
176
200
  listenerId = store.addDidFinishTransactionListener(() => {
177
- const [tableChanges, valueChanges] = getChanges();
178
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
179
- persister.save(() => [tableChanges, valueChanges]);
201
+ const changes = getChanges();
202
+ if (hasChanges(changes)) {
203
+ persister.save(() => changes);
180
204
  }
181
205
  });
182
206
  return persister;
@@ -214,7 +238,7 @@ const createFilePersister = (store, filePath, onIgnoredError) => {
214
238
  addPersisterListener,
215
239
  delPersisterListener,
216
240
  onIgnoredError,
217
- false,
241
+ true,
218
242
  ['getFilePath', filePath],
219
243
  );
220
244
  };
@@ -51,15 +51,34 @@ const mapNew = (entries) => new Map(entries);
51
51
  const mapGet = (map, key) => map?.get(key);
52
52
  const mapSet = (map, key, value) =>
53
53
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
54
- const mapEnsure = (map, key, getDefaultValue) => {
54
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
55
55
  if (!collHas(map, key)) {
56
56
  mapSet(map, key, getDefaultValue());
57
+ } else {
58
+ hadExistingValue?.(mapGet(map, key));
57
59
  }
58
60
  return mapGet(map, key);
59
61
  };
60
62
 
61
63
  const scheduleRunning = mapNew();
62
64
  const scheduleActions = mapNew();
65
+ const isMergeable = (contentOrChanges) => isString(contentOrChanges?.[0]);
66
+ const getStoreFunctions = (supportsMergeableStore, store) =>
67
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
68
+ ? [
69
+ 0,
70
+ store.getContent,
71
+ store.getTransactionChanges,
72
+ ([changedTables, changedValues]) =>
73
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
74
+ ]
75
+ : [
76
+ 1,
77
+ store.getMergeableContent,
78
+ store.getTransactionMergeableChanges,
79
+ ([, [[, changedTables], [, changedValues]]]) =>
80
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
81
+ ];
63
82
  const createCustomPersister = (
64
83
  store,
65
84
  getPersisted,
@@ -80,10 +99,8 @@ const createCustomPersister = (
80
99
  let listeningHandle;
81
100
  mapEnsure(scheduleRunning, scheduleId, () => 0);
82
101
  mapEnsure(scheduleActions, scheduleId, () => []);
83
- const getContent =
84
- (supportsMergeableStore ? store.getMergeableContent : null) ??
85
- store.getContent;
86
- const getChanges = store.getTransactionChanges;
102
+ const [isMergeableStore, getContent, getChanges, hasChanges] =
103
+ getStoreFunctions(supportsMergeableStore, store);
87
104
  const run = async () => {
88
105
  /* istanbul ignore else */
89
106
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -120,8 +137,8 @@ const createCustomPersister = (
120
137
  await loadLock(async () => {
121
138
  try {
122
139
  const content = await getPersisted();
123
- (supportsMergeableStore && isString(content[0])
124
- ? store.applyMergeableChanges
140
+ (isMergeableStore && isMergeable(content)
141
+ ? store.setMergeableContent
125
142
  : store.setContent)(content);
126
143
  } catch {
127
144
  store.setContent([initialTables, initialValues]);
@@ -135,11 +152,18 @@ const createCustomPersister = (
135
152
  async (getContent2, getChanges2) => {
136
153
  if (getChanges2) {
137
154
  const changes = getChanges2();
138
- await loadLock(async () => store.applyChanges(changes));
155
+ await loadLock(async () =>
156
+ (isMergeableStore && isMergeable(changes)
157
+ ? store.applyMergeableChanges
158
+ : store.applyChanges)(changes),
159
+ );
139
160
  } else {
140
161
  await loadLock(async () => {
141
162
  try {
142
- store.setContent(getContent2?.() ?? (await getPersisted()));
163
+ const content = getContent2?.() ?? (await getPersisted());
164
+ (isMergeableStore && isMergeable(content)
165
+ ? store.setMergeableContent
166
+ : store.setContent)(content);
143
167
  } catch (error) {
144
168
  onIgnoredError?.(error);
145
169
  }
@@ -179,9 +203,9 @@ const createCustomPersister = (
179
203
  startAutoSave: async () => {
180
204
  await persister.stopAutoSave().save();
181
205
  listenerId = store.addDidFinishTransactionListener(() => {
182
- const [tableChanges, valueChanges] = getChanges();
183
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
184
- persister.save(() => [tableChanges, valueChanges]);
206
+ const changes = getChanges();
207
+ if (hasChanges(changes)) {
208
+ persister.save(() => changes);
185
209
  }
186
210
  });
187
211
  return persister;