tinybase 5.0.0-beta.1 → 5.0.0-beta.10

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 (491) 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 -0
  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-partykit-server.cjs +1 -1
  32. package/lib/cjs/persisters/persister-partykit-server.cjs.gz +0 -0
  33. package/lib/cjs/persisters/persister-powersync.cjs +1 -0
  34. package/lib/cjs/persisters/persister-powersync.cjs.gz +0 -0
  35. package/lib/cjs/persisters/persister-remote.cjs +1 -1
  36. package/lib/cjs/persisters/persister-remote.cjs.gz +0 -0
  37. package/lib/cjs/persisters/persister-sqlite-wasm.cjs +1 -1
  38. package/lib/cjs/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  39. package/lib/cjs/persisters/persister-sqlite3.cjs +1 -1
  40. package/lib/cjs/persisters/persister-sqlite3.cjs.gz +0 -0
  41. package/lib/cjs/persisters/persister-yjs.cjs +1 -1
  42. package/lib/cjs/persisters/persister-yjs.cjs.gz +0 -0
  43. package/lib/cjs/persisters.cjs +1 -1
  44. package/lib/cjs/persisters.cjs.gz +0 -0
  45. package/lib/cjs/queries.cjs +1 -1
  46. package/lib/cjs/queries.cjs.gz +0 -0
  47. package/lib/cjs/relationships.cjs +1 -1
  48. package/lib/cjs/relationships.cjs.gz +0 -0
  49. package/lib/cjs/store.cjs +1 -1
  50. package/lib/cjs/store.cjs.gz +0 -0
  51. package/lib/cjs/synchronizers/synchronizer-local.cjs +1 -0
  52. package/lib/cjs/synchronizers/synchronizer-local.cjs.gz +0 -0
  53. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs +1 -0
  54. package/lib/cjs/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  55. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs +1 -0
  56. package/lib/cjs/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  57. package/lib/cjs/synchronizers.cjs +1 -0
  58. package/lib/cjs/synchronizers.cjs.gz +0 -0
  59. package/lib/cjs/tinybase.cjs +1 -1
  60. package/lib/cjs/tinybase.cjs.gz +0 -0
  61. package/lib/cjs/tools.cjs +1 -1
  62. package/lib/cjs/tools.cjs.gz +0 -0
  63. package/lib/cjs/ui-react-dom-debug.cjs +1 -1
  64. package/lib/cjs/ui-react-dom-debug.cjs.gz +0 -0
  65. package/lib/cjs/ui-react-dom.cjs +1 -1
  66. package/lib/cjs/ui-react-dom.cjs.gz +0 -0
  67. package/lib/cjs/ui-react.cjs +1 -1
  68. package/lib/cjs/ui-react.cjs.gz +0 -0
  69. package/lib/cjs-es6/checkpoints.cjs +1 -1
  70. package/lib/cjs-es6/checkpoints.cjs.gz +0 -0
  71. package/lib/cjs-es6/indexes.cjs +1 -1
  72. package/lib/cjs-es6/indexes.cjs.gz +0 -0
  73. package/lib/cjs-es6/mergeable-store.cjs +1 -0
  74. package/lib/cjs-es6/mergeable-store.cjs.gz +0 -0
  75. package/lib/cjs-es6/metrics.cjs +1 -1
  76. package/lib/cjs-es6/metrics.cjs.gz +0 -0
  77. package/lib/cjs-es6/persisters/persister-automerge.cjs +1 -1
  78. package/lib/cjs-es6/persisters/persister-automerge.cjs.gz +0 -0
  79. package/lib/cjs-es6/persisters/persister-browser.cjs +1 -1
  80. package/lib/cjs-es6/persisters/persister-browser.cjs.gz +0 -0
  81. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs +1 -1
  82. package/lib/cjs-es6/persisters/persister-cr-sqlite-wasm.cjs.gz +0 -0
  83. package/lib/cjs-es6/persisters/persister-electric-sql.cjs +1 -1
  84. package/lib/cjs-es6/persisters/persister-electric-sql.cjs.gz +0 -0
  85. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs +1 -1
  86. package/lib/cjs-es6/persisters/persister-expo-sqlite-next.cjs.gz +0 -0
  87. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs +1 -1
  88. package/lib/cjs-es6/persisters/persister-expo-sqlite.cjs.gz +0 -0
  89. package/lib/cjs-es6/persisters/persister-file.cjs +1 -1
  90. package/lib/cjs-es6/persisters/persister-file.cjs.gz +0 -0
  91. package/lib/cjs-es6/persisters/persister-indexed-db.cjs +1 -1
  92. package/lib/cjs-es6/persisters/persister-indexed-db.cjs.gz +0 -0
  93. package/lib/cjs-es6/persisters/persister-libsql.cjs +1 -0
  94. package/lib/cjs-es6/persisters/persister-libsql.cjs.gz +0 -0
  95. package/lib/cjs-es6/persisters/persister-partykit-client.cjs +1 -1
  96. package/lib/cjs-es6/persisters/persister-partykit-client.cjs.gz +0 -0
  97. package/lib/cjs-es6/persisters/persister-partykit-server.cjs +1 -1
  98. package/lib/cjs-es6/persisters/persister-partykit-server.cjs.gz +0 -0
  99. package/lib/cjs-es6/persisters/persister-powersync.cjs +1 -0
  100. package/lib/cjs-es6/persisters/persister-powersync.cjs.gz +0 -0
  101. package/lib/cjs-es6/persisters/persister-remote.cjs +1 -1
  102. package/lib/cjs-es6/persisters/persister-remote.cjs.gz +0 -0
  103. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs +1 -1
  104. package/lib/cjs-es6/persisters/persister-sqlite-wasm.cjs.gz +0 -0
  105. package/lib/cjs-es6/persisters/persister-sqlite3.cjs +1 -1
  106. package/lib/cjs-es6/persisters/persister-sqlite3.cjs.gz +0 -0
  107. package/lib/cjs-es6/persisters/persister-yjs.cjs +1 -1
  108. package/lib/cjs-es6/persisters/persister-yjs.cjs.gz +0 -0
  109. package/lib/cjs-es6/persisters.cjs +1 -1
  110. package/lib/cjs-es6/persisters.cjs.gz +0 -0
  111. package/lib/cjs-es6/queries.cjs +1 -1
  112. package/lib/cjs-es6/queries.cjs.gz +0 -0
  113. package/lib/cjs-es6/relationships.cjs +1 -1
  114. package/lib/cjs-es6/relationships.cjs.gz +0 -0
  115. package/lib/cjs-es6/store.cjs +1 -1
  116. package/lib/cjs-es6/store.cjs.gz +0 -0
  117. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs +1 -0
  118. package/lib/cjs-es6/synchronizers/synchronizer-local.cjs.gz +0 -0
  119. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs +1 -0
  120. package/lib/cjs-es6/synchronizers/synchronizer-ws-client.cjs.gz +0 -0
  121. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs +1 -0
  122. package/lib/cjs-es6/synchronizers/synchronizer-ws-server.cjs.gz +0 -0
  123. package/lib/cjs-es6/synchronizers.cjs +1 -0
  124. package/lib/cjs-es6/synchronizers.cjs.gz +0 -0
  125. package/lib/cjs-es6/tinybase.cjs +1 -1
  126. package/lib/cjs-es6/tinybase.cjs.gz +0 -0
  127. package/lib/cjs-es6/tools.cjs +1 -1
  128. package/lib/cjs-es6/tools.cjs.gz +0 -0
  129. package/lib/cjs-es6/ui-react-dom-debug.cjs +1 -1
  130. package/lib/cjs-es6/ui-react-dom-debug.cjs.gz +0 -0
  131. package/lib/cjs-es6/ui-react-dom.cjs +1 -1
  132. package/lib/cjs-es6/ui-react-dom.cjs.gz +0 -0
  133. package/lib/cjs-es6/ui-react.cjs +1 -1
  134. package/lib/cjs-es6/ui-react.cjs.gz +0 -0
  135. package/lib/debug/checkpoints.js +3 -1
  136. package/lib/debug/indexes.js +3 -1
  137. package/lib/debug/mergeable-store.js +2230 -0
  138. package/lib/debug/metrics.js +3 -1
  139. package/lib/debug/persisters/persister-automerge.js +110 -86
  140. package/lib/debug/persisters/persister-browser.js +94 -57
  141. package/lib/debug/persisters/persister-cr-sqlite-wasm.js +168 -106
  142. package/lib/debug/persisters/persister-electric-sql.js +168 -106
  143. package/lib/debug/persisters/persister-expo-sqlite-next.js +168 -106
  144. package/lib/debug/persisters/persister-expo-sqlite.js +168 -106
  145. package/lib/debug/persisters/persister-file.js +93 -57
  146. package/lib/debug/persisters/persister-indexed-db.js +90 -56
  147. package/lib/debug/persisters/persister-libsql.js +913 -0
  148. package/lib/debug/persisters/persister-partykit-client.js +89 -59
  149. package/lib/debug/persisters/persister-partykit-server.js +17 -25
  150. package/lib/debug/persisters/persister-powersync.js +928 -0
  151. package/lib/debug/persisters/persister-remote.js +85 -53
  152. package/lib/debug/persisters/persister-sqlite-wasm.js +168 -106
  153. package/lib/debug/persisters/persister-sqlite3.js +168 -106
  154. package/lib/debug/persisters/persister-yjs.js +108 -83
  155. package/lib/debug/persisters.js +81 -50
  156. package/lib/debug/queries.js +9 -6
  157. package/lib/debug/relationships.js +3 -1
  158. package/lib/debug/store.js +147 -126
  159. package/lib/debug/synchronizers/synchronizer-local.js +559 -0
  160. package/lib/debug/synchronizers/synchronizer-ws-client.js +586 -0
  161. package/lib/debug/synchronizers/synchronizer-ws-server.js +96 -0
  162. package/lib/debug/synchronizers.js +519 -0
  163. package/lib/debug/tinybase.js +1027 -174
  164. package/lib/debug/tools.js +22 -21
  165. package/lib/debug/ui-react-dom.js +275 -213
  166. package/lib/debug/ui-react.js +55 -6
  167. package/lib/es6/checkpoints.js +1 -1
  168. package/lib/es6/checkpoints.js.gz +0 -0
  169. package/lib/es6/indexes.js +1 -1
  170. package/lib/es6/indexes.js.gz +0 -0
  171. package/lib/es6/mergeable-store.js +1 -0
  172. package/lib/es6/mergeable-store.js.gz +0 -0
  173. package/lib/es6/metrics.js +1 -1
  174. package/lib/es6/metrics.js.gz +0 -0
  175. package/lib/es6/persisters/persister-automerge.js +1 -1
  176. package/lib/es6/persisters/persister-automerge.js.gz +0 -0
  177. package/lib/es6/persisters/persister-browser.js +1 -1
  178. package/lib/es6/persisters/persister-browser.js.gz +0 -0
  179. package/lib/es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  180. package/lib/es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  181. package/lib/es6/persisters/persister-electric-sql.js +1 -1
  182. package/lib/es6/persisters/persister-electric-sql.js.gz +0 -0
  183. package/lib/es6/persisters/persister-expo-sqlite-next.js +1 -1
  184. package/lib/es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  185. package/lib/es6/persisters/persister-expo-sqlite.js +1 -1
  186. package/lib/es6/persisters/persister-expo-sqlite.js.gz +0 -0
  187. package/lib/es6/persisters/persister-file.js +1 -1
  188. package/lib/es6/persisters/persister-file.js.gz +0 -0
  189. package/lib/es6/persisters/persister-indexed-db.js +1 -1
  190. package/lib/es6/persisters/persister-indexed-db.js.gz +0 -0
  191. package/lib/es6/persisters/persister-libsql.js +1 -0
  192. package/lib/es6/persisters/persister-libsql.js.gz +0 -0
  193. package/lib/es6/persisters/persister-partykit-client.js +1 -1
  194. package/lib/es6/persisters/persister-partykit-client.js.gz +0 -0
  195. package/lib/es6/persisters/persister-partykit-server.js +1 -1
  196. package/lib/es6/persisters/persister-partykit-server.js.gz +0 -0
  197. package/lib/es6/persisters/persister-powersync.js +1 -0
  198. package/lib/es6/persisters/persister-powersync.js.gz +0 -0
  199. package/lib/es6/persisters/persister-remote.js +1 -1
  200. package/lib/es6/persisters/persister-remote.js.gz +0 -0
  201. package/lib/es6/persisters/persister-sqlite-wasm.js +1 -1
  202. package/lib/es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  203. package/lib/es6/persisters/persister-sqlite3.js +1 -1
  204. package/lib/es6/persisters/persister-sqlite3.js.gz +0 -0
  205. package/lib/es6/persisters/persister-yjs.js +1 -1
  206. package/lib/es6/persisters/persister-yjs.js.gz +0 -0
  207. package/lib/es6/persisters.js +1 -1
  208. package/lib/es6/persisters.js.gz +0 -0
  209. package/lib/es6/queries.js +1 -1
  210. package/lib/es6/queries.js.gz +0 -0
  211. package/lib/es6/relationships.js +1 -1
  212. package/lib/es6/relationships.js.gz +0 -0
  213. package/lib/es6/store.js +1 -1
  214. package/lib/es6/store.js.gz +0 -0
  215. package/lib/es6/synchronizers/synchronizer-local.js +1 -0
  216. package/lib/es6/synchronizers/synchronizer-local.js.gz +0 -0
  217. package/lib/es6/synchronizers/synchronizer-ws-client.js +1 -0
  218. package/lib/es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  219. package/lib/es6/synchronizers/synchronizer-ws-server.js +1 -0
  220. package/lib/es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  221. package/lib/es6/synchronizers.js +1 -0
  222. package/lib/es6/synchronizers.js.gz +0 -0
  223. package/lib/es6/tinybase.js +1 -1
  224. package/lib/es6/tinybase.js.gz +0 -0
  225. package/lib/es6/tools.js +1 -1
  226. package/lib/es6/tools.js.gz +0 -0
  227. package/lib/es6/ui-react-dom-debug.js +1 -1
  228. package/lib/es6/ui-react-dom-debug.js.gz +0 -0
  229. package/lib/es6/ui-react-dom.js +1 -1
  230. package/lib/es6/ui-react-dom.js.gz +0 -0
  231. package/lib/es6/ui-react.js +1 -1
  232. package/lib/es6/ui-react.js.gz +0 -0
  233. package/lib/indexes.js +1 -1
  234. package/lib/indexes.js.gz +0 -0
  235. package/lib/mergeable-store.js +1 -0
  236. package/lib/mergeable-store.js.gz +0 -0
  237. package/lib/metrics.js +1 -1
  238. package/lib/metrics.js.gz +0 -0
  239. package/lib/persisters/persister-automerge.js +1 -1
  240. package/lib/persisters/persister-automerge.js.gz +0 -0
  241. package/lib/persisters/persister-browser.js +1 -1
  242. package/lib/persisters/persister-browser.js.gz +0 -0
  243. package/lib/persisters/persister-cr-sqlite-wasm.js +1 -1
  244. package/lib/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  245. package/lib/persisters/persister-electric-sql.js +1 -1
  246. package/lib/persisters/persister-electric-sql.js.gz +0 -0
  247. package/lib/persisters/persister-expo-sqlite-next.js +1 -1
  248. package/lib/persisters/persister-expo-sqlite-next.js.gz +0 -0
  249. package/lib/persisters/persister-expo-sqlite.js +1 -1
  250. package/lib/persisters/persister-expo-sqlite.js.gz +0 -0
  251. package/lib/persisters/persister-file.js +1 -1
  252. package/lib/persisters/persister-file.js.gz +0 -0
  253. package/lib/persisters/persister-indexed-db.js +1 -1
  254. package/lib/persisters/persister-indexed-db.js.gz +0 -0
  255. package/lib/persisters/persister-libsql.js +1 -0
  256. package/lib/persisters/persister-libsql.js.gz +0 -0
  257. package/lib/persisters/persister-partykit-client.js +1 -1
  258. package/lib/persisters/persister-partykit-client.js.gz +0 -0
  259. package/lib/persisters/persister-partykit-server.js +1 -1
  260. package/lib/persisters/persister-partykit-server.js.gz +0 -0
  261. package/lib/persisters/persister-powersync.js +1 -0
  262. package/lib/persisters/persister-powersync.js.gz +0 -0
  263. package/lib/persisters/persister-remote.js +1 -1
  264. package/lib/persisters/persister-remote.js.gz +0 -0
  265. package/lib/persisters/persister-sqlite-wasm.js +1 -1
  266. package/lib/persisters/persister-sqlite-wasm.js.gz +0 -0
  267. package/lib/persisters/persister-sqlite3.js +1 -1
  268. package/lib/persisters/persister-sqlite3.js.gz +0 -0
  269. package/lib/persisters/persister-yjs.js +1 -1
  270. package/lib/persisters/persister-yjs.js.gz +0 -0
  271. package/lib/persisters.js +1 -1
  272. package/lib/persisters.js.gz +0 -0
  273. package/lib/queries.js +1 -1
  274. package/lib/queries.js.gz +0 -0
  275. package/lib/relationships.js +1 -1
  276. package/lib/relationships.js.gz +0 -0
  277. package/lib/store.js +1 -1
  278. package/lib/store.js.gz +0 -0
  279. package/lib/synchronizers/synchronizer-local.js +1 -0
  280. package/lib/synchronizers/synchronizer-local.js.gz +0 -0
  281. package/lib/synchronizers/synchronizer-ws-client.js +1 -0
  282. package/lib/synchronizers/synchronizer-ws-client.js.gz +0 -0
  283. package/lib/synchronizers/synchronizer-ws-server.js +1 -0
  284. package/lib/synchronizers/synchronizer-ws-server.js.gz +0 -0
  285. package/lib/synchronizers.js +1 -0
  286. package/lib/synchronizers.js.gz +0 -0
  287. package/lib/tinybase.js +1 -1
  288. package/lib/tinybase.js.gz +0 -0
  289. package/lib/tools.js +1 -1
  290. package/lib/tools.js.gz +0 -0
  291. package/lib/types/checkpoints.d.ts +2 -2
  292. package/lib/types/indexes.d.ts +2 -2
  293. package/lib/types/mergeable-store.d.ts +214 -0
  294. package/lib/types/metrics.d.ts +2 -2
  295. package/lib/types/persisters/persister-automerge.d.ts +11 -7
  296. package/lib/types/persisters/persister-browser.d.ts +13 -4
  297. package/lib/types/persisters/persister-cr-sqlite-wasm.d.ts +4 -0
  298. package/lib/types/persisters/persister-electric-sql.d.ts +4 -0
  299. package/lib/types/persisters/persister-expo-sqlite-next.d.ts +4 -0
  300. package/lib/types/persisters/persister-expo-sqlite.d.ts +4 -0
  301. package/lib/types/persisters/persister-file.d.ts +7 -2
  302. package/lib/types/persisters/persister-indexed-db.d.ts +4 -0
  303. package/lib/types/persisters/persister-libsql.d.ts +142 -0
  304. package/lib/types/persisters/persister-partykit-client.d.ts +4 -0
  305. package/lib/types/persisters/persister-partykit-server.d.ts +12 -8
  306. package/lib/types/persisters/persister-powersync.d.ts +157 -0
  307. package/lib/types/persisters/persister-remote.d.ts +4 -0
  308. package/lib/types/persisters/persister-sqlite-wasm.d.ts +4 -0
  309. package/lib/types/persisters/persister-sqlite3.d.ts +4 -0
  310. package/lib/types/persisters/persister-yjs.d.ts +6 -2
  311. package/lib/types/persisters.d.ts +125 -48
  312. package/lib/types/queries.d.ts +2 -2
  313. package/lib/types/relationships.d.ts +2 -2
  314. package/lib/types/store.d.ts +275 -187
  315. package/lib/types/synchronizers/synchronizer-local.d.ts +27 -0
  316. package/lib/types/synchronizers/synchronizer-ws-client.d.ts +35 -0
  317. package/lib/types/synchronizers/synchronizer-ws-server.d.ts +36 -0
  318. package/lib/types/synchronizers.d.ts +132 -0
  319. package/lib/types/tinybase.d.ts +10 -8
  320. package/lib/types/tools.d.ts +4 -4
  321. package/lib/types/ui-react.d.ts +160 -9
  322. package/lib/types/with-schemas/checkpoints.d.ts +2 -2
  323. package/lib/types/with-schemas/indexes.d.ts +2 -2
  324. package/lib/types/with-schemas/internal/store.d.ts +4 -0
  325. package/lib/types/with-schemas/mergeable-store.d.ts +492 -0
  326. package/lib/types/with-schemas/metrics.d.ts +2 -2
  327. package/lib/types/with-schemas/persisters/persister-automerge.d.ts +12 -8
  328. package/lib/types/with-schemas/persisters/persister-browser.d.ts +17 -8
  329. package/lib/types/with-schemas/persisters/persister-cr-sqlite-wasm.d.ts +5 -1
  330. package/lib/types/with-schemas/persisters/persister-electric-sql.d.ts +5 -1
  331. package/lib/types/with-schemas/persisters/persister-expo-sqlite-next.d.ts +5 -1
  332. package/lib/types/with-schemas/persisters/persister-expo-sqlite.d.ts +5 -1
  333. package/lib/types/with-schemas/persisters/persister-file.d.ts +9 -4
  334. package/lib/types/with-schemas/persisters/persister-indexed-db.d.ts +5 -1
  335. package/lib/types/with-schemas/persisters/persister-libsql.d.ts +155 -0
  336. package/lib/types/with-schemas/persisters/persister-partykit-client.d.ts +5 -1
  337. package/lib/types/with-schemas/persisters/persister-partykit-server.d.ts +15 -11
  338. package/lib/types/with-schemas/persisters/persister-powersync.d.ts +170 -0
  339. package/lib/types/with-schemas/persisters/persister-remote.d.ts +5 -1
  340. package/lib/types/with-schemas/persisters/persister-sqlite-wasm.d.ts +5 -1
  341. package/lib/types/with-schemas/persisters/persister-sqlite3.d.ts +5 -1
  342. package/lib/types/with-schemas/persisters/persister-yjs.d.ts +7 -3
  343. package/lib/types/with-schemas/persisters.d.ts +161 -101
  344. package/lib/types/with-schemas/queries.d.ts +3 -3
  345. package/lib/types/with-schemas/relationships.d.ts +2 -2
  346. package/lib/types/with-schemas/store.d.ts +483 -345
  347. package/lib/types/with-schemas/synchronizers/synchronizer-local.d.ts +29 -0
  348. package/lib/types/with-schemas/synchronizers/synchronizer-ws-client.d.ts +41 -0
  349. package/lib/types/with-schemas/synchronizers/synchronizer-ws-server.d.ts +36 -0
  350. package/lib/types/with-schemas/synchronizers.d.ts +146 -0
  351. package/lib/types/with-schemas/tinybase.d.ts +9 -8
  352. package/lib/types/with-schemas/tools.d.ts +4 -4
  353. package/lib/types/with-schemas/ui-react.d.ts +177 -9
  354. package/lib/ui-react-dom.js +1 -1
  355. package/lib/ui-react-dom.js.gz +0 -0
  356. package/lib/ui-react.js +1 -1
  357. package/lib/ui-react.js.gz +0 -0
  358. package/lib/umd/checkpoints.js +1 -1
  359. package/lib/umd/checkpoints.js.gz +0 -0
  360. package/lib/umd/indexes.js +1 -1
  361. package/lib/umd/indexes.js.gz +0 -0
  362. package/lib/umd/mergeable-store.js +1 -0
  363. package/lib/umd/mergeable-store.js.gz +0 -0
  364. package/lib/umd/metrics.js +1 -1
  365. package/lib/umd/metrics.js.gz +0 -0
  366. package/lib/umd/persisters/persister-automerge.js +1 -1
  367. package/lib/umd/persisters/persister-automerge.js.gz +0 -0
  368. package/lib/umd/persisters/persister-browser.js +1 -1
  369. package/lib/umd/persisters/persister-browser.js.gz +0 -0
  370. package/lib/umd/persisters/persister-cr-sqlite-wasm.js +1 -1
  371. package/lib/umd/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  372. package/lib/umd/persisters/persister-electric-sql.js +1 -1
  373. package/lib/umd/persisters/persister-electric-sql.js.gz +0 -0
  374. package/lib/umd/persisters/persister-expo-sqlite-next.js +1 -1
  375. package/lib/umd/persisters/persister-expo-sqlite-next.js.gz +0 -0
  376. package/lib/umd/persisters/persister-expo-sqlite.js +1 -1
  377. package/lib/umd/persisters/persister-expo-sqlite.js.gz +0 -0
  378. package/lib/umd/persisters/persister-file.js +1 -1
  379. package/lib/umd/persisters/persister-file.js.gz +0 -0
  380. package/lib/umd/persisters/persister-indexed-db.js +1 -1
  381. package/lib/umd/persisters/persister-indexed-db.js.gz +0 -0
  382. package/lib/umd/persisters/persister-libsql.js +1 -0
  383. package/lib/umd/persisters/persister-libsql.js.gz +0 -0
  384. package/lib/umd/persisters/persister-partykit-client.js +1 -1
  385. package/lib/umd/persisters/persister-partykit-client.js.gz +0 -0
  386. package/lib/umd/persisters/persister-partykit-server.js +1 -1
  387. package/lib/umd/persisters/persister-partykit-server.js.gz +0 -0
  388. package/lib/umd/persisters/persister-powersync.js +1 -0
  389. package/lib/umd/persisters/persister-powersync.js.gz +0 -0
  390. package/lib/umd/persisters/persister-remote.js +1 -1
  391. package/lib/umd/persisters/persister-remote.js.gz +0 -0
  392. package/lib/umd/persisters/persister-sqlite-wasm.js +1 -1
  393. package/lib/umd/persisters/persister-sqlite-wasm.js.gz +0 -0
  394. package/lib/umd/persisters/persister-sqlite3.js +1 -1
  395. package/lib/umd/persisters/persister-sqlite3.js.gz +0 -0
  396. package/lib/umd/persisters/persister-yjs.js +1 -1
  397. package/lib/umd/persisters/persister-yjs.js.gz +0 -0
  398. package/lib/umd/persisters.js +1 -1
  399. package/lib/umd/persisters.js.gz +0 -0
  400. package/lib/umd/queries.js +1 -1
  401. package/lib/umd/queries.js.gz +0 -0
  402. package/lib/umd/relationships.js +1 -1
  403. package/lib/umd/relationships.js.gz +0 -0
  404. package/lib/umd/store.js +1 -1
  405. package/lib/umd/store.js.gz +0 -0
  406. package/lib/umd/synchronizers/synchronizer-local.js +1 -0
  407. package/lib/umd/synchronizers/synchronizer-local.js.gz +0 -0
  408. package/lib/umd/synchronizers/synchronizer-ws-client.js +1 -0
  409. package/lib/umd/synchronizers/synchronizer-ws-client.js.gz +0 -0
  410. package/lib/umd/synchronizers/synchronizer-ws-server.js +1 -0
  411. package/lib/umd/synchronizers/synchronizer-ws-server.js.gz +0 -0
  412. package/lib/umd/synchronizers.js +1 -0
  413. package/lib/umd/synchronizers.js.gz +0 -0
  414. package/lib/umd/tinybase.js +1 -1
  415. package/lib/umd/tinybase.js.gz +0 -0
  416. package/lib/umd/tools.js +1 -1
  417. package/lib/umd/tools.js.gz +0 -0
  418. package/lib/umd/ui-react-dom-debug.js +1 -1
  419. package/lib/umd/ui-react-dom-debug.js.gz +0 -0
  420. package/lib/umd/ui-react-dom.js +1 -1
  421. package/lib/umd/ui-react-dom.js.gz +0 -0
  422. package/lib/umd/ui-react.js +1 -1
  423. package/lib/umd/ui-react.js.gz +0 -0
  424. package/lib/umd-es6/checkpoints.js +1 -1
  425. package/lib/umd-es6/checkpoints.js.gz +0 -0
  426. package/lib/umd-es6/indexes.js +1 -1
  427. package/lib/umd-es6/indexes.js.gz +0 -0
  428. package/lib/umd-es6/mergeable-store.js +1 -0
  429. package/lib/umd-es6/mergeable-store.js.gz +0 -0
  430. package/lib/umd-es6/metrics.js +1 -1
  431. package/lib/umd-es6/metrics.js.gz +0 -0
  432. package/lib/umd-es6/persisters/persister-automerge.js +1 -1
  433. package/lib/umd-es6/persisters/persister-automerge.js.gz +0 -0
  434. package/lib/umd-es6/persisters/persister-browser.js +1 -1
  435. package/lib/umd-es6/persisters/persister-browser.js.gz +0 -0
  436. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js +1 -1
  437. package/lib/umd-es6/persisters/persister-cr-sqlite-wasm.js.gz +0 -0
  438. package/lib/umd-es6/persisters/persister-electric-sql.js +1 -1
  439. package/lib/umd-es6/persisters/persister-electric-sql.js.gz +0 -0
  440. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js +1 -1
  441. package/lib/umd-es6/persisters/persister-expo-sqlite-next.js.gz +0 -0
  442. package/lib/umd-es6/persisters/persister-expo-sqlite.js +1 -1
  443. package/lib/umd-es6/persisters/persister-expo-sqlite.js.gz +0 -0
  444. package/lib/umd-es6/persisters/persister-file.js +1 -1
  445. package/lib/umd-es6/persisters/persister-file.js.gz +0 -0
  446. package/lib/umd-es6/persisters/persister-indexed-db.js +1 -1
  447. package/lib/umd-es6/persisters/persister-indexed-db.js.gz +0 -0
  448. package/lib/umd-es6/persisters/persister-libsql.js +1 -0
  449. package/lib/umd-es6/persisters/persister-libsql.js.gz +0 -0
  450. package/lib/umd-es6/persisters/persister-partykit-client.js +1 -1
  451. package/lib/umd-es6/persisters/persister-partykit-client.js.gz +0 -0
  452. package/lib/umd-es6/persisters/persister-partykit-server.js +1 -1
  453. package/lib/umd-es6/persisters/persister-partykit-server.js.gz +0 -0
  454. package/lib/umd-es6/persisters/persister-powersync.js +1 -0
  455. package/lib/umd-es6/persisters/persister-powersync.js.gz +0 -0
  456. package/lib/umd-es6/persisters/persister-remote.js +1 -1
  457. package/lib/umd-es6/persisters/persister-remote.js.gz +0 -0
  458. package/lib/umd-es6/persisters/persister-sqlite-wasm.js +1 -1
  459. package/lib/umd-es6/persisters/persister-sqlite-wasm.js.gz +0 -0
  460. package/lib/umd-es6/persisters/persister-sqlite3.js +1 -1
  461. package/lib/umd-es6/persisters/persister-sqlite3.js.gz +0 -0
  462. package/lib/umd-es6/persisters/persister-yjs.js +1 -1
  463. package/lib/umd-es6/persisters/persister-yjs.js.gz +0 -0
  464. package/lib/umd-es6/persisters.js +1 -1
  465. package/lib/umd-es6/persisters.js.gz +0 -0
  466. package/lib/umd-es6/queries.js +1 -1
  467. package/lib/umd-es6/queries.js.gz +0 -0
  468. package/lib/umd-es6/relationships.js +1 -1
  469. package/lib/umd-es6/relationships.js.gz +0 -0
  470. package/lib/umd-es6/store.js +1 -1
  471. package/lib/umd-es6/store.js.gz +0 -0
  472. package/lib/umd-es6/synchronizers/synchronizer-local.js +1 -0
  473. package/lib/umd-es6/synchronizers/synchronizer-local.js.gz +0 -0
  474. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js +1 -0
  475. package/lib/umd-es6/synchronizers/synchronizer-ws-client.js.gz +0 -0
  476. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js +1 -0
  477. package/lib/umd-es6/synchronizers/synchronizer-ws-server.js.gz +0 -0
  478. package/lib/umd-es6/synchronizers.js +1 -0
  479. package/lib/umd-es6/synchronizers.js.gz +0 -0
  480. package/lib/umd-es6/tinybase.js +1 -1
  481. package/lib/umd-es6/tinybase.js.gz +0 -0
  482. package/lib/umd-es6/tools.js +1 -1
  483. package/lib/umd-es6/tools.js.gz +0 -0
  484. package/lib/umd-es6/ui-react-dom-debug.js +1 -1
  485. package/lib/umd-es6/ui-react-dom-debug.js.gz +0 -0
  486. package/lib/umd-es6/ui-react-dom.js +1 -1
  487. package/lib/umd-es6/ui-react-dom.js.gz +0 -0
  488. package/lib/umd-es6/ui-react.js +1 -1
  489. package/lib/umd-es6/ui-react.js.gz +0 -0
  490. package/package.json +65 -45
  491. package/readme.md +2 -2
@@ -41,8 +41,6 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
41
41
  const object = Object;
42
42
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
43
43
  const objEntries = object.entries;
44
- const objIds = object.keys;
45
- const objFreeze = object.freeze;
46
44
  const isObject = (obj) =>
47
45
  !isUndefined(obj) &&
48
46
  ifNotUndefined(
@@ -53,15 +51,16 @@ const isObject = (obj) =>
53
51
  /* istanbul ignore next */
54
52
  () => true,
55
53
  );
54
+ const objIds = object.keys;
55
+ const objFreeze = object.freeze;
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));
@@ -76,14 +75,16 @@ const mapMap = (coll, cb) =>
76
75
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
77
76
  const mapSet = (map, key, value) =>
78
77
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
79
- const mapEnsure = (map, key, getDefaultValue) => {
78
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
80
79
  if (!collHas(map, key)) {
81
80
  mapSet(map, key, getDefaultValue());
81
+ } else {
82
+ hadExistingValue?.(mapGet(map, key));
82
83
  }
83
84
  return mapGet(map, key);
84
85
  };
85
86
  const mapMatch = (map, obj, set, del = mapSet) => {
86
- objMap(obj, (value, id) => set(map, id, value));
87
+ objToArray(obj, (value, id) => set(map, id, value));
87
88
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
88
89
  return map;
89
90
  };
@@ -96,10 +97,18 @@ const setNew = (entryOrEntries) =>
96
97
  );
97
98
  const setAdd = (set, value) => set?.add(value);
98
99
 
100
+ const TABLE = 'TABLE';
101
+ const ALTER_TABLE = 'ALTER ' + TABLE;
102
+ const DELETE_FROM = 'DELETE FROM';
99
103
  const SELECT_STAR_FROM = SELECT + '*FROM';
100
104
  const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
101
105
  const WHERE = 'WHERE';
102
- const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
106
+ const getCommandFunctions = (
107
+ cmd,
108
+ managedTableNames,
109
+ onIgnoredError,
110
+ useOnConflict,
111
+ ) => {
103
112
  const schemaMap = mapNew();
104
113
  const canSelect = (tableName, rowIdColumnName) =>
105
114
  !isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
@@ -112,7 +121,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
112
121
  await cmd(
113
122
  'SELECT name ' +
114
123
  FROM_PRAGMA_TABLE +
115
- `list WHERE schema='main'AND type='table'AND name IN(` +
124
+ `list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
116
125
  getPlaceholders(managedTableNames) +
117
126
  `)ORDER BY name`,
118
127
  managedTableNames,
@@ -167,31 +176,38 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
167
176
  const saveTable = async (
168
177
  tableName,
169
178
  rowIdColumnName,
170
- table,
179
+ content,
171
180
  deleteEmptyColumns,
172
181
  deleteEmptyTable,
173
182
  partial = false,
174
183
  ) => {
175
- const tableCellIds = setNew();
176
- objMap(table ?? {}, (row) =>
177
- arrayMap(objIds(row ?? {}), (cellId) => setAdd(tableCellIds, cellId)),
184
+ const tableCellOrValueIds = setNew();
185
+ objToArray(content ?? {}, (contentRow) =>
186
+ arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
187
+ setAdd(tableCellOrValueIds, cellOrValueId),
188
+ ),
178
189
  );
179
- const tableColumnNames = collValues(tableCellIds);
190
+ const tableColumnNames = collValues(tableCellOrValueIds);
180
191
  if (
181
192
  !partial &&
182
193
  deleteEmptyTable &&
183
194
  arrayIsEmpty(tableColumnNames) &&
184
195
  collHas(schemaMap, tableName)
185
196
  ) {
186
- await cmd('DROP TABLE' + escapeId(tableName));
197
+ await cmd('DROP ' + TABLE + escapeId(tableName));
187
198
  mapSet(schemaMap, tableName);
188
199
  return;
189
200
  }
190
201
  if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
191
202
  await cmd(
192
- `CREATE TABLE${escapeId(tableName)}(${escapeId(rowIdColumnName)} PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
193
- arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
194
- )});`,
203
+ `CREATE ` +
204
+ TABLE +
205
+ escapeId(tableName) +
206
+ '(' +
207
+ escapeId(rowIdColumnName) +
208
+ ` PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
209
+ arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
210
+ )});`,
195
211
  );
196
212
  mapSet(
197
213
  schemaMap,
@@ -211,7 +227,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
211
227
  ...arrayMap(tableColumnNames, async (columnName) => {
212
228
  if (!collDel(columnNamesAccountedFor, columnName)) {
213
229
  await cmd(
214
- `ALTER TABLE${escapeId(tableName)}ADD${escapeId(columnName)}`,
230
+ ALTER_TABLE + escapeId(tableName) + 'ADD' + escapeId(columnName),
215
231
  );
216
232
  mapSet(tableSchemaMap, columnName, EMPTY_STRING);
217
233
  }
@@ -222,9 +238,10 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
222
238
  async (columnName) => {
223
239
  if (columnName != rowIdColumnName) {
224
240
  await cmd(
225
- `ALTER TABLE${escapeId(tableName)}DROP${escapeId(
226
- columnName,
227
- )}`,
241
+ ALTER_TABLE +
242
+ escapeId(tableName) +
243
+ 'DROP' +
244
+ escapeId(columnName),
228
245
  );
229
246
  mapSet(tableSchemaMap, columnName);
230
247
  }
@@ -234,14 +251,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
234
251
  ]);
235
252
  }
236
253
  if (partial) {
237
- if (isUndefined(table)) {
238
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
254
+ if (isUndefined(content)) {
255
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
239
256
  } else {
240
257
  await promiseAll(
241
- objMap(table, async (row, rowId) => {
258
+ objToArray(content, async (row, rowId) => {
242
259
  if (isUndefined(row)) {
243
260
  await cmd(
244
- 'DELETE FROM' +
261
+ DELETE_FROM +
245
262
  escapeId(tableName) +
246
263
  WHERE +
247
264
  escapeId(rowIdColumnName) +
@@ -249,10 +266,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
249
266
  [rowId],
250
267
  );
251
268
  } else if (!arrayIsEmpty(tableColumnNames)) {
252
- await upsert(cmd, tableName, rowIdColumnName, objIds(row), [
253
- rowId,
254
- ...objValues(row),
255
- ]);
269
+ await upsert(
270
+ cmd,
271
+ tableName,
272
+ rowIdColumnName,
273
+ objIds(row),
274
+ [rowId, ...objValues(row)],
275
+ useOnConflict,
276
+ );
256
277
  }
257
278
  }),
258
279
  );
@@ -265,7 +286,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
265
286
  );
266
287
  const args = [];
267
288
  const deleteRowIds = [];
268
- objMap(table ?? {}, (row, rowId) => {
289
+ objToArray(content ?? {}, (row, rowId) => {
269
290
  arrayPush(
270
291
  args,
271
292
  rowId,
@@ -279,9 +300,10 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
279
300
  rowIdColumnName,
280
301
  changingColumnNames,
281
302
  args,
303
+ useOnConflict,
282
304
  );
283
305
  await cmd(
284
- 'DELETE FROM' +
306
+ DELETE_FROM +
285
307
  escapeId(tableName) +
286
308
  WHERE +
287
309
  escapeId(rowIdColumnName) +
@@ -291,7 +313,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
291
313
  deleteRowIds,
292
314
  );
293
315
  } else if (collHas(schemaMap, tableName)) {
294
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
316
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
295
317
  }
296
318
  }
297
319
  };
@@ -314,9 +336,12 @@ const upsert = async (
314
336
  rowIdColumnName,
315
337
  changingColumnNames,
316
338
  args,
339
+ useOnConflict = true,
317
340
  ) =>
318
341
  await cmd(
319
- 'INSERT INTO' +
342
+ 'INSERT ' +
343
+ (useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
344
+ 'INTO' +
320
345
  escapeId(tableName) +
321
346
  '(' +
322
347
  escapeId(rowIdColumnName) +
@@ -334,18 +359,20 @@ const upsert = async (
334
359
  ),
335
360
  1,
336
361
  ) +
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,
362
+ (useOnConflict
363
+ ? 'ON CONFLICT(' +
364
+ escapeId(rowIdColumnName) +
365
+ ')DO UPDATE SET' +
366
+ arrayJoin(
367
+ arrayMap(
368
+ changingColumnNames,
369
+ (columnName) =>
370
+ escapeId(columnName) + '=excluded.' + escapeId(columnName),
371
+ ),
372
+ COMMA,
373
+ )
374
+ : EMPTY_STRING),
375
+ arrayMap(args, (arg) => arg ?? null),
349
376
  );
350
377
  const getPlaceholders = (array) =>
351
378
  arrayJoin(
@@ -353,7 +380,7 @@ const getPlaceholders = (array) =>
353
380
  COMMA,
354
381
  );
355
382
 
356
- const jsonString = (obj) =>
383
+ const jsonStringWithMap = (obj) =>
357
384
  JSON.stringify(obj, (_key, value) =>
358
385
  isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
359
386
  );
@@ -361,6 +388,24 @@ const jsonParse = JSON.parse;
361
388
 
362
389
  const scheduleRunning = mapNew();
363
390
  const scheduleActions = mapNew();
391
+ const getStoreFunctions = (supportsMergeableStore, store) =>
392
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
393
+ ? [
394
+ 0,
395
+ store.getContent,
396
+ store.getTransactionChanges,
397
+ ([changedTables, changedValues]) =>
398
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
399
+ store.setContent,
400
+ ]
401
+ : [
402
+ 1,
403
+ store.getMergeableContent,
404
+ store.getTransactionMergeableChanges,
405
+ ([[changedTables], [changedValues]]) =>
406
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
407
+ store.setDefaultContent,
408
+ ];
364
409
  const createCustomPersister = (
365
410
  store,
366
411
  getPersisted,
@@ -368,18 +413,25 @@ const createCustomPersister = (
368
413
  addPersisterListener,
369
414
  delPersisterListener,
370
415
  onIgnoredError,
371
- [getThing, thing] = [],
416
+ supportsMergeableStore,
417
+ extra = {},
372
418
  scheduleId = [],
373
419
  ) => {
374
- let listenerId;
375
420
  let loadSave = 0;
376
421
  let loads = 0;
377
422
  let saves = 0;
378
- let listening = 0;
379
423
  let action;
380
- let listeningHandle;
424
+ let autoLoadHandle;
425
+ let autoSaveListenerId;
381
426
  mapEnsure(scheduleRunning, scheduleId, () => 0);
382
427
  mapEnsure(scheduleActions, scheduleId, () => []);
428
+ const [
429
+ isMergeableStore,
430
+ getContent,
431
+ getChanges,
432
+ hasChanges,
433
+ setDefaultContent,
434
+ ] = getStoreFunctions(supportsMergeableStore, store);
383
435
  const run = async () => {
384
436
  /* istanbul ignore else */
385
437
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -411,48 +463,54 @@ const createCustomPersister = (
411
463
  }
412
464
  return persister;
413
465
  };
466
+ const setContentOrChanges = (contentOrChanges) => {
467
+ (isMergeableStore && isArray(contentOrChanges?.[0])
468
+ ? contentOrChanges?.[2] === 1
469
+ ? store.applyMergeableChanges
470
+ : store.setMergeableContent
471
+ : contentOrChanges?.[2] === 1
472
+ ? store.applyChanges
473
+ : store.setContent)(contentOrChanges);
474
+ };
414
475
  const persister = {
415
- load: async (initialTables, initialValues) =>
476
+ load: async (initialContent) =>
416
477
  await loadLock(async () => {
417
478
  try {
418
- store.setContent(await getPersisted());
419
- } catch {
420
- store.setContent([initialTables, initialValues]);
479
+ setContentOrChanges(await getPersisted());
480
+ } catch (error) {
481
+ onIgnoredError?.(error);
482
+ if (initialContent) {
483
+ setDefaultContent(initialContent);
484
+ }
421
485
  }
422
486
  }),
423
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
424
- persister.stopAutoLoad();
425
- await persister.load(initialTables, initialValues);
426
- listening = 1;
427
- listeningHandle = addPersisterListener(
428
- async (getContent, getTransactionChanges) => {
429
- if (getTransactionChanges) {
430
- const transactionChanges = getTransactionChanges();
431
- await loadLock(async () =>
432
- store.setTransactionChanges(transactionChanges),
433
- );
434
- } else {
435
- await loadLock(async () => {
436
- try {
437
- store.setContent(getContent?.() ?? (await getPersisted()));
438
- } catch (error) {
439
- onIgnoredError?.(error);
440
- }
441
- });
442
- }
487
+ startAutoLoad: async (initialContent) => {
488
+ await persister.stopAutoLoad().load(initialContent);
489
+ autoLoadHandle = addPersisterListener(
490
+ async (getContent2, getChanges2) => {
491
+ const changes = getChanges2?.();
492
+ await loadLock(async () => {
493
+ try {
494
+ setContentOrChanges(
495
+ changes ?? getContent2?.() ?? (await getPersisted()),
496
+ );
497
+ } catch (error) {
498
+ onIgnoredError?.(error);
499
+ }
500
+ });
443
501
  },
444
502
  );
445
503
  return persister;
446
504
  },
447
505
  stopAutoLoad: () => {
448
- if (listening) {
449
- delPersisterListener(listeningHandle);
450
- listeningHandle = void 0;
451
- listening = 0;
506
+ if (autoLoadHandle) {
507
+ delPersisterListener(autoLoadHandle);
508
+ autoLoadHandle = void 0;
452
509
  }
453
510
  return persister;
454
511
  },
455
- save: async (getTransactionChanges) => {
512
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
513
+ save: async (getChanges2) => {
456
514
  /* istanbul ignore else */
457
515
  if (loadSave != 1) {
458
516
  loadSave = 2;
@@ -461,7 +519,7 @@ const createCustomPersister = (
461
519
  }
462
520
  await persister.schedule(async () => {
463
521
  try {
464
- await setPersisted(store.getContent, getTransactionChanges);
522
+ await setPersisted(getContent, getChanges2);
465
523
  } catch (error) {
466
524
  /* istanbul ignore next */
467
525
  onIgnoredError?.(error);
@@ -473,21 +531,20 @@ const createCustomPersister = (
473
531
  },
474
532
  startAutoSave: async () => {
475
533
  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
- );
534
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
535
+ const changes = getChanges();
536
+ if (hasChanges(changes)) {
537
+ persister.save(() => changes);
538
+ }
539
+ });
484
540
  return persister;
485
541
  },
486
542
  stopAutoSave: () => {
487
- ifNotUndefined(listenerId, store.delListener);
488
- listenerId = void 0;
543
+ ifNotUndefined(autoSaveListenerId, store.delListener);
544
+ autoSaveListenerId = void 0;
489
545
  return persister;
490
546
  },
547
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
491
548
  schedule: async (...actions) => {
492
549
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
493
550
  await run();
@@ -496,10 +553,8 @@ const createCustomPersister = (
496
553
  getStore: () => store,
497
554
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
498
555
  getStats: () => ({loads, saves}),
556
+ ...extra,
499
557
  };
500
- if (getThing) {
501
- persister[getThing] = () => thing;
502
- }
503
558
  return objFreeze(persister);
504
559
  };
505
560
 
@@ -514,9 +569,10 @@ const createJsonSqlitePersister = (
514
569
  managedTableNames,
515
570
  db,
516
571
  getThing,
572
+ useOnConflict,
517
573
  ) => {
518
574
  const [refreshSchema, loadTable, saveTable, transaction] =
519
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
575
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
520
576
  const getPersisted = async () =>
521
577
  await transaction(async () => {
522
578
  await refreshSchema();
@@ -533,7 +589,9 @@ const createJsonSqlitePersister = (
533
589
  storeTableName,
534
590
  DEFAULT_ROW_ID_COLUMN_NAME,
535
591
  {
536
- [SINGLE_ROW_ID]: {[STORE_COLUMN]: jsonString(getContent() ?? null)},
592
+ [SINGLE_ROW_ID]: {
593
+ [STORE_COLUMN]: jsonStringWithMap(getContent() ?? null),
594
+ },
537
595
  },
538
596
  true,
539
597
  true,
@@ -546,7 +604,8 @@ const createJsonSqlitePersister = (
546
604
  addPersisterListener,
547
605
  delPersisterListener,
548
606
  onIgnoredError,
549
- [getThing, db],
607
+ false,
608
+ {[getThing]: () => db},
550
609
  db,
551
610
  );
552
611
  return persister;
@@ -566,9 +625,10 @@ const createTabularSqlitePersister = (
566
625
  managedTableNames,
567
626
  db,
568
627
  getThing,
628
+ useOnConflict,
569
629
  ) => {
570
630
  const [refreshSchema, loadTable, saveTable, transaction] =
571
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
631
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
572
632
  const saveTables = async (tables, partial) =>
573
633
  await promiseAll(
574
634
  mapMap(
@@ -577,12 +637,11 @@ const createTabularSqlitePersister = (
577
637
  [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
578
638
  tableId,
579
639
  ) => {
580
- const table = tables[tableId];
581
- if (!partial || table !== void 0) {
640
+ if (!partial || objHas(tables, tableId)) {
582
641
  await saveTable(
583
642
  tableName,
584
643
  rowIdColumnName,
585
- table,
644
+ tables[tableId],
586
645
  deleteEmptyColumns,
587
646
  deleteEmptyTable,
588
647
  partial,
@@ -632,11 +691,11 @@ const createTabularSqlitePersister = (
632
691
  ? [tables, values]
633
692
  : void 0;
634
693
  });
635
- const setPersisted = async (getContent, getTransactionChanges) =>
694
+ const setPersisted = async (getContent, getChanges) =>
636
695
  await transaction(async () => {
637
696
  await refreshSchema();
638
- if (!isUndefined(getTransactionChanges)) {
639
- const [tableChanges, valueChanges] = getTransactionChanges();
697
+ if (!isUndefined(getChanges)) {
698
+ const [tableChanges, valueChanges] = getChanges();
640
699
  await saveTables(tableChanges, true);
641
700
  await saveValues(valueChanges, true);
642
701
  } else {
@@ -652,7 +711,8 @@ const createTabularSqlitePersister = (
652
711
  addPersisterListener,
653
712
  delPersisterListener,
654
713
  onIgnoredError,
655
- [getThing, db],
714
+ false,
715
+ {[getThing]: () => db},
656
716
  db,
657
717
  );
658
718
  return persister;
@@ -689,7 +749,7 @@ const getDefaultedTabularConfigMap = (
689
749
  filter,
690
750
  ) => {
691
751
  const configMap = mapNew();
692
- objMap(configsObj, (configObj, id) => {
752
+ objToArray(configsObj, (configObj, id) => {
693
753
  const defaultedConfig = slice(
694
754
  objValues(
695
755
  objMerge(
@@ -764,6 +824,7 @@ const createSqlitePersister = (
764
824
  onIgnoredError,
765
825
  db,
766
826
  getThing = 'getDb',
827
+ useOnConflict,
767
828
  ) => {
768
829
  let dataVersion;
769
830
  let schemaVersion;
@@ -826,6 +887,7 @@ const createSqlitePersister = (
826
887
  collValues(managedTableNamesSet),
827
888
  db,
828
889
  getThing,
890
+ useOnConflict,
829
891
  );
830
892
  };
831
893