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