tinybase 5.0.0-beta.1 → 5.0.0-beta.3

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 (313) hide show
  1. package/lib/cjs/mergeable-store.cjs +1 -0
  2. package/lib/cjs/mergeable-store.cjs.gz +0 -0
  3. package/lib/cjs/persisters/persister-automerge.cjs +1 -1
  4. package/lib/cjs/persisters/persister-automerge.cjs.gz +0 -0
  5. package/lib/cjs/persisters/persister-browser.cjs +1 -1
  6. package/lib/cjs/persisters/persister-browser.cjs.gz +0 -0
  7. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  8. package/lib/cjs/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  9. package/lib/cjs/persisters/persister-electric-sql.cjs +1 -1
  10. package/lib/cjs/persisters/persister-electric-sql.cjs.gz +0 -0
  11. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs +1 -1
  12. package/lib/cjs/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  13. package/lib/cjs/persisters/persister-expo-sqlite.cjs +1 -1
  14. package/lib/cjs/persisters/persister-expo-sqlite.cjs.gz +0 -0
  15. package/lib/cjs/persisters/persister-file.cjs +1 -1
  16. package/lib/cjs/persisters/persister-file.cjs.gz +0 -0
  17. package/lib/cjs/persisters/persister-indexed-db.cjs +1 -1
  18. package/lib/cjs/persisters/persister-indexed-db.cjs.gz +0 -0
  19. package/lib/cjs/persisters/persister-partykit-client.cjs +1 -1
  20. package/lib/cjs/persisters/persister-partykit-client.cjs.gz +0 -0
  21. package/lib/cjs/persisters/persister-partykit-server.cjs +1 -1
  22. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  23. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  24. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  25. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  26. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  27. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  28. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  29. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  30. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  31. package/lib/cjs/persisters.cjs +1 -1
  32. package/lib/cjs/persisters.cjs.gz +0 -0
  33. package/lib/cjs/store.cjs +1 -1
  34. package/lib/cjs/store.cjs.gz +0 -0
  35. package/lib/cjs/tinybase.cjs +1 -1
  36. package/lib/cjs/tinybase.cjs.gz +0 -0
  37. package/lib/cjs/tools.cjs +1 -1
  38. package/lib/cjs/tools.cjs.gz +0 -0
  39. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  40. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  41. package/lib/cjs/ui-react-dom.cjs +1 -1
  42. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  43. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  44. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  45. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  46. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  47. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  48. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  49. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  50. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  51. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  52. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  53. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  54. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  55. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  56. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  57. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  58. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  59. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  60. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  61. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  62. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  63. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  64. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  65. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  66. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  67. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  68. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  69. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  70. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  71. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  72. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  73. package/lib/cjs-es6/persisters.cjs +1 -1
  74. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  75. package/lib/cjs-es6/store.cjs +1 -1
  76. package/lib/cjs-es6/store.cjs.gz +0 -0
  77. package/lib/cjs-es6/tinybase.cjs +1 -1
  78. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  79. package/lib/cjs-es6/tools.cjs +1 -1
  80. package/lib/cjs-es6/tools.cjs.gz +0 -0
  81. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  82. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  83. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  84. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  85. package/lib/debug/mergeable-store.js +1863 -0
  86. package/lib/debug/persisters/persister-automerge.js +54 -53
  87. package/lib/debug/persisters/persister-browser.js +28 -18
  88. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +80 -57
  89. package/lib/debug/persisters/persister-electric-sql.js +80 -57
  90. package/lib/debug/persisters/persister-expo-sqlite-next.js +80 -57
  91. package/lib/debug/persisters/persister-expo-sqlite.js +80 -57
  92. package/lib/debug/persisters/persister-file.js +27 -18
  93. package/lib/debug/persisters/persister-indexed-db.js +34 -23
  94. package/lib/debug/persisters/persister-partykit-client.js +26 -23
  95. package/lib/debug/persisters/persister-partykit-server.js +11 -21
  96. package/lib/debug/persisters/persister-remote.js +28 -18
  97. package/lib/debug/persisters/persister-sqlite-wasm.js +80 -57
  98. package/lib/debug/persisters/persister-sqlite3.js +80 -57
  99. package/lib/debug/persisters/persister-yjs.js +50 -48
  100. package/lib/debug/persisters.js +27 -18
  101. package/lib/debug/queries.js +2 -2
  102. package/lib/debug/store.js +63 -71
  103. package/lib/debug/tinybase.js +354 -90
  104. package/lib/debug/tools.js +13 -15
  105. package/lib/debug/ui-react-dom.js +115 -119
  106. package/lib/es6/mergeable-store.js +1 -0
  107. package/lib/es6/mergeable-store.js.gz +0 -0
  108. package/lib/es6/persisters/persister-automerge.js +1 -1
  109. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  110. package/lib/es6/persisters/persister-browser.js +1 -1
  111. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  112. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  113. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  114. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  115. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  116. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  117. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  118. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  119. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  120. package/lib/es6/persisters/persister-file.js +1 -1
  121. package/lib/es6/persisters/persister-file.js.gz +0 -0
  122. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  123. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  124. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  125. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  126. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  127. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  128. package/lib/es6/persisters/persister-remote.js +1 -1
  129. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  130. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  131. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  132. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  133. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  134. package/lib/es6/persisters/persister-yjs.js +1 -1
  135. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  136. package/lib/es6/persisters.js +1 -1
  137. package/lib/es6/persisters.js.gz +0 -0
  138. package/lib/es6/store.js +1 -1
  139. package/lib/es6/store.js.gz +0 -0
  140. package/lib/es6/tinybase.js +1 -1
  141. package/lib/es6/tinybase.js.gz +0 -0
  142. package/lib/es6/tools.js +1 -1
  143. package/lib/es6/tools.js.gz +0 -0
  144. package/lib/es6/ui-react-dom-debug.js +1 -1
  145. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  146. package/lib/es6/ui-react-dom.js +1 -1
  147. package/lib/es6/ui-react-dom.js.gz +0 -0
  148. package/lib/mergeable-store.js +1 -0
  149. package/lib/mergeable-store.js.gz +0 -0
  150. package/lib/persisters/persister-automerge.js +1 -1
  151. package/lib/persisters/persister-automerge.js.gz +0 -0
  152. package/lib/persisters/persister-browser.js +1 -1
  153. package/lib/persisters/persister-browser.js.gz +0 -0
  154. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  155. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  156. package/lib/persisters/persister-electric-sql.js +1 -1
  157. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  158. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  159. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  160. package/lib/persisters/persister-expo-sqlite.js +1 -1
  161. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  162. package/lib/persisters/persister-file.js +1 -1
  163. package/lib/persisters/persister-file.js.gz +0 -0
  164. package/lib/persisters/persister-indexed-db.js +1 -1
  165. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  166. package/lib/persisters/persister-partykit-client.js +1 -1
  167. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  168. package/lib/persisters/persister-partykit-server.js +1 -1
  169. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  170. package/lib/persisters/persister-remote.js +1 -1
  171. package/lib/persisters/persister-remote.js.gz +0 -0
  172. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  173. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  174. package/lib/persisters/persister-sqlite3.js +1 -1
  175. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  176. package/lib/persisters/persister-yjs.js +1 -1
  177. package/lib/persisters/persister-yjs.js.gz +0 -0
  178. package/lib/persisters.js +1 -1
  179. package/lib/persisters.js.gz +0 -0
  180. package/lib/store.js +1 -1
  181. package/lib/store.js.gz +0 -0
  182. package/lib/tinybase.js +1 -1
  183. package/lib/tinybase.js.gz +0 -0
  184. package/lib/tools.js +1 -1
  185. package/lib/tools.js.gz +0 -0
  186. package/lib/types/mergeable-store.d.ts +79 -0
  187. package/lib/types/persisters/persister-automerge.d.ts +8 -7
  188. package/lib/types/persisters/persister-browser.d.ts +2 -0
  189. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +1 -0
  190. package/lib/types/persisters/persister-electric-sql.d.ts +1 -0
  191. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +1 -0
  192. package/lib/types/persisters/persister-expo-sqlite.d.ts +1 -0
  193. package/lib/types/persisters/persister-file.d.ts +1 -0
  194. package/lib/types/persisters/persister-indexed-db.d.ts +1 -0
  195. package/lib/types/persisters/persister-partykit-client.d.ts +1 -0
  196. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  197. package/lib/types/persisters/persister-remote.d.ts +1 -0
  198. package/lib/types/persisters/persister-sqlite-wasm.d.ts +1 -0
  199. package/lib/types/persisters/persister-sqlite3.d.ts +1 -0
  200. package/lib/types/persisters/persister-yjs.d.ts +1 -0
  201. package/lib/types/persisters.d.ts +50 -30
  202. package/lib/types/store.d.ts +241 -186
  203. package/lib/types/tinybase.d.ts +1 -0
  204. package/lib/types/tools.d.ts +2 -2
  205. package/lib/types/ui-react.d.ts +1 -0
  206. package/lib/types/with-schemas/internal/store.d.ts +4 -0
  207. package/lib/types/with-schemas/mergeable-store.d.ts +112 -0
  208. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +8 -7
  209. package/lib/types/with-schemas/persisters/persister-browser.d.ts +2 -0
  210. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +1 -0
  211. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +1 -0
  212. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +1 -0
  213. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +1 -0
  214. package/lib/types/with-schemas/persisters/persister-file.d.ts +1 -0
  215. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +1 -0
  216. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +1 -0
  217. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  218. package/lib/types/with-schemas/persisters/persister-remote.d.ts +1 -0
  219. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +1 -0
  220. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +1 -0
  221. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +1 -0
  222. package/lib/types/with-schemas/persisters.d.ts +81 -45
  223. package/lib/types/with-schemas/store.d.ts +364 -273
  224. package/lib/types/with-schemas/tinybase.d.ts +1 -0
  225. package/lib/types/with-schemas/tools.d.ts +2 -2
  226. package/lib/ui-react-dom.js +1 -1
  227. package/lib/ui-react-dom.js.gz +0 -0
  228. package/lib/umd/mergeable-store.js +1 -0
  229. package/lib/umd/mergeable-store.js.gz +0 -0
  230. package/lib/umd/persisters/persister-automerge.js +1 -1
  231. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  232. package/lib/umd/persisters/persister-browser.js +1 -1
  233. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  234. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  235. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  236. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  237. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  238. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  239. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  240. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  241. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  242. package/lib/umd/persisters/persister-file.js +1 -1
  243. package/lib/umd/persisters/persister-file.js.gz +0 -0
  244. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  245. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  246. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  247. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  248. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  249. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  250. package/lib/umd/persisters/persister-remote.js +1 -1
  251. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  252. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  253. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  254. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  255. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  256. package/lib/umd/persisters/persister-yjs.js +1 -1
  257. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  258. package/lib/umd/persisters.js +1 -1
  259. package/lib/umd/persisters.js.gz +0 -0
  260. package/lib/umd/store.js +1 -1
  261. package/lib/umd/store.js.gz +0 -0
  262. package/lib/umd/tinybase.js +1 -1
  263. package/lib/umd/tinybase.js.gz +0 -0
  264. package/lib/umd/tools.js +1 -1
  265. package/lib/umd/tools.js.gz +0 -0
  266. package/lib/umd/ui-react-dom-debug.js +1 -1
  267. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  268. package/lib/umd/ui-react-dom.js +1 -1
  269. package/lib/umd/ui-react-dom.js.gz +0 -0
  270. package/lib/umd-es6/mergeable-store.js +1 -0
  271. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  272. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  273. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  274. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  275. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  276. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  277. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  278. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  279. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  280. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  281. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  282. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  283. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  284. package/lib/umd-es6/persisters/persister-file.js +1 -1
  285. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  286. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  287. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  288. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  289. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  290. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  291. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  292. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  293. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  294. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  295. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  296. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  297. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  298. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  299. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  300. package/lib/umd-es6/persisters.js +1 -1
  301. package/lib/umd-es6/persisters.js.gz +0 -0
  302. package/lib/umd-es6/store.js +1 -1
  303. package/lib/umd-es6/store.js.gz +0 -0
  304. package/lib/umd-es6/tinybase.js +1 -1
  305. package/lib/umd-es6/tinybase.js.gz +0 -0
  306. package/lib/umd-es6/tools.js +1 -1
  307. package/lib/umd-es6/tools.js.gz +0 -0
  308. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  309. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  310. package/lib/umd-es6/ui-react-dom.js +1 -1
  311. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  312. package/package.json +39 -35
  313. package/readme.md +2 -2
@@ -56,13 +56,12 @@ const isObject = (obj) =>
56
56
  );
57
57
  const objNew = (entries = []) => object.fromEntries(entries);
58
58
  const objMerge = (...objs) => object.assign({}, ...objs);
59
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
60
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
59
+ const objHas = (obj, id) => id in obj;
61
60
  const objDel = (obj, id) => {
62
61
  delete obj[id];
63
62
  return obj;
64
63
  };
65
- const objMap = (obj, cb) =>
64
+ const objToArray = (obj, cb) =>
66
65
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
67
66
  const objValues = (obj) => object.values(obj);
68
67
  const objSize = (obj) => size(objIds(obj));
@@ -84,7 +83,7 @@ const mapEnsure = (map, key, getDefaultValue) => {
84
83
  return mapGet(map, key);
85
84
  };
86
85
  const mapMatch = (map, obj, set, del = mapSet) => {
87
- objMap(obj, (value, id) => set(map, id, value));
86
+ objToArray(obj, (value, id) => set(map, id, value));
88
87
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
89
88
  return map;
90
89
  };
@@ -100,7 +99,12 @@ const setAdd = (set, value) => set?.add(value);
100
99
  const SELECT_STAR_FROM = SELECT + '*FROM';
101
100
  const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
102
101
  const WHERE = 'WHERE';
103
- const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
102
+ const getCommandFunctions = (
103
+ cmd,
104
+ managedTableNames,
105
+ onIgnoredError,
106
+ useOnConflict,
107
+ ) => {
104
108
  const schemaMap = mapNew();
105
109
  const canSelect = (tableName, rowIdColumnName) =>
106
110
  !isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
@@ -113,7 +117,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
113
117
  await cmd(
114
118
  'SELECT name ' +
115
119
  FROM_PRAGMA_TABLE +
116
- `list WHERE schema='main'AND type='table'AND name IN(` +
120
+ `list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
117
121
  getPlaceholders(managedTableNames) +
118
122
  `)ORDER BY name`,
119
123
  managedTableNames,
@@ -168,16 +172,18 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
168
172
  const saveTable = async (
169
173
  tableName,
170
174
  rowIdColumnName,
171
- table,
175
+ content,
172
176
  deleteEmptyColumns,
173
177
  deleteEmptyTable,
174
178
  partial = false,
175
179
  ) => {
176
- const tableCellIds = setNew();
177
- objMap(table ?? {}, (row) =>
178
- arrayMap(objIds(row ?? {}), (cellId) => setAdd(tableCellIds, cellId)),
180
+ const tableCellOrValueIds = setNew();
181
+ objToArray(content ?? {}, (contentRow) =>
182
+ arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
183
+ setAdd(tableCellOrValueIds, cellOrValueId),
184
+ ),
179
185
  );
180
- const tableColumnNames = collValues(tableCellIds);
186
+ const tableColumnNames = collValues(tableCellOrValueIds);
181
187
  if (
182
188
  !partial &&
183
189
  deleteEmptyTable &&
@@ -235,11 +241,11 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
235
241
  ]);
236
242
  }
237
243
  if (partial) {
238
- if (isUndefined(table)) {
244
+ if (isUndefined(content)) {
239
245
  await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
240
246
  } else {
241
247
  await promiseAll(
242
- objMap(table, async (row, rowId) => {
248
+ objToArray(content, async (row, rowId) => {
243
249
  if (isUndefined(row)) {
244
250
  await cmd(
245
251
  'DELETE FROM' +
@@ -250,10 +256,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
250
256
  [rowId],
251
257
  );
252
258
  } else if (!arrayIsEmpty(tableColumnNames)) {
253
- await upsert(cmd, tableName, rowIdColumnName, objIds(row), [
254
- rowId,
255
- ...objValues(row),
256
- ]);
259
+ await upsert(
260
+ cmd,
261
+ tableName,
262
+ rowIdColumnName,
263
+ objIds(row),
264
+ [rowId, ...objValues(row)],
265
+ useOnConflict,
266
+ );
257
267
  }
258
268
  }),
259
269
  );
@@ -266,7 +276,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
266
276
  );
267
277
  const args = [];
268
278
  const deleteRowIds = [];
269
- objMap(table ?? {}, (row, rowId) => {
279
+ objToArray(content ?? {}, (row, rowId) => {
270
280
  arrayPush(
271
281
  args,
272
282
  rowId,
@@ -315,9 +325,12 @@ const upsert = async (
315
325
  rowIdColumnName,
316
326
  changingColumnNames,
317
327
  args,
328
+ useOnConflict = true,
318
329
  ) =>
319
330
  await cmd(
320
- 'INSERT INTO' +
331
+ 'INSERT ' +
332
+ (useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
333
+ 'INTO' +
321
334
  escapeId(tableName) +
322
335
  '(' +
323
336
  escapeId(rowIdColumnName) +
@@ -335,18 +348,20 @@ const upsert = async (
335
348
  ),
336
349
  1,
337
350
  ) +
338
- 'ON CONFLICT(' +
339
- escapeId(rowIdColumnName) +
340
- ')DO UPDATE SET' +
341
- arrayJoin(
342
- arrayMap(
343
- changingColumnNames,
344
- (columnName) =>
345
- escapeId(columnName) + '=excluded.' + escapeId(columnName),
346
- ),
347
- COMMA,
348
- ),
349
- args,
351
+ (useOnConflict
352
+ ? 'ON CONFLICT(' +
353
+ escapeId(rowIdColumnName) +
354
+ ')DO UPDATE SET' +
355
+ arrayJoin(
356
+ arrayMap(
357
+ changingColumnNames,
358
+ (columnName) =>
359
+ escapeId(columnName) + '=excluded.' + escapeId(columnName),
360
+ ),
361
+ COMMA,
362
+ )
363
+ : EMPTY_STRING),
364
+ arrayMap(args, (arg) => arg ?? null),
350
365
  );
351
366
  const getPlaceholders = (array) =>
352
367
  arrayJoin(
@@ -369,6 +384,7 @@ const createCustomPersister = (
369
384
  addPersisterListener,
370
385
  delPersisterListener,
371
386
  onIgnoredError,
387
+ supportsMergeableStore,
372
388
  [getThing, thing] = [],
373
389
  scheduleId = [],
374
390
  ) => {
@@ -381,6 +397,10 @@ const createCustomPersister = (
381
397
  let listeningHandle;
382
398
  mapEnsure(scheduleRunning, scheduleId, () => 0);
383
399
  mapEnsure(scheduleActions, scheduleId, () => []);
400
+ const getContent =
401
+ (supportsMergeableStore ? store.getMergeableContent : null) ??
402
+ store.getContent;
403
+ const getChanges = store.getTransactionChanges;
384
404
  const run = async () => {
385
405
  /* istanbul ignore else */
386
406
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -416,7 +436,10 @@ const createCustomPersister = (
416
436
  load: async (initialTables, initialValues) =>
417
437
  await loadLock(async () => {
418
438
  try {
419
- store.setContent(await getPersisted());
439
+ const content = await getPersisted();
440
+ (supportsMergeableStore && isString(content[0])
441
+ ? store.applyMergeableChanges
442
+ : store.setContent)(content);
420
443
  } catch {
421
444
  store.setContent([initialTables, initialValues]);
422
445
  }
@@ -426,16 +449,14 @@ const createCustomPersister = (
426
449
  await persister.load(initialTables, initialValues);
427
450
  listening = 1;
428
451
  listeningHandle = addPersisterListener(
429
- async (getContent, getTransactionChanges) => {
430
- if (getTransactionChanges) {
431
- const transactionChanges = getTransactionChanges();
432
- await loadLock(async () =>
433
- store.setTransactionChanges(transactionChanges),
434
- );
452
+ async (getContent2, getChanges2) => {
453
+ if (getChanges2) {
454
+ const changes = getChanges2();
455
+ await loadLock(async () => store.applyChanges(changes));
435
456
  } else {
436
457
  await loadLock(async () => {
437
458
  try {
438
- store.setContent(getContent?.() ?? (await getPersisted()));
459
+ store.setContent(getContent2?.() ?? (await getPersisted()));
439
460
  } catch (error) {
440
461
  onIgnoredError?.(error);
441
462
  }
@@ -453,7 +474,7 @@ const createCustomPersister = (
453
474
  }
454
475
  return persister;
455
476
  },
456
- save: async (getTransactionChanges) => {
477
+ save: async (getChanges2) => {
457
478
  /* istanbul ignore else */
458
479
  if (loadSave != 1) {
459
480
  loadSave = 2;
@@ -462,7 +483,7 @@ const createCustomPersister = (
462
483
  }
463
484
  await persister.schedule(async () => {
464
485
  try {
465
- await setPersisted(store.getContent, getTransactionChanges);
486
+ await setPersisted(getContent, getChanges2);
466
487
  } catch (error) {
467
488
  /* istanbul ignore next */
468
489
  onIgnoredError?.(error);
@@ -474,14 +495,12 @@ const createCustomPersister = (
474
495
  },
475
496
  startAutoSave: async () => {
476
497
  await persister.stopAutoSave().save();
477
- listenerId = store.addDidFinishTransactionListener(
478
- (_store, getTransactionChanges) => {
479
- const [tableChanges, valueChanges] = getTransactionChanges();
480
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
481
- persister.save(() => [tableChanges, valueChanges]);
482
- }
483
- },
484
- );
498
+ listenerId = store.addDidFinishTransactionListener(() => {
499
+ const [tableChanges, valueChanges] = getChanges();
500
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
501
+ persister.save(() => [tableChanges, valueChanges]);
502
+ }
503
+ });
485
504
  return persister;
486
505
  },
487
506
  stopAutoSave: () => {
@@ -547,6 +566,7 @@ const createJsonSqlitePersister = (
547
566
  addPersisterListener,
548
567
  delPersisterListener,
549
568
  onIgnoredError,
569
+ false,
550
570
  [getThing, db],
551
571
  db,
552
572
  );
@@ -567,9 +587,10 @@ const createTabularSqlitePersister = (
567
587
  managedTableNames,
568
588
  db,
569
589
  getThing,
590
+ useOnConflict,
570
591
  ) => {
571
592
  const [refreshSchema, loadTable, saveTable, transaction] =
572
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
593
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
573
594
  const saveTables = async (tables, partial) =>
574
595
  await promiseAll(
575
596
  mapMap(
@@ -578,12 +599,11 @@ const createTabularSqlitePersister = (
578
599
  [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
579
600
  tableId,
580
601
  ) => {
581
- const table = tables[tableId];
582
- if (!partial || table !== void 0) {
602
+ if (!partial || objHas(tables, tableId)) {
583
603
  await saveTable(
584
604
  tableName,
585
605
  rowIdColumnName,
586
- table,
606
+ tables[tableId],
587
607
  deleteEmptyColumns,
588
608
  deleteEmptyTable,
589
609
  partial,
@@ -633,11 +653,11 @@ const createTabularSqlitePersister = (
633
653
  ? [tables, values]
634
654
  : void 0;
635
655
  });
636
- const setPersisted = async (getContent, getTransactionChanges) =>
656
+ const setPersisted = async (getContent, getChanges) =>
637
657
  await transaction(async () => {
638
658
  await refreshSchema();
639
- if (!isUndefined(getTransactionChanges)) {
640
- const [tableChanges, valueChanges] = getTransactionChanges();
659
+ if (!isUndefined(getChanges)) {
660
+ const [tableChanges, valueChanges] = getChanges();
641
661
  await saveTables(tableChanges, true);
642
662
  await saveValues(valueChanges, true);
643
663
  } else {
@@ -653,6 +673,7 @@ const createTabularSqlitePersister = (
653
673
  addPersisterListener,
654
674
  delPersisterListener,
655
675
  onIgnoredError,
676
+ false,
656
677
  [getThing, db],
657
678
  db,
658
679
  );
@@ -690,7 +711,7 @@ const getDefaultedTabularConfigMap = (
690
711
  filter,
691
712
  ) => {
692
713
  const configMap = mapNew();
693
- objMap(configsObj, (configObj, id) => {
714
+ objToArray(configsObj, (configObj, id) => {
694
715
  const defaultedConfig = slice(
695
716
  objValues(
696
717
  objMerge(
@@ -765,6 +786,7 @@ const createSqlitePersister = (
765
786
  onIgnoredError,
766
787
  db,
767
788
  getThing = 'getDb',
789
+ useOnConflict,
768
790
  ) => {
769
791
  let dataVersion;
770
792
  let schemaVersion;
@@ -827,6 +849,7 @@ const createSqlitePersister = (
827
849
  collValues(managedTableNamesSet),
828
850
  db,
829
851
  getThing,
852
+ useOnConflict,
830
853
  );
831
854
  };
832
855
 
@@ -1,12 +1,16 @@
1
1
  import {Map as Map$1} from 'yjs';
2
2
 
3
+ const getTypeOf = (thing) => typeof thing;
3
4
  const TINYBASE = 'tinybase';
5
+ const EMPTY_STRING = '';
6
+ const STRING = getTypeOf(EMPTY_STRING);
4
7
  const T = 't';
5
8
  const V = 'v';
6
9
 
7
10
  const isUndefined = (thing) => thing == void 0;
8
11
  const ifNotUndefined = (value, then, otherwise) =>
9
12
  isUndefined(value) ? otherwise?.() : then(value);
13
+ const isString = (thing) => getTypeOf(thing) == STRING;
10
14
  const size = (arrayOrString) => arrayOrString.length;
11
15
 
12
16
  const arrayForEach = (array, cb) => array.forEach(cb);
@@ -31,9 +35,8 @@ const isObject = (obj) =>
31
35
  () => true,
32
36
  );
33
37
  const objNew = (entries = []) => object.fromEntries(entries);
34
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
35
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
36
- const objMap = (obj, cb) =>
38
+ const objHas = (obj, id) => id in obj;
39
+ const objToArray = (obj, cb) =>
37
40
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
38
41
  const objSize = (obj) => size(objIds(obj));
39
42
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
@@ -70,6 +73,7 @@ const createCustomPersister = (
70
73
  addPersisterListener,
71
74
  delPersisterListener,
72
75
  onIgnoredError,
76
+ supportsMergeableStore,
73
77
  [getThing, thing] = [],
74
78
  scheduleId = [],
75
79
  ) => {
@@ -82,6 +86,10 @@ const createCustomPersister = (
82
86
  let listeningHandle;
83
87
  mapEnsure(scheduleRunning, scheduleId, () => 0);
84
88
  mapEnsure(scheduleActions, scheduleId, () => []);
89
+ const getContent =
90
+ (supportsMergeableStore ? store.getMergeableContent : null) ??
91
+ store.getContent;
92
+ const getChanges = store.getTransactionChanges;
85
93
  const run = async () => {
86
94
  /* istanbul ignore else */
87
95
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -117,7 +125,10 @@ const createCustomPersister = (
117
125
  load: async (initialTables, initialValues) =>
118
126
  await loadLock(async () => {
119
127
  try {
120
- store.setContent(await getPersisted());
128
+ const content = await getPersisted();
129
+ (supportsMergeableStore && isString(content[0])
130
+ ? store.applyMergeableChanges
131
+ : store.setContent)(content);
121
132
  } catch {
122
133
  store.setContent([initialTables, initialValues]);
123
134
  }
@@ -127,16 +138,14 @@ const createCustomPersister = (
127
138
  await persister.load(initialTables, initialValues);
128
139
  listening = 1;
129
140
  listeningHandle = addPersisterListener(
130
- async (getContent, getTransactionChanges) => {
131
- if (getTransactionChanges) {
132
- const transactionChanges = getTransactionChanges();
133
- await loadLock(async () =>
134
- store.setTransactionChanges(transactionChanges),
135
- );
141
+ async (getContent2, getChanges2) => {
142
+ if (getChanges2) {
143
+ const changes = getChanges2();
144
+ await loadLock(async () => store.applyChanges(changes));
136
145
  } else {
137
146
  await loadLock(async () => {
138
147
  try {
139
- store.setContent(getContent?.() ?? (await getPersisted()));
148
+ store.setContent(getContent2?.() ?? (await getPersisted()));
140
149
  } catch (error) {
141
150
  onIgnoredError?.(error);
142
151
  }
@@ -154,7 +163,7 @@ const createCustomPersister = (
154
163
  }
155
164
  return persister;
156
165
  },
157
- save: async (getTransactionChanges) => {
166
+ save: async (getChanges2) => {
158
167
  /* istanbul ignore else */
159
168
  if (loadSave != 1) {
160
169
  loadSave = 2;
@@ -163,7 +172,7 @@ const createCustomPersister = (
163
172
  }
164
173
  await persister.schedule(async () => {
165
174
  try {
166
- await setPersisted(store.getContent, getTransactionChanges);
175
+ await setPersisted(getContent, getChanges2);
167
176
  } catch (error) {
168
177
  /* istanbul ignore next */
169
178
  onIgnoredError?.(error);
@@ -175,14 +184,12 @@ const createCustomPersister = (
175
184
  },
176
185
  startAutoSave: async () => {
177
186
  await persister.stopAutoSave().save();
178
- listenerId = store.addDidFinishTransactionListener(
179
- (_store, getTransactionChanges) => {
180
- const [tableChanges, valueChanges] = getTransactionChanges();
181
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
182
- persister.save(() => [tableChanges, valueChanges]);
183
- }
184
- },
185
- );
187
+ listenerId = store.addDidFinishTransactionListener(() => {
188
+ const [tableChanges, valueChanges] = getChanges();
189
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
190
+ persister.save(() => [tableChanges, valueChanges]);
191
+ }
192
+ });
186
193
  return persister;
187
194
  },
188
195
  stopAutoSave: () => {
@@ -207,7 +214,7 @@ const createCustomPersister = (
207
214
 
208
215
  const DELETE = 'delete';
209
216
  const getYContent = (yContent) => [yContent.get(T), yContent.get(V)];
210
- const getTransactionChangesFromYDoc = (yContent, events) => {
217
+ const getChangesFromYDoc = (yContent, events) => {
211
218
  if (size(events) == 1 && arrayIsEmpty(events[0].path)) {
212
219
  return [yContent.get(T).toJSON(), yContent.get(V).toJSON()];
213
220
  }
@@ -257,58 +264,54 @@ const getTransactionChangesFromYDoc = (yContent, events) => {
257
264
  );
258
265
  return [tables, values];
259
266
  };
260
- const setTransactionChangesToYDoc = (
261
- yContent,
262
- getContent,
263
- getTransactionChanges,
264
- ) => {
267
+ const applyChangesToYDoc = (yContent, getContent, getChanges) => {
265
268
  if (!yContent.size) {
266
269
  yContent.set(T, new Map$1());
267
270
  yContent.set(V, new Map$1());
268
271
  }
269
272
  const [yTables, yValues] = getYContent(yContent);
270
- const transactionChangesDidFail = () => {
271
- transactionChangesFailed = 1;
273
+ const changesDidFail = () => {
274
+ changesFailed = 1;
272
275
  };
273
- let transactionChangesFailed = 1;
274
- ifNotUndefined(getTransactionChanges?.(), ([cellChanges, valueChanges]) => {
275
- transactionChangesFailed = 0;
276
- objMap(cellChanges, (table, tableId) =>
277
- transactionChangesFailed
276
+ let changesFailed = 1;
277
+ ifNotUndefined(getChanges?.(), ([cellChanges, valueChanges]) => {
278
+ changesFailed = 0;
279
+ objToArray(cellChanges, (table, tableId) =>
280
+ changesFailed
278
281
  ? 0
279
282
  : isUndefined(table)
280
283
  ? yTables.delete(tableId)
281
284
  : ifNotUndefined(
282
285
  yTables.get(tableId),
283
286
  (yTable) =>
284
- objMap(table, (row, rowId) =>
285
- transactionChangesFailed
287
+ objToArray(table, (row, rowId) =>
288
+ changesFailed
286
289
  ? 0
287
290
  : isUndefined(row)
288
291
  ? yTable.delete(rowId)
289
292
  : ifNotUndefined(
290
293
  yTable.get(rowId),
291
294
  (yRow) =>
292
- objMap(row, (cell, cellId) =>
295
+ objToArray(row, (cell, cellId) =>
293
296
  isUndefined(cell)
294
297
  ? yRow.delete(cellId)
295
298
  : yRow.set(cellId, cell),
296
299
  ),
297
- transactionChangesDidFail,
300
+ changesDidFail,
298
301
  ),
299
302
  ),
300
- transactionChangesDidFail,
303
+ changesDidFail,
301
304
  ),
302
305
  );
303
- objMap(valueChanges, (value, valueId) =>
304
- transactionChangesFailed
306
+ objToArray(valueChanges, (value, valueId) =>
307
+ changesFailed
305
308
  ? 0
306
309
  : isUndefined(value)
307
310
  ? yValues.delete(valueId)
308
311
  : yValues.set(valueId, value),
309
312
  );
310
313
  });
311
- if (transactionChangesFailed) {
314
+ if (changesFailed) {
312
315
  const [tables, values] = getContent();
313
316
  yMapMatch(yTables, void 0, tables, (_, tableId, table) =>
314
317
  yMapMatch(yTables, tableId, table, (yTable, rowId, row) =>
@@ -332,7 +335,7 @@ const yMapMatch = (yMapOrParent, idInParent, obj, set) => {
332
335
  ? yMapOrParent
333
336
  : yMapOrParent.get(idInParent) ?? yMapOrParent.set(idInParent, new Map$1());
334
337
  let changed;
335
- objMap(obj, (value, id) => {
338
+ objToArray(obj, (value, id) => {
336
339
  if (set(yMap, id, value)) {
337
340
  changed = 1;
338
341
  }
@@ -359,13 +362,11 @@ const createYjsPersister = (
359
362
  yContent.size
360
363
  ? [yContent.get(T).toJSON(), yContent.get(V).toJSON()]
361
364
  : void 0;
362
- const setPersisted = async (getContent, getTransactionChanges) =>
363
- yDoc.transact(() =>
364
- setTransactionChangesToYDoc(yContent, getContent, getTransactionChanges),
365
- );
365
+ const setPersisted = async (getContent, getChanges) =>
366
+ yDoc.transact(() => applyChangesToYDoc(yContent, getContent, getChanges));
366
367
  const addPersisterListener = (listener) => {
367
368
  const observer = (events) =>
368
- listener(void 0, () => getTransactionChangesFromYDoc(yContent, events));
369
+ listener(void 0, () => getChangesFromYDoc(yContent, events));
369
370
  yContent.observeDeep(observer);
370
371
  return observer;
371
372
  };
@@ -379,6 +380,7 @@ const createYjsPersister = (
379
380
  addPersisterListener,
380
381
  delPersisterListener,
381
382
  onIgnoredError,
383
+ false,
382
384
  ['getYDoc', yDoc],
383
385
  );
384
386
  };
@@ -1,6 +1,11 @@
1
+ const getTypeOf = (thing) => typeof thing;
2
+ const EMPTY_STRING = '';
3
+ const STRING = getTypeOf(EMPTY_STRING);
4
+
1
5
  const isUndefined = (thing) => thing == void 0;
2
6
  const ifNotUndefined = (value, then, otherwise) =>
3
7
  isUndefined(value) ? otherwise?.() : then(value);
8
+ const isString = (thing) => getTypeOf(thing) == STRING;
4
9
  const size = (arrayOrString) => arrayOrString.length;
5
10
 
6
11
  const arrayPush = (array, ...values) => array.push(...values);
@@ -46,6 +51,7 @@ const createCustomPersister = (
46
51
  addPersisterListener,
47
52
  delPersisterListener,
48
53
  onIgnoredError,
54
+ supportsMergeableStore,
49
55
  [getThing, thing] = [],
50
56
  scheduleId = [],
51
57
  ) => {
@@ -58,6 +64,10 @@ const createCustomPersister = (
58
64
  let listeningHandle;
59
65
  mapEnsure(scheduleRunning, scheduleId, () => 0);
60
66
  mapEnsure(scheduleActions, scheduleId, () => []);
67
+ const getContent =
68
+ (supportsMergeableStore ? store.getMergeableContent : null) ??
69
+ store.getContent;
70
+ const getChanges = store.getTransactionChanges;
61
71
  const run = async () => {
62
72
  /* istanbul ignore else */
63
73
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -93,7 +103,10 @@ const createCustomPersister = (
93
103
  load: async (initialTables, initialValues) =>
94
104
  await loadLock(async () => {
95
105
  try {
96
- store.setContent(await getPersisted());
106
+ const content = await getPersisted();
107
+ (supportsMergeableStore && isString(content[0])
108
+ ? store.applyMergeableChanges
109
+ : store.setContent)(content);
97
110
  } catch {
98
111
  store.setContent([initialTables, initialValues]);
99
112
  }
@@ -103,16 +116,14 @@ const createCustomPersister = (
103
116
  await persister.load(initialTables, initialValues);
104
117
  listening = 1;
105
118
  listeningHandle = addPersisterListener(
106
- async (getContent, getTransactionChanges) => {
107
- if (getTransactionChanges) {
108
- const transactionChanges = getTransactionChanges();
109
- await loadLock(async () =>
110
- store.setTransactionChanges(transactionChanges),
111
- );
119
+ async (getContent2, getChanges2) => {
120
+ if (getChanges2) {
121
+ const changes = getChanges2();
122
+ await loadLock(async () => store.applyChanges(changes));
112
123
  } else {
113
124
  await loadLock(async () => {
114
125
  try {
115
- store.setContent(getContent?.() ?? (await getPersisted()));
126
+ store.setContent(getContent2?.() ?? (await getPersisted()));
116
127
  } catch (error) {
117
128
  onIgnoredError?.(error);
118
129
  }
@@ -130,7 +141,7 @@ const createCustomPersister = (
130
141
  }
131
142
  return persister;
132
143
  },
133
- save: async (getTransactionChanges) => {
144
+ save: async (getChanges2) => {
134
145
  /* istanbul ignore else */
135
146
  if (loadSave != 1) {
136
147
  loadSave = 2;
@@ -139,7 +150,7 @@ const createCustomPersister = (
139
150
  }
140
151
  await persister.schedule(async () => {
141
152
  try {
142
- await setPersisted(store.getContent, getTransactionChanges);
153
+ await setPersisted(getContent, getChanges2);
143
154
  } catch (error) {
144
155
  /* istanbul ignore next */
145
156
  onIgnoredError?.(error);
@@ -151,14 +162,12 @@ const createCustomPersister = (
151
162
  },
152
163
  startAutoSave: async () => {
153
164
  await persister.stopAutoSave().save();
154
- listenerId = store.addDidFinishTransactionListener(
155
- (_store, getTransactionChanges) => {
156
- const [tableChanges, valueChanges] = getTransactionChanges();
157
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
158
- persister.save(() => [tableChanges, valueChanges]);
159
- }
160
- },
161
- );
165
+ listenerId = store.addDidFinishTransactionListener(() => {
166
+ const [tableChanges, valueChanges] = getChanges();
167
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
168
+ persister.save(() => [tableChanges, valueChanges]);
169
+ }
170
+ });
162
171
  return persister;
163
172
  },
164
173
  stopAutoSave: () => {
@@ -48,7 +48,7 @@ const arrayPush = (array, ...values) => array.push(...values);
48
48
  const object = Object;
49
49
  const objEntries = object.entries;
50
50
  const objFreeze = object.freeze;
51
- const objMap = (obj, cb) =>
51
+ const objToArray = (obj, cb) =>
52
52
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
53
53
 
54
54
  const collSize = (coll) => coll?.size ?? 0;
@@ -777,7 +777,7 @@ const createQueries = getCreateFunction((store) => {
777
777
  destroy,
778
778
  getListenerStats,
779
779
  };
780
- objMap(
780
+ objToArray(
781
781
  {
782
782
  [TABLE]: [1, 1],
783
783
  [TABLE + CELL_IDS]: [0, 1],