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
@@ -43,8 +43,6 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
43
43
  const object = Object;
44
44
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
45
45
  const objEntries = object.entries;
46
- const objIds = object.keys;
47
- const objFreeze = object.freeze;
48
46
  const isObject = (obj) =>
49
47
  !isUndefined(obj) &&
50
48
  ifNotUndefined(
@@ -55,15 +53,16 @@ const isObject = (obj) =>
55
53
  /* istanbul ignore next */
56
54
  () => true,
57
55
  );
56
+ const objIds = object.keys;
57
+ const objFreeze = object.freeze;
58
58
  const objNew = (entries = []) => object.fromEntries(entries);
59
59
  const objMerge = (...objs) => object.assign({}, ...objs);
60
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
61
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
60
+ const objHas = (obj, id) => id in obj;
62
61
  const objDel = (obj, id) => {
63
62
  delete obj[id];
64
63
  return obj;
65
64
  };
66
- const objMap = (obj, cb) =>
65
+ const objToArray = (obj, cb) =>
67
66
  arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
68
67
  const objValues = (obj) => object.values(obj);
69
68
  const objSize = (obj) => size(objIds(obj));
@@ -78,14 +77,16 @@ const mapMap = (coll, cb) =>
78
77
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
79
78
  const mapSet = (map, key, value) =>
80
79
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
81
- const mapEnsure = (map, key, getDefaultValue) => {
80
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
82
81
  if (!collHas(map, key)) {
83
82
  mapSet(map, key, getDefaultValue());
83
+ } else {
84
+ hadExistingValue?.(mapGet(map, key));
84
85
  }
85
86
  return mapGet(map, key);
86
87
  };
87
88
  const mapMatch = (map, obj, set, del = mapSet) => {
88
- objMap(obj, (value, id) => set(map, id, value));
89
+ objToArray(obj, (value, id) => set(map, id, value));
89
90
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
90
91
  return map;
91
92
  };
@@ -98,10 +99,18 @@ const setNew = (entryOrEntries) =>
98
99
  );
99
100
  const setAdd = (set, value) => set?.add(value);
100
101
 
102
+ const TABLE = 'TABLE';
103
+ const ALTER_TABLE = 'ALTER ' + TABLE;
104
+ const DELETE_FROM = 'DELETE FROM';
101
105
  const SELECT_STAR_FROM = SELECT + '*FROM';
102
106
  const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
103
107
  const WHERE = 'WHERE';
104
- const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
108
+ const getCommandFunctions = (
109
+ cmd,
110
+ managedTableNames,
111
+ onIgnoredError,
112
+ useOnConflict,
113
+ ) => {
105
114
  const schemaMap = mapNew();
106
115
  const canSelect = (tableName, rowIdColumnName) =>
107
116
  !isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
@@ -114,7 +123,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
114
123
  await cmd(
115
124
  'SELECT name ' +
116
125
  FROM_PRAGMA_TABLE +
117
- `list WHERE schema='main'AND type='table'AND name IN(` +
126
+ `list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
118
127
  getPlaceholders(managedTableNames) +
119
128
  `)ORDER BY name`,
120
129
  managedTableNames,
@@ -169,31 +178,38 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
169
178
  const saveTable = async (
170
179
  tableName,
171
180
  rowIdColumnName,
172
- table,
181
+ content,
173
182
  deleteEmptyColumns,
174
183
  deleteEmptyTable,
175
184
  partial = false,
176
185
  ) => {
177
- const tableCellIds = setNew();
178
- objMap(table ?? {}, (row) =>
179
- arrayMap(objIds(row ?? {}), (cellId) => setAdd(tableCellIds, cellId)),
186
+ const tableCellOrValueIds = setNew();
187
+ objToArray(content ?? {}, (contentRow) =>
188
+ arrayMap(objIds(contentRow ?? {}), (cellOrValueId) =>
189
+ setAdd(tableCellOrValueIds, cellOrValueId),
190
+ ),
180
191
  );
181
- const tableColumnNames = collValues(tableCellIds);
192
+ const tableColumnNames = collValues(tableCellOrValueIds);
182
193
  if (
183
194
  !partial &&
184
195
  deleteEmptyTable &&
185
196
  arrayIsEmpty(tableColumnNames) &&
186
197
  collHas(schemaMap, tableName)
187
198
  ) {
188
- await cmd('DROP TABLE' + escapeId(tableName));
199
+ await cmd('DROP ' + TABLE + escapeId(tableName));
189
200
  mapSet(schemaMap, tableName);
190
201
  return;
191
202
  }
192
203
  if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
193
204
  await cmd(
194
- `CREATE TABLE${escapeId(tableName)}(${escapeId(rowIdColumnName)} PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
195
- arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
196
- )});`,
205
+ `CREATE ` +
206
+ TABLE +
207
+ escapeId(tableName) +
208
+ '(' +
209
+ escapeId(rowIdColumnName) +
210
+ ` PRIMARY KEY ON CONFLICT REPLACE${arrayJoin(
211
+ arrayMap(tableColumnNames, (cellId) => COMMA + escapeId(cellId)),
212
+ )});`,
197
213
  );
198
214
  mapSet(
199
215
  schemaMap,
@@ -213,7 +229,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
213
229
  ...arrayMap(tableColumnNames, async (columnName) => {
214
230
  if (!collDel(columnNamesAccountedFor, columnName)) {
215
231
  await cmd(
216
- `ALTER TABLE${escapeId(tableName)}ADD${escapeId(columnName)}`,
232
+ ALTER_TABLE + escapeId(tableName) + 'ADD' + escapeId(columnName),
217
233
  );
218
234
  mapSet(tableSchemaMap, columnName, EMPTY_STRING);
219
235
  }
@@ -224,9 +240,10 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
224
240
  async (columnName) => {
225
241
  if (columnName != rowIdColumnName) {
226
242
  await cmd(
227
- `ALTER TABLE${escapeId(tableName)}DROP${escapeId(
228
- columnName,
229
- )}`,
243
+ ALTER_TABLE +
244
+ escapeId(tableName) +
245
+ 'DROP' +
246
+ escapeId(columnName),
230
247
  );
231
248
  mapSet(tableSchemaMap, columnName);
232
249
  }
@@ -236,14 +253,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
236
253
  ]);
237
254
  }
238
255
  if (partial) {
239
- if (isUndefined(table)) {
240
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
256
+ if (isUndefined(content)) {
257
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
241
258
  } else {
242
259
  await promiseAll(
243
- objMap(table, async (row, rowId) => {
260
+ objToArray(content, async (row, rowId) => {
244
261
  if (isUndefined(row)) {
245
262
  await cmd(
246
- 'DELETE FROM' +
263
+ DELETE_FROM +
247
264
  escapeId(tableName) +
248
265
  WHERE +
249
266
  escapeId(rowIdColumnName) +
@@ -251,10 +268,14 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
251
268
  [rowId],
252
269
  );
253
270
  } else if (!arrayIsEmpty(tableColumnNames)) {
254
- await upsert(cmd, tableName, rowIdColumnName, objIds(row), [
255
- rowId,
256
- ...objValues(row),
257
- ]);
271
+ await upsert(
272
+ cmd,
273
+ tableName,
274
+ rowIdColumnName,
275
+ objIds(row),
276
+ [rowId, ...objValues(row)],
277
+ useOnConflict,
278
+ );
258
279
  }
259
280
  }),
260
281
  );
@@ -267,7 +288,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
267
288
  );
268
289
  const args = [];
269
290
  const deleteRowIds = [];
270
- objMap(table ?? {}, (row, rowId) => {
291
+ objToArray(content ?? {}, (row, rowId) => {
271
292
  arrayPush(
272
293
  args,
273
294
  rowId,
@@ -281,9 +302,10 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
281
302
  rowIdColumnName,
282
303
  changingColumnNames,
283
304
  args,
305
+ useOnConflict,
284
306
  );
285
307
  await cmd(
286
- 'DELETE FROM' +
308
+ DELETE_FROM +
287
309
  escapeId(tableName) +
288
310
  WHERE +
289
311
  escapeId(rowIdColumnName) +
@@ -293,7 +315,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
293
315
  deleteRowIds,
294
316
  );
295
317
  } else if (collHas(schemaMap, tableName)) {
296
- await cmd('DELETE FROM' + escapeId(tableName) + 'WHERE 1');
318
+ await cmd(DELETE_FROM + escapeId(tableName) + WHERE + ' 1');
297
319
  }
298
320
  }
299
321
  };
@@ -316,9 +338,12 @@ const upsert = async (
316
338
  rowIdColumnName,
317
339
  changingColumnNames,
318
340
  args,
341
+ useOnConflict = true,
319
342
  ) =>
320
343
  await cmd(
321
- 'INSERT INTO' +
344
+ 'INSERT ' +
345
+ (useOnConflict ? EMPTY_STRING : 'OR REPLACE ') +
346
+ 'INTO' +
322
347
  escapeId(tableName) +
323
348
  '(' +
324
349
  escapeId(rowIdColumnName) +
@@ -336,18 +361,20 @@ const upsert = async (
336
361
  ),
337
362
  1,
338
363
  ) +
339
- 'ON CONFLICT(' +
340
- escapeId(rowIdColumnName) +
341
- ')DO UPDATE SET' +
342
- arrayJoin(
343
- arrayMap(
344
- changingColumnNames,
345
- (columnName) =>
346
- escapeId(columnName) + '=excluded.' + escapeId(columnName),
347
- ),
348
- COMMA,
349
- ),
350
- args,
364
+ (useOnConflict
365
+ ? 'ON CONFLICT(' +
366
+ escapeId(rowIdColumnName) +
367
+ ')DO UPDATE SET' +
368
+ arrayJoin(
369
+ arrayMap(
370
+ changingColumnNames,
371
+ (columnName) =>
372
+ escapeId(columnName) + '=excluded.' + escapeId(columnName),
373
+ ),
374
+ COMMA,
375
+ )
376
+ : EMPTY_STRING),
377
+ arrayMap(args, (arg) => arg ?? null),
351
378
  );
352
379
  const getPlaceholders = (array) =>
353
380
  arrayJoin(
@@ -355,7 +382,7 @@ const getPlaceholders = (array) =>
355
382
  COMMA,
356
383
  );
357
384
 
358
- const jsonString = (obj) =>
385
+ const jsonStringWithMap = (obj) =>
359
386
  JSON.stringify(obj, (_key, value) =>
360
387
  isInstanceOf(value, Map) ? object.fromEntries([...value]) : value,
361
388
  );
@@ -363,6 +390,24 @@ const jsonParse = JSON.parse;
363
390
 
364
391
  const scheduleRunning = mapNew();
365
392
  const scheduleActions = mapNew();
393
+ const getStoreFunctions = (supportsMergeableStore, store) =>
394
+ !supportsMergeableStore || isUndefined(store.getMergeableContent)
395
+ ? [
396
+ 0,
397
+ store.getContent,
398
+ store.getTransactionChanges,
399
+ ([changedTables, changedValues]) =>
400
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
401
+ store.setContent,
402
+ ]
403
+ : [
404
+ 1,
405
+ store.getMergeableContent,
406
+ store.getTransactionMergeableChanges,
407
+ ([[changedTables], [changedValues]]) =>
408
+ !objIsEmpty(changedTables) || !objIsEmpty(changedValues),
409
+ store.setDefaultContent,
410
+ ];
366
411
  const createCustomPersister = (
367
412
  store,
368
413
  getPersisted,
@@ -370,18 +415,25 @@ const createCustomPersister = (
370
415
  addPersisterListener,
371
416
  delPersisterListener,
372
417
  onIgnoredError,
373
- [getThing, thing] = [],
418
+ supportsMergeableStore,
419
+ extra = {},
374
420
  scheduleId = [],
375
421
  ) => {
376
- let listenerId;
377
422
  let loadSave = 0;
378
423
  let loads = 0;
379
424
  let saves = 0;
380
- let listening = 0;
381
425
  let action;
382
- let listeningHandle;
426
+ let autoLoadHandle;
427
+ let autoSaveListenerId;
383
428
  mapEnsure(scheduleRunning, scheduleId, () => 0);
384
429
  mapEnsure(scheduleActions, scheduleId, () => []);
430
+ const [
431
+ isMergeableStore,
432
+ getContent,
433
+ getChanges,
434
+ hasChanges,
435
+ setDefaultContent,
436
+ ] = getStoreFunctions(supportsMergeableStore, store);
385
437
  const run = async () => {
386
438
  /* istanbul ignore else */
387
439
  if (!mapGet(scheduleRunning, scheduleId)) {
@@ -413,48 +465,54 @@ const createCustomPersister = (
413
465
  }
414
466
  return persister;
415
467
  };
468
+ const setContentOrChanges = (contentOrChanges) => {
469
+ (isMergeableStore && isArray(contentOrChanges?.[0])
470
+ ? contentOrChanges?.[2] === 1
471
+ ? store.applyMergeableChanges
472
+ : store.setMergeableContent
473
+ : contentOrChanges?.[2] === 1
474
+ ? store.applyChanges
475
+ : store.setContent)(contentOrChanges);
476
+ };
416
477
  const persister = {
417
- load: async (initialTables, initialValues) =>
478
+ load: async (initialContent) =>
418
479
  await loadLock(async () => {
419
480
  try {
420
- store.setContent(await getPersisted());
421
- } catch {
422
- store.setContent([initialTables, initialValues]);
481
+ setContentOrChanges(await getPersisted());
482
+ } catch (error) {
483
+ onIgnoredError?.(error);
484
+ if (initialContent) {
485
+ setDefaultContent(initialContent);
486
+ }
423
487
  }
424
488
  }),
425
- startAutoLoad: async (initialTables = {}, initialValues = {}) => {
426
- persister.stopAutoLoad();
427
- await persister.load(initialTables, initialValues);
428
- listening = 1;
429
- listeningHandle = addPersisterListener(
430
- async (getContent, getTransactionChanges) => {
431
- if (getTransactionChanges) {
432
- const transactionChanges = getTransactionChanges();
433
- await loadLock(async () =>
434
- store.setTransactionChanges(transactionChanges),
435
- );
436
- } else {
437
- await loadLock(async () => {
438
- try {
439
- store.setContent(getContent?.() ?? (await getPersisted()));
440
- } catch (error) {
441
- onIgnoredError?.(error);
442
- }
443
- });
444
- }
489
+ startAutoLoad: async (initialContent) => {
490
+ await persister.stopAutoLoad().load(initialContent);
491
+ autoLoadHandle = addPersisterListener(
492
+ async (getContent2, getChanges2) => {
493
+ const changes = getChanges2?.();
494
+ await loadLock(async () => {
495
+ try {
496
+ setContentOrChanges(
497
+ changes ?? getContent2?.() ?? (await getPersisted()),
498
+ );
499
+ } catch (error) {
500
+ onIgnoredError?.(error);
501
+ }
502
+ });
445
503
  },
446
504
  );
447
505
  return persister;
448
506
  },
449
507
  stopAutoLoad: () => {
450
- if (listening) {
451
- delPersisterListener(listeningHandle);
452
- listeningHandle = void 0;
453
- listening = 0;
508
+ if (autoLoadHandle) {
509
+ delPersisterListener(autoLoadHandle);
510
+ autoLoadHandle = void 0;
454
511
  }
455
512
  return persister;
456
513
  },
457
- save: async (getTransactionChanges) => {
514
+ isAutoLoading: () => !isUndefined(autoLoadHandle),
515
+ save: async (getChanges2) => {
458
516
  /* istanbul ignore else */
459
517
  if (loadSave != 1) {
460
518
  loadSave = 2;
@@ -463,7 +521,7 @@ const createCustomPersister = (
463
521
  }
464
522
  await persister.schedule(async () => {
465
523
  try {
466
- await setPersisted(store.getContent, getTransactionChanges);
524
+ await setPersisted(getContent, getChanges2);
467
525
  } catch (error) {
468
526
  /* istanbul ignore next */
469
527
  onIgnoredError?.(error);
@@ -475,21 +533,20 @@ const createCustomPersister = (
475
533
  },
476
534
  startAutoSave: async () => {
477
535
  await persister.stopAutoSave().save();
478
- listenerId = store.addDidFinishTransactionListener(
479
- (_store, getTransactionChanges) => {
480
- const [tableChanges, valueChanges] = getTransactionChanges();
481
- if (!objIsEmpty(tableChanges) || !objIsEmpty(valueChanges)) {
482
- persister.save(() => [tableChanges, valueChanges]);
483
- }
484
- },
485
- );
536
+ autoSaveListenerId = store.addDidFinishTransactionListener(() => {
537
+ const changes = getChanges();
538
+ if (hasChanges(changes)) {
539
+ persister.save(() => changes);
540
+ }
541
+ });
486
542
  return persister;
487
543
  },
488
544
  stopAutoSave: () => {
489
- ifNotUndefined(listenerId, store.delListener);
490
- listenerId = void 0;
545
+ ifNotUndefined(autoSaveListenerId, store.delListener);
546
+ autoSaveListenerId = void 0;
491
547
  return persister;
492
548
  },
549
+ isAutoSaving: () => !isUndefined(autoSaveListenerId),
493
550
  schedule: async (...actions) => {
494
551
  arrayPush(mapGet(scheduleActions, scheduleId), ...actions);
495
552
  await run();
@@ -498,10 +555,8 @@ const createCustomPersister = (
498
555
  getStore: () => store,
499
556
  destroy: () => persister.stopAutoLoad().stopAutoSave(),
500
557
  getStats: () => ({loads, saves}),
558
+ ...extra,
501
559
  };
502
- if (getThing) {
503
- persister[getThing] = () => thing;
504
- }
505
560
  return objFreeze(persister);
506
561
  };
507
562
 
@@ -516,9 +571,10 @@ const createJsonSqlitePersister = (
516
571
  managedTableNames,
517
572
  db,
518
573
  getThing,
574
+ useOnConflict,
519
575
  ) => {
520
576
  const [refreshSchema, loadTable, saveTable, transaction] =
521
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
577
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
522
578
  const getPersisted = async () =>
523
579
  await transaction(async () => {
524
580
  await refreshSchema();
@@ -535,7 +591,9 @@ const createJsonSqlitePersister = (
535
591
  storeTableName,
536
592
  DEFAULT_ROW_ID_COLUMN_NAME,
537
593
  {
538
- [SINGLE_ROW_ID]: {[STORE_COLUMN]: jsonString(getContent() ?? null)},
594
+ [SINGLE_ROW_ID]: {
595
+ [STORE_COLUMN]: jsonStringWithMap(getContent() ?? null),
596
+ },
539
597
  },
540
598
  true,
541
599
  true,
@@ -548,7 +606,8 @@ const createJsonSqlitePersister = (
548
606
  addPersisterListener,
549
607
  delPersisterListener,
550
608
  onIgnoredError,
551
- [getThing, db],
609
+ false,
610
+ {[getThing]: () => db},
552
611
  db,
553
612
  );
554
613
  return persister;
@@ -568,9 +627,10 @@ const createTabularSqlitePersister = (
568
627
  managedTableNames,
569
628
  db,
570
629
  getThing,
630
+ useOnConflict,
571
631
  ) => {
572
632
  const [refreshSchema, loadTable, saveTable, transaction] =
573
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
633
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
574
634
  const saveTables = async (tables, partial) =>
575
635
  await promiseAll(
576
636
  mapMap(
@@ -579,12 +639,11 @@ const createTabularSqlitePersister = (
579
639
  [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
580
640
  tableId,
581
641
  ) => {
582
- const table = tables[tableId];
583
- if (!partial || table !== void 0) {
642
+ if (!partial || objHas(tables, tableId)) {
584
643
  await saveTable(
585
644
  tableName,
586
645
  rowIdColumnName,
587
- table,
646
+ tables[tableId],
588
647
  deleteEmptyColumns,
589
648
  deleteEmptyTable,
590
649
  partial,
@@ -634,11 +693,11 @@ const createTabularSqlitePersister = (
634
693
  ? [tables, values]
635
694
  : void 0;
636
695
  });
637
- const setPersisted = async (getContent, getTransactionChanges) =>
696
+ const setPersisted = async (getContent, getChanges) =>
638
697
  await transaction(async () => {
639
698
  await refreshSchema();
640
- if (!isUndefined(getTransactionChanges)) {
641
- const [tableChanges, valueChanges] = getTransactionChanges();
699
+ if (!isUndefined(getChanges)) {
700
+ const [tableChanges, valueChanges] = getChanges();
642
701
  await saveTables(tableChanges, true);
643
702
  await saveValues(valueChanges, true);
644
703
  } else {
@@ -654,7 +713,8 @@ const createTabularSqlitePersister = (
654
713
  addPersisterListener,
655
714
  delPersisterListener,
656
715
  onIgnoredError,
657
- [getThing, db],
716
+ false,
717
+ {[getThing]: () => db},
658
718
  db,
659
719
  );
660
720
  return persister;
@@ -691,7 +751,7 @@ const getDefaultedTabularConfigMap = (
691
751
  filter,
692
752
  ) => {
693
753
  const configMap = mapNew();
694
- objMap(configsObj, (configObj, id) => {
754
+ objToArray(configsObj, (configObj, id) => {
695
755
  const defaultedConfig = slice(
696
756
  objValues(
697
757
  objMerge(
@@ -766,6 +826,7 @@ const createSqlitePersister = (
766
826
  onIgnoredError,
767
827
  db,
768
828
  getThing = 'getDb',
829
+ useOnConflict,
769
830
  ) => {
770
831
  let dataVersion;
771
832
  let schemaVersion;
@@ -828,6 +889,7 @@ const createSqlitePersister = (
828
889
  collValues(managedTableNamesSet),
829
890
  db,
830
891
  getThing,
892
+ useOnConflict,
831
893
  );
832
894
  };
833
895