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