tinybase 5.0.0-beta.1 → 5.0.0-beta.11

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