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