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