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
@@ -41,8 +41,7 @@ const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
41
41
 
42
42
  const object = Object;
43
43
  const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
44
- const objIds = object.keys;
45
- const objFreeze = object.freeze;
44
+ const objEntries = object.entries;
46
45
  const isObject = (obj) =>
47
46
  !isUndefined(obj) &&
48
47
  ifNotUndefined(
@@ -50,18 +49,20 @@ const isObject = (obj) =>
50
49
  (objPrototype) =>
51
50
  objPrototype == object.prototype ||
52
51
  isUndefined(getPrototypeOf(objPrototype)),
52
+ /* istanbul ignore next */
53
53
  () => true,
54
54
  );
55
+ const objIds = object.keys;
56
+ const objFreeze = object.freeze;
55
57
  const objNew = (entries = []) => object.fromEntries(entries);
56
58
  const objMerge = (...objs) => object.assign({}, ...objs);
57
- const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
58
- const objHas = (obj, id) => !isUndefined(objGet(obj, id));
59
+ const objHas = (obj, id) => id in obj;
59
60
  const objDel = (obj, id) => {
60
61
  delete obj[id];
61
62
  return obj;
62
63
  };
63
- const objMap = (obj, cb) =>
64
- arrayMap(object.entries(obj), ([id, value]) => cb(value, id));
64
+ const objToArray = (obj, cb) =>
65
+ arrayMap(objEntries(obj), ([id, value]) => cb(value, id));
65
66
  const objValues = (obj) => object.values(obj);
66
67
  const objSize = (obj) => size(objIds(obj));
67
68
  const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
@@ -75,14 +76,16 @@ const mapMap = (coll, cb) =>
75
76
  arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
76
77
  const mapSet = (map, key, value) =>
77
78
  isUndefined(value) ? (collDel(map, key), map) : map?.set(key, value);
78
- const mapEnsure = (map, key, getDefaultValue) => {
79
+ const mapEnsure = (map, key, getDefaultValue, hadExistingValue) => {
79
80
  if (!collHas(map, key)) {
80
81
  mapSet(map, key, getDefaultValue());
82
+ } else {
83
+ hadExistingValue?.(mapGet(map, key));
81
84
  }
82
85
  return mapGet(map, key);
83
86
  };
84
87
  const mapMatch = (map, obj, set, del = mapSet) => {
85
- objMap(obj, (value, id) => set(map, id, value));
88
+ objToArray(obj, (value, id) => set(map, id, value));
86
89
  mapForEach(map, (id) => (objHas(obj, id) ? 0 : del(map, id)));
87
90
  return map;
88
91
  };
@@ -95,10 +98,18 @@ const setNew = (entryOrEntries) =>
95
98
  );
96
99
  const setAdd = (set, value) => set?.add(value);
97
100
 
101
+ const TABLE = 'TABLE';
102
+ const ALTER_TABLE = 'ALTER ' + TABLE;
103
+ const DELETE_FROM = 'DELETE FROM';
98
104
  const SELECT_STAR_FROM = SELECT + '*FROM';
99
105
  const FROM_PRAGMA_TABLE = 'FROM pragma_table_';
100
106
  const WHERE = 'WHERE';
101
- const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
107
+ const getCommandFunctions = (
108
+ cmd,
109
+ managedTableNames,
110
+ onIgnoredError,
111
+ useOnConflict,
112
+ ) => {
102
113
  const schemaMap = mapNew();
103
114
  const canSelect = (tableName, rowIdColumnName) =>
104
115
  !isUndefined(mapGet(mapGet(schemaMap, tableName), rowIdColumnName));
@@ -111,7 +122,7 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
111
122
  await cmd(
112
123
  'SELECT name ' +
113
124
  FROM_PRAGMA_TABLE +
114
- `list WHERE schema='main'AND type='table'AND name IN(` +
125
+ `list WHERE schema='main'AND(type='table'OR type='view')AND name IN(` +
115
126
  getPlaceholders(managedTableNames) +
116
127
  `)ORDER BY name`,
117
128
  managedTableNames,
@@ -166,33 +177,38 @@ const getCommandFunctions = (cmd, managedTableNames, onIgnoredError) => {
166
177
  const saveTable = async (
167
178
  tableName,
168
179
  rowIdColumnName,
169
- table,
180
+ content,
170
181
  deleteEmptyColumns,
171
182
  deleteEmptyTable,
172
183
  partial = false,
173
184
  ) => {
174
- const tableCellIds = setNew();
175
- objMap(table ?? {}, (row) =>
176
- 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
+ ),
177
190
  );
178
- const tableColumnNames = collValues(tableCellIds);
191
+ const tableColumnNames = collValues(tableCellOrValueIds);
179
192
  if (
180
193
  !partial &&
181
194
  deleteEmptyTable &&
182
195
  arrayIsEmpty(tableColumnNames) &&
183
196
  collHas(schemaMap, tableName)
184
197
  ) {
185
- await cmd('DROP TABLE' + escapeId(tableName));
198
+ await cmd('DROP ' + TABLE + escapeId(tableName));
186
199
  mapSet(schemaMap, tableName);
187
200
  return;
188
201
  }
189
202
  if (!arrayIsEmpty(tableColumnNames) && !collHas(schemaMap, tableName)) {
190
203
  await cmd(
191
- `CREATE TABLE${escapeId(tableName)}(${escapeId(
192
- rowIdColumnName,
193
- )} 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
 
@@ -514,9 +569,11 @@ const createJsonSqlitePersister = (
514
569
  [storeTableName],
515
570
  managedTableNames,
516
571
  db,
572
+ getThing,
573
+ useOnConflict,
517
574
  ) => {
518
575
  const [refreshSchema, loadTable, saveTable, transaction] =
519
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
576
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
520
577
  const getPersisted = async () =>
521
578
  await transaction(async () => {
522
579
  await refreshSchema();
@@ -533,7 +590,9 @@ const createJsonSqlitePersister = (
533
590
  storeTableName,
534
591
  DEFAULT_ROW_ID_COLUMN_NAME,
535
592
  {
536
- [SINGLE_ROW_ID]: {[STORE_COLUMN]: jsonString(getContent() ?? null)},
593
+ [SINGLE_ROW_ID]: {
594
+ [STORE_COLUMN]: jsonStringWithMap(getContent() ?? null),
595
+ },
537
596
  },
538
597
  true,
539
598
  true,
@@ -546,7 +605,8 @@ const createJsonSqlitePersister = (
546
605
  addPersisterListener,
547
606
  delPersisterListener,
548
607
  onIgnoredError,
549
- ['getDb', db],
608
+ false,
609
+ {[getThing]: () => db},
550
610
  db,
551
611
  );
552
612
  return persister;
@@ -565,9 +625,11 @@ const createTabularSqlitePersister = (
565
625
  ],
566
626
  managedTableNames,
567
627
  db,
628
+ getThing,
629
+ useOnConflict,
568
630
  ) => {
569
631
  const [refreshSchema, loadTable, saveTable, transaction] =
570
- getCommandFunctions(cmd, managedTableNames, onIgnoredError);
632
+ getCommandFunctions(cmd, managedTableNames, onIgnoredError, useOnConflict);
571
633
  const saveTables = async (tables, partial) =>
572
634
  await promiseAll(
573
635
  mapMap(
@@ -576,12 +638,11 @@ const createTabularSqlitePersister = (
576
638
  [tableName, rowIdColumnName, deleteEmptyColumns, deleteEmptyTable],
577
639
  tableId,
578
640
  ) => {
579
- const table = tables[tableId];
580
- if (!partial || table !== void 0) {
641
+ if (!partial || objHas(tables, tableId)) {
581
642
  await saveTable(
582
643
  tableName,
583
644
  rowIdColumnName,
584
- table,
645
+ tables[tableId],
585
646
  deleteEmptyColumns,
586
647
  deleteEmptyTable,
587
648
  partial,
@@ -631,11 +692,11 @@ const createTabularSqlitePersister = (
631
692
  ? [tables, values]
632
693
  : void 0;
633
694
  });
634
- const setPersisted = async (getContent, getTransactionChanges) =>
695
+ const setPersisted = async (getContent, getChanges) =>
635
696
  await transaction(async () => {
636
697
  await refreshSchema();
637
- if (!isUndefined(getTransactionChanges)) {
638
- const [tableChanges, valueChanges] = getTransactionChanges();
698
+ if (!isUndefined(getChanges)) {
699
+ const [tableChanges, valueChanges] = getChanges();
639
700
  await saveTables(tableChanges, true);
640
701
  await saveValues(valueChanges, true);
641
702
  } else {
@@ -651,7 +712,8 @@ const createTabularSqlitePersister = (
651
712
  addPersisterListener,
652
713
  delPersisterListener,
653
714
  onIgnoredError,
654
- ['getDb', db],
715
+ false,
716
+ {[getThing]: () => db},
655
717
  db,
656
718
  );
657
719
  return persister;
@@ -688,7 +750,7 @@ const getDefaultedTabularConfigMap = (
688
750
  filter,
689
751
  ) => {
690
752
  const configMap = mapNew();
691
- objMap(configsObj, (configObj, id) => {
753
+ objToArray(configsObj, (configObj, id) => {
692
754
  const defaultedConfig = slice(
693
755
  objValues(
694
756
  objMerge(
@@ -762,6 +824,8 @@ const createSqlitePersister = (
762
824
  onSqlCommand,
763
825
  onIgnoredError,
764
826
  db,
827
+ getThing = 'getDb',
828
+ useOnConflict,
765
829
  ) => {
766
830
  let dataVersion;
767
831
  let schemaVersion;
@@ -823,6 +887,8 @@ const createSqlitePersister = (
823
887
  defaultedConfig,
824
888
  collValues(managedTableNamesSet),
825
889
  db,
890
+ getThing,
891
+ useOnConflict,
826
892
  );
827
893
  };
828
894