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
@@ -1,8 +1,12 @@
1
+ const getTypeOf = (thing) => typeof thing;
1
2
  const TINYBASE = 'tinybase';
3
+ const EMPTY_STRING = '';
4
+ const STRING = getTypeOf(EMPTY_STRING);
2
5
 
3
6
  const isUndefined = (thing) => thing == void 0;
4
7
  const ifNotUndefined = (value, then, otherwise) =>
5
8
  isUndefined(value) ? otherwise?.() : then(value);
9
+ const isString = (thing) => getTypeOf(thing) == STRING;
6
10
  const size = (arrayOrString) => arrayOrString.length;
7
11
 
8
12
  const arrayMap = (array, cb) => array.map(cb);
@@ -25,12 +29,12 @@ const isObject = (obj) =>
25
29
  () => true,
26
30
  );
27
31
  const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
28
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
32
+ const objHas = (obj, id) => id in obj;
29
33
  const objDel = (obj, id) => {
30
34
  delete obj[id];
31
35
  return obj;
32
36
  };
33
- const objMap = (obj, cb) =>
37
+ const objToArray = (obj, cb) =>
34
38
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
35
39
  const objSize = (obj) => size(objIds(obj));
36
40
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
@@ -64,6 +68,7 @@ const createCustomPersister = (
64
68
  addPersisterListener,
65
69
  delPersisterListener,
66
70
  onIgnoredError,
71
+ supportsMergeableStore,
67
72
  [getThing, thing] = [],
68
73
  scheduleId = [],
69
74
  ) => {
@@ -76,6 +81,10 @@ const createCustomPersister = (
76
81
  let listeningHandle;
77
82
  mapEnsure(scheduleRunning, scheduleId, () => 0);
78
83
  mapEnsure(scheduleActions, scheduleId, () => []);
84
+ const getContent =
85
+ (supportsMergeableStore ? store.getMergeableContent : null) ??
86
+ store.getContent;
87
+ const getChanges = store.getTransactionChanges;
79
88
  const run = async () => {
80
89
  /* istanbul ignore else */
81
90
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -111,7 +120,10 @@ const createCustomPersister = (
111
120
  load: async (initialTables, initialValues) =>
112
121
  await loadLock(async () => {
113
122
  try {
114
- store.setContent(await getPersisted());
123
+ const content = await getPersisted();
124
+ (supportsMergeableStore && isString(content[0])
125
+ ? store.applyMergeableChanges
126
+ : store.setContent)(content);
115
127
  } catch {
116
128
  store.setContent([initialTables, initialValues]);
117
129
  }
@@ -121,16 +133,14 @@ const createCustomPersister = (
121
133
  await persister.load(initialTables, initialValues);
122
134
  listening = 1;
123
135
  listeningHandle = addPersisterListener(
124
- async (getContent, getTransactionChanges) => {
125
- if (getTransactionChanges) {
126
- const transactionChanges = getTransactionChanges();
127
- await loadLock(async () =>
128
- store.setTransactionChanges(transactionChanges),
129
- );
136
+ async (getContent2, getChanges2) => {
137
+ if (getChanges2) {
138
+ const changes = getChanges2();
139
+ await loadLock(async () => store.applyChanges(changes));
130
140
  } else {
131
141
  await loadLock(async () => {
132
142
  try {
133
- store.setContent(getContent?.() ?? (await getPersisted()));
143
+ store.setContent(getContent2?.() ?? (await getPersisted()));
134
144
  } catch (error) {
135
145
  onIgnoredError?.(error);
136
146
  }
@@ -148,7 +158,7 @@ const createCustomPersister = (
148
158
  }
149
159
  return persister;
150
160
  },
151
- save: async (getTransactionChanges) => {
161
+ save: async (getChanges2) => {
152
162
  /* istanbul ignore else */
153
163
  if (loadSave != 1) {
154
164
  loadSave = 2;
@@ -157,7 +167,7 @@ const createCustomPersister = (
157
167
  }
158
168
  await persister.schedule(async () => {
159
169
  try {
160
- await setPersisted(store.getContent, getTransactionChanges);
170
+ await setPersisted(getContent, getChanges2);
161
171
  } catch (error) {
162
172
  /* istanbul ignore next */
163
173
  onIgnoredError?.(error);
@@ -169,14 +179,12 @@ const createCustomPersister = (
169
179
  },
170
180
  startAutoSave: async () => {
171
181
  await persister.stopAutoSave().save();
172
- listenerId = store.addDidFinishTransactionListener(
173
- (_store, getTransactionChanges) => {
174
- const [tableChanges, valueChanges] = getTransactionChanges();
175
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
176
- persister.save(() => [tableChanges, valueChanges]);
177
- }
178
- },
179
- );
182
+ listenerId = store.addDidFinishTransactionListener(() => {
183
+ const [tableChanges, valueChanges] = getChanges();
184
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
185
+ persister.save(() => [tableChanges, valueChanges]);
186
+ }
187
+ });
180
188
  return persister;
181
189
  },
182
190
  stopAutoSave: () => {
@@ -208,56 +216,51 @@ const getDocContent = (doc, docObjName) => [
208
216
  doc[docObjName].t,
209
217
  doc[docObjName].v,
210
218
  ];
211
- const setTransactionChangesToDoc = (
212
- doc,
213
- docObjName,
214
- getContent,
215
- getTransactionChanges,
216
- ) => {
219
+ const applyChangesToDoc = (doc, docObjName, getContent, getChanges) => {
217
220
  ensureDocContent(doc, docObjName);
218
221
  const [docTables, docValues] = getDocContent(doc, docObjName);
219
- const transactionChangesDidFail = () => {
220
- transactionChangesFailed = 1;
222
+ const changesDidFail = () => {
223
+ changesFailed = 1;
221
224
  };
222
- let transactionChangesFailed = 1;
223
- ifNotUndefined(getTransactionChanges?.(), ([cellChanges, valueChanges]) => {
224
- transactionChangesFailed = 0;
225
- objMap(cellChanges, (table, tableId) =>
226
- transactionChangesFailed
225
+ let changesFailed = 1;
226
+ ifNotUndefined(getChanges?.(), ([cellChanges, valueChanges]) => {
227
+ changesFailed = 0;
228
+ objToArray(cellChanges, (table, tableId) =>
229
+ changesFailed
227
230
  ? 0
228
231
  : isUndefined(table)
229
232
  ? objDel(docTables, tableId)
230
233
  : ifNotUndefined(
231
234
  docTables[tableId],
232
235
  (docTable) =>
233
- objMap(table, (row, rowId) =>
234
- transactionChangesFailed
236
+ objToArray(table, (row, rowId) =>
237
+ changesFailed
235
238
  ? 0
236
239
  : isUndefined(row)
237
240
  ? objDel(docTable, rowId)
238
241
  : ifNotUndefined(
239
242
  objGet(docTable, rowId),
240
243
  (docRow) =>
241
- objMap(row, (cell, cellId) =>
244
+ objToArray(row, (cell, cellId) =>
242
245
  isUndefined(cell)
243
246
  ? objDel(docRow, cellId)
244
247
  : (docRow[cellId] = cell),
245
248
  ),
246
- transactionChangesDidFail,
249
+ changesDidFail,
247
250
  ),
248
251
  ),
249
- transactionChangesDidFail,
252
+ changesDidFail,
250
253
  ),
251
254
  );
252
- objMap(valueChanges, (value, valueId) =>
253
- transactionChangesFailed
255
+ objToArray(valueChanges, (value, valueId) =>
256
+ changesFailed
254
257
  ? 0
255
258
  : isUndefined(value)
256
259
  ? objDel(docValues, valueId)
257
260
  : (docValues[valueId] = value),
258
261
  );
259
262
  });
260
- if (transactionChangesFailed) {
263
+ if (changesFailed) {
261
264
  const [tables, values] = getContent();
262
265
  docObjMatch(docTables, void 0, tables, (_, tableId, table) =>
263
266
  docObjMatch(docTables, tableId, table, (docTable, rowId, row) =>
@@ -281,12 +284,12 @@ const docObjMatch = (docObjOrParent, idInParent, obj, set) => {
281
284
  ? docObjOrParent
282
285
  : objEnsure(docObjOrParent, idInParent, () => ({}));
283
286
  let changed;
284
- objMap(obj, (value, id) => {
287
+ objToArray(obj, (value, id) => {
285
288
  if (set(docObj, id, value)) {
286
289
  changed = 1;
287
290
  }
288
291
  });
289
- objMap(docObj, (_, id) => {
292
+ objToArray(docObj, (_, id) => {
290
293
  if (!objHas(obj, id)) {
291
294
  objDel(docObj, id);
292
295
  changed = 1;
@@ -304,18 +307,15 @@ const createAutomergePersister = (
304
307
  onIgnoredError,
305
308
  ) => {
306
309
  docHandle.change((doc) => (doc[docObjName] = {}));
307
- const getPersisted = async () =>
308
- objSize(docHandle.doc[docObjName]) == 2
309
- ? getDocContent(docHandle.doc, docObjName)
310
+ const getPersisted = async () => {
311
+ const doc = await docHandle.doc();
312
+ return objSize(doc[docObjName]) == 2
313
+ ? getDocContent(doc, docObjName)
310
314
  : void 0;
311
- const setPersisted = async (getContent, getTransactionChanges) =>
315
+ };
316
+ const setPersisted = async (getContent, getChanges) =>
312
317
  docHandle.change((doc) =>
313
- setTransactionChangesToDoc(
314
- doc,
315
- docObjName,
316
- getContent,
317
- getTransactionChanges,
318
- ),
318
+ applyChangesToDoc(doc, docObjName, getContent, getChanges),
319
319
  );
320
320
  const addPersisterListener = (listener) => {
321
321
  const observer = ({doc}) => listener(() => getDocContent(doc, docObjName));
@@ -332,6 +332,7 @@ const createAutomergePersister = (
332
332
  addPersisterListener,
333
333
  delPersisterListener,
334
334
  onIgnoredError,
335
+ false,
335
336
  ['getDocHandle', docHandle],
336
337
  );
337
338
  };
@@ -1,7 +1,12 @@
1
+ const getTypeOf = (thing) => typeof thing;
2
+ const EMPTY_STRING = '';
3
+ const STRING = getTypeOf(EMPTY_STRING);
4
+
1
5
  const isInstanceOf = (thing, cls) => thing instanceof cls;
2
6
  const isUndefined = (thing) => thing == void 0;
3
7
  const ifNotUndefined = (value, then, otherwise) =>
4
8
  isUndefined(value) ? otherwise?.() : then(value);
9
+ const isString = (thing) => getTypeOf(thing) == STRING;
5
10
  const size = (arrayOrString) => arrayOrString.length;
6
11
 
7
12
  const arrayPush = (array, ...values) => array.push(...values);
@@ -53,6 +58,7 @@ const createCustomPersister = (
53
58
  addPersisterListener,
54
59
  delPersisterListener,
55
60
  onIgnoredError,
61
+ supportsMergeableStore,
56
62
  [getThing, thing] = [],
57
63
  scheduleId = [],
58
64
  ) => {
@@ -65,6 +71,10 @@ const createCustomPersister = (
65
71
  let listeningHandle;
66
72
  mapEnsure(scheduleRunning, scheduleId, () => 0);
67
73
  mapEnsure(scheduleActions, scheduleId, () => []);
74
+ const getContent =
75
+ (supportsMergeableStore ? store.getMergeableContent : null) ??
76
+ store.getContent;
77
+ const getChanges = store.getTransactionChanges;
68
78
  const run = async () => {
69
79
  /* istanbul ignore else */
70
80
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -100,7 +110,10 @@ const createCustomPersister = (
100
110
  load: async (initialTables, initialValues) =>
101
111
  await loadLock(async () => {
102
112
  try {
103
- store.setContent(await getPersisted());
113
+ const content = await getPersisted();
114
+ (supportsMergeableStore && isString(content[0])
115
+ ? store.applyMergeableChanges
116
+ : store.setContent)(content);
104
117
  } catch {
105
118
  store.setContent([initialTables, initialValues]);
106
119
  }
@@ -110,16 +123,14 @@ const createCustomPersister = (
110
123
  await persister.load(initialTables, initialValues);
111
124
  listening = 1;
112
125
  listeningHandle = addPersisterListener(
113
- async (getContent, getTransactionChanges) => {
114
- if (getTransactionChanges) {
115
- const transactionChanges = getTransactionChanges();
116
- await loadLock(async () =>
117
- store.setTransactionChanges(transactionChanges),
118
- );
126
+ async (getContent2, getChanges2) => {
127
+ if (getChanges2) {
128
+ const changes = getChanges2();
129
+ await loadLock(async () => store.applyChanges(changes));
119
130
  } else {
120
131
  await loadLock(async () => {
121
132
  try {
122
- store.setContent(getContent?.() ?? (await getPersisted()));
133
+ store.setContent(getContent2?.() ?? (await getPersisted()));
123
134
  } catch (error) {
124
135
  onIgnoredError?.(error);
125
136
  }
@@ -137,7 +148,7 @@ const createCustomPersister = (
137
148
  }
138
149
  return persister;
139
150
  },
140
- save: async (getTransactionChanges) => {
151
+ save: async (getChanges2) => {
141
152
  /* istanbul ignore else */
142
153
  if (loadSave != 1) {
143
154
  loadSave = 2;
@@ -146,7 +157,7 @@ const createCustomPersister = (
146
157
  }
147
158
  await persister.schedule(async () => {
148
159
  try {
149
- await setPersisted(store.getContent, getTransactionChanges);
160
+ await setPersisted(getContent, getChanges2);
150
161
  } catch (error) {
151
162
  /* istanbul ignore next */
152
163
  onIgnoredError?.(error);
@@ -158,14 +169,12 @@ const createCustomPersister = (
158
169
  },
159
170
  startAutoSave: async () => {
160
171
  await persister.stopAutoSave().save();
161
- listenerId = store.addDidFinishTransactionListener(
162
- (_store, getTransactionChanges) => {
163
- const [tableChanges, valueChanges] = getTransactionChanges();
164
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
165
- persister.save(() => [tableChanges, valueChanges]);
166
- }
167
- },
168
- );
172
+ listenerId = store.addDidFinishTransactionListener(() => {
173
+ const [tableChanges, valueChanges] = getChanges();
174
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
175
+ persister.save(() => [tableChanges, valueChanges]);
176
+ }
177
+ });
169
178
  return persister;
170
179
  },
171
180
  stopAutoSave: () => {
@@ -217,6 +226,7 @@ const createStoragePersister = (
217
226
  addPersisterListener,
218
227
  delPersisterListener,
219
228
  onIgnoredError,
229
+ false,
220
230
  ['getStorageName', storageName],
221
231
  );
222
232
  };
@@ -55,13 +55,12 @@ const isObject = (obj) =>
55
55
  );
56
56
  const objNew = (entries = []) => object.fromEntries(entries);
57
57
  const objMerge = (...objs) => object.assign({}, ...objs);
58
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
59
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
58
+ const objHas = (obj, id) => id in obj;
60
59
  const objDel = (obj, id) => {
61
60
  delete obj[id];
62
61
  return obj;
63
62
  };
64
- const objMap = (obj, cb) =>
63
+ const objToArray = (obj, cb) =>
65
64
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
66
65
  const objValues = (obj) => object.values(obj);
67
66
  const objSize = (obj) => size(objIds(obj));
@@ -83,7 +82,7 @@ const mapEnsure = (map, key, getDefaultValue) => {
83
82
  return mapGet(map, key);
84
83
  };
85
84
  const mapMatch = (map, obj, set, del = mapSet) => {
86
- objMap(obj, (value, id) => set(map, id, value));
85
+ objToArray(obj, (value, id) => set(map, id, value));
87
86
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
88
87
  return map;
89
88
  };
@@ -99,7 +98,12 @@ const setAdd = (set, value) => set?.add(value);
99
98
  const SELECT_STAR_FROM = SELECT + '*FROM';
100
99
  const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
101
100
  const WHERE = 'WHERE';
102
- const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
101
+ const getCommandFunctions = (
102
+ cmd,
103
+ managedTableNames,
104
+ onIgnoredError,
105
+ useOnConflict,
106
+ ) => {
103
107
  const schemaMap = mapNew();
104
108
  const canSelect = (tableName, rowIdColumnName) =>
105
109
  !isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
@@ -112,7 +116,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
112
116
  await cmd(
113
117
  'SELECT name ' +
114
118
  FROM_PRAGMA_TABLE +
115
- `list WHERE schema='main'AND type='table'AND name IN(` +
119
+ `list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
116
120
  getPlaceholders(managedTableNames) +
117
121
  `)ORDER BY name`,
118
122
  managedTableNames,
@@ -167,16 +171,18 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
167
171
  const saveTable = async (
168
172
  tableName,
169
173
  rowIdColumnName,
170
- table,
174
+ content,
171
175
  deleteEmptyColumns,
172
176
  deleteEmptyTable,
173
177
  partial = false,
174
178
  ) => {
175
- const tableCellIds = setNew();
176
- objMap(table ?? {}, (row) =>
177
- arrayMap(objIds(row ?? {}), (cellId) => setAdd(tableCellIds, cellId)),
179
+ const tableCellOrValueIds = setNew();
180
+ objToArray(content ?? {}, (contentRow) =>
181
+ arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
182
+ setAdd(tableCellOrValueIds, cellOrValueId),
183
+ ),
178
184
  );
179
- const tableColumnNames = collValues(tableCellIds);
185
+ const tableColumnNames = collValues(tableCellOrValueIds);
180
186
  if (
181
187
  !partial &&
182
188
  deleteEmptyTable &&
@@ -234,11 +240,11 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
234
240
  ]);
235
241
  }
236
242
  if (partial) {
237
- if (isUndefined(table)) {
243
+ if (isUndefined(content)) {
238
244
  await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
239
245
  } else {
240
246
  await promiseAll(
241
- objMap(table, async (row, rowId) => {
247
+ objToArray(content, async (row, rowId) => {
242
248
  if (isUndefined(row)) {
243
249
  await cmd(
244
250
  'DELETE FROM' +
@@ -249,10 +255,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
249
255
  [rowId],
250
256
  );
251
257
  } else if (!arrayIsEmpty(tableColumnNames)) {
252
- await upsert(cmd, tableName, rowIdColumnName, objIds(row), [
253
- rowId,
254
- ...objValues(row),
255
- ]);
258
+ await upsert(
259
+ cmd,
260
+ tableName,
261
+ rowIdColumnName,
262
+ objIds(row),
263
+ [rowId, ...objValues(row)],
264
+ useOnConflict,
265
+ );
256
266
  }
257
267
  }),
258
268
  );
@@ -265,7 +275,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
265
275
  );
266
276
  const args = [];
267
277
  const deleteRowIds = [];
268
- objMap(table ?? {}, (row, rowId) => {
278
+ objToArray(content ?? {}, (row, rowId) => {
269
279
  arrayPush(
270
280
  args,
271
281
  rowId,
@@ -314,9 +324,12 @@ const upsert = async (
314
324
  rowIdColumnName,
315
325
  changingColumnNames,
316
326
  args,
327
+ useOnConflict = true,
317
328
  ) =>
318
329
  await cmd(
319
- 'INSERT INTO' +
330
+ 'INSERT ' +
331
+ (useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
332
+ 'INTO' +
320
333
  escapeId(tableName) +
321
334
  '(' +
322
335
  escapeId(rowIdColumnName) +
@@ -334,18 +347,20 @@ const upsert = async (
334
347
  ),
335
348
  1,
336
349
  ) +
337
- 'ON CONFLICT(' +
338
- escapeId(rowIdColumnName) +
339
- ')DO UPDATE SET' +
340
- arrayJoin(
341
- arrayMap(
342
- changingColumnNames,
343
- (columnName) =>
344
- escapeId(columnName) + '=excluded.' + escapeId(columnName),
345
- ),
346
- COMMA,
347
- ),
348
- args,
350
+ (useOnConflict
351
+ ? 'ON CONFLICT(' +
352
+ escapeId(rowIdColumnName) +
353
+ ')DO UPDATE SET' +
354
+ arrayJoin(
355
+ arrayMap(
356
+ changingColumnNames,
357
+ (columnName) =>
358
+ escapeId(columnName) + '=excluded.' + escapeId(columnName),
359
+ ),
360
+ COMMA,
361
+ )
362
+ : EMPTY_STRING),
363
+ arrayMap(args, (arg) => arg ?? null),
349
364
  );
350
365
  const getPlaceholders = (array) =>
351
366
  arrayJoin(
@@ -368,6 +383,7 @@ const createCustomPersister = (
368
383
  addPersisterListener,
369
384
  delPersisterListener,
370
385
  onIgnoredError,
386
+ supportsMergeableStore,
371
387
  [getThing, thing] = [],
372
388
  scheduleId = [],
373
389
  ) => {
@@ -380,6 +396,10 @@ const createCustomPersister = (
380
396
  let listeningHandle;
381
397
  mapEnsure(scheduleRunning, scheduleId, () => 0);
382
398
  mapEnsure(scheduleActions, scheduleId, () => []);
399
+ const getContent =
400
+ (supportsMergeableStore ? store.getMergeableContent : null) ??
401
+ store.getContent;
402
+ const getChanges = store.getTransactionChanges;
383
403
  const run = async () => {
384
404
  /* istanbul ignore else */
385
405
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -415,7 +435,10 @@ const createCustomPersister = (
415
435
  load: async (initialTables, initialValues) =>
416
436
  await loadLock(async () => {
417
437
  try {
418
- store.setContent(await getPersisted());
438
+ const content = await getPersisted();
439
+ (supportsMergeableStore && isString(content[0])
440
+ ? store.applyMergeableChanges
441
+ : store.setContent)(content);
419
442
  } catch {
420
443
  store.setContent([initialTables, initialValues]);
421
444
  }
@@ -425,16 +448,14 @@ const createCustomPersister = (
425
448
  await persister.load(initialTables, initialValues);
426
449
  listening = 1;
427
450
  listeningHandle = addPersisterListener(
428
- async (getContent, getTransactionChanges) => {
429
- if (getTransactionChanges) {
430
- const transactionChanges = getTransactionChanges();
431
- await loadLock(async () =>
432
- store.setTransactionChanges(transactionChanges),
433
- );
451
+ async (getContent2, getChanges2) => {
452
+ if (getChanges2) {
453
+ const changes = getChanges2();
454
+ await loadLock(async () => store.applyChanges(changes));
434
455
  } else {
435
456
  await loadLock(async () => {
436
457
  try {
437
- store.setContent(getContent?.() ?? (await getPersisted()));
458
+ store.setContent(getContent2?.() ?? (await getPersisted()));
438
459
  } catch (error) {
439
460
  onIgnoredError?.(error);
440
461
  }
@@ -452,7 +473,7 @@ const createCustomPersister = (
452
473
  }
453
474
  return persister;
454
475
  },
455
- save: async (getTransactionChanges) => {
476
+ save: async (getChanges2) => {
456
477
  /* istanbul ignore else */
457
478
  if (loadSave != 1) {
458
479
  loadSave = 2;
@@ -461,7 +482,7 @@ const createCustomPersister = (
461
482
  }
462
483
  await persister.schedule(async () => {
463
484
  try {
464
- await setPersisted(store.getContent, getTransactionChanges);
485
+ await setPersisted(getContent, getChanges2);
465
486
  } catch (error) {
466
487
  /* istanbul ignore next */
467
488
  onIgnoredError?.(error);
@@ -473,14 +494,12 @@ const createCustomPersister = (
473
494
  },
474
495
  startAutoSave: async () => {
475
496
  await persister.stopAutoSave().save();
476
- listenerId = store.addDidFinishTransactionListener(
477
- (_store, getTransactionChanges) => {
478
- const [tableChanges, valueChanges] = getTransactionChanges();
479
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
480
- persister.save(() => [tableChanges, valueChanges]);
481
- }
482
- },
483
- );
497
+ listenerId = store.addDidFinishTransactionListener(() => {
498
+ const [tableChanges, valueChanges] = getChanges();
499
+ if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
500
+ persister.save(() => [tableChanges, valueChanges]);
501
+ }
502
+ });
484
503
  return persister;
485
504
  },
486
505
  stopAutoSave: () => {
@@ -546,6 +565,7 @@ const createJsonSqlitePersister = (
546
565
  addPersisterListener,
547
566
  delPersisterListener,
548
567
  onIgnoredError,
568
+ false,
549
569
  [getThing, db],
550
570
  db,
551
571
  );
@@ -566,9 +586,10 @@ const createTabularSqlitePersister = (
566
586
  managedTableNames,
567
587
  db,
568
588
  getThing,
589
+ useOnConflict,
569
590
  ) => {
570
591
  const [refreshSchema, loadTable, saveTable, transaction] =
571
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
592
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
572
593
  const saveTables = async (tables, partial) =>
573
594
  await promiseAll(
574
595
  mapMap(
@@ -577,12 +598,11 @@ const createTabularSqlitePersister = (
577
598
  [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
578
599
  tableId,
579
600
  ) => {
580
- const table = tables[tableId];
581
- if (!partial || table !== void 0) {
601
+ if (!partial || objHas(tables, tableId)) {
582
602
  await saveTable(
583
603
  tableName,
584
604
  rowIdColumnName,
585
- table,
605
+ tables[tableId],
586
606
  deleteEmptyColumns,
587
607
  deleteEmptyTable,
588
608
  partial,
@@ -632,11 +652,11 @@ const createTabularSqlitePersister = (
632
652
  ? [tables, values]
633
653
  : void 0;
634
654
  });
635
- const setPersisted = async (getContent, getTransactionChanges) =>
655
+ const setPersisted = async (getContent, getChanges) =>
636
656
  await transaction(async () => {
637
657
  await refreshSchema();
638
- if (!isUndefined(getTransactionChanges)) {
639
- const [tableChanges, valueChanges] = getTransactionChanges();
658
+ if (!isUndefined(getChanges)) {
659
+ const [tableChanges, valueChanges] = getChanges();
640
660
  await saveTables(tableChanges, true);
641
661
  await saveValues(valueChanges, true);
642
662
  } else {
@@ -652,6 +672,7 @@ const createTabularSqlitePersister = (
652
672
  addPersisterListener,
653
673
  delPersisterListener,
654
674
  onIgnoredError,
675
+ false,
655
676
  [getThing, db],
656
677
  db,
657
678
  );
@@ -689,7 +710,7 @@ const getDefaultedTabularConfigMap = (
689
710
  filter,
690
711
  ) => {
691
712
  const configMap = mapNew();
692
- objMap(configsObj, (configObj, id) => {
713
+ objToArray(configsObj, (configObj, id) => {
693
714
  const defaultedConfig = slice(
694
715
  objValues(
695
716
  objMerge(
@@ -764,6 +785,7 @@ const createSqlitePersister = (
764
785
  onIgnoredError,
765
786
  db,
766
787
  getThing = 'getDb',
788
+ useOnConflict,
767
789
  ) => {
768
790
  let dataVersion;
769
791
  let schemaVersion;
@@ -826,6 +848,7 @@ const createSqlitePersister = (
826
848
  collValues(managedTableNamesSet),
827
849
  db,
828
850
  getThing,
851
+ useOnConflict,
829
852
  );
830
853
  };
831
854