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